StockRecordClass.php 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. <?php
  2. namespace bizGhs\stock\classes;
  3. use bizGhs\base\classes\BaseClass;
  4. use bizGhs\order\traits\OrderTrait;
  5. use bizGhs\product\classes\ProductClass;
  6. use bizGhs\stock\services\StockRecordService;
  7. use common\components\dict;
  8. use common\services\xhItemService;
  9. class StockRecordClass extends BaseClass
  10. {
  11. use OrderTrait;
  12. public static $baseFile = '\bizGhs\stock\models\StockRecord';
  13. const STOCK_RECORD_TYPE_PURCHASE = 1; //采购
  14. const STOCK_RECORD_TYPE_OUT_STOCK = 2; //出库
  15. const STOCK_RECORD_TYPE_IN_STOCK = 3; //入库
  16. const STOCK_RECORD_TYPE_CHECK_STOCK = 4; //盘点
  17. const STOCK_RECORD_TYPE_SELL_STOCK = 5; //销售(卖出)
  18. const STOCK_RECORD_TYPE_OUT_STOCK_CANCEL = 6; //取消入库
  19. const STOCK_RECORD_TYPE_IN_STOCK_CANCEL = 7; //取消出库
  20. const STOCK_RECORD_TYPE_SELL_STOCK_CANCEL = 8;// 取消订单
  21. const STOCK_RECORD_TYPE_WASTAGE = 9;// 报损
  22. const STOCK_RECORD_TYPE_REFUND = 10;// 退款退货
  23. const STOCK_RECORD_TYPE_HD_ORDER = 11;//花店销售单
  24. const STOCK_RECORD_TYPE_GOODS_CONSUME = 12;//制作商品
  25. const STOCK_RECORD_TYPE_GOODS_WASTAGE = 13;//制作商品损耗
  26. const STOCK_RECORD_TYPE_GOODS_CONSUME_CANCEL = 14;//取消制作
  27. const STOCK_RECORD_TYPE_GOODS_WASTAGE_CANCEL = 15;//取消制作已报损
  28. const STOCK_RECORD_TYPE_HD_REFUND = 16;//花店退货退款
  29. const STOCK_RECORD_TYPE_GHS_REFUND = 17;//供货商申请退货退款
  30. public static $typeMap = [
  31. self::STOCK_RECORD_TYPE_PURCHASE => '采购入库',
  32. self::STOCK_RECORD_TYPE_IN_STOCK => '调拨入库',
  33. self::STOCK_RECORD_TYPE_OUT_STOCK => '调拨出库',
  34. self::STOCK_RECORD_TYPE_CHECK_STOCK => '盘点',
  35. self::STOCK_RECORD_TYPE_SELL_STOCK => '开单',
  36. self::STOCK_RECORD_TYPE_OUT_STOCK_CANCEL => '取消入库',
  37. self::STOCK_RECORD_TYPE_IN_STOCK_CANCEL => '取消出库',
  38. self::STOCK_RECORD_TYPE_SELL_STOCK_CANCEL => '取消订单',
  39. self::STOCK_RECORD_TYPE_WASTAGE => '报损',
  40. self::STOCK_RECORD_TYPE_REFUND => '退货',
  41. self::STOCK_RECORD_TYPE_HD_ORDER => '开单',
  42. self::STOCK_RECORD_TYPE_GOODS_CONSUME => '制作',
  43. self::STOCK_RECORD_TYPE_GOODS_WASTAGE => '制作商品损耗',
  44. self::STOCK_RECORD_TYPE_GOODS_CONSUME_CANCEL => '取消制作',
  45. self::STOCK_RECORD_TYPE_GOODS_WASTAGE_CANCEL => '取消制作损耗',
  46. self::STOCK_RECORD_TYPE_HD_REFUND => '退货退款',
  47. self::STOCK_RECORD_TYPE_GHS_REFUND => '退货退款',
  48. ];
  49. public static function getRecordList($where)
  50. {
  51. $data = self::getList('*', $where, 'addTime DESC');
  52. $list = isset($data['list']) && !empty($data['list']) ? $data['list'] : [];
  53. if (empty($list)) {
  54. return $data;
  55. }
  56. $itemIds = array_column($list, 'itemId');
  57. $itemIdsUnitNum = xhItemService::getItemUnitNums($itemIds);
  58. foreach ($list as $k => $v) {
  59. $unitNum = $itemIdsUnitNum[$v['itemId']] ?? 0;
  60. $stock = ProductClass::formatStock($v['newStock'], $unitNum);
  61. $orderNums = ProductClass::formatStock($v['itemNum'], $unitNum);
  62. $list[$k]['bigNumOrder'] = $orderNums['bigNum'];
  63. $list[$k]['smallNumOrder'] = $orderNums['smallNum'];
  64. $list[$k]['bigNumStock'] = $stock['bigNum'];
  65. $list[$k]['smallNumStock'] = $stock['smallNum'];
  66. $list[$k]['typeName'] = self::getTypeName($v['recordType']);
  67. }
  68. $data['list'] = $list;
  69. return $data;
  70. }
  71. public static function getTypeName($type)
  72. {
  73. return self::$typeMap[$type] ?? '';
  74. }
  75. public static function addRecord($data)
  76. {
  77. $respond = self::add($data);
  78. //库存预警通知放入队列
  79. $productId = $data['productId'] ?? 0;
  80. $currentProduct = ProductClass::getById($productId);
  81. if (!empty($currentProduct)) {
  82. ProductClass::stockWarningAddQueue($currentProduct, $data['newStock']);
  83. }
  84. return $respond;
  85. }
  86. //根据order 记录流水
  87. // sjId,shopId,orderSn
  88. //itemInfo = [{productId:1,itemId:1,itemNum:操作的花材数据,oldStock(itemStock):当时库存,newStock:变化后的库存}]
  89. public static function addRecordByOrder($orderData, $type)
  90. {
  91. $itemInfo = $orderData['itemInfo'];
  92. $productData = self::getProductMapData($itemInfo);
  93. foreach ($itemInfo as $v) {
  94. $itemId = $v['itemId'];
  95. $productId = $v['productId'];
  96. $record = [];
  97. $unitNum = $productData[$productId]['ratio'] ?? 0;
  98. $itemNum = ProductClass::mergeItemNum($v['bigNum'], $v['smallNum'], $unitNum);
  99. $record['sjId'] = $orderData['sjId'];
  100. $record['shopId'] = $orderData['shopId'];
  101. $record['mainId'] = $productData[$productId]['mainId'] ?? 0;
  102. $record['orderSn'] = $orderData['orderSn'];
  103. $record['itemId'] = $itemId;
  104. $record['itemNum'] = $itemNum;
  105. $record['oldStock'] = $v['itemStock']; //当时库存
  106. $record['recordType'] = $type;
  107. $record['productId'] = $productId;
  108. $record['newStock'] = $v['newStock'];// 最新库存
  109. $record['relateName'] = $orderData['relateName'] ?? '';
  110. $record['ptStyle'] = $orderData['ptStyle'] ?? dict::getDict('ptStyle', 'ghs');
  111. self::addRecord($record);
  112. }
  113. }
  114. //花店采购申请退货退款库存变动记录 ssh 20220330
  115. public static function hdCgApplyRefundAddRecord($refundRecord)
  116. {
  117. $refundRecord['recordType'] = self::STOCK_RECORD_TYPE_REFUND;
  118. self::add($refundRecord);
  119. }
  120. //供货商给零售店退款退货增加库存变动记录 ssh 20220330
  121. public static function ghsRefundAddRecord($refundRecord)
  122. {
  123. $refundRecord['recordType'] = self::STOCK_RECORD_TYPE_REFUND;
  124. self::add($refundRecord);
  125. }
  126. //采购订单流水记录
  127. public static function addPurchaseOrderRecord($data)
  128. {
  129. $data['recordType'] = self::STOCK_RECORD_TYPE_PURCHASE;
  130. return self::addRecord($data);
  131. }
  132. //盘点订单流水记录
  133. public static function addCheckOrderRecord($data)
  134. {
  135. $data['recordType'] = self::STOCK_RECORD_TYPE_CHECK_STOCK;
  136. return self::addRecord($data);
  137. }
  138. //出库订单流水记录
  139. public static function addOutStockOrderRecord($data)
  140. {
  141. $data['recordType'] = self::STOCK_RECORD_TYPE_OUT_STOCK;
  142. return self::addRecord($data);
  143. }
  144. //取消出库
  145. public static function addOutStockOrderCancelRecord($data)
  146. {
  147. $data['recordType'] = self::STOCK_RECORD_TYPE_OUT_STOCK_CANCEL;
  148. return self::addRecord($data);
  149. }
  150. //入库订单流水记录
  151. public static function addInStockOrderRecord($data)
  152. {
  153. $data['recordType'] = self::STOCK_RECORD_TYPE_IN_STOCK;
  154. return self::addRecord($data);
  155. }
  156. //取消入库
  157. public static function addInStockOrderCancelRecord($data)
  158. {
  159. $data['recordType'] = self::STOCK_RECORD_TYPE_IN_STOCK_CANCEL;
  160. return self::addRecord($data);
  161. }
  162. //销售订单流水记录
  163. public static function addSellStockOrderRecord($data)
  164. {
  165. $data['recordType'] = self::STOCK_RECORD_TYPE_SELL_STOCK;
  166. return self::addRecord($data);
  167. }
  168. //取消销售订单
  169. public static function addSellStockOrderCancelRecord($data)
  170. {
  171. $data['recordType'] = self::STOCK_RECORD_TYPE_SELL_STOCK_CANCEL;
  172. return self::addRecord($data);
  173. }
  174. //零售花店开单 ssh 20220318
  175. public static function hdKdAddRecord($data)
  176. {
  177. $data['recordType'] = self::STOCK_RECORD_TYPE_HD_ORDER;
  178. return self::addRecord($data);
  179. }
  180. //零售花店退货退款 ssh 20220427
  181. public static function hdRefundAddRecord($data)
  182. {
  183. $data['recordType'] = self::STOCK_RECORD_TYPE_HD_REFUND;
  184. return self::addRecord($data);
  185. }
  186. //制作商品 lqh 2022.03.20
  187. public static function makeGoodsConsume($data)
  188. {
  189. $data['recordType'] = self::STOCK_RECORD_TYPE_GOODS_CONSUME;
  190. return self::addRecord($data);
  191. }
  192. //制作商品损耗 lqh 2022.03.20
  193. public static function makeGoodsWastage($data)
  194. {
  195. $data['recordType'] = self::STOCK_RECORD_TYPE_GOODS_WASTAGE;
  196. return self::addRecord($data);
  197. }
  198. public static function cancelMakeGoodsConsume($data)
  199. {
  200. $data['recordType'] = self::STOCK_RECORD_TYPE_GOODS_CONSUME_CANCEL;
  201. return self::addRecord($data);
  202. }
  203. public static function cancelMakeGoodsWastage($data)
  204. {
  205. $data['recordType'] = self::STOCK_RECORD_TYPE_GOODS_WASTAGE_CANCEL;
  206. return self::addRecord($data);
  207. }
  208. //二批申请退货退款库存变动记录 ssh 20220909
  209. public static function ghsCgApplyRefundAddRecord($refundRecord)
  210. {
  211. $refundRecord['recordType'] = self::STOCK_RECORD_TYPE_GHS_REFUND;
  212. self::add($refundRecord);
  213. }
  214. }