// +---------------------------------------------------------------------- declare (strict_types = 1); namespace app\store\model; use app\store\model\OrderGoods as OrderGoodsModel; use think\facade\Request; use app\common\model\Order as OrderModel; use app\common\model\OrderAddress as OrderAddressModel; use app\common\service\Order as OrderService; use app\common\service\Message as MessageService; use app\common\service\order\Refund as RefundService; use app\common\enum\order\OrderStatus as OrderStatusEnum; use app\common\enum\order\PayStatus as PayStatusEnum; use app\common\enum\order\DeliveryType as DeliveryTypeEnum; use app\common\enum\order\ReceiptStatus as ReceiptStatusEnum; use app\common\enum\order\DeliveryStatus as DeliveryStatusEnum; use app\common\library\helper; /** * 订单管理 * Class Order * @package app\store\model */ class Order extends OrderModel { // 全部订单 const LIST_TYPE_ALL = 'all'; // 待发货订单 const LIST_TYPE_DELIVERY = 'delivery'; // 待收货订单 const LIST_TYPE_RECEIPT = 'receipt'; // 待付款订单 const LIST_TYPE_PAY = 'pay'; // 已完成订单 const LIST_TYPE_COMPLETE = 'complete'; // 已取消 const LIST_TYPE_CANCEL = 'cancel'; /** * 订单详情页数据 * @param int $orderId * @return Order|array|false|null */ public function getDetail(int $orderId) { return static::detail($orderId, [ 'user', 'address', 'goods' => ['image'], // 'express', 'coupon', 'shops', 'commissionsDetail', 'commissionsDetail.user' ]) ?: false; } /** * 订单列表 * @param string $dataType 订单类型 * @param array $param * @return mixed */ public function getList(string $dataType = self::LIST_TYPE_ALL, array $param = [],$size = 15) { // $size =15; // 检索查询条件 $filter = $this->getQueryFilter($param); // 设置订单类型条件 $dataTypeFilter = $this->getFilterDataType($dataType); $kw = $param['kw']??''; // 获取数据列表 $query = $this->with(['goods'=>['image', 'provider', 'shop'], 'user.avatar', 'address'])//'commissionsDetail.user', 'commissionsUser', ->alias('order') ->field('order.*') ->leftJoin('user', 'user.user_id = order.user_id') ->leftJoin('order_address','order_address.order_id = order.order_id') ->leftJoin('shops', 'shops.shop_id = order.staff_shop_id') ->where($dataTypeFilter) ->where($filter)->where(function($query)use ($kw) { if(!empty($kw)){ $query->where('user.mobile','like','%'.$kw.'%'); $query->whereOr('user.nick_name','like','%'.$kw.'%'); } }); //店铺ID搜索 if (!empty($param['providerId'])) { $query->whereFindInSet('order.provider_ids', (int)$param['providerId']); } return $query->where('order.is_delete', '=', 0) ->order(['order.create_time' => 'desc']) ->paginate($size) ->each(function($e){ $res = []; foreach ($e['goods'] as &$goods){ //获取平台让利的 分润金额 $goods['pool_money'] = 0; $goods['commissions_content'] = ''; $goods['pool_money'] = '分润金额:¥ '.helper::bcadd($goods['pool_money'],0,4); $res[$goods['provider_id']]['provider_name'] = $goods['provider_name']; $res[$goods['provider_id']]['goods'][] = $goods; } $res = array_values($res); $e['goods_list'] = $res; unset($e['goods']); }); } /** * 订单列表 * @param string $dataType 订单类型 * @param array $param * @return mixed */ public function getFinanceList(string $dataType = self::LIST_TYPE_ALL, array $param = []) { // 检索查询条件 $filter = $this->getQueryFilter($param); // 设置订单类型条件 $dataTypeFilter = $this->getFilterDataType($dataType); // 获取数据列表 $query = $this->with(['goods'=>['image', 'provider']]) ->alias('order') ->field('order.*') ->where('order.pay_status',20) ->where($dataTypeFilter) ->where($filter); return $query->where('order.is_delete', '=', 0) ->order(['order.create_time' => 'desc']) ->paginate() ->each(function($e){ $res = []; foreach ($e['goods'] as &$goods){ //获取平台让利的 分润金额 $res[$goods['provider_id']]['provider_name'] = $goods['provider_name']; $res[$goods['provider_id']]['goods'][] = $goods; } $res = array_values($res); $e['goods_list'] = $res; $e['cal_order_price'] = helper::bcadd($e['pay_price'],$e['rice_card_money'],2); unset($e['goods']); }); } public function getListssss($goods){ //获取平台让利的 分润金额 $goods['pool_money'] = helper::bcadd(OrderService::getPoolMoney($goods),0,4); $goods['commissions_content'] = ''; $goods['commissions_role_one'] = $goods['commissions_role_two'] = $goods['commissions_role_'] = $goods['commissions_role_one'] = $goods['commissions_role_one'] = ''; foreach ($goods['commissionsDetail'] as $detail){ switch ($detail['role']){ case 1: $goods['commissions_content'] .= '普通用户佣金:¥ '.$detail['clearing_money'].' '.$detail['user']['nick_name']??''.$detail['user']['mobile']??''; break; case 2: $goods['commissions_content'] .= '店员佣金:¥ '.$detail['clearing_money'].' '.$detail['user']['nick_name']??''.$detail['user']['mobile']??''; break; case 3: $goods['commissions_content'] .= ' | 店长佣金:¥ '.$detail['clearing_money'].' '.$detail['user']['nick_name']??''.$detail['user']['mobile']??''; break; case 4: $goods['commissions_content'] .= ' 店老板佣金:¥ '.$detail['clearing_money'].' '.$detail['user']['nick_name']??''.$detail['user']['mobile']??''; break; } } } /** * 订单列表(全部) * @param string $dataType 订单类型 * @param array $query * @return mixed */ public function getListAll(string $dataType = self::LIST_TYPE_ALL, array $query = []) { // 检索查询条件 $queryFilter = $this->getQueryFilter($query); // 设置订单类型条件 $dataTypeFilter = $this->getFilterDataType($dataType); // var_dump($query);javascript:; // die(); // 获取数据列表 return $this->with(['goods.image', 'address', 'user.avatar']) ->alias('order') ->field('order.*') ->join('user', 'user.user_id = order.user_id') ->where($dataTypeFilter) ->where($queryFilter) ->where('order.is_delete', '=', 0) ->order(['order.create_time' => 'desc']) ->select(); } /** * 设置检索查询条件 * @param array $param * @return array */ private function getQueryFilter(array $param): array { // 默认参数 $params = $this->setQueryDefaultValue($param, [ 'orderSource' => -1, // 订单来源 'payType' => -1, // 支付方式 'deliveryType' => -1, // 配送方式 'betweenTime' => [], // 起止时间 'userId' => 0, // 会员ID 'delivery_type'=>-1, //配送方式 'shop_id'=>-1, //门店id 'kw'=>'' ]); // 检索查询条件 $filter = []; if(!empty($params['nickName'])){ $filter[] = ['user.nick_name','like',"%{$params['nickName']}%"]; } //用户手机 !empty($params['mobile']) && $filter[] = ['user.mobile', 'like', "%{$params['mobile']}%"]; // // if(!empty($params['user_kw'])){ // $filter[] = ['user.nick_name','like',"%{$params['kw']}%"]; // $filter[] = ['user.mobile', 'like', "%{$params['kw']}%"]; // } // 订单号 if (!empty($params['orderNo'])) { $filter[] = ['order.order_no', 'like', "%{$params['orderNo']}%"]; } if(isset($params['delivery_type'])&&$params['delivery_type']>-1){ $filter[] = ['order.delivery_type','=',$params['delivery_type']]; } //发货状态 if(isset($params['delivery_status'])&&$params['delivery_status']>-1){ $filter[] = ['order.delivery_status','=',$params['delivery_status']]; } if(isset($params['shop_id'])&&$params['shop_id']>-1){ $filter[] = ['order.shop_id','=',$params['shop_id']]; } // 下单起止时间 if (!empty($params['betweenTime'])) { $times = between_time_format($params['betweenTime']); $filter[] = ['order.create_time', '>=', $times['start_time']]; $filter[] = ['order.create_time', '<', $times['end_time']]; } // 付款起止时间 if (!empty($params['betweenPayTime'])) { $times = between_time_format($params['betweenPayTime']); $filter[] = ['order.pay_time', '>=', $times['start_time']]; $filter[] = ['order.pay_time', '<', $times['end_time'] ]; } // 微信支付时间 if (!empty($params['wxPayTime'])) { $times = between_time_format($params['wxPayTime']); $filter[] = ['order.pay_time', '>=', $times['start_time']]; $filter[] = ['order.pay_time', '<', $times['end_time'] ]; $filter[] = ['order.pay_type', '=', 20]; $filter[] = ['order.pay_status', '=', 20]; } // 完成起止时间 if (!empty($params['betweenReceiptTime'])) { $times = between_time_format($params['betweenReceiptTime']); $filter[] = ['order.receipt_time', '>=', $times['start_time']]; $filter[] = ['order.receipt_time', '<', $times['end_time']]; } // 订单来源 $params['orderSource'] > -1 && $filter[] = ['order_source', '=', (int)$params['orderSource']]; // 支付方式 $params['payType'] > -1 && $filter[] = ['pay_type', '=', (int)$params['payType']]; //支付状态10未付款,20已付款 !empty($params['payStatus']) && $params['payStatus'] > -1 && $filter[] = ['pay_status', '=', (int)$params['payStatus']]; // 配送方式 $params['deliveryType'] > -1 && $filter[] = ['delivery_type', '=', (int)$params['deliveryType']]; // 用户id $params['userId'] > 0 && $filter[] = ['order.user_id', '=', (int)$params['userId']]; //标记颜色 if(isset($params['color'])&&$params['color']!='-1'){ $filter[] = ['order.color', 'like', "%{$params['color']}%"]; } //微信支付交易号 if(!empty($params['transactionId'])){ $filter[] = ['order.transaction_id', 'like', "%{$params['transactionId']}%"]; } //门店搜索--v1.3.7添加2022年3月31日 14:14:44 if (isset($params['shopName']) && !empty($params['shopName'])) { $filter[] = ['shops.shop_name', 'like', "%{$params['shopName']}%"]; } //收件人姓名或手机 if(isset($params['addressKw'])&&!empty($params['addressKw'])){ $filter[] = ['order_address.phone|order_address.name', 'like', '%' . trim($params['addressKw']) . '%']; } //订单状态 if (isset($params['stateValue']) && $params['stateValue'] > 0) { switch ($params['stateValue']) { case 11://'待支付'; $filter[] = ['order.pay_status', '=', 10]; $filter[] = ['order.order_status','=',10]; break; case 12://'已付款待发货'; $filter[] = ['order.pay_status', '=', 20]; $filter[] = ['order.delivery_status', '=', 10]; $filter[] = ['order.order_status','=',10]; break; case 13://'已付款待收货'; $filter[] = ['order.pay_status', '=', 20]; //已付款 $filter[] = ['order.delivery_status', '=', 20];//已发货 $filter[] = ['order.receipt_status', '=', 10];//未收货 $filter[] = ['order.order_status','=',10]; break; case 20://'已取消'; $filter[] = ['order.order_status','=',20]; break; case 30://'已完成'; $filter[] = ['order.order_status','=',30]; break; case 40://'已关闭'; $filter[] = ['order.order_status','=',40]; break; default: # code... break; } } $result = []; //商品名称 店铺名称 合并在一个参数搜索 if (isset($params['goodsName']) && !empty($params['goodsName'])) { $ogm = new OrderGoodsModel; $result = array_values(array_unique(array_merge($result,$ogm->searchGoodName($params['goodsName'])))); } //快递单号 if (isset($params['expressNo']) && !empty($params['expressNo'])) { $ogm = new OrderGoodsModel; $result = array_values(array_unique(array_merge($result,$ogm->searchExpressNo($params['expressNo'])))); } if(count($result)){ $filter[] = ['order.order_id', 'in', $result]; } return $filter; } /** * 设置订单类型条件 * @param string $dataType * @return array */ private function getFilterDataType(string $dataType = self::LIST_TYPE_ALL): array { // 数据类型 $filter = []; switch ($dataType) { case self::LIST_TYPE_ALL: $filter = []; break; case self::LIST_TYPE_DELIVERY: $filter = [ ['pay_status', '=', PayStatusEnum::SUCCESS], ['delivery_status', '=', DeliveryStatusEnum::NOT_DELIVERED], ['order_status', 'in', [OrderStatusEnum::NORMAL, OrderStatusEnum::APPLY_CANCEL]] ]; break; case self::LIST_TYPE_RECEIPT: $filter = [ ['pay_status', '=', PayStatusEnum::SUCCESS], ['delivery_status', '=', DeliveryStatusEnum::DELIVERED], ['receipt_status', '=', ReceiptStatusEnum::NOT_RECEIVED] ]; break; case self::LIST_TYPE_PAY: $filter[] = ['pay_status', '=', PayStatusEnum::PENDING]; $filter[] = ['order_status', '=', OrderStatusEnum::NORMAL]; break; case self::LIST_TYPE_COMPLETE: $filter[] = ['order_status', '=', OrderStatusEnum::COMPLETED]; break; case self::LIST_TYPE_CANCEL: $filter[] = ['order_status', '=', OrderStatusEnum::CANCELLED]; break; } return $filter; } /** * 确认发货(单独订单) * @param $data * @return array|bool|false * @throws \Exception */ public function delivery($data) { // 转义为订单列表 $orderList = [$this]; // 验证订单是否满足发货条件 if (!$this->verifyDelivery($orderList)) { return false; } // 整理更新的数据 $updateList = [[ 'order_id' => $this['order_id'], 'express_id' => $data['express_id'], 'express_no' => $data['express_no'] ]]; // 更新订单发货状态 $this->updateToDelivery($updateList); // 获取已发货的订单 $completed = self::detail($this['order_id'], ['user', 'address', 'goods', 'express']); // 发送消息通知 $this->sendDeliveryMessage([$completed]); return true; } /** * 确认发货后发送消息通知 * @param $orderList * @return bool */ private function sendDeliveryMessage($orderList) { // 发送消息通知 foreach ($orderList as $item) { MessageService::send('order.delivery', ['order' => $item], self::$storeId); } return true; } /** * 更新订单发货状态(批量) * @param $orderList * @return bool */ private function updateToDelivery($orderList) { // 整理更新的数据 $data = []; foreach ($orderList as $item) { $data[] = [ 'data' => [ 'express_no' => $item['express_no'], 'express_id' => $item['express_id'], 'delivery_status' => 20, 'delivery_time' => time(), ], 'where' => ['order_id' => $item['order_id']] ]; } // 批量更新 $this->updateAll($data); return true; } /** * 验证订单是否满足发货条件 * @param $orderList * @return bool */ private function verifyDelivery($orderList) { foreach ($orderList as $order) { if ( $order['pay_status'] != PayStatusEnum::SUCCESS || $order['delivery_type'] != DeliveryTypeEnum::EXPRESS || $order['delivery_status'] != DeliveryStatusEnum::NOT_DELIVERED ) { $this->error = "订单号[{$order['order_no']}] 不满足发货条件!"; return false; } } return true; } /** * 修改订单价格 * @param array $data * @return bool */ public function updatePrice(array $data) { if ($this['pay_status'] != PayStatusEnum::PENDING) { $this->error = '该订单不合法'; return false; } // 实际付款金额 $payPrice = helper::bcadd($data['order_price'], $data['express_price']); if ($payPrice <= 0) { $this->error = '订单实付款价格不能为0.00元'; return false; } // 改价的金额差价 $updatePrice = helper::bcsub($data['order_price'], $this['order_price']); // 更新订单记录 return $this->save([ 'order_no' => $this->orderNo(), // 修改订单号, 否则微信支付提示重复 'pay_price' => $payPrice, 'update_price' => $updatePrice, 'express_price' => $data['express_price'] ]) !== false; } /** * 审核:用户取消订单 * @param array $data * @return bool|mixed */ public function confirmCancel(array $data) { // 判断订单是否有效 if ($this['pay_status'] != PayStatusEnum::SUCCESS) { $this->error = '该订单不合法'; return false; } // 订单取消事件 return $this->transaction(function () use ($data) { if ($data['status'] == true) { // 执行退款操作 (new RefundService)->execute($this); // 订单取消事件 OrderService::cancelEvent($this); } // 更新订单状态 return $this->save(['order_status' => $data['status'] ? OrderStatusEnum::CANCELLED : OrderStatusEnum::NORMAL]); }); } /** * 获取已付款订单总数 (可指定某天) * @param null $startDate * @param null $endDate * @return int|string */ public function getPayOrderTotal($startDate = null, $endDate = null) { $filter = [ ['pay_status', '=', PayStatusEnum::SUCCESS], ['order_status', '<>', OrderStatusEnum::CANCELLED] ]; if (!is_null($startDate) && !is_null($endDate)) { $filter[] = ['pay_time', '>=', strtotime($startDate)]; $filter[] = ['pay_time', '<', strtotime($endDate) + 86400]; } return $this->getOrderTotal($filter); } /** * 获取已付款订单商品总数( (可指定某天)) * @param null $startDate * @param null $endDate * @return int */ public function getPayOrderGoodsTotal($startDate = null, $endDate = null) { $filter = [ ['order.pay_status', '=', PayStatusEnum::SUCCESS], ['order.order_status', '<>', OrderStatusEnum::CANCELLED], ['og.goods_type', '<>', 20], // 排除赠品 ]; if (!is_null($startDate) && !is_null($endDate)) { $filter[] = ['order.pay_time', '>=', strtotime($startDate)]; $filter[] = ['order.pay_time', '<', strtotime($endDate) + 86400]; } return $this->getOrderGoodsTotal($filter); } /** * 获取本月已付款订单总数 * @return mixed */ public function getMonthPayOrderTotal() { return $this->whereTime('pay_time', 'month') ->where('pay_status', '=',PayStatusEnum::SUCCESS) ->where('order_status', '<>', OrderStatusEnum::CANCELLED) ->where('is_delete', '=', '0') ->count(); } /** * 获取本月已付款用户总数 * @return mixed */ public function getMonthPayUserTotal() { return $this->field('user_id') ->whereTime('pay_time', 'month') ->where('pay_status', '=', PayStatusEnum::SUCCESS) ->where('order_status', '<>', OrderStatusEnum::CANCELLED) ->where('is_delete', '=', '0') ->group('user_id') ->count(); } /** * 获取未发货订单数量 * @return int */ public function getNotDeliveredOrderTotal() { $filter = [ ['pay_status', '=', PayStatusEnum::SUCCESS], ['delivery_status', '=', DeliveryStatusEnum::NOT_DELIVERED], ['order_status', 'in', [OrderStatusEnum::NORMAL, OrderStatusEnum::APPLY_CANCEL]] ]; return $this->getOrderTotal($filter); } /** * 获取未付款订单数量 * @return int */ public function getNotPayOrderTotal() { $filter = [ ['pay_status', '=', PayStatusEnum::PENDING], ['order_status', '=', OrderStatusEnum::NORMAL] ]; return $this->getOrderTotal($filter); } /** * 获取订单总数 * @param array $filter * @return int */ private function getOrderTotal(array $filter = []) { // 获取订单总数量 return $this->where($filter) ->where('is_delete', '=', 0) ->count(); } /** * 获取订单商品总数 * @param array $filter * @return int */ private function getOrderGoodsTotal(array $filter = []) { // 获取订单商品总数量 return OrderModel::alias('order')->where($filter) ->leftJoin('order_goods og', 'og.order_id=order.order_id') ->where('order.is_delete', '=', 0) ->sum('og.total_num'); } /** * 获取某天的总销售额 * @param null $startDate * @param null $endDate * @return float|int */ public function getOrderTotalPrice($startDate = null, $endDate = null) { // 查询对象 $query = $this->getNewQuery(); // 设置查询条件 if (!is_null($startDate) && !is_null($endDate)) { $query->where('pay_time', '>=', strtotime($startDate)) ->where('pay_time', '<', strtotime($endDate) + 86400); } // 总销售额 $data = $query->where('pay_status', '=', PayStatusEnum::SUCCESS) ->where('order_status', '<>', OrderStatusEnum::CANCELLED) ->where('is_delete', '=', 0) ->field('sum(pay_price+rice_card_money) as c') ->find(); return $data->c ?? 0; } /** * 获取某批订单的总销售额 * @param null $startDate * @param null $endDate * @return float|int */ public function getOrderSellPrice($order_id_arr) { // 总销售额 $query = $this->getNewQuery(); $query->where('order_id', 'in', $order_id_arr); // return $query->where('pay_status', '=', PayStatusEnum::SUCCESS) // ->where('order_status', '<>', OrderStatusEnum::CANCELLED) // ->where('is_delete', '=', 0) // ->sum('pay_price'); $one = $query->field('sum(pay_price)+sum(rice_card_money)-sum(express_price) as c')->where('pay_status', '=', PayStatusEnum::SUCCESS) ->where('order_status', '<>', OrderStatusEnum::CANCELLED) ->where('is_delete', '=', 0) ->find(); return $one->c??0; } /** * 获取某天的下单用户数 * @param string $day * @return float|int */ public function getPayOrderUserTotal(string $day) { $startTime = strtotime($day); return $this->field('user_id') ->where('pay_time', '>=', $startTime) ->where('pay_time', '<', $startTime + 86400) ->where('pay_status', '=', PayStatusEnum::SUCCESS) ->where('is_delete', '=', '0') ->group('user_id') ->count(); } /** * 添加或修改标签备注 * @param array $param * @return int */ public function updColor(array $param) { return $this->updateBase([ 'color' => $param['color'], 'color_remark' => $param['color_remark'], ],['order_id' => $param['order_id']]); } /** * 修改下单用户收货信息 * @param array $param * @return int */ public function updAddress(array $param) { $OrderAddress = OrderAddressModel::find($param['order_address_id']); // 判断订单是否有效 $order = $this->getDetail($OrderAddress['order_id']); if ($order['pay_status'] != PayStatusEnum::PENDING || $order['order_status'] != OrderStatusEnum::NORMAL) { $this->error = '待付款的订单才能修改收货地址'; return false; } return OrderAddressModel::updateBase([ 'name' => $param['name'], 'phone' => $param['phone'], 'province_id' => $param['province_id'], 'city_id' => $param['city_id'], 'region_id' => $param['region_id'], 'detail' => $param['detail'], ],['order_address_id' => $param['order_address_id']]); } public function listdtExport($param,$dataType=self::LIST_TYPE_ALL){ // 获取列表数据 $filter = $this->getQueryFilter($param); // 设置订单类型条件 $dataTypeFilter = $this->getFilterDataType($dataType); // 获取数据列表 $query = $this->with(['goods'=>['image', 'provider']]) ->alias('order') ->field('order.order_id,order.order_no,order.create_time,order.order_status,order.pay_status,order.delivery_status,order.delivery_type,order.receipt_status,order.pay_price ,order.express_price,order.total_price,order.transaction_id,order.coupon_money,order.order_source,order.activity_discount_total_price,order.bargain_money,order.groupbuy_money,order.distributor_total_money,order.rice_card_money,(order.pay_price + rice_card_money) as cal_order_price') ->where('order.pay_status',20) ->where($dataTypeFilter) ->where($filter); $list = $query->where('order.is_delete', '=', 0) ->order(['order.create_time' => 'desc'])//->limit(0,1000) ->select(); $data['header'] = ['序号', '订单编号','下单时间','订单状态', '商品名称','商品编号','商品规格','供应商品牌','单价','数量', '配送方式', '运费','订单总金额','实付金额','专属折扣优惠','活动优惠','优惠券优惠','现金卡抵扣','微信交易流水号']; $data['filename'] = '销售明细列表导出'; $data['data'] = []; foreach ($list as $key=>$arr){ /* if (count($arr['goods']) == 1){ $new_list = []; $new_list['key'] = $key+1; $new_list['order_no'] = $arr['order_no']; $new_list['create_time'] = $arr['create_time']; $new_list['state_text'] = $arr['state_text']; $new_list['goods_name'] = $arr['goods'][0]['goods_name']; $new_list['goods_no'] = $arr['goods'][0]['goods_no']; $new_list['goods_props'] = $arr['goods'][0]['specs']??'-'; $new_list['supplier'] = $arr['goods'][0]['supplier'] ?: '-'; $new_list['goods_price'] = $arr['goods'][0]['goods_price']; $new_list['total_num'] = $arr['goods'][0]['total_num']; $new_list['delivery_type'] = ($arr['delivery_type']==10)?'普通配送':'门店自提'; $new_list['express_price'] = $arr['express_price']; $new_list['total_price'] = $arr['total_price']; $new_list['pay_price'] = $arr['pay_price']; $new_list['distributor_total_money'] = $arr['distributor_total_money']; $new_list['act_discount_money'] = ($arr['order_source'] == 10)?$arr['activity_discount_total_price']:($arr['order_source'] == 30?$arr['bargain_money']:($arr['order_source'] == 40?$arr['groupbuy_money']:0)); $new_list['coupon_money'] = $arr['coupon_money']; $new_list['rice_card_money'] = $arr['rice_card_money']; $new_list['transaction_id'] = $arr['transaction_id'] ?: '-'; $data['data'][] = $new_list; }*/ if (count($arr['goods']) > 0){ foreach ($arr['goods'] as $i=>$g){ if ($i == 0){ $new_list = []; $new_list['key'] = $key+1; $new_list['order_no'] = $arr['order_no']; $new_list['create_time'] = $arr['create_time']; $new_list['state_text'] = $arr['state_text']; $new_list['goods_name'] = $arr['goods'][0]['goods_name']; $new_list['goods_no'] = $arr['goods'][0]['goods_no']; $new_list['goods_props'] = $arr['goods'][0]['specs']??'-'; $new_list['supplier'] = $arr['goods'][0]['supplier'] ?: '-'; $new_list['goods_price'] = $arr['goods'][0]['goods_price']; $new_list['total_num'] = $arr['goods'][0]['total_num']; $new_list['delivery_type'] = ($arr['delivery_type']==10)?'普通配送':'门店自提'; $new_list['express_price'] = $arr['express_price']; $new_list['total_price'] = $arr['total_price']; $new_list['pay_price'] = $arr['pay_price']; $new_list['distributor_total_money'] = $arr['distributor_total_money']; $new_list['act_discount_money'] = ($arr['order_source'] == 10)?$arr['activity_discount_total_price']:($arr['order_source'] == 30?$arr['bargain_money']:($arr['order_source'] == 40?$arr['groupbuy_money']:0)); $new_list['coupon_money'] = $arr['coupon_money']; $new_list['rice_card_money'] = $arr['rice_card_money']; $new_list['transaction_id'] = $arr['transaction_id'] ?: '-'; $data['data'][] = $new_list; }else{ $new_list = []; $new_list['key'] = ''; $new_list['order_no'] = ''; $new_list['create_time'] = ''; $new_list['state_text'] = ''; $new_list['goods_name'] = $g['goods_name']; $new_list['goods_no'] = $g['goods_no']; $new_list['goods_props'] = $g['specs']??'-'; $new_list['supplier'] = $g['supplier'] ?: '-'; $new_list['goods_price'] = $g['goods_price']; $new_list['total_num'] = $g['total_num']; $new_list['delivery_type'] = ''; $new_list['express_price'] = ''; $new_list['total_price'] = ''; $new_list['pay_price'] = ''; $new_list['distributor_total_money'] = ''; $new_list['act_discount_money'] = ''; $new_list['coupon_money'] = ''; $new_list['rice_card_money'] = ''; $new_list['transaction_id'] = ''; $data['data'][] = $new_list; } } } } return $data; } /** * 导出全部订单列表 * @param array $param * @return mixed * @author: zjwhust * @Time: 2022/6/28 15:41 */ public function orderExport(array $param) { $order_ids = $param['order_ids']??[]; //$data['header'] = ['序号', '订单编号', '商品名称', '商品编码', '商品数量', '供应商名称', '收件人', '联系方式', '收货地址', '物流公司', '物流单号']; $data['header'] = ['序号', '订单编号', '商品信息','商品规格','数量','订单总额','实付金额','收件人', '买家信息','地址','手机号','配送方式', '支付状态','发货状态','订单状态', '下单时间']; $data['filename'] = '订单导出'; $data['data'] = []; if(isset($order_ids)&&count($order_ids)>0){ $list = $this->with(['goods'=>['image', 'provider', 'shop'], 'user.avatar', 'address']) ->whereIn('order_id',$order_ids)->order('order_id','desc')->select(); }else{ $p = $param['queryParam']??[]; $slist = $this->getList( self::LIST_TYPE_ALL ,$p,100000); foreach($slist as $row){ $order_ids[] = $row['order_id']; $list = $this->with(['goods'=>['image', 'provider', 'shop'], 'user.avatar', 'address']) ->whereIn('order_id',$order_ids)->order('order_id','desc')->select(); } } //->where('total_num','=',1)//导出限制:商品件数>1 时 不支持批量导出,导出的数据中不含件数>1的商品 foreach ($list as $key => $arr){ $new_list['order_id'] = $arr['order_id'];//序号 $new_list['order_no'] = (string)$arr['order_no'];//订单编号 $new_list['goods_name'] = ''; $new_list['goods_sku'] = ''; $new_list['goods_num'] = ''; $count = count($arr['goods'])-1; foreach ($arr['goods'] as $key2=>$good){ $eol = PHP_EOL; if($key2==$count){ $eol = ''; } //商品信息 $new_list['goods_name'] .= $good['goods_name']. $eol; //商品规格 if($good['spec_type']==20){ $new_list['goods_sku'] .= ($good['goods_prop']?$good['goods_prop'][0]['value']['name']:'--'). $eol; }else{ $new_list['goods_sku'] .= ($good['specs']?$good['specs']:'--'). $eol; } //数量 $new_list['goods_num'] .= $good['total_num']. $eol; } $new_list['total_price'] = $arr['total_price'];//订单总额 $new_list['pay_price'] = $arr['pay_price']+$arr['rice_card_money'];//实付金额 $address_name = $arr['address']['name']??''; $address_phone = $arr['address']['phone']??''; $new_list['address'] = $address_name;//收件人 $new_list['nick_name'] = $arr['user']['nick_name']??'';//买家信息 $new_list['detail_address'] = ''; if($arr['address']){ $new_list['detail_address'] = implode(" ",array_values($arr['address']['region'])).$arr['address']['detail']; } $new_list['address_phone'] = $address_phone; //配送方式 if($arr['delivery_type']==10){ $new_list['delivery_type'] = '普通配送'; }else{ $new_list['delivery_type'] = '门店自提'; } //支付状态 if($arr['pay_status']==10){ $new_list['pay_status'] = '待付款'; }else{ $new_list['pay_status'] = '已付款'; } // //发货状态 if($arr['pay_status']==20 && $arr['delivery_status']==10){ $new_list['delivery_status '] = '待发货'; }elseif($arr['delivery_status']==20 && $arr['delivery_status']==20){ $new_list['delivery_status'] = '已发货'; }else{ $new_list['delivery_status'] = '--'; } // //订单状态'11':'待支付','12':'已付款待发货','13':'已付款待收货','20':'已取消','30':'已完成','40':'已关闭' $new_list['state_value'] = '--'; switch ($arr['state_value']){ case 11: $new_list['state_value'] = '待支付';break; case 12: $new_list['state_value'] = '已付款待发货';break; case 13: $new_list['state_value'] = '已付款待收货';break; case 20: $new_list['state_value'] = '已取消';break; case 30: $new_list['state_value'] = '已完成';break; case 40: $new_list['state_value'] = '已关闭';break; } $new_list['create_time'] = $arr['create_time']; $data['data'][] = $new_list; } return $data; } }