Commit 6d9ab53a authored by 周健威's avatar 周健威

Merge branch 'feature_chw_zjw' into master-chw

# Conflicts:
#	xx-order/xx-order-server/src/main/java/com/xxfc/platform/order/rest/BaseOrderController.java
#	xx-order/xx-order-server/src/main/java/com/xxfc/platform/order/rest/SpecialRentController.java
parents 944cdc3c 38ba142c
......@@ -7,6 +7,7 @@ import com.github.wxiaoqi.security.common.msg.TableResultResponse;
import com.github.wxiaoqi.security.common.util.Query;
import com.github.wxiaoqi.security.common.util.ReflectionUtils;
import io.swagger.annotations.ApiOperation;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -144,5 +145,8 @@ public class BaseController<Biz extends BaseBiz,Entity> extends CommonBaseContro
return ObjectRestResponse.succ();
}
@Data
public static class BaseDetailDTO {
Integer id;
}
}
......@@ -8,6 +8,7 @@ public enum ItemTypeEnum {
VEHICLE_MODEL(101, "租车车型"),
DAMAGE_SAFE(102, "车损免赔"),
DRIVER(103, "司机"),
PERSON_INSURANCE(104, "人身保险"),
TOUR_ADULT(201, "旅游成人"),
TOUR_CHILD(202, "旅游儿童"),
TOUR_INSURE(203, "旅游保险"),
......
......@@ -24,6 +24,8 @@ import java.util.Date;
@Table(name = "base_order")
public class BaseOrder implements Serializable {
private static final long serialVersionUID = 1L;
public static final int ORDER_TYPE_VEHICLE = 1;
public static final int ORDER_SIGN_NORMAL = 1;
public static final int ORDER_SIGN_APPLY = 2;
public static final int ORDER_SIGN_SPECIAL = 3;
......
package com.xxfc.platform.order.entity;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import javax.persistence.*;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 订单人身保险
*
* @author libin
* @email 18178966185@163.com
* @date 2020-11-26 18:56:21
*/
@Data
@Table(name = "order_person_insurance")
public class OrderPersonInsurance implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@Id
@GeneratedValue(generator = "JDBC")
@ApiModelProperty("主键")
private Integer id;
/**
* 基础订单id
*/
@Column(name = "order_id")
@ApiModelProperty(value = "基础订单id")
private Integer orderId;
/**
* 姓名
*/
@Column(name = "name")
@ApiModelProperty(value = "姓名")
private String name;
/**
* 身份证号码
*/
@Column(name = "id_card")
@ApiModelProperty(value = "身份证号码")
private String idCard;
/**
* 订单的天数
*/
@Column(name = "order_day")
@ApiModelProperty(value = "订单的天数")
private Integer orderDay;
/**
* 保险的天数
*/
@Column(name = "insurance_day")
@ApiModelProperty(value = "保险的天数")
private Integer insuranceDay;
/**
* 金额
*/
@Column(name = "amount")
@ApiModelProperty(value = "金额")
private BigDecimal amount;
/**
* 状态 1--已支付;2--已退款
*/
@Column(name = "status")
@ApiModelProperty(value = "状态 1--已支付;2--已退款")
private Integer status;
/**
* 创建时间
*/
@Column(name = "crt_time")
@ApiModelProperty(value = "创建时间", hidden = true )
private Date crtTime;
/**
* 创建者id
*/
@Column(name = "crt_user")
@ApiModelProperty(value = "创建者id")
private String crtUser;
/**
* 更新时间
*/
@Column(name = "upd_time")
@ApiModelProperty(value = "更新时间", hidden = true )
private Date updTime;
/**
* 更新者id
*/
@Column(name = "upd_user")
@ApiModelProperty(value = "更新者id")
private String updUser;
}
......@@ -434,6 +434,12 @@ public class OrderRentVehicleDetail implements Serializable {
@Column(name = "goods_deposit_type")
private Integer goodsDepositType;
/**
* 价格类型 1--天;2--小时
*/
@Column(name = "price_type")
private Integer priceType;
public Long getEndTime() {
return endTime;
}
......
......@@ -45,6 +45,11 @@ public class InProgressVO {
*/
Integer usedDays = 0;
/**
* 已使用小时数
*/
Integer usedHours = 0;
/**
* 已使用的金额
*/
......
......@@ -14,6 +14,7 @@ import com.xxfc.platform.vehicle.pojo.BookVehicleVO;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
......@@ -23,6 +24,7 @@ public class RentVehicleBO extends OrderRentVehicleDetail implements OrderDetail
private VehicleModel vehicleModel;
private BookVehicleVO bookVehicleVO;
private Vehicle vehicle;
private BigDecimal specialUnitPrice;
/**
* 订单标记 1--普通订单;2--需求预定申请订单;3--特惠租车订单
......
package com.xxfc.platform.order.pojo.order.add;
import com.xxfc.platform.order.entity.OrderPersonInsurance;
import com.xxfc.platform.order.pojo.OrderAccompanyDTO;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
......@@ -12,8 +13,7 @@ import java.time.format.DateTimeFormatter;
import java.util.List;
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.*;
@Data
public class AddRentVehicleDTO extends AddOrderCommonDTO{
......@@ -137,6 +137,9 @@ public class AddRentVehicleDTO extends AddOrderCommonDTO{
public static final int GOODS_DEPOSIT_TYPE_UP = 1;
public static final int GOODS_DEPOSIT_TYPE_DOWN = 2;
private Integer needPersonInsurance = SYS_FALSE;
private List<OrderPersonInsurance> insurances;
public void setStartTime(Long startTime) {
this.startTime = startTime;
this.bookStartDate = YMR_SLASH_FORMATTER.format(LocalDateTime.ofInstant(Instant.ofEpochMilli(startTime), ZoneOffset.ofHours(8)));
......@@ -164,4 +167,5 @@ public class AddRentVehicleDTO extends AddOrderCommonDTO{
}).collect(Collectors.toList());
}
}
}
......@@ -51,6 +51,7 @@ import static com.xxfc.platform.order.pojo.account.OrderAccountDeduction.ORIGIN_
import static com.xxfc.platform.order.pojo.account.OrderAccountDeduction.ORIGIN_ORDER_DEPOSIT;
import static com.xxfc.platform.order.pojo.pay.NotifyUrlDTO.PAY_WAY_ALI;
import static com.xxfc.platform.universal.constant.DictionaryKey.APP_ORDER;
import static com.xxfc.platform.universal.constant.DictionaryKey.RENT_PERSON_INSURANCE;
/**
* 订单帐目
......@@ -316,6 +317,31 @@ public class OrderAccountBiz extends BaseBiz<OrderAccountMapper,OrderAccount> {
return deductGoodsAmount;
}
public BigDecimal calculatePersonInsurance(Long timeLag) {
BigDecimal amount = BigDecimal.ZERO;
//获取天
Integer remainder = Long.valueOf(timeLag%(1000L * 60L * 60L * 24L)).intValue();
Integer dayLag = Long.valueOf(timeLag/(1000L * 60L * 60L * 24L)).intValue() + remainder > 0? 1: 0;
Map<String, Dictionary> dictionaryMap = thirdFeign.dictionaryGetAll4Map().getData();
Set<Dictionary> personInsurances = dictionaryMap.get(RENT_PERSON_INSURANCE).getChildrens();
for(com.xxfc.platform.universal.entity.Dictionary dic : personInsurances) {
if(StrUtil.isBlank(dic.getName())) {
continue;
}
//符合范围
if(IntervalUtil.staticIsInTheInterval(dayLag.toString(), dic.getName())){
amount = new BigDecimal(dic.getDetail());
break;
}
}
return amount;
}
/**
* 初始化deduction
* @param subtract
......
package com.xxfc.platform.order.biz;
import org.springframework.stereotype.Service;
import com.xxfc.platform.order.entity.OrderPersonInsurance;
import com.xxfc.platform.order.mapper.OrderPersonInsuranceMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
/**
* 订单人身保险
*
* @author libin
* @email 18178966185@163.com
* @date 2020-11-26 18:56:21
*/
@Service
public class OrderPersonInsuranceBiz extends BaseBiz<OrderPersonInsuranceMapper, OrderPersonInsurance> {
}
\ No newline at end of file
......@@ -31,6 +31,7 @@ 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.universal.inter.CalculateInterface;
import com.xxfc.platform.vehicle.entity.Vehicle;
import com.xxfc.platform.vehicle.feign.VehicleFeign;
import com.xxfc.platform.vehicle.pojo.dto.VehicleModelCalendarPriceDTO;
import com.xxfc.platform.vehicle.pojo.dto.order.VMCalendarPriceCostDTO;
......@@ -94,6 +95,242 @@ public class OrderCalculateBiz implements CalculateInterface {
}
public InProgressVO inProgressCalculate(BaseOrder baseOrder, VehicleItemDTO vehicleItemDTO, OrderRentVehicleDetail orvd, Integer useDays, OrderAccountDetail oad, Boolean isCancel) {
if(Vehicle.PRICE_TYPE_DAY == orvd.getPriceType()) {
return inProgressCalculateDay(baseOrder, vehicleItemDTO, orvd, useDays, oad, isCancel);
}else {
return inProgressCalculateHour(baseOrder, vehicleItemDTO, orvd, useDays, oad, isCancel);
}
}
public InProgressVO inProgressCalculateDay(BaseOrder baseOrder, VehicleItemDTO vehicleItemDTO, OrderRentVehicleDetail orvd, Integer useDays, OrderAccountDetail oad, Boolean isCancel){
BigDecimal refundAmount = BigDecimal.ZERO;
BigDecimal consumeAmount = BigDecimal.ZERO;
BigDecimal topViolateAmount = BigDecimal.ZERO;
BigDecimal itemChangeAmount = BigDecimal.ZERO;
//免费天数
Integer freeDays = (null == vehicleItemDTO.getCutNum())?0 :vehicleItemDTO.getCutNum();
//融入日期价格
List<VMCalendarPriceCostDTO> vmcpds = vehicleItemDTO.getVehicleDetail();
VehicleItemDTO.ParamDTO paramDTO = vehicleItemDTO.initParam(freeDays, vmcpds);
List<VMCalendarPriceCostDTO> useAmountList = CollUtil.newArrayList();
//抵消的天数
Integer offsetDays = paramDTO.getOffsetNum();
//商品真实价格
BigDecimal goodsRealAmount = baseOrder.getGoodsAmount().subtract(baseOrder.getCouponAmount());
//其他消费金额 = 商品真实价格 - 主要商品真实价格 = (商品价格 - 优惠价格)- 主要商品真实价格
BigDecimal otherItemRealAmount = goodsRealAmount.subtract(vehicleItemDTO.getRealAmount());
InProgressVO inProgressVO = new InProgressVO();
inProgressVO.setUsedDays(useDays);
//处理不记免赔违约金
if(useDays > 0) {
inProgressVO.setDelayAddPriceVO(orvd.obtainDelayAddDetail());
OrderAccountDeduction violateDeduction = orderAccountBiz.initDeduction(orvd.obtainDelayAddDetail().getDelayDamageSafeAmount(), "", DeductionTypeEnum.OTHER_DELAY_SAFE, OrderAccountDeduction.ORIGIN_DEPOSIT);
oad.getDeductions().add(violateDeduction);
}
inProgressVO.setMetaOrderUsedAmount(vehicleItemDTO.getUsedAmount(useDays));
//查看是否有增加的延期天数-->添加分别原订单和延期的使用金额
if(orvd.getDelayAddDays() > 0 && useDays > vehicleItemDTO.getTotalNum()) {
inProgressVO.setDelayAddUsedAmount(orvd.obtainDelayAddDetail().delayAddUseAmount(useDays - vehicleItemDTO.getTotalNum()));
}
inProgressVO.setUsedAmount(inProgressVO.getMetaOrderUsedAmount().add(inProgressVO.getDelayAddUsedAmount()));
//使用的天数对应的免费天数
Integer useDaysMapFreeDays = vehicleItemDTO.mapFreeDays(useDays);
//计算:剩余免费天数
Integer backFreeDays = freeDays - useDaysMapFreeDays;
//待返还的优惠券编号
List<String> backCouponNos = Lists.newArrayList();
//剩余天数
Integer realResidueDays = orvd.obtainRealDayNum() - useDays;
//过了出发时间取消订单 ,优先使用免费天数
if(backFreeDays <= 0) {
//设置免费天数
inProgressVO.setUsedfreeDays(freeDays);
inProgressVO.setUsedFreeDaysAmount(vehicleItemDTO.getFreeAmount(null));
//消费天数
Integer consumeDays = useDays - offsetDays;
//如果使用天数 大于 总天数
if(useDays > vehicleItemDTO.getTotalNum()) {
//消费天数
consumeDays = vehicleItemDTO.getTotalNum() - offsetDays;
}
//需要扣除订单费用
//判断是否达到优惠券条件 不符合则返还优惠券
//计算使用天数的费用
//融入日期价格
//consumeAmount = orderItem.getUnitPrice().multiply(new BigDecimal(consumeDays+""));
for(int i = offsetDays; i < (offsetDays+ consumeDays); i++) {
consumeAmount = consumeAmount.add(vmcpds == null || vmcpds.size() <=0 ? new BigDecimal(0) : vmcpds.get(i).getConsumeAmount());
}
if(StrUtil.isNotBlank(baseOrder.getCouponTickerNos())) {
List<BigDecimal> couponAmounts = Lists.newArrayList();
for(String tickerNo : baseOrder.getCouponTickerNos().split(",")) {
//如果优惠券已经使用了,则会返回 0 元
BigDecimal couponAmount = activityFeign.use(baseOrder.getUserId(), Lists.newArrayList(tickerNo), baseOrder.getNo(), Coupon.CHANNEL_RENT, consumeAmount, ActivityFeign.TYPE_CHECK);
if(couponAmount.compareTo(BigDecimal.ZERO) > 0) {
//能够使用优惠券,则不返还
couponAmounts.add(couponAmount);
//叠加优惠券金额
inProgressVO.setCouponAmount(inProgressVO.getCouponAmount().add(couponAmount));
//叠加优惠券描述
List<Coupon> ableUsedCoupons = activityFeign.couponsByTickerNoList(CollUtil.newArrayList(tickerNo));
if(null != ableUsedCoupons && ableUsedCoupons.size() > 0) {
inProgressVO.setCouponDesc(inProgressVO.getCouponDesc()+ ableUsedCoupons.get(0).getTitle());
}
} else {
backCouponNos.add(tickerNo);
}
}
for(BigDecimal couponAmount : couponAmounts) {
consumeAmount = consumeAmount.subtract(couponAmount);
}
}
//设置消费金额,添加租车以外的消费金额
consumeAmount = consumeAmount.add(otherItemRealAmount);
inProgressVO.setConsumeAmount(consumeAmount);
refundAmount = handleConsumeAmount(oad, refundAmount, consumeAmount, goodsRealAmount, inProgressVO);
//查看是否有增加的延期天数-->添加分别原订单和延期的返回天数
if(orvd.getDelayAddDays() > 0 && realResidueDays > 0) {
inProgressVO.setDelayAddBackFreeDays(orvd.obtainDelayAddDetail().residueDelayFreeDays(realResidueDays));
inProgressVO.setBackFreeDays(inProgressVO.getDelayAddBackFreeDays());
}
//查看是否有增加的延期天数-->添加延期的已使用免费天数 和 已使用免费天数金额
if(orvd.getDelayAddDays() > 0 && useDays > vehicleItemDTO.getTotalNum()) {
inProgressVO.setUsedfreeDays(inProgressVO.getUsedfreeDays() + (orvd.getDelayAddFreeDays() - inProgressVO.getDelayAddBackFreeDays()));
inProgressVO.setUsedFreeDaysAmount(inProgressVO.getUsedFreeDaysAmount().add(orvd.obtainDelayAddDetail().delayAddFreeAmount(useDays - vehicleItemDTO.getTotalNum())));
}
}else {
//设置免费天数
inProgressVO.setUsedfreeDays(useDaysMapFreeDays);
inProgressVO.setUsedFreeDaysAmount(vehicleItemDTO.getFreeAmount(useDays));
//融入日期价格
Integer trueBackFreeDays = backFreeDays;
inProgressVO.setMetaOrderBackFreeDays(trueBackFreeDays);
//查看是否有增加的延期天数-->添加分别原订单和延期的返回天数
if(orvd.getDelayAddDays() > 0) {
inProgressVO.setDelayAddBackFreeDays(orvd.getDelayAddFreeDays());
}
inProgressVO.setBackFreeDays(inProgressVO.getMetaOrderBackFreeDays()+ inProgressVO.getDelayAddBackFreeDays());
//查看是否有增加的延期天数-->添加延期的已使用免费天数 和 已使用免费天数金额
//不需要
//返回优惠券
if(StrUtil.isNotBlank(baseOrder.getCouponTickerNos())) {
//没有租车消费金额,所以返回所有优惠券
backCouponNos.addAll(StrUtil.split(baseOrder.getCouponTickerNos(), ','));
}
//设置消费金额,添加租车以外的消费金额
consumeAmount = consumeAmount.add(otherItemRealAmount);
inProgressVO.setConsumeAmount(consumeAmount);
refundAmount = handleConsumeAmount(oad, refundAmount, consumeAmount, goodsRealAmount, inProgressVO);
}
inProgressVO.setRefundOrderAmount(refundAmount);
inProgressVO.setBackCoupons(backCouponNos);
List<VMCalendarPriceCostDTO> realVmcpds = Convert.toList(VMCalendarPriceCostDTO.class, vmcpds);
//查看是否有增加的延期天数-->添加延期的费用列表
if(orvd.getDelayAddDays() > 0) {
realVmcpds.addAll(orvd.obtainDelayAddDetail().getDelayAmountList());
}
//计算违约金
//residueDays * 身份价格
if(realResidueDays > 0) { //提前还车
//设置消耗费用列表
for(int i = 0; i < useDays; i++) {
useAmountList.add(BeanUtil.toBean(realVmcpds.get(i), VMCalendarPriceCostDTO.class));
}
//"{}元/天 x{}天"
BigDecimal residueAmount = BigDecimal.ZERO;
for(int i = useDays; i < realVmcpds.size(); i++) {
residueAmount = residueAmount.add(realVmcpds.get(i).getPrice());
inProgressVO.getViolateAmountList().add(realVmcpds.get(i));
}
String violateDesc = StrUtil.format("{}元", residueAmount.toString());
if(realResidueDays >= 2) {
realResidueDays = 2;
residueAmount = BigDecimal.ZERO;
inProgressVO.setViolateAmountList(CollUtil.newArrayList());
for(int i = useDays; i < (useDays + realResidueDays); i++) {
residueAmount = residueAmount.add(realVmcpds.get(i).getPrice());
inProgressVO.getViolateAmountList().add(realVmcpds.get(i));
}
violateDesc += StrUtil.format("(封顶{}元)", residueAmount);
}
inProgressVO.setViolateType(VIOLATE_TYPE_ADVANCE);
inProgressVO.setViolateAmount(residueAmount);
inProgressVO.setViolateDesc(" 提前还车违约金:"+ violateDesc);
//提前还车 修改ORIGIN_DEPOSIT 为 ORIGIN_ORDER_DEPOSIT
OrderAccountDeduction violateDeduction = orderAccountBiz.initDeduction(inProgressVO.getViolateAmount(), violateDesc, DeductionTypeEnum.VIOLATE_ADVANCE, OrderAccountDeduction.ORIGIN_ORDER_DEPOSIT);
oad.getDeductions().add(violateDeduction);
}else if (realResidueDays.equals(0)) { //准时还车
//设置消耗费用列表
useAmountList.addAll(Convert.toList(VMCalendarPriceCostDTO.class, realVmcpds));
}else if(realResidueDays < 0 && !isCancel){
//isCancel 表示是否为取消,取消则不计算延期还车(因为没有出车)
//设置消耗费用列表
useAmountList.addAll(Convert.toList(VMCalendarPriceCostDTO.class, realVmcpds));
//如果订单 出发中 或者 已完成 或者定损中
if(OrderStatusEnum.ORDER_WAIT.getCode().equals(baseOrder.getStatus()) ||
OrderStatusEnum.ORDER_FINISH.getCode().equals(baseOrder.getStatus()) ||
OrderStatusEnum.ORDER_FIXED_LOSS.getCode().equals(baseOrder.getStatus())) {
Integer overDays = 0 - realResidueDays;
String violateDesc = StrUtil.format(" 延迟{}天", overDays);
List<VMCalendarPriceCostDTO> overAmountList = orderItemBiz.getOverAmountList(realVmcpds.get(realVmcpds.size() - 1).getDate(), overDays, vehicleItemDTO.getGoodId(), baseOrder.getUserId());
BigDecimal overAmount = overAmountList.parallelStream()
.map(VMCalendarPriceCostDTO::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add).multiply(new BigDecimal(2+ ""));
//超过的天数 价格 * 200%
inProgressVO.setViolateType(VIOLATE_TYPE_DELAY);
inProgressVO.setViolateAmount(overAmount);
inProgressVO.setViolateDesc(" 延期还车违约金:"+ violateDesc);
inProgressVO.setOverAmountList(overAmountList);
inProgressVO.setViolateAmountList(overAmountList);
OrderAccountDeduction violateDeduction = orderAccountBiz.initDeduction(inProgressVO.getViolateAmount(), violateDesc, DeductionTypeEnum.VIOLATE_DELAY, OrderAccountDeduction.ORIGIN_DEPOSIT);
oad.getDeductions().add(violateDeduction);
}
}
//设置消耗费用列表
inProgressVO.setUseAmountList(useAmountList);
return inProgressVO;
}
public InProgressVO inProgressCalculateHour(BaseOrder baseOrder, VehicleItemDTO vehicleItemDTO, OrderRentVehicleDetail orvd, Integer useDays, OrderAccountDetail oad, Boolean isCancel){
BigDecimal refundAmount = BigDecimal.ZERO;
BigDecimal consumeAmount = BigDecimal.ZERO;
BigDecimal topViolateAmount = BigDecimal.ZERO;
......
package com.xxfc.platform.order.mapper;
import com.xxfc.platform.order.entity.OrderPersonInsurance;
import tk.mybatis.mapper.common.Mapper;
/**
* 订单人身保险
*
* @author libin
* @email 18178966185@163.com
* @date 2020-11-26 18:56:21
*/
public interface OrderPersonInsuranceMapper extends Mapper<OrderPersonInsurance> {
}
......@@ -58,6 +58,8 @@ import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_TRUE;
import static com.xxfc.platform.order.entity.BaseOrder.ORDER_TYPE_VEHICLE;
import static com.xxfc.platform.universal.constant.DictionaryKey.APP_ORDER;
@Controller
......@@ -167,6 +169,7 @@ public class BaseOrderController extends CommonBaseController implements UserRes
throw new BaseException(ResultCode.AJAX_WECHAT_NOTEXIST_CODE);
}
//dto.setCrtUser(Integer.valueOf(BaseContextHandler.getUserID()));
dto.setType(ORDER_TYPE_VEHICLE);
dto.setUserId(Integer.valueOf(BaseContextHandler.getUserID()));
Query query = new Query(dto);
PageDataVO<OrderPageVO> pages = PageDataVO.pageInfo(query, () -> baseOrderBiz.pageByParm(query.getSuper()));
......
package com.xxfc.platform.order.rest;
import com.github.wxiaoqi.security.common.rest.BaseController;
import com.xxfc.platform.order.biz.OrderPersonInsuranceBiz;
import com.xxfc.platform.order.entity.OrderPersonInsurance;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("orderPersonInsurance")
public class OrderPersonInsuranceController extends BaseController<OrderPersonInsuranceBiz, OrderPersonInsurance> {
}
\ No newline at end of file
......@@ -33,10 +33,7 @@ import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.persistence.Column;
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.order.entity.SpecialRent.*;
@RestController
......@@ -114,7 +111,7 @@ public class SpecialRentController extends BaseController<SpecialRentBiz, Specia
@ResponseBody
@ApiOperation(value = "分页查询可参加特惠租车")
@IgnoreUserToken
public ObjectRestResponse<SpecialRentVO> pageList(QueryDTO dto) {
public ObjectRestResponse<PageDataVO<SpecialRentVO>> pageList(QueryDTO dto) {
//查询列表数据
Query query = new Query(dto);
PageDataVO<SpecialRentVO> pages = PageDataVO.pageInfo(query, () -> baseBiz.selectByWeekend(w -> {
......@@ -131,6 +128,16 @@ public class SpecialRentController extends BaseController<SpecialRentBiz, Specia
return ObjectRestResponse.succ(pages);
}
@RequestMapping(value = "/app/unauth/app/detail", method = RequestMethod.GET)
@ResponseBody
@ApiOperation(value = "查询特惠租车详情")
@IgnoreUserToken
public ObjectRestResponse<SpecialRent> detail(BaseDetailDTO dto) {
//查询数据
AssertUtils.isBlankBean(dto);
return ObjectRestResponse.succ(baseBiz.selectById(dto.getId()));
}
@RequestMapping(value = "/appBusiness/myList", method = RequestMethod.GET)
@ResponseBody
@ApiOperation(value = "分页查询我发布的特惠租车")
......@@ -191,6 +198,7 @@ public class SpecialRentController extends BaseController<SpecialRentBiz, Specia
RentVehicleBO bo = orderRentVehicleBiz.initRentVehicleBO(dto);
bo.setOrderSign(BaseOrder.ORDER_SIGN_SPECIAL);
bo.setAppUserDTO(getAppUser());
bo.setSpecialUnitPrice(specialRent.getUnitPrice());
bo.setBookRecordId(specialRent.getBookRecordId());
orderRentVehicleService.specialCreateOrder(bo, specialRent.getOrderNo());
baseBiz.updateSelectiveById(new SpecialRent(){{
......
......@@ -440,6 +440,11 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
detail.initDate();
List<VehicleModelCalendarPriceDTO> metaVmcpds = vehicleFeign.getPriceByVehicleIdFeignV2(detail.getVehicleId(), detail.getStartTime(), detail.getEndTime(), dto.getUserid()).getData();
if(null != detail.getSpecialUnitPrice()) {
metaVmcpds.forEach(meta -> {
meta.setPrice(detail.getSpecialUnitPrice());
});
}
List<VMCalendarPriceCostDTO> vmcpds = Convert.toList(VMCalendarPriceCostDTO.class, metaVmcpds);
......@@ -451,6 +456,8 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
OrderItem driverOrderItem = orderItemBiz.initOrderItem(DRIVER_PRICE, detail.getDayNum(), "平台司机", null, ItemTypeEnum.DRIVER);
OrderItem damageSafeOrderItem = orderItemBiz.initOrderItem(DAMAGE_SAFE, detail.getDayNum(), "免赔费用", null, ItemTypeEnum.DAMAGE_SAFE);
//OrderItem personInsuranceOrderItem = orderItemBiz.initOrderItem(DAMAGE_SAFE, detail.getDayNum(), "免赔费用", null, ItemTypeEnum.PERSON_INSURANCE);
detail.setItems(new ArrayList<OrderItem>());
detail.getItems().add(vehicleOrderItem);
......@@ -568,6 +575,7 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
//生成订单明细
RentVehiclePriceVO rvp = new RentVehiclePriceVO();
rvp.setOrderSign(detail.getOrderSign());
rvp.setPriceType(vehicle.getPriceType());
rvp.setDeposit(depositAmount);
rvp.setDriverPrice(DRIVER_PRICE);
rvp.setDamageSafePrice(DAMAGE_SAFE);
......@@ -628,6 +636,11 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
detail.initDate();
List<VehicleModelCalendarPriceDTO> metaVmcpds = vehicleFeign.getPriceByVehicleIdFeignV2(detail.getVehicleId(), detail.getStartTime(), detail.getEndTime(), dto.getUserid()).getData();
if(null != detail.getSpecialUnitPrice()) {
metaVmcpds.forEach(meta -> {
meta.setPrice(detail.getSpecialUnitPrice());
});
}
List<VMCalendarPriceCostDTO> vmcpds = Convert.toList(VMCalendarPriceCostDTO.class, metaVmcpds);
......@@ -760,6 +773,7 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
//生成订单明细
RentVehiclePriceVO rvp = new RentVehiclePriceVO();
rvp.setOrderSign(detail.getOrderSign());
rvp.setPriceType(vehicle.getPriceType());
rvp.setDeposit(depositAmount);
rvp.setDriverPrice(DRIVER_PRICE);
rvp.setDamageSafePrice(DAMAGE_SAFE);
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxfc.platform.order.mapper.OrderPersonInsuranceMapper">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.xxfc.platform.order.entity.OrderPersonInsurance" id="orderPersonInsuranceMap">
<result property="id" column="id"/>
<result property="orderId" column="order_id"/>
<result property="name" column="name"/>
<result property="idCard" column="id_card"/>
<result property="orderDay" column="order_day"/>
<result property="insuranceDay" column="insurance_day"/>
<result property="amount" column="amount"/>
<result property="status" column="status"/>
<result property="crtTime" column="crt_time"/>
<result property="crtUser" column="crt_user"/>
<result property="updTime" column="upd_time"/>
<result property="updUser" column="upd_user"/>
</resultMap>
</mapper>
\ No newline at end of file
......@@ -62,6 +62,8 @@ public class DictionaryKey {
public static final String DAMAGE_SAFE = "DAMAGE_SAFE";
public static final String ILLEGAL_RESERVE = "ILLEGAL_RESERVE";
public static final String RENT_TIME_BUFFER = "RENT_TIME_BUFFER";
public static final String RENT_TIME_HOUR_BUFFER = "RENT_TIME_HOUR_BUFFER";
public static final String RENT_PERSON_INSURANCE = "RENT_PERSON_INSURANCE";
/**
* 旅游:保险费用
......
......@@ -57,8 +57,9 @@ public interface CalculateInterface {
default Integer getIncludeHours(Long startLong, Long endLong) {
Map<String, Dictionary> dictionaryMap = getThirdFeign().dictionaryGetAll4Map().getData();
Long hourLong = (60L * 60L * 1000L);
Long minuteLong = (60L * 1000L);
//Long dayLong = hourLong * 24;
Long bufferLong = 0L;
Long bufferLong = Long.valueOf(dictionaryMap.get(APP_ORDER+ "_"+ DictionaryKey.RENT_TIME_HOUR_BUFFER).getDetail()) * minuteLong;
//计算:使用天数 当前时间 - 开始时间的0时0分0秒
Long bookTimeLag = endLong - startLong;
......@@ -70,16 +71,16 @@ public interface CalculateInterface {
// log.info("bookTimeLag {}", new BigDecimal(bookTimeLag + ""));
// log.info("divide {}", new BigDecimal(hourLong+ ""));
Integer hourDays = new BigDecimal(bookTimeLag + "").divide(new BigDecimal(hourLong+ ""), 0, RoundingMode.DOWN).intValue();
Integer hourNums = new BigDecimal(bookTimeLag + "").divide(new BigDecimal(hourLong+ ""), 0, RoundingMode.DOWN).intValue();
Long excess = bookTimeLag%hourLong;
if(excess > bufferLong) {
hourDays += 1;
hourNums += 1;
}
if(0 == hourDays) {
hourDays = 1;
if(0 == hourNums) {
hourNums = 1;
}
return hourDays;
return hourNums;
}
}
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