OrderGoodsClass.php 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455
  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 bizHd\goods\classes\GoodsClass;
  7. use bizHd\work\classes\WorkClass;
  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, $orderId)
  67. {
  68. //取消制作单
  69. // $work = WorkClass::getByCondition(['orderId' => $orderId, 'goodsId' => $goodsId], true);
  70. // WorkClass::removeWork($work, $goodsNum);
  71. //加商品库存
  72. $params = ['reduceSale' => 1];
  73. $respond = GoodsClass::addStock($goodsId, $mainId, $goodsNum, $params);
  74. //商品流水记录
  75. $data = [];
  76. $data['sjId'] = $sjId;
  77. $data['shopId'] = $shopId;
  78. $data['mainId'] = $mainId;
  79. $data['orderSn'] = $orderSn;
  80. $data['goodsId'] = $goodsId;
  81. $data['goodsNum'] = $goodsNum;
  82. $data['oldStock'] = $respond['oldStock'] ?? 0;
  83. $data['newStock'] = $respond['newStock'] ?? 0;
  84. $data['relateName'] = $shopAdminName;
  85. GoodsStockRecordClass::refund($data);
  86. return true;
  87. }
  88. //制作制作单完成,新增商品库存
  89. public static function addGoodsStockByMakeGoods($orderSn, $sjId, $shopId, $mainId, $goodsId, $goodsNum, $staffName)
  90. {
  91. //加商品库存
  92. $respond = GoodsClass::addStock($goodsId, $mainId, $goodsNum);
  93. //商品流水记录
  94. $data = [];
  95. $data['sjId'] = $sjId;
  96. $data['shopId'] = $shopId;
  97. $data['mainId'] = $mainId;
  98. $data['orderSn'] = $orderSn;
  99. $data['goodsId'] = $goodsId;
  100. $data['goodsNum'] = $goodsNum;
  101. $data['oldStock'] = $respond['oldStock'] ?? 0;
  102. $data['newStock'] = $respond['newStock'] ?? 0;
  103. $data['relateName'] = $staffName;
  104. GoodsStockRecordClass::addMakeGoods($data);
  105. return true;
  106. }
  107. //制作制作单消耗花材(单个)
  108. public static function consumeItemByMakeGoods($orderSn, $sjId, $shopId, $productId, $num, $unitType)
  109. {
  110. $respond = self::changeItemByMakeGoods($orderSn, $sjId, $shopId, $productId, $num, $unitType, self::ACTION_CONSUME);
  111. return $respond;
  112. }
  113. //制作制作单 花材损耗(单个)
  114. public static function wastageItemByMakeGoods($orderSn, $sjId, $shopId, $productId, $num, $unitType)
  115. {
  116. $respond = self::changeItemByMakeGoods($orderSn, $sjId, $shopId, $productId, $num, $unitType, self::ACTION_WASTAGE);
  117. return $respond;
  118. }
  119. //取消制作单 花材消耗退回(单个)
  120. public static function consumeItemByMakeGoodsCancel($orderSn, $sjId, $shopId, $productId, $num, $unitType)
  121. {
  122. $respond = self::changeItemByMakeGoods($orderSn, $sjId, $shopId, $productId, $num, $unitType, self::ACTION_CONSUME_CANCEL);
  123. return $respond;
  124. }
  125. //取消制作单 花材损耗退回(单个)
  126. public static function wastageItemByMakeGoodsCancel($orderSn, $sjId, $shopId, $productId, $num, $unitType)
  127. {
  128. $respond = self::changeItemByMakeGoods($orderSn, $sjId, $shopId, $productId, $num, $unitType, self::ACTION_WASTAGE_CANCEL);
  129. return $respond;
  130. }
  131. //action 值
  132. // consume(制作制作单消耗花材) ,cancelConsume(取消制作制作单消耗花材)
  133. // wastage (制作制作单损耗花材),cancelWastage (取消制作制作单损耗花材)
  134. public static function changeItemByMakeGoods($orderSn, $sjId, $shopId, $productId, $num, $unitType, $action)
  135. {
  136. $bigNum = 0;
  137. $smallNum = 0;
  138. if ($unitType == dict::getDict('unitType', 'big')) {
  139. //大单位
  140. $bigNum = $num;
  141. } else {
  142. //小单位
  143. $smallNum = $num;
  144. }
  145. $stockInfo = [];
  146. switch ($action) {
  147. case self::ACTION_WASTAGE:
  148. case self::ACTION_CONSUME:
  149. $stockInfo = ProductClass::decreaseStock($productId, $bigNum, $smallNum, true);
  150. break;
  151. case self::ACTION_CONSUME_CANCEL:
  152. case self::ACTION_WASTAGE_CANCEL:
  153. $stockInfo = ProductClass::addStock($productId, $bigNum, $smallNum);
  154. break;
  155. default:
  156. util::fail("非法参数");
  157. }
  158. if (empty($stockInfo)) {
  159. util::fail("非法参数");
  160. }
  161. //记录流流水
  162. $productData = ProductClass::getById($productId);
  163. $record = [];
  164. $record['sjId'] = $sjId;
  165. $record['shopId'] = $shopId;
  166. $record['mainId'] = $productData['mainId'];
  167. $record['orderSn'] = $orderSn;
  168. $record['itemId'] = $productData['itemId'];
  169. $record['productId'] = $productId;
  170. $record['itemNum'] = $stockInfo['itemNum'];
  171. $record['oldStock'] = $stockInfo['oldStock'];
  172. $record['newStock'] = $stockInfo['newStock'];
  173. switch ($action) {
  174. case self::ACTION_CONSUME:
  175. StockRecordClass::makeGoodsConsume($record);
  176. break;
  177. case self::ACTION_WASTAGE:
  178. StockRecordClass::makeGoodsWastage($record);
  179. break;
  180. case self::ACTION_CONSUME_CANCEL:
  181. StockRecordClass::cancelMakeGoodsConsume($record);
  182. break;
  183. case self::ACTION_WASTAGE_CANCEL:
  184. StockRecordClass::cancelMakeGoodsWastage($record);
  185. break;
  186. }
  187. return $stockInfo;
  188. }
  189. //花店商家自主开单,库存不足则不能开单
  190. public static function addData($data, $custom = null)
  191. {
  192. $goodsId = $data['goodsId'] ?? 0;
  193. $num = $data['num'] ?? 0;
  194. $mainId = $data['mainId'] ?? 0;
  195. $orderSn = $data['orderSn'] ?? "";
  196. $shopId = $data['shopId'] ?? 0;
  197. $sjId = $data['sjId'] ?? 0;
  198. $customName = $custom['name'] ?? '';
  199. $params = ['addSale' => 1];
  200. $respond = GoodsClass::decreaseStock($goodsId, $mainId, $num, true, $params);
  201. $oldStock = $respond['oldStock'] ?? 0;
  202. $newStock = $respond['newStock'] ?? 0;
  203. $recordData = [];
  204. $recordData['sjId'] = $sjId;
  205. $recordData['shopId'] = $shopId;
  206. $recordData['mainId'] = $mainId;
  207. $recordData['orderSn'] = $orderSn;
  208. $recordData['goodsId'] = $goodsId;
  209. $recordData['goodsNum'] = $num;
  210. $recordData['oldStock'] = $oldStock;
  211. $recordData['newStock'] = $newStock;
  212. $recordData['relateName'] = $customName;
  213. //搜索关键词GoodsStockRecordClass::sellGoods,可以找到相同的方法,暂时没有写在一起
  214. GoodsStockRecordClass::sellGoods($recordData);
  215. return self::add($data, true);
  216. }
  217. //制作制作单消耗花材(批量)
  218. //消耗花材信息:$consumeItemInfo = [{"id":12233,"num":1,"unitType":0}]
  219. public static function consumeItemByMakeGoodsBatch($orderSn, $sjId, $shopId, $consumeItemInfo)
  220. {
  221. if (empty($consumeItemInfo)) {
  222. util::fail("参数错误");
  223. }
  224. //花材消耗
  225. foreach ($consumeItemInfo as $v) {
  226. //库存减少
  227. $bigNum = 0;
  228. $smallNum = 0;
  229. $productId = $v['id'];
  230. if ($v['unitType'] == 0) {
  231. //大单位
  232. $bigNum = $v['num'];
  233. } else {
  234. //小单位
  235. $smallNum = $v['num'];
  236. }
  237. //扣库存
  238. $stockInfo = ProductClass::decreaseStock($productId, $bigNum, $smallNum, true);
  239. //记录流流水
  240. $productData = ProductClass::getById($productId);
  241. $record = [];
  242. $record['sjId'] = $sjId;
  243. $record['shopId'] = $shopId;
  244. $record['mainId'] = $productData['mainId'];
  245. $record['orderSn'] = $orderSn;
  246. $record['itemId'] = $productData['itemId'];
  247. $record['productId'] = $productId;
  248. $record['itemNum'] = $stockInfo['itemNum'];
  249. $record['oldStock'] = $stockInfo['oldStock'];
  250. $record['newStock'] = $stockInfo['newStock']; //
  251. StockRecordClass::makeGoodsConsume($record);
  252. }
  253. return true;
  254. }
  255. //制作制作单 花材损耗(批量)
  256. //损耗花材信息:$wastageItemInfo = [{"id":12233,"num":1,"unitType":0}]
  257. public static function wastageItemByMakeGoodsBatch($orderSn, $sjId, $shopId, $wastageItemInfo)
  258. {
  259. //花材损耗
  260. if (empty($wastageItemInfo)) {
  261. util::fail("参数错误");
  262. }
  263. foreach ($wastageItemInfo as $v) {
  264. //库存减少
  265. $bigNum = 0;
  266. $smallNum = 0;
  267. $productId = $v['id'];
  268. if ($v['unitType'] == 0) {
  269. //大单位
  270. $bigNum = $v['num'];
  271. } else {
  272. //小单位
  273. $smallNum = $v['num'];
  274. }
  275. //扣库存
  276. $stockInfo = ProductClass::decreaseStock($productId, $bigNum, $smallNum, true);
  277. //记录流流水
  278. $productData = ProductClass::getById($productId);
  279. $record = [];
  280. $record['sjId'] = $sjId;
  281. $record['shopId'] = $shopId;
  282. $record['mainId'] = $productData['mainId'];
  283. $record['orderSn'] = $orderSn;
  284. $record['itemId'] = $productData['itemId'];
  285. $record['productId'] = $productId;
  286. $record['itemNum'] = $stockInfo['itemNum'];
  287. $record['oldStock'] = $stockInfo['oldStock'];
  288. $record['newStock'] = $stockInfo['newStock']; //
  289. StockRecordClass::makeGoodsWastage($record);
  290. }
  291. }
  292. //制作单取消
  293. //退回花材损耗,退回花材消耗,退回商品库存
  294. public static function cancelMakeGoods($orderSn)
  295. {
  296. //是否有损耗
  297. $whereWastage = [];
  298. $whereWastage['orderSn'] = $orderSn;
  299. $whereWastage['recordType'] = StockRecordClass::STOCK_RECORD_TYPE_GOODS_WASTAGE;
  300. $wastageData = StockRecordClass::getAllByCondition($whereWastage, null, "*");
  301. if ($wastageData) {
  302. foreach ($wastageData as $v) {
  303. //加库存
  304. $stockInfo = ProductClass::addStockByItemNum($v['productId'], $v['itemNum']);
  305. //加流水记录
  306. $wastageRecord = $v;
  307. $wastageRecord['oldStock'] = $stockInfo['oldStock'];
  308. $wastageRecord['newStock'] = $stockInfo['newStock'];
  309. unset($wastageRecord['id']);
  310. StockRecordClass::cancelMakeGoodsWastage($wastageRecord);
  311. }
  312. }
  313. //是否有消耗
  314. $whereConsume = [];
  315. $whereConsume['orderSn'] = $orderSn;
  316. $whereConsume['recordType'] = StockRecordClass::STOCK_RECORD_TYPE_GOODS_CONSUME;
  317. $consumeData = StockRecordClass::getAllByCondition($whereConsume, null, "*");
  318. if ($consumeData) {
  319. foreach ($consumeData as $c) {
  320. //加库存
  321. $stockInfo = ProductClass::addStockByItemNum($c['productId'], $c['itemNum']);
  322. //加流水记录
  323. $consumeRecord = $c;
  324. $consumeRecord['oldStock'] = $stockInfo['oldStock'];
  325. $consumeRecord['newStock'] = $stockInfo['newStock'];
  326. unset($consumeRecord['id']);
  327. StockRecordClass::cancelMakeGoodsConsume($consumeRecord);
  328. }
  329. }
  330. //是否有商品
  331. $whereGoods = [];
  332. $whereGoods['orderSn'] = $orderSn;
  333. $whereGoods['recordType'] = GoodsStockRecordClass::STOCK_RECORD_TYPE_PURCHASE;
  334. $goodsData = GoodsStockRecordClass::getByCondition($whereGoods, null, "*");
  335. if ($goodsData) {
  336. //减库存
  337. GoodsClass::decreaseStock($goodsData['goodsId'], $goodsData['mainId'], $goodsData['goodsNum']);
  338. //流水记录
  339. unset($goodsData['id']);
  340. GoodsStockRecordClass::cancelMakeGoods($goodsData);
  341. }
  342. }
  343. //该方法已经拆开来了(弃用)
  344. //制作商品库存变更方法(加商品库存,减花材库存(消耗、损耗))
  345. //消耗花材信息:$consumeItemInfo = [{"id":12233,"num":1,"unitType":0}]
  346. //损耗花材信息:$wastageItemInfo = [{"id":12233,"num":1,"unitType":0}]
  347. //id 是当前产品的id,单价unitType 是当前单位类型,0表示大单位,1表示小单位,默认0 num 是当前花材数量
  348. public static function changeStockByMakeGoods($orderSn, $sjId, $shopId, $mainId, $goodsId, $goodsNum, $consumeItemInfo, $wastageItemInfo)
  349. {
  350. //加商品库存
  351. GoodsClass::addStock($goodsId, $mainId, $goodsNum);
  352. //商品流水记录
  353. $data = [];
  354. $data['sjId'] = $sjId;
  355. $data['shopId'] = $shopId;
  356. $data['mainId'] = $mainId;
  357. $data['orderSn'] = $orderSn;
  358. $data['goodsId'] = $goodsId;
  359. $data['goodsNum'] = $goodsNum;
  360. GoodsStockRecordClass::addMakeGoods($data);
  361. //花材消耗
  362. if (!empty($consumeItemInfo)) {
  363. foreach ($consumeItemInfo as $v) {
  364. //库存减少
  365. $bigNum = 0;
  366. $smallNum = 0;
  367. $productId = $v['id'];
  368. if ($v['unitType'] == 0) {
  369. //大单位
  370. $bigNum = $v['num'];
  371. } else {
  372. //小单位
  373. $smallNum = $v['num'];
  374. }
  375. //扣库存
  376. $stockInfo = ProductClass::decreaseStock($productId, $bigNum, $smallNum, true);
  377. //记录流流水
  378. $productData = ProductClass::getById($productId);
  379. $record = [];
  380. $record['sjId'] = $sjId;
  381. $record['shopId'] = $shopId;
  382. $record['mainId'] = $productData['mainId'];
  383. $record['orderSn'] = $orderSn;
  384. $record['itemId'] = $productData['itemId'];
  385. $record['productId'] = $productId;
  386. $record['itemNum'] = $stockInfo['itemNum'];
  387. $record['oldStock'] = $stockInfo['oldStock'];
  388. $record['newStock'] = $stockInfo['newStock']; //
  389. StockRecordClass::makeGoodsConsume($record);
  390. }
  391. }
  392. //花材损耗
  393. if (!empty($wastageItemInfo)) {
  394. foreach ($wastageItemInfo as $v) {
  395. //库存减少
  396. $bigNum = 0;
  397. $smallNum = 0;
  398. $productId = $v['id'];
  399. if ($v['unitType'] == 0) {
  400. //大单位
  401. $bigNum = $v['num'];
  402. } else {
  403. //小单位
  404. $smallNum = $v['num'];
  405. }
  406. //扣库存
  407. $stockInfo = ProductClass::decreaseStock($productId, $bigNum, $smallNum, true);
  408. //记录流流水
  409. $productData = ProductClass::getById($productId);
  410. $record = [];
  411. $record['sjId'] = $sjId;
  412. $record['shopId'] = $shopId;
  413. $record['mainId'] = $productData['mainId'];
  414. $record['orderSn'] = $orderSn;
  415. $record['itemId'] = $productData['itemId'];
  416. $record['productId'] = $productId;
  417. $record['itemNum'] = $stockInfo['itemNum'];
  418. $record['oldStock'] = $stockInfo['oldStock'];
  419. $record['newStock'] = $stockInfo['newStock'];
  420. StockRecordClass::makeGoodsWastage($record);
  421. }
  422. }
  423. return true;
  424. }
  425. }