|
@@ -16,6 +16,7 @@ import com.yc.ship.framework.common.pojo.PageResult;
|
|
|
import com.yc.ship.framework.common.util.object.BeanUtils;
|
|
|
import com.yc.ship.framework.common.util.object.ObjectUtils;
|
|
|
import com.yc.ship.framework.ip.core.utils.AreaUtils;
|
|
|
+import com.yc.ship.framework.mybatis.core.query.LambdaQueryWrapperX;
|
|
|
import com.yc.ship.framework.security.core.LoginUser;
|
|
|
import com.yc.ship.framework.tenant.core.context.TenantContextHolder;
|
|
|
import com.yc.ship.framework.tenant.core.util.TenantUtils;
|
|
@@ -278,6 +279,17 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
|
|
|
return tradeOrderService.createShipOrder(otcTradeOrderCreateReqVO);
|
|
|
}
|
|
|
|
|
|
+ private CommonResult<TradeOrderRespDTO> doShipModifyOrder(LoginUser loginUser, ShipTradeOrderCreateReqVO otcTradeOrderCreateReqVO,SellMethodEnum sellMethodEnum) {
|
|
|
+ ShipTradeOrderCreateReqVO.OrderProperty orderProperty = otcTradeOrderCreateReqVO.getOrderProperty();
|
|
|
+ if(orderProperty == null){
|
|
|
+ orderProperty = new ShipTradeOrderCreateReqVO.OrderProperty();
|
|
|
+ }
|
|
|
+ orderProperty.setSellMethod(sellMethodEnum.getType());
|
|
|
+ setShipOrderPropertyFromLoginUser(loginUser,orderProperty,sellMethodEnum);
|
|
|
+ otcTradeOrderCreateReqVO.setOrderProperty(orderProperty);
|
|
|
+ return tradeOrderService.createShipOrder(otcTradeOrderCreateReqVO);
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
@Override
|
|
|
public CommonResult<PayOrderRespVO> windowPayOrder(LoginUser loginUser, PayOrderReqVO payOrderReqVO) {
|
|
@@ -2251,16 +2263,24 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
|
|
|
for (TradeSpuReqVO tradeSpuReqVO : createVO.getSpuList()) {
|
|
|
ShipTradeOrderCreateReqVO.OrderDetail orderDetail1 = new ShipTradeOrderCreateReqVO.OrderDetail();
|
|
|
//0 游船产品 1 附加产品 2:赠票
|
|
|
- if(tradeSpuReqVO.getProductId()!=null && !tradeSpuReqVO.getVistorList().isEmpty()) {
|
|
|
+ if(tradeSpuReqVO.getProductId()!=null && !tradeSpuReqVO.getTourist().isEmpty()) {
|
|
|
orderDetail1.setProductType(1);
|
|
|
- }else if(tradeSpuReqVO.getProductId() != null) {
|
|
|
+ }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 (TradeVistorReqVO tradeVistorReqVO : tradeSpuReqVO.getVistorList()) {
|
|
|
+ for (String touristId : tradeSpuReqVO.getTourist()) {
|
|
|
+ TradeVistorReqVO tradeVistorReqVO = createVO.getTourist().stream().filter(v -> v.getOrderId().equals(touristId)).findFirst().get();
|
|
|
+ if(tradeVistorReqVO==null){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
ShipTradeOrderCreateReqVO.Visitor visitor = new ShipTradeOrderCreateReqVO.Visitor();
|
|
|
visitor.setName(tradeVistorReqVO.getName());
|
|
|
visitor.setMobile(tradeVistorReqVO.getPhone());
|
|
@@ -2373,6 +2393,206 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public CommonResult<?> motifyOtcOrder(LoginUser loginUser, TradeOrderOtcCreateVO createVO) {
|
|
|
+ Long distributorId = loginUser.getDistributorId();
|
|
|
+ Long storeId = loginUser.getStoreId();
|
|
|
+ //获取当前分销商信息
|
|
|
+ if(distributorId==null) {
|
|
|
+ return CommonResult.error(ORDER_OTC_FAIL);
|
|
|
+ }
|
|
|
+ if(storeId==null) {
|
|
|
+ return CommonResult.error(ORDER_STORE_FAIL);
|
|
|
+ }
|
|
|
+ //获取当前分销商信息
|
|
|
+ DistributorDO distributorDO = distributorMapper.selectById(distributorId);
|
|
|
+ if(distributorDO==null) {
|
|
|
+ return CommonResult.error(ORDER_OTC_NONE);
|
|
|
+ }
|
|
|
+ //获取当前门店
|
|
|
+ StoreInfoRespDTO storeInfo = storeApi.getStoreInfo(storeId);
|
|
|
+ if(storeInfo==null) {
|
|
|
+ return CommonResult.error(ORDER_STORE_NONE);
|
|
|
+ }
|
|
|
+ VoyageRespDTO voyage = productApi.getVoyage(createVO.getVoyageId());
|
|
|
+ String date = DateUtils.format(new Date(),"yyyyMMddmmss");
|
|
|
+ String orderNo = distributorDO.getCode()+"-"+voyage.getCode()+"-"+date;
|
|
|
+ List<TradeOrderCountryReqVO> countryData = createVO.getCountryData();
|
|
|
+ ShipTradeOrderCreateReqVO shipTradeOrderCreateReqVO = BeanUtils.toBean(createVO, ShipTradeOrderCreateReqVO.class);
|
|
|
+ shipTradeOrderCreateReqVO.setDistributorId(loginUser.getDistributorId());
|
|
|
+ shipTradeOrderCreateReqVO.setGroupNo(createVO.getGroupNo());
|
|
|
+ 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());
|
|
|
+ shipTradeOrderCreateReqVO.setOrderNo(orderNo);
|
|
|
+
|
|
|
+ ShipTradeOrderCreateReqVO.OrderProperty orderProperty = new ShipTradeOrderCreateReqVO.OrderProperty();
|
|
|
+ orderProperty.setSellMethod(SellMethodEnum.OTC.getType());
|
|
|
+ orderProperty.setSourceId(distributorDO.getId()+"");
|
|
|
+ orderProperty.setSourceName(distributorDO.getName()+"");
|
|
|
+ orderProperty.setStoreId(storeInfo.getId());
|
|
|
+ orderProperty.setStoreName(storeInfo.getName()+"");
|
|
|
+ orderProperty.setSellMethod(SellMethodEnum.OTC.getType());
|
|
|
+
|
|
|
+ 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 = 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());
|
|
|
+ visitorList.add(visitor);
|
|
|
+ }
|
|
|
+ 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.getVistorList().isEmpty()) {
|
|
|
+ orderDetail1.setProductType(1);
|
|
|
+ }else if(tradeSpuReqVO.getProductId() != null) {
|
|
|
+ orderDetail1.setProductType(2);
|
|
|
+ }else{
|
|
|
+ orderDetail1.setProductType(0);
|
|
|
+ }
|
|
|
+ if(orderDetail1.getProductType()==0||orderDetail1.getProductType()==1) {
|
|
|
+ List<ShipTradeOrderCreateReqVO.Visitor> visitorList1 = new ArrayList<>();
|
|
|
+ for (TradeVistorReqVO tradeVistorReqVO : tradeSpuReqVO.getVistorList()) {
|
|
|
+ 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());
|
|
|
+ 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());
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if(createVO.getSummary().getOrderMoney()!=null && createVO.getSummary().getOrderMoney().compareTo(new BigDecimal(0))>0) {
|
|
|
+ BigDecimal price = createVO.getSummary().getOrderMoney().subtract(spuMoney).divide(new BigDecimal(visitorList.size()), 2, RoundingMode.HALF_UP);
|
|
|
+ orderDetail.setPrice(price);
|
|
|
+ orderDetail.setOriginPrice(price);
|
|
|
+ }else{
|
|
|
+ BigDecimal price = new BigDecimal(0);
|
|
|
+ orderDetail.setPrice(price);
|
|
|
+ orderDetail.setOriginPrice(price);
|
|
|
+ }
|
|
|
+
|
|
|
+ orderDetail.setProductType(0);
|
|
|
+ detailList.add(orderDetail);
|
|
|
+
|
|
|
+
|
|
|
+ orderItem.setDetailList(detailList);
|
|
|
+
|
|
|
+ shipTradeOrderCreateReqVO.setItemlList(Arrays.asList(orderItem));
|
|
|
+
|
|
|
+// BigDecimal totalAmount = spuMoney.add(createVO.getSummary().getOrderMoney());
|
|
|
+ shipTradeOrderCreateReqVO.setSpuAmount(spuMoney);
|
|
|
+// shipTradeOrderCreateReqVO.setPayAmount(totalAmount);
|
|
|
+
|
|
|
+ CommonResult<TradeOrderRespDTO> result = doShipModifyOrder(loginUser,shipTradeOrderCreateReqVO,SellMethodEnum.WINDOW);
|
|
|
+ if (result.isError()) {
|
|
|
+ return CommonResult.error(result);
|
|
|
+ }
|
|
|
+ TradeOrderTotalVO summary = createVO.getSummary();
|
|
|
+ TradeOrderTotalDO tradeOrderTotalDO = BeanUtils.toBean(summary, TradeOrderTotalDO.class);
|
|
|
+ Long orderId = result.getCheckedData().getOrderId();
|
|
|
+ tradeOrderTotalDO.setOrderId(orderId);
|
|
|
+ tradeOrderTotalMapper.insertOrUpdate(tradeOrderTotalDO);
|
|
|
+
|
|
|
+ //创建订单国籍数据
|
|
|
+ List<TradeOrderRoomModelDO> list = new ArrayList<>(); //创建订单房型数据
|
|
|
+ List<TradeOrderCountryDO> tradeOrderCountryDOList = new ArrayList<>(); //创建订单国籍数据
|
|
|
+ List<TradeOrderFloorDO> floorPlus = new ArrayList<>();
|
|
|
+ countryData.stream().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.stream().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.stream().forEach(floor -> {
|
|
|
+ TradeOrderFloorDO floorDO = BeanUtils.toBean(floor, TradeOrderFloorDO.class);
|
|
|
+ floorDO.setOrderId(orderId);
|
|
|
+ floorDO.setRoomModelId(roomModelId);
|
|
|
+ floorPlus.add(floorDO);
|
|
|
+ });
|
|
|
+
|
|
|
+ });
|
|
|
+ });
|
|
|
+ tradeOrderCountryMapper.insertOrUpdateBatch(tradeOrderCountryDOList);
|
|
|
+ tradeOrderRoomModelMapper.insertOrUpdateBatch(list);
|
|
|
+ tradeOrderFloorMapper.insertOrUpdateBatch(floorPlus);
|
|
|
+
|
|
|
+ OtcTradeOrderCreateRespVO respVO = TradeOrderConvert.INSTANCE.convert(result.getData());
|
|
|
+ return CommonResult.success(respVO);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public TradeOrderRespNewVO getOrderInfoNew(Long id) {
|
|
|
TradeOrderDO tradeOrderDO = tradeOrderMapper.selectById(id);
|
|
@@ -2418,6 +2638,29 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
|
|
|
return CommonResult.success(tradeOrderMapper.regionStatic(regionStatic));
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public CommonResult<TradeOrderVO> getOrderById(Long orderId) {
|
|
|
+ TradeOrderVO tradeOrderVO = new TradeOrderVO();
|
|
|
+ TradeOrderDO tradeOrderDO = tradeOrderMapper.selectById(orderId);
|
|
|
+ tradeOrderVO.setOrderDO(tradeOrderDO);
|
|
|
+ //设置国籍数据
|
|
|
+ List<TradeOrderCountryDO> countryDOS = tradeOrderCountryMapper.selectListByOrderId(orderId);
|
|
|
+ tradeOrderVO.setCountryData(countryDOS);
|
|
|
+ //获取订单门票信息
|
|
|
+ List<TradeDetailRespVO> detailList = tradeDetailMapper.getOrderIdDetail(tradeOrderDO.getId());
|
|
|
+ tradeOrderVO.setTradeDetailDOList(detailList);
|
|
|
+ //设置订单汇总数据
|
|
|
+ TradeOrderTotalDO tradeOrderTotalDO = tradeOrderTotalMapper.selectOne(TradeOrderTotalDO::getOrderId, orderId);
|
|
|
+ tradeOrderVO.setSummary(tradeOrderTotalDO);
|
|
|
+
|
|
|
+ OrderJzDO orderJzDO = orderJzMapper.selectOne(OrderJzDO::getOrderId, orderId);
|
|
|
+ tradeOrderVO.setOrderJzDO(orderJzDO);
|
|
|
+
|
|
|
+ List<TradeOrderRoomModelDO> roomModelDOList = tradeOrderRoomModelMapper.selectList(TradeOrderRoomModelDO::getOrderId, orderId);
|
|
|
+ tradeOrderVO.setRoomModelList(roomModelDOList);
|
|
|
+ return CommonResult.success(tradeOrderVO);
|
|
|
+ }
|
|
|
+
|
|
|
private void markChangeOrder(Long orderId){
|
|
|
String key = String.format(KEY_MARK_CHANGE_ORDER,orderId);
|
|
|
stringRedisTemplate.opsForValue().set(key,orderId.toString(),60, TimeUnit.MINUTES);
|