ExchangeLogic.php 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. <?php
  2. namespace app\mobile\logic;
  3. use app\model\AddrModel;
  4. use app\model\CommonModel;
  5. use app\model\CompanyGoodModel;
  6. use app\model\GoodModel;
  7. use app\model\GroupModel;
  8. use app\model\InventoryExchangeModel;
  9. use app\model\OrderExchangeModel;
  10. use think\Exception;
  11. use think\facade\Db;
  12. use think\response\Json;
  13. class ExchangeLogic extends BaseLogic
  14. {
  15. //商品列表
  16. public static function goodList(array $data = []): Json
  17. {
  18. $db = CompanyGoodModel::alias('a')
  19. ->leftJoin('good b', 'b.id=a.good_id AND b.is_del=' . CommonModel::$del_normal)
  20. ->leftJoin('inventory_exchange c', 'c.account_id=' . self::$aid . ' AND c.good_id=a.good_id')
  21. ->where(['a.is_del' => CommonModel::$del_normal, 'a.group_id' => self::$group_id, 'b.type' => GoodModel::$type_exchange]);
  22. $count = $db->count('a.id');
  23. $list = $db
  24. ->field('a.id,a.code,a.good_id,b.good_cover_img,b.good_name,b.moq,b.step,c.inventory')
  25. ->page($data['page'], $data['size'])
  26. ->order(['a.is_top' => 'desc', 'a.weight' => 'desc', 'a.id' => 'desc'])
  27. ->select()
  28. ->toArray();
  29. return json_show(CommonModel::$success, '获取兑换商品列表成功', ['count' => $count, 'list' => $list]);
  30. }
  31. //商品详情
  32. public static function goodInfo(string $code = ''): Json
  33. {
  34. $rs = CompanyGoodModel::alias('a')
  35. ->field('a.id,a.code,a.good_id,b.good_cover_img,b.good_code,b.good_name,b.moq,b.step,b.good_banner_img,b.good_img,b.good_param,b.status,c.inventory,d.unit')
  36. ->leftJoin('good b', 'b.id=a.good_id AND b.is_del=' . CommonModel::$del_normal)
  37. ->leftJoin('inventory_exchange c', 'c.account_id=' . self::$aid . ' AND c.good_id=a.good_id')
  38. ->leftJoin('unit d', 'd.id=b.unit_id AND d.is_del=' . CommonModel::$del_normal)
  39. ->where(['a.is_del' => CommonModel::$del_normal, 'a.code' => $code])
  40. ->withAttr('good_param', function ($val) {
  41. return json_decode($val, true);
  42. })
  43. ->withAttr('good_img', function ($val) {
  44. return explode(',', $val);
  45. })->withAttr('good_banner_img', function ($val) {
  46. return explode(',', $val);
  47. })
  48. ->findOrEmpty()
  49. ->toArray();
  50. return json_show(CommonModel::$success, '获取兑换商品详情成功', $rs);
  51. }
  52. //兑换商品下单
  53. public static function orderAdd(array $data = []): Json
  54. {
  55. Db::startTrans();
  56. try {
  57. //判断收货地址
  58. $rs = AddrModel::field('id')
  59. ->where(['is_del' => CommonModel::$del_normal, 'id' => $data['addr_id'], 'uid' => self::$aid])
  60. ->findOrEmpty()
  61. ->isEmpty();
  62. if ($rs) throw new Exception('该地址不存在');
  63. //判断商品
  64. $rs = CompanyGoodModel::alias('a')
  65. ->field('a.id,a.good_id,b.good_code,b.good_name,b.status,b.moq,c.id inventory_id,c.inventory')
  66. ->leftJoin('good b', 'b.id=a.good_id AND b.is_del=' . CommonModel::$del_normal)
  67. ->leftJoin('inventory_exchange c', 'c.account_id=' . self::$aid . ' AND c.good_id=a.good_id')
  68. ->where(['a.is_del' => CommonModel::$del_normal, 'a.group_id' => self::$group_id, 'a.good_id' => $data['good_id']])
  69. ->findOrEmpty();
  70. if ($rs->isEmpty()) throw new Exception('该商品不存在或不允许兑换');
  71. if ($rs->status != CommonModel::$status_normal) throw new Exception('该商品已被禁用');
  72. if ($rs->moq > $data['num']) throw new Exception('不满足该商品的起订量,' . $rs->moq);
  73. if ($rs->inventory < $data['num']) throw new Exception('库存数不足');
  74. $date = date('Y-m-d H:i:s');
  75. $after_inventory = bcsub($rs->inventory, $data['num']);
  76. //添加库存变动记录
  77. Db::name('inventory_exchange_log')
  78. ->insert([
  79. 'inventory_exchange_id' => $rs->inventory_id,
  80. 'before_inventory' => $rs->inventory,
  81. 'after_inventory' => $after_inventory,
  82. 'good_id' => $rs->good_id,
  83. 'good_code' => $rs->good_code,
  84. 'good_name' => $rs->good_name,
  85. 'source' => CommonModel::$source_account,
  86. 'createrid' => self::$aid,
  87. 'creater' => self::$aname,
  88. 'addtime' => $date
  89. ]);
  90. //扣减库存
  91. InventoryExchangeModel::where('id', $rs->inventory_id)
  92. ->save(['inventory' => $after_inventory, 'updaterid' => self::$aid, 'updater' => self::$aname, 'updatetime' => $date]);
  93. //生成兑换订单
  94. OrderExchangeModel::create([
  95. 'orderCode' => make_no('DH'),
  96. 'company_id' => self::$company_id,
  97. 'card_id' => self::$card_id,
  98. 'uid' => self::$aid,
  99. 'good_id' => $rs->good_id,
  100. 'num' => $data['num'],
  101. 'addr_id' => $data['addr_id'],
  102. 'remark' => $data['remark'],
  103. 'status' => CommonModel::$status_not_deliver,
  104. 'is_del' => CommonModel::$del_normal,
  105. 'creater' => self::$aname,
  106. 'createrid' => self::$aid,
  107. 'addtime' => $date,
  108. 'updater' => self::$aname,
  109. 'updaterid' => self::$aid,
  110. 'updatetime' => $date,
  111. ])->save();
  112. Db::commit();
  113. return json_show(CommonModel::$success, '兑换商品成功');
  114. } catch (Exception $exception) {
  115. Db::rollback();
  116. return json_show(CommonModel::$error_param, '兑换失败,' . $exception->getMessage());
  117. }
  118. }
  119. //兑换订单列表
  120. public static function orderList(array $data = []): Json
  121. {
  122. $db = OrderExchangeModel::alias('a')
  123. ->leftJoin('good b', 'b.id=a.good_id AND b.is_del=' . CommonModel::$del_normal)
  124. ->where('a.is_del', CommonModel::$del_normal);
  125. if ($data['status'] != '') $db->where('a.status', $data['status']);
  126. $count = $db->count('a.id');
  127. $list = $db
  128. ->field('a.id,a.orderCode,b.good_name,a.num,a.status,a.addtime')
  129. ->page($data['page'], $data['size'])
  130. ->order('a.id', 'desc')
  131. ->select()
  132. ->toArray();
  133. return json_show(CommonModel::$success, '获取兑换订单列表成功', ['count' => $count, 'list' => $list]);
  134. }
  135. //兑换订单详情
  136. public static function orderInfo(int $id = 0): Json
  137. {
  138. $rs = OrderExchangeModel::alias('a')
  139. ->field('a.id,a.orderCode,a.status,a.addtime,b.good_name,a.num,c.contactor,c.mobile,c.addr,c.addr_code')
  140. ->leftJoin('good b', 'b.id=a.good_id AND b.is_del=' . CommonModel::$del_normal)
  141. ->leftJoin('addr c', 'c.id=a.addr_id AND c.is_del=' . CommonModel::$del_normal)
  142. ->where(['a.is_del' => CommonModel::$del_normal, 'a.id' => $id])
  143. ->withAttr('addr', function ($val, $da) {
  144. return $da['addr_code'] ? get_addr_name($da['addr_code']) . $val : $val;
  145. })
  146. ->findOrEmpty()
  147. ->toArray();
  148. return $rs ? json_show(CommonModel::$success, '获取兑换订单详情成功', $rs) : json_show(CommonModel::$error_param, '该订单不存在');
  149. }
  150. }