Commit 5a609dec authored by jiaorz's avatar jiaorz

Merge branch 'master-modify-cutAmount' into base-modify

# Conflicts:
#	xx-order/xx-order-api/src/main/java/com/xxfc/platform/order/pojo/order/OrderPageVO.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/biz/OrderAccountBiz.java
parents bfbec035 ffb06859
...@@ -6,7 +6,7 @@ import java.util.Map; ...@@ -6,7 +6,7 @@ import java.util.Map;
public enum AccountTypeEnum { public enum AccountTypeEnum {
//账款类型 1*--入账;2*--出账 //账款类型 1*--入账;2*--出账
//账款类型 记帐类型 101--订单支付;201--取消订单退款;202--全部押金退款;203--部分押金退款;204--剩余押金退款 //账款类型 记帐类型 101--订单支付;201--取消订单退款;202--全部押金退款;203--部分押金退款;204--剩余押金退款
In_ORDER_PAY(101, "订单支付"), IN_ORDER_PAY(101, "订单支付"),
OUT_ORDER_FUND(201, "订单款"), OUT_ORDER_FUND(201, "订单款"),
OUT_DEPOSIT(202, "所有押金"), OUT_DEPOSIT(202, "所有押金"),
OUT_PART_DEPOSIT(203, "部分押金(扣除该扣除的 + 保留违章预备金)"), OUT_PART_DEPOSIT(203, "部分押金(扣除该扣除的 + 保留违章预备金)"),
......
...@@ -4,7 +4,7 @@ import java.util.HashMap; ...@@ -4,7 +4,7 @@ import java.util.HashMap;
import java.util.Map; import java.util.Map;
public enum DeductionTypeEnum { public enum DeductionTypeEnum {
//账款类型 1--违约金;2--消费金额;3--赔偿金(定损);4--违章扣款 //账款类型 1--违约金;2--消费金额;3--赔偿金(定损);4--违章相关
VIOLATE_CANCEL(101, "提前取消违约金"), VIOLATE_CANCEL(101, "提前取消违约金"),
VIOLATE_ADVANCE(102, "提前还车违约金"), VIOLATE_ADVANCE(102, "提前还车违约金"),
VIOLATE_DELAY(103, "延迟还车违约金"), VIOLATE_DELAY(103, "延迟还车违约金"),
......
...@@ -6,7 +6,8 @@ import java.util.Map; ...@@ -6,7 +6,8 @@ import java.util.Map;
public enum OrderViolateEnum { public enum OrderViolateEnum {
BEFORE(1, "提前"), BEFORE(1, "提前"),
AFTER(2, "延期") AFTER(2, "延期"),
EXCESS(3, "消费超额金")
; ;
/** /**
* 编码 * 编码
......
...@@ -7,6 +7,9 @@ import java.util.List; ...@@ -7,6 +7,9 @@ import java.util.List;
@Data @Data
public class DedDetailDTO { public class DedDetailDTO {
//public static final int TYPE_VIOLATE_ADVANCE = 1;
/** /**
* : 扣除项名称 * : 扣除项名称
*/ */
...@@ -24,7 +27,7 @@ public class DedDetailDTO { ...@@ -24,7 +27,7 @@ public class DedDetailDTO {
//作为:DedDetail :2、车辆损坏 3、其他 //作为:DedDetail :2、车辆损坏 3、其他
//作为:violate_amount_detail 1--提前还车 2--延期还车 //作为:violate_amount_detail 1--提前还车 2--延期还车 3--消费超额
Integer type; Integer type;
//小雨都不知道什么东西 //小雨都不知道什么东西
......
...@@ -9,6 +9,8 @@ public class OrderAccountDeduction { ...@@ -9,6 +9,8 @@ public class OrderAccountDeduction {
public static final int ORIGIN_ORDER = 1; public static final int ORIGIN_ORDER = 1;
public static final int ORIGIN_DEPOSIT = 2; public static final int ORIGIN_DEPOSIT = 2;
public static final int ORIGIN_ORDER_DEPOSIT = 3;
public static final int ORIGIN_DEPOSIT_ORDERß = 4;
/** /**
* 名称 * 名称
......
...@@ -8,7 +8,25 @@ import java.util.List; ...@@ -8,7 +8,25 @@ import java.util.List;
@Data @Data
public class OrderAccountDetail { public class OrderAccountDetail {
/**
* 实际返回订单款
*/
BigDecimal orderAmount; BigDecimal orderAmount;
/**
* 实际返回押金款
*/
BigDecimal depositAmount; BigDecimal depositAmount;
/**
* 原来要返回的订单款
*/
BigDecimal originOrderAmount;
/**
* 原来要返回的押金款
*/
BigDecimal originDepositAmount;
/**
* 扣款列表
*/
List<OrderAccountDeduction> deductions = Lists.newArrayList(); List<OrderAccountDeduction> deductions = Lists.newArrayList();
} }
...@@ -36,7 +36,8 @@ public class OrderPageVO extends BaseOrder { ...@@ -36,7 +36,8 @@ public class OrderPageVO extends BaseOrder {
//订单违约金 //订单违约金
private DedDetailDTO dedDetailDTO; private DedDetailDTO dedDetailDTO;
//订单消费超额金
private DedDetailDTO excessDedDetailDTO;
/** /**
* 車輛編碼 * 車輛編碼
*/ */
......
...@@ -7,7 +7,6 @@ import com.github.wxiaoqi.security.admin.dto.UserMemberDTO; ...@@ -7,7 +7,6 @@ import com.github.wxiaoqi.security.admin.dto.UserMemberDTO;
import com.github.wxiaoqi.security.admin.feign.UserFeign; import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO; import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.admin.feign.dto.UserDTO; import com.github.wxiaoqi.security.admin.feign.dto.UserDTO;
import com.github.wxiaoqi.security.admin.vo.AppUserVo;
import com.github.wxiaoqi.security.common.biz.BaseBiz; import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.context.BaseContextHandler; import com.github.wxiaoqi.security.common.context.BaseContextHandler;
import com.github.wxiaoqi.security.common.exception.BaseException; import com.github.wxiaoqi.security.common.exception.BaseException;
...@@ -18,12 +17,14 @@ import com.google.common.collect.Lists; ...@@ -18,12 +17,14 @@ import com.google.common.collect.Lists;
import com.xxfc.platform.activity.feign.ActivityFeign; import com.xxfc.platform.activity.feign.ActivityFeign;
import com.xxfc.platform.order.biz.inner.OrderCalculateBiz; import com.xxfc.platform.order.biz.inner.OrderCalculateBiz;
import com.xxfc.platform.order.biz.inner.OrderMsgBiz; import com.xxfc.platform.order.biz.inner.OrderMsgBiz;
import com.xxfc.platform.order.contant.enumerate.AccountTypeEnum;
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;
import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum; import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum;
import com.xxfc.platform.order.contant.enumerate.OrderViolateEnum; import com.xxfc.platform.order.contant.enumerate.OrderViolateEnum;
import com.xxfc.platform.order.entity.*; import com.xxfc.platform.order.entity.*;
import com.xxfc.platform.order.mapper.BaseOrderMapper; import com.xxfc.platform.order.mapper.BaseOrderMapper;
import com.xxfc.platform.order.pojo.account.OrderAccountDetail;
import com.xxfc.platform.order.pojo.DedDetailDTO; import com.xxfc.platform.order.pojo.DedDetailDTO;
import com.xxfc.platform.order.pojo.calculate.InProgressVO; import com.xxfc.platform.order.pojo.calculate.InProgressVO;
import com.xxfc.platform.order.pojo.mq.OrderMQDTO; import com.xxfc.platform.order.pojo.mq.OrderMQDTO;
...@@ -31,7 +32,6 @@ import com.xxfc.platform.order.pojo.order.OrderListVo; ...@@ -31,7 +32,6 @@ import com.xxfc.platform.order.pojo.order.OrderListVo;
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;
import com.xxfc.platform.order.pojo.order.QueryOrderDTO; import com.xxfc.platform.order.pojo.order.QueryOrderDTO;
import com.xxfc.platform.order.rest.BaseOrderController;
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.constant.DictionaryKey;
...@@ -98,6 +98,9 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> { ...@@ -98,6 +98,9 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> {
@Autowired @Autowired
OrderItemBiz orderItemBiz; OrderItemBiz orderItemBiz;
@Autowired
OrderAccountBiz orderAccountBiz;
@Autowired @Autowired
VehicleFeign vehicleFeign; VehicleFeign vehicleFeign;
...@@ -172,6 +175,10 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> { ...@@ -172,6 +175,10 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> {
orderPageVo.setUserCompanyStatus(true); orderPageVo.setUserCompanyStatus(true);
} }
if (orderPageVo.getStatus() == 4) { //未交车 if (orderPageVo.getStatus() == 4) { //未交车
// boolean flag = getTodayTime(orderPageVo.getOrderRentVehicleDetail().getStartTime());
// if (!flag) {
// return ObjectRestResponse.createFailedResult(3501, "今日不是交车日期");
// }
getDriverInfo(orderPageVo); getDriverInfo(orderPageVo);
} else if (orderPageVo.getStatus() >= 5 || orderPageVo.getStatus() == -1) {//出行中 已交车 } else if (orderPageVo.getStatus() >= 5 || orderPageVo.getStatus() == -1) {//出行中 已交车
getDriverInfo(orderPageVo); getDriverInfo(orderPageVo);
...@@ -249,7 +256,6 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> { ...@@ -249,7 +256,6 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> {
} }
if (orderPageVO.getOrderRentVehicleDetail().getEndTime() > nowTime.getMillis()) { if (orderPageVO.getOrderRentVehicleDetail().getEndTime() > nowTime.getMillis()) {
StringBuilder stringBuilder = new StringBuilder(); StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("实际消费超额");
//提前的天数, 当天就算使用一天 //提前的天数, 当天就算使用一天
int noUsedDay = getDaysBetweenDateTime(nowTime, endTime) - 1; int noUsedDay = getDaysBetweenDateTime(nowTime, endTime) - 1;
//退还未使用的天数,或者金额,扣除违约金,实际未使用天数的金额,最多3000元 //退还未使用的天数,或者金额,扣除违约金,实际未使用天数的金额,最多3000元
...@@ -258,8 +264,12 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> { ...@@ -258,8 +264,12 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> {
inProgressVO.setExtraAmount(new BigDecimal(200)); inProgressVO.setExtraAmount(new BigDecimal(200));
//InProgressVO inProgressVO = orderCalculateBiz.inProgressCalculate(orderPageVO, actualDay - noUsedDay); //InProgressVO inProgressVO = orderCalculateBiz.inProgressCalculate(orderPageVO, actualDay - noUsedDay);
if (inProgressVO != null) { if (inProgressVO != null) {
stringBuilder.append(inProgressVO.getExtraAmount()); //消费超额金
stringBuilder.append("元 + "); if(inProgressVO.getExtraAmount() != null) {
DedDetailDTO excessDedDetailDTO = new DedDetailDTO();
initDedDetail(excessDedDetailDTO, OrderViolateEnum.EXCESS.getCode(), inProgressVO.getExtraAmount(), stringBuilder);
orderPageVO.setExcessDedDetailDTO(excessDedDetailDTO);
}
stringBuilder.append("违约金( ¥"); stringBuilder.append("违约金( ¥");
stringBuilder.append(amount); stringBuilder.append(amount);
stringBuilder.append(" x "); stringBuilder.append(" x ");
...@@ -272,9 +282,6 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> { ...@@ -272,9 +282,6 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> {
//延期还车,结束时间小于当前时间 //延期还车,结束时间小于当前时间
} else if (orderPageVO.getOrderRentVehicleDetail().getEndTime() < nowTime.getMillis()) { } else if (orderPageVO.getOrderRentVehicleDetail().getEndTime() < nowTime.getMillis()) {
StringBuilder stringBuilder = new StringBuilder(); StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("实际消费超额");
stringBuilder.append(0);
stringBuilder.append("元 + ");
stringBuilder.append("违约金( ¥"); stringBuilder.append("违约金( ¥");
//延期的天数, 延期违约金是延期天数*200% //延期的天数, 延期违约金是延期天数*200%
int usedDay = getDaysBetweenDateTime(endTime, nowTime); int usedDay = getDaysBetweenDateTime(endTime, nowTime);
...@@ -299,6 +306,9 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> { ...@@ -299,6 +306,9 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> {
} else if (type == OrderViolateEnum.AFTER.getCode()) { } else if (type == OrderViolateEnum.AFTER.getCode()) {
dedDetailDTO.setType(OrderViolateEnum.AFTER.getCode()); dedDetailDTO.setType(OrderViolateEnum.AFTER.getCode());
detailName = "延期还车违约金"; detailName = "延期还车违约金";
} else if (type == OrderViolateEnum.EXCESS.getCode()) {
dedDetailDTO.setType(OrderViolateEnum.EXCESS.getCode());
detailName = "消费超额金";
} }
//900元+违约金(¥900x2天=)1800元 //900元+违约金(¥900x2天=)1800元
dedDetailDTO.setDeductions(stringBuilder.toString()); dedDetailDTO.setDeductions(stringBuilder.toString());
...@@ -415,6 +425,11 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> { ...@@ -415,6 +425,11 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> {
setVersion(baseOrder.getVersion()); setVersion(baseOrder.getVersion());
}}; }};
//订单账款类
OrderAccountDetail oad = new OrderAccountDetail();
oad.setOriginOrderAmount(baseOrder.getRealAmount());
oad.setOrderAmount(baseOrder.getRealAmount());
//如果是会员订单,则触发会员效益 //如果是会员订单,则触发会员效益
if (OrderTypeEnum.MEMBER.getCode().equals(baseOrder.getType())) { if (OrderTypeEnum.MEMBER.getCode().equals(baseOrder.getType())) {
//直接设置订单完成 //直接设置订单完成
...@@ -440,6 +455,11 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> { ...@@ -440,6 +455,11 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> {
orvd = orderRentVehicleBiz.selectOne(new OrderRentVehicleDetail() {{ orvd = orderRentVehicleBiz.selectOne(new OrderRentVehicleDetail() {{
setOrderId(baseOrder.getId()); setOrderId(baseOrder.getId());
}}); }});
//账款设置押金
oad.setOriginDepositAmount(orvd.getDeposit());
oad.setDepositAmount(orvd.getDeposit());
//车辆预定审核通过 //车辆预定审核通过
RestResponse<Integer> result = vehicleFeign.rentProveVehicleBooking(orvd.getBookRecordId()); RestResponse<Integer> result = vehicleFeign.rentProveVehicleBooking(orvd.getBookRecordId());
...@@ -457,8 +477,11 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> { ...@@ -457,8 +477,11 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> {
//站点总人数添加 //站点总人数添加
tourFeign.updateTourGoodPersonNum(otd.getVerificationId(), TourFeign.TOTAL_PERSON, otd.getTotalNumber()); tourFeign.updateTourGoodPersonNum(otd.getVerificationId(), TourFeign.TOTAL_PERSON, otd.getTotalNumber());
} }
try { try {
this.updateSelectiveByIdRe(updateOrder); this.updateSelectiveByIdRe(updateOrder);
//记录订单账款记录
Integer flag = orderAccountBiz.addOrderAccount(baseOrder.getId(), "订单支付", oad.getOriginOrderAmount().add(oad.getOriginDepositAmount()), oad.getOrderAmount().add(oad.getDepositAmount()), tradeNo, AccountTypeEnum.IN_ORDER_PAY.getCode(), JSONUtil.toJsonStr(oad));
} finally { } finally {
AppUserDTO appUserDTO = userFeign.userDetailById(baseOrder.getUserId()).getData(); AppUserDTO appUserDTO = userFeign.userDetailById(baseOrder.getUserId()).getData();
......
...@@ -15,7 +15,6 @@ import com.xxfc.platform.order.entity.*; ...@@ -15,7 +15,6 @@ import com.xxfc.platform.order.entity.*;
import com.xxfc.platform.order.pojo.DedDetailDTO; import com.xxfc.platform.order.pojo.DedDetailDTO;
import com.xxfc.platform.order.pojo.account.OrderAccountDeduction; import com.xxfc.platform.order.pojo.account.OrderAccountDeduction;
import com.xxfc.platform.order.pojo.account.OrderAccountDetail; 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.mq.OrderMQDTO;
import com.xxfc.platform.universal.constant.DictionaryKey; import com.xxfc.platform.universal.constant.DictionaryKey;
import com.xxfc.platform.universal.entity.Dictionary; import com.xxfc.platform.universal.entity.Dictionary;
...@@ -117,7 +116,7 @@ public class OrderAccountBiz extends BaseBiz<OrderAccountMapper,OrderAccount> { ...@@ -117,7 +116,7 @@ public class OrderAccountBiz extends BaseBiz<OrderAccountMapper,OrderAccount> {
refundAmount = refundAmount.add(refundAmountDeposit); refundAmount = refundAmount.add(refundAmountDeposit);
//退款子流程: 订单基础,退款描述, 款金额 //退款子流程: 订单基础,退款描述, 款金额
refundSubProcess(baseOrder, refundDescBuilder.toString(), originalRefundAmount, refundAmount, RefundTypeEnum.ORDER_FUND.getCode(), RefundStatusEnum.ALL.getCode(), oad); refundSubProcess(baseOrder, refundDescBuilder.toString(), originalRefundAmount, refundAmount, AccountTypeEnum.OUT_ORDER_FUND.getCode(), RefundStatusEnum.ALL.getCode(), oad);
return refundAmount; return refundAmount;
} }
...@@ -146,7 +145,7 @@ public class OrderAccountBiz extends BaseBiz<OrderAccountMapper,OrderAccount> { ...@@ -146,7 +145,7 @@ public class OrderAccountBiz extends BaseBiz<OrderAccountMapper,OrderAccount> {
} }
//记录订单退款记录 //记录订单退款记录
Integer flag = addOrderRefund(baseOrder.getId(), refundDesc, originalRefundAmount, refundAmount, refundTradeNo, refundType, JSONUtil.toJsonStr(oad)); Integer flag = addOrderAccount(baseOrder.getId(), refundDesc, originalRefundAmount, refundAmount, refundTradeNo, refundType, JSONUtil.toJsonStr(oad));
//更新订单的退款状态和退款时间 //更新订单的退款状态和退款时间
BaseOrder updateBaseOrder = new BaseOrder(); BaseOrder updateBaseOrder = new BaseOrder();
...@@ -218,7 +217,7 @@ public class OrderAccountBiz extends BaseBiz<OrderAccountMapper,OrderAccount> { ...@@ -218,7 +217,7 @@ public class OrderAccountBiz extends BaseBiz<OrderAccountMapper,OrderAccount> {
* @param accountAmount * @param accountAmount
* @param tradeNo * @param tradeNo
*/ */
private Integer addOrderRefund(Integer orderId, String accountDesc, BigDecimal originalAmount, BigDecimal accountAmount, String tradeNo, Integer accountType, String detail) { public Integer addOrderAccount(Integer orderId, String accountDesc, BigDecimal originalAmount, BigDecimal accountAmount, String tradeNo, Integer accountType, String detail) {
//如果返回的流水为空,则当做失败 //如果返回的流水为空,则当做失败
Integer refundStatus = SYS_TRUE; Integer refundStatus = SYS_TRUE;
if(StrUtil.isBlank(tradeNo)) { if(StrUtil.isBlank(tradeNo)) {
...@@ -244,9 +243,9 @@ public class OrderAccountBiz extends BaseBiz<OrderAccountMapper,OrderAccount> { ...@@ -244,9 +243,9 @@ public class OrderAccountBiz extends BaseBiz<OrderAccountMapper,OrderAccount> {
return refundStatus; return refundStatus;
} }
public void refundTrigger(BaseOrder baseOrder, OrderRentVehicleDetail orvd, BigDecimal residueAmount, BigDecimal originalRefundAmount, BigDecimal refundAmont, String refundDesc, Integer refundStatus, RefundTypeEnum refundTypeEnum, OrderAccountDetail oad) { public void refundTrigger(BaseOrder baseOrder, OrderRentVehicleDetail orvd, BigDecimal residueAmount, BigDecimal originalRefundAmount, BigDecimal refundAmont, String refundDesc, Integer refundStatus, AccountTypeEnum accountTypeEnum, OrderAccountDetail oad) {
//退款子流程: 订单基础,退款描述,退款金额 //退款子流程: 订单基础,退款描述,退款金额
refundSubProcess(baseOrder, refundDesc, originalRefundAmount, refundAmont, refundTypeEnum.getCode(), refundStatus, oad); refundSubProcess(baseOrder, refundDesc, originalRefundAmount, refundAmont, accountTypeEnum.getCode(), refundStatus, oad);
//设置剩余没有返还的钱 //设置剩余没有返还的钱
orderRentVehicleBiz.updateSelectiveById(new OrderRentVehicleDetail(){{ orderRentVehicleBiz.updateSelectiveById(new OrderRentVehicleDetail(){{
setId(orvd.getId()); setId(orvd.getId());
...@@ -294,18 +293,31 @@ public class OrderAccountBiz extends BaseBiz<OrderAccountMapper,OrderAccount> { ...@@ -294,18 +293,31 @@ public class OrderAccountBiz extends BaseBiz<OrderAccountMapper,OrderAccount> {
} }
OrderAccountDetail oad = new OrderAccountDetail(); OrderAccountDetail oad = new OrderAccountDetail();
InProgressVO inProgressVO = orderCalculateBiz.inProgressCalculate(orderMQDTO, orderItem, orderMQDTO.getOrderRentVehicleDetail().getFreeDays() orderCalculateBiz.calculateOrderComplete(orderMQDTO, orderMQDTO.getOrderRentVehicleDetail(), oad, orderItem, orderMQDTO.getOrderRentVehicleDetail().getUsedDay());
, orderMQDTO.getOrderRentVehicleDetail().getUsedDay(), oad);
//还车扣除款 剩余的 钱,再减去违章预备金 //还车扣除款 剩余的 钱,再减去违章预备金
oad.getDeductions().add(new OrderAccountDeduction(){{ oad.getDeductions().add(
setOrigin(OrderAccountDeduction.ORIGIN_DEPOSIT); initDeduction(illegalReserve, "违章保证金", DeductionTypeEnum.VIOLATE_TRAFFIC_KEEP, OrderAccountDeduction.ORIGIN_DEPOSIT)
setAmount(illegalReserve); );
setType(DeductionTypeEnum.VIOLATE_TRAFFIC_KEEP.getCode()); oad.getDeductions().add(
}}); initDeduction(crosstown.getDeductionCost(), "定损赔偿金", DeductionTypeEnum.DAMAGES, OrderAccountDeduction.ORIGIN_DEPOSIT)
);
//剩余押金 -
oad.setDepositAmount(oad.getDepositAmount().subtract(illegalReserve).subtract(crosstown.getDeductionCost()));
handleCrosstownDetail(crosstown, oad);
BigDecimal refundAmont = crosstown.getRestDeposit().subtract(illegalReserve); BigDecimal refundAmont = crosstown.getRestDeposit().subtract(illegalReserve);
BigDecimal originalRefundAmount = crosstown.getRestDeposit().add(crosstown.getDeductionCost()).subtract(illegalReserve); BigDecimal originalRefundAmount = crosstown.getRestDeposit().add(crosstown.getDeductionCost()).subtract(illegalReserve);
String refundDesc = "退还押金:"+ refundAmont.toString()+ "(已扣除 违章预备金:"+ illegalReserve.toString(); String refundDesc = "退还押金:"+ refundAmont.toString()+ "(已扣除 违章预备金:"+ illegalReserve.toString();
refundDesc = handleDed(crosstown, refundDesc);
refundDesc += ")";
refundTrigger(orderMQDTO, orderMQDTO.getOrderRentVehicleDetail(), illegalReserve, originalRefundAmount, refundAmont, refundDesc, RefundStatusEnum.RESIDUE_ILLEGAL.getCode(), AccountTypeEnum.OUT_PART_DEPOSIT, oad);
orderDepositRefundRecordBiz.completeRecordStatus(crosstown.getId(), depositRefundRecordStatus);
orderMsgBiz.handelMsgDeposit(orderMQDTO.getOrderRentVehicleDetail(), orderMQDTO, userFeign.userDetailById(orderMQDTO.getUserId()).getData());
}
}
private String handleDed(OrderVehicleCrosstown crosstown, String refundDesc) {
try{ try{
if(null != crosstown.getDedDetail()) { if(null != crosstown.getDedDetail()) {
List<DedDetailDTO> dddList = JSONUtil.toList(JSONUtil.parseArray(crosstown.getDedDetail()), DedDetailDTO.class); List<DedDetailDTO> dddList = JSONUtil.toList(JSONUtil.parseArray(crosstown.getDedDetail()), DedDetailDTO.class);
...@@ -316,14 +328,29 @@ public class OrderAccountBiz extends BaseBiz<OrderAccountMapper,OrderAccount> { ...@@ -316,14 +328,29 @@ public class OrderAccountBiz extends BaseBiz<OrderAccountMapper,OrderAccount> {
}catch (Exception e) { }catch (Exception e) {
log.error("crosstown.getDedDetail() crosstown id :"+crosstown.getId() +" 转换失败"); log.error("crosstown.getDedDetail() crosstown id :"+crosstown.getId() +" 转换失败");
} }
refundDesc += ")"; return refundDesc;
refundTrigger(orderMQDTO, orderMQDTO.getOrderRentVehicleDetail(), illegalReserve, originalRefundAmount, refundAmont, refundDesc, RefundStatusEnum.RESIDUE_ILLEGAL.getCode(), RefundTypeEnum.PART_DEPOSIT, null); }
// DepositRefundRecord depositRefundRecord = orderDepositRefundRecordBiz.findByCrossIdAndStatus(crosstown.getId(), depositRefundRecordStatus); private void handleCrosstownDetail(OrderVehicleCrosstown crosstown, OrderAccountDetail oad) {
// depositRefundRecord.setIscomplete(Boolean.TRUE); try{
// orderDepositRefundRecordBiz.updateSelectiveById(depositRefundRecord); if(null != crosstown.getViolateDetail()) {
orderDepositRefundRecordBiz.completeRecordStatus(crosstown.getId(), depositRefundRecordStatus); List<DedDetailDTO> dddList = JSONUtil.toList(JSONUtil.parseArray(crosstown.getViolateDetail()), DedDetailDTO.class);
orderMsgBiz.handelMsgDeposit(orderMQDTO.getOrderRentVehicleDetail(), orderMQDTO, userFeign.userDetailById(orderMQDTO.getUserId()).getData()); for(DedDetailDTO vio : dddList) {
if(OrderViolateEnum.BEFORE.getCode().equals(vio.getType())) {
for(OrderAccountDeduction deduction : oad.getDeductions()) {
if(DeductionTypeEnum.VIOLATE_ADVANCE.getCode().equals(deduction.getType())) {
deduction.setName(vio.getDeductions());
BigDecimal diff = vio.getCost().subtract(deduction.getAmount());
//修改归还押金金额
oad.setDepositAmount(oad.getDepositAmount().subtract(diff));
deduction.setAmount(vio.getCost());
}
}
}
}
}
}catch (Exception e) {
log.error("crosstown.getViolateDetail() crosstown id :"+crosstown.getId() +" 转换失败");
} }
} }
} }
\ No newline at end of file
...@@ -258,6 +258,16 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp ...@@ -258,6 +258,16 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
} }
} }
} }
if (StringUtils.isNotBlank(orderVehicleCrosstownDto.getViolateDetail())) {
JSONArray jsonArray = JSONArray.parseArray(orderVehicleCrosstownDto.getDedDetail());
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject jsonObject = JSONObject.parseObject(jsonArray.get(i).toString());
if (jsonObject != null) {
cost += Double.parseDouble(jsonObject.getString("cost"));
}
}
}
orderVehicleCrosstownDto.getViolateDetail();
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);
//出车成功后修改订单状态 //出车成功后修改订单状态
List<OrderVehicleCrosstownDto> oldValue = orderVehicleCrosstownBiz.selectByOrderId(orderVehicleCrosstownDto); List<OrderVehicleCrosstownDto> oldValue = orderVehicleCrosstownBiz.selectByOrderId(orderVehicleCrosstownDto);
......
...@@ -126,7 +126,7 @@ public class OrderCalculateBiz { ...@@ -126,7 +126,7 @@ public class OrderCalculateBiz {
residueDays = 2; residueDays = 2;
} }
inProgressVO.setViolateAmount(orderItem.getUnitPrice().multiply(new BigDecimal((residueDays + "")))); inProgressVO.setViolateAmount(orderItem.getUnitPrice().multiply(new BigDecimal((residueDays + ""))));
OrderAccountDeduction violateDeduction = orderAccountBiz.initDeduction(inProgressVO.getViolateAmount(), "违约金", DeductionTypeEnum.VIOLATE_CANCEL, OrderAccountDeduction.ORIGIN_DEPOSIT); OrderAccountDeduction violateDeduction = orderAccountBiz.initDeduction(inProgressVO.getViolateAmount(), "违约金", DeductionTypeEnum.VIOLATE_ADVANCE, OrderAccountDeduction.ORIGIN_DEPOSIT);
oad.getDeductions().add(violateDeduction); oad.getDeductions().add(violateDeduction);
}else if(residueDays < 0){ }else if(residueDays < 0){
//如果订单 出发中 或者 已完成 或者定损中 //如果订单 出发中 或者 已完成 或者定损中
...@@ -139,7 +139,7 @@ public class OrderCalculateBiz { ...@@ -139,7 +139,7 @@ public class OrderCalculateBiz {
} }
//超过的天数 * 200% * 单价 //超过的天数 * 200% * 单价
inProgressVO.setViolateAmount(orderItem.getUnitPrice().multiply(new BigDecimal(2+ "")).multiply(new BigDecimal((overDays + "")))); inProgressVO.setViolateAmount(orderItem.getUnitPrice().multiply(new BigDecimal(2+ "")).multiply(new BigDecimal((overDays + ""))));
OrderAccountDeduction violateDeduction = orderAccountBiz.initDeduction(inProgressVO.getViolateAmount(), "违约金", DeductionTypeEnum.VIOLATE_CANCEL, OrderAccountDeduction.ORIGIN_DEPOSIT); OrderAccountDeduction violateDeduction = orderAccountBiz.initDeduction(inProgressVO.getViolateAmount(), "违约金", DeductionTypeEnum.VIOLATE_DELAY, OrderAccountDeduction.ORIGIN_DEPOSIT);
oad.getDeductions().add(violateDeduction); oad.getDeductions().add(violateDeduction);
} }
} }
...@@ -155,4 +155,13 @@ public class OrderCalculateBiz { ...@@ -155,4 +155,13 @@ public class OrderCalculateBiz {
Integer freeDays = (null == orderItem.getCutNum())?0 :orderItem.getCutNum(); Integer freeDays = (null == orderItem.getCutNum())?0 :orderItem.getCutNum();
return inProgressCalculate(baseOrder, orderItem, freeDays, useDays, null); return inProgressCalculate(baseOrder, orderItem, freeDays, useDays, null);
} }
public InProgressVO calculateOrderComplete(BaseOrder baseOrder, OrderRentVehicleDetail orvd, OrderAccountDetail oad, OrderItem orderItem, Integer useDays) {
InProgressVO inProgressVO = inProgressCalculate(baseOrder, orderItem, orvd.getFreeDays(), useDays, oad);
oad.setDepositAmount(orvd.getDeposit().subtract(inProgressVO.getExtraAmount()).subtract(inProgressVO.getViolateAmount()));
oad.setOrderAmount(inProgressVO.getRefundOrderAmount());
oad.setOriginDepositAmount(orvd.getDeposit());
oad.setOriginOrderAmount(baseOrder.getRealAmount());
return inProgressVO;
}
} }
\ No newline at end of file
package com.xxfc.platform.order.biz.inner; package com.xxfc.platform.order.biz.inner;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.github.wxiaoqi.security.admin.feign.UserFeign; import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO; import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.common.exception.BaseException; import com.github.wxiaoqi.security.common.exception.BaseException;
...@@ -113,7 +115,7 @@ public class OrderCancelBiz { ...@@ -113,7 +115,7 @@ public class OrderCancelBiz {
setVersion(baseOrder.getVersion()); setVersion(baseOrder.getVersion());
}}; }};
BaseOrder hasUpdateOrder = baseOrderBiz.updateSelectiveByIdReT(updateOrder); BaseOrder hasUpdateOrder = baseOrderBiz.updateSelectiveByIdReT(updateOrder);
InProgressVO inProgressVO = new InProgressVO(); InProgressVO inProgressVO = null;
OrderAccountDetail oad = new OrderAccountDetail(); OrderAccountDetail oad = new OrderAccountDetail();
//触发退款流程 //触发退款流程
...@@ -145,12 +147,10 @@ public class OrderCancelBiz { ...@@ -145,12 +147,10 @@ public class OrderCancelBiz {
//计算:使用天数 当前时间 - 开始时间的0时0分0秒 //计算:使用天数 当前时间 - 开始时间的0时0分0秒
Long useTimeLag = System.currentTimeMillis() - beginOfStartDay; Long useTimeLag = System.currentTimeMillis() - beginOfStartDay;
Integer useDays = new BigDecimal(useTimeLag + "").divide(new BigDecimal((24 * 60 * 60 * 1000)+ "")).setScale(0, BigDecimal.ROUND_UP).intValue(); Integer useDays = new BigDecimal(useTimeLag + "").divide(new BigDecimal((24 * 60 * 60 * 1000)+ "")).setScale(0, BigDecimal.ROUND_UP).intValue();
inProgressVO = orderCalculateBiz.inProgressCalculate(baseOrder, orderItem, freeDays, useDays, oad); inProgressVO = orderCalculateBiz.calculateOrderComplete(baseOrder, orvd, oad, orderItem, useDays);
oad.setDepositAmount(orvd.getDeposit().subtract(inProgressVO.getExtraAmount()).subtract(inProgressVO.getViolateAmount()));
oad.setOrderAmount(inProgressVO.getRefundOrderAmount());
//结合 //结合
//退款子流程: 订单基础,退款描述,退款金额 //退款子流程: 订单基础,退款描述,退款金额
orderAccountBiz.refundSubProcess(baseOrder, "", baseOrder.getRealAmount().subtract(orvd.getDeposit()), oad.getDepositAmount().add(oad.getOrderAmount()), RefundTypeEnum.ORDER_FUND.getCode(), RefundStatusEnum.ALL.getCode(), oad); orderAccountBiz.refundSubProcess(baseOrder, "", baseOrder.getRealAmount().subtract(orvd.getDeposit()), oad.getDepositAmount().add(oad.getOrderAmount()), AccountTypeEnum.OUT_ORDER_FUND.getCode(), RefundStatusEnum.ALL.getCode(), oad);
}else { }else {
//没到出车时间 //没到出车时间
...@@ -164,19 +164,10 @@ public class OrderCancelBiz { ...@@ -164,19 +164,10 @@ public class OrderCancelBiz {
freeDayAmount = freeDayAmount; freeDayAmount = freeDayAmount;
} }
} }
//退款流程
orderAccountBiz.rentRefundProcessCancel(hasUpdateOrder, orderItem.getRealAmount(), timeLag, APP_ORDER+ "_"+ RENT_REFUND, orvd.getDeposit(), freeDayAmount); orderAccountBiz.rentRefundProcessCancel(hasUpdateOrder, orderItem.getRealAmount(), timeLag, APP_ORDER+ "_"+ RENT_REFUND, orvd.getDeposit(), freeDayAmount);
} }
//退款流程
//退订单款
// orderRefundBiz.rentRefundProcess(hasUpdateOrder, timeLag, APP_ORDER+ "_"+ RENT_REFUND);
//
// //退押金
// orderRefundBiz.rentRefundDepositProcess(hasUpdateOrder, orvd.getDeposit(), timeLag, APP_ORDER+ "_"+ RENT_REFUND, freeDayAmount);
//
// orderAccountBiz.rentRefundProcessCancel(hasUpdateOrder, orderItem, timeLag, APP_ORDER+ "_"+ RENT_REFUND, orvd.getDeposit(), freeDayAmount);freeDayAmount
//已付款的取消订单发送消息 //已付款的取消订单发送消息
try { try {
AppUserDTO appUserDTO = userFeign.userDetailById(baseOrder.getUserId()).getData(); AppUserDTO appUserDTO = userFeign.userDetailById(baseOrder.getUserId()).getData();
...@@ -233,11 +224,20 @@ public class OrderCancelBiz { ...@@ -233,11 +224,20 @@ public class OrderCancelBiz {
//取消租车免费天数使用 //取消租车免费天数使用
if(null != orvd.getFreeDays() && orvd.getFreeDays() > 0) { if(null != orvd.getFreeDays() && orvd.getFreeDays() > 0) {
int result = userFeign.memberDays(baseOrder.getUserId(), orvd.getFreeDays(), UserFeign.MEMBER_DAYS_WITHDRAW); Integer freeDays = (null == inProgressVO) ? orvd.getFreeDays(): inProgressVO.getBackFreeDays();
int result = userFeign.memberDays(baseOrder.getUserId(), freeDays, UserFeign.MEMBER_DAYS_WITHDRAW);
if(result < 0) { if(result < 0) {
throw new BaseException(ResultCode.FAILED_CODE); throw new BaseException(ResultCode.FAILED_CODE);
} }
} }
//返还优惠券
if(StrUtil.isNotBlank(baseOrder.getCouponTickerNos())) {
List<String> backCoupons = (null == inProgressVO)? inProgressVO.getBackCoupons(): Convert.convert(List.class, baseOrder.getCouponTickerNos().split(","));
for(String backCoupon : backCoupons) {
activityFeign.cancelUse(backCoupon);
}
}
}else if(OrderTypeEnum.TOUR.getCode().equals(baseOrder.getType())) { }else if(OrderTypeEnum.TOUR.getCode().equals(baseOrder.getType())) {
otd = orderTourDetailBiz.selectOne(new OrderTourDetail(){{ otd = orderTourDetailBiz.selectOne(new OrderTourDetail(){{
setOrderId(baseOrder.getId()); setOrderId(baseOrder.getId());
......
...@@ -125,7 +125,7 @@ public class RentDepositJobHandler extends IJobHandler { ...@@ -125,7 +125,7 @@ public class RentDepositJobHandler extends IJobHandler {
refundDesc += refundAmont.toString(); refundDesc += refundAmont.toString();
} }
OrderAccountDetail oad = new OrderAccountDetail(); OrderAccountDetail oad = new OrderAccountDetail();
orderAccountBiz.refundTrigger(baseOrder, orvd, BigDecimal.ZERO, orvd.getReturnPayResidue(), refundAmont, refundDesc, RefundStatusEnum.REFUND_DEPOSIT.getCode(), RefundTypeEnum.RESIDUE_DEPOSIT, oad); orderAccountBiz.refundTrigger(baseOrder, orvd, BigDecimal.ZERO, orvd.getReturnPayResidue(), refundAmont, refundDesc, RefundStatusEnum.REFUND_DEPOSIT.getCode(), AccountTypeEnum.OUT_RESIDUE_DEPOSIT, oad);
//orderRefundBiz.refundTrigger(baseOrder, orvd, BigDecimal.ZERO, orvd.getReturnPayResidue(), refundAmont, refundDesc, RefundStatusEnum.REFUND_DEPOSIT.getCode(), RefundTypeEnum.RESIDUE_DEPOSIT); //orderRefundBiz.refundTrigger(baseOrder, orvd, BigDecimal.ZERO, orvd.getReturnPayResidue(), refundAmont, refundDesc, RefundStatusEnum.REFUND_DEPOSIT.getCode(), RefundTypeEnum.RESIDUE_DEPOSIT);
orderDepositRefundRecordBiz.completeRecordStatus(crosstown.getId(), DepositRefundStatus.VIOLATIONARRIVAL); orderDepositRefundRecordBiz.completeRecordStatus(crosstown.getId(), DepositRefundStatus.VIOLATIONARRIVAL);
orderMsgBiz.handelMsgDeposit(orvd, baseOrder, userFeign.userDetailById(baseOrder.getUserId()).getData()); orderMsgBiz.handelMsgDeposit(orvd, baseOrder, userFeign.userDetailById(baseOrder.getUserId()).getData());
......
...@@ -185,7 +185,7 @@ ...@@ -185,7 +185,7 @@
</foreach> </foreach>
</if> </if>
<if test="status != null and status == -1"> <if test="status != null and status == -1">
AND b.status in (6,-1) AND b.status = -1
and b.refund_status in (0,2) and b.refund_status in (0,2)
</if> </if>
<if test="status != null and status != -1"> <if test="status != null and status != -1">
......
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