CheckOrderClass.php 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. <?php
  2. namespace bizGhs\order\classes;
  3. use bizGhs\admin\classes\AdminClass;
  4. use bizGhs\product\classes\ProductClass;
  5. use bizGhs\stock\services\StockRecordService;
  6. use common\components\orderSn;
  7. use common\components\util;
  8. use Yii;
  9. use bizGhs\base\classes\BaseClass;
  10. use common\services\xhItemService;
  11. use bizGhs\order\traits\OrderTrait;
  12. class CheckOrderClass extends BaseClass
  13. {
  14. use OrderTrait;
  15. public static $baseFile = '\bizGhs\order\models\CheckOrder';
  16. const STATUS_DRAFT = 1; //草稿
  17. const STATUS_COMPLETE = 2; //完成
  18. public static $statusMap = [
  19. self::STATUS_DRAFT => '草稿',
  20. self::STATUS_COMPLETE => '已盘点',
  21. ];
  22. //2021.1.22 linqh 操作订单 添加/保存草稿/草稿编辑保存: 区别在添加是立即改库存和记录流水记录,而保存草稿是只保存订单信息
  23. public static function opOrder($data,$draft=false,$update=false)
  24. {
  25. $merchantId = $data['merchantId'];
  26. $shopId = $data['shopId'];
  27. $adminId = $data['adminId']??0;
  28. if($draft){
  29. //保存草稿
  30. $data['status'] = self::STATUS_DRAFT;
  31. }else{
  32. //确定保存
  33. $data['status'] = self::STATUS_COMPLETE;
  34. }
  35. if($update){
  36. $orderSn = $data['orderSn'];
  37. }else{
  38. $orderSn =orderSn::getGhsCheckSn();
  39. }
  40. $data['orderSn'] = $orderSn;
  41. $ghsItemInfo = $data['itemInfo']; // [{bigNum:0,smallNum:0,productId:1}]
  42. $ghsItemInfo = self::mergeItemInfo($ghsItemInfo);
  43. $sumNum = self::sumNumByItemInfo($ghsItemInfo);
  44. $data['bigNum'] = $sumNum['bigNum'];// 总的大单位数量 总共多少扎
  45. $data['smallNum'] = $sumNum['smallNum']; //总的小单位数量 总共多少支
  46. $connection = Yii::$app->db;
  47. $transaction = $connection->beginTransaction();
  48. try{
  49. if($update){
  50. //删除 ?? 是否合理,暂时先这样处理
  51. self::deleteByCondition(['orderSn'=>$orderSn]);
  52. }
  53. $order = self::add($data);
  54. //写入详情表
  55. $batchData = self::groupOrderItem($ghsItemInfo,$orderSn);
  56. if($update){
  57. //先删除
  58. CheckOrderItemClass::deleteByCondition(['orderSn'=>$orderSn]);
  59. }
  60. CheckOrderItemClass::batchAddOrderItem($batchData);
  61. if($draft===false){
  62. //非草稿
  63. //盘点完成完成,直接将库存中的数量改为当时盘点的数量
  64. foreach ($batchData as $v){
  65. $productId = $v['productId'];
  66. //修改库存数量
  67. ProductClass::updateStockById($productId,$v['itemNum'],$adminId);
  68. //流水记录
  69. $record = [];
  70. $record['merchantId'] = $merchantId;
  71. $record['shopId'] = $shopId;
  72. $record['orderSn'] = $orderSn;
  73. $record['itemId'] = $v['itemId'];
  74. $record['itemNum'] = $v['profitLossNum'];//盈亏数
  75. $record['oldStock'] = $v['itemStock'];
  76. $record['newStock'] = $v['itemNum']; //新库存直接等于盘点的数量
  77. StockRecordService::addCheckOrderRecord($record);
  78. }
  79. }
  80. $transaction->commit();
  81. return $order;
  82. }catch (\Exception $exception){
  83. $transaction->rollBack();
  84. util::fail('保存失败'.$exception->getMessage());
  85. }
  86. }
  87. //2021.1.22 linqh 订单列表
  88. public static function getOrderList($where)
  89. {
  90. $data = self::getList('*', $where, 'addTime DESC');
  91. $list = isset($data['list']) && !empty($data['list']) ? $data['list'] : [];
  92. if (empty($list)) {
  93. return $data;
  94. }
  95. $data['list'] = $list;
  96. $data['list'] = self::groupAdminList($list);
  97. $data['list'] = self::groupStatusName($data['list']);
  98. return $data;
  99. }
  100. //2021.1.22 订单详情
  101. //获取订单详情信息 lqh 2021.1.20
  102. public static function getOrderDetail($orderSn,$shopId)
  103. {
  104. $orderData = self::orderExist($orderSn,$shopId);
  105. $orderInfo = CheckOrderItemClass::getOrderItemDetail($orderSn);
  106. $itemData = [];
  107. if($orderInfo) {
  108. foreach ($orderInfo as $v) {
  109. $info = json_decode($v['itemInfo'],true);
  110. $tmp = $info;
  111. $tmp['itemCover'] = self::groupImg($info['itemCover']);
  112. unset($v['itemInfo']);
  113. if(!isset($tmp['rank'])){
  114. $tmp['rank']= 'B';
  115. }
  116. $tmp = array_merge($tmp,$v);
  117. $itemData[] = $tmp;
  118. }
  119. }
  120. $orderData = self::groupAdmin($orderData);
  121. $orderData['itemInfo'] = $itemData;
  122. $orderData['statusName'] = self::getStatusName($orderData['status']);
  123. return $orderData;
  124. }
  125. //2021.1.22 linqh 判断订单号是否存在
  126. public static function orderExist($orderSn,$shopId)
  127. {
  128. $where = [
  129. 'orderSn'=>$orderSn,
  130. 'shopId'=>$shopId,
  131. ];
  132. $orderData = self::getByCondition($where);
  133. if(!$orderData) {
  134. util::fail('订单不存在');
  135. }
  136. return $orderData;
  137. }
  138. // 组装 orderItem linqh 2021.1.25
  139. public static function groupOrderItem($ghsItemInfo,$orderSn)
  140. {
  141. $productData = self::getProductMapData($ghsItemInfo);
  142. $itemIds = array_column($productData,'itemId');
  143. $itemData = xhItemService::getByIds($itemIds);
  144. $itemData = array_column($itemData, NULL, 'id');
  145. //写入详情表
  146. $batchData = [];
  147. foreach($ghsItemInfo as $v){
  148. $tmp = [];
  149. $productId = $v['productId'];
  150. $itemId = $productData[$productId]['itemId'];
  151. $rank = $productData[$productId]['rank']??'B';// 花材级别
  152. $tmp['orderSn'] = $orderSn;
  153. $tmp['itemId'] = $itemId;
  154. $tmp['productId'] = $v['productId'];
  155. $unitNum = $itemData[$itemId]['unitNum']??0;
  156. $tmp['itemStock'] = $productData[$productId]['stock']??0;//当时库存
  157. $tmp['itemNum'] = ProductClass::mergeItemNum($v['bigNum'],$v['smallNum'],$unitNum);// 盘点数量
  158. $tmp['itemPrice'] =$productData[$productId]['price']??0; //当时售卖的价格
  159. $tmp['profitLossNum'] = bcsub( $tmp['itemNum']- $tmp['itemStock'],2); //盈亏数 = 盘点数-当时库存数
  160. $stockFormat= ProductClass::formatStock($tmp['itemStock'],$unitNum); // 库存总单位数量转大小单位的数量
  161. $itemInfo = [
  162. 'itemName'=> $itemData[$itemId]['name']??'',//花材名称
  163. 'itemCover'=> $itemData[$itemId]['cover']??'',//花材图片
  164. 'bigNum'=> $v['bigNum']??0,//数量(大单位)
  165. 'smallNum'=> $v['smallNum']??0,//数量(小单位)
  166. 'bigNumStock'=> $stockFormat['bigNum'],// 当时库存大单位数
  167. 'smallNumStock'=> $stockFormat['smallNum'],//当时库存 小单位数
  168. 'bigNumProfitLoss'=>bcsub($v['bigNum'],$stockFormat['bigNum'],2),//大单位的盈亏
  169. 'smallNumProfitLoss'=>bcsub($v['smallNum'],$stockFormat['smallNum'],2),//小单位的盈亏
  170. 'itemUnit'=> $unitNum?2:1,//单位
  171. 'ratio'=>$unitNum,// 比例
  172. 'rank'=>$rank,// 花材级别
  173. 'bigUnit'=> xhItemService::getUnitName($itemData[$itemId]['bigUnit']),//大单位名称 扎
  174. 'smallUnit'=> xhItemService::getUnitName($itemData[$itemId]['smallUnit']),//小单位名称 支
  175. ];
  176. $tmp['itemInfo'] = json_encode($itemInfo);
  177. $batchData[] = $tmp;
  178. }
  179. return $batchData;
  180. }
  181. // 组装状态码 linqh 2021.1.30
  182. public static function groupStatusName($list)
  183. {
  184. foreach ($list as $k => $val) {
  185. $status = $val['status'] ?? 0;
  186. $list[$k]['statusName'] = self::getStatusName($status);
  187. }
  188. return $list;
  189. }
  190. // 获取状态码名称
  191. public static function getStatusName($status)
  192. {
  193. return self::$statusMap[$status]??'';
  194. }
  195. }