提交 4d6b622f authored 作者: liruixin's avatar liruixin

违约结算单

上级 d4f3fe26
...@@ -12,7 +12,7 @@ public class OrderGoodsEditVO { ...@@ -12,7 +12,7 @@ public class OrderGoodsEditVO {
@ApiModelProperty("订单编号") @ApiModelProperty("订单编号")
private String orderNo; private String orderNo;
@ApiModelProperty("拉运吨数") @ApiModelProperty("拉运吨数")
private String transportWeight; private BigDecimal transportWeight;
@ApiModelProperty("有效运费") @ApiModelProperty("有效运费")
private BigDecimal validFreightPrice; private BigDecimal validFreightPrice;
@ApiModelProperty("用车需求: 1平台车辆 2部分平台车辆 3自有车辆") @ApiModelProperty("用车需求: 1平台车辆 2部分平台车辆 3自有车辆")
......
package com.clx.performance.extranal.order;
import com.clx.order.vo.pc.owner.OwnerQuotationDetailVO;
import com.msl.common.base.Optional;
public interface QuotationService {
Optional<OwnerQuotationDetailVO> getQuotationByOrderNo(String orderNo);
}
package com.clx.performance.extranal.order.impl;
import com.clx.order.feign.OrderFeign;
import com.clx.order.vo.pc.owner.OwnerQuotationDetailVO;
import com.clx.performance.extranal.order.QuotationService;
import com.msl.common.base.Optional;
import com.msl.common.result.Result;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@Service
@Slf4j
@AllArgsConstructor
public class QuotationServiceImpl implements QuotationService {
private final OrderFeign orderFeign;
@Override
public Optional<OwnerQuotationDetailVO> getQuotationByOrderNo(String orderNo) {
return Optional.ofNullable(orderFeign.getQuotationByOrderNo(orderNo))
.filter(Result::succeed)
.map(Result::getData);
}
}
...@@ -3,6 +3,7 @@ package com.clx.performance.listener; ...@@ -3,6 +3,7 @@ package com.clx.performance.listener;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.clx.performance.constant.RabbitKeyConstants; import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.enums.RoleEnum;
import com.clx.performance.param.pc.OrderCancelParam; import com.clx.performance.param.pc.OrderCancelParam;
import com.clx.performance.service.OrderCancelService; import com.clx.performance.service.OrderCancelService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -10,6 +11,8 @@ import org.springframework.amqp.rabbit.annotation.RabbitListener; ...@@ -10,6 +11,8 @@ import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.Objects;
/** /**
* 处理货单取消吨数回填 * 处理货单取消吨数回填
*/ */
...@@ -29,6 +32,10 @@ public class OrderCancelHandler { ...@@ -29,6 +32,10 @@ public class OrderCancelHandler {
} else { } else {
orderCancelService.orderCancelProcess(param); orderCancelService.orderCancelProcess(param);
} }
//货主端取消订单进行违约计费
if(Objects.equals(param.getCreateByType(), RoleEnum.Type.OWNER)){
}
} }
} }
...@@ -96,7 +96,7 @@ public class OrderChildDtsListener { ...@@ -96,7 +96,7 @@ public class OrderChildDtsListener {
List<OrderGoods> list = orderGoodsDao.getOrderGoodsListByOrderNoAndLastArriveSendTime(after.getOrderNo(), nowDateTime); List<OrderGoods> list = orderGoodsDao.getOrderGoodsListByOrderNoAndLastArriveSendTime(after.getOrderNo(), nowDateTime);
BigDecimal childSum = list.stream().map(OrderGoods::getExtractWeight).reduce(BigDecimal.ZERO, BigDecimal::add); BigDecimal childSum = list.stream().map(OrderGoods::getExtractWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
log.info("算出所有货单总量:{}, 订单总吨数:{}", childSum, orderInfoFeign.getTransportWeight()); log.info("算出所有货单总量:{}, 订单总吨数:{}", childSum, orderInfoFeign.getTransportWeight());
if (childSum.compareTo(new BigDecimal(orderInfoFeign.getTransportWeight())) == 0) { if (childSum.compareTo(orderInfoFeign.getTransportWeight()) == 0) {
// 按照时间 倒序查出最后一条进行中的运单 // 按照时间 倒序查出最后一条进行中的运单
OrderChild orderChild = orderChildDao.getGoingLatestOrderChildByOrderNo(after.getOrderNo()); OrderChild orderChild = orderChildDao.getGoingLatestOrderChildByOrderNo(after.getOrderNo());
if(Objects.nonNull(orderChild) && orderChild.getChildNo().equals(after.getChildNo())){ if(Objects.nonNull(orderChild) && orderChild.getChildNo().equals(after.getChildNo())){
......
...@@ -36,7 +36,9 @@ public interface BreakContractSettlementOwnerService { ...@@ -36,7 +36,9 @@ public interface BreakContractSettlementOwnerService {
void updateOwnerBreakContractPayeeConfirm(CarrierBreakPayeeConfirmParam param); void updateOwnerBreakContractPayeeConfirm(CarrierBreakPayeeConfirmParam param);
void saveBreakContractSettlementOwner(OrderAdjustTonnageDownParam param); void saveSettlementOwnerForTonnageDown(OrderAdjustTonnageDownParam param);
void saveSettlementOwnerForCancelOrder(String orderNo);
SettlementPlatformAccountVO getCarrierSettlementPlatformAccount(Integer id); SettlementPlatformAccountVO getCarrierSettlementPlatformAccount(Integer id);
......
...@@ -5,12 +5,16 @@ import com.alibaba.fastjson.JSONObject; ...@@ -5,12 +5,16 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.order.feign.OrderFeign;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.order.vo.pc.owner.OwnerQuotationDetailVO;
import com.clx.performance.dao.OrderChildDao; import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.breakcontract.BreakContractOwnerRuleDao; import com.clx.performance.dao.breakcontract.BreakContractOwnerRuleDao;
import com.clx.performance.dao.breakcontract.BreakContractSettlementLogDao; import com.clx.performance.dao.breakcontract.BreakContractSettlementLogDao;
import com.clx.performance.dao.breakcontract.BreakContractSettlementOwnerDao; import com.clx.performance.dao.breakcontract.BreakContractSettlementOwnerDao;
import com.clx.performance.dao.settle.SettlementPlatformAccountDao; import com.clx.performance.dao.settle.SettlementPlatformAccountDao;
import com.clx.performance.enums.*; import com.clx.performance.enums.*;
import com.clx.performance.extranal.order.QuotationService;
import com.clx.performance.model.OrderChild; import com.clx.performance.model.OrderChild;
import com.clx.performance.model.breakcontract.BreakContractOwnerRule; import com.clx.performance.model.breakcontract.BreakContractOwnerRule;
import com.clx.performance.model.breakcontract.BreakContractSettlementLog; import com.clx.performance.model.breakcontract.BreakContractSettlementLog;
...@@ -34,6 +38,7 @@ import com.clx.performance.vo.pc.breakcontract.carrier.PageCarrierBreakContractS ...@@ -34,6 +38,7 @@ import com.clx.performance.vo.pc.breakcontract.carrier.PageCarrierBreakContractS
import com.clx.performance.vo.pc.owner.settle.SettlementPlatformAccountVO; import com.clx.performance.vo.pc.owner.settle.SettlementPlatformAccountVO;
import com.clx.user.vo.pc.owner.OwnerBindCardVO; import com.clx.user.vo.pc.owner.OwnerBindCardVO;
import com.msl.common.exception.ServiceSystemException; import com.msl.common.exception.ServiceSystemException;
import com.msl.common.utils.LocalDateTimeUtils;
import com.msl.user.data.UserSessionData; import com.msl.user.data.UserSessionData;
import com.msl.user.utils.TokenUtil; import com.msl.user.utils.TokenUtil;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
...@@ -43,6 +48,7 @@ import org.springframework.stereotype.Service; ...@@ -43,6 +48,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
...@@ -67,6 +73,8 @@ public class BreakContractSettlementOwnerServiceImpl implements BreakContractSe ...@@ -67,6 +73,8 @@ public class BreakContractSettlementOwnerServiceImpl implements BreakContractSe
private final BreakContractOwnerRuleDao breakContractOwnerRuleDao; private final BreakContractOwnerRuleDao breakContractOwnerRuleDao;
private final SettlementPlatformAccountDao settlementPlatformAccountDao; private final SettlementPlatformAccountDao settlementPlatformAccountDao;
private final OwnerAccountService ownerAccountService; private final OwnerAccountService ownerAccountService;
private final OrderFeign orderFeign;
private final QuotationService quotationService;
@Override @Override
...@@ -280,7 +288,7 @@ public class BreakContractSettlementOwnerServiceImpl implements BreakContractSe ...@@ -280,7 +288,7 @@ public class BreakContractSettlementOwnerServiceImpl implements BreakContractSe
} }
@Override @Override
public void saveBreakContractSettlementOwner(OrderAdjustTonnageDownParam param) { public void saveSettlementOwnerForTonnageDown(OrderAdjustTonnageDownParam param) {
//下调货物吨数 //下调货物吨数
if(param.getWeight().compareTo(BigDecimal.ZERO) <=0){ if(param.getWeight().compareTo(BigDecimal.ZERO) <=0){
return ; return ;
...@@ -348,4 +356,67 @@ public class BreakContractSettlementOwnerServiceImpl implements BreakContractSe ...@@ -348,4 +356,67 @@ public class BreakContractSettlementOwnerServiceImpl implements BreakContractSe
} }
return vo; return vo;
} }
@Override
public void saveSettlementOwnerForCancelOrder(String orderNo) {
//获取订单信息
FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(orderNo);
if(Objects.isNull(orderInfoFeign)){
log.info("货主取消保存违约结算单获取订单数据为空");
return;
}
//获取订单配置的违约金方案
OwnerQuotationDetailVO quotationDetailVO = quotationService.getQuotationByOrderNo(orderNo).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
//获取违约金方案详情
BreakContractOwnerRule ownerRule = breakContractOwnerRuleDao.getEntityByKey(quotationDetailVO.getLiquidatedDamagesPlanId()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
if(Objects.equals(ownerRule.getStatus(),2)){
throw new ServiceSystemException(PerformanceResultEnum.BREAK_CONTRACT_RULE_NO_FOUND);
}
String autoRuleJson = ownerRule.getAutoRuleJson();//系统自动违规
BreakContractOwnerRuleVO.AutoRule autoRule = JSONObject.parseObject(autoRuleJson, BreakContractOwnerRuleVO.AutoRule.class);
BreakContractOwnerRuleVO.OrderCancelRule orderCancelRule = autoRule.getOrderCancelRule();//订单取消规则
//运单状态(不包括取消)
List<Integer> statusList = Arrays.asList(
new Integer[]{OrderChildEnum.Status.CREATED.getCode(), OrderChildEnum.Status.PAY.getCode(),
OrderChildEnum.Status.GO_TO_SEND.getCode(), OrderChildEnum.Status.ARRIVE_SEND.getCode(),
OrderChildEnum.Status.LOAD.getCode(), OrderChildEnum.Status.GO_TO_RECEIVE.getCode(),
OrderChildEnum.Status.ARRIVE_RECEIVE.getCode(), OrderChildEnum.Status.UNLOAD.getCode(),
OrderChildEnum.Status.UNSETTLE.getCode()});
BigDecimal totalFreight ;//总费用
List<OrderChild> orderChilds = orderChildDao.listOrderChildByOrderNoAndStatus(orderNo, statusList);
LocalDateTime now = LocalDateTime.now();//当前时间
//没有司机拉运
if(CollectionUtils.isEmpty(orderChilds)){
totalFreight = orderInfoFeign.getTransportWeight().multiply(orderInfoFeign.getValidFreightPrice());
}else{
BigDecimal deliveredWeight = BigDecimal.ZERO;//已拉运的重量
BigDecimal cancelWeight = BigDecimal.ZERO;//可取消的重量
BigDecimal deliveredFreight = BigDecimal.ZERO;//已拉运的费用
BigDecimal seconds = BigDecimal.ZERO;//总毫秒数
for(OrderChild orderChild : orderChilds){
if(orderChild.getLoadNet() != null){
deliveredWeight = deliveredWeight.add(orderChild.getWeight()) ;
deliveredFreight = deliveredFreight.add(orderChild.getOrderFreightPrice().multiply(orderChild.getWeight()));
}else{
deliveredWeight = deliveredWeight.add(orderChild.getLoadNet()) ;
deliveredFreight = deliveredFreight.add(orderChild.getOrderFreightPrice().multiply(orderChild.getLoadNet()));
}
if(Objects.equals(orderChild.getStatus(),OrderChildEnum.Status.CREATED.getCode())
|| Objects.equals(orderChild.getStatus(),OrderChildEnum.Status.PAY.getCode())
|| Objects.equals(orderChild.getStatus(),OrderChildEnum.Status.GO_TO_SEND.getCode())) {
cancelWeight = cancelWeight.add(orderChild.getWeight());
seconds = seconds.add(new BigDecimal(LocalDateTimeUtils.getSecondsDiff(orderChild.getPayTime(),now)));
}
}
BigDecimal noTransitWeight = orderInfoFeign.getTransportWeight().subtract(deliveredWeight);//未拉运的重量
BigDecimal noTransitFreight = noTransitWeight.multiply(orderInfoFeign.getValidFreightPrice());//未拉运的费用
totalFreight = deliveredFreight.add(noTransitFreight);
}
}
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论