|
|
@@ -2,104 +2,139 @@
|
|
|
|
|
|
namespace bizGhs\order\classes;
|
|
|
|
|
|
+use bizGhs\admin\classes\AdminClass;
|
|
|
use bizGhs\product\classes\ProductClass;
|
|
|
use bizGhs\stock\services\StockRecordService;
|
|
|
+use common\components\orderSn;
|
|
|
use common\components\util;
|
|
|
use Yii;
|
|
|
use bizGhs\base\classes\BaseClass;
|
|
|
use common\services\xhItemService;
|
|
|
+use bizGhs\order\traits\OrderTrait;
|
|
|
class CheckOrderClass extends BaseClass
|
|
|
{
|
|
|
-
|
|
|
+ use OrderTrait;
|
|
|
public static $baseFile = '\bizGhs\order\models\CheckOrder';
|
|
|
- const STATUS_COMPLETE = 1;
|
|
|
+ const STATUS_DRAFT = 1; //草稿
|
|
|
+ const STATUS_COMPLETE = 2; //完成
|
|
|
|
|
|
|
|
|
- //添加
|
|
|
- public static function addOrder($data)
|
|
|
+ //2021.1.22 linqh 操作订单 添加/保存草稿/草稿编辑保存: 区别在添加是立即改库存和记录流水记录,而保存草稿是只保存订单信息
|
|
|
+ public static function opOrder($data,$draft=false,$update=false)
|
|
|
{
|
|
|
$merchantId = $data['merchantId'];
|
|
|
$shopId = $data['shopId'];
|
|
|
- $data['status'] = self::STATUS_COMPLETE;
|
|
|
- $orderSn =self::generateOrderSn(self::CHECK_ORDER);
|
|
|
+ $adminId = $data['adminId']??0;
|
|
|
+ if($draft){
|
|
|
+ //保存草稿
|
|
|
+ $data['status'] = self::STATUS_DRAFT;
|
|
|
+ }else{
|
|
|
+ //确定保存
|
|
|
+ $data['status'] = self::STATUS_COMPLETE;
|
|
|
+ }
|
|
|
+ if($update){
|
|
|
+ $orderSn = $data['orderSn'];
|
|
|
+ }else{
|
|
|
+ $orderSn =orderSn::getGhsCheckSn();
|
|
|
+ }
|
|
|
+
|
|
|
$data['orderSn'] = $orderSn;
|
|
|
- $ghsItemInfo = $data['itemInfo']; // [{itemId:0,bigNum:0,smallNum:0,itemPrice:1.0}]
|
|
|
+ $ghsItemInfo = $data['itemInfo']; // [{bigNum:0,smallNum:0,productId:1}]
|
|
|
$bigNum = 0; //总共多少扎
|
|
|
$smallNum = 0; //总共多少支
|
|
|
- $totalItemPrice = 0;
|
|
|
- $itemIds = array_column($ghsItemInfo,'itemId');
|
|
|
+
|
|
|
+
|
|
|
+ $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'];
|
|
|
- $smallNum += $v['smallNum'];
|
|
|
- $totalItemPrice = bcadd($totalItemPrice,$v['itemPrice'],2);
|
|
|
+ $bigNum += $v['bigNum']??0;
|
|
|
+ $smallNum += $v['smallNum']??0;
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
$data['bigNum'] = $bigNum;
|
|
|
$data['smallNum'] = $smallNum;
|
|
|
- $data['totalPrice'] = $totalItemPrice;
|
|
|
+
|
|
|
$connection = Yii::$app->db;
|
|
|
$transaction = $connection->beginTransaction();
|
|
|
try{
|
|
|
+ if($update){
|
|
|
+ //删除 ?? 是否合理,暂时先这样处理
|
|
|
+ self::deleteByCondition(['orderSn'=>$orderSn]);
|
|
|
+ }
|
|
|
$order = self::add($data);
|
|
|
//写入详情表
|
|
|
$batchData = [];
|
|
|
|
|
|
foreach ($ghsItemInfo as $v){
|
|
|
$tmp = [];
|
|
|
- $itemId = $v['itemId'];
|
|
|
- $tmp['productId'] = $v['productId']??0;
|
|
|
+ $productId = $v['productId']??0;
|
|
|
+ $itemId = $productData[$productId]['itemId'];
|
|
|
+ $tmp['productId'] = $productId;
|
|
|
$tmp['orderSn'] = $orderSn;
|
|
|
- $tmp['itemId'] = $v['itemId'];
|
|
|
+ $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'] = $v['itemPrice'];
|
|
|
+ $tmp['profitLossNum'] = bcsub( $tmp['itemNum']- $tmp['itemStock'],2); //盈亏数 = 盘点数-当时库存数
|
|
|
+ $stockFormat= ProductClass::formatStock($tmp['itemStock'],$unitNum); // 库存总单位数量转大小单位的数量
|
|
|
$itemInfo = [
|
|
|
'itemName'=> $itemData[$itemId]['name']??'',
|
|
|
'itemCover'=> $itemData[$itemId]['cover']??'',
|
|
|
- 'bigNum'=> $v['bigNum'],
|
|
|
- 'smallNum'=> $v['smallNum'],
|
|
|
+ 'bigNum'=> $v['bigNum']??0,
|
|
|
+ 'smallNum'=> $v['smallNum']??0,
|
|
|
+ 'bigNumStock'=> $stockFormat['bigNum'],// 当时库存大单位数
|
|
|
+ 'smallNumStock'=> $stockFormat['smallNum'],//当时库存 小单位数
|
|
|
+ 'bigNumProfitLoss'=>bcsub($v['bigNum'],$stockFormat['bigNum'],2),//大单位的盈亏
|
|
|
+ 'smallNumProfitLoss'=>bcsub($v['smallNum'],$stockFormat['smallNum'],2),//小单位的盈亏
|
|
|
'itemUnit'=> $unitNum?2:1,
|
|
|
- 'itemBigUnit'=> xhItemService::getUnitName($itemData[$v['itemId']]['bigUnit']??1),
|
|
|
- 'itemSmallUnit'=> xhItemService::getUnitName($itemData[$v['itemId']]['smallUnit']??2),
|
|
|
+ 'itemBigUnit'=> xhItemService::getUnitName($itemData[$itemId]['bigUnit']??1),
|
|
|
+ 'itemSmallUnit'=> xhItemService::getUnitName($itemData[$itemId]['smallUnit']??2),
|
|
|
];
|
|
|
$tmp['itemInfo'] = json_encode($itemInfo);
|
|
|
$batchData[] = $tmp;
|
|
|
}
|
|
|
- PurchaseOrderItemClass::batchAddOrderItem($batchData);
|
|
|
- //现在暂时点击确定,完成 加库存
|
|
|
- foreach ($batchData as $v){
|
|
|
- $itemId = $v['itemId'];
|
|
|
- $ghsItemInfoData = ProductClass::getGhsProductDataByItemId($shopId,$itemId);
|
|
|
- $ghsItemInfoId = $ghsItemInfoData['id']??0;
|
|
|
- if(!$ghsItemInfoId){
|
|
|
- $transaction->rollBack();
|
|
|
- util::fail('有商品不存在');
|
|
|
+ if($update){
|
|
|
+ //先删除
|
|
|
+ CheckOrderItemClass::deleteByCondition(['orderSn'=>$orderSn]);
|
|
|
+ }
|
|
|
+ CheckOrderItemClass::batchAddOrderItem($batchData);
|
|
|
+ if($draft===false){
|
|
|
+ //非草稿
|
|
|
+ //盘点完成完成,直接将库存中的数量改为当时盘点的数量
|
|
|
+ foreach ($batchData as $v){
|
|
|
+ $productId = $v['productId'];
|
|
|
+ ProductClass::updateStockById($productId,$v['itemNum'],$adminId);
|
|
|
+ //流水记录
|
|
|
+ $record = [];
|
|
|
+ $record['merchantId'] = $merchantId;
|
|
|
+ $record['shopId'] = $shopId;
|
|
|
+ $record['orderSn'] = $orderSn;
|
|
|
+ $record['itemId'] = $v['itemId'];
|
|
|
+ $record['itemNum'] = $v['itemNum'];
|
|
|
+ $record['oldStock'] = $v['itemStock'];
|
|
|
+ $record['newStock'] = $v['itemNum']; //新库存直接等于盘点的数量
|
|
|
+ StockRecordService::addPurchaseOrderRecord($record);
|
|
|
+
|
|
|
}
|
|
|
- //流水记录
|
|
|
- $record = [];
|
|
|
- $record['merchantId'] = $merchantId;
|
|
|
- $record['shopId'] = $shopId;
|
|
|
- $record['orderSn'] = $orderSn;
|
|
|
- $record['itemId'] = $itemId;
|
|
|
- $record['itemNum'] = $v['itemNum'];
|
|
|
- $record['oldStock'] = $ghsItemInfoData['stock'];
|
|
|
- $record['newStock'] = bcadd($ghsItemInfoData['stock'],$v['itemNum'],2);
|
|
|
- StockRecordService::addPurchaseOrderRecord($record);
|
|
|
- //加库存
|
|
|
- ProductClass::addStockByItemNum($ghsItemInfoId,$v['itemNum']);
|
|
|
}
|
|
|
$transaction->commit();
|
|
|
return $order;
|
|
|
|
|
|
}catch (\Exception $exception){
|
|
|
$transaction->rollBack();
|
|
|
- util::fail('保存失败');
|
|
|
+ util::fail('保存失败'.$exception->getMessage());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ //2021.1.22 linqh 订单列表
|
|
|
public static function getOrderList($where)
|
|
|
{
|
|
|
$data = self::getList('*', $where, 'addTime DESC');
|
|
|
@@ -108,7 +143,43 @@ class CheckOrderClass extends BaseClass
|
|
|
return $data;
|
|
|
}
|
|
|
$data['list'] = $list;
|
|
|
+ $data['list'] = self::groupAdminList($list);
|
|
|
return $data;
|
|
|
}
|
|
|
|
|
|
+ //2021.1.22 订单详情
|
|
|
+ //获取订单详情信息 lqh 2021.1.20
|
|
|
+ public static function getOrderDetail($orderSn,$shopId)
|
|
|
+ {
|
|
|
+ $orderData = self::orderExist($orderSn,$shopId);
|
|
|
+ $orderInfo = CheckOrderItemClass::getOrderItemDetail($orderSn);
|
|
|
+ $itemData = [];
|
|
|
+ if($orderInfo) {
|
|
|
+ foreach ($orderInfo as $v) {
|
|
|
+ $info = json_decode($v['itemInfo'],true);
|
|
|
+ $tmp = $info;
|
|
|
+ $tmp['itemCover'] = self::groupImg($info['itemCover']);
|
|
|
+ $itemData[] = $tmp;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $orderData = self::groupAdmin($orderData);
|
|
|
+ $orderData['itemInfo'] = $itemData;
|
|
|
+ return $orderData;
|
|
|
+ }
|
|
|
+
|
|
|
+ //2021.1.22 linqh 判断订单号是否存在
|
|
|
+ public static function orderExist($orderSn,$shopId)
|
|
|
+ {
|
|
|
+ $where = [
|
|
|
+ 'orderSn'=>$orderSn,
|
|
|
+ 'shopId'=>$shopId,
|
|
|
+ ];
|
|
|
+ $orderData = self::getByCondition($where);
|
|
|
+ if(!$orderData) {
|
|
|
+ util::fail('订单不存在');
|
|
|
+ }
|
|
|
+ return $orderData;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
}
|