车车 10 месяцев назад
Родитель
Сommit
f264acfaae

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

@@ -40,12 +40,12 @@ public class HardwareMaterialApiController extends BaseController {
         return CommonResult.success(hardwareMaterialApiService.selectExMaterialTypeById(cabinetId, cabinetCode));
     }
 
-    @ApiOperation("手动更换数据校验")
+    /*@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)

+ 3 - 0
ktg-iscs/src/main/java/com/ktg/iscs/service/IIsMaterialsPlanCabinetService.java

@@ -18,4 +18,7 @@ public interface IIsMaterialsPlanCabinetService extends IService<IsMaterialsPlan
 
 
     List<IsMaterialsPlanCabinet> getCheckPlanCabinetList(IsMaterialsPlanCabinet dto);
+
+    Boolean autoChangeCheckRecord(String cabinetCode);
+
 }

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

@@ -171,6 +171,7 @@ public class HardwareMaterialApiServiceImpl implements HardwareMaterialApiServic
     @Override
     public Boolean insertCheckedRecord(ReplaceMaterialParamDTO dto) throws JsonProcessingException {
         Assert.isFalse(dto.getList().isEmpty(), "更换物资不能为空!");
+        Long cabinetId = null;
         // 因为比较复杂,循环处理
         for (ReplaceMaterialDTO replaceMaterialDTO : dto.getList()) {
             Boolean b = checkReplaceData(replaceMaterialDTO);
@@ -181,6 +182,7 @@ public class HardwareMaterialApiServiceImpl implements HardwareMaterialApiServic
             Assert.notNull(replaceMaterialDTO.getOldMaterialsId(), "旧物资ID不能为空!");
             // 1.对旧物资进行处理,如果新物资需要使用旧物资的rfid,则把旧物资的rfid清理掉,然后绑定给新物资,最后开柜门拿出旧物资解绑就可以了
             IsMaterials oldMaterial = iIsMaterialsService.getById(replaceMaterialDTO.getOldMaterialsId());
+            cabinetId = oldMaterial.getMaterialsCabinetId();
             if (StringUtils.isNotBlank(oldMaterial.getMaterialsRfid()) && oldMaterial.getMaterialsRfid().equals(replaceMaterialDTO.getMaterialsRfid())) {
                 // 1.1该情况属于新物资需要使用旧物资的rfid
                 iIsMaterialsService.update(Wrappers.<IsMaterials>lambdaUpdate()
@@ -295,6 +297,13 @@ public class HardwareMaterialApiServiceImpl implements HardwareMaterialApiServic
                     .set(IsMaterialsLoanException::getStatus, "1")
                     .set(IsMaterialsLoanException::getHandleTime, new Date()));
         }
+        // 更新检查记录
+        if (cabinetId != null) {
+            IsMaterialsCabinet byId = iIsMaterialsCabinetService.getById(cabinetId);
+            if (byId != null) {
+                iIsMaterialsPlanCabinetService.autoChangeCheckRecord(byId.getCabinetCode());
+            }
+        }
         return true;
     }
 
@@ -1186,6 +1195,8 @@ public class HardwareMaterialApiServiceImpl implements HardwareMaterialApiServic
             }
         }
         autoReplaceReportVO.setUnbindingList(unbindingMaterialVOS);
+        // 更新检查记录
+        iIsMaterialsPlanCabinetService.autoChangeCheckRecord(dto.getCabinetCode());
         return autoReplaceReportVO;
     }
 

+ 74 - 0
ktg-iscs/src/main/java/com/ktg/iscs/service/impl/IsMaterialsPlanCabinetServiceImpl.java

@@ -1,15 +1,26 @@
 package com.ktg.iscs.service.impl;
 
+import cn.hutool.core.lang.Assert;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.common.collect.Lists;
+import com.ktg.common.utils.SecurityUtils;
+import com.ktg.iscs.domain.IsMaterials;
+import com.ktg.iscs.domain.IsMaterialsCabinet;
+import com.ktg.iscs.domain.IsMaterialsCheckRecord;
 import com.ktg.iscs.domain.IsMaterialsPlanCabinet;
 import com.ktg.iscs.mapper.IsMaterialsPlanCabinetMapper;
+import com.ktg.iscs.service.IIsMaterialsCabinetService;
+import com.ktg.iscs.service.IIsMaterialsCheckRecordService;
 import com.ktg.iscs.service.IIsMaterialsPlanCabinetService;
+import com.ktg.iscs.service.IIsMaterialsService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.Date;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 物资检查计划关联物资柜Service业务层处理
@@ -22,6 +33,12 @@ public class IsMaterialsPlanCabinetServiceImpl extends ServiceImpl<IsMaterialsPl
 
     @Autowired
     private IsMaterialsPlanCabinetMapper isMaterialsPlanCabinetMapper;
+    @Autowired
+    private IIsMaterialsCabinetService iIsMaterialsCabinetService;
+    @Autowired
+    private IIsMaterialsCheckRecordService isMaterialsCheckRecordService;
+    @Autowired
+    private IIsMaterialsService iIsMaterialsService;
 
     @Override
     public Page<IsMaterialsPlanCabinet> getIsMaterialsPlanCabinetPage(Page<IsMaterialsPlanCabinet> page, IsMaterialsPlanCabinet isMaterialsPlanCabinet) {
@@ -35,4 +52,61 @@ public class IsMaterialsPlanCabinetServiceImpl extends ServiceImpl<IsMaterialsPl
         return isMaterialsPlanCabinetMapper.getCheckPlanCabinetList(dto);
     }
 
+    @Override
+    public Boolean autoChangeCheckRecord(String cabinetCode) {
+        IsMaterialsCabinet cabinet = iIsMaterialsCabinetService.getCabinetByCode(cabinetCode);
+        Assert.isFalse(cabinet == null, "柜子不存在!");
+        // 1.获取这个物资柜当前最近一次未完成的检查计划
+        IsMaterialsPlanCabinet planCabinet = getOne(Wrappers.<IsMaterialsPlanCabinet>lambdaQuery()
+                .eq(IsMaterialsPlanCabinet::getCabinetId, cabinet.getCabinetId())
+                .ne(IsMaterialsPlanCabinet::getStatus, "1")
+                .orderByDesc(IsMaterialsPlanCabinet::getPlanId)
+                .last("limit 1"));
+        if (planCabinet != null) {
+            // 2.检查有没有生成检查记录
+            List<IsMaterialsCheckRecord> checkRecords = isMaterialsCheckRecordService.list(Wrappers.<IsMaterialsCheckRecord>lambdaQuery()
+                    .eq(IsMaterialsCheckRecord::getPlanId, planCabinet.getPlanId())
+                    .eq(IsMaterialsCheckRecord::getCabinetId, cabinet.getCabinetId()));
+            if (checkRecords.isEmpty()) {
+                return true;
+            } else {
+                // 柜子中的物资信息
+                List<IsMaterials> cabinetMaterials = iIsMaterialsService.list(Wrappers.<IsMaterials>lambdaQuery()
+                        .eq(IsMaterials::getMaterialsCabinetId, cabinet.getCabinetId())
+                        .eq(IsMaterials::getLoanState, "1"));
+                // 3.0如果有借出则需要删除
+                needDel(Lists.newArrayList(checkRecords), Lists.newArrayList(cabinetMaterials));
+                // 3.1如果有还入需要新增
+                needAdd(planCabinet.getPlanId(), cabinet.getCabinetId(), Lists.newArrayList(checkRecords), Lists.newArrayList(cabinetMaterials));
+            }
+        }
+        return true;
+    }
+
+    private List<Long> needDel(List<IsMaterialsCheckRecord> checkRecords, List<IsMaterials> cabinetMaterials) {
+        // 需要删除的物资
+        checkRecords.removeIf(item -> cabinetMaterials.stream().map(IsMaterials::getMaterialsId).collect(Collectors.toList()).contains(item.getMaterialsId()));
+        List<Long> collect = checkRecords.stream().map(IsMaterialsCheckRecord::getRecordId).collect(Collectors.toList());
+        if (!collect.isEmpty()) {
+            isMaterialsCheckRecordService.removeByIds(collect);
+        }
+        return collect;
+    }
+
+    private List<IsMaterials> needAdd(Long planId, Long cabinetId, List<IsMaterialsCheckRecord> checkRecords, List<IsMaterials> cabinetMaterials) {
+        // 需要删除的物资
+        cabinetMaterials.removeIf(item -> checkRecords.stream().map(IsMaterialsCheckRecord::getMaterialsId).collect(Collectors.toList()).contains(item.getMaterialsId()));
+        for (IsMaterials vo : cabinetMaterials) {
+            IsMaterialsCheckRecord checkRecord = new IsMaterialsCheckRecord();
+            checkRecord.setPlanId(planId);
+            checkRecord.setCabinetId(cabinetId);
+            checkRecord.setMaterialsId(vo.getMaterialsId());
+            checkRecord.setCheckUserId(SecurityUtils.getUserId());
+            checkRecord.setCheckDate(new Date());
+            checkRecord.setMaterialsRfid(vo.getMaterialsRfid());
+            isMaterialsCheckRecordService.save(checkRecord);
+        }
+        return cabinetMaterials;
+    }
+
 }

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

@@ -52,6 +52,8 @@ public class IsMaterialsServiceImpl extends ServiceImpl<IsMaterialsMapper, IsMat
     @Autowired
     private IIsMaterialsCabinetService iIsMaterialsCabinetService;
     @Autowired
+    private IIsMaterialsPlanCabinetService iIsMaterialsPlanCabinetService;
+    @Autowired
     private IIsMaterialsPropertyService iIsMaterialsPropertyService;
     @Autowired
     private IIsMaterialsPropertyValueService iIsMaterialsPropertyValueService;
@@ -182,7 +184,8 @@ public class IsMaterialsServiceImpl extends ServiceImpl<IsMaterialsMapper, IsMat
             ObjectMapper objectMapper = new ObjectMapper();
             for (MaterialsPageVO record : isMaterialsPage.getRecords()) {
                 if (StringUtils.isNotBlank(record.getProperties())) {
-                    List<PropertyVO> propertyVOS = objectMapper.readValue(record.getProperties(), new TypeReference<List<PropertyVO>>() {});
+                    List<PropertyVO> propertyVOS = objectMapper.readValue(record.getProperties(), new TypeReference<List<PropertyVO>>() {
+                    });
                     String propertiesValue = propertyVOS.stream().map(PropertyVO::getValueName).collect(Collectors.joining(","));
                     record.setPropertiesValue(propertiesValue);
                     String propertiesProperty = propertyVOS.stream().map(PropertyVO::getPropertyName).collect(Collectors.joining(","));
@@ -269,6 +272,8 @@ public class IsMaterialsServiceImpl extends ServiceImpl<IsMaterialsMapper, IsMat
                     failRfidList.add(dto.getMaterialsRfid());
                 }
             }
+            // 更新检查记录
+            iIsMaterialsPlanCabinetService.autoChangeCheckRecord(loanParamDTO.getList().get(0).getRestitutionToCabinetCode());
             // 5.检查有没有异常的物资,如果有,则返回提示
             if (!failRfidList.isEmpty()) {
                 return "以下RFID本次存取失败:" + failRfidList;