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

报验点状态监控数据处理

wangming преди 7 месеца
родител
ревизия
69853de49b
променени са 13 файла, в които са добавени 588 реда и са изтрити 3 реда
  1. 36 0
      business-common/src/main/java/com/rongwei/bscommon/sys/dao/ZhcxInsideInspectionDao.java
  2. 41 0
      business-common/src/main/java/com/rongwei/bscommon/sys/dao/ZhcxItpProjectNodesDao.java
  3. 20 0
      business-common/src/main/java/com/rongwei/bscommon/sys/dao/ZhcxOutsideInspectionItpDao.java
  4. 28 0
      business-common/src/main/java/com/rongwei/bscommon/sys/service/ZhcxInsideInspectionService.java
  5. 9 0
      business-common/src/main/java/com/rongwei/bscommon/sys/service/ZhcxItpProjectNodesService.java
  6. 15 0
      business-common/src/main/java/com/rongwei/bscommon/sys/service/ZhcxOutsideInspectionItpService.java
  7. 8 0
      business-common/src/main/java/com/rongwei/bscommon/sys/service/ZhcxProjectManageService.java
  8. 342 3
      business-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ZhcxInsideInspectionServiceImpl.java
  9. 15 0
      business-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ZhcxItpProjectNodesServiceImpl.java
  10. 22 0
      business-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ZhcxOutsideInspectionItpServiceImpl.java
  11. 13 0
      business-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ZhcxProjectManageServiceImpl.java
  12. 26 0
      business-entity/src/main/java/com/rongwei/bsentity/dto/outside/DoPointOutSideBO.java
  13. 13 0
      business-server/src/main/java/com/rongwei/bsserver/controller/ZhcxInsideInspectionController.java

+ 36 - 0
business-common/src/main/java/com/rongwei/bscommon/sys/dao/ZhcxInsideInspectionDao.java

@@ -81,4 +81,40 @@ public interface ZhcxInsideInspectionDao extends BaseMapper<ZhcxInsideInspection
             " AND NOT EXISTS (SELECT * FROM ZHCX_ITP_PROJECT_NODE_STATE_INSIDE zipnsi WHERE zipnsi.INSPECTIONCODE = zii.INSPECTIONCODE) " +
             " AND zii.INSPECTIONSTATUS IN ('30', '40') and zii.LAUNCHTYPE = 'itp' ORDER by zii.INSPECTIONCODE ASC limit 500")
     List<JSONObject> getInitNodeStateInspection();
+
+
+    /**
+     * 获取已经删除报验点的报验单
+     *
+     * @param projectId
+     * @return
+     */
+    @Select("SELECT " +
+            " zii.*, " +
+            " isd.INSPECTIONCONCLUSION " +
+            "FROM " +
+            " ZHCX_INSIDE_INSPECTION zii " +
+            "JOIN ZHCX_INSIDE_INSPECTION_DISPATCH isd ON isd.INSIDEID = zii.ID  " +
+            "JOIN ZHCX_ITP_PROJECT_NODES zipn ON " +
+            " zii.INSPECTIONCONTENTID = zipn.ID " +
+            " AND zipn.DELETED = '1' " +
+            "WHERE " +
+            " zii.DELETED = '0' AND zii.PROJECTID = #{projectId}")
+    List<JSONObject> getDeletedNodeInspection(@Param("projectId") String projectId);
+
+    /**
+     * 获取已删除报验点项目
+     *
+     * @return
+     */
+    @Select("SELECT " +
+            " DISTINCT zii.PROJECTID,zii.PROJECTCODE , zii.PROJECTNAME  " +
+            "FROM " +
+            " ZHCX_INSIDE_INSPECTION zii  " +
+            "JOIN ZHCX_ITP_PROJECT_NODES zipn ON " +
+            " zii.INSPECTIONCONTENTID = zipn.ID " +
+            " AND zipn.DELETED = '1' " +
+            "WHERE " +
+            " zii.DELETED = '0'")
+    List<JSONObject> getDeletedNodeProject();
 }

+ 41 - 0
business-common/src/main/java/com/rongwei/bscommon/sys/dao/ZhcxItpProjectNodesDao.java

@@ -1,5 +1,6 @@
 package com.rongwei.bscommon.sys.dao;
 
+import com.alibaba.fastjson.JSONObject;
 import com.rongwei.bsentity.domain.ZhcxItpProjectNodesDo;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Param;
@@ -63,4 +64,44 @@ public interface ZhcxItpProjectNodesDao extends BaseMapper<ZhcxItpProjectNodesDo
             "   AND l3.ISNEEDOUT = 'true')) " +
             " )")
     List<ZhcxItpProjectNodesDo> getNodesByProjectId(String projectId);
