799 行
36 KiB
PHP
可执行文件
799 行
36 KiB
PHP
可执行文件
<?php
|
|
|
|
namespace Common\Model;
|
|
//[1.8.50]
|
|
use LittleGift\Business\Goods;
|
|
|
|
class AdvanceGoodsModel extends BaseModel
|
|
{
|
|
protected $tableName = 'retail_advance_goods';
|
|
protected $fields = array(
|
|
'id',
|
|
'merchant_id', //商户id
|
|
'store_id', //门店id
|
|
'goods_id', //int(11) DEFAULT '0' COMMENT '商品id',
|
|
'advance_num', //decimal(10,3) DEFAULT NULL COMMENT '预售库存',
|
|
'surplus_num', // decimal(10,3) DEFAULT NULL COMMENT '剩余库存',
|
|
'earnest_price', //定金',
|
|
'advance_price', //预售价,
|
|
"arrive_price", // decimal(11,2) DEFAULT NULL COMMENT '定金抵现',
|
|
"restrict_num", // decimal(11,3) DEFAULT NULL COMMENT '限购数量',
|
|
"advance_start_time", // varchar(11) DEFAULT NULL COMMENT '预售开始时间',
|
|
"advance_end_time", // varchar(11) DEFAULT NULL COMMENT '预售结束时间',
|
|
"tail_start_time", // varchar(11) DEFAULT NULL COMMENT '尾款开始时间',
|
|
"tail_end_time", // varchar(11) DEFAULT NULL COMMENT '尾款时间',
|
|
"deliver_start_time", // varchar(11) DEFAULT NULL COMMENT '发货开始时间',
|
|
"deliver_end_time", // varchar(11) DEFAULT NULL COMMENT '发货结束时间',
|
|
"advance_type", //tinyint(1) DEFAULT '1' COMMENT '1全额 2定金',
|
|
"advance_state", // tinyint(1) DEFAULT '0' COMMENT '预售状态 0关闭 1开启 2删除',
|
|
"delivery_type", // varchar(10) DEFAULT '' COMMENT '配送方式 1自提 2配送 3快递',
|
|
"refuse_earnest_price", // tinyint(1) DEFAULT '0' COMMENT '退款不退定金 0关闭 1开启',
|
|
"add_time", // varchar(11) DEFAULT NULL COMMENT '添加时间',
|
|
"delivery_template_id", //快递模板id
|
|
"attribute_state", //1无规格商品 2规格商品
|
|
"rise_num", //起购数量
|
|
);
|
|
|
|
/**
|
|
* 获取预售列表
|
|
* @param $parameter
|
|
* @return mixed
|
|
*/
|
|
public function getList($parameter)
|
|
{
|
|
$parameter['field'] = $parameter['field'] ? $parameter['field'] : "a.*,g.goods_name";
|
|
if (!empty($parameter['page']) && !empty($parameter['limit'])) {
|
|
$list = $this->alias('a')
|
|
->join("ls_retail_goods as g on a.goods_id=g.id")
|
|
->field($parameter['field'])
|
|
->where($parameter['where'])
|
|
->order("a.id desc")
|
|
->page($parameter['page'], $parameter['limit'])
|
|
->select();
|
|
} else {
|
|
$list = $this->alias('a')
|
|
->join("ls_retail_goods as g on a.goods_id=g.id")
|
|
->field($parameter['field'])
|
|
->where($parameter['where'])
|
|
->order("a.id desc")
|
|
->select();
|
|
}
|
|
$res = array(
|
|
'status' => 1,
|
|
'msg' => '查询成功',
|
|
'data' => array(
|
|
'list' => $list
|
|
)
|
|
);
|
|
return $res;
|
|
}
|
|
|
|
/**
|
|
* 获取预售列表总条数
|
|
* @param $parameter
|
|
* @return mixed
|
|
*/
|
|
public function getListCount($parameter)
|
|
{
|
|
$count = $this->alias('a')
|
|
->join("ls_retail_goods as g on a.goods_id=g.id")
|
|
->where($parameter['where'])
|
|
->count();
|
|
return $count;
|
|
}
|
|
|
|
/**
|
|
* 获取活动的预售价
|
|
* @param $parameter
|
|
* @return mixed
|
|
*/
|
|
public function getAdvancePrice($parameter)
|
|
{
|
|
$info = $this->getFind(array('id' => $parameter['id']), "attribute_state,advance_price,advance_state");
|
|
if (!$info || $info['advance_state'] != 1) {
|
|
$res = array('status' => 0, 'msg' => '活动下架');
|
|
return $res;
|
|
}
|
|
switch ($info['attribute_state']) {
|
|
case 1:
|
|
$res = array('status' => 1, 'advance_price' => $info['advance_price']);
|
|
break;
|
|
case 2:
|
|
$sku_info = D("AdvanceSkuGoods")->getOrderFind(array("advance_id" => $parameter['id'], "advance_state" => 1), "advance_price", "advance_price asc");
|
|
if (!$sku_info) {
|
|
$res = array('status' => 0, 'msg' => '活动下架');
|
|
return $res;
|
|
}
|
|
$res = array('status' => 1, 'advance_price' => $sku_info['advance_price']);
|
|
break;
|
|
}
|
|
return $res;
|
|
}
|
|
|
|
/**
|
|
* 判断是否存在预售商品id
|
|
* @param $parameter
|
|
* @return array
|
|
*/
|
|
public function existence_id($parameter)
|
|
{
|
|
if (is_array($parameter)) {
|
|
if (empty($parameter['id'])) {
|
|
$res = array('status' => 0, 'msg' => '验证失败,缺少ID参数');
|
|
} else {
|
|
$res = array('status' => 1, 'msg' => '验证成功');
|
|
}
|
|
} else {
|
|
$res = array('status' => 0, 'msg' => '参数类型有误');
|
|
}
|
|
return $res;
|
|
}
|
|
|
|
/**
|
|
* 单个预售商品详情
|
|
* @param $where
|
|
* @param $fields
|
|
* @return mixed
|
|
*/
|
|
public function advanceGoodsInfo($where, $fields)
|
|
{
|
|
$fields = $fields ? $fields : "*";
|
|
$info = $this->alias('a')
|
|
->join('ls_retail_goods as g on a.goods_id=g.id')
|
|
->where($where)
|
|
->field($fields)
|
|
->order('a.id desc')
|
|
->find();
|
|
return $info;
|
|
}
|
|
|
|
/**
|
|
* 添加预售商品的活动参数验证
|
|
* @param $parameter [advance_type=>[ 1全额 2定金],delivery_type=>[1自提加配送 2自提 3配送]
|
|
*attribute_state=>[ 1不开启 2开启],ruleList=>单品信息]
|
|
* @return mixed
|
|
*/
|
|
public function add_param_verify($parameter)
|
|
{
|
|
if (is_array($parameter)) {
|
|
$merchant_id = $parameter['merchant_id'];
|
|
$store_id = $parameter['store_id'];
|
|
$data = $parameter['data'];
|
|
if (!$merchant_id || !$store_id || !$data['goods_id'] || !$data['advance_type'] || !$data['delivery_type'] || !$data['attribute_state'] || empty($data['ruleList'])) {
|
|
$res = array('status' => 0, 'msg' => '登录超时请重试');
|
|
return $res;
|
|
}
|
|
if (!$data['delivery_type']) {
|
|
$res = array('status' => 0, 'msg' => '请选择配送方式');
|
|
return $res;
|
|
}
|
|
if (in_array(3, $data['delivery_type']) && !$data['delivery_template_id']) {
|
|
$res = array('status' => 0, 'msg' => '请选择配送模板');
|
|
return $res;
|
|
}
|
|
$reg1 = "/^[0-9]*[1-9][0-9]*$/";
|
|
$reg2 = "/^[0-9]+(.[0-9]{1,2})?$/";
|
|
$reg3 = "/^[0-9]+(.[0-9]{1,3})?$/";
|
|
if ($data['attribute_state'] == 2 || ($data['attribute_state'] == 1 && $data['pricing_method'] == 1)) {
|
|
if (!empty($data['restrict_num']) && !preg_match($reg1, $data['restrict_num'])) {
|
|
$res = array('status' => 0, 'msg' => '限购数量有误');
|
|
return $res;
|
|
}
|
|
if (!empty($data['rise_num']) && !preg_match($reg1, $data['rise_num'])) {
|
|
$res = array('status' => 0, 'msg' => '起购数量有误');
|
|
return $res;
|
|
}
|
|
} else if ($data['attribute_state'] == 1 && $data['pricing_method'] == 2) {
|
|
if (!empty($data['restrict_num']) && !preg_match($reg3, $data['restrict_num'])) {
|
|
$res = array('status' => 0, 'msg' => '限购数量有误');
|
|
return $res;
|
|
}
|
|
if (!empty($data['rise_num']) && !preg_match($reg3, $data['rise_num'])) {
|
|
$res = array('status' => 0, 'msg' => '起购数量有误');
|
|
return $res;
|
|
}
|
|
}
|
|
if (!empty($data['rise_num']) && !empty($data['restrict_num']) && $data['rise_num'] > $data['restrict_num']) {
|
|
$res = array('status' => 0, 'msg' => '起购数量不能大于限购数量');
|
|
return $res;
|
|
}
|
|
if (strtotime($data['advance_time'][1]) <= strtotime($data['advance_time'][0])) {
|
|
$res = array('status' => 0, 'msg' => '预定结束时间必须大于开始时间');
|
|
return $res;
|
|
}
|
|
if (strtotime($data['deliver_time'][1]) < strtotime($data['deliver_time'][0])) {
|
|
$res = array('status' => 0, 'msg' => '发货结束时间必须大于开始时间');
|
|
return $res;
|
|
}
|
|
if (strtotime($data['deliver_time'][0]) < strtotime($data['advance_time'][0])) {
|
|
$res = array('status' => 0, 'msg' => '发货开始时间不能小于预定开始时间');
|
|
return $res;
|
|
}
|
|
if ($data['advance_type'] == 2) {
|
|
//定金
|
|
if (strtotime($data['tail_time'][1]) <= strtotime($data['tail_time'][0])) {
|
|
$res = array('status' => 0, 'msg' => '尾款结束时间必须大于开始时间');
|
|
return $res;
|
|
}
|
|
if (strtotime($data['tail_time'][0]) < strtotime($data['advance_time'][1])) {
|
|
$res = array('status' => 0, 'msg' => '尾款开始时间不能小于预定结束时间');
|
|
return $res;
|
|
}
|
|
if (strtotime($data['deliver_time'][0]) < strtotime($data['tail_time'][1])) {
|
|
$res = array('status' => 0, 'msg' => '发货开始时间不能小于尾款结束时间');
|
|
return $res;
|
|
}
|
|
}
|
|
$res = array('status' => 1, 'msg' => '验证成功');
|
|
} else {
|
|
$res = array('status' => 0, 'msg' => '参数类型错误');
|
|
}
|
|
return $res;
|
|
}
|
|
|
|
/**
|
|
* 添加编辑预售商品的商品信息验证
|
|
* @param $parameter [rule_list=>商品信息,data=>预售设置]
|
|
* @return array
|
|
*/
|
|
public function goods_verify($parameter)
|
|
{
|
|
if (is_array($parameter)) {
|
|
$ruleList = $parameter['rule_list'];
|
|
$data = $parameter['data'];
|
|
$advance_id = $parameter['advance_id'];
|
|
$store_id = $parameter['store_id'];
|
|
if (empty($ruleList) || empty($data)) {
|
|
$res = array('status' => 0, 'msg' => '参数缺失');
|
|
return $res;
|
|
}
|
|
$GoodsModel = new RetailGoodsModel();
|
|
$goods_actice = $GoodsModel->advance_open_verify(array("store_id" => $store_id, "goods_id" => $data['goods_id']));
|
|
if ($goods_actice['status'] == 0) {
|
|
return $goods_actice;
|
|
}
|
|
$advance_sale_status = $GoodsModel->getFindField([
|
|
'store_id' => $store_id,
|
|
'id' => $data['goods_id']
|
|
], 'advance_sale_status');
|
|
if ($advance_sale_status == 0) {
|
|
$res = array('status' => 0, 'msg' => '该商品已关闭预售,无法开启该活动');
|
|
return $res;
|
|
}
|
|
$reg1 = "/^[0-9]*[1-9][0-9]*$/";
|
|
$reg2 = "/^[0-9]+(.[0-9]{1,2})?$/";
|
|
$reg3 = "/^[0-9]+(.[0-9]{1,3})?$/";
|
|
$name = "";
|
|
foreach ($ruleList as $val) {
|
|
if ($data['attribute_state'] == 2) {
|
|
$name = $val['sku_name'];
|
|
} else {
|
|
$name = $data['goods_name'];
|
|
}
|
|
if (!empty($advance_id)) {
|
|
if ($val['advance_num'] < $val['sold_num']) {
|
|
$res = array('status' => 0, 'msg' => '预售库存不能小于已售库存');
|
|
return $res;
|
|
}
|
|
if ($val['advance_num'] > ($val['surplus_num'] + $val['goods_num'])) {
|
|
$res = array('status' => 0, 'msg' => '预售库存不能大于总库存');
|
|
return $res;
|
|
}
|
|
} else {
|
|
if ($val['goods_num'] <= 0) {
|
|
$res = array('status' => 0, 'msg' => '库存不足');
|
|
return $res;
|
|
}
|
|
}
|
|
if (!$val['advance_price'] || !preg_match($reg2, $val['advance_price'])) {
|
|
$res = array('status' => 0, 'msg' => '预售价格有误');
|
|
return $res;
|
|
}
|
|
if ($val['advance_price'] > $val['online_price']) {
|
|
$res = array('status' => 0, 'msg' => '预售价不能大于商城价');
|
|
return $res;
|
|
}
|
|
if ($data['attribute_state'] == 2) {
|
|
if (!$val['advance_num'] || !preg_match($reg1, $val['advance_num'])) {
|
|
$res = array('status' => 0, 'msg' => '预售库存有误');
|
|
return $res;
|
|
}
|
|
} else if ($data['attribute_state'] == 1) {
|
|
if ($val['pricing_method'] == 2) {
|
|
//称重
|
|
if (!$val['advance_num'] || !preg_match($reg3, $val['advance_num'])) {
|
|
$res = array('status' => 0, 'msg' => '预售库存有误');
|
|
return $res;
|
|
}
|
|
} else {
|
|
if (!$val['advance_num'] || !preg_match($reg1, $val['advance_num'])) {
|
|
$res = array('status' => 0, 'msg' => '预售库存有误');
|
|
return $res;
|
|
}
|
|
}
|
|
}
|
|
if ($data['advance_type'] == 2) {
|
|
//定金
|
|
if (!$val['earnest_price'] || !preg_match($reg2, $val['earnest_price'])) {
|
|
$res = array('status' => 0, 'msg' => '定金价有误');
|
|
return $res;
|
|
}
|
|
if ($val['earnest_price'] >= $val['advance_price']) {
|
|
$res = array('status' => 0, 'msg' => '定金价必须小于预售价');
|
|
return $res;
|
|
}
|
|
if ($val['arrive_price'] && !preg_match($reg2, $val['arrive_price'])) {
|
|
$res = array('status' => 0, 'msg' => '定金抵现有误');
|
|
return $res;
|
|
}
|
|
if ($val['arrive_price'] && ($val['arrive_price'] >= $val['online_price'] || $val['arrive_price'] < $val['earnest_price'])) {
|
|
$res = array('status' => 0, 'msg' => '抵现价必须小于商城价且不能小于定金价');
|
|
return $res;
|
|
}
|
|
}
|
|
}
|
|
$res = array('status' => 1, 'msg' => '验证成功');
|
|
} else {
|
|
$res = array('status' => 0, 'msg' => '参数类型错误');
|
|
}
|
|
return $res;
|
|
}
|
|
|
|
/**
|
|
* 添加或编辑操作预售商品
|
|
* @param $parameter
|
|
* @return mixed
|
|
*/
|
|
public function advance_add($parameter)
|
|
{
|
|
if (is_array($parameter)) {
|
|
$data = $parameter['data'];
|
|
$ruleList = $parameter['rule_list'];
|
|
$advance_id = $parameter['advance_id'];
|
|
$content = $parameter['content'];
|
|
if (empty($data) || empty($ruleList) || empty($content)) {
|
|
$res = array('status' => 0, 'msg' => '参数缺失');
|
|
return $res;
|
|
}
|
|
switch ($data['attribute_state']) {
|
|
case 1:
|
|
foreach ($ruleList as $val) {
|
|
$content['advance_num'] = $val['advance_num'];
|
|
if (!empty($advance_id)) {
|
|
$old_info = $this->getFind(array('id' => $advance_id), "advance_num,surplus_num,goods_id");
|
|
$num = round($old_info['advance_num'] - $val['advance_num'], 3);
|
|
if ($num != 0) {
|
|
$content['surplus_num'] = round($old_info['surplus_num'] - $num, 3);
|
|
}
|
|
$save = $this->updateOrder(array('id' => $advance_id), $content);
|
|
if ($save) {
|
|
if ($num > 0) {
|
|
A("Api/Inventory")->Inventory(1, $num, $old_info['goods_id']);
|
|
} else if ($num < 0) {
|
|
A("Api/Inventory")->Inventory(2, abs($num), $old_info['goods_id']);
|
|
}
|
|
}
|
|
} else {
|
|
$content['surplus_num'] = $val['advance_num'];
|
|
$content['advance_price'] = $val['advance_price'];
|
|
if ($data['advance_type'] == 2) {
|
|
$content['arrive_price'] = $val['arrive_price'] ? $val['arrive_price'] : null;
|
|
$content['earnest_price'] = $val['earnest_price'];
|
|
}
|
|
$save = $this->addOrder($content);
|
|
if ($save) {
|
|
A("Api/Inventory")->Inventory(2, $val['advance_num'], $content['goods_id']);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case 2:
|
|
if (empty($advance_id)) {
|
|
$add = $this->addOrder($content);
|
|
} else {
|
|
$add = $advance_id;
|
|
}
|
|
if ($add) {
|
|
if (!empty($advance_id)) {
|
|
$old_sku_info = D("AdvanceSkuGoods")->getSelect(array('advance_id' => $advance_id, 'goods_id' => $data['goods_id']), "advance_num,surplus_num,sku_id");
|
|
$old_sku_ids = array_column($old_sku_info, "sku_id"); //规格ids
|
|
}
|
|
$sku_arr = array(
|
|
'merchant_id' => $content['merchant_id'],
|
|
'store_id' => $content['store_id'],
|
|
'advance_id' => $add,
|
|
'goods_id' => $data['goods_id'],
|
|
'add_time' => time(),
|
|
'advance_state' => 1
|
|
);
|
|
$advance_num = 0;
|
|
$surplus_num = 0;
|
|
foreach ($ruleList as $val) {
|
|
$advance_num += $val['advance_num'];
|
|
$sku_arr['advance_num'] = $val['advance_num'];
|
|
$sku_arr['surplus_num'] = $val['advance_num'];
|
|
$sku_arr['sku_id'] = $val['sku_id'];
|
|
$sku_arr['advance_price'] = $val['advance_price'];
|
|
if ($data['advance_type'] == 2) {
|
|
$sku_arr['arrive_price'] = $val['arrive_price'] ? $val['arrive_price'] : null;
|
|
$sku_arr['earnest_price'] = $val['earnest_price'];
|
|
}
|
|
if (!empty($advance_id)) {
|
|
if (in_array($val['sku_id'], $old_sku_ids)) {
|
|
unset($sku_arr['surplus_num']);
|
|
unset($sku_arr['sku_id']);
|
|
unset($sku_arr['advance_price']);
|
|
unset($sku_arr['arrive_price']);
|
|
unset($sku_arr['earnest_price']);
|
|
$sku_id_key = array_search($val['sku_id'], $old_sku_ids);
|
|
$num = round($old_sku_info[$sku_id_key]['advance_num'] - $val['advance_num'], 3);
|
|
if ($num != 0) {
|
|
$sku_arr['surplus_num'] = round($old_sku_info[$sku_id_key]['surplus_num'] - $num, 3);
|
|
} else {
|
|
$sku_arr['surplus_num'] = $old_sku_info[$sku_id_key]['surplus_num'];
|
|
}
|
|
}
|
|
}
|
|
$surplus_num += $sku_arr['surplus_num'];
|
|
if (!empty($advance_id)) {
|
|
if (in_array($val['sku_id'], $old_sku_ids)) {
|
|
unset($sku_arr['merchant_id']);
|
|
unset($sku_arr['store_id']);
|
|
$save = D("AdvanceSkuGoods")->updateOrder(array('advance_id' => $advance_id, 'sku_id' => $val['sku_id']), $sku_arr);
|
|
if ($save) {
|
|
if ($num > 0) {
|
|
A("Api/Inventory")->Inventory(1, $num, $content['goods_id'], $val['sku_id']);
|
|
} else if ($num < 0) {
|
|
A("Api/Inventory")->Inventory(2, abs($num), $content['goods_id'], $val['sku_id']);
|
|
}
|
|
}
|
|
} else {
|
|
$save = D("AdvanceSkuGoods")->addOrder($sku_arr);
|
|
if ($save) {
|
|
A("Api/Inventory")->Inventory(2, $val['advance_num'], $content['goods_id'], $val['sku_id']);
|
|
}
|
|
}
|
|
} else {
|
|
$save = D("AdvanceSkuGoods")->addOrder($sku_arr);
|
|
if ($save) {
|
|
A("Api/Inventory")->Inventory(2, $val['advance_num'], $content['goods_id'], $val['sku_id']);
|
|
}
|
|
}
|
|
}
|
|
if (!empty($advance_id)) {
|
|
$content['advance_num'] = $advance_num;
|
|
$content['surplus_num'] = round($surplus_num, 3);
|
|
$this->updateOrder(array('id' => $advance_id), $content);
|
|
} else {
|
|
$arr_save['advance_num'] = $advance_num;
|
|
$arr_save['surplus_num'] = $advance_num;
|
|
$this->updateOrder(array('id' => $add), $arr_save);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
$res = array('status' => 1, 'msg' => '操作成功');
|
|
} else {
|
|
$res = array('status' => 0, 'msg' => '参数类型有误');
|
|
}
|
|
return $res;
|
|
}
|
|
|
|
/**
|
|
* 判断预售活动总开关是否开启状态
|
|
* @param $store_id
|
|
* @return mixed
|
|
*/
|
|
public function advance_master_verify($store_id)
|
|
{
|
|
$advance_sale_status = D('RetailStoreXcxConfig')->getFindField(array('storeid' => $store_id), "advance_sale_status");
|
|
if ($advance_sale_status == 1) {
|
|
$res = array('status' => 1, 'msg' => '验证成功');
|
|
} else {
|
|
$res = array('status' => 0, 'msg' => '预售活动已下架');
|
|
}
|
|
return $res;
|
|
}
|
|
|
|
/**预售活动的冻结库存
|
|
* @param $parameter
|
|
* @return int
|
|
*/
|
|
public function frozen_num($parameter)
|
|
{
|
|
$advance_id = $parameter['id'];
|
|
$goods_id = $parameter['goods_id'];
|
|
$sku_id = $parameter['sku_id'];
|
|
$attribute_state = $parameter['attribute_state'];
|
|
if ($attribute_state == 2) {
|
|
if (!empty($sku_id)) {
|
|
$redis_key = 'retail_advance_frozen_goods_' . $advance_id . '_goods_id_' . $goods_id . '_sku_id_' . $sku_id;
|
|
} else {
|
|
$redis_key = 'retail_advance_frozen_goods_' . $advance_id . '_goods_id_' . $goods_id . '_*';
|
|
}
|
|
} else if ($attribute_state == 1) {
|
|
$redis_key = 'retail_advance_frozen_goods_' . $advance_id . '_goods_id_' . $goods_id;
|
|
}
|
|
$frozen_num = 0;
|
|
if (C('IS_SET_REDIS')) {
|
|
//冻结的库存
|
|
$ApiRedis = new \Addons\Api\RedisController();
|
|
$advance_frozen_goods = $ApiRedis::$redis->mget($ApiRedis::$redis->keys($redis_key));
|
|
if ($advance_frozen_goods) {
|
|
foreach ($advance_frozen_goods as $key => &$val) {
|
|
$frozen_num += json_decode($val, true)['num'];
|
|
}
|
|
}
|
|
}
|
|
return $frozen_num;
|
|
}
|
|
|
|
/**
|
|
* 判断某预售活动是否可以下单
|
|
* @param $parameter
|
|
* @return mixed
|
|
*/
|
|
public function advance_activity_state($parameter)
|
|
{
|
|
if (is_array($parameter)) {
|
|
$time = time();
|
|
$merchant_id = $parameter['merchant_id'];
|
|
$store_id = $parameter['store_id'];
|
|
$advance_id = $parameter['advance_id'];
|
|
$pickup_type = $parameter['pickup_type'];
|
|
$where = array(
|
|
"a.merchant_id" => $merchant_id,
|
|
"a.store_id" => $store_id,
|
|
"a.id" => $advance_id,
|
|
"a.advance_state" => 1,
|
|
);
|
|
$advance = $this->alias('a')
|
|
->join('ls_retail_goods as g on a.goods_id=g.id')
|
|
->field("a.*,g.goods_name,g.goods_class_id,g.pricing_method,g.purchase_price,g.online_price,g.goods_img_id,g.integral,g.integral_mem_status,g.company,g.weight_value,g.serial_number_state,g.third_goods_code")
|
|
->where($where)
|
|
->find();
|
|
if ($advance) {
|
|
if (!in_array($advance['advance_type'], array(1, 2))) {
|
|
$res = array('status' => 0, 'msg' => '店家预售方式有误,请联系店家');
|
|
return $res;
|
|
}
|
|
if ($advance['advance_start_time'] > $time) {
|
|
$res = array('status' => 0, 'msg' => '未到预定时间');
|
|
return $res;
|
|
}
|
|
if ($advance['advance_end_time'] < $time) {
|
|
$res = array('status' => 0, 'msg' => '已超出预定时间范围');
|
|
return $res;
|
|
}
|
|
if (empty($advance['advance_start_time']) || empty($advance['advance_end_time'])) {
|
|
$res = array('status' => 0, 'msg' => '该活动预定时间设置有误');
|
|
return $res;
|
|
}
|
|
$frozen_param = array(
|
|
'id' => $advance['id'],
|
|
'goods_id' => $advance['goods_id'],
|
|
'attribute_state' => $advance['attribute_state'],
|
|
'sku_id' => ''
|
|
);
|
|
$frozen_num = $this->frozen_num($frozen_param); //冻结库存
|
|
$advance['surplus_num'] = round($advance['surplus_num'] - $frozen_num, 3);
|
|
if ($advance['surplus_num'] <= 0 || empty($advance['surplus_num'])) {
|
|
$res = array('status' => 0, 'msg' => '该预售商品库存不足');
|
|
return $res;
|
|
}
|
|
if (empty($advance['delivery_type'])) {
|
|
$res = array('status' => 0, 'msg' => '该预售商品配送方式未设置,请联系商家');
|
|
return $res;
|
|
}
|
|
if (!in_array($pickup_type, explode(',', $advance['delivery_type']))) {
|
|
$res = array('status' => 0, 'msg' => '该预售活动配送方式已更新,请重新下单');
|
|
return $res;
|
|
}
|
|
$res = array('status' => 1, 'msg' => '验证成功', 'advance' => $advance);
|
|
} else {
|
|
$res = array('status' => 0, 'msg' => '该预售商品已下架');
|
|
}
|
|
} else {
|
|
$res = array('status' => 0, 'msg' => '参数类型错误');
|
|
}
|
|
return $res;
|
|
}
|
|
|
|
/**
|
|
* 判断购买的预售商品是否可以下单
|
|
* @param $parameter [
|
|
* merchant_id
|
|
* $goods=>购买预售商品详情,$advance=>预售活动详情,$pickup_type=>配送方式
|
|
* platform_type 商户平台类型 1默认系统 2微礼平台
|
|
* third_code 第三方平台门店编码
|
|
* ]
|
|
* @return array
|
|
*/
|
|
public function advance_goods_state($parameter)
|
|
{
|
|
if (is_array($parameter)) {
|
|
$merchant_id = $parameter['merchant_id'];
|
|
$third_code = $parameter['third_code'];
|
|
$goods = $parameter['goods'];
|
|
$advance_info = $parameter['advance_info'];
|
|
$uid = $parameter['uid'];
|
|
$platform_type = $parameter['platform_type']; //商户平台类型 1默认系统 2微礼平台
|
|
if (empty($goods['goods_id']) || empty($goods)) {
|
|
$res = array('status' => 0, 'msg' => '请求超时');
|
|
return $res;
|
|
}
|
|
if (!empty($advance_info['restrict_num']) && $goods['num'] > $advance_info['restrict_num']) {
|
|
$res = array('status' => 0, 'msg' => '超出预售活动限购数量');
|
|
return $res;
|
|
}
|
|
if (!empty($advance_info['rise_num']) && $goods['num'] < $advance_info['rise_num']) {
|
|
$res = array('status' => 0, 'msg' => '未达到商品起购数量');
|
|
return $res;
|
|
}
|
|
if (!empty($advance_info['restrict_num'])) {
|
|
$buy_map = array(
|
|
'uid' => $uid,
|
|
'goods_id' => $goods['goods_id'],
|
|
'state' => array('neq', 0),
|
|
'advance_id' => $advance_info['id']
|
|
);
|
|
if ($advance_info['attribute_state'] == 2) {
|
|
$buy_map['sku_id'] = $goods['sku_id'];
|
|
}
|
|
$buy_number = D("RetailBillAdvance")->getSum($buy_map, "buy_number");
|
|
$buy_number = round($buy_number + $goods['num'], 3);
|
|
if ($buy_number > $advance_info['restrict_num']) {
|
|
$res = array('status' => 0, 'msg' => '超出预售活动限购数量');
|
|
return $res;
|
|
}
|
|
}
|
|
if ($goods['num'] > $advance_info['surplus_num'] || $advance_info['surplus_num'] <= 0) {
|
|
$res = array('status' => 0, 'msg' => '该预售商品库存不足购买数量');
|
|
return $res;
|
|
}
|
|
if ($advance_info['attribute_state'] == 2) {
|
|
//规格信息
|
|
$sku_info = D("AdvanceSkuGoods")->getSkuInfo(array('advance_id' => $advance_info['id'], 'goods_id' => $goods['goods_id'], 'sku_id' => $goods['sku_id']));
|
|
if (!$sku_info) {
|
|
$res = array('status' => 0, 'msg' => '该规格已下架');
|
|
return $res;
|
|
}
|
|
$frozen_param = array(
|
|
'id' => $advance_info['id'],
|
|
'goods_id' => $sku_info['goods_id'],
|
|
'sku_id' => $sku_info['sku_id'],
|
|
'attribute_state' => 2
|
|
);
|
|
$frozen_num = $this->frozen_num($frozen_param);
|
|
$sku_info['surplus_num'] = round($sku_info['surplus_num'] - $frozen_num, 3);
|
|
if ($goods['num'] > $sku_info['surplus_num'] || $sku_info['surplus_num'] <= 0) {
|
|
$res = array('status' => 0, 'msg' => '该规格库存不足购买数量');
|
|
return $res;
|
|
}
|
|
if($platform_type == 2){
|
|
$third_goods_code = $sku_info['third_goods_code'];
|
|
}
|
|
$res['sku_info'] = $sku_info;
|
|
$advance_price = $sku_info['advance_price']; //预售价
|
|
$earnest_price = $sku_info['earnest_price']; //定金
|
|
$arrive_price = $sku_info['arrive_price']; //定金抵现
|
|
} else if ($advance_info['attribute_state'] == 1) {
|
|
if($platform_type == 2){
|
|
$third_goods_code = $advance_info['third_goods_code'];
|
|
}
|
|
$advance_price = $advance_info['advance_price'];
|
|
$earnest_price = $advance_info['earnest_price'];
|
|
$arrive_price = $advance_info['arrive_price']; //定金抵现
|
|
}
|
|
if ($platform_type == 2) {
|
|
//第三方平台
|
|
$ThirdGoodsResult = new Goods();
|
|
$thirdResult = $ThirdGoodsResult->goodsNumQuery([
|
|
'merchant_id' => $merchant_id,
|
|
'type' => 2,
|
|
'code_arr' => [$third_goods_code],
|
|
'Customer_Codes' => $third_code
|
|
]);
|
|
if ($thirdResult['status'] == 1 && !empty($thirdResult['data'])) {
|
|
$goods_stock = $thirdResult['data'];
|
|
if($goods_stock < $goods['num']){
|
|
$res = array('status' => 0, 'msg' => '该预售商品库存不足购买数量');
|
|
return $res;
|
|
}
|
|
} else {
|
|
$res = array('status' => 0, 'msg' => '该预售商品库存不足购买数量');
|
|
return $res;
|
|
}
|
|
}
|
|
$earnest_price = $earnest_price ? $earnest_price : 0;
|
|
if (empty($advance_price) || $advance_price < 0.01) {
|
|
$res = array('status' => 0, 'msg' => '规格预售价已更改');
|
|
return $res;
|
|
}
|
|
//定金
|
|
if ($advance_info['advance_type'] == 2 && (empty($earnest_price) || $earnest_price < 0.01 || $earnest_price > $advance_price)) {
|
|
$res = array('status' => 0, 'msg' => '该活动价格已更新,请刷新重新下单');
|
|
return $res;
|
|
}
|
|
if ($advance_info['advance_type'] == 2 && !empty($arrive_price)) {
|
|
//抵现优惠的金额
|
|
$arrive_price_coupon = round($arrive_price - $earnest_price, 2);
|
|
}
|
|
$arrive_price_coupon = $arrive_price_coupon ? $arrive_price_coupon : 0;
|
|
$res['status'] = 1;
|
|
$res['msg'] = '验证成功';
|
|
$res['advance_price'] = $advance_price;
|
|
$res['earnest_price'] = $earnest_price;
|
|
$res['arrive_price_coupon'] = $arrive_price_coupon;
|
|
} else {
|
|
$res = array('status' => 0, 'msg' => '参数类型有误');
|
|
}
|
|
return $res;
|
|
}
|
|
|
|
/**
|
|
* 预售活动尾款支付验证
|
|
* @param $parameter
|
|
* @return array
|
|
*/
|
|
public function tail_pay_verify($parameter)
|
|
{
|
|
if (is_array($parameter)) {
|
|
$id = $parameter['id'];
|
|
$advance_info = $this->getFind(array('id' => $id), "*");
|
|
if (empty($advance_info) || $advance_info['advance_state'] != 1) {
|
|
$res = array('status' => 0, 'msg' => '该活动已下架');
|
|
return $res;
|
|
}
|
|
$time = time();
|
|
if ($advance_info['tail_start_time'] > $time || empty($advance_info['tail_start_time'])) {
|
|
$res = array('status' => 0, 'msg' => '未到尾款结算时间,请查看订单详情');
|
|
return $res;
|
|
}
|
|
if ($advance_info['tail_end_time'] < $time || empty($advance_info['tail_end_time'])) {
|
|
$res = array('status' => 0, 'msg' => '已超出尾款结算时间,请查看订单详情');
|
|
return $res;
|
|
}
|
|
$res = array('status' => 1, 'msg' => '验证成功');
|
|
} else {
|
|
$res = array('status' => 0, 'msg' => '参数类型错误');
|
|
}
|
|
return $res;
|
|
}
|
|
|
|
/**
|
|
* 售后增加活动库存
|
|
* @param $parameter [advance_id=>活动id,goods_id=>商品id]
|
|
* @return mixed
|
|
*/
|
|
public function StockSetInc($parameter)
|
|
{
|
|
if (is_array($parameter)) {
|
|
$where = array('id' => $parameter['advance_id'], 'goods_id' => $parameter['goods_id']);
|
|
$res = $this->toSetInc($where, "surplus_num", $parameter['num']);
|
|
} else {
|
|
$res = array('status' => 0, 'msg' => '参数错误');
|
|
}
|
|
return $res;
|
|
}
|
|
|
|
/**
|
|
* 售后减少活动库存
|
|
* @param $parameter
|
|
* @return mixed
|
|
*/
|
|
public function StockSetDec($parameter)
|
|
{
|
|
if (is_array($parameter)) {
|
|
$where = array(
|
|
'id' => $parameter['advance_id'],
|
|
'goods_id' => $parameter['goods_id']
|
|
);
|
|
$res = $this->toSetDec($where, "surplus_num", $parameter['num']);
|
|
} else {
|
|
$res['status'] = 0;
|
|
$res['msg'] = '参数错误';
|
|
}
|
|
return $res;
|
|
}
|
|
} |