OrderGoodsClass.php 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425
  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)
  187. {
  188. return self::add($data);
  189. }
  190. //制作制作单消耗花材(批量)
  191. //消耗花材信息:$consumeItemInfo = [{"id":12233,"num":1,"unitType":0}]
  192. public static function consumeItemByMakeGoodsBatch($orderSn, $sjId, $shopId, $consumeItemInfo)
  193. {
  194. if (empty($consumeItemInfo)) {
  195. util::fail("参数错误");
  196. }
  197. //花材消耗
  198. foreach ($consumeItemInfo as $v) {
  199. //库存减少
  200. $bigNum = 0;
  201. $smallNum = 0;
  202. $productId = $v['id'];
  203. if ($v['unitType'] == 0) {
  204. //大单位
  205. $bigNum = $v['num'];
  206. } else {
  207. //小单位
  208. $smallNum = $v['num'];
  209. }
  210. //扣库存
  211. $stockInfo = ProductClass::decreaseStock($productId, $bigNum, $smallNum, true);
  212. //记录流流水
  213. $productData = ProductClass::getById($productId);
  214. $record = [];
  215. $record['sjId'] = $sjId;
  216. $record['shopId'] = $shopId;
  217. $record['mainId'] = $productData['mainId'];
  218. $record['orderSn'] = $orderSn;
  219. $record['itemId'] = $productData['itemId'];
  220. $record['productId'] = $productId;
  221. $record['itemNum'] = $stockInfo['itemNum'];
  222. $record['oldStock'] = $stockInfo['oldStock'];
  223. $record['newStock'] = $stockInfo['newStock']; //
  224. StockRecordClass::makeGoodsConsume($record);
  225. }
  226. return true;
  227. }
  228. //制作制作单 花材损耗(批量)
  229. //损耗花材信息:$wastageItemInfo = [{"id":12233,"num":1,"unitType":0}]
  230. public static function wastageItemByMakeGoodsBatch($orderSn, $sjId, $shopId, $wastageItemInfo)
  231. {
  232. //花材损耗
  233. if (empty($wastageItemInfo)) {
  234. util::fail("参数错误");
  235. }
  236. foreach ($wastageItemInfo as $v) {
  237. //库存减少
  238. $bigNum = 0;
  239. $smallNum = 0;
  240. $productId = $v['id'];
  241. if ($v['unitType'] == 0) {
  242. //大单位
  243. $bigNum = $v['num'];
  244. } else {
  245. //小单位
  246. $smallNum = $v['num'];
  247. }
  248. //扣库存
  249. $stockInfo = ProductClass::decreaseStock($productId, $bigNum, $smallNum, true);
  250. //记录流流水
  251. $productData = ProductClass::getById($productId);
  252. $record = [];
  253. $record['sjId'] = $sjId;
  254. $record['shopId'] = $shopId;
  255. $record['mainId'] = $productData['mainId'];
  256. $record['orderSn'] = $orderSn;
  257. $record['itemId'] = $productData['itemId'];
  258. $record['productId'] = $productId;
  259. $record['itemNum'] = $stockInfo['itemNum'];
  260. $record['oldStock'] = $stockInfo['oldStock'];
  261. $record['newStock'] = $stockInfo['newStock']; //
  262. StockRecordClass::makeGoodsWastage($record);
  263. }
  264. }
  265. //制作单取消
  266. //退回花材损耗,退回花材消耗,退回商品库存
  267. public static function cancelMakeGoods($orderSn)
  268. {
  269. //是否有损耗
  270. $whereWastage = [];
  271. $whereWastage['orderSn'] = $orderSn;
  272. $whereWastage['recordType'] = StockRecordClass::STOCK_RECORD_TYPE_GOODS_WASTAGE;
  273. $wastageData = StockRecordClass::getAllByCondition($whereWastage, null, "*");
  274. if ($wastageData) {
  275. foreach ($wastageData as $v) {
  276. //加库存
  277. $stockInfo = ProductClass::addStockByItemNum($v['productId'], $v['itemNum']);
  278. //加流水记录
  279. $wastageRecord = $v;
  280. $wastageRecord['oldStock'] = $stockInfo['oldStock'];
  281. $wastageRecord['newStock'] = $stockInfo['newStock'];
  282. unset($wastageRecord['id']);
  283. StockRecordClass::cancelMakeGoodsWastage($wastageRecord);
  284. }
  285. }
  286. //是否有消耗
  287. $whereConsume = [];
  288. $whereConsume['orderSn'] = $orderSn;
  289. $whereConsume['recordType'] = StockRecordClass::STOCK_RECORD_TYPE_GOODS_CONSUME;
  290. $consumeData = StockRecordClass::getAllByCondition($whereConsume, null, "*");
  291. if ($consumeData) {
  292. foreach ($consumeData as $c) {
  293. //加库存
  294. $stockInfo = ProductClass::addStockByItemNum($c['productId'], $c['itemNum']);
  295. //加流水记录
  296. $consumeRecord = $c;
  297. $consumeRecord['oldStock'] = $stockInfo['oldStock'];
  298. $consumeRecord['newStock'] = $stockInfo['newStock'];
  299. unset($consumeRecord['id']);
  300. StockRecordClass::cancelMakeGoodsConsume($consumeRecord);
  301. }
  302. }
  303. //是否有商品
  304. $whereGoods = [];
  305. $whereGoods['orderSn'] = $orderSn;
  306. $whereGoods['recordType'] = GoodsStockRecordClass::STOCK_RECORD_TYPE_PURCHASE;
  307. $goodsData = GoodsStockRecordClass::getByCondition($whereGoods, null, "*");
  308. if ($goodsData) {
  309. //减库存
  310. GoodsClass::decreaseStock($goodsData['goodsId'], $goodsData['mainId'], $goodsData['goodsNum']);
  311. //流水记录
  312. unset($goodsData['id']);
  313. GoodsStockRecordClass::cancelMakeGoods($goodsData);
  314. }
  315. }
  316. //该方法已经拆开来了(弃用)
  317. //制作商品库存变更方法(加商品库存,减花材库存(消耗、损耗))
  318. //消耗花材信息:$consumeItemInfo = [{"id":12233,"num":1,"unitType":0}]
  319. //损耗花材信息:$wastageItemInfo = [{"id":12233,"num":1,"unitType":0}]
  320. //id 是当前产品的id,单价unitType 是当前单位类型,0表示大单位,1表示小单位,默认0 num 是当前花材数量
  321. public static function changeStockByMakeGoods($orderSn, $sjId, $shopId, $mainId, $goodsId, $goodsNum, $consumeItemInfo, $wastageItemInfo)
  322. {
  323. //加商品库存
  324. GoodsClass::addStock($goodsId, $mainId, $goodsNum);
  325. //商品流水记录
  326. $data = [];
  327. $data['sjId'] = $sjId;
  328. $data['shopId'] = $shopId;
  329. $data['mainId'] = $mainId;
  330. $data['orderSn'] = $orderSn;
  331. $data['goodsId'] = $goodsId;
  332. $data['goodsNum'] = $goodsNum;
  333. GoodsStockRecordClass::addMakeGoods($data);
  334. //花材消耗
  335. if (!empty($consumeItemInfo)) {
  336. foreach ($consumeItemInfo as $v) {
  337. //库存减少
  338. $bigNum = 0;
  339. $smallNum = 0;
  340. $productId = $v['id'];
  341. if ($v['unitType'] == 0) {
  342. //大单位
  343. $bigNum = $v['num'];
  344. } else {
  345. //小单位
  346. $smallNum = $v['num'];
  347. }
  348. //扣库存
  349. $stockInfo = ProductClass::decreaseStock($productId, $bigNum, $smallNum, true);
  350. //记录流流水
  351. $productData = ProductClass::getById($productId);
  352. $record = [];
  353. $record['sjId'] = $sjId;
  354. $record['shopId'] = $shopId;
  355. $record['mainId'] = $productData['mainId'];
  356. $record['orderSn'] = $orderSn;
  357. $record['itemId'] = $productData['itemId'];
  358. $record['productId'] = $productId;
  359. $record['itemNum'] = $stockInfo['itemNum'];
  360. $record['oldStock'] = $stockInfo['oldStock'];
  361. $record['newStock'] = $stockInfo['newStock']; //
  362. StockRecordClass::makeGoodsConsume($record);
  363. }
  364. }
  365. //花材损耗
  366. if (!empty($wastageItemInfo)) {
  367. foreach ($wastageItemInfo as $v) {
  368. //库存减少
  369. $bigNum = 0;
  370. $smallNum = 0;
  371. $productId = $v['id'];
  372. if ($v['unitType'] == 0) {
  373. //大单位
  374. $bigNum = $v['num'];
  375. } else {
  376. //小单位
  377. $smallNum = $v['num'];
  378. }
  379. //扣库存
  380. $stockInfo = ProductClass::decreaseStock($productId, $bigNum, $smallNum, true);
  381. //记录流流水
  382. $productData = ProductClass::getById($productId);
  383. $record = [];
  384. $record['sjId'] = $sjId;
  385. $record['shopId'] = $shopId;
  386. $record['mainId'] = $productData['mainId'];
  387. $record['orderSn'] = $orderSn;
  388. $record['itemId'] = $productData['itemId'];
  389. $record['productId'] = $productId;
  390. $record['itemNum'] = $stockInfo['itemNum'];
  391. $record['oldStock'] = $stockInfo['oldStock'];
  392. $record['newStock'] = $stockInfo['newStock'];
  393. StockRecordClass::makeGoodsWastage($record);
  394. }
  395. }
  396. return true;
  397. }
  398. }