|
|
@@ -12,12 +12,10 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
import com.github.pagehelper.PageHelper;
|
|
|
import com.github.pagehelper.PageInfo;
|
|
|
+import com.google.common.collect.Lists;
|
|
|
import com.sckw.contract.api.RemoteContractService;
|
|
|
import com.sckw.contract.api.model.dto.res.ContractCommonInfoResDto;
|
|
|
-import com.sckw.contract.api.model.vo.GoodsInfoDto;
|
|
|
-import com.sckw.contract.api.model.vo.LogisticsEntDtoVO;
|
|
|
-import com.sckw.contract.api.model.vo.TradeContractResDto;
|
|
|
-import com.sckw.contract.api.model.vo.TradeContractUnitDto;
|
|
|
+import com.sckw.contract.api.model.vo.*;
|
|
|
import com.sckw.core.common.enums.enums.DictEnum;
|
|
|
import com.sckw.core.common.enums.enums.DictTypeEnum;
|
|
|
import com.sckw.core.common.enums.enums.ErrorCodeEnum;
|
|
|
@@ -37,24 +35,22 @@ import com.sckw.core.web.constant.HttpStatus;
|
|
|
import com.sckw.core.web.context.LoginUserHolder;
|
|
|
import com.sckw.core.web.response.HttpResult;
|
|
|
import com.sckw.fleet.api.RemoteFleetService;
|
|
|
-import com.sckw.fleet.api.model.vo.RTruckVo;
|
|
|
-import com.sckw.fleet.api.model.vo.TmsTruckAxleNumVO;
|
|
|
import com.sckw.fleet.api.model.vo.TruckDispatchCoefficientVO;
|
|
|
import com.sckw.manage.api.RemoteManageService;
|
|
|
import com.sckw.manage.api.model.dto.res.FindEntCooperateResVo;
|
|
|
import com.sckw.mongo.model.SckwTradeOrder;
|
|
|
import com.sckw.order.api.model.*;
|
|
|
import com.sckw.order.dao.KwoTradeOrderMapper;
|
|
|
-import com.sckw.order.enums.ContractStatusEnum;
|
|
|
import com.sckw.order.enums.*;
|
|
|
+import com.sckw.order.enums.ContractStatusEnum;
|
|
|
import com.sckw.order.model.*;
|
|
|
import com.sckw.order.model.dto.*;
|
|
|
-import com.sckw.order.model.vo.req.ContractInfo;
|
|
|
import com.sckw.order.model.vo.req.*;
|
|
|
+import com.sckw.order.model.vo.req.ContractInfo;
|
|
|
+import com.sckw.order.model.vo.res.*;
|
|
|
import com.sckw.order.model.vo.res.GoodsInfoDetailRes;
|
|
|
import com.sckw.order.model.vo.res.OrderDetailRes;
|
|
|
import com.sckw.order.model.vo.res.UnitInfoDetailRes;
|
|
|
-import com.sckw.order.model.vo.res.*;
|
|
|
import com.sckw.payment.api.dubbo.PayCenterDubboService;
|
|
|
import com.sckw.payment.api.dubbo.PaymentDubboService;
|
|
|
import com.sckw.payment.api.model.constant.ChannelEnum;
|
|
|
@@ -83,6 +79,7 @@ import com.sckw.transport.api.model.vo.KwtLogisticsOrderVO;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.dubbo.config.annotation.DubboReference;
|
|
|
+import org.jetbrains.annotations.NotNull;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.cloud.stream.function.StreamBridge;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
@@ -797,26 +794,15 @@ public class KwoTradeOrderService {
|
|
|
List<KwoTradeOrderTransport> list = kwoTradeOrderTransportService.queryList(id);
|
|
|
if (CollUtil.isNotEmpty(list)) {
|
|
|
Map<Long, ContractCommonInfoResDto> contractMap = remoteContractService.queryContractBaseInfo(list.stream().map(KwoTradeOrderTransport::getContractId).collect(Collectors.toList()));
|
|
|
- //贸易合同派单方式
|
|
|
- Integer dispatchWay = (detail.getContractInfo() == null || detail.getContractInfo().getDispatchWay() == null) ? 0 : detail.getContractInfo().getDispatchWay();
|
|
|
+
|
|
|
List<ContractInfo> collect = list.stream().map(d -> {
|
|
|
ContractInfo contractInfo = new ContractInfo();
|
|
|
contractInfo.setContractId(d.getContractId());
|
|
|
contractInfo.setContractNo(d.getContractNo());
|
|
|
Optional.ofNullable(contractMap.get(d.getContractId())).ifPresent(c -> {
|
|
|
- // 新增:若贸易合同为自动派单,则需要过滤自动派单的物流合同
|
|
|
- if (Objects.equals(DispatchWayEnums.AUTO_DISPATCH.getCode(), dispatchWay)) {
|
|
|
- // 仅当合同自身也是自动派单类型时,才赋值字段
|
|
|
- if (Objects.equals(DispatchWayEnums.AUTO_DISPATCH.getCode(), c.getDispatchWay())) {
|
|
|
- contractInfo.setContractName(c.getContactName());
|
|
|
- contractInfo.setContractSigningWay(c.getSigningWayName());
|
|
|
- contractInfo.setContractStatus(c.getStatusName());
|
|
|
- }
|
|
|
- } else {
|
|
|
- contractInfo.setContractName(c.getContactName());
|
|
|
- contractInfo.setContractSigningWay(c.getSigningWayName());
|
|
|
- contractInfo.setContractStatus(c.getStatusName());
|
|
|
- }
|
|
|
+ contractInfo.setContractName(c.getContactName());
|
|
|
+ contractInfo.setContractSigningWay(c.getSigningWayName());
|
|
|
+ contractInfo.setContractStatus(c.getStatusName());
|
|
|
});
|
|
|
return contractInfo;
|
|
|
}).collect(Collectors.toList());
|
|
|
@@ -2130,25 +2116,18 @@ public class KwoTradeOrderService {
|
|
|
throw new BusinessException("贸易合同不存在");
|
|
|
}
|
|
|
|
|
|
- List<LogisticsEntDtoVO> contractLogisticsList = new ArrayList<>();
|
|
|
- //自动派单校验: 判断当前有无包含该商品的有效自动派车物流合同
|
|
|
+ List<LogisticsEntDtoVO> validContractLog = new ArrayList<>();
|
|
|
+ List<LogisticsEntDto> logisticsContractId =new ArrayList<>();
|
|
|
if (Objects.equals(DispatchWayEnums.AUTO_DISPATCH.getCode(), tradeContractResDto.getDispatchWay())) {
|
|
|
- KwoTradeOrderUnit tradeOrderUnit = unitMap.get(String.valueOf(Global.NUMERICAL_TWO));
|
|
|
- //查询满足自动派单的物流合同
|
|
|
- contractLogisticsList = remoteContractService.queryValidAutoContractLogOrder(tradeOrderUnit.getEntId(), byOrderId.getId());
|
|
|
- if (CollectionUtils.isEmpty(contractLogisticsList)) {
|
|
|
- throw new BusinessException("未找到该商品有效的自动派车物流合同,请先签订自动派车物流合同");
|
|
|
- }
|
|
|
+ //自动派单校验: 判断当前有无包含该商品的有效自动派车物流合同
|
|
|
+ validContractLog = checkAutoContractLogOrder(unitMap, byOrderId, tradeContractResDto);
|
|
|
} else {
|
|
|
- List<LogisticsEntDto> logisticsContractId = tradeOrderAuditParam.getLogisticsContractList();
|
|
|
+ logisticsContractId = tradeOrderAuditParam.getLogisticsContractList();
|
|
|
if (Objects.equals(tradeContractResDto.getConsignment(), 2) && CollUtil.isEmpty(logisticsContractId)) {
|
|
|
throw new BusinessException("卖方托运时,物流合同不能为空");
|
|
|
}
|
|
|
}
|
|
|
- List<LogisticsEntDto> logisticsContractId = tradeOrderAuditParam.getLogisticsContractList();
|
|
|
- if (Objects.equals(tradeContractResDto.getConsignment(), 2) && CollUtil.isEmpty(logisticsContractId)) {
|
|
|
- throw new BusinessException("卖方托运时,物流合同不能为空");
|
|
|
- }
|
|
|
+
|
|
|
//更新贸易订单状态
|
|
|
kwoTradeOrder.setStatus(Objects.equals(tradeOrderAuditParam.getStatus(), 2) ? TradeOrderStatusEnum.BACK.getCode() : TradeOrderStatusEnum.ING.getCode());
|
|
|
kwoTradeOrderMapper.updateById(kwoTradeOrder);
|
|
|
@@ -2198,7 +2177,7 @@ public class KwoTradeOrderService {
|
|
|
AddLogisticOrderParam addLogisticOrderParam = new AddLogisticOrderParam();
|
|
|
if (DispatchWayEnums.AUTO_DISPATCH.getCode().equals(kwoTradeOrder.getDispatchWay())) {
|
|
|
// 自动派车物流合同
|
|
|
- List<LogisticInfo> collect = contractLogisticsList.stream().map(d -> {
|
|
|
+ List<LogisticInfo> logisticInfoList = validContractLog.stream().map(d -> {
|
|
|
LogisticInfo logisticInfo = new LogisticInfo();
|
|
|
logisticInfo.setContractId(d.getContractId());
|
|
|
logisticInfo.setContractNo(d.getContractNo());
|
|
|
@@ -2221,7 +2200,7 @@ public class KwoTradeOrderService {
|
|
|
|
|
|
return logisticInfo;
|
|
|
}).collect(Collectors.toList());
|
|
|
- addLogisticOrderParam.setLogisticInfo(collect);
|
|
|
+ addLogisticOrderParam.setLogisticInfo(logisticInfoList);
|
|
|
addLogisticOrderParam.setDispatchWay(DispatchWayEnums.AUTO_DISPATCH.getCode());
|
|
|
|
|
|
//实际派车数
|
|
|
@@ -2365,6 +2344,35 @@ public class KwoTradeOrderService {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+ @NotNull
|
|
|
+ private List<LogisticsEntDtoVO> checkAutoContractLogOrder(Map<String, KwoTradeOrderUnit> unitMap, KwoTradeOrderGoods byOrderId, TradeContractResDto tradeContractResDto) {
|
|
|
+ List<LogisticsEntDtoVO> validContractLog;
|
|
|
+ KwoTradeOrderUnit tradeOrderUnit = unitMap.get(String.valueOf(Global.NUMERICAL_TWO));
|
|
|
+ //查询满足自动派单的物流合同
|
|
|
+ List<LogisticsEntDtoVO> contractLogisticsList = remoteContractService.queryAutoContractLogOrder(tradeOrderUnit.getEntId(), Lists.newArrayList(byOrderId.getId()));
|
|
|
+ validContractLog = contractLogisticsList.stream()
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .filter(log -> log.getStartTime() != null && log.getEndTime() != null)
|
|
|
+ .filter(log -> {
|
|
|
+ boolean startTimeOk = log.getStartTime().after(tradeContractResDto.getStartTime());
|
|
|
+ boolean endTimeOk = tradeContractResDto.getEndTime() == null || log.getEndTime().before(tradeContractResDto.getEndTime());
|
|
|
+ return startTimeOk && endTimeOk;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ if (CollectionUtils.isEmpty(validContractLog)) {
|
|
|
+ throw new BusinessException("未找到该商品有效的自动派车物流合同,请先签订自动派车物流合同");
|
|
|
+ }
|
|
|
+ //填充运输单价
|
|
|
+ for (LogisticsEntDtoVO vo : validContractLog) {
|
|
|
+ LogisticsGoodsDto dto = remoteContractService.queryLogGoodsByContractId(vo.getContractId(), byOrderId.getGoodsId());
|
|
|
+ if (dto.getPrice() == null || dto.getPrice().compareTo(BigDecimal.ZERO) == 0) {
|
|
|
+ vo.setTransportPrice(vo.getCommonPrice());
|
|
|
+ } else {
|
|
|
+ vo.setTransportPrice(dto.getPrice());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return validContractLog;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 实际派车数
|
|
|
*
|
|
|
@@ -2406,48 +2414,8 @@ public class KwoTradeOrderService {
|
|
|
throw new BusinessPlatfromException(ErrorCodeEnum.DATA_NOT_EXIST, "实际派车数量需大于0!");
|
|
|
}
|
|
|
return actualDisPatch;
|
|
|
-
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- /**
|
|
|
- * 物流企业可派车
|
|
|
- *
|
|
|
- * @param byOrderId
|
|
|
- * @param contractLogisticsList
|
|
|
- * @return
|
|
|
- */
|
|
|
- public Integer getEntAvailableVehicle(KwoTradeOrderGoods byOrderId, List<LogisticsEntDtoVO> contractLogisticsList) {
|
|
|
- List<Long> contractIds = contractLogisticsList.stream().map(LogisticsEntDtoVO::getContractId).collect(Collectors.toList());
|
|
|
- //物流企业总运力
|
|
|
- int sumAvailableVehicle = contractIds.stream().filter(Objects::nonNull).map(contractId -> getSignEntAvailableVehicle(byOrderId.getGoodsId(), contractId)).mapToInt(num -> num == null ? 0 : num).sum();
|
|
|
- return sumAvailableVehicle;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 单个物流企业满足轴数可派车
|
|
|
- *
|
|
|
- * @param goodId
|
|
|
- * @param contractId
|
|
|
- * @return
|
|
|
- */
|
|
|
- public Integer getSignEntAvailableVehicle(Long goodId, Long contractId) {
|
|
|
- //查询商品轴数
|
|
|
- KwpGoods goodsById = goodsInfoService.getGoodsById(goodId);
|
|
|
- if (goodsById == null) {
|
|
|
- throw new BusinessPlatfromException(ErrorCodeEnum.PARAM_ERROR, "物流运单装货地址有误!");
|
|
|
- }
|
|
|
- //商品轴数
|
|
|
- TmsTruckAxleNumVO carAxisInfo = remoteFleetService.getCarAxisInfo(Optional.ofNullable(goodsById.getCarAxis()).map(Integer::valueOf).orElse(null));
|
|
|
- //物流合同企业id
|
|
|
- TradeContractUnitDto unitDto = remoteContractService.queryEntByContractId(contractId);
|
|
|
-
|
|
|
- //当前物流企业总运力
|
|
|
- List<RTruckVo> truckVoList = remoteFleetService.findTruckByEntIds(unitDto.getEntId());
|
|
|
- return Math.toIntExact(truckVoList.stream().filter(Objects::nonNull).filter(truck -> Objects.equals(truck.getCarAxis(), String.valueOf(carAxisInfo.getId()))).count());
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
/**
|
|
|
* 手动完结订单
|
|
|
*
|