StoreGoods.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com
  8. * =========================================================
  9. */
  10. namespace app\model\storegoods;
  11. use app\model\BaseModel;
  12. use app\model\store\Store;
  13. /**
  14. * 商品
  15. */
  16. class StoreGoods extends BaseModel
  17. {
  18. /**
  19. * 门店商品信息
  20. * @param $condition
  21. * @param string $field
  22. * @return array
  23. */
  24. public function getStoreGoodsInfo($condition, $field = '*')
  25. {
  26. $info = model('store_goods')->getInfo($condition, $field);
  27. if (!empty($info)) {
  28. if (isset($info[ 'stock' ])) {
  29. $info[ 'stock' ] = numberFormat($info[ 'stock' ]);
  30. }
  31. if (isset($info[ 'sale_num' ])) {
  32. $info[ 'sale_num' ] = numberFormat($info[ 'sale_num' ]);
  33. }
  34. if (isset($info[ 'real_stock' ])) {
  35. $info[ 'real_stock' ] = numberFormat($info[ 'real_stock' ]);
  36. }
  37. }
  38. return $this->success($info);
  39. }
  40. /**
  41. * 门店sku信息
  42. * @param $condition
  43. * @param string $field
  44. * @return array
  45. */
  46. public function getStoreGoodsSkuInfo($condition, $field = '*')
  47. {
  48. $info = model('store_goods_sku')->getInfo($condition, $field);
  49. if (!empty($info)) {
  50. if (isset($info[ 'stock' ])) {
  51. $info[ 'stock' ] = numberFormat($info[ 'stock' ]);
  52. }
  53. if (isset($info[ 'sale_num' ])) {
  54. $info[ 'sale_num' ] = numberFormat($info[ 'sale_num' ]);
  55. }
  56. if (isset($info[ 'real_stock' ])) {
  57. $info[ 'real_stock' ] = numberFormat($info[ 'real_stock' ]);
  58. }
  59. }
  60. return $this->success($info);
  61. }
  62. public function checkStoreGoods($goods_ids, $site_id, $store_id)
  63. {
  64. $goods_list = model('goods')->getList([ [ 'goods_id', 'in', (string) $goods_ids ], [ 'site_id', '=', $site_id ] ], 'price, goods_id');
  65. foreach ($goods_list as $k => $v) {
  66. $goods_condition = array (
  67. [ 'goods_id', '=', $v[ 'goods_id' ] ],
  68. [ 'store_id', '=', $store_id ]
  69. );
  70. $goods_info = model('store_goods')->getInfo($goods_condition, 'id');
  71. //不存在就创建
  72. if (empty($goods_info)) {
  73. $data = array (
  74. 'goods_id' => $v[ 'goods_id' ],
  75. 'store_id' => $store_id,
  76. 'create_time' => time(),
  77. 'price' => $v[ 'price' ]
  78. );
  79. model('store_goods')->add($data);
  80. }
  81. }
  82. $sku_goods_list = model('goods_sku')->getList([ [ 'goods_id', 'in', (string) $goods_ids ], [ 'site_id', '=', $site_id ] ], 'price, goods_id, sku_id');
  83. foreach ($sku_goods_list as $k => $v) {
  84. $sku_goods_condition = array (
  85. [ 'sku_id', '=', $v[ 'sku_id' ] ],
  86. [ 'store_id', '=', $store_id ]
  87. );
  88. $sku_info = model('store_goods_sku')->getInfo($sku_goods_condition, 'id');
  89. //不存在就创建
  90. if (empty($sku_info)) {
  91. $data = array (
  92. 'goods_id' => $v[ 'goods_id' ],
  93. 'store_id' => $store_id,
  94. 'sku_id' => $v[ 'sku_id' ],
  95. 'create_time' => time(),
  96. 'price' => $v[ 'price' ]
  97. );
  98. model('store_goods_sku')->add($data);
  99. }
  100. }
  101. return $this->success(1);
  102. }
  103. /**
  104. * 门店修改商品状态
  105. * @param $goods_ids
  106. * @param $goods_state
  107. * @param $site_id
  108. * @return array
  109. */
  110. public function modifyGoodsState($goods_ids, $goods_state, $site_id, $store_id = 0)
  111. {
  112. if ($store_id == 0) {
  113. $store_model = new Store();
  114. $store_info = $store_model->getDefaultStore($site_id)[ 'data' ] ?? [];
  115. $store_id = $store_info[ 'store_id' ];
  116. }
  117. $this->checkStoreGoods($goods_ids, $site_id, $store_id);
  118. model('store_goods')->update([ 'status' => $goods_state ], [ [ 'goods_id', 'in', (string) $goods_ids ], [ 'store_id', '=', $store_id ] ]);
  119. model('store_goods_sku')->update([ 'status' => $goods_state ], [ [ 'goods_id', 'in', (string) $goods_ids ], [ 'store_id', '=', $store_id ] ]);
  120. return $this->success(1);
  121. }
  122. /**
  123. * 修改价格库存
  124. * @param $goods_sku_array
  125. * @param $site_id
  126. * @param $store_id
  127. * @param $uid
  128. * @return array
  129. */
  130. public function editStoreGoods($goods_sku_array, $site_id, $store_id, $uid)
  131. {
  132. $store_stock_model = new \app\model\stock\GoodsStock();
  133. $store_model = new Store();
  134. $store_info = $store_model->getStoreInfo([ [ 'store_id', '=', $store_id ] ])[ 'data' ] ?? [];
  135. $default_store_info = $store_model->getDefaultStore($site_id)[ 'data' ] ?? [];
  136. $default_store_id = $default_store_info[ 'store_id' ];
  137. $is_default_store = 0;
  138. if ($default_store_id == $store_id) {
  139. $is_default_store = 1;
  140. }
  141. model('goods')->startTrans();
  142. try {
  143. foreach ($goods_sku_array as $k => $v) {
  144. $item_sku_id = $v[ 'sku_id' ];
  145. $sku_info = model('goods_sku')->getInfo([ [ 'sku.site_id', '=', $site_id ], [ 'sku.sku_id', '=', $item_sku_id ] ], "sku.goods_id,sku.stock,sku.price as sku_price,g.is_unify_price,g.price, g.goods_class", 'sku', [
  146. [ 'goods g', 'sku.goods_id=g.goods_id', 'left' ]
  147. ]);
  148. $goods_id = $sku_info[ 'goods_id' ];
  149. $goods_info = model('store_goods')->getInfo([
  150. [ 'goods_id', '=', $goods_id ],
  151. [ 'store_id', '=', $store_id ]
  152. ], 'id');
  153. if (empty($goods_info)) {
  154. $data = array (
  155. 'goods_id' => $goods_id,
  156. 'store_id' => $store_id,
  157. 'create_time' => time(),
  158. 'price' => $sku_info[ 'price' ]
  159. );
  160. model('store_goods')->add($data);
  161. }
  162. $store_sku_info = model('store_goods_sku')->getInfo([
  163. [ 'sku_id', '=', $item_sku_id ],
  164. [ 'store_id', '=', $store_id ]
  165. ], 'id');
  166. if (empty($store_sku_info)) {
  167. $data = array (
  168. 'goods_id' => $goods_id,
  169. 'store_id' => $store_id,
  170. 'sku_id' => $item_sku_id,
  171. 'create_time' => time(),
  172. 'price' => $sku_info[ 'sku_price' ]
  173. );
  174. model('store_goods_sku')->add($data);
  175. }
  176. $save_data = [];
  177. if (!$sku_info[ 'is_unify_price' ]) {
  178. $save_data[ 'price' ] = $v[ 'price' ];
  179. }
  180. if ($k == 0 && !empty($save_data)) {
  181. model('store_goods')->update($save_data, [ [ 'goods_id', '=', $goods_id ], [ 'store_id', '=', $store_id ] ]);
  182. }
  183. if (!empty($save_data)) model('store_goods_sku')->update($save_data, [ [ 'sku_id', '=', $item_sku_id ], [ 'store_id', '=', $store_id ] ]);
  184. //统一库存不入库
  185. if (isset($v[ 'stock' ]) && $store_info && $store_info[ 'stock_type' ] == 'store') {
  186. $res = $store_stock_model->changeGoodsStock([
  187. 'store_id' => $store_id,
  188. 'site_id' => $site_id,
  189. 'sku_id' => $item_sku_id,
  190. 'stock' => $v[ 'stock' ],
  191. 'uid' => $uid,
  192. 'goods_class' => $sku_info[ 'goods_class' ]
  193. ]);
  194. }
  195. //如果是默认门店,也会同步修改平台价
  196. if (!empty($save_data[ 'price' ])) {
  197. if ($is_default_store) {
  198. if ($k == 0 && !empty($save_data)) {
  199. model('goods')->update([ 'price' => $save_data[ 'price' ] ], [ [ 'goods_id', '=', $goods_id ] ]);
  200. }
  201. model('goods_sku')->update([ 'price' => $save_data[ 'price' ] ], [ [ 'sku_id', '=', $item_sku_id ] ]);
  202. }
  203. }
  204. }
  205. model('goods')->commit();
  206. return $this->success();
  207. } catch (\Exception $e) {
  208. model('goods')->rollback();
  209. return $this->error($e->getMessage());
  210. }
  211. }
  212. /**
  213. * 设置门店商品成本价
  214. * @param $params
  215. */
  216. public function setSkuPrice($params)
  217. {
  218. $goods_id = $params[ 'goods_id' ];
  219. $site_id = $params[ 'site_id' ];
  220. $store_id = $params[ 'store_id' ] ?? 0;
  221. if ($store_id == 0) {
  222. $store_model = new Store();
  223. $store_info = $store_model->getDefaultStore($site_id)[ 'data' ] ?? [];
  224. $store_id = $store_info[ 'store_id' ];
  225. }
  226. $result = $this->checkStoreGoods($goods_id, $site_id, $store_id);
  227. $goods_condition = array (
  228. [ 'goods_id', '=', $goods_id ]
  229. );
  230. $goods_info = model('goods')->getInfo($goods_condition, 'cost_price,price');
  231. $sku_list = model('goods_sku')->getList($goods_condition, 'sku_id,cost_price,price');
  232. $store_goods_condition = array (
  233. [ 'goods_id', '=', $goods_id ],
  234. [ 'store_id', '=', $store_id ]
  235. );
  236. model('store_goods')->update([ 'cost_price' => $goods_info[ 'cost_price' ], 'price' => $goods_info[ 'price' ] ], $store_goods_condition);
  237. foreach ($sku_list as $k => $v) {
  238. $store_goods_sku_condition = array (
  239. [ 'sku_id', '=', $v[ 'sku_id' ] ],
  240. [ 'store_id', '=', $store_id ]
  241. );
  242. $item_data = array (
  243. 'cost_price' => $v[ 'cost_price' ],
  244. 'price' => $v[ 'price' ]
  245. );
  246. model('store_goods_sku')->update($item_data, $store_goods_sku_condition);
  247. }
  248. return $this->success();
  249. }
  250. /**
  251. * 同步数据
  252. * @param $params
  253. */
  254. public function syncGoodsData($params)
  255. {
  256. $update_data = $params[ 'update_data' ];
  257. $condition = $params[ 'condition' ];
  258. $site_id = $params[ 'site_id' ];
  259. $store_id = $params[ 'store_id' ] ?? 0;
  260. if ($store_id == 0) {
  261. $store_model = new Store();
  262. $store_info = $store_model->getDefaultStore()[ 'data' ] ?? [];
  263. $store_id = $store_info[ 'store_id' ];
  264. }
  265. $goods_list = model('goods')->getList($condition, 'goods_id, price, cost_price');
  266. $goods_ids = array_column($goods_list, 'goods_id');
  267. //检验商品对否存在
  268. $result = $this->checkStoreGoods(implode(',', $goods_ids), $site_id, $store_id);
  269. $store_condition = array ( [ 'store_id', '=', $store_id ] );
  270. foreach ($goods_list as $k => $v) {
  271. $item_update_data = array (
  272. 'price' => $v[ 'price' ],
  273. 'cost_price' => $v[ 'cost_price' ]
  274. );
  275. $item_store_condition = $store_condition;
  276. $item_store_condition[] = [ 'goods_id', '=', $v[ 'goods_id' ] ];
  277. model('store_goods')->update($item_update_data, $item_store_condition);
  278. }
  279. $goods_sku_list = model('goods_sku')->getList($condition, 'sku_id, price, cost_price');
  280. foreach ($goods_sku_list as $k => $v) {
  281. $item_update_data = array (
  282. 'price' => $v[ 'price' ],
  283. 'cost_price' => $v[ 'cost_price' ]
  284. );
  285. $item_store_condition = $store_condition;
  286. $item_store_condition[] = [ 'sku_id', '=', $v[ 'sku_id' ] ];
  287. model('store_goods_sku')->update($item_update_data, $item_store_condition);
  288. }
  289. return $this->success();
  290. }
  291. }