提交 3dc67e4e authored 作者: liruixin's avatar liruixin

系统生成违约结算单

上级 aa86aa28
......@@ -6,6 +6,7 @@ import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.enums.RoleEnum;
import com.clx.performance.param.pc.OrderCancelParam;
import com.clx.performance.service.OrderCancelService;
import com.clx.performance.service.breakcontract.BreakContractSettlementOwnerService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -23,6 +24,11 @@ public class OrderCancelHandler {
@Autowired
private OrderCancelService orderCancelService;
@Autowired
private BreakContractSettlementOwnerService breakContractSettlementOwnerService;
@RabbitListener(queues = RabbitKeyConstants.ORDER_CANCEL_QUEUE)
public void onMessage(String message) {
log.info("处理订单取消监听器执行,订单No为{}", message);
......@@ -34,7 +40,7 @@ public class OrderCancelHandler {
}
//货主端取消订单进行违约计费
if(Objects.equals(param.getCreateByType(), RoleEnum.Type.OWNER)){
breakContractSettlementOwnerService.saveSettlementOwnerForCancelOrder(param.getOrderNo());
}
}
......
......@@ -19,5 +19,7 @@ public interface BreakContractOwnerRecordService {
IPage<PageOwnerBreakContractOwnerRecordVO> pageOwnerRecord(PageOwnerBreakContractOwnerRecordParam param);
void autoSaveRecord(BreakContractOwnerRecordAddParam param);
}
......@@ -138,4 +138,50 @@ public class BreakContractOwnerRecordServiceImpl implements BreakContractOwnerR
return new Page<PageOwnerBreakContractOwnerRecordVO>().setRecords(ownerRecordVO).setTotal(ownerRecord.getTotal()).setPages(ownerRecord.getPages());
}
@Override
public void autoSaveRecord(BreakContractOwnerRecordAddParam param) {
String breakNo = "WYD"+childNoGenerate();
FeignOrderInfoVO orderInfo = orderService.getOrderInfo(param.getOrderNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
OwnerInfoFeignVO ownerInfo = ownerInfoService.getOwnerInfo(orderInfo.getOwnerUserNo());
BreakContractOwnerRecord record = new BreakContractOwnerRecord();
record.setBreakNo(breakNo);
record.setTriggerType(BreakContractRecordEnum.TriggerType.SYSTEM.getCode());
record.setBreakContractPartyType(BreakContractRecordEnum.BreakContractPartyType.OWNER.getCode());
record.setOrderNo(param.getOrderNo());
record.setFigure(param.getFigure());
record.setRemark(param.getRemark());
record.setOwnerUserNo(ownerInfo.getUserNo());
record.setOwnerName(ownerInfo.getName());
record.setCreateBy(0L);
record.setCreateName("系统");
//货主违约计费明细
BreakContractSettlementOwnerDetail breakOwnerDetail = breakContractSettlementOwnerDetailStruct.convert(record);
String settlementNo = "WYJSD"+childNoGenerate();
breakOwnerDetail.setSettlementNo(settlementNo);
//货主违约结算单
BreakContractSettlementOwner breakOwner = breakContractSettlementOwnerStruct.convert(breakOwnerDetail);
breakOwner.setStatus(BreakContractSettlementOwnerEnum.Status.TO_BE_ACCOUNT.getCode());
record.setSettlementNo(settlementNo);
//保存违约记录
breakContractOwnerRecordDao.saveEntity(record);
//保存违约计费
breakContractSettlementOwnerDao.saveEntity(breakOwner);
//保存违约结算单
breakContractSettlementOwnerDetailDao.saveEntity(breakOwnerDetail);
//保存结算单日志----创建结算单
breakContractSettlementLogService.saveBreakSettlementLog(settlementNo,
BreakContractSettlementLogEnum.Type.CREATE_SETTLEMENT.getCode(),BreakContractSettlementLogEnum.Type.CREATE_SETTLEMENT.getMsg(),
OrderChildLogEnum.CreateType.PLATFORM.getCode(),record.getCreateBy(),record.getCreateName());
}
}
......@@ -55,10 +55,10 @@ public class BreakContractOwnerRuleServiceImpl implements BreakContractOwnerRul
autoRule.setOrderCancelRule(new BreakContractOwnerRuleVO.OrderCancelRule());
autoRule.setOrderAmountReduceRule(new BreakContractOwnerRuleVO.OrderAmountReduceRule());
autoRule.getOrderAmountReduceRule().setRatio(new BigDecimal(param.getRule().get("A-a")));
autoRule.getOrderCancelRule().setBeforeRatio(new BigDecimal(param.getRule().get("A-b")));
autoRule.getOrderCancelRule().setAfterRatio(new BigDecimal(param.getRule().get("A-c")));
autoRule.getOrderCancelRule().setAfterFigurePerHour(new BigDecimal(param.getRule().get("A-d")));
autoRule.getOrderAmountReduceRule().setRatio(new BigDecimal(param.getRule().get("A-a")).movePointLeft(2));
autoRule.getOrderCancelRule().setBeforeRatio(new BigDecimal(param.getRule().get("A-b")).movePointLeft(2));
autoRule.getOrderCancelRule().setAfterRatio(new BigDecimal(param.getRule().get("A-c")).movePointLeft(2));
autoRule.getOrderCancelRule().setAfterFigurePerHour(new BigDecimal(param.getRule().get("A-d")).movePointLeft(2));
rule.setAutoRuleJson(JSON.toJSONString(autoRule));
breakContractOwnerRuleDao.saveEntity(rule);
......
......@@ -23,6 +23,7 @@ import com.clx.performance.model.settle.SettlementPlatformAccount;
import com.clx.performance.param.feign.OrderAdjustTonnageDownParam;
import com.clx.performance.param.pc.breakcontract.carrier.*;
import com.clx.performance.service.OwnerAccountService;
import com.clx.performance.service.breakcontract.BreakContractOwnerRecordService;
import com.clx.performance.service.breakcontract.BreakContractSettlementLogService;
import com.clx.performance.service.breakcontract.BreakContractSettlementOwnerService;
import com.clx.performance.struct.breakcontract.BreakContractSettlementLogStruct;
......@@ -75,6 +76,8 @@ public class BreakContractSettlementOwnerServiceImpl implements BreakContractSe
private final OwnerAccountService ownerAccountService;
private final OrderFeign orderFeign;
private final QuotationService quotationService;
private final BreakContractOwnerRecordService breakContractOwnerRecordService;
@Override
......@@ -325,7 +328,8 @@ public class BreakContractSettlementOwnerServiceImpl implements BreakContractSe
}
//违约金方案
BreakContractOwnerRule ownerRule = breakContractOwnerRuleDao.getEntityByKey(param.getLiquidatedDamagesPlanId()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
BreakContractOwnerRule ownerRule = breakContractOwnerRuleDao.getEntityByKey(param.getLiquidatedDamagesPlanId())
.orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
if(Objects.equals(ownerRule.getStatus(),2)){
throw new ServiceSystemException(PerformanceResultEnum.BREAK_CONTRACT_RULE_NO_FOUND);
}
......@@ -334,6 +338,16 @@ public class BreakContractSettlementOwnerServiceImpl implements BreakContractSe
BreakContractOwnerRuleVO.OrderAmountReduceRule reduceRule = autoRule.getOrderAmountReduceRule();//订单吨数减少规则
BigDecimal ratio = reduceRule.getRatio();//比例
//组装参数 生成违约记录 违约计费 违约结算单
BreakContractOwnerRecordAddParam ownerRecordAddParam = new BreakContractOwnerRecordAddParam();
ownerRecordAddParam.setBreakContractPartyType(BreakContractRecordEnum.BreakContractPartyType.OWNER.getCode());
BigDecimal figure = totalFreight.multiply(ratio).multiply(param.getWeight())
.divide(param.getTransportWeight(),2, BigDecimal.ROUND_HALF_UP);
ownerRecordAddParam.setFigure(figure);
ownerRecordAddParam.setOrderNo(param.getOrderNo());
ownerRecordAddParam.setRemark("下调吨数产生违约");
breakContractOwnerRecordService.autoSaveRecord(ownerRecordAddParam);
}
@Override
......@@ -368,11 +382,17 @@ public class BreakContractSettlementOwnerServiceImpl implements BreakContractSe
//获取订单配置的违约金方案
OwnerQuotationDetailVO quotationDetailVO = quotationService.getQuotationByOrderNo(orderNo).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
if(Objects.isNull(quotationDetailVO.getLiquidatedDamagesPlanId())){
throw new ServiceSystemException(PerformanceResultEnum.DATA_NOT_FIND);
}
//获取违约金方案详情
BreakContractOwnerRule ownerRule = breakContractOwnerRuleDao.getEntityByKey(quotationDetailVO.getLiquidatedDamagesPlanId()).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();//订单取消规则
......@@ -385,13 +405,13 @@ public class BreakContractSettlementOwnerServiceImpl implements BreakContractSe
OrderChildEnum.Status.ARRIVE_RECEIVE.getCode(), OrderChildEnum.Status.UNLOAD.getCode(),
OrderChildEnum.Status.UNSETTLE.getCode()});
BigDecimal totalFreight ;//总费用
BigDecimal figure ;//总费用
List<OrderChild> orderChilds = orderChildDao.listOrderChildByOrderNoAndStatus(orderNo, statusList);
LocalDateTime now = LocalDateTime.now();//当前时间
//没有司机拉运
if(CollectionUtils.isEmpty(orderChilds)){
totalFreight = orderInfoFeign.getTransportWeight().multiply(orderInfoFeign.getValidFreightPrice());
figure = orderInfoFeign.getTransportWeight().multiply(orderInfoFeign.getValidFreightPrice()).multiply(orderCancelRule.getBeforeRatio());
}else{
BigDecimal deliveredWeight = BigDecimal.ZERO;//已拉运的重量
BigDecimal cancelWeight = BigDecimal.ZERO;//可取消的重量
......@@ -416,7 +436,20 @@ public class BreakContractSettlementOwnerServiceImpl implements BreakContractSe
}
BigDecimal noTransitWeight = orderInfoFeign.getTransportWeight().subtract(deliveredWeight);//未拉运的重量
BigDecimal noTransitFreight = noTransitWeight.multiply(orderInfoFeign.getValidFreightPrice());//未拉运的费用
totalFreight = deliveredFreight.add(noTransitFreight);
BigDecimal totalFreight = deliveredFreight.add(noTransitFreight);
BigDecimal baseFigure = totalFreight.multiply(orderCancelRule.getAfterRatio()).multiply(cancelWeight)
.divide(orderInfoFeign.getTransportWeight(),2, BigDecimal.ROUND_HALF_UP);
BigDecimal truckFigure = seconds.multiply(orderCancelRule.getAfterFigurePerHour())
.divide(new BigDecimal(60),2, BigDecimal.ROUND_HALF_UP);
figure = baseFigure.add(truckFigure);
}
//组装参数 生成违约记录 违约计费 违约结算单
BreakContractOwnerRecordAddParam ownerRecordAddParam = new BreakContractOwnerRecordAddParam();
ownerRecordAddParam.setBreakContractPartyType(BreakContractRecordEnum.BreakContractPartyType.OWNER.getCode());
ownerRecordAddParam.setFigure(figure);
ownerRecordAddParam.setOrderNo(orderNo);
ownerRecordAddParam.setRemark("订单取消产生违约");
breakContractOwnerRecordService.autoSaveRecord(ownerRecordAddParam);
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论