平台团购活动商品同步功能

<?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;
}
}
posted on 2016-02-17 16:32  IsRunning  阅读(253)  评论(0编辑  收藏  举报