OrderServiceLogic.php 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. <?php
  2. namespace app\admin\logic;
  3. use app\model\CommonModel;
  4. use app\model\OrderServiceModel;
  5. use think\Exception;
  6. use think\facade\Db;
  7. use think\facade\Validate;
  8. use think\response\Json;
  9. class OrderServiceLogic extends BaseLogic
  10. {
  11. //列表
  12. public static function list(array $data = []): Json
  13. {
  14. $db = OrderServiceModel::alias('a')
  15. ->leftJoin('service s', 's.id=a.service_id AND s.is_del=' . CommonModel::$del_normal)
  16. ->leftJoin('company b', 'b.id=s.company_id AND b.is_del=' . CommonModel::$del_normal)
  17. ->leftJoin('card c', 'c.id=s.card_id AND c.is_del=' . CommonModel::$del_normal)
  18. ->leftJoin('account d', 'd.id=a.uid AND d.is_del=' . CommonModel::$del_normal)
  19. ->leftJoin('company bb', 'bb.id=d.company_id AND bb.is_del=' . CommonModel::$del_normal)
  20. ->leftJoin('card cc', 'cc.id=d.card_id AND cc.is_del=' . CommonModel::$del_normal)
  21. ->leftJoin('addr e', 'e.id=a.addr_id AND e.is_del=' . CommonModel::$del_normal)
  22. ->where('a.is_del', CommonModel::$del_normal);
  23. if ($data['orderCode'] != '') $db->whereLike('a.orderCode', '%' . $data['orderCode'] . '%');
  24. if ($data['status'] != '') $db->where('a.status', $data['status']);
  25. if ($data['name'] !== '') $db->whereLike('d.name', '%' . $data['name'] . '%');
  26. if ($data['username']) $db->whereLike('d.username', '%' . $data['username'] . '%');
  27. if (($data['start_date'] != '') && ($data['end_date'] != '')) $db->whereBetween('a.addtime', [$data['start_date'], $data['end_date']]);
  28. $count = $db->count('a.id');
  29. $list = $db
  30. ->field('a.id,a.orderCode,bb.title account_company_title,c.title account_card_title,d.name,d.username,a.num,e.contactor,e.mobile,e.addr_code,s.title,a.amount,a.status,a.addtime,a.post_name,a.post_code,"" addr_name,e.addr')
  31. ->page($data['page'], $data['size'])
  32. ->withAttr('addr_code', function ($val) {
  33. return explode(',', $val);
  34. })
  35. ->withAttr('addr_name', function ($val, $da) {
  36. $name = Db::name('area')
  37. ->whereIn('code', $da['addr_code'])
  38. ->column('name');
  39. return implode($name);
  40. })
  41. ->order('a.addtime desc')
  42. ->select()
  43. ->toArray();
  44. return json_show(CommonModel::$success, '获取服务订单列表成功', ['count' => $count, 'list' => $list]);
  45. }
  46. //详情
  47. public static function read(int $id = 0): Json
  48. {
  49. $rs = OrderServiceModel::alias('a')
  50. ->field('a.id,a.orderCode,bb.title account_company_title,c.title account_card_title,d.name,d.username,a.num,e.contactor,e.mobile,e.addr_code,s.title,a.amount,a.status,a.addtime,a.post_name,a.post_code,"" addr_name,e.addr')
  51. ->leftJoin('service s', 's.id=a.service_id AND s.is_del=' . CommonModel::$del_normal)
  52. ->leftJoin('company b', 'b.id=s.company_id AND b.is_del=' . CommonModel::$del_normal)
  53. ->leftJoin('card c', 'c.id=s.card_id AND c.is_del=' . CommonModel::$del_normal)
  54. ->leftJoin('account d', 'd.id=a.uid AND d.is_del=' . CommonModel::$del_normal)
  55. ->leftJoin('company bb', 'bb.id=d.company_id AND bb.is_del=' . CommonModel::$del_normal)
  56. ->leftJoin('card cc', 'cc.id=d.card_id AND cc.is_del=' . CommonModel::$del_normal)
  57. ->leftJoin('addr e', 'e.id=a.addr_id AND e.is_del=' . CommonModel::$del_normal)
  58. ->where(['a.is_del' => CommonModel::$del_normal, 'a.id' => $id])
  59. ->withAttr('addr_code', function ($val) {
  60. return explode(',', $val);
  61. })
  62. ->withAttr('addr_name', function ($val, $da) {
  63. $name = Db::name('area')
  64. ->whereIn('code', $da['addr_code'])
  65. ->column('name');
  66. return implode($name);
  67. })
  68. ->findOrEmpty()
  69. ->toArray();
  70. return json_show(CommonModel::$success, '获取商品详情成功', $rs);
  71. }
  72. //导出
  73. public static function export(array $data = []): Json
  74. {
  75. $db = OrderServiceModel::alias('a')
  76. ->leftJoin('service s', 's.id=a.service_id AND s.is_del=' . CommonModel::$del_normal)
  77. ->leftJoin('company b', 'b.id=s.company_id AND b.is_del=' . CommonModel::$del_normal)
  78. ->leftJoin('card c', 'c.id=s.card_id AND c.is_del=' . CommonModel::$del_normal)
  79. ->leftJoin('account d', 'd.id=a.uid AND d.is_del=' . CommonModel::$del_normal)
  80. ->leftJoin('company bb', 'bb.id=d.company_id AND bb.is_del=' . CommonModel::$del_normal)
  81. ->leftJoin('card cc', 'cc.id=d.card_id AND cc.is_del=' . CommonModel::$del_normal)
  82. ->leftJoin('addr e', 'e.id=a.addr_id AND e.is_del=' . CommonModel::$del_normal)
  83. ->where('a.is_del', CommonModel::$del_normal);
  84. if ($data['orderCode'] != '') $db->whereLike('a.orderCode', '%' . $data['orderCode'] . '%');
  85. if ($data['status'] != '') $db->where('a.status', $data['status']);
  86. if ($data['name'] !== '') $db->whereLike('d.name', '%' . $data['name'] . '%');
  87. if ($data['username']) $db->whereLike('d.username', '%' . $data['username'] . '%');
  88. if (($data['start_date'] != '') && ($data['end_date'] != '')) $db->whereBetween('a.addtime', [$data['start_date'], $data['end_date']]);
  89. $list = $db
  90. ->field('a.id 订单ID,a.orderCode 订单编号,bb.title 购买账号业务公司,c.title 购买账号卡类型,d.name 购买用户名,d.username 购买账号,a.num 购买数量,e.contactor 收货联系人,e.mobile 收货联系电话,e.addr_code,s.title 服务名称,a.amount 支付金额,a.status 状态,a.addtime 创建时间,a.post_name 物流公司,a.post_code 物流单号,e.addr')
  91. ->withAttr('addr_name', function ($val, $da) {
  92. $name = Db::name('area')
  93. ->whereIn('code', $da['addr_code'])
  94. ->column('name');
  95. return implode($name);
  96. })
  97. ->order('a.addtime desc')
  98. ->cursor();
  99. $status = [CommonModel::$status_not_deliver => '待发货', CommonModel::$status_deliver => '已发货', CommonModel::$status_receipt => '已收货'];
  100. $da = [];
  101. foreach ($list as $v) {
  102. $v = $v->toArray();
  103. $area_name = Db::name('area')
  104. ->whereIn('code', $v['addr_code'])
  105. ->column('name');
  106. $v['收货地址'] = implode('', $area_name) . $v['addr'];
  107. $v['状态'] = $status[$v['状态']] ?? '';
  108. unset($v['addr_code']);
  109. unset($v['addr']);
  110. $da[] = $v;
  111. }
  112. if (empty($da)) $da[] = '没有可供导出的数据';
  113. $headerArr = array_keys($da[0]);
  114. excel_save('服务订单导出' . date('YmdHis'), $headerArr, $da);
  115. }
  116. //发货
  117. public static function deliver(array $list = [])
  118. {
  119. $db = new OrderServiceModel();
  120. $temp = $db
  121. ->field('id,orderCode')
  122. ->where(['is_del' => CommonModel::$del_normal])
  123. ->where('status', '<>', CommonModel::$status_not_deliver)
  124. ->whereIn('orderCode', array_column($list, 'orderCode'))
  125. ->findOrEmpty();
  126. if (!$temp->isEmpty()) return json_show(CommonModel::$error_param, $temp->orderCode . '订单并不是未发货状态');
  127. $val = Validate::rule([
  128. 'orderCode|订单编号' => 'require|length:18',
  129. 'post_name|物流公司' => 'require|max:255',
  130. 'post_code|物流单号' => 'require|max:255',
  131. ]);
  132. Db::startTrans();
  133. try {
  134. $date = date('Y-m-d H:i:s');
  135. foreach ($list as $order) {
  136. if (!$val->check($order)) throw new Exception($val->getError());
  137. $db->where([
  138. 'is_del' => CommonModel::$del_normal,
  139. 'orderCode' => $order['orderCode'],
  140. 'status' => CommonModel::$status_not_deliver,
  141. ])->save([
  142. 'status' => CommonModel::$status_deliver,
  143. 'post_name' => $order['post_name'],
  144. 'post_code' => $order['post_code'],
  145. 'updater' => self::$uname,
  146. 'updaterid' => self::$uid,
  147. 'updatetime' => $date,
  148. ]);
  149. }
  150. Db::commit();
  151. return json_show(CommonModel::$success, '发货成功');
  152. } catch (Exception $exception) {
  153. Db::rollback();
  154. return json_show(CommonModel::$error_param, '发货失败,' . $exception->getMessage());
  155. }
  156. }
  157. }