Commit 8252d27d authored by jiaorz's avatar jiaorz

新增汽车预定时间信息表

parent b601a815
package com.xxfc.platform.vehicle.entity;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;
@Table(name = "vehicle_book_hour_info")
@Data
public class VehicleBookHourInfo {
@Id
private Integer id;
......@@ -24,88 +27,4 @@ public class VehicleBookHourInfo {
@Column(name = "update_time")
private Date updateTime;
/**
* @return id
*/
public Integer getId() {
return id;
}
/**
* @param id
*/
public void setId(Integer id) {
this.id = id;
}
/**
* @return vehicle_id
*/
public String getVehicleId() {
return vehicleId;
}
/**
* @param vehicleId
*/
public void setVehicleId(String vehicleId) {
this.vehicleId = vehicleId;
}
/**
* @return year_month_day
*/
public String getYearMonthDay() {
return yearMonthDay;
}
/**
* @param yearMonthDay
*/
public void setYearMonthDay(String yearMonthDay) {
this.yearMonthDay = yearMonthDay;
}
/**
* @return booked_hour
*/
public Integer getBookedHour() {
return bookedHour;
}
/**
* @param bookedHour
*/
public void setBookedHour(Integer bookedHour) {
this.bookedHour = bookedHour;
}
/**
* @return create_time
*/
public Date getCreateTime() {
return createTime;
}
/**
* @param createTime
*/
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
/**
* @return update_time
*/
public Date getUpdateTime() {
return updateTime;
}
/**
* @param updateTime
*/
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
}
\ No newline at end of file
......@@ -11,7 +11,7 @@ public class BookVehicleVO {
* 车辆id
*/
@ApiModelProperty("车辆id")
private String vehicle;
private String vehicleId;
/**
* 预定目标日期(开始)
......
package com.xxfc.platform.vehicle.pojo;
import com.xxfc.platform.vehicle.entity.VehicleBookHourInfo;
import lombok.Data;
@Data
public class VehicleBookHourInfoDto extends VehicleBookHourInfo {
}
......@@ -63,7 +63,8 @@ import java.util.stream.Collectors;
@Slf4j
public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
public static final DateTimeFormatter DEFAULT_DATE_TIME_FORMATTER = DateTimeFormat.forPattern("yyyy-MM-dd");
public static final DateTimeFormatter DEFAULT_DATE_TIME_FORMATTER = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
public static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormat.forPattern("yyyy-MM-dd");
public static final DateTimeFormatter YEARMONTH_DATE_TIME_FORMATTER = DateTimeFormat.forPattern("yyyy-MM");
/**
* 允许查询预定信息的最大月份数
......@@ -82,7 +83,8 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
private BookRecordAccItemMapper bookRecordAccItemMapper;
@Autowired
private RedisTemplate customRedisTemplate;
@Autowired
private VehicleBookHourInfoBiz vehicleBookHourInfoBiz;
@Value("${vehicle.baseUploadPath}")
private String baseUploadPath ;
......@@ -286,10 +288,10 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
@Transactional
public void applyVehicle4Employee(Integer userId, BookVehicleVO bookVehicleVo, String userName) throws Exception{
//检查车辆信息是否合法
checkIfVehicleExists(bookVehicleVo.getVehicle());
checkIfVehicleExists(bookVehicleVo.getVehicleId());
//提取日期和相应的预定目标日期
Map<String,List<String>> yearMonthAndDate = Maps.newHashMap();
DateTime startDay =DateTime.parse(bookVehicleVo.getBookStartDate(), DEFAULT_DATE_TIME_FORMATTER);
DateTime startDay =DateTime.parse(bookVehicleVo.getBookStartDate(),DEFAULT_DATE_TIME_FORMATTER);
DateTime endDay =DateTime.parse(bookVehicleVo.getBookEndDate(), DEFAULT_DATE_TIME_FORMATTER);
//转换日期范围为列表,并检查是否合法
fillDateList4DatePeriod(yearMonthAndDate,startDay,endDay);
......@@ -297,14 +299,15 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
throw new CustomIllegalParamException(" you can only within 2 month");
}
for(Map.Entry<String,List<String>> entry:yearMonthAndDate.entrySet()){
Boolean rsEach = applyVehicle4EmployeePerMonth(bookVehicleVo.getVehicle(),entry.getValue(),entry.getKey());
Boolean rsEach = applyVehicle4EmployeePerMonth(bookVehicleVo.getVehicleId(),entry.getValue(),entry.getKey());
if(Boolean.FALSE.equals(rsEach)){
throw new BaseException(ResultCode.FAILED_CODE);
}
}
//加入预定申请记录
VehicleBookRecord vehicleBookRecord = new VehicleBookRecord();
vehicleBookRecord.setVehicleId(bookVehicleVo.getVehicle());
vehicleBookRecord.setVehicleId(bookVehicleVo.getVehicleId());
vehicleBookRecord.setBookType(BookType.EMPLOYEE_APPLY.getCode());
vehicleBookRecord.setStatus(VehicleBookRecordStatus.APPLY.getCode());
vehicleBookRecord.setBookUser(userId);
......@@ -319,6 +322,17 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
vehicleBookRecord.setLiftCompany(bookVehicleVo.getLiftCompany());
vehicleBookRecordMapper.insertSelective(vehicleBookRecord);
//添加预定时间记录
Map<String, Integer> map = vehicleBookHourInfoBiz.getPredictableHours(bookVehicleVo.getBookStartDate(), bookVehicleVo.getBookEndDate());
for(Map.Entry<String, Integer> entry : map.entrySet()) {
VehicleBookHourInfoDto vehicleBookHourInfoDto = new VehicleBookHourInfoDto();
vehicleBookHourInfoDto.setVehicleId(bookVehicleVo.getVehicleId());
vehicleBookHourInfoDto.setYearMonthDay(entry.getKey());
vehicleBookHourInfoDto.setBookedHour(entry.getValue());
vehicleBookHourInfoBiz.save(vehicleBookHourInfoDto);
}
//修改相关车辆预定记录
Boolean hasSuc = bookedVehicle(bookVehicleVo);
if(!hasSuc){
......@@ -390,6 +404,15 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
// return RestResponse.code(ResCode.VEHICLE_BOOKED_INFO_ALREADY_CHANGED.getCode());
// }
// }
//如果拒绝预定,删除预定时间记录
if(VehicleBookRecordStatus.APPLY.getCode().equals(vehicleBookRecord.getStatus())) {
//删除预定时间记录
List<String> list = null;
for( DateTime curDate = new DateTime(vehicleBookRecord.getBookStartDate());curDate.compareTo(new DateTime(vehicleBookRecord.getBookEndDate()))<=0;curDate=curDate.plusDays(1)) {
list.add(curDate.toString(DEFAULT_DATE_TIME_FORMATTER));
}
vehicleBookHourInfoBiz.delete(vehicleBookRecord.getVehicleId(),list);
}
//成功后修改预定记录状态
Map<String,Object> updateParam = Maps.newHashMap();
updateParam.put("id",bookRecordId);
......@@ -417,6 +440,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
if(vehicleBookRecord == null){
throw new CustomIllegalParamException(" invalid book record");
}
//已通过审核的可以取消预定
if(!VehicleBookRecordStatus.APPROVE.getCode().equals(vehicleBookRecord.getStatus())){
return RestResponse.code(ResCode.VEHICLE_BOOKED_RECORD_ALREADY_CHANGED.getCode());
}
......@@ -444,6 +468,16 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//手动回滚
return RestResponse.code(ResCode.VEHICLE_BOOKED_RECORD_ALREADY_CHANGED.getCode());
}
//删除预定时间记录
List<String> list = Lists.newArrayList();
DateTime startDay = DateTime.parse(bookVehicleVo.getUnbookStartDate().split(" ")[0], DATE_TIME_FORMATTER);
DateTime endDay = DateTime.parse(bookVehicleVo.getUnbookEndDate().split(" ")[0], DATE_TIME_FORMATTER);
for( DateTime curDate = startDay;curDate.compareTo(endDay) <= 0; curDate=curDate.plusDays(1)) {
log.info("当前日期:" + curDate);
String date = curDate.toString(DATE_TIME_FORMATTER);
list.add(date);
}
vehicleBookHourInfoBiz.delete(vehicleBookRecord.getVehicleId(), list);
return RestResponse.suc();
}
......@@ -496,7 +530,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
}
Boolean rs = Boolean.TRUE;
for(Map.Entry<String,List<String>> entry:yearMonthAndDate.entrySet()){
Boolean rsEach = bookedVehiclePerMonth(bookVehicleVo.getVehicle(),entry.getValue(),entry.getKey());
Boolean rsEach = bookedVehiclePerMonth(bookVehicleVo.getVehicleId(),entry.getValue(),entry.getKey());
if(Boolean.FALSE.equals(rsEach)){
rs = Boolean.FALSE;
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//手动回滚
......@@ -526,7 +560,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
Integer effected = vehicleBookInfoMapper.insertIgnore(vehicleBookInfo);
if(effected == 0){//已存在则需要更新
Map<String,Object> params = Maps.newHashMap();
params.put("vehicle",vehicleBookInfo.getVehicle());
params.put("vehicleId",vehicleBookInfo.getVehicle());
params.put("yearMonth",yearMonth);
//加入更新条件
if(CollectionUtils.isEmpty(bookedDates)){
......@@ -604,7 +638,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
}
Boolean rs = Boolean.TRUE;
for(Map.Entry<String,List<String>> entry:yearMonthAndDate.entrySet()){
Boolean rsEach = unbookVehiclePerMonth(bookVehicleVo.getVehicle(),entry.getValue(),entry.getKey());
Boolean rsEach = unbookVehiclePerMonth(bookVehicleVo.getVehicleId(),entry.getValue(),entry.getKey());
if(Boolean.FALSE.equals(rsEach)){
rs = Boolean.FALSE;
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//手动回滚
......@@ -617,7 +651,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
public Boolean unbookVehiclePerMonth(String vehicleId, List<String> unbookDates, String yearMonth){
checkIfVehicleExists(vehicleId);
Map<String,Object> params = Maps.newHashMap();
params.put("vehicle",vehicleId);
params.put("vehicleId",vehicleId);
params.put("yearMonth",yearMonth);
//加入更新条件
if(CollectionUtils.isEmpty(unbookDates)){
......
package com.xxfc.platform.vehicle.biz;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.google.common.collect.Maps;
import com.xxfc.platform.vehicle.common.CustomIllegalParamException;
import com.xxfc.platform.vehicle.entity.VehicleBookHourInfo;
import com.xxfc.platform.vehicle.mapper.VehicleBookHourInfoMapper;
import com.xxfc.platform.vehicle.pojo.VehicleBookHourInfoDto;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Slf4j
@Service
public class VehicleBookHourInfoBiz extends BaseBiz<VehicleBookHourInfoMapper, VehicleBookHourInfo> {
public static final DateTimeFormatter DEFAULT_DATE_TIME_FORMATTER = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
public static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormat.forPattern("yyyy-MM-dd");
public Map<String, Integer> getPredictableHours(String bookStartdate, String bookEndDate) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date startDate = null;
Date endDate = null;
try{
startDate = simpleDateFormat.parse(bookStartdate);
endDate = simpleDateFormat.parse(bookEndDate);
}catch (Exception e) {
}
//判定时间是否合法
if (bookStartdate.compareTo(DateTime.now().toString(DEFAULT_DATE_TIME_FORMATTER)) < 0) {
throw new CustomIllegalParamException("you can only book from today");
}
if (bookStartdate.compareTo(bookEndDate) > 0) {
throw new CustomIllegalParamException("预定开始日期不能大于结束日期!");
}
Map<String, Integer> predictableHours = Maps.newHashMap();
//预定开始小时
int hour = new DateTime(startDate).hourOfDay().get();
int endHour = new DateTime(endDate).hourOfDay().get();
//获取开始天的预定小时
int startPredictableHour = 0;
for (int curentHour = hour; curentHour < 24; curentHour++) {
startPredictableHour |= 1 << (curentHour - 1);
}
//获取结束天的预定小时
int endPredictableHour = 0;
for (int curentHour = 0; curentHour < endHour; curentHour++) {
endPredictableHour |= 1 << (curentHour);
}
predictableHours.put(DateTime.parse(bookStartdate, DEFAULT_DATE_TIME_FORMATTER).toString(DATE_TIME_FORMATTER), startPredictableHour);
predictableHours.put(DateTime.parse(bookEndDate, DEFAULT_DATE_TIME_FORMATTER).toString(DATE_TIME_FORMATTER), endPredictableHour);
DateTime startDay = DateTime.parse(bookStartdate, DEFAULT_DATE_TIME_FORMATTER);
DateTime endDay = DateTime.parse(bookEndDate, DEFAULT_DATE_TIME_FORMATTER);
if(startDay.getHourOfDay() - endDay.getHourOfDay() >1){ //
for (DateTime curDate = startDay.plusDays(1); curDate.compareTo(endDay) <= 0; curDate = curDate.plusDays(1)) {
String curDateStr = curDate.toString(DATE_TIME_FORMATTER);
//全天预定
predictableHours.put(curDateStr, 16777215);
}
}
return predictableHours;
}
// public static void main(String[] args) {
// SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// Date startDate = null;
// Date endDate = null;
// try{
// startDate = simpleDateFormat.parse("2019-06-21 16:30:30");
// endDate = simpleDateFormat.parse("2019-06-22 12:30:30");
// }catch (Exception e) {
//
// }
// Map<String, Integer> map = getPredictableHours(startDate, endDate);
// for(Map.Entry<String, Integer> entry : map.entrySet()) {
// System.out.println(entry.getKey());
// System.out.println(entry.getValue());
// }
// }
@Transactional
public ObjectRestResponse save(VehicleBookHourInfoDto vehicleBookHourInfoDto) {
if(vehicleBookHourInfoDto == null) {
return ObjectRestResponse.createFailedResult(502, "参数为空");
}
List<VehicleBookHourInfo> vehicleBookHourInfos = mapper.selectByVehicleAndDate(vehicleBookHourInfoDto);
//有数据直接更新
if(vehicleBookHourInfos.size() >=1) {
for(VehicleBookHourInfo vehicleBookHourInfo : vehicleBookHourInfos) {
if(vehicleBookHourInfo.getBookedHour().equals(vehicleBookHourInfoDto.getBookedHour())) {
return ObjectRestResponse.createFailedResult(504, "当天时间段已经被预定");
} else {
vehicleBookHourInfo.setBookedHour(vehicleBookHourInfo.getBookedHour() | vehicleBookHourInfoDto.getBookedHour());
mapper.updateByPrimaryKeySelective(vehicleBookHourInfo);
}
}
return ObjectRestResponse.succ();
}
//没有数据直接添加
mapper.insertSelective(vehicleBookHourInfoDto);
return ObjectRestResponse.succ();
}
/**
* 删除预定车辆小时记录信息
* @param vehicleId 车辆Id
* @param dateList 日期列表
* @return
*/
@Transactional
public ObjectRestResponse delete(String vehicleId, List<String> dateList) {
if(StringUtils.isBlank(vehicleId) || dateList.size() <= 0) {
return ObjectRestResponse.createFailedResult(502, "删除信息车辆Id为空");
}
Map<String, Object> param = Maps.newHashMap();
param.put("vehicleId", vehicleId);
param.put("list", dateList);
List<VehicleBookHourInfo> list = mapper.selectByVehicleAndDateList(param);
list.forEach((a) -> mapper.delete(a));
return ObjectRestResponse.succ();
}
}
package com.xxfc.platform.vehicle.mapper;
import com.xxfc.platform.vehicle.entity.VehicleBookHourInfo;
import com.xxfc.platform.vehicle.pojo.VehicleBookHourInfoDto;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
import java.util.Map;
public interface VehicleBookHourInfoMapper extends Mapper<VehicleBookHourInfo> {
List<VehicleBookHourInfo> selectByVehicleAndDate(VehicleBookHourInfoDto vehicleBookHourInfoDto);
List<VehicleBookHourInfo> selectByVehicleAndDateList(Map<String, Object> param);
}
\ No newline at end of file
......@@ -188,7 +188,7 @@ public class VehicleController extends BaseController<VehicleBiz> {
*/
@RequestMapping(value = "/book/4employee", method = RequestMethod.POST)
@ApiOperation(value = "申请预定车辆信息")
public RestResponse<Integer> applyVehicle(@RequestBody BookVehicleVO bookVehicleVo) throws Exception {
public RestResponse<Integer> applyVehicle( BookVehicleVO bookVehicleVo) throws Exception {
Integer operatorId = Integer.parseInt(BaseContextHandler.getUserID());
String userName = BaseContextHandler.getName();
baseBiz.applyVehicle4Employee(operatorId, bookVehicleVo, userName);
......@@ -377,11 +377,11 @@ public class VehicleController extends BaseController<VehicleBiz> {
if (pageDataVO.getData().size() <= 0) {
throw new BaseException(ResultCode.NOTEXIST_CODE);
}
bookVehicleVo.setVehicle(pageDataVO.getData().get(0).getId());
bookVehicleVo.setVehicleId(pageDataVO.getData().get(0).getId());
baseBiz.applyVehicle4Employee(operatorId, bookVehicleVo, userName);
return ObjectRestResponse.succ(bookVehicleVo.getVehicle());
return ObjectRestResponse.succ(bookVehicleVo.getVehicleId());
}
......
<?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.vehicle.mapper.VehicleBookHourInfoMapper" >
<resultMap id="BaseResultMap" type="com.xxfc.platform.vehicle.entity.VehicleBookHourInfo" >
<!--
WARNING - @mbg.generated
-->
<id column="id" property="id" jdbcType="INTEGER" />
<result column="vehicle_id" property="vehicleId" jdbcType="VARCHAR" />
<result column="year_month_day" property="yearMonthDay" jdbcType="VARCHAR" />
<result column="booked_hour" property="bookedHour" jdbcType="INTEGER" />
<result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
<result column="update_time" property="updateTime" jdbcType="TIMESTAMP" />
</resultMap>
<select id="selectByVehicleAndDate" parameterType="com.xxfc.platform.vehicle.pojo.VehicleBookHourInfoDto" resultType="com.xxfc.platform.vehicle.entity.VehicleBookHourInfo">
select * from vehicle_book_hour_info
where vehicle_id = #{vehicleId} and year_month_day = #{yearMonthDay}
</select>
<select id="selectByVehicleAndDateList" parameterType="java.util.Map" resultType="com.xxfc.platform.vehicle.entity.VehicleBookHourInfo">
select * from vehicle_book_hour_info
where vehicle_id = #{vehicleId} and year_month_day in
<foreach collection="list" item="yearMonthDay" index="index" open="(" close=")" separator=",">
#{yearMonthDay}
</foreach>
</select>
</mapper>
\ No newline at end of file
......@@ -44,7 +44,7 @@
</choose>
where
vehicle = #{vehicle} and `year_month`=#{yearMonth} and
vehicle = #{vehicleId} and `year_month`=#{yearMonth} and
booked_date &amp; #{andOperationFactor} = #{andOperationRs}
</update>
......
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