Browse Source

小程序下单接口

lishiqiang 4 weeks atrás
parent
commit
4298cf039c

+ 82 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/vo/order/MiniTradeOrderCreateReqVO.java

@@ -0,0 +1,82 @@
+package com.yc.ship.module.trade.controller.admin.order.vo.order;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+@Schema(description = "旅行社交易订单创建 Request VO")
+@Data
+public class MiniTradeOrderCreateReqVO {
+
+    @Schema(description = "分销商ID", example = "MT1231312")
+    private Long distributorId;
+
+    @Schema(description = "用户ID", example = "MT1231312")
+    private String userId;
+
+    @Schema(description = "客户名称")
+    private String customerName;
+
+    @Schema(description = "订单联系人")
+    private String linkMan;
+
+    @Schema(description = "时间")
+    private Date boardingTime;
+
+    @Schema(description = "联系人手机")
+    private String linkMobile;
+
+    @Schema(description = "联系人邮箱")
+    private String linkEmail;
+
+    @Schema(description = "船ID")
+    private Long shipId;
+
+    @Schema(description = "航次ID")
+    private Long voyageId;
+
+    @Schema(description = "团队编号")
+    private String groupNo;
+
+    @Schema(description = "币种")
+    private String currency;
+
+    @Schema(description = "备注")
+    private String remark;
+
+    @Schema(description = "是否预订单 0 否 1是")
+    private Integer isYd;
+
+    @Schema(description = "是否需要接站服务 0 否 1是")
+    private Integer isJz;
+
+    @Schema(description = "接站地址")
+    private String jzAddress;
+
+    @Schema(description = "接站联系人")
+    private String jzLinkName;
+
+    @Schema(description = "接站联系电话")
+    private String jzLinkPhone;
+
+    @Schema(description = "门店ID", example = "123")
+    private Long storeId;
+
+    @Schema(description = "订单总额-前端修改")
+    private BigDecimal realAmount;
+
+    @Schema(description = "国籍数据")
+    List<TradeOrderCountryReqVO> countryData;
+
+    @Schema(description = "订单汇总信息")
+    private TradeOrderTotalVO summary;
+
+    private List<TradeVistorReqVO> tourist;
+
+    @Schema(description = "附加产品信息")
+    private List<TradeSpuReqVO> spuList;
+
+}

+ 6 - 6
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/app/otc/AppOtcTradeOrderController.java

@@ -5,9 +5,7 @@ import com.yc.ship.framework.common.pojo.PageResult;
 import com.yc.ship.framework.operatelog.core.annotations.OperateLog;
 import com.yc.ship.framework.security.core.annotations.PreAuthenticated;
 import com.yc.ship.module.otc.api.store.dto.StoreMachineDTO;
-import com.yc.ship.module.trade.controller.admin.order.vo.order.OtcTradeOrderCreateReqVO;
-import com.yc.ship.module.trade.controller.admin.order.vo.order.PayOrderReqVO;
-import com.yc.ship.module.trade.controller.admin.order.vo.order.PayOrderRespVO;
+import com.yc.ship.module.trade.controller.admin.order.vo.order.*;
 import com.yc.ship.module.trade.controller.admin.order.vo.refund.TradeRefundCalculateRespVO;
 import com.yc.ship.module.trade.controller.admin.order.vo.refund.TradeRefundCreateReqVO;
 import com.yc.ship.module.trade.controller.admin.order.vo.refund.TradeRefundCreateRespVO;
@@ -20,6 +18,7 @@ import com.yc.ship.module.trade.framework.annotation.RequestDecryption;
 import com.yc.ship.module.trade.framework.annotation.StoreMachine;
 import com.yc.ship.module.trade.service.order.AdminTradeOrderService;
 import com.yc.ship.module.trade.service.otc.AppOtcTradeOrderService;
