join('order_goods og', 'og.order_id = o.id') ->where($where) ->group('o.id') ->count(); $lists = Order::alias('o') ->join('order_goods og', 'og.order_id = o.id') ->where($where) ->with(['order_goods']) ->field('o.id,o.order_sn,o.order_status,o.pay_status,o.shipping_status,o.order_amount,o.create_time,o.delivery_type') ->append(['shop_cancel_btn','edit_address_btn','to_ship_btn','take_btn','delivery_btn','del_btn','order_status_text','content_btn']) ->page($page_no, $page_size) ->order('o.id desc') ->group('o.id') ->select(); return [ 'list' => $lists, 'page' => $page_no, 'size' => $page_size, 'count' => $count, 'more' => is_more($count, $page_no, $page_size) ]; } /** * @notes 订单详情 * @param $id * @return array * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException * @author ljj * @date 2021/11/10 4:15 下午 */ public static function detail($id) { $result = Order::where('id',$id) ->field('id,user_id,order_sn,order_type,order_source,order_status,pay_status,pay_time,shipping_status,pay_way,order_amount,goods_price,shipping_price,discount_amount,member_amount,create_time,consignee,mobile,province,city,district,address,user_remark,delivery_type,delivery_content') ->with(['order_goods','user', 'invoice']) ->append(['shop_cancel_btn','edit_address_btn','to_ship_btn','take_btn','delivery_btn','del_btn','order_status_text','pay_way_text','delivery_address','order_type_text','order_source_text','pay_status_text']) ->find() ->toArray(); $result['pay_time'] = $result['pay_time'] ? date('Y-m-d H:i:s', $result['pay_time']) : '-'; // 虚拟商品 发货内容 if ($result['delivery_type'] != OrderEnum::DELIVERY_TYPE_VIRTUAL || $result['shipping_status'] != OrderEnum::SHIPPING_FINISH) { $result['delivery_content'] = ''; } return $result; } /** * @notes 取消订单 * @param $id * @param $admin_id * @return bool|string * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException * @author ljj * @date 2021/11/10 5:06 下午 */ public static function cancel($id,$admin_id) { $order = Order::where(['id' => $id], ['orderGoods'])->find()->toArray(); Db::startTrans(); try { // 如果是拼团订单 if ($order['order_type'] == OrderEnum::TEAM_ORDER) { $time = time(); $team_id = (new TeamJoin())->where(['order_id' => $order['id']])->value('team_id'); $teamJoin = (new TeamJoin())->alias('TJ') ->field(['TJ.*,O.order_sn,O.order_status,O.pay_status,O.refund_status,O.order_amount']) ->where(['team_id' => $team_id]) ->join('order O', 'O.id=TJ.order_id') ->select()->toArray(); TeamFound::update(['status' => TeamEnum::TEAM_STATUS_FAIL, 'team_end_time' => $time], ['id' => $team_id]); foreach ($teamJoin as $item) { TeamJoin::update(['status' => TeamEnum::TEAM_STATUS_FAIL, 'update_time' => $time], ['id' => $item['id']]); OrderRefundLogic::cancelOrder($item['order_id'], OrderLogEnum::TYPE_USER); //取消订单 if ($item['pay_status'] == PayEnum::ISPAID) { $order = (new Order())->findOrEmpty($item['order_id'])->toArray(); OrderRefundLogic::cancelOrderRefundUpdate($order); //更新订单状态 OrderRefundLogic::refund($order, $order['order_amount'], $order['order_amount']); //订单退款 } } } else { //取消订单 OrderRefundLogic::cancelOrder($id, OrderLogEnum::TYPE_SHOP, $admin_id); //已支付的订单,取消,退款 if ($order['pay_status'] == PayEnum::ISPAID) { //更新订单状态 OrderRefundLogic::cancelOrderRefundUpdate($order); //订单退款 OrderRefundLogic::refund($order, $order['order_amount'], $order['order_amount']); } } // 查找对应的分销订单置为失效状态 if ($order['pay_status'] == PayEnum::ISPAID) { DistributionOrderGoods::where('order_id', $id)->update(['status' => 3]); } Db::commit(); return true; } catch (\Exception $e) { Db::rollback(); //增加退款失败记录 if ($order['pay_status'] == PayEnum::ISPAID) { OrderRefundLogic::addErrorRefund($order, $e->getMessage()); } return $e->getMessage(); } } /** * @notes 删除订单 * @param $id * @param $admin_id * @author ljj * @date 2021/11/10 5:37 下午 */ public static function del($id,$admin_id) { Order::update(['delete'=>1,'update_time'=>time()], ['id'=>$id]); //订单日志 OrderLogLogic::record( OrderLogEnum::TYPE_SHOP, OrderLogEnum::SHOP_DEL_ORDER, $id, $admin_id, OrderLogEnum::SHOP_DEL_ORDER ); } /** * @notes 修改地址 * @param $post * @return bool * @author ljj * @date 2021/11/10 6:35 下午 */ public static function editAddress($post) { Order::update( [ 'consignee'=>$post['consignee'], 'province'=>$post['province'], 'city'=>$post['city'], 'district'=>$post['district'], 'address'=>$post['address'], 'mobile'=>$post['mobile'], 'update_time' => time(), ], ['id'=>$post['id']]); return true; } /** * @notes 获取地址详情 * @param $id * @return array * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException * @author ljj * @date 2021/11/13 11:41 上午 */ public static function getAddress($id) { $result = Order::where('id',$id) ->field('consignee,province,city,district,address,mobile') ->find() ->toArray(); $result['region'] = DevRegion::where('id', 'in', $result['province'].','.$result['city'].','.$result['district'])->order('id','asc')->column('name'); return $result; } /** * @notes 发货 * @param $post * @param $admin_id * @return bool|string * @author ljj * @date 2021/11/11 10:27 上午 */ public static function delivery($post, $admin_id) { Db::startTrans(); try { $order = Order::where(['id' => $post['id']], ['order_goods'])->find(); if ($order['shipping_status'] == 1) { return true; } //添加发货单 $delivery_data = [ 'order_id' => $post['id'], 'order_sn' => $order['order_sn'], 'user_id' => $order['user_id'], 'admin_id' => $admin_id, 'consignee' => $order['consignee'], 'mobile' => $order['mobile'], 'province' => $order['province'], 'city' => $order['city'], 'district' => $order['district'], 'address' => $order['address'], 'invoice_no' => $post['invoice_no'] ?? '', 'send_type' => $post['send_type'], 'create_time' => time(), ]; //配送方式->快递配送 if ($post['send_type'] == 1) { $shipping = Express::where('id', $post['shipping_id'])->find(); $delivery_data['shipping_id'] = $post['shipping_id']; $delivery_data['shipping_name'] = $shipping['name']; $delivery_data['shipping_status'] = 1; } $delivery = Delivery::create($delivery_data); //更新订单下商品的发货状态 $order->update_time = time(); $order->shipping_time = time(); $order->shipping_status = 1; $order->order_status = Order::STATUS_WAIT_RECEIVE; $order->delivery_id = $delivery->id; $order->save(); //订单日志 OrderLogLogic::record( OrderLogEnum::TYPE_SHOP, OrderLogEnum::SHOP_DELIVERY_ORDER, $post['id'], $admin_id, OrderLogEnum::SHOP_DELIVERY_ORDER ); //通知用户发货 if (!empty($order['mobile'])) { event('Notice', [ 'scene' => NoticeEnum::ORDER_DELIVERY_NOTICE, 'mobile' => $order['mobile'], 'params' => [ 'order_id' => $order['id'], 'user_id' => $order['user_id'], 'shipping_name' => $delivery_data['shipping_name'] ?? '无需快递', 'invoice_no' => $post['invoice_no'] ?? '', ] ]); } Db::commit(); return true; } catch (\Exception $e) { Db::rollback(); return $e->getMessage(); } } /** * @notes 获取物流公司列表 * @return array * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException * @author ljj * @date 2021/11/13 11:46 上午 */ public static function getExpress() { return Express::where('del',0)->field('id,name')->select()->toArray(); } /** * @notes 确认收货 * @param $id * @param $admin_id * @author ljj * @date 2021/11/11 10:55 上午 */ public static function confirm($id, $admin_id) { Order::update( [ 'order_status' => Order::STATUS_FINISH, 'confirm_take_time' => time(), 'update_time' => time(), ], ['id'=>$id]); //订单日志 OrderLogLogic::record( OrderLogEnum::TYPE_SHOP, OrderLogEnum::SHOP_CONFIRM_ORDER, $id, $admin_id, OrderLogEnum::SHOP_CONFIRM_ORDER ); } /** * @notes 查看物流 * @param $id * @return array * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException * @author ljj * @date 2021/11/11 11:34 上午 */ public static function logistics($id) { return Delivery::where('order_id',$id) ->field('shipping_name,invoice_no') ->find() ->toArray(); } /** * @notes 虚拟发货 * @param $post * @param $admin_id * @return bool * @author 段誉 * @date 2022/4/20 17:56 */ public static function virtualDelivery($post, $admin_id) { try { $order_id = $post['order_id']; $order = Order::with(['order_goods'])->where(['del' => 0, 'id' => $order_id])->find(); // 更新发货订单信息 $result = GoodsVirtualLogic::shopSelfDelivery($order_id, $post['delivery_content']); if (true !== $result) { throw new \Exception($result); } //订单日志 OrderLogLogic::record( OrderLogEnum::TYPE_SHOP, OrderLogEnum::SHOP_DELIVERY_ORDER, $order_id, $admin_id, OrderLogEnum::SHOP_DELIVERY_ORDER ); //通知用户发货 if (!empty($order['mobile'])) { event('Notice', [ 'scene' => NoticeEnum::ORDER_DELIVERY_NOTICE, 'mobile' => $order['mobile'], 'params' => [ 'order_id' => $order['id'], 'user_id' => $order['user_id'], 'shipping_name' => '无需快递', 'invoice_no' => '', ] ]); } return true; } catch (\Exception $e) { self::$error = $e->getMessage(); return false; } } }