zoukankan      html  css  js  c++  java
  • 平台团购活动商品同步功能

    <?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;
    }
    }
  • 相关阅读:
    【转载】用XML和XSLT来生成静态的HTML页面
    【转载】Lambda表达式(Lambda Expressions)
    [转]打领带的十种方法
    读书笔记
    【转载】用手机的朋友进来看看吧,终身受益啊!!!
    SQL查询出重复出现的数据
    技巧三:字符串格式化
    【Vegas原创】页面自动跳转代码收集
    【Vegas原创】我写的一个安装windowsService的BAT
    【Vegas原创】ASP.NET读取Excel,并以邮件正文方式和附件方式发送实例
  • 原文地址:https://www.cnblogs.com/da-guang/p/5195800.html
Copyright © 2011-2022 走看看