Compare commits

...

2 Commits

Author SHA256 Message Date
4f3c914bea Merge remote-tracking branch 'origin/main' 2025-12-05 09:14:48 +08:00
26b08cb914 首页车辆列表 2025-12-05 09:14:41 +08:00
2 changed files with 99 additions and 22 deletions

View File

@ -59,4 +59,27 @@ public class EbikeOrderBikeListDto implements Serializable {
* 外接电池电量该值由控制器提供若控制器不支持此值为0
*/
private Integer soc;
/**
* 是否有巡检工单
*/
private Boolean hasInspectionOrder;
/**
* 是否有换电工单
*/
private Boolean hasChangeBatteryOrder;
/**
* 是否有调度工单
*/
private Boolean hasDispatchOrder;
/**
* 是否有维修工单
*/
private Boolean hasRepairOrder;
}

View File

@ -19,6 +19,7 @@ import com.cdzy.operations.utils.GeoCodingUtil;
import com.cdzy.operations.utils.MinioUtil;
import com.cdzy.operations.utils.RedisUtil;
import com.mybatisflex.core.keygen.impl.SnowFlakeIDKeyGenerator;
import com.mybatisflex.core.query.QueryMethods;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.core.update.UpdateChain;
import com.mybatisflex.spring.service.impl.ServiceImpl;
@ -112,6 +113,7 @@ public class EbikeBikeOrderServiceImpl extends ServiceImpl<EbikeBikeOrderMapper,
.operatorId(bikeInfo.getOperatorId())
.build();
this.mapper.insert(ebikeBikeOrder);
//TODO:车辆状态
}
@Transactional
@ -144,6 +146,7 @@ public class EbikeBikeOrderServiceImpl extends ServiceImpl<EbikeBikeOrderMapper,
List<EbikeOrderFile> list = fileUrls.stream().map(e -> EbikeOrderFile.builder().orderId(orderId).fileUrl(e).build()).toList();
orderFileMapper.insertBatch(list);
}
//TODO:车辆状态
}
@Transactional
@ -181,6 +184,7 @@ public class EbikeBikeOrderServiceImpl extends ServiceImpl<EbikeBikeOrderMapper,
.operatorId(bikeInfo.getOperatorId())
.build();
this.mapper.insert(ebikeBikeOrder);
//TODO:车辆状态
bikeInfo.setUsageStatus(BikeUsageStatus.DEPLOYED);
bikeInfoMapper.update(bikeInfo);
}
@ -241,6 +245,7 @@ public class EbikeBikeOrderServiceImpl extends ServiceImpl<EbikeBikeOrderMapper,
List<EbikeOrderFile> list = fileUrls.stream().map(e -> EbikeOrderFile.builder().orderId(orderId).fileUrl(e).build()).toList();
orderFileMapper.insertBatch(list);
}
//TODO:车辆状态
}
@Transactional
@ -342,7 +347,7 @@ public class EbikeBikeOrderServiceImpl extends ServiceImpl<EbikeBikeOrderMapper,
if (bikeOrder.getReceiverId() != StpUtil.getLoginIdAsLong()) {
if (bikeOrder.getReceiverId() != null) {
throw new EbikeException("其他用户已接单为该车辆换电");
}else {
} else {
throw new EbikeException("请接单后完成换电");
}
}
@ -357,7 +362,7 @@ public class EbikeBikeOrderServiceImpl extends ServiceImpl<EbikeBikeOrderMapper,
bikeInfoMapper.update(bikeInfo);
bikeOrder.setHandleState(OrderHandleState.PROCESSED);
ebikeBikeOrderMapper.update(bikeOrder);
}else {
} else {
queryWrapper.clear();
queryWrapper.where(EBIKE_ECU_INFO.ECU_SN.eq(bikeCode))
.where(EBIKE_ECU_INFO.BIND_BATTERY.eq(Boolean.TRUE));
@ -377,35 +382,35 @@ public class EbikeBikeOrderServiceImpl extends ServiceImpl<EbikeBikeOrderMapper,
@Override
public EbikeOrderBikeInfoDto bikeInfo(String bikeCode) {
QueryWrapper queryWrapper = QueryWrapper.create()
.select(EBIKE_BIKE_INFO.BIKE_INFO_ID,EBIKE_BIKE_INFO.LOCATION,EBIKE_BIKE_INFO.USAGE_STATUS,EBIKE_BIKE_INFO.LATEST_CYCLING_TIME,EBIKE_ECU_INFO.ECU_SN)
.select(EBIKE_BIKE_INFO.BIKE_INFO_ID, EBIKE_BIKE_INFO.LOCATION, EBIKE_BIKE_INFO.USAGE_STATUS, EBIKE_BIKE_INFO.LATEST_CYCLING_TIME, EBIKE_ECU_INFO.ECU_SN)
.where(EBIKE_BIKE_INFO.BIKE_CODE.eq(bikeCode))
.leftJoin(EBIKE_ECU_INFO).on(EBIKE_ECU_INFO.ECU_ID.eq(EBIKE_BIKE_INFO.ECU_ID));
EbikeOrderBikeInfoDto bikeInfo = bikeInfoMapper.selectOneByQueryAs(queryWrapper,EbikeOrderBikeInfoDto.class);
EbikeOrderBikeInfoDto bikeInfo = bikeInfoMapper.selectOneByQueryAs(queryWrapper, EbikeOrderBikeInfoDto.class);
if (bikeInfo == null) {
throw new EbikeException("车辆编号错误");
}
ResGPSDto resGPSDto = (ResGPSDto)redisUtil.getEcu(bikeInfo.getEcuSn());
ResGPSDto resGPSDto = (ResGPSDto) redisUtil.getEcu(bikeInfo.getEcuSn());
bikeInfo.setSoc(resGPSDto.getSoc());
BigDecimal result = new BigDecimal(resGPSDto.getVoltage())
.divide(new BigDecimal(1000), 2, RoundingMode.HALF_UP);
bikeInfo.setVoltage(result);
if (resGPSDto.getGsm()>20 && resGPSDto.getGsm()<31){
if (resGPSDto.getGsm() > 20 && resGPSDto.getGsm() < 31) {
bikeInfo.setGsm("信号强");
}else if (resGPSDto.getGsm()<20 && resGPSDto.getGsm()>10){
} else if (resGPSDto.getGsm() < 20 && resGPSDto.getGsm() > 10) {
bikeInfo.setGsm("信号一般");
}else if (resGPSDto.getGsm()<=10){
} else if (resGPSDto.getGsm() <= 10) {
bikeInfo.setGsm("信号弱");
}
bikeInfo.setHelmetExit(resGPSDto.getHelmetExit()==1?"头盔在位":"头盔不在位");
bikeInfo.setIsHelmetLocked(resGPSDto.getIsHelmetLocked()==1?"头盔已上锁":"头盔未上锁");
bikeInfo.setIsWheelSpin(resGPSDto.getIsWheelSpin()==1?"转动":"静止");
bikeInfo.setIsMoving(resGPSDto.getIsMoving()==1?"运动":"静止");
bikeInfo.setAccOn(resGPSDto.getAccOn()==1?"":"");
bikeInfo.setWheelLocked(resGPSDto.getWheelLocked()==1?"上锁":"未上锁");
bikeInfo.setSeatLocked(resGPSDto.getSeatLocked()==1?"关闭":"打开");
bikeInfo.setHelmetExit(resGPSDto.getHelmetExit() == 1 ? "头盔在位" : "头盔不在位");
bikeInfo.setIsHelmetLocked(resGPSDto.getIsHelmetLocked() == 1 ? "头盔已上锁" : "头盔未上锁");
bikeInfo.setIsWheelSpin(resGPSDto.getIsWheelSpin() == 1 ? "转动" : "静止");
bikeInfo.setIsMoving(resGPSDto.getIsMoving() == 1 ? "运动" : "静止");
bikeInfo.setAccOn(resGPSDto.getAccOn() == 1 ? "" : "");
bikeInfo.setWheelLocked(resGPSDto.getWheelLocked() == 1 ? "上锁" : "未上锁");
bikeInfo.setSeatLocked(resGPSDto.getSeatLocked() == 1 ? "关闭" : "打开");
bikeInfo.setSpeed(resGPSDto.getSpeed());
bikeInfo.setLatestTime(resGPSDto.getLatestTime());
String locationToAddress = geoCodingUtil.getLocationToAddress(resGPSDto.getLongitude(),resGPSDto.getLatitude());
String locationToAddress = geoCodingUtil.getLocationToAddress(resGPSDto.getLongitude(), resGPSDto.getLatitude());
bikeInfo.setChineseLocation(locationToAddress);
return bikeInfo;
}
@ -413,16 +418,65 @@ public class EbikeBikeOrderServiceImpl extends ServiceImpl<EbikeBikeOrderMapper,
@Override
public List<EbikeOrderBikeListDto> bikeList(Long regionId) {
QueryWrapper queryWrapper = QueryWrapper.create()
.select(EBIKE_BIKE_INFO.BIKE_CODE,EBIKE_BIKE_INFO.LOCATION,EBIKE_BIKE_INFO.USAGE_STATUS,EBIKE_ECU_INFO.ECU_SN)
.select(
EBIKE_BIKE_INFO.BIKE_CODE,
EBIKE_BIKE_INFO.LOCATION,
EBIKE_BIKE_INFO.USAGE_STATUS,
EBIKE_ECU_INFO.ECU_SN,
// 判断是否有巡检工单
QueryMethods.case_()
.when(QueryMethods.exists(
QueryWrapper.create()
.from(EBIKE_BIKE_ORDER)
.where(EBIKE_BIKE_ORDER.BIKE_CODE.eq(EBIKE_BIKE_INFO.BIKE_CODE))
.and(EBIKE_BIKE_ORDER.ORDER_TYPE.eq(BikeOrderType.INSPECTION))
))
.then(true)
.else_(false)
.end().as(EbikeOrderBikeListDto::getHasInspectionOrder),
// 判断是否有换电工单
QueryMethods.case_()
.when(QueryMethods.exists(
QueryWrapper.create()
.from(EBIKE_BIKE_ORDER)
.where(EBIKE_BIKE_ORDER.BIKE_CODE.eq(EBIKE_BIKE_INFO.BIKE_CODE))
.and(EBIKE_BIKE_ORDER.ORDER_TYPE.eq(BikeOrderType.BATTERY_SWAP))
))
.then(true)
.else_(false)
.end().as(EbikeOrderBikeListDto::getHasChangeBatteryOrder),
// 判断是否有调度工单
QueryMethods.case_()
.when(QueryMethods.exists(
QueryWrapper.create()
.from(EBIKE_BIKE_ORDER)
.where(EBIKE_BIKE_ORDER.BIKE_CODE.eq(EBIKE_BIKE_INFO.BIKE_CODE))
.and(EBIKE_BIKE_ORDER.ORDER_TYPE.eq(BikeOrderType.DISPATCH))
))
.then(true)
.else_(false)
.end().as(EbikeOrderBikeListDto::getHasDispatchOrder),
// 判断是否有换电工单
QueryMethods.case_()
.when(QueryMethods.exists(
QueryWrapper.create()
.from(EBIKE_BIKE_ORDER)
.where(EBIKE_BIKE_ORDER.BIKE_CODE.eq(EBIKE_BIKE_INFO.BIKE_CODE))
.and(EBIKE_BIKE_ORDER.ORDER_TYPE.eq(BikeOrderType.REPAIR))
))
.then(true)
.else_(false)
.end().as(EbikeOrderBikeListDto::getHasRepairOrder)
)
.where(EBIKE_BIKE_INFO.REGION_ID.eq(regionId))
.where(EBIKE_BIKE_INFO.STATUS.eq(BikeStatus.LAUNCH))
.leftJoin(EBIKE_ECU_INFO).on(EBIKE_ECU_INFO.ECU_ID.eq(EBIKE_BIKE_INFO.ECU_ID));
List<EbikeOrderBikeListDto> list = bikeInfoMapper.selectListByQueryAs(queryWrapper, EbikeOrderBikeListDto.class);
List<String> snList = list.stream().map(EbikeOrderBikeListDto::getEcuSn).toList();
Map<String, Object> objectMap = redisUtil.batchGetEcuWithMap(snList);
list.forEach(e->{
ResGPSDto resGPSDto = (ResGPSDto)objectMap.get(e.getEcuSn());
if (resGPSDto != null){
list.forEach(e -> {
ResGPSDto resGPSDto = (ResGPSDto) objectMap.get(e.getEcuSn());
if (resGPSDto != null) {
e.setSoc(resGPSDto.getSoc());
}
});