+
+    /**
+     * 查询项目报验点及所属构件,项目id不传会查询所有报验点
+     *
+     * @param projectId
+     * @return
+     */
+    @Select("<script>SELECT " +
+            " if(l2.PNODENAME IS NULL OR l2.PNODENAME = '', l2.NODENAME , CONCAT(l2.PNODENAME, '/', l2.NODENAME)) as PNODENAME, " +
+            " l3.NODENAME, " +
+            " l3.PID, " +
+            " l3.ID " +
+            "FROM " +
+            " ZHCX_ITP_PROJECT_NODES l3 " +
+            "JOIN ZHCX_ITP_PROJECT_NODES l2 ON " +
+            " l2.ID = l3.PID " +
+            "<where>" +
+            "<if test='projectId != null'>" +
+            " l3.PROJECTID = #{projectId}" +
+            "</if>" +
+            " AND l2.DELETED = '0' AND l3.DELETED = '0' " +
+            "</where>" +
+            "</script>")
+    List<JSONObject> getPrjNode(@Param("projectId") String projectId);
+
+    /**
+     * 获取已删除报验点项目
+     *
+     * @return
+     */
+    @Select("SELECT " +
+            " DISTINCT zii.PROJECTID,zii.PROJECTCODE , zii.PROJECTNAME  " +
+            "FROM " +
+            " ZHCX_OUTSIDE_INSPECTION_ITP zii  " +
+            "JOIN ZHCX_ITP_PROJECT_NODES zipn ON " +
+            " zii.INSPECTIONCONTENTID = zipn.ID " +
+            " AND zipn.DELETED = '1' " +
+            "WHERE " +
+            " zii.DELETED = '0'")
+    List<JSONObject> getDeletedNodeProject();
 }

+ 20 - 0
business-common/src/main/java/com/rongwei/bscommon/sys/dao/ZhcxOutsideInspectionItpDao.java

@@ -5,6 +5,7 @@ import com.rongwei.bsentity.domain.ZhcxOutsideInspectionItpDo;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.rongwei.bsentity.dto.OutsideInspactionSyncDto;
 import com.rongwei.bsentity.dto.OutsideInspactionSyncReqquest;
+import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.Update;
 
@@ -69,4 +70,23 @@ public interface ZhcxOutsideInspectionItpDao extends BaseMapper<ZhcxOutsideInspe
             "AND NOT EXISTS (SELECT * FROM ZHCX_ITP_PROJECT_NODE_STATE_OUTSIDE zipnsi WHERE zipnsi.INSPECTIONCODE = itp.INSPECTIONCODE) " +
             "AND INSPECTIONSTATUS IN ('30', '40') and itp.LAUNCHTYPE = 'itp' ORDER by itp.INSPECTIONCODE ASC limit 500")
     List<JSONObject> getInitNodeStateInspection();
+
+    /**
+     * 获取已经删除报验点的报验单
+     *
+     * @param projectId
+     * @return
+     */
+    @Select("SELECT " +
+            " zii.*, " +
+            " isd.INSPECTIONCONCLUSION " +
+            "FROM " +
+            " ZHCX_OUTSIDE_INSPECTION_ITP zii " +
+            "JOIN ZHCX_OUTSIDE_INSPECTION_ITP_SUPERVISION_DISPATCH isd ON isd.ITPID = zii.ID  " +
+            "JOIN ZHCX_ITP_PROJECT_NODES zipn ON " +
+            " zii.INSPECTIONCONTENTID = zipn.ID " +
+            " AND zipn.DELETED = '1' " +
+            "WHERE " +
+            " zii.DELETED = '0' AND zii.PROJECTID = #{projectId}")
+    List<JSONObject> getDeletedNodeInspection(@Param("projectId") String projectId);
 }

+ 28 - 0
business-common/src/main/java/com/rongwei/bscommon/sys/service/ZhcxInsideInspectionService.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.rongwei.bsentity.dto.InsideInspectionOperRequest;
 import com.rongwei.bsentity.dto.inside.*;
 import com.rongwei.bsentity.vo.ZhcxInsideInspectionVo;
+import org.apache.ibatis.annotations.Param;
 
 import javax.servlet.http.HttpServletResponse;
 import java.util.List;
@@ -130,4 +131,31 @@ public interface ZhcxInsideInspectionService extends IService<ZhcxInsideInspecti
      * 获取初始化报验点状态报验单
      */
     List<JSONObject> getInitNodeStateInspection();
