整车绑定功能实现

This commit is contained in:
attiya 2025-10-21 11:30:05 +08:00
parent c409ec8b52
commit d514c43a42
3 changed files with 91 additions and 14 deletions

View File

@ -0,0 +1,22 @@
package com.cdzy.operations.enums;
/**
* @author attiya
* @since 2025-10-21
*/
public interface InventoryType {
/**
* 电池
*/
int BATTERY = 1;
/**
* 头盔
*/
int HELMET = 2;
/**
* 车架
*/
int BIKE = 3;
}

View File

@ -24,14 +24,6 @@ public class EbikeBikeBindVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 运营商ID
*/
@NotNull(message = "运营商ID不能为空")
private Long operatorId;
/**
* 车辆编号
*/

View File

@ -4,20 +4,27 @@ import cn.dev33.satoken.stp.StpUtil;
import com.cdzy.common.ex.EbikeException;
import com.cdzy.operations.enums.BatteryStatus;
import com.cdzy.operations.enums.BikeStatus;
import com.cdzy.operations.mapper.EbikeBatteryInfoMapper;
import com.cdzy.operations.mapper.EbikeBikeInfoMapper;
import com.cdzy.operations.mapper.EbikeEcuInfoMapper;
import com.cdzy.operations.mapper.*;
import com.cdzy.operations.model.entity.EbikeBatteryInfo;
import com.cdzy.operations.model.entity.EbikeBikeInfo;
import com.cdzy.operations.model.entity.EbikeEcuInfo;
import com.cdzy.operations.model.entity.EbikeInventoryRecord;
import com.cdzy.operations.model.vo.EbikeBikeBindVo;
import com.cdzy.operations.model.vo.EbikeInventoryVo;
import com.cdzy.operations.service.EbikeBikeInfoService;
import com.cdzy.operations.service.EbikeInventoryService;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import static com.cdzy.operations.model.entity.table.EbikeBatteryInfoTableDef.EBIKE_BATTERY_INFO;
import static com.cdzy.operations.model.entity.table.EbikeBikeInfoTableDef.EBIKE_BIKE_INFO;
import static com.cdzy.operations.model.entity.table.EbikeEcuInfoTableDef.EBIKE_ECU_INFO;
/**
@ -35,7 +42,14 @@ public class EbikeBikeInfoServiceImpl extends ServiceImpl<EbikeBikeInfoMapper, E
@Resource
EbikeEcuInfoMapper ebikeEcuInfoMapper;
@Resource
EbikeInventoryService inventoryService;
@Resource
EbikeInventoryRecordMapper recordMapper;
@Override
@Transactional
public void bind(EbikeBikeBindVo bindVo) {
QueryWrapper queryWrapper = QueryWrapper.create()
.where(EBIKE_BATTERY_INFO.BATTERY_CODE.eq(bindVo.getBatteryCode()))
@ -52,7 +66,59 @@ public class EbikeBikeInfoServiceImpl extends ServiceImpl<EbikeBikeInfoMapper, E
throw new EbikeException("该中控不存在");
}
if (!Objects.equals(batteryInfo.getOperatorId(), ecuInfo.getOperatorId())) {
throw new EbikeException("所选组件属于不同的运营商");
}
Long operatorId = batteryInfo.getOperatorId();
queryWrapper.clear();
queryWrapper.where(EBIKE_BIKE_INFO.BATTERY_ID.eq(batteryInfo.getBatteryId()))
.or(EBIKE_BIKE_INFO.ECU_ID.eq(ecuInfo.getEcuId()))
.or(EBIKE_BIKE_INFO.BIKE_CODE.eq(bindVo.getBikeCode()));
EbikeBikeInfo info = this.mapper.selectOneByQuery(queryWrapper);
if (info != null){
throw new EbikeException("车辆绑定配件中存已绑定整车的配件");
}
List<EbikeInventoryRecord> list = new ArrayList<>();
for (int i = 1; i < 4; i++) {
if (i != 2) {
EbikeInventoryVo inventoryVo = EbikeInventoryVo.builder()
.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);
//TODO优化为批量削减库存需要更复杂的校验
inventoryService.reduceInventory(inventoryVo);
}
if (i == 2 && bindVo.getHasHelme()) {
EbikeInventoryVo inventoryVo = EbikeInventoryVo.builder()
.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);
}
}
recordMapper.insertBatch(list);
EbikeBikeInfo bikeInfo = EbikeBikeInfo.builder()
.operatorId(operatorId)
.bikeCode(bindVo.getBikeCode())
.batteryId(batteryInfo.getBatteryId())
.ecuId(ecuInfo.getEcuId())
@ -61,8 +127,5 @@ public class EbikeBikeInfoServiceImpl extends ServiceImpl<EbikeBikeInfoMapper, E
.createdBy(StpUtil.getLoginIdAsLong())
.build();
this.mapper.insert(bikeInfo);
//TODO: 消减库存
}
}