Commit a02d6a3c authored by dengjh's avatar dengjh

Merge remote-tracking branch 'origin/master'

parents 43eb29ac a6f82927
package com.xinxincaravan.caravan.vehicle.biz;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.xinxincaravan.caravan.vehicle.constant.ResCode.ResCode;
import com.xinxincaravan.caravan.vehicle.constant.VehicleActiveType;
import com.xinxincaravan.caravan.vehicle.constant.VehicleStatus;
import com.xinxincaravan.caravan.vehicle.entity.Vehicle;
import com.xinxincaravan.caravan.vehicle.entity.VehicleActiveLog;
import com.xinxincaravan.caravan.vehicle.entity.VehicleDepartureLog;
import com.xinxincaravan.caravan.vehicle.mapper.VehicleActiveLogMapper;
import com.xinxincaravan.caravan.vehicle.mapper.VehicleDepartureLogMapper;
import com.xinxincaravan.caravan.vehicle.mapper.VehicleMapper;
import com.xinxincaravan.caravan.vehicle.vo.VehicleArrivalVo;
import com.xinxincaravan.caravan.vehicle.vo.VehicleDepartureVo;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
@Service
public class VehicleActiveService {
@Autowired
VehicleMapper vehicleMapper;
@Autowired
VehicleDepartureLogMapper vehicleDepartureLogMapper;
@Autowired
VehicleActiveLogMapper vehicleActiveLogMapper;
/**
* 出车
*
* @param departureVo
*/
@Transactional
public void departure(VehicleDepartureVo departureVo) {
Vehicle vehicle = vehicleMapper.selectByPrimaryKey(departureVo.getVehicleId());
if (vehicle == null) {
throw new BaseException(ResCode.VEHICLE_DEPARTURE_VEHICLE_UNEXIST.getDesc(),
ResCode.VEHICLE_DEPARTURE_VEHICLE_UNEXIST.getCode());
}
if (!vehicle.getStatus().equals(VehicleStatus.NORMAL.getCode())) {
throw new BaseException(ResCode.VEHICLE_DEPARTURE_VEHICLE_DISABLE.getDesc(),
ResCode.VEHICLE_DEPARTURE_VEHICLE_DISABLE.getCode());
}
// 出车记录
VehicleDepartureLog departureLog = new VehicleDepartureLog();
BeanUtils.copyProperties(departureVo, departureLog);
departureLog.setDepartureTime(new Date());
departureLog.setCreateTime(new Date());
departureLog.setMileageStart(departureVo.getMileage());
vehicleDepartureLogMapper.insert(departureLog);
// 车辆活动日志
VehicleActiveLog activeLog = new VehicleActiveLog();
activeLog.setVehicleId(departureVo.getVehicleId());
activeLog.setActiveType(VehicleActiveType.Departure.getCode());
activeLog.setStartTime(new Date());
activeLog.setCreateTime(new Date());
vehicleActiveLogMapper.insert(activeLog);
// 写入车辆公里数
vehicle.setMileageLastUpdate(departureVo.getMileage());
vehicleMapper.updateByPrimaryKeySelective(vehicle);
// 修改车辆状态,确认是空闲状态
int result = vehicleMapper.updateStatusByIdAndStatus(departureVo.getVehicleId(), VehicleStatus.DEPARTURE.getCode(),
VehicleStatus.NORMAL.getCode());
if (result == 0) {
throw new BaseException(ResCode.VEHICLE_DEPARTURE_VEHICLE_DISABLE.getDesc(),
ResCode.VEHICLE_DEPARTURE_VEHICLE_DISABLE.getCode());
}
}
@Transactional
public void arrival(VehicleArrivalVo arrivalVo) {
Vehicle vehicle = vehicleMapper.selectByPrimaryKey(arrivalVo.getVehicleId());
if (vehicle == null) {
throw new BaseException(ResCode.VEHICLE_DEPARTURE_VEHICLE_UNEXIST.getDesc(),
ResCode.VEHICLE_DEPARTURE_VEHICLE_UNEXIST.getCode());
}
if (!vehicle.getStatus().equals(VehicleStatus.DEPARTURE.getCode())) {
throw new BaseException(ResCode.VEHICLE_DEPARTURE_VEHICLE_UNDEPARTURE.getDesc(),
ResCode.VEHICLE_DEPARTURE_VEHICLE_UNDEPARTURE.getCode());
}
// 出车记录
VehicleDepartureLog departureLog = vehicleDepartureLogMapper.selectLastByVehicleId(arrivalVo.getVehicleId());
if (departureLog == null) {
throw new BaseException(ResCode.VEHICLE_DEPARTURE_VEHICLE_UNDEPARTURE.getDesc(),
ResCode.VEHICLE_DEPARTURE_VEHICLE_UNDEPARTURE.getCode());
}
departureLog.setMileageEnd(arrivalVo.getMileage());
departureLog.setRecycleMan(arrivalVo.getRecycleMan());
departureLog.setRecycleManTel(arrivalVo.getRecycleManTel());
departureLog.setUpdateTime(new Date());
departureLog.setArrivalTime(new Date());
vehicleDepartureLogMapper.updateByPrimaryKeySelective(departureLog);
// 车辆活动日志
VehicleActiveLog activeLog = vehicleActiveLogMapper.selectLastByVehicleId(arrivalVo.getVehicleId());
if (activeLog == null) {
throw new BaseException(ResCode.VEHICLE_DEPARTURE_VEHICLE_UNDEPARTURE.getDesc(),
ResCode.VEHICLE_DEPARTURE_VEHICLE_UNDEPARTURE.getCode());
}
activeLog.setEndTime(new Date());
activeLog.setUpdateTime(new Date());
vehicleActiveLogMapper.updateByPrimaryKeySelective(activeLog);
// 写入车辆公里数
vehicle.setMileageLastUpdate(arrivalVo.getMileage());
vehicleMapper.updateByPrimaryKeySelective(vehicle);
// 修改状态,确认是出车状态
int result = vehicleMapper.updateStatusByIdAndStatus(arrivalVo.getVehicleId(), VehicleStatus.NORMAL.getCode(),
VehicleStatus.DEPARTURE.getCode());
if (result == 0) {
throw new BaseException(ResCode.VEHICLE_DEPARTURE_VEHICLE_UNDEPARTURE.getDesc(),
ResCode.VEHICLE_DEPARTURE_VEHICLE_UNDEPARTURE.getCode());
}
}
}
package com.xinxincaravan.caravan.vehicle.config;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.xinxincaravan.caravan.vehicle.common.RestResponse;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
@RestControllerAdvice
public class BaseExceptionHandler {
@ExceptionHandler(BaseException.class)
public RestResponse baseExceptionHandler(BaseException e) {
return RestResponse.codeAndMessage(e.getStatus(), e.getMessage());
}
}
......@@ -18,6 +18,11 @@ public enum ResCode {
//车辆信息相关返回码-预定申请信息
VEHICLE_BOOKED_RECORD_ALREADY_CHANGED(103001,"车辆预定申请已被审批,请刷新后继续操作"),
VEHICLE_BOOKED_RECORD_STATUS_CHANGED(103002,"车辆预定申请状态已变更,请刷新后继续操作"),
VEHICLE_DEPARTURE_VEHICLE_UNEXIST(104001,"车辆不存在"),
VEHICLE_DEPARTURE_VEHICLE_DISABLE(104002,"车辆不可用"),
VEHICLE_DEPARTURE_VEHICLE_UNDEPARTURE(104003,"车辆未出车"),
;
/**
* 返回码
......
package com.xinxincaravan.caravan.vehicle.constant;
/**
* 车辆活动类型
*/
public enum VehicleActiveType {
Departure(1, "出车"),
REPAIRING(2,"维修"),
DISCARD(3,"报废");
Integer code;
String msg;
VehicleActiveType(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
......@@ -8,6 +8,7 @@ public enum VehicleStatus {
NORMAL(1,"正常运行"),
REPAIRING(2,"维修"),
DISCARD(3,"报废"),
DEPARTURE(4, "出车"),
;
/**
......
package com.xinxincaravan.caravan.vehicle.entity;
import lombok.Data;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;
/**
* 车辆活动日志
*/
@Table(name = "vehicle_active_log")
@Data
public class VehicleActiveLog {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY, generator = "JDBC")
Integer id;
/**
* 车辆ID
*/
String vehicleId;
/**
* 活动类型
* VehicleActiveType
*/
Integer activeType;
/**
* 开始时间
*/
Date startTime;
/**
* 结束时间
*/
Date endTime;
/**
* 创建时间
*/
Date createTime;
/**
* 修改时间
*/
Date updateTime;
}
package com.xinxincaravan.caravan.vehicle.entity;
import lombok.Data;
import javax.persistence.*;
import java.util.Date;
/**
* 出车记录
*/
@Table(name = "vehicle_departure_log")
@Data
public class VehicleDepartureLog {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY, generator = "JDBC")
Integer id;
/**
* 车辆ID
*/
String vehicleId;
/**
* 用途
*/
@Column(name = "`use`")
String use;
/**
* 使用人
*/
@Column(name = "`user`")
String user;
/**
* 使用人电话
*/
String userTel;
/**
* 验车人
*/
String checkMan;
/**
* 验车人电话
*/
String checkManTel;
/**
* 收车人
*/
String recycleMan;
/**
* 收车人电话
*/
String recycleManTel;
/**
* 出车时间
*/
Date departureTime;
/**
* 还车时间
*/
Date arrivalTime;
/**
* 出车开始的公里数
*/
Integer mileageStart;
/**
* 出车结束的公里数
*/
Integer mileageEnd;
Date createTime;
Date updateTime;
}
package com.xinxincaravan.caravan.vehicle.mapper;
import com.xinxincaravan.caravan.vehicle.entity.VehicleActiveLog;
import tk.mybatis.mapper.common.BaseMapper;
public interface VehicleActiveLogMapper extends BaseMapper<VehicleActiveLog> {
VehicleActiveLog selectLastByVehicleId(String vehicleId);
}
package com.xinxincaravan.caravan.vehicle.mapper;
import com.xinxincaravan.caravan.vehicle.entity.VehicleDepartureLog;
import tk.mybatis.mapper.common.BaseMapper;
public interface VehicleDepartureLogMapper extends BaseMapper<VehicleDepartureLog> {
VehicleDepartureLog selectLastByVehicleId(String vehicleId);
}
......@@ -3,6 +3,7 @@ package com.xinxincaravan.caravan.vehicle.mapper;
import com.xinxincaravan.caravan.vehicle.entity.Vehicle;
import com.xinxincaravan.caravan.vehicle.vo.AddOrUpdateVehicleVo;
import com.xinxincaravan.caravan.vehicle.vo.QueryVehicleVo;
import org.springframework.data.repository.query.Param;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
......@@ -21,4 +22,6 @@ public interface VehicleMapper extends Mapper<Vehicle> {
*/
public List<Vehicle> lockByCode(AddOrUpdateVehicleVo addOrUpdateVehicleVo);
int updateStatusByIdAndStatus(@Param("vehicleId") String vehicleId, @Param("status") Integer status,
@Param("lastStatus") Integer lastStatus);
}
\ No newline at end of file
package com.xinxincaravan.caravan.vehicle.rest;
import com.xinxincaravan.caravan.vehicle.biz.VehicleActiveService;
import com.xinxincaravan.caravan.vehicle.common.RestResponse;
import com.xinxincaravan.caravan.vehicle.constant.ResCode.ResCode;
import com.xinxincaravan.caravan.vehicle.vo.VehicleArrivalVo;
import com.xinxincaravan.caravan.vehicle.vo.VehicleDepartureVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("active")
public class VehicleActiveController {
@Autowired
VehicleActiveService vehicleActiveService;
/**
* 发车
*
* @return
*/
@PostMapping("departure")
public RestResponse departure(@RequestBody VehicleDepartureVo departureVo) {
if (departureVo == null || departureVo.getVehicleId() == null
|| departureVo.getMileage() == null) {
return RestResponse.codeAndMessage(ResCode.INVALID_REST_REQ_PARAM.getCode(),
ResCode.INVALID_REST_REQ_PARAM.getDesc());
}
vehicleActiveService.departure(departureVo);
return RestResponse.suc();
}
@PostMapping("arrival")
public RestResponse arrival(@RequestBody VehicleArrivalVo arrivalVo) {
if (arrivalVo == null || arrivalVo.getVehicleId() == null
|| arrivalVo.getMileage() == null) {
return RestResponse.codeAndMessage(ResCode.INVALID_REST_REQ_PARAM.getCode(),
ResCode.INVALID_REST_REQ_PARAM.getDesc());
}
vehicleActiveService.arrival(arrivalVo);
return RestResponse.suc();
}
}
package com.xinxincaravan.caravan.vehicle.vo;
import lombok.Data;
/**
* 还车请求
*/
@Data
public class VehicleArrivalVo {
String vehicleId;
/**
* 收车人
*/
String recycleMan;
/**
* 收车人电话
*/
String recycleManTel;
/**
* 公里数
*/
Integer mileage;
}
package com.xinxincaravan.caravan.vehicle.vo;
import lombok.Data;
/**
* 出车请求
*/
@Data
public class VehicleDepartureVo {
/**
* 车辆ID
*/
String vehicleId;
/**
* 用途
*/
String use;
/**
* 使用人
*/
String user;
/**
* 使用人电话
*/
String userTel;
/**
* 验车人
*/
String checkMan;
/**
* 验车人电话
*/
String checkManTel;
/**
* 公里数
*/
Integer mileage;
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.xinxincaravan.caravan.vehicle.mapper.VehicleActiveLogMapper" >
<select id="selectLastByVehicleId" resultType="com.xinxincaravan.caravan.vehicle.entity.VehicleActiveLog">
select * from vehicle_active_log
where vehicle_id = #{vehicleId}
order by create_time desc
limit 1
</select>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.xinxincaravan.caravan.vehicle.mapper.VehicleDepartureLogMapper" >
<select id="selectLastByVehicleId" resultType="com.xinxincaravan.caravan.vehicle.entity.VehicleDepartureLog">
select * from vehicle_departure_log
where vehicle_id = #{vehicleId}
order by create_time desc
limit 1
</select>
</mapper>
\ No newline at end of file
......@@ -112,4 +112,10 @@
for update
</select>
<update id="updateStatusByIdAndStatus">
update vehicle
set status = #{status}
where id = #{vehicleId} and status = #{lastStatus}
</update>
</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