OrderGoodsClass.php 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449
  1. <?php
  2. namespace bizHd\order\classes;
  3. use biz\stock\classes\GoodsStockRecordClass;
  4. use bizGhs\product\classes\ProductClass;
  5. use bizGhs\stock\classes\StockRecordClass;
  6. use bizGhs\stock\services\StockRecordService;
  7. use bizHd\goods\classes\GoodsClass;
  8. use common\components\business;
  9. use common\components\dict;
  10. use common\components\imgUtil;
  11. use common\components\util;
  12. use Yii;
  13. use bizHd\base\classes\BaseClass;
  14. class OrderGoodsClass extends BaseClass
  15. {
  16. public static $baseFile = '\bizHd\order\models\OrderGoods';
  17. const ACTION_CONSUME = 'consume'; //消耗花材
  18. const ACTION_CONSUME_CANCEL = 'consumeCancel'; //取消消耗花材
  19. const ACTION_WASTAGE = 'wastage'; //取消消耗花材
  20. const ACTION_WASTAGE_CANCEL = 'wastageCancel'; //取消消耗花材
  21. //取订单 ssh 2020.1.2
  22. public static function getGoodsListById($id)
  23. {
  24. $arr = self::getAllByCondition(['orderId' => $id], null, '*');
  25. if (empty($arr)) {
  26. return [];
  27. }
  28. foreach ($arr as $key => $val) {
  29. $val = business::formatOrderGoodsCover($val);
  30. $arr[$key] = $val;
  31. }
  32. return $arr;
  33. }
  34. public static function getListBySn($sn)
  35. {
  36. $list = self::getAllByCondition(['orderSn' => $sn], null, '*');
  37. if (empty($list)) {
  38. return [];
  39. }
  40. foreach ($list as $key => $val) {
  41. $shortCover = isset($val['cover']) && !empty($val['cover']) ? $val['cover'] : 'hhb_small.png';
  42. $smallCover = imgUtil::groupImg($shortCover) . "?x-oss-process=image/resize,m_fill,h_130,w_130";
  43. $bigCover = imgUtil::groupImg($shortCover) . "?x-oss-process=image/resize,m_fill,h_700,w_700";
  44. $list[$key]['shortCover'] = $shortCover;
  45. $list[$key]['smallCover'] = $smallCover;
  46. $list[$key]['bigCover'] = $bigCover;
  47. }
  48. return $list;
  49. }
  50. //批量取订单 ssh 2020.1.2
  51. public static function getGoodsListByOrderSns($sns)
  52. {
  53. $arr = self::getAllByCondition(['orderSn' => ['in', $sns]], null, '*');
  54. if (empty($arr)) {
  55. return [];
  56. }
  57. $data = [];
  58. foreach ($arr as $info) {
  59. $orderId = $info['id'];
  60. $info = business::formatOrderGoodsCover($info);
  61. $data[$orderId][] = $info;
  62. }
  63. return $data;
  64. }
  65. //退货增加库存 ssh 20220427
  66. public static function refundAddStock($orderSn, $sjId, $shopId, $mainId, $goodsId, $goodsNum, $shopAdminName)
  67. {
  68. //加商品库存
  69. $respond = GoodsClass::addStock($goodsId, $mainId, $goodsNum);
  70. //商品流水记录
  71. $data = [];
  72. $data['sjId'] = $sjId;
  73. $data['shopId'] = $shopId;
  74. $data['mainId'] = $mainId;
  75. $data['orderSn'] = $orderSn;
  76. $data['goodsId'] = $goodsId;
  77. $data['goodsNum'] = $goodsNum;
  78. $data['oldStock'] = $respond['oldStock'] ?? 0;
  79. $data['newStock'] = $respond['newStock'] ?? 0;
  80. $data['relateName'] = $shopAdminName;
  81. GoodsStockRecordClass::refund($data);
  82. return true;
  83. }
  84. //制作工单完成,新增商品库存
  85. public static function addGoodsStockByMakeGoods($orderSn, $sjId, $shopId, $mainId, $goodsId, $goodsNum, $staffName)
  86. {
  87. //加商品库存
  88. $respond = GoodsClass::addStock($goodsId, $mainId, $goodsNum);
  89. //商品流水记录
  90. $data = [];
  91. $data['sjId'] = $sjId;
  92. $data['shopId'] = $shopId;
  93. $data['mainId'] = $mainId;
  94. $data['orderSn'] = $orderSn;
  95. $data['goodsId'] = $goodsId;
  96. $data['goodsNum'] = $goodsNum;
  97. $data['oldStock'] = $respond['oldStock'] ?? 0;
  98. $data['newStock'] = $respond['newStock'] ?? 0;
  99. $data['relateName'] = $staffName;
  100. GoodsStockRecordClass::addMakeGoods($data);
  101. return true;
  102. }
  103. //制作工单消耗花材(单个)
  104. public static function consumeItemByMakeGoods($orderSn, $sjId, $shopId, $productId, $num, $unitType)
  105. {
  106. $respond = self::changeItemByMakeGoods($orderSn, $sjId, $shopId, $productId, $num, $unitType, self::ACTION_CONSUME);
  107. return $respond;
  108. }
  109. //制作工单 花材损耗(单个)
  110. public static function wastageItemByMakeGoods($orderSn, $sjId, $shopId, $productId, $num, $unitType)
  111. {
  112. $respond = self::changeItemByMakeGoods($orderSn, $sjId, $shopId, $productId, $num, $unitType, self::ACTION_WASTAGE);
  113. return $respond;
  114. }
  115. //取消工单 花材消耗退回(单个)
  116. public static function consumeItemByMakeGoodsCancel($orderSn, $sjId, $shopId, $productId, $num, $unitType)
  117. {
  118. $respond = self::changeItemByMakeGoods($orderSn, $sjId, $shopId, $productId, $num, $unitType, self::ACTION_CONSUME_CANCEL);
  119. return $respond;
  120. }
  121. //取消工单 花材损耗退回(单个)
  122. public static function wastageItemByMakeGoodsCancel($orderSn, $sjId, $shopId, $productId, $num, $unitType)
  123. {
  124. $respond = self::changeItemByMakeGoods($orderSn, $sjId, $shopId, $productId, $num, $unitType, self::ACTION_WASTAGE_CANCEL);
  125. return $respond;
  126. }
  127. //action 值
  128. // consume(制作工单消耗花材) ,cancelConsume(取消制作工单消耗花材)
  129. // wastage (制作工单损耗花材),cancelWastage (取消制作工单损耗花材)
  130. public static function changeItemByMakeGoods($orderSn, $sjId, $shopId, $productId, $num, $unitType, $action)
  131. {
  132. $bigNum = 0;
  133. $smallNum = 0;
  134. if ($unitType == dict::getDict('unitType', 'big')) {
  135. //大单位
  136. $bigNum = $num;
  137. } else {
  138. //小单位
  139. $smallNum = $num;
  140. }
  141. $stockInfo = [];
  142. switch ($action) {
  143. case self::ACTION_WASTAGE:
  144. case self::ACTION_CONSUME:
  145. $stockInfo = ProductClass::decreaseStock($productId, $bigNum, $smallNum, true);
  146. break;
  147. case self::ACTION_CONSUME_CANCEL:
  148. case self::ACTION_WASTAGE_CANCEL:
  149. $stockInfo = ProductClass::addStock($productId, $bigNum, $smallNum);
  150. break;
  151. default:
  152. util::fail("非法参数");
  153. }
  154. if (empty($stockInfo)) {
  155. util::fail("非法参数");
  156. }
  157. //记录流流水
  158. $productData = ProductClass::getById($productId);
  159. $record = [];
  160. $record['sjId'] = $sjId;
  161. $record['shopId'] = $shopId;
  162. $record['mainId'] = $productData['mainId'];
  163. $record['orderSn'] = $orderSn;
  164. $record['itemId'] = $productData['itemId'];
  165. $record['productId'] = $productId;
  166. $record['itemNum'] = $stockInfo['itemNum'];
  167. $record['oldStock'] = $stockInfo['oldStock'];
  168. $record['newStock'] = $stockInfo['newStock'];
  169. switch ($action) {
  170. case self::ACTION_CONSUME:
  171. StockRecordClass::makeGoodsConsume($record);
  172. break;
  173. case self::ACTION_WASTAGE:
  174. StockRecordClass::makeGoodsWastage($record);
  175. break;
  176. case self::ACTION_CONSUME_CANCEL:
  177. StockRecordClass::cancelMakeGoodsConsume($record);
  178. break;
  179. case self::ACTION_WASTAGE_CANCEL:
  180. StockRecordClass::cancelMakeGoodsWastage($record);
  181. break;
  182. }
  183. return $stockInfo;
  184. }
  185. //花店商家自主开单,库存不足则不能开单
  186. public static function addData($data, $custom)
  187. {
  188. $orderSn = $data['orderSn'] ?? '';
  189. $sjId = $data['sjId'] ?? 0;
  190. $shopId = $data['shopId'] ?? 0;
  191. $mainId = $data['mainId'] ?? 0;
  192. $goodsId = $data['goodsId'] ?? 0;
  193. $num = $data['num'] ?? 0;
  194. $customName = $custom['name'] ?? '';
  195. //搜索关键词GoodsStockRecordClass::sellGoods,可以找到相同的方法
  196. $respond = GoodsClass::decreaseStock($goodsId, $mainId, $num);
  197. $oldStock = $respond['oldStock'] ?? 0;
  198. $newStock = $respond['newStock'] ?? 0;
  199. $data = [];
  200. $data['sjId'] = $sjId;
  201. $data['shopId'] = $shopId;
  202. $data['mainId'] = $mainId;
  203. $data['orderSn'] = $orderSn;
  204. $data['goodsId'] = $goodsId;
  205. $data['goodsNum'] = $num;
  206. $data['oldStock'] = $oldStock;
  207. $data['newStock'] = $newStock;
  208. $data['relateName'] = $customName;
  209. GoodsStockRecordClass::sellGoods($data);
  210. return self::add($data);
  211. }
  212. //制作工单消耗花材(批量)
  213. //消耗花材信息:$consumeItemInfo = [{"id":12233,"num":1,"unitType":0}]
  214. public static function consumeItemByMakeGoodsBatch($orderSn, $sjId, $shopId, $consumeItemInfo)
  215. {
  216. if (empty($consumeItemInfo)) {
  217. util::fail("参数错误");
  218. }
  219. //花材消耗
  220. foreach ($consumeItemInfo as $v) {
  221. //库存减少
  222. $bigNum = 0;
  223. $smallNum = 0;
  224. $productId = $v['id'];
  225. if ($v['unitType'] == 0) {
  226. //大单位
  227. $bigNum = $v['num'];
  228. } else {
  229. //小单位
  230. $smallNum = $v['num'];
  231. }
  232. //扣库存
  233. $stockInfo = ProductClass::decreaseStock($productId, $bigNum, $smallNum, true);
  234. //记录流流水
  235. $productData = ProductClass::getById($productId);
  236. $record = [];
  237. $record['sjId'] = $sjId;
  238. $record['shopId'] = $shopId;
  239. $record['mainId'] = $productData['mainId'];
  240. $record['orderSn'] = $orderSn;
  241. $record['itemId'] = $productData['itemId'];
  242. $record['productId'] = $productId;
  243. $record['itemNum'] = $stockInfo['itemNum'];
  244. $record['oldStock'] = $stockInfo['oldStock'];
  245. $record['newStock'] = $stockInfo['newStock']; //
  246. StockRecordClass::makeGoodsConsume($record);
  247. }
  248. return true;
  249. }
  250. //制作工单 花材损耗(批量)
  251. //损耗花材信息:$wastageItemInfo = [{"id":12233,"num":1,"unitType":0}]
  252. public static function wastageItemByMakeGoodsBatch($orderSn, $sjId, $shopId, $wastageItemInfo)
  253. {
  254. //花材损耗
  255. if (empty($wastageItemInfo)) {
  256. util::fail("参数错误");
  257. }
  258. foreach ($wastageItemInfo as $v) {
  259. //库存减少
  260. $bigNum = 0;
  261. $smallNum = 0;
  262. $productId = $v['id'];
  263. if ($v['unitType'] == 0) {
  264. //大单位
  265. $bigNum = $v['num'];
  266. } else {
  267. //小单位
  268. $smallNum = $v['num'];
  269. }
  270. //扣库存
  271. $stockInfo = ProductClass::decreaseStock($productId, $bigNum, $smallNum, true);
  272. //记录流流水
  273. $productData = ProductClass::getById($productId);
  274. $record = [];
  275. $record['sjId'] = $sjId;
  276. $record['shopId'] = $shopId;
  277. $record['mainId'] = $productData['mainId'];
  278. $record['orderSn'] = $orderSn;
  279. $record['itemId'] = $productData['itemId'];
  280. $record['productId'] = $productId;
  281. $record['itemNum'] = $stockInfo['itemNum'];
  282. $record['oldStock'] = $stockInfo['oldStock'];
  283. $record['newStock'] = $stockInfo['newStock']; //
  284. StockRecordClass::makeGoodsWastage($record);
  285. }
  286. }
  287. //工单取消
  288. //退回花材损耗,退回花材消耗,退回商品库存
  289. public static function cancelMakeGoods($orderSn)
  290. {
  291. //是否有损耗
  292. $whereWastage = [];
  293. $whereWastage['orderSn'] = $orderSn;
  294. $whereWastage['recordType'] = StockRecordClass::STOCK_RECORD_TYPE_GOODS_WASTAGE;
  295. $wastageData = StockRecordClass::getAllByCondition($whereWastage, null, "*");
  296. if ($wastageData) {
  297. foreach ($wastageData as $v) {
  298. //加库存
  299. $stockInfo = ProductClass::addStockByItemNum($v['productId'], $v['itemNum']);
  300. //加流水记录
  301. $wastageRecord = $v;
  302. $wastageRecord['oldStock'] = $stockInfo['oldStock'];
  303. $wastageRecord['newStock'] = $stockInfo['newStock'];
  304. unset($wastageRecord['id']);
  305. StockRecordClass::cancelMakeGoodsWastage($wastageRecord);
  306. }
  307. }
  308. //是否有消耗
  309. $whereConsume = [];
  310. $whereConsume['orderSn'] = $orderSn;
  311. $whereConsume['recordType'] = StockRecordClass::STOCK_RECORD_TYPE_GOODS_CONSUME;
  312. $consumeData = StockRecordClass::getAllByCondition($whereConsume, null, "*");
  313. if ($consumeData) {
  314. foreach ($consumeData as $c) {
  315. //加库存
  316. $stockInfo = ProductClass::addStockByItemNum($c['productId'], $c['itemNum']);
  317. //加流水记录
  318. $consumeRecord = $c;
  319. $consumeRecord['oldStock'] = $stockInfo['oldStock'];
  320. $consumeRecord['newStock'] = $stockInfo['newStock'];
  321. unset($consumeRecord['id']);
  322. StockRecordClass::cancelMakeGoodsConsume($consumeRecord);
  323. }
  324. }
  325. //是否有商品
  326. $whereGoods = [];
  327. $whereGoods['orderSn'] = $orderSn;
  328. $whereGoods['recordType'] = GoodsStockRecordClass::STOCK_RECORD_TYPE_PURCHASE;
  329. $goodsData = GoodsStockRecordClass::getByCondition($whereGoods, null, "*");
  330. if ($goodsData) {
  331. //减库存
  332. GoodsClass::decreaseStock($goodsData['goodsId'], $goodsData['mainId'], $goodsData['goodsNum']);
  333. //流水记录
  334. unset($goodsData['id']);
  335. GoodsStockRecordClass::cancelMakeGoods($goodsData);
  336. }
  337. }
  338. //该方法已经拆开来了(弃用)
  339. //制作商品库存变更方法(加商品库存,减花材库存(消耗、损耗))
  340. //消耗花材信息:$consumeItemInfo = [{"id":12233,"num":1,"unitType":0}]
  341. //损耗花材信息:$wastageItemInfo = [{"id":12233,"num":1,"unitType":0}]
  342. //id 是当前产品的id,单价unitType 是当前单位类型,0表示大单位,1表示小单位,默认0 num 是当前花材数量
  343. public static function changeStockByMakeGoods($orderSn, $sjId, $shopId, $mainId, $goodsId, $goodsNum, $consumeItemInfo, $wastageItemInfo)
  344. {
  345. //加商品库存
  346. GoodsClass::addStock($goodsId, $mainId, $goodsNum);
  347. //商品流水记录
  348. $data = [];
  349. $data['sjId'] = $sjId;
  350. $data['shopId'] = $shopId;
  351. $data['mainId'] = $mainId;
  352. $data['orderSn'] = $orderSn;
  353. $data['goodsId'] = $goodsId;
  354. $data['goodsNum'] = $goodsNum;
  355. GoodsStockRecordClass::addMakeGoods($data);
  356. //花材消耗
  357. if (!empty($consumeItemInfo)) {
  358. foreach ($consumeItemInfo as $v) {
  359. //库存减少
  360. $bigNum = 0;
  361. $smallNum = 0;
  362. $productId = $v['id'];
  363. if ($v['unitType'] == 0) {
  364. //大单位
  365. $bigNum = $v['num'];
  366. } else {
  367. //小单位
  368. $smallNum = $v['num'];
  369. }
  370. //扣库存
  371. $stockInfo = ProductClass::decreaseStock($productId, $bigNum, $smallNum, true);
  372. //记录流流水
  373. $productData = ProductClass::getById($productId);
  374. $record = [];
  375. $record['sjId'] = $sjId;
  376. $record['shopId'] = $shopId;
  377. $record['mainId'] = $productData['mainId'];
  378. $record['orderSn'] = $orderSn;
  379. $record['itemId'] = $productData['itemId'];
  380. $record['productId'] = $productId;
  381. $record['itemNum'] = $stockInfo['itemNum'];
  382. $record['oldStock'] = $stockInfo['oldStock'];
  383. $record['newStock'] = $stockInfo['newStock']; //
  384. StockRecordClass::makeGoodsConsume($record);
  385. }
  386. }
  387. //花材损耗
  388. if (!empty($wastageItemInfo)) {
  389. foreach ($wastageItemInfo as $v) {
  390. //库存减少
  391. $bigNum = 0;
  392. $smallNum = 0;
  393. $productId = $v['id'];
  394. if ($v['unitType'] == 0) {
  395. //大单位
  396. $bigNum = $v['num'];
  397. } else {
  398. //小单位
  399. $smallNum = $v['num'];
  400. }
  401. //扣库存
  402. $stockInfo = ProductClass::decreaseStock($productId, $bigNum, $smallNum, true);
  403. //记录流流水
  404. $productData = ProductClass::getById($productId);
  405. $record = [];
  406. $record['sjId'] = $sjId;
  407. $record['shopId'] = $shopId;
  408. $record['mainId'] = $productData['mainId'];
  409. $record['orderSn'] = $orderSn;
  410. $record['itemId'] = $productData['itemId'];
  411. $record['productId'] = $productId;
  412. $record['itemNum'] = $stockInfo['itemNum'];
  413. $record['oldStock'] = $stockInfo['oldStock'];
  414. $record['newStock'] = $stockInfo['newStock'];
  415. StockRecordClass::makeGoodsWastage($record);
  416. }
  417. }
  418. return true;
  419. }
  420. }