文件
mashangyoujiu/Application/Common/Business/GoodsSplit.class.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;
}
}