610 行
21 KiB
PHP
可执行文件
610 行
21 KiB
PHP
可执行文件
<?php
|
|
|
|
namespace Common\Business;
|
|
|
|
use Common\Model\SSaleMGoodsModel;
|
|
use Common\Model\StoreSplitRuleModel as goodsRuleModel;
|
|
use Common\Model\StoreSplitRecordModel;
|
|
use Common\Model\SPurchaseGoodsModel;
|
|
use Think\Exception;
|
|
//[1.7.90]
|
|
/**
|
|
* 门店商品拆分组合类
|
|
* Class GoodsSplit
|
|
* [
|
|
* 拆分组合 goodsSplitMakeUp
|
|
* 拆分组合验证参数 parameterVerify
|
|
* 规则信息(根据规则id查询) basisIdGetRule
|
|
* 规则信息(根据商品id查询) basisGoodsGetRule
|
|
* 大件商品数量(获取自动拆分应该操作的大件商品数量) getOperationNum
|
|
* 商品信息验证(拆分组合根据规则信息) goodsSplitMakeUpVerify
|
|
* 手动拆分数量验证 splitNumVerify
|
|
* 组合验证数量 makeNumVerify
|
|
* 拆分操作 SplitAction
|
|
* 组合操作 makeUpAction
|
|
* 拆分组合添加记录 splitRecord
|
|
* ]
|
|
* @package Common\Business
|
|
*/
|
|
class GoodsSplit
|
|
{
|
|
/**
|
|
* 拆分组合
|
|
* @param $parameter
|
|
* 公共参数[
|
|
* store_id=>门店id,
|
|
* merchant_id=>商户id,
|
|
* supplier_type=>1常规供货商 2寄售供货商,
|
|
* operator_id=>操作人id,
|
|
* operation_type=>1拆分 2组合
|
|
* split_type=> 1手动 2自动,
|
|
* operation_num=>操作的库存数量,
|
|
* operator_type=>1后端请求 2收银端请求
|
|
* ]
|
|
* 后台参数[
|
|
* id=>规则id,
|
|
* purchase_order_id=>寄售供货商须传采购id
|
|
* ]
|
|
* 收银端参数[
|
|
* small_goods_id=>自动拆分的小件商品id,s
|
|
* mall_sku_id=>规格id
|
|
* ]
|
|
*
|
|
*
|
|
* @return array
|
|
* [
|
|
* status
|
|
* message
|
|
* ]
|
|
*/
|
|
public function goodsSplitMakeUp($parameter)
|
|
{
|
|
$result = $this->parameterVerify($parameter); //验证参数
|
|
if ($result['status'] != 1) {
|
|
return $result;
|
|
}
|
|
//获取规则信息
|
|
switch ($parameter['split_type']) {
|
|
case 1:
|
|
//手动拆分组合
|
|
$result = $this->basisIdGetRule($parameter);
|
|
if ($result['status'] != 1) {
|
|
return $result;
|
|
}
|
|
break;
|
|
case 2:
|
|
//自动拆分组合
|
|
$result = $this->basisGoodsGetRule($parameter);
|
|
if ($result['status'] != 1) {
|
|
return $result;
|
|
}
|
|
$parameter['id'] = $result['data']['rule']['id']; //规则id
|
|
break;
|
|
}
|
|
$parameter['rule'] = $result['data']['rule']; //规则信息
|
|
$result = $this->goodsSplitMakeUpVerify($parameter); //商品信息验证
|
|
if ($result['status'] != 1) {
|
|
return $result;
|
|
}
|
|
$parameter['large_goods'] = $result['data']['large_goods']; //大件商品
|
|
$parameter['small_goods'] = $result['data']['small_goods']; //小件商品
|
|
//自动拆分
|
|
if ($parameter['split_type'] == 2 && $parameter['operation_type'] == 1) {
|
|
$result = $this->getOperationNum($parameter); //获取自动拆分应该操作的大件商品数量
|
|
if ($result['status'] != 1) {
|
|
return $result;
|
|
}
|
|
$parameter['operation_num'] = $result['data']['operation_num']; //拆分的数量
|
|
}
|
|
switch ($parameter['operation_type']) {
|
|
case 1:
|
|
//拆分
|
|
$result = $this->splitNumVerify($parameter); //验证数量
|
|
if ($result['status'] != 1) {
|
|
return $result;
|
|
}
|
|
$result = $this->SplitAction($parameter); //拆分操作
|
|
if ($result['status'] != 1) {
|
|
return $result;
|
|
}
|
|
break;
|
|
case 2:
|
|
//组合
|
|
$result = $this->makeNumVerify($parameter); //验证数量
|
|
if ($result['status'] != 1) {
|
|
return $result;
|
|
}
|
|
$result = $this->makeUpAction($parameter); //组合操作
|
|
if ($result['status'] != 1) {
|
|
return $result;
|
|
}
|
|
break;
|
|
}
|
|
$parameter['large_operate_num'] = $result['data']['large_operate_num']; //大件操作的数量
|
|
$parameter['small_operate_num'] = $result['data']['small_operate_num']; //小件操作的数量
|
|
$result = $this->splitRecord($parameter); //拆分组合记录
|
|
return $result;
|
|
}
|
|
|
|
|
|
/**
|
|
* 拆分组合验证参数
|
|
* @param $parameter
|
|
* [
|
|
* operation_type 1拆分 2组合
|
|
* split_type 1手动 2自动,
|
|
* ]
|
|
* @return array
|
|
* [
|
|
* status
|
|
* msg
|
|
* ]
|
|
*/
|
|
protected function parameterVerify($parameter)
|
|
{
|
|
if (empty($parameter) || !is_array($parameter)) {
|
|
$res = array('status' => 0, 'msg' => '参数类型有误');
|
|
return $res;
|
|
}
|
|
if (!in_array($parameter['operation_type'], array(1, 2)) || !in_array($parameter['split_type'], array(1, 2))) {
|
|
$res = array('status' => 0, 'msg' => '操作类型有误');
|
|
return $res;
|
|
}
|
|
$res = array('status' => 1, 'msg' => '验证成功');
|
|
return $res;
|
|
}
|
|
|
|
|
|
/**
|
|
* 规则信息(根据规则id查询)
|
|
* @param $parameter
|
|
* [
|
|
* id 规则id
|
|
* ]
|
|
* @return array
|
|
* [
|
|
* status
|
|
* msg
|
|
* data=>[
|
|
* rule 规则信息
|
|
* ]
|
|
* ]
|
|
*/
|
|
protected function basisIdGetRule($parameter)
|
|
{
|
|
try {
|
|
$goodsRuleModel = new goodsRuleModel();
|
|
$rule = $goodsRuleModel->getFind(array('id' => $parameter['id'], 'status' => 1));
|
|
} catch (\Exception $e) {
|
|
return array('status' => 0, 'msg' => '未找到改拆分规则,请刷新重试');
|
|
}
|
|
if (!$rule) {
|
|
$res = array('status' => 0, 'msg' => '未找到改拆分规则,请刷新重试');
|
|
} else {
|
|
$res = array('status' => 1, 'msg' => '查询成功', 'data' => array('rule' => $rule));
|
|
}
|
|
return $res;
|
|
}
|
|
|
|
|
|
/**
|
|
* 规则信息(根据商品id查询)
|
|
* @param $parameter
|
|
* [
|
|
* store_id 门店id
|
|
* small_goods_id 小件商品id
|
|
* small_sku_id 小件商品规格id
|
|
* ]
|
|
* @return array
|
|
* [
|
|
* status
|
|
* msg
|
|
* data=>[
|
|
* rule 规则信息
|
|
* ]
|
|
* ]
|
|
*/
|
|
protected function basisGoodsGetRule($parameter)
|
|
{
|
|
try {
|
|
$goodsRuleModel = new goodsRuleModel();
|
|
$where = array(
|
|
'store_id' => $parameter['store_id'],
|
|
'status' => 1,
|
|
'small_goods_id' => $parameter['small_goods_id']
|
|
);
|
|
if (!empty($parameter['small_sku_id'])) {
|
|
$where['small_sku_id'] = $parameter['small_sku_id'];
|
|
}
|
|
$rule = $goodsRuleModel->getFind($where);
|
|
} catch (\Exception $e) {
|
|
return array('status' => 0, 'msg' => '未找到改拆分规则,请刷新重试');
|
|
}
|
|
if (!$rule) {
|
|
$res = array('status' => 0, 'msg' => '未找到改拆分规则,请刷新重试');
|
|
} else {
|
|
$res = array('status' => 1, 'msg' => '查询成功', 'data' => array('rule' => $rule));
|
|
}
|
|
return $res;
|
|
}
|
|
|
|
|
|
/**
|
|
* 大件商品数量(获取自动拆分应该操作的大件商品数量)
|
|
* @param $parameter
|
|
* [
|
|
* large_goods 大件商品信息
|
|
* rule 规则信息
|
|
* operation_num 操作的数量
|
|
* ]
|
|
* @return float|mixed
|
|
* [
|
|
* status
|
|
* msg
|
|
* data=>[
|
|
* operation_num 操作数量除以规则数量=可操作的数量
|
|
* ]
|
|
* ]
|
|
*/
|
|
public function getOperationNum($parameter)
|
|
{
|
|
if ($parameter['large_goods']['goods_num'] <= 0) {
|
|
$res = array('status' => 0, 'msg' => '大件商品库存不足');
|
|
return $res;
|
|
}
|
|
$rule = $parameter['rule']; //规则信息
|
|
$operation_num = ceil($parameter['operation_num'] / $rule['num']);
|
|
if ($parameter['large_goods']['goods_num'] < $operation_num) {
|
|
$operation_num = $parameter['large_goods']['goods_num'];
|
|
}
|
|
$res = array('status' => 1, 'msg' => '计算成功', 'data' => array('operation_num' => $operation_num));
|
|
return $res;
|
|
}
|
|
|
|
|
|
/**
|
|
* 商品信息验证(拆分组合根据规则信息)
|
|
* @param $parameter
|
|
* [
|
|
* rule 规则信息
|
|
* ]
|
|
* @return array
|
|
* [
|
|
* status
|
|
* msg
|
|
* data=>[
|
|
* large_goods 大件商品信息
|
|
* small_goods 小件商品信息
|
|
* ]
|
|
* ]
|
|
*/
|
|
protected function goodsSplitMakeUpVerify($parameter)
|
|
{
|
|
try {
|
|
$sale_model = new SSaleMGoodsModel();
|
|
$rule = $parameter['rule']; //规则信息
|
|
$large_map = array();
|
|
$large_map['goods_id'] = $rule['large_goods_id'];
|
|
$large_map['status'] = array('in', '0,1');
|
|
if ($rule['large_attribute_state'] == 2) {
|
|
$large_map['sku_id'] = $rule['large_sku_id'];
|
|
}
|
|
$large_goods = $sale_model->getFieldInfo($large_map, "id,goods_num,company");
|
|
$small_map = array();
|
|
$small_map['goods_id'] = $rule['small_goods_id'];
|
|
$small_map['status'] = array('in', '0,1');
|
|
if ($rule['small_attribute_state'] == 2) {
|
|
$small_map['sku_id'] = $rule['small_sku_id'];
|
|
}
|
|
$small_goods = $sale_model->getFieldInfo($small_map, "id,goods_num,company");
|
|
} catch (\Exception $e) {
|
|
return array('status' => 0, 'msg' => '未找到该规则的商品');
|
|
}
|
|
if (!empty($large_goods) && !empty($small_goods)) {
|
|
$res = array(
|
|
'status' => 1,
|
|
'msg' => '商品查询成功',
|
|
'data' => array(
|
|
'large_goods' => $large_goods,
|
|
'small_goods' => $small_goods
|
|
)
|
|
);
|
|
} else {
|
|
if (empty($large_goods)) {
|
|
$res = array('status' => 0, 'msg' => '未找到该规则的大件商品');
|
|
} else {
|
|
$res = array('status' => 0, 'msg' => '未找到该规则的小件商品');
|
|
}
|
|
}
|
|
return $res;
|
|
}
|
|
|
|
|
|
/**
|
|
* 手动拆分数量验证
|
|
* @param $parameter
|
|
* @return array
|
|
*/
|
|
protected function splitNumVerify($parameter)
|
|
{
|
|
if ($parameter['large_goods']['goods_num'] < $parameter['operation_num']) {
|
|
$res = array('status' => 0, 'msg' => '大件商品库存不足');
|
|
return $res;
|
|
}
|
|
$res = array('status' => 1, 'msg' => '商品验证成功');
|
|
return $res;
|
|
}
|
|
|
|
/**
|
|
*组合验证数量
|
|
* @param $parameter
|
|
* @return array
|
|
*/
|
|
protected function makeNumVerify($parameter)
|
|
{
|
|
if ($parameter['small_goods']['goods_num'] < $parameter['operation_num']) {
|
|
$res = array('status' => 0, 'msg' => '小件商品库存不足');
|
|
return $res;
|
|
}
|
|
if ($parameter['operation_num'] % $parameter['rule']['num'] != 0) {
|
|
$res = array('status' => 0, 'msg' => '请输入正确数量,组合后的数量应该是整数');
|
|
return $res;
|
|
}
|
|
$res = array('status' => 1, 'msg' => '验证数量成功');
|
|
return $res;
|
|
}
|
|
|
|
|
|
/**
|
|
* 拆分操作
|
|
* @param $parameter
|
|
* [
|
|
* rule 规则信息
|
|
* operation_num 大件商品操作数量
|
|
* supplier_type 2寄售供货商
|
|
* purchase_order_id 采购单id
|
|
* operation_type=>1拆分 2组合
|
|
* split_type=> 1手动 2自动,
|
|
* ]
|
|
* @return array
|
|
* [
|
|
* status
|
|
* msg
|
|
* ]
|
|
*/
|
|
protected function SplitAction($parameter)
|
|
{
|
|
$PurchaseGoodsModel = new SPurchaseGoodsModel();
|
|
$rule = $parameter['rule']; //规则信息
|
|
$large_num = $parameter['operation_num']; //大件操作数量
|
|
$small_num = round($parameter['operation_num'] * $rule['num'], 3); //小件数量
|
|
try {
|
|
$success = A('Api/Inventory')->Inventory(2, $large_num, $rule['large_goods_id'], $rule['large_sku_id']); //大件商品库存减少
|
|
if (!$success) {
|
|
$res = array('status' => 0, 'msg' => '该规则的大件商品库存减少失败');
|
|
return $res;
|
|
}
|
|
$stock_data = [
|
|
'goods_id'=>$rule['large_goods_id'],
|
|
'sku_id'=>$rule['large_sku_id'],
|
|
'stock_price'=>'',
|
|
'stock_num'=>$large_num,
|
|
'type'=>6,
|
|
];
|
|
A('Api/Inventory')->goodsNumReduce($stock_data); //大件商品出库记录
|
|
// 添加商品记录
|
|
$success = A('Api/Inventory')->Inventory(1, $small_num, $rule['small_goods_id'], $rule['small_sku_id']); //小件商品库存增加
|
|
if (!$success) {
|
|
$res = array('status' => 0, 'msg' => '该规则的小件商品库存增加失败');
|
|
return $res;
|
|
}
|
|
//寄售供货商
|
|
if ($parameter['supplier_type'] == 2) {
|
|
if (!empty($parameter['purchase_order_id'])) {
|
|
$map_pur = array(
|
|
'purchase_order_id' => $parameter['purchase_order_id'],
|
|
'goods_id' => $rule['small_goods_id']
|
|
);
|
|
if (!empty($rule['small_sku_id'])) {
|
|
$map_pur['sku_id'] = $rule['small_sku_id'];
|
|
}
|
|
$purchase_info = $PurchaseGoodsModel->getFind($map_pur);
|
|
} else if ($parameter['operation_type'] == 1 && $parameter['split_type'] == 2) {
|
|
//收银端自动拆分
|
|
$map_pur = array(
|
|
'goods_id' => $rule['small_goods_id']
|
|
);
|
|
if (!empty($rule['small_sku_id'])) {
|
|
$map_pur['sku_id'] = $rule['small_sku_id'];
|
|
}
|
|
$purchase_info = $PurchaseGoodsModel->getFind($map_pur, 'id desc');
|
|
if ($purchase_info) {
|
|
$parameter['purchase_order_id'] = $purchase_info['id'];
|
|
}
|
|
}
|
|
|
|
if (!empty($purchase_info)) {
|
|
$supplier_json = array(
|
|
$parameter['purchase_order_id'] => array(
|
|
'warehouse_price' => $purchase_info['purchase_price'],
|
|
'num' => $small_num,
|
|
'supplier_id' => $purchase_info['supplier_id'],
|
|
'purchase_order_id' => $parameter['purchase_order_id']
|
|
)
|
|
);
|
|
$supplier_arr = array(
|
|
'supplier_type' => 2,
|
|
'supplier_json' => json_encode($supplier_json),
|
|
'purchase_id_str' => $parameter['purchase_order_id']
|
|
);
|
|
}
|
|
}
|
|
$data = [
|
|
'goods_id' => $rule['small_goods_id'],
|
|
'sku_id' => $rule['small_sku_id'],
|
|
'num' => $small_num,
|
|
'price' => '',
|
|
'type' => 10,
|
|
'all_money' => '',
|
|
'supplier_arr' => $supplier_arr,
|
|
];
|
|
$success = A('Api/Inventory')->goodsNumRise($data); //小件商品库增加
|
|
if ($success['status'] != 1) {
|
|
return $success;
|
|
}
|
|
} catch (\Exception $e) {
|
|
return array('status' => 0, 'msg' => '拆分失败');
|
|
}
|
|
if ($success['status'] == 1) {
|
|
$result = array(
|
|
'status' => 1,
|
|
'msg' => '拆分成功',
|
|
'data' => array(
|
|
'large_operate_num' => $large_num,
|
|
'small_operate_num' => $small_num
|
|
)
|
|
);
|
|
} else {
|
|
$result = array('status' => 0, 'msg' => '拆分失败');
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
|
|
/**
|
|
* 组合操作
|
|
* @param $parameter
|
|
* [
|
|
* rule 规则信息
|
|
* operation_num 小件商品数量
|
|
* supplier_type 2寄售供货商
|
|
* purchase_order_id 采购单id
|
|
* ]
|
|
* @return array
|
|
* [
|
|
* status
|
|
* msg
|
|
* data=>[
|
|
* large_operate_num 大件商品操作数量
|
|
* small_operate_num 小件商品操作数量
|
|
* ]
|
|
* ]
|
|
*/
|
|
protected function makeUpAction($parameter)
|
|
{
|
|
try {
|
|
$purchaseGoodsModel = new SPurchaseGoodsModel();
|
|
$rule = $parameter['rule']; //规则信息
|
|
$large_num = round($parameter['operation_num'] / $rule['num'], 3); //大件数量
|
|
$small_num = $parameter['operation_num']; //小件数量
|
|
$success = A('Api/Inventory')->Inventory(2, $small_num, $rule['small_goods_id'], $rule['small_sku_id']);
|
|
if (!$success) {
|
|
$res = array('status' => 0, 'msg' => '该规则的小件商品库存减少失败');
|
|
return $res;
|
|
}
|
|
$stock_data = [
|
|
'goods_id'=>$rule['small_goods_id'],
|
|
'sku_id'=>$rule['small_sku_id'],
|
|
'stock_price'=>'',
|
|
'stock_num'=>$small_num,
|
|
'type'=>10,
|
|
];
|
|
A('Api/Inventory')->goodsNumReduce($stock_data); //小件商品库存记录
|
|
$success = A('Api/Inventory')->Inventory(1, $large_num, $rule['large_goods_id'], $rule['large_sku_id']); //大件商品库存增加
|
|
if (!$success) {
|
|
$res = array('status' => 0, 'msg' => '该规则的大件商品库存增加失败');
|
|
return $res;
|
|
}
|
|
if ($parameter['supplier_type'] == 2 && !empty($parameter['purchase_order_id'])) {
|
|
//寄售供货商
|
|
$map_pur = array(
|
|
'purchase_order_id' => $parameter['purchase_order_id'],
|
|
'goods_id' => $rule['large_goods_id']
|
|
);
|
|
if (!empty($rule['large_sku_id'])) {
|
|
$map_pur['sku_id'] = $rule['large_sku_id'];
|
|
}
|
|
$purchase_info = $purchaseGoodsModel->getFind($map_pur);
|
|
if (!empty($purchase_info)) {
|
|
$supplier_json = array(
|
|
$parameter['purchase_order_id'] => array(
|
|
'warehouse_price' => $purchase_info['purchase_price'],
|
|
'num' => $small_num,
|
|
'supplier_id' => $purchase_info['supplier_id'],
|
|
'purchase_order_id' => $parameter['purchase_order_id']
|
|
)
|
|
);
|
|
$supplier_arr = array(
|
|
'supplier_type' => 2,
|
|
'supplier_json' => json_encode($supplier_json),
|
|
'purchase_id_str' => $parameter['purchase_order_id']
|
|
);
|
|
}
|
|
}
|
|
$data = [
|
|
'goods_id' => $rule['large_goods_id'],
|
|
'sku_id' => $rule['large_sku_id'],
|
|
'num' => $large_num,
|
|
'price' => '',
|
|
'type' => 13,
|
|
'all_money' => '',
|
|
'supplier_arr' => $supplier_arr,
|
|
];
|
|
$success = A('Api/Inventory')->goodsNumRise($data); //大件商品库存记录
|
|
if ($success['status'] != 1) {
|
|
return $success;
|
|
}
|
|
} catch (\Exception $e) {
|
|
return array('status' => 0, 'msg' => '组合失败');
|
|
}
|
|
if ($success['status'] == 1) {
|
|
$result = array(
|
|
'status' => 1,
|
|
'msg' => '组合成功',
|
|
'data' => array(
|
|
'large_operate_num' => $large_num,
|
|
'small_operate_num' => $small_num
|
|
)
|
|
);
|
|
} else {
|
|
$result = array('status' => 0, 'msg' => '组合失败');
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
|
|
/**
|
|
* 拆分组合添加记录
|
|
* @param $parameter
|
|
* @return array
|
|
*/
|
|
protected function splitRecord($parameter)
|
|
{
|
|
try {
|
|
$StoreSplitRecordModel = new StoreSplitRecordModel();
|
|
$record = array(
|
|
'rule_id' => $parameter['id'],
|
|
'merchant_id' => $parameter['merchant_id'],
|
|
'store_id' => $parameter['store_id'],
|
|
'operator_id' => $parameter['operator_id'],
|
|
'large_num' => $parameter['large_operate_num'],
|
|
'small_num' => $parameter['small_operate_num'],
|
|
'add_time' => time(),
|
|
'type' => $parameter['operation_type'],
|
|
'status' => 1,
|
|
'large_company' => $parameter['large_goods']['company'],
|
|
'small_company' => $parameter['small_goods']['company'],
|
|
'operator_type' => $parameter['operator_type']
|
|
);
|
|
$success = $StoreSplitRecordModel->addData($record);
|
|
} catch (\Exception $e) {
|
|
return array('status' => 0, 'msg' => '操作成功,记录添加失败');
|
|
}
|
|
if (!$success) {
|
|
$res = array('status' => 0, 'msg' => '操作成功,记录添加失败');
|
|
} else {
|
|
$res = array('status' => 1, 'msg' => '操作成功');
|
|
}
|
|
return $res;
|
|
}
|
|
} |