Commit 5d1ff3e6 authored by jiaorz's avatar jiaorz

修改提前还车逻辑

parent c3953a0c
...@@ -247,7 +247,7 @@ public class MsgBiz { ...@@ -247,7 +247,7 @@ public class MsgBiz {
return praiseVoArrayList; return praiseVoArrayList;
} }
public List<CommentVo> replaceCommentResult(List<Comment> list) { public List<CommentVo> replaceCommentResult(List<Comment> list) {
List<CommentVo> commentVoList = new ArrayList<>(); List<CommentVo> commentVoList = new ArrayList<>();
for(Comment comment : list) { for(Comment comment : list) {
CommentVo commentVo = new CommentVo(); CommentVo commentVo = new CommentVo();
......
...@@ -8,7 +8,7 @@ import java.util.List; ...@@ -8,7 +8,7 @@ import java.util.List;
@Data @Data
public class DedDetailDTO { public class DedDetailDTO {
/** /**
* : 扣除项 * : 扣除项名称
*/ */
String deductions; String deductions;
...@@ -34,4 +34,6 @@ public class DedDetailDTO { ...@@ -34,4 +34,6 @@ public class DedDetailDTO {
//type对应的中文 //type对应的中文
String statusName; String statusName;
} }
...@@ -18,6 +18,7 @@ import com.xxfc.platform.order.contant.enumerate.DepositRefundStatus; ...@@ -18,6 +18,7 @@ import com.xxfc.platform.order.contant.enumerate.DepositRefundStatus;
import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum; import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum;
import com.xxfc.platform.order.entity.*; import com.xxfc.platform.order.entity.*;
import com.xxfc.platform.order.mapper.OrderVehicaleCrosstownMapper; import com.xxfc.platform.order.mapper.OrderVehicaleCrosstownMapper;
import com.xxfc.platform.order.pojo.DedDetailDTO;
import com.xxfc.platform.order.pojo.mq.OrderMQDTO; import com.xxfc.platform.order.pojo.mq.OrderMQDTO;
import com.xxfc.platform.order.pojo.order.OrderPageVO; import com.xxfc.platform.order.pojo.order.OrderPageVO;
import com.xxfc.platform.order.pojo.order.OrderVehicleCrosstownDto; import com.xxfc.platform.order.pojo.order.OrderVehicleCrosstownDto;
...@@ -34,11 +35,13 @@ import com.xxfc.platform.vehicle.pojo.VehicleDepartureVo; ...@@ -34,11 +35,13 @@ import com.xxfc.platform.vehicle.pojo.VehicleDepartureVo;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.map.HashedMap; import org.apache.commons.collections4.map.HashedMap;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.TimeZone; import java.util.TimeZone;
...@@ -254,7 +257,7 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp ...@@ -254,7 +257,7 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
BigDecimal amount = new BigDecimal(cost.toString()).divide(new BigDecimal("1"), 2, BigDecimal.ROUND_UP); BigDecimal amount = new BigDecimal(cost.toString()).divide(new BigDecimal("1"), 2, BigDecimal.ROUND_UP);
orderVehicleCrosstownDto.setDeductionCost(amount); orderVehicleCrosstownDto.setDeductionCost(amount);
//扣除费用 //扣除费用
orderVehicleCrosstownDto.setRestDeposit(orderRentVehicleDetail.getDeposit().subtract(amount)); orderVehicleCrosstownDto.setRestDeposit(orderRentVehicleDetail.getDeposit().subtract(orderVehicleCrosstownDto.getDeductionCost()));
if(orderVehicleCrosstownDto.getRestDeposit().compareTo(getAmount()) == -1) { //剩余金额小于保证金 if(orderVehicleCrosstownDto.getRestDeposit().compareTo(getAmount()) == -1) { //剩余金额小于保证金
return ObjectRestResponse.createFailedResult(500,"押金不足,不能交车,请联系客服!"); return ObjectRestResponse.createFailedResult(500,"押金不足,不能交车,请联系客服!");
} }
...@@ -289,7 +292,7 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp ...@@ -289,7 +292,7 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
BigDecimal totalAmount = new BigDecimal(0); BigDecimal totalAmount = new BigDecimal(0);
ObjectRestResponse<OrderPageVO> objectRestResponse = baseOrderBiz.getOrderDetail(baseOrder.getNo()); ObjectRestResponse<OrderPageVO> objectRestResponse = baseOrderBiz.getOrderDetail(baseOrder.getNo());
if (objectRestResponse.getData() != null && objectRestResponse.getData().getOrderRentVehicleDetail() != null) { if (objectRestResponse.getData() != null && objectRestResponse.getData().getOrderRentVehicleDetail() != null) {
//总押金-保留金 //总押金
totalAmount = objectRestResponse.getData().getOrderRentVehicleDetail().getDeposit(); totalAmount = objectRestResponse.getData().getOrderRentVehicleDetail().getDeposit();
} }
...@@ -313,19 +316,47 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp ...@@ -313,19 +316,47 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
orderRentVehicleBiz.updateSelectiveByIdRe(orderRentVehicleDetail); orderRentVehicleBiz.updateSelectiveByIdRe(orderRentVehicleDetail);
baseOrderBiz.sendOrderMq(orderRentVehicleDetail, null, null, baseOrder, OrderMQDTO.ORDER_FINISH); baseOrderBiz.sendOrderMq(orderRentVehicleDetail, null, null, baseOrder, OrderMQDTO.ORDER_FINISH);
} else if (orderVehicleCrosstown.getType() == CrosstownTypeEnum.FIXED_LOSS.getCode()) { //定损还车,添加定损记录 } else if (orderVehicleCrosstown.getType() == CrosstownTypeEnum.FIXED_LOSS.getCode()) { //定损还车,添加定损记录
//添加定损记录 //提前还车,结束时间大于当前时间
DepositRefundRecord depositRefundRecord = new DepositRefundRecord(); DateTime nowTime = DateTime.now();
depositRefundRecord.setAmount(orderVehicleCrosstown.getDeductionCost()); DateTime endTime = new DateTime(orderRentVehicleDetail.getEndTime());
depositRefundRecord.setRestAmount(totalAmount.subtract(getAmount()).subtract(orderVehicleCrosstown.getDeductionCost())); DateTime startTime = new DateTime(orderRentVehicleDetail.getStartTime());
depositRefundRecord.setTotalAmount(totalAmount.subtract(getAmount())); //实际预定的天数
depositRefundRecord.setCrosstownId(orderVehicleCrosstown.getId()); int actualDay = getDaysBetweenDateTime(startTime, endTime);
orderDepositRefundRecordBiz.saveFixLossRecord(depositRefundRecord); if(orderRentVehicleDetail.getEndTime() > nowTime.getMillis()) {
//修改訂單狀態為定損 //提前的天数
baseOrder.setStatus(OrderStatusEnum.ORDER_FIXED_LOSS.getCode()); int noUsedDay = getDaysBetweenDateTime(nowTime, endTime);
baseOrderBiz.updateSelectiveByIdReT(baseOrder); //退还未使用的天数,或者金额,扣除违约金,实际未使用天数的金额,最多3000元
orderRentVehicleDetail.setFixedLossStatus(1);
orderRentVehicleBiz.updateSelectiveByIdRe(orderRentVehicleDetail); //延期还车,结束时间小于当前时间
} } else if(orderRentVehicleDetail.getEndTime() < nowTime.getMillis()) {
//延期的天数, 延期违约金是延期天数*200%
int usedDay = getDaysBetweenDateTime(endTime, nowTime);
DedDetailDTO dedDetailDTO = new DedDetailDTO();
dedDetailDTO.setDeductions("违约金:");
dedDetailDTO.setCost(baseOrder.getGoodsAmount().multiply(new BigDecimal(usedDay)).multiply(new BigDecimal(2)));
dedDetailDTO.setId(1);
dedDetailDTO.setStatusIndex(1);
dedDetailDTO.setStatusName("延期违约金");
dedDetailDTO.setType(3);
orderVehicleCrosstown.setDedDetail(JSONObject.toJSONString(dedDetailDTO));
BigDecimal restDeposit = orderVehicleCrosstown.getRestDeposit().subtract(dedDetailDTO.getCost());
orderVehicleCrosstown.setRestDeposit(restDeposit);
orderVehicleCrosstown.setDeductionCost(orderVehicleCrosstown.getDeductionCost().add(dedDetailDTO.getCost()));
orderVehicleCrosstownBiz.updateSelectiveByIdRe(orderVehicleCrosstown);
} }
//添加定损记录
DepositRefundRecord depositRefundRecord = new DepositRefundRecord();
depositRefundRecord.setAmount(orderVehicleCrosstown.getDeductionCost());
depositRefundRecord.setRestAmount(totalAmount.subtract(getAmount()).subtract(orderVehicleCrosstown.getDeductionCost()));
depositRefundRecord.setTotalAmount(totalAmount.subtract(getAmount()));
depositRefundRecord.setCrosstownId(orderVehicleCrosstown.getId());
orderDepositRefundRecordBiz.saveFixLossRecord(depositRefundRecord);
//修改訂單狀態為定損
baseOrder.setStatus(OrderStatusEnum.ORDER_FIXED_LOSS.getCode());
baseOrderBiz.updateSelectiveByIdReT(baseOrder);
orderRentVehicleDetail.setFixedLossStatus(1);
orderRentVehicleBiz.updateSelectiveByIdRe(orderRentVehicleDetail);
} else if (baseOrder.getStatus() == OrderStatusEnum.ORDER_FIXED_LOSS.getCode()) {//定损后还车 } else if (baseOrder.getStatus() == OrderStatusEnum.ORDER_FIXED_LOSS.getCode()) {//定损后还车
DepositRefundRecord depositRefundRecord = orderDepositRefundRecordBiz.findByCrossIdAndStatus(orderVehicleCrosstown.getId(), DepositRefundStatus.FIXLOSSREFUND.getCode()); DepositRefundRecord depositRefundRecord = orderDepositRefundRecordBiz.findByCrossIdAndStatus(orderVehicleCrosstown.getId(), DepositRefundStatus.FIXLOSSREFUND.getCode());
if (depositRefundRecord != null) { if (depositRefundRecord != null) {
...@@ -354,6 +385,8 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp ...@@ -354,6 +385,8 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
} }
} }
//添加订单驾驶人信息
public void getOrderLicense(OrderVehicleCrosstownDto orderVehicleCrosstownDto) { public void getOrderLicense(OrderVehicleCrosstownDto orderVehicleCrosstownDto) {
if (StringUtils.isNotBlank(orderVehicleCrosstownDto.getLicenseIdCard())) { if (StringUtils.isNotBlank(orderVehicleCrosstownDto.getLicenseIdCard())) {
OrderUserLicense orderUserLicense = new OrderUserLicense(); OrderUserLicense orderUserLicense = new OrderUserLicense();
...@@ -382,4 +415,13 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp ...@@ -382,4 +415,13 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
} }
return false; return false;
} }
//获取两个日期之间的天数
public int getDaysBetweenDateTime(DateTime startDay, DateTime endDay) {
int a = 0;
for (DateTime curDate = startDay.plusDays(1); curDate.compareTo(endDay) < 0; curDate = curDate.plusDays(1)) {
a++;
}
return a;
}
} }
...@@ -59,7 +59,6 @@ public class VehicleActiveService { ...@@ -59,7 +59,6 @@ public class VehicleActiveService {
* *
* @param departureVo * @param departureVo
*/ */
@Transactional
public void departure(VehicleDepartureVo departureVo) { public void departure(VehicleDepartureVo departureVo) {
Vehicle vehicle = vehicleMapper.selectByPrimaryKey(departureVo.getVehicleId()); Vehicle vehicle = vehicleMapper.selectByPrimaryKey(departureVo.getVehicleId());
if (vehicle == null) { if (vehicle == null) {
...@@ -180,7 +179,6 @@ public class VehicleActiveService { ...@@ -180,7 +179,6 @@ public class VehicleActiveService {
return stringBuilder.toString(); return stringBuilder.toString();
} }
@Transactional
public void arrival(VehicleArrivalVo arrivalVo) { public void arrival(VehicleArrivalVo arrivalVo) {
Vehicle vehicle = vehicleMapper.selectByPrimaryKey(arrivalVo.getVehicleId()); Vehicle vehicle = vehicleMapper.selectByPrimaryKey(arrivalVo.getVehicleId());
if (vehicle == null) { if (vehicle == null) {
......
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