|
@@ -6,6 +6,7 @@ import cn.hutool.core.util.ObjectUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
import cn.hutool.extra.spring.SpringUtil;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.yc.ship.framework.common.enums.UserTypeEnum;
|
|
|
import com.yc.ship.framework.common.lang.Asserts;
|
|
@@ -68,6 +69,7 @@ import com.yc.ship.module.trade.service.otc.OtcTradeOrderService;
|
|
|
import com.yc.ship.module.trade.service.pay.TradeOrderPayService;
|
|
|
import com.yc.ship.module.trade.service.refund.TradeRefundRepositoryService;
|
|
|
import com.yc.ship.module.trade.utils.AgencyAuthUtils;
|
|
|
+import com.yc.ship.module.trade.utils.TradeUUCodeUtils;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.redisson.api.RLock;
|
|
@@ -75,6 +77,7 @@ import org.redisson.api.RedissonClient;
|
|
|
import org.springframework.cache.annotation.Cacheable;
|
|
|
import org.springframework.data.redis.core.StringRedisTemplate;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
import java.math.BigDecimal;
|
|
@@ -89,6 +92,7 @@ import static com.yc.ship.module.trade.enums.ApiConstants.*;
|
|
|
import static com.yc.ship.module.trade.enums.ErrorCodeConstants.ORDER_CHANGE_REFUND_FAIL;
|
|
|
import static com.yc.ship.module.trade.enums.TravelhubDictTypeConstants.*;
|
|
|
import static com.yc.ship.module.trade.service.order.TradeOrderService.CHANGE_ORDER_BIZ_LOCK;
|
|
|
+import static com.yc.ship.module.trade.utils.TradeUUCodeUtils.ORDER_PREFIX;
|
|
|
|
|
|
|
|
|
/**
|
|
@@ -160,6 +164,21 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
|
|
|
@Resource
|
|
|
private AgencyAuthUtils agencyAuthUtils;
|
|
|
|
|
|
+ @Resource
|
|
|
+ private TradeUUCodeUtils tradeUUCodeUtils;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private TradeOrderTotalMapper tradeOrderTotalMapper;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private TradeOrderCountryMapper tradeOrderCountryMapper;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private TradeOrderRoomModelMapper tradeOrderRoomModelMapper;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private TradeVisitorMapper tradeVisitorMapper;
|
|
|
+
|
|
|
|
|
|
public final static String AGENCY_LOGIN_INFO = "agencyLoginInfo";
|
|
|
|
|
@@ -2312,6 +2331,54 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
|
|
|
return orderPayAmountRespVO;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public Long createOtcOrder(LoginUser agencyLoginUser, TradeOrderOtcCreateVO createVO) {
|
|
|
+ long orderId = IdWorker.getId();
|
|
|
+ // 创建订单
|
|
|
+ TradeOrderDO tradeOrderDO = BeanUtils.toBean(createVO, TradeOrderDO.class);
|
|
|
+ tradeOrderDO.setId(orderId);
|
|
|
+ tradeOrderDO.setOrderNo(tradeUUCodeUtils.generateOrderNo(ORDER_PREFIX));
|
|
|
+ tradeOrderDO.setOrderStatus(TradeOrderStatusEnum.INIT.getStatus());
|
|
|
+ tradeOrderDO.setSellMethod(SellMethodEnum.OTC.getType());
|
|
|
+ tradeOrderDO.setStoreId(agencyLoginUser.getStoreId());
|
|
|
+ tradeOrderDO.setVisitorType(1);//团队
|
|
|
+ tradeOrderMapper.insert(tradeOrderDO);
|
|
|
+
|
|
|
+ //创建订单汇总信息
|
|
|
+ TradeOrderTotalVO summary = createVO.getSummary();
|
|
|
+ TradeOrderTotalDO tradeOrderTotalDO = BeanUtils.toBean(summary, TradeOrderTotalDO.class);
|
|
|
+ tradeOrderTotalDO.setOrderId(orderId);
|
|
|
+ tradeOrderTotalMapper.insert(tradeOrderTotalDO);
|
|
|
+
|
|
|
+ //创建订单国籍数据
|
|
|
+ List<TradeOrderCountryReqVO> countryData = createVO.getCountryData();
|
|
|
+ countryData.stream().forEach(item -> {
|
|
|
+ TradeOrderCountryDO countryDO = BeanUtils.toBean(item, TradeOrderCountryDO.class);
|
|
|
+ Long countryId = IdWorker.getId();
|
|
|
+ countryDO.setOrderId(orderId);
|
|
|
+ countryDO.setId(countryId);
|
|
|
+ tradeOrderCountryMapper.insert(countryDO);
|
|
|
+ List<TradeOrderRoomModelReqVO> roomModels = item.getRoomModels();
|
|
|
+ //创建订单房型数据
|
|
|
+ roomModels.stream().forEach(roomModel -> {
|
|
|
+ TradeOrderRoomModelDO roomModelDO = BeanUtils.toBean(roomModel, TradeOrderRoomModelDO.class);
|
|
|
+ roomModelDO.setOrderId(orderId);
|
|
|
+ roomModelDO.setCountryId(countryId);
|
|
|
+ tradeOrderRoomModelMapper.insert(roomModelDO);
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ //创建订单游客数据
|
|
|
+ List<TradeVistorReqVO> visitorList = createVO.getVisitorList();
|
|
|
+ List<TradeVisitorDO> visitorDOS = BeanUtils.toBean(visitorList, TradeVisitorDO.class);
|
|
|
+ visitorDOS.stream().forEach(item -> {
|
|
|
+ item.setOrderId(orderId);
|
|
|
+ });
|
|
|
+ tradeVisitorMapper.insertBatch(visitorDOS);
|
|
|
+ return orderId;
|
|
|
+ }
|
|
|
+
|
|
|
private void markChangeOrder(Long orderId){
|
|
|
String key = String.format(KEY_MARK_CHANGE_ORDER,orderId);
|
|
|
stringRedisTemplate.opsForValue().set(key,orderId.toString(),60, TimeUnit.MINUTES);
|