ItemClass.php 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696
  1. <?php
  2. namespace bizHd\item\classes;
  3. use biz\item\classes\PtItemCatClass;
  4. use biz\item\classes\PtItemCatRelateClass;
  5. use biz\item\classes\PtItemClass;
  6. use biz\item\classes\PtItemClassClass;
  7. use bizGhs\order\classes\CheckOrderClass;
  8. use bizGhs\order\classes\CheckOrderItemClass;
  9. use bizGhs\stock\classes\StockRecordClass;
  10. use bizHd\base\classes\BaseClass;
  11. use bizHd\product\classes\ProductClass;
  12. use bizHd\shop\classes\ShopClass;
  13. use common\components\imgUtil;
  14. use common\components\orderSn;
  15. use common\components\stringUtil;
  16. use common\components\util;
  17. use common\services\xhItemService;
  18. use Yii;
  19. class ItemClass extends BaseClass
  20. {
  21. public static $baseFile = '\bizHd\item\models\Item';
  22. //修改product
  23. public static function updateProduct($data, $shop)
  24. {
  25. $id = $data['id'] ?? 0;
  26. $sjId = $shop->sjId ?? 0;
  27. $shopId = $shop->id ?? 0;
  28. $mainId = $shop->mainId ?? 0;
  29. $product = self::getLockById($id);
  30. if (empty($product)) {
  31. util::fail("该花材不存在");
  32. }
  33. $upData = [];
  34. //库存可以修改
  35. if (isset($data['stock']) && is_numeric($data['stock'])) {
  36. $preStock = $product->stock ?? 0;
  37. if ($data['stock'] != $preStock) {
  38. if ($data['stock'] < 0) {
  39. util::fail("库存不能小于0");
  40. }
  41. //增加盘点记录 2021.7.27
  42. $ratio = $product->ratio ?? 0;
  43. $formNum = self::formatStock($data['stock'], $ratio);
  44. $ghsItemInfo = [['productId' => $product->id, 'bigNum' => $formNum['bigNum'], 'smallNum' => $formNum['smallNum'],]];
  45. $pdData = [];
  46. $pdData['itemInfo'] = $ghsItemInfo;
  47. $pdData['sjId'] = $sjId;
  48. $pdData['shopId'] = $shopId;
  49. $pdData['adminId'] = $data['adminId'];
  50. $pdData['mainId'] = $mainId;
  51. $pdData['staffName'] = $data['staffName'] ?? '';
  52. CheckOrderClass::opOrder($pdData, false, false);
  53. }
  54. unset($data['stock']);
  55. }
  56. unset($data['adminId']);
  57. if (isset($data['name'])) {
  58. if (empty($data['name'])) {
  59. util::fail("请输入花材名称");
  60. }
  61. $upData['name'] = $data['name'];
  62. }
  63. if (isset($data['py']) && !empty($data['py'])) {
  64. $upData['py'] = $data['py'];
  65. }
  66. if (isset($data['cover']) && !empty($data['cover'])) {
  67. $upData['cover'] = $data['cover'];
  68. }
  69. if (isset($data['discountPrice']) && is_numeric($data['discountPrice'])) {
  70. $discountPrice = $data['discountPrice'] ?? 0;
  71. $currentPrice = $data['price'] ?? 0;
  72. if ($discountPrice >= $currentPrice) {
  73. util::fail('特价要小于售价');
  74. }
  75. $upData['discountPrice'] = $discountPrice;
  76. }
  77. //加价
  78. $upData['skAddPrice'] = $data['skAddPrice'] ?? 0;
  79. //价格
  80. $price = $data['skPrice'] ?? 0;
  81. if (is_numeric($price) == false || $price < 0) {
  82. util::fail('请填写价格');
  83. }
  84. $upData['skPrice'] = $price;
  85. if (isset($data['stockWarning'])) {
  86. $upData['stockWarning'] = $data['stockWarning'];
  87. }
  88. //重量不可修改
  89. unset($data['weight']);
  90. if (isset($data['inTurn'])) {
  91. $upData['inTurn'] = $data['inTurn'];
  92. }
  93. //路上库存不能直接修改
  94. unset($data['onStock']);
  95. if (isset($data['delStatus'])) {
  96. $upData['delStatus'] = $data['delStatus'];
  97. }
  98. //分类ID
  99. if (isset($data["classId"])) {
  100. $classId = $data['classId'];
  101. $upData['classId'] = $classId;
  102. }
  103. $paramsBack = $upData;
  104. $ptItemId = $product->itemId ?? 0;
  105. //修改价格
  106. if ($price != $product->price) {
  107. self::changeSinglePrice($shop, $ptItemId, $price);
  108. unset($upData['skPrice']);
  109. }
  110. //修改其它
  111. self::updateById($id, $upData);
  112. if (isset($shop->default) && $shop->default == 1 && isset($shop->dataSync) && $shop->dataSync == 1) {
  113. //总店修改同步到所有门店
  114. $chainShopList = ShopClass::getAllByCondition(['sjId' => $sjId], null, '*', null, true);
  115. foreach ($chainShopList as $chainShop) {
  116. $chainShopId = $chainShop->id ?? 0;
  117. if (isset($chainShop->join) && $chainShop->join == 1) {
  118. continue;
  119. }
  120. if ($chainShopId == $shop->id) {
  121. //前面已经添加过了
  122. continue;
  123. }
  124. $params = $paramsBack;
  125. //所有直营店的分类、上下架、启用停用不同步
  126. unset($params['classId']);
  127. unset($params['status']);
  128. unset($params['delStatus']);
  129. $chainMainId = $chainShop->mainId ?? 0;
  130. $chainProduct = ProductClass::getByCondition(['mainId' => $chainMainId, 'itemId' => $ptItemId], true);
  131. if (empty($chainProduct)) {
  132. continue;
  133. }
  134. if ($price != $chainProduct->price) {
  135. self::changeSinglePrice($chainShop, $ptItemId, $price);
  136. unset($params['skPrice']);
  137. }
  138. self::updateById($chainProduct->id, $params);
  139. }
  140. }
  141. }
  142. //单个价格修改 ssh 20230214
  143. public static function changeSinglePrice($shop, $ptItemId, $skPrice, $params = [])
  144. {
  145. $mainId = $shop->mainId ?? 0;
  146. $productInfo = ProductClass::getByCondition(['itemId' => $ptItemId, 'mainId' => $mainId], true);
  147. if (empty($productInfo)) {
  148. return false;
  149. }
  150. $productInfo->skPrice = $skPrice;
  151. $productInfo->save();
  152. $price = $productInfo->price ?? 0;
  153. $sjId = $shop->sjId ?? 0;
  154. $itemId = $productInfo->id ?? 0;
  155. $ptItemId = $productInfo->itemId ?? 0;
  156. $name = $productInfo->name ?? '';
  157. $cover = $productInfo->cover ?? '';
  158. $staffName = $params['staffName'] ?? '';
  159. $changeType = $params['changeType'] ?? 'normal';
  160. $targetId = $params['targetId'] ?? 0;
  161. $event = '修改';
  162. $type = 0;
  163. if ($changeType == 'cg') {
  164. $event = '采购后修改';
  165. $type = 1;
  166. }
  167. $changeData = [
  168. 'ptStyle' => 1,
  169. 'sjId' => $sjId,
  170. 'mainId' => $mainId,
  171. 'itemId' => $itemId,
  172. 'ptItemId' => $ptItemId,
  173. 'price' => $price,
  174. 'skPrice' => $skPrice,
  175. 'staffId' => 0,
  176. 'staffName' => $staffName,
  177. 'name' => $name,
  178. 'cover' => $cover,
  179. 'event' => $event,
  180. 'type' => $type,
  181. 'targetId' => $targetId,
  182. ];
  183. PriceChangeClass::addData($changeData);
  184. }
  185. //新增花材
  186. public static function addItem($data, $currentShop)
  187. {
  188. $currentMainId = $currentShop->mainId ?? 0;
  189. $classId = $data['classId'] ?? 0;
  190. $mainId = $data['mainId'] ?? 0;
  191. $stockWarning = $data['stockWarning'] ?? false;
  192. $data['py'] = stringUtil::py($data['name']);
  193. $name = $data['name'] ?? false;
  194. $data['alias'] = $data['alias'] ?? '';
  195. $data['cover'] = isset($data['cover']) && !empty($data['cover']) ? $data['cover'] : '';
  196. $ratio = $data['ratio'] ?? false;
  197. $weight = $data['weight'] ?? false;
  198. $data['bigUnit'] = $data['bigUnit'] ?? '扎';
  199. $data['smallUnit'] = $data['smallUnit'] ?? '支';
  200. $data['shopId'] = $data['shopId'] ?? 0;
  201. $currentShopId = $data['shopId'];
  202. $data['sjId'] = $data['sjId'] ?? 0;
  203. if (!$data['sjId']) {
  204. util::fail("参数错误");
  205. }
  206. $stock = 0;
  207. if (isset($data['stock']) && is_numeric($data['stock'])) {
  208. if ($data['stock'] < 0) {
  209. util::fail("库存数不能小于0");
  210. }
  211. $stock = $data['stock'];
  212. }
  213. //没有库存则下架
  214. $data['status'] = $stock == 0 ? 2 : 1;
  215. if (!$classId) {
  216. util::fail("请选择分类");
  217. }
  218. if (isset($data['skPrice']) == false || is_numeric($data['skPrice']) == false || $data['skPrice'] < 0) {
  219. util::fail("请输入价格");
  220. }
  221. if (isset($data['skAddPrice']) == false || is_numeric($data['skAddPrice']) == false) {
  222. util::fail("请输入加价");
  223. }
  224. if ($stockWarning === false) {
  225. util::fail("请输入库存预警值");
  226. }
  227. if ($name === false) {
  228. util::fail("请输入花材名称");
  229. }
  230. if ($ratio === false) {
  231. util::fail("请输入花材比例");
  232. }
  233. if ($weight === false) {
  234. util::fail("请输入花材重量");
  235. }
  236. $cat = ItemClassClass::getById($classId, true);
  237. if (empty($cat)) {
  238. util::fail("花材分类不存在");
  239. }
  240. if ($cat->mainId != $mainId) {
  241. util::fail('不是您的分类');
  242. }
  243. $connection = Yii::$app->db;
  244. $transaction = $connection->beginTransaction();
  245. try {
  246. if (isset($data['itemId']) == false || empty($data['itemId'])) {
  247. //添加新品种先在平台新增花材
  248. $defaultInfo = PtItemClassClass::getByCondition(['isDefault' => 1]);
  249. $defaultClassId = $defaultInfo['id'] ?? 0;
  250. if (empty($defaultClassId)) {
  251. Yii::info('添加花材时没有找到默认分类');
  252. util::fail('添加失败');
  253. }
  254. $itemData = $data;
  255. $itemData['classId'] = $defaultClassId;
  256. $itemData['skAddPrice'] = $itemData['skAddPrice'] ?? 3;
  257. $itemData['hjAddPrice'] = $itemData['hjAddPrice'] ?? 2;
  258. $itemData['zsAddPrice'] = $itemData['zsAddPrice'] ?? 1;
  259. $ptItemInfo = PtItemClass::addItem($itemData);
  260. $data['itemId'] = $ptItemInfo['id'];
  261. } else {
  262. //从平台导入花材
  263. $has = self::getByCondition(['mainId' => $mainId, 'itemId' => $data['itemId']], true);
  264. if (!empty($has)) {
  265. util::fail('已经导入过了哈');
  266. }
  267. }
  268. $ptItemId = $data['itemId'] ?? 0;
  269. $res = self::add($data, true);
  270. if ($stock > 0) {
  271. //有库存数量,增加盘盈记录 2021.7.9 lqh
  272. //增加盘点订单
  273. $pdOrderSn = orderSn::getGhsCheckSn();
  274. $pdOrderData = [];
  275. $pdOrderData['orderSn'] = $pdOrderSn;
  276. $pdOrderData['sjId'] = $data['sjId'];
  277. $pdOrderData['shopId'] = $data['shopId'];
  278. $pdOrderData['status'] = CheckOrderClass::STATUS_COMPLETE;
  279. $pdOrderData['bigNum'] = $stock;
  280. $pdOrderData['adminId'] = $data['adminId'];
  281. $pdOrderData['smallNum'] = 0;
  282. $pdOrderData['price'] = $data['price'];
  283. $pdOrderData['remark'] = '添加花材时初始化库存';
  284. CheckOrderClass::add($pdOrderData);
  285. $pdOrderItemData = [];
  286. $pdOrderItemData['orderSn'] = $pdOrderSn;
  287. $pdOrderItemData['productId'] = $res->id;
  288. $pdOrderItemData['itemId'] = $data['itemId'];
  289. $pdOrderItemData['itemId'] = $data['itemId'];
  290. $pdOrderItemData['itemNum'] = $stock;
  291. $pdOrderItemData['itemStock'] = 0;
  292. $pdOrderItemData['profitLostNum'] = $stock;
  293. $itemInfo = [
  294. 'itemName' => $name,
  295. 'itemCover' => $data['cover'],
  296. 'bigNum' => $stock,
  297. 'smallNum' => 0,
  298. 'bigNumStock' => 0,
  299. 'smallNumStock' => 0,
  300. 'bigNumProfitLoss' => $stock,
  301. 'smallNumProfitLoss' => 0,
  302. 'itemUnit' => 0,
  303. 'ratio' => $ratio,
  304. 'rank' => 'A',
  305. 'bigUnit' => $data['bigUnit'],
  306. 'smallUnit' => $data['smallUnit'],
  307. ];
  308. $pdOrderItemData['itemInfo'] = json_encode($itemInfo);
  309. $pdOrderItemData['itemPrice'] = $data['price'];
  310. $pdOrderItemData['itemCost'] = $data['cost'];
  311. CheckOrderItemClass::add($pdOrderItemData);
  312. $record = [];
  313. $record['sjId'] = $data['sjId'];
  314. $record['shopId'] = $data['shopId'];
  315. //增加中央ID
  316. $record['mainId'] = $currentMainId;
  317. $record['orderSn'] = $pdOrderSn;
  318. $record['itemId'] = $data['itemId'];
  319. $record['productId'] = $res->id;
  320. $record['itemNum'] = $stock;//盈亏数
  321. $record['oldStock'] = 0;
  322. $record['newStock'] = $stock; //新库存直接等于盘点的数量
  323. StockRecordClass::addCheckOrderRecord($record);
  324. }
  325. if (isset($currentShop->default) && $currentShop->default == 1) {
  326. //找到父级sj下的所有直营店,添加花材
  327. $shopList = ShopClass::getAllByCondition(['sjId' => $data['sjId']], null, '*', null, true);
  328. foreach ($shopList as $shop) {
  329. if (isset($shop->join) && $shop->join == 1) {
  330. continue;
  331. }
  332. $shopId = $shop->id ?? 0;
  333. if ($shopId == $currentShop->id) {
  334. //前面已经添加过了
  335. continue;
  336. }
  337. $thisMainId = $shop->mainId ?? 0;
  338. $data['shopId'] = $shopId;
  339. $data['mainId'] = $thisMainId;
  340. //不是当前门店,库存默认为0并且是下架状态
  341. //不是当前门店,花材分类放在默认分类下
  342. if ($currentShopId != $shopId) {
  343. $data['stock'] = 0;
  344. $data['status'] = 2;
  345. $defaultCat = ItemClassClass::getByCondition(['mainId' => $thisMainId, 'isDefault' => 1], true);
  346. $defaultCatId = $defaultCat->id ?? 0;
  347. if (empty($defaultCatId)) {
  348. util::fail($shop->shopName . "没有默认分类");
  349. }
  350. $data['classId'] = $defaultCatId;
  351. }
  352. //已经有了不再添加
  353. $chainHas = self::getByCondition(['mainId' => $thisMainId, 'itemId' => $ptItemId], true);
  354. if (!empty($chainHas)) {
  355. continue;
  356. }
  357. self::add($data);
  358. }
  359. }
  360. $transaction->commit();
  361. } catch (\Exception $exception) {
  362. $transaction->rollBack();
  363. Yii::info('失败原因:' . $exception->getMessage());
  364. util::fail('添加失败');
  365. }
  366. }
  367. //初始化花材 lqh 2021.4.12 modify ssh 20210711
  368. public static function initItem($mainId)
  369. {
  370. $ptClass = PtItemCatClass::getAllList("*", ['type' => 1], 'inTurn desc');
  371. if (empty($ptClass)) {
  372. return false;
  373. }
  374. $hasClassIds = array_column($ptClass, 'id');
  375. $relate = PtItemCatRelateClass::getAllByCondition(['catId' => ['in', $hasClassIds]], null, '*');
  376. $relateInfo = [];
  377. $hasItemIds = [];
  378. if (!empty($relate)) {
  379. foreach ($relate as $key => $val) {
  380. $catId = $val['catId'] ?? 0;
  381. $itemId = $val['itemId'] ?? 0;
  382. $relateInfo[$catId][] = $itemId;
  383. $hasItemIds[] = $itemId;
  384. }
  385. $hasItemIds = array_unique(array_filter($hasItemIds));
  386. }
  387. $itemInfo = PtItemClass::getAllByCondition(['id' => ['in', $hasItemIds]], null, '*', 'id');
  388. foreach ($ptClass as $v) {
  389. $classId = $v['id'];
  390. $className = $v['name'];
  391. $inTurn = $v['inTurn'];
  392. $classData = [
  393. 'mainId' => $mainId,
  394. 'name' => $className,
  395. 'inTurn' => $inTurn,
  396. ];
  397. //初始化花材分类
  398. $addClassRespond = ItemClassClass::add($classData);
  399. $ghsClassId = $addClassRespond['id'];
  400. if (isset($relateInfo[$classId]) == false) {
  401. continue;
  402. }
  403. $itemAddData = [];
  404. $productAddData = [];
  405. foreach ($relateInfo[$classId] as $currentId) {
  406. if (isset($itemInfo[$currentId]) == false) {
  407. continue;
  408. }
  409. $currentItem = $itemInfo[$currentId] ?? [];
  410. unset($currentItem['addTime']);
  411. unset($currentItem['updateTime']);
  412. $itemData = $currentItem;
  413. $itemData['classId'] = $ghsClassId;
  414. $itemData['itemId'] = $currentItem['id'];
  415. unset($itemData['id']);
  416. $itemData['rank'] = 'A';
  417. $itemAddData[] = $itemData;
  418. $productData = $currentItem;
  419. $productData['mainId'] = $mainId;
  420. $productData['itemId'] = $currentItem['id'];
  421. $productData['classId'] = $ghsClassId;
  422. unset($productData['id']);
  423. $productData['rank'] = 'B';
  424. $productData['price'] = bcadd($currentItem['cost'], $currentItem['addPrice'], 2);
  425. //花材默认是下架状态
  426. $productData['status'] = 2;
  427. $productAddData[] = $productData;
  428. }
  429. if (empty($itemAddData)) {
  430. continue;
  431. }
  432. ProductClass::batchAdd($productAddData);
  433. }
  434. //增加默认分类
  435. $classData = ['mainId' => $mainId, 'name' => '默认分类', 'inTurn' => -1, 'isDefault' => 1,];
  436. ItemClassClass::add($classData);
  437. }
  438. //从首店复制花材和分类 ssh 20220522
  439. public static function copyItem($oldMainId, $newMainId)
  440. {
  441. $classList = ItemClassClass::getAllByCondition(['mainId' => $oldMainId], null, '*');
  442. $classMap = [];
  443. if (!empty($classList)) {
  444. foreach ($classList as $class) {
  445. $preId = $class['id'] ?? 0;
  446. $class['mainId'] = $newMainId;
  447. $class['shopId'] = 0;
  448. unset($class['addTime']);
  449. unset($class['updateTime']);
  450. unset($class['id']);
  451. $ret = ItemClassClass::add($class, true);
  452. $newId = $ret->id ?? 0;
  453. $classMap[$preId] = $newId;
  454. }
  455. }
  456. $itemList = self::getAllByCondition(['mainId' => $oldMainId], null, '*');
  457. if (!empty($itemList)) {
  458. foreach ($itemList as $item) {
  459. unset($item['stock']);
  460. unset($item['addTime']);
  461. unset($item['updateTime']);
  462. unset($item['id']);
  463. $preId = $item['classId'] ?? 0;
  464. $newId = $classMap[$preId] ?? 0;
  465. $item['classId'] = $newId;
  466. $item['mainId'] = $newMainId;
  467. $item['shopId'] = 0;
  468. self::add($item);
  469. }
  470. }
  471. }
  472. public static function getShowList($where)
  473. {
  474. $level = 0;
  475. $field = 'id,cover,name,cost,itemId,classId,property,py,skPrice,skMore,addPrice,variety,price,discountPrice,skDiscountPrice,stock,stockWarning,presell,reachNum,reachNumDiscount,ratioType,smallRatio,smallUnit,bigUnit,ratio';
  476. $list = self::getAllByCondition($where, ['inTurn' => SORT_DESC, 'actualSold' => SORT_DESC], $field);
  477. if (empty($list)) {
  478. return $list;
  479. }
  480. $list = self::groupProductInfo($list, $level);
  481. $data = [];
  482. $data[ItemClassClass::TJ_CLASS_ID] = [];
  483. $data[ItemClassClass::OFTEN_CLASS_ID] = [];
  484. $data[ItemClassClass::PRESELL_CLASS_ID] = [];
  485. foreach ($list as $it) {
  486. $classId = $it['classId'] ?? 0;
  487. $data[$classId][] = $it;
  488. if (isset($it['discountPrice']) && $it['discountPrice'] > 0) {
  489. $data[ItemClassClass::TJ_CLASS_ID][] = $it;
  490. }
  491. $reachNum = $it['reachNum'] ?? 0;
  492. $reachNumDiscount = $it['reachNumDiscount'] ?? 0;
  493. if ($reachNum > 0 && $reachNumDiscount > 0) {
  494. $data[ItemClassClass::OFTEN_CLASS_ID][] = $it;
  495. }
  496. if (isset($it['presell']) && $it['presell'] == 1) {
  497. $data[ItemClassClass::PRESELL_CLASS_ID][] = $it;
  498. }
  499. }
  500. return $data;
  501. }
  502. //花材图片,名称,大小单位,小单位价格
  503. public static function groupProductInfo($list, $level = 0)
  504. {
  505. foreach ($list as $k => $v) {
  506. $shortCover = $v['cover'] ?? '';
  507. $cover = imgUtil::getPrefix() . 'hhb_small.png';
  508. if (!empty($shortCover)) {
  509. $parse = parse_url(self::groupImg($shortCover));
  510. if (empty($parse['query'])) {
  511. $cover = self::groupImg($shortCover) . "?x-oss-process=image/resize,m_fill,h_110,w_110";
  512. } else {
  513. $cover = self::groupImg($shortCover);
  514. }
  515. }
  516. $ratio = isset($v['ratio']) && $v['ratio'] > 0 ? $v['ratio'] : 1;
  517. $stockInfo = self::formatStock($v['stock'], $ratio);
  518. $list[$k]['cover'] = $cover;
  519. $list[$k]['shortCover'] = $shortCover;
  520. $list[$k]['bigNum'] = $stockInfo['bigNum'];
  521. $list[$k]['smallNum'] = $stockInfo['smallNum'];
  522. $list[$k]['itemName'] = $v['name'] ?? '';
  523. $skDiscountPrice = $v['skDiscountPrice'] ?? 0;
  524. if ($skDiscountPrice > 0) {
  525. $skPrice = $skDiscountPrice;
  526. } else {
  527. $skPrice = $v['skPrice'] ?? 0;
  528. }
  529. $skPrice = floatval($skPrice);
  530. $list[$k]['prePrice'] = $skPrice;
  531. $list[$k]['price'] = $skPrice;
  532. $list[$k]['bigPrice'] = $skPrice;
  533. $smallRatio = $v['smallRatio'] ?? 0;
  534. $div = bcdiv($skPrice, $ratio, 2);
  535. $smallPrice = bcmul($div, $smallRatio, 2);
  536. $list[$k]['smallPrice'] = $smallPrice;
  537. }
  538. return $list;
  539. }
  540. //花材的库存转换: 库存是小数,根据各个花材的unitNum, 计算出多少扎,多少支
  541. public static function formatStock($stock, $unitNum)
  542. {
  543. $pn = true; //正数
  544. if ($stock < 0) {
  545. $pn = false;
  546. $stock = abs($stock);
  547. }
  548. $bigNum = floor($stock); // 扎
  549. $stockArr = explode('.', $stock);
  550. $smallNum = 0; //支
  551. if (count($stockArr) === 2) {
  552. $smallNum = bcmul(($stock - $bigNum), $unitNum);
  553. }
  554. if (!$pn) {
  555. $bigNum *= -1;
  556. $smallNum *= -1;
  557. }
  558. return [
  559. 'bigNum' => $bigNum,
  560. 'smallNum' => $smallNum,
  561. ];
  562. }
  563. //列表数据
  564. public static function getItemList($where)
  565. {
  566. $data = self::getList('*', $where, 'inTurn DESC');
  567. $list = isset($data['list']) && !empty($data['list']) ? $data['list'] : [];
  568. if (empty($list)) {
  569. return $data;
  570. }
  571. $itemIds = array_column($list, 'itemId');
  572. $itemData = xhItemService::getByIds($itemIds);
  573. $itemData = array_column($itemData, null, 'id');
  574. foreach ($list as $k => $v) {
  575. $list[$k]['itemName'] = $itemData[$v['itemId']]['name'] ?? '';
  576. }
  577. $data['list'] = $list;
  578. return $data;
  579. }
  580. //批量新增花材(初始化使用)
  581. public static function batchAddItem($data)
  582. {
  583. return true;
  584. }
  585. //修改花材的信息(库存预警、每扎加价、每扎重量)
  586. public static function updateItem($id, $stockWarning, $addPrice, $weight, $cost)
  587. {
  588. $model = self::getById($id);
  589. if (!$model) {
  590. util::fail("该花材不存在");
  591. }
  592. $data['stockWarning'] = $stockWarning;
  593. $data['addPrice'] = $addPrice;
  594. $data['weight'] = $weight;
  595. $data['cost'] = $cost;
  596. self::updateById($id, $data);
  597. return true;
  598. }
  599. //删除花材
  600. public static function deleteItem($id)
  601. {
  602. self::deleteById($id);
  603. return true;
  604. }
  605. //根据花材分类ID,获取itemIds
  606. public static function getItemIdsByClassId($classId)
  607. {
  608. $data = self::getAllList("itemId", ['classId' => $classId]);
  609. if ($data) {
  610. $data = array_column($data, 'itemId');
  611. }
  612. return $data;
  613. }
  614. //获取当前供货商下的所有item
  615. public static function getItemAll($sjId, $select = "*")
  616. {
  617. $where = [
  618. 'sjId' => $sjId
  619. ];
  620. $data = self::getAllList($select, $where);
  621. return $data;
  622. }
  623. //根据拼音名称,获取itemIds
  624. public static function getItemIdsByPyName($pyName)
  625. {
  626. //统一转小写
  627. $pyName = strtolower($pyName);
  628. $where = ['py' => $pyName];
  629. $data = xhItemService::getAllByCondition($where, null, 'id');
  630. if ($data) {
  631. $data = array_column($data, 'id');
  632. }
  633. return $data;
  634. }
  635. //获取某个花材的信息 lqh 2021.1.28
  636. public static function getItemData($itemId, $sjId)
  637. {
  638. return self::getByCondition(['itemId' => $itemId, 'sjId' => $sjId]);
  639. }
  640. //修改某个花材的成本价(采购之后要用到) lqh 2021.1.28
  641. public static function changeCost($itemId, $sjId, $cost)
  642. {
  643. return self::updateByCondition(['itemId' => $itemId, 'sjId' => $sjId], ['cost' => $cost]);
  644. }
  645. }