123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- <?php
- namespace app\admin\logic;
- use app\model\CommonModel;
- use app\model\OrderExchangeModel;
- use think\Exception;
- use think\facade\Db;
- use think\facade\Validate;
- use think\response\Json;
- class OrderExchangeLogic extends BaseLogic
- {
- //列表
- public static function list(array $data = []): Json
- {
- $db = OrderExchangeModel::alias('a')
- ->leftJoin('company b', 'b.id=a.company_id AND b.is_del=' . CommonModel::$del_normal)
- ->leftJoin('card c', 'c.id=a.card_id AND c.is_del=' . CommonModel::$del_normal)
- ->leftJoin('account d', 'd.id=a.uid AND d.is_del=' . CommonModel::$del_normal)
- ->leftJoin('addr e', 'e.id=a.addr_id AND e.is_del=' . CommonModel::$del_normal)
- ->leftJoin('good f', 'f.id=a.good_id AND f.is_del=' . CommonModel::$del_normal)
- ->where('a.is_del', CommonModel::$del_normal);
- if ($data['orderCode'] != '') $db->whereLike('a.orderCode', '%' . $data['orderCode'] . '%');
- if ($data['status'] != '') $db->where('a.status', $data['status']);
- if ($data['name'] !== '') $db->whereLike('d.name', '%' . $data['name'] . '%');
- if ($data['username']) $db->whereLike('d.username', '%' . $data['username'] . '%');
- if (($data['start_date'] != '') && ($data['end_date'] != '')) $db->whereBetween('a.addtime', [$data['start_date'], $data['end_date']]);
- $count = $db->count('a.id');
- $list = $db
- ->field('a.id,a.orderCode,b.title company_title,c.title card_title,d.name,d.username,a.num,e.contactor,e.mobile,a.status,a.post_name,a.post_code,a.addtime,e.addr_code,"" addr_name,e.addr,f.good_code,f.good_name,f.good_cover_img')
- ->page($data['page'], $data['size'])
- ->withAttr('addr_code', function ($val) {
- return explode(',', $val);
- })
- ->withAttr('addr_name', function ($val, $da) {
- return $da['addr_code']?get_addr_name($da['addr_code']):'';
- })
- ->order('a.addtime desc')
- ->select()
- ->toArray();
- return json_show(CommonModel::$success, '获取兑换订单列表成功', ['count' => $count, 'list' => $list]);
- }
- //详情
- public static function read(int $id = 0): Json
- {
- $rs = $db = OrderExchangeModel::alias('a')
- ->field('a.id,a.orderCode,b.title company_title,c.title card_title,d.name,d.username,a.num,e.contactor,e.mobile,e.addr_code,a.status,a.post_name,a.post_code,a.addtime,"" addr_name,f.good_code,f.good_name,f.good_cover_img')
- ->leftJoin('company b', 'b.id=a.company_id AND b.is_del=' . CommonModel::$del_normal)
- ->leftJoin('card c', 'c.id=a.card_id AND c.is_del=' . CommonModel::$del_normal)
- ->leftJoin('account d', 'd.id=a.uid AND d.is_del=' . CommonModel::$del_normal)
- ->leftJoin('addr e', 'e.id=a.addr_id AND e.is_del=' . CommonModel::$del_normal)
- ->leftJoin('good f', 'f.id=a.good_id AND f.is_del=' . CommonModel::$del_normal)
- ->where(['a.is_del' => CommonModel::$del_normal, 'a.id' => $id])
- ->withAttr('addr_code', function ($val) {
- return explode(',', $val);
- })
- ->withAttr('addr_name', function ($val, $da) {
- return $da['addr_code']?get_addr_name($da['addr_code']):'';
- })
- ->findOrEmpty()
- ->toArray();
- return json_show(CommonModel::$success, '获取商品详情成功', $rs);
- }
- //导出
- public static function export(array $data = []): Json
- {
- $db = OrderExchangeModel::alias('a')
- ->leftJoin('company b', 'b.id=a.company_id AND b.is_del=' . CommonModel::$del_normal)
- ->leftJoin('card c', 'c.id=a.card_id AND c.is_del=' . CommonModel::$del_normal)
- ->leftJoin('account d', 'd.id=a.uid AND d.is_del=' . CommonModel::$del_normal)
- ->leftJoin('addr e', 'e.id=a.addr_id AND e.is_del=' . CommonModel::$del_normal)
- ->leftJoin('good f', 'f.id=a.good_id AND f.is_del=' . CommonModel::$del_normal)->where('a.is_del', CommonModel::$del_normal)
- ->where('a.is_del', CommonModel::$del_normal);
- if ($data['orderCode'] != '') $db->whereLike('a.orderCode', '%' . $data['orderCode'] . '%');
- if ($data['status'] != '') $db->where('a.status', $data['status']);
- if ($data['name'] !== '') $db->whereLike('d.name', '%' . $data['name'] . '%');
- if ($data['username']) $db->whereLike('d.username', '%' . $data['username'] . '%');
- if (($data['start_date'] != '') && ($data['end_date'] != '')) $db->whereBetween('a.addtime', [$data['start_date'], $data['end_date']]);
- $status = [CommonModel::$status_not_deliver => '待发货', CommonModel::$status_deliver => '已发货', CommonModel::$status_receipt => '已收货'];
- $list = $db
- ->field('a.id 订单ID,a.orderCode 订单编号,b.title 业务公司,c.title 卡类型,d.name 购买用户名,d.username 购买账号,a.num 购买数量,e.contactor 收货联系人,e.mobile 收货联系电话,e.addr_code,a.status 状态,a.post_name 物流公司,a.post_code 物流单号,a.addtime 创建时间,e.addr,f.good_code 商品编码,f.good_name 商品名称')
- ->order('a.addtime desc')
- ->cursor();
- $da = [];
- foreach ($list as $v) {
- $v = $v->toArray();
- $v['收货地址'] = $v['addr_code']?get_addr_name($v['addr_code']).$v['addr']:$v['addr'];
- $v['状态'] = $status[$v['状态']] ?? '';
- unset($v['addr_code']);
- unset($v['addr']);
- $da[] = $v;
- }
- if (empty($da)) $da[] = '没有可供导出的数据';
- $headerArr = array_keys($da[0]);
- excel_save('兑换订单导出' . date('YmdHis'), $headerArr, $da);
- }
- //发货
- public static function deliver(array $list = [])
- {
- $db = new OrderExchangeModel();
- $temp = $db
- ->field('id,orderCode')
- ->where(['is_del' => CommonModel::$del_normal])
- ->where('status', '<>', CommonModel::$status_not_deliver)
- ->whereIn('orderCode', array_column($list, 'orderCode'))
- ->findOrEmpty();
- if (!$temp->isEmpty()) return json_show(CommonModel::$error_param, $temp->orderCode . '订单并不是未发货状态');
- $val = Validate::rule([
- 'orderCode|订单编号' => 'require|length:18',
- 'post_name|物流公司' => 'require|max:255',
- 'post_code|物流单号' => 'require|max:255',
- ]);
- Db::startTrans();
- try {
- $date = date('Y-m-d H:i:s');
- foreach ($list as $order) {
- if (!$val->check($order)) throw new Exception($val->getError());
- $db->where([
- 'is_del' => CommonModel::$del_normal,
- 'orderCode' => $order['orderCode'],
- 'status' => CommonModel::$status_not_deliver,
- ])->save([
- 'status' => CommonModel::$status_deliver,
- 'post_name' => $order['post_name'],
- 'post_code' => $order['post_code'],
- 'updater' => self::$uname,
- 'updaterid' => self::$uid,
- 'updatetime' => $date,
- ]);
- }
- Db::commit();
- return json_show(CommonModel::$success, '发货成功');
- } catch (Exception $exception) {
- Db::rollback();
- return json_show(CommonModel::$error_param, '发货失败,' . $exception->getMessage());
- }
- }
- }
|