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

添加延期代码

parent b4721721
......@@ -2,6 +2,9 @@ package com.github.wxiaoqi.security.common.constant;
import cn.hutool.core.date.format.FastDateFormat;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
/**
......@@ -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 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 {
public void handelCostDetailExtend(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 {
* 使用(消耗)详情列表
*/
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
return query;
}
public Query initBgQuery(String no) {
Query query = initQuery(no);
query.put("crtUser", null);
query.put("userId", null);
return query;
}
@Override
public UserFeign getUserFeign() {
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;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONUtil;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.wxiaoqi.security.admin.entity.AppUserLogin;
......@@ -22,15 +24,21 @@ import com.google.common.collect.Lists;
import com.xxfc.platform.activity.entity.Coupon;
import com.xxfc.platform.activity.feign.ActivityFeign;
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.OrderTypeEnum;
import com.xxfc.platform.order.entity.OrderItem;
import com.xxfc.platform.order.entity.OrderRentVehicleDetail;
import com.xxfc.platform.order.pojo.OrderAccompanyDTO;
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.service.OrderRentVehicleService;
import com.xxfc.platform.tour.entity.TourUser;
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.constant.VehicleBookRecordStatus;
import com.xxfc.platform.vehicle.entity.BranchCompany;
......@@ -39,6 +47,7 @@ import com.xxfc.platform.vehicle.entity.VehicleUserLicense;
import com.xxfc.platform.vehicle.feign.VehicleFeign;
import com.xxfc.platform.vehicle.pojo.BookVehicleVO;
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.ApiOperation;
import jodd.util.StringUtil;
......@@ -52,14 +61,15 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.io.IOException;
import java.math.BigDecimal;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.*;
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.YMR_SLASH_FORMATTER;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.*;
import static com.xxfc.platform.universal.constant.DictionaryKey.APP_ORDER;
@Controller
//@RequestMapping("baseOrder")
......@@ -83,6 +93,9 @@ public class BackStageOrderController extends CommonBaseController implements Us
@Autowired
OrderItemBiz orderItemBiz;
@Autowired
OrderCalculateBiz orderCalculateBiz;
@Autowired
UserFeign userFeign;
......@@ -95,6 +108,9 @@ public class BackStageOrderController extends CommonBaseController implements Us
@Resource
VehicleFeign vehicleFeign;
@Autowired
ThirdFeign thirdFeign;
@Autowired
BackgroundBaseOrderBiz backgroundBaseOrderBiz;
@Override
......@@ -402,9 +418,8 @@ public class BackStageOrderController extends CommonBaseController implements Us
checkAdminUser();
//根据订单号获取订单
//查询列表数据
Query query = baseOrderBiz.initQuery(dto.getNo());
query.put("crtUser", null);
query.put("userId", null);
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) {
......@@ -442,10 +457,17 @@ public class BackStageOrderController extends CommonBaseController implements Us
@RequestMapping(value = "/baseOrder/bg/delay-rent-order", method = RequestMethod.POST)
@IgnoreClientToken
@ResponseBody
public ObjectRestResponse<OrderPageVO> delayRentOrder(@RequestBody delayRentOrderDTO dto) {
public ObjectRestResponse<OrderPageVO> delayRentOrder(@RequestBody DelayRentOrderDTO dto) {
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();
}
......@@ -468,12 +490,6 @@ public class BackStageOrderController extends CommonBaseController implements Us
String numberPlate;
}
@Data
public static class delayRentOrderDTO {
Integer no;
Long delayEndTime;
}
private Query initCompanyQuery(String no) {
BackStageOrderController.QueryOrderDetailDTO qodd = new BackStageOrderController.QueryOrderDetailDTO();
//查询公司id
......
......@@ -207,6 +207,6 @@ public interface VehicleFeign {
* @return
*/
@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