Commit 4fe10d0e authored by 周健威's avatar 周健威

Merge branch 'feature-delay-add' into dev

# Conflicts:
#	ace-modules/ace-admin-api/src/main/java/com/github/wxiaoqi/security/admin/feign/UserFeign.java
#	xx-order/xx-order-server/src/main/java/com/xxfc/platform/order/biz/BaseOrderBiz.java
#	xx-order/xx-order-server/src/main/java/com/xxfc/platform/order/mapper/BaseOrderMapper.java
#	xx-order/xx-order-server/src/main/java/com/xxfc/platform/order/mapper/OrderAccountMapper.java
#	xx-order/xx-order-server/src/main/resources/mapper/BaseOrderMapper.xml
#	xx-vehicle/xx-vehicle-api/src/main/java/com/xxfc/platform/vehicle/feign/VehicleFeign.java
parents 38d67a07 71e58452
...@@ -2,6 +2,9 @@ package com.github.wxiaoqi.security.common.constant; ...@@ -2,6 +2,9 @@ package com.github.wxiaoqi.security.common.constant;
import cn.hutool.core.date.format.FastDateFormat; import cn.hutool.core.date.format.FastDateFormat;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
/** /**
...@@ -50,4 +53,8 @@ public class CommonConstants { ...@@ -50,4 +53,8 @@ public class CommonConstants {
public static final org.joda.time.format.DateTimeFormatter YMR_SLASH_FORMATTER_JODA = org.joda.time.format.DateTimeFormat.forPattern(YMR_SLASH); public static final org.joda.time.format.DateTimeFormatter YMR_SLASH_FORMATTER_JODA = org.joda.time.format.DateTimeFormat.forPattern(YMR_SLASH);
public static final FastDateFormat HOUR_MINUTE_FORMATTE_HUTOOL = FastDateFormat.getInstance(HOUR_MINUTE); public static final FastDateFormat HOUR_MINUTE_FORMATTE_HUTOOL = FastDateFormat.getInstance(HOUR_MINUTE);
public static String stampTo8Zone(DateTimeFormatter dateTimeFormatter, Long timestamp) {
return dateTimeFormatter.format(LocalDateTime.ofInstant(Instant.ofEpochMilli(timestamp), ZoneOffset.ofHours(8)));
}
} }
...@@ -178,6 +178,7 @@ public interface UserFeign { ...@@ -178,6 +178,7 @@ public interface UserFeign {
List<Integer> getUserIdByParentCompany(@RequestParam("parentCompanyId") List<Integer> parentCompanyId); List<Integer> getUserIdByParentCompany(@RequestParam("parentCompanyId") List<Integer> parentCompanyId);
@GetMapping("/app/user/list_staff") @GetMapping("/app/user/list_staff")
List<UserStaffBo> findAllStaffs(); List<UserStaffBo> findAllStaffs();
......
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 { ...@@ -88,7 +88,7 @@ public class OrderLog implements Serializable {
*/ */
@Column(name = "detail") @Column(name = "detail")
@ApiModelProperty(value = "详情") @ApiModelProperty(value = "详情")
private Integer detail; private String detail;
} }
package com.xxfc.platform.order.entity; package com.xxfc.platform.order.entity;
import cn.hutool.json.JSONUtil;
import com.github.wxiaoqi.security.common.util.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.CostDetailExtend;
import com.xxfc.platform.order.pojo.price.DelayAddPriceVO;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
...@@ -333,4 +336,32 @@ public class OrderRentVehicleDetail implements Serializable { ...@@ -333,4 +336,32 @@ public class OrderRentVehicleDetail implements Serializable {
public void handelCostDetailExtend(CostDetailExtend costDetailExtend) { public void handelCostDetailExtend(CostDetailExtend costDetailExtend) {
this.costDetailExtend = JsonUtil.objectToJson(((CostDetailExtend)costDetailExtend)); this.costDetailExtend = JsonUtil.objectToJson(((CostDetailExtend)costDetailExtend));
} }
@Column(name = "delay_add_free_days")
@ApiModelProperty(value = "延期补充的免费天数")
private Integer delayAddFreeDays;
@Column(name = "delay_add_days")
@ApiModelProperty(value = "延期增加的天数")
private Integer delayAddDays;
@Column(name = "delay_add_detail")
@ApiModelProperty(value = "增加延期还车费用(计算)明细")
private String delayAddDetail;
@Column(name = "delay_add_damage_safe")
@ApiModelProperty(value = "延期增加天数是否购买车损免赔")
private Integer delayAddDamageSafe;
@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 { ...@@ -103,4 +103,26 @@ public class InProgressVO {
* 添加的延期费用 * 添加的延期费用
*/ */
DelayAddPriceVO delayAddPriceVO = new DelayAddPriceVO(); DelayAddPriceVO delayAddPriceVO = new DelayAddPriceVO();
/**
* 返还的原来订单的免费天数
*/
Integer metaOrderBackFreeDays = 0;
/**
* 返还的延期增加的免费天数
*/
Integer delayAddBackFreeDays = 0;
/**
* 原来订单的已使用的金额
*/
BigDecimal metaOrderUsedAmount = BigDecimal.ZERO;
/**
* 延期增加的已使用的金额
*/
BigDecimal delayAddUsedAmount = BigDecimal.ZERO;
} }
package com.xxfc.platform.order.pojo.order;
import com.github.wxiaoqi.security.common.constant.CommonConstants;
import lombok.Data;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.*;
@Data
public class DelayRentOrderDTO {
Integer operateId;
String no;
Integer needDamageSafe = 0;
Long delayEndTime;
Long endTime;
String bookEndDate;
String bookEndDateTime;
Long startTime;
String bookStartDate;
String bookStartDateTime;
public void setStartTime(Long startTime) {
this.startTime = startTime;
this.bookStartDate = stampTo8Zone(YMR_SLASH_FORMATTER, startTime);
this.bookStartDateTime = stampTo8Zone(DATE_TIME_LINE_FORMATTER, startTime);
}
public void setEndTime(Long endTime) {
this.endTime = endTime;
this.bookEndDate = stampTo8Zone(YMR_SLASH_FORMATTER, endTime);
this.bookEndDateTime = stampTo8Zone(DATE_TIME_LINE_FORMATTER, endTime);
}
}
\ No newline at end of file
...@@ -119,6 +119,23 @@ public class VehicleItemDTO extends OrderItem { ...@@ -119,6 +119,23 @@ public class VehicleItemDTO extends OrderItem {
return usedAmount; 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) { public BigDecimal getFreeAmount(Integer offsetDay) {
List<VMCalendarPriceCostDTO> vmcpds = getVehicleDetail(); List<VMCalendarPriceCostDTO> vmcpds = getVehicleDetail();
...@@ -187,8 +204,12 @@ public class VehicleItemDTO extends OrderItem { ...@@ -187,8 +204,12 @@ public class VehicleItemDTO extends OrderItem {
if(ableFreeDays > cycleNum && cycleNum+ dto.getFreeDays() > ableFreeDays) { //本次累加天数 大于 可用免费天数 if(ableFreeDays > cycleNum && cycleNum+ dto.getFreeDays() > ableFreeDays) { //本次累加天数 大于 可用免费天数
paramDTO.setFreeNum(ableFreeDays); paramDTO.setFreeNum(ableFreeDays);
//分子
Integer up = (ableFreeDays - cycleNum); Integer up = (ableFreeDays - cycleNum);
//分母
Integer down = dto.getFreeDays(); Integer down = dto.getFreeDays();
//设置当前生效免费天数
dto.setValidFreeDays(up);
//根据百分比计算消费价格 //根据百分比计算消费价格
dto.setFreeAndConsumeAmount(dto.getPrice(), dto.getPrice().multiply( dto.setFreeAndConsumeAmount(dto.getPrice(), dto.getPrice().multiply(
new BigDecimal(up+ "").divide(new BigDecimal(down+ ""), 2, RoundingMode.HALF_UP)) new BigDecimal(up+ "").divide(new BigDecimal(down+ ""), 2, RoundingMode.HALF_UP))
...@@ -198,6 +219,7 @@ public class VehicleItemDTO extends OrderItem { ...@@ -198,6 +219,7 @@ public class VehicleItemDTO extends OrderItem {
paramDTO.setFreeNum(paramDTO.getFreeNum()+ dto.getFreeDays()); paramDTO.setFreeNum(paramDTO.getFreeNum()+ dto.getFreeDays());
//直接设置价格 //直接设置价格
dto.setFreeAndConsumeAmount(dto.getPrice(), dto.getPrice()); dto.setFreeAndConsumeAmount(dto.getPrice(), dto.getPrice());
dto.setValidFreeDays(dto.getFreeDays());
paramDTO.offsetNum += 1; paramDTO.offsetNum += 1;
}else { //上次累加天数 大于 可用天数 }else { //上次累加天数 大于 可用天数
//直接设置价格 //直接设置价格
......
...@@ -3,6 +3,7 @@ package com.xxfc.platform.order.pojo.price; ...@@ -3,6 +3,7 @@ package com.xxfc.platform.order.pojo.price;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import com.xxfc.platform.vehicle.pojo.dto.order.VMCalendarPriceCostDTO; import com.xxfc.platform.vehicle.pojo.dto.order.VMCalendarPriceCostDTO;
import lombok.Data; import lombok.Data;
import org.springframework.data.mongodb.core.aggregation.ArrayOperators;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;
...@@ -28,4 +29,52 @@ public class DelayAddPriceVO { ...@@ -28,4 +29,52 @@ public class DelayAddPriceVO {
* 使用(消耗)详情列表 * 使用(消耗)详情列表
*/ */
List<VMCalendarPriceCostDTO> delayAmountList = CollUtil.newArrayList(); List<VMCalendarPriceCostDTO> delayAmountList = CollUtil.newArrayList();
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;
}
} }
...@@ -452,6 +452,7 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements ...@@ -452,6 +452,7 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements
/** /**
* 初始化违约金实体 * 初始化违约金实体
*
* @param dedDetailDTO * @param dedDetailDTO
* @param type * @param type
* @param cost * @param cost
...@@ -468,6 +469,9 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements ...@@ -468,6 +469,9 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements
} else if (type == OrderViolateEnum.CHANGE.getCode()) { } else if (type == OrderViolateEnum.CHANGE.getCode()) {
dedDetailDTO.setType(OrderViolateEnum.CHANGE.getCode()); dedDetailDTO.setType(OrderViolateEnum.CHANGE.getCode());
detailName = "更换还车公司"; detailName = "更换还车公司";
} else if (type == OrderViolateEnum.DELAY_VEHICLE.getCode()) {
dedDetailDTO.setType(1);
detailName = "延长还车";
} }
//900元+违约金(¥900x2天=)1800元 //900元+违约金(¥900x2天=)1800元
dedDetailDTO.setDeductions(stringBuilder.toString()); dedDetailDTO.setDeductions(stringBuilder.toString());
...@@ -568,6 +572,7 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements ...@@ -568,6 +572,7 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements
/** /**
* 修改订单还车公司 * 修改订单还车公司
*
* @param orderRentVehicleDetail * @param orderRentVehicleDetail
* @return * @return
*/ */
...@@ -846,7 +851,7 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements ...@@ -846,7 +851,7 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements
private void sendQueue(OrderMQDTO orderMQDTO, Integer sign) { private void sendQueue(OrderMQDTO orderMQDTO, Integer sign) {
try { try {
orderMQDTO.setSign(sign); orderMQDTO.setSign(sign);
SendMsgDTO sendMsgDTO = new SendMsgDTO(){{ SendMsgDTO sendMsgDTO = new SendMsgDTO() {{
setExchange(ORDER_TOPIC); setExchange(ORDER_TOPIC);
}}; }};
sendMsgDTO.setJson(JSONUtil.toJsonStr(orderMQDTO)); sendMsgDTO.setJson(JSONUtil.toJsonStr(orderMQDTO));
...@@ -883,6 +888,13 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements ...@@ -883,6 +888,13 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements
return query; return query;
} }
public Query initBgQuery(String no) {
Query query = initQuery(no);
query.put("crtUser", null);
query.put("userId", null);
return query;
}
@Override @Override
public UserFeign getUserFeign() { public UserFeign getUserFeign() {
return userFeign; return userFeign;
...@@ -898,6 +910,7 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements ...@@ -898,6 +910,7 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements
/** /**
* 获取退还优惠卷 * 获取退还优惠卷
*
* @param orderId * @param orderId
*/ */
public List<Coupon> getReturnCouponByOrderId(Integer orderId) { public List<Coupon> getReturnCouponByOrderId(Integer orderId) {
...@@ -924,6 +937,10 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements ...@@ -924,6 +937,10 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements
return mapper.selectAllRentVehicleOrder(paramMap); return mapper.selectAllRentVehicleOrder(paramMap);
} }
public List<OrderPageVO> selectAllCountOrder(Map<String, Object> paramMap) {
return mapper.selectAllCountOrder(paramMap);
}
public List<Achievement> entryStatisticalData(QueryCriteria queryCriteria) { public List<Achievement> entryStatisticalData(QueryCriteria queryCriteria) {
return mapper.selectTotalStatistical(queryCriteria); return mapper.selectTotalStatistical(queryCriteria);
...@@ -938,8 +955,4 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements ...@@ -938,8 +955,4 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements
} }
public List<OrderPageVO> selectAllCountOrder(Map<String, Object> paramMap) {
return mapper.selectAllCountOrder(paramMap);
}
} }
\ No newline at end of file
package com.xxfc.platform.order.biz; 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 org.springframework.stereotype.Service;
import com.xxfc.platform.order.entity.OrderLog; import com.xxfc.platform.order.entity.OrderLog;
...@@ -14,5 +17,22 @@ import com.github.wxiaoqi.security.common.biz.BaseBiz; ...@@ -14,5 +17,22 @@ import com.github.wxiaoqi.security.common.biz.BaseBiz;
* @date 2019-07-23 17:33:06 * @date 2019-07-23 17:33:06
*/ */
@Service @Service
@Slf4j
public class OrderLogBiz extends BaseBiz<OrderLogMapper,OrderLog> { 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
...@@ -12,6 +12,7 @@ import com.xxfc.platform.app.feign.ConfigFeign; ...@@ -12,6 +12,7 @@ import com.xxfc.platform.app.feign.ConfigFeign;
import com.xxfc.platform.order.biz.BaseOrderBiz; import com.xxfc.platform.order.biz.BaseOrderBiz;
import com.xxfc.platform.order.biz.OrderAccountBiz; import com.xxfc.platform.order.biz.OrderAccountBiz;
import com.xxfc.platform.order.biz.OrderItemBiz; import com.xxfc.platform.order.biz.OrderItemBiz;
import com.xxfc.platform.order.biz.OrderRentVehicleBiz;
import com.xxfc.platform.order.contant.enumerate.DeductionTypeEnum; import com.xxfc.platform.order.contant.enumerate.DeductionTypeEnum;
import com.xxfc.platform.order.contant.enumerate.ItemTypeEnum; import com.xxfc.platform.order.contant.enumerate.ItemTypeEnum;
import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum; import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum;
...@@ -80,7 +81,10 @@ public class OrderCalculateBiz { ...@@ -80,7 +81,10 @@ public class OrderCalculateBiz {
@Autowired @Autowired
BaseOrderBiz baseOrderBiz; BaseOrderBiz baseOrderBiz;
public InProgressVO inProgressCalculate(BaseOrder baseOrder, VehicleItemDTO vehicleItemDTO, Integer useDays, OrderAccountDetail oad, Boolean isCancel) { @Autowired
OrderRentVehicleBiz orderRentVehicleBiz;
public InProgressVO inProgressCalculate(BaseOrder baseOrder, VehicleItemDTO vehicleItemDTO, OrderRentVehicleDetail orvd, Integer useDays, OrderAccountDetail oad, Boolean isCancel) {
BigDecimal refundAmount = BigDecimal.ZERO; BigDecimal refundAmount = BigDecimal.ZERO;
BigDecimal consumeAmount = BigDecimal.ZERO; BigDecimal consumeAmount = BigDecimal.ZERO;
BigDecimal topViolateAmount = BigDecimal.ZERO; BigDecimal topViolateAmount = BigDecimal.ZERO;
...@@ -103,7 +107,14 @@ public class OrderCalculateBiz { ...@@ -103,7 +107,14 @@ public class OrderCalculateBiz {
InProgressVO inProgressVO = new InProgressVO(); InProgressVO inProgressVO = new InProgressVO();
inProgressVO.setUsedDays(useDays); inProgressVO.setUsedDays(useDays);
inProgressVO.setUsedAmount(vehicleItemDTO.getUsedAmount(useDays));
inProgressVO.setMetaOrderUsedAmount(vehicleItemDTO.getUsedAmount(useDays));
//查看是否有增加的延期天数-->添加分别原订单和延期的使用金额
if(orvd.getDelayAddDays() > 0 && useDays > vehicleItemDTO.getTotalNum()) {
inProgressVO.setDelayAddUsedAmount(orvd.obtainDelayAddDetail().delayAddUseAmount(useDays - vehicleItemDTO.getTotalNum()));
}
inProgressVO.setUsedAmount(inProgressVO.getMetaOrderUsedAmount().add(inProgressVO.getDelayAddUsedAmount()));
//使用的天数对应的免费天数 //使用的天数对应的免费天数
Integer useDaysMapFreeDays = vehicleItemDTO.mapFreeDays(useDays); Integer useDaysMapFreeDays = vehicleItemDTO.mapFreeDays(useDays);
...@@ -113,10 +124,11 @@ public class OrderCalculateBiz { ...@@ -113,10 +124,11 @@ public class OrderCalculateBiz {
//待返还的优惠券编号 //待返还的优惠券编号
List<String> backCouponNos = Lists.newArrayList(); List<String> backCouponNos = Lists.newArrayList();
//剩余天数 //剩余天数
Integer residueDays = vehicleItemDTO.getTotalNum() - useDays; Integer realResidueDays = orvd.obtainRealDayNum() - useDays;
//过了出发时间取消订单 ,优先使用免费天数 //过了出发时间取消订单 ,优先使用免费天数
if(backFreeDays <= 0) { if(backFreeDays <= 0) {
//设置免费天数 //设置免费天数
inProgressVO.setUsedfreeDays(freeDays); inProgressVO.setUsedfreeDays(freeDays);
inProgressVO.setUsedFreeDaysAmount(vehicleItemDTO.getFreeAmount(null)); inProgressVO.setUsedFreeDaysAmount(vehicleItemDTO.getFreeAmount(null));
...@@ -169,20 +181,36 @@ public class OrderCalculateBiz { ...@@ -169,20 +181,36 @@ public class OrderCalculateBiz {
inProgressVO.setConsumeAmount(consumeAmount); inProgressVO.setConsumeAmount(consumeAmount);
refundAmount = handleConsumeAmount(oad, refundAmount, consumeAmount, goodsRealAmount, inProgressVO); refundAmount = handleConsumeAmount(oad, refundAmount, consumeAmount, goodsRealAmount, inProgressVO);
//查看是否有增加的延期天数-->添加分别原订单和延期的返回天数
if(orvd.getDelayAddDays() > 0 && realResidueDays > 0) {
inProgressVO.setDelayAddBackFreeDays(orvd.obtainDelayAddDetail().residueDelayFreeDays(realResidueDays));
inProgressVO.setBackFreeDays(inProgressVO.getDelayAddBackFreeDays());
}
//查看是否有增加的延期天数-->添加延期的已使用免费天数 和 已使用免费天数金额
if(orvd.getDelayAddDays() > 0 && useDays > vehicleItemDTO.getTotalNum()) {
inProgressVO.setUsedfreeDays(inProgressVO.getUsedfreeDays() + (orvd.getDelayAddFreeDays() - inProgressVO.getDelayAddBackFreeDays()));
inProgressVO.setUsedFreeDaysAmount(inProgressVO.getUsedFreeDaysAmount().add(orvd.obtainDelayAddDetail().delayAddFreeAmount(useDays - vehicleItemDTO.getTotalNum())));
}
}else { }else {
//设置免费天数 //设置免费天数
inProgressVO.setUsedfreeDays(useDaysMapFreeDays); inProgressVO.setUsedfreeDays(useDaysMapFreeDays);
inProgressVO.setUsedFreeDaysAmount(vehicleItemDTO.getFreeAmount(useDays)); inProgressVO.setUsedFreeDaysAmount(vehicleItemDTO.getFreeAmount(useDays));
//返回剩余免费天数,返回优惠券,订单款
//修改bug,不需要提前加, 已在handleConsumeAmount方法中添加
// refundAmount = refundAmount.add(goodsRealAmount);
// inProgressVO.setBackFreeDays(backFreeDays);
//融入日期价格 //融入日期价格
Integer trueBackFreeDays = backFreeDays; Integer trueBackFreeDays = backFreeDays;
inProgressVO.setBackFreeDays(trueBackFreeDays); inProgressVO.setMetaOrderBackFreeDays(trueBackFreeDays);
//查看是否有增加的延期天数-->添加分别原订单和延期的返回天数
if(orvd.getDelayAddDays() > 0) {
inProgressVO.setDelayAddBackFreeDays(orvd.getDelayAddFreeDays());
}
inProgressVO.setBackFreeDays(inProgressVO.getMetaOrderBackFreeDays()+ inProgressVO.getDelayAddBackFreeDays());
//查看是否有增加的延期天数-->添加延期的已使用免费天数 和 已使用免费天数金额
//不需要
//返回优惠券 //返回优惠券
if(StrUtil.isNotBlank(baseOrder.getCouponTickerNos())) { if(StrUtil.isNotBlank(baseOrder.getCouponTickerNos())) {
...@@ -200,29 +228,37 @@ public class OrderCalculateBiz { ...@@ -200,29 +228,37 @@ public class OrderCalculateBiz {
inProgressVO.setRefundOrderAmount(refundAmount); inProgressVO.setRefundOrderAmount(refundAmount);
inProgressVO.setBackCoupons(backCouponNos); inProgressVO.setBackCoupons(backCouponNos);
List<VMCalendarPriceCostDTO> realVmcpds = Convert.toList(VMCalendarPriceCostDTO.class, vmcpds);
//查看是否有增加的延期天数-->添加延期的费用列表
if(orvd.getDelayAddDays() > 0) {
realVmcpds.addAll(orvd.obtainDelayAddDetail().getDelayAmountList());
}
//计算违约金 //计算违约金
//residueDays * 身份价格 //residueDays * 身份价格
if(residueDays > 0) { if(realResidueDays > 0) {
//设置消耗费用列表 //设置消耗费用列表
for(int i = 0; i < useDays; i++) { for(int i = 0; i < useDays; i++) {
useAmountList.add(BeanUtil.toBean(vmcpds.get(i), VMCalendarPriceCostDTO.class)); useAmountList.add(BeanUtil.toBean(realVmcpds.get(i), VMCalendarPriceCostDTO.class));
} }
//"{}元/天 x{}天" //"{}元/天 x{}天"
BigDecimal residueAmount = BigDecimal.ZERO; BigDecimal residueAmount = BigDecimal.ZERO;
for(int i = useDays; i < vehicleItemDTO.getTotalNum(); i++) { for(int i = useDays; i < vehicleItemDTO.getTotalNum(); i++) {
residueAmount = residueAmount.add(vmcpds.get(i).getPrice()); residueAmount = residueAmount.add(realVmcpds.get(i).getPrice());
inProgressVO.getViolateAmountList().add(vmcpds.get(i)); inProgressVO.getViolateAmountList().add(realVmcpds.get(i));
} }
String violateDesc = StrUtil.format("{}元", residueAmount.toString()); String violateDesc = StrUtil.format("{}元", residueAmount.toString());
if(residueDays >= 2) { if(realResidueDays >= 2) {
residueDays = 2; realResidueDays = 2;
residueAmount = BigDecimal.ZERO; residueAmount = BigDecimal.ZERO;
inProgressVO.setViolateAmountList(CollUtil.newArrayList()); inProgressVO.setViolateAmountList(CollUtil.newArrayList());
for(int i = useDays; i < (useDays + residueDays); i++) { for(int i = useDays; i < (useDays + realResidueDays); i++) {
residueAmount = residueAmount.add(vmcpds.get(i).getPrice()); residueAmount = residueAmount.add(realVmcpds.get(i).getPrice());
inProgressVO.getViolateAmountList().add(vmcpds.get(i)); inProgressVO.getViolateAmountList().add(realVmcpds.get(i));
} }
violateDesc += StrUtil.format("(封顶{}元)", residueAmount); violateDesc += StrUtil.format("(封顶{}元)", residueAmount);
} }
...@@ -231,18 +267,18 @@ public class OrderCalculateBiz { ...@@ -231,18 +267,18 @@ public class OrderCalculateBiz {
inProgressVO.setViolateDesc(" 提前还车违约金:"+ violateDesc); inProgressVO.setViolateDesc(" 提前还车违约金:"+ violateDesc);
OrderAccountDeduction violateDeduction = orderAccountBiz.initDeduction(inProgressVO.getViolateAmount(), violateDesc, DeductionTypeEnum.VIOLATE_ADVANCE, OrderAccountDeduction.ORIGIN_DEPOSIT); OrderAccountDeduction violateDeduction = orderAccountBiz.initDeduction(inProgressVO.getViolateAmount(), violateDesc, DeductionTypeEnum.VIOLATE_ADVANCE, OrderAccountDeduction.ORIGIN_DEPOSIT);
oad.getDeductions().add(violateDeduction); oad.getDeductions().add(violateDeduction);
}else if(residueDays < 0 && !isCancel){ }else if(realResidueDays < 0 && !isCancel){
//isCancel 表示是否为取消,取消则不计算延期还车(因为没有出车) //isCancel 表示是否为取消,取消则不计算延期还车(因为没有出车)
//设置消耗费用列表 //设置消耗费用列表
useAmountList.addAll(Convert.toList(VMCalendarPriceCostDTO.class, vmcpds)); useAmountList.addAll(Convert.toList(VMCalendarPriceCostDTO.class, realVmcpds));
//如果订单 出发中 或者 已完成 或者定损中 //如果订单 出发中 或者 已完成 或者定损中
if(OrderStatusEnum.ORDER_WAIT.getCode().equals(baseOrder.getStatus()) || if(OrderStatusEnum.ORDER_WAIT.getCode().equals(baseOrder.getStatus()) ||
OrderStatusEnum.ORDER_FINISH.getCode().equals(baseOrder.getStatus()) || OrderStatusEnum.ORDER_FINISH.getCode().equals(baseOrder.getStatus()) ||
OrderStatusEnum.ORDER_FIXED_LOSS.getCode().equals(baseOrder.getStatus())) { OrderStatusEnum.ORDER_FIXED_LOSS.getCode().equals(baseOrder.getStatus())) {
Integer overDays = 0 - residueDays; Integer overDays = 0 - realResidueDays;
String violateDesc = StrUtil.format(" 延迟{}天", overDays); String violateDesc = StrUtil.format(" 延迟{}天", overDays);
List<VMCalendarPriceCostDTO> overAmountList = orderItemBiz.getOverAmountList(vmcpds.get(vmcpds.size() - 1).getDate(), overDays, vehicleItemDTO.getGoodId(), baseOrder.getUserId()); List<VMCalendarPriceCostDTO> overAmountList = orderItemBiz.getOverAmountList(realVmcpds.get(realVmcpds.size() - 1).getDate(), overDays, vehicleItemDTO.getGoodId(), baseOrder.getUserId());
BigDecimal overAmount = overAmountList.parallelStream() BigDecimal overAmount = overAmountList.parallelStream()
.map(VMCalendarPriceCostDTO::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add).multiply(new BigDecimal(2+ "")); .map(VMCalendarPriceCostDTO::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add).multiply(new BigDecimal(2+ ""));
...@@ -285,11 +321,15 @@ public class OrderCalculateBiz { ...@@ -285,11 +321,15 @@ public class OrderCalculateBiz {
setType(ItemTypeEnum.VEHICLE_MODEL.getCode()); setType(ItemTypeEnum.VEHICLE_MODEL.getCode());
setOrderId(baseOrder.getId()); setOrderId(baseOrder.getId());
}}), VehicleItemDTO.class); }}), VehicleItemDTO.class);
return inProgressCalculate(baseOrder, vehicleItemDTO, useDays, new OrderAccountDetail(), Boolean.FALSE);
OrderRentVehicleDetail orvd = orderRentVehicleBiz.selectOne(new OrderRentVehicleDetail() {{
setOrderId(baseOrder.getId());
}});
return inProgressCalculate(baseOrder, vehicleItemDTO, orvd, useDays, new OrderAccountDetail(), Boolean.FALSE);
} }
public InProgressVO calculateOrderComplete(BaseOrder baseOrder, OrderRentVehicleDetail orvd, OrderAccountDetail oad, VehicleItemDTO vehicleItemDTO, Integer useDays, Boolean isCancel) { public InProgressVO calculateOrderComplete(BaseOrder baseOrder, OrderRentVehicleDetail orvd, OrderAccountDetail oad, VehicleItemDTO vehicleItemDTO, Integer useDays, Boolean isCancel) {
InProgressVO inProgressVO = inProgressCalculate(baseOrder, vehicleItemDTO, useDays, oad, isCancel); InProgressVO inProgressVO = inProgressCalculate(baseOrder, vehicleItemDTO, orvd, useDays, oad, isCancel);
//定金 - (额外消费金额 + 违约金) //定金 - (额外消费金额 + 违约金)
oad.setDepositAmount(orvd.getDeposit().subtract(inProgressVO.getExtraAmount().add(inProgressVO.getViolateAmount()))); oad.setDepositAmount(orvd.getDeposit().subtract(inProgressVO.getExtraAmount().add(inProgressVO.getViolateAmount())));
...@@ -361,7 +401,7 @@ public class OrderCalculateBiz { ...@@ -361,7 +401,7 @@ public class OrderCalculateBiz {
if(timeLag < 0 ) { if(timeLag < 0 ) {
Integer useDays = getIncludeDays(orderPageVO.getOrderRentVehicleDetail().getStartTime(), DateTime.now().getMillis()); Integer useDays = getIncludeDays(orderPageVO.getOrderRentVehicleDetail().getStartTime(), DateTime.now().getMillis());
OrderAccountDetail oad = new OrderAccountDetail(); OrderAccountDetail oad = new OrderAccountDetail();
inProgressVO = inProgressCalculate(orderPageVO, vehicleItemDTO, useDays, oad, Boolean.FALSE); inProgressVO = inProgressCalculate(orderPageVO, vehicleItemDTO, orderPageVO.getOrderRentVehicleDetail(), useDays, oad, Boolean.FALSE);
topAmount = vehicleItemDTO.getTopAmount(useDays); topAmount = vehicleItemDTO.getTopAmount(useDays);
totalDeductAmount = oad.realTotalDeduct(); totalDeductAmount = oad.realTotalDeduct();
......
...@@ -148,8 +148,8 @@ public class OrderCancelBiz { ...@@ -148,8 +148,8 @@ public class OrderCancelBiz {
Long timeLag = orvd.getStartTime() - System.currentTimeMillis(); Long timeLag = orvd.getStartTime() - System.currentTimeMillis();
if(timeLag < 0 ) { if(timeLag < 0 ) {
Integer useDays = orderCalculateBiz.getIncludeDays(orvd.getStartTime(), System.currentTimeMillis()); Integer useDays = orderCalculateBiz.getIncludeDays(orvd.getStartTime(), System.currentTimeMillis());
if(useDays > orvd.getDayNum()) { if(useDays > orvd.obtainRealDayNum()) {
useDays = orvd.getDayNum(); useDays = orvd.obtainRealDayNum();
} }
inProgressVO = orderCalculateBiz.calculateOrderComplete(baseOrder, orvd, oad, vehicleItemDTO, useDays, Boolean.TRUE); inProgressVO = orderCalculateBiz.calculateOrderComplete(baseOrder, orvd, oad, vehicleItemDTO, useDays, Boolean.TRUE);
......
package com.xxfc.platform.order.biz.inner;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.xxfc.platform.activity.feign.ActivityFeign;
import com.xxfc.platform.order.biz.*;
import com.xxfc.platform.order.contant.enumerate.*;
import com.xxfc.platform.order.entity.*;
import com.xxfc.platform.order.pojo.account.OrderAccountDeduction;
import com.xxfc.platform.order.pojo.account.OrderAccountDetail;
import com.xxfc.platform.order.pojo.calculate.InProgressVO;
import com.xxfc.platform.order.pojo.mq.OrderMQDTO;
import com.xxfc.platform.order.pojo.order.DelayRentOrderDTO;
import com.xxfc.platform.order.pojo.order.OrderPageVO;
import com.xxfc.platform.order.pojo.order.VehicleItemDTO;
import com.xxfc.platform.order.pojo.price.CancelNoStartVO;
import com.xxfc.platform.order.pojo.price.CancelStartedVO;
import com.xxfc.platform.order.pojo.price.CostDetailExtend;
import com.xxfc.platform.order.pojo.price.DelayAddPriceVO;
import com.xxfc.platform.tour.feign.TourFeign;
import com.xxfc.platform.universal.constant.DictionaryKey;
import com.xxfc.platform.universal.entity.Dictionary;
import com.xxfc.platform.universal.feign.ThirdFeign;
import com.xxfc.platform.vehicle.common.RestResponse;
import com.xxfc.platform.vehicle.feign.VehicleFeign;
import com.xxfc.platform.vehicle.pojo.BookVehicleVO;
import com.xxfc.platform.vehicle.pojo.dto.order.VMCalendarPriceCostDTO;
import io.swagger.annotations.ApiModelProperty;
import lombok.extern.slf4j.Slf4j;
import org.mockito.internal.util.collections.Sets;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.persistence.Column;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_TRUE;
import static com.xxfc.platform.universal.constant.DictionaryKey.*;
/**
* 订单退款记录表
*
* @author zjw
* @email nishijjo@qq.com
* @date 2019-06-18 11:08:09
*/
@Slf4j
@Service
public class OrderDelayBiz {
@Autowired
BaseOrderBiz baseOrderBiz;
@Autowired
OrderItemBiz orderItemBiz;
@Autowired
OrderMemberDetailBiz orderMemberDetailBiz;
@Autowired
OrderTourDetailBiz orderTourDetailBiz;
@Autowired
OrderRentVehicleBiz orderRentVehicleBiz;
@Autowired
OrderMsgBiz orderMsgBiz;
@Autowired
OrderCalculateBiz orderCalculateBiz;
@Autowired
OrderAccountBiz orderAccountBiz;
@Autowired
OrderTemplateBiz orderTemplateBiz;
@Autowired
OrderLogBiz orderLogBiz;
@Autowired
UserFeign userFeign;
@Autowired
VehicleFeign vehicleFeign;
@Autowired
TourFeign tourFeign;
@Autowired
ThirdFeign thirdFeign;
@Autowired
ActivityFeign activityFeign;
public void delayRentOrder(OrderPageVO orderPageVO, DelayRentOrderDTO dto) {
OrderRentVehicleDetail orvd = orderPageVO.getOrderRentVehicleDetail();
OrderRentVehicleDetail oldOrvd = BeanUtil.toBean(orvd, OrderRentVehicleDetail.class);
Integer delayAddDays = 0;
Integer delayAddFreeDays = 0;
//分布式事务执行标记
Integer cloudTransact = 0;
//计算delay多少天
delayAddDays = orderCalculateBiz.getIncludeDays(orvd.getStartTime(), dto.getDelayEndTime());
delayAddDays = delayAddDays - orderPageVO.getOrderRentVehicleDetail().getDayNum();
//判断
if(delayAddDays < 0) {
throw new BaseException(ResultCode.PARAM_ILLEGAL_CODE, Sets.newSet("延期时间不对"));
}else {
//变化的延期免费天数
Integer changeDelayFreeDays = 0;
List<VMCalendarPriceCostDTO> delayAmountList;
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();
delayAddFreeDays = 0;
}
//初始化变化的延期免费天数为延期天数
changeDelayFreeDays = delayAddFreeDays;
//判断是否已经设置了延期, 修改变化的延期免费天数
if(orvd.getDelayAddDays() > 0) {
//extendDelayDays = delayAddDays - orvd.getDelayAddDays();
changeDelayFreeDays = delayAddFreeDays - orvd.getDelayAddFreeDays();
}
//根据 changeDelayFreeDays 判断 是否拥有那么足够的天数
if(changeDelayFreeDays > 0) {
AppUserDTO appUserDTO = userFeign.userDetailById(orderPageVO.getUserId()).getData();
if(appUserDTO.getRentFreeDays() < changeDelayFreeDays) {
throw new BaseException(ResultCode.FAILED_CODE, Sets.newSet("免费天数不够"));
}
}
//触发调用修改预约
dto.setEndTime(dto.getDelayEndTime());
dto.setStartTime(orderPageVO.getOrderRentVehicleDetail().getStartTime());
//根据订单号获取订单
RestResponse restResponse = vehicleFeign.updateOrderBookRecord(new BookVehicleVO() {{
setVehicleId(orderPageVO.getOrderRentVehicleDetail().getVehicleId());
setBookStartDate(dto.getBookStartDate());
setBookEndDate(dto.getBookEndDate());
setBookStartDateTime(dto.getBookStartDateTime());
setBookEndDateTime(dto.getBookEndDateTime());
}});
if( !SYS_TRUE.equals(restResponse.getCode())) {
throw new BaseException(ResultCode.FAILED_CODE, Sets.newSet("延期失败"));
}
cloudTransact = 1;
//扣减免费天数
if(changeDelayFreeDays > 0) {
int result = userFeign.memberDays(orderPageVO.getUserId(), changeDelayFreeDays, UserFeign.MEMBER_DAYS_LOCK);
if (result < 0) {
throw new BaseException(ResultCode.FAILED_CODE);
}
}else if(changeDelayFreeDays < 0){
int result = userFeign.memberDays(orderPageVO.getUserId(), 0 - changeDelayFreeDays, UserFeign.MEMBER_DAYS_WITHDRAW);
if (result < 0) {
throw new BaseException(ResultCode.FAILED_CODE);
}
}
cloudTransact = 2;
//更新OrderRentVehicleDetail
Map<String, Dictionary> dictionaryMap = thirdFeign.dictionaryGetAll4Map().getData();
orvd.setDelayAddDamageSafe(dto.getNeedDamageSafe());
orvd.setDelayAddDays(delayAddDays);
orvd.setDelayAddFreeDays(delayAddFreeDays);
orvd.setDelayAddEndTime(dto.getDelayEndTime());
DelayAddPriceVO delayAddPriceVO = new DelayAddPriceVO(){{
setDamageSafePrice(new BigDecimal(dictionaryMap.get(APP_ORDER+ "_"+ DictionaryKey.DAMAGE_SAFE).getDetail()));
setDelayAddDays(orvd.getDelayAddDays());
setDelayAmountList(delayAmountList);
}};
if(SYS_TRUE.equals(dto.getNeedDamageSafe())) {
delayAddPriceVO.initDelayDamageSafeAmount();
}
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
...@@ -48,7 +48,7 @@ public interface BaseOrderMapper extends Mapper<BaseOrder> { ...@@ -48,7 +48,7 @@ public interface BaseOrderMapper extends Mapper<BaseOrder> {
@Param("startDate") Date startDate, @Param("startDate") Date startDate,
@Param("endDate") Date endDate); @Param("endDate") Date endDate);
List<OrderDTO> selectBaeOrderByOrderIds(@Param("orderIds") List<Integer> orderIds);
List<Achievement> selectTotalStatistical(QueryCriteria queryCriteria); List<Achievement> selectTotalStatistical(QueryCriteria queryCriteria);
List<OrderDTO> selectBaeOrderByOrderIds(@Param("orderIds") List<Integer> orderIds);
} }
...@@ -25,8 +25,6 @@ public interface OrderAccountMapper extends Mapper<OrderAccount> { ...@@ -25,8 +25,6 @@ public interface OrderAccountMapper extends Mapper<OrderAccount> {
List<OrderAccountDTO> getOrderAccountByOrderType(Term term); List<OrderAccountDTO> getOrderAccountByOrderType(Term term);
List<ReturnOrderAmount> outStatisticalData(@Param("queryCriteria")QueryCriteria queryCriteria, @Param("startTime") Long startTime, @Param("endTime")Long endTime);
List<OrderAccountBo> selectOrderAccountByOrderTypeAndStartTimeAndEndTime(@Param("orderType") Integer orderType, List<OrderAccountBo> selectOrderAccountByOrderTypeAndStartTimeAndEndTime(@Param("orderType") Integer orderType,
@Param("startTime") long startTime, @Param("startTime") long startTime,
@Param("endTime") long endTime); @Param("endTime") long endTime);
...@@ -34,4 +32,6 @@ public interface OrderAccountMapper extends Mapper<OrderAccount> { ...@@ -34,4 +32,6 @@ public interface OrderAccountMapper extends Mapper<OrderAccount> {
List<OrderAccountBo> selectByDateAndStatffIds(@Param("startDate") Date startDate, List<OrderAccountBo> selectByDateAndStatffIds(@Param("startDate") Date startDate,
@Param("endDate") Date endDate, @Param("endDate") Date endDate,
@Param("staffUserIds") List<Integer> staffUserIds); @Param("staffUserIds") List<Integer> staffUserIds);
List<ReturnOrderAmount> outStatisticalData(@Param("queryCriteria")QueryCriteria queryCriteria, @Param("startTime") Long startTime, @Param("endTime")Long endTime);
} }
package com.xxfc.platform.order.rest; package com.xxfc.platform.order.rest;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.wxiaoqi.security.admin.entity.AppUserLogin; import com.github.wxiaoqi.security.admin.entity.AppUserLogin;
...@@ -22,15 +24,21 @@ import com.google.common.collect.Lists; ...@@ -22,15 +24,21 @@ import com.google.common.collect.Lists;
import com.xxfc.platform.activity.entity.Coupon; import com.xxfc.platform.activity.entity.Coupon;
import com.xxfc.platform.activity.feign.ActivityFeign; import com.xxfc.platform.activity.feign.ActivityFeign;
import com.xxfc.platform.order.biz.*; import com.xxfc.platform.order.biz.*;
import com.xxfc.platform.order.biz.inner.OrderCalculateBiz;
import com.xxfc.platform.order.contant.enumerate.ItemTypeEnum; import com.xxfc.platform.order.contant.enumerate.ItemTypeEnum;
import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum;
import com.xxfc.platform.order.entity.OrderItem; import com.xxfc.platform.order.entity.OrderItem;
import com.xxfc.platform.order.entity.OrderRentVehicleDetail; import com.xxfc.platform.order.entity.OrderRentVehicleDetail;
import com.xxfc.platform.order.pojo.OrderAccompanyDTO; import com.xxfc.platform.order.pojo.OrderAccompanyDTO;
import com.xxfc.platform.order.pojo.order.*; import com.xxfc.platform.order.pojo.order.*;
import com.xxfc.platform.order.pojo.price.DelayAddPriceVO;
import com.xxfc.platform.order.pojo.price.RentVehiclePriceVO; import com.xxfc.platform.order.pojo.price.RentVehiclePriceVO;
import com.xxfc.platform.order.service.OrderRentVehicleService; import com.xxfc.platform.order.service.OrderRentVehicleService;
import com.xxfc.platform.tour.entity.TourUser; import com.xxfc.platform.tour.entity.TourUser;
import com.xxfc.platform.tour.feign.TourFeign; import com.xxfc.platform.tour.feign.TourFeign;
import com.xxfc.platform.universal.constant.DictionaryKey;
import com.xxfc.platform.universal.entity.Dictionary;
import com.xxfc.platform.universal.feign.ThirdFeign;
import com.xxfc.platform.vehicle.common.RestResponse; import com.xxfc.platform.vehicle.common.RestResponse;
import com.xxfc.platform.vehicle.constant.VehicleBookRecordStatus; import com.xxfc.platform.vehicle.constant.VehicleBookRecordStatus;
import com.xxfc.platform.vehicle.entity.BranchCompany; import com.xxfc.platform.vehicle.entity.BranchCompany;
...@@ -39,6 +47,7 @@ import com.xxfc.platform.vehicle.entity.VehicleUserLicense; ...@@ -39,6 +47,7 @@ import com.xxfc.platform.vehicle.entity.VehicleUserLicense;
import com.xxfc.platform.vehicle.feign.VehicleFeign; import com.xxfc.platform.vehicle.feign.VehicleFeign;
import com.xxfc.platform.vehicle.pojo.BookVehicleVO; import com.xxfc.platform.vehicle.pojo.BookVehicleVO;
import com.xxfc.platform.vehicle.pojo.CompanyDetail; import com.xxfc.platform.vehicle.pojo.CompanyDetail;
import com.xxfc.platform.vehicle.pojo.dto.order.VMCalendarPriceCostDTO;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import jodd.util.StringUtil; import jodd.util.StringUtil;
...@@ -52,14 +61,15 @@ import org.springframework.web.bind.annotation.*; ...@@ -52,14 +61,15 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.io.IOException; import java.io.IOException;
import java.math.BigDecimal;
import java.time.Instant; import java.time.Instant;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneOffset; import java.time.ZoneOffset;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.DATE_TIME_LINE_FORMATTER; import static com.github.wxiaoqi.security.common.constant.CommonConstants.*;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.YMR_SLASH_FORMATTER; import static com.xxfc.platform.universal.constant.DictionaryKey.APP_ORDER;
@Controller @Controller
//@RequestMapping("baseOrder") //@RequestMapping("baseOrder")
...@@ -83,6 +93,9 @@ public class BackStageOrderController extends CommonBaseController implements Us ...@@ -83,6 +93,9 @@ public class BackStageOrderController extends CommonBaseController implements Us
@Autowired @Autowired
OrderItemBiz orderItemBiz; OrderItemBiz orderItemBiz;
@Autowired
OrderCalculateBiz orderCalculateBiz;
@Autowired @Autowired
UserFeign userFeign; UserFeign userFeign;
...@@ -95,6 +108,9 @@ public class BackStageOrderController extends CommonBaseController implements Us ...@@ -95,6 +108,9 @@ public class BackStageOrderController extends CommonBaseController implements Us
@Resource @Resource
VehicleFeign vehicleFeign; VehicleFeign vehicleFeign;
@Autowired
ThirdFeign thirdFeign;
@Autowired @Autowired
BackgroundBaseOrderBiz backgroundBaseOrderBiz; BackgroundBaseOrderBiz backgroundBaseOrderBiz;
@Override @Override
...@@ -402,9 +418,8 @@ public class BackStageOrderController extends CommonBaseController implements Us ...@@ -402,9 +418,8 @@ public class BackStageOrderController extends CommonBaseController implements Us
checkAdminUser(); checkAdminUser();
//根据订单号获取订单 //根据订单号获取订单
//查询列表数据 //查询列表数据
Query query = baseOrderBiz.initQuery(dto.getNo()); Query query = baseOrderBiz.initBgQuery(dto.getNo());
query.put("crtUser", null);
query.put("userId", null);
PageDataVO<OrderPageVO> page = PageDataVO.pageInfo(query, () -> baseOrderBiz.pageByParm(query.getSuper())); PageDataVO<OrderPageVO> page = PageDataVO.pageInfo(query, () -> baseOrderBiz.pageByParm(query.getSuper()));
OrderPageVO orderPageVO = page.getData().get(0); OrderPageVO orderPageVO = page.getData().get(0);
if (null == orderPageVO) { if (null == orderPageVO) {
...@@ -442,10 +457,17 @@ public class BackStageOrderController extends CommonBaseController implements Us ...@@ -442,10 +457,17 @@ public class BackStageOrderController extends CommonBaseController implements Us
@RequestMapping(value = "/baseOrder/bg/delay-rent-order", method = RequestMethod.POST) @RequestMapping(value = "/baseOrder/bg/delay-rent-order", method = RequestMethod.POST)
@IgnoreClientToken @IgnoreClientToken
@ResponseBody @ResponseBody
public ObjectRestResponse<OrderPageVO> delayRentOrder(@RequestBody delayRentOrderDTO dto) { public ObjectRestResponse<OrderPageVO> delayRentOrder(@RequestBody DelayRentOrderDTO dto) {
checkAdminUser(); checkAdminUser();
//根据订单号获取订单
Query query = baseOrderBiz.initBgQuery(dto.getNo());
PageDataVO<OrderPageVO> page = PageDataVO.pageInfo(query, () -> baseOrderBiz.pageByParm(query.getSuper()));
OrderPageVO orderPageVO = page.getData().get(0);
if (null == orderPageVO || !OrderTypeEnum.RENT_VEHICLE.getCode().equals(orderPageVO.getType())) {
throw new BaseException(ResultCode.PARAM_ILLEGAL_CODE, Sets.newSet("订单不存在,或不是租车订单"));
}
return ObjectRestResponse.succ(); return ObjectRestResponse.succ();
} }
...@@ -468,12 +490,6 @@ public class BackStageOrderController extends CommonBaseController implements Us ...@@ -468,12 +490,6 @@ public class BackStageOrderController extends CommonBaseController implements Us
String numberPlate; String numberPlate;
} }
@Data
public static class delayRentOrderDTO {
Integer no;
Long delayEndTime;
}
private Query initCompanyQuery(String no) { private Query initCompanyQuery(String no) {
BackStageOrderController.QueryOrderDetailDTO qodd = new BackStageOrderController.QueryOrderDetailDTO(); BackStageOrderController.QueryOrderDetailDTO qodd = new BackStageOrderController.QueryOrderDetailDTO();
//查询公司id //查询公司id
......
...@@ -449,7 +449,7 @@ public class OrderPayBiz extends BaseBiz<OrderPayMapper, OrderPay>{ ...@@ -449,7 +449,7 @@ public class OrderPayBiz extends BaseBiz<OrderPayMapper, OrderPay>{
stringBuilder.append("&app_id="); stringBuilder.append("&app_id=");
stringBuilder.append(SystemConfig.ALIPAY_APPID); stringBuilder.append(SystemConfig.ALIPAY_APPID);
stringBuilder.append("&app_name="); stringBuilder.append("&app_name=");
stringBuilder.append("xinxinRV"); stringBuilder.append("mc");
stringBuilder.append("&auth_type=AUTHACCOUNT"); stringBuilder.append("&auth_type=AUTHACCOUNT");
stringBuilder.append("&biz_type=openservice"); stringBuilder.append("&biz_type=openservice");
stringBuilder.append("&method=alipay.open.auth.sdk.code.get"); stringBuilder.append("&method=alipay.open.auth.sdk.code.get");
......
...@@ -126,7 +126,7 @@ public class CertificationService { ...@@ -126,7 +126,7 @@ public class CertificationService {
exa.createCriteria().andEqualTo("idNumber", number); exa.createCriteria().andEqualTo("idNumber", number);
List<IdInformation> idInformatics = idInformationMapper.selectByExample(exa); List<IdInformation> idInformatics = idInformationMapper.selectByExample(exa);
if (CollectionUtils.isNotEmpty(idInformatics) && idInformatics.size() >getCofig() ) { if (CollectionUtils.isNotEmpty(idInformatics) && idInformatics.size() >=getCofig() ) {
log.error("该身份证已超过最大认证次数"); log.error("该身份证已超过最大认证次数");
return ObjectRestResponse.createFailedResult(ResultCode.FAILED_CODE, "该身份证已超过最大认证次数"); return ObjectRestResponse.createFailedResult(ResultCode.FAILED_CODE, "该身份证已超过最大认证次数");
} }
......
...@@ -210,6 +210,6 @@ public interface VehicleFeign { ...@@ -210,6 +210,6 @@ public interface VehicleFeign {
* @return * @return
*/ */
@RequestMapping(value = "/vehicleInfo/bookRecord/order-update", method = RequestMethod.POST) @RequestMapping(value = "/vehicleInfo/bookRecord/order-update", method = RequestMethod.POST)
public RestResponse updateOrderBookRecord(@RequestBody BookVehicleVO bookVehicleVo) throws Exception; public RestResponse updateOrderBookRecord(@RequestBody BookVehicleVO bookVehicleVo);
} }
...@@ -23,6 +23,11 @@ public class VMCalendarPriceCostDTO extends VehicleModelCalendarPriceDTO { ...@@ -23,6 +23,11 @@ public class VMCalendarPriceCostDTO extends VehicleModelCalendarPriceDTO {
*/ */
private BigDecimal freeAmount = BigDecimal.ZERO; private BigDecimal freeAmount = BigDecimal.ZERO;
/**
* 生效的免费天数
*/
private Integer validFreeDays = 0;
public void setFreeAndConsumeAmount(BigDecimal realAmount, BigDecimal freeAmount) { public void setFreeAndConsumeAmount(BigDecimal realAmount, BigDecimal freeAmount) {
setFreeAmount(freeAmount); setFreeAmount(freeAmount);
setConsumeAmount(realAmount.subtract(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