+
+    /**
+     * 获取已经删除报验点的报验单
+     *
+     * @param projectId
+     * @return
+     */
+    List<JSONObject> getDeletedNodeInspection(String projectId);
+
+    /**
+     * 获取已删除报验点项目
+     *
+     * @return
+     */
+    List<JSONObject> getDeletedNodeProject();
+
+    /**
+     * 处理已删除报验点的报验单
+     *
+     */
+    void doDeletedPoint(String projectId);
+
+    /**
+     * 处理已删除报验点的报验单
+     *
+     */
+    void doDeletedPointByPrjCode(String prjCode);
 }

+ 9 - 0
business-common/src/main/java/com/rongwei/bscommon/sys/service/ZhcxItpProjectNodesService.java

@@ -1,5 +1,6 @@
 package com.rongwei.bscommon.sys.service;
 
+import com.alibaba.fastjson.JSONObject;
 import com.rongwei.bsentity.domain.ZhcxItpProjectNodesDo;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.rongwei.bsentity.dto.OutsideInspectionProjectPointDto;
@@ -43,4 +44,12 @@ public interface ZhcxItpProjectNodesService extends IService<ZhcxItpProjectNodes
      */
     List<String> getStructureByProjectId(String projectId);
 
+    /**
+     * 查询项目报验点及所属构件,项目id不传会查询所有报验点
+     *
+     * @param projectId
+     * @return
+     */
+    List<JSONObject> getPrjNode(String projectId);
+
 }

+ 15 - 0
business-common/src/main/java/com/rongwei/bscommon/sys/service/ZhcxOutsideInspectionItpService.java

@@ -74,5 +74,20 @@ public interface ZhcxOutsideInspectionItpService extends IService<ZhcxOutsideIns
     List<JSONObject> getInitNodeStateInspection();
 
     void batchDownloadFile(List<ZhcxOutsideExportVo> list, HttpServletResponse response);
+
+    /**
+     * 查询项目报验点及所属构件,项目id不传会查询所有报验点
+     *
+     * @param projectId
+     * @return
+     */
+    List<JSONObject> getDeletedNodeInspection(String projectId);
+
+    /**
+     * 获取已删除报验点项目
+     *
+     * @return
+     */
+    List<JSONObject> getDeletedNodeProject();
 }
 

+ 8 - 0
business-common/src/main/java/com/rongwei/bscommon/sys/service/ZhcxProjectManageService.java

@@ -103,4 +103,12 @@ public interface ZhcxProjectManageService extends IService<ZhcxProjectManageDo>
     void cronGenerateRectifyData();
 
     List<ZhcxProjectRectifyMachineVo> getListApiData(Map<String, Object> map);
+
+    /**
+     * 通过项目编码获取项目
+     *
+     * @param prjCode
+     * @return
+     */
+    ZhcxProjectManageDo getByCode(String prjCode);
 }

+ 342 - 3
business-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ZhcxInsideInspectionServiceImpl.java

@@ -8,7 +8,6 @@ import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.ZipUtil;
-import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -23,16 +22,15 @@ import com.rongwei.bscommon.sys.dao.ZhcxInsideInspectionDao;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.rongwei.bsentity.dto.*;
 import com.rongwei.bsentity.dto.inside.*;
+import com.rongwei.bsentity.dto.outside.DoPointOutSideBO;
 import com.rongwei.bsentity.dto.project.node.ProjectNodeStateBo;
 import com.rongwei.bsentity.dto.project.node.UnItpNodeStateBo;
 import com.rongwei.bsentity.vo.ZhcxInsideInspectionVo;
 import com.rongwei.commonservice.serial.service.SysSerialNumberService;
-import com.rongwei.rwadmincommon.system.domain.PagePartDo;
 import com.rongwei.rwadmincommon.system.domain.SysRoleDo;
 import com.rongwei.rwadmincommon.system.domain.SysUserDo;
 import com.rongwei.rwadmincommon.system.service.PagePartService;
 import com.rongwei.rwadmincommon.system.service.SysGeneralCRUDService;
-import com.rongwei.rwadmincommon.system.service.SysModulePagePartRelService;
 import com.rongwei.rwadmincommon.system.service.SysUserService;
 import com.rongwei.rwadmincommon.system.vo.SysUserVo;
 import com.rongwei.rwcommon.base.exception.CustomException;
@@ -57,6 +55,7 @@ import java.io.*;
 import java.net.URLEncoder;
 import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -99,6 +98,12 @@ public class ZhcxInsideInspectionServiceImpl extends ServiceImpl<ZhcxInsideInspe
     @Autowired
     private ZhcxItpProjectNodeStateService itpProjectNodeStateService;
 
