<?php
/** * Created by PhpStorm. * 平台团购活动商品同步 * User: LiangDaguang * Date: 2016/1/14 * Time: 13:50 */
define('IN_ECS', true);require('includes/init.php');!class_exists('RuleDb') && require('./includes/lib_RuleDb.php');

class platformGoodsSynchronize{    private $db;    // @写入层 RuleDb对象    private $tool;  // @工具类 Tools 对象    private $smarty; // 模板对象    /*商品审核状态*/    const   UA_STATUS = 0;            //商品未审核    const   SU_STATUS = 1;            //审核通过    const   RS_STATUS = 2;            //审核拒绝    const   MD_STATUS = 3;            //返回修改    const   CS_STATUS = 4;            //已关闭    const   RE_STATUS = 5;            //重新报名    const   RC_STATUS = 6;            //已撤销    /*审核结果*/    const   PART_AUDIT  = 2;            //部分审核    const   API_SUCCESS = 0;            //接口请求成功    const   API_FALSE   = 1;            //接口请求失败    /*团购信息*/    const   GROUP_STATUS = 1;             //通过过去的团购信息为启用状态    /*商品审核操作*/    private $audit_result = array(        '0' => '商品审核',        '1' => '审核通过',        '2' => '审核拒绝',        '3' => '返回修改',        '4' => '关闭团购商品',    );    /* 活动状态 */    const NO_AUDIT     = 0;   //未审核状态    const AUDIT_PASS   = 1;   //审核通过    const AUDIT_REFUSE = 2;   //审核拒绝    const AUDIT_COLSE  = 3;   //已关闭    const AUDITING     = 4;   //审核中    /*API请求返回提示结果*/    private $api_result = array(        '0' => '请求失败!',        '1' => '全部审核成功',        '2' => '部分审核成功',        '3' => '这些商品已经审核过啦!!',        '4' => '本次商品%s了活动编号为:%s的%s的商品',        '5' => '活动已经开始,不能再对商品进行审核',    );    /*对数据的操作*/    private $db_option = array(        '0' => 'insert',        '1' => 'update',        '2' => 'delete',    );    /**     * 本类操作表     * @type array     */    private $db_name = array(        '0' => 'ecs_platform_activity_goods',   //平台团购商品表        '1' => 'ecs_group_buy',                 //团购信息表        '2' => 'ecs_group_buy_price',           //团购梯度价格表        '3' => 'ecs_group_apply',               //团购报名表        '4' => 'ecs_platform_activity',         //平台活动表        '5' => 'ecs_platform_activity_extend'   //平台活动扩展表 其他信息    );    // 可执行的act列表    private $action_list = array(        'main',             //入口        'create',           //发起活动        'ajaxActivity',     //异步提交活动数据        'detail',           //查看活动        'editActivity',     //编辑活动        'ajaxGoods',        //异步提交活动商品信息及其他设置信息        'auditGoods',       //活动商品审核        'auditAccess',      //商品审核通过        'auditRefuse',      //商品审核拒绝        'query',            //商品审核分页        'getShopList',      //ajax请求        'auditActivityToWorkStation',  //审核提交到工作站        'closeActivity',   //关闭活动    );    private $action;  // 当前操作的action    private $param;       // 当前传入的参数    private $page_param;      //分页信息    //搜索项    private $search_field = array(        'n_goods_name', // 商品名        'n_goods_sn', // 商品编号        'n_shop_id', // 店铺名        'n_goods_id', // 商品id        'n_audit_status', // 审核状态        'n_sign_time_start', // 报名开始时间/审核页面申报开始时间        'n_sign_time_end' // 报名结束时间/审核页面申报结束时间    );    /**     * 商品审核状态 0未审核;1审核通过;2审核拒绝;3返回修改;4已关闭;5再次申请     */    private $audit_status_list = array(        '0' => '未审核',        '1' => '审核通过',        '2' => '审核拒绝',        '3' => '返回修改',        '4' => '已关闭',        '5' => '再次申请',    );

