StockClass.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  1. <?php
  2. namespace biz\stock\classes;
  3. use biz\base\classes\BaseClass;
  4. use bizGhs\product\classes\ProductClass;
  5. use bizGhs\stock\classes\StockRecordClass;
  6. use common\components\dict;
  7. use common\components\util;
  8. //库存变动对外方法 后续把之前在product stock record 中的方法迁移到这边
  9. //包含了库存变动和库存记录
  10. class StockClass extends BaseClass
  11. {
  12. const ADD_STOCK = 'addStock'; //加库存
  13. const DECREASE_STOCK = 'decreaseStock';//减库存
  14. public static $actionItemMap = [
  15. //采购--加库存
  16. StockRecordClass::STOCK_RECORD_TYPE_PURCHASE => [
  17. 'stock' => self::ADD_STOCK, //加库存
  18. 'recordType' => StockRecordClass::STOCK_RECORD_TYPE_PURCHASE,
  19. ],
  20. //出库 减库存
  21. StockRecordClass::STOCK_RECORD_TYPE_IN_STOCK => [
  22. 'stock' => self::DECREASE_STOCK, //减库存
  23. 'recordType' => StockRecordClass::STOCK_RECORD_TYPE_IN_STOCK,
  24. ],
  25. //入库 加库存
  26. StockRecordClass::STOCK_RECORD_TYPE_OUT_STOCK => [
  27. 'stock' => self::ADD_STOCK, //加库存
  28. 'recordType' => StockRecordClass::STOCK_RECORD_TYPE_OUT_STOCK,
  29. ],
  30. //销售(开单) 减库存
  31. StockRecordClass::STOCK_RECORD_TYPE_SELL_STOCK => [
  32. 'stock' => self::DECREASE_STOCK, //加库存
  33. 'recordType' => StockRecordClass::STOCK_RECORD_TYPE_SELL_STOCK,
  34. ],
  35. //取消入口 减库存
  36. StockRecordClass::STOCK_RECORD_TYPE_OUT_STOCK_CANCEL => [
  37. 'stock' => self::DECREASE_STOCK, //减库存
  38. 'recordType' => StockRecordClass::STOCK_RECORD_TYPE_OUT_STOCK_CANCEL,
  39. ],
  40. //取消出库 加库存
  41. StockRecordClass::STOCK_RECORD_TYPE_IN_STOCK_CANCEL => [
  42. 'stock' => self::ADD_STOCK, //加库存
  43. 'recordType' => StockRecordClass::STOCK_RECORD_TYPE_IN_STOCK_CANCEL,
  44. ],
  45. //订单取消 加库存
  46. StockRecordClass::STOCK_RECORD_TYPE_SELL_STOCK_CANCEL => [
  47. 'stock' => self::ADD_STOCK, //加库存
  48. 'recordType' => StockRecordClass::STOCK_RECORD_TYPE_SELL_STOCK_CANCEL,
  49. ],
  50. //报损--减库存
  51. StockRecordClass::STOCK_RECORD_TYPE_WASTAGE => [
  52. 'stock' => self::DECREASE_STOCK, //减库存
  53. 'recordType' => StockRecordClass::STOCK_RECORD_TYPE_WASTAGE,
  54. ],
  55. //退货退款 --加库存
  56. StockRecordClass::STOCK_RECORD_TYPE_REFUND => [
  57. 'stock' => self::ADD_STOCK,
  58. 'recordType' => StockRecordClass::STOCK_RECORD_TYPE_REFUND,
  59. ],
  60. //花店销售单---减库存
  61. StockRecordClass::STOCK_RECORD_TYPE_HD_ORDER => [
  62. 'stock' => self::DECREASE_STOCK,
  63. 'recordType' => StockRecordClass::STOCK_RECORD_TYPE_HD_ORDER,
  64. ],
  65. //制作商品 ---减库存
  66. StockRecordClass::STOCK_RECORD_TYPE_GOODS_CONSUME => [
  67. 'stock' => self::DECREASE_STOCK,
  68. 'recordType' => StockRecordClass::STOCK_RECORD_TYPE_GOODS_CONSUME,
  69. ],
  70. //制作商品损耗--减库存
  71. StockRecordClass::STOCK_RECORD_TYPE_GOODS_WASTAGE => [
  72. 'stock' => self::DECREASE_STOCK,
  73. 'recordType' => StockRecordClass::STOCK_RECORD_TYPE_GOODS_WASTAGE,
  74. ],
  75. //取消制作,所有花材库存回滚
  76. StockRecordClass::STOCK_RECORD_TYPE_GOODS_CONSUME_CANCEL => [
  77. 'stock' => self::ADD_STOCK,
  78. 'recordType' => StockRecordClass::STOCK_RECORD_TYPE_GOODS_CONSUME_CANCEL,
  79. ],
  80. //取消制作,已报损花材库存回滚
  81. StockRecordClass::STOCK_RECORD_TYPE_GOODS_WASTAGE_CANCEL => [
  82. 'stock' => self::ADD_STOCK,
  83. 'recordType' => StockRecordClass::STOCK_RECORD_TYPE_GOODS_WASTAGE_CANCEL,
  84. ],
  85. ];
  86. //花材--采购,(不用区分是供货商采购还是零售端采购)
  87. // 加库存,加记录
  88. public static function purchaseItem($orderSn, $sjId, $shopId, $productId, $bigNum, $smallNum, $options = [])
  89. {
  90. $stockInfo = self::commonItemFun($orderSn, $sjId, $shopId, $productId, $bigNum, $smallNum, $options, StockRecordClass::STOCK_RECORD_TYPE_PURCHASE);
  91. return $stockInfo;
  92. }
  93. //花材--出库
  94. public static function stockOutItem($orderSn, $sjId, $shopId, $productId, $bigNum, $smallNum, $options = [])
  95. {
  96. $stockInfo = self::commonItemFun($orderSn, $sjId, $shopId, $productId, $bigNum, $smallNum, $options, StockRecordClass::STOCK_RECORD_TYPE_OUT_STOCK);
  97. return $stockInfo;
  98. }
  99. //花材--入库
  100. public static function stockInItem($orderSn, $sjId, $shopId, $productId, $bigNum, $smallNum, $options = [])
  101. {
  102. $stockInfo = self::commonItemFun($orderSn, $sjId, $shopId, $productId, $bigNum, $smallNum, $options, StockRecordClass::STOCK_RECORD_TYPE_IN_STOCK);
  103. return $stockInfo;
  104. }
  105. //花材--盘点
  106. public static function stockPdItem($orderSn, $sjId, $shopId, $productId, $bigNum, $smallNum, $options = [])
  107. {
  108. $stockInfo = self::commonItemFun($orderSn, $sjId, $shopId, $productId, $bigNum, $smallNum, $options, StockRecordClass::STOCK_RECORD_TYPE_CHECK_STOCK);
  109. return $stockInfo;
  110. }
  111. //花材--报损
  112. public static function stockWastageItem($orderSn, $sjId, $shopId, $productId, $bigNum, $smallNum, $options = [])
  113. {
  114. $stockInfo = self::commonItemFun($orderSn, $sjId, $shopId, $productId, $bigNum, $smallNum, $options, StockRecordClass::STOCK_RECORD_TYPE_WASTAGE);
  115. return $stockInfo;
  116. }
  117. //花材--花店销售单
  118. public static function stockHdSellItem($orderSn, $sjId, $shopId, $productId, $bigNum, $smallNum, $options = [])
  119. {
  120. $stockInfo = self::commonItemFun($orderSn, $sjId, $shopId, $productId, $bigNum, $smallNum, $options, StockRecordClass::STOCK_RECORD_TYPE_HD_ORDER);
  121. return $stockInfo;
  122. }
  123. //花材--销售(卖出)
  124. public static function stockSellItem($orderSn, $sjId, $shopId, $productId, $bigNum, $smallNum, $options = [])
  125. {
  126. $stockInfo = self::commonItemFun($orderSn, $sjId, $shopId, $productId, $bigNum, $smallNum, $options, StockRecordClass::STOCK_RECORD_TYPE_SELL_STOCK);
  127. return $stockInfo;
  128. }
  129. //花材--取消出库
  130. public static function stockOutCancelItem($orderSn, $sjId, $shopId, $productId, $bigNum, $smallNum, $options = [])
  131. {
  132. $stockInfo = self::commonItemFun($orderSn, $sjId, $shopId, $productId, $bigNum, $smallNum, $options, StockRecordClass::STOCK_RECORD_TYPE_OUT_STOCK_CANCEL);
  133. return $stockInfo;
  134. }
  135. //花材--取消入库
  136. public static function stockInCancelItem($orderSn, $sjId, $shopId, $productId, $bigNum, $smallNum, $options = [])
  137. {
  138. $stockInfo = self::commonItemFun($orderSn, $sjId, $shopId, $productId, $bigNum, $smallNum, $options, StockRecordClass::STOCK_RECORD_TYPE_IN_STOCK_CANCEL);
  139. return $stockInfo;
  140. }
  141. //花材--退款退货
  142. public static function stockRefundItem($orderSn, $sjId, $shopId, $productId, $bigNum, $smallNum, $options = [])
  143. {
  144. $stockInfo = self::commonItemFun($orderSn, $sjId, $shopId, $productId, $bigNum, $smallNum, $options, StockRecordClass::STOCK_RECORD_TYPE_REFUND);
  145. return $stockInfo;
  146. }
  147. //制作商品用花材
  148. public static function stockMakeGoodsConsumeItem($orderSn, $sjId, $shopId, $productId, $bigNum, $smallNum, $options = [])
  149. {
  150. $stockInfo = self::commonItemFun($orderSn, $sjId, $shopId, $productId, $bigNum, $smallNum, $options, StockRecordClass::STOCK_RECORD_TYPE_GOODS_CONSUME);
  151. return $stockInfo;
  152. }
  153. //花材--制作商品损耗
  154. public static function stockMakeGoodsWastageItem($orderSn, $sjId, $shopId, $productId, $bigNum, $smallNum, $options = [])
  155. {
  156. $stockInfo = self::commonItemFun($orderSn, $sjId, $shopId, $productId, $bigNum, $smallNum, $options, StockRecordClass::STOCK_RECORD_TYPE_GOODS_WASTAGE);
  157. return $stockInfo;
  158. }
  159. //取消制作,所用花材库存回滚
  160. public static function stockMakeGoodsConsumeCancelItem($orderSn, $sjId, $shopId, $productId, $bigNum, $smallNum, $options = [])
  161. {
  162. $stockInfo = self::commonItemFun($orderSn, $sjId, $shopId, $productId, $bigNum, $smallNum, $options, StockRecordClass::STOCK_RECORD_TYPE_GOODS_CONSUME_CANCEL);
  163. return $stockInfo;
  164. }
  165. //取消制作,已损耗花材回滚
  166. public static function stockMakeGoodsWastageCancelItem($orderSn, $sjId, $shopId, $productId, $bigNum, $smallNum, $options = [])
  167. {
  168. $stockInfo = self::commonItemFun($orderSn, $sjId, $shopId, $productId, $bigNum, $smallNum, $options, StockRecordClass::STOCK_RECORD_TYPE_GOODS_WASTAGE_CANCEL);
  169. return $stockInfo;
  170. }
  171. //商品相关---todo
  172. public static function commonItemFun($orderSn, $sjId, $shopId, $productId, $bigNum, $smallNum, $options, $action)
  173. {
  174. $product = self::verifyProduct($productId);
  175. $map = self::$actionItemMap[$action];
  176. if (empty($map) || !isset($map['stock']) || !isset($map['recordType'])) {
  177. util::fail("参数错误");
  178. }
  179. $stock = $map['stock'];
  180. $className = 'bizGhs\product\classes\ProductClass';
  181. $params = [
  182. $productId,
  183. $bigNum,
  184. $smallNum
  185. ];
  186. $stockInfo = call_user_func_array(array($className, $stock), $params);
  187. $record = self::getItemRecordData($orderSn, $sjId, $shopId, $product, $stockInfo, $options);
  188. $record['recordType'] = $map['recordType'];
  189. $record['ptStyle'] = $options['ptStyle'] ?? dict::getDict('ptStyle', 'hd');
  190. StockRecordClass::addRecord($record);
  191. return $stockInfo;
  192. }
  193. public static function getItemRecordData($orderSn, $sjId, $shopId, $product, $stockInfo, $options = [])
  194. {
  195. $recordData = [];
  196. $recordData['sjId'] = $sjId;
  197. $recordData['shopId'] = $shopId;
  198. //增加中央ID
  199. $recordData['mainId'] = $product['mainId'] ?? 0;
  200. $recordData['itemId'] = $product['itemId'];
  201. $recordData['itemNum'] = $stockInfo['itemNum'];
  202. $recordData['oldStock'] = $stockInfo['oldStock'];
  203. $recordData['newStock'] = $stockInfo['newStock'];
  204. $recordData['productId'] = $product['id'];
  205. $recordData['orderSn'] = $orderSn;
  206. $recordData['relateName'] = $options['relateName'] ?? '';
  207. return $recordData;
  208. }
  209. protected static function verifyProduct($productId)
  210. {
  211. $product = ProductClass::getById($productId);
  212. if (empty($product)) {
  213. util::fail("花材不存在");
  214. }
  215. return $product;
  216. }
  217. }