|
|
@@ -1824,10 +1824,40 @@ public class SbInfoServiceImpl extends BaseServiceImpl<SbInfoMapper, SbInfo, SbI
|
|
|
List<String> errors = new ArrayList<>();
|
|
|
List<SbInfo> toSave = new ArrayList<>();
|
|
|
List<Boolean> isNewFlags = new ArrayList<>();
|
|
|
+ // 用于缓存本次导入新增的设备位置,避免同名位置重复新增
|
|
|
+ Map<String, SbPosition> newPositionMap = new HashMap<>();
|
|
|
+ // 新增顶级位置的编码序号,从现有顶级位置数量之后开始
|
|
|
+ int rootPositionCount = 0;
|
|
|
+ for (SbPosition position : positionList) {
|
|
|
+ if (StringUtils.isBlank(position.getParentId())) {
|
|
|
+ rootPositionCount++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 统计 Excel 内部重复的设备编号,避免同一批次同编号重复入库
|
|
|
+ Map<String, Integer> excelNoCount = new HashMap<>();
|
|
|
+ for (SbInfoVO item : items) {
|
|
|
+ if (StringUtils.isNotBlank(item.getNo())) {
|
|
|
+ excelNoCount.merge(item.getNo().trim(), 1, Integer::sum);
|
|
|
+ }
|
|
|
+ }
|
|
|
for (SbInfoVO item : items) {
|
|
|
StringBuilder rowErr = new StringBuilder();
|
|
|
+ String no = item.getNo() == null ? "" : item.getNo().trim();
|
|
|
+ if (StringUtils.isNotBlank(no) && excelNoCount.getOrDefault(no, 0) > 1) {
|
|
|
+ errors.add("设备【" + no + "】:Excel 中存在 " + excelNoCount.get(no)
|
|
|
+ + " 行相同编号的记录,请去掉重复行后重新导入");
|
|
|
+ continue;
|
|
|
+ }
|
|
|
// 通过设备编号no查找已有记录,获取ID用于更新(与新增导入保持一致,不依赖Excel中的ID列)
|
|
|
- SbInfoVO existingInfo = mapper.getByNo(item.getNo());
|
|
|
+ // 用列表查询避免库内存在重复编号时 selectOne 抛 TooManyResultsException
|
|
|
+ List<SbInfoVO> existingList = StringUtils.isNotBlank(no)
|
|
|
+ ? mapper.listByNo(no) : Collections.<SbInfoVO>emptyList();
|
|
|
+ if (existingList.size() > 1) {
|
|
|
+ errors.add("设备【" + no + "】:系统中存在 " + existingList.size()
|
|
|
+ + " 条相同编号的设备记录,请先在设备台账中删除多余记录后再导入");
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ SbInfoVO existingInfo = existingList.isEmpty() ? null : existingList.get(0);
|
|
|
boolean isNew = (existingInfo == null);
|
|
|
if (isNew) {
|
|
|
item.setId(IdGeneratorUtils.getObjectId());
|
|
|
@@ -1837,26 +1867,42 @@ public class SbInfoServiceImpl extends BaseServiceImpl<SbInfoMapper, SbInfo, SbI
|
|
|
item.setId(existingInfo.getId());
|
|
|
}
|
|
|
|
|
|
- // 处理所属车间:填了但设备位置(t_sb_position)中匹配不到则记录错误;未填写则跳过
|
|
|
+ // 处理所属车间(使用位置):填了但设备位置(t_sb_position)中匹配不到则直接新增一条顶级位置;未填写则跳过
|
|
|
if (StringUtils.isNotBlank(item.getPositionName())) {
|
|
|
+ String positionName = item.getPositionName().trim();
|
|
|
boolean findPosition = false;
|
|
|
for (SbPosition position : positionList) {
|
|
|
- if (position.getName().equalsIgnoreCase(item.getPositionName().trim())) {
|
|
|
+ if (position.getName().equalsIgnoreCase(positionName)) {
|
|
|
item.setPositionId(position.getId());
|
|
|
findPosition = true;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
if (!findPosition) {
|
|
|
- item.setPositionId(null);
|
|
|
- rowErr.append("所属车间【").append(item.getPositionName()).append("】在设备位置中未找到;");
|
|
|
+ // 本次导入已新建过同名位置则直接复用,避免重复新增
|
|
|
+ SbPosition newPosition = newPositionMap.get(positionName.toLowerCase());
|
|
|
+ if (newPosition == null) {
|
|
|
+ newPosition = new SbPosition()
|
|
|
+ .setId(IdGeneratorUtils.getObjectId())
|
|
|
+ .setName(positionName)
|
|
|
+ .setCode(IdGeneratorUtils.getStrNum("", ++rootPositionCount))
|
|
|
+ .setDelFlag(DelFlagEnum.NORMAL.getValue())
|
|
|
+ .setCreatedUserId(SecurityUtils.getUserInfo().getUserId())
|
|
|
+ .setCreatedTime(now)
|
|
|
+ .setUpdateTime(now);
|
|
|
+ sbPositionMapper.insertSelective(newPosition);
|
|
|
+ positionList.add(newPosition);
|
|
|
+ newPositionMap.put(positionName.toLowerCase(), newPosition);
|
|
|
+ log.info("修改导入:使用位置【{}】在设备位置中未找到,已自动新增", positionName);
|
|
|
+ }
|
|
|
+ item.setPositionId(newPosition.getId());
|
|
|
}
|
|
|
}
|
|
|
// 是否固定资产:默认为否
|
|
|
if (item.getIsFinancing() == null) {
|
|
|
item.setIsFinancing(SbInfoFinancingEnum.NOT.getValue());
|
|
|
}
|
|
|
- // 使用人(保管人):填了但系统中找不到则记录错误
|
|
|
+ // 使用人(保管人):填了但系统中找不到则用维修人替代,维修人也不存在才记录错误
|
|
|
if (StringUtils.isNotBlank(item.getSaveUserName())
|
|
|
&& !"null".equalsIgnoreCase(item.getSaveUserName())) {
|
|
|
boolean findSaveUser = false;
|
|
|
@@ -1869,9 +1915,25 @@ public class SbInfoServiceImpl extends BaseServiceImpl<SbInfoMapper, SbInfo, SbI
|
|
|
}
|
|
|
}
|
|
|
if (!findSaveUser) {
|
|
|
+ // 使用人不存在则用维修人替代
|
|
|
+ String repairName = item.getRepairUserName();
|
|
|
+ if (StringUtils.isNotBlank(repairName) && !"null".equalsIgnoreCase(repairName)) {
|
|
|
+ for (SysUser user : users) {
|
|
|
+ if (user.getRealName().equalsIgnoreCase(repairName.trim())) {
|
|
|
+ item.setSaveUser(user.getUserId());
|
|
|
+ item.setUseUser(user.getUserId());
|
|
|
+ findSaveUser = true;
|
|
|
+ log.info("修改导入:设备【{}】使用人【{}】在系统中未找到,已用维修人【{}】替代",
|
|
|
+ item.getNo(), item.getSaveUserName(), repairName);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!findSaveUser) {
|
|
|
item.setSaveUser(null);
|
|
|
item.setUseUser(null);
|
|
|
- rowErr.append("使用人(保管人)【").append(item.getSaveUserName()).append("】在系统中未找到;");
|
|
|
+ rowErr.append("使用人(保管人)【").append(item.getSaveUserName()).append("】在系统中未找到,且维修人也不可用;");
|
|
|
}
|
|
|
}
|
|
|
// 维修人:填了但系统中找不到则记录错误
|