|
@@ -6,18 +6,20 @@ import com.alibaba.fastjson.JSON;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
|
|
+import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.github.pagehelper.PageHelper;
|
|
import com.github.pagehelper.PageHelper;
|
|
|
import com.github.pagehelper.PageInfo;
|
|
import com.github.pagehelper.PageInfo;
|
|
|
|
|
+import com.google.common.collect.Lists;
|
|
|
|
|
+import com.google.common.collect.Maps;
|
|
|
|
|
+import com.google.common.collect.Sets;
|
|
|
import com.sckw.contract.api.RemoteContractService;
|
|
import com.sckw.contract.api.RemoteContractService;
|
|
|
import com.sckw.contract.api.model.dto.res.ContractCommonInfoResDto;
|
|
import com.sckw.contract.api.model.dto.res.ContractCommonInfoResDto;
|
|
|
|
|
+import com.sckw.core.common.enums.enums.DictEnum;
|
|
|
import com.sckw.core.common.enums.enums.DictTypeEnum;
|
|
import com.sckw.core.common.enums.enums.DictTypeEnum;
|
|
|
import com.sckw.core.exception.BusinessException;
|
|
import com.sckw.core.exception.BusinessException;
|
|
|
import com.sckw.core.model.constant.Global;
|
|
import com.sckw.core.model.constant.Global;
|
|
|
import com.sckw.core.model.constant.NumberConstant;
|
|
import com.sckw.core.model.constant.NumberConstant;
|
|
|
-import com.sckw.core.model.enums.CarWaybillEnum;
|
|
|
|
|
-import com.sckw.core.model.enums.LogisticsOrderEnum;
|
|
|
|
|
-import com.sckw.core.model.enums.OrderRuleEnum;
|
|
|
|
|
-import com.sckw.core.model.enums.RedisOrderGenerateEnum;
|
|
|
|
|
|
|
+import com.sckw.core.model.enums.*;
|
|
|
import com.sckw.core.model.page.PageHelperUtil;
|
|
import com.sckw.core.model.page.PageHelperUtil;
|
|
|
import com.sckw.core.model.page.PageRes;
|
|
import com.sckw.core.model.page.PageRes;
|
|
|
import com.sckw.core.model.page.PageResult;
|
|
import com.sckw.core.model.page.PageResult;
|
|
@@ -25,6 +27,7 @@ import com.sckw.core.utils.*;
|
|
|
import com.sckw.core.web.constant.HttpStatus;
|
|
import com.sckw.core.web.constant.HttpStatus;
|
|
|
import com.sckw.core.web.context.LoginUserHolder;
|
|
import com.sckw.core.web.context.LoginUserHolder;
|
|
|
import com.sckw.core.web.response.HttpResult;
|
|
import com.sckw.core.web.response.HttpResult;
|
|
|
|
|
+import com.sckw.core.web.response.result.PageDataResult;
|
|
|
import com.sckw.excel.utils.DateUtil;
|
|
import com.sckw.excel.utils.DateUtil;
|
|
|
import com.sckw.excel.utils.ValidUtil;
|
|
import com.sckw.excel.utils.ValidUtil;
|
|
|
import com.sckw.fleet.api.RemoteFleetService;
|
|
import com.sckw.fleet.api.RemoteFleetService;
|
|
@@ -48,11 +51,17 @@ import com.sckw.transport.model.*;
|
|
|
import com.sckw.transport.model.dto.*;
|
|
import com.sckw.transport.model.dto.*;
|
|
|
import com.sckw.transport.model.param.AddLogisticsOrderParam;
|
|
import com.sckw.transport.model.param.AddLogisticsOrderParam;
|
|
|
import com.sckw.transport.model.param.LogisticsConsignmentParam;
|
|
import com.sckw.transport.model.param.LogisticsConsignmentParam;
|
|
|
|
|
+import com.sckw.transport.model.param.LogisticsOrderResp;
|
|
|
|
|
+import com.sckw.transport.model.param.QueryLogisticsOrderReq;
|
|
|
import com.sckw.transport.model.vo.*;
|
|
import com.sckw.transport.model.vo.*;
|
|
|
|
|
+import com.sckw.transport.repository.*;
|
|
|
import io.seata.spring.annotation.GlobalTransactional;
|
|
import io.seata.spring.annotation.GlobalTransactional;
|
|
|
import jakarta.annotation.Resource;
|
|
import jakarta.annotation.Resource;
|
|
|
|
|
+import jakarta.validation.Valid;
|
|
|
|
|
+import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.dubbo.config.annotation.DubboReference;
|
|
import org.apache.dubbo.config.annotation.DubboReference;
|
|
|
|
|
+import org.jetbrains.annotations.NotNull;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.cloud.stream.function.StreamBridge;
|
|
import org.springframework.cloud.stream.function.StreamBridge;
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
@@ -60,8 +69,10 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.util.ObjectUtils;
|
|
import org.springframework.util.ObjectUtils;
|
|
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
|
|
|
+import java.math.RoundingMode;
|
|
|
import java.util.*;
|
|
import java.util.*;
|
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
|
|
|
+import java.util.function.Function;
|
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -71,6 +82,7 @@ import java.util.stream.Collectors;
|
|
|
*/
|
|
*/
|
|
|
@Slf4j
|
|
@Slf4j
|
|
|
@Service
|
|
@Service
|
|
|
|
|
+@RequiredArgsConstructor
|
|
|
@SuppressWarnings("all")
|
|
@SuppressWarnings("all")
|
|
|
public class KwtLogisticsConsignmentService {
|
|
public class KwtLogisticsConsignmentService {
|
|
|
|
|
|
|
@@ -143,6 +155,12 @@ public class KwtLogisticsConsignmentService {
|
|
|
@Autowired
|
|
@Autowired
|
|
|
public KwtWaybillOrderV1Mapper waybillOrderV1Mapper;
|
|
public KwtWaybillOrderV1Mapper waybillOrderV1Mapper;
|
|
|
|
|
|
|
|
|
|
+ private final KwtLogisticsOrderRepository logisticsOrderRepository;
|
|
|
|
|
+ private final KwtLogisticsOrderGoodsRepository logisticsOrderGoodsRepository;
|
|
|
|
|
+ private final KwtLogisticsOrderUnitRepository logisticsOrderUnitRepository;
|
|
|
|
|
+ private final KwtLogisticsOrderAddressRepository logisticsOrderAddressRepository;
|
|
|
|
|
+ private final KwtLogisticsOrderContractRepository logisticsOrderContractRepository;
|
|
|
|
|
+ private final KwtWaybillOrderSubtaskRepository logisticsOrderSubtaskRepository;
|
|
|
/**
|
|
/**
|
|
|
* 采购订单-物流托运生成托运订单
|
|
* 采购订单-物流托运生成托运订单
|
|
|
*
|
|
*
|
|
@@ -2196,4 +2214,340 @@ public class KwtLogisticsConsignmentService {
|
|
|
public HttpResult logisticsOrderSubcontract(LogisticsOrderSubcontractDto logisticsOrderSubcontractDto) {
|
|
public HttpResult logisticsOrderSubcontract(LogisticsOrderSubcontractDto logisticsOrderSubcontractDto) {
|
|
|
return logisticsOrderConsignmentService.logisticsOrderSubcontract(logisticsOrderSubcontractDto);
|
|
return logisticsOrderConsignmentService.logisticsOrderSubcontract(logisticsOrderSubcontractDto);
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ public PageDataResult<LogisticsOrderResp> queryLogisticsOrderByPage(QueryLogisticsOrderReq req) {
|
|
|
|
|
+ log.info("分页查询物流订单传递参数信息:{}", JSONObject.toJSONString(req));
|
|
|
|
|
+ Set<Long> logOrderIds = Sets.newHashSet();
|
|
|
|
|
+ Set<Long> allEnt = Sets.newHashSet();
|
|
|
|
|
+ //根据企业类型查询企业
|
|
|
|
|
+ if(StringUtils.isNotBlank(req.getEntId())){
|
|
|
|
|
+ allEnt.add(Long.parseLong(req.getEntId()));
|
|
|
|
|
+ EntCacheResDto entCacheResDto = remoteSystemService.queryEntTreeById(Long.parseLong(req.getEntId()));
|
|
|
|
|
+ if (Objects.nonNull(entCacheResDto)) {
|
|
|
|
|
+ EntCacheResDto entCacheResDto1 = remoteSystemService.queryEntTreeById(entCacheResDto.getId());
|
|
|
|
|
+ List<EntCacheResDto> child = entCacheResDto1.getChild();
|
|
|
|
|
+ if (CollectionUtils.isNotEmpty(child)) {
|
|
|
|
|
+ allEnt.addAll(child.stream().filter(x->x.getEntTypes().contains(req.getEntType())).map(EntCacheResDto::getId).toList());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ //根据托运单位或者承运单位查询企业
|
|
|
|
|
+
|
|
|
|
|
+ if (StringUtils.isNotBlank(req.getConsignCompanyId())){
|
|
|
|
|
+ allEnt.add(Long.parseLong(req.getConsignCompanyId()));
|
|
|
|
|
+ }
|
|
|
|
|
+ if (StringUtils.isNotBlank(req.getCarriageCompanyId())){
|
|
|
|
|
+ allEnt.add(Long.parseLong(req.getCarriageCompanyId()));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //根据商品名称查询物流订单
|
|
|
|
|
+ List<KwtLogisticsOrderGoods> logisticsOrderGoodsList=
|
|
|
|
|
+ logisticsOrderGoodsRepository.queryByGoodsName(req.getGoodsName());
|
|
|
|
|
+ if(org.springframework.util.CollectionUtils.isEmpty(logisticsOrderGoodsList)){
|
|
|
|
|
+ //获取物流订单
|
|
|
|
|
+ Set<Long> logOrderFormGoodsIds =
|
|
|
|
|
+ logisticsOrderGoodsList.stream().map(KwtLogisticsOrderGoods::getLOrderId).collect(Collectors.toSet());
|
|
|
|
|
+ logOrderIds.addAll(logOrderFormGoodsIds);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ List<KwtLogisticsOrderUnit> logOrderUnits =logisticsOrderUnitRepository.queryByEntIds(allEnt);
|
|
|
|
|
+ if(org.springframework.util.CollectionUtils.isEmpty(logOrderUnits)){
|
|
|
|
|
+ //获取物流订单
|
|
|
|
|
+ Set<Long> logOrderFormUnitIds =
|
|
|
|
|
+ logOrderUnits.stream().map(KwtLogisticsOrderUnit::getLOrderId).collect(Collectors.toSet());
|
|
|
|
|
+ logOrderIds.addAll(logOrderFormUnitIds);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ //分页查询物流订单
|
|
|
|
|
+ IPage<KwtLogisticsOrder> page = logisticsOrderRepository.queryByPage(logOrderIds,req.getOrderStatus(),
|
|
|
|
|
+ req.getOrderNo(),
|
|
|
|
|
+ req.getStartTime(), req.getEndTime(), req.getPageNum(), req.getPageSize());
|
|
|
|
|
+ List<KwtLogisticsOrder> records = page.getRecords();
|
|
|
|
|
+ if(org.springframework.util.CollectionUtils.isEmpty(records)){
|
|
|
|
|
+ return PageDataResult.empty(req.getPageNum(), req.getPageSize());
|
|
|
|
|
+ }
|
|
|
|
|
+ //查获取物流订单号
|
|
|
|
|
+ List<Long> logOrderIdList =
|
|
|
|
|
+ records.stream().map(KwtLogisticsOrder::getId).distinct().collect(Collectors.toList());
|
|
|
|
|
+ //通过物流订单号查询运输的单位
|
|
|
|
|
+ List<KwtLogisticsOrderUnit> unitList =logisticsOrderUnitRepository.queryByLogOrderIds(logOrderIdList);
|
|
|
|
|
+ Map<String, KwtLogisticsOrderUnit> logOrderIdAndUnitTypeKeyAndUnitMap = Maps.newHashMap();
|
|
|
|
|
+ if(org.apache.commons.collections4.CollectionUtils.isNotEmpty(unitList)){
|
|
|
|
|
+ logOrderIdAndUnitTypeKeyAndUnitMap = unitList.stream()
|
|
|
|
|
+ .peek(x -> x.setLogisticsOrderIdAndUnitTypeKey(x.getLOrderId() + "-" + x.getUnitType()))
|
|
|
|
|
+ .collect(Collectors.toMap(KwtLogisticsOrderUnit::getLogisticsOrderIdAndUnitTypeKey,
|
|
|
|
|
+ Function.identity(), (x, y) -> x));
|
|
|
|
|
+ }
|
|
|
|
|
+ //查询商品信息
|
|
|
|
|
+ List<KwtLogisticsOrderGoods> logOrderGoodsList =logisticsOrderGoodsRepository.queryByLogOrderIds(logOrderIdList);
|
|
|
|
|
+
|
|
|
|
|
+ List<Long> goodsIds = Lists.newArrayList();
|
|
|
|
|
+ Map<Long, KwtLogisticsOrderGoods> logIdAndGoodsMap = Maps.newHashMap();
|
|
|
|
|
+ if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(logOrderGoodsList)){
|
|
|
|
|
+ goodsIds =
|
|
|
|
|
+ logOrderGoodsList.stream().map(KwtLogisticsOrderGoods::getGoodsId).distinct().collect(Collectors.toList());
|
|
|
|
|
+ logIdAndGoodsMap =
|
|
|
|
|
+ logOrderGoodsList.stream().collect(Collectors.toMap(KwtLogisticsOrderGoods::getLOrderId, Function.identity(),
|
|
|
|
|
+ (x, y) -> x));
|
|
|
|
|
+ }
|
|
|
|
|
+ Map<Long, KwpGoods> goodsIdAndGoodsMap = Maps.newHashMap();
|
|
|
|
|
+ if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(goodsIds)){
|
|
|
|
|
+ goodsIdAndGoodsMap = goodsInfoService.getGoodsByIds(goodsIds);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //查询地址信息
|
|
|
|
|
+ List<KwtLogisticsOrderAddress> logOrderAddressList =logisticsOrderAddressRepository.queryByLogOrderIds(logOrderIdList);
|
|
|
|
|
+ Map<String, KwtLogisticsOrderAddress> logisticsOrderIdAndUnitTypeKeyAndAddressMap = Maps.newHashMap();
|
|
|
|
|
+ if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(logOrderAddressList)){
|
|
|
|
|
+ logisticsOrderIdAndUnitTypeKeyAndAddressMap =
|
|
|
|
|
+ logOrderAddressList.stream().peek(x -> x.setLogisticsOrderIdAndUnitTypeKey(x.getLOrderId() + "-" + x.getAddressType()))
|
|
|
|
|
+ .collect(Collectors.toMap(KwtLogisticsOrderAddress::getLogisticsOrderIdAndUnitTypeKey,
|
|
|
|
|
+ Function.identity(), (x, y) -> x));
|
|
|
|
|
+ }
|
|
|
|
|
+ //查询物流订单合同信息
|
|
|
|
|
+ List<KwtLogisticsOrderContract> logOrderContractList =logisticsOrderContractRepository.queryByLogOrderIds( new HashSet<>(logOrderIdList));
|
|
|
|
|
+ Map<Long, KwtLogisticsOrderContract> logOrderIdAndContractMap = Maps.newHashMap();
|
|
|
|
|
+ if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(logOrderContractList)){
|
|
|
|
|
+ logOrderIdAndContractMap =
|
|
|
|
|
+ logOrderContractList.stream().collect(Collectors.toMap(KwtLogisticsOrderContract::getLOrderId,
|
|
|
|
|
+ Function.identity(), (x, y) -> x));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ Map<String, KwtLogisticsOrderUnit> finalLogOrderIdAndUnitTypeKeyAndUnitMap = logOrderIdAndUnitTypeKeyAndUnitMap;
|
|
|
|
|
+ Map<Long, KwtLogisticsOrderGoods> finalLogIdAndGoodsMap = logIdAndGoodsMap;
|
|
|
|
|
+ Map<Long, KwpGoods> finalGoodsIdAndGoodsMap = goodsIdAndGoodsMap;
|
|
|
|
|
+ Map<String, KwtLogisticsOrderAddress> finalLogisticsOrderIdAndUnitTypeKeyAndAddressMap = logisticsOrderIdAndUnitTypeKeyAndAddressMap;
|
|
|
|
|
+ Map<Long, KwtLogisticsOrderContract> finalLogOrderIdAndContractMap = logOrderIdAndContractMap;
|
|
|
|
|
+
|
|
|
|
|
+ List<LogisticsOrderResp> resps = records.stream()
|
|
|
|
|
+ .map(x ->getLogisticsOrderResp(x,
|
|
|
|
|
+ finalLogOrderIdAndUnitTypeKeyAndUnitMap, finalLogIdAndGoodsMap, finalGoodsIdAndGoodsMap, finalLogisticsOrderIdAndUnitTypeKeyAndAddressMap, finalLogOrderIdAndContractMap))
|
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
+
|
|
|
|
|
+ return PageDataResult.of(page,resps);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @NotNull
|
|
|
|
|
+ private static LogisticsOrderResp getLogisticsOrderResp(KwtLogisticsOrder kwtLogisticsOrder, Map<String, KwtLogisticsOrderUnit> finalLogOrderIdAndUnitTypeKeyAndUnitMap, Map<Long, KwtLogisticsOrderGoods> finalLogIdAndGoodsMap, Map<Long, KwpGoods> finalGoodsIdAndGoodsMap, Map<String, KwtLogisticsOrderAddress> finalLogisticsOrderIdAndUnitTypeKeyAndAddressMap, Map<Long, KwtLogisticsOrderContract> finalLogOrderIdAndContractMap) {
|
|
|
|
|
+ LogisticsOrderResp logisticsOrderResp = new LogisticsOrderResp();
|
|
|
|
|
+ logisticsOrderResp.setLogisticsOrderId(String.valueOf(kwtLogisticsOrder.getId()));
|
|
|
|
|
+ logisticsOrderResp.setLogisticsOrderNo(kwtLogisticsOrder.getLOrderNo());
|
|
|
|
|
+ KwtLogisticsOrderUnit consignCompany = finalLogOrderIdAndUnitTypeKeyAndUnitMap.getOrDefault(kwtLogisticsOrder.getId() + "-" + NumberConstant.ONE,
|
|
|
|
|
+ new KwtLogisticsOrderUnit());
|
|
|
|
|
+ logisticsOrderResp.setConsignCompanyId(String.valueOf(consignCompany.getId()));
|
|
|
|
|
+ logisticsOrderResp.setConsignCompanyName(consignCompany.getFirmName());
|
|
|
|
|
+ KwtLogisticsOrderUnit carriageCompany = finalLogOrderIdAndUnitTypeKeyAndUnitMap.getOrDefault(kwtLogisticsOrder.getId() +
|
|
|
|
|
+ "-" + NumberConstant.TWO,
|
|
|
|
|
+ new KwtLogisticsOrderUnit());
|
|
|
|
|
+ logisticsOrderResp.setCarriageCompanyId(String.valueOf(carriageCompany.getId()));
|
|
|
|
|
+ logisticsOrderResp.setCarriageCompanyName(carriageCompany.getFirmName());
|
|
|
|
|
+
|
|
|
|
|
+ KwtLogisticsOrderGoods goods = finalLogIdAndGoodsMap.getOrDefault(kwtLogisticsOrder.getId(), new KwtLogisticsOrderGoods());
|
|
|
|
|
+ KwpGoods kwpGoods = finalGoodsIdAndGoodsMap.getOrDefault(goods.getId(), new KwpGoods());
|
|
|
|
|
+ logisticsOrderResp.setGoodsId(String.valueOf(goods.getId()));
|
|
|
|
|
+ logisticsOrderResp.setGoodsName(kwpGoods.getName());
|
|
|
|
|
+ logisticsOrderResp.setTransportPrice(Objects.nonNull(kwtLogisticsOrder.getPrice()) ? kwtLogisticsOrder.getPrice().setScale(2,
|
|
|
|
|
+ RoundingMode.HALF_UP).toPlainString() : "0.00");
|
|
|
|
|
+ logisticsOrderResp.setChargeType(kwtLogisticsOrder.getBillingMode());
|
|
|
|
|
+ logisticsOrderResp.setChargeTypeDesc(DictEnum.getLabel(DictTypeEnum.CHARGING_TYPE.getType(),
|
|
|
|
|
+ String.valueOf(kwtLogisticsOrder.getBillingMode())));
|
|
|
|
|
+ logisticsOrderResp.setAmount(Objects.nonNull(kwtLogisticsOrder.getAmount()) ?
|
|
|
|
|
+ kwtLogisticsOrder.getAmount().setScale(2, RoundingMode.HALF_UP).toPlainString() : "0.00");
|
|
|
|
|
+ BigDecimal expectedTransportPrice = BigDecimal.ZERO;
|
|
|
|
|
+ BigDecimal actualTransportPrice = BigDecimal.ZERO;
|
|
|
|
|
+ if (org.apache.commons.lang3.StringUtils.equals(kwtLogisticsOrder.getBillingMode(),DictEnum.CHARGING_TYPE_1.getValue())){
|
|
|
|
|
+ expectedTransportPrice = Objects.nonNull(kwtLogisticsOrder.getPrice()) && Objects.nonNull(kwtLogisticsOrder.getLoadAmount()) ?
|
|
|
|
|
+ kwtLogisticsOrder.getPrice().multiply(kwtLogisticsOrder.getLoadAmount()) : BigDecimal.ZERO;
|
|
|
|
|
+ actualTransportPrice = Objects.nonNull(kwtLogisticsOrder.getPrice()) && Objects.nonNull(kwtLogisticsOrder.getTotalLoadAmount()) ?
|
|
|
|
|
+ kwtLogisticsOrder.getPrice().multiply(kwtLogisticsOrder.getTotalLoadAmount()) : BigDecimal.ZERO;
|
|
|
|
|
+
|
|
|
|
|
+ }else if (org.apache.commons.lang3.StringUtils.equals(kwtLogisticsOrder.getBillingMode(),DictEnum.CHARGING_TYPE_2.getValue())){
|
|
|
|
|
+ expectedTransportPrice = Objects.nonNull(kwtLogisticsOrder.getPrice()) && Objects.nonNull(kwtLogisticsOrder.getUnloadAmount()) ?
|
|
|
|
|
+ kwtLogisticsOrder.getPrice().multiply(kwtLogisticsOrder.getUnloadAmount()) : BigDecimal.ZERO;
|
|
|
|
|
+ actualTransportPrice = Objects.nonNull(kwtLogisticsOrder.getPrice()) && Objects.nonNull(kwtLogisticsOrder.getTotalUnloadAmount()) ?
|
|
|
|
|
+ kwtLogisticsOrder.getPrice().multiply(kwtLogisticsOrder.getTotalUnloadAmount()) : BigDecimal.ZERO;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ logisticsOrderResp.setExpectedTransportPrice(expectedTransportPrice.setScale(2,RoundingMode.HALF_UP).toPlainString());
|
|
|
|
|
+ logisticsOrderResp.setActualTransportPrice(actualTransportPrice.setScale(2,RoundingMode.HALF_UP).toPlainString());
|
|
|
|
|
+ logisticsOrderResp.setLoadAmount(Objects.nonNull(kwtLogisticsOrder.getTotalLoadAmount()) ?
|
|
|
|
|
+ kwtLogisticsOrder.getTotalLoadAmount().setScale(2,RoundingMode.HALF_UP).toPlainString() : "0.00");
|
|
|
|
|
+ logisticsOrderResp.setUnloadAmount(Objects.nonNull(kwtLogisticsOrder.getTotalUnloadAmount()) ?
|
|
|
|
|
+ kwtLogisticsOrder.getTotalUnloadAmount().setScale(2,RoundingMode.HALF_UP).toPlainString() : "0.00");
|
|
|
|
|
+
|
|
|
|
|
+ KwtLogisticsOrderAddress loadAdd = finalLogisticsOrderIdAndUnitTypeKeyAndAddressMap.getOrDefault(kwtLogisticsOrder.getId() + "-" + AddressTypeEnum.SHIPMENT.getCode(), new KwtLogisticsOrderAddress());
|
|
|
|
|
+ logisticsOrderResp.setLoadAddress(loadAdd.getDetailAddress());
|
|
|
|
|
+ KwtLogisticsOrderAddress unloadAdd =
|
|
|
|
|
+ finalLogisticsOrderIdAndUnitTypeKeyAndAddressMap.getOrDefault(kwtLogisticsOrder.getId() + "-" + AddressTypeEnum.TAKE.getCode(), new KwtLogisticsOrderAddress());
|
|
|
|
|
+ logisticsOrderResp.setUnloadAddress(unloadAdd.getDetailAddress());
|
|
|
|
|
+ logisticsOrderResp.setUnloadContacts(unloadAdd.getContacts());
|
|
|
|
|
+ logisticsOrderResp.setUnloadPhone(unloadAdd.getPhone());
|
|
|
|
|
+ logisticsOrderResp.setStartTime(DateUtils.format(kwtLogisticsOrder.getStartTime(), DateUtils.DATE_PATTERN));
|
|
|
|
|
+ logisticsOrderResp.setEndTime(DateUtils.format(kwtLogisticsOrder.getEndTime(), DateUtils.DATE_PATTERN));
|
|
|
|
|
+
|
|
|
|
|
+ KwtLogisticsOrderContract orderContract= finalLogOrderIdAndContractMap.getOrDefault(kwtLogisticsOrder.getId(),
|
|
|
|
|
+ new KwtLogisticsOrderContract());
|
|
|
|
|
+ logisticsOrderResp.setContractNo(orderContract.getContractNo());
|
|
|
|
|
+ logisticsOrderResp.setCreateTime(DateUtils.format(kwtLogisticsOrder.getCreateTime(), DateUtils.DATE_TIME_PATTERN));
|
|
|
|
|
+
|
|
|
|
|
+ return logisticsOrderResp;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public LogisticsOrderDetailResp getLogisticsOrderDetail(@Valid LogisticsOrderReq req) {
|
|
|
|
|
+ KwtLogisticsOrder logisticsOrder =
|
|
|
|
|
+ logisticsOrderRepository.queryByLogisticsOrderId(Long.valueOf(req.getLogisticsOrderId()));
|
|
|
|
|
+ if (Objects.nonNull(logisticsOrder)){
|
|
|
|
|
+ throw new BusinessException("物流订单不存在");
|
|
|
|
|
+ }
|
|
|
|
|
+ //根据物流订单号查询物流合同
|
|
|
|
|
+ KwtLogisticsOrderContract orderContract = logisticsOrderContractRepository.queryByLogOrderId(logisticsOrder.getId());
|
|
|
|
|
+ //根据订单号查询物流公司信息
|
|
|
|
|
+ List<KwtLogisticsOrderUnit> unitList = logisticsOrderUnitRepository.queryByLOrderId(logisticsOrder.getId());
|
|
|
|
|
+ Map<String, KwtLogisticsOrderUnit> logOrderIdUnitTypeKeyAndUnitMap = Maps.newHashMap();
|
|
|
|
|
+ if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(unitList)){
|
|
|
|
|
+ logOrderIdUnitTypeKeyAndUnitMap = unitList.stream()
|
|
|
|
|
+ .peek(x -> x.setLogisticsOrderIdAndUnitTypeKey(x.getLOrderId() + "-" + x.getUnitType()))
|
|
|
|
|
+ .collect(Collectors.toMap(KwtLogisticsOrderUnit::getLogisticsOrderIdAndUnitTypeKey, Function.identity(), (v1, v2) -> v1));
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //根据物流订单号查询商品信息
|
|
|
|
|
+ KwtLogisticsOrderGoods goods = logisticsOrderGoodsRepository.queryByLogOrderId(logisticsOrder.getId());
|
|
|
|
|
+ KwpGoods kwpGoods = null;
|
|
|
|
|
+ if (Objects.nonNull(goods)){
|
|
|
|
|
+ kwpGoods = goodsInfoService.getGoodsById(goods.getGoodsId());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //根据订单号查询装卸货地址
|
|
|
|
|
+ List<KwtLogisticsOrderAddress> addressList = logisticsOrderAddressRepository.queryByLogOrderId(logisticsOrder.getId());
|
|
|
|
|
+ Map<String, KwtLogisticsOrderAddress> logOrderIdAndUnitTypeKeyAndAddressMap = Maps.newHashMap();
|
|
|
|
|
+ if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(addressList)){
|
|
|
|
|
+ logOrderIdAndUnitTypeKeyAndAddressMap = addressList.stream()
|
|
|
|
|
+ .peek(x -> x.setLogisticsOrderIdAndUnitTypeKey(x.getLOrderId() + "-" + x.getAddressType()))
|
|
|
|
|
+ .collect(Collectors.toMap(KwtLogisticsOrderAddress::getLogisticsOrderIdAndUnitTypeKey, Function.identity(), (v1, v2) -> v1));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //根据物流订单号查询运单信息
|
|
|
|
|
+ List<KwtWaybillOrderSubtask> waybillOrderSubtasks = logisticsOrderSubtaskRepository.queryByLogId(logisticsOrder.getId());
|
|
|
|
|
+
|
|
|
|
|
+ //获取返回信息
|
|
|
|
|
+ return getLogisticsOrderDetailResp(orderContract, logOrderIdUnitTypeKeyAndUnitMap, logisticsOrder, kwpGoods,
|
|
|
|
|
+ logOrderIdAndUnitTypeKeyAndAddressMap, waybillOrderSubtasks);
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @NotNull
|
|
|
|
|
+ private static LogisticsOrderDetailResp getLogisticsOrderDetailResp(KwtLogisticsOrderContract orderContract, Map<String, KwtLogisticsOrderUnit> logOrderIdUnitTypeKeyAndUnitMap, KwtLogisticsOrder logisticsOrder, KwpGoods kwpGoods, Map<String, KwtLogisticsOrderAddress> logOrderIdAndUnitTypeKeyAndAddressMap, List<KwtWaybillOrderSubtask> waybillOrderSubtasks) {
|
|
|
|
|
+ LogisticsOrderDetailResp logisticsOrderDetailResp = new LogisticsOrderDetailResp();
|
|
|
|
|
+ //设置合同信息
|
|
|
|
|
+ setContractInfo(orderContract, logisticsOrderDetailResp);
|
|
|
|
|
+ //设置单位信息
|
|
|
|
|
+ setUnitInfo(logOrderIdUnitTypeKeyAndUnitMap, logisticsOrder, logisticsOrderDetailResp);
|
|
|
|
|
+
|
|
|
|
|
+ //设置贸易信息
|
|
|
|
|
+ setGoodsInfo(kwpGoods, logisticsOrder, logisticsOrderDetailResp);
|
|
|
|
|
+
|
|
|
|
|
+ //设置装卸货地址信息
|
|
|
|
|
+ setAddressInfo(logOrderIdAndUnitTypeKeyAndAddressMap, logisticsOrder, logisticsOrderDetailResp);
|
|
|
|
|
+
|
|
|
|
|
+ //设置履约信息
|
|
|
|
|
+ setPerformInfo(logisticsOrder, waybillOrderSubtasks, logisticsOrderDetailResp);
|
|
|
|
|
+ return logisticsOrderDetailResp;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private static void setPerformInfo(KwtLogisticsOrder logisticsOrder, List<KwtWaybillOrderSubtask> waybillOrderSubtasks, LogisticsOrderDetailResp logisticsOrderDetailResp) {
|
|
|
|
|
+ LogisticsOrderDetailResp.PerformanceInfoVO performanceInfoVO = new LogisticsOrderDetailResp.PerformanceInfoVO();
|
|
|
|
|
+ performanceInfoVO.setBillingMode(logisticsOrder.getBillingMode());
|
|
|
|
|
+ performanceInfoVO.setBillingModeDesc(DictEnum.getLabel(DictTypeEnum.CHARGING_TYPE.getType(),
|
|
|
|
|
+ logisticsOrder.getBillingMode()));
|
|
|
|
|
+ performanceInfoVO.setCompletedCarNum(String.valueOf(logisticsOrder.getTotalTake()));
|
|
|
|
|
+ performanceInfoVO.setOrderAmount(String.valueOf(waybillOrderSubtasks.size()));
|
|
|
|
|
+ BigDecimal loadAmount = BigDecimal.ZERO;
|
|
|
|
|
+ BigDecimal unloadAmount = BigDecimal.ZERO;
|
|
|
|
|
+ if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(waybillOrderSubtasks)){
|
|
|
|
|
+ loadAmount = waybillOrderSubtasks.stream()
|
|
|
|
|
+ .filter(x -> Objects.nonNull(x.getLoadAmount()))
|
|
|
|
|
+ .map(KwtWaybillOrderSubtask::getLoadAmount)
|
|
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
|
|
+
|
|
|
|
|
+ unloadAmount = waybillOrderSubtasks.stream()
|
|
|
|
|
+ .filter(x -> Objects.nonNull(x.getUnloadAmount()))
|
|
|
|
|
+ .map(KwtWaybillOrderSubtask::getUnloadAmount)
|
|
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
|
|
+ }
|
|
|
|
|
+ performanceInfoVO.setLoadAmount(loadAmount.setScale(2,RoundingMode.HALF_UP).toPlainString());
|
|
|
|
|
+ performanceInfoVO.setUnloadAmount(unloadAmount.setScale(2,RoundingMode.HALF_UP).toPlainString());
|
|
|
|
|
+ BigDecimal totalCarriageCost = BigDecimal.ZERO;
|
|
|
|
|
+ if (org.apache.commons.lang3.StringUtils.equals(logisticsOrder.getBillingMode(),
|
|
|
|
|
+ DictEnum.CHARGING_TYPE_1.getValue())){
|
|
|
|
|
+ totalCarriageCost = Objects.nonNull(logisticsOrder.getPrice()) ? loadAmount.multiply(logisticsOrder.getPrice()) :
|
|
|
|
|
+ BigDecimal.ZERO;
|
|
|
|
|
+ }else if (org.apache.commons.lang3.StringUtils.equals(logisticsOrder.getBillingMode(),
|
|
|
|
|
+ DictEnum.CHARGING_TYPE_2.getValue())){
|
|
|
|
|
+ totalCarriageCost = Objects.nonNull(logisticsOrder.getPrice()) ? unloadAmount.multiply(logisticsOrder.getPrice()) :
|
|
|
|
|
+ BigDecimal.ZERO;
|
|
|
|
|
+ }
|
|
|
|
|
+ performanceInfoVO.setTotalCarriageCost(totalCarriageCost.setScale(2,RoundingMode.HALF_UP).toPlainString());
|
|
|
|
|
+ performanceInfoVO.setSurplusAmount(Objects.nonNull(logisticsOrder.getAmount()) ?
|
|
|
|
|
+ logisticsOrder.getAmount().subtract(loadAmount).setScale(2,RoundingMode.HALF_UP).toPlainString() : "0.00");
|
|
|
|
|
+
|
|
|
|
|
+ logisticsOrderDetailResp.setPerformanceInfoVO(performanceInfoVO);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private static void setAddressInfo(Map<String, KwtLogisticsOrderAddress> logOrderIdAndUnitTypeKeyAndAddressMap, KwtLogisticsOrder logisticsOrder, LogisticsOrderDetailResp logisticsOrderDetailResp) {
|
|
|
|
|
+ LogisticsOrderDetailResp.LoadingInfoVO loadingInfoVO = new LogisticsOrderDetailResp.LoadingInfoVO();
|
|
|
|
|
+ KwtLogisticsOrderAddress loadAdd = logOrderIdAndUnitTypeKeyAndAddressMap.getOrDefault(logisticsOrder.getId() + "-" + AddressTypeEnum.SHIPMENT.getCode(),
|
|
|
|
|
+ new KwtLogisticsOrderAddress());
|
|
|
|
|
+ loadingInfoVO.setLoadAddress(loadAdd.getDetailAddress());
|
|
|
|
|
+ KwtLogisticsOrderAddress unloadAdd =
|
|
|
|
|
+ logOrderIdAndUnitTypeKeyAndAddressMap.getOrDefault(logisticsOrder.getId() + "-" + AddressTypeEnum.TAKE.getCode(),
|
|
|
|
|
+ new KwtLogisticsOrderAddress());
|
|
|
|
|
+ loadingInfoVO.setUnloadAddress(unloadAdd.getDetailAddress());
|
|
|
|
|
+ loadingInfoVO.setUnloadContacts(unloadAdd.getContacts());
|
|
|
|
|
+ loadingInfoVO.setUnloadPhone(unloadAdd.getPhone());
|
|
|
|
|
+ logisticsOrderDetailResp.setLoadingInfoVO(loadingInfoVO);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private static void setGoodsInfo(KwpGoods kwpGoods, KwtLogisticsOrder logisticsOrder, LogisticsOrderDetailResp logisticsOrderDetailResp) {
|
|
|
|
|
+ LogisticsOrderDetailResp.GoodsInfoVO goodsInfoVO = new LogisticsOrderDetailResp.GoodsInfoVO();
|
|
|
|
|
+ if (Objects.nonNull(kwpGoods)){
|
|
|
|
|
+ goodsInfoVO.setGoodsName(kwpGoods.getName());
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+ goodsInfoVO.setUnitPrice(Objects.nonNull(logisticsOrder.getPrice())? logisticsOrder.getPrice().setScale(2,RoundingMode.HALF_UP).toPlainString() : "0.00");
|
|
|
|
|
+ goodsInfoVO.setOrderAmount(Objects.nonNull(logisticsOrder.getAmount()) ? logisticsOrder.getAmount().setScale(2,RoundingMode.HALF_UP).toPlainString() : "0.00");
|
|
|
|
|
+ BigDecimal carriageCost = Objects.nonNull(logisticsOrder.getAmount()) && Objects.nonNull(logisticsOrder.getPrice()) ?
|
|
|
|
|
+ logisticsOrder.getAmount().multiply(logisticsOrder.getPrice()) : BigDecimal.ZERO;
|
|
|
|
|
+ goodsInfoVO.setCarriageCost(carriageCost.setScale(2,RoundingMode.HALF_UP).toPlainString());
|
|
|
|
|
+ logisticsOrderDetailResp.setGoodsInfoVO(goodsInfoVO);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private static void setUnitInfo(Map<String, KwtLogisticsOrderUnit> logOrderIdUnitTypeKeyAndUnitMap, KwtLogisticsOrder logisticsOrder, LogisticsOrderDetailResp logisticsOrderDetailResp) {
|
|
|
|
|
+ LogisticsOrderDetailResp.UnitInfoVO unitInfoVO = new LogisticsOrderDetailResp.UnitInfoVO();
|
|
|
|
|
+ KwtLogisticsOrderUnit consignUnit =
|
|
|
|
|
+ logOrderIdUnitTypeKeyAndUnitMap.getOrDefault(logisticsOrder.getId() + "-" + NumberConstant.ONE,
|
|
|
|
|
+ new KwtLogisticsOrderUnit());
|
|
|
|
|
+ unitInfoVO.setConsignUnitId(String.valueOf(consignUnit.getEntId()));
|
|
|
|
|
+ unitInfoVO.setConsignUnitName(consignUnit.getFirmName());
|
|
|
|
|
+ unitInfoVO.setConsignUnitPhone(consignUnit.getPhone());
|
|
|
|
|
+ KwtLogisticsOrderUnit carriageUnit =
|
|
|
|
|
+ logOrderIdUnitTypeKeyAndUnitMap.getOrDefault(logisticsOrder.getId() + "-" + NumberConstant.TWO,
|
|
|
|
|
+ new KwtLogisticsOrderUnit());
|
|
|
|
|
+ unitInfoVO.setCarriageUnitId(String.valueOf(carriageUnit.getEntId()));
|
|
|
|
|
+ unitInfoVO.setCarriageUnitName(carriageUnit.getFirmName());
|
|
|
|
|
+ unitInfoVO.setCarriageUnitPhone(carriageUnit.getPhone());
|
|
|
|
|
+ logisticsOrderDetailResp.setUnitInfoVO(unitInfoVO);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private static void setContractInfo(KwtLogisticsOrderContract orderContract, LogisticsOrderDetailResp logisticsOrderDetailResp) {
|
|
|
|
|
+ LogisticsOrderDetailResp.ContractInfoVO contractInfoVO = new LogisticsOrderDetailResp.ContractInfoVO();
|
|
|
|
|
+ if (Objects.nonNull(orderContract)){
|
|
|
|
|
+ contractInfoVO.setContractNo(orderContract.getContractNo());
|
|
|
|
|
+ contractInfoVO.setContractName(orderContract.getContractName());
|
|
|
|
|
+ }
|
|
|
|
|
+ logisticsOrderDetailResp.setContractInfoVO(contractInfoVO);
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|