package com.ydd.module.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ydd.common.core.domain.entity.SysUser; import com.ydd.common.core.page.PageResult; import com.ydd.common.core.redis.RedisCache; import com.ydd.common.enums.UserTypeEnums; import com.ydd.common.exception.CustomException; import com.ydd.common.utils.StringUtils; import com.ydd.ecloud.core.utils.BigDecimalUtils; import com.ydd.module.domain.*; import com.ydd.module.dto.*; import com.ydd.module.enums.*; import com.ydd.module.expection.CustomAppException; import com.ydd.module.mapper.OrderMapper; import com.ydd.module.pay.alipay.AliPayService; import com.ydd.module.pay.wechat.service.WechatPayService; import com.ydd.module.producer.RabbitSender; import com.ydd.module.request.OrderListRequest; import com.ydd.module.service.*; import lombok.extern.slf4j.Slf4j; import org.apache.commons.compress.utils.Lists; import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.action.update.UpdateRequest; import org.elasticsearch.action.update.UpdateResponse; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.common.unit.TimeValue; import org.elasticsearch.common.xcontent.XContentType; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.index.query.TermQueryBuilder; import org.elasticsearch.rest.RestStatus; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StopWatch; import javax.annotation.Resource; import java.io.IOException; import java.math.BigDecimal; import java.math.BigInteger; import java.text.SimpleDateFormat; import java.util.*; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; /** * 配送订单Service业务层处理 * * @author douya * @date 2021-02-01 */ @Service @Slf4j public class OrderServiceImpl extends ServiceImpl implements IOrderService { @Resource private ICouponService iCouponService; @Resource private IMemberService iMemberService; @Resource private IMerchantService iMerchantService; @Resource private IPersonnelService iPersonnelService; @Resource private IProfitsDetailService iProfitsDetailService; @Resource private IAgentService iAgentService; @Resource private IOrderLogService iOrderLogService; @Resource private IWaimaiOrderDetailService iWaimaiOrderDetailService; @Resource private IDspWaimaiService iDspWaimaiService; @Resource private IOrderDeliveryService iOrderDeliveryService; @Resource private IMemberBalanceLogService iMemberBalanceLogService; @Resource private RabbitSender rabbitSender; @Autowired private RestHighLevelClient restHighLevelClient; @Autowired private RedisCache redisCache; @Autowired private IOrderTipService iOrderTipService; @Autowired private AliPayService aliPayService; @Autowired private WechatPayService wechatPayService; @Autowired private IPaymentService paymentService; @Autowired private IMemberCouponService iMemberCouponService; @Autowired private IDadaDspService iDadaDspService; @Autowired private IShopService iShopService; @Autowired private IOrderFreightService iOrderFreightService; @Autowired private IPackageFreightService iPackageFreightService; @Override public List queryList(Order order, SysUser user, Integer merchantId) { List memberIds = new ArrayList<>(); if (merchantId == null) { if (user.getType().equals(UserTypeEnums.AGENT.getCode())) { //查询代理商下所有商户的ID memberIds = iMemberService.selectMemberIdByAgentId(user.getAgentId().intValue()); if (memberIds.size() == ListSizeEnum.ZERO.getSize()) { return new ArrayList<>(); } } } else { //查询商家下所有用户的ID memberIds = iMerchantService.getMerchantMemberId(merchantId); } if (memberIds.size() == ListSizeEnum.ZERO.getSize()) { memberIds = null; } List lists = baseMapper.queryPage(order, memberIds); // lists.forEach(orders -> { // if (orders.getCouponId() != null){ // Coupon coupon = iCouponService.getById(orders.getCouponId()); // if (coupon != null){ // orders.setCoupon(coupon); // } // } // }); return lists; } /** * 分页查询列表 * * @param page * @param order * @param user * @param merchantId * @return */ @Override public PageResult queryPageList(Page page, SystemOrderDto order, SysUser user, Integer merchantId) { List agentIds = new ArrayList<>(); List aIds = new ArrayList<>(); // if (merchantId == null){ // if (user.getType().equals(UserTypeEnums.AGENT.getCode())){ // // 查询下级所有代理 // agentIds = iAgentService.getAgentIdsByPid(user.getAgentId().intValue()); // } // } if (user.getType().equals(UserTypeEnums.AGENT.getCode()) && user.getAgentId() != null) { agentIds = iAgentService.listAgent(user.getAgentId().longValue()); } if (order.getAId() != null) { aIds = iAgentService.listAgent(order.getAId()); } List lists = baseMapper.queryPageList(page, order, agentIds, aIds); for (SystemOrderDto o : lists) { // 查询所有订单记录 List orderLogList = iOrderLogService.getCreateTime(o.getId()); // 接单时间 List deliveryTimeList = orderLogList.stream().filter(item -> OrderStatusEnum.TO_BE_DELIVERED.getStatus().equals(item.getOrderStatus())).collect(Collectors.toList()); if (deliveryTimeList.size() > 0) { o.setDeliveryTime(deliveryTimeList.get(0).getCreateTime()); } else { o.setDeliveryTime(null); } // 取货时间 List pickUpTimeList = orderLogList.stream().filter(item -> OrderStatusEnum.IN_DELIVERY.getStatus().equals(item.getOrderStatus())).collect(Collectors.toList()); if (pickUpTimeList.size() > 0) { o.setPickUpTime(pickUpTimeList.get(0).getCreateTime()); } // 完成时间 List finishTimeList = orderLogList.stream().filter(item -> OrderStatusEnum.FINISH.getStatus().equals(item.getOrderStatus())).collect(Collectors.toList()); if (finishTimeList.size() > 0) { o.setFinishTime(finishTimeList.get(0).getCreateTime()); } else { o.setFinishTime(null); } // 取消时间 if (o.getDeliveryStatus() == -1) { List cancelTimeList = orderLogList.stream().filter(item -> OrderStatusEnum.CANCEL.getStatus().equals(item.getOrderStatus())).collect(Collectors.toList()); if (cancelTimeList.size() > 0) { o.setCancelTime(cancelTimeList.get(0).getCreateTime()); } } else if (o.getDeliveryStatus() == -2) { List cancelTimeList = orderLogList.stream().filter(item -> OrderStatusEnum.ABNORMAL.getStatus().equals(item.getOrderStatus())).collect(Collectors.toList()); if (cancelTimeList.size() > 0) { o.setCancelTime(cancelTimeList.get(0).getCreateTime()); } } // 外卖名称 DspWaimai dspWaimai = iDspWaimaiService.selectNameByType(o.getOrderType()); if (dspWaimai != null) { o.setDspWaimaiName(dspWaimai.getName()); } DadaDsp dadaDsp = iDadaDspService.getById(o.getDadaDspId()); o.setDadaDspName(dadaDsp == null ? "" : dadaDsp.getName()); // 增加下单人名称 // Member member = iMemberService.getById(o.getMemberId()); // if (member != null && member.getNickname() != null) { // o.setMemberName(member.getNickname()); // o.setMemberMobile(member.getMobile()); // } // 增加代理商名称 Agent agent = iAgentService.getById(o.getAgentId()); if (agent != null && agent.getName() != null) { o.setAgentName(agent.getName()); } // 增加商家名称 // Merchant merchant = iMerchantService.getById(o.getMerchantId()); // if (merchant != null && merchant.getMerchantName() != null) { // o.setMerchantName(merchant.getMerchantName()); // } // 查看自己的佣金 List profitsDetailList = iProfitsDetailService.getByCommissionId(o.getId()); if (user.getType().equals(UserTypeEnums.AGENT.getCode())) { // List profitsDetail = iProfitsDetailService.getByCommissionId(user.getAgentId(),o.getId(),2); List profitsDetail = profitsDetailList.stream().filter(item -> user.getAgentId().equals(item.getAgentId())).collect(Collectors.toList()); if (profitsDetail.size() > 0) { o.setGetCommission(profitsDetail.get(0).getCommission()); } } else if (user.getType().equals(UserTypeEnums.DSP.getCode())) { // List profitsDetail = iProfitsDetailService.getByCommissionId(user.getDspId(),o.getId(),1); List profitsDetail = profitsDetailList.stream().filter(item -> user.getDspId().equals(item.getDspId())).collect(Collectors.toList()); if (profitsDetail.size() > 0) { o.setGetCommission(profitsDetail.get(0).getCommission()); } } if (o.getWaimaiDeliveryTime() != null) { if (o.getWaimaiDeliveryTime().longValue() != 0) { o.setWaimaiDeliveryDate(new Date(o.getWaimaiDeliveryTime() * 1000)); } } if (o.getDeleted() == 1) { String originalOrderSn = baseMapper.selectOriginalOrderSn1(o.getWaimaiOrderId()); if (originalOrderSn != null) { o.setOriginalOrderSn(originalOrderSn); } } } page.setRecords(lists); return new PageResult(page); } private boolean handleListSearchCondition(SystemOrderDto order, SysUser user) { boolean result = true; if (StringUtils.isNotBlank(order.getMerchantName())) { /*List merchantIds = iMerchantService.list(new QueryWrapper() .like("merchant_name", order.getMerchantName()) .eq("deleted", 0)) .stream() .map(Merchant::getId) .collect(Collectors.toList());*/ List merchantIds = iMerchantService.selectIdByName(order.getMerchantName()); if (CollectionUtils.isEmpty(merchantIds)) { result = false; } order.setMerchantIds(merchantIds); } if (user.getType().equals(UserTypeEnums.AGENT.getCode()) && user.getAgentId() != null) { List agentIds = iAgentService.listAgent(user.getAgentId()); if (CollectionUtils.isEmpty(agentIds)) { result = false; } order.setAgentIds(agentIds); } if (order.getAId() != null) { List aIds = iAgentService.listAgent(order.getAId()); if (CollectionUtils.isEmpty(order.getAgentIds())) { order.setAgentIds(aIds); } else { order.getAgentIds().retainAll(aIds); } if (CollectionUtils.isEmpty(order.getAgentIds())) { result = false; } } if (StringUtils.isNotEmpty(order.getMemberMobile())) { // List memberIds = iMemberService.list(new QueryWrapper() // .like("mobile", order.getMemberMobile()) // .eq("deleted", 0)) // .stream() // .map(Member::getId) // .collect(Collectors.toList()); // 查询出用户条件的id List memberIds = iMemberService.selectIdByName(order); if (CollectionUtils.isEmpty(memberIds)) { result = false; } order.setMemberIds(memberIds); } if (StringUtils.isNotEmpty(order.getMemberName())) { // List memberIds = iMemberService.list(new QueryWrapper() // .like("nickname", order.getMemberName()) // .eq("deleted", 0)) // .stream() // .map(Member::getId) // .collect(Collectors.toList()); // 查询出用户条件的id List memberIds = iMemberService.selectIdByName(order); if (CollectionUtils.isEmpty(order.getMemberIds())) { order.setMemberIds(memberIds); } else { order.getMemberIds().retainAll(memberIds); } if (CollectionUtils.isEmpty(order.getMemberIds())) { result = false; } } if (StringUtils.isNotEmpty(order.getPersonnelName())) { // List personnelIds = iPersonnelService.list(new QueryWrapper() // .like("name", order.getPersonnelName()) // .eq("deleted", 0)) // .stream() // .map(Personnel::getId) // .collect(Collectors.toList()); // 查询出员工名称条件的id List personnelIds = iPersonnelService.selectIdByName(order.getPersonnelName()); if (CollectionUtils.isEmpty(personnelIds)) { result = false; } order.setPersonnelIds(personnelIds); } // 新增订单门店查询按钮 if (StringUtils.isNotEmpty(order.getShopName())) { List shopList = iShopService.list(new QueryWrapper().eq("deleted", 0) .eq("status", 1).like("name", order.getShopName())); List shopIds = shopList.stream().map(Shop::getId).collect(Collectors.toList()); if (CollectionUtils.isEmpty(shopIds)) { result = false; } order.setShopIds(shopIds); } return result; } @Override public List selectExportOrder(SystemOrderDto order, SysUser user, Integer merchantId) { List agentIds = new ArrayList<>(); List aIds = new ArrayList<>(); if (user.getType().equals(UserTypeEnums.AGENT.getCode()) && user.getAgentId() != null) { agentIds = iAgentService.listAgent(user.getAgentId().longValue()); } if (order.getAId() != null) { aIds = iAgentService.listAgent(order.getAId()); } List list = baseMapper.selectExportOrder(order, agentIds, aIds); list.forEach(dto -> { if (dto.getWaimaiOrderId() != null && dto.getOrderTime() != null) { dto.setCreateTime(dto.getOrderTime()); } // 完成时间 // List finishTimeList = iOrderLogService.getCreateTime(dto.getId(), 4); // if (finishTimeList.size() > 0) { // dto.setFinishTime(finishTimeList.get(0).getCreateTime()); // }else { // dto.setFinishTime(null); // } // 拼接发件人分机号 if (dto.getSendExtension() != null) { dto.setMergeSendPhone(dto.getSendPhone() + "#" + dto.getSendExtension()); } else { dto.setMergeSendPhone(dto.getSendPhone()); } // 拼接收件人分机号 if (dto.getReceiptExtension() != null) { dto.setMergeReceiptPhone(dto.getReceiptPhone() + "#" + dto.getReceiptExtension()); } else { dto.setMergeReceiptPhone(dto.getReceiptPhone()); } // 支付类型 if (dto.getPaymentType() == 1 && dto.getStatus() != 0) { dto.setPayType("支付宝"); } else if (dto.getPaymentType() == 2 && dto.getStatus() != 0) { dto.setPayType("微信"); } else if (dto.getPaymentType() == 3 && dto.getStatus() != 0) { dto.setPayType("银联"); } else if (dto.getPaymentType() == 4 && dto.getStatus() != 0) { dto.setPayType("余额支付"); } else if (dto.getPaymentType() == 5 && dto.getStatus() != 0) { dto.setPayType("第三方平台支付"); } if (dto.getDeleted() == 0) { // 订单状态 if (dto.getDeliveryStatus() == -1 && (dto.getWmstatus() == null || dto.getWmstatus() != 4)) { dto.setOrderStatus("已取消"); return; } if (dto.getDeliveryStatus() == -2 && (dto.getWmstatus() == null || dto.getWmstatus() != 4)) { dto.setOrderStatus("异常"); return; } if (dto.getDeliveryStatus() == 0 && (dto.getWmstatus() == null || dto.getWmstatus() != 4)) { dto.setOrderStatus("待发单"); return; } // if (dto.getDeliveryStatus() == 0 && dto.getStatus() == 0 && (dto.getWmstatus() == null || dto.getWmstatus() != 4)) { // dto.setOrderStatus("未支付"); // return; // } if (dto.getDeliveryStatus() == 1 && dto.getStatus() == 1 && (dto.getWmstatus() == null || dto.getWmstatus() != 4)) { dto.setOrderStatus("待接单"); return; } if (dto.getDeliveryStatus() == 1 && dto.getStatus() == 0 && (dto.getWmstatus() == null || dto.getWmstatus() != 4)) { dto.setOrderStatus("待支付"); return; } if (dto.getDeliveryStatus() == 2 && (dto.getWmstatus() == null || dto.getWmstatus() != 4)) { dto.setOrderStatus("待配送"); return; } if (dto.getDeliveryStatus() == 3 && (dto.getWmstatus() == null || dto.getWmstatus() != 4)) { dto.setOrderStatus("配送中"); return; } if (dto.getDeliveryStatus() == 4) { dto.setOrderStatus("本平台完成"); return; } if (dto.getWmstatus() != null) { if (dto.getDeliveryStatus() != 4 && dto.getWmstatus() == 4) { dto.setOrderStatus("其它平台完成"); return; } } } else { dto.setOrderStatus("撤回"); } }); return list; } // @Override // public Result exportOrder(List list) { // ExcelUtil util = new ExcelUtil(OrderExportDto.class); // // if (list.size() > 60000) { // int n = 60000; // int t = 1; // for (int i = 0; i < list.size(); i += n) { // List dtos = list.stream().skip(i).limit(n).collect(Collectors.toList()); // return util.exportExcel(dtos, "配送订单统计" + t++); // } // }else { // return util.exportExcel(list, "配送订单统计" ); // } // // return Result.error("导出失败!"); // List dtos = new ArrayList(); // Workbook workbook = null; // ExportParams params = new ExportParams("配送订单两月数据", "订单"); // // params.setStyle(); // if (list.size() > 60000) { // for (OrderExportDto order : list) { // dtos.add(order); // if (dtos.size() == 10000) { // // workbook = ExcelExportUtil.exportBigExcel(params, OrderExportDto.class, dtos); // dtos.clear(); // } // } // }else { // workbook = ExcelExportUtil.exportExcel(params, // OrderExportDto.class, list); // } // ExcelUtil.closeExportBigExcel(); // String filename = encodingFilename("配送订单"); // try { // out = new FileOutputStream(getAbsoluteFile(filename)); // } catch (FileNotFoundException e) { // e.printStackTrace(); // } // try { // workbook.write(out); // } catch (IOException e) { // e.printStackTrace(); // } // File savefile = new File("D:/excel/"); // if (!savefile.exists()) { // savefile.mkdirs(); // } // // String filename = "D:/excel/" + UUID.randomUUID().toString() + "_" + "配送订单" + ".xlsx"; // // FileOutputStream fos = new FileOutputStream(filename); // try { // workbook.write(fos); // } catch (IOException e) { // e.printStackTrace(); // } // try { // fos.close(); // } catch (IOException e) { // e.printStackTrace(); // } // return Result.success(filename); // } // @Override // public List findOneKeyList(Long loginId, Integer status, String searchKey, Integer waimaiId, Integer shopId, Integer spId) { // return baseMapper.findOneKeyList(loginId,status,searchKey,waimaiId,shopId,spId); // } @Override public List findOneKeyList(Long loginId, Integer status, String searchKey, Integer waimaiId, Integer shopId, List shopIds, String startDate, String endDate, String version) { Integer oldStatus = 0; if (version == null || version.equals("")) { if (status != null && status.equals(DeliveryStatusEnum.CANCEL.status)) { oldStatus = 1; } } return baseMapper.findOneKeyList(loginId, status, searchKey, waimaiId, shopId, shopIds, startDate, endDate, oldStatus); } @Override public List findList(List loginIds, Integer status, String searchKey, Integer shopId, String startDate, String endDate) { return baseMapper.findList(loginIds, status, searchKey, shopId, startDate, endDate); } /** * 查询订单详情 * * @param loginId * @param orderId * @return */ @Override public Order getDetail(List loginId, Integer orderId) { return baseMapper.getDetail(loginId, orderId); } @Override public Order getDetailByShopId(List shopIds, Integer orderId) { return baseMapper.getDetailByShopId(shopIds, orderId); } @Override public Integer getOrderNum(List shopIds, String startDate) { return baseMapper.getOrderNum(shopIds, startDate); } @Override public BigDecimal getOrderAmount(List shopIds, String startDate) { return baseMapper.getOrderAmount(shopIds, startDate); } @Override public List findListByStatus() { return baseMapper.selectList(new QueryWrapper().eq("delivery_status", DeliveryStatusEnum.ORDERS_TO_BE_RECEIVED.status).eq("deleted", IsDeleteEnum.NORMAL.status)); } @Override public List queryTimeOutOrder(Integer time) { return baseMapper.queryTimeOutOrder(time); } @Override public List sumOrder(Long loginId, Integer status, Integer deliveryId, List shopIds, Integer timeType, String startTime, String endTime) { return baseMapper.sumOrder(loginId, status, deliveryId, shopIds, timeType, startTime, endTime); } @Override public OrderSumDto sumOrder1(Long loginId, Integer status, Integer deliveryId, Long shopId, Integer timeType, String startTime, String endTime) { return baseMapper.sumOrder1(loginId, status, deliveryId, shopId, timeType, startTime, endTime); } /** * 查询所有配送完成订单 * * @return */ @Override public List getByStatus() { return baseMapper.getByStatus(); } /** * 通过状态计算数量 * * @param order 1待接单 2取货中 3配送中 4平台完成 * @return */ @Override public List sumByStatus(SystemOrderDto order, SysUser user, List statusList) { List agentIds = new ArrayList<>(); List aIds = new ArrayList<>(); if (user.getType().equals(UserTypeEnums.AGENT.getCode())) { // 查询下级所有代理 agentIds = iAgentService.getAgentIdsByPid(user.getAgentId().intValue()); } if (user.getType().equals(UserTypeEnums.AGENT.getCode()) && user.getAgentId() != null) { agentIds.add(user.getAgentId().intValue()); } if (order.getAId() != null) { aIds = iAgentService.listAgent(order.getAId()); } List systemOrderDtos = baseMapper.selectCountByStatus(order, agentIds, aIds); statusList.forEach(deliveryStatus -> { long count; if (!DeliveryStatusEnum.FINISH.getStatus().equals(deliveryStatus.getDeliveryStatus())) { // 其它状态 count = systemOrderDtos.stream().filter(item -> ((item.getWmstatus() == null || item.getWmstatus() != 4) && deliveryStatus.getDeliveryStatus().equals(item.getDeliveryStatus()))).count(); } else { // 平台完成 count = systemOrderDtos.stream().filter(item -> DeliveryStatusEnum.FINISH.getStatus().equals(item.getDeliveryStatus())).count(); } deliveryStatus.setLabel(deliveryStatus.getLabel() + " " + count); }); return statusList; } /** * 通过状态计算数量 * * @param order 1待接单 2取货中 3配送中 4平台完成 * @return */ @Override public List sumByStatusNew(SystemOrderDto order, SysUser user, List statusList) { StopWatch stopWatch = new StopWatch(); stopWatch.start(); // 查询前置处理 StopWatch stopWatch1 = new StopWatch(); stopWatch1.start(); if (!this.handleListSearchCondition(order, user)) { statusList.forEach(deliveryStatus -> deliveryStatus.setLabel(deliveryStatus.getLabel() + " " + 0)); return statusList; } stopWatch1.stop(); log.info("角标前置查询耗时: {}", stopWatch1.getTotalTimeMillis()); StopWatch stopWatch2 = new StopWatch(); stopWatch2.start(); List systemOrderDtos = baseMapper.selectCountByStatusNew(order); stopWatch2.stop(); log.info("角标查询耗时: {}", stopWatch2.getTotalTimeMillis()); StopWatch stopWatch3 = new StopWatch(); stopWatch3.start(); statusList.forEach(deliveryStatus -> { long count; if (!DeliveryStatusEnum.FINISH.getStatus().equals(deliveryStatus.getDeliveryStatus())) { // 其它状态 count = systemOrderDtos.stream().filter(item -> ((item.getWmstatus() == null || item.getWmstatus() != 4) && deliveryStatus.getDeliveryStatus().equals(item.getDeliveryStatus()))).count(); } else { // 平台完成 count = systemOrderDtos.stream().filter(item -> DeliveryStatusEnum.FINISH.getStatus().equals(item.getDeliveryStatus())).count(); } deliveryStatus.setLabel(deliveryStatus.getLabel() + " " + count); }); stopWatch3.stop(); log.info("角标循环耗时: {}", stopWatch3.getTotalTimeMillis()); stopWatch.stop(); log.info("角标查询总耗时: {}", stopWatch.getTotalTimeMillis()); return statusList; } @Override public List productInfo(Integer waimaiOrderId) { // List list = iWaimaiOrderDetailService.list(new QueryWrapper().eq("deleted",0) // .eq("waimai_order_id",waimaiOrderId)); List list = iWaimaiOrderDetailService.selectDetailList(waimaiOrderId); return list; } @Override public void autofinish() { baseMapper.autofinish(); } @Override public List getDeliveryInfo(String orderSn) { return iOrderDeliveryService.getDeliveryInfo(orderSn); } @Override public BigDecimal totalConsume(List shopIds, ProfitsMerchant profitsMerchant) { return baseMapper.totalConsume(shopIds, profitsMerchant); } @Override public BigDecimal totalConsumeByMemberId(Long memberId) { return baseMapper.totalConsumeByMemberId(memberId); } @Override public Boolean cancelOrder(Order order) { List list = new ArrayList<>(); order.setCancelReason(CancelOrderEnum.getNameById(order.getCancelOrderId()).getName()); list.add(order); rabbitSender.send(JSONObject.toJSONString(list), "order.cancel"); return true; } @Override public Page getOrderList(OrderListRequest request, IPage pageArt) { return baseMapper.getOrderList(request, pageArt); } @Override public List getOrderListByShopIdsAndMemberIds(List shopIds, Long memberId, Integer memberType, boolean hasPersonalOrder) { return baseMapper.getOrderListByShopIdsAndMemberIds(shopIds, memberId, memberType, hasPersonalOrder); } @Override public Order getOrderByMemberIdAndOrderId(Long memberId, Integer orderId) { Member member = iMemberService.getById(memberId); if (Objects.isNull(member)) { throw new CustomException("用户不存在!"); } QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("id", orderId); if (MemberTypeEnum.MERCHANT.type.equals(member.getMemberType())) { queryWrapper.eq("merchant_id", member.getMerchantId()); } else if (MemberTypeEnum.SHOP.type.equals(member.getMemberType())) { queryWrapper.eq("shop_id", member.getShopId()); } else { queryWrapper.eq("member_id", memberId); } return getOne(queryWrapper); } @Override public Boolean finishOrder(Order order) { if (order.getId() != null) { // 更新order表 Order finishOrder = baseMapper.selectById(order.getId()); finishOrder.setDeliveryStatus(OrderStatusEnum.FINISH.getStatus()); this.updateById(finishOrder); // 更新waimai_order表 // if (finishOrder.getWaimaiOrderId() != null) { // // } // order_log插入完成记录 OrderLog orderLog = new OrderLog(); orderLog.setOrderId(order.getId()); orderLog.setOrderStatus(OrderStatusEnum.FINISH.getStatus()); iOrderLogService.save(orderLog); // 更新分佣 if (finishOrder.getDadaDspType() == null) { iProfitsDetailService.getCommission(finishOrder); } else { if (OrderDadaDspTypeEnum.DELIVERY_RAP.type.equals(order.getDadaDspType())) { iProfitsDetailService.getDadaDspCommission(finishOrder); } } return true; } return false; } @Override public void workOrderData(Long orderId, Integer type) throws IOException { Order order = baseMapper.selectById(orderId); ProfitsSystemOrderDto dto = new ProfitsSystemOrderDto(); if (order != null) { dto = baseMapper.selectOrderData(orderId); } else { throw new CustomAppException("该订单不存在!"); } if (type == 0) { // 添加数据到文档 IndexRequest request = new IndexRequest("profits_system", "_doc"); request.timeout("3s"); request.source(JSON.toJSONString(dto), XContentType.JSON); IndexResponse response = restHighLevelClient.index(request, RequestOptions.DEFAULT); if (response.status() != RestStatus.CREATED) { throw new CustomAppException("插入失败!"); } } else { // 查询要修改的数据 SearchRequest request = new SearchRequest("profits_system"); SearchSourceBuilder builder = new SearchSourceBuilder(); TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("orderId", orderId); builder.query(termQueryBuilder); builder.timeout(new TimeValue(60, TimeUnit.SECONDS)); request.source(builder); SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT); JSONArray array = new JSONArray(); if (response.getHits() != null && response.getHits().getHits() != null) { array = JSONArray.parseArray(JSON.toJSONString(response.getHits().getHits())); } String id = null; if (array != null && array.size() > 0) { id = (String) array.getJSONObject(0).get("id"); } // 修改数据到文档 UpdateRequest request1 = new UpdateRequest("profits_system", "_doc", id); request1.doc(JSON.toJSONString(dto), XContentType.JSON); UpdateResponse response1 = restHighLevelClient.update(request1, RequestOptions.DEFAULT); if (response1.status() != RestStatus.CREATED) { throw new CustomAppException("修改失败!"); } } restHighLevelClient.close(); } /** * 根据订单号查找订单 * * @param orderSn * @return */ @Override public Order getByOrderSn(String orderSn) { return baseMapper.getByOrderSn(orderSn); } /** * 根据订单号查找订单(包括异常单) * @param orderSn * @return */ @Override public List getAllOrderByOrderSn(String orderSn) { return baseMapper.getAllOrderByOrderSn(orderSn); } @Override @Transactional(rollbackFor = Exception.class) public Boolean orderRefund(SystemOrderDto order1) { if (StringUtils.isEmpty(order1.getRefundReason())) { throw new CustomException("退款理由不能为空!"); } Order order = baseMapper.selectById(order1.getRefundId()); BigDecimal deductFee = new BigDecimal(BigInteger.ZERO); // BigDecimal result = redisCache.getCacheObject(order.getOrderSn()); // if (result != null) { // deductFee = result; // redisCache.deleteObject(order.getOrderSn()); // } if (order.getRefundMoney().compareTo(BigDecimal.ZERO) == 0) { order.setRefundMoney(order.getPayAmount().subtract(deductFee)); List orderTips = iOrderTipService.list(new QueryWrapper().eq("order_no", order.getOrderSn()).eq("status", PayStatusEnum.PAYED.status)); BigDecimal refundMoney = order.getPayAmount().subtract(deductFee); BigDecimal tips = orderTips.stream().map(OrderTip::getAmount).reduce(BigDecimal.ZERO, BigDecimalUtils::sum); refundMoney = refundMoney.subtract(tips); refundTip(orderTips, LogSourceEnum.BACK_REFUND.name + "加小费退款", order.getMemberId(), order.getMerchantId()); refund(order.getOrderSn(), refundMoney, order1.getRefundReason(), order.getMemberId(), order.getMerchantId()); } if (order.getCouponId() != null) { CouponDto couponDto = iCouponService.findDetailBack(order.getCouponId().intValue()); couponDto.setStatus(MemberCouponStatusEnum.NOT_USED.getStatus()); order.setCouponId(null); if (couponDto != null) { MemberCoupon memberCoupon = new MemberCoupon(); memberCoupon.setId(couponDto.getId()); memberCoupon.setStatus(couponDto.getStatus()); iMemberCouponService.updateById(memberCoupon); } } List profitsDetails = iProfitsDetailService.getByOrderId(order.getId().longValue()); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 分佣时间 String detailTime = sdf.format(profitsDetails.get(0).getCreateTime()); // 当前时间 String now = sdf.format(new Date()); // 如果是当天退款:删除分佣,订单状态变为取消 if (detailTime.equals(now)) { // 删除分佣 if (order.getDeliveryStatus().equals(OrderStatusEnum.FINISH.getStatus())) { // order.setCommission(BigDecimal.ZERO); iProfitsDetailService.remove(new QueryWrapper().eq("order_id", order.getId())); } // 订单状态变为取消 order.setDeliveryStatus(OrderStatusEnum.CANCEL.getStatus()); } // 如果是隔天取消,不变 baseMapper.updateById(order); return true; } public void refundTip(List orderTips, String remark, Long memberId, Long merchantId) { BigDecimal tips = orderTips.stream().map(OrderTip::getAmount).reduce(BigDecimal.ZERO, BigDecimalUtils::sum); Member member = iMemberService.getById(memberId); if (member.getMemberType().equals(MemberTypeEnum.SHOP.type)) { member = iMemberService.getOne(new QueryWrapper().eq("member_type", MemberTypeEnum.MERCHANT.type).eq("merchant_id", member.getMerchantId())); } for (OrderTip orderTip : orderTips) { if (PaymentTypeEnum.BALANCE.type.equals(orderTip.getPayType())) { iMemberService.updateAmount(member.getId(), orderTip.getAmount()); } else if (PaymentTypeEnum.ZHI_FU_BAO.type.equals(orderTip.getPayType())) { aliPayService.alipayRefundRequest(orderTip.getChildOrderNo(), orderTip.getAmount().doubleValue()); } else if (PaymentTypeEnum.WEI_XIN.type.equals(orderTip.getPayType())) { wechatPayService.refund(orderTip.getChildOrderNo(), orderTip.getTotalAmout(), orderTip.getAmount(), ""); } } if (tips.compareTo(BigDecimal.ZERO) > 0) { iMemberBalanceLogService.saveLog(memberId, LogTypeEnum.INCREASE.type, remark, LogSourceEnum.REFUND.status, tips, merchantId, Long.valueOf(orderTips.get(0).getOrderId()), orderTips.get(0).getPayType()); } } public void refund(String orderNo, BigDecimal refundMoney, String remark, Long memberId, Long merchantId) { Order order = baseMapper.selectOne(new QueryWrapper().eq("order_sn", orderNo).eq("deleted", IsDeleteEnum.NORMAL.status)); Member member = iMemberService.getById(memberId); if (member.getMemberType().equals(MemberTypeEnum.SHOP.type)) { member = iMemberService.getOne(new QueryWrapper().eq("member_type", MemberTypeEnum.MERCHANT.type).eq("merchant_id", member.getMerchantId())); } if (PaymentTypeEnum.BALANCE.type.equals(order.getPaymentType())) { iMemberService.updateAmount(member.getId(), refundMoney); } else if (PaymentTypeEnum.ZHI_FU_BAO.type.equals(order.getPaymentType())) { aliPayService.alipayRefundRequest(orderNo, refundMoney.doubleValue()); } else if (PaymentTypeEnum.WEI_XIN.type.equals(order.getPaymentType())) { Payment payment = paymentService.getOne(new QueryWrapper().eq("child_order_sn", orderNo).eq("payment_type", PaymentTypeEnum.WEI_XIN.type)); wechatPayService.refund(orderNo, payment.getTotalAmount(), refundMoney, ""); } iMemberBalanceLogService.saveLog(memberId, LogTypeEnum.INCREASE.type, remark, LogSourceEnum.BACK_REFUND.status, refundMoney, merchantId, order.getId(), order.getPaymentType()); // 是否需要退服务费-绑定三方运力下单 // if (order.getBindFee().compareTo(BigDecimal.ZERO) == 1){ // iMemberService.updateAmount(member.getId(), order.getBindFee()); // iMemberBalanceLogService.saveLog(memberId, LogTypeEnum.INCREASE.type, "订单取消,服务费退款", LogSourceEnum.REFUND.status, order.getBindFee(), merchantId,order.getId()); // } } @Override public PageResult queryDadaPageList(Page page, DadaOrderListQuery orderQuery, SysUser user) { StopWatch stopWatch1 = new StopWatch(); stopWatch1.start(); if (!this.handleDadaStatusSearchCondition(orderQuery, user.getDadaDspId())) { page.setRecords(Lists.newArrayList()); return new PageResult(page); } StopWatch stopWatch5 = new StopWatch(); stopWatch5.start(); List dadaOrderList = baseMapper.queryDadaPageList(page, orderQuery); stopWatch5.stop(); log.info("达达订单列表查询耗时: {} ms", stopWatch5.getTotalTimeMillis()); List dadaOrderIds = dadaOrderList.stream().map(DadaOrderListDto::getId).collect(Collectors.toList()); if (CollectionUtils.isEmpty(dadaOrderIds)) { page.setRecords(Lists.newArrayList()); return new PageResult(page); } StopWatch stopWatch2 = new StopWatch(); stopWatch2.start(); List dadaMerchantIds = dadaOrderList.stream().map(DadaOrderListDto::getMerchantId).collect(Collectors.toList()); List dadaShopIds = dadaOrderList.stream().map(DadaOrderListDto::getShopId).collect(Collectors.toList()); // 获取商户名称 List merchantList = iMerchantService.list(new QueryWrapper() .in("id", dadaMerchantIds) .eq("deleted", 0)); Map merchantMap = Optional.ofNullable(merchantList).map(list -> list.stream().collect(Collectors.toMap(Merchant::getId, v -> v, (v1, v2) -> v1))).orElse(new HashMap<>()); // 获取门店名称 List shopList = iShopService.list(new QueryWrapper() .in("id", dadaShopIds) .eq("deleted", 0)); Map shopMap = Optional.ofNullable(shopList).map(list -> list.stream().collect(Collectors.toMap(Shop::getId, v -> v, (v1, v2) -> v1))).orElse(new HashMap<>()); // 获取订单运费包 List orderFreightList = iOrderFreightService.list(new QueryWrapper() .in("order_id", dadaOrderIds) .eq("deleted", 0)); List freightPackageIds = orderFreightList.stream().map(OrderFreight::getFreightPackageId).distinct().collect(Collectors.toList()); Map orderFreightMap = Optional.of(orderFreightList).map(list -> list.stream().collect(Collectors.toMap(OrderFreight::getOrderId, v -> v, (v1, v2) -> v1))).orElse(new HashMap<>()); // 获取运费包名称 Map packageFreightMap = new HashMap<>(); if (CollectionUtils.isNotEmpty(freightPackageIds)) { List packageFreightList = iPackageFreightService.list(new QueryWrapper() .in("id", freightPackageIds) .eq("deleted", 0)); packageFreightMap = Optional.of(packageFreightList).map(list -> list.stream().collect(Collectors.toMap(PackageFreight::getId, v -> v, (v1, v2) -> v1))).orElse(new HashMap<>()); } // 获取订单日志 List dadaOrderLogList = iOrderLogService.list(new QueryWrapper() .in("order_id", dadaOrderIds) .eq("deleted", 0)); Map> orderLogListMap = dadaOrderLogList.stream().collect(Collectors.groupingBy(OrderLog::getOrderId)); // 获取分佣 List profitsDetailList = iProfitsDetailService.list(new QueryWrapper() .in("order_id", dadaOrderIds) .eq("deleted", 0)); Map> profitsDetailListMap = profitsDetailList.stream().collect(Collectors.groupingBy(ProfitsDetail::getOrderId)); // 获取用户 List memberIds = dadaOrderList.stream().map(DadaOrderListDto::getMemberId).collect(Collectors.toList()); List memberList = iMemberService.list(new QueryWrapper().in("id", memberIds)); Map memberMap = Optional.of(memberList).map(list -> list.stream().collect(Collectors.toMap(Member::getId, v -> v, (v1, v2) -> v1))).orElse(new HashMap<>()); stopWatch2.stop(); log.info("达达订单列表查询前置耗时: {} ms", stopWatch2.getTotalTimeMillis()); StopWatch stopWatch3 = new StopWatch(); stopWatch3.start(); for (DadaOrderListDto o : dadaOrderList) { // 设置商户名称 if (merchantMap.get(o.getMerchantId()) != null) { o.setMerchantName(merchantMap.get(o.getMerchantId()).getMerchantName()); } // 设置门店名称 if (shopMap.get(o.getShopId()) != null) { o.setShopName(shopMap.get(o.getShopId()).getName()); } // 设置运费包名称 if (orderFreightMap.get(o.getId()) != null) { OrderFreight orderFreight = orderFreightMap.get(o.getId()); if (packageFreightMap.get(orderFreight.getFreightPackageId()) != null) { o.setPackageFreightName(packageFreightMap.get(orderFreight.getFreightPackageId()).getName()); } } // 设置门牌号,兼容app改版、老版本 if (StringUtils.isNotBlank(o.getSendStreet()) && StringUtils.isNotBlank(o.getSendAddress()) && !o.getSendAddress().endsWith(o.getSendStreet())) { o.setSendAddress(o.getSendAddress() + o.getSendStreet()); } if (StringUtils.isNotBlank(o.getReceiptStreet()) && StringUtils.isNotBlank(o.getReceiptAddress()) && !o.getReceiptAddress().endsWith(o.getReceiptStreet())) { o.setReceiptAddress(o.getReceiptAddress() + o.getReceiptStreet()); } if (o.getPlatformType() != 0) { // 手动发单外卖单 DspWaimai dspWaimai = iDspWaimaiService.selectNameByType(o.getPlatformType()); o.setDspWaimaiName(dspWaimai == null ? null : dspWaimai.getName()); } // 设置用户手机号 Member member = memberMap.get(o.getMemberId()); o.setMemberMobile(member == null ? null : member.getMobile()); // 设置订单时间 List orderLogList = orderLogListMap.get(o.getId()); this.setOrderTime(o, orderLogList); // 设置配送商名称 DadaDsp dadaDsp = iDadaDspService.getById(o.getDadaDspId()); o.setDadaDspName(dadaDsp == null ? "" : dadaDsp.getName()); // 设置分佣 List profitsDetails = profitsDetailListMap.get(o.getId()); BigDecimal deliveryFee = BigDecimal.ZERO; if (CollectionUtils.isNotEmpty(profitsDetails)) { for (ProfitsDetail profitsDetail : profitsDetails) { if (UserTypeEnums.DADA_DELIVERY_RAP.getCode().equals(user.getType()) && profitsDetail.getDspId() != null) { deliveryFee = deliveryFee.add(profitsDetail.getCommission()); } } } o.setDeliveryFee(deliveryFee); if (o.getWaimaiDeliveryTime() != null && o.getWaimaiDeliveryTime() != 0) { o.setWaimaiDeliveryDate(new Date(o.getWaimaiDeliveryTime() * 1000)); } // 设置原始订单号 if (o.getDeleted() == 1) { String originalOrderSn = baseMapper.selectOriginalOrderSn1(o.getWaimaiOrderId()); if (originalOrderSn != null) { o.setOriginalOrderSn(originalOrderSn); } } } stopWatch3.stop(); log.info("达达订单列表, 循环耗时: {} ms", stopWatch3.getTotalTimeMillis()); stopWatch1.stop(); log.info("达达订单列表接口, 总耗时: {} ms", stopWatch1.getTotalTimeMillis()); page.setRecords(dadaOrderList); return new PageResult(page); } private void setOrderTime(DadaOrderListDto o, List orderLogList) { if (CollectionUtils.isNotEmpty(orderLogList)) { // 接单时间 List deliveryTimeList = orderLogList.stream().filter(item -> OrderStatusEnum.TO_BE_DELIVERED.getStatus().equals(item.getOrderStatus())).collect(Collectors.toList()); if (deliveryTimeList.size() > 0) { o.setDeliveryTime(deliveryTimeList.get(0).getCreateTime()); } else { o.setDeliveryTime(null); } // 取货时间 List pickUpTimeList = orderLogList.stream().filter(item -> OrderStatusEnum.IN_DELIVERY.getStatus().equals(item.getOrderStatus())).collect(Collectors.toList()); if (pickUpTimeList.size() > 0) { o.setPickUpTime(pickUpTimeList.get(0).getCreateTime()); } // 完成时间 List finishTimeList = orderLogList.stream().filter(item -> OrderStatusEnum.FINISH.getStatus().equals(item.getOrderStatus())).collect(Collectors.toList()); if (finishTimeList.size() > 0) { o.setFinishTime(finishTimeList.get(0).getCreateTime()); } else { o.setFinishTime(null); } // 取消时间 if (o.getDeliveryStatus() == -1) { List cancelTimeList = orderLogList.stream().filter(item -> OrderStatusEnum.CANCEL.getStatus().equals(item.getOrderStatus())).collect(Collectors.toList()); if (cancelTimeList.size() > 0) { o.setCancelTime(cancelTimeList.get(0).getCreateTime()); } } else if (o.getDeliveryStatus() == -2) { List cancelTimeList = orderLogList.stream().filter(item -> OrderStatusEnum.ABNORMAL.getStatus().equals(item.getOrderStatus())).collect(Collectors.toList()); if (cancelTimeList.size() > 0) { o.setCancelTime(cancelTimeList.get(0).getCreateTime()); } } } else { o.setDeliveryTime(null); o.setFinishTime(null); o.setPickUpTime(null); o.setCancelTime(null); } } @Override public List sumDadaByStatus(DadaOrderListQuery orderQuery, SysUser user, List deliveryStatusList) { if (!this.handleDadaStatusSearchCondition(orderQuery, user.getDadaDspId())) { deliveryStatusList.forEach(deliveryStatus -> deliveryStatus.setLabel(deliveryStatus.getLabel() + " " + 0)); return deliveryStatusList; } List systemOrderList = baseMapper.selectDadaCountByStatus(orderQuery); deliveryStatusList.forEach(deliveryStatus -> { long count; if (!DeliveryStatusEnum.FINISH.getStatus().equals(deliveryStatus.getDeliveryStatus())) { // 其它状态 count = systemOrderList.stream().filter(item -> ((item.getWmstatus() == null || item.getWmstatus() != 4) && deliveryStatus.getDeliveryStatus().equals(item.getDeliveryStatus()))).count(); } else { // 平台完成 count = systemOrderList.stream().filter(item -> DeliveryStatusEnum.FINISH.getStatus().equals(item.getDeliveryStatus())).count(); } deliveryStatus.setLabel(deliveryStatus.getLabel() + " " + count); }); return deliveryStatusList; } private boolean handleDadaStatusSearchCondition(DadaOrderListQuery orderQuery, Long dadaDspId) { List merchantIds = Lists.newArrayList(); if (StringUtils.isNotBlank(orderQuery.getMerchantName())) { merchantIds = iMerchantService.list(new QueryWrapper() .like("merchant_name", orderQuery.getMerchantName()) .eq("deleted", 0) .eq(dadaDspId != null, "dada_dsp_id", dadaDspId)) .stream() .map(Merchant::getId) .collect(Collectors.toList()); if (CollectionUtils.isEmpty(merchantIds)) { return false; } orderQuery.setMerchantIds(merchantIds); } if (StringUtils.isNotBlank(orderQuery.getShopName())) { List shopIds = iShopService.list(new QueryWrapper() .in(CollectionUtils.isNotEmpty(merchantIds), "merchant_id", merchantIds) .like("name", orderQuery.getShopName()) .eq("deleted", 0)) .stream() .map(Shop::getId) .collect(Collectors.toList()); if (CollectionUtils.isEmpty(shopIds)) { return false; } orderQuery.setShopIds(shopIds); } return true; } @Override public PageResult queryPageListNew(Page page, SystemOrderDto order, SysUser user, Integer merchantId) { StopWatch stopWatch = new StopWatch(); stopWatch.start(); StopWatch stopWatch1 = new StopWatch(); stopWatch1.start(); boolean result = this.handleListSearchCondition(order, user); stopWatch1.stop(); log.info("列表查询条件处理,耗时: {} ms", stopWatch1.getTotalTimeMillis()); if (!result) { page.setRecords(Lists.newArrayList()); return new PageResult(page); } StopWatch stopWatch3 = new StopWatch(); stopWatch3.start(); List orderList = baseMapper.queryPageListNew(page, order); stopWatch3.stop(); log.info("列表查询,耗时: {} ms", stopWatch3.getTotalTimeMillis()); List orderIds = orderList.stream().map(SystemOrderDto::getId).collect(Collectors.toList()); if (CollectionUtils.isEmpty(orderIds)) { page.setRecords(Lists.newArrayList()); return new PageResult(page); } StopWatch stopWatch2 = new StopWatch(); stopWatch2.start(); List merchantIds = orderList.stream().map(SystemOrderDto::getMerchantId).collect(Collectors.toList()); List shopIds = orderList.stream().map(SystemOrderDto::getShopId).collect(Collectors.toList()); // 获取商户名称 List merchantList = iMerchantService.list(new QueryWrapper() .in("id", merchantIds) .eq("deleted", 0)); Map merchantMap = Optional.ofNullable(merchantList).map(list -> list.stream().collect(Collectors.toMap(Merchant::getId, v -> v, (v1, v2) -> v1))).orElse(new HashMap<>()); // 获取门店名称 List shopList = iShopService.list(new QueryWrapper() .in("id", shopIds) .eq("deleted", 0)); Map shopMap = Optional.ofNullable(shopList).map(list -> list.stream().collect(Collectors.toMap(Shop::getId, v -> v, (v1, v2) -> v1))).orElse(new HashMap<>()); // 获取订单日志 List orderLogList = iOrderLogService.list(new QueryWrapper() .in("order_id", orderIds) .eq("deleted", 0)); Map> orderLogListMap = orderLogList.stream().collect(Collectors.groupingBy(OrderLog::getOrderId)); // 获取分佣 List profitsDetailList = iProfitsDetailService.list(new QueryWrapper() .in("order_id", orderIds) .eq("deleted", 0)); Map> profitsDetailListMap = profitsDetailList.stream().collect(Collectors.groupingBy(ProfitsDetail::getOrderId)); // 获取用户 List memberIds = orderList.stream().map(SystemOrderDto::getMemberId).filter(Objects::nonNull).collect(Collectors.toList()); Map memberMap = new HashMap<>(); if (CollectionUtils.isNotEmpty(memberIds)) { List memberList = iMemberService.list(new QueryWrapper().in("id", memberIds)); memberMap = Optional.of(memberList).map(list -> list.stream().collect(Collectors.toMap(Member::getId, v -> v, (v1, v2) -> v1))).orElse(new HashMap<>()); } // 员工信息 List personnelIds = orderList.stream().map(SystemOrderDto::getPersonnelId).filter(Objects::nonNull).collect(Collectors.toList()); Map personnelMap = new HashMap<>(); if (CollectionUtils.isNotEmpty(personnelIds)) { List personnelList = iPersonnelService.list(new QueryWrapper().in("id", personnelIds)); personnelMap = Optional.of(personnelList).map(list -> list.stream().collect(Collectors.toMap(Personnel::getId, v -> v, (v1, v2) -> v1))).orElse(new HashMap<>()); } // 外卖平台 List orderTypes = orderList.stream().map(SystemOrderDto::getOrderType).collect(Collectors.toList()); List dspWaimaiList = iDspWaimaiService.list(new QueryWrapper().in("type", orderTypes)); Map dspWaimaiMap = Optional.of(dspWaimaiList).map(list -> list.stream().collect(Collectors.toMap(DspWaimai::getType, v -> v, (v1, v2) -> v1))).orElse(new HashMap<>()); // 配送商名称 List dadaDspIds = orderList.stream().map(SystemOrderDto::getDadaDspId).filter(Objects::nonNull).collect(Collectors.toList()); Map dadaDspMap = new HashMap<>(); if (CollectionUtils.isNotEmpty(dadaDspIds)) { List dadaDspList = iDadaDspService.list(new QueryWrapper().in("id", dadaDspIds)); dadaDspMap = Optional.of(dadaDspList).map(list -> list.stream().collect(Collectors.toMap(DadaDsp::getId, v -> v, (v1, v2) -> v1))).orElse(new HashMap<>()); } // 代理商名称 List agentIds = orderList.stream().map(SystemOrderDto::getAgentId).collect(Collectors.toList()); List agentList = iAgentService.list(new QueryWrapper().in("id", agentIds)); Map agentMap = Optional.of(agentList).map(list -> list.stream().collect(Collectors.toMap(Agent::getId, v -> v, (v1, v2) -> v1))).orElse(new HashMap<>()); stopWatch2.stop(); log.info("订单列表查询前置耗时: {} ms", stopWatch2.getTotalTimeMillis()); StopWatch stopWatch4 = new StopWatch(); stopWatch4.start(); for (SystemOrderDto o : orderList) { // 查询所有订单记录 List orderLogs = orderLogListMap.get(o.getId()); if (CollectionUtils.isNotEmpty(orderLogs)) { // 接单时间 List deliveryTimeList = orderLogs.stream().filter(item -> OrderStatusEnum.TO_BE_DELIVERED.getStatus().equals(item.getOrderStatus())).collect(Collectors.toList()); if (deliveryTimeList.size() > 0) { o.setDeliveryTime(deliveryTimeList.get(0).getCreateTime()); } else { o.setDeliveryTime(null); } // 取货时间 List pickUpTimeList = orderLogs.stream().filter(item -> OrderStatusEnum.IN_DELIVERY.getStatus().equals(item.getOrderStatus())).collect(Collectors.toList()); if (pickUpTimeList.size() > 0) { o.setPickUpTime(pickUpTimeList.get(0).getCreateTime()); } // 完成时间 List finishTimeList = orderLogs.stream().filter(item -> OrderStatusEnum.FINISH.getStatus().equals(item.getOrderStatus())).collect(Collectors.toList()); if (finishTimeList.size() > 0) { o.setFinishTime(finishTimeList.get(0).getCreateTime()); } else { o.setFinishTime(null); } // 取消时间 if (o.getDeliveryStatus() == -1) { List cancelTimeList = orderLogs.stream().filter(item -> OrderStatusEnum.CANCEL.getStatus().equals(item.getOrderStatus())).collect(Collectors.toList()); if (cancelTimeList.size() > 0) { o.setCancelTime(cancelTimeList.get(0).getCreateTime()); } } else if (o.getDeliveryStatus() == -2) { List cancelTimeList = orderLogs.stream().filter(item -> OrderStatusEnum.ABNORMAL.getStatus().equals(item.getOrderStatus())).collect(Collectors.toList()); if (cancelTimeList.size() > 0) { o.setCancelTime(cancelTimeList.get(0).getCreateTime()); } } } // 设置门牌号,兼容app改版、老版本 if (StringUtils.isNotBlank(o.getSendStreet()) && StringUtils.isNotBlank(o.getSendAddress()) && !o.getSendAddress().endsWith(o.getSendStreet())) { o.setSendAddress(o.getSendAddress() + o.getSendStreet()); } if (StringUtils.isNotBlank(o.getReceiptStreet()) && StringUtils.isNotBlank(o.getReceiptAddress()) && !o.getReceiptAddress().endsWith(o.getReceiptStreet())) { o.setReceiptAddress(o.getReceiptAddress() + o.getReceiptStreet()); } // 商户名称 Merchant merchant = merchantMap.get(o.getMerchantId()); o.setMerchantName(merchant == null ? null : merchant.getMerchantName()); // 门店名称 Shop shop = shopMap.get(o.getShopId()); o.setShopName(shop == null ? null : shop.getName()); // 用户信息 Member member = memberMap.get(o.getMemberId()); o.setMemberName(member == null ? null : member.getNickname()); o.setMemberMobile(member == null ? null : member.getMobile()); // 员工信息 Personnel personnel = personnelMap.get(o.getPersonnelId()); o.setPersonnelName(personnel == null ? null : personnel.getName()); // 外卖名称 if (o.getWaimaiOrderId() != null) { DspWaimai dspWaimai = dspWaimaiMap.get(o.getOrderType()); o.setDspWaimaiName(dspWaimai == null ? null : dspWaimai.getName()); } else if (o.getPlatformType() != 0) { // 手动发单外卖单 DspWaimai dspWaimai = iDspWaimaiService.selectNameByType(o.getPlatformType()); o.setDspWaimaiName(dspWaimai == null ? null : dspWaimai.getName()); } // 配送商名称 DadaDsp dadaDsp = dadaDspMap.get(o.getDadaDspId()); o.setDadaDspName(dadaDsp == null ? "" : dadaDsp.getName()); // 增加代理商名称 Agent agent = agentMap.get(o.getAgentId()); o.setAgentName(agent == null ? null : agent.getName()); // 查看自己的佣金 List profitsDetails = profitsDetailListMap.get(o.getId()); if (CollectionUtils.isNotEmpty(profitsDetails)) { if (user.getType().equals(UserTypeEnums.AGENT.getCode())) { List profitsDetail = profitsDetails.stream().filter(item -> user.getAgentId().equals(item.getAgentId())).collect(Collectors.toList()); if (profitsDetail.size() > 0) { o.setGetCommission(profitsDetail.get(0).getCommission()); } } else if (user.getType().equals(UserTypeEnums.DSP.getCode())) { List profitsDetail = profitsDetails.stream().filter(item -> user.getDspId().equals(item.getDspId())).collect(Collectors.toList()); if (profitsDetail.size() > 0) { o.setGetCommission(profitsDetail.get(0).getCommission()); } } } if (o.getWaimaiDeliveryTime() != null && o.getWaimaiDeliveryTime() != 0) { o.setWaimaiDeliveryDate(new Date(o.getWaimaiDeliveryTime() * 1000)); } if (o.getDeleted() == 1) { String originalOrderSn = baseMapper.selectOriginalOrderSn1(o.getWaimaiOrderId()); if (originalOrderSn != null) { o.setOriginalOrderSn(originalOrderSn); } } // 手动发单外卖平台名称 if ((o.getWaimaiOrderId() == null) && (o.getPlatformType() != null) && (o.getPlatformType() != 0)) { Integer platformType = o.getPlatformType(); if (platformType == 1) { // 美团 o.setPlatformName("美团"); } else if (platformType == 2) { // 饿了么 o.setPlatformName("饿了么"); } else if (platformType == 3) { // 饿百零售 o.setPlatformName("饿百零售"); } else if (platformType == 5) { // 美团闪购 o.setPlatformName("美团闪购"); } else if (platformType == 6) { // 京东到家 o.setPlatformName("京东到家"); } } } stopWatch4.stop(); log.info("列表循环耗时: {} ms", stopWatch4.getTotalTimeMillis()); page.setRecords(orderList); stopWatch.stop(); log.info("列表查询总耗时: {} ms", stopWatch.getTotalTimeMillis()); return new PageResult(page); } @Override public OrderInfoDto getOrderInfoByOrderId(Long orderId) { return baseMapper.getOrderInfoByOrderId(orderId); } @Override public List getSubsidyList(Page page, SubsidyStatisticsQuery query) { return baseMapper.getSubsidyList(page, query); } @Override public Integer countPersonalOrder(String lastDayTime, Long memberId) { return baseMapper.countPersonalOrder(lastDayTime, memberId); } }