StockRecordClass.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  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. const STOCK_RECORD_TYPE_PART = 18;//拆散
  31. const STOCK_RECORD_TYPE_GIVE = 19;//赠送
  32. const STOCK_RECORD_TYPE_ACCEPT = 20;//接收赠送
  33. public static $typeMap = [
  34. self::STOCK_RECORD_TYPE_PURCHASE => '采购入库',
  35. self::STOCK_RECORD_TYPE_IN_STOCK => '调拨入库',
  36. self::STOCK_RECORD_TYPE_OUT_STOCK => '调拨出库',
  37. self::STOCK_RECORD_TYPE_CHECK_STOCK => '盘点',
  38. self::STOCK_RECORD_TYPE_SELL_STOCK => '开单',
  39. self::STOCK_RECORD_TYPE_OUT_STOCK_CANCEL => '取消入库',
  40. self::STOCK_RECORD_TYPE_IN_STOCK_CANCEL => '取消出库',
  41. self::STOCK_RECORD_TYPE_SELL_STOCK_CANCEL => '取消订单',
  42. self::STOCK_RECORD_TYPE_WASTAGE => '损耗',
  43. self::STOCK_RECORD_TYPE_REFUND => '退货',
  44. self::STOCK_RECORD_TYPE_HD_ORDER => '开单',
  45. self::STOCK_RECORD_TYPE_GOODS_CONSUME => '制作',
  46. self::STOCK_RECORD_TYPE_GOODS_WASTAGE => '制作商品损耗',
  47. self::STOCK_RECORD_TYPE_GOODS_CONSUME_CANCEL => '取消制作',
  48. self::STOCK_RECORD_TYPE_GOODS_WASTAGE_CANCEL => '取消制作损耗',
  49. self::STOCK_RECORD_TYPE_HD_REFUND => '退货退款',
  50. self::STOCK_RECORD_TYPE_GHS_REFUND => '采购申请退货',
  51. self::STOCK_RECORD_TYPE_PART => '拆散',
  52. self::STOCK_RECORD_TYPE_GIVE => '赠送',
  53. self::STOCK_RECORD_TYPE_ACCEPT => '获赠',
  54. ];
  55. public static function getRecordList($where)
  56. {
  57. $data = self::getList('*', $where, 'addTime DESC,id DESC');
  58. $list = isset($data['list']) && !empty($data['list']) ? $data['list'] : [];
  59. if (empty($list)) {
  60. return $data;
  61. }
  62. $itemIds = array_column($list, 'itemId');
  63. $itemIdsUnitNum = xhItemService::getItemUnitNums($itemIds);
  64. foreach ($list as $k => $v) {
  65. $unitNum = $itemIdsUnitNum[$v['itemId']] ?? 0;
  66. $stock = ProductClass::formatStock($v['newStock'], $unitNum);
  67. $orderNums = ProductClass::formatStock($v['itemNum'], $unitNum);
  68. $list[$k]['bigNumOrder'] = $orderNums['bigNum'];
  69. $list[$k]['smallNumOrder'] = $orderNums['smallNum'];
  70. $list[$k]['bigNumStock'] = $stock['bigNum'];
  71. $list[$k]['smallNumStock'] = $stock['smallNum'];
  72. $list[$k]['typeName'] = self::getTypeName($v['recordType']);
  73. }
  74. $data['list'] = $list;
  75. return $data;
  76. }
  77. public static function getTypeName($type)
  78. {
  79. return self::$typeMap[$type] ?? '';
  80. }
  81. public static function getAllType()
  82. {
  83. $list = self::$typeMap;
  84. $arr = [];
  85. foreach ($list as $id => $val) {
  86. $arr[] = ['value' => $id, 'label' => $val];
  87. }
  88. return $arr;
  89. }
  90. public static function addRecord($data)
  91. {
  92. $oldStock = $data['oldStock'] ?? 0;
  93. $newStock = $data['newStock'] ?? 0;
  94. $io = -1;
  95. if ($newStock > $oldStock) {
  96. $io = 1;
  97. }
  98. if ($newStock < $oldStock) {
  99. $io = 0;
  100. }
  101. $data['io'] = $io;
  102. $data['itemNum'] = abs($data['itemNum']);
  103. $respond = self::add($data);
  104. //库存预警通知放入队列
  105. $productId = $data['productId'] ?? 0;
  106. $currentProduct = ProductClass::getById($productId);
  107. if (!empty($currentProduct)) {
  108. ProductClass::stockWarningAddQueue($currentProduct, $data['newStock']);
  109. }
  110. return $respond;
  111. }
  112. //根据order 记录流水
  113. // sjId,shopId,orderSn
  114. //itemInfo = [{productId:1,itemId:1,itemNum:操作的花材数据,oldStock(itemStock):当时库存,newStock:变化后的库存}]
  115. public static function addRecordByOrder($orderData, $type)
  116. {
  117. $itemInfo = $orderData['itemInfo'];
  118. $productData = self::getProductMapData($itemInfo);
  119. foreach ($itemInfo as $v) {
  120. $itemId = $v['itemId'];
  121. $productId = $v['productId'];
  122. $record = [];
  123. $unitNum = $productData[$productId]['ratio'] ?? 0;
  124. $itemNum = ProductClass::mergeItemNum($v['bigNum'], $v['smallNum'], $unitNum);
  125. $record['sjId'] = $orderData['sjId'];
  126. $record['shopId'] = $orderData['shopId'];
  127. $record['mainId'] = $productData[$productId]['mainId'] ?? 0;
  128. $record['orderSn'] = $orderData['orderSn'];
  129. $record['itemId'] = $itemId;
  130. $record['itemNum'] = $itemNum;
  131. $record['oldStock'] = $v['itemStock']; //当时库存
  132. $record['recordType'] = $type;
  133. $record['productId'] = $productId;
  134. $record['newStock'] = $v['newStock'];// 最新库存
  135. $record['relateName'] = $orderData['relateName'] ?? '';
  136. $record['ptStyle'] = $orderData['ptStyle'] ?? dict::getDict('ptStyle', 'ghs');
  137. $record['avCost'] = $v['avCost'] ?? 0;
  138. $record['totalCost'] = $v['totalCost'] ?? 0;
  139. $record['totalStock'] = $v['totalStock'] ?? 0;
  140. $record['changeCost'] = $v['changeCost'] ?? 0;
  141. $record['unitCost'] = $v['unitCost'] ?? 0;
  142. self::addRecord($record);
  143. }
  144. }
  145. //花店采购申请退货退款库存变动记录 ssh 20220330
  146. public static function hdCgApplyRefundAddRecord($refundRecord)
  147. {
  148. $refundRecord['recordType'] = self::STOCK_RECORD_TYPE_REFUND;
  149. self::add($refundRecord);
  150. }
  151. //供货商给零售店退款退货增加库存变动记录 ssh 20220330
  152. public static function ghsRefundAddRecord($refundRecord)
  153. {
  154. $refundRecord['recordType'] = self::STOCK_RECORD_TYPE_REFUND;
  155. self::add($refundRecord);
  156. }
  157. public static function partItemAddRecord($refundRecord)
  158. {
  159. $refundRecord['recordType'] = self::STOCK_RECORD_TYPE_PART;
  160. self::add($refundRecord);
  161. }
  162. //采购订单流水记录
  163. public static function addPurchaseOrderRecord($data)
  164. {
  165. $data['recordType'] = self::STOCK_RECORD_TYPE_PURCHASE;
  166. return self::addRecord($data);
  167. }
  168. //盘点订单流水记录
  169. public static function addCheckOrderRecord($data)
  170. {
  171. $data['recordType'] = self::STOCK_RECORD_TYPE_CHECK_STOCK;
  172. return self::addRecord($data);
  173. }
  174. //出库订单流水记录
  175. public static function addOutStockOrderRecord($data)
  176. {
  177. $data['recordType'] = self::STOCK_RECORD_TYPE_OUT_STOCK;
  178. return self::addRecord($data);
  179. }
  180. //取消出库
  181. public static function addOutStockOrderCancelRecord($data)
  182. {
  183. $data['recordType'] = self::STOCK_RECORD_TYPE_OUT_STOCK_CANCEL;
  184. return self::addRecord($data);
  185. }
  186. //入库订单流水记录
  187. public static function addInStockOrderRecord($data)
  188. {
  189. $data['recordType'] = self::STOCK_RECORD_TYPE_IN_STOCK;
  190. return self::addRecord($data);
  191. }
  192. //取消入库
  193. public static function addInStockOrderCancelRecord($data)
  194. {
  195. $data['recordType'] = self::STOCK_RECORD_TYPE_IN_STOCK_CANCEL;
  196. return self::addRecord($data);
  197. }
  198. //销售订单流水记录
  199. public static function addSellStockOrderRecord($data)
  200. {
  201. $data['recordType'] = self::STOCK_RECORD_TYPE_SELL_STOCK;
  202. return self::addRecord($data);
  203. }
  204. //取消销售订单
  205. public static function addSellStockOrderCancelRecord($data)
  206. {
  207. $data['recordType'] = self::STOCK_RECORD_TYPE_SELL_STOCK_CANCEL;
  208. return self::addRecord($data);
  209. }
  210. //零售花店开单 ssh 20220318
  211. public static function hdKdAddRecord($data)
  212. {
  213. $data['recordType'] = self::STOCK_RECORD_TYPE_HD_ORDER;
  214. return self::addRecord($data);
  215. }
  216. //零售花店退货退款 ssh 20220427
  217. public static function hdRefundAddRecord($data)
  218. {
  219. $data['recordType'] = self::STOCK_RECORD_TYPE_HD_REFUND;
  220. return self::addRecord($data);
  221. }
  222. //制作商品 lqh 2022.03.20
  223. public static function makeGoodsConsume($data)
  224. {
  225. $data['recordType'] = self::STOCK_RECORD_TYPE_GOODS_CONSUME;
  226. return self::addRecord($data);
  227. }
  228. //制作商品损耗 lqh 2022.03.20
  229. public static function makeGoodsWastage($data)
  230. {
  231. $data['recordType'] = self::STOCK_RECORD_TYPE_GOODS_WASTAGE;
  232. return self::addRecord($data);
  233. }
  234. public static function cancelMakeGoodsConsume($data)
  235. {
  236. $data['recordType'] = self::STOCK_RECORD_TYPE_GOODS_CONSUME_CANCEL;
  237. return self::addRecord($data);
  238. }
  239. public static function cancelMakeGoodsWastage($data)
  240. {
  241. $data['recordType'] = self::STOCK_RECORD_TYPE_GOODS_WASTAGE_CANCEL;
  242. return self::addRecord($data);
  243. }
  244. //二批申请退货退款库存变动记录 ssh 20220909
  245. public static function ghsCgApplyRefundAddRecord($refundRecord)
  246. {
  247. $refundRecord['recordType'] = self::STOCK_RECORD_TYPE_GHS_REFUND;
  248. self::add($refundRecord);
  249. }
  250. }