Commit 7cdca520 authored by 周健威's avatar 周健威

添加人身保险

parent 38ba142c
......@@ -19,6 +19,10 @@ import lombok.Data;
@Table(name = "order_person_insurance")
public class OrderPersonInsurance implements Serializable {
private static final long serialVersionUID = 1L;
public static final int STATUS_PAY = 1;
public static final int STATUS_CNL = 2;
public static final int STATUS_TOPAY = 3;
/**
* 主键
......@@ -71,10 +75,10 @@ public class OrderPersonInsurance implements Serializable {
private BigDecimal amount;
/**
* 状态 1--已支付;2--已退款
* 状态 1--已支付;2--已退款; 3--待支付;
*/
@Column(name = "status")
@ApiModelProperty(value = "状态 1--已支付;2--已退款")
@ApiModelProperty(value = "状态 1--已支付;2--已退款; 3--待支付;")
private Integer status;
/**
......
package com.xxfc.platform.order.entity.inter;
import cn.hutool.core.collection.CollUtil;
import com.xxfc.platform.order.contant.enumerate.ItemTypeEnum;
import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.entity.OrderItem;
......@@ -20,4 +21,14 @@ public interface OrderItemInter {
return null;
}
default List<OrderItem> getItemsByTypeEnum(ItemTypeEnum itemTypeEnum) {
List<OrderItem> returnItems = CollUtil.newArrayList();
for(OrderItem item: getItems()) {
if(itemTypeEnum.getCode().equals(item.getType())) {
returnItems.add(item);
}
}
return returnItems;
}
}
package com.xxfc.platform.order.pojo.order;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.xxfc.platform.activity.entity.Coupon;
import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.entity.OrderItem;
import com.xxfc.platform.order.entity.OrderPersonInsurance;
import com.xxfc.platform.order.entity.inter.OrderDetail;
import com.xxfc.platform.order.entity.OrderRentVehicleDetail;
import com.xxfc.platform.order.pojo.OrderAccompanyDTO;
......@@ -18,6 +20,8 @@ import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_FALSE;
@Data
public class RentVehicleBO extends OrderRentVehicleDetail implements OrderDetail {
private BaseOrder order;
......@@ -110,6 +114,10 @@ public class RentVehicleBO extends OrderRentVehicleDetail implements OrderDetail
*/
private String endDateTimeStr;
private Integer needPersonInsurance;
private List<OrderPersonInsurance> insurances;
private List<OrderPersonInsurance> confirmInsurances = CollUtil.newArrayList();
public void initDate() {
this.startDate = DateUtil.date(getStartTime());
this.endDate = DateUtil.date(getEndTime());
......
......@@ -47,6 +47,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.order.entity.OrderPersonInsurance.*;
import static com.xxfc.platform.order.pojo.account.OrderAccountDeduction.ORIGIN_DEPOSIT;
import static com.xxfc.platform.order.pojo.account.OrderAccountDeduction.ORIGIN_ORDER_DEPOSIT;
import static com.xxfc.platform.order.pojo.pay.NotifyUrlDTO.PAY_WAY_ALI;
......@@ -317,9 +318,9 @@ public class OrderAccountBiz extends BaseBiz<OrderAccountMapper,OrderAccount> {
return deductGoodsAmount;
}
public BigDecimal calculatePersonInsurance(Long timeLag) {
BigDecimal amount = BigDecimal.ZERO;
public void calculatePersonInsurance(Long timeLag, OrderPersonInsurance opi) {
opi.setAmount(BigDecimal.ZERO);
opi.setStatus(-1);
//获取天
Integer remainder = Long.valueOf(timeLag%(1000L * 60L * 60L * 24L)).intValue();
Integer dayLag = Long.valueOf(timeLag/(1000L * 60L * 60L * 24L)).intValue() + remainder > 0? 1: 0;
......@@ -332,14 +333,19 @@ public class OrderAccountBiz extends BaseBiz<OrderAccountMapper,OrderAccount> {
continue;
}
String[] names = dic.getName().split("\\|");
if(names.length < 2) {
continue;
}
//符合范围
if(IntervalUtil.staticIsInTheInterval(dayLag.toString(), dic.getName())){
amount = new BigDecimal(dic.getDetail());
if(IntervalUtil.staticIsInTheInterval(dayLag.toString(), names[0])){
opi.setAmount(new BigDecimal(dic.getDetail()));
opi.setStatus(STATUS_TOPAY);
opi.setInsuranceDay(Integer.valueOf(names[1]));
break;
}
}
return amount;
}
/**
......
......@@ -142,6 +142,9 @@ public abstract class AbstractOrderHandle<Biz extends BaseBiz, Detail extends Or
/**
* 处理订单详情
* 1、补充baseorder 信息 update
* 2、插入item
* 3、判断是否支付
* @param detail
*/
public void handleDetail(Detail detail){
......
......@@ -16,16 +16,13 @@ import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.xxfc.platform.activity.entity.Coupon;
import com.xxfc.platform.activity.feign.ActivityFeign;
import com.xxfc.platform.order.biz.OrderCostDetailBiz;
import com.xxfc.platform.order.biz.OrderRentVehicleBiz;
import com.xxfc.platform.order.biz.OrderTemplateBiz;
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.OrderCostEnum;
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.OrderItem;
import com.xxfc.platform.order.entity.OrderTemplate;
import com.xxfc.platform.order.entity.*;
import com.xxfc.platform.order.pojo.OrderAccompanyDTO;
import com.xxfc.platform.order.pojo.dto.CompanyWalletDetailDTO;
import com.xxfc.platform.order.pojo.order.RentVehicleBO;
......@@ -36,6 +33,7 @@ import com.xxfc.platform.universal.feign.ThirdFeign;
import com.xxfc.platform.vehicle.common.RestResponse;
import com.xxfc.platform.vehicle.constant.AccompanyingItemType;
import com.xxfc.platform.vehicle.entity.*;
import com.xxfc.platform.vehicle.entity.BranchCompany;
import com.xxfc.platform.vehicle.feign.VehicleFeign;
import com.xxfc.platform.vehicle.pojo.RentVehicleBookDTO;
import com.xxfc.platform.vehicle.pojo.dto.VehicleModelCalendarPriceDTO;
......@@ -57,6 +55,8 @@ import java.util.stream.Collectors;
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.contant.enumerate.ItemTypeEnum.ACCOMPANY;
import static com.xxfc.platform.order.entity.OrderPersonInsurance.STATUS_PAY;
import static com.xxfc.platform.order.entity.OrderPersonInsurance.STATUS_TOPAY;
import static com.xxfc.platform.order.pojo.order.add.AddRentVehicleDTO.GOODS_DEPOSIT_TYPE_UP;
import static com.xxfc.platform.universal.constant.DictionaryKey.APP_ORDER;
......@@ -88,6 +88,15 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
@Autowired
ActivityFeign activityFeign;
@Autowired
OrderCalculateBiz orderCalculateBiz;
@Autowired
OrderAccountBiz orderAccountBiz;
@Autowired
OrderPersonInsuranceBiz orderPersonInsuranceBiz;
@PostConstruct
public void init(){
......@@ -323,6 +332,22 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
//
bo.setMetaEndTime(bo.getEndTime());
//插入人身保险列表
if(SYS_TRUE == bo.getNeedPersonInsurance()){
for(OrderPersonInsurance opi : bo.getConfirmInsurances()) {
opi.setOrderId(bo.getOrder().getId());
orderPersonInsuranceBiz.insertSelective(opi);
}
}
/**
* 处理订单详情
* 1、补充baseorder 信息 update
* 2、插入item
* 3、判断是否支付
* @param detail
*/
super.handleDetail(bo);
}catch (Exception e) {
//事务补偿处理
......@@ -423,6 +448,7 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
BigDecimal metaVehicleAmount = BigDecimal.ZERO;
BigDecimal driverAmount = BigDecimal.ZERO;
BigDecimal damageSafeAmount = BigDecimal.ZERO;
BigDecimal personInsuranceAmount = BigDecimal.ZERO;
BigDecimal couponAmount = BigDecimal.ZERO;
BigDecimal depositAmount = BigDecimal.ZERO;
String couponDesc = "";
......@@ -455,8 +481,7 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
, VehicleItemDTO.class);
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);
// OrderItem personInsuranceOrderItem = orderItemBiz.initOrderItem(DAMAGE_SAFE, detail.getDayNum(), "免赔费用", null, ItemTypeEnum.PERSON_INSURANCE);
detail.setItems(new ArrayList<OrderItem>());
detail.getItems().add(vehicleOrderItem);
......@@ -534,8 +559,22 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
detail.getItems().add(damageSafeOrderItem);
}
if(SYS_TRUE == detail.getNeedPersonInsurance() && CollUtil.isNotEmpty(detail.getInsurances())) {
for(OrderPersonInsurance opi : detail.getInsurances()) {
opi.setOrderDay(detail.getDayNum());
//计算天数
orderAccountBiz.calculatePersonInsurance(detail.getEndTime() - detail.getStartTime(), opi);
if(STATUS_TOPAY == opi.getStatus()) {
detail.getConfirmInsurances().add(BeanUtil.toBean(opi, OrderPersonInsurance.class));
OrderItem personInsuranceOrderItem = orderItemBiz.initOrderItem(opi.getAmount(), 1, "人身保险", null, ItemTypeEnum.PERSON_INSURANCE, JSONUtil.toJsonStr(opi));
detail.getItems().add(personInsuranceOrderItem);
personInsuranceAmount = personInsuranceAmount.add(opi.getAmount());
}
}
}
//商品价格
goodsAmount = goodsAmount.add(vehicleAmount).add(driverAmount).add(damageSafeAmount);
goodsAmount = goodsAmount.add(vehicleAmount).add(driverAmount).add(damageSafeAmount).add(personInsuranceAmount);
//vehicleAmount 优惠券处理
if(null != detail.getTickerNo() && detail.getTickerNo().size() > 0) {
......@@ -616,6 +655,7 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
BigDecimal metaVehicleAmount = BigDecimal.ZERO;
BigDecimal driverAmount = BigDecimal.ZERO;
BigDecimal damageSafeAmount = BigDecimal.ZERO;
BigDecimal personInsuranceAmount = BigDecimal.ZERO;
BigDecimal couponAmount = BigDecimal.ZERO;
BigDecimal depositAmount = BigDecimal.ZERO;
String couponDesc = "";
......@@ -655,28 +695,6 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
detail.setItems(new ArrayList<OrderItem>());
detail.getItems().add(vehicleOrderItem);
// //如果用户存在,免费天数
// if(null != dto && null != detail.getRentFreeDay() && detail.getRentFreeDay() > 0 ) {
// if(null == dto.getRentFreeDays() || dto.getRentFreeDays() <= 0) {
// throw new BaseException(ResultCode.PARAM_EPIRE_CODE, new HashSet<String>() {{
// add("免费租车天数不存在或为0");
// }});
// }
//
//// //循环价格列表 获得对应消耗的免费天数
// vehicleOrderItem.initDetail(dto.getRentFreeDays());
// freeDayNum = vehicleOrderItem.getCutNum();
// offsetNum = vehicleOrderItem.getOffsetNum();
// vehicleDayNum = detail.getDayNum() - offsetNum;
// detail.getOrder().setHasMemberRight(SYS_TRUE);
// }else {
// vehicleOrderItem.initDetail(0);
// vehicleDayNum = detail.getDayNum();
// }
//
// vmcpds = vehicleOrderItem.getVehicleDetail();
// detail.setFreeDays(freeDayNum);
vehicleOrderItem.initDetail();
vmcpds = vehicleOrderItem.getVehicleDetail();
vehicleHourNum = detail.getHourNum();
......@@ -687,20 +705,6 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
//如果用户存在,并且为会员,并且车辆有优惠价
//默认折扣默认100
detail.setRebate(100);
// if(null != dto && SYS_TRUE.equals(dto.getIsMember()) && !NONE.getCode().equals(dto.getMemberLevel()) && !DISCOUNT_STATUS_NONE.equals(vehicleModel.getRentDiscountStatus())) {
// String[] prices = StrUtil.isBlank(vehicleModel.getRentDiscountPrice())
// ?new String[]{vehicleModel.getPrice().toString(),vehicleModel.getPrice().toString(),vehicleModel.getPrice().toString()}
// :vehicleModel.getRentDiscountPrice().split(",");
// //设置是否使用会员权益
// for(VMCalendarPriceCostDTO vmcpcd : vehicleOrderItem.getVehicleDetail()) {
// if(!vmcpcd.getNo_discount_price().equals(vmcpcd.getPrice())) {
// detail.getOrder().setHasMemberRight(SYS_TRUE);
// break;
// }
// }
//
// detail.setRebate(dto.getDiscount());
// }
//计算价格
if(vehicleHourNum > 0) {
......@@ -732,8 +736,22 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
detail.getItems().add(damageSafeOrderItem);
}
if(SYS_TRUE == detail.getNeedPersonInsurance() && CollUtil.isNotEmpty(detail.getInsurances())) {
for(OrderPersonInsurance opi : detail.getInsurances()) {
opi.setOrderDay(detail.getDayNum());
//计算天数
orderAccountBiz.calculatePersonInsurance(detail.getEndTime() - detail.getStartTime(), opi);
if(STATUS_TOPAY == opi.getStatus()) {
detail.getConfirmInsurances().add(BeanUtil.toBean(opi, OrderPersonInsurance.class));
OrderItem personInsuranceOrderItem = orderItemBiz.initOrderItem(opi.getAmount(), 1, "人身保险", null, ItemTypeEnum.PERSON_INSURANCE, JSONUtil.toJsonStr(opi));
detail.getItems().add(personInsuranceOrderItem);
personInsuranceAmount = personInsuranceAmount.add(opi.getAmount());
}
}
}
//商品价格
goodsAmount = goodsAmount.add(vehicleAmount).add(driverAmount).add(damageSafeAmount);
goodsAmount = goodsAmount.add(vehicleAmount).add(driverAmount).add(damageSafeAmount).add(personInsuranceAmount);
//vehicleAmount 优惠券处理
if(null != detail.getTickerNo() && detail.getTickerNo().size() > 0) {
......
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