|
|
@@ -138,141 +138,121 @@ class StockInOrderClass extends BaseClass
|
|
|
//增加门店收支记录 : 出库的门店加金额,入库的门店减金额(用成本价计算)
|
|
|
public static function confirmOrder($orderSn, $shopId, $adminId)
|
|
|
{
|
|
|
- $data = [
|
|
|
- 'status' => self::STATUS_COMPLETE,
|
|
|
- 'adminId' => $adminId,
|
|
|
- ];
|
|
|
+ $data = ['status' => self::STATUS_COMPLETE, 'adminId' => $adminId];
|
|
|
$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);
|
|
|
- //加库存
|
|
|
- $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']);
|
|
|
- $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);
|
|
|
- }
|
|
|
- //流水记录
|
|
|
- $orderData['shopId'] = $shopId;
|
|
|
- $orderData['itemInfo'] = $itemInfo;
|
|
|
- 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 (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('没有找到出库门店');
|
|
|
- }
|
|
|
- $mainId = $shop->mainId ?? 0;
|
|
|
- $main = MainClass::getLockById($mainId);
|
|
|
- if (empty($main)) {
|
|
|
- util::fail('没有main信息');
|
|
|
- }
|
|
|
- $outCurrentTotalIncome = bcadd($main->totalIncome, $outTotalCost, 2);
|
|
|
- $currentTotalStockOut = bcadd($main->totalStockOut, $outTotalCost, 2);
|
|
|
- $main->totalIncome = $outCurrentTotalIncome;
|
|
|
- $main->totalStockOut = $currentTotalStockOut;
|
|
|
- $main->save();
|
|
|
- $capitalData = [
|
|
|
- 'capitalType' => $outCapitalType,
|
|
|
- 'io' => 1,
|
|
|
- 'totalIncome' => $outCurrentTotalIncome,
|
|
|
- 'payWay' => $payWay,
|
|
|
- 'amount' => $outTotalCost,
|
|
|
- 'sjId' => $outOrderInfo['sjId'] ?? 0,
|
|
|
- 'shopId' => $outShopId,
|
|
|
- 'event' => $outEvent,
|
|
|
- 'mainId' => $mainId,
|
|
|
- ];
|
|
|
- ShopCapitalClass::addCapital($capitalData);
|
|
|
- //每天和每月收入统计,出库也算收入
|
|
|
- StatIncomeClass::updateOrInsert($main, $shop, $outTotalCost);
|
|
|
-
|
|
|
- //出库每日和每月统计
|
|
|
- StatStockOutClass::replace($main, $shop, $outTotalCost);
|
|
|
-
|
|
|
- //入库门店
|
|
|
- $inEvent = '入库';
|
|
|
- $inCapitalType = dict::getDict('capitalType', 'ghsCheckIn', 'id');
|
|
|
- $inShop = ShopClass::getLockById($shopId);
|
|
|
- if (empty($inShop)) {
|
|
|
- util::fail('没有找到入库门店');
|
|
|
- }
|
|
|
- $inMainId = $inShop->mainId ?? 0;
|
|
|
- $inMain = MainClass::getLockById($inMainId);
|
|
|
- if (empty($inMain)) {
|
|
|
- util::fail('没有main信息');
|
|
|
- }
|
|
|
- $inCurrentTotalExpend = bcadd($inMain->totalExpend, $inTotalCost, 2);
|
|
|
- $inMain->totalExpend = $inCurrentTotalExpend;
|
|
|
- $currentTotalStockIn = bcadd($inMain->totalStockIn, $inTotalCost, 2);
|
|
|
- $inMain->totalStockIn = $currentTotalStockIn;
|
|
|
- $inMain->save();
|
|
|
- $capitalData = [
|
|
|
- 'capitalType' => $inCapitalType,
|
|
|
- 'io' => 0,
|
|
|
- 'totalExpend' => $inCurrentTotalExpend,
|
|
|
- 'payWay' => $payWay,
|
|
|
- 'amount' => $inTotalCost,
|
|
|
- 'sjId' => $orderData['sjId'] ?? 0,
|
|
|
- 'shopId' => $shopId,
|
|
|
- 'event' => $inEvent,
|
|
|
- 'mainId' => $mainId,
|
|
|
- ];
|
|
|
- ShopCapitalClass::addCapital($capitalData);
|
|
|
- //当天和当月支出统计,调拨入库算支出
|
|
|
- StatOutClass::updateOrInsert($main, $shop, $inTotalCost);
|
|
|
- //入库每天和每月统计
|
|
|
- StatStockInClass::replace($inMain, $inShop, $inTotalCost);
|
|
|
-
|
|
|
- $transaction->commit();
|
|
|
+ self::updateById($orderId, $data);
|
|
|
+ //加库存
|
|
|
+ $itemInfo = $orderData['itemInfo'] ?? [];
|
|
|
+ if (empty($itemInfo)) {
|
|
|
+ util::fail("订单异常");
|
|
|
+ }
|
|
|
+ $inProductMapData = ProductClass::getProductMapData($itemInfo);
|
|
|
+ $inTotalCost = 0;
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+ //流水记录
|
|
|
+ $orderData['shopId'] = $shopId;
|
|
|
+ $orderData['itemInfo'] = $itemInfo;
|
|
|
+ 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 (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');
|
|
|
|
|
|
- } catch (\Exception $exception) {
|
|
|
- Yii::info("确认入库报错:" . $exception->getMessage());
|
|
|
- $transaction->rollBack();
|
|
|
- util::fail();
|
|
|
+ $shop = ShopClass::getLockById($outShopId);
|
|
|
+ if (empty($shop)) {
|
|
|
+ util::fail('没有找到出库门店');
|
|
|
}
|
|
|
+ $mainId = $shop->mainId ?? 0;
|
|
|
+ $main = MainClass::getLockById($mainId);
|
|
|
+ if (empty($main)) {
|
|
|
+ util::fail('没有main信息');
|
|
|
+ }
|
|
|
+ $outCurrentTotalIncome = bcadd($main->totalIncome, $outTotalCost, 2);
|
|
|
+ $currentTotalStockOut = bcadd($main->totalStockOut, $outTotalCost, 2);
|
|
|
+ $main->totalIncome = $outCurrentTotalIncome;
|
|
|
+ $main->totalStockOut = $currentTotalStockOut;
|
|
|
+ $main->save();
|
|
|
+ $capitalData = [
|
|
|
+ 'capitalType' => $outCapitalType,
|
|
|
+ 'io' => 1,
|
|
|
+ 'totalIncome' => $outCurrentTotalIncome,
|
|
|
+ 'payWay' => $payWay,
|
|
|
+ 'amount' => $outTotalCost,
|
|
|
+ 'sjId' => $outOrderInfo['sjId'] ?? 0,
|
|
|
+ 'shopId' => $outShopId,
|
|
|
+ 'event' => $outEvent,
|
|
|
+ 'mainId' => $mainId,
|
|
|
+ ];
|
|
|
+ ShopCapitalClass::addCapital($capitalData);
|
|
|
+ //每天和每月收入统计,出库也算收入
|
|
|
+ StatIncomeClass::updateOrInsert($main, $shop, $outTotalCost);
|
|
|
+ //出库每日和每月统计
|
|
|
+ StatStockOutClass::replace($main, $shop, $outTotalCost);
|
|
|
+ //入库门店
|
|
|
+ $inEvent = '入库';
|
|
|
+ $inCapitalType = dict::getDict('capitalType', 'ghsCheckIn', 'id');
|
|
|
+ $inShop = ShopClass::getLockById($shopId);
|
|
|
+ if (empty($inShop)) {
|
|
|
+ util::fail('没有找到入库门店');
|
|
|
+ }
|
|
|
+ $inMainId = $inShop->mainId ?? 0;
|
|
|
+ $inMain = MainClass::getLockById($inMainId);
|
|
|
+ if (empty($inMain)) {
|
|
|
+ util::fail('没有main信息');
|
|
|
+ }
|
|
|
+ $inCurrentTotalExpend = bcadd($inMain->totalExpend, $inTotalCost, 2);
|
|
|
+ $inMain->totalExpend = $inCurrentTotalExpend;
|
|
|
+ $currentTotalStockIn = bcadd($inMain->totalStockIn, $inTotalCost, 2);
|
|
|
+ $inMain->totalStockIn = $currentTotalStockIn;
|
|
|
+ $inMain->save();
|
|
|
+ $capitalData = [
|
|
|
+ 'capitalType' => $inCapitalType,
|
|
|
+ 'io' => 0,
|
|
|
+ 'totalExpend' => $inCurrentTotalExpend,
|
|
|
+ 'payWay' => $payWay,
|
|
|
+ 'amount' => $inTotalCost,
|
|
|
+ 'sjId' => $orderData['sjId'] ?? 0,
|
|
|
+ 'shopId' => $shopId,
|
|
|
+ 'event' => $inEvent,
|
|
|
+ 'mainId' => $mainId,
|
|
|
+ ];
|
|
|
+ ShopCapitalClass::addCapital($capitalData);
|
|
|
+ //当天和当月支出统计,调拨入库算支出
|
|
|
+ StatOutClass::updateOrInsert($main, $shop, $inTotalCost);
|
|
|
+ //入库每天和每月统计
|
|
|
+ StatStockInClass::replace($inMain, $inShop, $inTotalCost);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
//2021.1.23 lqh 订单详情
|
|
|
public static function getOrderDetail($orderSn, $shopId)
|
|
|
{
|