门店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; } }