Explorar o código

Merge remote-tracking branch 'origin/V0.0.8' into V0.0.8

jingyuanchao hai 1 ano
pai
achega
c697d40a32

+ 27 - 12
project_data/sql/0.0.8/soc/soc.sql

@@ -137,22 +137,12 @@ CREATE TABLE `sys_user_account_mapper` (
                                            `master_user_id` bigint NOT NULL COMMENT '主账号用户Id',
                                            `sub_user_id` bigint NOT NULL COMMENT '可切换子账号用户Id',
                                            `create_time` datetime DEFAULT NULL COMMENT '创建时间',
-                                           `modified_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '修改人名称',
+                                           `create_by` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人',
                                            `update_time` datetime DEFAULT NULL COMMENT '修改时间',
-                                           `modified_by` bigint DEFAULT NULL COMMENT '修改人id',
+                                           `update_by` bigint DEFAULT NULL COMMENT '修改人',
                                            PRIMARY KEY (`master_user_id`,`sub_user_id`) USING BTREE
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='主账号与子账号对应关系表';
 
-
-DELIMITER ??
-DROP PROCEDURE IF EXISTS schema_change ??
-CREATE PROCEDURE schema_change () BEGIN
-
-
-END ??
-DELIMITER ;
-CALL schema_change ();
-
 -- 新增菜单 年度工作总结
 DELETE from `sys_menu` where id in(01774689203604049922,01774690857464254465,01774691065061330945,01774691126533050369,01774691223434055681);
 INSERT INTO `sys_menu` (`id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `platform_type`, `icon`, `image_path`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (01774689203604049922, '年度工作总结', 1711912586825461761, 4, 'worksummary', 'safetyBook/workSummary/index', NULL, 1, 0, 'C', '0', '0', 'core:worksummary:query', '1', 'documentation', NULL, '超级管理员', '2024-04-01 14:44:12', '超级管理员', '2024-04-01 14:51:17', '');
@@ -263,3 +253,28 @@ END ??
 DELIMITER ;
 CALL schema_change ();
 
+update sys_org_extend set remote_count = 0 , cash_adding_room = 0;
+
+
+-- 温湿度告警规则字段对应表 单位错位 刷新
+UPDATE `iot_alarm_system_field`
+SET `unit` = '°C'
+WHERE
+        `sys_field_code` = '4183_1';
+
+UPDATE `iot_alarm_system_field`
+SET `unit` = '%RH'
+WHERE
+        `sys_field_code` = '4183_2';
+
+UPDATE iot_alarm_data
+SET alarm_value = REPLACE ( alarm_value, '°C', '%RH' )
+WHERE
+    alarm_value IS NOT NULL
+  AND `field_code` = '4183_2';
+
+UPDATE iot_alarm_data
+SET alarm_value = REPLACE ( alarm_value, '%RH', '°C' )
+WHERE
+    alarm_value IS NOT NULL
+  AND `field_code` = '4183_1';

+ 14 - 1
project_data/sql/0.0.8/升级说明

@@ -13,4 +13,17 @@ security:
   ignore:
     whites:
       - /system/version/checkUpdate
-      - /file/file/getFile/*
+      - /file/file/getFile/*
+soc-gateway-dev.yml 修改以下配置
+spring:
+  servlet:
+      multipart:
+        max-file-size: 200MB
+
+nacos配置中心file模块修改配置说明,
+soc-file-dev.yml 修改以下配置
+spring:
+  servlet:
+    multipart:
+      max-file-size: 200MB
+      max-request-size: 200MB

+ 3 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/letter/dto/CoreIntroduceLetterRequestDto.java

@@ -41,4 +41,7 @@ public class CoreIntroduceLetterRequestDto extends BaseEntity {
 
     @ApiModelProperty(value = "请求来源")
     private Boolean requestFromWeb;
+
+    @ApiModelProperty(value = "APP端查询关键字")
+    private String keyWords;
 }

+ 1 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/letter/vo/CoreIntroduceLetterVo.java

@@ -113,6 +113,7 @@ public class CoreIntroduceLetterVo {
     private String approveRemark;
     private Date approveTime;
 
+    private  String letterUserNames;
 
 
 }

+ 209 - 141
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/access/service/impl/TMonitoringRetrievalPlanServiceImpl.java

@@ -592,6 +592,7 @@ public class TMonitoringRetrievalPlanServiceImpl extends ServiceImpl<TMonitoring
     public int distribute(Long id, Boolean immediateEffect) throws ParseException {
         //查询
         TMonitoringRetrievalPlan publishPlan = tMonitoringRetrievalPlanMapper.selectById(id);
+        Integer oldPlanStatus=publishPlan.getPlanStatus();
         publishPlan.setImmediately(immediateEffect);
         publishPlan.setIsDistribute("1");
         publishPlan.setPlanStatus(1);
@@ -614,7 +615,7 @@ public class TMonitoringRetrievalPlanServiceImpl extends ServiceImpl<TMonitoring
 
 
         final CompletableFuture<List<TMonitoringRetrievalPlan>> planListFuture = CompletableFuture.supplyAsync(() -> {
-            return getNeedCreateTaskPlans(loginUserOrg, publishPlan);
+            return getNeedCreateTaskPlans(loginUserOrg, publishPlan,oldPlanStatus);
         }, threadPoolTaskExecutor);
 
         planListFuture.thenAcceptAsync((result) -> {
@@ -631,7 +632,7 @@ public class TMonitoringRetrievalPlanServiceImpl extends ServiceImpl<TMonitoring
         return i;
     }
 
-    private List<TMonitoringRetrievalPlan> getNeedCreateTaskPlans(SysOrg loginUserOrg, TMonitoringRetrievalPlan publishPlan) {
+    private List<TMonitoringRetrievalPlan> getNeedCreateTaskPlans(SysOrg loginUserOrg, TMonitoringRetrievalPlan publishPlan,Integer oldPlanStatus) {
         List<TMonitoringRetrievalPlan> tempPlans = new ArrayList<>();
         SysOrg publishPlanOrg = remoteOrgService.selectSysOrgById(publishPlan.getOrgId(), SecurityConstants.INNER);
         //如果登录当前是省联社 办事处
@@ -639,84 +640,77 @@ public class TMonitoringRetrievalPlanServiceImpl extends ServiceImpl<TMonitoring
 
             QueryWrapper queryWrapper = new QueryWrapper();
             queryWrapper.eq(PARENT_ID, publishPlan.getId());
+            queryWrapper.eq("is_deleted", 0);
             // 获取当前计划已存在的子计划
             List<TMonitoringRetrievalPlan> existSubPlanlist = tMonitoringRetrievalPlanMapper.selectList(queryWrapper);
             //如果已存在子计划
             if (CollectionUtils.isNotEmpty(existSubPlanlist)) {
-                for (TMonitoringRetrievalPlan tm : existSubPlanlist) {
-                    tm.setPlanStatus(1);
-                    tm.setIsDistribute("1");
-                    baseMapper.updateById(tm);
-                    setPlanStartEndTime(publishPlan, tm);
-                    tempPlans.add(tm);
-//                    if (publishPlan.getOrgType().equals("3")) {
-//                        setPlanStartEndTime(publishPlan,tm);
-//                        tempPlans.add(tm);
-//                    }
-//                    else
-//                    {
-//                        SysOrg sysOrg = new SysOrg();
-//                        sysOrg.setPath(tm.getOrgPath());
-//                        sysOrg.setType(Integer.valueOf(tMonitoringRetrievalPlan.getOrgType()));
-//                        List<SysOrg> sysOrgs = remoteOrgService.listByParentIdAndType(sysOrg, SecurityConstants.INNER);
-//                        List<SysOrg> sysOrgs=getExecOrgList(null,Integer.valueOf(publishPlan.getOrgType()),tm.getOrgPath());
-//                        for (SysOrg s : sysOrgs) {
-//                            TMonitoringRetrievalPlan plan = createTempPlan(publishPlan,publishPlan.getId(),s);
-//                            tempPlans.add(plan);
-//                        }
-//                    }
+                // 停用状态再次下发,肯定存在已完成任务,之前的子计划不会删除, 但是又有可能修改了具体执行机构 此时需要处理 历史子计划
+                if(ObjectUtil.equal(oldPlanStatus,2))
+                {
+                    tempPlans.addAll(dealSubPlanWithHistorySubPlan(existSubPlanlist,publishPlan,publishPlanOrg));
+                }
+                else {
+                    for (TMonitoringRetrievalPlan tm : existSubPlanlist) {
+                        tm.setPlanStatus(1);
+                        tm.setIsDistribute("1");
+                        baseMapper.updateById(tm);
+                        setPlanStartEndTime(publishPlan, tm);
+                        tempPlans.add(tm);
+                    }
                 }
             } else {
                 // 计划机构类型 是 省联社或者办事处及行社以下的机构类型 才创建子计划
                 if (!checkOrgType(Integer.parseInt(publishPlan.getOrgType()))) {
-                    // 查询当前计划的具体执行机构
-                    List<TMonitoringRetrievalPlanToExecOrg> planExecOrgList = tMonitoringRetrievalPlanToExecOrgMapper.selectByMap(MapUtil.of("plan_id", publishPlan.getId()));
-
-                    List<Long> planExecOrgIds = planExecOrgList.stream().map(x -> x.getOrgId()).collect(Collectors.toList());
-                    // 根据机构类型和具体调阅机构 获取需创建子计划的机构
-                    List<SysOrg> subPlanOrglist = getPlanOrgListByOrgTypeAndExecOrgs(planExecOrgIds, Integer.parseInt(publishPlan.getOrgType()), publishPlanOrg.getPath());
-
-                    List<SysOrg> execOrglist = new ArrayList<>();
-                    if (ObjectUtil.isNotEmpty(planExecOrgList)) {
-                        execOrglist = RemoteCallHandlerExecutor.executeRemoteCall(() ->
-                                        remoteOrgService.selectOrgByIdList(planExecOrgList.stream().map(x -> x.getOrgId()).collect(Collectors.toList()), SecurityConstants.INNER),
-                                ErrorMsgConstants.QUERY_ORG_DATA_ERROR);
-                    }
-
-                    List<TMonitoringRetrievalPlan> needAddSubPlans = new ArrayList<>();
-                    List<TMonitoringRetrievalPlanToExecOrg> needAddSubPlanExecOrgList = new ArrayList<>();
-                    for (SysOrg subPlanOrg : subPlanOrglist) {
-                        TMonitoringRetrievalPlan tMonitoringRetrievalPlan1 = new TMonitoringRetrievalPlan();
-                        BeanUtils.copyProperties(publishPlan, tMonitoringRetrievalPlan1);
-                        tMonitoringRetrievalPlan1.setId(IdWorker.getId());
-                        tMonitoringRetrievalPlan1.setOrgId(subPlanOrg.getId());
-                        tMonitoringRetrievalPlan1.setOrganization(subPlanOrg.getShortName());
-                        tMonitoringRetrievalPlan1.setOrgPath(subPlanOrg.getPath());
-                        tMonitoringRetrievalPlan1.setParentId(publishPlan.getId());
-                        tMonitoringRetrievalPlan1.setIsDistribute("1");
-                        tMonitoringRetrievalPlan1.setCreateType(1);
-//                        SysOrg sysOrg = remoteOrgService.selectSysOrgById(publishPlan.getOrgId(), SecurityConstants.INNER);
-                        tMonitoringRetrievalPlan1.setOrgName(publishPlanOrg.getShortName());
-//                        insertTMonitoringRetrievalPlan(tMonitoringRetrievalPlan1);
-                        needAddSubPlans.add(tMonitoringRetrievalPlan1);
-                        if (ObjectUtil.isNotEmpty(planExecOrgList)) {
-                            execOrglist.stream().filter(x -> x.getPath().contains(subPlanOrg.getPath())).forEach(x -> {
-                                TMonitoringRetrievalPlanToExecOrg tempExecOrg = new TMonitoringRetrievalPlanToExecOrg();
-                                tempExecOrg.setOrgId(x.getId());
-                                tempExecOrg.setPlanId(tMonitoringRetrievalPlan1.getId());
-                                needAddSubPlanExecOrgList.add(tempExecOrg);
-                            });
-                        }
-                    }
-                    //保存子计划和子计划具体执行机构
-                    if (ObjectUtil.isNotEmpty(needAddSubPlans)) {
-                        this.saveBatch(needAddSubPlans);
-                        itMonitoringRetrievalPlanToExecOrgService.saveBatch(needAddSubPlanExecOrgList);
-                        needAddSubPlans.stream().forEach(plan -> {
-                            setPlanStartEndTime(plan, plan);
-                        });
-                        tempPlans.addAll(needAddSubPlans);
-                    }
+                    tempPlans.addAll(buildSubPlans(publishPlan,publishPlanOrg));
+//                    // 查询当前计划的具体执行机构
+//                    List<TMonitoringRetrievalPlanToExecOrg> planExecOrgList = tMonitoringRetrievalPlanToExecOrgMapper.selectByMap(MapUtil.of("plan_id", publishPlan.getId()));
+//
+//                    List<Long> planExecOrgIds = planExecOrgList.stream().map(x -> x.getOrgId()).collect(Collectors.toList());
+//                    // 根据机构类型和具体调阅机构 获取需创建子计划的机构
+//                    List<SysOrg> subPlanOrglist = getPlanOrgListByOrgTypeAndExecOrgs(planExecOrgIds, Integer.parseInt(publishPlan.getOrgType()), publishPlanOrg.getPath());
+//
+//                    List<SysOrg> execOrglist = new ArrayList<>();
+//                    if (ObjectUtil.isNotEmpty(planExecOrgList)) {
+//                        execOrglist = RemoteCallHandlerExecutor.executeRemoteCall(() ->
+//                                        remoteOrgService.selectOrgByIdList(planExecOrgList.stream().map(x -> x.getOrgId()).collect(Collectors.toList()), SecurityConstants.INNER),
+//                                ErrorMsgConstants.QUERY_ORG_DATA_ERROR);
+//                    }
+//
+//                    List<TMonitoringRetrievalPlan> needAddSubPlans = new ArrayList<>();
+//                    List<TMonitoringRetrievalPlanToExecOrg> needAddSubPlanExecOrgList = new ArrayList<>();
+//                    for (SysOrg subPlanOrg : subPlanOrglist) {
+//                        TMonitoringRetrievalPlan tMonitoringRetrievalPlan1 = new TMonitoringRetrievalPlan();
+//                        BeanUtils.copyProperties(publishPlan, tMonitoringRetrievalPlan1);
+//                        tMonitoringRetrievalPlan1.setId(IdWorker.getId());
+//                        tMonitoringRetrievalPlan1.setOrgId(subPlanOrg.getId());
+//                        tMonitoringRetrievalPlan1.setOrganization(subPlanOrg.getShortName());
+//                        tMonitoringRetrievalPlan1.setOrgPath(subPlanOrg.getPath());
+//                        tMonitoringRetrievalPlan1.setParentId(publishPlan.getId());
+//                        tMonitoringRetrievalPlan1.setIsDistribute("1");
+//                        tMonitoringRetrievalPlan1.setCreateType(1);
+////                        SysOrg sysOrg = remoteOrgService.selectSysOrgById(publishPlan.getOrgId(), SecurityConstants.INNER);
+//                        tMonitoringRetrievalPlan1.setOrgName(publishPlanOrg.getShortName());
+////                        insertTMonitoringRetrievalPlan(tMonitoringRetrievalPlan1);
+//                        needAddSubPlans.add(tMonitoringRetrievalPlan1);
+//                        if (ObjectUtil.isNotEmpty(planExecOrgList)) {
+//                            execOrglist.stream().filter(x -> x.getPath().contains(subPlanOrg.getPath())).forEach(x -> {
+//                                TMonitoringRetrievalPlanToExecOrg tempExecOrg = new TMonitoringRetrievalPlanToExecOrg();
+//                                tempExecOrg.setOrgId(x.getId());
+//                                tempExecOrg.setPlanId(tMonitoringRetrievalPlan1.getId());
+//                                needAddSubPlanExecOrgList.add(tempExecOrg);
+//                            });
+//                        }
+//                    }
+//                    //保存子计划和子计划具体执行机构
+//                    if (ObjectUtil.isNotEmpty(needAddSubPlans)) {
+//                        this.saveBatch(needAddSubPlans);
+//                        itMonitoringRetrievalPlanToExecOrgService.saveBatch(needAddSubPlanExecOrgList);
+//                        needAddSubPlans.stream().forEach(plan -> {
+//                            setPlanStartEndTime(plan, plan);
+//                        });
+//                        tempPlans.addAll(needAddSubPlans);
+//                    }
                 } else {
                     publishPlan.setCreateType(1);
                     publishPlan.setUpdateBy(SecurityUtils.getUsername());
@@ -725,100 +719,169 @@ public class TMonitoringRetrievalPlanServiceImpl extends ServiceImpl<TMonitoring
                     setPlanStartEndTime(publishPlan, publishPlan);
                     tempPlans.add(publishPlan);
                 }
-//                if (publishPlan.getOrgType().equals("3")) {
-//                    publishPlan.setCreateType(1);
-//                    publishPlan.setUpdateBy(SecurityUtils.getUsername());
-//                    publishPlan.setUpdateTime(DateUtils.getNowDate());
-//                    baseMapper.updateById(publishPlan);
-//                    setPlanStartEndTime(publishPlan,publishPlan);
-//                    tempPlans.add(publishPlan);
-//                }
-//                else
-//                {
-//                        SysOrg sysOrg = new SysOrg();
-//                        sysOrg.setPath(l.getPath());
-//                        sysOrg.setType(Integer.valueOf(tMonitoringRetrievalPlan.getOrgType()));
-//                        List<SysOrg> sysOrgs = remoteOrgService.listByParentIdAndType(sysOrg, SecurityConstants.INNER);
-//                    List<SysOrg> sysOrgs=getExecOrgList(planExecOrgIds,Integer.valueOf(publishPlan.getOrgType()),l.getPath());
-//                    for (SysOrg s : sysOrgs) {
-//                        TMonitoringRetrievalPlan plan = createTempPlan(publishPlan,tMonitoringRetrievalPlan1.getId(),s);
-//                        tempPlans.add(plan);
-//                    }
-//                }
             }
-        } else {
+        }
+        else // 行社计划,没有子计划,直接生成任务
+        {
             publishPlan.setCreateType(1);
             publishPlan.setIsDistribute("1");
             baseMapper.updateById(publishPlan);
             setPlanStartEndTime(publishPlan, publishPlan);
             tempPlans.add(publishPlan);
-//            SysOrg sysOrg = new SysOrg();
-//            sysOrg.setPath(loginUserOrg.getPath());
-//            sysOrg.setType(Integer.valueOf(publishPlan.getOrgType()));
-//            List<SysOrg> sysOrgs = remoteOrgService.listByParentIdAndType(sysOrg, SecurityConstants.INNER);
-//            for (SysOrg s : sysOrgs) {
-//                TMonitoringRetrievalPlan plan = createTempPlan(publishPlan,publishPlan.getId(),s);
-//                tempPlans.add(plan);
-//            }
         }
         return tempPlans;
     }
 
-    private List<TMonitoringRetrievalPlan> buildSubPlans(TMonitoringRetrievalPlan parentPlan, List<Long> parentPlanExecOrgIds, SysOrg parentPlanOrg) {
-        List<TMonitoringRetrievalPlan> subPlans = new ArrayList<>();
+    /**
+     * 停用状态再次下发,肯定存在已完成任务,之前的子计划不会删除, 但是又有可能修改了具体执行机构 此时需要处理 历史子计划
+     * @param existSubPlanlist
+     * @param publishPlan
+     * @param publishPlanOrg
+     * @return
+     */
+    private List<TMonitoringRetrievalPlan> dealSubPlanWithHistorySubPlan(List<TMonitoringRetrievalPlan> existSubPlanlist, TMonitoringRetrievalPlan publishPlan,SysOrg publishPlanOrg) {
+        List<TMonitoringRetrievalPlan> tempPlans = new ArrayList<>();
+        if(ObjectUtil.isNotEmpty(existSubPlanlist))
+        {
+            // 查询当前计划的具体执行机构
+            List<TMonitoringRetrievalPlanToExecOrg> planExecOrgList = tMonitoringRetrievalPlanToExecOrgMapper.selectByMap(MapUtil.of("plan_id", publishPlan.getId()));
+
+            List<Long> planExecOrgIds = planExecOrgList.stream().map(x -> x.getOrgId()).collect(Collectors.toList());
+            // 根据机构类型和具体调阅机构 获取需创建子计划的机构
+            List<SysOrg> subPlanOrglist = getPlanOrgListByOrgTypeAndExecOrgs(planExecOrgIds, Integer.parseInt(publishPlan.getOrgType()), publishPlanOrg.getPath());
+
+            List<SysOrg> execOrglist = new ArrayList<>();
+            if (ObjectUtil.isNotEmpty(planExecOrgList)) {
+                execOrglist = RemoteCallHandlerExecutor.executeRemoteCall(() ->
+                                remoteOrgService.selectOrgByIdList(planExecOrgList.stream().map(x -> x.getOrgId()).collect(Collectors.toList()), SecurityConstants.INNER),
+                        ErrorMsgConstants.QUERY_ORG_DATA_ERROR);
+            }
+
+            List<TMonitoringRetrievalPlan> needSaveSubPlans = new ArrayList<>();
+            List<TMonitoringRetrievalPlanToExecOrg> needAddSubPlanExecOrgList = new ArrayList<>();
+
+            // 找出历史子计划 在新的需要创建计划列表中不存在的删除掉
+            List<TMonitoringRetrievalPlan> needDeletedHistorySubPlan = existSubPlanlist.stream().filter(x -> !subPlanOrglist.stream().anyMatch(y -> ObjectUtil.equal(y.getId(), x.getOrgId()))).collect(toList());
+            if(ObjectUtil.isNotEmpty(needDeletedHistorySubPlan))
+            {
+                needDeletedHistorySubPlan.forEach(x->x.setIsDeleted(1L));
+                this.saveOrUpdateBatch(needDeletedHistorySubPlan);
+            }
+
+            for (SysOrg subPlanOrg : subPlanOrglist) {
+                Optional<TMonitoringRetrievalPlan> historySubPlanOpt = existSubPlanlist.stream().filter(x -> x.getOrgId().equals(subPlanOrg.getId())).findFirst();
+                // 该机构下存在历史子计划
+                if(historySubPlanOpt.isPresent())
+                {
+                    TMonitoringRetrievalPlan historySubPlan=historySubPlanOpt.get();
+                    historySubPlan.setIsDistribute("1");
+                    historySubPlan.setCreateType(1);
+                    historySubPlan.setPlanStatus(1);
+                    needSaveSubPlans.add(historySubPlan);
+                    // 删除历史计划的具体执行机构
+                    tMonitoringRetrievalPlanToExecOrgMapper.deleteByMap(MapUtil.of("plan_id", historySubPlan.getId()));
+                    // 新增新的具体执行机构
+                    if (ObjectUtil.isNotEmpty(planExecOrgList)) {
+                        execOrglist.stream().filter(x -> x.getPath().contains(subPlanOrg.getPath())).forEach(x -> {
+                            TMonitoringRetrievalPlanToExecOrg tempExecOrg = new TMonitoringRetrievalPlanToExecOrg();
+                            tempExecOrg.setOrgId(x.getId());
+                            tempExecOrg.setPlanId(historySubPlan.getId());
+                            needAddSubPlanExecOrgList.add(tempExecOrg);
+                        });
+                    }
+                }
+                else {
+                    TMonitoringRetrievalPlan tMonitoringRetrievalPlan1 = new TMonitoringRetrievalPlan();
+                    BeanUtils.copyProperties(publishPlan, tMonitoringRetrievalPlan1);
+                    tMonitoringRetrievalPlan1.setId(IdWorker.getId());
+                    tMonitoringRetrievalPlan1.setOrgId(subPlanOrg.getId());
+                    tMonitoringRetrievalPlan1.setOrganization(subPlanOrg.getShortName());
+                    tMonitoringRetrievalPlan1.setOrgPath(subPlanOrg.getPath());
+                    tMonitoringRetrievalPlan1.setParentId(publishPlan.getId());
+                    tMonitoringRetrievalPlan1.setIsDistribute("1");
+                    tMonitoringRetrievalPlan1.setCreateType(1);
+                    tMonitoringRetrievalPlan1.setOrgName(publishPlanOrg.getShortName());
+                    needSaveSubPlans.add(tMonitoringRetrievalPlan1);
+                    if (ObjectUtil.isNotEmpty(planExecOrgList)) {
+                        execOrglist.stream().filter(x -> x.getPath().contains(subPlanOrg.getPath())).forEach(x -> {
+                            TMonitoringRetrievalPlanToExecOrg tempExecOrg = new TMonitoringRetrievalPlanToExecOrg();
+                            tempExecOrg.setOrgId(x.getId());
+                            tempExecOrg.setPlanId(tMonitoringRetrievalPlan1.getId());
+                            needAddSubPlanExecOrgList.add(tempExecOrg);
+                        });
+                    }
+                }
+            }
+            //保存子计划和子计划具体执行机构
+            if (ObjectUtil.isNotEmpty(needSaveSubPlans)) {
+                this.saveOrUpdateBatch(needSaveSubPlans);
+                itMonitoringRetrievalPlanToExecOrgService.saveBatch(needAddSubPlanExecOrgList);
+                needSaveSubPlans.stream().forEach(plan -> {
+                    setPlanStartEndTime(plan, plan);
+                });
+                tempPlans.addAll(needSaveSubPlans);
+            }
+
+        }
+        else // 不存在历史子计划,直接全新创建
+        {
+          return buildSubPlans(publishPlan,publishPlanOrg);
+        }
+        return  tempPlans;
+    }
+
+    private List<TMonitoringRetrievalPlan> buildSubPlans(TMonitoringRetrievalPlan publishPlan,SysOrg publishPlanOrg) {
+
+        List<TMonitoringRetrievalPlan> tempPlans = new ArrayList<>();
+        // 查询当前计划的具体执行机构
+        List<TMonitoringRetrievalPlanToExecOrg> planExecOrgList = tMonitoringRetrievalPlanToExecOrgMapper.selectByMap(MapUtil.of("plan_id", publishPlan.getId()));
+
+        List<Long> planExecOrgIds = planExecOrgList.stream().map(x -> x.getOrgId()).collect(Collectors.toList());
         // 根据机构类型和具体调阅机构 获取需创建子计划的机构
-        List<SysOrg> hsOrglist = getPlanOrgListByOrgTypeAndExecOrgs(parentPlanExecOrgIds, 3, parentPlanOrg.getPath());
+        List<SysOrg> subPlanOrglist = getPlanOrgListByOrgTypeAndExecOrgs(planExecOrgIds, Integer.parseInt(publishPlan.getOrgType()), publishPlanOrg.getPath());
 
         List<SysOrg> execOrglist = new ArrayList<>();
-        if (ObjectUtil.isNotEmpty(parentPlanExecOrgIds)) {
+        if (ObjectUtil.isNotEmpty(planExecOrgList)) {
             execOrglist = RemoteCallHandlerExecutor.executeRemoteCall(() ->
-                            remoteOrgService.selectOrgByIdList(parentPlanExecOrgIds, SecurityConstants.INNER),
+                            remoteOrgService.selectOrgByIdList(planExecOrgList.stream().map(x -> x.getOrgId()).collect(Collectors.toList()), SecurityConstants.INNER),
                     ErrorMsgConstants.QUERY_ORG_DATA_ERROR);
         }
 
         List<TMonitoringRetrievalPlan> needAddSubPlans = new ArrayList<>();
         List<TMonitoringRetrievalPlanToExecOrg> needAddSubPlanExecOrgList = new ArrayList<>();
-        for (SysOrg l : hsOrglist) {
+        for (SysOrg subPlanOrg : subPlanOrglist) {
             TMonitoringRetrievalPlan tMonitoringRetrievalPlan1 = new TMonitoringRetrievalPlan();
-            BeanUtils.copyProperties(parentPlan, tMonitoringRetrievalPlan1);
-            //创建机构是顶级的
-            tMonitoringRetrievalPlan1.setOrgId(l.getId());
-            tMonitoringRetrievalPlan1.setOrganization(l.getShortName());
-            tMonitoringRetrievalPlan1.setOrgPath(l.getPath());
-            tMonitoringRetrievalPlan1.setParentId(parentPlan.getId());
+            BeanUtils.copyProperties(publishPlan, tMonitoringRetrievalPlan1);
+            tMonitoringRetrievalPlan1.setId(IdWorker.getId());
+            tMonitoringRetrievalPlan1.setOrgId(subPlanOrg.getId());
+            tMonitoringRetrievalPlan1.setOrganization(subPlanOrg.getShortName());
+            tMonitoringRetrievalPlan1.setOrgPath(subPlanOrg.getPath());
+            tMonitoringRetrievalPlan1.setParentId(publishPlan.getId());
             tMonitoringRetrievalPlan1.setIsDistribute("1");
             tMonitoringRetrievalPlan1.setCreateType(1);
-            if (!parentPlan.getOrgType().equals("3")) {
 //                        SysOrg sysOrg = remoteOrgService.selectSysOrgById(publishPlan.getOrgId(), SecurityConstants.INNER);
-                tMonitoringRetrievalPlan1.setOrgName(parentPlanOrg.getShortName());
+            tMonitoringRetrievalPlan1.setOrgName(publishPlanOrg.getShortName());
 //                        insertTMonitoringRetrievalPlan(tMonitoringRetrievalPlan1);
-                needAddSubPlans.add(tMonitoringRetrievalPlan1);
-                if (ObjectUtil.isNotEmpty(parentPlanExecOrgIds)) {
-                    execOrglist.stream().filter(x -> x.getPath().contains(l.getPath())).forEach(x -> {
-                        TMonitoringRetrievalPlanToExecOrg tempExecOrg = new TMonitoringRetrievalPlanToExecOrg();
-                        tempExecOrg.setOrgId(x.getId());
-                        tempExecOrg.setPlanId(tMonitoringRetrievalPlan1.getId());
-                        needAddSubPlanExecOrgList.add(tempExecOrg);
-                    });
-                }
-            }
-            if (parentPlan.getOrgType().equals("3")) {
-                parentPlan.setCreateType(1);
-                parentPlan.setUpdateBy(SecurityUtils.getUsername());
-                parentPlan.setUpdateTime(DateUtils.getNowDate());
-                baseMapper.updateById(parentPlan);
-
-                setPlanStartEndTime(parentPlan, tMonitoringRetrievalPlan1);
-                subPlans.add(tMonitoringRetrievalPlan1);
-            } else {
-                List<SysOrg> sysOrgs = getExecOrgList(parentPlanExecOrgIds, Integer.valueOf(parentPlan.getOrgType()), l.getPath());
-                for (SysOrg s : sysOrgs) {
-                    TMonitoringRetrievalPlan plan = createTempPlan(parentPlan, tMonitoringRetrievalPlan1.getId(), s);
-                    subPlans.add(plan);
-                }
+            needAddSubPlans.add(tMonitoringRetrievalPlan1);
+            if (ObjectUtil.isNotEmpty(planExecOrgList)) {
+                execOrglist.stream().filter(x -> x.getPath().contains(subPlanOrg.getPath())).forEach(x -> {
+                    TMonitoringRetrievalPlanToExecOrg tempExecOrg = new TMonitoringRetrievalPlanToExecOrg();
+                    tempExecOrg.setOrgId(x.getId());
+                    tempExecOrg.setPlanId(tMonitoringRetrievalPlan1.getId());
+                    needAddSubPlanExecOrgList.add(tempExecOrg);
+                });
             }
         }
-        return subPlans;
+        //保存子计划和子计划具体执行机构
+        if (ObjectUtil.isNotEmpty(needAddSubPlans)) {
+            this.saveBatch(needAddSubPlans);
+            itMonitoringRetrievalPlanToExecOrgService.saveBatch(needAddSubPlanExecOrgList);
+            needAddSubPlans.stream().forEach(plan -> {
+                setPlanStartEndTime(plan, plan);
+            });
+            tempPlans.addAll(needAddSubPlans);
+        }
+       return tempPlans;
     }
 
     private List<TMonitoringRetrievalPlanToExecOrg> buildPlanExecOrgs(List<TMonitoringRetrievalPlan> plans, List<SysOrg> execOrglist) {
@@ -1415,8 +1478,13 @@ public class TMonitoringRetrievalPlanServiceImpl extends ServiceImpl<TMonitoring
                     return result;
                 }
             }
-            // 停用状态 肯定存在已完成的任务, 只能修改任务名称
+            // 停用状态 肯定存在已完成的任务, 只能修改任务名称 和具体机构
             else if (oldPlan.getPlanStatus() == 2) {
+
+                // 保存具体机构
+                tMonitoringRetrievalPlanToExecOrgMapper.deleteByMap(MapUtil.of("plan_id", oldPlan.getId()));
+                batchSavePlanToExecOrg(tMonitoringRetrievalPlanDto.getPlanExecOrgIdList(), oldPlan.getId());
+
                 tMonitoringRetrievalPlanMapper.updateById(oldPlan);
                 QueryWrapper queryWrapper = new QueryWrapper();
                 queryWrapper.eq(PARENT_ID, oldPlan.getId());

+ 6 - 6
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/gx/service/ResumptionServiceImpl.java

@@ -134,7 +134,7 @@ public class ResumptionServiceImpl implements ResumptionService {
         AppPlan appPlan = appPlanMapper.getById(sysResumption.getPlanId());
         sysResumption.setUpdateBy(SecurityUtils.getActualSubmitUserName());
         sysResumption.setSubmitorId(SecurityUtils.getActualSubmitUserId());
-        sysResumption.setSubmitorName(SecurityUtils.getLoginUser().getName());
+        sysResumption.setSubmitorName(SecurityUtils.getActualSubmitUserName());
         sysResumption.setUpdateTime(new Date());
         sysResumption.setSubmitTime(new Date());
         sysResumption.setStatus(2);
@@ -176,8 +176,8 @@ public class ResumptionServiceImpl implements ResumptionService {
                 data.setSubmitTime(new Date());
                 data.setResTime(new Date());
                 data.setPlanId(sysResumption.getPlanId());
-                data.setSubmitBy(SecurityUtils.getLoginUser().getUserid());
-                data.setSubmitName(SecurityUtils.getUsername());
+                data.setSubmitBy(SecurityUtils.getActualSubmitUserId());
+                data.setSubmitName(SecurityUtils.getActualSubmitUserName());
                 data.setRequired(point.getRequired());
                 data.setPointScan(point.getPointScan());
                 if (taskDetailVo.getSubType() == 2) {
@@ -206,8 +206,8 @@ public class ResumptionServiceImpl implements ResumptionService {
                             .checkItem(check.getItemName())
                             .checkContent(point.getPointName())
                             .questionDesc(data.getResRemark())
-                            .submitorId(ObjectUtil.isNull(data.getSubmitBy()) ? SecurityUtils.getLoginUser().getUserid() : data.getSubmitBy())
-                            .submitorName(ObjectUtil.isNull(data.getSubmitName()) ? SecurityUtils.getLoginUser().getName() : data.getSubmitName())
+                            .submitorId(ObjectUtil.isNull(data.getSubmitBy()) ? SecurityUtils.getActualSubmitUserId() : data.getSubmitBy())
+                            .submitorName(ObjectUtil.isNull(data.getSubmitName()) ? SecurityUtils.getActualSubmitUserName() : data.getSubmitName())
                             .submitTime(ObjectUtil.isNull(data.getSubmitTime()) ? new Date() : data.getSubmitTime())
                             .reformDeadline(DateUtil.endOfDay(DateUtil.offsetDay(new Date(), Integer.parseInt(point.getRectificationDeadline()))))
                             .build();
@@ -257,7 +257,7 @@ public class ResumptionServiceImpl implements ResumptionService {
             dataNfc.setScanMethod(nfc.getScanMethod());
             dataNfc.setStatus(nfc.getStatus());
             dataNfc.setSubmitTime(ObjectUtil.isNull(nfc.getSubmitTime()) ? new Date() : nfc.getSubmitTime());
-            dataNfc.setSubmitBy(nfc.getSubmitBy());
+            dataNfc.setSubmitBy(ObjectUtil.isNull(nfc.getSubmitBy()) ? SecurityUtils.getActualSubmitUserId() : nfc.getSubmitBy());
             long id = IdWorker.getId(dataNfc);
             dataNfc.setId(id);
             dataNfcs.add(dataNfc);

+ 1 - 1
soc-modules/soc-modules-core/src/main/resources/mapper/access/TMonitoringRetrievalPlanMapper.xml

@@ -98,7 +98,7 @@
         a.create_type
         FROM
         core_monitoring_retrieval_plan a
-        LEFT JOIN core_monitoring_retrieval_plan b ON a.parent_id = b.id
+        LEFT JOIN core_monitoring_retrieval_plan b ON a.parent_id = b.id and b.is_deleted=0
         WHERE
         a.is_deleted =0  and ((b.id is not null and b.org_id=#{userOrgId}) or (b.id is null and a.org_id=#{userOrgId}) or a.plan_status!=0)
         <if test="request.planName != null  and request.planName != ''">

+ 2 - 3
soc-modules/soc-modules-core/src/main/resources/mapper/board/AppCockpitMapper.xml

@@ -164,9 +164,8 @@
         WHERE o.deleted = 0
           and o.is_lock = 0
           and o.path like concat(#{orgPath}, '%')
---           AND (o.type = 4
---             OR o.type = 5)
-        and o.type = 4
+           AND (o.type = 4 OR o.type = 5)
+<!--        and o.type = 4-->
     </select>
     <select id="selectSyntheticResumption" resultType="com.xunmei.core.board.dto.app.AppSyntheticTaskCategoryDto">
         SELECT p.plan_type,

+ 12 - 4
soc-modules/soc-modules-core/src/main/resources/mapper/letter/CoreIntroduceLetterMapper.xml

@@ -76,10 +76,13 @@
     </select>
     <select id="selectPageListForApp"
             resultType="com.xunmei.common.core.domain.letter.vo.CoreIntroduceLetterVo">
+        select * from (
         select
-        a.*
+        a.*,
+        group_concat(u.user_name) as letterUserNames
         from core_introduce_letter a
         INNER JOIN core_introduce_letter_to_org o ON a.id =o.letter_id
+        INNER JOIN core_introduce_letter_user u ON a.id = u.letter_id
         where a.deleted=0 ANd a.status!=0
         <if test="coreIntroduceLetter.orgId != null ">
             and o.org_id = #{coreIntroduceLetter.orgId}
@@ -87,13 +90,18 @@
         <if test="coreIntroduceLetter.letterNo !=null  and coreIntroduceLetter.letterNo !=''">
             and a.letter_no like concat('%', #{coreIntroduceLetter.letterNo}, '%')
         </if>
-        <if test="coreIntroduceLetter.reasons !=null  and coreIntroduceLetter.reasons !=''">
-            and a.reasons like concat('%', #{coreIntroduceLetter.reasons}, '%')
-        </if>
         <if test="coreIntroduceLetter.type !=null  and coreIntroduceLetter.type !=''">
             and a.type = #{coreIntroduceLetter.type}
         </if>
+        GROUP BY a.id
         order by a.create_time DESC
+        ) as c
+        <where>
+            <if test="coreIntroduceLetter.keyWords !=null  and coreIntroduceLetter.reasons !=''">
+                and c.reasons like concat('%', #{coreIntroduceLetter.keyWords}, '%')
+                or c.letterUserNames like concat('%', #{coreIntroduceLetter.keyWords}, '%')
+            </if>
+        </where>
     </select>
 
 

+ 2 - 2
soc-modules/soc-modules-file/src/main/java/com/xunmei/file/utils/FileUploadUtils.java

@@ -33,9 +33,9 @@ public class FileUploadUtils
 
     private static final Logger log = LoggerFactory.getLogger(FileUploadUtils.class);
     /**
-     * 默认大小 50M
+     * 默认大小 500M
      */
-    public static final long DEFAULT_MAX_SIZE = 50 * 1024 * 1024;
+    public static final long DEFAULT_MAX_SIZE = 500 * 1024 * 1024;
 
     /**
      * 默认的文件名最大长度 100

+ 1 - 1
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/impl/IotCommonSensorServiceImpl.java

@@ -112,7 +112,7 @@ public class IotCommonSensorServiceImpl extends ServiceImpl<IotCommonSensorMappe
             response.setCharacterEncoding("utf-8");
             // 数据导出
             EasyExcel.write(response.getOutputStream(), SensorExportVo.class)
-                    .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).sheet("演练任务").doWrite(data);
+                    .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).sheet("sheet1").doWrite(data);
         } catch (Exception e) {
             // 重置response
             response.reset();

+ 33 - 18
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/impl/IotAlarmDataServiceImpl.java

@@ -153,31 +153,46 @@ public class IotAlarmDataServiceImpl extends ServiceImpl<IotAlarmDataMapper, Iot
                 iotSensorMapper.updateById(iotSensor);
             }
         }
-        if (isExpress && !isAlarm) {
-            //报警恢复
-            if( alarms.size() != 0){
-                if(alarms.size()>1)
+        else{
+            // 本次上传的设备状态数据 没有生成告警
+            if (isExpress && !isAlarm) {
+                //报警恢复
+                if( alarms.size() != 0){
+                    // 温湿度一个设备 存在同时2条告警的情况
+                    if(alarms.size()>1)
+                    {
+                        for (IotAlarmData oldAlarm : alarms) {
+                            oldAlarm.setEndTime(LocalDateTime.now());
+                            this.updateById(oldAlarm);
+                        }
+                    }
+                    else {
+                        IotAlarmData iotAlarmData = alarms.get(0);
+                        iotAlarmData.setEndTime(LocalDateTime.now());
+                        this.updateById(iotAlarmData);
+                    }
+                }
+
+                if (ObjectUtil.notEqual(iotSensor.getState(),0)) {
+                    iotSensor.setStateUpdateTime(LocalDateTime.now());
+                    iotSensor.setStateStartTime(LocalDateTime.now());
+                    iotSensor.setState(0);
+                    iotSensorMapper.updateById(iotSensor);
+                }
+            }
+            // 处理温湿度 一个设备 2 种告警, 可能会单个恢复的情况
+            else if(isAlarm && isExpress)
+            {
+                if(ObjectUtil.notEqual(list.size(),alarms.size()))
                 {
-                    for (IotAlarmData oldAlarm : alarms) {
+                    List<IotAlarmData> noAlarmData = alarms.stream().filter(x -> !list.stream().anyMatch(y -> ObjectUtil.equal(y.getFieldCode(), x.getFieldCode()))).collect(Collectors.toList());
+                    for (IotAlarmData oldAlarm : noAlarmData) {
                         oldAlarm.setEndTime(LocalDateTime.now());
                         this.updateById(oldAlarm);
                     }
                 }
-                else {
-                    IotAlarmData iotAlarmData = alarms.get(0);
-                    iotAlarmData.setEndTime(LocalDateTime.now());
-                    this.updateById(iotAlarmData);
-                }
-            }
-
-            if (ObjectUtil.notEqual(iotSensor.getState(),0)) {
-                iotSensor.setStateUpdateTime(LocalDateTime.now());
-                iotSensor.setStateStartTime(LocalDateTime.now());
-                iotSensor.setState(0);
-                iotSensorMapper.updateById(iotSensor);
             }
         }
-
     }
 
     @Override