+    @Autowired
+    private ZhcxItpProjectNodeStateOutsideService itpProjectNodeStateOutsideService;
+
+    @Autowired
+    private ZhcxItpProjectNodeStateInsideService itpProjectNodeStateInsideService;
+
     @Autowired
     private ZhcxInsideInspectionCoreIndicatorsService insideInspectionCoreIndicatorsService;
 
@@ -111,6 +116,15 @@ public class ZhcxInsideInspectionServiceImpl extends ServiceImpl<ZhcxInsideInspe
     @Value("${temp.filepath:#{null}}")
     private String filepath;
 
+    @Autowired
+    private ZhcxItpProjectNodesService itpProjectNodesService;
+
+    @Autowired
+    private ZhcxOutsideInspectionItpService outsideInspectionItpService;
+
+    @Autowired
+    private ZhcxProjectManageService projectManageService;
+
     /**
      * 保存报验单
      *
@@ -841,6 +855,331 @@ public class ZhcxInsideInspectionServiceImpl extends ServiceImpl<ZhcxInsideInspe
         return dao.getInitNodeStateInspection();
     }
 
+    /**
+     * 获取已经删除报验点的报验单
+     *
+     * @param projectId
+     * @return
+     */
+    @Override
+    public List<JSONObject> getDeletedNodeInspection(String projectId) {
+        return dao.getDeletedNodeInspection(projectId);
+    }
+
+    /**
+     * 获取已删除报验点项目
+     *
+     * @return
+     */
+    @Override
+    public List<JSONObject> getDeletedNodeProject() {
+        return dao.getDeletedNodeProject();
+    }
+
+    /**
+     * 处理已删除报验点的报验单
+     *
+     */
+    @Transactional
+    @Override
+    public void doDeletedPoint(String projectId) {
+
+        //获取项目中报验点及所属构件
+        final List<JSONObject> prjNodeList = itpProjectNodesService.getPrjNode(projectId);
+        Map<String, JSONObject> prjNodeMap = new HashMap<>(prjNodeList.size()); //key:构件_报验点,value:报验点信息
+        prjNodeList.stream().forEach(item -> prjNodeMap.put(item.getString("PNODENAME").concat("_").concat(item.getString("NODENAME")), item));
+
+        //外部报验单
+        final List<JSONObject> outsideList = outsideInspectionItpService.getDeletedNodeInspection(projectId); //报验点已经删除的外部报验单
+        Map<String, List<JSONObject>> outsideMap = new HashMap<>(outsideList.size());//key:构件_报验点, value:外部报验单列表
+        for(JSONObject outside : outsideList) {
+            String key = getPointKey4Inspection(outside);
+            if(ObjectUtil.isEmpty(key)) {//构件或者报验点为空不做处理
+                continue;
+            }
+            putInspectionMap(key, outside, outsideMap); //转map
+        }
+
+        List<ZhcxInsideInspectionDo> updateInsideList = new ArrayList<>(); //需要更新的报验单
+        List<ZhcxOutsideInspectionItpDo> updateOutsideList = new ArrayList<>(); //需要更新的报验单
+        List<String> outsideCodeDoneList = new ArrayList<>(); //已处理外部报验单号
+
+        //内部报验单
+        final List<JSONObject> insideList = getDeletedNodeInspection(projectId); //已删除报验点的报验单
+        Map<String, List<JSONObject>> insideMap = new HashMap<>(insideList.size());//key:构件_报验点, value:外部报验单列表
+        for(JSONObject inside : insideList) {
+            String key = getPointKey4Inspection(inside);
+            if(ObjectUtil.isEmpty(key)) {//构件或者报验点为空不做处理
+                continue;
+            }
+
+            //为了方便处理未操作的外部报验单
+            putInspectionMap(key, inside, insideMap); //转map
+
+            final JSONObject prjNode = prjNodeMap.get(key);
+            if(ObjectUtil.isNull(prjNode)) {//报验点已删除,并且没有新建的报验点,这样的报验单不做处理
+                continue;
+            }
+
+            //同一个报验点发起的外部报验单
+            final DoPointOutSideBO pointOutSideBO = doPointOutside(outsideMap.get(key), prjNode);
+            updateOutsideList.addAll(pointOutSideBO.getUpdateList());
+            outsideCodeDoneList.addAll(pointOutSideBO.getUpdateCodeList());
+
+            ZhcxInsideInspectionDo entity = new ZhcxInsideInspectionDo();
+            entity.setStructureid(prjNode.getString("PID")); //未删除的构件id
+            entity.setInspectioncontentid(prjNode.getString("ID")); //未删除的报验点id
+            entity.setId(inside.getString("ID"));
+            updateInsideList.add(entity);
+
+            String machineNo = inside.getString("MACHINENO");
+            if (ObjectUtil.isEmpty(machineNo)) {
+                machineNo = inside.getString("STRUCTUREMACHINENO");
+            }
+            String[] machinenos = machineNo.split(",");
+
+            //已删除报验点状态
+            LambdaQueryWrapper<ZhcxItpProjectNodeStateDo> nodeStateWrapper = Wrappers.lambdaQuery();
+            nodeStateWrapper.eq(ZhcxItpProjectNodeStateDo::getNodeid, inside.getString("INSPECTIONCONTENTID"))
+                    .in(ZhcxItpProjectNodeStateDo::getMathinecode, machinenos)
+                    .eq(ZhcxItpProjectNodeStateDo::getDeleted, "0");
+            final List<ZhcxItpProjectNodeStateDo> nodeStateList = itpProjectNodeStateService.list(nodeStateWrapper);
+
+            //内部报验单
+            if(ObjectUtil.isEmpty(nodeStateList)) { //已删除报验单不存在报验点状态
+                continue;
+            }
+
+            //新的报验点
+            nodeStateWrapper = Wrappers.lambdaQuery();
+            nodeStateWrapper.eq(ZhcxItpProjectNodeStateDo::getNodeid, prjNode.getString("ID"))
+                    .in(ZhcxItpProjectNodeStateDo::getMathinecode, machinenos)
+                    .eq(ZhcxItpProjectNodeStateDo::getDeleted, "0");
+            List<ZhcxItpProjectNodeStateDo> nodeStateNewList = itpProjectNodeStateService.list(nodeStateWrapper);
+            if(ObjectUtil.isEmpty(nodeStateNewList)) {//新的没值
+                //将报验点状态中报验点id换成新的报验点id
+                List<String> nodeStateIdList = nodeStateList.stream().map(item -> item.getId()).collect(Collectors.toList());
+                ZhcxItpProjectNodeStateDo nodeStateDo = new ZhcxItpProjectNodeStateDo();
+                nodeStateDo.setNodeid(prjNode.getString("ID"));
+                LambdaUpdateWrapper<ZhcxItpProjectNodeStateDo> updateWrapper = Wrappers.lambdaUpdate();
+                updateWrapper.in(ZhcxItpProjectNodeStateDo::getId, nodeStateIdList);
+                itpProjectNodeStateService.update(nodeStateDo, updateWrapper);
+            } else {
+                //新的报验点已经创建报验点状态,只需要修改内外部报验点的内外部报验单的报验点状态id,并删除旧的报验点状态
+                Map<String, ZhcxItpProjectNodeStateDo> oldNodeStateMap = new HashMap<>();
+                for(ZhcxItpProjectNodeStateDo old : nodeStateList) {
+                    oldNodeStateMap.put(old.getMathinecode(), old);
+                }
+
+                List<String> oldNodeStateIdList = new ArrayList<>();
+                for(ZhcxItpProjectNodeStateDo newState : nodeStateNewList) {
+                    ZhcxItpProjectNodeStateDo oldNodeStateDo = oldNodeStateMap.get(newState.getMathinecode());
+                    if(ObjectUtil.isEmpty(oldNodeStateDo)) {
+                        continue;
+                    }
+
+                    oldNodeStateIdList.add(oldNodeStateDo.getId());
+
+                    //外部报验单
+                    LambdaUpdateWrapper<ZhcxItpProjectNodeStateOutsideDo> outsideLambdaUpdateWrapper = Wrappers.lambdaUpdate();
+                    outsideLambdaUpdateWrapper.eq(ZhcxItpProjectNodeStateOutsideDo::getStateid, oldNodeStateDo.getId())
+                            .set(ZhcxItpProjectNodeStateOutsideDo::getStateid, newState.getId());
+                    itpProjectNodeStateOutsideService.update(outsideLambdaUpdateWrapper);
+
+                    //内部报验单
+                    LambdaUpdateWrapper<ZhcxItpProjectNodeStateInsideDo> isideLambdaUpdateWrapper = Wrappers.lambdaUpdate();
+                    isideLambdaUpdateWrapper.eq(ZhcxItpProjectNodeStateInsideDo::getStateid, oldNodeStateDo.getId())
+                            .set(ZhcxItpProjectNodeStateInsideDo::getStateid, newState.getId());
+                    itpProjectNodeStateInsideService.update(isideLambdaUpdateWrapper);
+                }
+                //删除已经处理过的旧的报验单状态
+                if(ObjectUtil.isNotEmpty(oldNodeStateIdList)) {
+                    itpProjectNodeStateService.removeByIds(oldNodeStateIdList);
+                }
+            }
+        }
+
+        //更新外部报验单
+        if(ObjectUtil.isNotEmpty(updateOutsideList)) {
+            outsideInspectionItpService.updateBatchById(updateOutsideList);
+        }
+        //更新内部报验点
+        if(ObjectUtil.isNotEmpty(updateInsideList)) {
+            updateBatchById(updateInsideList);
+        }
+
+        //找出未处理的外部报验单,处理外部报验单---------------未处理的外部报验单
+        updateOutsideList = new ArrayList<>();
+        List<JSONObject> notDoOutsideList = outsideList.stream()
+                .filter(item -> !outsideCodeDoneList.contains(item.getString("INSPECTIONCODE")))
+                .collect(Collectors.toList());
+
+        if(ObjectUtil.isEmpty(notDoOutsideList)) {
+            return ;
+        }
+
+        for(JSONObject outside : notDoOutsideList) {
+            String key = getPointKey4Inspection(outside);
+            if(ObjectUtil.isEmpty(key)) {//构件或者报验点为空不做处理
+                continue;
+            }
+
+            final JSONObject prjNode = prjNodeMap.get(key);
+            if(ObjectUtil.isNull(prjNode)) {//报验点已删除,并且没有新建的报验点,这样的报验单不做处理
+                continue;
+            }
+
+            ZhcxOutsideInspectionItpDo entity = new ZhcxOutsideInspectionItpDo();
+            entity.setStructureid(prjNode.getString("PID")); //未删除的构件id
+            entity.setInspectioncontentid(prjNode.getString("ID")); //未删除的报验点id
+            entity.setId(outside.getString("ID"));
+            updateOutsideList.add(entity);
+
+            String machineNo = outside.getString("MACHINENO");
+            if (ObjectUtil.isEmpty(machineNo)) {
+                machineNo = outside.getString("STRUCTUREMACHINENO");
+            }
+            String[] machinenos = machineNo.split(",");
+
+            //已删除报验点状态
+            LambdaQueryWrapper<ZhcxItpProjectNodeStateDo> nodeStateWrapper = Wrappers.lambdaQuery();
+            nodeStateWrapper.eq(ZhcxItpProjectNodeStateDo::getNodeid, outside.getString("INSPECTIONCONTENTID"))
+                    .in(ZhcxItpProjectNodeStateDo::getMathinecode, machinenos)
+                    .eq(ZhcxItpProjectNodeStateDo::getDeleted, "0");
+            final List<ZhcxItpProjectNodeStateDo> nodeStateList = itpProjectNodeStateService.list(nodeStateWrapper);
+
+            if(ObjectUtil.isEmpty(nodeStateList)) { //已删除报验单不存在报验点状态
+                continue;
+            }
+
+            //新的报验点
+            nodeStateWrapper = Wrappers.lambdaQuery();
+            nodeStateWrapper.eq(ZhcxItpProjectNodeStateDo::getNodeid, prjNode.getString("ID"))
+                    .in(ZhcxItpProjectNodeStateDo::getMathinecode, machinenos)
+                    .eq(ZhcxItpProjectNodeStateDo::getDeleted, "0");
+            List<ZhcxItpProjectNodeStateDo> nodeStateNewList = itpProjectNodeStateService.list(nodeStateWrapper);
+            if(ObjectUtil.isEmpty(nodeStateNewList)) {//新的没值
+                //将报验点状态中报验点id换成新的报验点id
+                List<String> nodeStateIdList = nodeStateList.stream().map(item -> item.getId()).collect(Collectors.toList());
+                ZhcxItpProjectNodeStateDo nodeStateDo = new ZhcxItpProjectNodeStateDo();
+                nodeStateDo.setNodeid(prjNode.getString("ID"));
+                LambdaUpdateWrapper<ZhcxItpProjectNodeStateDo> updateWrapper = Wrappers.lambdaUpdate();
+                updateWrapper.in(ZhcxItpProjectNodeStateDo::getId, nodeStateIdList);
+                itpProjectNodeStateService.update(nodeStateDo, updateWrapper);
+            } else {
+                //新的报验点已经创建报验点状态,只需要修改内外部报验点的内外部报验单的报验点状态id,并删除旧的报验点状态
+                Map<String, ZhcxItpProjectNodeStateDo> oldNodeStateMap = new HashMap<>();
+                for(ZhcxItpProjectNodeStateDo old : nodeStateList) {
+                    oldNodeStateMap.put(old.getMathinecode(), old);
+                }
+
+                List<String> oldNodeStateIdList = new ArrayList<>();
+                for(ZhcxItpProjectNodeStateDo newState : nodeStateNewList) {
+                    ZhcxItpProjectNodeStateDo oldNodeStateDo = oldNodeStateMap.get(newState.getMathinecode());
+                    if(ObjectUtil.isEmpty(oldNodeStateDo)) {
+                        continue;
+                    }
+
+                    oldNodeStateIdList.add(oldNodeStateDo.getId());
+
+                    //外部报验单
+                    LambdaUpdateWrapper<ZhcxItpProjectNodeStateOutsideDo> outsideLambdaUpdateWrapper = Wrappers.lambdaUpdate();
+                    outsideLambdaUpdateWrapper.eq(ZhcxItpProjectNodeStateOutsideDo::getStateid, oldNodeStateDo.getId())
+                            .set(ZhcxItpProjectNodeStateOutsideDo::getStateid, newState.getId());
+                    itpProjectNodeStateOutsideService.update(outsideLambdaUpdateWrapper);
+
+                    //内部报验单
+                    LambdaUpdateWrapper<ZhcxItpProjectNodeStateInsideDo> isideLambdaUpdateWrapper = Wrappers.lambdaUpdate();
+                    isideLambdaUpdateWrapper.eq(ZhcxItpProjectNodeStateInsideDo::getStateid, oldNodeStateDo.getId())
+                            .set(ZhcxItpProjectNodeStateInsideDo::getStateid, newState.getId());
+                    itpProjectNodeStateInsideService.update(isideLambdaUpdateWrapper);
+                }
+                //删除已经处理过的旧的报验单状态
+                if(ObjectUtil.isNotEmpty(oldNodeStateIdList)) {
+                    itpProjectNodeStateService.removeByIds(oldNodeStateIdList);
+                }
+            }
+        }
+        //更新外部报验单
+        if(ObjectUtil.isNotEmpty(updateOutsideList)) {
+            outsideInspectionItpService.updateBatchById(updateOutsideList);
+        }
+
+    }
+
+    /**
+     * 处理已删除报验点的报验单
+     *
+     */
+    @Override
+    public void doDeletedPointByPrjCode(String prjCode) {
+        final ZhcxProjectManageDo project = projectManageService.getByCode(prjCode);
+        doDeletedPoint(project.getId());
+    }
+
+    /**
+     * 报验单list转map
+     *
+     * @param key
+     * @param side
+     * @param map
+     */
+    private void putInspectionMap(String key, JSONObject side, Map<String, List<JSONObject>> map) {
+        List<JSONObject> pointInspectionList = map.get(key);
+        if(ObjectUtil.isNull(pointInspectionList)) {
+            pointInspectionList = new ArrayList<>();
+        }
+        pointInspectionList.add(side);
+        map.put(key, pointInspectionList);
+    }
+
+    /**
+     * 处理同一个报验点的外部报验单
+     *
+     * @param pointOutsideList
+     * @param prjNode
+     * @return
+     */
+    private DoPointOutSideBO doPointOutside(List<JSONObject> pointOutsideList, JSONObject prjNode) {
+        if(ObjectUtil.isEmpty(pointOutsideList)) {
+            return DoPointOutSideBO.builder()
+                    .updateList(Collections.EMPTY_LIST)
+                    .updateCodeList(Collections.EMPTY_LIST)
+                    .build();
+        }
+
+        List<ZhcxOutsideInspectionItpDo> updateList = new ArrayList<>(pointOutsideList.size());
+        List<String> updateCodeList = new ArrayList<>(pointOutsideList.size());
+        ZhcxOutsideInspectionItpDo entity;
+        for(JSONObject outside : pointOutsideList) {
+            entity = new ZhcxOutsideInspectionItpDo();
+            entity.setStructureid(prjNode.getString("PID")); //未删除的构件id
+            entity.setInspectioncontentid(prjNode.getString("ID")); //未删除的报验点id
+            entity.setId(outside.getString("ID"));
+            updateList.add(entity);
+            updateCodeList.add(outside.getString("INSPECTIONCODE"));
+        }
+
+        return DoPointOutSideBO.builder()
+                .updateList(updateList)
+                .updateCodeList(updateCodeList)
+                .build();
+    }
+
+    /**
+     * 获取报验点key 构件_报验点
+     *
+     * @param item
+     * @return
+     */
+    private String getPointKey4Inspection(JSONObject item) {
+        if(ObjectUtil.isEmpty(item.getString("STRUCTURENAME")) || ObjectUtil.isEmpty(item.getString("INSPECTIONPOINT"))) {
+            return null;
+        }
+        //获取未删除报验点
+        return item.getString("STRUCTURENAME").concat("_").concat(item.getString("INSPECTIONPOINT"));
+    }
+
     /**
      * 保存历史记录
      *

+ 15 - 0
business-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ZhcxItpProjectNodesServiceImpl.java

@@ -2,6 +2,7 @@ package com.rongwei.bscommon.sys.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSONObject;
 import com.aspose.cells.SaveFormat;
 import com.aspose.cells.Workbook;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -55,6 +56,9 @@ public class ZhcxItpProjectNodesServiceImpl extends ServiceImpl<ZhcxItpProjectNo
     @Autowired
     private CommonSqlDao commonSqlDao;
 
+    @Autowired
+    private ZhcxItpProjectNodesDao dao;
+
     @Autowired
     private ExcelUtils excelUtils;
 
@@ -647,4 +651,15 @@ public class ZhcxItpProjectNodesServiceImpl extends ServiceImpl<ZhcxItpProjectNo
 
         return list.stream().map(item -> item.getNodename()).collect(Collectors.toList());
     }
+
+    /**
+     * 查询项目报验点及所属构件,项目id不传会查询所有报验点
+     *
+     * @param projectId
+     * @return
+     */
+    @Override
+    public List<JSONObject> getPrjNode(String projectId) {
+        return dao.getPrjNode(projectId);
+    }
 }

