Commit c90816a8 authored by 164003836@qq.con's avatar 164003836@qq.con

车辆信息管理:增加字段

parent 1b695f4b
...@@ -57,7 +57,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> { ...@@ -57,7 +57,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
/** /**
* 每批次最大更、插入车辆最大条目数 * 每批次最大更、插入车辆最大条目数
*/ */
public static final Integer MAX_BATCH_SIZE_VEHICLE = 1000; public static final Integer MAX_BATCH_SIZE_VEHICLE = 1;//使用了悲观锁,不开放批量更新
public Vehicle get(String id){ public Vehicle get(String id){
...@@ -122,31 +122,38 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> { ...@@ -122,31 +122,38 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
} }
for(AddOrUpdateVehicleVo addOrUpdateVehicleVo:addOrUpdateVehicleVoList) { for(AddOrUpdateVehicleVo addOrUpdateVehicleVo:addOrUpdateVehicleVoList) {
//检查所属子公司是否存在
if (addOrUpdateVehicleVo.getSubordinateBranch() == null || addOrUpdateVehicleVo.getSubordinateBranch() == 0 ||
!branchCompanyBiz.exits(addOrUpdateVehicleVo.getSubordinateBranch())) {
return RestResponse.code(ResCode.VEHICLE_INFO_BRANCH_NOT_EXIST.getCode());
}
//检查车牌是否已经存在
Vehicle param = new Vehicle();
if (StringUtils.isNotBlank(addOrUpdateVehicleVo.getNumberPlate())) {
param.setNumberPlate(addOrUpdateVehicleVo.getNumberPlate());
Integer sameNumPlateCount = mapper.selectCount(param);
if (sameNumPlateCount > 0) {
return RestResponse.code(ResCode.VEHICLE_INFO_SAME_NUM_PLATE_EXISTS.getCode());
}
}
//检查常量是否合法
checkIfConstantValid(addOrUpdateVehicleVo);
Vehicle vehicle = new Vehicle(); Vehicle vehicle = new Vehicle();
BeanUtils.copyProperties(vehicle, addOrUpdateVehicleVo); BeanUtils.copyProperties(vehicle, addOrUpdateVehicleVo);
vehicle.setId(UUID.randomUUID().toString()); vehicle.setId(UUID.randomUUID().toString());
// 检查车牌或者编码是否已存在,已存在则返回失败
List<Vehicle> exitsVehicles = lockByCodeAndNumberPlate(addOrUpdateVehicleVo);
if(CollectionUtils.isNotEmpty(exitsVehicles)){
if(addOrUpdateVehicleVo.getCode()!= null &&
addOrUpdateVehicleVo.getCode().equals(exitsVehicles.get(0).getCode())){
return RestResponse.code(ResCode.VEHICLE_INFO_CODE_EXIST.getCode());
}else{
return RestResponse.code(ResCode.VEHICLE_INFO_SAME_NUM_PLATE_EXISTS.getCode());
}
}
mapper.insertSelective(vehicle); mapper.insertSelective(vehicle);
} }
return RestResponse.suc(); return RestResponse.suc();
} }
/**
* 此方法必须置于事务中以使锁生效
* 符合查询条件记录的修改活且相关记录的锁获取操作将被锁定
* @param addOrUpdateVehicleVo
* @return 锁定成功返回
*/
private List<Vehicle> lockByCodeAndNumberPlate(AddOrUpdateVehicleVo addOrUpdateVehicleVo){
if(StringUtils.isBlank(addOrUpdateVehicleVo.getNumberPlate()) &&
addOrUpdateVehicleVo.getCode() == null){
return null;
}
List<Vehicle> vehicles = mapper.lockByCodeOrNumberPlate(addOrUpdateVehicleVo);
return vehicles;
}
/** /**
* 修改汽车信息 * 修改汽车信息
...@@ -160,24 +167,23 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> { ...@@ -160,24 +167,23 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
} }
for(AddOrUpdateVehicleVo addOrUpdateVehicleVo:addOrUpdateVehicleVoList){ for(AddOrUpdateVehicleVo addOrUpdateVehicleVo:addOrUpdateVehicleVoList){
//检查所属子公司是否存在
if (addOrUpdateVehicleVo.getSubordinateBranch() == null || addOrUpdateVehicleVo.getSubordinateBranch() == 0 ||
!branchCompanyBiz.exits(addOrUpdateVehicleVo.getSubordinateBranch())) {
return RestResponse.code(ResCode.VEHICLE_INFO_BRANCH_NOT_EXIST.getCode());
}
//检查车牌是否已经存在
Vehicle param = new Vehicle();
if (StringUtils.isNotBlank(addOrUpdateVehicleVo.getNumberPlate())) {
param.setNumberPlate(addOrUpdateVehicleVo.getNumberPlate());
List<Vehicle> vehicles= mapper.select(param);
if (vehicles.size() > 0 && !StringUtils.equals(addOrUpdateVehicleVo.getId(),vehicles.get(0).getId())) {
return RestResponse.code(ResCode.VEHICLE_INFO_SAME_NUM_PLATE_EXISTS.getCode());
}
}
//检查常量是否合法
checkIfConstantValid(addOrUpdateVehicleVo);
Vehicle vehicle = new Vehicle(); Vehicle vehicle = new Vehicle();
BeanUtils.copyProperties(vehicle, addOrUpdateVehicleVo); BeanUtils.copyProperties(vehicle, addOrUpdateVehicleVo);
//悲观锁,检查是否已存在车牌或编码
List<Vehicle> exitsVehicles = lockByCodeAndNumberPlate(addOrUpdateVehicleVo);
if(CollectionUtils.isNotEmpty(exitsVehicles)){
for(Vehicle exitsVehicle:exitsVehicles){
if(exitsVehicle.getId().equals(addOrUpdateVehicleVo.getId())){
continue;
}
if(addOrUpdateVehicleVo.getCode()!= null &&
addOrUpdateVehicleVo.getCode().equals(exitsVehicles.get(0).getCode())){
return RestResponse.code(ResCode.VEHICLE_INFO_CODE_EXIST.getCode());
}else{
return RestResponse.code(ResCode.VEHICLE_INFO_SAME_NUM_PLATE_EXISTS.getCode());
}
}
}
mapper.updateByPrimaryKeySelective(vehicle); mapper.updateByPrimaryKeySelective(vehicle);
} }
return RestResponse.suc(); return RestResponse.suc();
......
...@@ -7,6 +7,7 @@ import java.util.Map; ...@@ -7,6 +7,7 @@ import java.util.Map;
public enum ConstantType { public enum ConstantType {
VEHICLE_BRAND(1,"车辆品牌"), VEHICLE_BRAND(1,"车辆品牌"),
VEHICLE_USE(2,"车辆用途"), VEHICLE_USE(2,"车辆用途"),
INSURANCE_COMPANY(3,"保险公司"),
; ;
/** /**
......
...@@ -13,6 +13,7 @@ public enum ResCode { ...@@ -13,6 +13,7 @@ public enum ResCode {
//车辆信息相关返回码-车辆信息 //车辆信息相关返回码-车辆信息
VEHICLE_INFO_SAME_NUM_PLATE_EXISTS(102001,"该车牌车辆已经存在"), VEHICLE_INFO_SAME_NUM_PLATE_EXISTS(102001,"该车牌车辆已经存在"),
VEHICLE_INFO_BRANCH_NOT_EXIST(102002,"分公司信息非法"), VEHICLE_INFO_BRANCH_NOT_EXIST(102002,"分公司信息非法"),
VEHICLE_INFO_CODE_EXIST(102003,"车辆编码已存在"),
//车辆信息相关返回码-预定申请信息 //车辆信息相关返回码-预定申请信息
VEHICLE_BOOKED_RECORD_ALREADY_CHANGED(103001,"车辆预定申请已被审批,请刷新后继续操作"), VEHICLE_BOOKED_RECORD_ALREADY_CHANGED(103001,"车辆预定申请已被审批,请刷新后继续操作"),
......
...@@ -4,6 +4,8 @@ import lombok.Data; ...@@ -4,6 +4,8 @@ import lombok.Data;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Id; import javax.persistence.Id;
import java.util.Date;
@Data @Data
public class Vehicle { public class Vehicle {
/** /**
...@@ -50,4 +52,54 @@ public class Vehicle { ...@@ -50,4 +52,54 @@ public class Vehicle {
*/ */
private String remark; private String remark;
/**
* 车架号
*/
private String vin;
/**
* 里程数
*/
private Integer mileage;
/**
* 保险公司,见常量表
*/
private Integer insuranceCompany;
/**
* 保险单号
*/
private String insuranceNo;
/**
* 保险开始时间
*/
private Date insuranceStartDate;
/**
* 保险结束时间
*/
private Date insuranceEndDate;
/**
* 年审时间
*/
private Date annualVerificationDate;
/**
* 保养时间
*/
private Date maintenanceDate;
/**
* 保养里程数
*/
private Integer maintenanceMileage;
/**
* 是否违章
*/
private Integer haveViolation;
} }
\ No newline at end of file
package com.xinxincaravan.caravan.vehicle.mapper; package com.xinxincaravan.caravan.vehicle.mapper;
import com.xinxincaravan.caravan.vehicle.entity.Vehicle; import com.xinxincaravan.caravan.vehicle.entity.Vehicle;
import com.xinxincaravan.caravan.vehicle.vo.AddOrUpdateVehicleVo;
import com.xinxincaravan.caravan.vehicle.vo.QueryVehicleVo; import com.xinxincaravan.caravan.vehicle.vo.QueryVehicleVo;
import tk.mybatis.mapper.common.Mapper; import tk.mybatis.mapper.common.Mapper;
...@@ -12,4 +13,12 @@ public interface VehicleMapper extends Mapper<Vehicle> { ...@@ -12,4 +13,12 @@ public interface VehicleMapper extends Mapper<Vehicle> {
public List<QueryVehicleVo> getByPage(Map<String,Object> params); public List<QueryVehicleVo> getByPage(Map<String,Object> params);
public int updateStatusById(Map<String,Object> params); public int updateStatusById(Map<String,Object> params);
/**
* 锁定相关编码 或 车牌 的行
* @param addOrUpdateVehicleVo
* @return
*/
public List<Vehicle> lockByCodeOrNumberPlate(AddOrUpdateVehicleVo addOrUpdateVehicleVo);
} }
\ No newline at end of file
...@@ -4,6 +4,8 @@ import lombok.Data; ...@@ -4,6 +4,8 @@ import lombok.Data;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Id; import javax.persistence.Id;
import java.util.Date;
@Data @Data
public class AddOrUpdateVehicleVo { public class AddOrUpdateVehicleVo {
...@@ -18,6 +20,11 @@ public class AddOrUpdateVehicleVo { ...@@ -18,6 +20,11 @@ public class AddOrUpdateVehicleVo {
*/ */
private Integer status; private Integer status;
/**
* 车辆编号,0-没有
*/
private Integer code;
/** /**
* 车牌号,空字符串-没有 * 车牌号,空字符串-没有
*/ */
...@@ -46,5 +53,55 @@ public class AddOrUpdateVehicleVo { ...@@ -46,5 +53,55 @@ public class AddOrUpdateVehicleVo {
*/ */
private String remark; private String remark;
/**
* 车架号
*/
private String vin;
/**
* 里程数
*/
private Integer mileage;
/**
* 保险公司,见常量表
*/
private Integer insuranceCompany;
/**
* 保险单号
*/
private String insuranceNo;
/**
* 保险开始时间
*/
private Date insuranceStartDate;
/**
* 保险结束时间
*/
private Date insuranceEndDate;
/**
* 年审时间
*/
private Date annualVerificationDate;
/**
* 保养时间
*/
private Date maintenanceDate;
/**
* 保养里程数
*/
private Integer maintenanceMileage;
/**
* 是否违章
*/
private Integer haveViolation;
} }
\ No newline at end of file
...@@ -56,4 +56,54 @@ public class QueryVehicleVo { ...@@ -56,4 +56,54 @@ public class QueryVehicleVo {
private Date updateTime; private Date updateTime;
/**
* 车架号
*/
private String vin;
/**
* 里程数
*/
private Integer mileage;
/**
* 保险公司,见常量表
*/
private Integer insuranceCompany;
/**
* 保险单号
*/
private String insuranceNo;
/**
* 保险开始时间
*/
private Date insuranceStartDate;
/**
* 保险结束时间
*/
private Date insuranceEndDate;
/**
* 年审时间
*/
private Date annualVerificationDate;
/**
* 保养时间
*/
private Date maintenanceDate;
/**
* 保养里程数
*/
private Integer maintenanceMileage;
/**
* 是否违章
*/
private Integer haveViolation;
} }
\ No newline at end of file
...@@ -2,6 +2,8 @@ package com.xinxincaravan.caravan.vehicle.vo; ...@@ -2,6 +2,8 @@ package com.xinxincaravan.caravan.vehicle.vo;
import lombok.Data; import lombok.Data;
import java.util.Date;
@Data @Data
public class VehiclePageQueryVo { public class VehiclePageQueryVo {
...@@ -56,4 +58,132 @@ public class VehiclePageQueryVo { ...@@ -56,4 +58,132 @@ public class VehiclePageQueryVo {
private Integer limit; private Integer limit;
/**
* 车架号
*/
private String vin;
/**
* 里程数
*/
private Integer mileageRangeStart;
/**
* 里程数
*/
private Integer mileageRangeEnd;
/**
* 保险公司,见常量表
*/
private Integer insuranceCompany;
/**
* 保险结束时间查询范围 - 开始
*/
private Date insuranceDateRangeStart;
/**
* 保险结束时间查询范围 - 结束
*/
private Date insuranceDateRangeEnd;
/**
* 年审日期查询范围 - 开始
*/
private Date aVRangeDateStart;
/**
* 年审日期查询范围 - 结束
*/
private Date aVRangeDateEnd;
/**
* 保养日期查询范围 - 开始
*/
private Date mRangeDateStart;
/**
* 保养日期查询范围 - 结束
*/
private Date mRangeDateEnd;
/**
* 是否违章
*/
private Integer haveViolation;
public Integer getMileageRangeStart() {
return mileageRangeStart;
}
public void setMileageRangeStart(Integer mileageRangeStart) {
this.mileageRangeStart = mileageRangeStart;
}
public Integer getMileageRangeEnd() {
return mileageRangeEnd;
}
public void setMileageRangeEnd(Integer mileageRangeEnd) {
this.mileageRangeEnd = mileageRangeEnd;
}
public Integer getInsuranceCompany() {
return insuranceCompany;
}
public void setInsuranceCompany(Integer insuranceCompany) {
this.insuranceCompany = insuranceCompany;
}
public Date getInsuranceDateRangeStart() {
return insuranceDateRangeStart;
}
public void setInsuranceDateRangeStart(Date insuranceDateRangeStart) {
this.insuranceDateRangeStart = insuranceDateRangeStart;
}
public Date getInsuranceDateRangeEnd() {
return insuranceDateRangeEnd;
}
public void setInsuranceDateRangeEnd(Date insuranceDateRangeEnd) {
this.insuranceDateRangeEnd = insuranceDateRangeEnd;
}
public Date getaVRangeDateStart() {
return aVRangeDateStart;
}
public void setaVRangeDateStart(Date aVRangeDateStart) {
this.aVRangeDateStart = aVRangeDateStart;
}
public Date getaVRangeDateEnd() {
return aVRangeDateEnd;
}
public void setaVRangeDateEnd(Date aVRangeDateEnd) {
this.aVRangeDateEnd = aVRangeDateEnd;
}
public Date getmRangeDateStart() {
return mRangeDateStart;
}
public void setmRangeDateStart(Date mRangeDateStart) {
this.mRangeDateStart = mRangeDateStart;
}
public Date getmRangeDateEnd() {
return mRangeDateEnd;
}
public void setmRangeDateEnd(Date mRangeDateEnd) {
this.mRangeDateEnd = mRangeDateEnd;
}
} }
<?xml version="1.0" encoding="UTF-8" ?> <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.xinxincaravan.caravan.vehicle.mapper.VehicleMapper" > <mapper namespace="com.xinxincaravan.caravan.vehicle.mapper.VehicleMapper" >
<resultMap id="BaseResultMap" type="com.xinxincaravan.caravan.vehicle.entity.Vehicle" >
<!--
WARNING - @mbg.generated
-->
<id column="id" property="id" jdbcType="VARCHAR" />
<result column="code" property="code" jdbcType="INTEGER" />
<result column="status" property="status" jdbcType="INTEGER" />
<result column="number_plate" property="numberPlate" jdbcType="VARCHAR" />
<result column="brand" property="brand" jdbcType="INTEGER" />
<result column="subordinate_branch" property="subordinateBranch" jdbcType="INTEGER" />
<result column="use_type" property="useType" jdbcType="INTEGER" />
<result column="remark" property="remark" jdbcType="VARCHAR" />
<result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
<result column="update_time" property="updateTime" jdbcType="TIMESTAMP" />
</resultMap>
<update id="updateStatusById" parameterType="java.util.Map" > <update id="updateStatusById" parameterType="java.util.Map" >
update vehicle set status = #{status} where id in update vehicle set status = #{status} where id in
...@@ -36,6 +21,16 @@ ...@@ -36,6 +21,16 @@
v.use_type, v.use_type,
v.remark, v.remark,
v.create_time, v.create_time,
v.vin,
v.mileage,
v.insurance_company,
v.insurance_no,
v.insurance_start_date,
v.insurance_end_date,
v.annual_verification_date,
v.maintenance_date,
v.maintenance_mileage,
v.have_violation,
v.update_time v.update_time
<if test=" yearMonthAndParam !=null "> <if test=" yearMonthAndParam !=null ">
,vbi.booked_date ,vbi.booked_date
...@@ -48,8 +43,41 @@ ...@@ -48,8 +43,41 @@
left join branch_company bc on v.`subordinate_branch` = bc.id left join branch_company bc on v.`subordinate_branch` = bc.id
where where
1=1 1=1
<if test="haveViolation !=null">
and v.have_violation = #{haveViolation}
</if>
<if test="mRangeDateEnd !=null">
and v.maintenance_date &lt;= #{mRangeDateEnd}
</if>
<if test="mRangeDateStart !=null">
and v.maintenance_date &gt;= #{mRangeDateStart}
</if>
<if test="aVRangeDateStart !=null">
and v.annual_verification_date &lt;= #{aVRangeDateEnd}
</if>
<if test="aVRangeDateEnd !=null">
and v.annual_verification_date &gt;= #{aVRangeDateStart}
</if>
<if test="insuranceDateRangeStart !=null">
and v.insurance_end_date &lt;= #{insuranceDateRangeEnd}
</if>
<if test="insuranceDateRangeEnd !=null">
and v.insurance_end_date &gt;= #{insuranceDateRangeStart}
</if>
<if test="insuranceCompany !=null">
and v.insurance_company = #{insuranceCompany}
</if>
<if test="mileageRangeEnd !=null">
and v.mileage &lt;= #{mileageRangeEnd}
</if>
<if test="mileageRangeStart !=null">
and v.mileage &gt;= #{mileageRangeStart}
</if>
<if test="vin !=null and vin != ''">
and v.vin = #{vin}
</if>
<if test="subordinateBranch !=null"> <if test="subordinateBranch !=null">
and v.subordinate_branch = #{subordinateBranch} and v.subordinate_branch = #{subordinateBranch}
</if> </if>
<if test="code !=null"> <if test="code !=null">
and v.code = #{code} and v.code = #{code}
...@@ -78,4 +106,32 @@ ...@@ -78,4 +106,32 @@
order by v.code order by v.code
</select> </select>
<select id="lockByCodeOrNumberPlate" resultType="com.xinxincaravan.caravan.vehicle.entity.Vehicle" parameterType="com.xinxincaravan.caravan.vehicle.vo.AddOrUpdateVehicleVo">
select
v.`id`,
v.`code`,
v.`status`,
v.number_plate,
v.brand,
v.subordinate_branch,
v.use_type,
v.remark,
v.create_time,
v.update_time
from vehicle v
where
<choose>
<when test="code !=null and numberPlate !=null and numberPlate !=''">
`code` = #{code} or number_plate = #{numberPlate}
</when>
<when test="code !=null">
`code` = #{code}
</when>
<when test="numberPlate !=null and numberPlate !=''">
number_plate = #{numberPlate}
</when>
</choose>
for update
</select>
</mapper> </mapper>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment