|
|
@@ -1,14 +1,26 @@
|
|
|
package com.yc.ship.module.trade.service.otc.impl;
|
|
|
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
import com.alibaba.excel.util.DateUtils;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
|
|
+import com.yc.ship.framework.common.lang.Asserts;
|
|
|
import com.yc.ship.framework.common.pojo.CommonResult;
|
|
|
import com.yc.ship.framework.common.pojo.PageResult;
|
|
|
import com.yc.ship.framework.common.util.object.BeanUtils;
|
|
|
import com.yc.ship.framework.security.core.LoginUser;
|
|
|
import com.yc.ship.module.infra.api.config.ConfigApi;
|
|
|
+import com.yc.ship.module.ota.api.OtaDistributorApi;
|
|
|
+import com.yc.ship.module.ota.api.dto.DistributorRespDTO;
|
|
|
import com.yc.ship.module.product.api.ProductApi;
|
|
|
+import com.yc.ship.module.product.api.VoyageApi;
|
|
|
import com.yc.ship.module.product.api.dto.VoyageRespDTO;
|
|
|
+import com.yc.ship.module.product.dal.dataobject.voyage.VoyageDO;
|
|
|
+import com.yc.ship.module.product.framework.lock.ProductRedisKeyConstants;
|
|
|
+import com.yc.ship.module.product.service.voyage.VoyageService;
|
|
|
+import com.yc.ship.module.resource.api.route.RouteApi;
|
|
|
+import com.yc.ship.module.resource.api.route.dto.RouteRespDTO;
|
|
|
+import com.yc.ship.module.resource.api.ship.ShipApi;
|
|
|
+import com.yc.ship.module.resource.api.ship.dto.ShipRespDTO;
|
|
|
import com.yc.ship.module.trade.api.dto.TradeOrderRespDTO;
|
|
|
import com.yc.ship.module.trade.controller.admin.order.vo.order.*;
|
|
|
import com.yc.ship.module.trade.controller.app.otc.vo.AppTradeOrderPageReqVO;
|
|
|
@@ -20,13 +32,18 @@ import com.yc.ship.module.trade.dal.mysql.order.TradeOrderRoomModelMapper;
|
|
|
import com.yc.ship.module.trade.dal.mysql.order.TradeOrderTotalMapper;
|
|
|
import com.yc.ship.module.trade.enums.PayAccountTypeEnum;
|
|
|
import com.yc.ship.module.trade.enums.SellMethodEnum;
|
|
|
+import com.yc.ship.module.trade.enums.TradeOrderOperateTypeEnum;
|
|
|
+import com.yc.ship.module.trade.framework.annotation.TradeOrderLog;
|
|
|
import com.yc.ship.module.trade.service.order.TradeOrderService;
|
|
|
import com.yc.ship.module.trade.service.otc.AppOtcTradeOrderService;
|
|
|
import com.yc.ship.module.trade.service.otc.OtcTradeOrderService;
|
|
|
import com.yc.ship.module.trade.service.pay.TradeOrderPayService;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.jetbrains.annotations.NotNull;
|
|
|
+import org.redisson.api.RLock;
|
|
|
+import org.redisson.api.RedissonClient;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
import java.math.BigDecimal;
|
|
|
@@ -35,6 +52,7 @@ import java.util.ArrayList;
|
|
|
import java.util.Collections;
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
import static com.yc.ship.module.trade.enums.ErrorCodeConstants.ORDER_PAY_TENAND_FAIL;
|
|
|
|
|
|
@@ -65,163 +83,183 @@ public class AppOtcTradeOrderServiceImpl implements AppOtcTradeOrderService {
|
|
|
@Resource
|
|
|
private TradeOrderRoomModelMapper tradeOrderRoomModelMapper;
|
|
|
|
|
|
+ @Resource
|
|
|
+ private OtaDistributorApi otaDistributorApi;
|
|
|
|
|
|
- @Override
|
|
|
- public CommonResult<OtcTradeOrderCreateRespVO> miniAppCreateOrder(LoginUser loginUser, MiniTradeOrderCreateReqVO createVO) {
|
|
|
- ShipTradeOrderCreateReqVO shipTradeOrderCreateReqVO = BeanUtils.toBean(createVO, ShipTradeOrderCreateReqVO.class);
|
|
|
- shipTradeOrderCreateReqVO.setGroupNo(createVO.getGroupNo());
|
|
|
- shipTradeOrderCreateReqVO.setConfirmType(0);
|
|
|
- shipTradeOrderCreateReqVO.setAmount(createVO.getSummary().getOrderMoney());
|
|
|
- shipTradeOrderCreateReqVO.setPayAmount(createVO.getSummary().getOrderMoney());
|
|
|
- shipTradeOrderCreateReqVO.setRealMoney(createVO.getSummary().getRealMoney());
|
|
|
- shipTradeOrderCreateReqVO.setOtherMoney(createVO.getSummary().getOtherMoney());
|
|
|
- shipTradeOrderCreateReqVO.setDiscountId(createVO.getSummary().getDiscountId());
|
|
|
- if (createVO.getSummary().getRealOrderMoney() != null) {
|
|
|
- shipTradeOrderCreateReqVO.setPayAmount(createVO.getSummary().getRealOrderMoney());
|
|
|
- }
|
|
|
- ShipTradeOrderCreateReqVO.OrderUser orderUser = new ShipTradeOrderCreateReqVO.OrderUser();
|
|
|
- orderUser.setContactName(createVO.getLinkMan());
|
|
|
- orderUser.setMobile(createVO.getLinkMobile());
|
|
|
- orderUser.setEmail(createVO.getLinkEmail());
|
|
|
- shipTradeOrderCreateReqVO.setOrderUser(orderUser);
|
|
|
- shipTradeOrderCreateReqVO.setRemark(createVO.getRemark());
|
|
|
- shipTradeOrderCreateReqVO.setIsYd(createVO.getIsYd());
|
|
|
+ @Resource
|
|
|
+ private RouteApi routeApi;
|
|
|
|
|
|
- shipTradeOrderCreateReqVO.setTravelDate(createVO.getBoardingTime());
|
|
|
- VoyageRespDTO voyage = productApi.getVoyage(createVO.getVoyageId());
|
|
|
- String date = DateUtils.format(new Date(), "yyyyMMddmmss");
|
|
|
- String orderNo = "MINI" + "-" + voyage.getCode() + "-" + date;
|
|
|
- shipTradeOrderCreateReqVO.setOrderNo(orderNo);
|
|
|
+ @Resource
|
|
|
+ private ShipApi shipApi;
|
|
|
|
|
|
- ShipTradeOrderCreateReqVO.OrderProperty orderProperty = new ShipTradeOrderCreateReqVO.OrderProperty();
|
|
|
- orderProperty.setSellMethod(SellMethodEnum.OTC.getType());
|
|
|
- orderProperty.setSourceId(createVO.getUserId());
|
|
|
- orderProperty.setMemberId(loginUser.getId().toString());
|
|
|
- orderProperty.setSourceName("小程序用户");
|
|
|
- orderProperty.setSellMethod(SellMethodEnum.MINI_APP.getType());
|
|
|
+ @Resource
|
|
|
+ private RedissonClient redissonClient;
|
|
|
|
|
|
- shipTradeOrderCreateReqVO.setOrderProperty(orderProperty);
|
|
|
|
|
|
- ShipTradeOrderCreateReqVO.OrderItem orderItem = new ShipTradeOrderCreateReqVO.OrderItem();
|
|
|
- List<ShipTradeOrderCreateReqVO.OrderDetail> detailList = new ArrayList<>();
|
|
|
- ShipTradeOrderCreateReqVO.OrderDetail orderDetail = new ShipTradeOrderCreateReqVO.OrderDetail();
|
|
|
- List<ShipTradeOrderCreateReqVO.Visitor> visitorList = new ArrayList<>();
|
|
|
- for (TradeVistorReqVO tradeVistorReqVO : createVO.getTourist()) {
|
|
|
- ShipTradeOrderCreateReqVO.Visitor visitor = getVisitor1(tradeVistorReqVO);
|
|
|
- visitorList.add(visitor);
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.ORDER_CREATE)
|
|
|
+ public CommonResult<OtcTradeOrderCreateRespVO> miniAppCreateOrder(LoginUser loginUser, MiniTradeOrderCreateReqVO miniTradeOrderCreateReqVO) {
|
|
|
+ TradeOrderOtcCreateVO createVO = BeanUtils.toBean(miniTradeOrderCreateReqVO, TradeOrderOtcCreateVO.class);
|
|
|
+ Long distributorId = createVO.getDistributorId();
|
|
|
+ if(distributorId != null) {
|
|
|
+ DistributorRespDTO distributor = otaDistributorApi.getDistributorById(distributorId);
|
|
|
+ if(distributor!=null) {
|
|
|
+ createVO.setCustomerName(distributor.getName());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ VoyageRespDTO voyage = productApi.getVoyage(createVO.getVoyageId());
|
|
|
+ if(voyage != null) {
|
|
|
+ createVO.setBoardingTime(com.yc.ship.framework.common.util.date.DateUtils.of(voyage.getBoardingTime()));
|
|
|
+ createVO.setLeaveTime(com.yc.ship.framework.common.util.date.DateUtils.of(voyage.getLeaveTime()));
|
|
|
+ }
|
|
|
+ createVO.setMoveOrder(false);
|
|
|
+ createVO.setCurrency("CNY");
|
|
|
+ createVO.setIsYd(0);
|
|
|
+ RouteRespDTO routeRespDTO = routeApi.queryRouteById(voyage.getRouteId());
|
|
|
+ ShipRespDTO ship = shipApi.queryShip(createVO.getShipId());
|
|
|
+ int maxOrderNo = tradeOrderService.getMaxOrderNo(createVO.getVoyageId());
|
|
|
+ String date = DateUtils.format(voyage.getBoardingTime(), "yyyyMMdd");
|
|
|
+ String code = "YC";
|
|
|
+ if (routeRespDTO != null && routeRespDTO.getDirection() == 2) {
|
|
|
+ code = "CY";
|
|
|
+ }
|
|
|
+ String orderNo;
|
|
|
+ if (ship.getCode() == null) {
|
|
|
+ orderNo = date + "-" + voyage.getCode() + "-" + (maxOrderNo + 1);
|
|
|
+ } else {
|
|
|
+ orderNo = ship.getCode() + "-" + date + "-" + code + "-" + (maxOrderNo + 1);
|
|
|
}
|
|
|
- orderDetail.setVisitorList(visitorList);
|
|
|
- orderDetail.setCount(visitorList.size());
|
|
|
|
|
|
- BigDecimal spuMoney = new BigDecimal(0);
|
|
|
- for (TradeSpuReqVO tradeSpuReqVO : createVO.getSpuList()) {
|
|
|
- ShipTradeOrderCreateReqVO.OrderDetail orderDetail1 = new ShipTradeOrderCreateReqVO.OrderDetail();
|
|
|
- //0 游船产品 1 附加产品 2:赠票
|
|
|
- if (tradeSpuReqVO.getProductId() != null && !tradeSpuReqVO.getTourist().isEmpty()) {
|
|
|
- orderDetail1.setProductType(1);
|
|
|
- } else if (tradeSpuReqVO.getProductId() != null && tradeSpuReqVO.getRequired() != null && tradeSpuReqVO.getRequired() == 1) {
|
|
|
- orderDetail1.setProductType(2);
|
|
|
- } else {
|
|
|
- if (tradeSpuReqVO.getProductId() != null) {
|
|
|
- //有产品ID没有游客信息跳过
|
|
|
+ //现在给整个订单号的加锁
|
|
|
+ String lockKey = String.format(ProductRedisKeyConstants.ORDER_REDIS_KEY_PREFIX, orderNo);
|
|
|
+ RLock lock = redissonClient.getLock(lockKey);
|
|
|
+
|
|
|
+ try {
|
|
|
+ lock.lock(60, TimeUnit.SECONDS);
|
|
|
+ TradeOrderTotalVO summary = createVO.getSummary();
|
|
|
+ BigDecimal realAmount = summary.getRealMoney();
|
|
|
+ BigDecimal orderMoney = summary.getOrderMoney();
|
|
|
+ Long discountId = summary.getDiscountId();
|
|
|
+ BigDecimal realOrderMoney = summary.getRealOrderMoney();
|
|
|
+ BigDecimal otherMoney = summary.getOtherMoney();
|
|
|
+ ShipTradeOrderCreateReqVO shipTradeOrderCreateReqVO = BeanUtils.toBean(createVO, ShipTradeOrderCreateReqVO.class);
|
|
|
+ shipTradeOrderCreateReqVO.setMoveOrder(false);
|
|
|
+ shipTradeOrderCreateReqVO.setConfirmType(0);
|
|
|
+ shipTradeOrderCreateReqVO.setAmount(orderMoney);
|
|
|
+ shipTradeOrderCreateReqVO.setPayAmount(realAmount);
|
|
|
+ if (realOrderMoney != null) {
|
|
|
+ shipTradeOrderCreateReqVO.setPayAmount(realOrderMoney);
|
|
|
+ }
|
|
|
+ shipTradeOrderCreateReqVO.setRealMoney(realAmount);
|
|
|
+ shipTradeOrderCreateReqVO.setIsRead(0);
|
|
|
+ shipTradeOrderCreateReqVO.setOrderSort(maxOrderNo + 1);
|
|
|
+ shipTradeOrderCreateReqVO.setOtherMoney(otherMoney);
|
|
|
+ ShipTradeOrderCreateReqVO.OrderUser orderUser = new ShipTradeOrderCreateReqVO.OrderUser();
|
|
|
+ orderUser.setContactName(createVO.getLinkMan());
|
|
|
+ orderUser.setMobile(createVO.getLinkMobile());
|
|
|
+ orderUser.setEmail(createVO.getLinkEmail());
|
|
|
+ shipTradeOrderCreateReqVO.setOrderUser(orderUser);
|
|
|
+ shipTradeOrderCreateReqVO.setRemark(createVO.getRemark());
|
|
|
+ shipTradeOrderCreateReqVO.setIsYd(createVO.getIsYd());
|
|
|
+ shipTradeOrderCreateReqVO.setTravelDate(createVO.getBoardingTime());
|
|
|
+ shipTradeOrderCreateReqVO.setOrderNo(orderNo);
|
|
|
+ ShipTradeOrderCreateReqVO.OrderProperty orderProperty = new ShipTradeOrderCreateReqVO.OrderProperty();
|
|
|
+ orderProperty.setSellMethod(SellMethodEnum.MINI_APP.getType());
|
|
|
+ orderProperty.setSourceId(createVO.getDistributorId()+"");
|
|
|
+ orderProperty.setSourceName(createVO.getCustomerName());
|
|
|
+ shipTradeOrderCreateReqVO.setOrderProperty(orderProperty);
|
|
|
+ ShipTradeOrderCreateReqVO.OrderItem orderItem = new ShipTradeOrderCreateReqVO.OrderItem();
|
|
|
+ List<ShipTradeOrderCreateReqVO.OrderDetail> detailList = new ArrayList<>();
|
|
|
+ ShipTradeOrderCreateReqVO.OrderDetail orderDetail = new ShipTradeOrderCreateReqVO.OrderDetail();
|
|
|
+ for (TradeVistorReqVO tradeVistorReqVO : createVO.getTourist()) {
|
|
|
+ List<ShipTradeOrderCreateReqVO.Visitor> visitorList = new ArrayList<>();
|
|
|
+ ShipTradeOrderCreateReqVO.OrderDetail visitorDetailId = new ShipTradeOrderCreateReqVO.OrderDetail();
|
|
|
+ BeanUtils.copyProperties(orderDetail, ShipTradeOrderCreateReqVO.OrderDetail.class);
|
|
|
+ visitorDetailId.setPrice(tradeVistorReqVO.getActualPrice());
|
|
|
+ visitorDetailId.setOriginPrice(tradeVistorReqVO.getPrice());
|
|
|
+ visitorDetailId.setProductType(0);
|
|
|
+ visitorDetailId.setBoardingTime(createVO.getBoardingTime());
|
|
|
+ visitorDetailId.setLeaveTime(createVO.getLeaveTime());
|
|
|
+ visitorDetailId.setProductType(0);
|
|
|
+ ShipTradeOrderCreateReqVO.Visitor visitor = getVisitor1(tradeVistorReqVO);
|
|
|
+ visitorList.add(visitor);
|
|
|
+ visitorDetailId.setVisitorList(visitorList);
|
|
|
+ visitorDetailId.setCount(1);
|
|
|
+ detailList.add(visitorDetailId);
|
|
|
+ }
|
|
|
+ orderItem.setDetailList(detailList);
|
|
|
+ BigDecimal spuMoney = new BigDecimal(0);
|
|
|
+ for (TradeSpuReqVO tradeSpuReqVO : createVO.getSpuList()) {
|
|
|
+ ShipTradeOrderCreateReqVO.OrderDetail orderDetail1 = new ShipTradeOrderCreateReqVO.OrderDetail();
|
|
|
+ //0 游船产品 1 附加产品 2:赠票
|
|
|
+ if (tradeSpuReqVO.getProductId() != null && !tradeSpuReqVO.getTourist().isEmpty()) {
|
|
|
+ orderDetail1.setProductType(1);
|
|
|
+ } else if (tradeSpuReqVO.getProductId() != null && tradeSpuReqVO.getRequired() != null && tradeSpuReqVO.getRequired() == 1) {
|
|
|
+ orderDetail1.setProductType(2);
|
|
|
+ } else {
|
|
|
continue;
|
|
|
}
|
|
|
- orderDetail1.setProductType(0);
|
|
|
- }
|
|
|
- List<ShipTradeOrderCreateReqVO.Visitor> visitorList1 = new ArrayList<>();
|
|
|
- if (orderDetail1.getProductType() == 0 || orderDetail1.getProductType() == 1) {
|
|
|
+ List<ShipTradeOrderCreateReqVO.Visitor> visitorList1 = new ArrayList<>();
|
|
|
for (String touristId : tradeSpuReqVO.getTourist()) {
|
|
|
TradeVistorReqVO tradeVistorReqVO = createVO.getTourist().stream().filter(v -> v.getId().equals(touristId)).findFirst().orElseGet(TradeVistorReqVO::new);
|
|
|
- ShipTradeOrderCreateReqVO.Visitor visitor = new ShipTradeOrderCreateReqVO.Visitor();
|
|
|
- visitor.setName(tradeVistorReqVO.getName());
|
|
|
- visitor.setVid(tradeVistorReqVO.getId());
|
|
|
- visitor.setMobile(tradeVistorReqVO.getMobile());
|
|
|
- visitor.setGender(tradeVistorReqVO.getGender());
|
|
|
- visitor.setCredentialNo(tradeVistorReqVO.getCardNo());
|
|
|
- visitor.setCredentialType(tradeVistorReqVO.getCardType());
|
|
|
- visitor.setYczz(tradeVistorReqVO.getYichang());
|
|
|
- visitor.setCqzz(tradeVistorReqVO.getChongqing());
|
|
|
- visitor.setNationality(tradeVistorReqVO.getNationality());
|
|
|
- visitor.setRoomId(tradeVistorReqVO.getRoomId());
|
|
|
- visitor.setCohabitation(tradeVistorReqVO.getCohabitation());
|
|
|
- visitor.setRoomIndexId(tradeVistorReqVO.getRoomIndexId());
|
|
|
- visitor.setRoomModelId(tradeVistorReqVO.getRoomModelId());
|
|
|
- visitor.setFloor(tradeVistorReqVO.getFloor());
|
|
|
+ ShipTradeOrderCreateReqVO.Visitor visitor = getVisitor1(tradeVistorReqVO);
|
|
|
visitorList1.add(visitor);
|
|
|
- spuMoney = spuMoney.add(tradeSpuReqVO.getPrice());
|
|
|
+ BigDecimal price = tradeSpuReqVO.getPrice() == null ? BigDecimal.ZERO : tradeSpuReqVO.getPrice();
|
|
|
+ spuMoney = spuMoney.add(price);
|
|
|
}
|
|
|
orderDetail1.setVisitorList(visitorList1);
|
|
|
orderDetail1.setProductId(tradeSpuReqVO.getProductId() + "");
|
|
|
orderDetail1.setPrice(tradeSpuReqVO.getPrice());
|
|
|
orderDetail1.setOriginPrice(tradeSpuReqVO.getPrice());
|
|
|
- } else {
|
|
|
- for (TradeVistorReqVO tradeVistorReqVO : createVO.getTourist()) {
|
|
|
- ShipTradeOrderCreateReqVO.Visitor visitor = new ShipTradeOrderCreateReqVO.Visitor();
|
|
|
- visitor.setName(tradeVistorReqVO.getName());
|
|
|
- visitor.setMobile(tradeVistorReqVO.getMobile());
|
|
|
- visitor.setCredentialNo(tradeVistorReqVO.getCardNo());
|
|
|
- visitor.setCredentialType(tradeVistorReqVO.getCardType());
|
|
|
- visitor.setYczz(tradeVistorReqVO.getYichang());
|
|
|
- visitor.setCqzz(tradeVistorReqVO.getChongqing());
|
|
|
- visitor.setRoomId(tradeVistorReqVO.getRoomId());
|
|
|
- visitor.setNationality(tradeVistorReqVO.getNationality());
|
|
|
- visitor.setCohabitation(tradeVistorReqVO.getCohabitation());
|
|
|
- visitor.setRoomIndexId(tradeVistorReqVO.getRoomIndexId());
|
|
|
- visitor.setRoomModelId(tradeVistorReqVO.getRoomModelId());
|
|
|
- visitor.setFloor(tradeVistorReqVO.getFloor());
|
|
|
- visitorList1.add(visitor);
|
|
|
- }
|
|
|
- orderDetail1.setVisitorList(visitorList1);
|
|
|
- orderDetail1.setProductId(tradeSpuReqVO.getProductId() + "");
|
|
|
- orderDetail1.setPrice(BigDecimal.ZERO);
|
|
|
- orderDetail1.setOriginPrice(BigDecimal.ZERO);
|
|
|
- }
|
|
|
- orderDetail1.setCount(visitorList1.size());
|
|
|
- detailList.add(orderDetail1);
|
|
|
- }
|
|
|
- BigDecimal price;
|
|
|
- if (createVO.getSummary().getOrderMoney() != null && createVO.getSummary().getOrderMoney().compareTo(new BigDecimal(0)) > 0) {
|
|
|
- price = createVO.getSummary().getOrderMoney().subtract(spuMoney).divide(new BigDecimal(visitorList.size()), 2, RoundingMode.HALF_UP);
|
|
|
- } else {
|
|
|
- price = new BigDecimal(0);
|
|
|
- }
|
|
|
- orderDetail.setPrice(price);
|
|
|
- orderDetail.setOriginPrice(price);
|
|
|
-
|
|
|
- orderDetail.setProductType(0);
|
|
|
- detailList.add(orderDetail);
|
|
|
-
|
|
|
-
|
|
|
- orderItem.setDetailList(detailList);
|
|
|
|
|
|
- shipTradeOrderCreateReqVO.setItemlList(Collections.singletonList(orderItem));
|
|
|
+ orderDetail1.setCount(visitorList1.size());
|
|
|
+ detailList.add(orderDetail1);
|
|
|
+ }
|
|
|
+ shipTradeOrderCreateReqVO.setItemlList(Collections.singletonList(orderItem));
|
|
|
|
|
|
- shipTradeOrderCreateReqVO.setSpuAmount(spuMoney);
|
|
|
+ shipTradeOrderCreateReqVO.setSpuAmount(spuMoney);
|
|
|
|
|
|
- CommonResult<TradeOrderRespDTO> result = doShipCreateOrder(loginUser, shipTradeOrderCreateReqVO);
|
|
|
- if (result.isError()) {
|
|
|
- return CommonResult.error(result);
|
|
|
+ Date travelDate = shipTradeOrderCreateReqVO.getTravelDate();
|
|
|
+ if (DateUtil.compare(travelDate, new Date()) < 0) {
|
|
|
+ Asserts.isTrue(false, "选择的游玩日期不能早于当前时间");
|
|
|
+ }
|
|
|
+ CommonResult<TradeOrderRespDTO> result;
|
|
|
+ try {
|
|
|
+ result = doShipCreateOrder(loginUser, shipTradeOrderCreateReqVO);
|
|
|
+ } catch (Exception e) {
|
|
|
+ return CommonResult.error(500, e.getMessage());
|
|
|
+ }
|
|
|
+ if (result.isError()) {
|
|
|
+ return CommonResult.error(result.getCode(), result.getMsg());
|
|
|
+ }
|
|
|
+ TradeOrderTotalDO tradeOrderTotalDO = BeanUtils.toBean(summary, TradeOrderTotalDO.class);
|
|
|
+ Long orderId = result.getCheckedData().getOrderId();
|
|
|
+ tradeOrderTotalDO.setOrderId(IdWorker.getId());
|
|
|
+ tradeOrderTotalDO.setOldOrderId(orderId);
|
|
|
+ tradeOrderTotalDO.setOtherRemark(summary.getOtherRemark());
|
|
|
+ tradeOrderTotalMapper.insert(tradeOrderTotalDO);
|
|
|
+ // 创建订单房型数据
|
|
|
+ List<TradeOrderRoomModelDO> tradeOrderRoomDOList = new ArrayList<>();
|
|
|
+ List<TradeOrderRoomModelVO> roomModelList = createVO.getRoomModelList();
|
|
|
+ roomModelList.forEach(roomModel -> {
|
|
|
+ TradeOrderRoomModelDO tradeOrderRoomDO = BeanUtils.toBean(roomModel, TradeOrderRoomModelDO.class);
|
|
|
+ tradeOrderRoomDO.setOrderId(orderId);
|
|
|
+ tradeOrderRoomDO.setOrderNo(orderNo);
|
|
|
+ tradeOrderRoomDO.setDiscount(tradeOrderRoomDO.getUnitPrice().subtract(tradeOrderRoomDO.getRealMoney()));
|
|
|
+ tradeOrderRoomDOList.add(tradeOrderRoomDO);
|
|
|
+ });
|
|
|
+ if (!tradeOrderRoomDOList.isEmpty()) {
|
|
|
+ tradeOrderRoomModelMapper.deleteByOrderId(orderId);
|
|
|
+ tradeOrderRoomModelMapper.insertBatch(tradeOrderRoomDOList);
|
|
|
+ }
|
|
|
+ OtcTradeOrderCreateRespVO respVO = TradeOrderConvert.INSTANCE.convert(result.getData());
|
|
|
+ return CommonResult.success(respVO);
|
|
|
+ }finally {
|
|
|
+ if (lock.isHeldByCurrentThread() && lock.isLocked()) {
|
|
|
+ lock.unlock();
|
|
|
+ }
|
|
|
}
|
|
|
- TradeOrderTotalVO summary = createVO.getSummary();
|
|
|
- TradeOrderTotalDO tradeOrderTotalDO = BeanUtils.toBean(summary, TradeOrderTotalDO.class);
|
|
|
- Long orderId = result.getCheckedData().getOrderId();
|
|
|
- tradeOrderTotalDO.setOrderId(IdWorker.getId());
|
|
|
- tradeOrderTotalDO.setOldOrderId(orderId);
|
|
|
- tradeOrderTotalMapper.insert(tradeOrderTotalDO);
|
|
|
-
|
|
|
- // 创建订单房型数据
|
|
|
- List<TradeOrderRoomModelDO> tradeOrderRoomList = new ArrayList<>();
|
|
|
- List<TradeOrderRoomModelVO> roomModelList = createVO.getRoomModelList();
|
|
|
- roomModelList.forEach(roomModel -> {
|
|
|
- TradeOrderRoomModelDO tradeOrderRoomDO = BeanUtils.toBean(roomModel, TradeOrderRoomModelDO.class);
|
|
|
- tradeOrderRoomDO.setOrderId(orderId);
|
|
|
- tradeOrderRoomList.add(tradeOrderRoomDO);
|
|
|
- });
|
|
|
- tradeOrderRoomModelMapper.insertBatch(tradeOrderRoomList);
|
|
|
-
|
|
|
- OtcTradeOrderCreateRespVO respVO = TradeOrderConvert.INSTANCE.convert(result.getData());
|
|
|
- return CommonResult.success(respVO);
|
|
|
-
|
|
|
}
|
|
|
|
|
|
private CommonResult<TradeOrderRespDTO> doShipCreateOrder(LoginUser loginUser, ShipTradeOrderCreateReqVO otcTradeOrderCreateReqVO) {
|