Преглед на файлове

修改物资手动更换业务

车车 преди 3 месеца
родител
ревизия
ae13d8b6cc

+ 14 - 0
ktg-iscs/src/main/java/com/ktg/iscs/controller/HardwareMaterialApiController.java

@@ -40,6 +40,20 @@ public class HardwareMaterialApiController extends BaseController {
         return CommonResult.success(hardwareMaterialApiService.selectExMaterialTypeById(cabinetId, cabinetCode));
     }
 
+    @ApiOperation("手动更换数据校验")
+    @Log(title = "手动更换数据校验", businessType = BusinessType.INSERT)
+    @PostMapping("/checkReplaceData")
+    public CommonResult<Boolean> checkReplaceData(@RequestBody @Parameter(name = "dto", description = "数据类,放到body") ReplaceMaterialDTO dto) {
+        return CommonResult.success(hardwareMaterialApiService.checkReplaceData(dto));
+    }
+
+    @ApiOperation("手动更换物资-校验后的提交")
+    @Log(title = "手动更换物资-校验后的提交", businessType = BusinessType.INSERT)
+    @PostMapping("/insertCheckedRecord")
+    public CommonResult<Boolean> insertCheckedRecord(@RequestBody @Parameter(name = "dto", description = "数据类,放到body") ReplaceMaterialParamDTO dto) throws JsonProcessingException {
+        return CommonResult.success(hardwareMaterialApiService.insertCheckedRecord(dto));
+    }
+
     @ApiOperation("手动更换物资")
     @Log(title = "手动更换物资", businessType = BusinessType.INSERT)
     @PostMapping("/insertReplaceRecord")

+ 1 - 1
ktg-iscs/src/main/java/com/ktg/iscs/domain/IsMaterials.java

@@ -88,7 +88,7 @@ public class IsMaterials extends BaseBean
     @ApiModelProperty(value = "属性数组,JSON 格式 [{propertId: , valueId: }, {propertId: , valueId: }]")
     private String properties;
 
-    @ApiModelProperty(value = "物资状态(字典material_info_status)")
+    @ApiModelProperty(value = "物资状态(字典material_info_status)---0正常 1损坏 2过期3放错柜子")
     private String status;
 
     @ApiModelProperty(value = "物资类型图标")

+ 6 - 0
ktg-iscs/src/main/java/com/ktg/iscs/domain/vo/hardwareMaterialApi/InstructionVO.java

