Commit cb63c944 authored by libin's avatar libin

Merge branch 'holiday-price' into dev

# Conflicts:
#	ace-modules/ace-admin-api/src/main/java/com/github/wxiaoqi/security/admin/feign/UserFeign.java
#	xx-vehicle/xx-vehicle-api/src/main/java/com/xxfc/platform/vehicle/feign/VehicleFeign.java
parents c50b26f2 8b877207
...@@ -135,4 +135,7 @@ public interface UserFeign { ...@@ -135,4 +135,7 @@ public interface UserFeign {
@RequestParam(value = "cono",required = false) String cono, @RequestParam(value = "cono",required = false) String cono,
@RequestParam(value = "reason",required = false) String reason, @RequestParam(value = "reason",required = false) String reason,
@RequestParam(value = "isSuccess") Boolean isSuccess); @RequestParam(value = "isSuccess") Boolean isSuccess);
@GetMapping("/member/user")
BaseUserMember findBaseUserMemberByUserId(@RequestParam(value = "userId") Integer userId);
} }
package com.github.wxiaoqi.security.admin.mapper; package com.github.wxiaoqi.security.admin.mapper;
import com.github.wxiaoqi.security.admin.entity.BaseUserMemberLevel; import com.github.wxiaoqi.security.admin.entity.BaseUserMemberLevel;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;
import tk.mybatis.mapper.common.Mapper; import tk.mybatis.mapper.common.Mapper;
import java.util.List; import java.util.List;
...@@ -14,7 +13,6 @@ import java.util.List; ...@@ -14,7 +13,6 @@ import java.util.List;
* @email nishijjo@qq.com * @email nishijjo@qq.com
* @date 2019-06-11 11:06:45 * @date 2019-06-11 11:06:45
*/ */
@Repository
public interface BaseUserMemberLevelMapper extends Mapper<BaseUserMemberLevel> { public interface BaseUserMemberLevelMapper extends Mapper<BaseUserMemberLevel> {
List<BaseUserMemberLevel> selectUserMembersLevelByLevels(@Param("levels") List<Integer> levels); List<BaseUserMemberLevel> selectUserMembersLevelByLevels(@Param("levels") List<Integer> levels);
......
package com.github.wxiaoqi.security.admin.rest; package com.github.wxiaoqi.security.admin.rest;
import com.github.wxiaoqi.security.admin.biz.BaseUserMemberBiz; import com.github.wxiaoqi.security.admin.biz.BaseUserMemberBiz;
import com.github.wxiaoqi.security.admin.dto.BaseUserMemberVO;
import com.github.wxiaoqi.security.admin.dto.UserMemberDTO; import com.github.wxiaoqi.security.admin.dto.UserMemberDTO;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse; import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -49,4 +50,9 @@ public class UserMemberController { ...@@ -49,4 +50,9 @@ public class UserMemberController {
) throws Exception { ) throws Exception {
return memberBiz.upMemberDays(userId, days, type); return memberBiz.upMemberDays(userId, days, type);
} }
@GetMapping("/user")
public BaseUserMemberVO findBaseUserMemberByUserId(@RequestParam(value = "userId") Integer userId){
return memberBiz.findOneByUserId(userId);
}
} }
...@@ -2,6 +2,7 @@ package com.xxfc.platform.order.entity; ...@@ -2,6 +2,7 @@ package com.xxfc.platform.order.entity;
import java.io.Serializable; import java.io.Serializable;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Date; import java.util.Date;
import javax.persistence.*; import javax.persistence.*;
...@@ -146,6 +147,20 @@ public class OrderItem implements Serializable { ...@@ -146,6 +147,20 @@ public class OrderItem implements Serializable {
return calculateAmount; return calculateAmount;
} }
public BigDecimal calculateVehicleUnitPrice(BigDecimal vehicleAmount, BigDecimal metaVehicleAmount, Boolean isSetRealAmount) {
BigDecimal unitPrice = vehicleAmount.divide(new BigDecimal(getCalculateNum()+ ""), 2, RoundingMode.HALF_UP);
BigDecimal metaUnitPrice = metaVehicleAmount.divide(new BigDecimal(getCalculateNum()+ ""), 2, RoundingMode.HALF_UP);
if(isSetRealAmount) {
setRealAmount(vehicleAmount);
}
setUnitPrice(unitPrice);
setMetaUnitPrice(metaUnitPrice);
return unitPrice;
}
public BigDecimal getBuyAmount() { public BigDecimal getBuyAmount() {
return getUnitPrice().multiply(new BigDecimal(getBuyNum() + "")); return getUnitPrice().multiply(new BigDecimal(getBuyNum() + ""));
} }
......
package com.xxfc.platform.order.pojo.order; package com.xxfc.platform.order.pojo.order;
import com.xxfc.platform.order.entity.OrderItem; import com.xxfc.platform.order.entity.OrderItem;
import lombok.Data;
public class OrderItemDTO extends OrderItem { import java.math.BigDecimal;
@Data
public class OrderItemDetailDTO {
Integer day;
BigDecimal price;
} }
package com.xxfc.platform.order.pojo.order; package com.xxfc.platform.order.pojo.order;
import cn.hutool.core.date.DateUtil;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO; import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.xxfc.platform.activity.entity.Coupon; import com.xxfc.platform.activity.entity.Coupon;
import com.xxfc.platform.order.entity.BaseOrder; import com.xxfc.platform.order.entity.BaseOrder;
...@@ -12,6 +13,7 @@ import com.xxfc.platform.vehicle.pojo.BookVehicleVO; ...@@ -12,6 +13,7 @@ import com.xxfc.platform.vehicle.pojo.BookVehicleVO;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.util.Date;
import java.util.List; import java.util.List;
@Data @Data
...@@ -59,4 +61,19 @@ public class RentVehicleBO extends OrderRentVehicleDetail implements OrderDetail ...@@ -59,4 +61,19 @@ public class RentVehicleBO extends OrderRentVehicleDetail implements OrderDetail
*/ */
@ApiModelProperty(hidden = true) @ApiModelProperty(hidden = true)
Integer useType = 1; Integer useType = 1;
/**
* 开始时间
*/
private Date startDate;
/**
* 开始时间
*/
private Date endDate;
public void initDate() {
this.startDate = DateUtil.date(getStartTime());
this.endDate = DateUtil.date(getEndDate());
}
} }
...@@ -40,10 +40,15 @@ public class RentVehiclePriceVO extends OrderPriceVO{ ...@@ -40,10 +40,15 @@ public class RentVehiclePriceVO extends OrderPriceVO{
// private Integer originDayNum; // private Integer originDayNum;
/** /**
* 免费天数 * 消耗的免费天数
*/ */
private Integer freeDayNum = 0; private Integer freeDayNum = 0;
/**
* 扣减天数
*/
private Integer cutDayNum = 0;
/** /**
* 免费价格 * 免费价格
*/ */
......
...@@ -18,7 +18,7 @@ import java.math.BigDecimal; ...@@ -18,7 +18,7 @@ import java.math.BigDecimal;
*/ */
@Service @Service
public class OrderItemBiz extends BaseBiz<OrderItemMapper,OrderItem> { public class OrderItemBiz extends BaseBiz<OrderItemMapper,OrderItem> {
public OrderItem initOrderItem(BigDecimal price, Integer num, String name, Integer goodId, ItemTypeEnum itemTypeEnum){ public OrderItem initOrderItem(BigDecimal price, Integer num, String name, Integer goodId, ItemTypeEnum itemTypeEnum, String detail){
return new OrderItem(){{ return new OrderItem(){{
setMetaUnitPrice(price); setMetaUnitPrice(price);
setUnitPrice(price); setUnitPrice(price);
...@@ -30,6 +30,11 @@ public class OrderItemBiz extends BaseBiz<OrderItemMapper,OrderItem> { ...@@ -30,6 +30,11 @@ public class OrderItemBiz extends BaseBiz<OrderItemMapper,OrderItem> {
setName(name); setName(name);
setGoodId(goodId); setGoodId(goodId);
setType(itemTypeEnum.getCode()); setType(itemTypeEnum.getCode());
setDetail(detail);
}}; }};
} }
public OrderItem initOrderItem(BigDecimal price, Integer num, String name, Integer goodId, ItemTypeEnum itemTypeEnum){
return initOrderItem(price, num, name, goodId, itemTypeEnum, null);
}
} }
\ No newline at end of file
...@@ -37,6 +37,7 @@ import com.xxfc.platform.vehicle.entity.VehicleBookRecord; ...@@ -37,6 +37,7 @@ import com.xxfc.platform.vehicle.entity.VehicleBookRecord;
import com.xxfc.platform.vehicle.entity.VehicleModel; import com.xxfc.platform.vehicle.entity.VehicleModel;
import com.xxfc.platform.vehicle.feign.VehicleFeign; import com.xxfc.platform.vehicle.feign.VehicleFeign;
import com.xxfc.platform.vehicle.pojo.RentVehicleBookDTO; import com.xxfc.platform.vehicle.pojo.RentVehicleBookDTO;
import com.xxfc.platform.vehicle.pojo.dto.VehicleModelCalendarPriceDTO;
import com.xxfc.platform.vehicle.pojo.vo.AccompanyingItemVo; import com.xxfc.platform.vehicle.pojo.vo.AccompanyingItemVo;
import lombok.Data; import lombok.Data;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -220,12 +221,14 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl ...@@ -220,12 +221,14 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
BigDecimal orderAmount = BigDecimal.ZERO; BigDecimal orderAmount = BigDecimal.ZERO;
BigDecimal goodsAmount = BigDecimal.ZERO; BigDecimal goodsAmount = BigDecimal.ZERO;
BigDecimal vehicleAmount = BigDecimal.ZERO; BigDecimal vehicleAmount = BigDecimal.ZERO;
BigDecimal metaVehicleAmount = BigDecimal.ZERO;
BigDecimal driverAmount = BigDecimal.ZERO; BigDecimal driverAmount = BigDecimal.ZERO;
BigDecimal damageSafeAmount = BigDecimal.ZERO; BigDecimal damageSafeAmount = BigDecimal.ZERO;
BigDecimal couponAmount = BigDecimal.ZERO; BigDecimal couponAmount = BigDecimal.ZERO;
String couponDesc = ""; String couponDesc = "";
Integer vehicleDayNum = 0; Integer vehicleDayNum = 0;
Integer freeDayNum = 0; Integer freeDayNum = 0;
Integer cutDayNum = 0;
//当前用户 //当前用户
AppUserDTO dto = detail.getAppUserDTO(); AppUserDTO dto = detail.getAppUserDTO();
...@@ -233,28 +236,39 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl ...@@ -233,28 +236,39 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
//车型信息 //车型信息
VehicleModel vehicleModel = vehicleFeign.get(detail.getModelId()).getData(); VehicleModel vehicleModel = vehicleFeign.get(detail.getModelId()).getData();
detail.initDate();
List<VehicleModelCalendarPriceDTO> vmcpds = vehicleFeign.findVehicleModelCalendarPriceByDate(detail.getStartDate(), detail.getEndDate(), detail.getModelId(), dto.getUserid());
//设置Item //设置Item
OrderItem vehicleOrderItem = orderItemBiz.initOrderItem(vehicleModel.getPrice(), detail.getDayNum(), vehicleModel.getName(), vehicleModel.getId(), ItemTypeEnum.VEHICLE_MODEL); OrderItem vehicleOrderItem = orderItemBiz.initOrderItem(vehicleModel.getPrice(), detail.getDayNum(), vehicleModel.getName(), vehicleModel.getId(), ItemTypeEnum.VEHICLE_MODEL, JSONUtil.parseArray(vmcpds).toString());
OrderItem driverOrderItem = orderItemBiz.initOrderItem(DRIVER_PRICE, detail.getDayNum(), "平台司机", null, ItemTypeEnum.DRIVER); OrderItem driverOrderItem = orderItemBiz.initOrderItem(DRIVER_PRICE, detail.getDayNum(), "平台司机", null, ItemTypeEnum.DRIVER);
OrderItem damageSafeOrderItem = orderItemBiz.initOrderItem(DAMAGE_SAFE, detail.getDayNum(), "免赔费用", null, ItemTypeEnum.DAMAGE_SAFE); OrderItem damageSafeOrderItem = orderItemBiz.initOrderItem(DAMAGE_SAFE, detail.getDayNum(), "免赔费用", null, ItemTypeEnum.DAMAGE_SAFE);
detail.setItems(new ArrayList<OrderItem>()); detail.setItems(new ArrayList<OrderItem>());
detail.getItems().add(vehicleOrderItem); detail.getItems().add(vehicleOrderItem);
//如果用户存在,并且为会员,并且车辆有优惠价 //如果用户存在,免费天数
if(null != dto && null != detail.getRentFreeDay() && detail.getRentFreeDay() > 0 ) { if(null != dto && null != detail.getRentFreeDay() && detail.getRentFreeDay() > 0 ) {
if(null == dto.getRentFreeDays() || dto.getRentFreeDays() <= 0) { if(null == dto.getRentFreeDays() || dto.getRentFreeDays() <= 0) {
throw new BaseException(ResultCode.PARAM_EPIRE_CODE, new HashSet<String>() {{ throw new BaseException(ResultCode.PARAM_EPIRE_CODE, new HashSet<String>() {{
add("免费租车天数不存在或为0"); add("免费租车天数不存在或为0");
}}); }});
} }
if(detail.getDayNum() > dto.getRentFreeDays()) {
freeDayNum = dto.getRentFreeDays(); //循环价格列表 获得对应消耗的免费天数
for(VehicleModelCalendarPriceDTO vmcpd : vmcpds) {
//如果新的相加消耗天数 大于 拥有天数
if(freeDayNum+ vmcpd.getFreeDays() > dto.getRentFreeDays()) {
//freeDayNum = dto.getRentFreeDays();
break;
}else { }else {
freeDayNum = detail.getDayNum(); freeDayNum += detail.getDayNum();
cutDayNum += 1;
} }
vehicleOrderItem.setCutNum(freeDayNum); }
vehicleDayNum = detail.getDayNum() - freeDayNum; vehicleOrderItem.setCutNum(cutDayNum);
vehicleDayNum = detail.getDayNum() - cutDayNum;
detail.getOrder().setHasMemberRight(SYS_TRUE); detail.getOrder().setHasMemberRight(SYS_TRUE);
}else { }else {
vehicleDayNum = detail.getDayNum(); vehicleDayNum = detail.getDayNum();
...@@ -272,27 +286,37 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl ...@@ -272,27 +286,37 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
String[] prices = StrUtil.isBlank(vehicleModel.getRentDiscountPrice()) String[] prices = StrUtil.isBlank(vehicleModel.getRentDiscountPrice())
?new String[]{vehicleModel.getPrice().toString(),vehicleModel.getPrice().toString(),vehicleModel.getPrice().toString()} ?new String[]{vehicleModel.getPrice().toString(),vehicleModel.getPrice().toString(),vehicleModel.getPrice().toString()}
:vehicleModel.getRentDiscountPrice().split(","); :vehicleModel.getRentDiscountPrice().split(",");
HandleDiscountDTO handleDiscountDTO = new HandleDiscountDTO(); // HandleDiscountDTO handleDiscountDTO = new HandleDiscountDTO();
handleDiscountDTO.setRebate(100); // handleDiscountDTO.setRebate(100);
handleDiscountDTO.setModelAmount(vehicleModel.getPrice()); // handleDiscountDTO.setModelAmount(vehicleModel.getPrice());
switch (MemberEnum.getByCode(dto.getMemberLevel())) { // switch (MemberEnum.getByCode(dto.getMemberLevel())) {
case NORMAL: // case NORMAL:
handleDiscountDTO = handleDiscount(dto, vehicleModel, prices, NORMAL); // handleDiscountDTO = handleDiscount(dto, vehicleModel, prices, NORMAL);
detail.getOrder().setHasMemberRight(SYS_TRUE); // detail.getOrder().setHasMemberRight(SYS_TRUE);
break; // break;
case GOLD: // case GOLD:
handleDiscountDTO = handleDiscount(dto, vehicleModel, prices, GOLD); // handleDiscountDTO = handleDiscount(dto, vehicleModel, prices, GOLD);
detail.getOrder().setHasMemberRight(SYS_TRUE); // detail.getOrder().setHasMemberRight(SYS_TRUE);
break; // break;
case DIAMOND: // case DIAMOND:
handleDiscountDTO = handleDiscount(dto, vehicleModel, prices, DIAMOND); // handleDiscountDTO = handleDiscount(dto, vehicleModel, prices, DIAMOND);
detail.getOrder().setHasMemberRight(SYS_TRUE); // detail.getOrder().setHasMemberRight(SYS_TRUE);
break; // break;
default: // default:
break; // break;
// }
detail.setRebate(dto.getDiscount());
// vehicleOrderItem.setUnitPrice(handleDiscountDTO.getModelAmount());
} }
detail.setRebate(handleDiscountDTO.getRebate());
vehicleOrderItem.setUnitPrice(handleDiscountDTO.getModelAmount()); //计算价格
if(vehicleDayNum > 0) {
for(int i = cutDayNum; i < vmcpds.size(); i++) {
vehicleAmount.add(vmcpds.get(i).getPrice());
metaVehicleAmount.add(vmcpds.get(i).getNo_discount_price());
}
}else {
vehicleOrderItem.setUnitPrice(BigDecimal.ZERO);
} }
//如果有使用会员权益或者优惠券,则设置订单已优惠 //如果有使用会员权益或者优惠券,则设置订单已优惠
...@@ -300,8 +324,8 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl ...@@ -300,8 +324,8 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
detail.getOrder().setHasDiscount(SYS_TRUE); detail.getOrder().setHasDiscount(SYS_TRUE);
} }
//单价 * (购买天数 - 减免天数) //平均单价 = 总价 / 实际消费天数
vehicleAmount = vehicleAmount.add(vehicleOrderItem.getCalculateAmount(Boolean.TRUE)); vehicleOrderItem.calculateVehicleUnitPrice(vehicleAmount, metaVehicleAmount, Boolean.TRUE);
if(DRIVER_TYPE_COMPANY.equals(detail.getDriverType())) { if(DRIVER_TYPE_COMPANY.equals(detail.getDriverType())) {
//计算司机费用 //计算司机费用
...@@ -364,6 +388,7 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl ...@@ -364,6 +388,7 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
rvp.setVehicleDayNum(vehicleDayNum); rvp.setVehicleDayNum(vehicleDayNum);
rvp.setFreeDayNum(freeDayNum); rvp.setFreeDayNum(freeDayNum);
rvp.setCutDayNum(cutDayNum);
rvp.setFreeAmount(vehicleOrderItem.getCutAmount()); rvp.setFreeAmount(vehicleOrderItem.getCutAmount());
rvp.setBuyVehicleAmount(vehicleOrderItem.getBuyAmount()); rvp.setBuyVehicleAmount(vehicleOrderItem.getBuyAmount());
rvp.setRealVehicleAmount(vehicleOrderItem.getRealAmount()); rvp.setRealVehicleAmount(vehicleOrderItem.getRealAmount());
......
package com.xxfc.platform.vehicle.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/10/18 17:29
*/
@Data
@Table(name = "festival")
@NoArgsConstructor
@AllArgsConstructor
public class Festival {
@Id
@GeneratedValue(generator = "JDBC")
private Integer id;
private String name;
@Column(name = "crt_time")
private Date crtTime;
}
package com.xxfc.platform.vehicle.entity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* @author libin
* @version 1.0
* @description 车型日历价格
* @data 2019/10/14 16:32
*/
@Data
@Builder(toBuilder = true)
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "vehicle_model_calendar_price")
public class VehicleModelCalendarPrice implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(generator = "JDBC")
private Long id;
/**
* 日期设置
*/
@Column(name = "vehicle_model_day")
private Date vehicleModelDay;
/**
* 是否全局设置
*/
@Column(name = "is_global")
private Boolean isGlobal;
/**
* 车型id
*/
@Column(name = "vehicle_model_id")
private Integer vehicleModelId;
/**
* 1:倍数 2:绝对值 3:会员价
*/
private Integer type;
/**
* 倍数
*/
private Double multiple;
/**
* 抵扣天数
*/
@Column(name = "free_days")
private Integer freeDays;
/**
* 绝对值 或会员价
*/
private BigDecimal price;
/**
* 创建时间
*/
@Column(name = "crt_time")
private Date crtTime;
/**
* 更新时间
*/
@Column(name = "upd_time")
private Date updTime;
/**
* 创建者id
*/
@Column(name = "crt_userId")
private Integer crtUserId;
/**
* 更新者id
*/
@Column(name = "upd_userId")
private Integer updUserId;
@Column(name = "is_del")
private Integer isDel;
/**
* 会员等级 1:普通 2:黄金 3:钻石
*/
private Integer level;
}
package com.xxfc.platform.vehicle.entity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
import java.util.Date;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/10/14 16:30
*/
@Data
@Builder(toBuilder = true)
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "vehicle_model_holiday_price")
public class VehicleModelHolidayPrice implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(generator = "JDBC")
private Long id;
/**
* 节假日日期
*/
@Column(name = "festival_day")
private Date festivalDay;
/**
* 节假日
*/
@Column(name = "festival_id")
private Integer festivalId;
/**
* 倍数
*/
private Double multiple;
/**
* 免费天数
*/
@Column(name = "free_days")
private Integer freeDays;
/**
* 创建时间
*/
@Column(name = "crt_time")
private Date crtTime;
/**
* 创建者
*/
@Column(name = "crt_userId")
private Integer crtUserId;
/**
* 更新时间
*/
@Column(name = "upd_time")
private Date updTime;
/**
* 更新者
*/
@Column(name = "upd_userId")
private Integer updUserId;
@Column(name = "is_del")
private Integer isDel;
}
...@@ -7,6 +7,7 @@ import com.xxfc.platform.vehicle.common.RestResponse; ...@@ -7,6 +7,7 @@ import com.xxfc.platform.vehicle.common.RestResponse;
import com.xxfc.platform.vehicle.entity.*; import com.xxfc.platform.vehicle.entity.*;
import com.xxfc.platform.vehicle.pojo.*; import com.xxfc.platform.vehicle.pojo.*;
import com.xxfc.platform.vehicle.pojo.dto.BranchCompanyFindDTO; import com.xxfc.platform.vehicle.pojo.dto.BranchCompanyFindDTO;
import com.xxfc.platform.vehicle.pojo.dto.VehicleModelCalendarPriceDTO;
import com.xxfc.platform.vehicle.pojo.vo.AccompanyingItemVo; import com.xxfc.platform.vehicle.pojo.vo.AccompanyingItemVo;
import com.xxfc.platform.vehicle.pojo.vo.BranComanyLeaderVo; import com.xxfc.platform.vehicle.pojo.vo.BranComanyLeaderVo;
import com.xxfc.platform.vehicle.pojo.vo.BranchCompanyListVO; import com.xxfc.platform.vehicle.pojo.vo.BranchCompanyListVO;
...@@ -14,6 +15,7 @@ import io.swagger.annotations.ApiOperation; ...@@ -14,6 +15,7 @@ import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
...@@ -21,7 +23,7 @@ import java.util.Set; ...@@ -21,7 +23,7 @@ import java.util.Set;
/** /**
* Created by ace on 2017/9/15. * Created by ace on 2017/9/15.
*/ */
@FeignClient(name = "vehicle",contextId = "vh") @FeignClient(name = "vehicle", contextId = "vh")
public interface VehicleFeign { public interface VehicleFeign {
@GetMapping(value = "/vehicleModel/{id}") @GetMapping(value = "/vehicleModel/{id}")
public ObjectRestResponse<VehicleModel> get(@PathVariable(value = "id") int id); public ObjectRestResponse<VehicleModel> get(@PathVariable(value = "id") int id);
...@@ -33,7 +35,7 @@ public interface VehicleFeign { ...@@ -33,7 +35,7 @@ public interface VehicleFeign {
public RestResponse<Vehicle> findById(@RequestParam(value = "id") String id); public RestResponse<Vehicle> findById(@RequestParam(value = "id") String id);
@RequestMapping(value = "/vehicleInfo/getByIds", method = RequestMethod.GET) @RequestMapping(value = "/vehicleInfo/getByIds", method = RequestMethod.GET)
public RestResponse< List<Vehicle>> getByIds(@RequestParam(value = "ids") List<String> id); public RestResponse<List<Vehicle>> getByIds(@RequestParam(value = "ids") List<String> id);
//提车 //提车
@PostMapping("/active/small/departure") @PostMapping("/active/small/departure")
...@@ -53,7 +55,7 @@ public interface VehicleFeign { ...@@ -53,7 +55,7 @@ public interface VehicleFeign {
@RequestMapping(value = "/vehicleInfo/rent/book/vehicle", method = RequestMethod.POST) @RequestMapping(value = "/vehicleInfo/rent/book/vehicle", method = RequestMethod.POST)
public ObjectRestResponse<VehicleBookRecord> rentApplyVehicle(@RequestBody RentVehicleBookDTO rentVehicleBookDTO); public ObjectRestResponse<VehicleBookRecord> rentApplyVehicle(@RequestBody RentVehicleBookDTO rentVehicleBookDTO);
@RequestMapping(value ="/branchCompany/app/unauth/detail/{id}",method = RequestMethod.GET) @RequestMapping(value = "/branchCompany/app/unauth/detail/{id}", method = RequestMethod.GET)
public ObjectRestResponse<CompanyDetail> getCompanyDetail(@PathVariable(value = "id") Integer id); public ObjectRestResponse<CompanyDetail> getCompanyDetail(@PathVariable(value = "id") Integer id);
//租车拒绝预约 //租车拒绝预约
...@@ -75,10 +77,6 @@ public interface VehicleFeign { ...@@ -75,10 +77,6 @@ public interface VehicleFeign {
@RequestParam(value = "dataCompany") String dataCompany, @RequestParam(value = "dataCompany") String dataCompany,
@RequestParam(value = "dataZone") String dataZone); @RequestParam(value = "dataZone") String dataZone);
//获取分公司列表
@GetMapping("/company/base/app/unauth/companyId")
public BranchCompany companyId(@RequestParam(value = "name") String name);
@GetMapping("/branchCompany/entityList") @GetMapping("/branchCompany/entityList")
public ObjectRestResponse<List<BranchCompany>> branchCompanyEntityList(@RequestParam("entity") Map<String, Object> entity); public ObjectRestResponse<List<BranchCompany>> branchCompanyEntityList(@RequestParam("entity") Map<String, Object> entity);
...@@ -87,7 +85,7 @@ public interface VehicleFeign { ...@@ -87,7 +85,7 @@ public interface VehicleFeign {
@RequestMapping(value = "/user/license/company/getOne", method = RequestMethod.GET) @RequestMapping(value = "/user/license/company/getOne", method = RequestMethod.GET)
public RestResponse<VehicleUserLicense> getOne( public RestResponse<VehicleUserLicense> getOne(
@RequestParam(value = "id", defaultValue = "0") Integer id) throws Exception ; @RequestParam(value = "id", defaultValue = "0") Integer id) throws Exception;
@RequestMapping(value = "/user/license/multi", method = RequestMethod.GET) @RequestMapping(value = "/user/license/multi", method = RequestMethod.GET)
public ObjectRestResponse<List<VehicleUserLicense>> multi(@RequestBody QueryMultiDTO dto) throws Exception; public ObjectRestResponse<List<VehicleUserLicense>> multi(@RequestBody QueryMultiDTO dto) throws Exception;
...@@ -97,6 +95,7 @@ public interface VehicleFeign { ...@@ -97,6 +95,7 @@ public interface VehicleFeign {
/** /**
* 获取优质车型接口 * 获取优质车型接口
*
* @param page * @param page
* @param limit * @param limit
* @return 返回 * @return 返回
...@@ -106,13 +105,16 @@ public interface VehicleFeign { ...@@ -106,13 +105,16 @@ public interface VehicleFeign {
/** /**
* 根据一个id获取城市 * 根据一个id获取城市
*
* @param id * @param id
* @return * @return
*/ */
@GetMapping("/sysRegion/getSysRegionById/{id}") @GetMapping("/sysRegion/getSysRegionById/{id}")
RestResponse getSysRegionById(@PathVariable(value = "id") Integer id); RestResponse getSysRegionById(@PathVariable(value = "id") Integer id);
/** /**
* 多个城市code获取城市代码 * 多个城市code获取城市代码
*
* @param idSet * @param idSet
* @return * @return
*/ */
...@@ -121,6 +123,7 @@ public interface VehicleFeign { ...@@ -121,6 +123,7 @@ public interface VehicleFeign {
/** /**
* 获取公司所在的城市 * 获取公司所在的城市
*
* @param zoneList * @param zoneList
* @param companyList * @param companyList
* @return * @return
...@@ -147,8 +150,10 @@ public interface VehicleFeign { ...@@ -147,8 +150,10 @@ public interface VehicleFeign {
//cata //cata
/** /**
* 查询当前车型拥有的标签 * 查询当前车型拥有的标签
*
* @param ids * @param ids
* @return * @return
*/ */
...@@ -160,6 +165,7 @@ public interface VehicleFeign { ...@@ -160,6 +165,7 @@ public interface VehicleFeign {
/** /**
* 根据位置查询 * 根据位置查询
*
* @param branchCompanyFindDTO * @param branchCompanyFindDTO
* @return * @return
*/ */
...@@ -172,4 +178,18 @@ public interface VehicleFeign { ...@@ -172,4 +178,18 @@ public interface VehicleFeign {
@RequestMapping(value = "/vehicleInfo/bookRecord/update", method = RequestMethod.POST) @RequestMapping(value = "/vehicleInfo/bookRecord/update", method = RequestMethod.POST)
public ObjectRestResponse update(@RequestBody BookRecordUpdateLog bookRecordUpdateLog); public ObjectRestResponse update(@RequestBody BookRecordUpdateLog bookRecordUpdateLog);
/**
* 车型日历价格
* @param startDate
* @param endDate
* @param vehicleModelId
* @param userId
* @return
*/
@GetMapping("/vehicle_model/calendar_price/app/unauth/price")
List<VehicleModelCalendarPriceDTO> findVehicleModelCalendarPriceByDate(@RequestParam(value = "startDate") Date startDate,
@RequestParam(value = "endDate") Date endDate,
@RequestParam(value = "vehicleModelId") Integer vehicleModelId,
@RequestParam(value = "userId") Integer userId);
} }
package com.xxfc.platform.vehicle.pojo.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/10/14 17:11
*/
@Data
@Builder(toBuilder = true)
@NoArgsConstructor
@AllArgsConstructor
public class VehicleModelCalendarPriceDTO implements Serializable {
private static final long serialVersionUID = 1L;
private Date date;
private BigDecimal price;
private BigDecimal no_discount_price;
private Integer freeDays;
private Boolean isSelect;
}
package com.xxfc.platform.vehicle.pojo.dto;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/10/14 17:11
*/
@Data
@Builder(toBuilder = true)
@AllArgsConstructor
@NoArgsConstructor
public class VehicleModelCalendarPriceSaveDTO implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
/**
* 日期设置
*/
@JSONField(serialize = false)
private Date vehicleModelDay;
private String date;
/**
* 是否全局设置
*/
private Boolean isGlobal;
/**
* 车型id
*/
private Integer vehicleModelId;
/**
* 1:倍数 2:绝对值 3:会员价
*/
private Integer type;
/**
* 倍数
*/
private Double multiple;
/**
* 抵扣天数
*/
private Integer freeDays;
/**
* 绝对值 或会员价
*/
private BigDecimal price;
/**
* 会员等级 1:普通 2:黄金 3:钻石
*/
private Integer level;
}
package com.xxfc.platform.vehicle.pojo.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/10/15 18:06
*/
@Data
@Builder(toBuilder = true)
@NoArgsConstructor
@AllArgsConstructor
public class VehicleModelDTO implements Serializable {
private static final long serialVersionUID = 1L;
private Integer vehicleModelId;
private String name;
private BigDecimal basePrice;
}
package com.xxfc.platform.vehicle.pojo.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/10/14 18:59
*/
@Data
@Builder(toBuilder = true)
@NoArgsConstructor
@AllArgsConstructor
public class VehicleModelHolidayPriceDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 节假日日期
*/
private Date festivalDay;
/**
* 节假日
*/
private String festival;
/**
* 倍数
*/
private Double multiple;
/**
* 免费天数
*/
private Integer freeDays;
}
package com.xxfc.platform.vehicle.pojo.dto;
import com.github.wxiaoqi.security.common.vo.PageParam;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/10/14 18:34
*/
@Data
@Builder(toBuilder = true)
@AllArgsConstructor
@NoArgsConstructor
public class VehicleModelHolidayPriceFindDTO extends PageParam {
private String festival;
private String date;
private Integer year;
}
package com.xxfc.platform.vehicle.pojo.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/10/14 17:12
*/
@Data
@Builder(toBuilder = true)
@AllArgsConstructor
@NoArgsConstructor
public class VehicleModelHolidayPriceSaveDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 节假日id
*/
private Integer id;
/**
* 节假日日期
*/
private List<Date> date;
/**
* 节假日名称
*/
private String festival;
/**
* 倍数
*/
private Double multiple;
/**
* 免费天数
*/
private Integer freeDays;
}
package com.xxfc.platform.vehicle.pojo.vo;
import com.xxfc.platform.vehicle.pojo.dto.VehicleModelDTO;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/10/15 17:55
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class VehicleModelDayPriceVo extends VehicleModelDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 绝对值 | 会员价
*/
private BigDecimal price;
/**
* 倍数
*/
private Double multiple;
/**
* 会员等级
*/
private Integer level;
}
package com.xxfc.platform.vehicle.pojo.vo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/10/14 17:18
*/
@Data
@Builder(toBuilder = true)
@AllArgsConstructor
@NoArgsConstructor
public class VehicleModelHolidayPriceVo implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
/**
* 节假日日期
*/
private Date festivalDay;
/**
* 节假日
*/
private String festival;
/**
* 倍数
*/
private Double multiple;
/**
* 免费天数
*/
private Integer freeDays;
/**
* 创建时间
*/
private Date crtTime;
/**
* 更新时间
*/
private Date updTime;
}
package com.xxfc.platform.vehicle.biz;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.xxfc.platform.vehicle.entity.Festival;
import com.xxfc.platform.vehicle.mapper.FestivalMapper;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/10/18 17:31
*/
@Transactional(rollbackFor = Exception.class)
@Service
public class FestivalBiz extends BaseBiz<FestivalMapper,Festival> {
public void add(Festival festival){
if (Objects.isNull(festival.getId())){
festival.setCrtTime(new Date());
mapper.insertSelective(festival);
}else {
mapper.updateByPrimaryKey(festival);
}
}
public void deleteById(Integer festivalId){
Festival festival = new Festival();
festival.setId(festivalId);
mapper.deleteByPrimaryKey(festival);
}
public Map<Integer, Festival> findFestivalsByIds(List<Integer> festivalIds) {
Map<Integer,Festival> festivalMap = new HashMap<>(20);
List<Festival> festivals = mapper.selectByIdList(festivalIds);
if (CollectionUtils.isNotEmpty(festivalIds)){
festivalMap = festivals.stream().collect(Collectors.toMap(Festival::getId, Function.identity()));
}
return festivalMap;
}
}
...@@ -4,6 +4,7 @@ import com.github.pagehelper.Page; ...@@ -4,6 +4,7 @@ import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.github.wxiaoqi.security.common.biz.BaseBiz; import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse; import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.RandomUtil; import com.github.wxiaoqi.security.common.util.RandomUtil;
import com.github.wxiaoqi.security.common.vo.GoodDataVO; import com.github.wxiaoqi.security.common.vo.GoodDataVO;
...@@ -13,6 +14,7 @@ import com.xxfc.platform.vehicle.entity.VehicleModel; ...@@ -13,6 +14,7 @@ import com.xxfc.platform.vehicle.entity.VehicleModel;
import com.xxfc.platform.vehicle.mapper.VehicleModelMapper; import com.xxfc.platform.vehicle.mapper.VehicleModelMapper;
import com.xxfc.platform.vehicle.pojo.VehicleModelQueryCondition; import com.xxfc.platform.vehicle.pojo.VehicleModelQueryCondition;
import com.xxfc.platform.vehicle.pojo.VehicleModelVo; import com.xxfc.platform.vehicle.pojo.VehicleModelVo;
import com.xxfc.platform.vehicle.pojo.dto.VehicleModelDTO;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -21,6 +23,7 @@ import org.springframework.transaction.interceptor.TransactionAspectSupport; ...@@ -21,6 +23,7 @@ import org.springframework.transaction.interceptor.TransactionAspectSupport;
import tk.mybatis.mapper.entity.Example; import tk.mybatis.mapper.entity.Example;
import tk.mybatis.mapper.weekend.WeekendSqls; import tk.mybatis.mapper.weekend.WeekendSqls;
import java.math.BigDecimal;
import java.util.*; import java.util.*;
/** /**
...@@ -152,4 +155,16 @@ public class VehicleModelBiz extends BaseBiz<VehicleModelMapper, VehicleModel> { ...@@ -152,4 +155,16 @@ public class VehicleModelBiz extends BaseBiz<VehicleModelMapper, VehicleModel> {
// } // }
return goodDataVOS; return goodDataVOS;
} }
public BigDecimal findVehicleModelPriceByVehicleModelId(Integer vehicleModelId) {
BigDecimal price = mapper.selectPriceById(vehicleModelId);
if (price==null || price.doubleValue()==0.0){
throw new BaseException("该车型不存在原价");
}
return price;
}
public List<VehicleModelDTO> findAllVehicleModel() {
return mapper.findAllVehicleModel();
}
} }
\ No newline at end of file
package com.xxfc.platform.vehicle.biz;
import com.github.wxiaoqi.security.admin.entity.BaseUserMember;
import com.github.wxiaoqi.security.admin.entity.BaseUserMemberLevel;
import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.xxfc.platform.vehicle.entity.VehicleModelCalendarPrice;
import com.xxfc.platform.vehicle.mapper.VehicleModelCalendarPriceMapper;
import com.xxfc.platform.vehicle.pojo.dto.VehicleModelCalendarPriceDTO;
import com.xxfc.platform.vehicle.pojo.dto.VehicleModelCalendarPriceSaveDTO;
import com.xxfc.platform.vehicle.pojo.dto.VehicleModelDTO;
import com.xxfc.platform.vehicle.pojo.dto.VehicleModelHolidayPriceDTO;
import com.xxfc.platform.vehicle.pojo.vo.VehicleModelDayPriceVo;
import lombok.RequiredArgsConstructor;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.temporal.TemporalAdjusters;
import java.util.*;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/10/14 17:32
*/
@Transactional(rollbackFor = Exception.class)
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class VehicleModelCalendarPriceBiz extends BaseBiz<VehicleModelCalendarPriceMapper, VehicleModelCalendarPrice> {
/**
* 一个星期的第一天
*/
private static final int START_OF_WEEK = 1;
/**
* 一个星期的最后一天
*/
private static final int END_OF_WEEK = 7;
/**
* 默认折扣
*/
private static final Integer DEFAULT_DISCOUNT = 100;
/**
* 默认免费天数
*/
private static final Integer DEFAULT_FREE_DAYS = 1;
/**
* 默认会员等级
*/
private static final Integer DEFAULT_MEMBER_LEVEL = 0;
private static final String PRICE_VAL = "price";
private static final String DAYS_VAL = "freeDays";
private final VehicleModelHolidayPriceBiz vehicleModelHolidayPriceBiz;
private final VehicleModelBiz vehicleModelBiz;
private final UserFeign userFeign;
/**
* 保存
*
* @param vehicleModelCalendarPrices
* @param userId
*/
public void addVehicleModelCalendarPrice(List<VehicleModelCalendarPriceSaveDTO> vehicleModelCalendarPrices, Integer userId) {
if (CollectionUtils.isNotEmpty(vehicleModelCalendarPrices)) {
List<VehicleModelCalendarPrice> vehicleModelCalendarPriceList = new ArrayList<>();
List<Date> dateList = vehicleModelCalendarPrices.stream().peek(x -> {
VehicleModelCalendarPrice calendarPrice = new VehicleModelCalendarPrice();
BeanUtils.copyProperties(x, calendarPrice);
Date date = Date.from(LocalDate.parse(x.getDate()).atStartOfDay(ZoneId.systemDefault()).toInstant());
calendarPrice.setVehicleModelDay(date);
calendarPrice.setCrtTime(new Date());
calendarPrice.setCrtUserId(userId);
calendarPrice.setIsDel(0);
x.setVehicleModelDay(date);
vehicleModelCalendarPriceList.add(calendarPrice);
}).map(VehicleModelCalendarPriceSaveDTO::getVehicleModelDay).distinct().collect(Collectors.toList());
//1.删除当月做更改了的日期的数据
VehicleModelCalendarPrice vehicleModelCalendarPrice = new VehicleModelCalendarPrice();
vehicleModelCalendarPrice.setUpdUserId(userId);
vehicleModelCalendarPrice.setUpdTime(new Date());
vehicleModelCalendarPrice.setIsDel(1);
Example example = new Example(VehicleModelCalendarPrice.class);
Example.Criteria criteria = example.createCriteria();
criteria.andIn("vehicleModelDay", dateList);
mapper.updateByExampleSelective(vehicleModelCalendarPrice, example);
//2.插入新的数据
mapper.insertList(vehicleModelCalendarPriceList);
}
}
/**
* 查询全部车型
*
* @return
*/
public List<VehicleModelDayPriceVo> listVehicleModelPrice() {
List<VehicleModelDayPriceVo> vehicleModelDayPriceVos = new ArrayList<>();
List<VehicleModelDTO> vehicleModelDTOS = vehicleModelBiz.findAllVehicleModel();
VehicleModelDayPriceVo vehicleModelDayPriceVo;
for (VehicleModelDTO vehicleModelDTO : vehicleModelDTOS) {
vehicleModelDayPriceVo = new VehicleModelDayPriceVo();
BeanUtils.copyProperties(vehicleModelDTO, vehicleModelDayPriceVo);
vehicleModelDayPriceVos.add(vehicleModelDayPriceVo);
}
return vehicleModelDayPriceVos;
}
/**
* 根据俱体日期查询
*
* @param currentDate
* @return
*/
public List<VehicleModelDayPriceVo> findVehicleModelcalendarPriceByDateWithDay(Date currentDate) {
List<VehicleModelDayPriceVo> vehicleModelDayPriceVos = new ArrayList<>();
Map<Integer, VehicleModelCalendarPrice> vehicleModelCalendarPriceMap = null;
Example example = new Example(VehicleModelCalendarPrice.class);
Example.Criteria criteria = example.createCriteria();
criteria.andEqualTo("vehicleModelDay", currentDate);
criteria.andEqualTo("isDel", 0);
List<VehicleModelCalendarPrice> vehicleModelCalendarPriceList = mapper.selectByExample(example);
if (CollectionUtils.isNotEmpty(vehicleModelCalendarPriceList)) {
vehicleModelCalendarPriceMap = vehicleModelCalendarPriceList.stream().collect(Collectors.toMap(VehicleModelCalendarPrice::getVehicleModelId, Function.identity()));
}
List<VehicleModelDTO> vehicleModelDTOS = vehicleModelBiz.findAllVehicleModel();
VehicleModelDayPriceVo vehicleModelDayPriceVo;
for (VehicleModelDTO vehicleModelDTO : vehicleModelDTOS) {
vehicleModelDayPriceVo = new VehicleModelDayPriceVo();
BeanUtils.copyProperties(vehicleModelDTO, vehicleModelDayPriceVo);
boolean isNullOfVehicleModelPrice = vehicleModelCalendarPriceMap == null ? true : vehicleModelCalendarPriceMap.get(vehicleModelDTO.getVehicleModelId()) == null;
Double multiple = isNullOfVehicleModelPrice ? null : vehicleModelCalendarPriceMap.get(vehicleModelDTO.getVehicleModelId()).getMultiple();
vehicleModelDayPriceVo.setMultiple(multiple);
BigDecimal aPrice = isNullOfVehicleModelPrice ? null : vehicleModelCalendarPriceMap.get(vehicleModelDTO.getVehicleModelId()).getPrice();
vehicleModelDayPriceVo.setPrice(aPrice);
Integer level = isNullOfVehicleModelPrice?null:vehicleModelCalendarPriceMap.get(vehicleModelDTO.getVehicleModelId()).getLevel();
vehicleModelDayPriceVo.setLevel(level);
vehicleModelDayPriceVos.add(vehicleModelDayPriceVo);
}
return vehicleModelDayPriceVos;
}
/**
* 根据月份查询
*
* @param currentDate
* @return
*/
public List<VehicleModelCalendarPriceSaveDTO> findVehicleModelCalendarPricesByDateWithMonth(Date currentDate) {
List<VehicleModelCalendarPriceSaveDTO> vehicleModelCalendarPriceSaveDTOS = new ArrayList<>();
Example example = new Example(VehicleModelCalendarPrice.class);
Example.Criteria criteria = example.createCriteria();
LocalDate startLocalDate = currentDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate().withDayOfMonth(1);
Date startDate = Date.from(startLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
LocalDate endLocalDate = startLocalDate.with(TemporalAdjusters.lastDayOfMonth());
Date endDate = Date.from(endLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
criteria.andBetween("vehicleModelDay", startDate, endDate);
criteria.andEqualTo("isDel", 0);
List<VehicleModelCalendarPrice> vehicleModelCalendarPriceList = mapper.selectByExample(example);
if (CollectionUtils.isEmpty(vehicleModelCalendarPriceList)) {
return vehicleModelCalendarPriceSaveDTOS;
}
VehicleModelCalendarPriceSaveDTO vehicleModelCalendarPrice;
for (VehicleModelCalendarPrice calendarPrice : vehicleModelCalendarPriceList) {
vehicleModelCalendarPrice = new VehicleModelCalendarPriceSaveDTO();
BeanUtils.copyProperties(calendarPrice, vehicleModelCalendarPrice);
vehicleModelCalendarPrice.setVehicleModelId(null);
vehicleModelCalendarPriceSaveDTOS.add(vehicleModelCalendarPrice);
}
Map<Date, Optional<VehicleModelCalendarPriceSaveDTO>> result = vehicleModelCalendarPriceSaveDTOS.stream()
.collect(Collectors.groupingBy(VehicleModelCalendarPriceSaveDTO::getVehicleModelDay, Collectors.maxBy(Comparator.comparing(VehicleModelCalendarPriceSaveDTO::getId))));
vehicleModelCalendarPriceSaveDTOS = result.values().stream().map(x->x.orElseGet(null)).filter(Objects::nonNull).collect(Collectors.toList());
return vehicleModelCalendarPriceSaveDTOS;
}
/**
* 根据下单时间查询
*
* @param startDate
* @param endDate
* @param vehicleModelId
* @param userId
* @return
*/
public List<VehicleModelCalendarPriceDTO> findVehicleModelCalendarPriceByDateAndVehilceIdAndUserId(Date startDate, Date endDate, Integer vehicleModelId, Integer userId) {
return findVehicleModelCalendarPrice(startDate, endDate, vehicleModelId, userId);
}
/**
* 日历展示车型价格
*
* @param startDate
* @param endDate
* @param vehicleModelId
* @param userId
* @return
*/
public List<VehicleModelCalendarPriceDTO> listVehicleModelCalendarPriceByDateAndVehicleModelIdAndUserId(Date startDate, Date endDate, Integer vehicleModelId, Integer userId) {
LocalDate startLocalDate = startDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
LocalDate endLocalDate = endDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
//处理后延伸的开始时间
AtomicReference<Date> startReference = new AtomicReference<>(startDate);
//处理后延伸的结束时间
AtomicReference<Date> endReference = new AtomicReference<>(endDate);
transformStartDateAndEndDate(startReference, endReference);
List<VehicleModelCalendarPriceDTO> vehicleModelCalendarPrice = findVehicleModelCalendarPrice(startReference.get(), endReference.get(), vehicleModelId, userId);
for (VehicleModelCalendarPriceDTO vehicleModelCalendarPriceDTO : vehicleModelCalendarPrice) {
LocalDate current_date = vehicleModelCalendarPriceDTO.getDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
boolean isSelect = (current_date.isAfter(startLocalDate) && current_date.isBefore(endLocalDate)) || current_date.isEqual(startLocalDate) || current_date.isEqual(endLocalDate);
vehicleModelCalendarPriceDTO.setIsSelect(isSelect ? true : false);
}
return vehicleModelCalendarPrice;
}
/**
* 日历价格查询
*
* @param startDate
* @param endDate
* @param vehicleModelId
* @return
*/
private List<VehicleModelCalendarPriceDTO> findVehicleModelCalendarPrice(Date startDate, Date endDate, Integer vehicleModelId, Integer userId) {
List<VehicleModelCalendarPriceDTO> vehicleModelCalendarPriceVos = new ArrayList<>();
//默认折扣
Integer discount = DEFAULT_DISCOUNT;
//会员默认等级
Integer memberLevel = DEFAULT_MEMBER_LEVEL;
//日历价格转map
List<VehicleModelCalendarPrice> vehicleModelCalendarPrices = getVehicleModelCalendarPricesByVehicleModelIdAndDate(vehicleModelId, startDate, endDate);
Map<Date, VehicleModelCalendarPrice> calendarPriceMap = vehicleModelCalendarPrices.stream().collect(Collectors.toMap(VehicleModelCalendarPrice::getVehicleModelDay, Function.identity()));
//节假日转map
List<VehicleModelHolidayPriceDTO> vehicleModelHolidayPrices = vehicleModelHolidayPriceBiz.findVehicleModelHolidayPriceByMonth(startDate, endDate);
Map<Date, VehicleModelHolidayPriceDTO> festivalDayMap = vehicleModelHolidayPrices.stream().collect(Collectors.toMap(VehicleModelHolidayPriceDTO::getFestivalDay, Function.identity()));
Map<Integer, Integer> levelAndDiscountMap = userFeign.levels().stream().collect(Collectors.toMap(BaseUserMemberLevel::getLevel, BaseUserMemberLevel::getDiscount));
//车型的原价
BigDecimal vehicle_base_price = new BigDecimal(0);
BigDecimal vehicle_price = vehicleModelBiz.findVehicleModelPriceByVehicleModelId(vehicleModelId);
vehicle_base_price = vehicle_base_price.add(vehicle_price);
if (Objects.nonNull(userId)) {
BaseUserMember baseUserMember = userFeign.findBaseUserMemberByUserId(userId);
discount = baseUserMember == null ? discount : baseUserMember.getDiscount();
memberLevel = baseUserMember == null ? memberLevel : baseUserMember.getMemberLevel();
}
VehicleModelCalendarPriceDTO vehicleModelCalendarPriceDTO;
LocalDate final_startLocalDate = startDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
LocalDate final_endLocalDate = endDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
while (final_startLocalDate.isBefore(final_endLocalDate) || final_startLocalDate.isEqual(final_endLocalDate)) {
vehicleModelCalendarPriceDTO = new VehicleModelCalendarPriceDTO();
//价格重置
vehicle_price = vehicle_base_price;
//未乘以会员折扣的价格
BigDecimal no_discount_price = new BigDecimal(vehicle_price.doubleValue());
//免费天数重置
Integer free_days = DEFAULT_FREE_DAYS;
//节假日对应的价格和免费天数
Map<String, Object> price_freeDays_map = null;
Date current_date = Date.from(final_startLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
vehicleModelCalendarPriceDTO.setDate(current_date);
if (calendarPriceMap != null && !calendarPriceMap.isEmpty()) {
VehicleModelCalendarPrice vehicleModelCalendarPrice = calendarPriceMap.get(current_date);
if (Objects.isNull(vehicleModelCalendarPrice)) {
price_freeDays_map = transfromPriceAndFreeDaysByDate(festivalDayMap, current_date, vehicle_base_price, discount);
} else {
switch (vehicleModelCalendarPrice.getType()) {
case VehicleModelPriceType.MULTIPLE:
no_discount_price = vehicle_price.multiply(new BigDecimal(vehicleModelCalendarPrice.getMultiple().doubleValue()));
vehicle_price = no_discount_price.multiply(new BigDecimal(discount / 100.0));
break;
case VehicleModelPriceType.ABS:
vehicle_price = vehicleModelCalendarPrice.getPrice().multiply(new BigDecimal(discount / 100.00));
break;
case VehicleModelPriceType.MEMBER:
memberLevel = vehicleModelCalendarPrice.getLevel() > memberLevel ? vehicleModelCalendarPrice.getLevel() : memberLevel;
Integer level_discount = levelAndDiscountMap.get(memberLevel);
vehicle_price = level_discount == null ? vehicle_price : vehicle_price.multiply(new BigDecimal(level_discount / 100.00));
break;
default:
break;
}
free_days = vehicleModelCalendarPrice.getFreeDays() == null ? free_days : vehicleModelCalendarPrice.getFreeDays();
}
} else {
price_freeDays_map = transfromPriceAndFreeDaysByDate(festivalDayMap, current_date, vehicle_base_price, discount);
}
if (price_freeDays_map != null && !price_freeDays_map.isEmpty()) {
vehicle_price = (BigDecimal) price_freeDays_map.get(PRICE_VAL);
free_days = (Integer) price_freeDays_map.get(DAYS_VAL);
}
vehicleModelCalendarPriceDTO.setNo_discount_price(no_discount_price);
vehicleModelCalendarPriceDTO.setPrice(vehicle_price.setScale(2, RoundingMode.DOWN));
vehicleModelCalendarPriceDTO.setFreeDays(free_days);
final_startLocalDate = final_startLocalDate.plusDays(1);
vehicleModelCalendarPriceVos.add(vehicleModelCalendarPriceDTO);
}
return vehicleModelCalendarPriceVos;
}
/**
* 节假日价格和免费天数 处理
*
* @param festivalDayMap
* @param current_date
* @param vehicle_price
* @param discount
* @return
*/
public Map<String, Object> transfromPriceAndFreeDaysByDate(Map<Date, VehicleModelHolidayPriceDTO> festivalDayMap, Date current_date, BigDecimal vehicle_price, Integer discount) {
Map<String, Object> vehicle_price_days_map = new HashMap<>(2);
if (festivalDayMap != null && !festivalDayMap.isEmpty()) {
Integer free_days = DEFAULT_FREE_DAYS;
VehicleModelHolidayPriceDTO vehicleModelHolidayPriceDTO = festivalDayMap.get(current_date);
if (Objects.nonNull(vehicleModelHolidayPriceDTO)) {
vehicle_price = vehicle_price.multiply(new BigDecimal(vehicleModelHolidayPriceDTO.getMultiple().doubleValue() * (discount / 100.00)));
free_days = vehicleModelHolidayPriceDTO.getFreeDays() == null ? free_days : vehicleModelHolidayPriceDTO.getFreeDays();
vehicle_price_days_map.put(PRICE_VAL, vehicle_price);
vehicle_price_days_map.put(DAYS_VAL, free_days);
}
}
return vehicle_price_days_map;
}
/**
* 根据时间范围查询
*
* @param vehicleModelId
* @param final_startDate
* @param final_endDate
* @return
*/
private List<VehicleModelCalendarPrice> getVehicleModelCalendarPricesByVehicleModelIdAndDate(Integer vehicleModelId, Date final_startDate, Date final_endDate) {
Example example = new Example(VehicleModelCalendarPrice.class);
Example.Criteria base_criteria = example.createCriteria();
base_criteria.andEqualTo("isDel", 0);
base_criteria.andBetween("vehicleModelDay", final_startDate, final_endDate);
Example.Criteria vehicle_criteria = example.createCriteria();
vehicle_criteria.andEqualTo("vehicleModelId", vehicleModelId);
vehicle_criteria.orIsNull("vehicleModelId");
example.and(vehicle_criteria);
List<VehicleModelCalendarPrice> vehicleModelCalendarPrices = mapper.selectByExample(example);
return CollectionUtils.isEmpty(vehicleModelCalendarPrices) ? Collections.EMPTY_LIST : vehicleModelCalendarPrices;
}
/**
* 时间处理
*
* @param startDatee
* @param endDatee
*/
public static void transformStartDateAndEndDate(AtomicReference<Date> startDatee, AtomicReference<Date> endDatee) {
Date startDate = startDatee.get();
Date endDate = endDatee.get();
if (startDate == null && endDate == null) {
LocalDate now = LocalDate.now();
LocalDate endLocalDate = now.with(TemporalAdjusters.lastDayOfMonth());
LocalDate startLocalDate = now.withDayOfMonth(1);
startDate = Date.from(startLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
endDate = Date.from(endLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
} else {
/****************************************开始时间处理******************************************************/
LocalDate startLocalDate = LocalDate.from(startDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate());
int start_dayOfMonth = startLocalDate.getDayOfMonth();
int start_week = startLocalDate.getDayOfWeek().getValue();
if (START_OF_WEEK < start_week && start_week < END_OF_WEEK) {
start_dayOfMonth = start_dayOfMonth - (start_week - START_OF_WEEK);
} else {
if (END_OF_WEEK == start_week) {
start_dayOfMonth = start_dayOfMonth - END_OF_WEEK + 1;
}
}
start_dayOfMonth = start_dayOfMonth > 0 ? start_dayOfMonth : 1;
LocalDate start_startLocalDate = startLocalDate.withDayOfMonth(start_dayOfMonth);
/****************************************结束时间处理******************************************************/
LocalDate endLocalDate = LocalDate.from(endDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate());
int end_dayOfMonth = endLocalDate.getDayOfMonth();
int end_week = endLocalDate.getDayOfWeek().getValue();
int last_day = endLocalDate.with(TemporalAdjusters.lastDayOfMonth()).getDayOfMonth();
if (START_OF_WEEK < end_week && end_week < END_OF_WEEK) {
end_dayOfMonth = end_dayOfMonth + (END_OF_WEEK - end_week);
} else {
if (START_OF_WEEK == end_week) {
end_dayOfMonth = end_dayOfMonth + END_OF_WEEK - 1;
}
}
end_dayOfMonth = end_dayOfMonth > last_day ? last_day : end_dayOfMonth;
LocalDate end_endLocalDate = endLocalDate.withDayOfMonth(end_dayOfMonth);
/****************************************时间转换******************************************************/
startDate = Date.from(start_startLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
endDate = Date.from(end_endLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
}
startDatee.set(startDate);
endDatee.set(endDate);
}
public static void main(String[] args) {
}
/**
* 车型日历价格设置类型
*/
private class VehicleModelPriceType {
/**
* 倍数
*/
private static final int MULTIPLE = 1;
/**
* 绝对值
*/
private static final int ABS = 2;
/**
* 会员价
*/
private static final int MEMBER = 3;
}
}
package com.xxfc.platform.vehicle.biz;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.xxfc.platform.vehicle.entity.Festival;
import com.xxfc.platform.vehicle.entity.VehicleModelHolidayPrice;
import com.xxfc.platform.vehicle.mapper.VehicleModelHolidayPriceMapper;
import com.xxfc.platform.vehicle.pojo.dto.VehicleModelHolidayPriceDTO;
import com.xxfc.platform.vehicle.pojo.dto.VehicleModelHolidayPriceFindDTO;
import com.xxfc.platform.vehicle.pojo.dto.VehicleModelHolidayPriceSaveDTO;
import com.xxfc.platform.vehicle.pojo.vo.VehicleModelHolidayPriceVo;
import lombok.RequiredArgsConstructor;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import java.time.Instant;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.temporal.TemporalAdjusters;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/10/14 17:32
*/
@Transactional(rollbackFor = Exception.class)
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class VehicleModelHolidayPriceBiz extends BaseBiz<VehicleModelHolidayPriceMapper, VehicleModelHolidayPrice> {
private final FestivalBiz festivalBiz;
/**
* 保存
*
* @param vehicleModelHolidayPriceSaveDTO
* @param userId
*/
public void addVehicleModelHolidayPrice(VehicleModelHolidayPriceSaveDTO vehicleModelHolidayPriceSaveDTO, Integer userId) {
List<VehicleModelHolidayPrice> vehicleModelHolidayPriceList = new ArrayList<>();
VehicleModelHolidayPrice vehicleModelHolidayPrice;
List<Date> dates = vehicleModelHolidayPriceSaveDTO.getDate();
for (Date date : dates) {
vehicleModelHolidayPrice = new VehicleModelHolidayPrice();
BeanUtils.copyProperties(vehicleModelHolidayPriceSaveDTO, vehicleModelHolidayPrice);
date = Date.from(date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate().atStartOfDay(ZoneId.systemDefault()).toInstant());
vehicleModelHolidayPrice.setFestivalDay(date);
vehicleModelHolidayPriceList.add(vehicleModelHolidayPrice);
}
//编辑
if (Objects.nonNull(vehicleModelHolidayPriceSaveDTO.getId())) {
Example example = new Example(VehicleModelHolidayPrice.class);
Example.Criteria criteria = example.createCriteria();
criteria.andEqualTo("festivalId", vehicleModelHolidayPriceSaveDTO.getId());
for (VehicleModelHolidayPrice modelHolidayPrice : vehicleModelHolidayPriceList) {
modelHolidayPrice.setUpdUserId(userId);
modelHolidayPrice.setUpdTime(new Date());
mapper.updateByExample(modelHolidayPrice, example);
}
} else {
Festival festival = new Festival();
festival.setName(vehicleModelHolidayPriceSaveDTO.getFestival());
festivalBiz.add(festival);
for (VehicleModelHolidayPrice modelHolidayPrice : vehicleModelHolidayPriceList) {
modelHolidayPrice.setCrtTime(new Date());
modelHolidayPrice.setCrtUserId(userId);
modelHolidayPrice.setFestivalId(festival.getId());
mapper.insertSelective(modelHolidayPrice);
}
}
}
/**
* @param multiple 倍数
* @param freeDays 免费天数
* @param configDate 设置的日期*月份
*/
public void updateVehicleModelHolidayPrice(Double multiple, Integer freeDays, Date configDate) {
VehicleModelHolidayPrice vehicleModelHolidayPrice = new VehicleModelHolidayPrice();
vehicleModelHolidayPrice.setMultiple(multiple);
vehicleModelHolidayPrice.setFreeDays(freeDays);
Example example = new Example(VehicleModelHolidayPrice.class);
Example.Criteria criteria = example.createCriteria();
setCondtionDate(configDate, null, criteria);
int effect = mapper.updateByExampleSelective(vehicleModelHolidayPrice, example);
if (effect < 1) {
throw new BaseException("车型节假日更新失败");
}
}
/**
* 按年 月 节假日 等条件查询
*
* @param vehicleModelHolidayPriceFindDTO
* @return
*/
public List<VehicleModelHolidayPriceVo> listVehicleModelHolidayPrice(VehicleModelHolidayPriceFindDTO vehicleModelHolidayPriceFindDTO) {
List<VehicleModelHolidayPriceVo> vehicleModelHolidayPriceVos = new ArrayList<>();
Example example = new Example(VehicleModelHolidayPrice.class);
Example.Criteria criteria = example.createCriteria();
Date date = null;
if (StringUtils.isNotEmpty(vehicleModelHolidayPriceFindDTO.getDate()) && vehicleModelHolidayPriceFindDTO.getDate().trim().length() > 0) {
date = Date.from(LocalDate.parse(vehicleModelHolidayPriceFindDTO.getDate()).atStartOfDay(ZoneId.systemDefault()).toInstant());
}
setCondtionDate(date, vehicleModelHolidayPriceFindDTO.getYear(), criteria);
if (StringUtils.isNotEmpty(vehicleModelHolidayPriceFindDTO.getFestival()) && vehicleModelHolidayPriceFindDTO.getFestival().trim().length() > 0) {
criteria.andLike("festival", String.format("%%%s%%", vehicleModelHolidayPriceFindDTO.getFestival()));
}
List<VehicleModelHolidayPrice> holidayPrices = mapper.selectByExample(example);
if (CollectionUtils.isEmpty(holidayPrices)) {
return vehicleModelHolidayPriceVos;
}
List<Integer> festivalIds = holidayPrices.stream().map(VehicleModelHolidayPrice::getFestivalId).collect(Collectors.toList());
Map<Integer,Festival> festivalMap = festivalBiz.findFestivalsByIds(festivalIds);
VehicleModelHolidayPriceVo vehicleModelHolidayPriceVo;
for (VehicleModelHolidayPrice holidayPrice : holidayPrices) {
vehicleModelHolidayPriceVo = new VehicleModelHolidayPriceVo();
BeanUtils.copyProperties(holidayPrice, vehicleModelHolidayPriceVo);
vehicleModelHolidayPriceVo.setFestival(festivalMap==null?"":festivalMap.get(holidayPrice.getFestivalId()).getName());
vehicleModelHolidayPriceVos.add(vehicleModelHolidayPriceVo);
}
return vehicleModelHolidayPriceVos;
}
/**
* 根据开始与结束时间查询
*
* @param startDate
* @param endDate
* @return
*/
public List<VehicleModelHolidayPriceDTO> findVehicleModelHolidayPriceByMonth(Date startDate, Date endDate) {
List<VehicleModelHolidayPriceDTO> vehicleModelHolidayPriceDTOS = new ArrayList<>();
Example example = new Example(VehicleModelHolidayPrice.class);
Example.Criteria criteria = example.createCriteria();
criteria.andBetween("festivalDay", startDate, endDate);
List<VehicleModelHolidayPrice> modelHolidayPrices = mapper.selectByExample(example);
if (CollectionUtils.isEmpty(modelHolidayPrices)) {
return vehicleModelHolidayPriceDTOS;
}
List<Integer> festivalIds = modelHolidayPrices.stream().map(VehicleModelHolidayPrice::getFestivalId).collect(Collectors.toList());
Map<Integer,Festival> festivalMap = festivalBiz.findFestivalsByIds(festivalIds);
VehicleModelHolidayPriceDTO vehicleModelHolidayPriceDTO;
for (VehicleModelHolidayPrice modelHolidayPrice : modelHolidayPrices) {
vehicleModelHolidayPriceDTO = new VehicleModelHolidayPriceDTO();
BeanUtils.copyProperties(modelHolidayPrice, vehicleModelHolidayPriceDTO);
vehicleModelHolidayPriceDTO.setFestival(festivalMap==null?"":festivalMap.get(modelHolidayPrice.getFestivalId()).getName());
vehicleModelHolidayPriceDTOS.add(vehicleModelHolidayPriceDTO);
}
return vehicleModelHolidayPriceDTOS;
}
/**
* @param id
* @return
*/
public VehicleModelHolidayPriceSaveDTO findVehicleModelHolidayPriceFestivalId(Long id) {
VehicleModelHolidayPriceSaveDTO modelHolidayPriceSaveDTO = new VehicleModelHolidayPriceSaveDTO();
Example example = new Example(VehicleModelHolidayPrice.class);
Example.Criteria criteria = example.createCriteria();
criteria.andEqualTo("festivalId",id);
List<VehicleModelHolidayPrice> vehicleModelHolidayPrices = mapper.selectByExample(example);
if (CollectionUtils.isEmpty(vehicleModelHolidayPrices)) {
throw new BaseException("数据不存在");
}
List<Date> dates = vehicleModelHolidayPrices.stream().map(VehicleModelHolidayPrice::getFestivalDay).collect(Collectors.toList());
VehicleModelHolidayPrice vehicleModelHolidayPrice = vehicleModelHolidayPrices.get(0);
BeanUtils.copyProperties(vehicleModelHolidayPrice, modelHolidayPriceSaveDTO);
modelHolidayPriceSaveDTO.setDate(dates);
return modelHolidayPriceSaveDTO;
}
/**
* 设置查询条件日期
*
* @param conditionDate
* @param criteria
*/
private void setCondtionDate(Date conditionDate, Integer year, Example.Criteria criteria) {
//开始日期
Instant startInstant = null;
//结束日期
Instant endInstant = null;
if (Objects.nonNull(year) && Objects.isNull(conditionDate)) {
startInstant = LocalDate.of(year, 1, 1).atStartOfDay(ZoneId.systemDefault()).toInstant();
endInstant = LocalDate.of(year, 12, 31).atStartOfDay(ZoneId.systemDefault()).toInstant();
}
if (Objects.nonNull(conditionDate)) {
LocalDate localDate = conditionDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
startInstant = localDate.withDayOfMonth(1).atStartOfDay(ZoneId.systemDefault()).toInstant();
LocalDate endLocalDate = localDate.with(TemporalAdjusters.lastDayOfMonth());
endInstant = endLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant();
}
if (Objects.nonNull(startInstant) && Objects.nonNull(endInstant)) {
criteria.andBetween("festivalDay", Date.from(startInstant), Date.from(endInstant));
}
}
}
package com.xxfc.platform.vehicle.mapper;
import com.xxfc.platform.vehicle.entity.Festival;
import tk.mybatis.mapper.additional.idlist.SelectByIdListMapper;
import tk.mybatis.mapper.common.Mapper;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/10/18 17:33
*/
public interface FestivalMapper extends Mapper<Festival>, SelectByIdListMapper<Festival,Integer> {
}
package com.xxfc.platform.vehicle.mapper;
import com.xxfc.platform.vehicle.entity.VehicleModelCalendarPrice;
import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.additional.insert.InsertListMapper;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/10/14 17:31
*/
public interface VehicleModelCalendarPriceMapper extends Mapper<VehicleModelCalendarPrice>, InsertListMapper<VehicleModelCalendarPrice> {
}
package com.xxfc.platform.vehicle.mapper;
import com.xxfc.platform.vehicle.entity.VehicleModelHolidayPrice;
import tk.mybatis.mapper.additional.insert.InsertListMapper;
import tk.mybatis.mapper.common.Mapper;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/10/14 17:32
*/
public interface VehicleModelHolidayPriceMapper extends Mapper<VehicleModelHolidayPrice>, InsertListMapper<VehicleModelHolidayPrice> {
}
...@@ -3,9 +3,13 @@ package com.xxfc.platform.vehicle.mapper; ...@@ -3,9 +3,13 @@ package com.xxfc.platform.vehicle.mapper;
import com.xxfc.platform.vehicle.entity.VehicleModel; import com.xxfc.platform.vehicle.entity.VehicleModel;
import com.xxfc.platform.vehicle.pojo.VehicleModelQueryCondition; import com.xxfc.platform.vehicle.pojo.VehicleModelQueryCondition;
import com.xxfc.platform.vehicle.pojo.VehicleModelVo; import com.xxfc.platform.vehicle.pojo.VehicleModelVo;
import com.xxfc.platform.vehicle.pojo.dto.VehicleModelDTO;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.ResultType;
import org.apache.ibatis.annotations.Select;
import tk.mybatis.mapper.common.Mapper; import tk.mybatis.mapper.common.Mapper;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
/** /**
...@@ -26,4 +30,11 @@ public interface VehicleModelMapper extends Mapper<VehicleModel> { ...@@ -26,4 +30,11 @@ public interface VehicleModelMapper extends Mapper<VehicleModel> {
* @return * @return
*/ */
int updateScoreByModelIdAndavgScore(@Param("modelId") Integer modelId, @Param("avgScore") int avgScore); int updateScoreByModelIdAndavgScore(@Param("modelId") Integer modelId, @Param("avgScore") int avgScore);
@Select("select `price` from `vehicle_model` where `id`=#{vehicleModelId}")
BigDecimal selectPriceById(@Param("vehicleModelId") Integer vehicleModelId);
@Select({"select `id` AS `vehicleModelId`,`name`,`price` AS `basePrice` from `vehicle_model` where `isdel`=0"})
@ResultType(value = VehicleModelDTO.class)
List<VehicleModelDTO> findAllVehicleModel();
} }
package com.xxfc.platform.vehicle.rest;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreUserToken;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.vehicle.biz.VehicleModelCalendarPriceBiz;
import com.xxfc.platform.vehicle.pojo.dto.VehicleModelCalendarPriceDTO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.Date;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/10/14 17:35
*/
@RestController
@RequestMapping("/vehicle_model/calendar_price/app/unauth")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
@Api(tags = "车型日历价格")
public class VehicleModelCalendarPriceController {
private final VehicleModelCalendarPriceBiz vehicleModelCalendarPriceBiz;
@ApiOperation("返回车型日历价格")
@GetMapping("/list/{vehicleModelId}")
@IgnoreUserToken
@SneakyThrows
public ObjectRestResponse<VehicleModelCalendarPriceDTO> listVehicleModelCalendarPriceByDateAndVehicleModelId(@RequestParam(value = "start", required = false) String start,
@RequestParam(value = "end", required = false) String end,
@PathVariable(value = "vehicleModelId") Integer vehicleModelId,
AppUserDTO appUserDTO) {
if (StringUtils.isEmpty(start) || StringUtils.isEmpty(end)) {
throw new BaseException("缺少开始时间或结束时间");
}
Date startDate = Date.from(LocalDate.parse(start).atStartOfDay(ZoneId.systemDefault()).toInstant());
Date endDate = Date.from(LocalDate.parse(end).atStartOfDay(ZoneId.systemDefault()).toInstant());
List<VehicleModelCalendarPriceDTO> vehicleModelCalendarPriceVos = vehicleModelCalendarPriceBiz.listVehicleModelCalendarPriceByDateAndVehicleModelIdAndUserId(startDate, endDate, vehicleModelId, appUserDTO.getUserid());
return ObjectRestResponse.succ(vehicleModelCalendarPriceVos);
}
@GetMapping("/price")
public List<VehicleModelCalendarPriceDTO> findVehicleModelCalendarPriceByDate(@RequestParam(value = "startDate") Date startDate,
@RequestParam(value = "endDate") Date endDate,
@RequestParam(value = "vehicleModelId") Integer vehicleModelId,
@RequestParam(value = "userId") Integer userId) {
startDate = Date.from(startDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate().atStartOfDay(ZoneId.systemDefault()).toInstant());
endDate = Date.from(endDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate().atStartOfDay(ZoneId.systemDefault()).toInstant());
return vehicleModelCalendarPriceBiz.findVehicleModelCalendarPriceByDateAndVehilceIdAndUserId(startDate, endDate, vehicleModelId, userId);
}
}
package com.xxfc.platform.vehicle.rest.admin;
import com.github.wxiaoqi.security.admin.feign.dto.UserDTO;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.vehicle.biz.VehicleModelCalendarPriceBiz;
import com.xxfc.platform.vehicle.pojo.dto.VehicleModelCalendarPriceSaveDTO;
import com.xxfc.platform.vehicle.pojo.vo.VehicleModelDayPriceVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.Date;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/10/14 17:35
*/
@RestController
@RequestMapping("/admin/vehicle_model/calendar_price")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
@Api(tags = "车型日历价格")
public class VehicleModelCalendarPriceAdminController {
private final VehicleModelCalendarPriceBiz vehicleModelCalendarPriceBiz;
@ApiOperation("车型日历价格设置")
@PostMapping("/add_edit")
public ObjectRestResponse<Void> add(@RequestBody List<VehicleModelCalendarPriceSaveDTO> vehicleModelCalendarPriceSaveDTO, UserDTO userDTO){
vehicleModelCalendarPriceBiz.addVehicleModelCalendarPrice(vehicleModelCalendarPriceSaveDTO,userDTO.getId());
return ObjectRestResponse.succ();
}
@ApiOperation("车型日历价格")
@GetMapping("/day")
public ObjectRestResponse<VehicleModelDayPriceVo> listVehicleModelCalendarPriceWithMonth(@RequestParam(value = "date") String dateStr){
Date date = Date.from(LocalDate.parse(dateStr).atStartOfDay(ZoneId.systemDefault()).toInstant());
List<VehicleModelDayPriceVo> vehicleModelDayPriceVos = vehicleModelCalendarPriceBiz.findVehicleModelcalendarPriceByDateWithDay(date);
return ObjectRestResponse.succ(vehicleModelDayPriceVos);
}
@ApiOperation("根据月份查询的设置")
@GetMapping("/month")
public ObjectRestResponse<List<VehicleModelCalendarPriceSaveDTO>> listVehicleModelCalendarPriceWithDay(@RequestParam(value = "date") String dateStr){
Date date = Date.from(LocalDate.parse(dateStr).atStartOfDay(ZoneId.systemDefault()).toInstant());
List<VehicleModelCalendarPriceSaveDTO> calendarPrices = vehicleModelCalendarPriceBiz.findVehicleModelCalendarPricesByDateWithMonth(date);
return ObjectRestResponse.succ(calendarPrices);
}
@ApiOperation("查询所有车型的的基本信息(id,价格)")
@GetMapping("/vehicle_model/all")
public ObjectRestResponse<VehicleModelDayPriceVo> listVehicleModelPrice(){
List<VehicleModelDayPriceVo> vehicleModelDayPriceVos = vehicleModelCalendarPriceBiz.listVehicleModelPrice();
return ObjectRestResponse.succ(vehicleModelDayPriceVos);
}
}
package com.xxfc.platform.vehicle.rest.admin;
import com.github.wxiaoqi.security.admin.feign.dto.UserDTO;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.vehicle.biz.VehicleModelHolidayPriceBiz;
import com.xxfc.platform.vehicle.pojo.dto.VehicleModelHolidayPriceFindDTO;
import com.xxfc.platform.vehicle.pojo.dto.VehicleModelHolidayPriceSaveDTO;
import com.xxfc.platform.vehicle.pojo.vo.VehicleModelHolidayPriceVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/10/14 17:35
*/
@RestController
@RequestMapping("/admin/vehicle_model/holiday_price")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
@Api(tags = "节假日设置")
public class VehicleModelHolidayPriceAdminController {
private final VehicleModelHolidayPriceBiz vehicleModelHolidayPriceBiz;
@ApiOperation("节假日添加|设置")
@PostMapping("/add_edit")
public ObjectRestResponse<Void> add(@RequestBody VehicleModelHolidayPriceSaveDTO vehicleModelHolidayPriceSaveDTO, UserDTO userDTO) {
vehicleModelHolidayPriceBiz.addVehicleModelHolidayPrice(vehicleModelHolidayPriceSaveDTO, userDTO.getId());
return ObjectRestResponse.succ();
}
@GetMapping("/{id}")
public ObjectRestResponse<VehicleModelHolidayPriceSaveDTO> findVehicleModelHolidayPrice(@PathVariable(value = "id") Long id){
VehicleModelHolidayPriceSaveDTO vehicleModelHolidayPriceSaveDTO = vehicleModelHolidayPriceBiz.findVehicleModelHolidayPriceFestivalId(id);
return ObjectRestResponse.succ(vehicleModelHolidayPriceSaveDTO);
}
@ApiOperation("节假日页查询")
@PostMapping("/page")
public ObjectRestResponse<List<VehicleModelHolidayPriceVo>> listVehicleModelHolidayPrice(@RequestBody VehicleModelHolidayPriceFindDTO vehicleModelHolidayPriceFindDTO){
List<VehicleModelHolidayPriceVo> priceVoPageDataVO = vehicleModelHolidayPriceBiz.listVehicleModelHolidayPrice(vehicleModelHolidayPriceFindDTO);
return ObjectRestResponse.succ(priceVoPageDataVO);
}
}
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