Commit a7fbb3d3 authored by 周健威's avatar 周健威

延期还车代码

parent 09616a82
package com.xxfc.platform.order.contant.enumerate;
import java.util.HashMap;
import java.util.Map;
public enum OrderLogEnum {
//账款类型 1--订单常规操作;2--与账相关;3--延期相关
ORDER_ADD (101, "删除订单"),
DELAY_MODIFY (301, "延期增改", "订单号:{}, 延期增改", "旧:{}, 新:{}"),
;
/**
* 编码
*/
private Integer code;
/**
* 类型描述
*/
private String desc;
/**
* 日志内容
*/
private String content;
/**
* 细节
*/
private String detail;
private static Map<Integer,String> codeAndDesc = new HashMap<Integer, String>();
OrderLogEnum(Integer code, String desc){
this.code=code;
this.desc=desc;
}
OrderLogEnum(Integer code, String desc, String content, String detail){
this.code=code;
this.desc=desc;
this.content=content;
this.detail=detail;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public static Boolean exists(Integer code){
return codeAndDesc.containsKey(code);
}
}
\ No newline at end of file
......@@ -88,7 +88,7 @@ public class OrderLog implements Serializable {
*/
@Column(name = "detail")
@ApiModelProperty(value = "详情")
private Integer detail;
private String detail;
}
package com.xxfc.platform.order.entity;
import cn.hutool.json.JSONUtil;
import com.github.wxiaoqi.security.common.util.JsonUtil;
import com.xxfc.platform.order.pojo.order.DelayRentOrderDTO;
import com.xxfc.platform.order.pojo.price.CostDetailExtend;
import com.xxfc.platform.order.pojo.price.DelayAddPriceVO;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
......@@ -353,4 +356,12 @@ public class OrderRentVehicleDetail implements Serializable {
@Column(name = "delay_add_end_time")
@ApiModelProperty(value = "延期结束时间")
private Long delayAddEndTime;
public Integer obtainRealDayNum() {
return this.dayNum + this.delayAddDays;
}
public DelayAddPriceVO obtainDelayAddDetail() {
return JSONUtil.toBean(this.getDelayAddDetail(), DelayAddPriceVO.class);
}
}
......@@ -103,4 +103,26 @@ public class InProgressVO {
* 添加的延期费用
*/
DelayAddPriceVO delayAddPriceVO = new DelayAddPriceVO();
/**
* 返还的原来订单的免费天数
*/
Integer metaOrderBackFreeDays = 0;
/**
* 返还的延期增加的免费天数
*/
Integer delayAddBackFreeDays = 0;
/**
* 原来订单的已使用的金额
*/
BigDecimal metaOrderUsedAmount = BigDecimal.ZERO;
/**
* 延期增加的已使用的金额
*/
BigDecimal delayAddUsedAmount = BigDecimal.ZERO;
}
......@@ -7,6 +7,7 @@ import static com.github.wxiaoqi.security.common.constant.CommonConstants.*;
@Data
public class DelayRentOrderDTO {
Integer operateId;
String no;
Integer needDamageSafe = 0;
Long delayEndTime;
......
......@@ -119,6 +119,23 @@ public class VehicleItemDTO extends OrderItem {
return usedAmount;
}
// public BigDecimal getUsedAmountHasDelay(Integer useDays, List<VMCalendarPriceCostDTO> delayAmountList) {
//
// BigDecimal usedAmount = getUsedAmount(useDays);
// if((useDays - getTotalNum()) > 0) {
// Integer delayAddDays = useDays - getTotalNum();
// if(delayAddDays > delayAmountList.size()) {
// delayAddDays = delayAmountList.size();
// }
//
// for(int i = 0; i < delayAddDays; i++) {
// usedAmount = usedAmount.add(delayAmountList.get(i).getPrice());
// }
// }
//
// return usedAmount;
// }
//由于免费天数可以抵消不是完整的天数,所以处理比较不同
public BigDecimal getFreeAmount(Integer offsetDay) {
List<VMCalendarPriceCostDTO> vmcpds = getVehicleDetail();
......@@ -187,8 +204,12 @@ public class VehicleItemDTO extends OrderItem {
if(ableFreeDays > cycleNum && cycleNum+ dto.getFreeDays() > ableFreeDays) { //本次累加天数 大于 可用免费天数
paramDTO.setFreeNum(ableFreeDays);
//分子
Integer up = (ableFreeDays - cycleNum);
//分母
Integer down = dto.getFreeDays();
//设置当前生效免费天数
dto.setValidFreeDays(up);
//根据百分比计算消费价格
dto.setFreeAndConsumeAmount(dto.getPrice(), dto.getPrice().multiply(
new BigDecimal(up+ "").divide(new BigDecimal(down+ ""), 2, RoundingMode.HALF_UP))
......@@ -198,6 +219,7 @@ public class VehicleItemDTO extends OrderItem {
paramDTO.setFreeNum(paramDTO.getFreeNum()+ dto.getFreeDays());
//直接设置价格
dto.setFreeAndConsumeAmount(dto.getPrice(), dto.getPrice());
dto.setValidFreeDays(dto.getFreeDays());
paramDTO.offsetNum += 1;
}else { //上次累加天数 大于 可用天数
//直接设置价格
......
......@@ -3,6 +3,7 @@ package com.xxfc.platform.order.pojo.price;
import cn.hutool.core.collection.CollUtil;
import com.xxfc.platform.vehicle.pojo.dto.order.VMCalendarPriceCostDTO;
import lombok.Data;
import org.springframework.data.mongodb.core.aggregation.ArrayOperators;
import java.math.BigDecimal;
import java.util.List;
......@@ -32,4 +33,48 @@ public class DelayAddPriceVO {
public void initDelayDamageSafeAmount() {
this.delayDamageSafeAmount = this.damageSafePrice.add(new BigDecimal(delayAddDays+ ""));
}
public Integer residueDelayFreeDays(Integer realResidueDays) {
if(realResidueDays > delayAddDays) {
realResidueDays = delayAddDays;
}
//已使用的延长天数
Integer useDelayDays = delayAddDays - realResidueDays;
//延长的免费天数
Integer residueDelayFreeDays = 0;
List<VMCalendarPriceCostDTO> delayAmountList = getDelayAmountList();
for(int i = useDelayDays; i < delayAddDays; i++) {
residueDelayFreeDays += delayAmountList.get(i).getFreeDays();
}
return residueDelayFreeDays;
}
public BigDecimal delayAddUseAmount(Integer delayAddUseDays) {
BigDecimal delayUsedAmount = BigDecimal.ZERO;
if(delayAddUseDays > getDelayAddDays()) {
delayAddUseDays = getDelayAddDays();
}
for(int i = 0; i < delayAddUseDays; i++) {
delayUsedAmount = delayUsedAmount.add(delayAmountList.get(i).getPrice());
}
return delayUsedAmount;
}
public BigDecimal delayAddFreeAmount(Integer delayAddUseDays) {
BigDecimal delayFreeAmount = BigDecimal.ZERO;
if(delayAddUseDays > getDelayAddDays()) {
delayAddUseDays = getDelayAddDays();
}
for(int i = 0; i < delayAddUseDays; i++) {
delayFreeAmount = delayFreeAmount.add(delayAmountList.get(i).getFreeAmount());
}
return delayFreeAmount;
}
}
package com.xxfc.platform.order.biz;
import cn.hutool.core.util.StrUtil;
import com.xxfc.platform.order.contant.enumerate.OrderLogEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import com.xxfc.platform.order.entity.OrderLog;
......@@ -14,5 +17,22 @@ import com.github.wxiaoqi.security.common.biz.BaseBiz;
* @date 2019-07-23 17:33:06
*/
@Service
@Slf4j
public class OrderLogBiz extends BaseBiz<OrderLogMapper,OrderLog> {
public void logChange(Object newObj, Object oldObj, Integer logUserId, String orderNo, OrderLogEnum orderLogEnum) {
try {
OrderLog orderLog = new OrderLog(){{
// setLogUserType();
setType(orderLogEnum.getCode());
setLogUserId(logUserId);
setLogContent(StrUtil.format(orderLogEnum.getContent(), orderNo));
setDetail(StrUtil.format(orderLogEnum.getDesc(), oldObj, newObj));
}};
updateSelectiveByIdRe(orderLog);
}catch (Exception e) {
log.error(e.getMessage(), e);
}
}
}
\ No newline at end of file
......@@ -149,8 +149,8 @@ public class OrderCancelBiz {
Long timeLag = orvd.getStartTime() - System.currentTimeMillis();
if(timeLag < 0 ) {
Integer useDays = orderCalculateBiz.getIncludeDays(orvd.getStartTime(), System.currentTimeMillis());
if(useDays > orvd.getDayNum()) {
useDays = orvd.getDayNum();
if(useDays > orvd.obtainRealDayNum()) {
useDays = orvd.obtainRealDayNum();
}
inProgressVO = orderCalculateBiz.calculateOrderComplete(baseOrder, orvd, oad, vehicleItemDTO, useDays, Boolean.TRUE);
......
......@@ -89,6 +89,9 @@ public class OrderDelayBiz {
@Autowired
OrderTemplateBiz orderTemplateBiz;
@Autowired
OrderLogBiz orderLogBiz;
@Autowired
UserFeign userFeign;
......@@ -106,6 +109,7 @@ public class OrderDelayBiz {
public void delayRentOrder(OrderPageVO orderPageVO, DelayRentOrderDTO dto) {
OrderRentVehicleDetail orvd = orderPageVO.getOrderRentVehicleDetail();
OrderRentVehicleDetail oldOrvd = BeanUtil.toBean(orvd, OrderRentVehicleDetail.class);
Integer delayAddDays = 0;
Integer delayAddFreeDays = 0;
//分布式事务执行标记
......@@ -126,6 +130,12 @@ public class OrderDelayBiz {
if(delayAddDays > 0) {
//获得延期天数费用
delayAmountList = orderItemBiz.getOverAmountList(DateUtil.date(orvd.getEndTime()), delayAddDays, orvd.getModelId(), orderPageVO.getUserId());
//处理免费天数和免费金额
delayAmountList.parallelStream().forEach( vmcpcd -> {
vmcpcd.setValidFreeDays(vmcpcd.getFreeDays());
vmcpcd.setFreeAmount(vmcpcd.getPrice());
});
delayAddFreeDays = delayAmountList.parallelStream().mapToInt(VMCalendarPriceCostDTO::getFreeDays).sum();
}else {
delayAmountList = CollUtil.newArrayList();
......@@ -198,6 +208,7 @@ public class OrderDelayBiz {
}
orvd.setDelayAddDetail(JSONUtil.toJsonStr(delayAddPriceVO));
orderRentVehicleBiz.updateSelectiveByIdRe(orvd);
orderLogBiz.logChange(orvd, oldOrvd, dto.getOperateId(), orderPageVO.getNo(), OrderLogEnum.DELAY_MODIFY);
}
}
}
\ No newline at end of file
......@@ -23,6 +23,11 @@ public class VMCalendarPriceCostDTO extends VehicleModelCalendarPriceDTO {
*/
private BigDecimal freeAmount = BigDecimal.ZERO;
/**
* 生效的免费天数
*/
private Integer validFreeDays = 0;
public void setFreeAndConsumeAmount(BigDecimal realAmount, BigDecimal freeAmount) {
setFreeAmount(freeAmount);
setConsumeAmount(realAmount.subtract(freeAmount));
......
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