Commit 32b01e03 authored by 周健威's avatar 周健威

修改定时还押金,添加消费记录和购买记录接口

parent 351ac7cd
package com.xxfc.platform.order.contant.enumerate;
import java.util.HashMap;
import java.util.Map;
public enum DiscountsEnum {
NONE(0, "没有优惠"),
MEMBER_RIGHT(1, "会员权益"),
COUPON(2, "优惠券"),
MEMBER_COUPON(3, "会员权益+ 优惠券"),
;
/**
* 编码
*/
private Integer code;
/**
* 类型描述
*/
private String desc;
private static Map<Integer,String> codeAndDesc = new HashMap<Integer, String>();
DiscountsEnum(Integer code, String desc){
this.code=code;
this.desc=desc;
}
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 static Boolean exists(Integer code){
return codeAndDesc.containsKey(code);
}
}
\ No newline at end of file
...@@ -47,7 +47,7 @@ public class BaseOrder implements Serializable { ...@@ -47,7 +47,7 @@ public class BaseOrder implements Serializable {
* 订单类型 1--租车;2--旅游 * 订单类型 1--租车;2--旅游
*/ */
@Column(name = "type") @Column(name = "type")
@ApiModelProperty(value = "订单类型 1--租车;2--旅游") @ApiModelProperty(value = "订单类型 1--租车;2--旅游; 3--会员订单")
private Integer type; private Integer type;
/** /**
...@@ -190,12 +190,26 @@ public class BaseOrder implements Serializable { ...@@ -190,12 +190,26 @@ public class BaseOrder implements Serializable {
@ApiModelProperty(value = "退款时间") @ApiModelProperty(value = "退款时间")
private Long refundTime; private Long refundTime;
/**
* 退款状态
*/
@Column(name = "refund_status")
@ApiModelProperty(value = "退款的状态 0--未退还;1--已退还所有钱;2--已退还部分押金(保留违章预备金);3--已退还所有押金(扣除该扣除的)")
private Integer refundStatus;
/** /**
* 是否有优惠 * 是否有优惠
*/ */
@Column(name = "has_discount") @Column(name = "has_discount")
@ApiModelProperty(value = "是否有优惠") @ApiModelProperty(value = "是否有优惠 0--无优惠;1--有优惠")
private Long hasDiscount; private Integer hasDiscount;
/**
* 是否有优惠
*/
@Column(name = "has_member_right")
@ApiModelProperty(value = "是否有使用会员权益")
private Integer hasMemberRight;
/** /**
* 是否已支付 * 是否已支付
......
...@@ -273,13 +273,6 @@ public class OrderRentVehicleDetail implements Serializable { ...@@ -273,13 +273,6 @@ public class OrderRentVehicleDetail implements Serializable {
@ApiModelProperty(value = "出发公司区域id") @ApiModelProperty(value = "出发公司区域id")
private Integer startZoneId; private Integer startZoneId;
/**
* 退还钱(押金)的状态 0--未退还;1--已退还所有钱;2--已退还部分押金(保留违章预备金);3--已退还所有押金(扣除该扣除的)
*/
@Column(name = "return_pay_status")
@ApiModelProperty(value = "退还钱(押金)的状态 0--未退还;1--已退还所有钱;2--已退还部分押金(保留违章预备金);3--已退还所有押金(扣除该扣除的)")
private Integer returnPayStatus;
/** /**
* 剩余需要退还的钱(押金) * 剩余需要退还的钱(押金)
*/ */
......
package com.xxfc.platform.order.biz; package com.xxfc.platform.order.biz;
import ch.qos.logback.core.rolling.TimeBasedFileNamingAndTriggeringPolicyBase;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.github.wxiaoqi.security.admin.dto.UserMemberDTO; import com.github.wxiaoqi.security.admin.dto.UserMemberDTO;
import com.github.wxiaoqi.security.admin.feign.UserFeign; import com.github.wxiaoqi.security.admin.feign.UserFeign;
...@@ -34,8 +35,7 @@ import java.util.*; ...@@ -34,8 +35,7 @@ import java.util.*;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_FALSE; import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_FALSE;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_TRUE; import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_TRUE;
import static com.xxfc.platform.universal.constant.DictionaryKey.APP_ORDER; import static com.xxfc.platform.universal.constant.DictionaryKey.*;
import static com.xxfc.platform.universal.constant.DictionaryKey.RENT_REFUND;
/** /**
* *
...@@ -200,7 +200,7 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> { ...@@ -200,7 +200,7 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
setOrderId(baseOrder.getId()); setOrderId(baseOrder.getId());
}}); }});
//退款流程 //退款流程
rentRefundProcess(baseOrder, otd.getStartTime(), APP_ORDER+ "_"+ RENT_REFUND); rentRefundProcess(baseOrder, otd.getStartTime(), APP_ORDER+ "_"+ TOUR_REFUND);
} }
} }
...@@ -240,28 +240,39 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> { ...@@ -240,28 +240,39 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
} }
} }
/**
* 租车退款流程(不含押金的通用方法)
* @param baseOrder
* @param startTime
* @param dicParentKey
*/
private void rentRefundProcess(BaseOrder baseOrder, Long startTime, String dicParentKey){ private void rentRefundProcess(BaseOrder baseOrder, Long startTime, String dicParentKey){
rentRefundProcess(baseOrder, BigDecimal.ZERO, startTime, dicParentKey); rentRefundProcess(baseOrder, BigDecimal.ZERO, startTime, dicParentKey);
} }
/**
* 租车退款流程(含押金)
* @param baseOrder
* @param depositAmont
* @param startTime
* @param dicParentKey
*/
private void rentRefundProcess(BaseOrder baseOrder, BigDecimal depositAmont, Long startTime, String dicParentKey) { private void rentRefundProcess(BaseOrder baseOrder, BigDecimal depositAmont, Long startTime, String dicParentKey) {
//计算退款金额 //计算退款金额
// 1、押金 + 租金(规则扣除) // 1、押金 + 租金(规则扣除)
BigDecimal refundGoodsAmount = baseOrder.getGoodsAmount(); BigDecimal refundGoodsAmount = baseOrder.getGoodsAmount();
String refundDesc = "取消订单退款:"; String refundDesc = "取消订单退款:";
BigDecimal refundGoodsAmont = baseOrder.getGoodsAmount(); BigDecimal refundGoodsAmont = baseOrder.getGoodsAmount();
BigDecimal refundAmont = BigDecimal.ZERO;
if(null == depositAmont) { if(null == depositAmont) {
depositAmont = BigDecimal.ZERO; depositAmont = BigDecimal.ZERO;
} }
//根据时间处理goodsAmount //根据时间处理goodsAmount
//获取出发时间 到现在 距离时间 //获取出发时间 到现在 距离时间
//LocalDateTime StartDay = LocalDateTime.ofInstant(Instant.ofEpochMilli(orvd.getStartTime()), ZoneOffset.ofHours(8));
Long timeLag = startTime - System.currentTimeMillis(); Long timeLag = startTime - System.currentTimeMillis();
Integer hourLag = Long.valueOf(timeLag/(1000L * 60L * 60L)).intValue(); Integer hourLag = Long.valueOf(timeLag/(1000L * 60L * 60L)).intValue();
Map<String, com.xxfc.platform.universal.entity.Dictionary> dictionaryMap = thirdFeign.dictionaryGetAll4Map().getData(); Map<String, com.xxfc.platform.universal.entity.Dictionary> dictionaryMap = thirdFeign.dictionaryGetAll4Map().getData();
//APP_ORDER+ "_"+ RENT_REFUND
Set<com.xxfc.platform.universal.entity.Dictionary> rentRefunds = dictionaryMap.get(dicParentKey).getChildrens(); Set<com.xxfc.platform.universal.entity.Dictionary> rentRefunds = dictionaryMap.get(dicParentKey).getChildrens();
for(com.xxfc.platform.universal.entity.Dictionary dic : rentRefunds) { for(com.xxfc.platform.universal.entity.Dictionary dic : rentRefunds) {
...@@ -276,6 +287,7 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> { ...@@ -276,6 +287,7 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
//符合范围 //符合范围
if(IntervalUtil.staticIsInTheInterval(hourLag.toString(), names[0])){ if(IntervalUtil.staticIsInTheInterval(hourLag.toString(), names[0])){
refundGoodsAmont = new BigDecimal(((Double) IntervalUtil.evaluate(dic.getDetail(), new MapContext(){{ refundGoodsAmont = new BigDecimal(((Double) IntervalUtil.evaluate(dic.getDetail(), new MapContext(){{
//ga : goodsAmount
set("ga", baseOrder.getGoodsAmount()); set("ga", baseOrder.getGoodsAmount());
}})).toString()); }})).toString());
refundDesc = names[1]+ ","+ refundDesc; refundDesc = names[1]+ ","+ refundDesc;
...@@ -283,8 +295,19 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> { ...@@ -283,8 +295,19 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
} }
} }
refundAmont = depositAmont.add(refundGoodsAmont); //退款金额
BigDecimal refundAmont = depositAmont.add(refundGoodsAmont);
//退款子流程: 订单基础,退款描述,退款金额
refundSubProcess(baseOrder, refundDesc, refundAmont, RefundTypeEnum.RentVehicle.getCode());
}
/**
* 退款子流程
* @param baseOrder
* @param refundDesc
* @param refundAmont
*/
private void refundSubProcess(BaseOrder baseOrder, String refundDesc, BigDecimal refundAmont, Integer refundType) {
OrderRefundVo orv = new OrderRefundVo(){{ OrderRefundVo orv = new OrderRefundVo(){{
setAmount(baseOrder.getRealAmount().multiply(new BigDecimal("100")).intValue()); setAmount(baseOrder.getRealAmount().multiply(new BigDecimal("100")).intValue());
setOrderNo(baseOrder.getNo()); setOrderNo(baseOrder.getNo());
...@@ -294,10 +317,17 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> { ...@@ -294,10 +317,17 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
String refundTradeNo = thirdFeign.refund(orv).getData(); String refundTradeNo = thirdFeign.refund(orv).getData();
//记录订单退款记录 //记录订单退款记录
addOrderRefund(baseOrder.getId(), refundDesc, refundAmont, refundTradeNo); addOrderRefund(baseOrder.getId(), refundDesc, refundAmont, refundTradeNo, refundType);
} }
private void addOrderRefund(Integer orderId, String refundDesc, BigDecimal refundAmont, String refundTradeNo) { /**
* 记录订单退款记录
* @param orderId
* @param refundDesc
* @param refundAmont
* @param refundTradeNo
*/
private void addOrderRefund(Integer orderId, String refundDesc, BigDecimal refundAmont, String refundTradeNo, Integer refundType) {
//如果返回的流水为空,则当做失败 //如果返回的流水为空,则当做失败
Integer refundStatus = SYS_TRUE; Integer refundStatus = SYS_TRUE;
if(StrUtil.isBlank(refundTradeNo)) { if(StrUtil.isBlank(refundTradeNo)) {
...@@ -314,6 +344,7 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> { ...@@ -314,6 +344,7 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
orderRefund.setRefundAmount(refundAmont); orderRefund.setRefundAmount(refundAmont);
orderRefund.setRefundDesc(refundDesc); orderRefund.setRefundDesc(refundDesc);
orderRefund.setRefundStatus(refundStatus); orderRefund.setRefundStatus(refundStatus);
orderRefund.setRefundType(refundType);
orderRefundBiz.insertSelective(orderRefund); orderRefundBiz.insertSelective(orderRefund);
} }
...@@ -380,4 +411,12 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> { ...@@ -380,4 +411,12 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
log.error(" order has payed , orderNo:{}, tradeNo:{} ", orderNo, tradeNo); log.error(" order has payed , orderNo:{}, tradeNo:{} ", orderNo, tradeNo);
} }
} }
public BaseOrder updateSelectiveByIdReT(BaseOrder baseOrder) {
if(updateSelectiveByIdRe(baseOrder) > 0) {
return selectById(baseOrder.getId());
}else {
throw new BaseException(ResultCode.DB_OPERATION_FAIL_CODE);
}
}
} }
\ No newline at end of file
package com.xxfc.platform.order.jobhandler; package com.xxfc.platform.order.jobhandler;
import com.github.wxiaoqi.security.common.util.IntervalUtil;
import com.xxfc.platform.order.biz.BaseOrderBiz;
import com.xxfc.platform.order.biz.OrderRentVehicleBiz;
import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum;
import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum;
import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.entity.OrderRentVehicleDetail;
import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler; import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.JobHandler; import com.xxl.job.core.handler.annotation.JobHandler;
import com.xxl.job.core.log.XxlJobLogger; import com.xxl.job.core.log.XxlJobLogger;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import tk.mybatis.mapper.entity.Example;
import tk.mybatis.mapper.weekend.WeekendSqls;
import java.util.List;
/** /**
* 跨平台Http任务 * 跨平台Http任务
* *
* @author xuxueli 2018-09-16 03:48:34 * @author xuxueli 2018-09-16 03:48:34
*/ */
@JobHandler(value = "httpJobHandler") @JobHandler(value = "rentDepositHandler")
@Component @Component
@Slf4j @Slf4j
public class HttpJobHandler extends IJobHandler { public class HttpJobHandler extends IJobHandler {
@Autowired
BaseOrderBiz baseOrderBiz;
@Autowired
OrderRentVehicleBiz orderRentVehicleBiz;
@Override @Override
public ReturnT<String> execute(String param) throws Exception { public ReturnT<String> execute(String idLastNumInterval) throws Exception {
try { try {
for(int i =0; i < 10; i++) { for(int i = 0; i < 10; i++) {
XxlJobLogger.log("helloword"); if(IntervalUtil.staticIsInTheInterval(String.valueOf(i), idLastNumInterval)) {
log.info("helloword"); List<BaseOrder> lists = baseOrderBiz.selectByExample(new Example.Builder(BaseOrder.class)
.where(WeekendSqls.<BaseOrder>custom().andEqualTo(BaseOrder::getType, OrderTypeEnum.RentVehicle)
.andEqualTo(BaseOrder::getStatus, OrderStatusEnum.ORDER_FINISH)
.andLike(BaseOrder::getId, "%"+ String.valueOf(i))).build());
//处理自动退押金
for(BaseOrder baseOrder : lists) {
OrderRentVehicleDetail orvd = orderRentVehicleBiz.selectOne(new OrderRentVehicleDetail() {{
setOrderId(baseOrder.getId());
}});
// if(orvd.getReturnPayResidue())
// //判断是否违章
// //扣违章的钱
// baseOrderBiz.refundSubProcess(baseOrder, refundDesc, refundAmont);
} }
ReturnT returnT = new ReturnT();
returnT.setCode(100); }
returnT.setMsg("成功"); }
returnT.setContent(param); ReturnT returnT = new ReturnT(){{
setCode(100);
setMsg("成功");
setContent(idLastNumInterval);
}};
return returnT; return returnT;
} catch (Exception e) { } catch (Exception e) {
XxlJobLogger.log(e); XxlJobLogger.log(e);
...@@ -35,7 +70,6 @@ public class HttpJobHandler extends IJobHandler { ...@@ -35,7 +70,6 @@ public class HttpJobHandler extends IJobHandler {
} finally { } finally {
; ;
} }
} }
} }
\ No newline at end of file
...@@ -351,6 +351,11 @@ public class BaseOrderController extends CommonBaseController { ...@@ -351,6 +351,11 @@ public class BaseOrderController extends CommonBaseController {
"6--已完成") "6--已完成")
private Integer status; private Integer status;
@ApiModelProperty(value = "是否有使用会员权益")
private Integer hasMemberRight;
@ApiModelProperty(value = "订单类型 1--租车;2--旅游; 3--会员订单")
private Integer type;
} }
/** /**
......
...@@ -36,6 +36,7 @@ import java.util.HashMap; ...@@ -36,6 +36,7 @@ import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import static com.github.wxiaoqi.security.admin.constant.enumerate.MemberEnum.*; import static com.github.wxiaoqi.security.admin.constant.enumerate.MemberEnum.*;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_TRUE;
import static com.xxfc.platform.universal.constant.DictionaryKey.APP_ORDER; import static com.xxfc.platform.universal.constant.DictionaryKey.APP_ORDER;
@Service @Service
...@@ -134,6 +135,7 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl ...@@ -134,6 +135,7 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
BigDecimal modelAmount = BigDecimal.ZERO; BigDecimal modelAmount = BigDecimal.ZERO;
Integer vehicleDayNum = 0; Integer vehicleDayNum = 0;
Integer freeDayNum = 0; Integer freeDayNum = 0;
//当前用户 //当前用户
AppUserDTO dto = detail.getAppUserDTO(); AppUserDTO dto = detail.getAppUserDTO();
...@@ -150,6 +152,7 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl ...@@ -150,6 +152,7 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
freeDayNum = detail.getDayNum(); freeDayNum = detail.getDayNum();
} }
vehicleDayNum = detail.getDayNum() - freeDayNum; vehicleDayNum = detail.getDayNum() - freeDayNum;
detail.getOrder().setHasMemberRight(SYS_TRUE);
}else { }else {
vehicleDayNum = detail.getDayNum(); vehicleDayNum = detail.getDayNum();
} }
...@@ -168,18 +171,30 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl ...@@ -168,18 +171,30 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
switch (MemberEnum.getByCode(detail.getAppUserDTO().getMemberLevel())) { switch (MemberEnum.getByCode(detail.getAppUserDTO().getMemberLevel())) {
case NORMAL: case NORMAL:
modelAmount = handleDiscount(vehicleModel, prices, NORMAL); modelAmount = handleDiscount(vehicleModel, prices, NORMAL);
detail.getOrder().setHasMemberRight(SYS_TRUE);
break; break;
case GOLD: case GOLD:
modelAmount = handleDiscount(vehicleModel, prices, GOLD); modelAmount = handleDiscount(vehicleModel, prices, GOLD);
detail.getOrder().setHasMemberRight(SYS_TRUE);
break; break;
case DIAMOND: case DIAMOND:
modelAmount = handleDiscount(vehicleModel, prices, DIAMOND); modelAmount = handleDiscount(vehicleModel, prices, DIAMOND);
detail.getOrder().setHasMemberRight(SYS_TRUE);
break; break;
} }
}else { }else {
modelAmount = vehicleModel.getPrice(); modelAmount = vehicleModel.getPrice();
} }
vehicleAmount = vehicleAmount.add(modelAmount.multiply(BigDecimal.valueOf(vehicleDayNum))); vehicleAmount = vehicleAmount.add(modelAmount.multiply(BigDecimal.valueOf(vehicleDayNum)));
//优惠券处理
//待完成
//如果有使用会员权益或者优惠券,则设置订单已优惠
if(SYS_TRUE.equals(detail.getOrder().getHasMemberRight())) {
detail.getOrder().setHasDiscount(SYS_TRUE);
}
if(DRIVER_TYPE_COMPANY.equals(detail.getDriverType())) { if(DRIVER_TYPE_COMPANY.equals(detail.getDriverType())) {
//计算司机费用 //计算司机费用
driverAmount = driverAmount.add(DRIVER_PRICE.multiply(BigDecimal.valueOf(detail.getDayNum()))); driverAmount = driverAmount.add(DRIVER_PRICE.multiply(BigDecimal.valueOf(detail.getDayNum())));
......
...@@ -56,6 +56,12 @@ ...@@ -56,6 +56,12 @@
<if test="no != null"> <if test="no != null">
and no = #{no} and no = #{no}
</if> </if>
<if test="type != null">
and type = #{type}
</if>
<if test="hasMemberRight != null">
and has_member_right = #{hasMemberRight}
</if>
</where> </where>
order by crt_time desc order by crt_time desc
</select> </select>
......
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