+import com.yc.ship.module.trade.utils.AgencyAuthUtils;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -53,14 +52,15 @@ public class AppOtcTradeOrderController {
     private AppOtcTradeOrderService appOtcTradeOrderService;
     @Resource
     private AdminTradeOrderService adminTradeOrderService;
+    @Resource
+    private AgencyAuthUtils agencyAuthUtils;
 
     @RequestDecryption
     @PostMapping("/miniApp/createOrder")
     @Operation(summary = "小程序创建订单")
     @OperateLog(type = TRADE)
-    public CommonResult<AppOtcTradeOrderCreateRespVO> miniAppCreateOrder(@Valid @RequestBody OtcTradeOrderCreateReqVO otcTradeOrderCreateReqVO) {
-
-        return appOtcTradeOrderService.miniAppCreateOrder(getLoginUser(), otcTradeOrderCreateReqVO);
+    public CommonResult<OtcTradeOrderCreateRespVO> miniAppCreateOrder(@Valid @RequestBody MiniTradeOrderCreateReqVO otcTradeOrderCreateReqVO) {
+        return appOtcTradeOrderService.miniAppCreateOrder(agencyAuthUtils.getAgencyLoginUser(), otcTradeOrderCreateReqVO);
     }
 
     @RequestDecryption

+ 4 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/convert/order/TradeOrderConvert.java

@@ -218,4 +218,8 @@ public interface TradeOrderConvert {
         OtcTradeOrderCreateReqVO bean = BeanUtils.toBean(shipTradeOrderCreateReqVO, OtcTradeOrderCreateReqVO.class);
         return bean;
     }
+    default OtcTradeOrderCreateReqVO convert(MiniTradeOrderCreateReqVO miniTradeOrderCreateReqVO){
+        OtcTradeOrderCreateReqVO bean = BeanUtils.toBean(miniTradeOrderCreateReqVO, OtcTradeOrderCreateReqVO.class);
+        return bean;
+    }
 }

+ 3 - 4
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/impl/TradeOrderServiceImpl.java

@@ -747,8 +747,7 @@ public class TradeOrderServiceImpl implements TradeOrderService {
         TradeOrderBO tradeOrderBO = new TradeOrderBO();
         //订单
         TradeOrderDO tradeOrderDO = new TradeOrderDO();
-        tradeOrderDO.setVisitorType(1);
-        tradeOrderDO.setSellMethod(1);
+        tradeOrderDO.setSellMethod(orderCreateReqDTO.getOrderProperty().getSellMethod());
         tradeOrderDO.setSourceId(orderCreateReqDTO.getOrderProperty().getSourceId());
         tradeOrderDO.setSourceName(orderCreateReqDTO.getOrderProperty().getSourceName());
         tradeOrderDO.setSellerId(orderCreateReqDTO.getOrderProperty().getSellerId());
@@ -772,9 +771,9 @@ public class TradeOrderServiceImpl implements TradeOrderService {
         tradeOrderDO.setLinkEmail(orderCreateReqDTO.getLinkEmail());
         //设置团散类型
         if (tradeOrderDO.getVisitorType() == null) {
-            if (tradeOrderDO.getSellMethod() == 7) {
+            if (tradeOrderDO.getSellMethod() == 7||tradeOrderDO.getSellMethod() == 1) {
                 tradeOrderDO.setVisitorType(1);
-            } else if (tradeOrderDO.getSellMethod() == 0 || tradeOrderDO.getSellMethod() == 2 || tradeOrderDO.getSellMethod() == 3 || tradeOrderDO.getSellMethod() == 4 || tradeOrderDO.getSellMethod() == 6 | tradeOrderDO.getSellMethod() == 8) {
+            } else {
                 tradeOrderDO.setVisitorType(0);
             }
         }

+ 2 - 4
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/otc/AppOtcTradeOrderService.java

@@ -5,9 +5,7 @@ import com.yc.ship.framework.common.pojo.CommonResult;
 import com.yc.ship.framework.common.pojo.PageResult;
 import com.yc.ship.framework.security.core.LoginUser;
 import com.yc.ship.module.otc.api.store.dto.StoreMachineDTO;
-import com.yc.ship.module.trade.controller.admin.order.vo.order.OtcTradeOrderCreateReqVO;
-import com.yc.ship.module.trade.controller.admin.order.vo.order.PayOrderReqVO;
-import com.yc.ship.module.trade.controller.admin.order.vo.order.PayOrderRespVO;
+import com.yc.ship.module.trade.controller.admin.order.vo.order.*;
 import com.yc.ship.module.trade.controller.app.otc.vo.AppOtcTradeOrderCreateRespVO;
 import com.yc.ship.module.trade.controller.app.otc.vo.AppTradeDetailBaseRespVO;
 import com.yc.ship.module.trade.controller.app.otc.vo.AppTradeOrderPageReqVO;
@@ -45,7 +43,7 @@ public interface AppOtcTradeOrderService {
      * @param otcTradeOrderCreateReqVO
      * @return
      */
-    CommonResult<AppOtcTradeOrderCreateRespVO> miniAppCreateOrder(LoginUser loginUser, OtcTradeOrderCreateReqVO otcTradeOrderCreateReqVO);
+    CommonResult<OtcTradeOrderCreateRespVO> miniAppCreateOrder(LoginUser loginUser, MiniTradeOrderCreateReqVO otcTradeOrderCreateReqVO);
 
     /**
      * 小程序支付订单

+ 235 - 51
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/otc/impl/AppOtcTradeOrderServiceImpl.java

@@ -5,6 +5,8 @@ import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
+import com.alibaba.excel.util.DateUtils;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.yc.ship.framework.common.enums.UserTypeEnum;
 import com.yc.ship.framework.common.lang.Asserts;
 import com.yc.ship.framework.common.pojo.CommonResult;
@@ -19,18 +21,25 @@ import com.yc.ship.module.infra.api.config.ConfigApi;
 import com.yc.ship.module.member.api.address.MemberAddressApi;
 import com.yc.ship.module.ota.api.OtaDistributorApi;
 import com.yc.ship.module.ota.api.dto.DistributorRespDTO;
+import com.yc.ship.module.ota.dal.dataobject.distributor.DistributorDO;
+import com.yc.ship.module.ota.dal.mysql.distributor.DistributorMapper;
+import com.yc.ship.module.otc.api.store.StoreApi;
+import com.yc.ship.module.otc.api.store.dto.StoreInfoRespDTO;
 import com.yc.ship.module.otc.api.store.dto.StoreMachineDTO;
 import com.yc.ship.module.product.api.ProductApi;
 import com.yc.ship.module.product.api.dto.ProductSpuRespDTO;
+import com.yc.ship.module.product.api.dto.VoyageRespDTO;
+import com.yc.ship.module.product.service.voyage.VoyageService;
+import com.yc.ship.module.resource.service.ship.ResourceShipService;
 import com.yc.ship.module.trade.api.dto.TradeOrderCreateReqDTO;
 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.*;
 import com.yc.ship.module.trade.convert.order.TradeOrderConvert;
-import com.yc.ship.module.trade.dal.dataobject.order.TradeDetailBaseDO;
-import com.yc.ship.module.trade.dal.dataobject.order.TradeOrderDO;
-import com.yc.ship.module.trade.dal.mysql.order.TradeDetailBaseMapper;
-import com.yc.ship.module.trade.dal.mysql.order.TradeOrderDeliveryMapper;
+import com.yc.ship.module.trade.dal.dataobject.order.*;
+import com.yc.ship.module.trade.dal.mysql.bill.BillStoreMapper;
+import com.yc.ship.module.trade.dal.mysql.order.*;
+import com.yc.ship.module.trade.dal.mysql.orderjz.OrderJzMapper;
 import com.yc.ship.module.trade.enums.PayAccountTypeEnum;
 import com.yc.ship.module.trade.enums.SellMethodEnum;
 import com.yc.ship.module.trade.framework.common.ThreadLocalUtil;
@@ -43,13 +52,16 @@ import com.yc.ship.module.trade.service.pay.TradeOrderPayService;
 import com.yc.ship.module.trade.service.supplier.TradeSupplierOrderRepositoryService;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.MapUtils;
+import org.jetbrains.annotations.NotNull;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.*;
 import java.util.stream.Collectors;
 
-import static com.yc.ship.module.trade.enums.ErrorCodeConstants.ORDER_PAY_TENAND_FAIL;
+import static com.yc.ship.module.trade.enums.ErrorCodeConstants.*;
 
 
 /**
@@ -82,11 +94,34 @@ public class AppOtcTradeOrderServiceImpl implements AppOtcTradeOrderService {
     private ProductApi productApi;
 
     @Resource
-    private MemberAddressApi memberAddressApi;
+    private TradeOrderTotalMapper tradeOrderTotalMapper;
+
+    @Resource
+    private TradeOrderCountryMapper tradeOrderCountryMapper;
+
+    @Resource
+    private TradeOrderRoomModelMapper tradeOrderRoomModelMapper;
+
+    @Resource
+    private TradeVisitorMapper tradeVisitorMapper;
+
+    @Resource
+    private TradeOrderFloorMapper tradeOrderFloorMapper;
+
+    @Resource
+    private VoyageService voyageService;
+
+    @Resource
+    private ResourceShipService shipService;
+
+    @Resource
+    private OrderJzMapper orderJzMapper;
+
     @Resource
-    private TradeOrderDeliveryMapper tradeOrderDeliveryMapper;
+    private DistributorMapper distributorMapper;
+
     @Resource
-    private TradeOrderBizService tradeOrderBizService;
+    private StoreApi storeApi;
 
 
     @Override
@@ -127,59 +162,208 @@ public class AppOtcTradeOrderServiceImpl implements AppOtcTradeOrderService {
     }
 
     @Override
-    public CommonResult<AppOtcTradeOrderCreateRespVO> miniAppCreateOrder(LoginUser loginUser, OtcTradeOrderCreateReqVO otcTradeOrderCreateReqVO) {
-        if(loginUser==null || loginUser.getId()==null){
-            Asserts.isTrue(true,"下单失败,用户信息获取失败");
-        }
-        TradeOrderCreateReqDTO tradeOrderCreateReqDTO = TradeOrderConvert.INSTANCE.convert(otcTradeOrderCreateReqVO);
-        TradeOrderCreateReqDTO.OrderProperty orderProperty = tradeOrderCreateReqDTO.getOrderProperty();
-        if (orderProperty == null) {
-            orderProperty = new TradeOrderCreateReqDTO.OrderProperty();
+    public CommonResult<OtcTradeOrderCreateRespVO> miniAppCreateOrder(LoginUser loginUser, MiniTradeOrderCreateReqVO createVO) {
+        List<TradeOrderCountryReqVO> countryData = createVO.getCountryData();
+        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.setDicountId(createVO.getSummary().getDicountId());
+        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());
+
+        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);
+
+        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());
-        orderProperty.setSourceId(StrUtil.toStringOrNull(loginUser.getId()));
-        if (loginUser.getUserType()!=null && ObjectUtil.equal(loginUser.getUserType(), UserTypeEnum.MEMBER.getValue())) {
-            orderProperty.setMemberId(StrUtil.toString(loginUser.getId()));
+
+        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);
         }
-//        orderProperty.setSourceName(loginUser.get);
-        tradeOrderCreateReqDTO.setOrderProperty(orderProperty);
-        //小程序下单需要验证,子产品状态
-
-        Asserts.isTrue(CollUtil.isNotEmpty(tradeOrderCreateReqDTO.getPackProductList()),"小程序产品列表不能为空");
-//        Map<Long,ChildProductAndPriceDTO> packProductMap = new HashMap<>();
-//        for (TradeOrderCreateReqDTO.PackProduct packProduct : tradeOrderCreateReqDTO.getPackProductList()) {
-//            Asserts.isTrue(packProduct!=null && packProduct.getPackProductId()!=null
-//                    && StrUtil.isNotBlank(packProduct.getPackProductName()),"小程序产品信息不能为空");
-//            TradeOrderCreateReqDTO.OrderItem orderItem = tradeOrderCreateReqDTO.getItemlList().stream().filter(item -> ObjectUtil.equal(item.getPackProductId(), packProduct.getPackProductId())).findFirst().orElse(null);
-//            Asserts.isTrue(orderItem!=null,"下单信息有误,未找到对应产品下单信息");
-//            //一个打包产品不能出现不同的使用日期
-//            Date useDate = orderItem.getUseDate() == null? new Date() : orderItem.getUseDate();
-//            ChildProductAndPriceDTO data = childProductApi.getInfoAndPrice(packProduct.getPackProductId(), DateUtil.formatDate(useDate)).getData();
-//            Asserts.isTrue(data!=null && ObjectUtil.equal(data.getStatus(),YES),"子产品不存在或已下架");
-//            //一个订单不能重复包含小程序产品
-//            if(packProductMap.containsKey(packProduct.getPackProductId())) {
-//                Asserts.isTrue(true,"下单参数有误,一个订单不能重复包含小程序产品");
-//            }
-//            Asserts.isTrue(CollUtil.isNotEmpty(data.getPriceList()),"小程序产品未配置价格信息{}",packProduct.getPackProductId());
-//            List<Long> productList = data.getPriceList().stream().map(ChildProductCalendarPriceDTO::getProductId).distinct().collect(Collectors.toList());
-//            //打包产品下单信息,必须同时存在
-//            boolean isAll = productList.stream().allMatch(productId ->{
-//                return tradeOrderCreateReqDTO.getItemlList().stream().anyMatch(item->ObjectUtil.equal(item.getPackProductId(),packProduct.getPackProductId())
-//                        && ObjectUtil.equal(item.getProductId(),productId.toString()) );
-//            });
-//            Asserts.isTrue(isAll,"小程序产品包含的运营产品需全部下单");
-//            packProductMap.put(packProduct.getPackProductId(), data);
-//        }
-//        ThreadLocalUtil.setPackProduct(packProductMap);
-        CommonResult<TradeOrderRespDTO> result = tradeOrderService.createOrder(tradeOrderCreateReqDTO);
+        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没有游客信息跳过
+                    continue;
+                }
+                orderDetail1.setProductType(0);
+            }
+            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().get();
+                    ShipTradeOrderCreateReqVO.Visitor visitor = new ShipTradeOrderCreateReqVO.Visitor();
+                    visitor.setName(tradeVistorReqVO.getName());
+                    visitor.setMobile(tradeVistorReqVO.getPhone());
+                    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());
+                    visitorList1.add(visitor);
+                    spuMoney = spuMoney.add(tradeSpuReqVO.getPrice());
+                }
+                orderDetail1.setVisitorList(visitorList1);
+                orderDetail1.setProductId(tradeSpuReqVO.getProductId() + "");
+                orderDetail1.setPrice(tradeSpuReqVO.getPrice());
+                orderDetail1.setOriginPrice(tradeSpuReqVO.getPrice());
+                orderDetail1.setCount(visitorList1.size());
+                detailList.add(orderDetail1);
+            } else {
+                List<ShipTradeOrderCreateReqVO.Visitor> visitorList1 = new ArrayList<>();
+                for (TradeVistorReqVO tradeVistorReqVO : createVO.getTourist()) {
+                    ShipTradeOrderCreateReqVO.Visitor visitor = new ShipTradeOrderCreateReqVO.Visitor();
+                    visitor.setName(tradeVistorReqVO.getName());
+                    visitor.setMobile(tradeVistorReqVO.getPhone());
+                    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());
+                    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));
+
+        shipTradeOrderCreateReqVO.setSpuAmount(spuMoney);
+
+        CommonResult<TradeOrderRespDTO> result = doShipCreateOrder(loginUser, shipTradeOrderCreateReqVO);
         if (result.isError()) {
             return CommonResult.error(result);
         }
-        AppOtcTradeOrderCreateRespVO respVO = TradeOrderConvert.INSTANCE.convertToApp(result.getData());
+        TradeOrderTotalVO summary = createVO.getSummary();
+        TradeOrderTotalDO tradeOrderTotalDO = BeanUtils.toBean(summary, TradeOrderTotalDO.class);
+        Long orderId = result.getCheckedData().getOrderId();
+        tradeOrderTotalDO.setOrderId(orderId);
+        tradeOrderTotalMapper.insert(tradeOrderTotalDO);
+
+        //创建订单国籍数据
+        List<TradeOrderRoomModelDO> list = new ArrayList<>();
+        List<TradeOrderCountryDO> tradeOrderCountryDOList = new ArrayList<>();
+        List<TradeOrderFloorDO> floorPlus = new ArrayList<>();
+        countryData.forEach(item -> {
+            TradeOrderCountryDO countryDO = BeanUtils.toBean(item, TradeOrderCountryDO.class);
+            Long countryId = IdWorker.getId();
+            countryDO.setOrderId(orderId);
+            countryDO.setId(countryId);
+            tradeOrderCountryDOList.add(countryDO);
+            List<TradeOrderRoomModelReqVO> roomModels = item.getRoomModels();
+            //创建订单房型数据
+            roomModels.forEach(roomModel -> {
+                TradeOrderRoomModelDO roomModelDO = BeanUtils.toBean(roomModel, TradeOrderRoomModelDO.class);
+                Long roomModelId = IdWorker.getId();
+                roomModelDO.setOrderId(orderId);
+                roomModelDO.setId(roomModelId);
+                roomModelDO.setCountryId(countryId);
+                list.add(roomModelDO);
+                // 房型升楼层数据
+                List<TradeOrderFloorReqVO> floorReqVOList = roomModel.getFloorPlus();
+                if (floorReqVOList == null) {
+                    return;
+                }
+                floorReqVOList.forEach(floor -> {
+                    TradeOrderFloorDO floorDO = BeanUtils.toBean(floor, TradeOrderFloorDO.class);
+                    floorDO.setOrderId(orderId);
+                    floorDO.setRoomModelId(roomModelId);
+                    floorPlus.add(floorDO);
+                });
+
+            });
+        });
+        tradeOrderCountryMapper.insertBatch(tradeOrderCountryDOList);
+        tradeOrderRoomModelMapper.insertBatch(list);
+        tradeOrderFloorMapper.insertBatch(floorPlus);
+
+        OtcTradeOrderCreateRespVO respVO = TradeOrderConvert.INSTANCE.convert(result.getData());
         return CommonResult.success(respVO);
 
     }
 
+    private CommonResult<TradeOrderRespDTO> doShipCreateOrder(LoginUser loginUser, ShipTradeOrderCreateReqVO otcTradeOrderCreateReqVO) {
+        ShipTradeOrderCreateReqVO.OrderProperty orderProperty = otcTradeOrderCreateReqVO.getOrderProperty();
+        if (orderProperty == null) {
+            orderProperty = new ShipTradeOrderCreateReqVO.OrderProperty();
+        }
+        setShipOrderPropertyFromLoginUser(loginUser, orderProperty, SellMethodEnum.WINDOW);
+        otcTradeOrderCreateReqVO.setOrderProperty(orderProperty);
+        return tradeOrderService.createShipOrder(otcTradeOrderCreateReqVO);
+    }
+    private void setShipOrderPropertyFromLoginUser(LoginUser loginUser, ShipTradeOrderCreateReqVO.OrderProperty orderProperty, SellMethodEnum sellMethodEnum) {
+        orderProperty.setSellerId(loginUser.getId().toString());
+    }
+    private static ShipTradeOrderCreateReqVO.@NotNull Visitor getVisitor1(TradeVistorReqVO tradeVistorReqVO) {
+        ShipTradeOrderCreateReqVO.Visitor visitor = new ShipTradeOrderCreateReqVO.Visitor();
+        visitor.setName(tradeVistorReqVO.getName());
+        visitor.setMobile(tradeVistorReqVO.getPhone());
+        visitor.setCredentialNo(tradeVistorReqVO.getCardNo());
+        visitor.setCredentialType(tradeVistorReqVO.getCardType());
+        visitor.setYczz(tradeVistorReqVO.getYichang());
+        visitor.setCqzz(tradeVistorReqVO.getChongqing());
+        visitor.setRoomId(tradeVistorReqVO.getRoomId());
+        visitor.setNationality(tradeVistorReqVO.getNationality());
+        return visitor;
+    }
+
     @Override
     public CommonResult<PayOrderRespVO> miniAppPayOrder(LoginUser loginUser, PayOrderReqVO payOrderReqVO) {
         if(loginUser==null){

+ 5 - 2
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/otc/impl/OtcTradeOrderServiceImpl.java

@@ -2083,11 +2083,14 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
 
         ShipTradeOrderCreateReqVO.OrderProperty orderProperty = new ShipTradeOrderCreateReqVO.OrderProperty();
         orderProperty.setSellMethod(SellMethodEnum.OTC.getType());
+        if(loginUser.getDistributorId() == null){
+            orderProperty.setSellMethod(SellMethodEnum.OTC_MOVE_ORDER.getType());
+        }
         orderProperty.setSourceId(distributorDO.getId() + "");
-        orderProperty.setSourceName(distributorDO.getName() + "");
+        orderProperty.setSourceName(distributorDO.getName());
         if (storeInfo != null) {
             orderProperty.setStoreId(storeInfo.getId());
-            orderProperty.setStoreName(storeInfo.getName() + "");
+            orderProperty.setStoreName(storeInfo.getName());
         }
         orderProperty.setSellMethod(SellMethodEnum.OTC.getType());