12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454 |
- 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<OrderMapper, Order> 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<Order> queryList(Order order, SysUser user, Integer merchantId) {
- List<Integer> 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<Order> 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<Long> agentIds = new ArrayList<>();
- List<Long> 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<SystemOrderDto> lists = baseMapper.queryPageList(page, order, agentIds, aIds);
- for (SystemOrderDto o : lists) {
- // 查询所有订单记录
- List<OrderLog> orderLogList = iOrderLogService.getCreateTime(o.getId());
- // 接单时间
- List<OrderLog> 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<OrderLog> 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<OrderLog> 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<OrderLog> 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<OrderLog> 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<ProfitsDetail> profitsDetailList = iProfitsDetailService.getByCommissionId(o.getId());
- if (user.getType().equals(UserTypeEnums.AGENT.getCode())) {
- // List<ProfitsDetail> profitsDetail = iProfitsDetailService.getByCommissionId(user.getAgentId(),o.getId(),2);
- List<ProfitsDetail> 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> profitsDetail = iProfitsDetailService.getByCommissionId(user.getDspId(),o.getId(),1);
- List<ProfitsDetail> 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<Long> merchantIds = iMerchantService.list(new QueryWrapper<Merchant>()
- .like("merchant_name", order.getMerchantName())
- .eq("deleted", 0))
- .stream()
- .map(Merchant::getId)
- .collect(Collectors.toList());*/
- List<Long> 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<Long> agentIds = iAgentService.listAgent(user.getAgentId());
- if (CollectionUtils.isEmpty(agentIds)) {
- result = false;
- }
- order.setAgentIds(agentIds);
- }
- if (order.getAId() != null) {
- List<Long> 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<Long> memberIds = iMemberService.list(new QueryWrapper<Member>()
- // .like("mobile", order.getMemberMobile())
- // .eq("deleted", 0))
- // .stream()
- // .map(Member::getId)
- // .collect(Collectors.toList());
- // 查询出用户条件的id
- List<Long> memberIds = iMemberService.selectIdByName(order);
- if (CollectionUtils.isEmpty(memberIds)) {
- result = false;
- }
- order.setMemberIds(memberIds);
- }
- if (StringUtils.isNotEmpty(order.getMemberName())) {
- // List<Long> memberIds = iMemberService.list(new QueryWrapper<Member>()
- // .like("nickname", order.getMemberName())
- // .eq("deleted", 0))
- // .stream()
- // .map(Member::getId)
- // .collect(Collectors.toList());
- // 查询出用户条件的id
- List<Long> 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<Long> personnelIds = iPersonnelService.list(new QueryWrapper<Personnel>()
- // .like("name", order.getPersonnelName())
- // .eq("deleted", 0))
- // .stream()
- // .map(Personnel::getId)
- // .collect(Collectors.toList());
- // 查询出员工名称条件的id
- List<Long> personnelIds = iPersonnelService.selectIdByName(order.getPersonnelName());
- if (CollectionUtils.isEmpty(personnelIds)) {
- result = false;
- }
- order.setPersonnelIds(personnelIds);
- }
- // 新增订单门店查询按钮
- if (StringUtils.isNotEmpty(order.getShopName())) {
- List<Shop> shopList = iShopService.list(new QueryWrapper<Shop>().eq("deleted", 0)
- .eq("status", 1).like("name", order.getShopName()));
- List<Long> shopIds = shopList.stream().map(Shop::getId).collect(Collectors.toList());
- if (CollectionUtils.isEmpty(shopIds)) {
- result = false;
- }
- order.setShopIds(shopIds);
- }
- return result;
- }
- @Override
- public List<OrderExportDto> selectExportOrder(SystemOrderDto order, SysUser user, Integer merchantId) {
- List<Long> agentIds = new ArrayList<>();
- List<Long> 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<OrderExportDto> list = baseMapper.selectExportOrder(order, agentIds, aIds);
- list.forEach(dto -> {
- if (dto.getWaimaiOrderId() != null && dto.getOrderTime() != null) {
- dto.setCreateTime(dto.getOrderTime());
- }
- // 完成时间
- // List<OrderLog> 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<OrderExportDto> list) {
- // ExcelUtil<OrderExportDto> util = new ExcelUtil<OrderExportDto>(OrderExportDto.class);
- //
- // if (list.size() > 60000) {
- // int n = 60000;
- // int t = 1;
- // for (int i = 0; i < list.size(); i += n) {
- // List<OrderExportDto> dtos = list.stream().skip(i).limit(n).collect(Collectors.toList());
- // return util.exportExcel(dtos, "配送订单统计" + t++);
- // }
- // }else {
- // return util.exportExcel(list, "配送订单统计" );
- // }
- //
- // return Result.error("导出失败!");
- // List<OrderExportDto> dtos = new ArrayList<OrderExportDto>();
- // 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<OrderDetailDto> 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<OrderDetailDto> findOneKeyList(Long loginId, Integer status, String searchKey, Integer waimaiId, Integer shopId, List<Long> 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<Order> findList(List<Long> 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<Long> loginId, Integer orderId) {
- return baseMapper.getDetail(loginId, orderId);
- }
- @Override
- public Order getDetailByShopId(List<Integer> shopIds, Integer orderId) {
- return baseMapper.getDetailByShopId(shopIds, orderId);
- }
- @Override
- public Integer getOrderNum(List<Long> shopIds, String startDate) {
- return baseMapper.getOrderNum(shopIds, startDate);
- }
- @Override
- public BigDecimal getOrderAmount(List<Long> shopIds, String startDate) {
- return baseMapper.getOrderAmount(shopIds, startDate);
- }
- @Override
- public List<Order> findListByStatus() {
- return baseMapper.selectList(new QueryWrapper<Order>().eq("delivery_status", DeliveryStatusEnum.ORDERS_TO_BE_RECEIVED.status).eq("deleted", IsDeleteEnum.NORMAL.status));
- }
- @Override
- public List<Order> queryTimeOutOrder(Integer time) {
- return baseMapper.queryTimeOutOrder(time);
- }
- @Override
- public List<Order> sumOrder(Long loginId, Integer status, Integer deliveryId, List<Integer> 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<Order> getByStatus() {
- return baseMapper.getByStatus();
- }
- /**
- * 通过状态计算数量
- *
- * @param order 1待接单 2取货中 3配送中 4平台完成
- * @return
- */
- @Override
- public List<SystemOrderDto.DeliveryStatus> sumByStatus(SystemOrderDto order, SysUser user, List<SystemOrderDto.DeliveryStatus> statusList) {
- List<Integer> agentIds = new ArrayList<>();
- List<Long> 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<SystemOrderDto> 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<SystemOrderDto.DeliveryStatus> sumByStatusNew(SystemOrderDto order, SysUser user, List<SystemOrderDto.DeliveryStatus> 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<SystemOrderDto> 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<WaimaiOrderDetail> productInfo(Integer waimaiOrderId) {
- // List<WaimaiOrderDetail> list = iWaimaiOrderDetailService.list(new QueryWrapper<WaimaiOrderDetail>().eq("deleted",0)
- // .eq("waimai_order_id",waimaiOrderId));
- List<WaimaiOrderDetail> list = iWaimaiOrderDetailService.selectDetailList(waimaiOrderId);
- return list;
- }
- @Override
- public void autofinish() {
- baseMapper.autofinish();
- }
- @Override
- public List<OrderDelivery> getDeliveryInfo(String orderSn) {
- return iOrderDeliveryService.getDeliveryInfo(orderSn);
- }
- @Override
- public BigDecimal totalConsume(List<Long> 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<Order> 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<OrderListDto> getOrderList(OrderListRequest request, IPage<OrderListDto> pageArt) {
- return baseMapper.getOrderList(request, pageArt);
- }
- @Override
- public List<OrderListDto> getOrderListByShopIdsAndMemberIds(List<Long> 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<Order> 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<Order> 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<OrderTip> orderTips = iOrderTipService.list(new QueryWrapper<OrderTip>().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<ProfitsDetail> 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<ProfitsDetail>().eq("order_id", order.getId()));
- }
- // 订单状态变为取消
- order.setDeliveryStatus(OrderStatusEnum.CANCEL.getStatus());
- }
- // 如果是隔天取消,不变
- baseMapper.updateById(order);
- return true;
- }
- public void refundTip(List<OrderTip> 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<Member>().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<Order>().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<Member>().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<Payment>().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<DadaOrderListDto> dadaOrderList = baseMapper.queryDadaPageList(page, orderQuery);
- stopWatch5.stop();
- log.info("达达订单列表查询耗时: {} ms", stopWatch5.getTotalTimeMillis());
- List<Long> 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<Long> dadaMerchantIds = dadaOrderList.stream().map(DadaOrderListDto::getMerchantId).collect(Collectors.toList());
- List<Long> dadaShopIds = dadaOrderList.stream().map(DadaOrderListDto::getShopId).collect(Collectors.toList());
- // 获取商户名称
- List<Merchant> merchantList = iMerchantService.list(new QueryWrapper<Merchant>()
- .in("id", dadaMerchantIds)
- .eq("deleted", 0));
- Map<Long, Merchant> merchantMap = Optional.ofNullable(merchantList).map(list -> list.stream().collect(Collectors.toMap(Merchant::getId, v -> v, (v1, v2) -> v1))).orElse(new HashMap<>());
- // 获取门店名称
- List<Shop> shopList = iShopService.list(new QueryWrapper<Shop>()
- .in("id", dadaShopIds)
- .eq("deleted", 0));
- Map<Long, Shop> shopMap = Optional.ofNullable(shopList).map(list -> list.stream().collect(Collectors.toMap(Shop::getId, v -> v, (v1, v2) -> v1))).orElse(new HashMap<>());
- // 获取订单运费包
- List<OrderFreight> orderFreightList = iOrderFreightService.list(new QueryWrapper<OrderFreight>()
- .in("order_id", dadaOrderIds)
- .eq("deleted", 0));
- List<Long> freightPackageIds = orderFreightList.stream().map(OrderFreight::getFreightPackageId).distinct().collect(Collectors.toList());
- Map<Long, OrderFreight> orderFreightMap = Optional.of(orderFreightList).map(list -> list.stream().collect(Collectors.toMap(OrderFreight::getOrderId, v -> v, (v1, v2) -> v1))).orElse(new HashMap<>());
- // 获取运费包名称
- Map<Long, PackageFreight> packageFreightMap = new HashMap<>();
- if (CollectionUtils.isNotEmpty(freightPackageIds)) {
- List<PackageFreight> packageFreightList = iPackageFreightService.list(new QueryWrapper<PackageFreight>()
- .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<OrderLog> dadaOrderLogList = iOrderLogService.list(new QueryWrapper<OrderLog>()
- .in("order_id", dadaOrderIds)
- .eq("deleted", 0));
- Map<Long, List<OrderLog>> orderLogListMap = dadaOrderLogList.stream().collect(Collectors.groupingBy(OrderLog::getOrderId));
- // 获取分佣
- List<ProfitsDetail> profitsDetailList = iProfitsDetailService.list(new QueryWrapper<ProfitsDetail>()
- .in("order_id", dadaOrderIds)
- .eq("deleted", 0));
- Map<Long, List<ProfitsDetail>> profitsDetailListMap = profitsDetailList.stream().collect(Collectors.groupingBy(ProfitsDetail::getOrderId));
- // 获取用户
- List<Long> memberIds = dadaOrderList.stream().map(DadaOrderListDto::getMemberId).collect(Collectors.toList());
- List<Member> memberList = iMemberService.list(new QueryWrapper<Member>().in("id", memberIds));
- Map<Long, Member> 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<OrderLog> orderLogList = orderLogListMap.get(o.getId());
- this.setOrderTime(o, orderLogList);
- // 设置配送商名称
- DadaDsp dadaDsp = iDadaDspService.getById(o.getDadaDspId());
- o.setDadaDspName(dadaDsp == null ? "" : dadaDsp.getName());
- // 设置分佣
- List<ProfitsDetail> 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<OrderLog> orderLogList) {
- if (CollectionUtils.isNotEmpty(orderLogList)) {
- // 接单时间
- List<OrderLog> 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<OrderLog> 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<OrderLog> 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<OrderLog> 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<OrderLog> 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<SystemOrderDto.DeliveryStatus> sumDadaByStatus(DadaOrderListQuery orderQuery, SysUser user, List<SystemOrderDto.DeliveryStatus> deliveryStatusList) {
- if (!this.handleDadaStatusSearchCondition(orderQuery, user.getDadaDspId())) {
- deliveryStatusList.forEach(deliveryStatus -> deliveryStatus.setLabel(deliveryStatus.getLabel() + " " + 0));
- return deliveryStatusList;
- }
- List<SystemOrderDto> 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<Long> merchantIds = Lists.newArrayList();
- if (StringUtils.isNotBlank(orderQuery.getMerchantName())) {
- merchantIds = iMerchantService.list(new QueryWrapper<Merchant>()
- .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<Long> shopIds = iShopService.list(new QueryWrapper<Shop>()
- .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<SystemOrderDto> orderList = baseMapper.queryPageListNew(page, order);
- stopWatch3.stop();
- log.info("列表查询,耗时: {} ms", stopWatch3.getTotalTimeMillis());
- List<Long> 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<Long> merchantIds = orderList.stream().map(SystemOrderDto::getMerchantId).collect(Collectors.toList());
- List<Long> shopIds = orderList.stream().map(SystemOrderDto::getShopId).collect(Collectors.toList());
- // 获取商户名称
- List<Merchant> merchantList = iMerchantService.list(new QueryWrapper<Merchant>()
- .in("id", merchantIds)
- .eq("deleted", 0));
- Map<Long, Merchant> merchantMap = Optional.ofNullable(merchantList).map(list -> list.stream().collect(Collectors.toMap(Merchant::getId, v -> v, (v1, v2) -> v1))).orElse(new HashMap<>());
- // 获取门店名称
- List<Shop> shopList = iShopService.list(new QueryWrapper<Shop>()
- .in("id", shopIds)
- .eq("deleted", 0));
- Map<Long, Shop> shopMap = Optional.ofNullable(shopList).map(list -> list.stream().collect(Collectors.toMap(Shop::getId, v -> v, (v1, v2) -> v1))).orElse(new HashMap<>());
- // 获取订单日志
- List<OrderLog> orderLogList = iOrderLogService.list(new QueryWrapper<OrderLog>()
- .in("order_id", orderIds)
- .eq("deleted", 0));
- Map<Long, List<OrderLog>> orderLogListMap = orderLogList.stream().collect(Collectors.groupingBy(OrderLog::getOrderId));
- // 获取分佣
- List<ProfitsDetail> profitsDetailList = iProfitsDetailService.list(new QueryWrapper<ProfitsDetail>()
- .in("order_id", orderIds)
- .eq("deleted", 0));
- Map<Long, List<ProfitsDetail>> profitsDetailListMap = profitsDetailList.stream().collect(Collectors.groupingBy(ProfitsDetail::getOrderId));
- // 获取用户
- List<Long> memberIds = orderList.stream().map(SystemOrderDto::getMemberId).filter(Objects::nonNull).collect(Collectors.toList());
- Map<Long, Member> memberMap = new HashMap<>();
- if (CollectionUtils.isNotEmpty(memberIds)) {
- List<Member> memberList = iMemberService.list(new QueryWrapper<Member>().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<Long> personnelIds = orderList.stream().map(SystemOrderDto::getPersonnelId).filter(Objects::nonNull).collect(Collectors.toList());
- Map<Long, Personnel> personnelMap = new HashMap<>();
- if (CollectionUtils.isNotEmpty(personnelIds)) {
- List<Personnel> personnelList = iPersonnelService.list(new QueryWrapper<Personnel>().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<Integer> orderTypes = orderList.stream().map(SystemOrderDto::getOrderType).collect(Collectors.toList());
- List<DspWaimai> dspWaimaiList = iDspWaimaiService.list(new QueryWrapper<DspWaimai>().in("type", orderTypes));
- Map<Integer, DspWaimai> dspWaimaiMap = Optional.of(dspWaimaiList).map(list -> list.stream().collect(Collectors.toMap(DspWaimai::getType, v -> v, (v1, v2) -> v1))).orElse(new HashMap<>());
- // 配送商名称
- List<Long> dadaDspIds = orderList.stream().map(SystemOrderDto::getDadaDspId).filter(Objects::nonNull).collect(Collectors.toList());
- Map<Long, DadaDsp> dadaDspMap = new HashMap<>();
- if (CollectionUtils.isNotEmpty(dadaDspIds)) {
- List<DadaDsp> dadaDspList = iDadaDspService.list(new QueryWrapper<DadaDsp>().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<Long> agentIds = orderList.stream().map(SystemOrderDto::getAgentId).collect(Collectors.toList());
- List<Agent> agentList = iAgentService.list(new QueryWrapper<Agent>().in("id", agentIds));
- Map<Long, Agent> 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<OrderLog> orderLogs = orderLogListMap.get(o.getId());
- if (CollectionUtils.isNotEmpty(orderLogs)) {
- // 接单时间
- List<OrderLog> 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<OrderLog> 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<OrderLog> 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<OrderLog> 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<OrderLog> 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<ProfitsDetail> profitsDetails = profitsDetailListMap.get(o.getId());
- if (CollectionUtils.isNotEmpty(profitsDetails)) {
- if (user.getType().equals(UserTypeEnums.AGENT.getCode())) {
- List<ProfitsDetail> 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> 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<SubsidyStatisticsDto> getSubsidyList(Page page, SubsidyStatisticsQuery query) {
- return baseMapper.getSubsidyList(page, query);
- }
- @Override
- public Integer countPersonalOrder(String lastDayTime, Long memberId) {
- return baseMapper.countPersonalOrder(lastDayTime, memberId);
- }
- }
|