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 {
* 订单类型 1--租车;2--旅游
*/
@Column(name = "type")
@ApiModelProperty(value = "订单类型 1--租车;2--旅游")
@ApiModelProperty(value = "订单类型 1--租车;2--旅游; 3--会员订单")
private Integer type;
/**
......@@ -190,12 +190,26 @@ public class BaseOrder implements Serializable {
@ApiModelProperty(value = "退款时间")
private Long refundTime;
/**
* 退款状态
*/
@Column(name = "refund_status")
@ApiModelProperty(value = "退款的状态 0--未退还;1--已退还所有钱;2--已退还部分押金(保留违章预备金);3--已退还所有押金(扣除该扣除的)")
private Integer refundStatus;
/**
* 是否有优惠
*/
@Column(name = "has_discount")
@ApiModelProperty(value = "是否有优惠")
private Long hasDiscount;
@ApiModelProperty(value = "是否有优惠 0--无优惠;1--有优惠")
private Integer hasDiscount;
/**
* 是否有优惠
*/
@Column(name = "has_member_right")
@ApiModelProperty(value = "是否有使用会员权益")
private Integer hasMemberRight;
/**
* 是否已支付
......
......@@ -273,13 +273,6 @@ public class OrderRentVehicleDetail implements Serializable {
@ApiModelProperty(value = "出发公司区域id")
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;
import ch.qos.logback.core.rolling.TimeBasedFileNamingAndTriggeringPolicyBase;
import cn.hutool.core.util.StrUtil;
import com.github.wxiaoqi.security.admin.dto.UserMemberDTO;
import com.github.wxiaoqi.security.admin.feign.UserFeign;
......@@ -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_TRUE;
import static com.xxfc.platform.universal.constant.DictionaryKey.APP_ORDER;
import static com.xxfc.platform.universal.constant.DictionaryKey.RENT_REFUND;
import static com.xxfc.platform.universal.constant.DictionaryKey.*;
/**
*
......@@ -200,7 +200,7 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
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> {
}
}
/**
* 租车退款流程(不含押金的通用方法)
* @param baseOrder
* @param startTime
* @param dicParentKey
*/
private void rentRefundProcess(BaseOrder baseOrder, Long startTime, String 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) {
//计算退款金额
// 1、押金 + 租金(规则扣除)
BigDecimal refundGoodsAmount = baseOrder.getGoodsAmount();
String refundDesc = "取消订单退款:";
BigDecimal refundGoodsAmont = baseOrder.getGoodsAmount();
BigDecimal refundAmont = BigDecimal.ZERO;
if(null == depositAmont) {
depositAmont = BigDecimal.ZERO;
}
//根据时间处理goodsAmount
//获取出发时间 到现在 距离时间
//LocalDateTime StartDay = LocalDateTime.ofInstant(Instant.ofEpochMilli(orvd.getStartTime()), ZoneOffset.ofHours(8));
Long timeLag = startTime - System.currentTimeMillis();
Integer hourLag = Long.valueOf(timeLag/(1000L * 60L * 60L)).intValue();
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();
for(com.xxfc.platform.universal.entity.Dictionary dic : rentRefunds) {
......@@ -276,6 +287,7 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
//符合范围
if(IntervalUtil.staticIsInTheInterval(hourLag.toString(), names[0])){
refundGoodsAmont = new BigDecimal(((Double) IntervalUtil.evaluate(dic.getDetail(), new MapContext(){{
//ga : goodsAmount
set("ga", baseOrder.getGoodsAmount());
}})).toString());
refundDesc = names[1]+ ","+ refundDesc;
......@@ -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(){{
setAmount(baseOrder.getRealAmount().multiply(new BigDecimal("100")).intValue());
setOrderNo(baseOrder.getNo());
......@@ -294,10 +317,17 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
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;
if(StrUtil.isBlank(refundTradeNo)) {
......@@ -314,6 +344,7 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
orderRefund.setRefundAmount(refundAmont);
orderRefund.setRefundDesc(refundDesc);
orderRefund.setRefundStatus(refundStatus);
orderRefund.setRefundType(refundType);
orderRefundBiz.insertSelective(orderRefund);
}
......@@ -380,4 +411,12 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
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;
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.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.JobHandler;
import com.xxl.job.core.log.XxlJobLogger;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import tk.mybatis.mapper.entity.Example;
import tk.mybatis.mapper.weekend.WeekendSqls;
import java.util.List;
/**
* 跨平台Http任务
*
* @author xuxueli 2018-09-16 03:48:34
*/
@JobHandler(value = "httpJobHandler")
@JobHandler(value = "rentDepositHandler")
@Component
@Slf4j
public class HttpJobHandler extends IJobHandler {
@Autowired
BaseOrderBiz baseOrderBiz;
@Autowired
OrderRentVehicleBiz orderRentVehicleBiz;
@Override
public ReturnT<String> execute(String param) throws Exception {
public ReturnT<String> execute(String idLastNumInterval) throws Exception {
try {
for(int i =0; i < 10; i++) {
XxlJobLogger.log("helloword");
log.info("helloword");
for(int i = 0; i < 10; i++) {
if(IntervalUtil.staticIsInTheInterval(String.valueOf(i), idLastNumInterval)) {
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;
} catch (Exception e) {
XxlJobLogger.log(e);
......@@ -35,7 +70,6 @@ public class HttpJobHandler extends IJobHandler {
} finally {
;
}
}
}
\ No newline at end of file
......@@ -351,6 +351,11 @@ public class BaseOrderController extends CommonBaseController {
"6--已完成")
private Integer status;
@ApiModelProperty(value = "是否有使用会员权益")
private Integer hasMemberRight;
@ApiModelProperty(value = "订单类型 1--租车;2--旅游; 3--会员订单")
private Integer type;
}
/**
......
......@@ -36,6 +36,7 @@ import java.util.HashMap;
import java.util.HashSet;
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;
@Service
......@@ -134,6 +135,7 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
BigDecimal modelAmount = BigDecimal.ZERO;
Integer vehicleDayNum = 0;
Integer freeDayNum = 0;
//当前用户
AppUserDTO dto = detail.getAppUserDTO();
......@@ -150,6 +152,7 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
freeDayNum = detail.getDayNum();
}
vehicleDayNum = detail.getDayNum() - freeDayNum;
detail.getOrder().setHasMemberRight(SYS_TRUE);
}else {
vehicleDayNum = detail.getDayNum();
}
......@@ -168,18 +171,30 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
switch (MemberEnum.getByCode(detail.getAppUserDTO().getMemberLevel())) {
case NORMAL:
modelAmount = handleDiscount(vehicleModel, prices, NORMAL);
detail.getOrder().setHasMemberRight(SYS_TRUE);
break;
case GOLD:
modelAmount = handleDiscount(vehicleModel, prices, GOLD);
detail.getOrder().setHasMemberRight(SYS_TRUE);
break;
case DIAMOND:
modelAmount = handleDiscount(vehicleModel, prices, DIAMOND);
detail.getOrder().setHasMemberRight(SYS_TRUE);
break;
}
}else {
modelAmount = vehicleModel.getPrice();
}
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())) {
//计算司机费用
driverAmount = driverAmount.add(DRIVER_PRICE.multiply(BigDecimal.valueOf(detail.getDayNum())));
......
......@@ -56,6 +56,12 @@
<if test="no != null">
and no = #{no}
</if>
<if test="type != null">
and type = #{type}
</if>
<if test="hasMemberRight != null">
and has_member_right = #{hasMemberRight}
</if>
</where>
order by crt_time desc
</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