|
@@ -133,6 +133,116 @@ public class HardwareMaterialApiServiceImpl implements HardwareMaterialApiServic
|
|
|
return exMaterialTypeVOS;
|
|
return exMaterialTypeVOS;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public Boolean checkReplaceData(ReplaceMaterialDTO dto) {
|
|
|
|
|
+ Assert.notNull(dto.getOldMaterialsId(), "旧物资ID不能为空!");
|
|
|
|
|
+ Assert.notBlank(dto.getMaterialsRfid(), "新物资RFID不能为空!");
|
|
|
|
|
+ // 1.获取旧物资信息
|
|
|
|
|
+ IsMaterials oldMaterials = iIsMaterialsService.getById(dto.getOldMaterialsId());
|
|
|
|
|
+ // 判断旧物资和新物资的rfid是否更换
|
|
|
|
|
+ if (dto.getMaterialsRfid().equals(oldMaterials.getMaterialsRfid())) {
|
|
|
|
|
+ // 2.没有更换rfid
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // 3.更换rfid
|
|
|
|
|
+ // 判断是否在柜子外 判断rfid是否重复,如果重复,判断重复数据是否绑定物资柜,如果没有绑定直接用,如果绑定,报异常
|
|
|
|
|
+ Assert.isFalse(oldMaterials.getLoanState().equals("1"), "需要更换的物资未取出!");
|
|
|
|
|
+ // 判断新物资RFID是否被使用
|
|
|
|
|
+ IsMaterials one = iIsMaterialsService.getOne(Wrappers.<IsMaterials>lambdaQuery()
|
|
|
|
|
+ .eq(IsMaterials::getMaterialsRfid, dto.getMaterialsRfid()));
|
|
|
|
|
+ Assert.isFalse(one != null && one.getMaterialsCabinetId() != null, "该RFID已被使用!");
|
|
|
|
|
+ // 判断新物资是否在物资当前柜子中
|
|
|
|
|
+ if (one != null) {
|
|
|
|
|
+ IsMaterialsLoanException one1 = isMaterialsLoanExceptionService.getOne(Wrappers.<IsMaterialsLoanException>lambdaQuery()
|
|
|
|
|
+ .eq(IsMaterialsLoanException::getMaterialsRfid, dto.getMaterialsRfid())
|
|
|
|
|
+ .eq(IsMaterialsLoanException::getStatus, 0)
|
|
|
|
|
+ .eq(IsMaterialsLoanException::getRestitutionToId, oldMaterials.getMaterialsCabinetId())
|
|
|
|
|
+ .orderByDesc(IsMaterialsLoanException::getMisplaceId)
|
|
|
|
|
+ .last("limit 1"));
|
|
|
|
|
+ Assert.isTrue(one1 != null, "请在该柜中放入新物资!");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Transactional
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public Boolean insertCheckedRecord(ReplaceMaterialParamDTO dto) throws JsonProcessingException {
|
|
|
|
|
+ Assert.isFalse(dto.getList().isEmpty(), "更换物资不能为空!");
|
|
|
|
|
+ // 因为比较复杂,循环处理
|
|
|
|
|
+ for (ReplaceMaterialDTO replaceMaterialDTO : dto.getList()) {
|
|
|
|
|
+ Boolean b = checkReplaceData(replaceMaterialDTO);
|
|
|
|
|
+ if (b) {
|
|
|
|
|
+ continue;
|
|
|
|
|
+ }
|
|
|
|
|
+ Assert.notNull(replaceMaterialDTO.getOldMaterialsId(), "旧物资ID不能为空!");
|
|
|
|
|
+ // 1.对旧物资进行处理,如果新物资需要使用旧物资的rfid,则把旧物资的rfid清理掉,然后绑定给新物资,最后开柜门拿出旧物资解绑就可以了
|
|
|
|
|
+ IsMaterials oldMaterial = iIsMaterialsService.getById(replaceMaterialDTO.getOldMaterialsId());
|
|
|
|
|
+ if (StringUtils.isNotBlank(oldMaterial.getMaterialsRfid()) && oldMaterial.getMaterialsRfid().equals(replaceMaterialDTO.getMaterialsRfid())) {
|
|
|
|
|
+ // 1.1该情况属于新物资需要使用旧物资的rfid
|
|
|
|
|
+ iIsMaterialsService.update(Wrappers.<IsMaterials>lambdaUpdate()
|
|
|
|
|
+ .eq(IsMaterials::getMaterialsId, replaceMaterialDTO.getOldMaterialsId())
|
|
|
|
|
+ .set(IsMaterials::getMaterialsCabinetId, null)
|
|
|
|
|
+ .set(IsMaterials::getMaterialsRfid, null));
|
|
|
|
|
+ }
|
|
|
|
|
+ // 1.2无论是否更换rfid,新物资的数据都要存储到物资清单之中
|
|
|
|
|
+ IsMaterials newMaterial = new IsMaterials();
|
|
|
|
|
+ newMaterial.setMaterialsName(replaceMaterialDTO.getMaterialsName());
|
|
|
|
|
+ newMaterial.setMaterialsTypeId(replaceMaterialDTO.getMaterialsTypeId());
|
|
|
|
|
+ newMaterial.setMaterialsCabinetId(oldMaterial.getMaterialsCabinetId());
|
|
|
|
|
+ newMaterial.setLoanState("0");
|
|
|
|
|
+ newMaterial.setMaterialsRfid(replaceMaterialDTO.getMaterialsRfid());
|
|
|
|
|
+ newMaterial.setSupplier(oldMaterial.getSupplier());
|
|
|
|
|
+ newMaterial.setExpirationDate(replaceMaterialDTO.getExpirationDate());
|
|
|
|
|
+ newMaterial.setStatus("0");
|
|
|
|
|
+
|
|
|
|
|
+ PropertyVO propertyVO = new PropertyVO();
|
|
|
|
|
+ propertyVO.setPropertyId(String.valueOf(replaceMaterialDTO.getPropertiesPropertyId()));
|
|
|
|
|
+ propertyVO.setPropertyName(replaceMaterialDTO.getPropertiesProperty());
|
|
|
|
|
+ propertyVO.setRecordId(String.valueOf(replaceMaterialDTO.getPropertiesValueId()));
|
|
|
|
|
+ propertyVO.setValueName(replaceMaterialDTO.getPropertiesValue());
|
|
|
|
|
+ // 使用 ObjectMapper 将对象转换为 JSON 字符串
|
|
|
|
|
+ ObjectMapper objectMapper = new ObjectMapper();
|
|
|
|
|
+ String jsonString = objectMapper.writeValueAsString(propertyVO);
|
|
|
|
|
+ newMaterial.setProperties("[" + jsonString + "]");
|
|
|
|
|
+ iIsMaterialsService.save(newMaterial);
|
|
|
|
|
+
|
|
|
|
|
+ // 2.新增物资更换记录
|
|
|
|
|
+ IsMaterialsChangeRecord isMaterialsChangeRecord = new IsMaterialsChangeRecord();
|
|
|
|
|
+ isMaterialsChangeRecord.setOldMaterialsId(replaceMaterialDTO.getOldMaterialsId());
|
|
|
|
|
+ isMaterialsChangeRecord.setOldMaterialsRfid(oldMaterial.getMaterialsRfid());
|
|
|
|
|
+ isMaterialsChangeRecord.setNewMaterialsId(newMaterial.getMaterialsId());
|
|
|
|
|
+ isMaterialsChangeRecord.setNewMaterialsRfid(newMaterial.getMaterialsRfid());
|
|
|
|
|
+ isMaterialsChangeRecord.setChangeUserId(SecurityUtils.getUserId());
|
|
|
|
|
+ isMaterialsChangeRecord.setChangeDate(new Date());
|
|
|
|
|
+ isMaterialsChangeRecord.setChangeType("0");
|
|
|
|
|
+ // 查询该物资的最新报异常记录
|
|
|
|
|
+ IsMaterialsCheckRecord checkRecord = isMaterialsCheckRecordService.getOne(Wrappers.<IsMaterialsCheckRecord>lambdaQuery()
|
|
|
|
|
+ .eq(IsMaterialsCheckRecord::getMaterialsId, replaceMaterialDTO.getOldMaterialsId())
|
|
|
|
|
+ .eq(IsMaterialsCheckRecord::getStatus, "1")
|
|
|
|
|
+ .orderByDesc(IsMaterialsCheckRecord::getRecordId)
|
|
|
|
|
+ .last("limit 1"));
|
|
|
|
|
+ if (checkRecord != null) {
|
|
|
|
|
+ isMaterialsChangeRecord.setCheckRecordId(checkRecord.getRecordId());
|
|
|
|
|
+ } else {
|
|
|
|
|
+ isMaterialsChangeRecord.setCheckRecordId(0L);
|
|
|
|
|
+ }
|
|
|
|
|
+ isMaterialsChangeRecordService.save(isMaterialsChangeRecord);
|
|
|
|
|
+
|
|
|
|
|
+ // 删除旧物资的取出记录和新物资的存入异常
|
|
|
|
|
+ iIsMaterialsLoanService.remove(Wrappers.<IsMaterialsLoan>lambdaQuery()
|
|
|
|
|
+ .eq(IsMaterialsLoan::getMaterialsId, oldMaterial.getMaterialsId())
|
|
|
|
|
+ .ne(IsMaterialsLoan::getStatus, "1"));
|
|
|
|
|
+ // 删除新物资的存入异常
|
|
|
|
|
+ isMaterialsLoanExceptionService.remove(Wrappers.<IsMaterialsLoanException>lambdaQuery()
|
|
|
|
|
+ .eq(IsMaterialsLoanException::getMaterialsRfid, replaceMaterialDTO.getMaterialsRfid())
|
|
|
|
|
+ .eq(IsMaterialsLoanException::getStatus, "0"));
|
|
|
|
|
+ }
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
@Transactional
|
|
@Transactional
|
|
|
@Override
|
|
@Override
|
|
|
public Boolean insertReplaceRecord(ReplaceMaterialParamDTO dto) throws JsonProcessingException {
|
|
public Boolean insertReplaceRecord(ReplaceMaterialParamDTO dto) throws JsonProcessingException {
|
|
@@ -498,6 +608,8 @@ public class HardwareMaterialApiServiceImpl implements HardwareMaterialApiServic
|
|
|
InstructionVO instructionVO = new InstructionVO();
|
|
InstructionVO instructionVO = new InstructionVO();
|
|
|
instructionVO.setMaterialsTypeId(isMaterialsType.getMaterialsTypeId());
|
|
instructionVO.setMaterialsTypeId(isMaterialsType.getMaterialsTypeId());
|
|
|
instructionVO.setMaterialsTypeName(isMaterialsType.getMaterialsTypeName());
|
|
instructionVO.setMaterialsTypeName(isMaterialsType.getMaterialsTypeName());
|
|
|
|
|
+ instructionVO.setMaterialsTypePicture(isMaterialsType.getMaterialsTypePicture());
|
|
|
|
|
+ instructionVO.setMaterialsTypeIcon(isMaterialsType.getMaterialsTypeIcon());
|
|
|
List<IsMaterialsInstructions> instructionsList = instructions.stream().filter(o -> o.getMaterialsTypeId().equals(isMaterialsType.getMaterialsTypeId())).collect(Collectors.toList());
|
|
List<IsMaterialsInstructions> instructionsList = instructions.stream().filter(o -> o.getMaterialsTypeId().equals(isMaterialsType.getMaterialsTypeId())).collect(Collectors.toList());
|
|
|
instructionVO.setInstructions(instructionsList);
|
|
instructionVO.setInstructions(instructionsList);
|
|
|
instructionVO.setNumber(instructionsList.size());
|
|
instructionVO.setNumber(instructionsList.size());
|
|
@@ -638,22 +750,34 @@ public class HardwareMaterialApiServiceImpl implements HardwareMaterialApiServic
|
|
|
.orderByDesc(IsMaterialsCabinet::getCabinetId)
|
|
.orderByDesc(IsMaterialsCabinet::getCabinetId)
|
|
|
.last("limit 1"));
|
|
.last("limit 1"));
|
|
|
Assert.isFalse(cabinet == null, "物资柜信息不存在!");
|
|
Assert.isFalse(cabinet == null, "物资柜信息不存在!");
|
|
|
|
|
+ // 1.1柜子中的物资信息
|
|
|
|
|
+ List<IsMaterials> isMaterials = iIsMaterialsService.list(Wrappers.<IsMaterials>lambdaQuery()
|
|
|
|
|
+ .eq(IsMaterials::getMaterialsCabinetId, cabinet.getCabinetId()));
|
|
|
// 2.获取用户信息
|
|
// 2.获取用户信息
|
|
|
Long userId = SecurityUtils.getUserId();
|
|
Long userId = SecurityUtils.getUserId();
|
|
|
- // 3.获取本人在该物资柜子上取还数据
|
|
|
|
|
|
|
+ // 3.获取本人在该物资柜子上有效取还数据
|
|
|
Integer rarNumber = null;
|
|
Integer rarNumber = null;
|
|
|
- List<IsMaterialsLoan> loanList = iIsMaterialsLoanService.list(Wrappers.<IsMaterialsLoan>lambdaQuery()
|
|
|
|
|
- .eq(IsMaterialsLoan::getLoanFromId, cabinet.getCabinetId())
|
|
|
|
|
- .eq(IsMaterialsLoan::getLoanUserId, userId)
|
|
|
|
|
- .ne(IsMaterialsLoan::getStatus, "1"));
|
|
|
|
|
- if (!loanList.isEmpty()) {
|
|
|
|
|
- rarNumber = loanList.size();
|
|
|
|
|
|
|
+ if (isMaterials.isEmpty()) {
|
|
|
|
|
+ rarNumber = 0;
|
|
|
|
|
+ } else {
|
|
|
|
|
+ List<Long> materialsIds = isMaterials.stream().map(IsMaterials::getMaterialsId).collect(Collectors.toList());
|
|
|
|
|
+ List<IsMaterialsLoan> loanList = iIsMaterialsLoanService.list(Wrappers.<IsMaterialsLoan>lambdaQuery()
|
|
|
|
|
+ .in(IsMaterialsLoan::getMaterialsId, materialsIds)
|
|
|
|
|
+ .eq(IsMaterialsLoan::getLoanFromId, cabinet.getCabinetId())
|
|
|
|
|
+ .eq(IsMaterialsLoan::getLoanUserId, userId)
|
|
|
|
|
+ .ne(IsMaterialsLoan::getStatus, "1"));
|
|
|
|
|
+ if (!loanList.isEmpty()) {
|
|
|
|
|
+ rarNumber = loanList.size();
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
- // 4.获取该物资柜的需要更换数量
|
|
|
|
|
-
|
|
|
|
|
|
|
+ // 4.获取该物资柜的需要更换数量,在柜子里,损坏或者过期
|
|
|
|
|
+ int changeNumber = (int) isMaterials.stream().filter(o ->
|
|
|
|
|
+ StringUtils.isNotBlank(o.getLoanState()) && o.getLoanState().equals("1")
|
|
|
|
|
+ && StringUtils.isNotBlank(o.getStatus()) && (o.getStatus().equals("1") || o.getStatus().equals("2"))
|
|
|
|
|
+ ).count();
|
|
|
// 5.获取本人在该物资柜上未完成的检查计划
|
|
// 5.获取本人在该物资柜上未完成的检查计划
|
|
|
Integer checkNumber = null;
|
|
Integer checkNumber = null;
|
|
|
- List<IsMaterialsPlanCabinet> planCabinets = iIsMaterialsPlanCabinetService.list(Wrappers.<IsMaterialsPlanCabinet>lambdaQuery()
|
|
|
|
|
|
|
+ /*List<IsMaterialsPlanCabinet> planCabinets = iIsMaterialsPlanCabinetService.list(Wrappers.<IsMaterialsPlanCabinet>lambdaQuery()
|
|
|
.eq(IsMaterialsPlanCabinet::getCabinetId, cabinet.getCabinetId())
|
|
.eq(IsMaterialsPlanCabinet::getCabinetId, cabinet.getCabinetId())
|
|
|
.isNull(IsMaterialsPlanCabinet::getSignatureImg)
|
|
.isNull(IsMaterialsPlanCabinet::getSignatureImg)
|
|
|
.isNull(IsMaterialsPlanCabinet::getSignatureTime));
|
|
.isNull(IsMaterialsPlanCabinet::getSignatureTime));
|
|
@@ -666,6 +790,14 @@ public class HardwareMaterialApiServiceImpl implements HardwareMaterialApiServic
|
|
|
if (!myCheckPlans.isEmpty()) {
|
|
if (!myCheckPlans.isEmpty()) {
|
|
|
checkNumber = myCheckPlans.size();
|
|
checkNumber = myCheckPlans.size();
|
|
|
}
|
|
}
|
|
|
|
|
+ }*/
|
|
|
|
|
+ List<IsMaterialsPlanCabinet> myNotFinishPlans = iIsMaterialsPlanCabinetService.list(Wrappers.<IsMaterialsPlanCabinet>lambdaQuery()
|
|
|
|
|
+ .eq(IsMaterialsPlanCabinet::getCheckUserId, userId)
|
|
|
|
|
+ .eq(IsMaterialsPlanCabinet::getCabinetId, cabinet.getCabinetId())
|
|
|
|
|
+ .ne(IsMaterialsPlanCabinet::getSubmit, "1")
|
|
|
|
|
+ .ne(IsMaterialsPlanCabinet::getStatus, "1"));
|
|
|
|
|
+ if (!myNotFinishPlans.isEmpty()) {
|
|
|
|
|
+ checkNumber = 1;
|
|
|
}
|
|
}
|
|
|
// 6.获取物资分类下的可借数据
|
|
// 6.获取物资分类下的可借数据
|
|
|
List<MaterialsHomeVO> materialsHomeVOS = new ArrayList<>();
|
|
List<MaterialsHomeVO> materialsHomeVOS = new ArrayList<>();
|
|
@@ -694,6 +826,7 @@ public class HardwareMaterialApiServiceImpl implements HardwareMaterialApiServic
|
|
|
CabinetHomePageVO cabinetHomePageVO = new CabinetHomePageVO();
|
|
CabinetHomePageVO cabinetHomePageVO = new CabinetHomePageVO();
|
|
|
cabinetHomePageVO.setRarNumber(rarNumber);
|
|
cabinetHomePageVO.setRarNumber(rarNumber);
|
|
|
cabinetHomePageVO.setCheckNumber(checkNumber);
|
|
cabinetHomePageVO.setCheckNumber(checkNumber);
|
|
|
|
|
+ cabinetHomePageVO.setChangeNumber(changeNumber);
|
|
|
cabinetHomePageVO.setList(materialsHomeVOS);
|
|
cabinetHomePageVO.setList(materialsHomeVOS);
|
|
|
return cabinetHomePageVO;
|
|
return cabinetHomePageVO;
|
|
|
}
|
|
}
|
|
@@ -803,7 +936,7 @@ public class HardwareMaterialApiServiceImpl implements HardwareMaterialApiServic
|
|
|
.eq(IsMaterialsCheckRecord::getCabinetId, cabinetByCode.getCabinetId())
|
|
.eq(IsMaterialsCheckRecord::getCabinetId, cabinetByCode.getCabinetId())
|
|
|
.eq(IsMaterialsCheckRecord::getPlanId, dto.getPlanId()));
|
|
.eq(IsMaterialsCheckRecord::getPlanId, dto.getPlanId()));
|
|
|
Assert.isFalse(list.isEmpty(), "暂无检查数据需要提交!");
|
|
Assert.isFalse(list.isEmpty(), "暂无检查数据需要提交!");
|
|
|
- List<IsMaterialsCheckRecord> collect = list.stream().filter(o -> o.getStatus() == null).collect(Collectors.toList());
|
|
|
|
|
|
|
+ List<IsMaterialsCheckRecord> collect = list.stream().filter(o -> o.getStatus() == null || StringUtils.isBlank(o.getStatus())).collect(Collectors.toList());
|
|
|
Assert.isTrue(collect.isEmpty(), "存在未检查的物资,请重新盘查!");
|
|
Assert.isTrue(collect.isEmpty(), "存在未检查的物资,请重新盘查!");
|
|
|
// 2.检查签名是否上传
|
|
// 2.检查签名是否上传
|
|
|
IsMaterialsPlanCabinet one = iIsMaterialsPlanCabinetService.getOne(Wrappers.<IsMaterialsPlanCabinet>lambdaQuery()
|
|
IsMaterialsPlanCabinet one = iIsMaterialsPlanCabinetService.getOne(Wrappers.<IsMaterialsPlanCabinet>lambdaQuery()
|