|
|
@@ -3,14 +3,11 @@ package com.yc.ship.module.trade.service.order.impl;
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
import cn.hutool.core.map.MapUtil;
|
|
|
-import cn.hutool.core.thread.ThreadUtil;
|
|
|
import cn.hutool.core.util.NumberUtil;
|
|
|
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.core.toolkit.StringUtils;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.yc.ship.framework.common.exception.ServiceException;
|
|
|
import com.yc.ship.framework.common.lang.Asserts;
|
|
|
@@ -19,38 +16,30 @@ import com.yc.ship.framework.common.pojo.PageResult;
|
|
|
import com.yc.ship.framework.common.util.date.DateUtils;
|
|
|
import com.yc.ship.framework.common.util.object.ObjectUtils;
|
|
|
import com.yc.ship.framework.security.core.LoginUser;
|
|
|
-import com.yc.ship.framework.tenant.core.context.TenantContextHolder;
|
|
|
import com.yc.ship.module.ota.api.OtaDistributorApi;
|
|
|
import com.yc.ship.module.ota.api.dto.DistributorProductRespDTO;
|
|
|
import com.yc.ship.module.product.api.ProductApi;
|
|
|
import com.yc.ship.module.product.api.dto.*;
|
|
|
import com.yc.ship.module.product.enums.ProductTypeEnum;
|
|
|
import com.yc.ship.module.product.enums.SpecTypeEnum;
|
|
|
-import com.yc.ship.module.system.api.dict.DictDataApi;
|
|
|
-import com.yc.ship.module.system.api.dict.dto.DictDataRespDTO;
|
|
|
import com.yc.ship.module.trade.api.dto.*;
|
|
|
import com.yc.ship.module.trade.controller.admin.order.vo.order.ShipTradeOrderCreateReqVO;
|
|
|
-import com.yc.ship.module.trade.controller.admin.order.vo.order.TradeDetailRespVO;
|
|
|
import com.yc.ship.module.trade.controller.admin.order.vo.order.TradeOrderPageReqVO;
|
|
|
import com.yc.ship.module.trade.controller.admin.order.vo.order.TradeOrderRespVO;
|
|
|
import com.yc.ship.module.trade.convert.order.TradeOrderConvert;
|
|
|
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.mysql.order.TradeDetailBaseMapper;
|
|
|
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.enums.*;
|
|
|
import com.yc.ship.module.trade.framework.annotation.TradeOrderLog;
|
|
|
-import com.yc.ship.module.trade.framework.common.ConfigUtils;
|
|
|
import com.yc.ship.module.trade.framework.common.ExceptionUtils;
|
|
|
import com.yc.ship.module.trade.framework.common.ThreadLocalUtil;
|
|
|
import com.yc.ship.module.trade.framework.common.TradeOrderLogUtils;
|
|
|
import com.yc.ship.module.trade.framework.mq.TradePublishUtils;
|
|
|
-import com.yc.ship.module.trade.service.order.TradeOrderBizService;
|
|
|
import com.yc.ship.module.trade.service.order.TradeOrderRepositoryService;
|
|
|
import com.yc.ship.module.trade.service.order.TradeOrderRuleValidate;
|
|
|
import com.yc.ship.module.trade.service.order.TradeOrderService;
|
|
|
-import com.yc.ship.module.trade.service.order.bo.TradeBindOrderQueryBO;
|
|
|
import com.yc.ship.module.trade.service.order.bo.TradeDetailBO;
|
|
|
import com.yc.ship.module.trade.service.order.bo.TradeOrderBO;
|
|
|
import com.yc.ship.module.trade.service.order.bo.TradeOrderDetailBO;
|
|
|
@@ -63,8 +52,6 @@ import com.yc.ship.module.trade.service.thirdsystem.ThirdGateSystemService;
|
|
|
import com.yc.ship.module.trade.utils.AgencyAuthUtils;
|
|
|
import com.yc.ship.module.trade.utils.TradeUUCodeUtils;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
-import org.redisson.api.RLock;
|
|
|
-import org.redisson.api.RedissonClient;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
@@ -72,7 +59,6 @@ import java.math.BigDecimal;
|
|
|
import java.math.RoundingMode;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.util.*;
|
|
|
-import java.util.concurrent.TimeUnit;
|
|
|
import java.util.function.Supplier;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@@ -110,14 +96,8 @@ public class TradeOrderServiceImpl implements TradeOrderService {
|
|
|
@Resource
|
|
|
private OtaDistributorApi otaDistributorApi;
|
|
|
@Resource
|
|
|
- private RedissonClient redissonClient;
|
|
|
- @Resource
|
|
|
- private TradeDetailBaseMapper tradeDetailBaseMapper;
|
|
|
- @Resource
|
|
|
private ThirdGateSystemService thirdGateSystemService;
|
|
|
@Resource
|
|
|
- private ConfigUtils configUtils;
|
|
|
- @Resource
|
|
|
private TradeDetailMapper tradeDetailMapper;
|
|
|
@Resource
|
|
|
private TradeRefundRepositoryService tradeRefundRepositoryService;
|
|
|
@@ -133,10 +113,10 @@ public class TradeOrderServiceImpl implements TradeOrderService {
|
|
|
public PageResult<TradeOrderRespVO> getPlatOrderPage(TradeOrderPageReqVO pageReqVO) {
|
|
|
IPage<TradeOrderRespVO> page = new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
|
|
|
LoginUser agencyLoginUser = agencyAuthUtils.getAgencyLoginUser();
|
|
|
- if(agencyLoginUser.getDistributorId()!=null) {
|
|
|
+ if (agencyLoginUser.getDistributorId() != null) {
|
|
|
pageReqVO.setDistributorId(agencyLoginUser.getDistributorId());
|
|
|
}
|
|
|
- if(agencyLoginUser.getStoreId()!=null) {
|
|
|
+ if (agencyLoginUser.getStoreId() != null) {
|
|
|
pageReqVO.setStoreId(agencyLoginUser.getStoreId());
|
|
|
}
|
|
|
IPage<TradeOrderRespVO> iPage = tradeOrderMapper.getTradeOrderUserPage(page, pageReqVO);
|
|
|
@@ -240,49 +220,6 @@ public class TradeOrderServiceImpl implements TradeOrderService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
- @Deprecated
|
|
|
- public CommonResult<?> bindVisitor(TradeBindVisitorReqDTO tradeBindVisitorReqDTO) {
|
|
|
- //待使用、已核销门票可以补录信息
|
|
|
- List<String> detailVoucherList = tradeBindVisitorReqDTO.getBindItemList().stream().map(TradeBindVisitorReqDTO.BindItem::getVoucherCode).collect(Collectors.toList());
|
|
|
- List<TradeDetailRespVO> detailList = tradeOrderRepositoryService.getDetailAndVisitor(tradeBindVisitorReqDTO.getOrderId(), detailVoucherList);
|
|
|
- List<TradeVisitorDO> visitorDOList = new ArrayList<>();
|
|
|
- //验证、构建补录对象
|
|
|
- for (TradeBindVisitorReqDTO.BindItem bindItem : tradeBindVisitorReqDTO.getBindItemList()) {
|
|
|
- TradeDetailRespVO tradeDetailRespVO = detailList.stream().filter(detail -> ObjectUtil.equal(detail.getVoucherCode(), bindItem.getVoucherCode())).findFirst().orElse(null);
|
|
|
- //实名产品不能补录、待使用、已核销可以补录
|
|
|
- int bindCount;
|
|
|
- if (tradeDetailRespVO == null || tradeDetailRespVO.getUseRealName() == YES ||
|
|
|
- ObjectUtil.notEqual(tradeDetailRespVO.getVoucherStatus(), VoucherStatusEnum.UNUSED.getStatus()) && ObjectUtil.notEqual(tradeDetailRespVO.getVoucherStatus(), VoucherStatusEnum.VERIFIED.getStatus())
|
|
|
- || ((bindCount = tradeDetailRespVO.getQuantityOfOne() - tradeDetailRespVO.getVisitors().size()) == 0) || bindItem.getVisitorList().isEmpty()) {
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- for (int i = 0; i < bindCount; i++) {
|
|
|
- if (i == bindItem.getVisitorList().size()) {
|
|
|
- break;
|
|
|
- }
|
|
|
- TradeOrderCreateReqDTO.Visitor visitor = bindItem.getVisitorList().get(i);
|
|
|
- TradeVisitorDO tradeVisitorDO = TradeOrderConvert.INSTANCE.convert(visitor);
|
|
|
- //姓名证件必填
|
|
|
- if (StrUtil.isBlank(tradeVisitorDO.getCredentialNo()) || StrUtil.isBlank(tradeVisitorDO.getName())) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- tradeVisitorDO.setId(IdWorker.getId());
|
|
|
- tradeVisitorDO.setDetailId(tradeDetailRespVO.getId());
|
|
|
- visitorDOList.add(tradeVisitorDO);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if (!visitorDOList.isEmpty()) {
|
|
|
- //保存补录信息
|
|
|
- tradeOrderRepositoryService.saveVisitorList(visitorDOList);
|
|
|
- //如果有平台供应商可以补录
|
|
|
- tradeSupplierService.bindVisitor(tradeBindVisitorReqDTO.getOrderId(), visitorDOList);
|
|
|
- }
|
|
|
-
|
|
|
- return visitorDOList.isEmpty() ? CommonResult.error(ORDER_BIND_VISITOR_FAIL) : CommonResult.success(visitorDOList.size());
|
|
|
- }
|
|
|
|
|
|
@Override
|
|
|
public CommonResult<Long> bindOrder(TradeBindOrderReqDTO tradeBindOrderReqDTO) {
|
|
|
@@ -313,17 +250,6 @@ public class TradeOrderServiceImpl implements TradeOrderService {
|
|
|
return CommonResult.success(tradeOrderBindDO.getId());
|
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
- public CommonResult<?> unbindOrder(TradeBindOrderReqDTO tradeBindOrderReqDTO) {
|
|
|
- Asserts.isTrue(ObjectUtil.notEqual(tradeBindOrderReqDTO.getBindId(), tradeBindOrderReqDTO.getOrderId()), "解绑订单不能相等");
|
|
|
-
|
|
|
- TradeOrderBindDO orderBindDO = tradeOrderRepositoryService.getBindOrder(tradeBindOrderReqDTO.getOrderId(),
|
|
|
- tradeBindOrderReqDTO.getBindId(), tradeBindOrderReqDTO.getType());
|
|
|
- Asserts.isTrue(orderBindDO != null, "订单关联系不存在");
|
|
|
- tradeOrderRepositoryService.deleteOrderBind(orderBindDO.getId());
|
|
|
-
|
|
|
- return CommonResult.success(true);
|
|
|
- }
|
|
|
|
|
|
@Override
|
|
|
public CommonResult<?> modifyVisitor(TradeModifyVisitorReqDTO tradeModifyVisitorReqDTO) {
|
|
|
@@ -382,37 +308,6 @@ public class TradeOrderServiceImpl implements TradeOrderService {
|
|
|
}
|
|
|
|
|
|
|
|
|
- //验证子票是否重复购买
|
|
|
-// if(CollUtil.isNotEmpty(productSpuRespDTO.getProductGroupList())){
|
|
|
-//
|
|
|
-// for (TradeOrderCreateReqDTO.OrderDetail orderDetail : tradeVisitorDOList) {
|
|
|
-// for (TradeOrderCreateReqDTO.OrderDetailBase orderDetailBase : orderDetail.getDetailBaseList()) {
|
|
|
-// ProductGroupRespDTO productGroupRespDTO = productSpuRespDTO.getProductGroupList().stream().filter(item -> ObjectUtil.equal(item.getProductBaseId(), orderDetailBase.getProductBaseId())).findFirst().orElse(null);
|
|
|
-// LocalDateTime useDate = tradeDetailDO.getUseDate();
|
|
|
-// if(orderDetailBase.getUseDate()!=null){
|
|
|
-// useDate = DateUtil.toLocalDateTime(orderDetailBase.getUseDate());
|
|
|
-// }
|
|
|
-// if(productGroupRespDTO!=null && useDate!=null && ObjectUtil.equal(productGroupRespDTO.getCanRepeatBuy(),NO)){
|
|
|
-//
|
|
|
-// List<Long> detailIdList = tradeDetailBaseDOList.stream().filter(tradeDetailBaseDO -> ObjectUtil.equal(tradeDetailBaseDO.getProductBaseId(),productGroupRespDTO.getProductBaseId())).map(tradeDetailBaseDO->tradeDetailBaseDO.getDetailId()).collect(Collectors.toList());
|
|
|
-// credentialNoList = tradeVisitorDOList.stream().filter(visitor->{
|
|
|
-// Long detailId = detailIdList.stream().filter(id->ObjectUtil.equal(id,visitor.getDetailId())).findFirst().orElse(null);
|
|
|
-// return detailId!=null;
|
|
|
-// }).map(item->item.getCredentialNo()).collect(Collectors.toList());
|
|
|
-// if(CollUtil.isEmpty(credentialNoList)){
|
|
|
-// continue;
|
|
|
-// }
|
|
|
-// List<Map<String, Object>> productCountList = tradeOrderRepositoryService.getVisitorOrderProductBaseCount(productGroupRespDTO.getProductBaseId(), tradeDetailDO.getUseDate(), credentialNoList,excludeOrderId);
|
|
|
-// if(CollUtil.isNotEmpty(productCountList)){
|
|
|
-// String credentialNos = productCountList.stream().map(item-> MapUtil.getStr(item,"credential_no")).collect(Collectors.joining(","));
|
|
|
-// throw exception(ORDER_VISITOR_REPEAT_BUY_PRODUCT_BASE,credentialNos,productGroupRespDTO.getProductBaseName());
|
|
|
-// }
|
|
|
-// }
|
|
|
-// }
|
|
|
-// }
|
|
|
-// }
|
|
|
-
|
|
|
-
|
|
|
tradeOrderRepositoryService.insertOrUpdateVisitor(tradeVisitorDOList);
|
|
|
|
|
|
//如果有平台供应商可以补录
|
|
|
@@ -426,151 +321,6 @@ public class TradeOrderServiceImpl implements TradeOrderService {
|
|
|
return CommonResult.success(null);
|
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
- @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.TRANSFER)
|
|
|
- public CommonResult<?> transferOrder(TradeTransferReqDTO tradeTransferReqDTO) {
|
|
|
- String lockKey = String.format(UPDATE_ORDER_LOCK, tradeTransferReqDTO.getOrderId());
|
|
|
- RLock lock = redissonClient.getLock(lockKey);
|
|
|
- try {
|
|
|
- if (lock.tryLock(60, 90, TimeUnit.SECONDS)) {
|
|
|
- TradeOrderDO tradeOrderDO = tradeOrderRepositoryService.getById(tradeTransferReqDTO.getOrderId());
|
|
|
- if (tradeOrderDO.getTransDistributorId() != null || (ObjectUtil.notEqual(tradeOrderDO.getOrderStatus(), TradeOrderStatusEnum.UNUSED.getStatus()) && ObjectUtil.notEqual(tradeOrderDO.getOrderStatus(), TradeOrderStatusEnum.PARTIAL_REFUND.getStatus()))) {
|
|
|
- return CommonResult.error(500, "当前状态不能转交" + tradeOrderDO.getOrderStatus());
|
|
|
- }
|
|
|
- Asserts.isTrue(tradeOrderDO.getTransDistributorId() == null, "当前订单不能二次转交");
|
|
|
- //验证规则,如果计调单已经出行或者单资源已经调度不能转交
|
|
|
- List<TradeDetailDO> tradeDetailList = tradeOrderRepositoryService.getPlatDetailByOrderId(tradeOrderDO.getId());
|
|
|
- List<String> checkList = tradeDetailList.stream().map(tradeDetail -> tradeDetail.getId().toString()).collect(Collectors.toList());
|
|
|
-// if (!checkList.isEmpty()) {
|
|
|
-// DispatchVerifyReqDTO reqDTO = new DispatchVerifyReqDTO();
|
|
|
-// reqDTO.setOrderDetailIdList(checkList);
|
|
|
-// Asserts.isTrue(!dispatchApi.isPlanTravlV2(reqDTO).getCheckedData(), "门票已出行,规则要求不能转交");
|
|
|
-// }
|
|
|
- tradeOrderDO.setTransAmount(tradeTransferReqDTO.getTransAmount());
|
|
|
- tradeOrderDO.setTransDistributorId(tradeTransferReqDTO.getDistributorId());
|
|
|
- tradeOrderDO.setOrderStatus(TradeOrderStatusEnum.TRANSFER.getStatus());
|
|
|
- tradeOrderRepositoryService.updateTransOrder(tradeOrderDO);
|
|
|
- Map<String, Object> extMap = new HashMap<>();
|
|
|
- extMap.put("ota", tradeTransferReqDTO.getDistributorName());
|
|
|
- extMap.put("price", "¥" + tradeTransferReqDTO.getTransAmount().setScale(2, RoundingMode.HALF_UP));
|
|
|
- if (!tradeTransferReqDTO.getSpecPrices().isEmpty()) {
|
|
|
- // 记录转交规格单价
|
|
|
- StringJoiner joiner = new StringJoiner("、 ");
|
|
|
- for (TradeTransferSpecDTO item : tradeTransferReqDTO.getSpecPrices()) {
|
|
|
- DictDataApi dictDataApi = SpringUtil.getBean(DictDataApi.class);
|
|
|
- List<DictDataRespDTO> dictDataRespDTOList = dictDataApi.getDictDataList("project_specification_type");
|
|
|
- dictDataRespDTOList.stream()
|
|
|
- .filter(i -> Objects.equals(i.getValue(), item.getSpecType()))
|
|
|
- .findFirst()
|
|
|
- .ifPresent(specDict -> joiner.add(specDict.getLabel() + ":¥" + item.getPrice().setScale(2, RoundingMode.HALF_UP)));
|
|
|
- }
|
|
|
- extMap.put("specPrices", joiner.toString());
|
|
|
- }
|
|
|
- //记录订单日志
|
|
|
- TradeOrderLogUtils.setOrderInfo(tradeTransferReqDTO.getOrderId(),
|
|
|
- TradeOrderStatusEnum.UNUSED.getStatus(),
|
|
|
- TradeOrderStatusEnum.TRANSFER.getStatus(), extMap);
|
|
|
- return CommonResult.success(null);
|
|
|
- }
|
|
|
- } catch (ServiceException e) {
|
|
|
- ExceptionUtils.log(log, "订单转交异常:", e);
|
|
|
- return CommonResult.error(e);
|
|
|
- } catch (Exception e) {
|
|
|
- log.error("订单转交异常:", e);
|
|
|
- } finally {
|
|
|
- if (lock.isLocked() && lock.isHeldByCurrentThread()) {
|
|
|
- lock.unlock();
|
|
|
- }
|
|
|
- }
|
|
|
- return CommonResult.error(ORDER_TRANSFER_FAIL);
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.TRANSFER_REVOKE)
|
|
|
- public CommonResult<?> transferOrderRevoke(TradeRefundRespDTO tradeRefundRespDTO) {
|
|
|
- String lockKey = String.format(UPDATE_ORDER_LOCK, tradeRefundRespDTO.getOrderId());
|
|
|
- RLock lock = redissonClient.getLock(lockKey);
|
|
|
- try {
|
|
|
- if (lock.tryLock(60, 90, TimeUnit.SECONDS)) {
|
|
|
- TradeOrderDO tradeOrderDO = tradeOrderRepositoryService.getById(tradeRefundRespDTO.getOrderId());
|
|
|
- Asserts.isTrue(ObjectUtil.equal(tradeOrderDO.getOrderStatus(), TradeOrderStatusEnum.TRANSFER.getStatus()), "当前状态不能撤回转交{}", tradeOrderDO.getOrderStatus());
|
|
|
- Asserts.isTrue(tradeOrderDO != null && tradeOrderDO.getTransDistributorId() != null, "当前订单不能撤回转交");
|
|
|
- tradeOrderDO.setTransAmount(null);
|
|
|
- tradeOrderDO.setTransDistributorId(null);
|
|
|
- tradeOrderDO.setOrderStatus(TradeOrderStatusEnum.UNUSED.getStatus());
|
|
|
- tradeOrderRepositoryService.updateTransOrder(tradeOrderDO);
|
|
|
- //记录订单日志
|
|
|
- TradeOrderLogUtils.setOrderInfo(tradeRefundRespDTO.getOrderId(),
|
|
|
- TradeOrderStatusEnum.TRANSFER.getStatus(),
|
|
|
- TradeOrderStatusEnum.UNUSED.getStatus());
|
|
|
- return CommonResult.success(null);
|
|
|
- }
|
|
|
- } catch (ServiceException e) {
|
|
|
- ExceptionUtils.log(log, "订单转交异常:", e);
|
|
|
- return CommonResult.error(e);
|
|
|
- } catch (Exception e) {
|
|
|
- log.error("订单转交异常:", e);
|
|
|
- } finally {
|
|
|
- if (lock.isLocked() && lock.isHeldByCurrentThread()) {
|
|
|
- lock.unlock();
|
|
|
- }
|
|
|
- }
|
|
|
- return CommonResult.error(ORDER_TRANSFER_FAIL);
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public CommonResult<?> orderDispatch(TradeOrderDispatchReqDTO tradeOrderDispatchReqDTO) {
|
|
|
- log.error("订单orderDispatch调度开始:{}", tradeOrderDispatchReqDTO.getDispatchId() + ";" + tradeOrderDispatchReqDTO.getProjectCode() + ";" + ";" + tradeOrderDispatchReqDTO.getDispatchDetailList().size());
|
|
|
- long s1 = System.currentTimeMillis();
|
|
|
- try {
|
|
|
-
|
|
|
- TreeSet<Long> orderIdSet = new TreeSet<>();
|
|
|
- if (tradeOrderDispatchReqDTO.getType() == null || tradeOrderDispatchReqDTO.getType() == 0) {
|
|
|
- //删除计调订单原关联关系
|
|
|
- TradeOrderDispatchDO tradeOrderDispatchDO = new TradeOrderDispatchDO();
|
|
|
- tradeOrderDispatchDO.setDispatchId(tradeOrderDispatchReqDTO.getDispatchId());
|
|
|
- if (StringUtils.isNotBlank(tradeOrderDispatchReqDTO.getProjectCode())) {
|
|
|
- tradeOrderDispatchDO.setProjectCode(tradeOrderDispatchReqDTO.getProjectCode());
|
|
|
- }
|
|
|
-
|
|
|
- List<Long> orderIdList = tradeOrderRepositoryService.getOrderIdListByDispatchId(tradeOrderDispatchReqDTO.getDispatchId(), tradeOrderDispatchReqDTO.getProjectCode());
|
|
|
- if (CollUtil.isNotEmpty(orderIdList)) {
|
|
|
- orderIdSet.addAll(orderIdList);
|
|
|
- tradeOrderRepositoryService.delOrderDispatch(tradeOrderDispatchDO);
|
|
|
- }
|
|
|
- }
|
|
|
- //有数据才进行关联
|
|
|
- if (CollUtil.isNotEmpty(tradeOrderDispatchReqDTO.getDispatchDetailList())) {
|
|
|
- //重新关联
|
|
|
- List<TradeOrderDispatchDO> dispatchList = tradeOrderDispatchReqDTO.getDispatchDetailList().stream().map(detail -> {
|
|
|
- TradeOrderDispatchDO dispatchDO = TradeOrderConvert.INSTANCE.convert(detail);
|
|
|
- if (detail.getDetailBaseId() != null) {
|
|
|
- TradeDetailBaseDO tradeDetailBaseDO = tradeDetailBaseMapper.selectById(detail.getDetailBaseId());
|
|
|
- dispatchDO.setProjectCode(tradeDetailBaseDO.getProjectCode());
|
|
|
- dispatchDO.setDispatchCount(1);
|
|
|
- }
|
|
|
- dispatchDO.setId(IdWorker.getId());
|
|
|
- dispatchDO.setDispatchId(tradeOrderDispatchReqDTO.getDispatchId());
|
|
|
- if (StringUtils.isNotBlank(dispatchDO.getProjectCode()) && StringUtils.isNotBlank(tradeOrderDispatchReqDTO.getProjectCode())) {
|
|
|
- dispatchDO.setProjectCode(tradeOrderDispatchReqDTO.getProjectCode());
|
|
|
- }
|
|
|
- orderIdSet.add(dispatchDO.getOrderId());
|
|
|
- return dispatchDO;
|
|
|
-
|
|
|
- }).collect(Collectors.toList());
|
|
|
- tradeOrderRepositoryService.saveOrderDispatch(dispatchList);
|
|
|
- }
|
|
|
- //变更订单的计调状态,耗时操作异步执行
|
|
|
- Long tenantId = TenantContextHolder.getTenantId();
|
|
|
- ThreadUtil.execute(() -> {
|
|
|
- tradeOrderRepositoryService.afterOrderDispatch(orderIdSet, tenantId);
|
|
|
- });
|
|
|
- } catch (Exception e) {
|
|
|
- log.error("订单orderDispatch调度异常:{}", tradeOrderDispatchReqDTO.getDispatchId() + ";" + tradeOrderDispatchReqDTO + ";" + e.getMessage());
|
|
|
- }
|
|
|
- log.error("订单orderDispatch调度结束:{},执行时间:{}", tradeOrderDispatchReqDTO.getDispatchId() + ";" + tradeOrderDispatchReqDTO.getProjectCode() + ";" + ";" + tradeOrderDispatchReqDTO.getDispatchDetailList().size(), System.currentTimeMillis() - s1);
|
|
|
- return CommonResult.success(null);
|
|
|
- }
|
|
|
|
|
|
@Override
|
|
|
@TradeOrderLog(operateType = TradeOrderOperateTypeEnum.ORDER_APPLY_CHANGE)
|
|
|
@@ -659,9 +409,6 @@ public class TradeOrderServiceImpl implements TradeOrderService {
|
|
|
|
|
|
/**
|
|
|
* 构建创建订单
|
|
|
- *
|
|
|
- * @param orderCreateReqDTO
|
|
|
- * @return
|
|
|
*/
|
|
|
private TradeOrderBO buildCreateOrder(TradeOrderCreateReqDTO orderCreateReqDTO) {
|
|
|
//检查关联订单
|
|
|
@@ -738,9 +485,6 @@ public class TradeOrderServiceImpl implements TradeOrderService {
|
|
|
|
|
|
/**
|
|
|
* 构建创建订单
|
|
|
- *
|
|
|
- * @param orderCreateReqDTO
|
|
|
- * @return
|
|
|
*/
|
|
|
private TradeOrderBO buildShipCreateOrder(ShipTradeOrderCreateReqVO orderCreateReqDTO) {
|
|
|
//重置金额
|
|
|
@@ -772,34 +516,34 @@ public class TradeOrderServiceImpl implements TradeOrderService {
|
|
|
tradeOrderDO.setLinkEmail(orderCreateReqDTO.getLinkEmail());
|
|
|
//设置团散类型
|
|
|
if (tradeOrderDO.getVisitorType() == null) {
|
|
|
- if (tradeOrderDO.getSellMethod() == 7||tradeOrderDO.getSellMethod() == 1) {
|
|
|
+ if (tradeOrderDO.getSellMethod() == 7 || tradeOrderDO.getSellMethod() == 1) {
|
|
|
tradeOrderDO.setVisitorType(1);
|
|
|
} else {
|
|
|
tradeOrderDO.setVisitorType(0);
|
|
|
}
|
|
|
}
|
|
|
- if(orderCreateReqDTO.getOrderId()!=null) {
|
|
|
+ if (orderCreateReqDTO.getOrderId() != null) {
|
|
|
tradeOrderDO.setId(orderCreateReqDTO.getOrderId());
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
tradeOrderDO.setId(IdWorker.getId());
|
|
|
}
|
|
|
//旅行社编号 + 航次编号 + 3位 旅行社当天订单流水号
|
|
|
- if(org.apache.commons.lang3.StringUtils.isNotEmpty(orderCreateReqDTO.getOrderNo())){
|
|
|
+ if (org.apache.commons.lang3.StringUtils.isNotEmpty(orderCreateReqDTO.getOrderNo())) {
|
|
|
tradeOrderDO.setOrderNo(orderCreateReqDTO.getOrderNo());
|
|
|
- }else {
|
|
|
+ } else {
|
|
|
tradeOrderDO.setOrderNo(tradeUUCodeUtils.generateOrderNo(ORDER_PREFIX));
|
|
|
}
|
|
|
tradeOrderDO.setOrderStatus(TradeOrderStatusEnum.INIT.getStatus());
|
|
|
- if(orderCreateReqDTO.getIsYd()!=null && orderCreateReqDTO.getIsYd() == 1){
|
|
|
+ if (orderCreateReqDTO.getIsYd() != null && orderCreateReqDTO.getIsYd() == 1) {
|
|
|
tradeOrderDO.setOrderStatus(TradeOrderStatusEnum.YD.getStatus());
|
|
|
- }else if(orderCreateReqDTO.getConfirmType()!=null && orderCreateReqDTO.getConfirmType() == 1){
|
|
|
+ } else if (orderCreateReqDTO.getConfirmType() != null && orderCreateReqDTO.getConfirmType() == 1) {
|
|
|
//订单需要审核
|
|
|
tradeOrderDO.setOrderStatus(TradeOrderStatusEnum.TRANSFER.getStatus());
|
|
|
- }else if(orderCreateReqDTO.getIsYd()!=null && orderCreateReqDTO.getIsYd() == 0){
|
|
|
+ } else if (orderCreateReqDTO.getIsYd() != null && orderCreateReqDTO.getIsYd() == 0) {
|
|
|
tradeOrderDO.setOrderStatus(TradeOrderStatusEnum.UNPAID.getStatus());
|
|
|
tradeOrderDO.setConfirmDate(LocalDateTime.now());
|
|
|
}
|
|
|
- if(tradeOrderDO.getSellMethod() == 3){
|
|
|
+ if (tradeOrderDO.getSellMethod() == 3) {
|
|
|
tradeOrderDO.setOrderStatus(TradeOrderStatusEnum.YD.getStatus());
|
|
|
}
|
|
|
OrderJzDO orderJzDO = new OrderJzDO();
|
|
|
@@ -812,7 +556,7 @@ public class TradeOrderServiceImpl implements TradeOrderService {
|
|
|
tradeOrderBO.setOrderJzDO(orderJzDO);
|
|
|
|
|
|
TradeOrderBindDO tradeOrderBindDO = orderCreateReqDTO.getTradeOrderBindDO();
|
|
|
- if(tradeOrderBindDO != null) {
|
|
|
+ if (tradeOrderBindDO != null) {
|
|
|
tradeOrderBindDO.setOrderId(tradeOrderDO.getId());
|
|
|
tradeOrderBindDO.setCreateTime(LocalDateTime.now());
|
|
|
tradeOrderBindDO.setCreator(tradeOrderDO.getCreator());
|
|
|
@@ -861,21 +605,6 @@ public class TradeOrderServiceImpl implements TradeOrderService {
|
|
|
if (SellMethodEnum.isPlatSellMethod(tradeOrderDO.getSellMethod())) {
|
|
|
Asserts.isTrue(ObjectUtil.equal(tradeOrderDO.getSourceId(), orderCreateReqDTO.getOrderProperty().getSourceId()), "无该订单操作权限");
|
|
|
}
|
|
|
-// //如果被关联订单已经是增加订单了,则不能再增加
|
|
|
-// if(ObjectUtil.equal(orderCreateReqDTO.getIsAddOrder() ,YES)){
|
|
|
-// TradeOrderBindDO bindOrder = tradeOrderRepositoryService.getBindOrder(orderCreateReqDTO.getMainOrderId(), TradeOrderBindEnum.ADD_ORDER.getType());
|
|
|
-// Asserts.isTrue(bindOrder == null,"当前订单为增加订单,不能再被增加");
|
|
|
-// //增加订单,原订单不能被核销,全部退款
|
|
|
-// Asserts.isTrue(ObjectUtils.equalsAny(tradeOrderDO.getOrderStatus(), TradeOrderStatusEnum.UNUSED.getStatus(),TradeOrderStatusEnum.PARTIAL_REFUND.getStatus())
|
|
|
-// ,"当前订单状态不能被增加{}",tradeOrderDO.getOrderStatus());
|
|
|
-// if(ObjectUtils.equalsAny(tradeOrderDO.getOrderStatus(),TradeOrderStatusEnum.PARTIAL_REFUND.getStatus())){
|
|
|
-// //部分退可能有已检票门票
|
|
|
-// Long checkCount = tradeOrderRepositoryService.getCheckCount(tradeOrderDO.getId());
|
|
|
-// if(checkCount!=null && checkCount>0){
|
|
|
-// Asserts.isTrue(false,"当前订单已核销不能被增加");
|
|
|
-// }
|
|
|
-// }
|
|
|
-// }
|
|
|
return tradeOrderDO;
|
|
|
}
|
|
|
|
|
|
@@ -889,7 +618,7 @@ public class TradeOrderServiceImpl implements TradeOrderService {
|
|
|
try {
|
|
|
productSpuRespDTO = productApi.getProduct(Long.parseLong(orderItem.getProductId())).getData();
|
|
|
} catch (Exception e) {
|
|
|
- log.error("获取产品信息失败:"+e);
|
|
|
+ log.error("获取产品信息失败:" + e);
|
|
|
}
|
|
|
}
|
|
|
if (productSpuRespDTO == null) {
|
|
|
@@ -907,7 +636,7 @@ public class TradeOrderServiceImpl implements TradeOrderService {
|
|
|
List<String> ticketNoList = tradeUUCodeUtils.generateTicketNo(orderDetail.getVisitorList().size());
|
|
|
int i = 0;
|
|
|
ProductSpuRespDTO product;
|
|
|
- if (orderDetail.getProductType() == 1||orderDetail.getProductType() == 2) {
|
|
|
+ if (orderDetail.getProductType() == 1 || orderDetail.getProductType() == 2) {
|
|
|
product = productApi.getProduct(Long.parseLong(orderDetail.getProductId())).getCheckedData();
|
|
|
} else {
|
|
|
product = finalProductSpuRespDTO;
|
|
|
@@ -933,7 +662,7 @@ public class TradeOrderServiceImpl implements TradeOrderService {
|
|
|
//补任意游玩日期
|
|
|
tradeOrderDO.setTravelDate(DateUtils.of(tradeDetailDO.getUseDate()));
|
|
|
}
|
|
|
- List<TradeDetailBaseDO> detailBaseDOList = buildShipDetailBase(orderDetail,tradeDetailDO,product);
|
|
|
+ List<TradeDetailBaseDO> detailBaseDOList = buildShipDetailBase(orderDetail, tradeDetailDO, product);
|
|
|
tradeDetailBaseDOList.addAll(detailBaseDOList);
|
|
|
TradeVisitorDO tradeVisitorDO = new TradeVisitorDO();
|
|
|
tradeVisitorDO.setId(IdWorker.getId());
|
|
|
@@ -950,14 +679,15 @@ public class TradeOrderServiceImpl implements TradeOrderService {
|
|
|
tradeVisitorDO.setRemark(visitor.getRemark());
|
|
|
tradeVisitorDO.setDeleted(false);
|
|
|
tradeVisitorDO.setNationality(visitor.getNationality());
|
|
|
- tradeVisitorDO.setCohabitation(visitor.getCohabitation());
|
|
|
- tradeVisitorDO.setRoomId(visitor.getRoomId());
|
|
|
- tradeVisitorDO.setInitRoomId(visitor.getInitRoomId());
|
|
|
- tradeVisitorDO.setFinalRoomId(visitor.getFinalRoomId());
|
|
|
+ if (orderDetail.getProductType() == 0) {
|
|
|
+ tradeVisitorDO.setCohabitation(visitor.getCohabitation());
|
|
|
+ tradeVisitorDO.setRoomId(visitor.getRoomId());
|
|
|
+ tradeVisitorDO.setInitRoomId(visitor.getInitRoomId());
|
|
|
+ tradeVisitorDO.setFinalRoomId(visitor.getFinalRoomId());
|
|
|
+ }
|
|
|
tradeVisitorDO.setCreateTime(LocalDateTime.now());
|
|
|
tradeVisitorDOList.add(tradeVisitorDO);
|
|
|
}
|
|
|
-
|
|
|
});
|
|
|
|
|
|
tradeOrderDetailBO.setTradeDetailDOList(tradeDetailDOList);
|
|
|
@@ -1172,7 +902,7 @@ public class TradeOrderServiceImpl implements TradeOrderService {
|
|
|
private List<TradeDetailBaseDO> buildShipDetailBase(ShipTradeOrderCreateReqVO.OrderDetail orderDetail, TradeDetailDO tradeDetailDO, ProductSpuRespDTO productSpuRespDTO) {
|
|
|
List<TradeDetailBaseDO> detailBaseDOList = new ArrayList<>();
|
|
|
List<ProductGroupRespDTO> productGroupList = productSpuRespDTO.getProductGroupList();
|
|
|
- if(productGroupList!=null) {
|
|
|
+ if (productGroupList != null) {
|
|
|
productGroupList.forEach(productGroup -> {
|
|
|
TradeDetailBaseDO detailBaseDO = new TradeDetailBaseDO();
|
|
|
detailBaseDO.setId(IdWorker.getId());
|
|
|
@@ -1552,10 +1282,6 @@ public class TradeOrderServiceImpl implements TradeOrderService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
- public TradeDetailBaseDO getTradeDetailByNo(String ticketNo) {
|
|
|
- return tradeDetailMapper.selectPlatTradeBaseDetail(ticketNo);
|
|
|
- }
|
|
|
@Override
|
|
|
public int getMaxOrderNo(Long voyageId) {
|
|
|
return tradeDetailMapper.getMaxOrderNo(voyageId);
|
|
|
@@ -1567,86 +1293,6 @@ public class TradeOrderServiceImpl implements TradeOrderService {
|
|
|
}
|
|
|
|
|
|
|
|
|
- @Override
|
|
|
- public void autoBindRelatedOrder(TradeOrderDO tradeOrderDO) {
|
|
|
- //此处要排队执行,避免并发查不到
|
|
|
- String lockKey = String.format(UPDATE_ORDER_LOCK, 1);
|
|
|
- RLock lock = redissonClient.getLock(lockKey);
|
|
|
- lock.lock();
|
|
|
- TradeOrderUserDO orderUser = tradeOrderRepositoryService.getOrderUser(tradeOrderDO.getId());
|
|
|
- if (orderUser == null || StrUtil.isBlank(orderUser.getMobile())) {
|
|
|
- return;
|
|
|
- }
|
|
|
- List<Map<String, Object>> orderProductList = tradeOrderRepositoryService.getOrderProduct(tradeOrderDO.getId());
|
|
|
- try {
|
|
|
- for (Map<String, Object> orderProduct : orderProductList) {
|
|
|
- Long productId = MapUtil.getLong(orderProduct, "product_id");
|
|
|
- TradeBindOrderQueryBO vo = new TradeBindOrderQueryBO();
|
|
|
- vo.setProductId(productId);
|
|
|
- vo.setOrderId(tradeOrderDO.getId());
|
|
|
- vo.setTravelDate(tradeOrderDO.getTravelDate());
|
|
|
- vo.setMobile(orderUser.getMobile());
|
|
|
- vo.setRoutePlanId(tradeOrderDO.getRoutePlanId());
|
|
|
- List<TradeOrderDO> canBindOrderList = tradeOrderRepositoryService.getCanBindOrderList(vo);
|
|
|
- if (CollUtil.isEmpty(canBindOrderList)) {
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- TradeOrderDO mainOrder = canBindOrderList.stream().filter(order -> ObjectUtil.equal(order.getIsBind(), ORDER_BIND_TYPE_MAIN)).findFirst().orElse(null);
|
|
|
- if (mainOrder != null) {
|
|
|
- //关联
|
|
|
- TradeOrderBindDO tradeOrderBindDO = new TradeOrderBindDO();
|
|
|
- tradeOrderBindDO.setId(IdWorker.getId());
|
|
|
- tradeOrderBindDO.setType(TradeOrderBindEnum.ORDER_BIND.getType());
|
|
|
- tradeOrderBindDO.setOrderId(mainOrder.getId());
|
|
|
- tradeOrderBindDO.setBindId(tradeOrderDO.getId());
|
|
|
-
|
|
|
- tradeOrderRepositoryService.saveBindOrder(tradeOrderBindDO);
|
|
|
- } else {
|
|
|
- for (TradeOrderDO orderDO : canBindOrderList) {
|
|
|
- TradeOrderBindDO tradeOrderBindDO = new TradeOrderBindDO();
|
|
|
- tradeOrderBindDO.setId(IdWorker.getId());
|
|
|
- tradeOrderBindDO.setType(TradeOrderBindEnum.ORDER_BIND.getType());
|
|
|
- tradeOrderBindDO.setOrderId(tradeOrderDO.getId());
|
|
|
- tradeOrderBindDO.setBindId(orderDO.getId());
|
|
|
-
|
|
|
- tradeOrderRepositoryService.saveBindOrder(tradeOrderBindDO);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- } finally {
|
|
|
- if (lock.isLocked() && lock.isHeldByCurrentThread()) {
|
|
|
- lock.unlock();
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.ORDER_MERGE)
|
|
|
- public void mergeAddOrder(TradeOrderDO tradeOrderDO) {
|
|
|
- if (ObjectUtil.notEqual(tradeOrderDO.getIsAddOrder(), YES)) {
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- TradeOrderBindDO bindOrder = tradeOrderRepositoryService.getBindOrder(tradeOrderDO.getId(), TradeOrderBindEnum.ADD_ORDER.getType());
|
|
|
- TradeOrderDO mainOrder = tradeOrderRepositoryService.getById(bindOrder.getOrderId());
|
|
|
- List<TradeDetailBO> tradeDetailDOList = tradeOrderRepositoryService.getTradeDetailWithBase(tradeOrderDO.getId(), null, null);
|
|
|
-
|
|
|
- //将新订单合并至原订单
|
|
|
- //1.修改detail 、base关联orderId
|
|
|
- //2.修改支付订单orderId
|
|
|
- //3.更改原订单金额,删除新订单
|
|
|
- tradeOrderRepositoryService.updateAddOrder(tradeOrderDO, mainOrder);
|
|
|
- //4.合并平台供应商订单
|
|
|
- tradeSupplierService.mergeSupplierOrder(tradeOrderDO.getId(), mainOrder.getId());
|
|
|
- //如果是otc订单需更新内部旅行社平台金额
|
|
|
- SpringUtil.getBean(TradeOrderBizService.class).updatePlatAmountAfterMergeSuccess(mainOrder);
|
|
|
- //记录订单日志
|
|
|
- TradeOrderLogUtils.setOrderInfo(mainOrder.getId(), mainOrder.getOrderStatus(), mainOrder.getOrderStatus(), MapUtil.<String, Object>builder().put("orderId", tradeOrderDO.getId())
|
|
|
- .put("payAmount", tradeOrderDO.getPayAmount()).put("newPayAmount", tradeOrderDO.getPayAmount().add(mainOrder.getPayAmount())).build());
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
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())) {
|
|
|
Asserts.isTrue(CollUtil.isNotEmpty(tradeDetailPriceList), "下单参数不正确,明细价格不能为空");
|