    public function __construct()    {        $this->db = new RuleDb();        global $smarty;        $this->smarty = $smarty;        $this->tool = new Tools();        admin_priv('platformactivity'); //权限控制        //非法访问        if (!$this->getAction()) {            $this->handleMsg('非法访问');        }        //获取传入的参数值        $this->param = $this->getParam();        //页面分页信息        $this->page_param = page_and_size($this->param['page']);        $act = $this->action;        $this->$act();    }

    /**     * 获取传入的参数值     */    private function getParam()    {        return $_REQUEST;    }

    /**     * 审核通过接口     */    private function auditAccess()    {        //请求条件解析        $audit_res = self::API_SUCCESS;     //默认是需要全部审核        $audit_smg = $this->api_result['1'];      //全部通过        $where = $this->auditParam($this->param);        //默认是部分 现在之后部分审核了        //查询商品信息        //传过来的商品总数        $audit_count = $where['limit_end'];        $goods_arr = $this->getAuditGoods($where);  //需要审核的商品        //需要审核的商品总数        $need_audit_cont = count($goods_arr['goods_info']);        if ($audit_count > $need_audit_cont) {            $audit_res = self::PART_AUDIT; //只部分需要审核            $audit_smg = $this->api_result['2'];        }        //查询团购表中已经存在的商品        //查看是否经常存在        $group_goods = $this->getGroupGoods($goods_arr['goods_id']);        //开始同步数据到团购活动表里面        $syn_goods = array();   //同步返回结果

        /**         * 同步部分在循环里, 同步完成之后,在修改平台活动商品状态是在同步之后在置为审核通过         * 1.同步数据到团购表里,         * 2.将平台活动审核状态改为审核通过         *         */        foreach ($goods_arr['goods_id'] as $key => $val) {            //审核通过            $syn_goods[$key]['audit_status'] = self::SU_STATUS;            if (in_array($val, $group_goods['goods_ids'])) {                //更新的数据                $grade_price = array();                $syn_goods[$key]['goods_id'] = $val;                $syn_goods[$key]['group_buy_id'] = $group_goods['id'][$key];                $syn_goods[$key]['audit_time'] = time();    //审核时间                $syn_goods[$key]['audit_user_id'] = $_SESSION['admin_id'];                $update_goods = $goods_arr['goods_info'][$key];                //这里是更新哈 不能做批量操作                $update_where = array(                    array(                        'key' => 'goods_id',                        'op' => '=',                        'value' => $val                    )                );                $res =                    $this->db->query($this->db_name['1'], $update_goods, $this->db_option['1'], $update_where);                //这里留着二期做梯度之类的吧                if (($res['error'] === self::API_SUCCESS)                ) {                    //TODO                    //梯度表内容设置                    foreach ($goods_arr['grade_price'][$key] as $k => $v) {                        $grade_price[$k] = array(                            'apply_price' => $v['apply_price'],                            'apply_count' => $v['apply_count'],                            'group_buy_id' => $group_goods['id'][$key]                        );                    }                    //重置报名购买记录                    $this->db->query('ecs_groupbuy_userlog',array('no_count'=>1),$this->db_option['1'],$update_where);                    //清空原来的梯度价格和报名申请请 重新写梯度价                    //暂时只删除梯度价格表                    $delete_price_where = array(                        array(                            'key' => 'group_buy_id',                            'op' => '=',                            'value' => $group_goods['id'][$key]                        )                    );                    $res =                        $this->db->query($this->db_name['2'], array(), $this->db_option['2'], $delete_price_where);                    if ($res['error'] === self::API_SUCCESS &&                        ($goods_arr['goods_info'][$key]['is_need_apply'])) {                        //重新设置梯度价格                        $this->db->batchInsert($this->db_name['2'], $grade_price);                        //将相同商品的报名记录都设为无效                        $update_apply = array('is_novalid' => 1);                        $update_where = array(                            array(                                'key' => 'goods_id',                                'op' => '=',                                'value' => $val                            )                        );                        $this->db->query($this->db_name['3'], $update_apply, $this->db_option['1'], $update_where);                    }                }            } else {                //只能新增了咯                $syn_goods[$key] =                    $this->synchronizeGoods($goods_arr['goods_info'][$key], $this->db_option['0'], $goods_arr['grade_price'][$key]);            }        }        $ag_update_where = array(            array(                'key' => 'activity_id',                'op' => '=',                'value' => $this->param['activity_id']            )        );        $this->updateActivityGoods($syn_goods, self::SU_STATUS, $ag_update_where);        $this->output($audit_res, $audit_smg);    }

    /**     * 审核拒绝接口     */    private function auditRefuse()    {        //参数信息        $refuse_goods = array();    //拒绝审核的商品        $where = $this->auditParam($this->param);        //特殊权限的人,可以对应审核通过的商品进行关闭        //TODO        $goods_arr = $this->getAuditGoods($where);  //需要审核的商品        //默认是拒绝类型        switch ($this->param['type']) {            case 'modify':  //返回修改                $type = self::MD_STATUS;                break;            case 'close':   //关闭---特殊人才有的权利                $type = self::CS_STATUS;                break;            default:    //审核拒绝                $type = self::RS_STATUS;        }        foreach ($goods_arr['goods_id'] as $key => $val) {            $refuse_goods[$val] = array(                'goods_id' => $val,     //审核的商品ID                'audit_status' => $type,//审核状态                'audit_time' => time(),                'audit_user_id' => (int)$_SESSION['admin_id'],                //拒绝原因                'refused_resason' => htmlspecialchars(trim($this->param['reason']))            );        }        //更新条件        $ag_update_where = array(            array(                'key' => 'activity_id',                'op' => '=',                'value' => $this->param['activity_id']            )        );        $this->updateActivityGoods($refuse_goods, $type, $ag_update_where);        $this->output(self::API_SUCCESS, $this->api_result['1']);    }

    /**     * 商品审核参数构造方法     * @param $param    提交参数     * @return array    组装的参数     */    private function auditParam($param)    {        //审核通过的类型 1.部分; 2.全部        $where = array(            'limit_start' => $this->page_param['start'],            'limit_end' => count(explode(',', $param['goods_ids'])),    //总条数            'n_activity_id' => $param['activity_id'],            //未审核或重新报名            'n_audit_status' => self::UA_STATUS . ',' . self::RE_STATUS,            'n_goods_id' => $param['goods_ids'],        );        return $where;    }

    /**     * 同步数据到团购表 新增部分     * @param array  $goods_info 同步的内容     * @param string $type       同步类型 新增(insert)|更新(update)     * @param array  $append     附加信息 ==>梯度价格     * @return array            返回的团购表的主键ID和商品ID     */    private function synchronizeGoods($goods_info, $type, $append = array())    {        $grade_price = array();        if (!empty($goods_info)) {            $res = $this->db->query($this->db_name['1'], $goods_info, $type);            //有设置梯度价格的 is_need_apply : 1            if ($goods_info['is_need_apply']) {                //设置团购主键 group_buy_id                foreach ($append as $key => $value) {                    $grade_price[$key] = array(                        'apply_price' => $value['apply_price'],                        'apply_count' => $value['apply_count'],                        'group_buy_id' => $res['msg'],                    );                }                $this->db->batchInsert($this->db_name['2'], $grade_price);            }            //商品ID            $syn_goods['goods_id'] = $goods_info['goods_id'];  //同步团购ID            $syn_goods['group_buy_id'] = $res['msg'];            $syn_goods['audit_time'] = time();            $syn_goods['audit_user_id'] = $_SESSION['admin_id'];            $syn_goods['audit_status'] = self::SU_STATUS;            //TODO其他相关表            //TODO        }        return $syn_goods;    }

    /**     * 更新活动商品表     * @param array  $data   要更新的字段     * @param string $type   更新的类型 1:审核通过; 2:审核拒绝     * @param        $where  条件     */    private function updateActivityGoods($data = array(), $type = '', $where)    {        //操作类型        $option_res = $this->audit_result[$type];        //本次活动        $act_id = $this->param['activity_id'];        $goods_id = '';        foreach ($data as $key => $val) {            //这里可以修改的哈!!!!            $syn_where = array_merge($where, array(                array(                    'key' => 'goods_id',                    'op' => '=',                    'value' => $val['goods_id']                )            ));            $res =                $this->db->query($this->db_name['0'], $val, $this->db_option['1'], $syn_where);            $goods_id .= $key . ',';            //操作有误            if ($res['error'] !== self::API_SUCCESS) {                $this->output(self::API_FALSE, $this->api_result['0']);            }        }        $str = sprintf($this->api_result['4'], $option_res, $act_id, $goods_id);        $this->writeActivityLog($this->audit_result['0'], $option_res, $str, $act_id);    }

    /**     * 查询可以同步到团购表的商品     * @param $where    条件     * @return array    同步数据     */    private function getAuditGoods($where)    {        $audit_info = array();  //审核商品信息表        $group_goods = array(); //要同步过去的字段信息        $grade_price = array(); //梯度价格表        $goods_arr =            $this->tool->callRule('PAct_HUV1_ActivitygoodsInfolist', $where);        //如果没有需要审核的就只返回去        //TODO        //查询活动信息        $activity_info = $this->getActivityContent($this->param['activity_id']);        if (empty($goods_arr['msg'])) {            //已经审核过了            $this->output(self::API_FALSE, $this->api_result['3']);        } elseif ($goods_arr['error'] !== self::API_SUCCESS) {            //请求规则出错            $this->handleMsg(self::API_FALSE, $this->api_result['0']);        } elseif ($activity_info['start_time'] <= time()) {            //活动已经开始、不能再在对商品进行审核            $this->output(self::API_FALSE, $this->api_result['5']);        }        foreach ($goods_arr['msg'] as $key => $val) {            $audit_info['goods_id'][$val['goods_id']] = $val['goods_id'];            //团购表            $group_goods[$val['goods_id']]['goods_id'] = $val['goods_id'];            //活动开始时间            $group_goods[$val['goods_id']]['start_time'] =                $activity_info['start_time'];            //活动结束时间            $group_goods[$val['goods_id']]['end_time'] =                $activity_info['end_time'];            //活动延期时间            $group_goods[$val['goods_id']]['delay_time'] =                $activity_info['is_delay'] ? $activity_info['delay_time'] : 0;

            //团购价格            $group_goods[$val['goods_id']]['group_price'] =                $val['activity_price'];            //团购限购数量            $group_goods[$val['goods_id']]['limit_number'] =                $val['activity_goods_num'];            //用户最多购买数            $group_goods[$val['goods_id']]['user_limit'] = $val['limit_number'];            //录入日期            $group_goods[$val['goods_id']]['date'] = time();            //状态为开启            $group_goods[$val['goods_id']]['state'] = self::GROUP_STATUS;            //是否免运费和服务费            $group_goods[$val['goods_id']]['is_free_ship_service'] =                $val['is_free_shipping'];            //支付比例            $group_goods[$val['goods_id']]['pay_percent'] = '';            //已报名人数            $group_goods[$val['goods_id']]['already_number'] = '';            //团购类型 1 正常团购;2 天天降价            $group_goods[$val['goods_id']]['active_type'] = 1;            //调价金额            $group_goods[$val['goods_id']]['adjust_price'] = '';            //最低调价金额            $group_goods[$val['goods_id']]['min_adjust_price'] = '';            //支付比例为0            $group_goods[$val['goods_id']]['pay_percent1'] = '';            //是否需要报名申请 有梯度价格就需要没有就不需要            $group_goods[$val['goods_id']]['is_need_apply'] = '';            //系统报名人数            $group_goods[$val['goods_id']]['apply_num'] = $val['h_apply_num'];            //有梯度价格            if ($val['h_exist_gradient_price']) {                $group_goods[$val['goods_id']]['is_need_apply'] =                    $val['h_exist_gradient_price'];                //写入梯度表                $grade_info =                    json_decode($goods_arr['msg'][$key]['h_grad_price'], true);                foreach ($grade_info as $key => $value) {                    $grade_price[$val['goods_id']][$key]['apply_price'] =                        $value['goods_price'];                    $grade_price[$val['goods_id']][$key]['apply_count'] =                        $value['apply_count'];                }                //梯度价格表信息                $audit_info['grade_price'] = $grade_price;            }        }        $audit_info['goods_info'] = $group_goods;       //团购表信息        return $audit_info;    }

    /**     * 判断当前商品是否存在团购商品表中     * @param array $goods_id 要查询的商品集合     * @return array            商品ID和团购ID     */    private function getGroupGoods($goods_id = array())    {        $where = array(            'limit_start' => $this->page_param['start'],     //默认第0条            'limit_end' => count($goods_id),            'goods_id' => implode(',', $goods_id)        );        if (!empty($goods_id)) {            $goods_info = $this->tool->callRule('NGP_BUV2_GroupBuy', $where);            //请求成功并且有数数据            if ((self::API_SUCCESS === $goods_info['error']) &&                !empty($goods_info['msg'])            ) {                foreach ($goods_info['msg'] as $key => $val) {                    $exist_goods['goods_ids'][$val['goods_id']] =                        $val['goods_id'];                    $exist_goods['id'][$val['goods_id']] = $val['id'];                }            }        }        return $exist_goods;    }}

转载于:https://www.cnblogs.com/da-guang/p/5195800.html

平台团购活动商品同步功能相关推荐

  1. Java生鲜电商平台-团购模块设计与架构

    Java生鲜电商平台-团购模块设计与架构 说明:任何一个电商系统中,对于促销这块是必不可少的,毕竟这块是最吸引用户的,用户也是最爱的模块之一,理由很简单,便宜. 我的经验是无论是大的餐饮点还是小的餐饮 ...

  2. 电商平台-团购模块设计与架构

    说明:任何一个电商系统中,对于促销这块是必不可少的,毕竟这块是最吸引用户的,用户也是最爱的模块之一,理由很简单,便宜. 我的经验是无论是大的餐饮点还是小的餐饮店,优惠与折扣永远是说福他们进入平台的最好 ...

  3. mysql团购活动报名_在公众号里边商家如何设置团购,怎么做微信团购活动

    现在很多商家朋友是做实体店或者电商行业的,平时会在线下做团购活动,随着公众号的普及和发展越来越好,商家朋友已经把线下的微信电商活动做到公众号里边,那么在公众号里边商家如何设置团购呢,就需要用到微信第三 ...

  4. java 团购开发_Java生鲜电商平台-团购模块设计与架构

    Java生鲜电商平台-团购模块设计与架构 说明:任何一个电商系统中,对于促销这块是必不可少的,毕竟这块是最吸引用户的,用户也是最爱的模块之一,理由很简单,便宜. 我的经验是无论是大的餐饮点还是小的餐饮 ...

  5. ecshop活动页_ECSHOP团购活动,ECSHOP团购列表

    网店的团购活动和现实中的团购差不多. 都是希望大量的人参与进来,从而以一个相对优惠的价格买的商品. 下面介绍下网店的团购活动. 进入后台 => 促销管理 => 团购活动 如果已经添加过团购 ...

  6. mysql团购活动报名_社区团购平台如何策划营销活动

    如今互联网营销时代让我们认识了爆款商品的形成,并不只是需要短视频平台为我们助力推广.今天社区团购似乎就为我们证实了这个答案,小猪V5社区团购系统小编旨在为大家归纳社区团购策划营销活动的基本办法,为大家 ...

  7. HTML和CSS仿唯品会首页,ecshop仿唯品会2014全模板带团购品牌特卖

    ecshop仿唯品会2014全模板带团购品牌特卖,一款简洁时尚的综合通用类模板,特别适用于品牌特卖类电商.整站右侧悬浮式导航特效,头部下拉切换式商品分类树功能.首页多个大幅轮播广告图切换,热销商品功能 ...

  8. 微信公众平台开发之微团购

    微信公众平台开发之微团购功能是对于商家的销售最好平台.事实上和微商城差点儿相同,仅仅只是团购告诉用户的是有非常多人购买的时候更优惠,也就是给用户优惠,让用户得到实惠.而且我们能够设置团购基数,告诉用户 ...

  9. 最新2023基于微信小程序的社区小区团购电商在线商城平台(SSM+mysql)-JAVA.VUE【数据库设计、论文、毕设源码、开题报告】

    摘 要 社会的发展和科学技术的进步,互联网技术越来越受欢迎.手机也逐渐受到广大人民群众的喜爱,也逐渐进入了每个会员的使用.手机具有便利性,速度快,效率高,成本低等优点. 因此,构建符合自己要求的操作系 ...

最新文章

  1. 多少人没熬过45-55这段危险期? 为家人, 请多看一眼!
  2. 旺苍电子计算机培训学校,广元旺苍技工学校
  3. c语言图像浏览器,单片机采用浏览器进行监控将给软件的编程带来极大的便利...
  4. Spartan-6 FPGA SelectIO Resources User Guide 笔记2 SelectIO Attributes/Constraints
  5. spring 启动进度_在Web浏览器中显示Spring应用程序启动的进度
  6. Android清理设备内存具体完整演示样例(二)
  7. armv8 汇编 绝对地址赋值_详解汇编语言B和LDR指令与相对跳转和绝对跳转的关系...
  8. 车牌号专用键盘设计和正则验证
  9. 计算机台账管理工作总结,台账工作总结(共6篇汇总).doc.docx
  10. 数组的顺序存储和实现
  11. Jmeter安装教程
  12. 静态网页怎么用html语言编写,简单html静态网页代码 用html编写一个静态网页
  13. C/C++ typedef用法详解
  14. Win10专业版如何安装Docker
  15. [转]现代汉语词性分类
  16. scrapy SpiderMiddleware DownloaderMiddleware
  17. 动态分析Android App之动态调试(一)
  18. Kafka 集群扩容、分区重新分配、SparkStreaming自适应上游kafka topic partition数目变化
  19. AI笔记: 数学基础之二项分布与二项式定理
  20. 《Redis系列第三篇、incr与decr使用|CSDN创作打卡》

热门文章

  1. 不信任到 Visual Basic Project 的程序连接
  2. 最好用的 12 款 Vue Timepicker 时间日期选择器测评推荐 - 卡拉云
  3. processing艺术编程语言杂谈
  4. React(五):js如何保留小数点后两位
  5. 软件工程大作业——数独游戏
  6. 转载:iText输出中文的三种字体选择方式
  7. 新人福利,Java编程中必须要死记硬背的几十个代码段
  8. 如何度过大学四年(计算机专业)
  9. Linux存储空间清理逻辑
  10. python 绘制世界地图,添加海岸线、陆地、投影