package com.tour.module.service.impl; import com.alibaba.fastjson.JSONArray; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.google.common.collect.Lists; import com.tour.common.core.domain.entity.SysUser; import com.tour.common.enums.UserTypeEnums; import com.tour.common.exception.CustomException; import com.tour.common.utils.SnCodeUtils; import com.tour.module.domain.Agent; import com.tour.module.domain.Card; import com.tour.module.domain.Contacts; import com.tour.module.domain.dto.OmsOrderDto; import com.tour.module.domain.dto.SystemOrderDto; import com.tour.module.enums.StatusEnum; import com.tour.module.service.IAgentService; import com.tour.module.service.ICardService; import com.tour.module.service.IContactsService; import com.tour.module.vo.*; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import org.apache.commons.lang3.StringUtils; import com.tour.module.mapper.OrderMapper; import com.tour.module.domain.Order; import com.tour.module.service.IOrderService; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.util.*; import java.util.stream.Collectors; /** * 订单Service业务层处理 * * @author zoe * @date 2023-05-23 */ @Service public class OrderServiceImpl extends ServiceImpl implements IOrderService { @Resource ICardService cardService; @Resource IContactsService contactsService; @Resource IAgentService agentService; @Resource IContactsService iContactsService; @Override public List queryList(Order order) { LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); if (order.getMemberId() != null) { lqw.eq(Order::getMemberId, order.getMemberId()); } if (order.getAgentId() != null) { lqw.eq(Order::getAgentId, order.getAgentId()); } if (StringUtils.isNotBlank(order.getCardKey())) { lqw.eq(Order::getCardKey, order.getCardKey()); } if (order.getStatus() != null && order.getStatus() !=10) { lqw.eq(Order::getStatus, order.getStatus()); } if (order.getStatus() != null && order.getStatus() ==10) {//完成和取消 List list = new ArrayList<>(); list.add(3); list.add(-1); lqw.in(Order::getStatus,list); } List orders = this.list(lqw); return orders; } @Override public List queryPageList(SystemOrderDto order, SysUser user) { boolean result = this.handleListSearchCondition(order, user); if (!result) { return Lists.newArrayList(); } List orderList = baseMapper.queryPageList(order); if (CollectionUtils.isEmpty(orderList)) { return Lists.newArrayList(); } // 代理商名称 List agentIds = orderList.stream().map(OmsOrderDto::getAgentId).collect(Collectors.toList()); List agentList = agentService.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<>()); for (OmsOrderDto o : orderList) { // 增加代理商名称 Agent agent = agentMap.get(o.getAgentId()); o.setAgentName(agent == null ? null : agent.getAgentName()); } return orderList; } private boolean handleListSearchCondition(SystemOrderDto order, SysUser user) { boolean result = true; if(UserTypeEnums.AGENT.getCode().equals(user.getType()) && user.getAgentId() != null) { List agentIds = agentService.listAgent(user.getAgentId()); if (com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isEmpty(agentIds)) { result = false; } order.setAgentIds(agentIds); } if (order.getAId() != null) { List aIds = agentService.listAgent(order.getAId()); if (com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isEmpty(order.getAgentIds())) { order.setAgentIds(aIds); } else { order.getAgentIds().retainAll(aIds); } if (com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isEmpty(order.getAgentIds())) { result = false; } } return result; } @Override public Long addOrder(OrderCreateVo orderVo) { Card card = cardService.getOne(new QueryWrapper().eq("card_key", orderVo.getCardKey()).eq("status", 0)); if(card==null){ throw new CustomException("卡密无效"); } //会员卡和旅游卡的区别 会员卡要判断是否在有效期内 if("1".equals(card.getType()) &&card.getValidEndTime().getTime() array = JSONArray.parseArray(travelers,Contacts.class); String travelName = ""; String travelIds= ""; for(Contacts item:array){ Contacts contacts = new Contacts(); contacts.setContactName(item.getContactName()); contacts.setMemberId(orderVo.getMemberId()); List list =contactsService.queryList(contacts); if(CollectionUtils.isEmpty(list)){ contactsService.save(item); }else{ item.setId(list.get(0).getId()); contactsService.updateById(item); } travelName += item.getContactName()+","; travelIds += item.getId()+","; } Order order = this.getById(orderVo.getOrderId()); order.setTravelers(travelName.substring(0,travelName.length()-1)); order.setTravelerIds(travelIds.substring(0,travelIds.length()-1)); boolean result = this.updateById(order); return result; } @Override public String getQrCode(Long orderId) { Order order = this.getById(orderId); Agent agent = agentService.getById(order.getAgentId()); return agent.getQrCode(); } @Override public Boolean subTrip(OrderTravelVo orderVo) { Order order = new Order(); order.setOrderId(orderVo.getOrderId()); order.setTravelDetail(orderVo.getTravelDetail()); return this.updateById(order); } @Override public OrderDetailVo getOrderDetail(Long orderId) { OrderDetailVo vo =baseMapper.getOrderDetail(orderId); String travelerIds = vo.getTravelerIds(); List ids = Arrays.asList(travelerIds.split(",")); List contactsList = iContactsService.list(new QueryWrapper().in("id", ids)); vo.setContactsList(contactsList); return vo; } }