|
@@ -1,6 +1,7 @@
|
|
|
package com.yc.ship.module.trade.service.order.impl;
|
|
package com.yc.ship.module.trade.service.order.impl;
|
|
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
|
|
+import cn.hutool.core.date.DatePattern;
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
import cn.hutool.core.date.LocalDateTimeUtil;
|
|
import cn.hutool.core.date.LocalDateTimeUtil;
|
|
|
import cn.hutool.core.map.MapUtil;
|
|
import cn.hutool.core.map.MapUtil;
|
|
@@ -46,6 +47,7 @@ import com.yc.ship.module.trade.dal.dataobject.order.*;
|
|
|
import com.yc.ship.module.trade.dal.dataobject.orderjz.OrderJzDO;
|
|
import com.yc.ship.module.trade.dal.dataobject.orderjz.OrderJzDO;
|
|
|
import com.yc.ship.module.trade.dal.mysql.order.TradeDetailMapper;
|
|
import com.yc.ship.module.trade.dal.mysql.order.TradeDetailMapper;
|
|
|
import com.yc.ship.module.trade.dal.mysql.order.TradeOrderMapper;
|
|
import com.yc.ship.module.trade.dal.mysql.order.TradeOrderMapper;
|
|
|
|
|
+import com.yc.ship.module.trade.dal.mysql.order.TradeOrderRoomModelMapper;
|
|
|
import com.yc.ship.module.trade.dal.mysql.order.TradeVisitorMapper;
|
|
import com.yc.ship.module.trade.dal.mysql.order.TradeVisitorMapper;
|
|
|
import com.yc.ship.module.trade.enums.*;
|
|
import com.yc.ship.module.trade.enums.*;
|
|
|
import com.yc.ship.module.trade.framework.annotation.TradeOrderLog;
|
|
import com.yc.ship.module.trade.framework.annotation.TradeOrderLog;
|
|
@@ -74,6 +76,7 @@ import org.springframework.transaction.interceptor.TransactionAspectSupport;
|
|
|
import javax.annotation.Resource;
|
|
import javax.annotation.Resource;
|
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
|
import java.math.RoundingMode;
|
|
import java.math.RoundingMode;
|
|
|
|
|
+import java.time.Duration;
|
|
|
import java.time.LocalDateTime;
|
|
import java.time.LocalDateTime;
|
|
|
import java.util.*;
|
|
import java.util.*;
|
|
|
import java.util.concurrent.atomic.AtomicReference;
|
|
import java.util.concurrent.atomic.AtomicReference;
|
|
@@ -142,7 +145,7 @@ public class TradeOrderServiceImpl implements TradeOrderService {
|
|
|
private ShipApi shipApi;
|
|
private ShipApi shipApi;
|
|
|
|
|
|
|
|
@Resource
|
|
@Resource
|
|
|
- private TradeOrderRoomModelService tradeOrderRoomModelService;
|
|
|
|
|
|
|
+ private TradeOrderRoomModelMapper tradeOrderRoomModelMapper;
|
|
|
|
|
|
|
|
@Resource
|
|
@Resource
|
|
|
private TradeOrderCountryService tradeOrderCountryService;
|
|
private TradeOrderCountryService tradeOrderCountryService;
|
|
@@ -1397,9 +1400,58 @@ public class TradeOrderServiceImpl implements TradeOrderService {
|
|
|
@Override
|
|
@Override
|
|
|
public List<AppMyItineraryVO> getMyItinerary(Long loginUserId, Integer status) {
|
|
public List<AppMyItineraryVO> getMyItinerary(Long loginUserId, Integer status) {
|
|
|
List<AppMyItineraryVO> list = tradeOrderMapper.selectMyItinerary(loginUserId, status);
|
|
List<AppMyItineraryVO> list = tradeOrderMapper.selectMyItinerary(loginUserId, status);
|
|
|
|
|
+ List<Long> orderIds = CollectionUtils.convertList(list, AppMyItineraryVO::getOrderId);
|
|
|
|
|
+ if(CollectionUtils.isAnyEmpty(orderIds)) {
|
|
|
|
|
+ return list;
|
|
|
|
|
+ }
|
|
|
|
|
+ List<AppPersonDescVO> personDescVOS = tradeVisitorMapper.selectPersonDesc(orderIds);
|
|
|
|
|
+ Map<Long, AppPersonDescVO> personDescMap = CollectionUtils.convertMap(personDescVOS, AppPersonDescVO::getOrderId);
|
|
|
|
|
+ List<AppRoomDescVO> roomDescVOS = tradeOrderRoomModelMapper.selectRoomDesc(orderIds);
|
|
|
|
|
+ Map<Long, AppRoomDescVO> roomDescMap = CollectionUtils.convertMap(roomDescVOS, AppRoomDescVO::getOrderId);
|
|
|
|
|
+ list.stream().forEach(item -> {
|
|
|
|
|
+ String statusDesc = formatStatus(status, item.getBoardingTime());
|
|
|
|
|
+ item.setStatusDesc(statusDesc);
|
|
|
|
|
+ MapUtils.findAndThen(personDescMap, item.getOrderId(), personDescVO -> {
|
|
|
|
|
+ item.setPersonDesc(personDescVO.getName() + "等" + personDescVO.getNum() + "人");
|
|
|
|
|
+ });
|
|
|
|
|
+ MapUtils.findAndThen(roomDescMap, item.getOrderId(), roomDescVO -> {
|
|
|
|
|
+ item.setRoomDesc((roomDescVO.getRoomNum() == null ? "" : roomDescVO.getRoomNum()) + roomDescVO.getRoomModelName() + "(" + roomDescVO.getFloor() + "F)" );
|
|
|
|
|
+ });
|
|
|
|
|
+ });
|
|
|
return list;
|
|
return list;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ private String formatStatus(Integer status, LocalDateTime boardingTime) {
|
|
|
|
|
+ String statusDesc = "";
|
|
|
|
|
+ switch (status) {
|
|
|
|
|
+ case 1:
|
|
|
|
|
+ statusDesc += "待出行";
|
|
|
|
|
+ Duration between = LocalDateTimeUtil.between(boardingTime, LocalDateTime.now());
|
|
|
|
|
+ long l = between.toDays();
|
|
|
|
|
+ if (l > 0) {
|
|
|
|
|
+ statusDesc += "(距离登船" + l + "天)";
|
|
|
|
|
+ }else {
|
|
|
|
|
+ long l1 = between.toHours();
|
|
|
|
|
+ if (l1 > 0) {
|
|
|
|
|
+ statusDesc += "(距离登船" + l1 + "小时)";
|
|
|
|
|
+ }else {
|
|
|
|
|
+ long l2 = between.toMinutes();
|
|
|
|
|
+ statusDesc += "(距离登船" + l2 + "分)";
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ break;
|
|
|
|
|
+ case 2:
|
|
|
|
|
+ statusDesc += "进行中";
|
|
|
|
|
+ break;
|
|
|
|
|
+ case 3:
|
|
|
|
|
+ statusDesc += "已完成";
|
|
|
|
|
+ break;
|
|
|
|
|
+ default:
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ return statusDesc;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
|
|
|
private List<TradeDetailPriceDO> buildTradeDetailPrice(TradeOrderDO tradeOrderDO, List<TradeOrderCreateReqDTO.DetailPrice> tradeDetailPriceList, TradeDetailDO tradeDetailDO) {
|
|
private List<TradeDetailPriceDO> buildTradeDetailPrice(TradeOrderDO tradeOrderDO, List<TradeOrderCreateReqDTO.DetailPrice> tradeDetailPriceList, TradeDetailDO tradeDetailDO) {
|
|
|
if (ObjectUtils.equalsAny(tradeOrderDO.getSellMethod(), SellMethodEnum.MINI_APP.getType()) && ObjectUtil.equal(tradeDetailDO.getCateType(), ProductTypeEnum.Hotel.getValue())) {
|
|
if (ObjectUtils.equalsAny(tradeOrderDO.getSellMethod(), SellMethodEnum.MINI_APP.getType()) && ObjectUtil.equal(tradeDetailDO.getCateType(), ProductTypeEnum.Hotel.getValue())) {
|