Commit 2577fce7 authored by 164003836@qq.con's avatar 164003836@qq.con

增加随行物品模块

parent 9a5b8c8b
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.xinxincaravan.caravan.vehicle.common.RestResponse;
import com.xinxincaravan.caravan.vehicle.constant.AccompanyingItemStatus;
import com.xinxincaravan.caravan.vehicle.constant.RedisKey;
import com.xinxincaravan.caravan.vehicle.entity.AccompanyingItem;
import com.xinxincaravan.caravan.vehicle.mapper.AccompanyingItemMapper;
import com.xinxincaravan.caravan.vehicle.vo.AddOrUpdateAccompanyingItem;
import com.xinxincaravan.caravan.vehicle.vo.PageDataVo;
import com.xinxincaravan.caravan.vehicle.vo.QueryAccompanyItemVo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.beanutils.BeanUtils;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
@Service
@Slf4j
public class AccompanyingItemBiz extends BaseBiz<AccompanyingItemMapper, AccompanyingItem> {
@Cache(key = RedisKey.ACCOMPANYING_ITEM_CACHE_ALL)
public List<AccompanyingItem> getAll(){
return mapper.selectAll();
}
/**
* 按id获取列表,没有缓存
* @param id
* @return
*/
public AccompanyingItem get(Integer id){
return mapper.selectByPrimaryKey(id);
}
/**
* 按id获取列表,没有缓存
* @param ids
* @return
*/
public List<AccompanyingItem> getByIds(List<Integer> ids){
return mapper.getByIdList(ids);
}
/**
* 按页查询,
* 注意,此处一共名称的模糊查询是预测其数据量较少,有变化后考虑加入全文索引
* @param queryAccompanyItemVo
* @return
* @throws Exception
*/
public PageDataVo<AccompanyingItem> getByPage(QueryAccompanyItemVo queryAccompanyItemVo) throws Exception{
Map<String,String> params = BeanUtils.describe(queryAccompanyItemVo);
PageHelper.startPage(queryAccompanyItemVo.getPage(),queryAccompanyItemVo.getLimit());
List<AccompanyingItem> accompanyingItems = mapper.getAllByPage(params);
PageInfo<AccompanyingItem> accompanyingItemsPageInfo = new PageInfo<>(accompanyingItems);
return PageDataVo.pageInfo(accompanyingItemsPageInfo);
}
@CacheClear(key= RedisKey.ACCOMPANYING_ITEM_CACHE_ALL)
public RestResponse<Integer> add( AddOrUpdateAccompanyingItem addOrUpdateAccompanyingItem) throws Exception{
AccompanyingItem accompanyingItem = new AccompanyingItem();
accompanyingItem.setId(null);
BeanUtils.copyProperties(accompanyingItem,addOrUpdateAccompanyingItem);
Integer effected = mapper.insertSelective(accompanyingItem);
return RestResponse.suc();
}
@CacheClear(key= RedisKey.ACCOMPANYING_ITEM_CACHE_ALL)
public RestResponse<Integer> update( AddOrUpdateAccompanyingItem addOrUpdateAccompanyingItem) throws Exception{
AccompanyingItem accompanyingItem = new AccompanyingItem();
BeanUtils.copyProperties(accompanyingItem,addOrUpdateAccompanyingItem);
Integer effected = mapper.updateByPrimaryKeySelective(accompanyingItem);
return RestResponse.suc();
}
@CacheClear(key= RedisKey.ACCOMPANYING_ITEM_CACHE_ALL)
public RestResponse<Integer> del(Integer id){
Integer effected = mapper.deleteByPrimaryKey(id);
return RestResponse.suc();
}
}
......@@ -15,6 +15,7 @@ import com.xinxincaravan.caravan.vehicle.constant.VehicleStatus;
import com.xinxincaravan.caravan.vehicle.entity.Vehicle;
import com.xinxincaravan.caravan.vehicle.entity.VehicleBookInfo;
import com.xinxincaravan.caravan.vehicle.entity.VehicleBookRecord;
import com.xinxincaravan.caravan.vehicle.mapper.BookRecordAccItemMapper;
import com.xinxincaravan.caravan.vehicle.mapper.VehicleBookInfoMapper;
import com.xinxincaravan.caravan.vehicle.mapper.VehicleBookRecordMapper;
import com.xinxincaravan.caravan.vehicle.mapper.VehicleMapper;
......@@ -54,6 +55,9 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
private ConstantBiz constantBiz;
@Autowired
private BranchCompanyBiz branchCompanyBiz;
@Autowired
private BookRecordAccItemMapper bookRecordAccItemMapper;
/**
* 每批次最大更、插入车辆最大条目数
*/
......@@ -211,6 +215,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
* @param bookVehicleVo
* @return
*/
@Transactional
public RestResponse applyVehicle4Employee(Integer userId,BookVehicleVo bookVehicleVo,String userName){
//检查车辆信息是否合法
checkIfVehicleExists(bookVehicleVo.getVehicle());
......@@ -245,7 +250,17 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
vehicleBookRecord.setDestination(bookVehicleVo.getDestination());
vehicleBookRecord.setLiftCompany(bookVehicleVo.getLiftCompany());
vehicleBookRecordMapper.insertSelective(vehicleBookRecord);
List<Map<String,Object>> params = Lists.newArrayList();
if(MapUtils.isNotEmpty(bookVehicleVo.getSelectedAccItem())){
for(Map.Entry<Integer,Integer> idAndAmount : bookVehicleVo.getSelectedAccItem().entrySet()){
Map<String,Object> row = Maps.newHashMap();
row.put("id",idAndAmount.getKey());
row.put("amount",idAndAmount.getValue());
row.put("bookRecordId",vehicleBookRecord.getId());
params.add(row);
}
bookRecordAccItemMapper.batchAdd(params);
}
return RestResponse.suc();
}
......@@ -357,41 +372,6 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
return RestResponse.suc();
}
/**
* 车辆归还
* @param operatorId
* @param bookRecordId
* @return
*/
@Deprecated //相关是否存在提车流程?暂废弃
public RestResponse<Integer> returnVehicle(Integer operatorId, String bookRecordId){
//获取相关申请记录
VehicleBookRecord vehicleBookRecord = vehicleBookRecordMapper.selectByPrimaryKey(bookRecordId);
//申请记录验证
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());
}
//对比预定日期,逾期状态即为逾期归还
DateTime startDate = new DateTime(vehicleBookRecord.getBookStartDate());
DateTime endDate = new DateTime(vehicleBookRecord.getBookEndDate());
Integer status = VehicleBookRecordStatus.RETURNED.getCode();
if(DateTime.now().toString(DEFAULT_DATE_TIME_FORMATTER).
compareTo(endDate.toString(DEFAULT_DATE_TIME_FORMATTER))>0){
status = VehicleBookRecordStatus.RETURNED_OUT_DATE.getCode();
}
//若提早归还则需要修改相关预定记录
//修改状态为已归还,写入实际归还日期
return null;
}
/**
......
......@@ -3,16 +3,21 @@ 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.ImmutableMap;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.xinxincaravan.caravan.vehicle.common.CustomIllegalParamException;
import com.xinxincaravan.caravan.vehicle.common.RestResponse;
import com.xinxincaravan.caravan.vehicle.constant.RedisKey;
import com.xinxincaravan.caravan.vehicle.constant.ResCode.ResCode;
import com.xinxincaravan.caravan.vehicle.constant.VehicleBookRecordStatus;
import com.xinxincaravan.caravan.vehicle.entity.BookRecordAccItem;
import com.xinxincaravan.caravan.vehicle.entity.VehicleBookRecord;
import com.xinxincaravan.caravan.vehicle.mapper.BookRecordAccItemMapper;
import com.xinxincaravan.caravan.vehicle.mapper.VehicleBookRecordMapper;
import com.xinxincaravan.caravan.vehicle.vo.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
......@@ -24,8 +29,8 @@ import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
......@@ -36,6 +41,8 @@ public class VehicleBookRecordBiz extends BaseBiz<VehicleBookRecordMapper, Vehic
public static final String TB_NAME_PREFIX = "vehicle_book_record_his_";
public static final String TB_NAME_REAL = "vehicle_book_record";//实际表名
public static final String TB_ACC_ITEM_NAME_PREFIX = "book_record_acc_item_his_";
public static final String TB_ACC_ITEM_NAME_REAL = "book_record_acc_item";//实际表名
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;
......@@ -43,12 +50,29 @@ public class VehicleBookRecordBiz extends BaseBiz<VehicleBookRecordMapper, Vehic
@Autowired
private RedisTemplate customRedisTemplate;
@Autowired
private BookRecordAccItemMapper bookRecordAccItemMapper;
public VehicleBookRecord getById(Long id){
return mapper.selectByPrimaryKey(id);
public QueryVehicleBookRecordVo getById(Long id,DateTime endDate) throws Exception{
Map<String,Object> recordParams =Maps.newHashMap();
recordParams.put("id",id);
recordParams.put("tbName",TB_NAME_REAL);
DateTime selectedMonthDate = endDate.withMillisOfDay(0).withDayOfMonth(1);
String bookRecordAccItemTbName = TB_ACC_ITEM_NAME_REAL;
if(selectedMonthDate.compareTo(DateTime.now().plusMonths(-1).withDayOfMonth(1).withMillisOfDay(0)) < 0){
recordParams.put("tbName",getTbName(String.valueOf(selectedMonthDate.getYear())));
bookRecordAccItemTbName = getAccItemTbName(String.valueOf(selectedMonthDate.getYear()));
}
VehicleBookRecord vehicleBookRecord = mapper.getById(recordParams);
QueryVehicleBookRecordVo queryVehicleBookRecordVo = new QueryVehicleBookRecordVo();
BeanUtils.copyProperties(queryVehicleBookRecordVo,vehicleBookRecord);
Map<Long,Map<Integer,Integer>> rs = getRelatedAccItemsAndAmount(Lists.newArrayList(queryVehicleBookRecordVo),bookRecordAccItemTbName);
queryVehicleBookRecordVo.setAccItemAndAmount(rs.get(queryVehicleBookRecordVo.getId()));
return queryVehicleBookRecordVo;
}
public RestResponse<Integer> lift(Integer operatorId,String userName,LiftVehicleVo liftVehicleVo) throws Exception{
Map<String, Object> params = PropertyUtils.describe(liftVehicleVo);
params.put("reviewerLift", operatorId);
......@@ -89,8 +113,10 @@ public class VehicleBookRecordBiz extends BaseBiz<VehicleBookRecordMapper, Vehic
}
params.put("tbName",TB_NAME_REAL);
DateTime selectedMonthDate = DateTime.parse(selectedMonth,YEARMONTH_DATE_TIME_FORMATTER);
String bookRecordAccItemTbName = TB_ACC_ITEM_NAME_REAL;
if(selectedMonthDate.compareTo(DateTime.now().plusMonths(-1).withDayOfMonth(1).withMillisOfDay(0)) < 0){
params.put("tbName",getTbName(String.valueOf(selectedMonthDate.getYear())));
bookRecordAccItemTbName = getAccItemTbName(String.valueOf(selectedMonthDate.getYear()));
}
params.put("bookedStartDate",selectedMonthDate.withDayOfMonth(1).toString());
params.put("bookedEndDate",selectedMonthDate.plusMonths(1).withDayOfMonth(1).toDate());
......@@ -100,11 +126,44 @@ public class VehicleBookRecordBiz extends BaseBiz<VehicleBookRecordMapper, Vehic
params.remove("pageNo");
PageHelper.startPage(pageNo,pageSize);
List<QueryVehicleBookRecordVo> bookRecordAndVehicleInfo = mapper.getByPage(params);
Map<Long,Map<Integer,Integer>> rs = getRelatedAccItemsAndAmount(bookRecordAndVehicleInfo,
bookRecordAccItemTbName);
//获取相关随行物品信息
for(QueryVehicleBookRecordVo queryVehicleBookRecordVo:bookRecordAndVehicleInfo){
queryVehicleBookRecordVo.setAccItemAndAmount(rs.get(queryVehicleBookRecordVo.getId()));
}
PageInfo<QueryVehicleBookRecordVo> vehiclePageInfo = new PageInfo<>(bookRecordAndVehicleInfo);
return PageDataVo.pageInfo(vehiclePageInfo);
}
/**
* 获取相关申请记录对应随行物品的数量,并放入map
* @param bookRecordAndVehicleInfos
* @return
*/
public Map<Long,Map<Integer,Integer>> getRelatedAccItemsAndAmount(List<QueryVehicleBookRecordVo> bookRecordAndVehicleInfos,
String tbName){
List<Long> bookRecordIds = Lists.newArrayList();
if(CollectionUtils.isEmpty(bookRecordAndVehicleInfos)){
return null;
}
for(QueryVehicleBookRecordVo queryVehicleBookRecordVo:bookRecordAndVehicleInfos){
bookRecordIds.add(queryVehicleBookRecordVo.getId());
}
List<BookRecordAccItem> bookRecordAccItems = bookRecordAccItemMapper.getByRecords(ImmutableMap.of("bookRecordIds",bookRecordIds,
"tbName",tbName));
Map<Long,Map<Integer,Integer>> rs = Maps.newHashMap();
for(BookRecordAccItem bookRecordAccItem : bookRecordAccItems){
if(!rs.containsKey(bookRecordAccItem.getBookRecordId())){
rs.put(bookRecordAccItem.getBookRecordId(),Maps.newHashMap());
}
rs.get(bookRecordAccItem.getBookRecordId()).
put(bookRecordAccItem.getAccItemId(),bookRecordAccItem.getAmount());
}
return rs;
}
/**
......@@ -112,16 +171,14 @@ public class VehicleBookRecordBiz extends BaseBiz<VehicleBookRecordMapper, Vehic
* 每年一张表
*/
@Scheduled(cron = "0 0 1 1 * ?")//每月1号1点触发
@Transactional
public void transfer2HistoryTb(){
//获取表格名称
String tbName = getTbNameNow();
DateTime now = DateTime.now();//当前获取的时间为标准
log.info("开始预定记录迁移至历史表的定时任务。");
Boolean needRun= copyDataLastMoth(now,tbName);
Boolean needRun= copyDataLastMoth(now);
if(needRun) {
//每月初将上上月数据从当前信息表中删除
delDataTheMonthBeforeLast(now, tbName);
delDataTheMonthBeforeLast(now);
}
}
......@@ -131,10 +188,11 @@ public class VehicleBookRecordBiz extends BaseBiz<VehicleBookRecordMapper, Vehic
* 获取上月数据,并复制到历史表
*/
@Transactional
public Boolean copyDataLastMoth(DateTime now,String tbName){
public Boolean copyDataLastMoth(DateTime now){
String lastMonthStr = now.plusMonths(-1).toString(YEARMONTH_DATE_TIME_FORMATTER);
String redisKey = RedisKey.DEL_BOOK_RECORD_LOCK_PREFIX +lastMonthStr;
String redisKey = RedisKey.TRANSFER_BOOK_RECORD_LOCK_PREFIX +lastMonthStr;
String tbName = getTbName(now.plusMonths(-1).toString("yyyy"));
String accItemTbName = getAccItemTbName(now.plusMonths(-1).toString("yyyy"));
Boolean hasSuc = customRedisTemplate.opsForValue().setIfAbsent(redisKey,String.valueOf(DateTime.now().getMillis()));
if(hasSuc){//设置1天后过期
customRedisTemplate.expire(redisKey,1, TimeUnit.DAYS);
......@@ -143,6 +201,7 @@ public class VehicleBookRecordBiz extends BaseBiz<VehicleBookRecordMapper, Vehic
return Boolean.FALSE;
}
createTbIfNotExists(tbName);
createAccItemTbIfNotExists(accItemTbName);
//逐页查出数据
Integer curPageNo = 1;
List<VehicleBookRecord> vehicleBookRecords = null;
......@@ -153,6 +212,8 @@ public class VehicleBookRecordBiz extends BaseBiz<VehicleBookRecordMapper, Vehic
params.put("pageStart", (curPageNo - 1) * COPY_BATCH_SIZE);
params.put("pageSize", COPY_BATCH_SIZE);
vehicleBookRecords = mapper.getByPage4Month(params);
//复制相关随行物品关系
copyAccItemRel2His(vehicleBookRecords, accItemTbName);
if(CollectionUtils.isNotEmpty(vehicleBookRecords)){
//插入数据到历史表
for(VehicleBookRecord vehicleBookRecord : vehicleBookRecords){
......@@ -175,6 +236,12 @@ public class VehicleBookRecordBiz extends BaseBiz<VehicleBookRecordMapper, Vehic
insertHisParams.put("reviewerCancel", vehicleBookRecord.getReviewerCancel());
insertHisParams.put("actualStartDate", vehicleBookRecord.getActualStartDate());
insertHisParams.put("actualEndDate", vehicleBookRecord.getActualEndDate());
insertHisParams.put("reviewerLift", vehicleBookRecord.getReviewerLift());
insertHisParams.put("reviewerNameLift", vehicleBookRecord.getReviewerNameLift());
insertHisParams.put("liftCompany", vehicleBookRecord.getLiftCompany());
insertHisParams.put("liftRemark", vehicleBookRecord.getLiftRemark());
insertHisParams.put("retCompany", vehicleBookRecord.getRetCompany());
insertHisParams.put("retRemark", vehicleBookRecord.getRetRemark());
mapper.insertHis(insertHisParams);
}
}
......@@ -182,7 +249,7 @@ public class VehicleBookRecordBiz extends BaseBiz<VehicleBookRecordMapper, Vehic
log.info("【复制上月预定记录至历史表中】,当前复制页【"+curPageNo+"】,页大小【"+COPY_BATCH_SIZE+"】");
}while(CollectionUtils.isNotEmpty(vehicleBookRecords));
log.info("复制上月预定记录至历史表中完成,总页数【"+(curPageNo-1)+"】");
; return Boolean.TRUE;
return Boolean.TRUE;
}
......@@ -190,8 +257,7 @@ public class VehicleBookRecordBiz extends BaseBiz<VehicleBookRecordMapper, Vehic
* 删除上上月数据
*/
@Transactional
public void delDataTheMonthBeforeLast(DateTime now,String tbName){
String theMonthBeforeLastStr = now.plusMonths(-2).toString(YEARMONTH_DATE_TIME_FORMATTER);
public void delDataTheMonthBeforeLast(DateTime now){
Integer effected = 0;
Integer total = 0;
Map<String, Object> params = Maps.newHashMap();
......@@ -199,6 +265,9 @@ public class VehicleBookRecordBiz extends BaseBiz<VehicleBookRecordMapper, Vehic
params.put("endDate", now.plusMonths(-1).plusDays(-1).withMillisOfDay(0).toDate());
params.put("batchSize", DEL_BATCH_SIZE);
do {
//删除相关随行物品数据
List<Long> bookRecordIds = mapper.getIdInYearMothLimit(params);
deleteAccItemRelByRecord(bookRecordIds);
effected = mapper.del4YearMoth(params);
total+=effected;
log.info("开始删除预定记录数据,删除总数【"+total+"】");
......@@ -206,6 +275,58 @@ public class VehicleBookRecordBiz extends BaseBiz<VehicleBookRecordMapper, Vehic
log.info("删除预定记录数据完成");
}
/**
* 删除随影订车记录的随行物品记录
* @param bookRecordIds
*/
private void deleteAccItemRelByRecord(List<Long> bookRecordIds){
if(CollectionUtils.isEmpty(bookRecordIds)){
return;
}
Example example = new Example(BookRecordAccItem.class);
Example.Criteria criteria = example.createCriteria();
criteria.andIn("bookRecordId",bookRecordIds);
bookRecordAccItemMapper.deleteByExample(example);
}
/**
* 复制相应预定记录的随行物品信息
* (注意了参数列表中的记录的历史年份必须属于当前月)
* @param vehicleBookRecords
*/
@Transactional
public void copyAccItemRel2His(List<VehicleBookRecord> vehicleBookRecords,String accItemTbName){
if(CollectionUtils.isEmpty(vehicleBookRecords)){
return ;
}
List<Long> recordIds = Lists.newArrayList();
for(VehicleBookRecord vehicleBookRecord : vehicleBookRecords){
recordIds.add(vehicleBookRecord.getId());
}
List<BookRecordAccItem> bookRecordAccItems = bookRecordAccItemMapper.getByRecords(
ImmutableMap.of("bookRecordIds",recordIds,"tbName",TB_ACC_ITEM_NAME_REAL));
if(CollectionUtils.isEmpty(bookRecordAccItems)){
return;
}
List<Map<String,Object>> bookRecordAccItemsTemp = Lists.newArrayList();
for(Integer index = 0;index <bookRecordAccItems.size();index ++){
bookRecordAccItemsTemp.add(ImmutableMap.of(
"id",bookRecordAccItems.get(index).getId(),
"bookRecordId",bookRecordAccItems.get(index).getBookRecordId(),
"accItemId",bookRecordAccItems.get(index).getAccItemId(),
"amount",bookRecordAccItems.get(index).getAmount()
));
if(index == COPY_BATCH_SIZE || index == bookRecordAccItems.size() -1){
bookRecordAccItemMapper.batchAdd2Tb(ImmutableMap.of(
"list",bookRecordAccItemsTemp,
"tbName",accItemTbName
));
bookRecordAccItemsTemp = Lists.newArrayList();
}
}
}
private String getTbNameNow(){
return TB_NAME_PREFIX+ DateTime.now().toString(YEAR_DATE_TIME_FORMATTER);
}
......@@ -219,6 +340,19 @@ public class VehicleBookRecordBiz extends BaseBiz<VehicleBookRecordMapper, Vehic
return TB_NAME_PREFIX+ year;
}
private String getAccItemTbNameNow(){
return TB_ACC_ITEM_NAME_PREFIX+ DateTime.now().toString(YEAR_DATE_TIME_FORMATTER);
}
/**
* 获取历史表名称
* @param year
* @return
*/
private String getAccItemTbName(String year){
return TB_ACC_ITEM_NAME_PREFIX+ year;
}
/**
* 创建当年相关表格
*/
......@@ -226,4 +360,9 @@ public class VehicleBookRecordBiz extends BaseBiz<VehicleBookRecordMapper, Vehic
mapper.createTbIfNotExists(tbName);
}
private void createAccItemTbIfNotExists(String tbName){
bookRecordAccItemMapper.createTbIfNotExists(tbName);
}
}
package com.xinxincaravan.caravan.vehicle.constant;
import com.google.common.collect.Maps;
import java.util.Map;
public enum AccompanyingItemStatus {
NORMAL(1,"正常"),//这一类型不存在db中,只是用于查询所有国家
DELETED(2,"已删除"),
;
/**
* 编码
*/
private Integer code;
/**
* 类型描述
*/
private String desc;
private static Map<Integer,String> codeAndDesc = Maps.newHashMap();
static{
for(AccompanyingItemStatus constantType : AccompanyingItemStatus.values()){
codeAndDesc.put(constantType.getCode(),constantType.getDesc());
}
}
AccompanyingItemStatus(Integer code, String desc){
this.code=code;
this.desc=desc;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public static Boolean exists(Integer code){
return codeAndDesc.containsKey(code);
}
}
package com.xinxincaravan.caravan.vehicle.constant;
import com.google.common.collect.Maps;
import java.util.Map;
public enum AccompanyingItemType {
TOOL(1,"随车工具"),//这一类型不存在db中,只是用于查询所有国家
EQUIPMENT(2,"随车配备"),
EQUIPABLE_ITEM(3,"可配物品"),
;
/**
* 编码
*/
private Integer code;
/**
* 类型描述
*/
private String desc;
private static Map<Integer,String> codeAndDesc = Maps.newHashMap();
static{
for(AccompanyingItemType constantType : AccompanyingItemType.values()){
codeAndDesc.put(constantType.getCode(),constantType.getDesc());
}
}
AccompanyingItemType(Integer code, String desc){
this.code=code;
this.desc=desc;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public static Boolean exists(Integer code){
return codeAndDesc.containsKey(code);
}
}
......@@ -34,7 +34,7 @@ public class RedisKey {
/**
* 迁移预定记录rediseky
*/
public static final String DEL_BOOK_RECORD_LOCK_PREFIX ="lock:del:bookRecord:";
public static final String TRANSFER_BOOK_RECORD_LOCK_PREFIX ="lock:bookRecord:transfer";
/**
......@@ -42,4 +42,8 @@ public class RedisKey {
*/
public static final String BRANCH_COMPANY_CACHE_ALL ="cache:bracnCompany:all";
// 随车物品相关key
public static final String ACCOMPANYING_ITEM_CACHE_ALL ="cache:accompanyItem:all";
}
package com.xinxincaravan.caravan.vehicle.entity;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.Id;
import java.util.Date;
@Data
public class AccompanyingItem {
public static final Integer NO_AMOUNT_LIMIT = -1;
@Id
private Integer id;
/**
* 物品名称
*/
@Column(name = "name")
private String name;
/**
* 物品类型,详见AccompanyingItemType
*/
@Column(name = "type" )
private Integer type;
/**
* 备注
*/
private String remark;
private Date createTime;
private Date updateTime;
}
package com.xinxincaravan.caravan.vehicle.entity;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;
@Data
public class BookRecordAccItem {
/**
* 主键
*/
@Id
private Long id;
/**
* 订车记录
*/
private Long bookRecordId;
/**
* 随行物品id
*/
private Integer accItemId;
/**
* 数量
*/
private Integer amount;
}
\ No newline at end of file
......@@ -12,6 +12,7 @@ public class VehicleBookRecord {
* 主键
*/
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
/**
......
package com.xinxincaravan.caravan.vehicle.mapper;
import com.xinxincaravan.caravan.vehicle.entity.AccompanyingItem;
import com.xinxincaravan.caravan.vehicle.entity.SysRegion;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
import java.util.Map;
public interface AccompanyingItemMapper extends Mapper<AccompanyingItem> {
public List<AccompanyingItem> getAllByPage(Map<String, String> params);
public List<AccompanyingItem> getByIdList(List<Integer> idList);
public Integer updateStatusById(AccompanyingItem accompanyingItem);
}
package com.xinxincaravan.caravan.vehicle.mapper;
import com.xinxincaravan.caravan.vehicle.entity.BookRecordAccItem;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
import java.util.Map;
public interface BookRecordAccItemMapper extends Mapper<BookRecordAccItem> {
public Integer batchAdd(List<Map<String,Object>> list);
public Integer batchAdd2Tb(Map<String,Object> params);
public List<BookRecordAccItem> getByRecords(Map<String,Object> params);
public void createTbIfNotExists(String tbName);
}
\ No newline at end of file
......@@ -17,9 +17,14 @@ public interface VehicleBookRecordMapper extends Mapper<VehicleBookRecord> {
public Integer del4YearMoth(Map<String,Object> params);
public List<Long> getIdInYearMothLimit(Map<String,Object> params);
public void createTbIfNotExists(String tbName);
public List<QueryVehicleBookRecordVo> getByPage(Map<String,Object> params);
public Integer liftOrRet(Map<String,Object> params);
public VehicleBookRecord getById(Map<String,Object> params);
}
\ No newline at end of file
package com.xinxincaravan.caravan.vehicle.rest;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONException;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreClientToken;
import com.xinxincaravan.caravan.vehicle.biz.AccompanyingItemBiz;
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.ResCode.ResCode;
import com.xinxincaravan.caravan.vehicle.entity.AccompanyingItem;
import com.xinxincaravan.caravan.vehicle.vo.AddOrUpdateAccompanyingItem;
import com.xinxincaravan.caravan.vehicle.vo.PageDataVo;
import com.xinxincaravan.caravan.vehicle.vo.QueryAccompanyItemVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/accompanyingItem")
@IgnoreClientToken
@Slf4j
public class AccompanyingItemController extends BaseController<AccompanyingItemBiz> {
@RequestMapping(value ="/{id}",method = RequestMethod.GET)
private RestResponse<AccompanyingItem> get(@PathVariable Integer id) throws Exception{
return RestResponse.codeAndData(RestResponse.SUC_CODE,baseBiz.get(id));
}
@RequestMapping(value ="/all",method = RequestMethod.GET)
private RestResponse<List<AccompanyingItem>> getAll(){
return RestResponse.codeAndData(RestResponse.SUC_CODE,baseBiz.getAll());
}
@RequestMapping(value ="/page",method = RequestMethod.GET)
private RestResponse<PageDataVo<AccompanyingItem>> getByPage(@RequestParam String queryAccompanyItemVoJson) throws Exception{
QueryAccompanyItemVo queryAccompanyItemVo = null;
try {
queryAccompanyItemVo = JSON.parseObject(queryAccompanyItemVoJson,QueryAccompanyItemVo.class);
return RestResponse.data(baseBiz.getByPage(queryAccompanyItemVo));
} catch (JSONException ex) {
return RestResponse.code(ResCode.INVALID_REST_REQ_PARAM.getCode());
} catch (CustomIllegalParamException ex){
return RestResponse.code(ResCode.INVALID_REST_REQ_PARAM.getCode());
}
}
@RequestMapping(value ="",method = RequestMethod.POST)
private RestResponse<Integer> add(@RequestBody AddOrUpdateAccompanyingItem addOrUpdateAccompanyingItem) throws Exception{
return baseBiz.add(addOrUpdateAccompanyingItem);
}
@RequestMapping(value ="",method = RequestMethod.PUT)
private RestResponse<Integer> update(@RequestBody AddOrUpdateAccompanyingItem addOrUpdateAccompanyingItem) throws Exception{
return baseBiz.update(addOrUpdateAccompanyingItem);
}
@RequestMapping(value ="/{id}",method = RequestMethod.DELETE)
private RestResponse<Integer> del(@PathVariable Integer id) throws Exception{
return baseBiz.del(id);
}
}
......@@ -20,6 +20,9 @@ import com.xinxincaravan.caravan.vehicle.entity.VehicleBookInfo;
import com.xinxincaravan.caravan.vehicle.entity.VehicleBookRecord;
import com.xinxincaravan.caravan.vehicle.vo.*;
import lombok.extern.slf4j.Slf4j;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
......@@ -34,6 +37,8 @@ public class VehicleController extends BaseController<VehicleBiz> {
@Autowired
private VehicleBookRecordBiz vehicleBookRecordBiz;
public static final DateTimeFormatter DEFAULT_FORMATTER = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
@RequestMapping(value ="/{id}",method = RequestMethod.GET)
public RestResponse<Vehicle> get(@PathVariable String id) {
return RestResponse.data(baseBiz.get(id));
......@@ -139,11 +144,11 @@ public class VehicleController extends BaseController<VehicleBiz> {
return baseBiz.unbookVehicle4Employee(operatorId,bookRecordId,userName);
}
@RequestMapping(value ="/bookedRecord/{id}",method = RequestMethod.GET)
public RestResponse<VehicleBookRecord> getBookedRecord(@PathVariable Long id) throws Exception{
@RequestMapping(value ="/bookedRecord/{bookEndDate}/{id}",method = RequestMethod.GET)
public RestResponse<QueryVehicleBookRecordVo> getBookedRecord(@PathVariable String bookEndDate,@PathVariable Long id) throws Exception{
try {
return RestResponse.codeAndData(RestResponse.SUC_CODE,vehicleBookRecordBiz.getById(id));
return RestResponse.codeAndData(RestResponse.SUC_CODE,vehicleBookRecordBiz.getById(id, DateTime.parse(bookEndDate,DEFAULT_FORMATTER)));
} catch (JSONException ex) {
return RestResponse.code(ResCode.INVALID_REST_REQ_PARAM.getCode());
} catch (CustomIllegalParamException ex){
......
package com.xinxincaravan.caravan.vehicle.vo;
import lombok.Data;
import java.util.Date;
@Data
public class AddOrUpdateAccompanyingItem {
private Integer id;
/**
* 物品名称
*/
private String name;
/**
* 物品类型,详见AccompanyingItemType
*/
private Integer type;
/**
* 备注
*/
private String remark;
}
......@@ -5,6 +5,7 @@ import lombok.Data;
import javax.persistence.Column;
import javax.persistence.Id;
import java.util.List;
import java.util.Map;
@Data
public class BookVehicleVo {
......@@ -51,4 +52,9 @@ public class BookVehicleVo {
*/
private String remark;
/**
* 随车物品id以及数量 List<Map<id,数量>>
*/
Map<Integer,Integer> selectedAccItem;
}
\ No newline at end of file
package com.xinxincaravan.caravan.vehicle.vo;
import lombok.Data;
/**
* 查询随行物品
*
*/
@Data
public class QueryAccompanyItemVo {
private Integer type;
private String name;
private Integer page;
private Integer limit;
}
......@@ -6,6 +6,8 @@ import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Data
public class QueryVehicleBookRecordVo {
......@@ -181,4 +183,11 @@ public class QueryVehicleBookRecordVo {
*/
private String reviewerNameLift;
/**
* 随车物品id以及数量 List<Map<id,数量>>
*/
Map<Integer,Integer> accItemAndAmount;
}
\ No newline at end of file
<?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.xinxincaravan.caravan.vehicle.mapper.AccompanyingItemMapper">
<select id="getAllByPage" parameterType="java.util.Map" resultType="com.xinxincaravan.caravan.vehicle.entity.AccompanyingItem">
select
`id`, `type`, `name`, `remark`, `create_time`, `update_time`
from
vehicle.accompanying_item
where
1 = 1
<if test="name != null and name != ''">
and name = #{name}
</if>
<if test="type != null">
and type = #{type}
</if>
</select>
<select id="getByIdList" parameterType="java.util.List" resultType="com.xinxincaravan.caravan.vehicle.entity.AccompanyingItem">
select
`id`, `type`, `name`, `remark`, `create_time`, `update_time`
from
vehicle.accompanying_item
where `id` in
<foreach collection="list" index="i" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</select>
</mapper>
\ No newline at end of file
<?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.xinxincaravan.caravan.vehicle.mapper.BookRecordAccItemMapper" >
<insert id="batchAdd" parameterType="java.util.List">
insert into book_record_acc_item(book_record_id,acc_item_id,amount) values
<foreach collection="list" index="i" item="item" separator="," open="" close="">
(#{item.bookRecordId},#{item.id},#{item.amount})
</foreach>
</insert>
<insert id="batchAdd2Tb" parameterType="java.util.Map">
insert into ${tbName}(id,book_record_id,acc_item_id,amount) values
<foreach collection="list" index="i" item="item" separator="," open="" close="">
(#{item.id},#{item.bookRecordId},#{item.accItemId},#{item.amount})
</foreach>
</insert>
<select id="getByRecords" parameterType="java.util.List" resultType="com.xinxincaravan.caravan.vehicle.entity.BookRecordAccItem" >
select id,book_record_id,acc_item_id,amount from ${tbName} where book_record_id in
<foreach collection="bookRecordIds" index="i" item="item" separator="," open="(" close=")">
#{item}
</foreach>
</select>
<insert id="createTbIfNotExists" parameterType="java.lang.String">
CREATE TABLE IF NOT EXISTS ${_parameter} (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`book_record_id` bigint(20) NOT NULL COMMENT '申请记录id',
`acc_item_id` int(11) NOT NULL COMMENT '对应随行物品id',
`amount` int(10) NULL DEFAULT NULL COMMENT '数量',
PRIMARY KEY (`id`) USING BTREE,
INDEX `i_book_record_id`(`book_record_id`) USING BTREE,
INDEX `i_acc_item_id`(`acc_item_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 14 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '汽车随行物品预定记录关系历史表,按年分表' ROW_FORMAT = Dynamic;
</insert>
</mapper>
\ No newline at end of file
<?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.xinxincaravan.caravan.vehicle.mapper.VehicleBookRecordMapper" >
<resultMap id="BaseResultMap" type="com.xinxincaravan.caravan.vehicle.entity.VehicleBookRecord" >
<!--
WARNING - @mbg.generated
-->
<id column="id" property="id" jdbcType="BIGINT" />
<result column="vehicle" property="vehicle" jdbcType="VARCHAR" />
<result column="statu" property="statu" jdbcType="INTEGER" />
<result column="book_type" property="bookType" jdbcType="INTEGER" />
<result column="book_user" property="bookUser" jdbcType="INTEGER" />
<result column="contact_info" property="contactInfo" jdbcType="VARCHAR" />
<result column="book_start_date" property="bookStartDate" jdbcType="TIMESTAMP" />
<result column="
lift_location" property="
liftLocation" jdbcType="VARCHAR" />
<result column="lift_addr" property="liftAddr" jdbcType="VARCHAR" />
<result column="remark" property="remark" jdbcType="VARCHAR" />
<result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
<result column="update_time" property="updateTime" jdbcType="TIMESTAMP" />
<result column="destination" property="destination" jdbcType="VARCHAR" />
<result column="book_end_date" property="bookEndDate" jdbcType="TIMESTAMP" />
<result column="actal_start_date" property="actalStartDate" jdbcType="TIMESTAMP" />
<result column="actual_end_date" property="actualEndDate" jdbcType="TIMESTAMP" />
</resultMap>
<update id="changeRecordStatus" parameterType="java.util.Map">
update vehicle_book_record set
......@@ -53,6 +30,10 @@ liftLocation" jdbcType="VARCHAR" />
delete from vehicle_book_record where `book_end_date` between #{startDate} and #{endDate} limit #{batchSize}
</delete>
<select id="getIdInYearMothLimit" parameterType="java.util.Map" resultType="java.lang.Long">
select id from vehicle_book_record where `book_end_date` between #{startDate} and #{endDate} limit #{batchSize}
</select>
<update id="liftOrRet" parameterType="java.util.Map">
update vehicle_book_record
set `status` = #{targetStatus},
......@@ -76,7 +57,12 @@ liftLocation" jdbcType="VARCHAR" />
<if test="liftCompany != null">
`lift_company` = #{liftCompany},
</if>
`actual_start_date` = now()
<choose>
<when test="targetStatus == 7"> `actual_start_date` = now() </when>
<when test="targetStatus == 3"> `actual_end_date` = now() </when>
</choose>
where id = #{id} and `status` = #{conditionStatus}
</update>
......@@ -102,7 +88,13 @@ liftLocation" jdbcType="VARCHAR" />
`reviewer_cancel`,
`reviewer_name_cancel`,
`actual_start_date`,
`actual_end_date`
`actual_end_date`,
`reviewer_lift`,
`reviewer_name_lift`,
lift_company,
lift_remark,
ret_company,
ret_remark
)
values(
#{id},
......@@ -125,7 +117,13 @@ liftLocation" jdbcType="VARCHAR" />
#{reviewerCancel},
#{reviewerNameCancel},
#{actualStartDate},
#{actualEndDate}
#{actualEndDate},
#{reviewerLift},
#{reviewerNameLift},
#{liftCompany},
#{liftRemark},
#{retCompany},
#{retRemark}
);
</insert>
......@@ -153,7 +151,13 @@ liftLocation" jdbcType="VARCHAR" />
`reviewer_cancel`,
`reviewer_name_cancel`,
`actual_start_date`,
`actual_end_date`
`actual_end_date`,
`reviewer_lift`,
`reviewer_name_lift`,
lift_company,
lift_remark,
ret_company,
ret_remark
from
vehicle_book_record
where
......@@ -236,11 +240,47 @@ liftLocation" jdbcType="VARCHAR" />
order by vbr.id desc
</select>
<select id="getById" parameterType="java.util.Map" resultType="com.xinxincaravan.caravan.vehicle.entity.VehicleBookRecord" >
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`,
vbr.`reviewer_lift`,
vbr.`reviewer_name_lift`,
vbr.lift_company,
vbr.lift_remark,
vbr.ret_company,
vbr.ret_remark
from ${tbName} vbr
where id = #{id}
</select>
<insert id="createTbIfNotExists" parameterType="java.lang.String">
CREATE TABLE IF NOT EXISTS ${_parameter} (
`id` bigint(20) NOT NULL COMMENT '主键',
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
`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-维修',
......@@ -250,7 +290,7 @@ liftLocation" jdbcType="VARCHAR" />
`book_start_date` datetime(0) NOT NULL COMMENT '申请开始日期',
`book_end_date` datetime(0) NOT NULL COMMENT '申请结束日期',
`lift_location` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '提车地点(经纬度)',
`lift_addr` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '提车地址',
`lift_addr` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '提车地址',
`remark` varchar(2000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0),
`update_time` datetime(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0),
......@@ -261,8 +301,14 @@ liftLocation" jdbcType="VARCHAR" />
`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 '实际结束日期',
`actual_start_date` datetime(0) NULL DEFAULT NULL COMMENT '实际开始日期(提车时间)',
`actual_end_date` datetime(0) NULL DEFAULT NULL COMMENT '实际结束日期(还车时间)',
`lift_company` int(10) NULL DEFAULT NULL COMMENT '提车地点(公司)',
`lift_remark` varchar(2000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '提车备注',
`ret_company` int(10) NULL DEFAULT NULL COMMENT '还车地点(公司)',
`ret_remark` varchar(2000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '还车备注',
`reviewer_lift` int(10) NULL DEFAULT NULL COMMENT '提车审核人',
`reviewer_name_lift` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '提车审核人姓名',
PRIMARY KEY (`id`) USING BTREE,
INDEX `i_vehicle`(`vehicle`) USING BTREE,
INDEX `i_book_user`(`book_user`) USING BTREE,
......
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