|
|
@@ -4,6 +4,8 @@ namespace bizGhs\order\classes;
|
|
|
|
|
|
use biz\shop\classes\ShopCapitalClass;
|
|
|
use biz\shop\classes\ShopClass;
|
|
|
+use biz\stat\classes\StatStockInClass;
|
|
|
+use biz\stat\classes\StatStockOutClass;
|
|
|
use bizGhs\order\models\StockOutOrderItem;
|
|
|
use bizGhs\order\traits\OrderTrait;
|
|
|
use bizGhs\product\classes\ProductClass;
|
|
|
@@ -18,7 +20,7 @@ class StockInOrderClass extends BaseClass
|
|
|
{
|
|
|
use OrderTrait;
|
|
|
const STATUS_WAIT = 1; //待入库
|
|
|
- const STATUS_COMPLETE = 2 ; //已入库
|
|
|
+ const STATUS_COMPLETE = 2; //已入库
|
|
|
const STATUS_CANCEL = 3; //取消入库
|
|
|
const ACTION_CONFIRM = 'confirm'; //直接入库
|
|
|
public static $baseFile = '\bizGhs\order\models\StockInOrder';
|
|
|
@@ -49,7 +51,7 @@ class StockInOrderClass extends BaseClass
|
|
|
{
|
|
|
$data = [];
|
|
|
$data['status'] = self::STATUS_WAIT;//待入库
|
|
|
- $orderSn =orderSn::getGhsStockInSn();
|
|
|
+ $orderSn = orderSn::getGhsStockInSn();
|
|
|
$data['orderSn'] = $orderSn;
|
|
|
$data['sjId'] = $outOrderData['sjId'];
|
|
|
$data['outShopId'] = $outOrderData['outShopId'];
|
|
|
@@ -63,47 +65,47 @@ class StockInOrderClass extends BaseClass
|
|
|
$ghsItemInfo = $outOrderData['itemInfo'];
|
|
|
$shopId = $data['inShopId'];
|
|
|
//入库: 需要将itemId 转换成对应的productId,若没有对应的productId,则需要新增
|
|
|
- ProductClass::complementProduct($data['sjId'],$shopId,$ghsItemInfo);
|
|
|
- $itemIds = array_column($ghsItemInfo,"itemId");
|
|
|
- $productData = ProductClass::getGhsProductDataByItemIds($shopId,$itemIds);
|
|
|
- $itemData = array_column($productData,null,'itemId');
|
|
|
+ ProductClass::complementProduct($data['sjId'], $shopId, $ghsItemInfo);
|
|
|
+ $itemIds = array_column($ghsItemInfo, "itemId");
|
|
|
+ $productData = ProductClass::getGhsProductDataByItemIds($shopId, $itemIds);
|
|
|
+ $itemData = array_column($productData, null, 'itemId');
|
|
|
|
|
|
$connection = Yii::$app->db;
|
|
|
$transaction = $connection->beginTransaction();
|
|
|
|
|
|
- try{
|
|
|
+ try {
|
|
|
//写入订单表
|
|
|
$order = self::add($data);
|
|
|
//写入详情表
|
|
|
$batchData = [];
|
|
|
|
|
|
- foreach ($ghsItemInfo as $v){
|
|
|
+ foreach ($ghsItemInfo as $v) {
|
|
|
$tmp = [];
|
|
|
$itemId = $v['itemId'];
|
|
|
- $productId = $itemData[$itemId]['id']??0;
|
|
|
- if(!$productId){
|
|
|
+ $productId = $itemData[$itemId]['id'] ?? 0;
|
|
|
+ if (!$productId) {
|
|
|
util::fail("入库失败");
|
|
|
}
|
|
|
$tmp['productId'] = $productId;
|
|
|
$tmp['orderSn'] = $orderSn;
|
|
|
$tmp['itemId'] = $itemId;
|
|
|
- $tmp['itemStock'] = $itemData[$itemId]['stock']??0;//当时库存
|
|
|
+ $tmp['itemStock'] = $itemData[$itemId]['stock'] ?? 0;//当时库存
|
|
|
$tmp['itemNum'] = $v['itemNum'];
|
|
|
$tmp['itemPrice'] = $v['itemPrice']; //售卖的价格
|
|
|
- $ratio = $itemData[$itemId]['ratio']??0;
|
|
|
- $formatStock = ProductClass::formatStock($tmp['itemStock'],$ratio);
|
|
|
+ $ratio = $itemData[$itemId]['ratio'] ?? 0;
|
|
|
+ $formatStock = ProductClass::formatStock($tmp['itemStock'], $ratio);
|
|
|
$itemInfo = [
|
|
|
- 'itemName'=> $v['itemName']??'',
|
|
|
- 'itemCover'=> $v['cover']??'',
|
|
|
- 'bigNum'=> $v['bigNum'],// 出库的大单位数量
|
|
|
- 'smallNum'=> $v['smallNum'], //出库的小单位数量
|
|
|
- 'bigNumStock'=> $formatStock['bigNum'],// 当时库存大单位数
|
|
|
- 'smallNumStock'=> $formatStock['smallNum'],//当时库存 小单位数
|
|
|
- 'itemUnit'=> $v['itemUnit'],
|
|
|
- 'ratio'=>$v['ratio'],// 比例
|
|
|
- 'rank'=>$v['rank']??'B',// 花材级别
|
|
|
- 'bigUnit'=> $v['bigUnit'],
|
|
|
- 'smallUnit'=> $v['smallUnit'],
|
|
|
+ 'itemName' => $v['itemName'] ?? '',
|
|
|
+ 'itemCover' => $v['cover'] ?? '',
|
|
|
+ 'bigNum' => $v['bigNum'],// 出库的大单位数量
|
|
|
+ 'smallNum' => $v['smallNum'], //出库的小单位数量
|
|
|
+ 'bigNumStock' => $formatStock['bigNum'],// 当时库存大单位数
|
|
|
+ 'smallNumStock' => $formatStock['smallNum'],//当时库存 小单位数
|
|
|
+ 'itemUnit' => $v['itemUnit'],
|
|
|
+ 'ratio' => $v['ratio'],// 比例
|
|
|
+ 'rank' => $v['rank'] ?? 'B',// 花材级别
|
|
|
+ 'bigUnit' => $v['bigUnit'],
|
|
|
+ 'smallUnit' => $v['smallUnit'],
|
|
|
];
|
|
|
$tmp['itemInfo'] = json_encode($itemInfo);
|
|
|
$batchData[] = $tmp;
|
|
|
@@ -111,9 +113,9 @@ class StockInOrderClass extends BaseClass
|
|
|
StockInOrderItemClass::batchAddOrderItem($batchData);
|
|
|
$transaction->commit();
|
|
|
return $order;
|
|
|
- }catch (\Exception $exception){
|
|
|
+ } catch (\Exception $exception) {
|
|
|
$transaction->rollBack();
|
|
|
- util::fail("入库失败".$exception->getMessage());
|
|
|
+ util::fail("入库失败" . $exception->getMessage());
|
|
|
}
|
|
|
|
|
|
}
|
|
|
@@ -123,99 +125,102 @@ class StockInOrderClass extends BaseClass
|
|
|
// 加库存
|
|
|
// 加流水记录
|
|
|
//增加门店收支记录 : 出库的门店加金额,入库的门店减金额(用成本价计算)
|
|
|
- public static function confirmOrder($orderSn,$shopId,$adminId)
|
|
|
+ public static function confirmOrder($orderSn, $shopId, $adminId)
|
|
|
{
|
|
|
$data = [
|
|
|
- 'status'=>self::STATUS_COMPLETE,
|
|
|
- 'adminId'=>$adminId,
|
|
|
+ 'status' => self::STATUS_COMPLETE,
|
|
|
+ 'adminId' => $adminId,
|
|
|
];
|
|
|
- $orderData = self::getOrderDetail($orderSn,$shopId);
|
|
|
- if($orderData['status'] != self::STATUS_WAIT){
|
|
|
+ $orderData = self::getOrderDetail($orderSn, $shopId);
|
|
|
+ if ($orderData['status'] != self::STATUS_WAIT) {
|
|
|
util::fail("订单已处理");
|
|
|
}
|
|
|
$orderId = $orderData['id'];
|
|
|
$connection = Yii::$app->db;
|
|
|
$transaction = $connection->beginTransaction();
|
|
|
- try{
|
|
|
- self::updateById($orderId,$data);
|
|
|
+ try {
|
|
|
+ self::updateById($orderId, $data);
|
|
|
//加库存
|
|
|
- $itemInfo = $orderData['itemInfo']??[];
|
|
|
- if(empty($itemInfo)){
|
|
|
+ $itemInfo = $orderData['itemInfo'] ?? [];
|
|
|
+ if (empty($itemInfo)) {
|
|
|
$transaction->rollBack();
|
|
|
util::fail("订单异常");
|
|
|
}
|
|
|
$inProductMapData = ProductClass::getProductMapData($itemInfo);
|
|
|
$inTotalCost = 0;
|
|
|
- foreach ($itemInfo as $k=>$v){
|
|
|
- $stockInfo = ProductClass::addStockByItemNum($v['productId'],$v['itemNum']);
|
|
|
+ foreach ($itemInfo as $k => $v) {
|
|
|
+ $stockInfo = ProductClass::addStockByItemNum($v['productId'], $v['itemNum']);
|
|
|
$itemInfo[$k]['oldStock'] = $stockInfo['oldStock'];
|
|
|
$itemInfo[$k]['itemStock'] = $stockInfo['oldStock'];
|
|
|
$itemInfo[$k]['newStock'] = $stockInfo['newStock'];
|
|
|
$inPId = $v['productId'];
|
|
|
$inNum = $v['itemNum'];
|
|
|
- $cost = $inProductMapData[$inPId]['cost']??0; //成本
|
|
|
- $inTotalCost = bcadd($inTotalCost,bcmul($inNum,$cost,2),2);
|
|
|
+ $cost = $inProductMapData[$inPId]['cost'] ?? 0; //成本
|
|
|
+ $inTotalCost = bcadd($inTotalCost, bcmul($inNum, $cost, 2), 2);
|
|
|
}
|
|
|
//流水记录
|
|
|
$orderData['shopId'] = $shopId;
|
|
|
$orderData['itemInfo'] = $itemInfo;
|
|
|
- StockRecordClass::addRecordByOrder($orderData,StockRecordClass::STOCK_RECORD_TYPE_IN_STOCK);
|
|
|
+ StockRecordClass::addRecordByOrder($orderData, StockRecordClass::STOCK_RECORD_TYPE_IN_STOCK);
|
|
|
// 门店收支记录:
|
|
|
//出库门店
|
|
|
$outOrderSn = $orderData['outOrderSn'];
|
|
|
$outShopId = $orderData['outShopId'];
|
|
|
- $outOrderInfo = StockOutOrderClass::getOrderDetail($outOrderSn,$outShopId);
|
|
|
- $payWay =dict::getDict('payWay', 'unknown');
|
|
|
- if($outOrderInfo){
|
|
|
- $outOrderInfoItem = $outOrderInfo['itemInfo']??'';
|
|
|
- if($outOrderInfoItem){
|
|
|
- $outTotalCost = 0;
|
|
|
- $outProductData = ProductClass::getProductMapData($outOrderInfoItem);
|
|
|
- foreach ($outOrderInfoItem as $v){
|
|
|
- $pId = $v['productId'];
|
|
|
- $num = $v['itemNum'];
|
|
|
- $cost = $outProductData[$pId]['cost']??0; //成本
|
|
|
- $outTotalCost = bcadd($outTotalCost,bcmul($num,$cost,2),2);
|
|
|
- }
|
|
|
- $outEvent = '出库';
|
|
|
- $outCapitalType = dict::getDict('capitalType', 'ghsCheckOut', 'id');
|
|
|
-
|
|
|
- $shop = ShopClass::getLockById($outShopId);
|
|
|
-
|
|
|
- if($shop){
|
|
|
- $outCurrentTotalIncome = bcadd($shop->totalIncome, $outTotalCost, 2);
|
|
|
- }else{
|
|
|
- $outCurrentTotalIncome = $outTotalCost;
|
|
|
- }
|
|
|
- $shop->totalIncome = $outCurrentTotalIncome;
|
|
|
- $shop->save();
|
|
|
- $capitalData = [
|
|
|
- 'capitalType' => $outCapitalType,
|
|
|
- 'io' => 1,
|
|
|
- 'totalIncome' => $outCurrentTotalIncome,
|
|
|
- 'payWay' => $payWay,
|
|
|
- 'amount' => $outTotalCost,
|
|
|
- 'sjId' => $outOrderInfo['sjId']??0,
|
|
|
- 'shopId' => $outShopId,
|
|
|
- 'event' => $outEvent,
|
|
|
- ];
|
|
|
- ShopCapitalClass::addCapital($capitalData);
|
|
|
- }
|
|
|
+ $outOrderInfo = StockOutOrderClass::getOrderDetail($outOrderSn, $outShopId);
|
|
|
+ $payWay = dict::getDict('payWay', 'unknown');
|
|
|
+ if (empty($outOrderInfo)) {
|
|
|
+ util::fail('没有找到出库单');
|
|
|
+ }
|
|
|
+ $outOrderInfoItem = $outOrderInfo['itemInfo'] ?? '';
|
|
|
+ if (empty($outOrderInfoItem)) {
|
|
|
+ util::fail('没有出库单信息');
|
|
|
+ }
|
|
|
+ $outTotalCost = 0;
|
|
|
+ $outProductData = ProductClass::getProductMapData($outOrderInfoItem);
|
|
|
+ foreach ($outOrderInfoItem as $v) {
|
|
|
+ $pId = $v['productId'];
|
|
|
+ $num = $v['itemNum'];
|
|
|
+ $cost = $outProductData[$pId]['cost'] ?? 0; //成本
|
|
|
+ $outTotalCost = bcadd($outTotalCost, bcmul($num, $cost, 2), 2);
|
|
|
+ }
|
|
|
+ $outEvent = '出库';
|
|
|
+ $outCapitalType = dict::getDict('capitalType', 'ghsCheckOut', 'id');
|
|
|
|
|
|
+ $shop = ShopClass::getLockById($outShopId);
|
|
|
+ if (empty($shop)) {
|
|
|
+ util::fail('没有找到出库门店');
|
|
|
}
|
|
|
+ $outCurrentTotalIncome = bcadd($shop->totalIncome, $outTotalCost, 2);
|
|
|
+ $currentTotalStockOut = bcadd($shop->totalStockOut, $outTotalCost, 2);
|
|
|
+ $shop->totalIncome = $outCurrentTotalIncome;
|
|
|
+ $shop->totalStockOut = $currentTotalStockOut;
|
|
|
+ $shop->save();
|
|
|
+ $capitalData = [
|
|
|
+ 'capitalType' => $outCapitalType,
|
|
|
+ 'io' => 1,
|
|
|
+ 'totalIncome' => $outCurrentTotalIncome,
|
|
|
+ 'payWay' => $payWay,
|
|
|
+ 'amount' => $outTotalCost,
|
|
|
+ 'sjId' => $outOrderInfo['sjId'] ?? 0,
|
|
|
+ 'shopId' => $outShopId,
|
|
|
+ 'event' => $outEvent,
|
|
|
+ ];
|
|
|
+ ShopCapitalClass::addCapital($capitalData);
|
|
|
+ //出库每日和每月统计
|
|
|
+ StatStockOutClass::replace($shop, $outTotalCost);
|
|
|
|
|
|
//入库门店
|
|
|
|
|
|
$inEvent = '入库';
|
|
|
$inCapitalType = dict::getDict('capitalType', 'ghsCheckIn', 'id');
|
|
|
-
|
|
|
$inShop = ShopClass::getLockById($shopId);
|
|
|
- if($inShop){
|
|
|
- $inCurrentTotalIncome = bcadd($inShop->totalIncome, $inTotalCost, 2);
|
|
|
- }else{
|
|
|
- $inCurrentTotalIncome = $inTotalCost;
|
|
|
+ if (empty($inShop)) {
|
|
|
+ util::fail('没有找到入库门店');
|
|
|
}
|
|
|
+ $inCurrentTotalIncome = bcadd($inShop->totalIncome, $inTotalCost, 2);
|
|
|
$inShop->totalExpend = $inCurrentTotalIncome;
|
|
|
+ $currentTotalStockIn = bcadd($inShop->totalStockIn, $inTotalCost, 2);
|
|
|
+ $inShop->totalStockIn = $currentTotalStockIn;
|
|
|
$inShop->save();
|
|
|
$capitalData = [
|
|
|
'capitalType' => $inCapitalType,
|
|
|
@@ -223,15 +228,17 @@ class StockInOrderClass extends BaseClass
|
|
|
'totalIncome' => $inCurrentTotalIncome,
|
|
|
'payWay' => $payWay,
|
|
|
'amount' => $inTotalCost,
|
|
|
- 'sjId' => $orderData['sjId']??0,
|
|
|
+ 'sjId' => $orderData['sjId'] ?? 0,
|
|
|
'shopId' => $shopId,
|
|
|
'event' => $inEvent,
|
|
|
];
|
|
|
ShopCapitalClass::addCapital($capitalData);
|
|
|
+ //入库每天和每月统计
|
|
|
+ StatStockInClass::replace($inShop, $inTotalCost);
|
|
|
|
|
|
$transaction->commit();
|
|
|
|
|
|
- }catch (\Exception $exception){
|
|
|
+ } catch (\Exception $exception) {
|
|
|
$transaction->rollBack();
|
|
|
util::fail();
|
|
|
}
|
|
|
@@ -239,23 +246,22 @@ class StockInOrderClass extends BaseClass
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
//2021.1.23 linqh 订单详情
|
|
|
- public static function getOrderDetail($orderSn,$shopId)
|
|
|
+ public static function getOrderDetail($orderSn, $shopId)
|
|
|
{
|
|
|
- $orderData = self::orderExist(['orderSn'=>$orderSn,'inShopId'=>$shopId]);
|
|
|
+ $orderData = self::orderExist(['orderSn' => $orderSn, 'inShopId' => $shopId]);
|
|
|
$orderInfo = StockInOrderItemClass::getOrderItemDetail($orderSn);
|
|
|
$itemData = [];
|
|
|
- if($orderInfo) {
|
|
|
+ if ($orderInfo) {
|
|
|
foreach ($orderInfo as $v) {
|
|
|
- $info = json_decode($v['itemInfo'],true);
|
|
|
+ $info = json_decode($v['itemInfo'], true);
|
|
|
$tmp = $info;
|
|
|
$tmp['itemCover'] = self::groupImg($info['itemCover']);
|
|
|
unset($v['itemInfo']);
|
|
|
- if(!isset($tmp['rank'])){
|
|
|
- $tmp['rank']= 'B';
|
|
|
+ if (!isset($tmp['rank'])) {
|
|
|
+ $tmp['rank'] = 'B';
|
|
|
}
|
|
|
- $tmp = array_merge($tmp,$v);
|
|
|
+ $tmp = array_merge($tmp, $v);
|
|
|
$itemData[] = $tmp;
|
|
|
}
|
|
|
}
|
|
|
@@ -270,7 +276,7 @@ class StockInOrderClass extends BaseClass
|
|
|
public static function orderExist($where)
|
|
|
{
|
|
|
$orderData = self::getByCondition($where);
|
|
|
- if(!$orderData) {
|
|
|
+ if (!$orderData) {
|
|
|
util::fail('订单不存在');
|
|
|
}
|
|
|
return $orderData;
|
|
|
@@ -289,7 +295,7 @@ class StockInOrderClass extends BaseClass
|
|
|
// 获取状态码名称
|
|
|
public static function getStatusName($status)
|
|
|
{
|
|
|
- return self::$statusMap[$status]??'';
|
|
|
+ return self::$statusMap[$status] ?? '';
|
|
|
}
|
|
|
|
|
|
//组装出库门店信息
|