|
|
@@ -17,6 +17,8 @@ class StockOutOrderClass extends BaseClass
|
|
|
const STATUS_WAIT = 1; //待出库
|
|
|
const STATUS_COMPLETE = 2 ; //已出库
|
|
|
const STATUS_CANCEL = 3; //取消出库
|
|
|
+ const STATUS_BACK = 4; //退回,取消入库
|
|
|
+
|
|
|
|
|
|
const ACTION_WAIT = 'wait';
|
|
|
const ACTION_CONFIRM = 'confirm'; //直接入库
|
|
|
@@ -25,74 +27,28 @@ class StockOutOrderClass extends BaseClass
|
|
|
|
|
|
//2021.1.23 linqh 新增出库订单:
|
|
|
// 一、保存订单表和订单详情表
|
|
|
- //二、减改门店的库存,
|
|
|
public static function addOrder($data)
|
|
|
{
|
|
|
-
|
|
|
$action = $data['action'];
|
|
|
$data['status'] = self::STATUS_WAIT; //待入库
|
|
|
$orderSn =orderSn::getGhsStockOutSn();
|
|
|
$data['orderSn'] = $orderSn;
|
|
|
$ghsItemInfo = $data['itemInfo']; // [{bigNum:0,smallNum:0,productId:1}]
|
|
|
- $bigNum = 0; //总共多少扎
|
|
|
- $smallNum = 0; //总共多少支
|
|
|
-
|
|
|
- $productIds = array_column($ghsItemInfo,'productId');
|
|
|
- $productData = ProductClass::getProductByIds($productIds);
|
|
|
- $itemIds = array_column($productData,'itemId');
|
|
|
- $productData = array_column($productData, NULL, 'id');
|
|
|
-
|
|
|
- $itemData = xhItemService::getByIds($itemIds);
|
|
|
- $itemData = array_column($itemData, NULL, 'id');
|
|
|
-
|
|
|
- if(!empty($ghsItemInfo)){
|
|
|
- foreach ($ghsItemInfo as $v){
|
|
|
- $bigNum += $v['bigNum']??0;
|
|
|
- $smallNum += $v['smallNum']??0;
|
|
|
|
|
|
- }
|
|
|
- }
|
|
|
- $data['bigNum'] = $bigNum;
|
|
|
- $data['smallNum'] = $smallNum;
|
|
|
+ $sumNum = self::sumNumByItemInfo($ghsItemInfo);
|
|
|
+ $data['bigNum'] = $sumNum['bigNum'];// 总的大单位数量 总共多少扎
|
|
|
+ $data['smallNum'] = $sumNum['smallNum']; //总的小单位数量 总共多少支
|
|
|
|
|
|
$connection = Yii::$app->db;
|
|
|
$transaction = $connection->beginTransaction();
|
|
|
try{
|
|
|
$order = self::add($data);
|
|
|
//写入详情表
|
|
|
- $batchData = [];
|
|
|
- foreach ($ghsItemInfo as $v){
|
|
|
- $tmp = [];
|
|
|
- $productId = $v['productId']??0;
|
|
|
- $itemId = $productData[$productId]['itemId'];
|
|
|
- $tmp['productId'] = $productId;
|
|
|
- $tmp['orderSn'] = $orderSn;
|
|
|
- $tmp['itemId'] = $itemId;
|
|
|
- $tmp['itemStock'] = $productData[$productId]['stock']??0;//当时库存
|
|
|
- $unitNum = $itemData[$itemId]['unitNum']??0;
|
|
|
- $tmp['itemNum'] = ProductClass::mergeItemNum($v['bigNum'],$v['smallNum'],$unitNum);
|
|
|
- $tmp['itemPrice'] = $productData[$productId]['price']; //售卖的价格
|
|
|
- $stockFormat= ProductClass::formatStock($tmp['itemStock'],$unitNum); // 库存总单位数量转大小单位的数量
|
|
|
- $itemInfo = [
|
|
|
- 'itemName'=> $itemData[$itemId]['name']??'',
|
|
|
- 'itemCover'=> $itemData[$itemId]['cover']??'',
|
|
|
- 'bigNum'=> $v['bigNum']??0,// 出库的大单位数量
|
|
|
- 'smallNum'=> $v['smallNum']??0, //出库的小单位数量
|
|
|
- 'bigNumStock'=> $stockFormat['bigNum'],// 当时库存大单位数
|
|
|
- 'smallNumStock'=> $stockFormat['smallNum'],//当时库存 小单位数
|
|
|
- 'itemUnit'=> $unitNum?2:1,
|
|
|
- 'itemBigUnit'=> xhItemService::getUnitName($itemData[$itemId]['bigUnit']??1),
|
|
|
- 'itemSmallUnit'=> xhItemService::getUnitName($itemData[$itemId]['smallUnit']??2),
|
|
|
- ];
|
|
|
- $tmp['itemInfo'] = json_encode($itemInfo);
|
|
|
- $batchData[] = $tmp;
|
|
|
- //减库存
|
|
|
- ProductClass::decreaseStock($productId,$v['bigNum'],$v['smallNum']);
|
|
|
- }
|
|
|
+ $batchData = self::groupOrderItem($ghsItemInfo,$orderSn);
|
|
|
StockOutOrderItemClass::batchAddOrderItem($batchData);
|
|
|
$transaction->commit();
|
|
|
if($action===self::ACTION_CONFIRM){
|
|
|
- //直接入库
|
|
|
+ //直接出库=》直接入库
|
|
|
self::confirmOrder($orderSn,$data['outShopId'],$data['adminId']);
|
|
|
}
|
|
|
return $order;
|
|
|
@@ -104,32 +60,31 @@ class StockOutOrderClass extends BaseClass
|
|
|
|
|
|
}
|
|
|
|
|
|
+
|
|
|
//2021.1.23 linqh 确认出库 :
|
|
|
// 一、从状态 1 修改为 2
|
|
|
- //
|
|
|
+ // 二、解除解冻的库存 todo
|
|
|
// 三、增加流水记录
|
|
|
// 四、写入一条数据到入库门店的入库订单表(生成入库订单号)
|
|
|
// 五、将入库订单号保存当前记录中
|
|
|
public static function confirmOrder($orderSn,$shopId,$adminId)
|
|
|
{
|
|
|
- $where = [
|
|
|
- 'orderSn'=>$orderSn,
|
|
|
- 'status'=>self::STATUS_WAIT,
|
|
|
- 'outShopId'=>$shopId,
|
|
|
- ];
|
|
|
- self::orderExist($where);
|
|
|
+
|
|
|
$data = [
|
|
|
'status'=>self::STATUS_COMPLETE,
|
|
|
'adminId'=>$adminId,
|
|
|
];
|
|
|
$orderData = self::getOrderDetail($orderSn,$shopId);
|
|
|
+ if($orderData['status'] != self::STATUS_WAIT){
|
|
|
+ util::fail("订单已处理");
|
|
|
+ }
|
|
|
$merchantId = $orderData['merchantId'];
|
|
|
$orderId = $orderData['id'];
|
|
|
$connection = Yii::$app->db;
|
|
|
$transaction = $connection->beginTransaction();
|
|
|
try{
|
|
|
//修改状态
|
|
|
- self::updateByCondition($where,$data);
|
|
|
+ self::updateById($orderId,$data);
|
|
|
$itemInfo = $orderData['itemInfo']??[];
|
|
|
if(empty($itemInfo)){
|
|
|
$transaction->rollBack();
|
|
|
@@ -137,24 +92,10 @@ class StockOutOrderClass extends BaseClass
|
|
|
}
|
|
|
$orderData['shopId'] = $shopId;
|
|
|
StockRecordClass::addRecordByOrder($orderData,StockRecordClass::STOCK_RECORD_TYPE_OUT_STOCK);
|
|
|
-
|
|
|
-// $productData = self::getProductMapData($itemInfo);
|
|
|
-// foreach ($itemInfo as $v){
|
|
|
-// $itemId = $v['itemId'];
|
|
|
-// $productId = $v['productId'];
|
|
|
-// $record = [];
|
|
|
-// $itemNum = ProductClass::mergeItemNumByItemId($v['bigNum'],$v['smallNum'],$itemId);
|
|
|
-// $record['merchantId'] = $merchantId;
|
|
|
-// $record['shopId'] = $shopId;
|
|
|
-// $record['orderSn'] = $orderSn;
|
|
|
-// $record['itemId'] = $itemId;
|
|
|
-// $record['itemNum'] = $itemNum;
|
|
|
-// $record['oldStock'] = $productData[$productId]['stock'];
|
|
|
-// $record['newStock'] = bcsub($productData[$productId]['stock'],$itemNum,2);
|
|
|
-// //记录流水
|
|
|
-// StockRecordService::addPurchaseOrderRecord($record);
|
|
|
-//
|
|
|
-// }
|
|
|
+ //减库存
|
|
|
+ foreach ($itemInfo as $v){
|
|
|
+ ProductClass::decreaseStockByItemNum($v['productId'],$v['itemNum']);
|
|
|
+ }
|
|
|
//写入一条数据到入库门店的入库订单表(生成入库订单号
|
|
|
$inOrderData = StockInOrderClass::addOrder($orderData);
|
|
|
$inOrderSn = $inOrderData['orderSn'];
|
|
|
@@ -171,8 +112,6 @@ class StockOutOrderClass extends BaseClass
|
|
|
|
|
|
//2021.1.23. linqh 取消出库 :
|
|
|
//一、 从状态1 修改为 3
|
|
|
- //二、退回库存
|
|
|
- // 三、记录流水
|
|
|
public static function cancelOrder($orderSn,$shopId,$adminId)
|
|
|
{
|
|
|
$where = [
|
|
|
@@ -180,25 +119,12 @@ class StockOutOrderClass extends BaseClass
|
|
|
'status'=>self::STATUS_WAIT,
|
|
|
'outShopId'=>$shopId,
|
|
|
];
|
|
|
+ self::orderExist($where);
|
|
|
$data = [
|
|
|
'status'=>self::STATUS_CANCEL,
|
|
|
'adminId'=>$adminId,
|
|
|
];
|
|
|
- $connection = Yii::$app->db;
|
|
|
- $transaction = $connection->beginTransaction();
|
|
|
- try{
|
|
|
- self::updateByCondition($where,$data);
|
|
|
- $orderData = self::getOrderDetail($orderSn,$shopId);
|
|
|
- //退回库存
|
|
|
- ProductClass::backStockByOrderItemInfo($orderData['itemInfo']);
|
|
|
- //记录流水
|
|
|
- $orderData['shopId'] = $orderData['outShopId'];
|
|
|
- StockRecordClass::addRecordByOrder($orderData,StockRecordClass::STOCK_RECORD_TYPE_OUT_STOCK_CANCEL);
|
|
|
- $transaction->commit();
|
|
|
- }catch (\Exception $exception){
|
|
|
- $transaction->rollBack();
|
|
|
- util::fail();
|
|
|
- }
|
|
|
+ self::updateByCondition($where,$data);
|
|
|
|
|
|
}
|
|
|
|
|
|
@@ -212,6 +138,7 @@ class StockOutOrderClass extends BaseClass
|
|
|
}
|
|
|
$data['list'] = $list;
|
|
|
$data['list'] = self::groupAdminList($list);
|
|
|
+
|
|
|
return $data;
|
|
|
}
|
|
|
|
|
|
@@ -226,10 +153,8 @@ class StockOutOrderClass extends BaseClass
|
|
|
$info = json_decode($v['itemInfo'],true);
|
|
|
$tmp = $info;
|
|
|
$tmp['itemCover'] = self::groupImg($info['itemCover']);
|
|
|
- $tmp['productId'] = $v['productId'];
|
|
|
- $tmp['itemId'] = $v['itemId'];
|
|
|
- $tmp['itemPrice'] = $v['itemPrice'];
|
|
|
- $tmp['itemNum'] = $v['itemNum'];
|
|
|
+ unset($v['itemInfo']);
|
|
|
+ $tmp = array_merge($tmp,$v);
|
|
|
$itemData[] = $tmp;
|
|
|
}
|
|
|
}
|
|
|
@@ -237,6 +162,7 @@ class StockOutOrderClass extends BaseClass
|
|
|
$orderData['itemInfo'] = $itemData;
|
|
|
return $orderData;
|
|
|
}
|
|
|
+
|
|
|
//2021.1.23 linqh 判断定时是否存在
|
|
|
public static function orderExist($where)
|
|
|
{
|
|
|
@@ -246,4 +172,44 @@ class StockOutOrderClass extends BaseClass
|
|
|
}
|
|
|
return $orderData;
|
|
|
}
|
|
|
+
|
|
|
+ // 组装 orderItem linqh 2021.1.25
|
|
|
+ public static function groupOrderItem($ghsItemInfo,$orderSn)
|
|
|
+ {
|
|
|
+ $productData = self::getProductMapData($ghsItemInfo);
|
|
|
+ $itemIds = array_column($productData,'itemId');
|
|
|
+ $itemData = xhItemService::getByIds($itemIds);
|
|
|
+ $itemData = array_column($itemData, NULL, 'id');
|
|
|
+ //写入详情表
|
|
|
+ $batchData = [];
|
|
|
+ foreach($ghsItemInfo as $v){
|
|
|
+ $tmp = [];
|
|
|
+ $productId = $v['productId'];
|
|
|
+ $itemId = $productData[$productId]['itemId'];
|
|
|
+ $tmp['orderSn'] = $orderSn;
|
|
|
+ $tmp['itemId'] = $itemId;
|
|
|
+ $tmp['productId'] = $v['productId'];
|
|
|
+ $unitNum = $itemData[$itemId]['unitNum']??0;
|
|
|
+ $tmp['itemStock'] = $productData[$productId]['stock']??0;//当时库存
|
|
|
+ $tmp['itemNum'] = ProductClass::mergeItemNum($v['bigNum'],$v['smallNum'],$unitNum);// 数量
|
|
|
+ $tmp['itemPrice'] =$productData[$productId]['price']??0; //当时售卖的价格
|
|
|
+ $stockFormat= ProductClass::formatStock($tmp['itemStock'],$unitNum); // 库存总单位数量转大小单位的数量
|
|
|
+ $itemInfo = [
|
|
|
+ 'itemName'=> $itemData[$itemId]['name']??'',//花材名称
|
|
|
+ 'itemCover'=> $itemData[$itemId]['cover']??'',//花材图片
|
|
|
+ 'bigNum'=> $v['bigNum']??0,//数量(大单位)
|
|
|
+ 'smallNum'=> $v['smallNum']??0,//数量(小单位)
|
|
|
+ 'bigNumStock'=> $stockFormat['bigNum'],// 当时库存大单位数
|
|
|
+ 'smallNumStock'=> $stockFormat['smallNum'],//当时库存 小单位数
|
|
|
+ 'itemUnit'=> $unitNum?2:1,//单位数量 2表示有两个单位(e.g 扎和支) 1表是只有一个单位(e.g 扎)
|
|
|
+ 'ratio'=>$unitNum,// 比例
|
|
|
+ 'bigUnit'=> xhItemService::getUnitName($itemData[$itemId]['bigUnit']),//大单位名称 扎
|
|
|
+ 'smallUnit'=> xhItemService::getUnitName($itemData[$itemId]['smallUnit']),//小单位名称 支
|
|
|
+ ];
|
|
|
+ $tmp['itemInfo'] = json_encode($itemInfo);
|
|
|
+ $batchData[] = $tmp;
|
|
|
+ }
|
|
|
+ return $batchData;
|
|
|
+ }
|
|
|
+
|
|
|
}
|