@@ -21,6 +21,12 @@ public class InstructionVO {
     @ApiModelProperty(value = "物资类型名称")
     private String materialsTypeName;
 
+    @ApiModelProperty(value = "物资类型图标")
+    private String materialsTypeIcon;
+
+    @ApiModelProperty(value = "物资类型缩略图")
+    private String materialsTypePicture;
+
     @ApiModelProperty(value = "统计数据")
     private Integer number;
 

+ 14 - 0
ktg-iscs/src/main/java/com/ktg/iscs/service/HardwareMaterialApiService.java

@@ -23,6 +23,20 @@ public interface HardwareMaterialApiService {
      */
     List<ExMaterialTypeVO> selectExMaterialTypeById(Long cabinetId, String cabinetCode) throws JsonProcessingException;
 
+    /**
+     * 手动更换数据校验
+     * @param dto
+     * @return
+     */
+    Boolean checkReplaceData(ReplaceMaterialDTO dto);
+
+    /**
+     * 手动更换物资-校验后的提交
+     * @param dto
+     * @return
+     */
+    Boolean insertCheckedRecord(ReplaceMaterialParamDTO dto) throws JsonProcessingException;
+
     /**
      * 手动更换物资
      * @param dto

+ 144 - 11
ktg-iscs/src/main/java/com/ktg/iscs/service/impl/HardwareMaterialApiServiceImpl.java

@@ -133,6 +133,116 @@ public class HardwareMaterialApiServiceImpl implements HardwareMaterialApiServic
         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
     @Override
     public Boolean insertReplaceRecord(ReplaceMaterialParamDTO dto) throws JsonProcessingException {
@@ -498,6 +608,8 @@ public class HardwareMaterialApiServiceImpl implements HardwareMaterialApiServic
                         InstructionVO instructionVO = new InstructionVO();
                         instructionVO.setMaterialsTypeId(isMaterialsType.getMaterialsTypeId());
                         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());
                         instructionVO.setInstructions(instructionsList);
                         instructionVO.setNumber(instructionsList.size());
@@ -638,22 +750,34 @@ public class HardwareMaterialApiServiceImpl implements HardwareMaterialApiServic
                 .orderByDesc(IsMaterialsCabinet::getCabinetId)
                 .last("limit 1"));
         Assert.isFalse(cabinet == null, "物资柜信息不存在!");
+        // 1.1柜子中的物资信息
+        List<IsMaterials> isMaterials = iIsMaterialsService.list(Wrappers.<IsMaterials>lambdaQuery()
+                .eq(IsMaterials::getMaterialsCabinetId, cabinet.getCabinetId()));
         // 2.获取用户信息
         Long userId = SecurityUtils.getUserId();
-        // 3.获取本人在该物资柜子上取还数据
+        // 3.获取本人在该物资柜子上有效取还数据
         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.获取本人在该物资柜上未完成的检查计划
         Integer checkNumber = null;
-        List<IsMaterialsPlanCabinet> planCabinets = iIsMaterialsPlanCabinetService.list(Wrappers.<IsMaterialsPlanCabinet>lambdaQuery()
+        /*List<IsMaterialsPlanCabinet> planCabinets = iIsMaterialsPlanCabinetService.list(Wrappers.<IsMaterialsPlanCabinet>lambdaQuery()
                 .eq(IsMaterialsPlanCabinet::getCabinetId, cabinet.getCabinetId())
                 .isNull(IsMaterialsPlanCabinet::getSignatureImg)
                 .isNull(IsMaterialsPlanCabinet::getSignatureTime));
@@ -666,6 +790,14 @@ public class HardwareMaterialApiServiceImpl implements HardwareMaterialApiServic
             if (!myCheckPlans.isEmpty()) {
                 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.获取物资分类下的可借数据
         List<MaterialsHomeVO> materialsHomeVOS = new ArrayList<>();
@@ -694,6 +826,7 @@ public class HardwareMaterialApiServiceImpl implements HardwareMaterialApiServic
         CabinetHomePageVO cabinetHomePageVO = new CabinetHomePageVO();
         cabinetHomePageVO.setRarNumber(rarNumber);
         cabinetHomePageVO.setCheckNumber(checkNumber);
+        cabinetHomePageVO.setChangeNumber(changeNumber);
         cabinetHomePageVO.setList(materialsHomeVOS);
         return cabinetHomePageVO;
     }
@@ -803,7 +936,7 @@ public class HardwareMaterialApiServiceImpl implements HardwareMaterialApiServic
                 .eq(IsMaterialsCheckRecord::getCabinetId, cabinetByCode.getCabinetId())
                 .eq(IsMaterialsCheckRecord::getPlanId, dto.getPlanId()));
         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(), "存在未检查的物资,请重新盘查!");
         // 2.检查签名是否上传
         IsMaterialsPlanCabinet one = iIsMaterialsPlanCabinetService.getOne(Wrappers.<IsMaterialsPlanCabinet>lambdaQuery()

+ 7 - 7
ktg-iscs/src/main/java/com/ktg/iscs/service/impl/IsMaterialsLoanServiceImpl.java

@@ -311,9 +311,9 @@ public class IsMaterialsLoanServiceImpl extends ServiceImpl<IsMaterialsLoanMappe
     public int insertIsMaterialsLoan(AddLoanDTO dto) throws Exception {
         try {
             // 检测如果已经有一条借出,则提示异常
-            List<IsMaterialsLoan> loanList = list(Wrappers.<IsMaterialsLoan>lambdaQuery()
+            /*List<IsMaterialsLoan> loanList = list(Wrappers.<IsMaterialsLoan>lambdaQuery()
                     .eq(IsMaterialsLoan::getMaterialsId, dto.getMaterialsId())
-                    .ne(IsMaterialsLoan::getStatus, "1"));
+                    .ne(IsMaterialsLoan::getStatus, "1"));*/
             // Assert.isTrue(loanList.isEmpty(), "该物资存在多条借出记录!");
             Date nowDate = DateUtils.getNowDate();
             IsMaterialsLoan isMaterialsLoan = BeanUtils.toBean(dto, IsMaterialsLoan.class);
@@ -511,7 +511,7 @@ public class IsMaterialsLoanServiceImpl extends ServiceImpl<IsMaterialsLoanMappe
                 .isNull(IsMaterialsLoan::getRestitutionToId)
         );
         // Assert.isFalse(loanList.isEmpty(), "尚未找到该物资的借出信息!");
-        // 如果没有取信息 直接存储归还异常
+        // 如果没有取信息 直接存储归还异常
         if (loanList.isEmpty() || materials.getMaterialsCabinetId() == null) {
             IsMaterialsLoanException loanException = new IsMaterialsLoanException();
             loanException.setMaterialsId(dto.getMaterialsId());
@@ -546,16 +546,16 @@ public class IsMaterialsLoanServiceImpl extends ServiceImpl<IsMaterialsLoanMappe
         }
         // 2.开始更新loan表数据
         boolean update = update(Wrappers.<IsMaterialsLoan>lambdaUpdate()
-                .eq(IsMaterialsLoan::getMaterialsLoanId, loanList.get(0).getMaterialsLoanId())
+                // .eq(IsMaterialsLoan::getMaterialsLoanId, loanList.get(0).getMaterialsLoanId())
+                .eq(IsMaterialsLoan::getMaterialsId, dto.getMaterialsId())
                 .set(IsMaterialsLoan::getRestitutionUserId, dto.getRestitutionUserId())
                 .set(IsMaterialsLoan::getRestitutionToId, dto.getRestitutionToId())
                 .set(IsMaterialsLoan::getStatus, 1)
                 .set(IsMaterialsLoan::getActualRestitutionTime, new Date()));
         // 3.开始更新物资信息
-        isMaterialsService.update(Wrappers.<IsMaterials>lambdaUpdate()
+        /*isMaterialsService.update(Wrappers.<IsMaterials>lambdaUpdate()
                 .eq(IsMaterials::getMaterialsId, dto.getMaterialsId())
-                .set(IsMaterials::getLoanState, 1)
-                .set(IsMaterials::getStatus, 0));
+                .set(IsMaterials::getLoanState, 1));*/
         // 3.1 检查当前物资是否有未处理的错换柜子异常,如果有,现在已经还对了,默认处理掉异常信息
         List<IsMaterialsLoanException> exList = isMaterialsLoanExceptionService.list(Wrappers.<IsMaterialsLoanException>lambdaQuery()
                 .eq(IsMaterialsLoanException::getMaterialsId, dto.getMaterialsId())

+ 4 - 1
ktg-iscs/src/main/java/com/ktg/iscs/service/impl/IsMaterialsServiceImpl.java

@@ -232,7 +232,10 @@ public class IsMaterialsServiceImpl extends ServiceImpl<IsMaterialsMapper, IsMat
                         Assert.isFalse(true, dto.getMaterialsRfid() + "物资已经是柜中状态,无法再放入!");
                     }
                     // 3.开始更新物资状态
-                    update(Wrappers.<IsMaterials>lambdaUpdate().eq(IsMaterials::getMaterialsId, dto.getMaterialsId()).set(IsMaterials::getLoanState, dto.getLoanState()).set(IsMaterials::getUpdateTime, new Date()));
+                    update(Wrappers.<IsMaterials>lambdaUpdate()
+                            .eq(IsMaterials::getMaterialsId, dto.getMaterialsId())
+                            .set(IsMaterials::getLoanState, dto.getLoanState())
+                            .set(IsMaterials::getUpdateTime, new Date()));
                     // 4.开始更新借出表信息
                     if ("0".equals(dto.getLoanState())) {
                         // Assert.notNull(dto.getLoanUserId(), "请告诉我借取人员信息!");

+ 1 - 0
ktg-iscs/src/main/java/com/ktg/iscs/service/impl/IsTicketOperLogServiceImpl.java

@@ -28,6 +28,7 @@ public class IsTicketOperLogServiceImpl extends ServiceImpl<IsTicketOperLogMappe
     public Page<IsTicketOperLog> getIsTicketOperLogPage(Page<IsTicketOperLog> page, IsTicketOperLog isTicketOperLog) {
         Page<IsTicketOperLog> result = page(page, Wrappers.<IsTicketOperLog>lambdaQuery()
                 .eq(isTicketOperLog.getOperationType() != null, IsTicketOperLog::getOperationType, isTicketOperLog.getOperationType())
+                .eq(isTicketOperLog.getTicketId() != null, IsTicketOperLog::getTicketId, isTicketOperLog.getTicketId())
                 .orderByAsc(IsTicketOperLog::getOperationId));
         return result;
     }