Commit f6f93ed0 authored by jiaorz's avatar jiaorz

Merge remote-tracking branch 'remotes/origin/dev' into base-modify

# Conflicts:
#	xx-vehicle/xx-vehicle-server/src/main/java/com/xxfc/platform/vehicle/biz/VehicleActiveService.java
parents 89266e66 d74c428f
......@@ -209,7 +209,7 @@
<artifactId>spring-boot</artifactId>
<version>2.1.3.RELEASE</version>
</dependency>
<dependency>
<!-- <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-openfeign-core</artifactId>
<version>2.1.0.RELEASE</version>
......@@ -226,12 +226,12 @@
<artifactId>feign-core</artifactId>
<version>10.1.0</version>
<scope>compile</scope>
</dependency>
<!-- <dependency>
</dependency>-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<scope>compile</scope>
</dependency>-->
</dependency>
</dependencies>
......
......@@ -40,8 +40,8 @@ public class RandomUtil
* @param n
* @param set
*/
public static void randomSet(int max, int n, Set<Integer> set) {
if (n > (max + 1) || max < 0) {
public static void randomSet(int max, int n, Set<Integer> set, int total) {
if (n > (max) || max < 0) {
return;
}
for (int i = 0; i < n; i++) {
......@@ -50,8 +50,8 @@ public class RandomUtil
}
int setSize = set.size();
// 如果存入的数小于指定生成的个数,则调用递归再生成剩余个数的随机数,如此循环,直到达到指定大小
if (setSize < n) {
randomSet( max, n-setSize, set);// 递归
if (setSize < total) {
randomSet(max, total - setSize, set, total);// 递归
}
}
......@@ -63,9 +63,9 @@ public class RandomUtil
public static void main(String[] args) {
int max = 20;
int n = 5;
int n = 20;
Set<Integer> set = new HashSet<>();
randomSet(max, n, set);
randomSet(max, n, set, n);
for(Integer a : set) {
System.out.println(a);
}
......
......@@ -347,7 +347,7 @@ public class CampsiteShopBiz extends BaseBiz<CampsiteShopMapper, CampsiteShop> {
return ObjectRestResponse.succ(list);
}
Set<Integer> set = new HashSet<>();
RandomUtil.randomSet(list.size(), number, set);
RandomUtil.randomSet(list.size(), number, set, number);
for(Integer i : set) {
resultList.add(list.get(i));
}
......
......@@ -338,7 +338,7 @@ public class TourGoodBiz extends BaseBiz<TourGoodMapper, TourGood> {
return ObjectRestResponse.succ(list);
}
Set<Integer> set = new HashSet<>();
RandomUtil.randomSet(list.size(), number, set);
RandomUtil.randomSet(list.size(), number, set, number);
for(Integer i : set) {
resultList.add(list.get(i));
}
......
package com.xxfc.platform.uccn.comstnt;
/**
* 访问路径
* @author Administrator
*/
public enum UrlType {
OFFICIAL_WEBSITE("官网访问",1),BACKGROUND_MANAGEMENT("后台访问",2);
private String name;
private Integer code;
UrlType(String name, Integer code) {
this.name = name;
this.code = code;
}
public String getName() {
return name;
}
public Integer getCode() {
return code;
}
}
......@@ -10,6 +10,7 @@ import tk.mybatis.mapper.annotation.KeySql;
import tk.mybatis.mapper.code.IdentityDialect;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;
......@@ -26,6 +27,7 @@ public class Article {
@Id
@KeySql(dialect = IdentityDialect.MYSQL)
// @GeneratedValue(generator = "JDBC")
private Integer id;
/**
* 标题
......
package com.xxfc.platform.uccn.vo;
import lombok.Data;
/**
* 新闻文章查询条件
* @author Administrator
*/
@Data
public class ArticleQuery {
private Integer page;
private Integer limit;
// private String newsContent;
}
......@@ -3,8 +3,10 @@ package com.xxfc.platform.uccn.biz;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.xxfc.platform.uccn.comstnt.UrlType;
import com.xxfc.platform.uccn.entity.Article;
import com.xxfc.platform.uccn.mapper.ArticleMapper;
import com.xxfc.platform.uccn.vo.ArticleQuery;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
......@@ -21,16 +23,17 @@ public class ArticleBiz extends BaseBiz<ArticleMapper, Article> {
/**
* 随机文章条数
*/
private final Integer RANDOM_NUMBER=3;
private final Integer RANDOM_NUMBER = 3;
/**
* 首页文章条数
*/
private final Integer HOME_PAGE_NUMBER=4;
private final Integer HOME_PAGE_NUMBER = 4;
/**
* 文章列表
*
* @param page
* @param limit
* @param type
......@@ -43,24 +46,28 @@ public class ArticleBiz extends BaseBiz<ArticleMapper, Article> {
}
/**
* 获取一条数据
* 获取一条数据
*
* @param id
* @param urlType
* @return
*/
public Article getOne(Integer id) {
Example example = Example.builder(Article.class).where(
WeekendSqls.<Article>custom()
.andEqualTo(Article::getId,id)
.andEqualTo(Article::getIsDel, 0)
.andEqualTo(Article::getStatus, 1)
).build();
Article article = mapper.selectOneByExample(example);
return article;
public Article getOne(Integer id, Integer urlType) {
Example example = new Example(Article.class);
Example.Criteria criteria = example.createCriteria();
criteria.andEqualTo("id", id);
criteria.andEqualTo("isDel", 0);
if (UrlType.OFFICIAL_WEBSITE.getCode().equals(urlType)) {
criteria.andEqualTo("status", 1);
}
return mapper.selectOneByExample(example);
}
/**
* 随机获取三条连续的文章
*
* @param type
* @return
*/
......@@ -69,14 +76,14 @@ public class ArticleBiz extends BaseBiz<ArticleMapper, Article> {
List<Article> articleList = mapper.getArticleList(type);
if (!Objects.isNull(articleList)) {
int size = articleList.size();
if (RANDOM_NUMBER>=size) {
if (RANDOM_NUMBER >= size) {
return articleList;
}else {
} else {
Random random = new Random();
int r = random.nextInt(size -RANDOM_NUMBER+1);
int r = random.nextInt(size - RANDOM_NUMBER + 1);
List<Article> result = new ArrayList<>();
for (int i=0;i<RANDOM_NUMBER.intValue();i++){
int index= i+r;
for (int i = 0; i < RANDOM_NUMBER.intValue(); i++) {
int index = i + r;
result.add(articleList.get(index));
}
return result;
......@@ -88,17 +95,18 @@ public class ArticleBiz extends BaseBiz<ArticleMapper, Article> {
/**
* 首页文章列表
*
* @param type
* @return
*/
public List getHomePageArticle(Integer type){
public List getHomePageArticle(Integer type) {
List<Article> articleList = mapper.getArticleList(type);
if (Objects.isNull(articleList)) {
return new ArrayList();
}else {
if (articleList.size()>HOME_PAGE_NUMBER) {
return articleList.subList(0,HOME_PAGE_NUMBER);
}else {
} else {
if (articleList.size() > HOME_PAGE_NUMBER) {
return articleList.subList(0, HOME_PAGE_NUMBER);
} else {
return articleList;
}
}
......@@ -106,19 +114,64 @@ public class ArticleBiz extends BaseBiz<ArticleMapper, Article> {
@Transactional(rollbackFor = Exception.class)
public void add(Article article) {
if (article==null) {
if (article == null) {
return;
}
article.setIsDel(0);
if (article.getStatus()==null){
if (article.getStatus() == null) {
article.setStatus(0);
}
if (article.getType()==null){
if (article.getType() == null) {
article.setType(0);
}
article.setCreTime(new Date());
mapper.insertSelective(article);
}
public PageInfo findAll(ArticleQuery query) {
PageHelper.startPage(query.getPage(),query.getLimit());
Example exa = Example.builder(Article.class).where(
WeekendSqls.<Article>custom()
.andEqualTo(Article::getIsDel,0)
).orderByAsc("weight").orderByDesc("addTime").build();
List<Article> articles = mapper.selectByExample(exa);
return PageInfo.of(articles);
}
@Override
@Transactional(rollbackFor = Exception.class)
public int updateSelectiveByIdRe(Article article){
article.setUpdTime(new Date());
return mapper.updateByPrimaryKeySelective(article);
}
public int putaway(Integer id) {
Article article = new Article();
article.setId(id);
article.setUpdTime(new Date());
article.setAddTime(new Date());
article.setStatus(1);
return mapper.updateByPrimaryKeySelective(article);
}
public int soldOut(Integer id) {
Article article = new Article();
article.setId(id);
article.setUpdTime(new Date());
article.setStatus(0);
return mapper.updateByPrimaryKeySelective(article);
}
public int remove(Integer id) {
Article article = new Article();
article.setId(id);
article.setUpdTime(new Date());
article.setIsDel(1);
return mapper.updateByPrimaryKeySelective(article);
}
}
......@@ -194,7 +194,7 @@ public class SummitActivityBiz extends BaseBiz<SummitActivityMapper, SummitActiv
}
} else {
Set<Integer> resultSet = new HashSet<>();
RandomUtil.randomSet(summitActivities.size(), num, resultSet);
RandomUtil.randomSet(summitActivities.size(), num, resultSet, num);
for (Integer i : resultSet) {
summitActivityVo = new SummitActivityVo();
SummitActivity summitActivity = summitActivities.get(i);
......
......@@ -4,12 +4,11 @@ import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.rest.BaseController;
import com.xxfc.platform.uccn.biz.ArticleBiz;
import com.xxfc.platform.uccn.entity.Article;
import com.xxfc.platform.uccn.vo.ArticleQuery;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
/**
* 文章
......@@ -21,29 +20,30 @@ import java.util.Map;
@Api(tags = {"文章"})
public class ArticleController extends BaseController<ArticleBiz, Article> {
@GetMapping("/list")
@GetMapping("/app/unauth/list")
@ApiOperation(value = "获取文章列表")
public ObjectRestResponse getArticleList(
@RequestParam(name = "page", defaultValue = "1") Integer page,
@RequestParam(name = "limit", defaultValue = "10") Integer limit,
@RequestParam(name = "type", defaultValue = "0") Integer type) {
@RequestParam(name = "type", defaultValue = "1") Integer type) {
return ObjectRestResponse.succ(baseBiz.getArticleList(page, limit, type));
}
@GetMapping("/one/{id}")
@GetMapping("/app/unauth/one")
@ApiOperation(value = "获取一条数据")
public ObjectRestResponse getOne(@PathVariable Integer id) {
return ObjectRestResponse.succ(baseBiz.getOne(id));
public ObjectRestResponse getOne(@RequestParam Integer id,
@RequestParam(required = false) Integer urlType) {
return ObjectRestResponse.succ(baseBiz.getOne(id,urlType));
}
@GetMapping("/three/{type}")
@GetMapping("/app/unauth/three/{type}")
@ApiOperation(value = "随机获取三条数据")
public ObjectRestResponse randomAccessToThreeData(@PathVariable Integer type){
return ObjectRestResponse.succ(baseBiz.getThree(type));
}
@GetMapping("/homePage/{type}")
@GetMapping("/app/unauth/homePage/{type}")
@ApiOperation(value = "获取首页文章列表")
public ObjectRestResponse getHomePageArticle(@PathVariable Integer type){
return ObjectRestResponse.succ(baseBiz.getHomePageArticle(type));
......@@ -51,11 +51,58 @@ public class ArticleController extends BaseController<ArticleBiz, Article> {
@Override
@PostMapping("/add")
@ApiOperation(value = "获取首页文章列表")
@ApiOperation(value = "添加")
public ObjectRestResponse add(@RequestBody Article article){
baseBiz.add(article);
return ObjectRestResponse.succ();
}
@PostMapping("/all")
@ApiOperation(value = "获取新闻列表")
public ObjectRestResponse<Article> findAll(@RequestBody ArticleQuery query){
return ObjectRestResponse.succ(baseBiz.findAll(query));
}
@Override
@PutMapping("/update")
@ApiOperation(value = "修改")
public ObjectRestResponse update(@RequestBody Article article){
int flag = baseBiz.updateSelectiveByIdRe(article);
if (flag==1) {
return ObjectRestResponse.succ();
}
return ObjectRestResponse.createDefaultFail();
}
@PutMapping("/putaway/{id}")
@ApiOperation(value = "上架")
public ObjectRestResponse putaway(@PathVariable Integer id){
int flag = baseBiz.putaway(id);
if (flag==1) {
return ObjectRestResponse.succ();
}
return ObjectRestResponse.createDefaultFail();
}
@PutMapping("/soldOut/{id}")
@ApiOperation(value = "下架")
public ObjectRestResponse soldOut(@PathVariable Integer id){
int flag = baseBiz.soldOut(id);
if (flag==1) {
return ObjectRestResponse.succ();
}
return ObjectRestResponse.createDefaultFail();
}
@PutMapping("/remove/{id}")
@ApiOperation(value = "删除")
public ObjectRestResponse remove(@PathVariable Integer id){
int flag = baseBiz.remove(id);
if (flag==1) {
return ObjectRestResponse.succ();
}
return ObjectRestResponse.createDefaultFail();
}
}
......@@ -11,7 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/tour")
@RequestMapping("app/unauth/tour")
@Slf4j
@IgnoreClientToken
public class GwTourController extends CommonBaseController {
......
......@@ -5,6 +5,7 @@ import com.github.wxiaoqi.security.auth.client.annotation.IgnoreClientToken;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreUserToken;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.rest.CommonBaseController;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.xxfc.platform.vehicle.entity.VehicleModel;
import com.xxfc.platform.vehicle.feign.VehicleFeign;
import com.xxfc.platform.vehicle.pojo.VModelDetailVO;
......@@ -52,9 +53,10 @@ public class VehicleModelController extends CommonBaseController {
* @return
*/
@ApiOperation("车型列表")
@PostMapping(value = "/findVehicleModelPage")
@GetMapping(value = "/findVehicleModelPage")
@IgnoreUserToken
public ObjectRestResponse<VehicleModelVo> findVehicleModelPageUnauthfind(@RequestBody VehicleModelQueryCondition vmqc) {
return vehicleFeign.findVehicleModelPageUnauthfind(vmqc);
public ObjectRestResponse<PageDataVO<VehicleModelVo>> findVehicleModelPageUnauthfind(VehicleModelQueryCondition vmqc) {
ObjectRestResponse<PageDataVO<VehicleModelVo>> objectRestResponse = vehicleFeign.findVehicleModelPageUnauthfind(vmqc);
return objectRestResponse;
}
}
......@@ -5,7 +5,7 @@
<select id="getArticleList" resultType="com.xxfc.platform.uccn.entity.Article">
select title,epitome,add_time,cover_image from article
where is_del=0 and status=1 and (type=#{type} or type=0) order by weight DESC,add_time DESC
where is_del=0 and status=1 and (type=#{type} or type=0) order by weight ASC ,add_time DESC
</select>
</mapper>
\ No newline at end of file
......@@ -2,6 +2,7 @@ package com.xxfc.platform.vehicle.feign;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.vo.GoodDataVO;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.xxfc.platform.vehicle.common.RestResponse;
import com.xxfc.platform.vehicle.entity.*;
import com.xxfc.platform.vehicle.pojo.*;
......@@ -133,5 +134,5 @@ public interface VehicleFeign {
ObjectRestResponse<VModelDetailVO> detailByParam(@RequestParam("vehicleModel") Map<String, Object> vehicleModel);
@PostMapping("/vehicleModel/app/unauth/findVehicleModelPage")
public ObjectRestResponse<VehicleModelVo> findVehicleModelPageUnauthfind(@RequestBody VehicleModelQueryCondition vmqc);
public ObjectRestResponse<PageDataVO<VehicleModelVo>> findVehicleModelPageUnauthfind(@RequestBody VehicleModelQueryCondition vmqc);
}
......@@ -85,7 +85,6 @@ public class BranchCompanyBiz extends BaseBiz<BranchCompanyMapper, BranchCompany
private VehicleBiz vehicleBiz;
/**
* 按主键获取公司
*
......@@ -120,7 +119,7 @@ public class BranchCompanyBiz extends BaseBiz<BranchCompanyMapper, BranchCompany
* @param id
* @return
*/
@Cache(key = RedisKey.BRANCH_COMPANY_CACHE+ "{1}")
@Cache(key = RedisKey.BRANCH_COMPANY_CACHE + "{1}")
public CompanyDetail getDetailById(Integer id) {
BranchCompany branchCompany = this.getById(id);
CompanyDetail detail = null;
......@@ -161,35 +160,35 @@ public class BranchCompanyBiz extends BaseBiz<BranchCompanyMapper, BranchCompany
}
public PageDataVO<BranchCompany> getAll(Integer page, Integer limit, Integer addrProvince, Integer addrCity,
Integer addrTown,Integer zoneId, UserDTO userDTO) {
Integer addrTown, Integer zoneId, UserDTO userDTO) {
Example example = new Example(BranchCompany.class);
Example.Criteria criteria = example.createCriteria();
String provinceIds="";
if (Objects.nonNull(zoneId)){
String provinceIds = "";
if (Objects.nonNull(zoneId)) {
Area area = areaBiz.selectById(zoneId);
provinceIds = area.getProvinceIds();
provinceIds = area.getProvinceIds();
}
if (StringUtils.isNotEmpty(provinceIds)){
if (StringUtils.isNotEmpty(provinceIds)) {
List<String> provinceIdList = Arrays.asList(provinceIds.split(","));
if (Objects.nonNull(addrProvince)){
if (provinceIdList.contains(String.valueOf(addrProvince))){
criteria.andEqualTo("addrProvince",addrProvince);
}else {
return new PageDataVO<BranchCompany>();
if (Objects.nonNull(addrProvince)) {
if (provinceIdList.contains(String.valueOf(addrProvince))) {
criteria.andEqualTo("addrProvince", addrProvince);
} else {
return new PageDataVO<BranchCompany>();
}
}else {
criteria.andIn("addrProvince",provinceIdList);
} else {
criteria.andIn("addrProvince", provinceIdList);
}
}else {
} else {
if (addrProvince != null) {
criteria.andEqualTo("addrProvince",addrProvince);
criteria.andEqualTo("addrProvince", addrProvince);
}
}
if (addrCity != null) {
criteria.andEqualTo("addrCity",addrCity);
criteria.andEqualTo("addrCity", addrCity);
}
if (addrTown != null) {
criteria.andEqualTo("addrTown",addrTown);
criteria.andEqualTo("addrTown", addrTown);
}
if (userDTO != null && DATA_ALL_FALSE.equals(userDTO.getDataAll())) {
if (StringUtils.isNotBlank(userDTO.getDataZone())) {
......@@ -361,15 +360,15 @@ public class BranchCompanyBiz extends BaseBiz<BranchCompanyMapper, BranchCompany
}
public Map<Integer, BranComanyLeaderVo> findCompanyLeaderMapByIds(List<Integer> companyIds) {
Map<Integer,BranComanyLeaderVo> companyIdAndLeaderMap = new HashMap<>(companyIds.size());
Map<Integer, BranComanyLeaderVo> companyIdAndLeaderMap = new HashMap<>(companyIds.size());
List<BranchCompany> branchCompanies = mapper.selectByIdList(companyIds);
if (CollectionUtils.isEmpty(branchCompanies)){
if (CollectionUtils.isEmpty(branchCompanies)) {
return companyIdAndLeaderMap;
}
return branchCompanies.stream().collect(Collectors.toMap(BranchCompany::getId,branchCompany -> {
return branchCompanies.stream().collect(Collectors.toMap(BranchCompany::getId, branchCompany -> {
BranComanyLeaderVo branComanyLeaderVo = new BranComanyLeaderVo();
BeanUtils.copyProperties(branchCompany,branComanyLeaderVo);
return branComanyLeaderVo;
BeanUtils.copyProperties(branchCompany, branComanyLeaderVo);
return branComanyLeaderVo;
}));
}
......@@ -377,14 +376,14 @@ public class BranchCompanyBiz extends BaseBiz<BranchCompanyMapper, BranchCompany
PageDataVO<BranchCompanyListVO> pageDataVO = new PageDataVO<>();
PageDataVO<BranchCompanyListDTO> dataVO = PageDataVO.pageInfo(branchCompanyFindDTO.getPage(), branchCompanyFindDTO.getLimit(), () -> mapper.findBranchCompanys(branchCompanyFindDTO.getAddrProvince(), branchCompanyFindDTO.getAddrCity()));
List<BranchCompanyListDTO> data = dataVO.getData();
if (CollectionUtils.isEmpty(data)){
if (CollectionUtils.isEmpty(data)) {
return pageDataVO;
}
List<BranchCompanyListVO> branchCompanyListVOS = new ArrayList<>();
BranchCompanyListVO branchCompanyListVO;
for (BranchCompanyListDTO companyListDTO : data) {
branchCompanyListVO = new BranchCompanyListVO();
BeanUtils.copyProperties(companyListDTO,branchCompanyListVO);
branchCompanyListVO = new BranchCompanyListVO();
BeanUtils.copyProperties(companyListDTO, branchCompanyListVO);
branchCompanyListVOS.add(branchCompanyListVO);
}
pageDataVO.setData(branchCompanyListVOS);
......
......@@ -65,7 +65,7 @@ public class VehicleActiveService {
throw new BaseException(ResCode.VEHICLE_DEPARTURE_VEHICLE_UNEXIST.getDesc(),
ResCode.VEHICLE_DEPARTURE_VEHICLE_UNEXIST.getCode());
}
if(StringUtils.isBlank(departureVo.getCheckMan()) || StringUtils.isBlank(departureVo.getCheckManTel())) {
if (StringUtils.isBlank(departureVo.getCheckMan()) || StringUtils.isBlank(departureVo.getCheckManTel())) {
throw new BaseException(ResCode.CHECKUSER_AND_PHONE_NOT_NULL.getDesc(),
ResCode.CHECKUSER_AND_PHONE_NOT_NULL.getCode());
}
......@@ -75,13 +75,13 @@ public class VehicleActiveService {
}
//添加出车时间过滤 再出车开始时间前一天至结束时间内可以出车,并且预定记录为已审核状态
checkDateInvalide(departureVo);
Integer MileageLift=vehicle.getMileageLastUpdate();
Integer MileageLift1=departureVo.getMileage();
if(MileageLift1==null){
Integer MileageLift = vehicle.getMileageLastUpdate();
Integer MileageLift1 = departureVo.getMileage();
if (MileageLift1 == null) {
throw new BaseException(ResCode.VEHICLE_BOOKED_RECORD_MILEAGE_CHANGED.getDesc(),
ResCode.VEHICLE_BOOKED_RECORD_MILEAGE_CHANGED.getCode());
}
if(MileageLift == null || MileageLift1 >= MileageLift){
if (MileageLift == null || MileageLift1 >= MileageLift) {
// 写入车辆公里数,预计目的地
vehicle.setMileageLastUpdate(MileageLift1);
vehicle.setExpectDestinationBranchCompanyId(departureVo.getExpectArrivalBranchCompanyId());
......@@ -97,19 +97,19 @@ public class VehicleActiveService {
}
//修改预约记录状态
VehicleBookRecord vehicleBookRecord = null;
if(departureVo.getBookRecordId() != null) {
if (departureVo.getBookRecordId() != null) {
vehicleBookRecord = vehicleBookRecordBiz.selectById(departureVo.getBookRecordId());
updateBookRecordStatus(vehicleBookRecord, 1);
}
VehicleDepartureLogVo vehicleDepartureLogVo = vehicleDepartureLogMapper.selectByBookRecordId(departureVo.getBookRecordId());
if(vehicleDepartureLogVo != null) {
if (vehicleDepartureLogVo != null) {
BeanUtil.copyProperties(departureVo, vehicleDepartureLogVo, CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));
VehicleDepartureLog departureLog = vehicleDepartureLogVo.getVehicleDeparture(vehicleDepartureLogVo);
departureLog.setDepartureTime(new Date());
departureLog.setUpdateTime(new Date());
departureLog.setState(VehicleDepartureState.DEPARTURE.getCode());
departureLog.setDepartureRemark(departureVo.getRemark());
if(vehicleBookRecord != null) {
if (vehicleBookRecord != null) {
departureLog.setDepartureBranchCompanyId(vehicleBookRecord.getLiftCompany());
departureLog.setUse(BookType.getByCode(vehicleBookRecord.getBookType()));
departureLog.setUser(vehicleBookRecord.getVehicleUsername());
......@@ -126,7 +126,7 @@ public class VehicleActiveService {
departureLog.setState(VehicleDepartureState.DEPARTURE.getCode());
departureLog.setBookRecordId(departureVo.getBookRecordId());
departureLog.setDepartureRemark(departureVo.getRemark());
if(vehicleBookRecord != null) {
if (vehicleBookRecord != null) {
departureLog.setDepartureBranchCompanyId(vehicleBookRecord.getLiftCompany());
departureLog.setUse(BookType.getByCode(vehicleBookRecord.getBookType()));
departureLog.setUser(vehicleBookRecord.getVehicleUsername());
......@@ -143,7 +143,7 @@ public class VehicleActiveService {
activeLog.setStartTime(new Date());
activeLog.setCreateTime(new Date());
vehicleActiveLogMapper.insert(activeLog);
}else {
} else {
throw new BaseException(ResCode.VEHICLE_BOOKED_RECORD_MILEAGE_CHANGED.getDesc(),
ResCode.VEHICLE_BOOKED_RECORD_MILEAGE_CHANGED.getCode());
}
......@@ -170,21 +170,20 @@ public class VehicleActiveService {
break;
}
List<VehicleBookRecordVo> vehicleBookRecordVos = vehicleBookRecordBiz.selectByVehicleId(vehicleId);
if(vehicleBookRecordVos != null && vehicleBookRecordVos.size() > 0) {
if (vehicleBookRecordVos != null && vehicleBookRecordVos.size() > 0) {
Iterator<VehicleBookRecordVo> iterator = vehicleBookRecordVos.iterator();
while (iterator.hasNext()) {
VehicleBookRecordVo vehicleBookRecordVo = iterator.next();
if (vehicleBookRecordVo.getVehicleDepartureLogVo() != null && vehicleBookRecordVo.getVehicleDepartureLogVo().getState() != 1 ) { //已经出车
if (vehicleBookRecordVo.getVehicleDepartureLogVo() != null && vehicleBookRecordVo.getVehicleDepartureLogVo().getState() != 1) { //已经出车
stringBuilder.append("中,使用人:");
stringBuilder.append(vehicleBookRecordVos.get(0).getVehicleUsername());
stringBuilder.append(vehicleBookRecordVo.getVehicleUsername());
stringBuilder.append(" 使用人电话:");
stringBuilder.append(vehicleBookRecordVos.get(0).getVehicleUserPhone());
stringBuilder.append(vehicleBookRecordVo.getVehicleUserPhone());
return stringBuilder.toString();
}
}
} else {
stringBuilder.append(", 请联系管理员修改车辆状态为正常状态");
}
stringBuilder.append(", 请联系管理员修改车辆状态为正常状态");
return stringBuilder.toString();
}
......@@ -195,7 +194,7 @@ public class VehicleActiveService {
throw new BaseException(ResCode.VEHICLE_DEPARTURE_VEHICLE_UNEXIST.getDesc(),
ResCode.VEHICLE_DEPARTURE_VEHICLE_UNEXIST.getCode());
}
if(StringUtils.isBlank(arrivalVo.getRecycleMan()) || StringUtils.isBlank(arrivalVo.getRecycleManTel())) {
if (StringUtils.isBlank(arrivalVo.getRecycleMan()) || StringUtils.isBlank(arrivalVo.getRecycleManTel())) {
throw new BaseException(ResCode.CHECKUSER_AND_PHONE_NOT_NULL.getDesc(),
ResCode.CHECKUSER_AND_PHONE_NOT_NULL.getCode());
}
......@@ -211,14 +210,14 @@ public class VehicleActiveService {
}
if (Mileagerest != null && Mileagerest1 >= Mileagerest) {
VehicleBookRecord vehicleBookRecord = null;
if(arrivalVo.getBookRecordId() != null) {
if (arrivalVo.getBookRecordId() != null) {
vehicleBookRecord = vehicleBookRecordBiz.selectById(arrivalVo.getBookRecordId());
updateBookRecordStatus(vehicleBookRecord, 2);
}
// 写入车辆公里数,还车分公司id
vehicle.setMileageLastUpdate(Mileagerest1);
if(vehicleBookRecord != null) {
if (vehicleBookRecord != null) {
vehicle.setParkBranchCompanyId(vehicleBookRecord.getRetCompany());
}
vehicle.setExpectDestinationBranchCompanyId(0);
......@@ -242,7 +241,7 @@ public class VehicleActiveService {
DateTime arrivalDate = new DateTime(vehicleBookRecord.getBookEndDate());
DateTime actualArrivalDate = new DateTime(new Date());
//提前还车处理
if(actualArrivalDate.compareTo(arrivalDate) < 0) { //实际还车时间小于预计还车时间,需要释放后面的时间
if (actualArrivalDate.compareTo(arrivalDate) < 0) { //实际还车时间小于预计还车时间,需要释放后面的时间
BookVehicleVO bookVehicleVo = new BookVehicleVO();
BeanUtils.copyProperties(vehicleBookRecord, bookVehicleVo);
bookVehicleVo.setNotCheckTimeLegal(Boolean.TRUE);
......@@ -252,10 +251,10 @@ public class VehicleActiveService {
bookVehicleVo.setUnbookEndDate(arrivalDate.toString(DATE_TIME_FORMATTER));
try {
Boolean hasSuc = vehicleBiz.unbookVehicle(bookVehicleVo);
if(!hasSuc){
if (!hasSuc) {
throw new BaseException(ResCode.VEHICLE_UNBOOK_FAIL.getDesc(), ResCode.VEHICLE_UNBOOK_FAIL.getCode());
}
} catch ( Exception e) {
} catch (Exception e) {
e.printStackTrace();
}
}
......@@ -270,7 +269,7 @@ public class VehicleActiveService {
departureLog.setIllegalAmount(arrivalVo.getIllegalAmount());
departureLog.setArrivalPic(arrivalVo.getArrivalPic());
departureLog.setArrivalRemark(arrivalVo.getRemark());
if(vehicleBookRecord != null) {
if (vehicleBookRecord != null) {
departureLog.setArrivalBranchCompanyId(vehicleBookRecord.getRetCompany());
}
vehicleDepartureLogMapper.updateByPrimaryKeySelective(departureLog);
......@@ -308,20 +307,20 @@ public class VehicleActiveService {
//添加出车时间过滤 再出车开始时间前一天至结束时间内可以出车,并且预定记录为已审核状态
public void checkDateInvalide(VehicleDepartureVo arrivalVo) {
if(arrivalVo.getBookRecordId() != null) {
VehicleBookRecord vehicleBookRecord = vehicleBookRecordBiz.selectById(arrivalVo.getBookRecordId());
if(vehicleBookRecord != null) {
if (arrivalVo.getBookRecordId() != null) {
VehicleBookRecord vehicleBookRecord = vehicleBookRecordBiz.selectById(arrivalVo.getBookRecordId());
if (vehicleBookRecord != null) {
DateTime startDate = new DateTime(vehicleBookRecord.getBookStartDate());
DateTime endDate = new DateTime(vehicleBookRecord.getBookEndDate());
Map<String, Object> param = new HashMap<>();
param.put("vehicleId", vehicleBookRecord.getVehicleId());
param.put("bookedEndDate", vehicleBookRecord.getBookStartDate());
List<VehicleBookRecordVo> list = vehicleBookRecordBiz.selectByVehicleIdAndTime(param);
if(list != null && list.size() > 0) {
if (list != null && list.size() > 0) {
Iterator<VehicleBookRecordVo> iterator = list.iterator();
while (iterator.hasNext()) {
VehicleBookRecordVo vehicleBookRecordVo = iterator.next();
if(vehicleBookRecordVo.getVehicleDepartureLogVo() == null && (vehicleBookRecordVo.getBookEndDate().getTime() - new Date().getTime()) < 0) {
if (vehicleBookRecordVo.getVehicleDepartureLogVo() == null && vehicleBookRecordVo.getBookEndDate().getTime() - new Date().getTime() < 0) {
iterator.remove();
}
}
......@@ -337,8 +336,8 @@ public class VehicleActiveService {
public void updateBookRecordStatus(VehicleBookRecord vehicleBookRecord, Integer type) {
if(vehicleBookRecord != null) {
if(type == 1) {
if (vehicleBookRecord != null) {
if (type == 1) {
vehicleBookRecord.setActualStartDate(new Date());
} else {
vehicleBookRecord.setActualEndDate(new Date());
......@@ -369,9 +368,9 @@ public class VehicleActiveService {
throw new BaseException(ResCode.VEHICLE_UPKEEP_VEHICLE_DISABLE.getDesc(),
ResCode.VEHICLE_UPKEEP_VEHICLE_DISABLE.getCode());
}
Integer lastMileage=vehicleUpkeepVo.getMileage();
Integer lastMileage = vehicleUpkeepVo.getMileage();
int result = vehicleMapper.upMileageByIdAndStatus(vehicleUpkeepVo.getVehicleId(), VehicleStatus.UPKEEP.getCode(),
VehicleStatus.NORMAL.getCode(),lastMileage);
VehicleStatus.NORMAL.getCode(), lastMileage);
if (result == 0) {
// 车辆状态异常
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
......@@ -422,9 +421,9 @@ public class VehicleActiveService {
throw new BaseException(ResCode.VEHICLE_UPKEEP_VEHICLE_UNUPKEEP.getDesc(),
ResCode.VEHICLE_UPKEEP_VEHICLE_UNUPKEEP.getCode());
}
Integer mileageLastUpdate=vehicle.getMileageLastUpdate()==null?0:vehicle.getMileageLastUpdate();
Integer maintenance_mileage=Mileage+mileageLastUpdate;
int result = vehicleMapper.updateMileageStatusByIdAndStatus(vehicleId, VehicleStatus.NORMAL.getCode(), VehicleStatus.UPKEEP.getCode(),maintenance_mileage);
Integer mileageLastUpdate = vehicle.getMileageLastUpdate() == null ? 0 : vehicle.getMileageLastUpdate();
Integer maintenance_mileage = Mileage + mileageLastUpdate;
int result = vehicleMapper.updateMileageStatusByIdAndStatus(vehicleId, VehicleStatus.NORMAL.getCode(), VehicleStatus.UPKEEP.getCode(), maintenance_mileage);
if (result == 0) {
throw new BaseException(ResCode.VEHICLE_UPKEEP_VEHICLE_UNUPKEEP.getDesc(),
ResCode.VEHICLE_UPKEEP_VEHICLE_UNUPKEEP.getCode());
......
......@@ -99,9 +99,9 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
}
@Value("${vehicle.baseUploadPath}")
private String baseUploadPath ;
private String baseUploadPath;
@Value("${vehicle.fristMileage}")
private Integer fristMileage ;
private Integer fristMileage;
/**
* 每批次最大更、插入车辆最大条目数
......@@ -110,17 +110,18 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
/**
* 写入上传文件,返回相对路径
*
* @param file
* @return
*/
public RestResponse<String> uploadDrivingLicense(MultipartFile file) throws Exception{
public RestResponse<String> uploadDrivingLicense(MultipartFile file) throws Exception {
//创建本日存放目录
DateTime now = DateTime.now();
String dirPathToday = File.separator + now.toString(DEFAULT_DATE_TIME_FORMATTER);
String dirPathToday = File.separator + now.toString(DEFAULT_DATE_TIME_FORMATTER);
String redisNoKey = RedisKey.UPLOAD_FILE_NO_PREFIX + now.toString(DEFAULT_DATE_TIME_FORMATTER);
Long no = customRedisTemplate.opsForValue().increment(redisNoKey);
if(no.equals(1l)){
customRedisTemplate.expire(redisNoKey,1, TimeUnit.DAYS);
if (no.equals(1l)) {
customRedisTemplate.expire(redisNoKey, 1, TimeUnit.DAYS);
}
String fileName = file.getOriginalFilename();
String realFileRelPath = dirPathToday + File.separator + no + fileName.substring(fileName.lastIndexOf("."));
......@@ -133,11 +134,12 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
/**
* 下载行驶证图片
*
* @param realFileRelPath
* @return
* @throws Exception
*/
public ResponseEntity<byte[]> downloadDrivingLicense(String realFileRelPath) throws Exception{
public ResponseEntity<byte[]> downloadDrivingLicense(String realFileRelPath) throws Exception {
String filePath = baseUploadPath + realFileRelPath;
File file = new File(filePath);//新建一个文件
......@@ -145,37 +147,39 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
String downloadFileName = new String(file.getName());//设置编码
headers.setContentDispositionFormData("attachment", downloadFileName);
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.CREATED);
return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file), headers, HttpStatus.CREATED);
}
// @Cache(key = "vehical")
public Vehicle get(String id){
// @Cache(key = "vehical")
public Vehicle get(String id) {
Vehicle vehicle = mapper.selectByPrimaryKey(id);
return vehicle;
}
/**
* 获取相关预订记录
*
* @param vehicle
* @param yearMonth
* @return
*/
public VehicleBookInfo getByVehicleIdAndYearMonth(String vehicle,String yearMonth){
Map<String,Object> params = Maps.newHashMap();
params.put("vehicle",vehicle);
params.put("yearMonth",yearMonth);
public VehicleBookInfo getByVehicleIdAndYearMonth(String vehicle, String yearMonth) {
Map<String, Object> params = Maps.newHashMap();
params.put("vehicle", vehicle);
params.put("yearMonth", yearMonth);
List<VehicleBookInfo> vehicleBookInfoList = vehicleBookInfoMapper.getByVehicleIdAndYearMonth(params);
return CollectionUtils.isEmpty(vehicleBookInfoList)? null:vehicleBookInfoList.get(0);
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);
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),
......@@ -190,7 +194,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
/**
* 检查常量是否合法
*/
private void checkIfConstantValid(AddOrUpdateVehicleVo addOrUpdateVehicleVo){
private void checkIfConstantValid(AddOrUpdateVehicleVo addOrUpdateVehicleVo) {
//检查常量是否合法
if (addOrUpdateVehicleVo.getUseType() != null && addOrUpdateVehicleVo.getUseType() > 0) {
constantBiz.checkIfExists(ConstantType.VEHICLE_USE.getCode(), addOrUpdateVehicleVo.getUseType());
......@@ -202,30 +206,31 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
/**
* 增加车辆
*
* @param addOrUpdateVehicleVoList
*/
@Transactional
public RestResponse add(List<AddOrUpdateVehicleVo> addOrUpdateVehicleVoList) throws Exception{
public RestResponse add(List<AddOrUpdateVehicleVo> addOrUpdateVehicleVoList) throws Exception {
if(addOrUpdateVehicleVoList.size()>MAX_BATCH_SIZE_VEHICLE){
if (addOrUpdateVehicleVoList.size() > MAX_BATCH_SIZE_VEHICLE) {
throw new BaseException(ResultCode.ADD_VEHICLE_MORE);
}
for(AddOrUpdateVehicleVo addOrUpdateVehicleVo:addOrUpdateVehicleVoList) {
for (AddOrUpdateVehicleVo addOrUpdateVehicleVo : addOrUpdateVehicleVoList) {
Vehicle vehicle = new Vehicle();
BeanUtilsBean.getInstance().copyProperties(vehicle, addOrUpdateVehicleVo);
if (addOrUpdateVehicleVo.getParkBranchCompanyId()==null) {
if (addOrUpdateVehicleVo.getParkBranchCompanyId() == null) {
throw new BaseException(ResultCode.RET_COMPANY_CAN_NOT_BE_NULL);
}
vehicle.setId(UUID.randomUUID().toString());
// 检查车牌或者编码是否已存在,已存在则返回失败
List<Vehicle> exitsVehicles = lockByCode(addOrUpdateVehicleVo);
if(CollectionUtils.isNotEmpty(exitsVehicles)){
return RestResponse.codeAndMessage(ResCode.VEHICLE_INFO_SAME_NUM_PLATE_EXISTS.getCode(),
ResCode.VEHICLE_INFO_SAME_NUM_PLATE_EXISTS.getDesc());
if (CollectionUtils.isNotEmpty(exitsVehicles)) {
return RestResponse.codeAndMessage(ResCode.VEHICLE_INFO_SAME_NUM_PLATE_EXISTS.getCode(),
ResCode.VEHICLE_INFO_SAME_NUM_PLATE_EXISTS.getDesc());
// if(addOrUpdateVehicleVo.getCode()!= null &&
// addOrUpdateVehicleVo.getCode().equals(exitsVehicles.get(0).getCode())){
......@@ -242,15 +247,16 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
/**
* 此方法必须置于事务中以使锁生效
* 符合查询条件记录的修改活且相关记录的锁获取操作将被锁定
*
* @param addOrUpdateVehicleVo
* @return 锁定成功返回
*/
private List<Vehicle> lockByCode(AddOrUpdateVehicleVo addOrUpdateVehicleVo)throws CustomIllegalParamException{
private List<Vehicle> lockByCode(AddOrUpdateVehicleVo addOrUpdateVehicleVo) throws CustomIllegalParamException {
// if(addOrUpdateVehicleVo.getCode() == null){
// return null;
// }
if(addOrUpdateVehicleVo.getNumberPlate() == null){
if (addOrUpdateVehicleVo.getNumberPlate() == null) {
throw new BaseException(ResultCode.NUMBER_PLAT_CAN_NOT_BE_NULL);
}
List<Vehicle> vehicles = mapper.lockByCode(addOrUpdateVehicleVo);
......@@ -259,27 +265,28 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
/**
* 修改汽车信息
*
* @param addOrUpdateVehicleVoList
* @return
*/
@Transactional
public RestResponse update(List<AddOrUpdateVehicleVo> addOrUpdateVehicleVoList) throws Exception{
if(addOrUpdateVehicleVoList.size()>MAX_BATCH_SIZE_VEHICLE){
public RestResponse update(List<AddOrUpdateVehicleVo> addOrUpdateVehicleVoList) throws Exception {
if (addOrUpdateVehicleVoList.size() > MAX_BATCH_SIZE_VEHICLE) {
throw new BaseException(ResultCode.ADD_VEHICLE_MORE);
}
for(AddOrUpdateVehicleVo addOrUpdateVehicleVo:addOrUpdateVehicleVoList){
for (AddOrUpdateVehicleVo addOrUpdateVehicleVo : addOrUpdateVehicleVoList) {
Vehicle vehicle = new Vehicle();
BeanUtilsBean.getInstance().copyProperties(vehicle, addOrUpdateVehicleVo);
if (addOrUpdateVehicleVo.getParkBranchCompanyId()==null) {
if (addOrUpdateVehicleVo.getParkBranchCompanyId() == null) {
throw new BaseException(ResultCode.RET_COMPANY_CAN_NOT_BE_NULL);
}
//悲观锁,检查是否已存在车牌或编码
List<Vehicle> exitsVehicles = lockByCode(addOrUpdateVehicleVo);
if(CollectionUtils.isNotEmpty(exitsVehicles)){
for(Vehicle exitsVehicle:exitsVehicles){
if(exitsVehicle.getId().equals(addOrUpdateVehicleVo.getId())){
if (CollectionUtils.isNotEmpty(exitsVehicles)) {
for (Vehicle exitsVehicle : exitsVehicles) {
if (exitsVehicle.getId().equals(addOrUpdateVehicleVo.getId())) {
continue;
}
return RestResponse.codeAndMessage(ResCode.VEHICLE_INFO_SAME_NUM_PLATE_EXISTS.getCode(),
......@@ -300,15 +307,16 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
/**
* 废弃车辆(状态设置为废弃)
*
* @param idList
* @return
*/
public RestResponse discard(List<String> idList){
if(idList.size()>MAX_BATCH_SIZE_VEHICLE){
public RestResponse discard(List<String> idList) {
if (idList.size() > MAX_BATCH_SIZE_VEHICLE) {
throw new BaseException(ResultCode.ADD_VEHICLE_MORE);
}
Map<String,Object> params = Maps.newHashMap();
params.put("idList",idList);
Map<String, Object> params = Maps.newHashMap();
params.put("idList", idList);
params.put("status", VehicleStatus.DISCARD.getCode());
mapper.updateStatusById(params);
return RestResponse.suc();
......@@ -405,6 +413,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
/**
* 不需要审核
*
* @param userId
* @param bookVehicleVo
* @param userName
......@@ -412,11 +421,11 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
* @throws Exception
*/
@Transactional
public VehicleBookRecord applyVehicle(Integer userId, BookVehicleVO bookVehicleVo, String userName) throws Exception{
public VehicleBookRecord applyVehicle(Integer userId, BookVehicleVO bookVehicleVo, String userName) throws Exception {
log.info("预定车辆参数:userId = {}, bookVehicleVo = {},username = {}", userId, bookVehicleVo, userName);
//检查车辆信息是否合法
Vehicle vehicle = mapper.selectByPrimaryKey(bookVehicleVo.getVehicleId());
if(vehicle == null) {
if (vehicle == null) {
throw new BaseException(ResCode.VEHICLE_DEPARTURE_VEHICLE_UNEXIST.getDesc(), ResCode.VEHICLE_DEPARTURE_VEHICLE_UNEXIST.getCode());
}
if (vehicle.getStatus().equals(VehicleStatus.DISCARD.getCode())) {
......@@ -427,16 +436,16 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
throw new BaseException(ResCode.VEHICLE_DEPARTURE_VEHICLE_DELETE.getDesc(),
ResCode.VEHICLE_DEPARTURE_VEHICLE_DELETE.getCode());
}
if(StringUtils.isBlank(bookVehicleVo.getBookStartDate()) || StringUtils.isBlank(bookVehicleVo.getBookEndDate())) {
if (StringUtils.isBlank(bookVehicleVo.getBookStartDate()) || StringUtils.isBlank(bookVehicleVo.getBookEndDate())) {
throw new BaseException(ResultCode.DATE_TIME_IS_NULL);
}
//提取日期和相应的预定目标日期
Map<String,List<String>> yearMonthAndDate = Maps.newHashMap();
Map<String, List<String>> yearMonthAndDate = Maps.newHashMap();
DateTime startDay = DateTime.parse(bookVehicleVo.getBookStartDate(), DATE_TIME_FORMATTER);
DateTime endDay = DateTime.parse(bookVehicleVo.getBookEndDate(), DATE_TIME_FORMATTER);
//转换日期范围为列表,并检查是否合法
fillDateList4DatePeriod(yearMonthAndDate, DateTime.parse(startDay.toString(DEFAULT_DATE_TIME_FORMATTER), DEFAULT_DATE_TIME_FORMATTER), DateTime.parse(endDay.toString(DEFAULT_DATE_TIME_FORMATTER), DEFAULT_DATE_TIME_FORMATTER));
if(yearMonthAndDate.size()>3){//连续的日期最多夸3个月
if (yearMonthAndDate.size() > 3) {//连续的日期最多夸3个月
throw new BaseException(ResultCode.ONLY_BOOK_TWO_MONTH);
}
......@@ -444,9 +453,9 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
Map<String, Integer> map = new HashMap<>();
//加入预定申请记录
VehicleBookRecord vehicleBookRecord = null;
if(bookVehicleVo.getVehicleBookRecordId() == null) {
if (bookVehicleVo.getVehicleBookRecordId() == null) {
//检验时间是否可以预定
map = vehicleBookHourInfoBiz.getPredictableHours(bookVehicleVo.getBookStartDate(), bookVehicleVo.getBookEndDate(), bookVehicleVo.getNotCheckTimeLegal());
map = vehicleBookHourInfoBiz.getPredictableHours(bookVehicleVo.getBookStartDate(), bookVehicleVo.getBookEndDate(), bookVehicleVo.getNotCheckTimeLegal());
vehicleBookRecord = new VehicleBookRecord();
BeanUtil.copyProperties(bookVehicleVo, vehicleBookRecord, CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));
vehicleBookRecord.setBookStartDate(startDay.toDate());
......@@ -458,35 +467,35 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
vehicleBookRecordBiz.save(vehicleBookRecord);
} else {
vehicleBookRecord = vehicleBookRecordBiz.selectById(bookVehicleVo.getVehicleBookRecordId());
if(vehicleBookRecord == null) {
throw new BaseException(ResCode.VEHICLE_BOOKED_RECORD_NOT_EXIST.getDesc(), ResCode.VEHICLE_BOOKED_RECORD_NOT_EXIST.getCode());
} else {
//先取消预定,然后再修改
//先取消之前预定时间,然后再修改
bookVehicleVo.setUnbookStartDate(new DateTime(vehicleBookRecord.getBookStartDate()).toString(DATE_TIME_FORMATTER));
bookVehicleVo.setUnbookEndDate(new DateTime(vehicleBookRecord.getBookEndDate()).toString(DATE_TIME_FORMATTER));
unbookVehicle(bookVehicleVo);
//检验时间是否可以预定
map = vehicleBookHourInfoBiz.getPredictableHours(bookVehicleVo.getBookStartDate(), bookVehicleVo.getBookEndDate(), bookVehicleVo.getNotCheckTimeLegal());
vehicleBookRecord.setBookStartDate(startDay.toDate());
vehicleBookRecord.setBookEndDate(endDay.toDate());
vehicleBookRecordBiz.updateSelectiveByIdRe(vehicleBookRecord);
}
}
for(Map.Entry<String,List<String>> entry : yearMonthAndDate.entrySet()) {
Boolean rsEach = applyVehicle4EmployeePerMonth(bookVehicleVo.getVehicleId(),entry.getValue(),entry.getKey(), map);
if(Boolean.FALSE.equals(rsEach)){
if (vehicleBookRecord == null) {
throw new BaseException(ResCode.VEHICLE_BOOKED_RECORD_NOT_EXIST.getDesc(), ResCode.VEHICLE_BOOKED_RECORD_NOT_EXIST.getCode());
} else {
//先取消预定,然后再修改
//先取消之前预定时间,然后再修改
bookVehicleVo.setUnbookStartDate(new DateTime(vehicleBookRecord.getBookStartDate()).toString(DATE_TIME_FORMATTER));
bookVehicleVo.setUnbookEndDate(new DateTime(vehicleBookRecord.getBookEndDate()).toString(DATE_TIME_FORMATTER));
unbookVehicle(bookVehicleVo);
//检验时间是否可以预定
map = vehicleBookHourInfoBiz.getPredictableHours(bookVehicleVo.getBookStartDate(), bookVehicleVo.getBookEndDate(), bookVehicleVo.getNotCheckTimeLegal());
vehicleBookRecord.setBookStartDate(startDay.toDate());
vehicleBookRecord.setBookEndDate(endDay.toDate());
vehicleBookRecordBiz.updateSelectiveByIdRe(vehicleBookRecord);
}
}
for (Map.Entry<String, List<String>> entry : yearMonthAndDate.entrySet()) {
Boolean rsEach = applyVehicle4EmployeePerMonth(bookVehicleVo.getVehicleId(), entry.getValue(), entry.getKey(), map);
if (Boolean.FALSE.equals(rsEach)) {
throw new BaseException(ResultCode.VEHICLE_IS_BOOKED);
}
}
//添加预定日期记录
Boolean hasSuc = bookedVehicle(bookVehicleVo);
if(!hasSuc){
if (!hasSuc) {
throw new BaseException(ResultCode.BOOKED_FAILED_CODE);
}
// //添加预定时间记录
for(Map.Entry<String, Integer> entry : map.entrySet()) {
for (Map.Entry<String, Integer> entry : map.entrySet()) {
VehicleBookHourInfoDto vehicleBookHourInfoDto = new VehicleBookHourInfoDto();
vehicleBookHourInfoDto.setVehicleId(bookVehicleVo.getVehicleId());
vehicleBookHourInfoDto.setYearMonthDay(entry.getKey());
......@@ -495,13 +504,13 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
}
//添加随车物品
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());
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);
......@@ -512,21 +521,21 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
@Transactional
public Boolean applyVehicle4EmployeePerMonth(String vehicleId, List<String> bookedDates, String yearMonth, Map<String, Integer> hourInfo){
public Boolean applyVehicle4EmployeePerMonth(String vehicleId, List<String> bookedDates, String yearMonth, Map<String, Integer> hourInfo) {
//检查车辆是否有空档
//获得当月预定记录
VehicleBookInfo vehicleBookInfo = getByVehicleIdAndYearMonth(vehicleId,yearMonth);
VehicleBookInfo vehicleBookInfo = getByVehicleIdAndYearMonth(vehicleId, yearMonth);
//位操作确定目标日期是否可预订
Map<String,Object> params = Maps.newHashMap();
Map<String,List<String>> yearMonthAndDate = new HashMap<>();
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(yearMonth);
Map<String, Object> params = Maps.newHashMap();
Map<String, List<String>> yearMonthAndDate = new HashMap<>();
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(yearMonth);
Integer andOperationFactor = andOpratorParam.get("andOperationFactor");
Integer andOperationRs = andOpratorParam.get("andOperationRs");
if(vehicleBookInfo != null && vehicleBookInfo.getBookedDate() != null &&
((vehicleBookInfo.getBookedDate() & andOperationFactor) != 0)){//已经被预定
if (vehicleBookInfo != null && vehicleBookInfo.getBookedDate() != null &&
((vehicleBookInfo.getBookedDate() & andOperationFactor) != 0)) {//已经被预定
//当天已经被预定检查小时是否也被预定
return filterHourInfoBooked(vehicleId, hourInfo);
}
......@@ -535,16 +544,16 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
public boolean filterHourInfoBooked(String vehicleId, Map<String, Integer> hourInfo) {
if(MapUtils.isEmpty(hourInfo)) {
if (MapUtils.isEmpty(hourInfo)) {
return false;
}
for(Map.Entry<String, Integer> entry : hourInfo.entrySet()) {
if(entry.getValue() == 0) {//0点 查询是否有已经预约的记录
for (Map.Entry<String, Integer> entry : hourInfo.entrySet()) {
if (entry.getValue() == 0) {//0点 查询是否有已经预约的记录
Map<String, Object> param = new HashMap<>();
param.put("vehicleId", vehicleId);
param.put("bookedEndDate", DateTime.parse(entry.getKey() + " 00:00:00", DATE_TIME_FORMATTER));
List<VehicleBookRecordVo> vehicleBookRecordVos = vehicleBookRecordBiz.selectZeroHourRecord(param);
if(vehicleBookRecordVos != null && vehicleBookRecordVos.size() > 0) {
if (vehicleBookRecordVos != null && vehicleBookRecordVos.size() > 0) {
return false;
}
}
......@@ -552,8 +561,8 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
vehicleBookHourInfoDto.setYearMonthDay(entry.getKey());
vehicleBookHourInfoDto.setVehicleId(vehicleId);
List<VehicleBookHourInfo> vehicleBookHourInfos = vehicleBookHourInfoBiz.selectByVehicleAndDate(vehicleBookHourInfoDto);
if(vehicleBookHourInfos != null && vehicleBookHourInfos.size() > 0) {
if((vehicleBookHourInfos.get(0).getBookedHour() & entry.getValue()) != 0) { // 已经被预定
if (vehicleBookHourInfos != null && vehicleBookHourInfos.size() > 0) {
if ((vehicleBookHourInfos.get(0).getBookedHour() & entry.getValue()) != 0) { // 已经被预定
log.info(entry.getKey() + "预定的时间段已经被预约!");
return Boolean.FALSE;
}
......@@ -564,48 +573,49 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
/**
* 批准预定车辆预定
*
* @param operatorId
* @param bookRecordId
* @return
*/
@Transactional
public RestResponse<Integer> reviewVehicleBooking(Integer operatorId, Long bookRecordId,Integer rsStatus,String userName, String rejectRemark, Boolean notCheckTimeLegal) throws Exception{
public RestResponse<Integer> reviewVehicleBooking(Integer operatorId, Long bookRecordId, Integer rsStatus, String userName, String rejectRemark, Boolean notCheckTimeLegal) throws Exception {
try {
//获取相关申请记录
VehicleBookRecord vehicleBookRecord = vehicleBookRecordBiz.selectById(bookRecordId);
//申请记录验证
if(vehicleBookRecord == null){
return RestResponse.codeAndMessage(ResCode.VEHICLE_BOOK_RECORD_IS_NOT_EXIST.getCode(), ResCode.VEHICLE_BOOK_RECORD_IS_NOT_EXIST.getDesc());
}
if(VehicleBookRecordStatus.APPROVE.getCode().equals(vehicleBookRecord.getStatus())){
return RestResponse.codeAndMessage(ResCode.VEHICLE_BOOKED_RECORD_ALREADY_CHANGED.getCode(), ResCode.VEHICLE_BOOKED_RECORD_ALREADY_CHANGED.getDesc());
}
//转换为相应预定参数
BookVehicleVO bookVehicleVo = new BookVehicleVO();
BeanUtils.copyProperties(bookVehicleVo,vehicleBookRecord);
bookVehicleVo.setBookStartDate(new DateTime(vehicleBookRecord.getBookStartDate()).toString(DATE_TIME_FORMATTER));
bookVehicleVo.setBookEndDate(new DateTime(vehicleBookRecord.getBookEndDate()).toString(DATE_TIME_FORMATTER));
//获取相关申请记录
VehicleBookRecord vehicleBookRecord = vehicleBookRecordBiz.selectById(bookRecordId);
//申请记录验证
if (vehicleBookRecord == null) {
return RestResponse.codeAndMessage(ResCode.VEHICLE_BOOK_RECORD_IS_NOT_EXIST.getCode(), ResCode.VEHICLE_BOOK_RECORD_IS_NOT_EXIST.getDesc());
}
if (VehicleBookRecordStatus.APPROVE.getCode().equals(vehicleBookRecord.getStatus())) {
return RestResponse.codeAndMessage(ResCode.VEHICLE_BOOKED_RECORD_ALREADY_CHANGED.getCode(), ResCode.VEHICLE_BOOKED_RECORD_ALREADY_CHANGED.getDesc());
}
//转换为相应预定参数
BookVehicleVO bookVehicleVo = new BookVehicleVO();
BeanUtils.copyProperties(bookVehicleVo, vehicleBookRecord);
bookVehicleVo.setBookStartDate(new DateTime(vehicleBookRecord.getBookStartDate()).toString(DATE_TIME_FORMATTER));
bookVehicleVo.setBookEndDate(new DateTime(vehicleBookRecord.getBookEndDate()).toString(DATE_TIME_FORMATTER));
//成功后修改预定记录状态
Map<String,Object> updateParam = Maps.newHashMap();
updateParam.put("id",bookRecordId);
updateParam.put("status",rsStatus);
updateParam.put("reviewerApply",operatorId);
updateParam.put("reviewerNameApply",userName);
updateParam.put("statusCondition",VehicleBookRecordStatus.APPLY.getCode());
if(StringUtils.isNotBlank(rejectRemark)) {
updateParam.put("rejectRemark",rejectRemark);
Map<String, Object> updateParam = Maps.newHashMap();
updateParam.put("id", bookRecordId);
updateParam.put("status", rsStatus);
updateParam.put("reviewerApply", operatorId);
updateParam.put("reviewerNameApply", userName);
updateParam.put("statusCondition", VehicleBookRecordStatus.APPLY.getCode());
if (StringUtils.isNotBlank(rejectRemark)) {
updateParam.put("rejectRemark", rejectRemark);
}
Integer effected = vehicleBookRecordBiz.changeRecordStatus(updateParam);
if(effected == 0){//修改失败,手动回滚
if (effected == 0) {//修改失败,手动回滚
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//手动回滚
return RestResponse.code(ResCode.VEHICLE_BOOKED_RECORD_ALREADY_CHANGED.getCode());
}else if(VehicleBookRecordStatus.REJECTED.getCode().equals(rsStatus)){
} else if (VehicleBookRecordStatus.REJECTED.getCode().equals(rsStatus)) {
//拒绝,则释放bookinfo
bookVehicleVo.setUnbookStartDate(bookVehicleVo.getBookStartDate());
bookVehicleVo.setUnbookEndDate(bookVehicleVo.getBookEndDate());
Boolean hasSuc = unbookVehicle(bookVehicleVo);
if(hasSuc) {
if (hasSuc) {
return RestResponse.suc();
}
}
......@@ -618,23 +628,24 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
/**
* 取消预定
*
* @return
*/
@Transactional
public RestResponse unbookVehicle4Employee(Integer operatorId,Long bookRecordId,String userName, String rejectRemark, Boolean notCheckTimeLegal) throws Exception{
public RestResponse unbookVehicle4Employee(Integer operatorId, Long bookRecordId, String userName, String rejectRemark, Boolean notCheckTimeLegal) throws Exception {
//获取相关申请记录
VehicleBookRecord vehicleBookRecord = vehicleBookRecordBiz.selectById(bookRecordId);
//申请记录验证
if(vehicleBookRecord == null){
if (vehicleBookRecord == null) {
return RestResponse.codeAndMessage(ResCode.VEHICLE_BOOK_RECORD_IS_NOT_EXIST.getCode(), ResCode.VEHICLE_BOOK_RECORD_IS_NOT_EXIST.getDesc());
}
//已通过审核的可以取消预定
if(!VehicleBookRecordStatus.APPROVE.getCode().equals(vehicleBookRecord.getStatus())){
if (!VehicleBookRecordStatus.APPROVE.getCode().equals(vehicleBookRecord.getStatus())) {
return RestResponse.code(ResCode.VEHICLE_BOOKED_RECORD_ALREADY_CHANGED.getCode());
}
//转换为相应取消预定参数
BookVehicleVO bookVehicleVo = new BookVehicleVO();
BeanUtils.copyProperties(bookVehicleVo,vehicleBookRecord);
BeanUtils.copyProperties(bookVehicleVo, vehicleBookRecord);
bookVehicleVo.setNotCheckTimeLegal(notCheckTimeLegal);
bookVehicleVo.setBookStartDate(null);
bookVehicleVo.setBookEndDate(null);
......@@ -642,21 +653,21 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
bookVehicleVo.setUnbookEndDate(new DateTime(vehicleBookRecord.getBookEndDate()).toString(DATE_TIME_FORMATTER));
//取消预定
Boolean hasSuc = unbookVehicle(bookVehicleVo);
if(!hasSuc){
if (!hasSuc) {
return RestResponse.codeAndMessage(ResCode.VEHICLE_UNBOOK_FAIL.getCode(), ResCode.VEHICLE_UNBOOK_FAIL.getDesc());
}
//修改预定状态,写入取消人
Map<String,Object> updateParam = Maps.newHashMap();
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());
if(StringUtils.isNotBlank(rejectRemark)) {
updateParam.put("rejectRemark",rejectRemark);
Map<String, Object> updateParam = Maps.newHashMap();
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());
if (StringUtils.isNotBlank(rejectRemark)) {
updateParam.put("rejectRemark", rejectRemark);
}
Integer effected = vehicleBookRecordBiz.changeRecordStatus(updateParam);
if(effected == 0){//修改失败,手动回滚
if (effected == 0) {//修改失败,手动回滚
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//手动回滚
return RestResponse.code(ResCode.VEHICLE_BOOKED_RECORD_ALREADY_CHANGED.getCode());
}
......@@ -675,54 +686,56 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
/**
* 获取预定车辆相关与操作参数
*
* @return
*/
private Integer getBitOpratorFactor4Booked(List<String> dates){
private Integer getBitOpratorFactor4Booked(List<String> dates) {
Integer andOperationFactor = 0;
for (String dateStr:dates) {//已预定作为条件,该位与1作与运算必定为1
for (String dateStr : dates) {//已预定作为条件,该位与1作与运算必定为1
DateTime dateTime = DateTime.parse(dateStr, DEFAULT_DATE_TIME_FORMATTER);
//仅对应位为1的整形值
andOperationFactor |= 1<<(dateTime.dayOfMonth().get()-1);
andOperationFactor |= 1 << (dateTime.dayOfMonth().get() - 1);
}
return andOperationFactor;
}
/**
* 获取预定车辆相关与操作参数
*
* @return
*/
private Integer getBitOpratorFactor4UnBooked(List<String> dates){
private Integer getBitOpratorFactor4UnBooked(List<String> dates) {
Integer andOperationFactor = Integer.MAX_VALUE;
for (String dateStr:dates) {//已预定作为条件,该位与1作与运算必定为1
for (String dateStr : dates) {//已预定作为条件,该位与1作与运算必定为1
DateTime dateTime = DateTime.parse(dateStr, DEFAULT_DATE_TIME_FORMATTER);
//仅对应位为1的整形值
andOperationFactor ^= 1<<(dateTime.dayOfMonth().get()-1);
andOperationFactor ^= 1 << (dateTime.dayOfMonth().get() - 1);
}
return andOperationFactor;
}
/**
* 根据预定日期逐条修改预定记录
*
* @param bookVehicleVo
* @return
*/
@Transactional
public Boolean bookedVehicle( BookVehicleVO bookVehicleVo) throws Exception{
public Boolean bookedVehicle(BookVehicleVO bookVehicleVo) throws Exception {
//提取日期和相应的预定目标日期
Map<String,List<String>> yearMonthAndDate = Maps.newHashMap();
DateTime startDay =DateTime.parse(bookVehicleVo.getBookStartDate(), DATE_TIME_FORMATTER);
DateTime endDay =DateTime.parse(bookVehicleVo.getBookEndDate(), DATE_TIME_FORMATTER);
Map<String, List<String>> yearMonthAndDate = Maps.newHashMap();
DateTime startDay = DateTime.parse(bookVehicleVo.getBookStartDate(), DATE_TIME_FORMATTER);
DateTime endDay = DateTime.parse(bookVehicleVo.getBookEndDate(), DATE_TIME_FORMATTER);
//转换日期范围为列表,并检查是否合法
fillDateList4DatePeriod(yearMonthAndDate,startDay,endDay);
if(yearMonthAndDate.size()>3){//连续的日期最多夸3个月
fillDateList4DatePeriod(yearMonthAndDate, startDay, endDay);
if (yearMonthAndDate.size() > 3) {//连续的日期最多夸3个月
throw new BaseException(ResultCode.ONLY_BOOK_TWO_MONTH);
}
Boolean rs = Boolean.TRUE;
for(Map.Entry<String,List<String>> entry:yearMonthAndDate.entrySet()){
Boolean rsEach = bookedVehiclePerMonth(bookVehicleVo.getVehicleId(),entry.getValue(),entry.getKey());
if(Boolean.FALSE.equals(rsEach)){
for (Map.Entry<String, List<String>> entry : yearMonthAndDate.entrySet()) {
Boolean rsEach = bookedVehiclePerMonth(bookVehicleVo.getVehicleId(), entry.getValue(), entry.getKey());
if (Boolean.FALSE.equals(rsEach)) {
rs = Boolean.FALSE;
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//手动回滚
}
......@@ -732,13 +745,14 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
/**
* 不存在插入、存在更新,利用唯一索引确保相同车辆以及年月序列化提交事务
*
* @param vehicleId
* @param bookedDates
* @param yearMonth
* @return 是否更新或插入成功
*/
@Transactional
public Boolean bookedVehiclePerMonth(String vehicleId, List<String> bookedDates, String yearMonth) throws Exception{
public Boolean bookedVehiclePerMonth(String vehicleId, List<String> bookedDates, String yearMonth) throws Exception {
VehicleBookInfo vehicleBookInfo = new VehicleBookInfo();
vehicleBookInfo.setVehicle(vehicleId);
vehicleBookInfo.setYearMonth(yearMonth);
......@@ -746,47 +760,48 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
checkIfVehicleExists(vehicleId);
Integer orRsOperationFactor = getBitOpratorFactor4Booked(bookedDates);//预定的相关或运算因子,当前月份没有预定记录时同时也是结果
vehicleBookInfo.setBookedDate(orRsOperationFactor);
Map<String,Object> map = new HashMap<>();
Map<String, Object> map = new HashMap<>();
map.put("vehicle", vehicleId);
map.put("yearMonth", yearMonth);
List<VehicleBookInfo> vehicleBookInfos = vehicleBookInfoMapper.getByVehicleIdAndYearMonth(map);
if(vehicleBookInfos != null && vehicleBookInfos.size() > 0) {
if((vehicleBookInfos.get(0).getBookedDate() & orRsOperationFactor) == orRsOperationFactor) {
if (vehicleBookInfos != null && vehicleBookInfos.size() > 0) {
if ((vehicleBookInfos.get(0).getBookedDate() & orRsOperationFactor) == orRsOperationFactor) {
return Boolean.TRUE;
}
}
Integer effected = vehicleBookInfoMapper.insertIgnore(vehicleBookInfo);
if(effected == 0){//已存在则需要更新
Map<String,Object> params = Maps.newHashMap();
params.put("vehicleId",vehicleBookInfo.getVehicle());
params.put("yearMonth",yearMonth);
if (effected == 0) {//已存在则需要更新
Map<String, Object> params = Maps.newHashMap();
params.put("vehicleId", vehicleBookInfo.getVehicle());
params.put("yearMonth", yearMonth);
//加入更新条件
if(CollectionUtils.isEmpty(bookedDates)){
if (CollectionUtils.isEmpty(bookedDates)) {
throw new BaseException(ResultCode.BOOKED_DATE_IS_EMPTY);
}
Map<String,List<String>> yearMonthAndDate = new HashMap<>();
yearMonthAndDate.put(vehicleBookInfo.getYearMonth(),bookedDates);
Map<String, List<String>> yearMonthAndDate = new HashMap<>();
yearMonthAndDate.put(vehicleBookInfo.getYearMonth(), bookedDates);
//转换为查询对应日期未预定的条件
fillBookedDateSearchParam(params,null,yearMonthAndDate);
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, Map<String, Integer>> yearMonthAndParam = (Map<String, Map<String, Integer>>) params.get("yearMonthAndParam");
Map<String, Integer> andOpratorParam = yearMonthAndParam.get(vehicleBookInfo.getYearMonth());
params.putAll(andOpratorParam);
params.put("orRsOperationFactor",
orRsOperationFactor);
effected = vehicleBookInfoMapper.updateBookedInfo(params);
}
return effected>0?Boolean.TRUE:Boolean.FALSE;
return effected > 0 ? Boolean.TRUE : Boolean.FALSE;
}
/**
* 检查车辆是否存在
*
* @param id
*/
public boolean checkIfVehicleExists(String id){
public boolean checkIfVehicleExists(String id) {
Vehicle vehicle = mapper.selectByPrimaryKey(id);
if(vehicle == null) {
if (vehicle == null) {
return false;
}
if (vehicle.getStatus().equals(VehicleStatus.DISCARD.getCode())) {
......@@ -817,7 +832,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
}
List<VehicleBookRecordVo> vehicleBookRecordVos = vehicleBookRecordBiz.selectByVehicleId(vehicleId);
vehicleBookRecordBiz.removeStatus2(vehicleBookRecordVos);
if(vehicleBookRecordVos != null && vehicleBookRecordVos.size() > 0 && vehicleBookRecordVos.get(0).getBookEndDate() != null && vehicleBookRecordVos.get(0).getBookEndDate().after(new Date())) {
if (vehicleBookRecordVos != null && vehicleBookRecordVos.size() > 0 && vehicleBookRecordVos.get(0).getBookEndDate() != null && vehicleBookRecordVos.get(0).getBookEndDate().after(new Date())) {
stringBuilder.append("中,使用人:");
stringBuilder.append(vehicleBookRecordVos.get(0).getVehicleUsername());
stringBuilder.append(" 使用人电话:");
......@@ -830,71 +845,73 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
/**
* 把日期范围转换为列表,并检查操作范围是否合法
*
* @param yearMonthAndDate
* @param startDay
* @param endDay
*/
private void fillDateList4DatePeriod(Map<String,List<String>> yearMonthAndDate,DateTime startDay,DateTime endDay){
for( DateTime curDate = startDay; curDate.compareTo(endDay) <= 0; curDate = curDate.plusDays(1)){
private void fillDateList4DatePeriod(Map<String, List<String>> yearMonthAndDate, DateTime startDay, DateTime endDay) {
for (DateTime curDate = startDay; curDate.compareTo(endDay) <= 0; curDate = curDate.plusDays(1)) {
String curDateStr = curDate.toString(DEFAULT_DATE_TIME_FORMATTER);
if(curDateStr.compareTo(DateTime.now().toString(DEFAULT_DATE_TIME_FORMATTER))<0){
if (curDateStr.compareTo(DateTime.now().toString(DEFAULT_DATE_TIME_FORMATTER)) < 0) {
throw new BaseException(ResultCode.ONLY_BOOK_FROM_TODAY);
}
String curYearMonth = curDate.toString(YEARMONTH_DATE_TIME_FORMATTER);
if(!yearMonthAndDate.containsKey(curYearMonth)){
yearMonthAndDate.put(curYearMonth,Lists.newArrayList());
if (!yearMonthAndDate.containsKey(curYearMonth)) {
yearMonthAndDate.put(curYearMonth, Lists.newArrayList());
}
List<String> curBookedDateList = yearMonthAndDate.get(curYearMonth);
curBookedDateList.add(curDateStr);
}
if(yearMonthAndDate.size()>3){//连续的日期最多夸3个月
if (yearMonthAndDate.size() > 3) {//连续的日期最多夸3个月
throw new BaseException(" 只可以预约两个月内的车辆");
}
}
private void unbookDateList4DatePeriod(Map<String,List<String>> yearMonthAndDate,DateTime startDay,DateTime endDay){
private void unbookDateList4DatePeriod(Map<String, List<String>> yearMonthAndDate, DateTime startDay, DateTime endDay) {
for( DateTime curDate = startDay; curDate.compareTo(endDay) <= 0; curDate = curDate.plusDays(1)){
for (DateTime curDate = startDay; curDate.compareTo(endDay) <= 0; curDate = curDate.plusDays(1)) {
String curDateStr = curDate.toString(DEFAULT_DATE_TIME_FORMATTER);
// if(curDateStr.compareTo(DateTime.now().toString(DEFAULT_DATE_TIME_FORMATTER))<0){
// throw new BaseException("只可以取消当前时间之后的车辆");
// }
String curYearMonth = curDate.toString(YEARMONTH_DATE_TIME_FORMATTER);
if(!yearMonthAndDate.containsKey(curYearMonth)){
if (!yearMonthAndDate.containsKey(curYearMonth)) {
yearMonthAndDate.put(curYearMonth, Lists.newArrayList());
}
List<String> curBookedDateList = yearMonthAndDate.get(curYearMonth);
curBookedDateList.add(curDateStr);
}
if(yearMonthAndDate.size()>3){//连续的日期最多夸3个月
if (yearMonthAndDate.size() > 3) {//连续的日期最多夸3个月
throw new BaseException(ResultCode.ONLY_BOOK_TWO_MONTH);
}
}
/**
* 取消预定(释放bookinfo)
*
* @return
*/
@Transactional
public Boolean unbookVehicle(BookVehicleVO bookVehicleVo) throws Exception{
public Boolean unbookVehicle(BookVehicleVO bookVehicleVo) throws Exception {
//提取日期参数,改为每月一份
//提取日期和相应的预定目标日期
Map<String,List<String>> yearMonthAndDate = Maps.newHashMap();
DateTime startDay =DateTime.parse(bookVehicleVo.getUnbookStartDate(), DATE_TIME_FORMATTER);
DateTime endDay =DateTime.parse(bookVehicleVo.getUnbookEndDate(), DATE_TIME_FORMATTER);
Map<String, List<String>> yearMonthAndDate = Maps.newHashMap();
DateTime startDay = DateTime.parse(bookVehicleVo.getUnbookStartDate(), DATE_TIME_FORMATTER);
DateTime endDay = DateTime.parse(bookVehicleVo.getUnbookEndDate(), DATE_TIME_FORMATTER);
//转换日期范围为列表,并检查是否合法
unbookDateList4DatePeriod(yearMonthAndDate, DateTime.parse(startDay.toString(DEFAULT_DATE_TIME_FORMATTER), DEFAULT_DATE_TIME_FORMATTER), DateTime.parse(endDay.toString(DEFAULT_DATE_TIME_FORMATTER), DEFAULT_DATE_TIME_FORMATTER));
//原设计为 读取 bookVehicleVo.getNotCheckTimeLegal(), 现在取消/拒绝 true
Map<String, Integer> map = vehicleBookHourInfoBiz.getPredictableHours(bookVehicleVo.getUnbookStartDate(), bookVehicleVo.getUnbookEndDate(), Boolean.TRUE);
if(yearMonthAndDate.size() > 3){//连续的日期最多夸3个月
if (yearMonthAndDate.size() > 3) {//连续的日期最多夸3个月
throw new BaseException(ResultCode.ONLY_UNBOOK_TWO_MONTH);
}
Boolean rs = Boolean.TRUE;
for(Map.Entry<String, List<String>> entry : yearMonthAndDate.entrySet()){
Boolean rsEach = unbookVehiclePerMonth(bookVehicleVo.getVehicleId(),entry.getValue(),entry.getKey(), map);
if(Boolean.FALSE.equals(rsEach)){
for (Map.Entry<String, List<String>> entry : yearMonthAndDate.entrySet()) {
Boolean rsEach = unbookVehiclePerMonth(bookVehicleVo.getVehicleId(), entry.getValue(), entry.getKey(), map);
if (Boolean.FALSE.equals(rsEach)) {
rs = Boolean.FALSE;
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//手动回滚
}
......@@ -904,56 +921,56 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
@Transactional
public Boolean unbookVehiclePerMonth(String vehicleId, List<String> unbookDates, String yearMonth, Map<String, Integer> hourInfo){
public Boolean unbookVehiclePerMonth(String vehicleId, List<String> unbookDates, String yearMonth, Map<String, Integer> hourInfo) {
checkIfVehicleExists(vehicleId);
Map<String,Object> params = Maps.newHashMap();
params.put("vehicleId",vehicleId);
params.put("yearMonth",yearMonth);
Map<String, Object> params = Maps.newHashMap();
params.put("vehicleId", vehicleId);
params.put("yearMonth", yearMonth);
//加入更新条件
if(CollectionUtils.isEmpty(unbookDates)){
if (CollectionUtils.isEmpty(unbookDates)) {
throw new BaseException(ResultCode.VEHICLE_CAN_NOT_UNBOOK);
}
Map<String,List<String>> yearMonthAndDate = new HashMap<>();
yearMonthAndDate.put(yearMonth,unbookDates);
Map<String, List<String>> yearMonthAndDate = new HashMap<>();
yearMonthAndDate.put(yearMonth, unbookDates);
//转换为查询对应日期未预定的条件
fillBookedDateSearchParam(params,yearMonthAndDate,null);
fillBookedDateSearchParam(params, yearMonthAndDate, null);
//提取相关参数组装更细条件
Map<String,Map<String,Integer>> yearMonthAndParam = (Map<String,Map<String,Integer>>)params.get("yearMonthAndParam");
Map<String,Integer> andOpratorParam = yearMonthAndParam.get(yearMonth);
Map<String, Map<String, Integer>> yearMonthAndParam = (Map<String, Map<String, Integer>>) params.get("yearMonthAndParam");
Map<String, Integer> andOpratorParam = yearMonthAndParam.get(yearMonth);
params.putAll(andOpratorParam);
Integer andRsOperationFactor = getBitOpratorFactor4UnBooked(unbookDates);//预定的相关或运算因子,当前月份没有预定记录时同时也是结果
params.put("andRsOperationFactor",
andRsOperationFactor);
return unbookHourInfo(vehicleId, hourInfo, params);
return unbookHourInfo(vehicleId, hourInfo, params);
}
public boolean unbookHourInfo(String vehicleId, Map<String, Integer> hourInfo, Map<String,Object> params) {
public boolean unbookHourInfo(String vehicleId, Map<String, Integer> hourInfo, Map<String, Object> params) {
for (Map.Entry<String, Integer> entry : hourInfo.entrySet()) {
VehicleBookHourInfoDto vehicleBookHourInfoDto = new VehicleBookHourInfoDto();
vehicleBookHourInfoDto.setYearMonthDay(entry.getKey());
vehicleBookHourInfoDto.setVehicleId(vehicleId);
List<VehicleBookHourInfo> vehicleBookHourInfos = vehicleBookHourInfoBiz.selectByVehicleAndDate(vehicleBookHourInfoDto);
if (vehicleBookHourInfos != null && vehicleBookHourInfos.size() > 0) {
if((vehicleBookHourInfos.get(0).getBookedHour() & ~entry.getValue()) == 0) { //时间取与运算为0说明当天全部取消预定
DateTime dateTime = DateTime.parse(entry.getKey(), DEFAULT_DATE_TIME_FORMATTER);
Integer andOperationFactor = 0;
andOperationFactor |= 1 << ( dateTime.dayOfMonth().get() - 1);
VehicleBookInfo vehicleBookInfo = getByVehicleIdAndYearMonth(vehicleId, dateTime.toString(YEARMONTH_DATE_TIME_FORMATTER));
if(vehicleBookInfo != null) {
vehicleBookInfo.setBookedDate(vehicleBookInfo.getBookedDate() & ~andOperationFactor);
int effected = vehicleBookInfoBiz.update(vehicleBookInfo);
if (effected < 1) {
return Boolean.FALSE;
}
}
}
if ((vehicleBookHourInfos.get(0).getBookedHour() & ~entry.getValue()) == 0) { //时间取与运算为0说明当天全部取消预定
DateTime dateTime = DateTime.parse(entry.getKey(), DEFAULT_DATE_TIME_FORMATTER);
Integer andOperationFactor = 0;
andOperationFactor |= 1 << (dateTime.dayOfMonth().get() - 1);
VehicleBookInfo vehicleBookInfo = getByVehicleIdAndYearMonth(vehicleId, dateTime.toString(YEARMONTH_DATE_TIME_FORMATTER));
if (vehicleBookInfo != null) {
vehicleBookInfo.setBookedDate(vehicleBookInfo.getBookedDate() & ~andOperationFactor);
int effected = vehicleBookInfoBiz.update(vehicleBookInfo);
if (effected < 1) {
return Boolean.FALSE;
}
}
}
vehicleBookHourInfos.get(0).setBookedHour((vehicleBookHourInfos.get(0).getBookedHour() & ~entry.getValue()));
int effect = vehicleBookHourInfoBiz.updateByIdRe(vehicleBookHourInfos.get(0));
if (effect < 1) {
return Boolean.FALSE;
} else {
continue;
}
int effect = vehicleBookHourInfoBiz.updateByIdRe(vehicleBookHourInfos.get(0));
if (effect < 1) {
return Boolean.FALSE;
} else {
continue;
}
} else {
return Boolean.FALSE;
}
......@@ -963,77 +980,78 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
/**
* 获取某月份相应预定日期查询条件
* @param yearMonthAndDate 年月 - 预定日期条件字符串(yyyy-MM-dd)
*
* @param yearMonthAndDate 年月 - 预定日期条件字符串(yyyy-MM-dd)
* @param yearMonthAndDateNotBooked 年月 - 未预定日期条件字符串
* @return
*/
public void fillBookedDateSearchParam(Map<String, Object> params,
Map<String,List<String>> yearMonthAndDate,Map<String,List<String>> yearMonthAndDateNotBooked){
if(MapUtils.isEmpty(yearMonthAndDate)&&MapUtils.isEmpty(yearMonthAndDateNotBooked)){//没有预定信息查询条件
Map<String, List<String>> yearMonthAndDate, Map<String, List<String>> yearMonthAndDateNotBooked) {
if (MapUtils.isEmpty(yearMonthAndDate) && MapUtils.isEmpty(yearMonthAndDateNotBooked)) {//没有预定信息查询条件
throw new BaseException(ResultCode.BOOKED_DATE_IS_EMPTY);
}
Map<String,Map<String,Integer>> yearMonthAndParam = new HashMap<>();
Map<String, Map<String, Integer>> yearMonthAndParam = new HashMap<>();
Set<String> bookedYearMonth = new HashSet<>();//记录未预定查询条件,供检查是否是否存在同一天既是已预定,又是没有预定
if(MapUtils.isNotEmpty(yearMonthAndDate)) {
for(Map.Entry<String,List<String>> entry:yearMonthAndDate.entrySet()){
if (MapUtils.isNotEmpty(yearMonthAndDate)) {
for (Map.Entry<String, List<String>> entry : yearMonthAndDate.entrySet()) {
String curYearMonth = entry.getKey();
if(CollectionUtils.isEmpty(entry.getValue())){
if (CollectionUtils.isEmpty(entry.getValue())) {
continue;
}
Integer andOperationFactor = 0;//查找条件中作与运算的参数
Integer andOperationRs = 0;//与运算结果
for (String dateStr:entry.getValue()) {//已预定作为条件,该位与1作与运算必定为1
for (String dateStr : entry.getValue()) {//已预定作为条件,该位与1作与运算必定为1
DateTime dateTime = DateTime.parse(dateStr, DEFAULT_DATE_TIME_FORMATTER);
bookedYearMonth.add(dateStr);
//仅对应位为1的整形值
andOperationFactor |= 1<<(dateTime.dayOfMonth().get()-1);
andOperationRs |= 1<<(dateTime.dayOfMonth().get()-1);
andOperationFactor |= 1 << (dateTime.dayOfMonth().get() - 1);
andOperationRs |= 1 << (dateTime.dayOfMonth().get() - 1);
}
Map<String,Integer> andOperationParam = Maps.newHashMap();
andOperationParam.put("andOperationFactor",andOperationFactor);
andOperationParam.put("andOperationRs",andOperationRs);
yearMonthAndParam.put(curYearMonth,andOperationParam);
Map<String, Integer> andOperationParam = Maps.newHashMap();
andOperationParam.put("andOperationFactor", andOperationFactor);
andOperationParam.put("andOperationRs", andOperationRs);
yearMonthAndParam.put(curYearMonth, andOperationParam);
}
}
if(MapUtils.isNotEmpty(yearMonthAndDateNotBooked)) {
for(Map.Entry<String,List<String>> entry:yearMonthAndDateNotBooked.entrySet()){
if (MapUtils.isNotEmpty(yearMonthAndDateNotBooked)) {
for (Map.Entry<String, List<String>> entry : yearMonthAndDateNotBooked.entrySet()) {
String curYearMonth = entry.getKey();
if(CollectionUtils.isEmpty(entry.getValue())){
if (CollectionUtils.isEmpty(entry.getValue())) {
continue;
}
Map<String,Integer> andOperationParam = Maps.newHashMap();
andOperationParam.put("andOperationFactor",0);
andOperationParam.put("andOperationRs",0);
Integer andOperationFactor=0;//查找条件中作与运算的参数
if(yearMonthAndParam.containsKey(curYearMonth)){
Map<String, Integer> andOperationParam = Maps.newHashMap();
andOperationParam.put("andOperationFactor", 0);
andOperationParam.put("andOperationRs", 0);
Integer andOperationFactor = 0;//查找条件中作与运算的参数
if (yearMonthAndParam.containsKey(curYearMonth)) {
andOperationParam = yearMonthAndParam.get(curYearMonth);
andOperationFactor = andOperationParam.get("andOperationFactor");
}else{
yearMonthAndParam.put(curYearMonth,andOperationParam);
} else {
yearMonthAndParam.put(curYearMonth, andOperationParam);
}
for (String dateStr:entry.getValue()) {//已预定作为条件,该位与1作与运算必定为1
if(bookedYearMonth.contains(dateStr)){
for (String dateStr : entry.getValue()) {//已预定作为条件,该位与1作与运算必定为1
if (bookedYearMonth.contains(dateStr)) {
log.info("当天不可预定,日期为:dateStr = {}", dateStr);
throw new BaseException(ResultCode.TODAY_CAN_NOT_BOOK);
}
DateTime dateTime = DateTime.parse(dateStr, DEFAULT_DATE_TIME_FORMATTER);
//仅对应位为1的整形值
andOperationFactor |= 1<<(dateTime.dayOfMonth().get()-1);
andOperationFactor |= 1 << (dateTime.dayOfMonth().get() - 1);
}
andOperationParam.put("andOperationFactor",andOperationFactor);
andOperationParam.put("andOperationFactor", andOperationFactor);
// if(!bookedYearMonth.contains(curYearMonth)){//仅以未预定日期条件查询时,不存在预定记录即为没有预定
// andOperationParam.put("notBookedOnly",1);
// }
}
}
if(MapUtils.isNotEmpty(yearMonthAndParam)){
params.put("yearMonthAndParam",yearMonthAndParam);
if (MapUtils.isNotEmpty(yearMonthAndParam)) {
params.put("yearMonthAndParam", yearMonthAndParam);
String bitStr = "";
for(String key : yearMonthAndParam.keySet()) {
bitStr+= "1";
for (String key : yearMonthAndParam.keySet()) {
bitStr += "1";
}
params.put("yearMonthAndParamBitStr", bitStr);
}
......@@ -1042,15 +1060,15 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
/**
* 根据月份分类到map中
*/
private void classifyByYearMonth(List<String> target,Map<String,List<String>> yearMonthAndDate,Set<String> allYearMonth){
if(CollectionUtils.isNotEmpty(target)) {//已预约
private void classifyByYearMonth(List<String> target, Map<String, List<String>> yearMonthAndDate, Set<String> allYearMonth) {
if (CollectionUtils.isNotEmpty(target)) {//已预约
for (String dateStr : target) {
String curYearMonth = DateTime.parse(dateStr, DEFAULT_DATE_TIME_FORMATTER).toString(YEARMONTH_DATE_TIME_FORMATTER);
allYearMonth.add(curYearMonth);
List<String> dateStrList = yearMonthAndDate.get(curYearMonth);
if(dateStrList == null ){
if (dateStrList == null) {
dateStrList = Lists.newArrayList();
yearMonthAndDate.put(curYearMonth,dateStrList);
yearMonthAndDate.put(curYearMonth, dateStrList);
}
dateStrList.add(dateStr);
}
......@@ -1059,15 +1077,16 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
/**
* 把日期范围转换成列表
*
* @param startDate
* @param endDate
* @return
*/
private List<String> convertDatePeriod2List(String startDate,String endDate){
DateTime startDay =DateTime.parse(startDate, DEFAULT_DATE_TIME_FORMATTER);
DateTime endDay =DateTime.parse(endDate, DEFAULT_DATE_TIME_FORMATTER);
private List<String> convertDatePeriod2List(String startDate, String endDate) {
DateTime startDay = DateTime.parse(startDate, DEFAULT_DATE_TIME_FORMATTER);
DateTime endDay = DateTime.parse(endDate, DEFAULT_DATE_TIME_FORMATTER);
List<String> rs = Lists.newArrayList();
for( DateTime curDate = startDay;curDate.compareTo(endDay)<=0;curDate=curDate.plusDays(1)){
for (DateTime curDate = startDay; curDate.compareTo(endDay) <= 0; curDate = curDate.plusDays(1)) {
String curDateStr = curDate.toString(DEFAULT_DATE_TIME_FORMATTER);
rs.add(curDateStr);
}
......@@ -1076,13 +1095,14 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
/**
* 根据前端预定日期查询条件转换为实际查询条件
*
* @param params
* @return
*/
public void adjustBookedInfoParam(Map<String, Object> params,VehiclePageQueryVo vehiclePageQueryVo){
public void adjustBookedInfoParam(Map<String, Object> params, VehiclePageQueryVo vehiclePageQueryVo) {
//加入每月预定信息查询条件
List<String> bookedDates = Lists.newArrayList();
if(StringUtils.isNotBlank(vehiclePageQueryVo.getBookedStartDate())&&
if (StringUtils.isNotBlank(vehiclePageQueryVo.getBookedStartDate()) &&
StringUtils.isNotBlank(vehiclePageQueryVo.getBookedEndDate())) {
bookedDates = convertDatePeriod2List(vehiclePageQueryVo.getBookedStartDate(),
vehiclePageQueryVo.getBookedEndDate());
......@@ -1091,7 +1111,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
params.remove("bookEndDate");
List<String> notBookedDates = Lists.newArrayList();
if(StringUtils.isNotBlank(vehiclePageQueryVo.getNotBookedStartDate())&&
if (StringUtils.isNotBlank(vehiclePageQueryVo.getNotBookedStartDate()) &&
StringUtils.isNotBlank(vehiclePageQueryVo.getNotBookedEndDate())) {
notBookedDates = convertDatePeriod2List(vehiclePageQueryVo.getNotBookedStartDate(),
vehiclePageQueryVo.getNotBookedEndDate());
......@@ -1100,68 +1120,71 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
params.remove("norBookedEndDate");
//若传入预定信息查询条件,则查询对应月份预定信息查询条件(不超过3个月)
if(CollectionUtils.isEmpty(bookedDates) && CollectionUtils.isEmpty(notBookedDates)){
if (CollectionUtils.isEmpty(bookedDates) && CollectionUtils.isEmpty(notBookedDates)) {
return;
}
//筛选出查询条件所在月份
Set<String> allYearMonth = new HashSet<>();//记录所有年月
Map<String,List<String>> yearMonthAndDate = new HashMap<>();//预定年月 - 预定日期列表
classifyByYearMonth(bookedDates,yearMonthAndDate,allYearMonth);
Map<String,List<String>> yearMonthAndDateNotBooked = new HashMap<>();//未预定年月 - 未预定日期列表
classifyByYearMonth(notBookedDates,yearMonthAndDateNotBooked,allYearMonth);
if(allYearMonth.size()>0 && params.get("subordinateBranch") == null){
Map<String, List<String>> yearMonthAndDate = new HashMap<>();//预定年月 - 预定日期列表
classifyByYearMonth(bookedDates, yearMonthAndDate, allYearMonth);
Map<String, List<String>> yearMonthAndDateNotBooked = new HashMap<>();//未预定年月 - 未预定日期列表
classifyByYearMonth(notBookedDates, yearMonthAndDateNotBooked, allYearMonth);
if (allYearMonth.size() > 0 && params.get("subordinateBranch") == null) {
throw new BaseException(" <subordinateBranch> must included in params while using <bookedInfo> param. ");
}
if(allYearMonth.size()>MAX_MONTH_COUNT_BOOKED_INFO_QUERY){
throw new BaseException(" only 3 month can be included <bookedInfo> param.");
if (allYearMonth.size() > MAX_MONTH_COUNT_BOOKED_INFO_QUERY) {
throw new BaseException(" only 3 month can be included <bookedInfo> param.");
}
//加入预定信息查询条件
fillBookedDateSearchParam(params,yearMonthAndDate,yearMonthAndDateNotBooked);
fillBookedDateSearchParam(params, yearMonthAndDate, yearMonthAndDateNotBooked);
}
/**
* 按页查询
*
* @param vehiclePageQueryVo
* @return
* @throws Exception
*/
public PageDataVO<ResultVehicleVo> getByPage(VehiclePageQueryVo vehiclePageQueryVo) throws Exception{
public PageDataVO<ResultVehicleVo> getByPage(VehiclePageQueryVo vehiclePageQueryVo) throws Exception {
Map<String, Object> params = PropertyUtils.describe(vehiclePageQueryVo);
Integer pageSize = (Integer) params.get("limit");
params.remove("pageSize");
Integer pageNo = (Integer) params.get("page");
params.remove("pageNo");
//处理预定日期相关参数
adjustBookedInfoParam(params,vehiclePageQueryVo);
adjustBookedInfoParam(params, vehiclePageQueryVo);
params.get("yearMonthAndParam");
if(vehiclePageQueryVo.getModelId() == null) {
if (vehiclePageQueryVo.getModelId() == null) {
params.remove("modelId");
}
PageHelper.startPage(pageNo,pageSize);
PageHelper.startPage(pageNo, pageSize);
List<ResultVehicleVo> vehicles = mapper.getByPage(params);
PageInfo<ResultVehicleVo> vehiclePageInfo = new PageInfo<>(vehicles);
return PageDataVO.pageInfo(vehiclePageInfo);
}
/**
* 按页查询(非所有数据,过滤分公司信息)
*
* @param vehiclePageQueryVo
* @return
* @throws Exception
*/
public PageDataVO<ResultVehicleVo> getByPageNotAllData(VehiclePageQueryVo vehiclePageQueryVo, List<Integer> companyList) throws Exception{
public PageDataVO<ResultVehicleVo> getByPageNotAllData(VehiclePageQueryVo vehiclePageQueryVo, List<Integer> companyList) throws Exception {
Map<String, Object> params = PropertyUtils.describe(vehiclePageQueryVo);
Integer pageSize = (Integer) params.get("limit");
params.remove("pageSize");
Integer pageNo = (Integer) params.get("page");
params.remove("pageNo");
//处理预定日期相关参数
adjustBookedInfoParam(params,vehiclePageQueryVo);
adjustBookedInfoParam(params, vehiclePageQueryVo);
if (companyList != null && companyList.size() > 0) {
params.put("companyList", companyList);
} else {
params.put("companyList", Arrays.asList(-1));
}
PageHelper.startPage(pageNo,pageSize);
PageHelper.startPage(pageNo, pageSize);
List<ResultVehicleVo> vehicles = mapper.getByPageNotAllData(params);
PageInfo<ResultVehicleVo> vehiclePageInfo = new PageInfo<>(vehicles);
return PageDataVO.pageInfo(vehiclePageInfo);
......@@ -1169,9 +1192,9 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
public List<Integer> dataCompany(String dataZone, String dataCompany) {
List<BranchCompany> zoneCompanys = branchCompanyBiz.dataCompany(dataZone);
//((VehicleBiz)AopContext.currentProxy()).dataCompany(dataZone);
//((VehicleBiz)AopContext.currentProxy()).dataCompany(dataZone);
List<Integer> zoneCompanyIds = zoneCompanys.parallelStream().map(BranchCompany::getId).collect(Collectors.toList());
if(StringUtils.isNotBlank(dataCompany)) {
if (StringUtils.isNotBlank(dataCompany)) {
List<Integer> dataCompanyIds = Arrays.asList(dataCompany.split(",")).parallelStream().map(s -> Integer.valueOf(s)).collect(Collectors.toList());
zoneCompanyIds.addAll(dataCompanyIds);
}
......@@ -1179,15 +1202,15 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
return zoneCompanyIds.parallelStream().distinct().collect(Collectors.toList());
}
public PageDataVO<UsableVehicleModelVO> searchUsableModel(UsableVeicleDTO dto){
public PageDataVO<UsableVehicleModelVO> searchUsableModel(UsableVeicleDTO dto) {
Map<String, Object> params = BeanUtil.beanToMap(dto);
if(StrUtil.isNotBlank(dto.getStartDate()) && StrUtil.isNotBlank(dto.getEndDate())) {
if (StrUtil.isNotBlank(dto.getStartDate()) && StrUtil.isNotBlank(dto.getEndDate())) {
initBookSearchParam(dto, params);
}
return PageDataVO.pageInfo(dto.getPage(), dto.getLimit(), () -> mapper.searchUsableModel(params));
}
public PageDataVO<UsableVehicleModelVO> hotModel(HotVeicleDTO dto){
public PageDataVO<UsableVehicleModelVO> hotModel(HotVeicleDTO dto) {
dto.setHotSign(1);
Map<String, Object> params = BeanUtil.beanToMap(dto);
return PageDataVO.pageInfo(dto.getPage(), dto.getLimit(), () -> mapper.searchUsableModel(params));
......@@ -1195,7 +1218,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
private void initBookSearchParam(UsableVeicleDTO dto, Map<String, Object> params) {
List<String> notBookedDates = Lists.newArrayList();
if(StringUtils.isNotBlank(dto.getStartDate())&&
if (StringUtils.isNotBlank(dto.getStartDate()) &&
StringUtils.isNotBlank(dto.getEndDate())) {
// notBookedDates = convertDatePeriod2List(dto.getStartDate(),
// dto.getEndDate());
......@@ -1204,27 +1227,27 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
}
//若传入预定信息查询条件,则查询对应月份预定信息查询条件(不超过3个月)
if(CollectionUtils.isEmpty(notBookedDates)){
if (CollectionUtils.isEmpty(notBookedDates)) {
throw new BaseException(ResultCode.NOTEXIST_CODE);
}
//筛选出查询条件所在月份 如 想预定 8月29 ~ 9月 4日
Set<String> allYearMonth = new HashSet<>();//记录所有年月 "2019-08","2019-09"
Map<String,List<String>> yearMonthAndDate = new HashMap<>();//需比较已预定的年月 - 预定日期列表 为空(拒绝 预约记录时用到)
Map<String,List<String>> yearMonthAndDateNotBooked = new HashMap<>();//需比较未预定的年月 - 未预定日期列表 "2019-08-29"...."2019-09-04",
classifyByYearMonth(notBookedDates,yearMonthAndDateNotBooked,allYearMonth);
if(allYearMonth.size()>MAX_MONTH_COUNT_BOOKED_INFO_QUERY){
throw new BaseException(" only 3 month can be included <bookedInfo> param.");
Map<String, List<String>> yearMonthAndDate = new HashMap<>();//需比较已预定的年月 - 预定日期列表 为空(拒绝 预约记录时用到)
Map<String, List<String>> yearMonthAndDateNotBooked = new HashMap<>();//需比较未预定的年月 - 未预定日期列表 "2019-08-29"...."2019-09-04",
classifyByYearMonth(notBookedDates, yearMonthAndDateNotBooked, allYearMonth);
if (allYearMonth.size() > MAX_MONTH_COUNT_BOOKED_INFO_QUERY) {
throw new BaseException(" only 3 month can be included <bookedInfo> param.");
}
//加入预定信息查询条件
fillBookedDateSearchParam(params,yearMonthAndDate,yearMonthAndDateNotBooked);
fillBookedDateSearchParam(params, yearMonthAndDate, yearMonthAndDateNotBooked);
}
public PageDataVO<Vehicle> searchUsableVehicle(RentVehicleBookDTO dto){
public PageDataVO<Vehicle> searchUsableVehicle(RentVehicleBookDTO dto) {
Map<String, Object> params = BeanUtil.beanToMap(dto);
List<String> notBookedDates = Lists.newArrayList();
if(StringUtils.isNotBlank(dto.getBookEndDate())&&
if (StringUtils.isNotBlank(dto.getBookEndDate()) &&
StringUtils.isNotBlank(dto.getBookEndDate())) {
// notBookedDates = convertDatePeriod2List(dto.getBookStartDate(),
// dto.getBookEndDate());
......@@ -1233,19 +1256,19 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
}
//若传入预定信息查询条件,则查询对应月份预定信息查询条件(不超过3个月)
if(CollectionUtils.isEmpty(notBookedDates)){
if (CollectionUtils.isEmpty(notBookedDates)) {
//return;
}
//筛选出查询条件所在月份
Set<String> allYearMonth = new HashSet<>();//记录所有年月
Map<String,List<String>> yearMonthAndDate = new HashMap<>();//预定年月 - 预定日期列表
Map<String,List<String>> yearMonthAndDateNotBooked = new HashMap<>();//未预定年月 - 未预定日期列表
classifyByYearMonth(notBookedDates,yearMonthAndDateNotBooked,allYearMonth);
if(allYearMonth.size()>MAX_MONTH_COUNT_BOOKED_INFO_QUERY){
throw new BaseException(" only 3 month can be included <bookedInfo> param.");
Map<String, List<String>> yearMonthAndDate = new HashMap<>();//预定年月 - 预定日期列表
Map<String, List<String>> yearMonthAndDateNotBooked = new HashMap<>();//未预定年月 - 未预定日期列表
classifyByYearMonth(notBookedDates, yearMonthAndDateNotBooked, allYearMonth);
if (allYearMonth.size() > MAX_MONTH_COUNT_BOOKED_INFO_QUERY) {
throw new BaseException(" only 3 month can be included <bookedInfo> param.");
}
//加入预定信息查询条件
fillBookedDateSearchParam(params,yearMonthAndDate,yearMonthAndDateNotBooked);
fillBookedDateSearchParam(params, yearMonthAndDate, yearMonthAndDateNotBooked);
PageHelper.startPage(dto.getPage(), dto.getLimit());
List<Vehicle> lists = mapper.searchUsableVehicle(params);
......@@ -1255,38 +1278,40 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
/**
* 保存
*
* @param vehicle
* @return
*/
@Transactional
public ObjectRestResponse save(Vehicle vehicle){
if (vehicle==null) {
ObjectRestResponse.paramIsEmpty();
public ObjectRestResponse save(Vehicle vehicle) {
if (vehicle == null) {
ObjectRestResponse.paramIsEmpty();
}
String id = vehicle.getId();
if (StringUtils.isBlank(id)) {
insertSelective(vehicle);
insertSelective(vehicle);
}else {
updateSelectiveById(vehicle);
insertSelective(vehicle);
} else {
updateSelectiveById(vehicle);
}
return ObjectRestResponse.succ();
return ObjectRestResponse.succ();
}
/**
* 查找
*
* @param vehicleVo
* @param page
* @param limit
* @return
*/
public ObjectRestResponse findListByVehicle(VehicleVo vehicleVo, Integer page, Integer limit){
public ObjectRestResponse findListByVehicle(VehicleVo vehicleVo, Integer page, Integer limit) {
Vehicle vehicle = new Vehicle();
// vehicleVo复制一份到vehicle
try {
BeanUtilsBean.getInstance().copyProperties(vehicle,vehicleVo);
BeanUtilsBean.getInstance().copyProperties(vehicle, vehicleVo);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
......@@ -1297,33 +1322,33 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
WeekendSqls<Vehicle> sqls = WeekendSqls.<Vehicle>custom();
//车辆状态
if (vehicle.getStatus()!=null||vehicle.getStatus()!=0){
sqls.andEqualTo(Vehicle::getStatus,vehicle.getStatus());
}
//车牌号
if (StringUtils.isBlank(vehicle.getNumberPlate())){
sqls.andEqualTo(Vehicle::getNumberPlate,vehicle.getNumberPlate());
Function<Vehicle, Integer> getStatus = Vehicle::getStatus;
}
//公司
if (vehicle.getSubordinateBranch()==null||vehicle.getSubordinateBranch()==0){
sqls.andEqualTo(Vehicle::getSubordinateBranch,vehicle.getSubordinateBranch());
}
//大区
if (vehicleVo.getZoneId()==null||vehicleVo.getZoneId()==0){
//获取大区内的公司id
Example example= Example.builder(BranchCompany.class).where(WeekendSqls.<BranchCompany>custom()
.andEqualTo(BranchCompany::getZoneId,vehicleVo.getZoneId())).build();
List<BranchCompany> branchCompanies = branchCompanyBiz.selectByExample(example);
ArrayList<Integer> bIds = new ArrayList<>();
for (BranchCompany branchCompany : branchCompanies) {
bIds.add(branchCompany.getId());
}
sqls.andIn(Vehicle::getSubordinateBranch,bIds);
}
sqls.andEqualTo(Vehicle::getStatus,0);
if (vehicle.getStatus() != null || vehicle.getStatus() != 0) {
sqls.andEqualTo(Vehicle::getStatus, vehicle.getStatus());
}
//车牌号
if (StringUtils.isBlank(vehicle.getNumberPlate())) {
sqls.andEqualTo(Vehicle::getNumberPlate, vehicle.getNumberPlate());
Function<Vehicle, Integer> getStatus = Vehicle::getStatus;
}
//公司
if (vehicle.getSubordinateBranch() == null || vehicle.getSubordinateBranch() == 0) {
sqls.andEqualTo(Vehicle::getSubordinateBranch, vehicle.getSubordinateBranch());
}
//大区
if (vehicleVo.getZoneId() == null || vehicleVo.getZoneId() == 0) {
//获取大区内的公司id
Example example = Example.builder(BranchCompany.class).where(WeekendSqls.<BranchCompany>custom()
.andEqualTo(BranchCompany::getZoneId, vehicleVo.getZoneId())).build();
List<BranchCompany> branchCompanies = branchCompanyBiz.selectByExample(example);
ArrayList<Integer> bIds = new ArrayList<>();
for (BranchCompany branchCompany : branchCompanies) {
bIds.add(branchCompany.getId());
}
sqls.andIn(Vehicle::getSubordinateBranch, bIds);
}
sqls.andEqualTo(Vehicle::getStatus, 0);
Example exa = Example.builder(Vehicle.class).where(sqls).build();
PageDataVO<Object> objectPageDataVO = PageDataVO.pageInfo(page, limit, () -> selectByExample(exa));
return ObjectRestResponse.succ(objectPageDataVO);
......@@ -1331,17 +1356,18 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
/**
* 查询条
*
* @param id
* @return
*/
public ObjectRestResponse getOneById(Integer id){
public ObjectRestResponse getOneById(Integer id) {
return ObjectRestResponse.succ(selectByExample(
Example.builder(Vehicle.class)
.where(WeekendSqls.<Vehicle>custom()
.andEqualTo(Vehicle::getId,id)
.andEqualTo(Vehicle::getStatus,0))
.build()));
return ObjectRestResponse.succ(selectByExample(
Example.builder(Vehicle.class)
.where(WeekendSqls.<Vehicle>custom()
.andEqualTo(Vehicle::getId, id)
.andEqualTo(Vehicle::getStatus, 0))
.build()));
}
......@@ -1356,21 +1382,21 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
}
public ObjectRestResponse<PageDataVO<VehicleAndModelInfoVo>> getVehicle(VehiclePlanDto vehiclePlanDto) {
Integer page = vehiclePlanDto.getPage() == null ? 1 :vehiclePlanDto.getPage();
Integer page = vehiclePlanDto.getPage() == null ? 1 : vehiclePlanDto.getPage();
Integer limit = vehiclePlanDto.getLimit() == null ? 10 : vehiclePlanDto.getLimit();
vehiclePlanDto.setPage(page);
vehiclePlanDto.setLimit(limit);
UserDTO userDTO = getAdminUserInfo();
if(userDTO == null) {
if (userDTO == null) {
return ObjectRestResponse.createFailedResult(ResultCode.RSTOKEN_EXPIRED_CODE, "token失效");
}
List<Integer> companyList = Lists.newArrayList();
List<Integer> companyList = Lists.newArrayList();
List<BranchCompany> branchCompany = branchCompanyBiz.getListByUser(userDTO);
companyList = branchCompany.stream().map(BranchCompany::getId).collect(Collectors.toList());
if(vehiclePlanDto.getParkBranchCompanyId() != null) {
if(companyList.size() > 0) {
if(companyList.contains(vehiclePlanDto.getParkBranchCompanyId())) {
if (vehiclePlanDto.getParkBranchCompanyId() != null) {
if (companyList.size() > 0) {
if (companyList.contains(vehiclePlanDto.getParkBranchCompanyId())) {
companyList.clear();
companyList.add(vehiclePlanDto.getParkBranchCompanyId());
} else {
......@@ -1388,27 +1414,27 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
}
//删除车辆信息
public RestResponse delVehicleById(String id){
Vehicle vehicle=new Vehicle();
public RestResponse delVehicleById(String id) {
Vehicle vehicle = new Vehicle();
vehicle.setId(id);
vehicle.setIsDel(1);
updateSelectiveById(vehicle);
return RestResponse.suc();
return RestResponse.suc();
}
public List<String> getHourList(String result) {
StringBuffer stringBuffer = new StringBuffer();
if(result.length() < 24) {//如果不足24位补0
for(int i = 0; i < 24 - result.length(); i++) {
if (result.length() < 24) {//如果不足24位补0
for (int i = 0; i < 24 - result.length(); i++) {
stringBuffer.append("0");
}
log.info(stringBuffer.toString());
}
stringBuffer.append(result);
List<String> list = new ArrayList<>(24);
for(int i = 0 ; i < stringBuffer.toString().length(); i++) {
if("1".equals(stringBuffer.toString().charAt(i)+"")) {
for (int i = 0; i < stringBuffer.toString().length(); i++) {
if ("1".equals(stringBuffer.toString().charAt(i) + "")) {
list.add(i, "1");
} else {
list.add(i, "0");
......@@ -1418,6 +1444,6 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
}
public List<String> findExistVehicleIds() {
return mapper.findExistVehicleIds();
return mapper.findExistVehicleIds();
}
}
......@@ -41,19 +41,19 @@ public class VehicleBookHourInfoBiz extends BaseBiz<VehicleBookHourInfoMapper, V
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, Boolean notCheckTimeLegal) {
public Map<String, Integer> getPredictableHours(String bookStartDate, String bookEndDate, Boolean notCheckTimeLegal) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date startDate = null;
Date endDate = null;
try{
try {
startDate = simpleDateFormat.parse(bookStartDate);
endDate = simpleDateFormat.parse(bookEndDate);
}catch (Exception e) {
} catch (Exception e) {
e.printStackTrace();
}
//判定时间是否合法
if(!Boolean.TRUE.equals(notCheckTimeLegal)) {
if (!Boolean.TRUE.equals(notCheckTimeLegal)) {
if (bookStartDate.compareTo(DateTime.now().toString(DEFAULT_DATE_TIME_FORMATTER)) < 0) {
throw new BaseException(ResultCode.ONLY_BOOK_FROM_TODAY);
}
......@@ -78,17 +78,17 @@ public class VehicleBookHourInfoBiz extends BaseBiz<VehicleBookHourInfoMapper, V
}
DateTime startDay = DateTime.parse(DateTime.parse(bookStartDate, DEFAULT_DATE_TIME_FORMATTER).toString(DATE_TIME_FORMATTER), DATE_TIME_FORMATTER);
DateTime endDay = DateTime.parse(DateTime.parse(bookEndDate, DEFAULT_DATE_TIME_FORMATTER).toString(DATE_TIME_FORMATTER), DATE_TIME_FORMATTER);
if(startPredictableHour == 0) { //如果是0点就直接预订全天
if (startPredictableHour == 0) { //如果是0点就直接预订全天
startPredictableHour = 16777215;
}
if(DateTime.parse(bookStartDate, DEFAULT_DATE_TIME_FORMATTER).toString(DATE_TIME_FORMATTER).equals(DateTime.parse(bookEndDate, DEFAULT_DATE_TIME_FORMATTER).toString(DATE_TIME_FORMATTER))) {//同一天预定
if (DateTime.parse(bookStartDate, DEFAULT_DATE_TIME_FORMATTER).toString(DATE_TIME_FORMATTER).equals(DateTime.parse(bookEndDate, DEFAULT_DATE_TIME_FORMATTER).toString(DATE_TIME_FORMATTER))) {//同一天预定
//如果开始时间是0点开始
predictableHours.put(DateTime.parse(bookStartDate, DEFAULT_DATE_TIME_FORMATTER).toString(DATE_TIME_FORMATTER), startPredictableHour & endPredictableHour);
} else { //非同一天开始
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);
}
if(endDay.getMillis() - startDay.getMillis() > 24 * 3600 * 1000 ){ //
if (endDay.getMillis() - startDay.getMillis() > 24 * 3600 * 1000) { //
for (DateTime curDate = startDay.plusDays(1); curDate.compareTo(endDay) < 0; curDate = curDate.plusDays(1)) {
String curDateStr = curDate.toString(DATE_TIME_FORMATTER);
//全天预定
......@@ -115,14 +115,14 @@ public class VehicleBookHourInfoBiz extends BaseBiz<VehicleBookHourInfoMapper, V
@Transactional
@CacheClear(key = "vehicle.hourInfo")
public ObjectRestResponse save(VehicleBookHourInfoDto vehicleBookHourInfoDto) {
if(vehicleBookHourInfoDto == null) {
if (vehicleBookHourInfoDto == null) {
return ObjectRestResponse.paramIsEmpty();
}
List<VehicleBookHourInfo> vehicleBookHourInfos = mapper.selectByVehicleAndDate(vehicleBookHourInfoDto);
//有数据直接更新
if(vehicleBookHourInfos.size() >=1) {
for(VehicleBookHourInfo vehicleBookHourInfo : vehicleBookHourInfos) {
if(vehicleBookHourInfo.getBookedHour().equals(vehicleBookHourInfoDto.getBookedHour())) {
if (vehicleBookHourInfos.size() >= 1) {
for (VehicleBookHourInfo vehicleBookHourInfo : vehicleBookHourInfos) {
if (vehicleBookHourInfo.getBookedHour().equals(vehicleBookHourInfoDto.getBookedHour())) {
return ObjectRestResponse.createFailedResult(ResCode.VEHICLE_IS_BOOKED_TODAY.getCode(), ResCode.VEHICLE_IS_BOOKED_TODAY.getDesc());
} else {
vehicleBookHourInfo.setBookedHour(vehicleBookHourInfo.getBookedHour() | vehicleBookHourInfoDto.getBookedHour());
......@@ -138,6 +138,7 @@ public class VehicleBookHourInfoBiz extends BaseBiz<VehicleBookHourInfoMapper, V
/**
* 删除预定车辆小时记录信息
*
* @param vehicleId 车辆Id
* @param dateList 日期列表
* @return
......@@ -145,7 +146,7 @@ public class VehicleBookHourInfoBiz extends BaseBiz<VehicleBookHourInfoMapper, V
@Transactional
@CacheClear(key = "vehicle.hourInfo")
public ObjectRestResponse delete(String vehicleId, List<String> dateList) {
if(StringUtils.isBlank(vehicleId) || dateList.size() <= 0) {
if (StringUtils.isBlank(vehicleId) || dateList.size() <= 0) {
return ObjectRestResponse.paramIsEmpty();
}
Map<String, Object> param = Maps.newHashMap();
......@@ -156,15 +157,15 @@ public class VehicleBookHourInfoBiz extends BaseBiz<VehicleBookHourInfoMapper, V
return ObjectRestResponse.succ();
}
public ObjectRestResponse checkBookHourInfo() {
public ObjectRestResponse checkBookHourInfo() {
List<VehicleBookHourInfoDto> vehicleBookHourInfos = new ArrayList<>();
List<VehicleBookRecord> list = vehicleBookRecordBiz.selectListAll();
if(CollectionUtils.isNotEmpty(list)) {
for(VehicleBookRecord vehicleBookRecord : list) {
if (CollectionUtils.isNotEmpty(list)) {
for (VehicleBookRecord vehicleBookRecord : list) {
VehicleDepartureLogVo vehicleDepartureLog = vehicleDepartureService.getByRecordId(vehicleBookRecord.getId());
if((vehicleDepartureLog == null || vehicleDepartureLog.getState() != 1) && (vehicleBookRecord.getStatus() == 2 || vehicleBookRecord.getStatus() == 1)) { //未出车或未还车
if ((vehicleDepartureLog == null || vehicleDepartureLog.getState() != 1) && (vehicleBookRecord.getStatus() == 2 || vehicleBookRecord.getStatus() == 1)) { //未出车或未还车
Map<String, Integer> map = getPredictableHours(new DateTime(vehicleBookRecord.getBookStartDate()).toString(DEFAULT_DATE_TIME_FORMATTER), new DateTime(vehicleBookRecord.getBookEndDate()).toString(DEFAULT_DATE_TIME_FORMATTER), Boolean.TRUE);
for(Map.Entry<String, Integer> entry : map.entrySet()) {
for (Map.Entry<String, Integer> entry : map.entrySet()) {
VehicleBookHourInfoDto vehicleBookHourInfoDto = new VehicleBookHourInfoDto();
vehicleBookHourInfoDto.setVehicleId(vehicleBookRecord.getVehicleId());
vehicleBookHourInfoDto.setYearMonthDay(entry.getKey());
......@@ -204,10 +205,10 @@ public class VehicleBookHourInfoBiz extends BaseBiz<VehicleBookHourInfoMapper, V
}
public static void main(String[] args) throws Exception{
public static void main(String[] args) throws Exception {
VehicleBookHourInfoBiz vehicleBookHourInfoBiz = new VehicleBookHourInfoBiz();
Map<String, Integer> map = vehicleBookHourInfoBiz.getPredictableHours("2019-08-26 10:00:00", "2019-08-27 10:00:00", Boolean.TRUE);
for(Map.Entry<String, Integer> entry : map.entrySet()) {
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey());
System.out.println(entry.getValue());
}
......
......@@ -29,7 +29,7 @@ public class VehicleBookInfoBiz extends BaseBiz<VehicleBookInfoMapper, VehicleBo
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;
public static final int MONTH_INTERVAL=2;
public static final int MONTH_INTERVAL = 2;
@Autowired
private RedisTemplate customRedisTemplate;
......@@ -40,14 +40,14 @@ public class VehicleBookInfoBiz extends BaseBiz<VehicleBookInfoMapper, VehicleBo
*/
@Scheduled(cron = "0 0 0 1 * ?")//每月1号0点触发
@Transactional
public void transfer2HistoryTb(){
public void transfer2HistoryTb() {
//获取表格名称
String tbName = getTbNameNow();
DateTime now = DateTime.now();//当前获取的时间为标准
log.info("开始预定信息迁移至历史表的定时任务。");
//每月初将上月数据复制到历史表
Boolean needRun= copyDataLastMoth(now,tbName);
if(needRun) {
Boolean needRun = copyDataLastMoth(now, tbName);
if (needRun) {
//每月初将上上月数据从当前信息表中删除
delDataTheMonthBeforeLast(now, tbName);
}
......@@ -57,14 +57,14 @@ public class VehicleBookInfoBiz extends BaseBiz<VehicleBookInfoMapper, VehicleBo
* 获取上月数据,并复制到历史表
*/
@Transactional
public Boolean copyDataLastMoth(DateTime now,String tbName){
public Boolean copyDataLastMoth(DateTime now, String tbName) {
String lastMonthStr = now.plusMonths(-1).toString(YEARMONTH_DATE_TIME_FORMATTER);
String redisKey = RedisKey.DEL_BOOK_INFO_LOCK_PREFIX +lastMonthStr;
String redisKey = RedisKey.DEL_BOOK_INFO_LOCK_PREFIX + lastMonthStr;
Boolean hasSuc = customRedisTemplate.opsForValue().setIfAbsent(redisKey,String.valueOf(DateTime.now().getMillis()));
if(hasSuc){//设置1天后过期
customRedisTemplate.expire(redisKey,1, TimeUnit.DAYS);
}else{
Boolean hasSuc = customRedisTemplate.opsForValue().setIfAbsent(redisKey, String.valueOf(DateTime.now().getMillis()));
if (hasSuc) {//设置1天后过期
customRedisTemplate.expire(redisKey, 1, TimeUnit.DAYS);
} else {
log.info("[预定信息迁移]乐观锁获取失败,该线程不执行任务。");
return Boolean.FALSE;
}
......@@ -78,9 +78,9 @@ public class VehicleBookInfoBiz extends BaseBiz<VehicleBookInfoMapper, VehicleBo
params.put("pageStart", (curPageNo - 1) * COPY_BATCH_SIZE);
params.put("pageSize", COPY_BATCH_SIZE);
vehicleBookInfoList = mapper.getByPage4YearMonth(params);
if(CollectionUtils.isNotEmpty(vehicleBookInfoList)){
if (CollectionUtils.isNotEmpty(vehicleBookInfoList)) {
//插入数据到历史表
for(VehicleBookInfo vehicleBookInfo : vehicleBookInfoList){
for (VehicleBookInfo vehicleBookInfo : vehicleBookInfoList) {
Map<String, Object> insertHisParams = Maps.newHashMap();
insertHisParams.put("tbName", tbName);
insertHisParams.put("id", vehicleBookInfo.getId());
......@@ -91,17 +91,18 @@ public class VehicleBookInfoBiz extends BaseBiz<VehicleBookInfoMapper, VehicleBo
}
}
curPageNo++;
log.info("【复制上月预定信息至历史表中】,当前复制页【"+curPageNo+"】,页大小【"+COPY_BATCH_SIZE+"】");
}while(CollectionUtils.isNotEmpty(vehicleBookInfoList));
log.info("复制上月预定信息至历史表中完成,总页数【"+(curPageNo-1)+"】");
; return Boolean.TRUE;
log.info("【复制上月预定信息至历史表中】,当前复制页【" + curPageNo + "】,页大小【" + COPY_BATCH_SIZE + "】");
} while (CollectionUtils.isNotEmpty(vehicleBookInfoList));
log.info("复制上月预定信息至历史表中完成,总页数【" + (curPageNo - 1) + "】");
;
return Boolean.TRUE;
}
/**
* 删除上上月数据
*/
@Transactional
public void delDataTheMonthBeforeLast(DateTime now,String tbName){
public void delDataTheMonthBeforeLast(DateTime now, String tbName) {
String theMonthBeforeLastStr = now.plusMonths(-2).toString(YEARMONTH_DATE_TIME_FORMATTER);
Integer effected = 0;
Integer total = 0;
......@@ -110,21 +111,21 @@ public class VehicleBookInfoBiz extends BaseBiz<VehicleBookInfoMapper, VehicleBo
params.put("batchSize", DEL_BATCH_SIZE);
do {
effected = mapper.del4YearMoth(params);
total+=effected;
log.info("开始删除预定信息数据,删除总数【"+total+"】");
}while(effected!=0);
total += effected;
log.info("开始删除预定信息数据,删除总数【" + total + "】");
} while (effected != 0);
log.info("删除预定信息数据完成");
}
private String getTbNameNow(){
return TB_NAME_PREFIX+ DateTime.now().toString(YEAR_DATE_TIME_FORMATTER);
private String getTbNameNow() {
return TB_NAME_PREFIX + DateTime.now().toString(YEAR_DATE_TIME_FORMATTER);
}
/**
* 创建当年相关表格
*/
private void createTbIfNotExists(String tbName){
private void createTbIfNotExists(String tbName) {
mapper.createTbIfNotExists(tbName);
}
......
......@@ -201,7 +201,7 @@ public class VehicleBookRecordBiz extends BaseBiz<VehicleBookRecordMapper, Vehic
PageDataVO<VehicleBookRecordVo> vehicleBookRecordVoPageDataVO = PageDataVO.pageInfo(vehicleBookRecordVoPageInfo);
vehicleBookRecordVoPageDataVO.setPageNum(pageNo);
vehicleBookRecordVoPageDataVO.setPageSize(pageSize);
vehicleBookRecordVoPageDataVO.setTotalCount((long)vehicleBookRecordVoPageInfo.getList().size());
vehicleBookRecordVoPageDataVO.setTotalCount((long) vehicleBookRecordVoPageInfo.getList().size());
vehicleBookRecordVoPageDataVO.setTotalPage((vehicleBookRecordVoPageInfo.getList().size() + pageSize - 1) / pageSize);
vehicleBookRecordVoPageDataVO.setData(getData(vehicleBookRecordVoPageInfo.getList(), pageNo, pageSize));
return RestResponse.suc(vehicleBookRecordVoPageDataVO);
......@@ -212,7 +212,7 @@ public class VehicleBookRecordBiz extends BaseBiz<VehicleBookRecordMapper, Vehic
}
public void removeStatus2(List<VehicleBookRecordVo> list) {
if(list != null && list.size() > 0) {
if (list != null && list.size() > 0) {
Iterator<VehicleBookRecordVo> iterator = list.iterator();
while (iterator.hasNext()) {
if (iterator.next().getVehicleDepartureLogVo() != null) {
......@@ -360,29 +360,30 @@ public class VehicleBookRecordBiz extends BaseBiz<VehicleBookRecordMapper, Vehic
/**
* 检验数据库预定记录日期是否和时间,日期表中的二进制数据一致
*
* @return
*/
public ObjectRestResponse checkDateInvalide(){
public ObjectRestResponse checkDateInvalide() {
List<VehicleBookRecord> list = mapper.selectAll();
List<VehicleBookRecord> unRightList = new ArrayList<>();
if(list != null && list.size() > 0) {
for(VehicleBookRecord vehicleBookRecord : list) {
if (list != null && list.size() > 0) {
for (VehicleBookRecord vehicleBookRecord : list) {
log.info("vehicleBookRecord = {}", vehicleBookRecord);
Map<String, Integer> map = vehicleBookHourInfoBiz.getPredictableHours(DateUtil.dateToStr(vehicleBookRecord.getBookStartDate(), "yyyy-MM-dd HH:mm:ss"), DateUtil.dateToStr(vehicleBookRecord.getBookStartDate(), "yyyy-MM-dd HH:mm:ss"), Boolean.TRUE);
log.info("转换为时间二进制:map = {}", map);
//检验数据有效性
if(vehicleBookRecord.getStatus() == 2) {
if (vehicleBookRecord.getStatus() == 2) {
VehicleDepartureLogVo vehicleDepartureLog = vehicleDepartureService.getByRecordId(vehicleBookRecord.getId());
if(vehicleDepartureLog == null || vehicleDepartureLog.getState() != 1) { //未出车或未还车
for(Map.Entry<String, Integer> entry : map.entrySet()) {
if (vehicleDepartureLog == null || vehicleDepartureLog.getState() != 1) { //未出车或未还车
for (Map.Entry<String, Integer> entry : map.entrySet()) {
VehicleBookHourInfoDto vehicleBookHourInfoDto = new VehicleBookHourInfoDto();
vehicleBookHourInfoDto.setVehicleId(vehicleBookRecord.getVehicleId());
vehicleBookHourInfoDto.setYearMonthDay(entry.getKey());
List<VehicleBookHourInfo> vehicleBookHourInfos = vehicleBookHourInfoBiz.selectByVehicleAndDate(vehicleBookHourInfoDto);
log.info("预定时间信息:vehicleBookHourInfos = {}", vehicleBookHourInfos);
if(vehicleBookHourInfos != null && vehicleBookHourInfos.size() > 0) {
if (vehicleBookHourInfos != null && vehicleBookHourInfos.size() > 0) {
//检验数据是否存在
if((vehicleBookHourInfos.get(0).getBookedHour() & entry.getValue()) == entry.getValue()) {
if ((vehicleBookHourInfos.get(0).getBookedHour() & entry.getValue()) == entry.getValue()) {
log.info("时间正确,已经存在");
} else {
log.info("时间不正确");
......
......@@ -86,7 +86,7 @@ public class VehicleDepartureService extends BaseBiz<VehicleDepartureLogMapper,
} else {
vehicleDepartureLog.setUpdateTime(new Date());
VehicleDepartureLog oldValue = mapper.selectByPrimaryKey(vehicleDepartureLog);
if(oldValue != null) {
if (oldValue != null) {
log.info("更新出行记录: vehicleDepartureLog = {}", oldValue);
BeanUtil.copyProperties(vehicleDepartureLog, oldValue, CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));
oldValue.setUpdateTime(new Date());
......@@ -104,7 +104,6 @@ public class VehicleDepartureService extends BaseBiz<VehicleDepartureLogMapper,
}
public ObjectRestResponse findOne(Integer vid) throws Exception {
Example exm = Example.builder(VehicleDepartureLog.class)
.where(WeekendSqls.<VehicleDepartureLog>custom()
......@@ -116,7 +115,7 @@ public class VehicleDepartureService extends BaseBiz<VehicleDepartureLogMapper,
List<VehicleDepartureLog> vehicleDepartureLogs = mapper.selectByExample(exm);
if (vehicleDepartureLogs.size() == 1) {
VehicleDepartureLog vehicleDepartureLog = vehicleDepartureLogs.get(0);
if (vehicleDepartureLog!=null) {
if (vehicleDepartureLog != null) {
return ObjectRestResponse.succ(vehicleDepartureLog);
}
}
......@@ -124,11 +123,11 @@ public class VehicleDepartureService extends BaseBiz<VehicleDepartureLogMapper,
}
@Transactional
public ObjectRestResponse collect(VehicleDepartureLog vdl){
vdl.setArrivalTime(new Date());
vdl.setState(1);
updateSelectiveById(vdl);
return ObjectRestResponse.succ();
public ObjectRestResponse collect(VehicleDepartureLog vdl) {
vdl.setArrivalTime(new Date());
vdl.setState(1);
updateSelectiveById(vdl);
return ObjectRestResponse.succ();
}
......
......@@ -87,7 +87,7 @@ public class VehicleModelBiz extends BaseBiz<VehicleModelMapper, VehicleModel> {
return ObjectRestResponse.succ(list);
}
Set<Integer> set = new HashSet<>();
RandomUtil.randomSet(list.size(), number, set);
RandomUtil.randomSet(list.size(), number, set, number);
for(Integer i : set) {
resultList.add(list.get(i));
}
......
......@@ -46,12 +46,10 @@ public class VehicleJobHandler extends IJobHandler {
List<String> existVehicleIds = vehicleBiz.findExistVehicleIds();
Dictionary dictionary = thirdFeign.findDictionaryByTypeAndCode(DIC_VEHICLE_TYPE, DIC_VEHICLE_CODE);
LocalDate date = LocalDate.now();
date = date.plusMonths(Integer.valueOf(dictionary.getDetail()));
int year = date.getYear();
int nowMonth = date.getMonthValue();
int betweenMonth = Integer.valueOf(dictionary.getDetail()).intValue();
int month = nowMonth + betweenMonth> 12 ? (betweenMonth + nowMonth) - 12 : nowMonth + betweenMonth;
year = month > nowMonth ? year : year + 1;
String yearAndMonth = String.format("%d-%s", year, month>=10?month:"0"+month);
int month = date.getMonthValue();
String yearAndMonth = String.format("%d-%02d", year,month);
XxlJobLogger.log("----查询到的车型ids:【{}】",existVehicleIds);
if (CollectionUtils.isNotEmpty(existVehicleIds)) {
List<VehicleBookInfo> bookInfos = existVehicleIds.stream().map(vehicleId -> {
......
......@@ -11,6 +11,7 @@ import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.rest.BaseController;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.github.wxiaoqi.security.common.vo.GoodDataVO;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.xxfc.platform.vehicle.biz.VehicleCataBiz;
import com.xxfc.platform.vehicle.biz.VehicleModelBiz;
import com.xxfc.platform.vehicle.biz.VehiclePlatCataBiz;
......@@ -133,7 +134,7 @@ public class VehicleModelController extends BaseController<VehicleModelBiz, Vehi
@ApiOperation("车型列表")
@PostMapping(value = "/app/unauth/findVehicleModelPage")
@IgnoreUserToken
public ObjectRestResponse<VehicleModelVo> findVehicleModelPageUnauthfind(
public ObjectRestResponse<PageDataVO<VehicleModelVo>> findVehicleModelPageUnauthfind(
@RequestBody @ApiParam("查询条件") VehicleModelQueryCondition vmqc, HttpServletRequest request) {
if (vmqc.getIsDel() == null) {
vmqc.setIsDel(0);
......
......@@ -380,7 +380,7 @@
</select>
<select id="selectByVehicleId" parameterType="java.lang.String"
resultType="com.xxfc.platform.vehicle.pojo.VehicleBookRecordVo">
resultMap="searchBookRecord">
SELECT v1.*,bc2.name retCompanyName from vehicle_book_record v1
LEFT JOIN branch_company bc2 on v1.ret_company = bc2.id
where v1.vehicle_id = #{vehicleId} and v1.status BETWEEN 1 and 2
......
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