Commit 1b695f4b authored by 164003836@qq.con's avatar 164003836@qq.con

增加车辆管理项目

parent a1e289a4
......@@ -131,6 +131,19 @@
<version>1.1.10</version>
</dependency>
<!-- 引用缓存开源项目 -->
<dependency>
<groupId>com.github.wxiaoqi</groupId>
<artifactId>ace-cache</artifactId>
<version>0.0.2</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
......
package com.xinxincaravan.caravan.vehicle;
import com.ace.cache.EnableAceCache;
import com.github.wxiaoqi.security.auth.client.EnableAceAuthClient;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableDiscoveryClient
//@EnableScheduling
//@EnableAceAuthClient
//@EnableFeignClients({"com.github.wxiaoqi.security.auth.client.feign"})
@EnableScheduling
@EnableAceAuthClient
@EnableFeignClients({"com.github.wxiaoqi.security.auth.client.feign"})
@EnableAceCache
@MapperScan("com.xinxincaravan.caravan.vehicle.mapper")
public class VehicleApplication {
......
package com.xinxincaravan.caravan.vehicle.biz;
import com.ace.cache.annotation.Cache;
import com.ace.cache.annotation.CacheClear;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.google.common.collect.Lists;
import com.xinxincaravan.caravan.vehicle.constant.RedisKey;
import com.xinxincaravan.caravan.vehicle.entity.BranchCompany;
import com.xinxincaravan.caravan.vehicle.mapper.BranchCompanyMapper;
import com.xinxincaravan.caravan.vehicle.vo.BranchCompanyVo;
import com.xinxincaravan.caravan.vehicle.vo.PageDataVo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import tk.mybatis.mapper.entity.Example;
import java.util.List;
......@@ -48,6 +55,26 @@ public class BranchCompanyBiz extends BaseBiz<BranchCompanyMapper, BranchCompany
return branchCompanyVoList;
}
public PageDataVo<BranchCompany> getAll(Integer page,Integer limit,Integer addrProvince, Integer addrCity,
Integer addrTown){
Example example = new Example(BranchCompany.class);
Example.Criteria criteria = example.createCriteria();
if(addrProvince!=null) {
criteria.andCondition(" addr_province = '" + addrProvince + "'");
}
if(addrCity!=null) {
criteria.andCondition(" addr_city = '" + addrCity + "'");
}
if(addrTown!=null) {
criteria.andCondition(" addr_town = '" + addrTown + "'");
}
example.setOrderByClause("`id` asc");
PageHelper.startPage(page,limit);
PageInfo<BranchCompany> branchCompanyPageInfo = new PageInfo<>(mapper.selectByExample(example));
return PageDataVo.pageInfo(branchCompanyPageInfo);
}
@Cache(key= RedisKey.BRANCH_COMPANY_CACHE_ALL)
public List<BranchCompany> getAll(){
return mapper.selectAll();
}
......@@ -57,6 +84,7 @@ public class BranchCompanyBiz extends BaseBiz<BranchCompanyMapper, BranchCompany
* @param branchCompanyVo
* @return
*/
@CacheClear(key= RedisKey.BRANCH_COMPANY_CACHE_ALL)
public Integer add(BranchCompanyVo branchCompanyVo){
BranchCompany branchCompany = new BranchCompany();
BeanUtils.copyProperties(branchCompanyVo,branchCompany);
......@@ -64,6 +92,7 @@ public class BranchCompanyBiz extends BaseBiz<BranchCompanyMapper, BranchCompany
return branchCompany.getId();
}
@CacheClear(key= RedisKey.BRANCH_COMPANY_CACHE_ALL)
public void del(Integer id){
mapper.deleteByPrimaryKey(id);
}
......@@ -73,6 +102,7 @@ public class BranchCompanyBiz extends BaseBiz<BranchCompanyMapper, BranchCompany
* @param branchCompany
* @return
*/
@CacheClear(key= RedisKey.BRANCH_COMPANY_CACHE_ALL)
public Integer update(BranchCompany branchCompany){
return mapper.updateByPrimaryKeySelective(branchCompany);
}
......
......@@ -19,7 +19,6 @@ import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.task.TaskExecutor;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
......@@ -34,7 +33,7 @@ import java.util.concurrent.TimeUnit;
public class ConstantBiz extends BaseBiz<ConstantMapper,Constant> {
@Autowired
private RedisTemplate redisTemplate;
private RedisTemplate customRedisTemplate;
@Autowired
private TaskExecutor customTaskExecutor;
/**
......@@ -70,7 +69,7 @@ public class ConstantBiz extends BaseBiz<ConstantMapper,Constant> {
* @return
*/
public List<ConstantVo> getAllConstantByType(Integer type) {
String cacheConstantsJsonStr = String.valueOf(redisTemplate.opsForValue().get(getConstantRedisKey(type)));
String cacheConstantsJsonStr = String.valueOf(customRedisTemplate.opsForValue().get(getConstantRedisKey(type)));
Map<String,Object> constantMap = new HashMap<>();
if(StringUtils.isNotBlank(cacheConstantsJsonStr)){
constantMap = JSON.parseObject(cacheConstantsJsonStr);
......@@ -131,18 +130,18 @@ public class ConstantBiz extends BaseBiz<ConstantMapper,Constant> {
log.info("刷新类型【"+type+"】常量数据任务开始");
//redis方式实现乐观锁
String redisLockKey = RedisKey.CONSTANT_REFRESH_LOCK_PREFIX +type+":"+(DateTime.now().getMinuteOfDay()/5);//同一日每5分钟只刷新一次
Boolean suc = redisTemplate.opsForValue().setIfAbsent(redisLockKey, String.valueOf(DateTime.now().getMillis()));
Boolean suc = customRedisTemplate.opsForValue().setIfAbsent(redisLockKey, String.valueOf(DateTime.now().getMillis()));
if(!suc){
continue;
}
redisTemplate.expire(redisLockKey,5, TimeUnit.MINUTES);//5分钟内过期
customRedisTemplate.expire(redisLockKey,5, TimeUnit.MINUTES);//5分钟内过期
List<ConstantVo> constantVoList = getAllConstantByTypeNoCache(type);
if(CollectionUtils.isNotEmpty(constantVoList)){
Map<String,String> constantMap = new HashMap<>();
for(ConstantVo constantVo:constantVoList){
constantMap.put(String.valueOf(constantVo.getCode()),constantVo.getVal());
}
redisTemplate.opsForValue().set(getConstantRedisKey(type), JSON.toJSONString(constantMap));
customRedisTemplate.opsForValue().set(getConstantRedisKey(type), JSON.toJSONString(constantMap));
}
log.info("刷新类型【"+type+"】常量数据任务完成");
}
......
......@@ -7,33 +7,26 @@ import com.google.common.collect.Lists;
import com.xinxincaravan.caravan.vehicle.common.CustomIllegalParamException;
import com.xinxincaravan.caravan.vehicle.constant.RedisKey;
import com.xinxincaravan.caravan.vehicle.constant.RegionType;
import com.xinxincaravan.caravan.vehicle.entity.Constant;
import com.xinxincaravan.caravan.vehicle.entity.SysRegion;
import com.xinxincaravan.caravan.vehicle.mapper.SysRegionMapper;
import com.xinxincaravan.caravan.vehicle.vo.ConstantVo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.task.TaskExecutor;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
@Service
@Slf4j
public class SysRegionBiz extends BaseBiz<SysRegionMapper, SysRegion> {
@Autowired
private RedisTemplate redisTemplate;//todo redis需要改为多实例
private RedisTemplate customRedisTemplate;//todo redis需要改为多实例
@Autowired
private TaskExecutor customTaskExecutor;
......@@ -42,6 +35,35 @@ public class SysRegionBiz extends BaseBiz<SysRegionMapper, SysRegion> {
*/
private static final Long PARENT_ID_NONE = 0l;
public List<SysRegion> getRegionsByCodes(List<Long> ids){
List<String> redisCacheKeys = Lists.newArrayList();
if(CollectionUtils.isEmpty(ids)){
throw new CustomIllegalParamException("empty id list");
}
for(Long id:ids){
redisCacheKeys.add(RedisKey.SYS_REGION_CACHE_PREFIX+id);
}
List<String> cachedRegionStrList = customRedisTemplate.opsForValue().multiGet(redisCacheKeys);
List<SysRegion> rs = Lists.newArrayList();
Boolean hasCache = Boolean.TRUE;
for(String cachedRegionStr:cachedRegionStrList){
if(StringUtils.isBlank(cachedRegionStr)){
hasCache = Boolean.FALSE;
continue;
}else{
rs.add(JSONObject.parseObject(cachedRegionStr,SysRegion.class));
}
}
if(!hasCache){//从db读
rs = mapper.getByIdList(ids);
}
return rs;
}
//获取相应地区类型对应在id的位数,作为对应parent查找其下地区的redis key组成部分
private String getPrefixOfAgencyId(Integer type,Long parentId){
switch(type){
......@@ -91,7 +113,7 @@ public class SysRegionBiz extends BaseBiz<SysRegionMapper, SysRegion> {
*/
private String getCacheRedisKey(Long parentId){
//获取相应地区类型对应在agencyId的位数
return RedisKey.SYS_REGION_CACHE_PREFIX +getPrefixOfAgencyId(parentId);
return RedisKey.SYS_REGION_SONS_CACHE_PREFIX +getPrefixOfAgencyId(parentId);
}
/**
......@@ -102,7 +124,7 @@ public class SysRegionBiz extends BaseBiz<SysRegionMapper, SysRegion> {
public List<SysRegion> getSonRegion(Long id){
//从缓存中查询
String redisKey = getCacheRedisKey(id);
String sysRegionListJson = String.valueOf(redisTemplate.opsForValue().get(redisKey));
String sysRegionListJson = String.valueOf(customRedisTemplate.opsForValue().get(redisKey));
List<SysRegion> sysRegions = null;
if(StringUtils.isNotBlank(sysRegionListJson)){
sysRegions = JSONObject.parseArray(sysRegionListJson,SysRegion.class);
......@@ -140,12 +162,14 @@ public class SysRegionBiz extends BaseBiz<SysRegionMapper, SysRegion> {
List<SysRegion> sonRegions = getSonRegionNoCache(id);
//把当前节点的子节点数据缓存
String redisKey = getCacheRedisKey(id);
redisTemplate.opsForValue().set(redisKey,JSON.toJSON(sonRegions).toString());
customRedisTemplate.opsForValue().set(redisKey,JSON.toJSON(sonRegions).toString());
log.info("完成地区【"+id+"】的子地区数据缓存");
if(CollectionUtils.isEmpty(sonRegions) || getTypeFromId(id).equals(RegionType.CITY.getCode())){
return;
}
for(SysRegion sonRegion:sonRegions){
//缓存每个地区
customRedisTemplate.opsForValue().set(RedisKey.SYS_REGION_CACHE_PREFIX+sonRegion.getId(),JSON.toJSON(sonRegion).toString());
refreshCacheRegionAndSon(sonRegion.getId());
}
}
......@@ -157,7 +181,7 @@ public class SysRegionBiz extends BaseBiz<SysRegionMapper, SysRegion> {
public void refreshCache(){
String redisLockKey = RedisKey.SYS_REGION_REFRESH_LOCK +(DateTime.now().getMinuteOfDay()/5);//同一日每5分钟只刷新一次
Boolean suc = redisTemplate.opsForValue().setIfAbsent(redisLockKey, String.valueOf(DateTime.now().getMillis()));
Boolean suc = customRedisTemplate.opsForValue().setIfAbsent(redisLockKey, String.valueOf(DateTime.now().getMillis()));
if(!suc){
log.info("刷新地区数据:获取乐观锁失败,不执行任务");
return;
......
......@@ -18,10 +18,7 @@ import com.xinxincaravan.caravan.vehicle.entity.VehicleBookRecord;
import com.xinxincaravan.caravan.vehicle.mapper.VehicleBookInfoMapper;
import com.xinxincaravan.caravan.vehicle.mapper.VehicleBookRecordMapper;
import com.xinxincaravan.caravan.vehicle.mapper.VehicleMapper;
import com.xinxincaravan.caravan.vehicle.vo.AddOrUpdateVehicleVo;
import com.xinxincaravan.caravan.vehicle.vo.BookVehicleVo;
import com.xinxincaravan.caravan.vehicle.vo.PageDataVo;
import com.xinxincaravan.caravan.vehicle.vo.VehiclePageQueryVo;
import com.xinxincaravan.caravan.vehicle.vo.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.PropertyUtils;
......@@ -81,6 +78,25 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
return CollectionUtils.isEmpty(vehicleBookInfoList)?null:vehicleBookInfoList.get(0);
}
/**
* 获取相关预订记录
* @param vehicle
* @return
*/
public List<VehicleBookInfo> getByVehicleIdAndYearMonth(String vehicle){
Map<String,Object> params = Maps.newHashMap();
params.put("vehicle",vehicle);
params.put("yearMonths",
Lists.newArrayList(
DateTime.now().toString(YEARMONTH_DATE_TIME_FORMATTER),
DateTime.now().plusMonths(1).toString(YEARMONTH_DATE_TIME_FORMATTER),
DateTime.now().plusMonths(2).toString(YEARMONTH_DATE_TIME_FORMATTER)
)
);
List<VehicleBookInfo> vehicleBookInfoList = vehicleBookInfoMapper.getByVehicleIdAndYearMonths(params);
return vehicleBookInfoList;
}
/**
* 检查常量是否合法
*/
......@@ -190,7 +206,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
* @param bookVehicleVo
* @return
*/
public RestResponse applyVehicle4Employee(Integer userId,BookVehicleVo bookVehicleVo){
public RestResponse applyVehicle4Employee(Integer userId,BookVehicleVo bookVehicleVo,String userName){
//检查车辆信息是否合法
checkIfVehicleExists(bookVehicleVo.getVehicle());
//提取日期和相应的预定目标日期
......@@ -214,6 +230,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
vehicleBookRecord.setBookType(BookType.EMPLOYEE_APPLY.getCode());
vehicleBookRecord.setStatus(VehicleBookRecordStatus.APPLY.getCode());
vehicleBookRecord.setBookUser(userId);
vehicleBookRecord.setBookUserName(userName);
vehicleBookRecord.setBookStartDate(DateTime.
parse(bookVehicleVo.getBookStartDate(),DEFAULT_DATE_TIME_FORMATTER).toDate());
vehicleBookRecord.setBookEndDate(DateTime.
......@@ -234,10 +251,10 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
//位操作确定目标日期是否可预订
Map<String,Object> params = Maps.newHashMap();
Map<String,List<String>> yearMonthAndDate = new HashMap<>();
yearMonthAndDate.put(vehicleBookInfo.getYearMonth(),bookedDates);
yearMonthAndDate.put(yearMonth,bookedDates);
fillBookedDateSearchParam(params,null,yearMonthAndDate);//转换为查询对应日期未预定的条件
Map<String,Map<String,Integer>> yearMonthAndParam = (Map<String,Map<String,Integer>>)params.get("yearMonthAndParam");
Map<String,Integer> andOpratorParam = yearMonthAndParam.get(vehicleBookInfo.getYearMonth());
Map<String,Integer> andOpratorParam = yearMonthAndParam.get(yearMonth);
Integer andOperationFactor = andOpratorParam.get("andOperationFactor");
Integer andOperationRs = andOpratorParam.get("andOperationRs");
if(vehicleBookInfo!=null&&vehicleBookInfo.getBookedDate()!=null &&
......@@ -255,7 +272,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
* @return
*/
@Transactional
public RestResponse<Integer> reviewVehicleBooking(Integer operatorId, Long bookRecordId,Integer rsStatus) throws Exception{
public RestResponse<Integer> reviewVehicleBooking(Integer operatorId, Long bookRecordId,Integer rsStatus,String userName) throws Exception{
//获取相关申请记录
VehicleBookRecord vehicleBookRecord = vehicleBookRecordMapper.selectByPrimaryKey(bookRecordId);
//申请记录验证
......@@ -282,6 +299,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
updateParam.put("id",bookRecordId);
updateParam.put("status",rsStatus);
updateParam.put("reviewerApply",operatorId);
updateParam.put("reviewerNameApply",userName);
updateParam.put("statusCondition",VehicleBookRecordStatus.APPLY.getCode());
Integer effected = vehicleBookRecordMapper.changeRecordStatus(updateParam);
if(effected == 0){//修改失败,手动回滚
......@@ -296,7 +314,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
* @return
*/
@Transactional
public RestResponse unbookVehicle4Employee(Integer operatorId,Long bookRecordId) throws Exception{
public RestResponse unbookVehicle4Employee(Integer operatorId,Long bookRecordId,String userName) throws Exception{
//获取相关申请记录
VehicleBookRecord vehicleBookRecord = vehicleBookRecordMapper.selectByPrimaryKey(bookRecordId);
//申请记录验证
......@@ -323,6 +341,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
updateParam.put("id",bookRecordId);
updateParam.put("status",VehicleBookRecordStatus.CANCEL_APPLY.getCode());
updateParam.put("reviewerCancel",operatorId);
updateParam.put("reviewerNameCancel",userName);
updateParam.put("statusCondition",VehicleBookRecordStatus.APPROVE.getCode());
Integer effected = vehicleBookRecordMapper.changeRecordStatus(updateParam);
if(effected == 0){//修改失败,手动回滚
......@@ -719,17 +738,17 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
* @return
* @throws Exception
*/
public PageDataVo<Vehicle> getByPage(VehiclePageQueryVo vehiclePageQueryVo) throws Exception{
public PageDataVo<QueryVehicleVo> getByPage(VehiclePageQueryVo vehiclePageQueryVo) throws Exception{
Map<String, Object> params = PropertyUtils.describe(vehiclePageQueryVo);
Integer pageSize = (Integer) params.get("pageSize");
Integer pageSize = (Integer) params.get("limit");
params.remove("pageSize");
Integer pageNo = (Integer) params.get("pageNo");
Integer pageNo = (Integer) params.get("page");
params.remove("pageNo");
//处理预定日期相关参数
adjustBookedInfoParam(params,vehiclePageQueryVo);
PageHelper.startPage(pageNo,pageSize);
List<Vehicle> vehicles = mapper.getByPage(params);
PageInfo<Vehicle> vehiclePageInfo = new PageInfo<>(vehicles);
List<QueryVehicleVo> vehicles = mapper.getByPage(params);
PageInfo<QueryVehicleVo> vehiclePageInfo = new PageInfo<>(vehicles);
return PageDataVo.pageInfo(vehiclePageInfo);
}
......
......@@ -31,7 +31,7 @@ public class VehicleBookInfoBiz extends BaseBiz<VehicleBookInfoMapper, VehicleBo
public static final Integer COPY_BATCH_SIZE = 100;
@Autowired
private RedisTemplate redisTemplate;
private RedisTemplate customRedisTemplate;
/**
* 迁移数据到历史表
......@@ -60,9 +60,9 @@ public class VehicleBookInfoBiz extends BaseBiz<VehicleBookInfoMapper, VehicleBo
String lastMonthStr = now.plusMonths(-1).toString(YEARMONTH_DATE_TIME_FORMATTER);
String redisKey = RedisKey.DEL_BOOK_INFO_LOCK_PREFIX +lastMonthStr;
Boolean hasSuc = redisTemplate.opsForValue().setIfAbsent(redisKey,String.valueOf(DateTime.now().getMillis()));
Boolean hasSuc = customRedisTemplate.opsForValue().setIfAbsent(redisKey,String.valueOf(DateTime.now().getMillis()));
if(hasSuc){//设置1天后过期
redisTemplate.expire(redisKey,1, TimeUnit.DAYS);
customRedisTemplate.expire(redisKey,1, TimeUnit.DAYS);
}else{
log.info("[预定信息迁移]乐观锁获取失败,该线程不执行任务。");
return Boolean.FALSE;
......
package com.xinxincaravan.caravan.vehicle.biz;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.google.common.collect.Maps;
import com.xinxincaravan.caravan.vehicle.common.CustomIllegalParamException;
import com.xinxincaravan.caravan.vehicle.constant.RedisKey;
import com.xinxincaravan.caravan.vehicle.entity.VehicleBookRecord;
import com.xinxincaravan.caravan.vehicle.mapper.VehicleBookRecordMapper;
import com.xinxincaravan.caravan.vehicle.vo.PageDataVo;
import com.xinxincaravan.caravan.vehicle.vo.QueryVehicleBookRecordVo;
import com.xinxincaravan.caravan.vehicle.vo.VehicleBookRecordQueryVo;
import com.xinxincaravan.caravan.vehicle.vo.VehiclePageQueryVo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
......@@ -16,6 +25,7 @@ import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
......@@ -25,13 +35,46 @@ import java.util.concurrent.TimeUnit;
public class VehicleBookRecordBiz extends BaseBiz<VehicleBookRecordMapper, VehicleBookRecord> {
public static final String TB_NAME_PREFIX = "vehicle_book_record_his_";
public static final String TB_NAME_REAL = "vehicle_book_record";//实际表名
public static final DateTimeFormatter YEAR_DATE_TIME_FORMATTER = DateTimeFormat.forPattern("yyyy");
public static final DateTimeFormatter YEARMONTH_DATE_TIME_FORMATTER = DateTimeFormat.forPattern("yyyy-MM");
public static final Integer DEL_BATCH_SIZE = 1000;
public static final Integer COPY_BATCH_SIZE = 100;
@Autowired
private RedisTemplate redisTemplate;
private RedisTemplate customRedisTemplate;
/**
* 按页查询
* @param vehicleBookRecordQueryVo
* @return
* @throws Exception
*/
public PageDataVo<QueryVehicleBookRecordVo> page(VehicleBookRecordQueryVo vehicleBookRecordQueryVo) throws Exception{
Map<String, Object> params = PropertyUtils.describe(vehicleBookRecordQueryVo);
String selectedMonth = (String)params.get("selectedMonth");
if(StringUtils.isBlank(selectedMonth)){
throw new CustomIllegalParamException(" no month selected ");
}
params.put("tbName",TB_NAME_REAL);
DateTime selectedMonthDate = DateTime.parse(selectedMonth,YEARMONTH_DATE_TIME_FORMATTER);
if(selectedMonthDate.compareTo(DateTime.now().plusMonths(-1).withDayOfMonth(1).withMillisOfDay(0)) < 0){
params.put("tbName",getTbName(String.valueOf(selectedMonthDate.getYear())));
}
params.put("bookedStartDate",selectedMonthDate.withDayOfMonth(1).toString());
params.put("bookedEndDate",selectedMonthDate.plusMonths(1).withDayOfMonth(1).toDate());
Integer pageSize = (Integer) params.get("limit");
params.remove("pageSize");
Integer pageNo = (Integer) params.get("page");
params.remove("pageNo");
PageHelper.startPage(pageNo,pageSize);
List<QueryVehicleBookRecordVo> bookRecordAndVehicleInfo = mapper.getByPage(params);
PageInfo<QueryVehicleBookRecordVo> vehiclePageInfo = new PageInfo<>(bookRecordAndVehicleInfo);
return PageDataVo.pageInfo(vehiclePageInfo);
}
/**
* 迁移数据到历史表
......@@ -61,9 +104,9 @@ public class VehicleBookRecordBiz extends BaseBiz<VehicleBookRecordMapper, Vehic
String lastMonthStr = now.plusMonths(-1).toString(YEARMONTH_DATE_TIME_FORMATTER);
String redisKey = RedisKey.DEL_BOOK_RECORD_LOCK_PREFIX +lastMonthStr;
Boolean hasSuc = redisTemplate.opsForValue().setIfAbsent(redisKey,String.valueOf(DateTime.now().getMillis()));
Boolean hasSuc = customRedisTemplate.opsForValue().setIfAbsent(redisKey,String.valueOf(DateTime.now().getMillis()));
if(hasSuc){//设置1天后过期
redisTemplate.expire(redisKey,1, TimeUnit.DAYS);
customRedisTemplate.expire(redisKey,1, TimeUnit.DAYS);
}else{
log.info("[预定记录迁移]乐观锁获取失败,该线程不执行任务。");
return Boolean.FALSE;
......@@ -136,6 +179,15 @@ public class VehicleBookRecordBiz extends BaseBiz<VehicleBookRecordMapper, Vehic
return TB_NAME_PREFIX+ DateTime.now().toString(YEAR_DATE_TIME_FORMATTER);
}
/**
* 获取历史表名称
* @param year
* @return
*/
private String getTbName(String year){
return TB_NAME_PREFIX+ year;
}
/**
* 创建当年相关表格
*/
......
......@@ -24,7 +24,7 @@ import org.springframework.data.redis.serializer.StringRedisSerializer;
public class RedisConfiguration {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
public RedisTemplate<String, Object> customRedisTemplate(RedisConnectionFactory factory) {
RedisTemplate redisTemplate = new RedisTemplate();
redisTemplate.setConnectionFactory(factory);
RedisSerializer<String> stringSerializer = new StringRedisSerializer();
......
......@@ -3,6 +3,7 @@ package com.xinxincaravan.caravan.vehicle.config;
import com.github.wxiaoqi.security.auth.client.interceptor.ServiceAuthRestInterceptor;
import com.github.wxiaoqi.security.auth.client.interceptor.UserAuthRestInterceptor;
import com.github.wxiaoqi.security.common.handler.GlobalExceptionHandler;
import com.xinxincaravan.caravan.vehicle.interceptor.CorsInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
......@@ -26,27 +27,34 @@ public class WebConfiguration implements WebMvcConfigurer {
}
// /**
// * 加入拦截器,介入相关权限验证(服务+用户)
// * @param registry
// */
// @Override
// public void addInterceptors(InterceptorRegistry registry) {
// registry.addInterceptor(getServiceAuthRestInterceptor()).
// addPathPatterns(getIncludePathPatterns());
// registry.addInterceptor(getUserAuthRestInterceptor()).
// addPathPatterns(getIncludePathPatterns());
// }
//
// @Bean
// ServiceAuthRestInterceptor getServiceAuthRestInterceptor() {
// return new ServiceAuthRestInterceptor();
// }
//
// @Bean
// UserAuthRestInterceptor getUserAuthRestInterceptor() {
// return new UserAuthRestInterceptor();
// }
/**
* 加入拦截器,介入相关权限验证(服务+用户)
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(getCorsInterceptor()).addPathPatterns("/**");
registry.addInterceptor(getServiceAuthRestInterceptor()).
addPathPatterns(getIncludePathPatterns());
registry.addInterceptor(getUserAuthRestInterceptor()).
addPathPatterns(getIncludePathPatterns());
}
@Bean
ServiceAuthRestInterceptor getServiceAuthRestInterceptor() {
return new ServiceAuthRestInterceptor();
}
@Bean
CorsInterceptor getCorsInterceptor() {
return new CorsInterceptor();
}
@Bean
UserAuthRestInterceptor getUserAuthRestInterceptor() {
return new UserAuthRestInterceptor();
}
/**
* 需要用户和服务认证判断的路径
......@@ -55,7 +63,8 @@ public class WebConfiguration implements WebMvcConfigurer {
private ArrayList<String> getIncludePathPatterns() {
ArrayList<String> list = new ArrayList<>();
String[] urls = {
"/vehicleInfo/**"
"/vehicleInfo/**",
"/branchCompany/**"
};
Collections.addAll(list, urls);
return list;
......
......@@ -8,7 +8,12 @@ public class RedisKey {
public static final String CONSTANT_CACHE_PREFIX ="cache:constant:";
/**
* 地区常量缓存key前缀
* 地区常量缓存key前缀(子读取列表)
*/
public static final String SYS_REGION_SONS_CACHE_PREFIX ="cache:sysRegion:sons:";
/**
* 地区常量缓存key前缀(子读取列表)
*/
public static final String SYS_REGION_CACHE_PREFIX ="cache:sysRegion:";
......@@ -30,4 +35,11 @@ public class RedisKey {
* 迁移预定记录rediseky
*/
public static final String DEL_BOOK_RECORD_LOCK_PREFIX ="lock:del:bookRecord:";
/**
* 子公司列表缓存key前缀
*/
public static final String BRANCH_COMPANY_CACHE_ALL ="cache:bracnCompany:all";
}
......@@ -6,6 +6,7 @@ import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;
@Table(name = "branch_company")
@Data
......@@ -60,7 +61,9 @@ public class BranchCompany {
@Column(name = "addr_detail")
private String addrDetail;
private Date createTime;
private Date updateTime;
}
\ No newline at end of file
......@@ -31,11 +31,17 @@ public class VehicleBookRecord {
private Integer bookType;
/**
* 预定用户id,对应menberinfo表中的id
* 预定用户id
*/
@Column(name = "book_user")
private Integer bookUser;
/**
* 预定用户姓名
*/
@Column(name = "book_user_name")
private String bookUserName;
/**
* 联系信息,比如电话、联系人姓名等(json)
*/
......@@ -74,11 +80,23 @@ public class VehicleBookRecord {
private Integer reviewerApply;
/**
* 申请审核人,-1代表系统
* 申请审核人姓名
*/
@Column(name = "reviewer_name_apply")
private String reviewerNameApply;
/**
* 归还审核人,-1代表系统
*/
@Column(name = "reviewer_return")
private Integer reviewerReturn;
/**
* 归还审核人姓名
*/
@Column(name = "reviewer_name_return")
private String reviewerNameReturn;
/**
* 取消人,-1代表系统
......@@ -86,6 +104,12 @@ public class VehicleBookRecord {
@Column(name = "reviewer_cancel")
private Integer reviewerCancel;
/**
* 取消人姓名
*/
@Column(name = "reviewer_name_cancel")
private String reviewerNameCancel;
/**
* 申请结束日期
*/
......
package com.xinxincaravan.caravan.vehicle.interceptor;
import org.springframework.http.HttpHeaders;
import org.springframework.web.cors.CorsUtils;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Created by ace on 2017/9/12.
*/
public class CorsInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (request.getHeader(HttpHeaders.ORIGIN) != null) {
response.addHeader("Access-Control-Allow-Origin", "*");
response.addHeader("Access-Control-Allow-Credentials", "true");
response.addHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT, HEAD");
response.addHeader("Access-Control-Allow-Headers", "Content-Type,authorization");
response.addHeader("Access-Control-Max-Age", "3600");
}
if(CorsUtils.isPreFlightRequest(request)){//是否跨域前option请求,使得话不执行后面拦截器
return Boolean.FALSE;
}
return super.preHandle(request, response, handler);
}
}
package com.xinxincaravan.caravan.vehicle.mapper;
import com.xinxincaravan.caravan.vehicle.entity.Constant;
import com.xinxincaravan.caravan.vehicle.entity.SysRegion;
import org.springframework.data.repository.query.Param;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
......@@ -9,7 +9,7 @@ import java.util.Map;
public interface SysRegionMapper extends Mapper<SysRegion> {
public List<Integer> getAllByPage(Map<String,Object> params);
public List<SysRegion> getAllByPage(Map<String,Object> params);
public List<SysRegion> getByIdList(List<Long> idList);
}
......@@ -14,6 +14,13 @@ public interface VehicleBookInfoMapper extends Mapper<VehicleBookInfo> {
*/
public List<VehicleBookInfo> getByVehicleIdAndYearMonth(Map<String,Object> params);
/**
* 根据车辆id和对应年月查询预定记录
* @param params
* @return
*/
public List<VehicleBookInfo> getByVehicleIdAndYearMonths(Map<String,Object> params);
/**
* 不存在插入、存在更新
* @param vehicleBookInfo
......
package com.xinxincaravan.caravan.vehicle.mapper;
import com.xinxincaravan.caravan.vehicle.entity.VehicleBookRecord;
import com.xinxincaravan.caravan.vehicle.vo.QueryVehicleBookRecordVo;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
......@@ -17,4 +18,6 @@ public interface VehicleBookRecordMapper extends Mapper<VehicleBookRecord> {
public Integer del4YearMoth(Map<String,Object> params);
public void createTbIfNotExists(String tbName);
public List<QueryVehicleBookRecordVo> getByPage(Map<String,Object> params);
}
\ No newline at end of file
package com.xinxincaravan.caravan.vehicle.mapper;
import com.xinxincaravan.caravan.vehicle.entity.Vehicle;
import com.xinxincaravan.caravan.vehicle.vo.QueryVehicleVo;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
......@@ -8,7 +9,7 @@ import java.util.Map;
public interface VehicleMapper extends Mapper<Vehicle> {
public List<Vehicle> getByPage(Map<String,Object> params);
public List<QueryVehicleVo> getByPage(Map<String,Object> params);
public int updateStatusById(Map<String,Object> params);
}
\ No newline at end of file
......@@ -6,6 +6,7 @@ import com.xinxincaravan.caravan.vehicle.common.BaseController;
import com.xinxincaravan.caravan.vehicle.common.RestResponse;
import com.xinxincaravan.caravan.vehicle.entity.BranchCompany;
import com.xinxincaravan.caravan.vehicle.vo.BranchCompanyVo;
import com.xinxincaravan.caravan.vehicle.vo.PageDataVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
......@@ -18,6 +19,14 @@ import java.util.List;
public class BranchCompanyController extends BaseController<BranchCompanyBiz> {
@RequestMapping(value ="/page",method = RequestMethod.GET)
public RestResponse<PageDataVo<BranchCompany>> page(@RequestParam Integer page, @RequestParam Integer limit,
@RequestParam(required = false) Integer addrProvince, @RequestParam(required = false) Integer addrCity,
@RequestParam(required = false) Integer addrTown) {
return RestResponse.data(baseBiz.getAll(page,limit,addrProvince, addrCity,
addrTown));
}
@RequestMapping(value ="",method = RequestMethod.GET)
public RestResponse<List<BranchCompany>> getAll() {
return RestResponse.data(baseBiz.getAll());
......
package com.xinxincaravan.caravan.vehicle.rest;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONException;
import com.alibaba.nacos.client.logger.json.JSONArray;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreClientToken;
import com.xinxincaravan.caravan.vehicle.biz.SysRegionBiz;
import com.xinxincaravan.caravan.vehicle.common.BaseController;
import com.xinxincaravan.caravan.vehicle.common.CustomIllegalParamException;
import com.xinxincaravan.caravan.vehicle.common.RestResponse;
import com.xinxincaravan.caravan.vehicle.constant.ConstantType;
import com.xinxincaravan.caravan.vehicle.constant.ResCode.ResCode;
......@@ -28,5 +32,16 @@ public class SysRegionController extends BaseController<SysRegionBiz> {
return RestResponse.data(baseBiz.getSonRegion(id));
}
@RequestMapping(value ="",method = RequestMethod.GET)
public RestResponse<List<SysRegion>> getRegion(@RequestParam String idListJson){
try {
List<Long> ids = JSON.parseArray(idListJson,Long.class);
return RestResponse.data(baseBiz.getRegionsByCodes(ids));
} catch (JSONException ex) {
return RestResponse.code(ResCode.INVALID_REST_REQ_PARAM.getCode());
} catch (CustomIllegalParamException ex){
return RestResponse.code(ResCode.INVALID_REST_REQ_PARAM.getCode());
}
}
}
......@@ -9,6 +9,7 @@ import com.github.wxiaoqi.security.auth.common.util.jwt.JWTHelper;
import com.github.wxiaoqi.security.common.context.BaseContextHandler;
import com.github.wxiaoqi.security.common.msg.auth.TokenForbiddenResponse;
import com.xinxincaravan.caravan.vehicle.biz.VehicleBiz;
import com.xinxincaravan.caravan.vehicle.biz.VehicleBookRecordBiz;
import com.xinxincaravan.caravan.vehicle.common.BaseController;
import com.xinxincaravan.caravan.vehicle.common.CustomIllegalParamException;
import com.xinxincaravan.caravan.vehicle.common.RestResponse;
......@@ -16,10 +17,7 @@ import com.xinxincaravan.caravan.vehicle.constant.ResCode.ResCode;
import com.xinxincaravan.caravan.vehicle.constant.VehicleBookRecordStatus;
import com.xinxincaravan.caravan.vehicle.entity.Vehicle;
import com.xinxincaravan.caravan.vehicle.entity.VehicleBookInfo;
import com.xinxincaravan.caravan.vehicle.vo.AddOrUpdateVehicleVo;
import com.xinxincaravan.caravan.vehicle.vo.PageDataVo;
import com.xinxincaravan.caravan.vehicle.vo.BookVehicleVo;
import com.xinxincaravan.caravan.vehicle.vo.VehiclePageQueryVo;
import com.xinxincaravan.caravan.vehicle.vo.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
......@@ -32,6 +30,8 @@ import java.util.List;
@IgnoreClientToken
public class VehicleController extends BaseController<VehicleBiz> {
@Autowired
private VehicleBookRecordBiz vehicleBookRecordBiz;
@RequestMapping(value ="/{id}",method = RequestMethod.GET)
public RestResponse<Vehicle> get(@PathVariable String id) {
......@@ -53,10 +53,8 @@ public class VehicleController extends BaseController<VehicleBiz> {
return baseBiz.discard(idList);
}
@RequestMapping(value ="/page",method = RequestMethod.GET)
public RestResponse<PageDataVo<Vehicle>> getByPage(@RequestParam String vehiclePageQueryVoJson) throws Exception{
public RestResponse<PageDataVo<QueryVehicleVo>> getByPage(@RequestParam String vehiclePageQueryVoJson) throws Exception{
VehiclePageQueryVo vehiclePageQueryVo = null;
try {
vehiclePageQueryVo = JSON.parseObject(vehiclePageQueryVoJson,VehiclePageQueryVo.class);
......@@ -73,6 +71,11 @@ public class VehicleController extends BaseController<VehicleBiz> {
return RestResponse.data(baseBiz.getByVehicleIdAndYearMonth(vehicleId,yearMonth));
}
@RequestMapping(value ="/bookedInfo/{vehicleId}",method = RequestMethod.GET)
public RestResponse<List<VehicleBookInfo>> getBookedInfo(@PathVariable String vehicleId) {
return RestResponse.data(baseBiz.getByVehicleIdAndYearMonth(vehicleId));
}
/**
* 申请预定车辆
* @param bookVehicleVo
......@@ -80,9 +83,9 @@ public class VehicleController extends BaseController<VehicleBiz> {
*/
@RequestMapping(value ="/book/4employee",method = RequestMethod.POST)
public RestResponse<Integer> applyVehicle(@RequestBody BookVehicleVo bookVehicleVo){
// Integer operatorId = Integer.parseInt(BaseContextHandler.getUserID());
Integer operatorId = -1;
return baseBiz.applyVehicle4Employee(operatorId,bookVehicleVo);
Integer operatorId = Integer.parseInt(BaseContextHandler.getUserID());
String userName = BaseContextHandler.getName();
return baseBiz.applyVehicle4Employee(operatorId,bookVehicleVo,userName);
}
/**
......@@ -92,9 +95,9 @@ public class VehicleController extends BaseController<VehicleBiz> {
*/
@RequestMapping(value ="/book/4employee/prove/{bookRecordId}",method = RequestMethod.PUT)
public RestResponse<Integer> proveVehicleBooking(@PathVariable Long bookRecordId) throws Exception{
// Integer operatorId = Integer.parseInt(BaseContextHandler.getUserID());
Integer operatorId = -1;
return baseBiz.reviewVehicleBooking(operatorId, bookRecordId, VehicleBookRecordStatus.APPROVE.getCode());
Integer operatorId = Integer.parseInt(BaseContextHandler.getUserID());
String userName = BaseContextHandler.getName();
return baseBiz.reviewVehicleBooking(operatorId, bookRecordId, VehicleBookRecordStatus.APPROVE.getCode(),userName);
}
/**
......@@ -104,9 +107,9 @@ public class VehicleController extends BaseController<VehicleBiz> {
*/
@RequestMapping(value ="/book/4employee/reject/{bookRecordId}",method = RequestMethod.PUT)
public RestResponse<Integer> rejectVehicleBooking(@PathVariable Long bookRecordId) throws Exception{
// Integer operatorId = Integer.parseInt(BaseContextHandler.getUserID());
Integer operatorId = -1;
return baseBiz.reviewVehicleBooking(operatorId, bookRecordId, VehicleBookRecordStatus.REJECTED.getCode());
Integer operatorId = Integer.parseInt(BaseContextHandler.getUserID());
String userName = BaseContextHandler.getName();
return baseBiz.reviewVehicleBooking(operatorId, bookRecordId, VehicleBookRecordStatus.REJECTED.getCode(),userName);
}
// /**
......@@ -130,10 +133,24 @@ public class VehicleController extends BaseController<VehicleBiz> {
*/
@RequestMapping(value ="/unbook/4employee/{bookRecordId}",method = RequestMethod.DELETE)
public RestResponse<Integer> unbookVehicle(@PathVariable Long bookRecordId) throws Exception{
//此处待加入获取当前操作用户id信息以及相关权限验证
// Integer operatorId = Integer.parseInt(BaseContextHandler.getUserID());
Integer operatorId = -1;
return baseBiz.unbookVehicle4Employee(operatorId,bookRecordId);
Integer operatorId = Integer.parseInt(BaseContextHandler.getUserID());
String userName = BaseContextHandler.getName();
return baseBiz.unbookVehicle4Employee(operatorId,bookRecordId,userName);
}
@RequestMapping(value ="/bookedRecord",method = RequestMethod.GET)
public RestResponse<PageDataVo<QueryVehicleBookRecordVo>> getBookedRecord(@RequestParam String vehicleBookRecordQueryVoJson) throws Exception{
VehicleBookRecordQueryVo vehicleBookRecordQueryVo = null;
try {
vehicleBookRecordQueryVo = JSON.parseObject(vehicleBookRecordQueryVoJson,VehicleBookRecordQueryVo.class);
return RestResponse.data(vehicleBookRecordBiz.page(vehicleBookRecordQueryVo));
} catch (JSONException ex) {
return RestResponse.code(ResCode.INVALID_REST_REQ_PARAM.getCode());
} catch (CustomIllegalParamException ex){
return RestResponse.code(ResCode.INVALID_REST_REQ_PARAM.getCode());
}
}
}
package com.xinxincaravan.caravan.vehicle.vo;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;
@Data
public class QueryVehicleBookRecordVo {
/**
* 主键
*/
private Long id;
/**
* 车辆id
*/
private String vehicle;
/**
* 申请状态:1-申请中 2-已通过 3-已归还 4-拒绝 5-逾期归还
*/
private Integer status;
/**
* 预定类型,1-用户租赁、2-分公司使用、3-维修
*/
private Integer bookType;
/**
* 预定用户id
*/
private Integer bookUser;
/**
* 预定用户名称
*/
private String bookUserName;
/**
* 联系信息,比如电话、联系人姓名等(json)
*/
private String contactInfo;
/**
* 申请开始日期
*/
private Date bookStartDate;
/**
* 提车地点(经纬度)
*/
private String liftLocation;
/**
* 提车地址
*/
private String liftAddr;
private String remark;
/**
* 目的地
*/
private String destination;
/**
* 申请审核人,-1代表系统
*/
private Integer reviewerApply;
/**
* 归还审核人,-1代表系统
*/
private Integer reviewerReturn;
/**
* 取消人,-1代表系统
*/
private Integer reviewerCancel;
/**
* 申请审核人姓名
*/
private String reviewerNameApply;
/**
* 归还审核人姓名
*/
private String reviewerNameReturn;
/**
* 取消人姓名
*/
private String reviewerNameCancel;
/**
* 申请结束日期
*/
private Date bookEndDate;
/**
* 实际开始日期
*/
private Date actualStartDate;
/**
* 实际结束日期
*/
private Date actualEndDate;
/**
* 车辆编号,0-没有
*/
private Integer vehicleCode;
/**
* 车牌号,空字符串-没有
*/
private String numberPlate;
/**
* 所属分支机构(id)
*/
private Integer subordinateBranch;
/**
* 所属分支机构(名称)
*/
private String subBranchName;
/**
* 当前月份预定记录
*/
private Integer bookedDate;
}
\ No newline at end of file
package com.xinxincaravan.caravan.vehicle.vo;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.Id;
import java.util.Date;
@Data
public class QueryVehicleVo {
/**
* 主键(uuid)
*/
private String id;
/**
* 车辆编号,0-没有
*/
private Integer code;
/**
* 车辆状态: 1-正常运行 2-维修 3-报废
*/
private Integer status;
/**
* 车牌号,空字符串-没有
*/
private String numberPlate;
/**
* 品牌(编码,对应关系见相关常量),0-未填写
*/
private Integer brand;
/**
* 所属分支机构(id)
*/
private Integer subordinateBranch;
/**
* 所属分支机构(名称)
*/
private String subBranchName;
/**
* 用途类型:租赁房车(1)、展车等,对应关系见车辆常量表
*/
private Integer useType;
/**
* 备注信息
*/
private String remark;
private Date createTime;
private Date updateTime;
}
\ No newline at end of file
package com.xinxincaravan.caravan.vehicle.vo;
import lombok.Data;
import java.util.Date;
@Data
public class VehicleBookRecordQueryVo {
/**
* 车辆编号,0-没有
*/
private Integer vehicleCode;
/**
* 车牌号,空字符串-没有
*/
private String numberPlate;
/**
* 所属分支机构(id)
*/
private Integer subordinateBranch;
/**
* 查询月份 yyyy-MM
*/
private String selectedMonth;
/**
* 申请状态
*/
private Integer status;
private Integer page;
private Integer limit;
}
\ No newline at end of file
......@@ -52,8 +52,8 @@ public class VehiclePageQueryVo {
*/
private String notBookedEndDate;
private Integer pageNo;
private Integer page;
private Integer pageSize;
private Integer limit;
}
......@@ -6,5 +6,11 @@
select `id`, parent_id, `name`, `type`, agency_id from sys_region limit #{pageStart},${pageSize}
</select>
<select id="getByIdList" parameterType="java.util.List" resultType="com.xinxincaravan.caravan.vehicle.entity.SysRegion">
select `id`, parent_id, `name`, `type`, agency_id from sys_region where id in
<foreach collection="list" index="i" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</select>
</mapper>
\ No newline at end of file
......@@ -17,6 +17,15 @@
select id, vehicle, `year_month`, booked_date from vehicle_book_info where vehicle = #{vehicle} and `year_month`=#{yearMonth}
</select>
<select id="getByVehicleIdAndYearMonths" resultType="com.xinxincaravan.caravan.vehicle.entity.VehicleBookInfo" parameterType="java.util.Map">
select id, vehicle, `year_month`, booked_date from vehicle_book_info
where vehicle = #{vehicle}
and `year_month` in
<foreach collection="yearMonths" index="i" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</select>
<insert id="insertIgnore" parameterType="com.xinxincaravan.caravan.vehicle.entity.VehicleBookInfo">
insert ignore into vehicle_book_info ( vehicle, `year_month`, booked_date)
......
......@@ -27,14 +27,23 @@ liftLocation" jdbcType="VARCHAR" />
<update id="changeRecordStatus" parameterType="java.util.Map">
update vehicle_book_record set
<if test="reviewerApply != null">
<if test="reviewerApply != null ">
reviewer_apply =#{reviewerApply},
</if>
<if test="reviewerReturn != null">
<if test="reviewerNameApply != null and reviewerNameApply !=''">
reviewer_name_apply =#{reviewerNameApply},
</if>
<if test="reviewerReturn != null ">
reviewer_return =#{reviewerReturn},
</if>
<if test="reviewerNameReturn != null and reviewerNameReturn !=''">
reviewer_name_return =#{reviewerNameReturn},
</if>
<if test="reviewerCancel != null">
reviewer_cancel =#{reviewerCancel},
</if>
<if test="reviewerNameCancel != null and reviewerNameCancel !=''">
reviewer_name_cancel =#{reviewerNameCancel},
</if>
`status` = #{status}
where id = #{id} and `status` = #{statusCondition}
......@@ -51,6 +60,7 @@ liftLocation" jdbcType="VARCHAR" />
`status`,
`book_type`,
`book_user`,
`book_user_name`,
`contact_info`,
`book_start_date`,
`book_end_date`,
......@@ -59,8 +69,11 @@ liftLocation" jdbcType="VARCHAR" />
`remark`,
`destination`,
`reviewer_apply`,
`reviewer_name_apply`,
`reviewer_return`,
`reviewer_name_return`,
`reviewer_cancel`,
`reviewer_name_cancel`,
`actual_start_date`,
`actual_end_date`
)
......@@ -70,6 +83,7 @@ liftLocation" jdbcType="VARCHAR" />
#{status},
#{bookType},
#{bookUser},
#{bookUserName},
#{contactInfo},
#{bookStartDate},
#{bookEndDate},
......@@ -78,8 +92,11 @@ liftLocation" jdbcType="VARCHAR" />
#{remark},
#{destination},
#{reviewerApply},
#{reviewerNameApply},
#{reviewerReturn},
#{reviewerNameReturn},
#{reviewerCancel},
#{reviewerNameCancel},
#{actualStartDate},
#{actualEndDate}
);
......@@ -92,6 +109,7 @@ liftLocation" jdbcType="VARCHAR" />
`status`,
`book_type`,
`book_user`,
`book_user_name`,
`contact_info`,
`book_start_date`,
`book_end_date`,
......@@ -102,8 +120,11 @@ liftLocation" jdbcType="VARCHAR" />
`update_time`,
`destination`,
`reviewer_apply`,
`reviewer_name_apply`,
`reviewer_return`,
`reviewer_name_return`,
`reviewer_cancel`,
`reviewer_name_cancel`,
`actual_start_date`,
`actual_end_date`
from
......@@ -114,6 +135,65 @@ liftLocation" jdbcType="VARCHAR" />
limit #{pageStart},#{pageSize}
</select>
<select id="getByPage" parameterType="java.util.Map" resultType="com.xinxincaravan.caravan.vehicle.vo.QueryVehicleBookRecordVo">
select
vbr.`id`,
vbr.`vehicle`,
vbr.`status`,
vbr.`book_type`,
vbr.`book_user`,
vbr.`book_user_name`,
vbr.`contact_info`,
vbr.`book_start_date`,
vbr.`book_end_date`,
vbr.`lift_location`,
vbr.`lift_addr`,
vbr.`remark`,
vbr.`create_time`,
vbr.`update_time`,
vbr.`destination`,
vbr.`reviewer_apply`,
vbr.`reviewer_name_apply`,
vbr.`reviewer_return`,
vbr.`reviewer_name_return`,
vbr.`reviewer_cancel`,
vbr.`reviewer_name_cancel`,
vbr.`actual_start_date`,
vbr.`actual_end_date`,
v.`code` as vehicleCode,
v.number_plate as numberPlate,
v.subordinate_branch,
bc.name as subBranchName,
vbf.booked_date as bookedDate
from
${tbName} vbr left join
vehicle v on vbr.vehicle = v.id left join
branch_company bc on bc.id = v.subordinate_branch left join
vehicle_book_info vbf on vbf.vehicle = vbr.vehicle and vbf.year_month = #{selectedMonth}
where
1=1
<if test="numberPlate !=null and numberPlate !=''">
and v.number_plate = #{numberPlate}
</if>
<if test="vehicleCode !=null and vehicleCode !=''">
and v.code = #{vehicleCode}
</if>
<if test="status !=null ">
and vbr.status = #{status}
</if>
<if test="subordinateBranch !=null">
and v.subordinate_branch = #{subordinateBranch}
</if>
<if test="bookedStartDate !=null">
and vbr.book_start_date &gt;= #{bookedStartDate}
</if>
<if test="bookedEndDate !=null">
and vbr.book_end_date &lt;= #{bookedEndDate}
</if>
order by vbr.id desc
</select>
<insert id="createTbIfNotExists" parameterType="java.lang.String">
CREATE TABLE IF NOT EXISTS ${_parameter} (
......@@ -121,7 +201,8 @@ liftLocation" jdbcType="VARCHAR" />
`vehicle` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '车辆id',
`status` int(255) NULL DEFAULT NULL COMMENT '申请状态:1-申请中 2-已通过 3-已归还 4-拒绝 5-逾期归还 6-已取消',
`book_type` int(11) NOT NULL COMMENT '预定类型,1-用户租赁、2-内部员工申请 3-维修',
`book_user` int(11) NOT NULL COMMENT '预定用户id,对应menberinfo表中的id',
`book_user` int(11) NOT NULL COMMENT '预定用户id',
`book_user_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '申请人姓名',
`contact_info` varchar(2000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '联系信息,比如电话、联系人姓名等(json)',
`book_start_date` datetime(0) NOT NULL COMMENT '申请开始日期',
`book_end_date` datetime(0) NOT NULL COMMENT '申请结束日期',
......@@ -132,8 +213,11 @@ liftLocation" jdbcType="VARCHAR" />
`update_time` datetime(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0),
`destination` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '目的地',
`reviewer_apply` int(10) NULL DEFAULT NULL COMMENT '申请审核人,-1代表系统',
`reviewer_name_apply` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '申请审核人姓名',
`reviewer_return` int(10) NULL DEFAULT NULL COMMENT '归还审核人,-1代表系统',
`reviewer_name_return` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '归还审核人姓名',
`reviewer_cancel` int(10) NULL DEFAULT NULL COMMENT '取消人,-1代表系统',
`reviewer_name_cancel` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '取消预定人姓名',
`actual_start_date` datetime(0) NULL DEFAULT NULL COMMENT '实际开始日期',
`actual_end_date` datetime(0) NULL DEFAULT NULL COMMENT '实际结束日期',
PRIMARY KEY (`id`) USING BTREE,
......
......@@ -25,15 +25,18 @@
</update>
<select id="getByPage" parameterType="java.util.Map" resultType="com.xinxincaravan.caravan.vehicle.entity.Vehicle">
<select id="getByPage" parameterType="java.util.Map" resultType="com.xinxincaravan.caravan.vehicle.vo.QueryVehicleVo">
select v.`id`,
v.`code`,
v.`status`,
v.number_plate,
v.brand,
v.subordinate_branch,
bc.name as subBranchName,
v.use_type,
v.remark
v.remark,
v.create_time,
v.update_time
<if test=" yearMonthAndParam !=null ">
,vbi.booked_date
</if>
......@@ -42,6 +45,7 @@
left join
vehicle_book_info vbi on v.`id` = vbi.vehicle
</if>
left join branch_company bc on v.`subordinate_branch` = bc.id
where
1=1
<if test="subordinateBranch !=null">
......@@ -71,7 +75,7 @@
)
</foreach>
</if>
order by v.id
order by v.code
</select>
</mapper>
\ No newline at end of file
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