+ 22 - 0
business-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ZhcxOutsideInspectionItpServiceImpl.java

@@ -1442,6 +1442,28 @@ public class ZhcxOutsideInspectionItpServiceImpl extends ServiceImpl<ZhcxOutside
         }
     }
 
+    /**
+     * 查询项目报验点及所属构件,项目id不传会查询所有报验点
+     *
+     * @param projectId
+     * @return
+     */
+    @Override
+    public List<JSONObject> getDeletedNodeInspection(String projectId) {
+        final List<JSONObject> list = dao.getDeletedNodeInspection(projectId);
+        return ObjectUtil.isNull(list) ? Collections.emptyList() : list;
+    }
+
+    /**
+     * 获取已删除报验点项目
+     *
+     * @return
+     */
+    @Override
+    public List<JSONObject> getDeletedNodeProject() {
+        return dao.getInitNodeStateInspection();
+    }
+
     private boolean isWithinAllowedTime() {
         // 获取当前时间
         LocalTime now = LocalTime.now();

+ 13 - 0
business-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ZhcxProjectManageServiceImpl.java

@@ -478,6 +478,19 @@ public class ZhcxProjectManageServiceImpl extends ServiceImpl<ZhcxProjectManageD
         return zhcxProjectManageDao.getListApiData(map);
     }
 
