Commit 2d79ced1 authored by hezhen's avatar hezhen

Merge branch 'dev-chw' of http://113.105.137.151:22280/youjj/cloud-platform into dev-chw

parents d2036301 d0e67a05
......@@ -11,6 +11,15 @@ import java.util.List;
@Data
public class InProgressVO {
public static final int VIOLATE_TYPE_NOT = 0;
public static final int VIOLATE_TYPE_ADVANCE = 1;
public static final int VIOLATE_TYPE_DELAY = 2;
/**
* 违约类型 0--没违约;1--提前还车;2--延期还车
*/
Integer violateType = 0;
/**
* 违约金
*/
......
......@@ -263,22 +263,7 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
}
userDTO.setCompanyId(orderRentVehicleDetail.getEndCompanyId());
}
Vehicle vehicle = null;
RestResponse<Vehicle> vehicleRestResponse = vehicleFeign.findById(orderRentVehicleDetail.getVehicleId());
if (vehicleRestResponse.getData() != null) {
vehicle = vehicleRestResponse.getData();
} else {
return ObjectRestResponse.createFailedResult(ResCode.VEHICLE_DEPARTURE_VEHICLE_UNEXIST.getCode(), ResCode.VEHICLE_DEPARTURE_VEHICLE_UNEXIST.getDesc());
}
//非定损状态下要判断车辆公里数
if (baseOrder.getStatus() != -1) {
if (vehicle.getMileageLastUpdate() != null) {
//判断车辆公里数
if (orderVehicleCrosstownDto.getMileage() == null || orderVehicleCrosstownDto.getMileage() < vehicle.getMileageLastUpdate()) {
return ObjectRestResponse.createFailedResult(ResCode.VEHICLE_BOOKED_RECORD_MILEAGE_CHANGED.getCode(), ResCode.VEHICLE_BOOKED_RECORD_MILEAGE_CHANGED.getDesc());
}
}
}
//添加验车人信息
JSONArray list = new JSONArray();
CheckUserInfoDto checkUserInfoDto = null;
......@@ -360,18 +345,29 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
}
}
}
Double violateAmount = 0.0;
//延期扣除费用
if (StringUtils.isNotBlank(orderVehicleCrosstownDto.getViolateDetail())) {
JSONArray jsonArray = JSONArray.parseArray(orderVehicleCrosstownDto.getViolateDetail());
if (jsonArray != null && jsonArray.size() > 0) {
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject jsonObject = JSONObject.parseObject(jsonArray.get(i).toString());
if (jsonObject.getString("cost") != null) {
cost += Double.parseDouble(jsonObject.getString("cost"));
}
if (jsonObject.getString("excessCost") != null) {
cost += Double.parseDouble(jsonObject.getString("excessCost"));
}
if (jsonObject.getInteger("type") != 1) {
if (jsonObject.getString("cost") != null) {
cost += Double.parseDouble(jsonObject.getString("cost"));
}
if (jsonObject.getString("excessCost") != null) {
cost += Double.parseDouble(jsonObject.getString("excessCost"));
}
} else { //提前还车单独判断
if (jsonObject.getString("cost") != null) {
violateAmount += Double.parseDouble(jsonObject.getString("cost"));
}
if (jsonObject.getString("excessCost") != null) {
violateAmount += Double.parseDouble(jsonObject.getString("excessCost"));
}
}
}
}
}
......@@ -397,8 +393,12 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
orderVehicleCrosstownDto.setDeductionCost(amount);
//扣除费用
orderVehicleCrosstownDto.setRestDeposit(orderRentVehicleDetail.getDeposit().subtract(orderVehicleCrosstownDto.getDeductionCost()));
if (orderVehicleCrosstownDto.getRestDeposit().compareTo(orderRentVehicleDetail.getTrafficDeposit()) == -1) { //剩余金额小于保证金
return ObjectRestResponse.createFailedResult(500, "押金不足,不能交车,请联系客服!");
//只有当押金是线上的时候才判断押金是否足额
if (orderRentVehicleDetail.getGoodsDepositType() != 2) {
//判断车辆押金是否足额
if (orderVehicleCrosstownDto.getRestDeposit().compareTo(orderRentVehicleDetail.getVehicleDeposit()) == -1) { //剩余金额小于保证金
return ObjectRestResponse.createFailedResult(500, "押金不足,不能交车,请联系客服!");
}
}
if(StringUtils.isNotBlank(oldValue.get(0).getCheckUserInfo())) {
JSONArray jsonArray = JSONArray.parseArray(oldValue.get(0).getCheckUserInfo());
......@@ -422,8 +422,12 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
orderVehicleCrosstownDto.setDeductionCost(amount);
//剩余押金 = 总押金 - 扣除费用
orderVehicleCrosstownDto.setRestDeposit(orderRentVehicleDetail.getDeposit().subtract(orderVehicleCrosstownDto.getDeductionCost()));
if (orderVehicleCrosstownDto.getRestDeposit().compareTo(orderRentVehicleDetail.getTrafficDeposit()) == -1) { //剩余金额小于保证金
return ObjectRestResponse.createFailedResult(500, "押金不足,不能交车,请联系客服!");
//只有当押金是线上的时候才判断押金是否足额
if (orderRentVehicleDetail.getGoodsDepositType() != 2) {
//判断车辆押金是否足额
if (orderVehicleCrosstownDto.getRestDeposit().compareTo(orderRentVehicleDetail.getVehicleDeposit()) == -1) { //剩余金额小于保证金
return ObjectRestResponse.createFailedResult(500, "押金不足,不能交车,请联系客服!");
}
}
orderVehicleCrosstownDto.setCheckUserInfo(list.toJSONString());
getOrderLicense(orderVehicleCrosstownDto);
......@@ -443,7 +447,7 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
private void handleOrderStatus(BaseOrder baseOrder, OrderRentVehicleDetail orderRentVehicleDetail, OrderVehicleCrosstown orderVehicleCrosstown, AppUserDTO appUserDTO) {
//交车完成 设置订单状态为出行中
BigDecimal illegalReserve = orderRentVehicleDetail.getTrafficDeposit();
BigDecimal illegalReserve = orderRentVehicleDetail.getVehicleDeposit();
BigDecimal totalAmount = orderRentVehicleDetail.getDeposit();
if (baseOrder.getStatus() == OrderStatusEnum.ORDER_TOSTART.getCode()) {//交车
baseOrder.setStatus(OrderStatusEnum.ORDER_WAIT.getCode());
......
......@@ -93,7 +93,7 @@ public class OrderViolationBiz extends BaseBiz<OrderViolationMapper, OrderViolat
orderViolation.setCrtTime(new BigInteger(String.valueOf(System.currentTimeMillis())));
insertSelective(orderViolation);
detailMapper.updateByPrimaryKeySelective(orderRentVehicleDetail);
BaseOrder baseOrder = baseOrderBiz.selectById(orderRentVehicleDetail.getOrderId());
BaseOrder baseOrder = baseOrderBiz.selectOne(new BaseOrder(){{setDetailId(orderViolation.getDetailId());}});
if (baseOrder != null) {
baseOrder.setRefundStatus(3);
baseOrderBiz.updateSelectiveByIdRe(baseOrder);
......@@ -126,6 +126,12 @@ public class OrderViolationBiz extends BaseBiz<OrderViolationMapper, OrderViolat
orderViolation.setUpdUserId(userDTO.getId());
orderViolation.setUpdTime(new BigInteger(String.valueOf(System.currentTimeMillis())));
updateSelectiveByIdRe(orderViolation);
BaseOrder baseOrder = baseOrderBiz.selectOne(new BaseOrder(){{setDetailId(orderViolation.getDetailId());}});
if (baseOrder != null) {
baseOrder.setRefundStatus(3);
baseOrderBiz.updateSelectiveByIdRe(baseOrder);
}
} else {
throw new BaseException("The operation cannot be changed at this time");
}
......
......@@ -46,6 +46,8 @@ import java.util.List;
import java.util.Map;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_TRUE;
import static com.xxfc.platform.order.pojo.calculate.InProgressVO.VIOLATE_TYPE_ADVANCE;
import static com.xxfc.platform.order.pojo.calculate.InProgressVO.VIOLATE_TYPE_DELAY;
import static com.xxfc.platform.universal.constant.DictionaryKey.*;
/**
......@@ -278,9 +280,11 @@ public class OrderCalculateBiz implements CalculateInterface {
violateDesc += StrUtil.format("(封顶{}元)", residueAmount);
}
inProgressVO.setViolateType(VIOLATE_TYPE_ADVANCE);
inProgressVO.setViolateAmount(residueAmount);
inProgressVO.setViolateDesc(" 提前还车违约金:"+ violateDesc);
OrderAccountDeduction violateDeduction = orderAccountBiz.initDeduction(inProgressVO.getViolateAmount(), violateDesc, DeductionTypeEnum.VIOLATE_ADVANCE, OrderAccountDeduction.ORIGIN_DEPOSIT);
//提前还车 修改ORIGIN_DEPOSIT 为 ORIGIN_ORDER_DEPOSIT
OrderAccountDeduction violateDeduction = orderAccountBiz.initDeduction(inProgressVO.getViolateAmount(), violateDesc, DeductionTypeEnum.VIOLATE_ADVANCE, OrderAccountDeduction.ORIGIN_ORDER_DEPOSIT);
oad.getDeductions().add(violateDeduction);
}else if (realResidueDays.equals(0)) { //准时还车
//设置消耗费用列表
......@@ -301,6 +305,7 @@ public class OrderCalculateBiz implements CalculateInterface {
.map(VMCalendarPriceCostDTO::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add).multiply(new BigDecimal(2+ ""));
//超过的天数 价格 * 200%
inProgressVO.setViolateType(VIOLATE_TYPE_DELAY);
inProgressVO.setViolateAmount(overAmount);
inProgressVO.setViolateDesc(" 延期还车违约金:"+ violateDesc);
inProgressVO.setOverAmountList(overAmountList);
......@@ -349,9 +354,17 @@ public class OrderCalculateBiz implements CalculateInterface {
public InProgressVO calculateOrderComplete(BaseOrder baseOrder, OrderRentVehicleDetail orvd, OrderAccountDetail oad, VehicleItemDTO vehicleItemDTO, Integer useDays, Boolean isCancel) {
InProgressVO inProgressVO = inProgressCalculate(baseOrder, vehicleItemDTO, orvd, useDays, oad, isCancel);
//定金 - (额外消费金额 + 违约金)
oad.setDepositAmount(orvd.getDeposit().subtract(inProgressVO.getExtraAmount().add(inProgressVO.getViolateAmount())));
oad.setOrderAmount(inProgressVO.getRefundOrderAmount());
//后修改为提前还车 订单款扣,延期还车 押金扣
if(InProgressVO.VIOLATE_TYPE_ADVANCE == inProgressVO.getViolateType()) {
//定金 - (额外消费金额)
oad.setDepositAmount(orvd.getDeposit().subtract(inProgressVO.getExtraAmount()));
//订单款 - 违约金
oad.setOrderAmount(inProgressVO.getRefundOrderAmount().subtract(inProgressVO.getViolateAmount()));
}else {
//定金 - (额外消费金额 + 违约金)
oad.setDepositAmount(orvd.getDeposit().subtract(inProgressVO.getExtraAmount().add(inProgressVO.getViolateAmount())));
oad.setOrderAmount(inProgressVO.getRefundOrderAmount());
}
oad.setOriginDepositAmount(orvd.getDeposit());
oad.setOriginOrderAmount(baseOrder.getGoodsAmount().subtract(baseOrder.getCouponAmount()));
return inProgressVO;
......
......@@ -1192,7 +1192,7 @@
* 原(大于预约结束时间,小于预约开始时间的预约记录)
* 相交叉(大于预约开始时间,小于预约结束时间的预约记录)
-->
<if test="recordIntersection == null ">
<if test="recordIntersection == null or recordIntersection != true">
left join (
<include refid="aroundBookRecord"></include>
) abr on v.`id` = abr.vehicle_id
......
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