GoodsService.php 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | framework
  4. // +----------------------------------------------------------------------
  5. // | 版权所有 2014~2018 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
  6. // +----------------------------------------------------------------------
  7. // | 官方网站: http://framework.thinkadmin.top
  8. // +----------------------------------------------------------------------
  9. // | 开源协议 ( https://mit-license.org )
  10. // +----------------------------------------------------------------------
  11. // | github开源项目:https://github.com/zoujingli/framework
  12. // +----------------------------------------------------------------------
  13. namespace app\store\service;
  14. use think\Db;
  15. /**
  16. * 商品数据管理
  17. * Class GoodsService
  18. * @package app\store\logic
  19. */
  20. class GoodsService
  21. {
  22. /**
  23. * 同步商品库存信息
  24. * @param integer $goodsId
  25. * @return boolean
  26. * @throws \think\Exception
  27. * @throws \think\db\exception\DataNotFoundException
  28. * @throws \think\db\exception\ModelNotFoundException
  29. * @throws \think\exception\DbException
  30. * @throws \think\exception\PDOException
  31. */
  32. public static function syncStock($goodsId)
  33. {
  34. // 商品入库统计
  35. $fields = "goods_id,goods_spec,ifnull(sum(number_stock),0) number_stock";
  36. $stockList = Db::name('StoreGoodsStock')->field($fields)->where(['goods_id' => $goodsId])->group('goods_id,goods_spec')->select();
  37. // 商品销量统计
  38. $where = [['b.goods_id', 'eq', $goodsId], ['a.status', 'in', ['1', '2', '3', '4', '5']]];
  39. $fields = 'b.goods_id,b.goods_spec,ifnull(sum(b.number_goods),0) number_sales';
  40. $salesList = Db::table('store_order a')->field($fields)->leftJoin('store_order_list b', 'a.order_no=b.order_no')->where($where)->group('b.goods_id,b.goods_spec')->select();
  41. // 组装更新数据
  42. $dataList = [];
  43. foreach (array_merge($stockList, $salesList) as $vo) {
  44. $key = "{$vo['goods_id']}@@{$vo['goods_spec']}";
  45. $dataList[$key] = isset($dataList[$key]) ? array_merge($dataList[$key], $vo) : $vo;
  46. if (empty($dataList[$key]['number_sales'])) $dataList[$key]['number_sales'] = '0';
  47. if (empty($dataList[$key]['number_stock'])) $dataList[$key]['number_stock'] = '0';
  48. }
  49. unset($salesList, $stockList);
  50. // 更新商品规格销量及库存
  51. foreach ($dataList as $vo) Db::name('StoreGoodsList')->where([
  52. 'goods_id' => $goodsId,
  53. 'goods_spec' => $vo['goods_spec'],
  54. ])->update([
  55. 'number_stock' => $vo['number_stock'],
  56. 'number_sales' => $vo['number_sales'],
  57. ]);
  58. // 更新商品主体销量及库存
  59. Db::name('StoreGoods')->where(['id' => $goodsId])->update([
  60. 'number_stock' => intval(array_sum(array_column($dataList, 'number_stock'))),
  61. 'number_sales' => intval(array_sum(array_column($dataList, 'number_sales'))),
  62. ]);
  63. return true;
  64. }
  65. }