ItemClass.php 26 KB

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