Commit 9361ea8b authored by 周健威's avatar 周健威

修复违约金读取问题

parent 3aa3ae66
......@@ -334,7 +334,7 @@ public class OrderAccountBiz extends BaseBiz<OrderAccountMapper,OrderAccount> {
}
OrderAccountDetail oad = new OrderAccountDetail();
InProgressVO inProgressVO = orderCalculateBiz.calculateOrderComplete(orderMQDTO, orderMQDTO.getOrderRentVehicleDetail(), oad, orderItem, orderMQDTO.getOrderRentVehicleDetail().getUsedDay());
InProgressVO inProgressVO = orderCalculateBiz.calculateOrderComplete(orderMQDTO, orderMQDTO.getOrderRentVehicleDetail(), oad, orderItem, orderMQDTO.getOrderRentVehicleDetail().getUsedDay(), Boolean.FALSE);
//还车扣除款 剩余的 钱,再减去违章预备金
oad.getDeductions().add(
......
......@@ -58,7 +58,7 @@ public class OrderCalculateBiz {
@Autowired
OrderAccountBiz orderAccountBiz;
public InProgressVO inProgressCalculate(BaseOrder baseOrder, OrderItem orderItem, Integer freeDays, Integer useDays, OrderAccountDetail oad) {
public InProgressVO inProgressCalculate(BaseOrder baseOrder, OrderItem orderItem, Integer freeDays, Integer useDays, OrderAccountDetail oad, Boolean isCancel) {
BigDecimal refundAmount = BigDecimal.ZERO;
BigDecimal consumeAmount = BigDecimal.ZERO;
//其他消费金额
......@@ -144,24 +144,28 @@ public class OrderCalculateBiz {
//计算违约金
//residueDays * 身份价格
if(residueDays > 0) {
String violateDesc = StrUtil.format("{}元/天 x{}天", orderItem.getUnitPrice().toString(), residueDays);
if(residueDays > 2) {
residueDays = 2;
violateDesc += StrUtil.format("(封顶{}元)", orderItem.getUnitPrice().multiply(new BigDecimal((residueDays + ""))));
}
inProgressVO.setViolateAmount(orderItem.getUnitPrice().multiply(new BigDecimal((residueDays + ""))));
OrderAccountDeduction violateDeduction = orderAccountBiz.initDeduction(inProgressVO.getViolateAmount(), "违约金", DeductionTypeEnum.VIOLATE_ADVANCE, OrderAccountDeduction.ORIGIN_DEPOSIT);
OrderAccountDeduction violateDeduction = orderAccountBiz.initDeduction(inProgressVO.getViolateAmount(), violateDesc, DeductionTypeEnum.VIOLATE_ADVANCE, OrderAccountDeduction.ORIGIN_DEPOSIT);
oad.getDeductions().add(violateDeduction);
}else if(residueDays < 0){
}else if(residueDays < 0 && !isCancel){
//如果订单 出发中 或者 已完成 或者定损中
if(OrderStatusEnum.ORDER_WAIT.equals(baseOrder.getStatus()) ||
OrderStatusEnum.ORDER_FINISH.equals(baseOrder.getStatus()) ||
OrderStatusEnum.ORDER_FIXED_LOSS.equals(baseOrder.getStatus())) {
Integer overDays = 0 - residueDays;
if(overDays > 2) {
overDays = 2;
}
String violateDesc = StrUtil.format("({}元/天 x200%) x{}天", orderItem.getUnitPrice().toString(), overDays);
// if(overDays > 2) {
// overDays = 2;
// violateDesc += StrUtil.format("(封顶{}元)", orderItem.getUnitPrice().multiply(new BigDecimal((residueDays + ""))));
// }
//超过的天数 * 200% * 单价
inProgressVO.setViolateAmount(orderItem.getUnitPrice().multiply(new BigDecimal(2+ "")).multiply(new BigDecimal((overDays + ""))));
OrderAccountDeduction violateDeduction = orderAccountBiz.initDeduction(inProgressVO.getViolateAmount(), "违约金", DeductionTypeEnum.VIOLATE_DELAY, OrderAccountDeduction.ORIGIN_DEPOSIT);
OrderAccountDeduction violateDeduction = orderAccountBiz.initDeduction(inProgressVO.getViolateAmount(), violateDesc, DeductionTypeEnum.VIOLATE_DELAY, OrderAccountDeduction.ORIGIN_DEPOSIT);
oad.getDeductions().add(violateDeduction);
}
}
......@@ -175,11 +179,11 @@ public class OrderCalculateBiz {
setOrderId(baseOrder.getId());
}});
Integer freeDays = (null == orderItem.getCutNum())?0 :orderItem.getCutNum();
return inProgressCalculate(baseOrder, orderItem, freeDays, useDays, new OrderAccountDetail());
return inProgressCalculate(baseOrder, orderItem, freeDays, useDays, new OrderAccountDetail(), Boolean.FALSE);
}
public InProgressVO calculateOrderComplete(BaseOrder baseOrder, OrderRentVehicleDetail orvd, OrderAccountDetail oad, OrderItem orderItem, Integer useDays) {
InProgressVO inProgressVO = inProgressCalculate(baseOrder, orderItem, orvd.getFreeDays(), useDays, oad);
public InProgressVO calculateOrderComplete(BaseOrder baseOrder, OrderRentVehicleDetail orvd, OrderAccountDetail oad, OrderItem orderItem, Integer useDays, Boolean isCancel) {
InProgressVO inProgressVO = inProgressCalculate(baseOrder, orderItem, orvd.getFreeDays(), useDays, oad, isCancel);
//定金 - (额外消费金额 + 违约金)
oad.setDepositAmount(orvd.getDeposit().subtract(inProgressVO.getExtraAmount().add(inProgressVO.getViolateAmount())));
......
......@@ -164,7 +164,7 @@ public class OrderCancelBiz {
log.info("useTimeLag {}", new BigDecimal(useTimeLag + ""));
log.info("divide {}", new BigDecimal((24 * 60 * 60 * 1000)+ ""));
Integer useDays = new BigDecimal(useTimeLag + "").divide(new BigDecimal((24 * 60 * 60 * 1000)+ ""), 0, RoundingMode.UP).intValue();
inProgressVO = orderCalculateBiz.calculateOrderComplete(baseOrder, orvd, oad, orderItem, useDays);
inProgressVO = orderCalculateBiz.calculateOrderComplete(baseOrder, orvd, oad, orderItem, useDays, Boolean.TRUE);
//结合
//退款子流程: 订单基础,退款描述,退款金额
orderAccountBiz.refundSubProcess(baseOrder, "", baseOrder.getRealAmount().subtract(orvd.getDeposit()), oad.getDepositAmount().add(oad.getOrderAmount()), AccountTypeEnum.OUT_ORDER_FUND.getCode(), RefundStatusEnum.ALL.getCode(), oad);
......@@ -183,7 +183,7 @@ public class OrderCancelBiz {
//如果有扣款项,则生成额外的费用明细
if(oad.getDeductions().size() > 0) {
for(OrderAccountDeduction deduction : oad.getDeductions()) {
if(DeductionTypeEnum.VIOLATE_CANCEL.getCode().equals(deduction.getType())) {
if(DeductionTypeEnum.VIOLATE_ADVANCE.getCode().equals(deduction.getType())) {
csv.setViolateAmount(deduction.getAmount());
csv.setViolateDesc(deduction.getName());
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment