|
|
@@ -6,6 +6,7 @@ import com.sckw.contract.api.RemoteContractService;
|
|
|
import com.sckw.contract.api.model.dto.res.ContractCommonInfoResDto;
|
|
|
import com.sckw.core.common.enums.NumberConstant;
|
|
|
import com.sckw.core.common.enums.StringConstant;
|
|
|
+import com.sckw.core.common.enums.enums.DictEnum;
|
|
|
import com.sckw.core.exception.BusinessException;
|
|
|
import com.sckw.core.model.enums.CarWaybillEnum;
|
|
|
import com.sckw.core.model.enums.LogisticsOrderEnum;
|
|
|
@@ -14,9 +15,11 @@ import com.sckw.core.utils.CollectionUtils;
|
|
|
import com.sckw.core.utils.IdWorker;
|
|
|
import com.sckw.core.utils.StringTimeUtil;
|
|
|
import com.sckw.core.utils.StringUtils;
|
|
|
+import com.sckw.core.web.constant.HttpStatus;
|
|
|
import com.sckw.core.web.context.LoginUserHolder;
|
|
|
import com.sckw.core.web.response.HttpResult;
|
|
|
import com.sckw.excel.utils.DateUtil;
|
|
|
+import com.sckw.excel.utils.ValidUtil;
|
|
|
import com.sckw.fleet.api.RemoteFleetService;
|
|
|
import com.sckw.mongo.enums.BusinessTypeEnum;
|
|
|
import com.sckw.mongo.model.SckwLogisticsOrder;
|
|
|
@@ -24,12 +27,10 @@ import com.sckw.product.api.dubbo.GoodsInfoService;
|
|
|
import com.sckw.product.api.model.KwpGoods;
|
|
|
import com.sckw.stream.model.SckwBusSum;
|
|
|
import com.sckw.system.api.RemoteSystemService;
|
|
|
+import com.sckw.system.api.model.dto.res.AreaTreeFrontResDto;
|
|
|
import com.sckw.transport.dao.*;
|
|
|
import com.sckw.transport.model.*;
|
|
|
-import com.sckw.transport.model.dto.AddOrderDTO;
|
|
|
-import com.sckw.transport.model.dto.OrderCarDTO;
|
|
|
-import com.sckw.transport.model.dto.OrderDTO;
|
|
|
-import com.sckw.transport.model.dto.OrderFinishDTO;
|
|
|
+import com.sckw.transport.model.dto.*;
|
|
|
import com.sckw.transport.model.vo.CarWaybillVO;
|
|
|
import com.sckw.transport.model.vo.OrderFinishVO;
|
|
|
import jakarta.annotation.Resource;
|
|
|
@@ -43,10 +44,8 @@ import org.springframework.util.ObjectUtils;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
import java.text.ParseException;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.Date;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
+import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* @author lfdc
|
|
|
@@ -176,27 +175,34 @@ public class ConsignOrderService {
|
|
|
BigDecimal deductWeighNumber = new BigDecimal("0.00");
|
|
|
if (CollectionUtils.isNotEmpty(kwtWaybillOrders)) {
|
|
|
for (KwtWaybillOrder kwtWaybillOrder : kwtWaybillOrders) {
|
|
|
- CarWaybillVO carWaybillVo = new CarWaybillVO();
|
|
|
- carWaybillVo.setSendCarWeigh(kwtWaybillOrder.getEntrustAmount() == null ? null : String.valueOf(kwtWaybillOrder.getEntrustAmount()));
|
|
|
+ //派车量
|
|
|
+ BigDecimal sendCarWeigh = kwtWaybillOrder.getEntrustAmount() == null ? new BigDecimal("0.00") : kwtWaybillOrder.getEntrustAmount();
|
|
|
/**亏吨量/吨->装货量-卸货量
|
|
|
- * 合理损耗值=已委托量*合理损耗
|
|
|
- 扣亏量/吨->亏吨量-合理损耗值*/
|
|
|
- //合理损耗值=已委托量*合理损耗
|
|
|
- BigDecimal multiply = kwtWaybillOrder.getEntrustAmount().multiply(loss.divide(BigDecimal.valueOf(1000L)));
|
|
|
- carWaybillVo.setDefectiveWeigh(kwtWaybillOrder.getDeficitAmount() == null ? null : String.valueOf(kwtWaybillOrder.getDeficitAmount()));
|
|
|
- carWaybillVo.setDeduct(kwtWaybillOrder.getDeficitAmount().compareTo(new BigDecimal(NumberConstant.ZERO)) == 0 ?
|
|
|
- new BigDecimal(NumberConstant.ZERO) : kwtWaybillOrder.getDeficitAmount().subtract(multiply));
|
|
|
- sendCarWeighNumber = sendCarWeighNumber.add(kwtWaybillOrder.getLoadAmount());
|
|
|
- if (carWaybillVo.getLoadAmount() != null) {
|
|
|
- loadAmountNumber = loadAmountNumber.add(new BigDecimal(carWaybillVo.getLoadAmount()));
|
|
|
- }
|
|
|
- if (carWaybillVo.getUnloadAmount() != null) {
|
|
|
- unloadAmountNumber = unloadAmountNumber.add(new BigDecimal(carWaybillVo.getUnloadAmount()));
|
|
|
+ * 合理损耗值=装货量*合理损耗
|
|
|
+ 扣亏量/吨->亏吨量-合理损耗值
|
|
|
+ 罚款值 扣亏量/吨*扣亏货值
|
|
|
+ 运价:
|
|
|
+ 按照装货量 运价*装货量
|
|
|
+ 按照卸货量 卸货量*运输单价-罚款值
|
|
|
+ 按照趟次=运价
|
|
|
+ */
|
|
|
+ //已委托量
|
|
|
+ BigDecimal entrustAmount = kwtWaybillOrder.getEntrustAmount() == null ? new BigDecimal("0.00") : kwtWaybillOrder.getEntrustAmount();
|
|
|
+ //合理损耗值
|
|
|
+ BigDecimal multiply = entrustAmount.multiply(loss.divide(BigDecimal.valueOf(1000L)));
|
|
|
+ //亏吨量
|
|
|
+ BigDecimal defectiveWeigh = kwtWaybillOrder.getDeficitAmount() == null ? new BigDecimal("0.00") : kwtWaybillOrder.getDeficitAmount();
|
|
|
+ //扣亏量/吨
|
|
|
+ BigDecimal deduct = defectiveWeigh.compareTo(new BigDecimal("0.00")) == 0 ? new BigDecimal("0.00") : defectiveWeigh.subtract(multiply);
|
|
|
+ sendCarWeighNumber = sendCarWeighNumber.add(sendCarWeigh);
|
|
|
+ if (kwtWaybillOrder.getLoadAmount() != null) {
|
|
|
+ loadAmountNumber = loadAmountNumber.add(kwtWaybillOrder.getLoadAmount());
|
|
|
}
|
|
|
- if (carWaybillVo.getDefectiveWeigh() != null) {
|
|
|
- defectiveWeighNumber = defectiveWeighNumber.add(new BigDecimal(carWaybillVo.getDefectiveWeigh()));
|
|
|
+ if (kwtWaybillOrder.getUnloadAmount() != null) {
|
|
|
+ unloadAmountNumber = unloadAmountNumber.add(kwtWaybillOrder.getUnloadAmount());
|
|
|
}
|
|
|
- deductWeighNumber = deductWeighNumber.add(carWaybillVo.getDeduct());
|
|
|
+ defectiveWeighNumber = defectiveWeighNumber.add(defectiveWeigh);
|
|
|
+ deductWeighNumber = deductWeighNumber.add(deduct);
|
|
|
}
|
|
|
}
|
|
|
statistics.put("count", kwtWaybillOrders.size());
|
|
|
@@ -242,26 +248,29 @@ public class ConsignOrderService {
|
|
|
BigDecimal deductWeighNumber = new BigDecimal(NumberConstant.ZERO);
|
|
|
if (CollectionUtils.isNotEmpty(kwtWaybillOrders)) {
|
|
|
for (KwtWaybillOrder kwtWaybillOrder : kwtWaybillOrders) {
|
|
|
- CarWaybillVO carWaybillVo = new CarWaybillVO();
|
|
|
- carWaybillVo.setSendCarWeigh(kwtWaybillOrder.getEntrustAmount() == null ? null : String.valueOf(kwtWaybillOrder.getEntrustAmount()));
|
|
|
+ //派车量
|
|
|
+ BigDecimal sendCarWeigh = kwtWaybillOrder.getEntrustAmount() == null ? new BigDecimal("0.00") : kwtWaybillOrder.getEntrustAmount();
|
|
|
/**亏吨量/吨->装货量-卸货量
|
|
|
- 扣亏量/吨->亏吨量*合理损耗*/
|
|
|
- BigDecimal multiply = kwtWaybillOrder.getEntrustAmount().multiply(loss.divide(BigDecimal.valueOf(1000L)));
|
|
|
- carWaybillVo.setDefectiveWeigh(kwtWaybillOrder.getDeficitAmount() == null ? null : String.valueOf(kwtWaybillOrder.getDeficitAmount()));
|
|
|
- carWaybillVo.setDeduct(kwtWaybillOrder.getDeficitAmount().compareTo(new BigDecimal(NumberConstant.ZERO)) == 0 ?
|
|
|
- new BigDecimal(NumberConstant.ZERO) : kwtWaybillOrder.getDeficitAmount().subtract(multiply));
|
|
|
- sendCarWeighNumber = sendCarWeighNumber.add(kwtWaybillOrder.getLoadAmount());
|
|
|
- sendCarWeighNumber = sendCarWeighNumber.add(kwtWaybillOrder.getLoadAmount());
|
|
|
- if (carWaybillVo.getLoadAmount() != null) {
|
|
|
- loadAmountNumber = loadAmountNumber.add(new BigDecimal(carWaybillVo.getLoadAmount()));
|
|
|
+ * 合理损耗值=装货量*合理损耗
|
|
|
+ 扣亏量/吨->亏吨量-合理损耗值
|
|
|
+ */
|
|
|
+ //已委托量
|
|
|
+ BigDecimal entrustAmount = kwtWaybillOrder.getEntrustAmount() == null ? new BigDecimal("0.00") : kwtWaybillOrder.getEntrustAmount();
|
|
|
+ //合理损耗值
|
|
|
+ BigDecimal multiply = entrustAmount.multiply(loss.divide(BigDecimal.valueOf(1000L)));
|
|
|
+ //亏吨量
|
|
|
+ BigDecimal defectiveWeigh = kwtWaybillOrder.getDeficitAmount() == null ? new BigDecimal("0.00") : kwtWaybillOrder.getDeficitAmount();
|
|
|
+ //扣亏量/吨
|
|
|
+ BigDecimal deduct = defectiveWeigh.compareTo(new BigDecimal("0.00")) == 0 ? new BigDecimal("0.00") : defectiveWeigh.subtract(multiply);
|
|
|
+ sendCarWeighNumber = sendCarWeighNumber.add(sendCarWeigh);
|
|
|
+ if (kwtWaybillOrder.getLoadAmount() != null) {
|
|
|
+ loadAmountNumber = loadAmountNumber.add(kwtWaybillOrder.getLoadAmount());
|
|
|
}
|
|
|
- if (carWaybillVo.getUnloadAmount() != null) {
|
|
|
- unloadAmountNumber = unloadAmountNumber.add(new BigDecimal(carWaybillVo.getUnloadAmount()));
|
|
|
+ if (kwtWaybillOrder.getUnloadAmount() != null) {
|
|
|
+ unloadAmountNumber = unloadAmountNumber.add(kwtWaybillOrder.getUnloadAmount());
|
|
|
}
|
|
|
- if (carWaybillVo.getDefectiveWeigh() != null) {
|
|
|
- defectiveWeighNumber = defectiveWeighNumber.add(new BigDecimal(carWaybillVo.getDefectiveWeigh()));
|
|
|
- }
|
|
|
- deductWeighNumber = deductWeighNumber.add(carWaybillVo.getDeduct());
|
|
|
+ defectiveWeighNumber = defectiveWeighNumber.add(defectiveWeigh);
|
|
|
+ deductWeighNumber = deductWeighNumber.add(deduct);
|
|
|
}
|
|
|
}
|
|
|
statistics.put("count", kwtWaybillOrders.size());
|
|
|
@@ -301,11 +310,20 @@ public class ConsignOrderService {
|
|
|
KwtWaybillOrderTicket unloadTicket = kwtWaybillOrderTicketMapper.selectOne(new LambdaQueryWrapper<KwtWaybillOrderTicket>()
|
|
|
.eq(StringUtils.isNotBlank(kwtWaybillOrder.getId()), KwtWaybillOrderTicket::getWOrderId, kwtWaybillOrder.getId())
|
|
|
.eq(KwtWaybillOrderTicket::getType, NumberConstant.TWO));
|
|
|
- //扣亏量/吨->亏吨量-合理损耗
|
|
|
- BigDecimal deduct = null;
|
|
|
- if (kwtWaybillOrder.getDeficitAmount() != null && (kwtWaybillOrder.getDeficitAmount().compareTo(new BigDecimal(NumberConstant.ZERO)) == NumberConstant.ZERO)) {
|
|
|
- deduct = kwtWaybillOrder.getDeficitAmount().subtract(order.getLoss() == null ? new BigDecimal(NumberConstant.ZERO) : order.getLoss());
|
|
|
- }
|
|
|
+ //合理损耗
|
|
|
+ BigDecimal loss = order.getLoss();
|
|
|
+ /**亏吨量/吨->装货量-卸货量
|
|
|
+ * 合理损耗值=装货量*合理损耗
|
|
|
+ 扣亏量/吨->亏吨量-合理损耗值
|
|
|
+ */
|
|
|
+ //已委托量
|
|
|
+ BigDecimal entrustAmount = kwtWaybillOrder.getEntrustAmount() == null ? new BigDecimal("0.00") : kwtWaybillOrder.getEntrustAmount();
|
|
|
+ //合理损耗值
|
|
|
+ BigDecimal multiply = entrustAmount.multiply(loss.divide(BigDecimal.valueOf(1000L)));
|
|
|
+ //亏吨量
|
|
|
+ BigDecimal defectiveWeigh = kwtWaybillOrder.getDeficitAmount() == null ? new BigDecimal("0.00") : kwtWaybillOrder.getDeficitAmount();
|
|
|
+ //扣亏量/吨
|
|
|
+ BigDecimal deduct = defectiveWeigh.compareTo(new BigDecimal("0.00")) == 0 ? new BigDecimal("0.00") : defectiveWeigh.subtract(multiply);
|
|
|
carWaybillVo.setWOrderId(String.valueOf(kwtWaybillOrder.getId()));
|
|
|
carWaybillVo.setWOrderNo(order.getLOrderNo());
|
|
|
carWaybillVo.setTruckNo(kwtWaybillOrder.getTruckNo());
|
|
|
@@ -316,6 +334,7 @@ public class ConsignOrderService {
|
|
|
// SckwWaybillOrder sckwWaybillOrder = mongoTemplate.findById(kwtWaybillOrder.getId(), SckwWaybillOrder.class);
|
|
|
/** 2023-07-24 原值为承运车队-去除后更换展示为承运公司*/
|
|
|
// carWaybillVo.setConsignMotorcade(sckwWaybillOrder == null ? null : sckwWaybillOrder.getCarrierFirmName());
|
|
|
+ //派车量
|
|
|
carWaybillVo.setSendCarWeigh(kwtWaybillOrder.getEntrustAmount() == null ? null : String.valueOf(kwtWaybillOrder.getEntrustAmount()));
|
|
|
carWaybillVo.setSendCarDate(DateUtil.getDateTime(kwtWaybillOrder.getCreateTime()));
|
|
|
if (loadTicket != null) {
|
|
|
@@ -374,11 +393,20 @@ public class ConsignOrderService {
|
|
|
KwtWaybillOrderTicket unloadTicket = kwtWaybillOrderTicketMapper.selectOne(new LambdaQueryWrapper<KwtWaybillOrderTicket>()
|
|
|
.eq(StringUtils.isNotBlank(kwtWaybillOrder.getId()), KwtWaybillOrderTicket::getWOrderId, kwtWaybillOrder.getId())
|
|
|
.eq(KwtWaybillOrderTicket::getType, NumberConstant.TWO));
|
|
|
- //扣亏量/吨->亏吨量-合理损耗
|
|
|
- BigDecimal deduct = null;
|
|
|
- if (kwtWaybillOrder.getDeficitAmount() != null && (kwtWaybillOrder.getDeficitAmount().compareTo(new BigDecimal(NumberConstant.ZERO)) == NumberConstant.ZERO)) {
|
|
|
- deduct = kwtWaybillOrder.getDeficitAmount().subtract(order.getLoss() == null ? new BigDecimal(NumberConstant.ZERO) : order.getLoss());
|
|
|
- }
|
|
|
+ //合理损耗
|
|
|
+ BigDecimal loss = order.getLoss();
|
|
|
+ /**亏吨量/吨->装货量-卸货量
|
|
|
+ * 合理损耗值=装货量*合理损耗
|
|
|
+ 扣亏量/吨->亏吨量-合理损耗值
|
|
|
+ */
|
|
|
+ //已委托量
|
|
|
+ BigDecimal entrustAmount = kwtWaybillOrder.getEntrustAmount() == null ? new BigDecimal("0.00") : kwtWaybillOrder.getEntrustAmount();
|
|
|
+ //合理损耗值
|
|
|
+ BigDecimal multiply = entrustAmount.multiply(loss.divide(BigDecimal.valueOf(1000L)));
|
|
|
+ //亏吨量
|
|
|
+ BigDecimal defectiveWeigh = kwtWaybillOrder.getDeficitAmount() == null ? new BigDecimal("0.00") : kwtWaybillOrder.getDeficitAmount();
|
|
|
+ //扣亏量/吨
|
|
|
+ BigDecimal deduct = defectiveWeigh.compareTo(new BigDecimal("0.00")) == 0 ? new BigDecimal("0.00") : defectiveWeigh.subtract(multiply);
|
|
|
carWaybillVo.setWOrderId(String.valueOf(kwtWaybillOrder.getId()));
|
|
|
carWaybillVo.setWOrderNo(order.getLOrderNo());
|
|
|
carWaybillVo.setTruckNo(kwtWaybillOrder.getTruckNo());
|
|
|
@@ -389,6 +417,7 @@ public class ConsignOrderService {
|
|
|
// SckwWaybillOrder sckwWaybillOrder = mongoTemplate.findById(kwtWaybillOrder.getId(), SckwWaybillOrder.class);
|
|
|
/** 2023-07-24 原值为承运车队-去除后更换展示为承运公司*/
|
|
|
// carWaybillVo.setConsignMotorcade(sckwWaybillOrder == null ? null : sckwWaybillOrder.getCarrierFirmName());
|
|
|
+ //派车量
|
|
|
carWaybillVo.setSendCarWeigh(kwtWaybillOrder.getEntrustAmount() == null ? null : String.valueOf(kwtWaybillOrder.getEntrustAmount()));
|
|
|
carWaybillVo.setSendCarDate(DateUtil.getDateTime(kwtWaybillOrder.getCreateTime()));
|
|
|
if (loadTicket != null) {
|
|
|
@@ -632,12 +661,17 @@ public class ConsignOrderService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 托运订单-完结订单
|
|
|
+ * 托运订单-新建订单
|
|
|
*
|
|
|
* @param addOrderDTO
|
|
|
* @return
|
|
|
*/
|
|
|
public HttpResult addOrder(AddOrderDTO addOrderDTO) throws ParseException {
|
|
|
+ HttpResult httpResult = ValidUtil.serviceValid(addOrderDTO);
|
|
|
+ if (!String.valueOf(HttpStatus.SUCCESS_CODE).equals(String.valueOf(httpResult.getCode()))) {
|
|
|
+ return HttpResult.error(httpResult.getMsg());
|
|
|
+ }
|
|
|
+ checkAddOrderParam(addOrderDTO);
|
|
|
/**保存新建数据*/
|
|
|
Long lOrderId = new IdWorker(NumberConstant.ONE).nextId();
|
|
|
/**生成订单编号*/
|
|
|
@@ -684,6 +718,29 @@ public class ConsignOrderService {
|
|
|
return HttpResult.ok();
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 校验请求参数
|
|
|
+ *
|
|
|
+ * @param orderDTO
|
|
|
+ */
|
|
|
+ private void checkAddOrderParam(AddOrderDTO orderDTO) {
|
|
|
+ if (!ObjectUtils.isEmpty(orderDTO.getTaxRate())) {
|
|
|
+ if (orderDTO.getTaxRate().compareTo(new BigDecimal(NumberConstant.ZERO)) < 0) {
|
|
|
+ throw new BusinessException("税率填写格式错误!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!ObjectUtils.isEmpty(orderDTO.getLoss())) {
|
|
|
+ if (orderDTO.getLoss().compareTo(new BigDecimal(NumberConstant.ZERO)) < 0) {
|
|
|
+ throw new BusinessException("合理损耗填写格式错误!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!ObjectUtils.isEmpty(orderDTO.getGoodsPrice())) {
|
|
|
+ if (orderDTO.getGoodsPrice().compareTo(new BigDecimal(NumberConstant.ZERO)) < 0) {
|
|
|
+ throw new BusinessException("扣亏货值填写格式错误!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 托运订单-页面新增订单-商品信息
|
|
|
*
|
|
|
@@ -982,7 +1039,27 @@ public class ConsignOrderService {
|
|
|
*/
|
|
|
public HttpResult getLogisticsOrderAddressList() {
|
|
|
Long entId = LoginUserHolder.getEntId();
|
|
|
- List<Integer> codeList = kwtLogisticsOrderMapper.getAddressList(entId);
|
|
|
- return HttpResult.ok(codeList);
|
|
|
+ AddressDropListDTO res = new AddressDropListDTO();
|
|
|
+ List<KwtLogisticsOrderUnit> unitInfo = kwtLogisticsOrderUnitMapper.selectList(new LambdaQueryWrapper<KwtLogisticsOrderUnit>()
|
|
|
+ .eq(KwtLogisticsOrderUnit::getEntId, entId));
|
|
|
+ if (CollectionUtils.isEmpty(unitInfo)) {
|
|
|
+ return HttpResult.ok(res);
|
|
|
+ }
|
|
|
+ Set<Long> lOrderIds = unitInfo.stream().map(KwtLogisticsOrderUnit::getLOrderId).collect(Collectors.toSet());
|
|
|
+ //订单ids获取地址信息
|
|
|
+ List<KwtLogisticsOrderAddress> addressList = kwtLogisticsOrderAddressMapper.selectList(new LambdaQueryWrapper<KwtLogisticsOrderAddress>()
|
|
|
+ .in(KwtLogisticsOrderAddress::getLOrderId, lOrderIds));
|
|
|
+ if (CollectionUtils.isEmpty(addressList)) {
|
|
|
+ return HttpResult.ok(res);
|
|
|
+ }
|
|
|
+ //装卸货地址类型分组获取装卸货cityCodes
|
|
|
+ Map<Integer, List<Integer>> map = addressList.stream().collect(Collectors.
|
|
|
+ groupingBy(KwtLogisticsOrderAddress::getAddressType, Collectors.mapping(KwtLogisticsOrderAddress::getCityCode, Collectors.toList())));
|
|
|
+ //装货地址下拉列表树
|
|
|
+ List<AreaTreeFrontResDto> loadTree = remoteSystemService.queryAreaTreeFrontByCodeList(map.get(DictEnum.TORDER_ADDRESS_TYPE_1.getValue()));
|
|
|
+ //卸货地址下拉列表树
|
|
|
+ List<AreaTreeFrontResDto> unloadTree = remoteSystemService.queryAreaTreeFrontByCodeList(map.get(DictEnum.TORDER_ADDRESS_TYPE_2.getValue()));
|
|
|
+ res.setLoadAddressList(loadTree).setUnloadAddressList(unloadTree);
|
|
|
+ return HttpResult.ok(res);
|
|
|
}
|
|
|
}
|