整车绑定

This commit is contained in:
attiya 2025-11-05 11:30:29 +08:00
parent 2d50af8e5a
commit 64ff73c373

View File

@ -14,6 +14,7 @@ import com.cdzy.operations.service.EbikeBikeInfoService;
import com.cdzy.operations.service.EbikeInventoryRecordService; import com.cdzy.operations.service.EbikeInventoryRecordService;
import com.cdzy.operations.service.EbikeInventoryService; import com.cdzy.operations.service.EbikeInventoryService;
import com.mybatisflex.core.query.QueryWrapper; import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.core.util.StringUtil;
import com.mybatisflex.spring.service.impl.ServiceImpl; import com.mybatisflex.spring.service.impl.ServiceImpl;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.postgresql.geometric.PGpolygon; import org.postgresql.geometric.PGpolygon;
@ -62,38 +63,54 @@ public class EbikeBikeInfoServiceImpl extends ServiceImpl<EbikeBikeInfoMapper, E
throw new EbikeException("该中控不存在"); throw new EbikeException("该中控不存在");
} }
if (ecuInfo.getBindBattery() && bindVo.getBatteryCode()!=null){ //判断中控与电池关系
if (ecuInfo.getBindBattery() && StringUtil.hasText(bindVo.getBatteryCode())) {
throw new EbikeException("该中控与电池一体无需额外绑定电池"); throw new EbikeException("该中控与电池一体无需额外绑定电池");
} }
if (!ecuInfo.getBindBattery() && !StringUtil.hasText(bindVo.getBatteryCode())) {
throw new EbikeException("该中控绑定车辆时车辆需绑定电池");
}
//检查电池是否正确
queryWrapper.clear(); queryWrapper.clear();
queryWrapper.where(EBIKE_BATTERY_INFO.BATTERY_CODE.eq(bindVo.getBatteryCode())) queryWrapper.where(EBIKE_BATTERY_INFO.BATTERY_CODE.eq(bindVo.getBatteryCode()))
.where(EBIKE_BATTERY_INFO.STATUS.eq(BatteryStatus.BIND)); .where(EBIKE_BATTERY_INFO.STATUS.eq(BatteryStatus.BIND));
EbikeBatteryInfo batteryInfo = batteryInfoMapper.selectOneByQuery(queryWrapper); EbikeBatteryInfo batteryInfo = batteryInfoMapper.selectOneByQuery(queryWrapper);
if (batteryInfo == null) { if (batteryInfo == null && !ecuInfo.getBindBattery()) {
throw new EbikeException("该电池不存在或电池二维码尚未绑定"); throw new EbikeException("该电池不存在或电池二维码尚未绑定");
} }
//检查车辆二维码
queryWrapper.clear(); queryWrapper.clear();
queryWrapper.where(EBIKE_BIKE_QR.BIKE_QR_CODE.eq(bindVo.getBikeCode())) queryWrapper.where(EBIKE_BIKE_QR.BIKE_QR_CODE.eq(bindVo.getBikeCode()))
.where(EBIKE_BIKE_QR.STATUS.eq(BikeQrStatus.UN_BIND)); .where(EBIKE_BIKE_QR.STATUS.eq(BikeQrStatus.UN_BIND));
EbikeBikeQr ebikeBikeQr = bikeQrMapper.selectOneByQuery(queryWrapper); EbikeBikeQr ebikeBikeQr = bikeQrMapper.selectOneByQuery(queryWrapper);
if (ebikeBikeQr == null){ if (ebikeBikeQr == null) {
throw new EbikeException("该车辆二维码无效或已使用"); throw new EbikeException("该车辆二维码无效或已使用");
} }
if (!Objects.equals(batteryInfo.getOperatorId(), ecuInfo.getOperatorId()) && !Objects.equals(ecuInfo.getOperatorId(), ebikeBikeQr.getOperatorId()) && !Objects.equals(batteryInfo.getOperatorId(), ebikeBikeQr.getOperatorId())) { //判断组件所属运营商
throw new EbikeException("所选组件属于不同的运营商"); if (batteryInfo != null) {
if (!Objects.equals(batteryInfo.getOperatorId(), ecuInfo.getOperatorId()) && !Objects.equals(ecuInfo.getOperatorId(), ebikeBikeQr.getOperatorId()) && !Objects.equals(batteryInfo.getOperatorId(), ebikeBikeQr.getOperatorId())) {
throw new EbikeException("所选组件属于不同的运营商");
}
}else {
if (!Objects.equals(ecuInfo.getOperatorId(), ebikeBikeQr.getOperatorId())) {
throw new EbikeException("所选组件属于不同的运营商");
}
} }
Long operatorId = batteryInfo.getOperatorId(); Long operatorId = ecuInfo.getOperatorId();
queryWrapper.clear(); queryWrapper.clear();
queryWrapper.where(EBIKE_BIKE_INFO.BATTERY_ID.eq(batteryInfo.getBatteryId())) queryWrapper.where(EBIKE_BIKE_INFO.ECU_ID.eq(ecuInfo.getEcuId()))
.or(EBIKE_BIKE_INFO.ECU_ID.eq(ecuInfo.getEcuId()))
.or(EBIKE_BIKE_INFO.BIKE_CODE.eq(bindVo.getBikeCode())); .or(EBIKE_BIKE_INFO.BIKE_CODE.eq(bindVo.getBikeCode()));
if (batteryInfo != null) {
queryWrapper.or(EBIKE_BIKE_INFO.BATTERY_ID.eq(batteryInfo.getBatteryId()));
}
EbikeBikeInfo info = this.mapper.selectOneByQuery(queryWrapper); EbikeBikeInfo info = this.mapper.selectOneByQuery(queryWrapper);
if (info != null){ if (info != null) {
throw new EbikeException("车辆绑定配件中存已绑定整车的配件"); throw new EbikeException("车辆绑定配件中存已绑定整车的配件");
} }
@ -102,25 +119,40 @@ public class EbikeBikeInfoServiceImpl extends ServiceImpl<EbikeBikeInfoMapper, E
bikeQrMapper.update(ebikeBikeQr); bikeQrMapper.update(ebikeBikeQr);
List<EbikeInventoryRecord> list = new ArrayList<>(); List<EbikeInventoryRecord> list = new ArrayList<>();
//TODO优化封装
for (int i = 1; i < 4; i++) { for (int i = 1; i < 4; i++) {
if (i != 2) { if (i != 2) {
EbikeInventoryVo inventoryVo = EbikeInventoryVo.builder() if (i == 1 && !ecuInfo.getBindBattery()) {
.operatorId(operatorId) EbikeInventoryVo inventoryVo = EbikeInventoryVo.builder()
.inventoryType(i) .operatorId(operatorId)
.inventoryNum(-1) .inventoryType(i)
.build(); .inventoryNum(-1)
EbikeInventoryRecord inventoryRecord = EbikeInventoryRecord.builder() .build();
.operatorId(inventoryVo.getOperatorId()) EbikeInventoryRecord inventoryRecord = EbikeInventoryRecord.builder()
.inventoryType(inventoryVo.getInventoryType()) .operatorId(inventoryVo.getOperatorId())
.inventoryRecordNum(Long.valueOf(inventoryVo.getInventoryNum())) .inventoryType(inventoryVo.getInventoryType())
.createdBy(StpUtil.getLoginIdAsLong()) .inventoryRecordNum(Long.valueOf(inventoryVo.getInventoryNum()))
.build(); .createdBy(StpUtil.getLoginIdAsLong())
list.add(inventoryRecord); .build();
list.add(inventoryRecord);
//TODO优化为批量削减库存需要更复杂的校验 inventoryService.reduceInventory(inventoryVo);
inventoryService.reduceInventory(inventoryVo); } else if (i == 3) {
} EbikeInventoryVo inventoryVo = EbikeInventoryVo.builder()
if (i == 2 && bindVo.getHasHelme()) { .operatorId(operatorId)
.inventoryType(i)
.inventoryNum(-1)
.build();
EbikeInventoryRecord inventoryRecord = EbikeInventoryRecord.builder()
.operatorId(inventoryVo.getOperatorId())
.inventoryType(inventoryVo.getInventoryType())
.inventoryRecordNum(Long.valueOf(inventoryVo.getInventoryNum()))
.createdBy(StpUtil.getLoginIdAsLong())
.build();
list.add(inventoryRecord);
inventoryService.reduceInventory(inventoryVo);
}
}else if (bindVo.getHasHelme()) {
EbikeInventoryVo inventoryVo = EbikeInventoryVo.builder() EbikeInventoryVo inventoryVo = EbikeInventoryVo.builder()
.operatorId(operatorId) .operatorId(operatorId)
.inventoryType(i) .inventoryType(i)
@ -138,6 +170,7 @@ public class EbikeBikeInfoServiceImpl extends ServiceImpl<EbikeBikeInfoMapper, E
} }
recordService.saveBatch(list); recordService.saveBatch(list);
//录入最终数据
EbikeBikeInfo bikeInfo = EbikeBikeInfo.builder() EbikeBikeInfo bikeInfo = EbikeBikeInfo.builder()
.operatorId(operatorId) .operatorId(operatorId)
.bikeCode(bindVo.getBikeCode()) .bikeCode(bindVo.getBikeCode())
@ -156,7 +189,7 @@ public class EbikeBikeInfoServiceImpl extends ServiceImpl<EbikeBikeInfoMapper, E
QueryWrapper query = QueryWrapper.create() QueryWrapper query = QueryWrapper.create()
.select(EBIKE_BIKE_INFO.ALL_COLUMNS) .select(EBIKE_BIKE_INFO.ALL_COLUMNS)
.from(EBIKE_BIKE_INFO) .from(EBIKE_BIKE_INFO)
.where("ST_Within(location::geometry, ?::geometry)",polygon); .where("ST_Within(location::geometry, ?::geometry)", polygon);
return this.mapper.selectListByQuery(query); return this.mapper.selectListByQuery(query);
} }