Commit 25bb2c70 authored by 周健威's avatar 周健威

添加延期代码

parent b4721721
...@@ -2,6 +2,9 @@ package com.github.wxiaoqi.security.common.constant; ...@@ -2,6 +2,9 @@ package com.github.wxiaoqi.security.common.constant;
import cn.hutool.core.date.format.FastDateFormat; import cn.hutool.core.date.format.FastDateFormat;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
/** /**
...@@ -50,4 +53,8 @@ public class CommonConstants { ...@@ -50,4 +53,8 @@ public class CommonConstants {
public static final org.joda.time.format.DateTimeFormatter YMR_SLASH_FORMATTER_JODA = org.joda.time.format.DateTimeFormat.forPattern(YMR_SLASH); public static final org.joda.time.format.DateTimeFormatter YMR_SLASH_FORMATTER_JODA = org.joda.time.format.DateTimeFormat.forPattern(YMR_SLASH);
public static final FastDateFormat HOUR_MINUTE_FORMATTE_HUTOOL = FastDateFormat.getInstance(HOUR_MINUTE); public static final FastDateFormat HOUR_MINUTE_FORMATTE_HUTOOL = FastDateFormat.getInstance(HOUR_MINUTE);
public static String stampTo8Zone(DateTimeFormatter dateTimeFormatter, Long timestamp) {
return dateTimeFormatter.format(LocalDateTime.ofInstant(Instant.ofEpochMilli(timestamp), ZoneOffset.ofHours(8)));
}
} }
...@@ -333,4 +333,24 @@ public class OrderRentVehicleDetail implements Serializable { ...@@ -333,4 +333,24 @@ public class OrderRentVehicleDetail implements Serializable {
public void handelCostDetailExtend(CostDetailExtend costDetailExtend) { public void handelCostDetailExtend(CostDetailExtend costDetailExtend) {
this.costDetailExtend = JsonUtil.objectToJson(((CostDetailExtend)costDetailExtend)); this.costDetailExtend = JsonUtil.objectToJson(((CostDetailExtend)costDetailExtend));
} }
@Column(name = "delay_add_free_days")
@ApiModelProperty(value = "延期补充的免费天数")
private Integer delayAddFreeDays;
@Column(name = "delay_add_days")
@ApiModelProperty(value = "延期增加的天数")
private Integer delayAddDays;
@Column(name = "delay_add_detail")
@ApiModelProperty(value = "增加延期还车费用(计算)明细")
private String delayAddDetail;
@Column(name = "delay_add_damage_safe")
@ApiModelProperty(value = "延期增加天数是否购买车损免赔")
private Integer delayAddDamageSafe;
@Column(name = "delay_add_end_time")
@ApiModelProperty(value = "延期结束时间")
private Long delayAddEndTime;
} }
package com.xxfc.platform.order.pojo.order;
import com.github.wxiaoqi.security.common.constant.CommonConstants;
import lombok.Data;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.*;
@Data
public class DelayRentOrderDTO {
String no;
Integer needDamageSafe = 0;
Long delayEndTime;
Long endTime;
String bookEndDate;
String bookEndDateTime;
Long startTime;
String bookStartDate;
String bookStartDateTime;
public void setStartTime(Long startTime) {
this.startTime = startTime;
this.bookStartDate = stampTo8Zone(YMR_SLASH_FORMATTER, startTime);
this.bookStartDateTime = stampTo8Zone(DATE_TIME_LINE_FORMATTER, startTime);
}
public void setEndTime(Long endTime) {
this.endTime = endTime;
this.bookEndDate = stampTo8Zone(YMR_SLASH_FORMATTER, endTime);
this.bookEndDateTime = stampTo8Zone(DATE_TIME_LINE_FORMATTER, endTime);
}
}
\ No newline at end of file
...@@ -28,4 +28,8 @@ public class DelayAddPriceVO { ...@@ -28,4 +28,8 @@ public class DelayAddPriceVO {
* 使用(消耗)详情列表 * 使用(消耗)详情列表
*/ */
List<VMCalendarPriceCostDTO> delayAmountList = CollUtil.newArrayList(); List<VMCalendarPriceCostDTO> delayAmountList = CollUtil.newArrayList();
public void initDelayDamageSafeAmount() {
this.delayDamageSafeAmount = this.damageSafePrice.add(new BigDecimal(delayAddDays+ ""));
}
} }
...@@ -885,6 +885,13 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements ...@@ -885,6 +885,13 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements
return query; return query;
} }
public Query initBgQuery(String no) {
Query query = initQuery(no);
query.put("crtUser", null);
query.put("userId", null);
return query;
}
@Override @Override
public UserFeign getUserFeign() { public UserFeign getUserFeign() {
return userFeign; return userFeign;
......
package com.xxfc.platform.order.biz.inner;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.xxfc.platform.activity.feign.ActivityFeign;
import com.xxfc.platform.order.biz.*;
import com.xxfc.platform.order.contant.enumerate.*;
import com.xxfc.platform.order.entity.*;
import com.xxfc.platform.order.pojo.account.OrderAccountDeduction;
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.order.DelayRentOrderDTO;
import com.xxfc.platform.order.pojo.order.OrderPageVO;
import com.xxfc.platform.order.pojo.order.VehicleItemDTO;
import com.xxfc.platform.order.pojo.price.CancelNoStartVO;
import com.xxfc.platform.order.pojo.price.CancelStartedVO;
import com.xxfc.platform.order.pojo.price.CostDetailExtend;
import com.xxfc.platform.order.pojo.price.DelayAddPriceVO;
import com.xxfc.platform.tour.feign.TourFeign;
import com.xxfc.platform.universal.constant.DictionaryKey;
import com.xxfc.platform.universal.entity.Dictionary;
import com.xxfc.platform.universal.feign.ThirdFeign;
import com.xxfc.platform.vehicle.common.RestResponse;
import com.xxfc.platform.vehicle.feign.VehicleFeign;
import com.xxfc.platform.vehicle.pojo.BookVehicleVO;
import com.xxfc.platform.vehicle.pojo.dto.order.VMCalendarPriceCostDTO;
import io.swagger.annotations.ApiModelProperty;
import lombok.extern.slf4j.Slf4j;
import org.mockito.internal.util.collections.Sets;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.persistence.Column;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_TRUE;
import static com.xxfc.platform.universal.constant.DictionaryKey.*;
/**
* 订单退款记录表
*
* @author zjw
* @email nishijjo@qq.com
* @date 2019-06-18 11:08:09
*/
@Slf4j
@Service
public class OrderDelayBiz {
@Autowired
BaseOrderBiz baseOrderBiz;
@Autowired
OrderItemBiz orderItemBiz;
@Autowired
OrderMemberDetailBiz orderMemberDetailBiz;
@Autowired
OrderTourDetailBiz orderTourDetailBiz;
@Autowired
OrderRentVehicleBiz orderRentVehicleBiz;
@Autowired
OrderMsgBiz orderMsgBiz;
@Autowired
OrderCalculateBiz orderCalculateBiz;
@Autowired
OrderAccountBiz orderAccountBiz;
@Autowired
OrderTemplateBiz orderTemplateBiz;
@Autowired
UserFeign userFeign;
@Autowired
VehicleFeign vehicleFeign;
@Autowired
TourFeign tourFeign;
@Autowired
ThirdFeign thirdFeign;
@Autowired
ActivityFeign activityFeign;
public void delayRentOrder(OrderPageVO orderPageVO, DelayRentOrderDTO dto) {
OrderRentVehicleDetail orvd = orderPageVO.getOrderRentVehicleDetail();
Integer delayAddDays = 0;
Integer delayAddFreeDays = 0;
//分布式事务执行标记
Integer cloudTransact = 0;
//计算delay多少天
delayAddDays = orderCalculateBiz.getIncludeDays(orvd.getStartTime(), dto.getDelayEndTime());
delayAddDays = delayAddDays - orderPageVO.getOrderRentVehicleDetail().getDayNum();
//判断
if(delayAddDays < 0) {
throw new BaseException(ResultCode.PARAM_ILLEGAL_CODE, Sets.newSet("延期时间不对"));
}else {
//变化的延期免费天数
Integer changeDelayFreeDays = 0;
List<VMCalendarPriceCostDTO> delayAmountList;
if(delayAddDays > 0) {
//获得延期天数费用
delayAmountList = orderItemBiz.getOverAmountList(DateUtil.date(orvd.getEndTime()), delayAddDays, orvd.getModelId(), orderPageVO.getUserId());
delayAddFreeDays = delayAmountList.parallelStream().mapToInt(VMCalendarPriceCostDTO::getFreeDays).sum();
}else {
delayAmountList = CollUtil.newArrayList();
delayAddFreeDays = 0;
}
//初始化变化的延期免费天数为延期天数
changeDelayFreeDays = delayAddFreeDays;
//判断是否已经设置了延期, 修改变化的延期免费天数
if(orvd.getDelayAddDays() > 0) {
//extendDelayDays = delayAddDays - orvd.getDelayAddDays();
changeDelayFreeDays = delayAddFreeDays - orvd.getDelayAddFreeDays();
}
//根据 changeDelayFreeDays 判断 是否拥有那么足够的天数
if(changeDelayFreeDays > 0) {
AppUserDTO appUserDTO = userFeign.userDetailById(orderPageVO.getUserId()).getData();
if(appUserDTO.getRentFreeDays() < changeDelayFreeDays) {
throw new BaseException(ResultCode.FAILED_CODE, Sets.newSet("免费天数不够"));
}
}
//触发调用修改预约
dto.setEndTime(dto.getDelayEndTime());
dto.setStartTime(orderPageVO.getOrderRentVehicleDetail().getStartTime());
//根据订单号获取订单
RestResponse restResponse = vehicleFeign.updateOrderBookRecord(new BookVehicleVO() {{
setVehicleId(orderPageVO.getOrderRentVehicleDetail().getVehicleId());
setBookStartDate(dto.getBookStartDate());
setBookEndDate(dto.getBookEndDate());
setBookStartDateTime(dto.getBookStartDateTime());
setBookEndDateTime(dto.getBookEndDateTime());
}});
if( !SYS_TRUE.equals(restResponse.getCode())) {
throw new BaseException(ResultCode.FAILED_CODE, Sets.newSet("延期失败"));
}
cloudTransact = 1;
//扣减免费天数
if(changeDelayFreeDays > 0) {
int result = userFeign.memberDays(orderPageVO.getUserId(), changeDelayFreeDays, UserFeign.MEMBER_DAYS_LOCK);
if (result < 0) {
throw new BaseException(ResultCode.FAILED_CODE);
}
}else if(changeDelayFreeDays < 0){
int result = userFeign.memberDays(orderPageVO.getUserId(), 0 - changeDelayFreeDays, UserFeign.MEMBER_DAYS_WITHDRAW);
if (result < 0) {
throw new BaseException(ResultCode.FAILED_CODE);
}
}
cloudTransact = 2;
//更新OrderRentVehicleDetail
Map<String, Dictionary> dictionaryMap = thirdFeign.dictionaryGetAll4Map().getData();
orvd.setDelayAddDamageSafe(dto.getNeedDamageSafe());
orvd.setDelayAddDays(delayAddDays);
orvd.setDelayAddFreeDays(delayAddFreeDays);
orvd.setDelayAddEndTime(dto.getDelayEndTime());
DelayAddPriceVO delayAddPriceVO = new DelayAddPriceVO(){{
setDamageSafePrice(new BigDecimal(dictionaryMap.get(APP_ORDER+ "_"+ DictionaryKey.DAMAGE_SAFE).getDetail()));
setDelayAddDays(orvd.getDelayAddDays());
setDelayAmountList(delayAmountList);
}};
if(SYS_TRUE.equals(dto.getNeedDamageSafe())) {
delayAddPriceVO.initDelayDamageSafeAmount();
}
orvd.setDelayAddDetail(JSONUtil.toJsonStr(delayAddPriceVO));
orderRentVehicleBiz.updateSelectiveByIdRe(orvd);
}
}
}
\ No newline at end of file
package com.xxfc.platform.order.rest; package com.xxfc.platform.order.rest;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.wxiaoqi.security.admin.entity.AppUserLogin; import com.github.wxiaoqi.security.admin.entity.AppUserLogin;
...@@ -22,15 +24,21 @@ import com.google.common.collect.Lists; ...@@ -22,15 +24,21 @@ import com.google.common.collect.Lists;
import com.xxfc.platform.activity.entity.Coupon; import com.xxfc.platform.activity.entity.Coupon;
import com.xxfc.platform.activity.feign.ActivityFeign; import com.xxfc.platform.activity.feign.ActivityFeign;
import com.xxfc.platform.order.biz.*; import com.xxfc.platform.order.biz.*;
import com.xxfc.platform.order.biz.inner.OrderCalculateBiz;
import com.xxfc.platform.order.contant.enumerate.ItemTypeEnum; import com.xxfc.platform.order.contant.enumerate.ItemTypeEnum;
import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum;
import com.xxfc.platform.order.entity.OrderItem; import com.xxfc.platform.order.entity.OrderItem;
import com.xxfc.platform.order.entity.OrderRentVehicleDetail; import com.xxfc.platform.order.entity.OrderRentVehicleDetail;
import com.xxfc.platform.order.pojo.OrderAccompanyDTO; import com.xxfc.platform.order.pojo.OrderAccompanyDTO;
import com.xxfc.platform.order.pojo.order.*; import com.xxfc.platform.order.pojo.order.*;
import com.xxfc.platform.order.pojo.price.DelayAddPriceVO;
import com.xxfc.platform.order.pojo.price.RentVehiclePriceVO; import com.xxfc.platform.order.pojo.price.RentVehiclePriceVO;
import com.xxfc.platform.order.service.OrderRentVehicleService; import com.xxfc.platform.order.service.OrderRentVehicleService;
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.entity.Dictionary;
import com.xxfc.platform.universal.feign.ThirdFeign;
import com.xxfc.platform.vehicle.common.RestResponse; import com.xxfc.platform.vehicle.common.RestResponse;
import com.xxfc.platform.vehicle.constant.VehicleBookRecordStatus; import com.xxfc.platform.vehicle.constant.VehicleBookRecordStatus;
import com.xxfc.platform.vehicle.entity.BranchCompany; import com.xxfc.platform.vehicle.entity.BranchCompany;
...@@ -39,6 +47,7 @@ import com.xxfc.platform.vehicle.entity.VehicleUserLicense; ...@@ -39,6 +47,7 @@ import com.xxfc.platform.vehicle.entity.VehicleUserLicense;
import com.xxfc.platform.vehicle.feign.VehicleFeign; import com.xxfc.platform.vehicle.feign.VehicleFeign;
import com.xxfc.platform.vehicle.pojo.BookVehicleVO; import com.xxfc.platform.vehicle.pojo.BookVehicleVO;
import com.xxfc.platform.vehicle.pojo.CompanyDetail; import com.xxfc.platform.vehicle.pojo.CompanyDetail;
import com.xxfc.platform.vehicle.pojo.dto.order.VMCalendarPriceCostDTO;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import jodd.util.StringUtil; import jodd.util.StringUtil;
...@@ -52,14 +61,15 @@ import org.springframework.web.bind.annotation.*; ...@@ -52,14 +61,15 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.io.IOException; import java.io.IOException;
import java.math.BigDecimal;
import java.time.Instant; import java.time.Instant;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneOffset; import java.time.ZoneOffset;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.DATE_TIME_LINE_FORMATTER; import static com.github.wxiaoqi.security.common.constant.CommonConstants.*;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.YMR_SLASH_FORMATTER; import static com.xxfc.platform.universal.constant.DictionaryKey.APP_ORDER;
@Controller @Controller
//@RequestMapping("baseOrder") //@RequestMapping("baseOrder")
...@@ -83,6 +93,9 @@ public class BackStageOrderController extends CommonBaseController implements Us ...@@ -83,6 +93,9 @@ public class BackStageOrderController extends CommonBaseController implements Us
@Autowired @Autowired
OrderItemBiz orderItemBiz; OrderItemBiz orderItemBiz;
@Autowired
OrderCalculateBiz orderCalculateBiz;
@Autowired @Autowired
UserFeign userFeign; UserFeign userFeign;
...@@ -95,6 +108,9 @@ public class BackStageOrderController extends CommonBaseController implements Us ...@@ -95,6 +108,9 @@ public class BackStageOrderController extends CommonBaseController implements Us
@Resource @Resource
VehicleFeign vehicleFeign; VehicleFeign vehicleFeign;
@Autowired
ThirdFeign thirdFeign;
@Autowired @Autowired
BackgroundBaseOrderBiz backgroundBaseOrderBiz; BackgroundBaseOrderBiz backgroundBaseOrderBiz;
@Override @Override
...@@ -402,9 +418,8 @@ public class BackStageOrderController extends CommonBaseController implements Us ...@@ -402,9 +418,8 @@ public class BackStageOrderController extends CommonBaseController implements Us
checkAdminUser(); checkAdminUser();
//根据订单号获取订单 //根据订单号获取订单
//查询列表数据 //查询列表数据
Query query = baseOrderBiz.initQuery(dto.getNo()); Query query = baseOrderBiz.initBgQuery(dto.getNo());
query.put("crtUser", null);
query.put("userId", null);
PageDataVO<OrderPageVO> page = PageDataVO.pageInfo(query, () -> baseOrderBiz.pageByParm(query.getSuper())); PageDataVO<OrderPageVO> page = PageDataVO.pageInfo(query, () -> baseOrderBiz.pageByParm(query.getSuper()));
OrderPageVO orderPageVO = page.getData().get(0); OrderPageVO orderPageVO = page.getData().get(0);
if (null == orderPageVO) { if (null == orderPageVO) {
...@@ -442,10 +457,17 @@ public class BackStageOrderController extends CommonBaseController implements Us ...@@ -442,10 +457,17 @@ public class BackStageOrderController extends CommonBaseController implements Us
@RequestMapping(value = "/baseOrder/bg/delay-rent-order", method = RequestMethod.POST) @RequestMapping(value = "/baseOrder/bg/delay-rent-order", method = RequestMethod.POST)
@IgnoreClientToken @IgnoreClientToken
@ResponseBody @ResponseBody
public ObjectRestResponse<OrderPageVO> delayRentOrder(@RequestBody delayRentOrderDTO dto) { public ObjectRestResponse<OrderPageVO> delayRentOrder(@RequestBody DelayRentOrderDTO dto) {
checkAdminUser(); checkAdminUser();
//根据订单号获取订单
Query query = baseOrderBiz.initBgQuery(dto.getNo());
PageDataVO<OrderPageVO> page = PageDataVO.pageInfo(query, () -> baseOrderBiz.pageByParm(query.getSuper()));
OrderPageVO orderPageVO = page.getData().get(0);
if (null == orderPageVO || !OrderTypeEnum.RENT_VEHICLE.getCode().equals(orderPageVO.getType())) {
throw new BaseException(ResultCode.PARAM_ILLEGAL_CODE, Sets.newSet("订单不存在,或不是租车订单"));
}
return ObjectRestResponse.succ(); return ObjectRestResponse.succ();
} }
...@@ -468,12 +490,6 @@ public class BackStageOrderController extends CommonBaseController implements Us ...@@ -468,12 +490,6 @@ public class BackStageOrderController extends CommonBaseController implements Us
String numberPlate; String numberPlate;
} }
@Data
public static class delayRentOrderDTO {
Integer no;
Long delayEndTime;
}
private Query initCompanyQuery(String no) { private Query initCompanyQuery(String no) {
BackStageOrderController.QueryOrderDetailDTO qodd = new BackStageOrderController.QueryOrderDetailDTO(); BackStageOrderController.QueryOrderDetailDTO qodd = new BackStageOrderController.QueryOrderDetailDTO();
//查询公司id //查询公司id
......
...@@ -207,6 +207,6 @@ public interface VehicleFeign { ...@@ -207,6 +207,6 @@ public interface VehicleFeign {
* @return * @return
*/ */
@RequestMapping(value = "/vehicleInfo/bookRecord/order-update", method = RequestMethod.POST) @RequestMapping(value = "/vehicleInfo/bookRecord/order-update", method = RequestMethod.POST)
public RestResponse updateOrderBookRecord(@RequestBody BookVehicleVO bookVehicleVo) throws Exception; public RestResponse updateOrderBookRecord(@RequestBody BookVehicleVO bookVehicleVo);
} }
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