+    /**
+     * 通过项目编码获取项目
+     *
+     * @param prjCode
+     * @return
+     */
+    @Override
+    public ZhcxProjectManageDo getByCode(String prjCode) {
+        final LambdaQueryWrapper<ZhcxProjectManageDo> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(ZhcxProjectManageDo::getProjectCode, prjCode);
+        return getOne(queryWrapper);
+    }
+
     //private static final BeanCopier copier = BeanCopier.create(ZhcxProjectRectifyDo.class, ZhcxProjectRectifyVo.class, false);
     @Override
     public R getRectifyListData(Map<String, Object> map) {

+ 26 - 0
business-entity/src/main/java/com/rongwei/bsentity/dto/outside/DoPointOutSideBO.java

@@ -0,0 +1,26 @@
+package com.rongwei.bsentity.dto.outside;
+
+import com.rongwei.bsentity.domain.ZhcxOutsideInspectionItpDo;
+import lombok.*;
+
+import java.util.List;
+
+@Setter
+@Getter
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class DoPointOutSideBO {
+
+    /**
+     * 需要更新的列表
+     *
+     */
+    private List<ZhcxOutsideInspectionItpDo> updateList;
+
+    /**
+     * 更新列表的报验单号
+     *
+     */
+    private List<String> updateCodeList;
+}

+ 13 - 0
business-server/src/main/java/com/rongwei/bsserver/controller/ZhcxInsideInspectionController.java

@@ -3,6 +3,7 @@ package com.rongwei.bsserver.controller;
 
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.rongwei.bscommon.sys.service.ZhcxInsideInspectionService;
 import com.rongwei.bsentity.dto.InsideInspectionOperRequest;
 import com.rongwei.bsentity.dto.inside.*;
@@ -245,5 +246,17 @@ public class ZhcxInsideInspectionController {
         service.updateSupervision(list);
         return R.ok();
     }
+
+    /**
+     * 删除报验点处理
+     *
+     * @param json
+     */
+    @PostMapping("/doDeletedPointInspection")
+    @ResponseBody
+    public R doDeletedPointInspection(@RequestBody JSONObject json) {
+        service.doDeletedPointByPrjCode(json.getString("projectCode"));
+        return R.ok();
+    }
 }