Jelajahi Sumber

Merge branch 'V0.1.0' into V0.1.1

jingyuanchao 1 tahun lalu
induk
melakukan
07a1ea7ad9
42 mengubah file dengan 470 tambahan dan 232 penghapusan
  1. 16 1
      project_data/sql/0.1.0/soc/soc.sql
  2. 1 0
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/domain/ResumptionPdf.java
  3. 4 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/edu/domain/CoreEduTrainingTask.java
  4. 2 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/edu/dto/CoreEduTrainingTaskEditDto.java
  5. 2 1
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/edu/vo/CoreEduTrainingTaskDetailVo.java
  6. 4 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/sms/domain/SmsSendRecord.java
  7. 3 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/sms/vo/SmsSendRecordPageVo.java
  8. 2 2
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/enums/RegisterBookType.java
  9. 2 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/mapper/CoreDrillPlanMapper.java
  10. 60 37
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/impl/CoreDrillPlanServiceImpl.java
  11. 6 4
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/impl/CoreDrillTaskServiceImpl.java
  12. 2 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/mapper/CoreEduTrainingPlanMapper.java
  13. 67 44
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/CoreEduTrainingPlanServiceImpl.java
  14. 6 2
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/CoreEduTrainingTaskServiceImpl.java
  15. 3 1
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/letter/service/impl/CoreOutInRecordServiceImpl.java
  16. 22 13
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/registerbook/service/impl/CoreRegisterBookPdfServiceImpl.java
  17. 2 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/controller/ApiPlanController.java
  18. 5 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/gx/vo/ResumptionPlanVo.java
  19. 11 1
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/service/impl/AppPlanServiceImpl.java
  20. 1 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/service/impl/ResumptionRecordServiceImpl.java
  21. 4 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/vo/resumptionRecord/AppResumptionDataInfoVo.java
  22. 12 0
      soc-modules/soc-modules-core/src/main/resources/mapper/drill/CoreDrillPlanMapper.xml
  23. 1 1
      soc-modules/soc-modules-core/src/main/resources/mapper/drill/CoreDrillTaskMapper.xml
  24. 12 0
      soc-modules/soc-modules-core/src/main/resources/mapper/edu/CoreEduTrainingPlanMapper.xml
  25. 10 8
      soc-modules/soc-modules-core/src/main/resources/mapper/edu/CoreEduTrainingTaskMapper.xml
  26. 4 2
      soc-modules/soc-modules-core/src/main/resources/mapper/resumption/AppPlanMapper.xml
  27. 2 1
      soc-modules/soc-modules-core/src/main/resources/mapper/resumption/ResumptionRecordMapper.xml
  28. 4 4
      soc-modules/soc-modules-file/src/main/java/com/xunmei/file/service/LocalSysFileServiceImpl.java
  29. 66 32
      soc-modules/soc-modules-file/src/main/java/com/xunmei/file/utils/PdfUtil.java
  30. 15 7
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/alarm/service/impl/IotAlarmDataServiceImpl.java
  31. 3 2
      soc-modules/soc-modules-sms/src/main/java/com/xunmei/sms/service/ISmsSendRecordService.java
  32. 9 5
      soc-modules/soc-modules-sms/src/main/java/com/xunmei/sms/service/SmsService.java
  33. 15 11
      soc-modules/soc-modules-sms/src/main/java/com/xunmei/sms/service/impl/SmsSendRecordServiceImpl.java
  34. 5 0
      soc-modules/soc-modules-sms/src/main/java/com/xunmei/sms/utils/SmsUtil.java
  35. 2 1
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/controller/ExportSqlController.java
  36. 4 3
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/controller/SysWorkTimeController.java
  37. 1 1
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/controller/SysWorkTimeSetController.java
  38. 1 1
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/mapper/SysWorkTimeMapper.java
  39. 1 0
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/ISysWorkTimeService.java
  40. 7 1
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysOrgServiceImpl.java
  41. 63 44
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysWorkTimeServiceImpl.java
  42. 8 2
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/util/ExportDatabaseUtil.java

+ 16 - 1
project_data/sql/0.1.0/soc/soc.sql

@@ -86,6 +86,16 @@ BEGIN
         ADD COLUMN `sort` int DEFAULT NULL COMMENT '排序号' AFTER `update_by`;
     END IF;
 
+    -- 培训任务表增加地点字段
+    IF NOT EXISTS(SELECT *
+                  FROM information_schema.columns
+                  WHERE table_schema = DATABASE()
+                    AND table_name = 'core_edu_training_task'
+                    AND column_name = 'site') THEN
+        alter table core_edu_training_task
+            add site varchar(225) null comment '地点' after status;
+    END IF;
+
 
 
 
@@ -237,6 +247,7 @@ create table sms_send_record
     content_data       varchar(225) not null comment '短信内容',
     result             varchar(225) null comment '发送结果',
     result_description varchar(125) null comment '发送结果描述',
+    req_detail        varchar(225) null comment '短信发送请求详情',
     resp_detail        varchar(225) null comment '短信发送返回详情'
 )
     comment '短信发送记录';
@@ -251,4 +262,8 @@ DELETE FROM `sys_config` WHERE `config_key` ='NO_BSC_AREA';
 INSERT INTO `sys_config` (`config_name`, `config_key`, `config_value`, `config_type`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ('演练地区评优推优由省联社直接管理的地区', 'NO_BSC_AREA', '4358025846521957,1739556950966714370', 'Y', '超级管理员', '2024-05-31 10:25:25', '', NULL, NULL);
 
 -- 修改菜单名称
-UPDATE sys_menu set menu_name ='视频监测' WHERE menu_name = '智能运维';
+UPDATE sys_menu set menu_name ='视频监测' WHERE menu_name = '智能运维';
+-- 修改菜单名称: "来访"全局替换成"出入"
+UPDATE sys_menu SET menu_name = REPLACE(menu_name, '来访', '出入') where menu_name like '%来访%';
+-- 修改字典名称: "来访"全局替换成"出入"
+update sys_dict_data set dict_label='出入管理登记簿' where dict_type='register_book_type' and dict_label='来访管理登记簿' limit 1;

+ 1 - 0
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/domain/ResumptionPdf.java

@@ -13,4 +13,5 @@ public class ResumptionPdf implements Serializable {
     private String submitName;
     @ApiModelProperty(value = "执行结果")
     private Integer resValue;
+    private Integer sort;
 }

+ 4 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/edu/domain/CoreEduTrainingTask.java

@@ -109,6 +109,10 @@ public class CoreEduTrainingTask extends BaseEntity {
     @ApiModelProperty(value = "状态")
     private Integer status;
 
+    @TableField("site")
+    @ApiModelProperty(value = "地点")
+    private String site;
+
 
     @TableField("content")
     @ApiModelProperty(value = "内容")

+ 2 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/edu/dto/CoreEduTrainingTaskEditDto.java

@@ -61,6 +61,8 @@ public class CoreEduTrainingTaskEditDto {
     private List<CoreEduTrainingTaskToUser> absentList;
 
     private String title;
+    @ApiModelProperty("地点")
+    private String site;
 
     @ApiModelProperty("主持人名称")
     private String hostName;

+ 2 - 1
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/edu/vo/CoreEduTrainingTaskDetailVo.java

@@ -100,7 +100,8 @@ public class CoreEduTrainingTaskDetailVo {
     private String pdfUrl;
 
     private Integer status;
-
+    @ApiModelProperty("地点")
+    private String site;
 
     private String statusText;
 

+ 4 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/sms/domain/SmsSendRecord.java

@@ -79,6 +79,10 @@ public class SmsSendRecord implements Serializable {
     @TableField("result_description")
     private String resultDescription;
 
+    @ApiModelProperty(value = "请求内容")
+    @TableField("req_detail")
+    private String reqDetail;
+
     @ApiModelProperty(value = "返回结果详情")
     @TableField("resp_detail")
     private String respDetail;

+ 3 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/sms/vo/SmsSendRecordPageVo.java

@@ -43,6 +43,9 @@ public class SmsSendRecordPageVo {
     @ApiModelProperty(value = "发送结果描述")
     private String resultDescription;
 
+    @ApiModelProperty(value = "请求内容")
+    private String reqDetail;
+
 
 
 

+ 2 - 2
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/enums/RegisterBookType.java

@@ -18,11 +18,11 @@ public enum RegisterBookType {
     SECURITY_PERFORMANCE(0, "安保履职登记簿"),
     EDUCATION_TRAINING(1, "教育培训登记簿"),
     SAFETY_DRILL(2, "预案演练登记簿"),
-    VISIT_RECORD(3, "来访管理登记簿"),
+    VISIT_RECORD(3, "出入管理登记簿"),
     ALARM_TEST(4, "110报警测试登记簿"),
     SELF_SERVICE_BANK(5, "备用电源维护登记簿"),
     BACKUP_POWER(6, "离行式自助银行巡检登记簿"),
-    ON_DUTY_USER(7, "值班人员履职登记簿"),
+    ON_DUTY_USER(7, "值班履职登记簿"),
     SAFE_CHECK_REPORT(26, "安全检查登记簿"),
     MONITOR_ACCESS(28,"监控调阅登记簿"),
 

+ 2 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/mapper/CoreDrillPlanMapper.java

@@ -93,4 +93,6 @@ public interface CoreDrillPlanMapper extends BaseMapper<CoreDrillPlan> {
 
     List<CoreDrillPlan> selectByParentId(@Param("planId") Long planId);
 
+    CoreDrillPlan selectByParentIdAndOrgId(@Param("parentId") Long parentId, @Param("orgId") Long orgId);
+
 }

+ 60 - 37
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/impl/CoreDrillPlanServiceImpl.java

@@ -30,6 +30,7 @@ import com.xunmei.common.core.domain.drill.vo.CoreDrillPlanDataVo;
 import com.xunmei.common.core.domain.drill.vo.CoreDrillPlanDetailVo;
 import com.xunmei.common.core.domain.drill.vo.CoreDrillPlanPageVo;
 import com.xunmei.common.core.domain.drill.vo.CoreDrillPlanRoleVo;
+import com.xunmei.common.core.domain.edu.domain.CoreEduTrainingPlan;
 import com.xunmei.common.core.domain.reminder.domain.CoreReminderSchedule;
 import com.xunmei.common.core.domain.reminder.vo.CoreReminderConfigurationFullVo;
 import com.xunmei.common.core.enums.BusinessPlanType;
@@ -40,6 +41,7 @@ import com.xunmei.common.core.enums.drill.DrillPlanCycleEnum;
 import com.xunmei.common.core.enums.drill.DrillPlanStatus;
 import com.xunmei.common.core.enums.edu.EduTrainingDoStatus;
 import com.xunmei.common.core.enums.edu.EduTrainingPlanCycleEnum;
+import com.xunmei.common.core.enums.edu.EduTrainingPlanStatus;
 import com.xunmei.common.core.exception.ServiceException;
 import com.xunmei.common.core.thread.ThreadPoolConfig;
 import com.xunmei.common.core.util.BeanHelper;
@@ -165,7 +167,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
             final Integer hasTask = coreDrillTaskMapper.checkHasTaskByPlanParentId(record.getId());
             record.setHaTask(hasTask);
         }
-        if (Objects.equals(record.getPlanCycle(), DrillPlanCycleEnum.NONE.getCode())){
+        if (Objects.equals(record.getPlanCycle(), DrillPlanCycleEnum.NONE.getCode())) {
             final Integer done = coreDrillTaskMapper.checkHasTaskIsDoneByPlanIdOrParentId(record.getId());
             record.setDone(done);
         }
@@ -198,7 +200,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
             final Integer done = coreDrillTaskMapper.checkHasTaskIsDoneByPlanParentId(plan.getId());
             vo.setDone(done);
         }
-        if (Objects.equals(plan.getPlanCycle(), DrillPlanCycleEnum.NONE.getCode())){
+        if (Objects.equals(plan.getPlanCycle(), DrillPlanCycleEnum.NONE.getCode())) {
             final Integer done = coreDrillTaskMapper.checkHasTaskIsDoneByPlanIdOrParentId(plan.getId());
             vo.setDone(done);
         }
@@ -326,13 +328,9 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
     @Transactional(rollbackFor = Exception.class)
     public void updateCoreDrillPlan(CoreDrillPlanUpdateDto request) {
         final CoreDrillPlan plan = getById(request.getId());
-       /* DateRange range;
-        if (ObjectUtil.equal(plan.getPlanCycle(), EduTrainingPlanCycleEnum.NONE.getCode())) {
-            range = new DateRange(DateUtil.beginOfDay(plan.getStartDate()), DateUtil.endOfDay(plan.getEndDate()));
-        } else {
-            range = DateUtils.getStartAndEnd(new Date(), plan.getPlanCycle());
-        }*/
-
+        if (plan == null) {
+            throw new RuntimeException("计划不存在!");
+        }
         plan.setUpdateTime(DateUtils.getNowDate());
         //现在能被编辑的计划一定是标准计划
         //updateStandardPlan(plan, request, range);
@@ -396,7 +394,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
         }
         validateFieldForStandard(request.getPlanCycle(), plan.getPlanCycle(), "当前状态仅允许修改任务名称与机构信息");
         validateFieldForStandard(request.getExecTimes(), plan.getExecTimes(), "当前状态仅允许修改任务名称与机构信息");
-        if (ObjectUtil.equal(request.getPlanStatus(), DrillPlanStatus.USING.getCode())){
+        if (ObjectUtil.equal(request.getPlanStatus(), DrillPlanStatus.USING.getCode())) {
             validateFieldForStandard(request.getExecOrgType(), plan.getExecOrgType(), "当前状态仅允许修改任务名称与机构信息");
         }
        /* List<Long> execOrgIdList = coreDrillPlanToExecOrgMapper.selectOrgIdByPlanId(plan.getId());
@@ -404,13 +402,8 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
         validateFieldForStandard(request.getRemark(), plan.getRemark(), "当前状态仅允许修改任务名称与机构信息");
         validateFileListForStandard(request.getFileList(), JSON.parseArray(plan.getFileList(), String.class), "当前状态仅允许修改任务名称与机构信息");
         plan.setPlanName(request.getPlanName());
-        if (ObjectUtil.equal(request.getPlanStatus(), DrillPlanStatus.DELETED.getCode())){
+        if (ObjectUtil.equal(request.getPlanStatus(), DrillPlanStatus.DELETED.getCode())) {
             plan.setExecOrgType(request.getExecOrgType());
-            List<Long> list = baseMapper.selectIdByParentId(plan.getId());
-            if (ObjectUtil.isNotEmpty(list)){
-                physicalDeleteMapper.deletedDrillPlanByIds(list);
-                coreDrillPlanToExecOrgService.deleteByPlanIds(list);
-            }
             coreDrillPlanToExecOrgMapper.deleteByMap(MapUtil.of("plan_id", plan.getId()));
             batchSavePlanToExecOrg(request.getPlanExecOrgIdList(), plan.getId());
         }
@@ -455,6 +448,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
         target.setRemark(source.getRemark());
         target.setFileList(source.getFileList());
     }
+
     private void validateFieldForStandard(Object requestValue, Object planValue, String errorMessage) {
         if (ObjectUtils.allNull(requestValue, planValue)) {
             return;
@@ -488,7 +482,9 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
 
 
     public void batchSavePlanToExecOrg(List<Long> orgIdList, Long planId) {
-
+        if (ObjectUtil.isEmpty(orgIdList) || planId == null) {
+            return;
+        }
         List<CoreDrillPlanToExecOrg> planOrgList = new ArrayList<CoreDrillPlanToExecOrg>();
         for (Long orgId : orgIdList) {
             CoreDrillPlanToExecOrg org = new CoreDrillPlanToExecOrg();
@@ -496,9 +492,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
             org.setPlanId(planId);
             planOrgList.add(org);
         }
-        if (ObjectUtil.isNotEmpty(planOrgList)) {
-            coreDrillPlanToExecOrgService.saveBatch(planOrgList);
-        }
+        coreDrillPlanToExecOrgService.saveBatch(planOrgList);
 
     }
 
@@ -586,7 +580,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
 
 
         final CompletableFuture<List<CoreDrillPlan>> planListFuture = CompletableFuture.supplyAsync(() -> {
-            List<CoreDrillPlan> planList = baseMapper.selectByParentId(planId);
+            /*List<CoreDrillPlan> planList = baseMapper.selectByParentId(planId);
             if (planList.isEmpty()) {
                 planList = buildPlanData(plan, new ArrayList<>(), true, status);
             } else {
@@ -596,11 +590,18 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
                     drillPlan.setPublishTime(new Date());
                     updateById(drillPlan);
                 }
-               /* planList.forEach(plan1 -> plan1.setPlanStatus(EduTrainingPlanStatus.USING.getCode()));
-                List<Long> collect = planList.stream().map(CoreDrillPlan::getId).collect(Collectors.toList());
-                coreDrillPlanMapper.updatePlanStatusByIdList(collect, EduTrainingPlanStatus.USING.getCode());*/
+            }*/
+            //下发时根据父计划重新生成所有需要生成的子计划,判断如果有子计划已经存在于数据库中,就无需再次生成,
+            // 同时有已经存在于数据库的子计划但此次下发不在下发的列表的中的,需要逻辑删除
+            final List<CoreDrillPlan> neewPlanList = buildPlanData(plan, status);
+            final List<CoreDrillPlan> oldPlanList = baseMapper.selectByParentId(plan.getId());
+            for (CoreDrillPlan oldPlan : oldPlanList) {
+                final List<Long> neewPlanIdList = neewPlanList.stream().map(CoreDrillPlan::getBelongOrgId).distinct().collect(toList());
+                if (!neewPlanIdList.contains(oldPlan.getBelongOrgId())) {
+                    baseMapper.deleteById(oldPlan.getId());
+                }
             }
-            return planList;
+            return neewPlanList;
         }, threadPoolTaskExecutor);
 
         planListFuture.thenAcceptAsync((result) -> {
@@ -651,10 +652,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
     public int revocationPlan(Long planId) {
         checkPlanIsCreatingTask(planId, "撤回");
         List<Long> list = coreDrillPlanMapper.selectIdByParentId(planId);
-        int isExecute = coreDrillTaskMapper.selectCount(new LambdaQueryWrapper<CoreDrillTask>()
-                        .in(CoreDrillTask::getPlanId, list)
-                        .in(CoreDrillTask::getStatus, DrillDoStatus.DONE.getCode(),DrillDoStatus.WAIT_COMMENT.getCode()))
-                .intValue();
+        int isExecute = coreDrillTaskMapper.checkHasTaskIsDoneByPlanParentId(planId);
         //计划下没有已完成:删除所有任务数据和子计划,计划状态回到草稿状态。
         if (isExecute < 1/* || EduTrainingPlanCycleEnum.NONE.getCode().equals(plan.getPlanCycle())*/) {
             // 删除所有任务数据
@@ -721,13 +719,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
         );
     }
 
-    private List<CoreDrillPlan> buildPlanData(CoreDrillPlan plan, List<CoreDrillPlanToRole> planRoleList, boolean isPublish, int status) {
-        /*if (ObjectUtil.isEmpty(planRoleList)) {
-            //获取执行角色
-            LambdaQueryWrapper<CoreDrillPlanToRole> ros = new LambdaQueryWrapper<>();
-            ros.eq(CoreDrillPlanToRole::getPlanId, plan.getId());
-            planRoleList = coreDrillPlanToRoleMapper.selectList(ros);
-        }*/
+    private List<CoreDrillPlan> buildPlanData(CoreDrillPlan plan, int status) {
         List<SysOrgVO> all = RedisUtils.getCacheList(CacheConstants.ORG_CACHE_LIST_KEY);
         all = all.stream().filter(o -> ObjectUtil.isNotEmpty(o.getPath())).collect(toList());
         final SysOrgVO planCreateOrg = all.stream().filter(org -> org.getId().equals(plan.getCreateOrgId())).findFirst().get();
@@ -750,7 +742,10 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
         List<SysOrgVO> publishOrgList = this.getPlanPublishOrgList(planExecOrgList);
         List<CoreDrillPlanToExecOrg> planToExecOrgs = new ArrayList<>();
         List<CoreDrillPlan> list = new ArrayList<>();
+        //子计划id,查询出所有已生成的子计划,先删除再重新构建
         for (SysOrgVO sysOrg : publishOrgList) {
+            //如果需要生成的子计划已经存在,说明可能是经过编辑的,所以把状态修改回来就行
+            if (checkExitAndFlushExecOrg(plan, planExecOrgList, list, sysOrg)) continue;
             if (checkOrgType(plan.getExecOrgType())) {
                 //走到这说明,执行机构中都是省联社/办事处 这些不需要子机话,所以直接返回,
                 //但是如果后期扩展多选执行机构类型,此处将不再适用
@@ -768,7 +763,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
             drillPlan.setStandard(0);
             drillPlan.setIssue(0);
             drillPlan.setBeIssue(1);
-            drillPlan.setPlanStatus(isPublish ? DrillPlanStatus.USING.getCode() : plan.getPlanStatus());
+            drillPlan.setPlanStatus(DrillPlanStatus.USING.getCode());
             drillPlan.setParentId(plan.getId());
             drillPlan.setCreateTime(new Date());
             drillPlan.setUpdateTime(new Date());
@@ -807,6 +802,34 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
         return list;
     }
 
+
+    private boolean checkExitAndFlushExecOrg(CoreDrillPlan plan, List<SysOrgVO> planToExecOrgs, List<CoreDrillPlan> list, SysOrgVO sysOrg) {
+        CoreDrillPlan oldPlan = getByOrgIdAndParentId(plan.getId(), sysOrg.getId());
+        if (oldPlan != null) {
+            oldPlan.setDeleted(0);
+            coreDrillPlanToExecOrgMapper.deleteByMap(MapUtil.of("plan_id", oldPlan.getId()));
+            if (planToExecOrgs.size() > 0) {
+                final List<Long> collect = planToExecOrgs.stream().map(SysOrgVO::getId).distinct().collect(toList());
+                batchSavePlanToExecOrg(collect, oldPlan.getId());
+            }
+            oldPlan.setPlanName(plan.getPlanName());
+            oldPlan.setPlanStatus(DrillPlanStatus.USING.getCode());
+            oldPlan.setBuildTaskNow(plan.getBuildTaskNow());
+            oldPlan.setPublishTime(new Date());
+            oldPlan.setUpdateTime(new Date());
+            updatePlanTime(oldPlan, plan.getBuildTaskNow());
+            baseMapper.updateCoreDrillPlan(oldPlan);
+            list.add(oldPlan);
+            return true;
+        }
+        return false;
+    }
+
+    private CoreDrillPlan getByOrgIdAndParentId(Long parentId, Long orgId) {
+
+        return baseMapper.selectByParentIdAndOrgId(parentId, orgId);
+    }
+
     private List<SysOrgVO> getPlanExecOrg(CoreDrillPlan plan, List<SysOrgVO> all) {
         QueryWrapper<CoreDrillPlanToExecOrg> eos = new QueryWrapper<>();
         eos.lambda().eq(CoreDrillPlanToExecOrg::getPlanId, plan.getId());

+ 6 - 4
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/impl/CoreDrillTaskServiceImpl.java

@@ -1366,23 +1366,25 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
         List<PanelListVo> loginUserAllNeedSignlist = coreDrillTaskMapper.selectUserAllDrillSignList(panelListDto, statusList);
         if (ObjectUtil.isNotEmpty(loginUserAllNeedSignlist)) {
             loginUserAllNeedSignlist.stream().forEach(x -> {
-                if (!list.stream().anyMatch(y -> ObjectUtil.equal(y.getId(), x.getId()))) {
+                if (list.stream().noneMatch(y -> ObjectUtil.equal(y.getId(), x.getId()))) {
                     list.add(x);
                 }
             });
         }
 
+
+        list.removeIf(item -> DateUtil.date().before(item.getStartTime()) || DateUtil.date().after(item.getEndTime()));
         dealListData(list, panelListDto.getUserId());
         //省联社/办事处或行社
         if (OrgTypeEnum.HANG_SHE.getCode().equals(sysOrg.getType()) ||
                 OrgTypeEnum.BAN_SHI_CHU.getCode().equals(sysOrg.getType()) ||
                 OrgTypeEnum.SHEGN_LIAN_SHE.getCode().equals(sysOrg.getType())) {
-
-            //查询待评价与待推优数据
+            panelListDto.setStartTime(DateUtil.offsetMonth(DateUtil.beginOfQuarter(new Date()),-3));
+            panelListDto.setEndTime(DateUtil.endOfQuarter(new Date()));
+            //查询待评价(最近两季度)数据
             List<PanelListVo> waitEvaluateTaskList = coreDrillTaskMapper.selectWaitEvaluateTaskList(panelListDto);
             list.addAll(waitEvaluateTaskList);
         }
-        list.removeIf(item -> DateUtil.date().before(item.getStartTime()) || DateUtil.date().after(item.getEndTime()));
         list.forEach(item -> {
             item.setType(PanelTypeEnums.DRILL.getCode());
         });

+ 2 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/mapper/CoreEduTrainingPlanMapper.java

@@ -93,4 +93,6 @@ public interface CoreEduTrainingPlanMapper extends BaseMapper<CoreEduTrainingPla
     List<CoreEduTrainingPlan> selectNeedBuildTaskPlanList(@Param("cycle") Integer cycle, @Param("cycleList") List<Integer> cycleList);
 
     List<CoreEduTrainingPlan> selectByParentId(@Param("planId") Long planId);
+
+    CoreEduTrainingPlan selectByParentIdAndOrgId(@Param("parentId") Long parentId, @Param("orgId") Long orgId);
 }

+ 67 - 44
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/CoreEduTrainingPlanServiceImpl.java

@@ -169,7 +169,7 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
             final Integer hasTask = coreEduTrainingTaskMapper.checkHasTaskByPlanParentId(record.getId());
             record.setHasTask(hasTask);
         }
-        if (ObjectUtil.equal(record.getPlanCycle(),EduTrainingPlanCycleEnum.NONE.getCode())){
+        if (ObjectUtil.equal(record.getPlanCycle(), EduTrainingPlanCycleEnum.NONE.getCode())) {
             record.setDone(coreEduTrainingTaskMapper.checkHasTaskIsDoneByPlanIdOrParentId(record.getId()));
         }
     }
@@ -199,7 +199,7 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
             final Integer done = coreEduTrainingTaskMapper.checkHasTaskIsDoneByPlanParentId(plan.getId());
             vo.setDone(done);
         }
-        if (ObjectUtil.equal(plan.getPlanCycle(),EduTrainingPlanCycleEnum.NONE.getCode())){
+        if (ObjectUtil.equal(plan.getPlanCycle(), EduTrainingPlanCycleEnum.NONE.getCode())) {
             vo.setDone(coreEduTrainingTaskMapper.checkHasTaskIsDoneByPlanIdOrParentId(plan.getId()));
         }
         return vo;
@@ -293,6 +293,9 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
     @Transactional(rollbackFor = Exception.class)
     public int updateCoreEduTrainingPlan(CoreEduTrainingPlanEditDto request) {
         final CoreEduTrainingPlan plan = getById(request.getId());
+        if (plan==null){
+            throw new RuntimeException("计划不存在!");
+        }
         plan.setUpdateTime(DateUtils.getNowDate());
         //现在能被编辑的计划一定是标准计划
         if (plan.getPlanStatus() == EduTrainingPlanStatus.DRAFT.getCode()) {
@@ -358,7 +361,7 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
         }
         validateFieldForStandard(request.getPlanCycle(), plan.getPlanCycle(), "当前状态仅允许修改任务名称与机构信息");
         validateFieldForStandard(request.getExecTimes(), plan.getExecTimes(), "当前状态仅允许修改任务名称与机构信息");
-        if (ObjectUtil.equal(plan.getPlanStatus(), DrillPlanStatus.USING.getCode())){
+        if (ObjectUtil.equal(plan.getPlanStatus(), DrillPlanStatus.USING.getCode())) {
             validateFieldForStandard(request.getExecOrgType(), plan.getExecOrgType(), "当前状态仅允许修改任务名称与机构信息");
         }
         /*List<Long> execOrgIdList = coreEduTrainingPlanToExecOrgMapper.selectOrgIdByPlanId(plan.getId());
@@ -369,11 +372,6 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
         plan.setExecOrgType(request.getExecOrgType());
         if (plan.getPlanStatus() == EduTrainingPlanStatus.DELETED.getCode()) {
             plan.setExecOrgType(request.getExecOrgType());
-            List<Long> idList = baseMapper.selectIdByParentId(plan.getId());
-            if (ObjectUtil.isNotEmpty(idList)) {
-                physicalDeleteMapper.deletedEduPlanByIds(idList);
-                coreEduTrainingPlanToExecOrgService.deleteByPlanIds(idList);
-            }
             coreEduTrainingPlanToExecOrgMapper.deleteByMap(MapUtil.of("plan_id", plan.getId()));
             batchSavePlanToExecOrg(request.getPlanExecOrgIdList(), plan.getId());
         }
@@ -458,6 +456,9 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
     }
 
     public void batchSavePlanToExecOrg(List<Long> orgIdList, Long planId) {
+        if (ObjectUtil.isEmpty(orgIdList) || planId == null) {
+            return;
+        }
         List<CoreEduTrainingPlanToExecOrg> planOrgList = new ArrayList<CoreEduTrainingPlanToExecOrg>();
         for (Long orgId : orgIdList) {
             CoreEduTrainingPlanToExecOrg org = new CoreEduTrainingPlanToExecOrg();
@@ -465,9 +466,7 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
             org.setPlanId(planId);
             planOrgList.add(org);
         }
-        if (ObjectUtil.isNotEmpty(planOrgList)) {
-            coreEduTrainingPlanToExecOrgService.saveBatch(planOrgList);
-        }
+        coreEduTrainingPlanToExecOrgService.saveBatch(planOrgList);
 
     }
 
@@ -583,10 +582,9 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
         this.updateById(plan);
 
         final CompletableFuture<List<CoreEduTrainingPlan>> planListFuture = CompletableFuture.supplyAsync(() -> {
-
-            List<CoreEduTrainingPlan> planList = baseMapper.selectByParentId(planId);
+            /*List<CoreEduTrainingPlan> planList = baseMapper.selectByParentId(planId);
             if (planList.isEmpty()) {
-                planList = buildPlanData(plan, true, status);
+                planList = buildPlanData(plan, status);
             } else {
                 for (CoreEduTrainingPlan trainingPlan : planList) {
                     trainingPlan.setPlanStatus(EduTrainingPlanStatus.USING.getCode());
@@ -594,11 +592,20 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
                     trainingPlan.setPublishTime(new Date());
                     updateById(trainingPlan);
                 }
-               /* planList.forEach(plan1 -> plan1.setPlanStatus(EduTrainingPlanStatus.USING.getCode()));
-                List<Long> collect = planList.stream().map(CoreEduTrainingPlan::getId).collect(Collectors.toList());
-                coreEduTrainingPlanMapper.updatePlanStatusByIdList(collect, EduTrainingPlanStatus.USING.getCode());*/
+            }*/
+            //下发时根据父计划重新生成所有需要生成的子计划,判断如果有子计划已经存在于数据库中,就无需再次生成,
+            // 同时有已经存在于数据库的子计划但此次下发不在下发的列表的中的,需要逻辑删除
+            final List<CoreEduTrainingPlan> neewPlanList = buildPlanData(plan, status);
+            log.info("构建数据123:{}", neewPlanList.stream().map(CoreEduTrainingPlan::getBelongOrgName).collect(Collectors.joining(",")));
+            final List<CoreEduTrainingPlan> oldPlanList = baseMapper.selectByParentId(plan.getId());
+            for (CoreEduTrainingPlan oldPlan : oldPlanList) {
+                final List<Long> neewPlanIdList = neewPlanList.stream().map(CoreEduTrainingPlan::getBelongOrgId).distinct().collect(toList());
+                if (!neewPlanIdList.contains(oldPlan.getBelongOrgId())) {
+                    baseMapper.deleteById(oldPlan.getId());
+                    log.info("删除数据123:{}", oldPlan.getBelongOrgName());
+                }
             }
-            return planList;
+            return neewPlanList;
         }, threadPoolTaskExecutor);
 
         planListFuture.thenAcceptAsync((result) -> {
@@ -649,13 +656,7 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
         return collect;
     }
 
-    private List<CoreEduTrainingPlan> buildPlanData(CoreEduTrainingPlan plan, Boolean isPublish, int status) {
-        /*if (ObjectUtil.isEmpty(planRoleList)) {
-            //获取执行角色
-            LambdaQueryWrapper<CoreEduTrainingPlanToRole> ros = new LambdaQueryWrapper<>();
-            ros.eq(CoreEduTrainingPlanToRole::getPlanId, plan.getId());
-            planRoleList = coreEduTrainingPlanToRoleMapper.selectList(ros);
-        }*/
+    private List<CoreEduTrainingPlan> buildPlanData(CoreEduTrainingPlan plan, int status) {
         List<SysOrgVO> all = RedisUtils.getCacheList(CacheConstants.ORG_CACHE_LIST_KEY);
         all = all.stream().filter(o -> ObjectUtil.isNotEmpty(o.getPath())).collect(Collectors.toList());
         final SysOrgVO planCreateOrg = all.stream().filter(org -> org.getId().equals(plan.getCreateOrgId())).findFirst().get();
@@ -677,7 +678,10 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
         List<SysOrgVO> planPublishOrgList = getPlanPublishOrgList(planExecOrgList);
         List<CoreEduTrainingPlanToExecOrg> planToExecOrgs = new ArrayList<>();
         List<CoreEduTrainingPlan> list = new ArrayList<>();
+        //子计划id,查询出所有已生成的子计划,先删除再重新构建
         for (SysOrgVO sysOrg : planPublishOrgList) {
+            //如果需要生成的子计划已经存在,说明可能是经过编辑的,所以把状态修改回来就行
+            if (checkExitAndFlushExecOrg(plan, planExecOrgList, list, sysOrg)) continue;
             if (checkOrgType(plan.getExecOrgType())) {
                 //走到这说明,执行机构中都是省联社/办事处 这些不需要子机话,所以直接返回,
                 //但是如果后期扩展多选执行机构类型,此处将不再适用
@@ -694,7 +698,7 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
             coreEduTrainingPlan.setBelongOrgPath(sysOrg.getPath());
             coreEduTrainingPlan.setStandard(0);
             coreEduTrainingPlan.setIssue(0);
-            coreEduTrainingPlan.setPlanStatus(isPublish ? EduTrainingPlanStatus.USING.getCode() : plan.getPlanStatus());
+            coreEduTrainingPlan.setPlanStatus(EduTrainingPlanStatus.USING.getCode());
             coreEduTrainingPlan.setParentId(plan.getId());
             coreEduTrainingPlan.setCreateTime(new Date());
             coreEduTrainingPlan.setUpdateTime(new Date());
@@ -713,36 +717,55 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
         if (planToExecOrgs.size() > 0) {
             coreEduTrainingPlanToExecOrgService.saveBatch(planToExecOrgs);
         }
-       /* List<CoreEduTrainingPlanToRole> insertPlanRoleList = new ArrayList<>();
-        for (CoreEduTrainingPlan coreEduTrainingPlan : list) {
-            //保存执行角色
-            for (CoreEduTrainingPlanToRole planRole : planRoleList) {
-                CoreEduTrainingPlanToRole role = new CoreEduTrainingPlanToRole();
-                role.setPlanId(coreEduTrainingPlan.getId());
-                role.setRoleId(planRole.getRoleId());
-                insertPlanRoleList.add(role);
-            }
-        }
-        if (insertPlanRoleList.size() > 0) {
-            coreEduTrainingPlanToRoleService.saveBatch(insertPlanRoleList);
-        }*/
         if (!list.isEmpty()) {
-            this.saveBatch(list);
+            for (CoreEduTrainingPlan trainingPlan : list) {
+                final CoreEduTrainingPlan exit = baseMapper.selectCoreEduTrainingPlanById(trainingPlan.getId());
+                if (exit != null) {
+                    updateById(exit);
+                } else {
+                    save(trainingPlan);
+                }
+            }
+
         }
 
 
         return list;
     }
 
+    private boolean checkExitAndFlushExecOrg(CoreEduTrainingPlan plan, List<SysOrgVO> planToExecOrgs, List<CoreEduTrainingPlan> list, SysOrgVO sysOrg) {
+        CoreEduTrainingPlan oldPlan = getByOrgIdAndParentId(plan.getId(), sysOrg.getId());
+        if (oldPlan != null) {
+            oldPlan.setDeleted(0);
+            coreEduTrainingPlanToExecOrgMapper.deleteByMap(MapUtil.of("plan_id", oldPlan.getId()));
+            if (planToExecOrgs.size() > 0) {
+                final List<Long> collect = planToExecOrgs.stream().map(SysOrgVO::getId).distinct().collect(toList());
+                batchSavePlanToExecOrg(collect, oldPlan.getId());
+            }
+            oldPlan.setPlanName(plan.getPlanName());
+            oldPlan.setPlanStatus(EduTrainingPlanStatus.USING.getCode());
+            oldPlan.setBuildTaskNow(plan.getBuildTaskNow());
+            oldPlan.setPublishTime(new Date());
+            oldPlan.setUpdateTime(new Date());
+            updatePlanTime(oldPlan, plan.getBuildTaskNow());
+            baseMapper.updateCoreEduTrainingPlan(oldPlan);
+            list.add(oldPlan);
+            return true;
+        }
+        return false;
+    }
+
+    private CoreEduTrainingPlan getByOrgIdAndParentId(Long parentId, Long orgId) {
+
+        return baseMapper.selectByParentIdAndOrgId(parentId, orgId);
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Integer revocationPlan(Long planId) {
         checkPlanIsCreatingTask(planId, "撤回");
         List<Long> list = coreEduTrainingPlanMapper.selectIdByParentId(planId);
-        int isExecute = coreEduTrainingTaskMapper.selectCount(new LambdaQueryWrapper<CoreEduTrainingTask>()
-                        .in(CoreEduTrainingTask::getPlanId, list)
-                        .eq(CoreEduTrainingTask::getStatus, EduTrainingDoStatus.DONE.getCode()))
-                .intValue();
+        int isExecute = coreEduTrainingTaskMapper.checkHasTaskIsDoneByPlanParentId(planId);
         //计划下没有已完成:计划下没有已完成:删除所有任务数据,计划状态回到草稿状态。
         if (isExecute < 1/* || EduTrainingPlanCycleEnum.NONE.getCode().equals(plan.getPlanCycle())*/) {
             // 删除所有任务数据

+ 6 - 2
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/CoreEduTrainingTaskServiceImpl.java

@@ -158,7 +158,7 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
 
         }
         if (ObjectUtil.equal(1, request.getIsAppSelect())) {
-            request.setCheckSub(true);
+            request.setCheckSub(false);
         }
         //App 默认下穿
         if (Boolean.TRUE.equals(request.getCheckSub())) {
@@ -332,6 +332,7 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
             coreEduTrainingTask.setOrgName(sysOrg.getShortName());
             coreEduTrainingTask.setOrgPath(sysOrg.getPath());
             coreEduTrainingTask.setTitle(request.getTitle());
+            coreEduTrainingTask.setSite(request.getSite());
             coreEduTrainingTask.setStartDate(DateUtil.beginOfDay(new Date()));
             // 临时添加的任务 特殊把任务的开始结束时间设置为当前时间的一周,否则待办查询不到
             Long endTime = coreEduTrainingTask.getStartDate().getTime();
@@ -352,6 +353,7 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
         coreEduTrainingTask.setTrainingEndDateTime(request.getTrainingEndDateTime());
         coreEduTrainingTask.setContent(request.getContent());
         coreEduTrainingTask.setNote(request.getNote());
+        coreEduTrainingTask.setSite(request.getSite());
         coreEduTrainingTask.setRecorderId(SecurityUtils.getUserId());
         coreEduTrainingTask.setImageList(request.getImageList());
         if (ObjectUtil.isNotEmpty(request.getFileList())) {
@@ -871,8 +873,9 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
     private Map<String, Object> getFtlEdu(CoreEduTrainingTaskDetailVo task) {
         Map<String, Object> data = new HashMap<>();
         String startTime = DateUtil.format(task.getTrainingStartDateTime(), "yyyy年MM月dd日HH时mm分");
-        String endTime = DateUtil.format(task.getTrainingEndDateTime(), "yyyy年MM月dd日HH时mm分");
+        String endTime = DateUtil.format(task.getTrainingEndDateTime(), "HH时mm分");
         String address = task.getOrgName();
+        String site = task.getSite();
         String hostName = task.getHostName() == null ? StringUtil.EMPTY_STRING : task.getHostName();
         String recorderName = task.getRecorderName() == null ? StringUtil.EMPTY_STRING : task.getRecorderName();
         String content = task.getContent();
@@ -881,6 +884,7 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
         String staticsPath = RemoteCallHandlerExecutor.executeRemoteCall(() -> fileService.getStaticPathPrefix(), ErrorMsgConstants.QUERY_FILE_PATH_ERROR).getData();
         data.put("time", startTime + " - " + endTime);
         data.put("address", StringUtils.isNotEmpty(address) ? address : StringUtil.EMPTY_STRING);
+        data.put("site", StringUtils.isNotEmpty(site) ? site : StringUtil.EMPTY_STRING);
         data.put("hostName", StringUtils.isNotEmpty(hostName) ? hostName : StringUtil.EMPTY_STRING);
         data.put("recorderName", StringUtils.isNotEmpty(recorderName) ? recorderName : StringUtil.EMPTY_STRING);
         data.put("content", StringUtils.isNotEmpty(content) ? content : StringUtil.EMPTY_STRING);

+ 3 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/letter/service/impl/CoreOutInRecordServiceImpl.java

@@ -241,9 +241,11 @@ public class CoreOutInRecordServiceImpl extends ServiceImpl<CoreOutInRecordMappe
         SysOrg sysOrg = RemoteCallHandlerExecutor.executeRemoteCall(() -> orgService.selectOrgById(record.getOrgId(), SecurityConstants.INNER), ErrorMsgConstants.QUERY_ORG_DATA_ERROR);
         String fileName = registerBookPdfService.getPdfFileName(RegisterBookType.VISIT_RECORD, sysOrg);
         Map<String, Object> data = this.getFtlEdu(record, orgList);
+        fileName = fileName.replace("来访登记簿", "出入登记簿");
         data.put("fileName", fileName);
         data.put("id", id);
         log.info("来访管理登记簿数据准备完成,开始生成登记簿:{}", JSON.toJSONString(data));
+        String finalFileName = fileName;
         CompletableFuture.runAsync(() -> {
             R<String> r = RemoteCallHandlerExecutor.executeRemoteCall(() -> fileService.generateOutInPdf(data), ErrorMsgConstants.GENERATE_PDF_ERROR);
             if (null == r || null == r.getData()) {
@@ -264,7 +266,7 @@ public class CoreOutInRecordServiceImpl extends ServiceImpl<CoreOutInRecordMappe
             registerBookPdf.setOrgName(record.getOrgName());
             registerBookPdf.setOrgPath(sysOrg.getPath());
             registerBookPdf.setFileUrl(pdfUrl);
-            registerBookPdf.setFileName(fileName);
+            registerBookPdf.setFileName(finalFileName);
             //registerBookPdf.setFileName(StringUtils.substringAfterLast(pdfUrl, File.separator));
             registerBookPdfService.saveOrUpdate(registerBookPdf);
         }, threadPoolTaskExecutor);

+ 22 - 13
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/registerbook/service/impl/CoreRegisterBookPdfServiceImpl.java

@@ -19,6 +19,7 @@ import com.xunmei.common.core.domain.registerbook.dto.CoreRegisterBookPdfPageDto
 import com.xunmei.common.core.domain.registerbook.dto.ExportPdfDto;
 import com.xunmei.common.core.domain.registerbook.vo.CoreRegisterBookPdfPageVo;
 import com.xunmei.common.core.domain.registerbook.vo.PdfLocalFileTempVo;
+import com.xunmei.common.core.enums.OrgTypeEnum;
 import com.xunmei.common.core.enums.RegisterBookType;
 import com.xunmei.common.core.util.BeanHelper;
 import com.xunmei.common.core.web.page.TableDataInfo;
@@ -215,22 +216,30 @@ public class CoreRegisterBookPdfServiceImpl extends ServiceImpl<CoreRegisterBook
 
     @Override
     public String getPdfFileName(RegisterBookType bookType, SysOrg org) {
-        StringBuilder sb =new StringBuilder();
-        if(!StringUtil.isNullOrEmpty(org.getAffiliatedArea()))
-        {
-            sb.append(org.getAffiliatedArea()).append("_");
+        StringBuilder sb = new StringBuilder();
+        String affiliatedArea = ObjectUtil.isEmpty(org.getAffiliatedArea()) ? "" : org.getAffiliatedArea();
+        String affiliatedBank = ObjectUtil.isEmpty(org.getAffiliatedBank()) ? "" : org.getAffiliatedBank();
+
+        if (OrgTypeEnum.DIQU_HANG_SHE.getCode().equals(org.getType())) {
+            return buildFileName(sb, org.getShortName(), bookType.getText());
+        }
+
+        if (OrgTypeEnum.HANG_SHE.getCode().equals(org.getType())) {
+            return buildFileName(sb, affiliatedArea, org.getShortName(), bookType.getText());
         }
-        if(!StringUtil.isNullOrEmpty(org.getAffiliatedBank()))
-        {
-            sb.append(org.getAffiliatedBank()).append("_");
+
+        if (!StringUtil.isNullOrEmpty(org.getAffiliatedArea())) {
+            sb.append(affiliatedArea).append("_").append(affiliatedBank).append("_");
         }
-        sb.append(org.getShortName())
-            .append("_")
-            .append(bookType.getText())
-            .append("_")
-            .append(DateUtil.format(new Date(), Constants.HM_FORMAT))
-            .append(".pdf");
 
+        return buildFileName(sb, org.getShortName(), bookType.getText());
+    }
+
+    private String buildFileName(StringBuilder sb, String... parts) {
+        for (String part : parts) {
+            sb.append(part).append("_");
+        }
+        sb.append(DateUtil.format(new Date(), Constants.HM_FORMAT)).append(".pdf");
         return sb.toString();
     }
 

+ 2 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/controller/ApiPlanController.java

@@ -259,6 +259,8 @@ public class ApiPlanController {
     @GetMapping(value = "/buildResumptionPdf/{orgId}/{dateStr}")
     AjaxResult buildResumptionPdf(@PathVariable("orgId") Long orgId, @PathVariable String dateStr) {
         appPlanService.buildResumptionPdfDaily(orgId, DateUtil.parse(dateStr, Constants.DAILY_FORMAT));
+        appPlanService.buildResumptionNotWorkTimePdf(orgId, DateUtil.parse(dateStr, Constants.DAILY_FORMAT));
+        appPlanService.buildResumptionAllDayPdf(orgId, DateUtil.parse(dateStr, Constants.DAILY_FORMAT));
         return AjaxResult.success();
     }
 

+ 5 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/gx/vo/ResumptionPlanVo.java

@@ -115,4 +115,9 @@ public class ResumptionPlanVo {
      */
     private List<AppResumptionDataRemarkimg> imgs = new ArrayList<>();
 
+    /**
+     * 要点排序值
+     */
+    private Integer sort = 0;
+
 }

+ 11 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/service/impl/AppPlanServiceImpl.java

@@ -1736,7 +1736,8 @@ public class AppPlanServiceImpl extends ServiceImpl<AppPlanMapper, AppPlan> impl
     @Override
     public void buildResumptionAllDayPdf(Long orgId, Date date) {
         SysOrg sysOrg = RemoteCallHandlerExecutor.executeRemoteCall(() -> orgService.selectOrgById(orgId, SecurityConstants.INNER), ErrorMsgConstants.QUERY_ORG_DATA_ERROR);
-
+        //110报警:4
+        //电源:5
         final List<Map<String, Object>> mapList = this.getFtlResumptionAllDay(sysOrg, date);
         for (Map<String, Object> data : mapList) {
             if (!checkHasData(data)) {
@@ -1801,6 +1802,8 @@ public class AppPlanServiceImpl extends ServiceImpl<AppPlanMapper, AppPlan> impl
             String fileName = registerBookPdfService.getPdfFileName(RegisterBookType.getEnums(planType), sysOrg);
             Map<String, Object> data = new HashMap<>();
             data.put("planType", planType);
+            //任务类型总数
+            data.put("planTypes","1");
             List<AppResumptionDataInfoVo> allDayInfo = getItems(listMap.get(planType));
             Map<Long, List<AppResumptionDataInfoVo>> afterf = allDayInfo.stream().collect(Collectors.groupingBy(AppResumptionDataInfoVo::getItemId));
             data.put(DictUtils.getDictLabel(DictConstants.RESUMPTION_PLAN_EXEC, 1), getResult(afterf));
@@ -1842,6 +1845,9 @@ public class AppPlanServiceImpl extends ServiceImpl<AppPlanMapper, AppPlan> impl
         data.put("submiterNames", tempSubmitNames);
         // 获取任务相关问题
         data.put("questions", getListQuestionPdfVo(dataList.stream().map(Resumption::getId).collect(Collectors.toList())));
+        data.put("planType","7");
+        //任务类型总数
+        data.put("planTypes","1");
         return data;
     }
 
@@ -1881,6 +1887,8 @@ public class AppPlanServiceImpl extends ServiceImpl<AppPlanMapper, AppPlan> impl
         data.put(DictUtils.getDictLabel(DictConstants.RESUMPTION_PLAN_EXEC, 2), getResult(bef));
         data.put(DictUtils.getDictLabel(DictConstants.RESUMPTION_PLAN_EXEC, 3), getResult(ingf));
         data.put(DictUtils.getDictLabel(DictConstants.RESUMPTION_PLAN_EXEC, 4), getResult(afterf));
+        //任务类型总数
+        data.put("planTypes","3");
         // 提交人
 
         List<String> submiterNames = before.stream().map(Resumption::getSubmitorName).collect(Collectors.toList());
@@ -1947,10 +1955,12 @@ public class AppPlanServiceImpl extends ServiceImpl<AppPlanMapper, AppPlan> impl
                 tem.setSubmitName(String.valueOf(submitName));
                 //null:未执行  0:正常 1:异常
                 tem.setResValue(result);
+                tem.setSort(vo.getSort());
                 befs.add(tem);
             }
 
         }
+        befs.sort(Comparator.comparing(ResumptionPdf::getSort));
         return befs;
     }
 

+ 1 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/service/impl/ResumptionRecordServiceImpl.java

@@ -256,6 +256,7 @@ public class ResumptionRecordServiceImpl extends ServiceImpl<ResumptionRecordMap
             temp.setItemId(x.getItemId());
             temp.setExecuteResult(StringUtils.EMPTY);
             temp.setSubmitName(StringUtils.EMPTY);
+            temp.setSort(x.getSort());
             result.add(temp);
         });
 

+ 4 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/vo/resumptionRecord/AppResumptionDataInfoVo.java

@@ -49,6 +49,7 @@ public class AppResumptionDataInfoVo {
 
     @ApiModelProperty(value = "状态")
     private Integer executeStatus;
+
     @ApiModelProperty(value = "检查要点id")
     private Long itemId;
 
@@ -58,4 +59,7 @@ public class AppResumptionDataInfoVo {
 
     private List<ResumptionDataProtectionVo> protections;
 
+    @ApiModelProperty(value = "要点排序值",notes = "如果没有设置排序,那么放在最后")
+    private Integer sort=999;
+
 }

+ 12 - 0
soc-modules/soc-modules-core/src/main/resources/mapper/drill/CoreDrillPlanMapper.xml

@@ -296,6 +296,10 @@
     <update id="updateCoreDrillPlan" parameterType="com.xunmei.common.core.domain.drill.domain.CoreDrillPlan">
         update core_drill_plan
         <trim prefix="SET" suffixOverrides=",">
+            <if test="category != null">
+                category =
+                #{category},
+            </if>
             <if test="planName != null">
                 plan_name =
                 #{planName},
@@ -713,4 +717,12 @@
         from core_drill_plan
         where parent_id = #{planId}
     </select>
+
+    <select id="selectByParentIdAndOrgId" resultMap="CoreDrillPlanResult">
+        select *
+        from core_drill_plan
+        where parent_id = #{parentId}
+          and belong_org_id = #{orgId}
+        limit 1
+    </select>
 </mapper>

+ 1 - 1
soc-modules/soc-modules-core/src/main/resources/mapper/drill/CoreDrillTaskMapper.xml

@@ -154,7 +154,7 @@
         from core_drill_task
         where status in (2,3)
           and plan_id in
-              (select id from core_drill_plan where deleted = 0 and parent_id = #{planId})
+              (select id from core_drill_plan where parent_id = #{planId})
         limit 1
     </select>
 

+ 12 - 0
soc-modules/soc-modules-core/src/main/resources/mapper/edu/CoreEduTrainingPlanMapper.xml

@@ -328,6 +328,10 @@
     <update id="updateCoreEduTrainingPlan" parameterType="com.xunmei.common.core.domain.edu.domain.CoreEduTrainingPlan">
         update core_edu_training_plan
         <trim prefix="SET" suffixOverrides=",">
+            <if test="type != null">
+                type =
+                #{type},
+            </if>
             <if test="planName != null">
                 plan_name =
                 #{planName},
@@ -656,4 +660,12 @@
         from core_edu_training_plan
         where parent_id = #{planId}
     </select>
+
+    <select id="selectByParentIdAndOrgId" resultMap="CoreEduTrainingPlanResult">
+        select *
+        from core_edu_training_plan
+        where parent_id = #{parentId}
+          and belong_org_id = #{orgId}
+        limit 1
+    </select>
 </mapper>

+ 10 - 8
soc-modules/soc-modules-core/src/main/resources/mapper/edu/CoreEduTrainingTaskMapper.xml

@@ -13,6 +13,7 @@
         <result property="title" column="title"/>
         <result property="type" column="type"/>
         <result property="status" column="status"/>
+        <result property="site" column="site"/>
         <result property="content" column="content"/>
         <result property="note" column="note"/>
         <result property="hostId" column="host_id"/>
@@ -117,20 +118,21 @@
                t.org_name,
                t.content,
                t.note,
+               t.site,
                title,
                type,
-               start_date  as startDate,
-               end_date    as endDate,
+               start_date                  as startDate,
+               end_date                    as endDate,
                training_start_date_time,
                training_end_date_time,
                image_list,
                t.host_id,
                t.recorder_id,
-               ifnull(t.host_name,u.name)      as hostName,
-               u2.name     as recorderName,
-               t.pdf_url   as pdfUrl,
-               t.file_list as file,
-               t.status    as status
+               ifnull(t.host_name, u.name) as hostName,
+               u2.name                     as recorderName,
+               t.pdf_url                   as pdfUrl,
+               t.file_list                 as file,
+               t.status                    as status
         from core_edu_training_task t
                  left join sys_user u on u.id = t.host_id
                  left join sys_user u2 on u2.id = t.recorder_id
@@ -176,7 +178,7 @@
         from core_edu_training_task
         where status in (2)
           and plan_id in
-              (select id from core_edu_training_plan where deleted = 0 and parent_id = #{planId})
+              (select id from core_edu_training_plan where  parent_id = #{planId})
         limit 1
     </select>
 

+ 4 - 2
soc-modules/soc-modules-core/src/main/resources/mapper/resumption/AppPlanMapper.xml

@@ -417,7 +417,8 @@
                q.plan_id,
                q.point_scan,
                q.required,
-               q.business_type as pointDataSource
+               q.business_type as pointDataSource,
+               q.sort
         from (select c.id     as item_id,
                      c.`name` as item_name,
                      b.id     as point_id,
@@ -431,7 +432,8 @@
                      b.check_id,
                      a.plan_id,
                      a.point_scan,
-                     a.required
+                     a.required,
+                     b.sort
               from core_resumption_plan_to_point a
                        LEFT JOIN core_resumption_rule_point b on a.point_id = b.id
                        LEFT JOIN core_resumption_rule_item c on b.item_id = c.id

+ 2 - 1
soc-modules/soc-modules-core/src/main/resources/mapper/resumption/ResumptionRecordMapper.xml

@@ -284,7 +284,8 @@
                d.id                                                AS dataId,
                d.item_id,
                d.res_value,
-               d.submit_name
+               d.submit_name,
+               p.sort
         FROM core_resumption_data d
                  INNER JOIN core_resumption_rule_point p ON d.item_id = p.id
                  LEFT JOIN sys_area a ON a.id = d.area_id

+ 4 - 4
soc-modules/soc-modules-file/src/main/java/com/xunmei/file/service/LocalSysFileServiceImpl.java

@@ -251,7 +251,7 @@ public class LocalSysFileServiceImpl implements ISysFileService {
         final Font tableFont = pdfTableVo.getTableFont();
 
         document.open();
-        PdfUtil.dealHeader(document, fs, "学 习 教 育 记 录", 24);
+        PdfUtil.dealHeader(document, fs, RegisterBookType.EDUCATION_TRAINING.getText(), 24);
         PdfUtil.dealEduBody(document, table, tableFont, data);
 
 
@@ -323,7 +323,7 @@ public class LocalSysFileServiceImpl implements ISysFileService {
         final BaseFont fs = pdfTableVo.getFs();
         final Font tableFont = pdfTableVo.getTableFont();
 
-        PdfUtil.dealHeader(document, fs, "监控调阅情况登记簿", 24);
+        PdfUtil.dealHeader(document, fs, RegisterBookType.MONITOR_ACCESS.getText(), 24);
         String checkTime = data.getTaskStartTime();
         String checkUser = data.getCheckUser();
 
@@ -366,7 +366,7 @@ public class LocalSysFileServiceImpl implements ISysFileService {
         final BaseFont fs = pdfTableVo.getFs();
         final Font tableFont = pdfTableVo.getTableFont();
         document.open();
-        PdfUtil.dealHeader(document, fs, "预 案 演 练 记 录", 24);
+        PdfUtil.dealHeader(document, fs, RegisterBookType.SAFETY_DRILL.getText(), 24);
         PdfUtil.dealDrillBody(document, table, tableFont, data);
         document.close();
         writer.close();
@@ -389,7 +389,7 @@ public class LocalSysFileServiceImpl implements ISysFileService {
         final PdfPTable table = pdfTableVo.getTable();
         final BaseFont fs = pdfTableVo.getFs();
         final Font tableFont = pdfTableVo.getTableFont();
-        PdfUtil.dealHeader(document, fs, "来 访 管 理 登 记 簿", 24);
+        PdfUtil.dealHeader(document, fs, "出入管理登记簿", 24);
         PdfUtil.dealOutInBody(document, table, tableFont, data);
         document.close();
         writer.close();

+ 66 - 32
soc-modules/soc-modules-file/src/main/java/com/xunmei/file/utils/PdfUtil.java

@@ -101,6 +101,7 @@ public class PdfUtil {
         }
         return cell;
     }
+
     private static PdfPCell cell(Font tableFont, String content, int align, Integer colspan, Integer rowspan, Integer paddingLeft, Integer paddingRight) {
         PdfPCell cell = new PdfPCell(new Phrase(content, tableFont));
         if (colspan != null && colspan > 0) {
@@ -183,16 +184,20 @@ public class PdfUtil {
 
     public static void dealEduBody(Document document, PdfPTable table, Font tableFont, Map<String, Object> data) throws Exception {
         //第一行
-        createPDFCell(tableFont, table, "时间", Element.ALIGN_MIDDLE, 1, 1);
-        createPDFCell(tableFont, table, data.get("time").toString(), Element.ALIGN_LEFT, 5, 1);
+
+        createPDFCell(tableFont, table, "单位名称", Element.ALIGN_MIDDLE, 1, 1);
+        createPDFCell(tableFont, table, data.get("address").toString(), Element.ALIGN_MIDDLE, 2, 1);
         createPDFCell(tableFont, table, "地点", Element.ALIGN_MIDDLE, 1, 1);
-        createPDFCell(tableFont, table, data.get("address").toString(), Element.ALIGN_MIDDLE, 5, 1);
+        createPDFCell(tableFont, table, data.get("site").toString(), Element.ALIGN_MIDDLE, 2, 1);
         //第二行
         createPDFCell(tableFont, table, "主持人", Element.ALIGN_MIDDLE, 1, 1);
         createPDFCell(tableFont, table, data.get("hostName").toString(), Element.ALIGN_MIDDLE, 2, 1);
         createPDFCell(tableFont, table, "记录人", Element.ALIGN_MIDDLE, 1, 1);
         createPDFCell(tableFont, table, data.get("recorderName").toString(), Element.ALIGN_MIDDLE, 2, 1);
 
+        createPDFCell(tableFont, table, "时间", Element.ALIGN_MIDDLE, 1, 1);
+        createPDFCell(tableFont, table, data.get("time").toString(), Element.ALIGN_LEFT, 5, 1);
+
         //内容
         createPDFCell(tableFont, table, "内容", Element.ALIGN_MIDDLE, 1, 1);
         createPDFCell(tableFont, table, data.get("content").toString(), Element.ALIGN_LEFT, 5, 1);
@@ -216,43 +221,72 @@ public class PdfUtil {
     }
 
 
-
     public static void dealResumptionBody(Document document, PdfPTable table, Font tableFont, Map<String, Object> data) throws Exception {
         // 第一行
         PdfUtil.createPDFCell(tableFont, table, "单位名称", Element.ALIGN_MIDDLE, 2, 0);
         PdfUtil.createPDFCell(tableFont, table, data.get("orgName").toString(), Element.ALIGN_MIDDLE, 3, 0);
         PdfUtil.createPDFCell(tableFont, table, "检查时间", Element.ALIGN_MIDDLE, 2, 0);
-        PdfUtil.createPDFCell(tableFont, table, ObjectUtil.isNotEmpty(data.get("submiterNames")) ? data.get("dateStr").toString() : "", Element.ALIGN_MIDDLE, 3, 0);
+        PdfUtil.createPDFCell(tableFont, table, ObjectUtil.isNotEmpty(data.get("dateStr")) ? data.get("dateStr").toString() : "", Element.ALIGN_MIDDLE, 3, 0);
         // 第二行
         PdfUtil.createPDFCell(tableFont, table, "检查人", Element.ALIGN_MIDDLE, 2, 0);
         PdfUtil.createPDFCell(tableFont, table, data.get("submiterNames").toString(), Element.ALIGN_MIDDLE, 8, 0);
         // 第三行
-        PdfUtil.createPDFCell(tableFont, table, "任务时段", Element.ALIGN_MIDDLE, 2, 0);
+        Object planTypes = data.get("planTypes");
+        if ("1".equals(planTypes)) {
+            PdfUtil.createPDFCell(tableFont, table, "履职工作情况", Element.ALIGN_MIDDLE, 10, 0);
+            PdfUtil.createPDFCell(tableFont, table, "序号", Element.ALIGN_MIDDLE, 2, 0);
+        } else {
+            PdfUtil.createPDFCell(tableFont, table, "任务时段", Element.ALIGN_MIDDLE, 2, 0);
+        }
         PdfUtil.createPDFCell(tableFont, table, "检查内容", Element.ALIGN_MIDDLE, 6, 0);
         PdfUtil.createPDFCell(tableFont, table, "检查情况", Element.ALIGN_MIDDLE, 2, 0);
         final List<SysDictData> dictCache = DictUtils.getDictCache(DictConstants.RESUMPTION_PLAN_EXEC);
         final List<String> names = dictCache.stream().map(SysDictData::getDictLabel).collect(Collectors.toList());
-        for (String s : names) {
-            List<LinkedHashMap<String, Object>> lists = (List<LinkedHashMap<String, Object>>) data.get(s);
-            if (ObjectUtil.isEmpty(lists)) {
-                //不同的执行时刻
-                continue;
-            }
-            //不同的执行时刻
-            PdfUtil.createPDFCell(tableFont, table, getLineStr(s), PdfPCell.ALIGN_MIDDLE, 2, lists.size());
+        if ("1".equals(planTypes)) {
             int o = 1;
-            for (LinkedHashMap<String, Object> listVo : lists) {
-                // 检查内容
-                String rowContent = o + "、" + listVo.get("pointName");
-                PdfUtil.createPDFCell(tableFont, table, rowContent, Element.ALIGN_LEFT, 6, 0);
-                // 检查情况
-                PdfUtil.createPDFCell(tableFont, table, ObjectUtil.isEmpty(listVo.get("resValue")) ? "" : (((Integer) listVo.get("resValue")) == 0 ? "正常" : "异常"), Element.ALIGN_MIDDLE, 2, 0);
-                // 检查人
-                //PdfUtil.createPDFCell(tableFont, table, String.valueOf(listVo.get("submitName")), Element.ALIGN_CENTER, 0, 0);
-                o++;
+            for (String s : names) {
+                List<LinkedHashMap<String, Object>> lists = (List<LinkedHashMap<String, Object>>) data.get(s);
+                if (ObjectUtil.isNotEmpty(lists)) {
+                    for (LinkedHashMap<String, Object> listVo : lists) {
+                        //序号
+                        PdfUtil.createPDFCell(tableFont, table, String.valueOf(o), PdfPCell.ALIGN_MIDDLE, 2, 0);
+                        // 检查内容
+                        String rowContent = listVo.get("pointName")+"";
+                        PdfUtil.createPDFCell(tableFont, table, rowContent, Element.ALIGN_LEFT, 6, 0);
+                        // 检查情况
+                        PdfUtil.createPDFCell(tableFont, table, ObjectUtil.isEmpty(listVo.get("resValue")) ? "" : (((Integer) listVo.get("resValue")) == 0 ? "正常" : "异常"), Element.ALIGN_MIDDLE, 2, 0);
+                        // 检查人
+                        //PdfUtil.createPDFCell(tableFont, table, String.valueOf(listVo.get("submitName")), Element.ALIGN_CENTER, 0, 0);
+                        o++;
+                    }
+                }
+            }
+
+
+        } else {
+            for (String s : names) {
+                List<LinkedHashMap<String, Object>> lists = (List<LinkedHashMap<String, Object>>) data.get(s);
+                if (ObjectUtil.isEmpty(lists)) {
+                    //不同的执行时刻
+                    continue;
+                }
+                //不同的执行时刻
+                PdfUtil.createPDFCell(tableFont, table, getLineStr(s), PdfPCell.ALIGN_MIDDLE, 2, lists.size());
+                int o = 1;
+                for (LinkedHashMap<String, Object> listVo : lists) {
+                    // 检查内容
+                    String rowContent = o + "、" + listVo.get("pointName");
+                    PdfUtil.createPDFCell(tableFont, table, rowContent, Element.ALIGN_LEFT, 6, 0);
+                    // 检查情况
+                    PdfUtil.createPDFCell(tableFont, table, ObjectUtil.isEmpty(listVo.get("resValue")) ? "" : (((Integer) listVo.get("resValue")) == 0 ? "正常" : "异常"), Element.ALIGN_MIDDLE, 2, 0);
+                    // 检查人
+                    //PdfUtil.createPDFCell(tableFont, table, String.valueOf(listVo.get("submitName")), Element.ALIGN_CENTER, 0, 0);
+                    o++;
+                }
             }
         }
 
+
         List<Map<String, List<Map<String, Object>>>> protectionList = (List<Map<String, List<Map<String, Object>>>>) data.get("protection");
 
         if (ObjectUtil.isNotEmpty(protectionList)) {
@@ -260,7 +294,7 @@ public class PdfUtil {
             //日常登记簿-布撤防数据
             PdfUtil.createPDFCell(tableFont, table, "布撤防情况", Element.ALIGN_MIDDLE, 10, 1);
 
-            PdfUtil.createPDFCell(tableFont, table, "控制器", Element.ALIGN_MIDDLE, 4, 1);
+            PdfUtil.createPDFCell(tableFont, table, "防区", Element.ALIGN_MIDDLE, 4, 1);
             PdfUtil.createPDFCell(tableFont, table, "状态", Element.ALIGN_MIDDLE, 3, 1);
             PdfUtil.createPDFCell(tableFont, table, "时间", Element.ALIGN_MIDDLE, 3, 1);
 
@@ -363,7 +397,7 @@ public class PdfUtil {
         createPDFCell(tableFont, table, data.get("accompanyingPerson").toString(), Element.ALIGN_MIDDLE, 2, 1);
 
         //第三行
-        createPDFCell(tableFont, table, "来访单位", Element.ALIGN_MIDDLE, 1, 1);
+        createPDFCell(tableFont, table, "所在单位", Element.ALIGN_MIDDLE, 1, 1);
         createPDFCell(tableFont, table, data.get("outOrgName").toString(), Element.ALIGN_MIDDLE, 2, 1);
         createPDFCell(tableFont, table, "来访人员", Element.ALIGN_MIDDLE, 1, 1);
         createPDFCell(tableFont, table, data.get("userName").toString(), Element.ALIGN_MIDDLE, 2, 1);
@@ -689,10 +723,10 @@ public class PdfUtil {
 
         PdfUtil.createPDFCell(tableFont, table, "检查开始时间", Element.ALIGN_MIDDLE, 3, 1);
         //PdfUtil.createPDFCell(tableFont, table, data.getStartTimeStr(), Element.ALIGN_MIDDLE, 4, 1);
-        table.addCell( cell(tableFont, data.getStartTimeStr(), Element.ALIGN_MIDDLE, 4, 1,2,2));
+        table.addCell(cell(tableFont, data.getStartTimeStr(), Element.ALIGN_MIDDLE, 4, 1, 2, 2));
         PdfUtil.createPDFCell(tableFont, table, "检查结束时间", Element.ALIGN_MIDDLE, 3, 1);
         //PdfUtil.createPDFCell(tableFont, table, data.getEndTimeStr(), Element.ALIGN_MIDDLE, 4, 1);
-        table.addCell( cell(tableFont, data.getEndTimeStr(), Element.ALIGN_MIDDLE, 4, 1,2,2));
+        table.addCell(cell(tableFont, data.getEndTimeStr(), Element.ALIGN_MIDDLE, 4, 1, 2, 2));
         PdfUtil.createPDFCell(tableFont, table, "检查单位", Element.ALIGN_MIDDLE, 3, 1);
         PdfUtil.createPDFCell(tableFont, table, data.getCheckOrgName(), Element.ALIGN_MIDDLE, 4, 1);
         PdfUtil.createPDFCell(tableFont, table, "检查组成员", Element.ALIGN_MIDDLE, 3, 1);
@@ -707,15 +741,15 @@ public class PdfUtil {
 
         PdfUtil.createPDFCell(tableFont, table, "检查工作情况", Element.ALIGN_MIDDLE, 14, 1);
 
-        List<CheckDataVo> normalDataList = data.getCheckDatas().stream().filter(d -> ObjectUtil.equal(Boolean.TRUE, d.getCheckStatus())).collect(Collectors.toList());
+//        List<CheckDataVo> normalDataList = data.getCheckDatas().stream().filter(d -> ObjectUtil.equal(Boolean.TRUE, d.getCheckStatus())).collect(Collectors.toList());
         PdfUtil.createPDFCell(tableFont, table, "序号", Element.ALIGN_MIDDLE, 2, 1);
         PdfUtil.createPDFCell(tableFont, table, "检查内容", Element.ALIGN_MIDDLE, 10, 1);
         PdfUtil.createPDFCell(tableFont, table, "检查情况", Element.ALIGN_MIDDLE, 2, 1);
-        if (normalDataList.size() > 0) {
-            for (CheckDataVo checkDataVo : normalDataList) {
-                PdfUtil.createPDFCell(tableFont, table, String.valueOf(normalDataList.indexOf(checkDataVo) + 1), Element.ALIGN_MIDDLE, 2, 1);
+        if (ObjectUtil.isNotEmpty(data.getCheckDatas()) && data.getCheckDatas().size() > 0) {
+            for (CheckDataVo checkDataVo : data.getCheckDatas()) {
+                PdfUtil.createPDFCell(tableFont, table, String.valueOf(data.getCheckDatas().indexOf(checkDataVo) + 1), Element.ALIGN_MIDDLE, 2, 1);
                 PdfUtil.createPDFCell(tableFont, table, checkDataVo.getPointName(), Element.ALIGN_MIDDLE, 10, 1);
-                PdfUtil.createPDFCell(tableFont, table, "正常", Element.ALIGN_MIDDLE, 2, 1);
+                PdfUtil.createPDFCell(tableFont, table, ObjectUtil.equal(Boolean.TRUE, checkDataVo.getCheckStatus())?"正常":"异常", Element.ALIGN_MIDDLE, 2, 1);
             }
         } else {
             PdfUtil.createPDFCell(tableFont, table, "/", Element.ALIGN_MIDDLE, 2, 1);

+ 15 - 7
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/alarm/service/impl/IotAlarmDataServiceImpl.java

@@ -148,14 +148,22 @@ public class IotAlarmDataServiceImpl extends ServiceImpl<IotAlarmDataMapper, Iot
             DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
             for (IotAlarmData alarm : list) {
                 if (alarm.getSmsType()) {
+                    LogUtils.DIRECT_HOST_SENSOR_STATUS.info("传感器【 {} 】 发生报警需要发送短信提醒", iotSensor.getDeviceName());
                    CompletableFuture.runAsync(()->{
-                       //需要发送短信
-                       LocalDateTime time = alarm.getTime();
-                       String timeStr = time.format(formatter);
-                       String alarmType = SmsNotifyType.getDesc(iotSensor.getDeviceType());
-                       LogUtils.DIRECT_HOST_SENSOR_STATUS.info("传感器【 {} 】 发生报警: {} ,准备异步发送短信提醒", iotSensor.getDeviceName(), alarmType);
-                       remoteSmsService.sendSmsIot(iotSensor.getOrgId(), alarmType, alarm.getContent(), timeStr);
-                       LogUtils.DIRECT_HOST_SENSOR_STATUS.info("传感器【 {} 】 发生报警: {} ,异步发送短信提醒完成", iotSensor.getDeviceName(), alarmType);
+                       try {
+                           //需要发送短信
+                           LocalDateTime time = alarm.getTime();
+                           String timeStr = time.format(formatter);
+                           String alarmType = SmsNotifyType.getDesc(iotSensor.getDeviceType());
+                           LogUtils.DIRECT_HOST_SENSOR_STATUS.info("传感器【 {} 】 发生报警: {} ,准备异步发送短信提醒", iotSensor.getDeviceName(), alarmType);
+                           remoteSmsService.sendSmsIot(iotSensor.getOrgId(), alarmType, alarm.getContent(), timeStr);
+                           LogUtils.DIRECT_HOST_SENSOR_STATUS.info("传感器【 {} 】 发生报警: {} ,异步发送短信提醒完成", iotSensor.getDeviceName(), alarmType);
+                       } catch (Exception e) {
+                           LogUtils.DIRECT_HOST_SENSOR_STATUS.info("传感器【 {} 】 发生报警,异步发送短信提醒时发生异常:{}", iotSensor.getDeviceName(), e.getMessage());
+
+                           throw new RuntimeException(e);
+                       }
+
                    });
                 }
             }

+ 3 - 2
soc-modules/soc-modules-sms/src/main/java/com/xunmei/sms/service/ISmsSendRecordService.java

@@ -1,6 +1,7 @@
 package com.xunmei.sms.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.dc.eai.data.CompositeData;
 import com.xunmei.common.core.domain.reminder.dto.ReminderScheduleMsgDto;
 import com.xunmei.common.core.domain.sms.domain.SmsSendRecord;
 import com.xunmei.common.core.domain.sms.dto.SmsSendRecordPageDto;
@@ -24,8 +25,8 @@ public interface ISmsSendRecordService extends IService<SmsSendRecord> {
 
     void batchSave(Collection<SmsSendRecord> list);
 
-    SmsSendRecord saveSmsRecord(SysOrg sysOrg, SysUser sysUser, AjaxResult result, SmsInfoVo smsInfoVo);
-    SmsSendRecord saveSmsRecord(ReminderScheduleMsgDto msgDto, AjaxResult result, SmsInfoVo smsInfoVo);
+    SmsSendRecord saveSmsRecord(SysOrg sysOrg, SysUser sysUser, AjaxResult result, SmsInfoVo smsInfoVo, CompositeData smsCompositeData);
+    SmsSendRecord saveSmsRecord(ReminderScheduleMsgDto msgDto, AjaxResult result, SmsInfoVo smsInfoVo,CompositeData smsCompositeData);
 
     TableDataInfo<?> pageData(SmsSendRecordPageDto req);
 }

+ 9 - 5
soc-modules/soc-modules-sms/src/main/java/com/xunmei/sms/service/SmsService.java

@@ -94,7 +94,10 @@ public class SmsService implements ISmsService {
             }
             CompositeData rspData = ESBClient.request(smsCompositeData);
             logger.debug("【发送短信】返回数据:" + JSONObject.toJSON(rspData));
-            return getResult(rspData);
+//            return getResult(rspData);
+            AjaxResult result = getResult(rspData);
+            recordService.saveSmsRecord(new SysOrg(), new SysUser(), result, data,smsCompositeData);
+            return result;
         } catch (Exception ex) {
             logger.error("【发送短信】发送时内部异常:数据:" + JSONObject.toJSON(data), ex);
             return AjaxResult.error("【发送短信】发送时内部异常");
@@ -134,7 +137,7 @@ public class SmsService implements ISmsService {
     private void deal(SysOrg sysOrg, SysUser sysUser, SmsInfoVo smsInfoVo) {
         if (ObjectUtil.isEmpty(sysUser.getPhone())) {
             AjaxResult result = AjaxResult.error("用户" + sysUser.getName() + "手机号为空");
-            recordService.saveSmsRecord(sysOrg, sysUser, result, smsInfoVo);
+            recordService.saveSmsRecord(sysOrg, sysUser, result, smsInfoVo,null);
             return;
         }
         CompositeData smsCompositeData = SmsUtil.createSmsBody(smsInfoVo, systemCode, systemName, serviceCode, serviceScene);
@@ -145,7 +148,7 @@ public class SmsService implements ISmsService {
             logger.error("短信发送时发生异常 :", e);
         }
         AjaxResult result = getResult(rspData);
-        recordService.saveSmsRecord(sysOrg, sysUser, result, smsInfoVo);
+        recordService.saveSmsRecord(sysOrg, sysUser, result, smsInfoVo,smsCompositeData);
     }
 
     @Override
@@ -204,11 +207,12 @@ public class SmsService implements ISmsService {
             smsInfoVo.setRetMsg(dto.getType());
             smsInfoVo.setBak3(dto.getMsgContent());
             AjaxResult result;
+            CompositeData smsCompositeData=null;
             if (ObjectUtil.isEmpty(dto.getPhone())) {
                 result = AjaxResult.error("用户" + dto.getRecipientName() + "手机号为空");
             } else {
                 CompositeData rspData = null;
-                CompositeData smsCompositeData = SmsUtil.createSmsBody(smsInfoVo, systemCode, systemName, serviceCode, serviceScene);
+                smsCompositeData = SmsUtil.createSmsBody(smsInfoVo, systemCode, systemName, serviceCode, serviceScene);
                 try {
                     rspData = ESBClient.request(smsCompositeData);
                 } catch (Exception e) {
@@ -224,7 +228,7 @@ public class SmsService implements ISmsService {
                 msgVo.setScheduleId(dto.getScheduleId());
                 returnData.add(msgVo);
             }
-            recordService.saveSmsRecord(dto, result, smsInfoVo);
+            recordService.saveSmsRecord(dto, result, smsInfoVo,smsCompositeData);
         }
         return returnData;
     }

+ 15 - 11
soc-modules/soc-modules-sms/src/main/java/com/xunmei/sms/service/impl/SmsSendRecordServiceImpl.java

@@ -6,6 +6,7 @@ import com.alibaba.fastjson2.JSON;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dc.eai.data.CompositeData;
 import com.xunmei.common.core.constant.HttpStatus;
 import com.xunmei.common.core.constant.SecurityConstants;
 import com.xunmei.common.core.domain.reminder.dto.ReminderScheduleMsgDto;
@@ -21,6 +22,7 @@ import com.xunmei.system.api.RemoteOrgService;
 import com.xunmei.system.api.domain.SysOrg;
 import com.xunmei.system.api.domain.SysUser;
 import com.xunmei.system.api.vo.SmsInfoVo;
+import io.netty.util.internal.StringUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -76,10 +78,10 @@ public class SmsSendRecordServiceImpl extends ServiceImpl<SmsSendRecordMapper, S
         }
         for (SmsSendRecord smsSendRecord : list) {
             int insert = baseMapper.insert(smsSendRecord);
-            if (insert==0){
+            if (insert == 0) {
                 log.error("短信发送记录保存失败");
-            }else {
-                log.info("短信发送记录保存成功:{}",JSON.toJSONString(smsSendRecord));
+            } else {
+                log.info("短信发送记录保存成功:{}", JSON.toJSONString(smsSendRecord));
             }
 
         }
@@ -87,7 +89,7 @@ public class SmsSendRecordServiceImpl extends ServiceImpl<SmsSendRecordMapper, S
     }
 
     @Override
-    public SmsSendRecord saveSmsRecord(SysOrg sysOrg, SysUser sysUser, AjaxResult result, SmsInfoVo smsInfoVo) {
+    public SmsSendRecord saveSmsRecord(SysOrg sysOrg, SysUser sysUser, AjaxResult result, SmsInfoVo smsInfoVo, CompositeData smsCompositeData) {
         SmsSendRecord record = new SmsSendRecord();
         record.setId(IdWorker.getId());
         record.setTime(LocalDateTime.now());
@@ -102,18 +104,19 @@ public class SmsSendRecordServiceImpl extends ServiceImpl<SmsSendRecordMapper, S
         record.setTypeText(smsInfoVo.getRetMsg());
         record.setResult(result.get(AjaxResult.CODE_TAG).equals(String.valueOf(HttpStatus.SUCCESS)) ? "0" : "1");
         record.setResultDescription(result.get(AjaxResult.MSG_TAG).toString());
+        record.setReqDetail(smsCompositeData == null ? StringUtil.EMPTY_STRING : JSON.toJSONString(smsCompositeData));
         record.setRespDetail(JSON.toJSONString(result));
         int insert = baseMapper.insert(record);
-        if (insert==0){
+        if (insert == 0) {
             log.error("短信发送记录保存失败");
-        }else {
-            log.info("短信发送记录保存成功:{}",JSON.toJSONString(record));
+        } else {
+            log.info("短信发送记录保存成功:{}", JSON.toJSONString(record));
         }
         return record;
     }
 
     @Override
-    public SmsSendRecord saveSmsRecord(ReminderScheduleMsgDto msgDto, AjaxResult result, SmsInfoVo smsInfoVo) {
+    public SmsSendRecord saveSmsRecord(ReminderScheduleMsgDto msgDto, AjaxResult result, SmsInfoVo smsInfoVo, CompositeData smsCompositeData) {
         SmsSendRecord record = new SmsSendRecord();
         record.setId(IdWorker.getId());
         record.setTime(LocalDateTime.now());
@@ -128,12 +131,13 @@ public class SmsSendRecordServiceImpl extends ServiceImpl<SmsSendRecordMapper, S
         record.setTypeText(smsInfoVo.getRetMsg());
         record.setResult(result.get(AjaxResult.CODE_TAG).equals(String.valueOf(HttpStatus.SUCCESS)) ? "0" : "1");
         record.setResultDescription(result.get(AjaxResult.MSG_TAG).toString());
+        record.setReqDetail(JSON.toJSONString(smsCompositeData));
         record.setRespDetail(JSON.toJSONString(result));
         int insert = baseMapper.insert(record);
-        if (insert==0){
+        if (insert == 0) {
             log.error("短信发送记录保存失败");
-        }else {
-            log.info("短信发送记录保存成功:{}",JSON.toJSONString(record));
+        } else {
+            log.info("短信发送记录保存成功:{}", JSON.toJSONString(record));
         }
         return record;
     }

+ 5 - 0
soc-modules/soc-modules-sms/src/main/java/com/xunmei/sms/utils/SmsUtil.java

@@ -255,6 +255,11 @@ public class SmsUtil {
             field.setValue(source.getAcctStatus());
             body.addField("ACCT_STATUS", field);
         }
+        if (source.getRetMsg() != null) {
+            Field field = new Field(new FieldAttr(FieldType.FIELD_STRING, 10, 0));
+            field.setValue(source.getRetMsg());
+            body.addField("RET_MSG", field);
+        }
         if (source.getChannelType() != null) {
             Field field = new Field(new FieldAttr(FieldType.FIELD_STRING, 2, 0));
             field.setValue(source.getChannelType());

+ 2 - 1
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/controller/ExportSqlController.java

@@ -6,6 +6,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletResponse;
@@ -39,7 +40,7 @@ public class ExportSqlController {
     }
 
     @GetMapping("/tables")
-    public void exportDataBase(HttpServletResponse response, List<String> tableNames){
+    public void exportDataBase(HttpServletResponse response,@RequestParam List<String> tableNames){
         try {
             exportSqlService.exportTables(response,tableNames);
         } catch (Exception e) {

+ 4 - 3
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/controller/SysWorkTimeController.java

@@ -76,12 +76,13 @@ public class SysWorkTimeController extends BaseController {
     public AjaxResult monthedit(@RequestBody WorkTimeMonthEditNewDto sysWorkTimeSet) {
 
         List<Long> orgIds = sysWorkTimeSet.getOrgIdList();
-        for (Long orgId : orgIds) {
+        /*for (Long orgId : orgIds) {
             sysWorkTimeService.batchnew(orgId, sysWorkTimeSet.getWorkTimeList());
-        }
+        }*/
+        sysWorkTimeService.batchNew(orgIds, sysWorkTimeSet.getWorkTimeList());
         applicationEventPublisher.publishEvent(new WorkTimeChangeEvent(this, orgIds,sysWorkTimeSet.getWorkTimeList()));
 
-        return AjaxResult.success();
+        return AjaxResult.success("作息后台生成中,请稍后查看...");
     }
 
     /**

+ 1 - 1
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/controller/SysWorkTimeSetController.java

@@ -103,7 +103,7 @@ public class SysWorkTimeSetController extends BaseController {
     public AjaxResult add(@RequestBody SysWorkTimeSet sysWorkTimeSet) {
         //return sysWorkTimeSetService.add(sysWorkTimeSet);
         sysWorkTimeSetService.configWorkTimeSet(sysWorkTimeSet);
-        return  AjaxResult.success();
+        return  AjaxResult.success("作息后台生成中,请稍后查看....");
     }
 
     /**

+ 1 - 1
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/mapper/SysWorkTimeMapper.java

@@ -98,6 +98,6 @@ public interface SysWorkTimeMapper extends BaseMapper<SysWorkTime> {
 
     int deleteByOrgIdListAndDateRange(@Param("startTime") Date startTime, @Param("endTime") Date endTime, @Param("list") List<Long> orgIdList);
 
-    void batchInsertByXML(@Param("list") List<SysWorkTime> list);
+    int batchInsertByXML(@Param("list") List<SysWorkTime> list);
     void batchUpdateByXML(@Param("list") List<SysWorkTime> list);
 }

+ 1 - 0
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/ISysWorkTimeService.java

@@ -41,6 +41,7 @@ public interface ISysWorkTimeService extends IService<SysWorkTime> {
     List<SysWorkTime> findByOrgAndMonth(SysWorkTime sysWorkTime);
 
     List<SysWorkTime> batchnew(Long orgId, List<SysWorkTime> workTimeDtoList);
+    List<SysWorkTime> batchNew(List<Long> orgIdList, List<SysWorkTime> workTimeDtoList);
 
     boolean existByYmd(Long orgId, Ymd ymd, boolean isEnable);
 

+ 7 - 1
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysOrgServiceImpl.java

@@ -1471,9 +1471,15 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
     @Override
     public String concatOrgName(Long orgId) {
         SysOrg org = getById(orgId);
-        if (ObjectUtil.isEmpty(org)){
+        if (ObjectUtil.isNull(org)){
             return StringUtil.EMPTY_STRING;
         }
+        if (OrgTypeEnum.DIQU_HANG_SHE.getCode().equals(org.getType())){
+            return org.getShortName();
+        }
+        if (OrgTypeEnum.HANG_SHE.getCode().equals(org.getType())){
+            return org.getAffiliatedArea()+"-"+org.getShortName();
+        }
         return org.getAffiliatedArea()+"-"+org.getAffiliatedBank()+"-"+org.getShortName();
     }
 }

+ 63 - 44
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysWorkTimeServiceImpl.java

@@ -1,41 +1,33 @@
 package com.xunmei.system.service.impl;
 
 import cn.hutool.core.collection.CollectionUtil;
-import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.date.DateField;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
-import com.alibaba.fastjson.JSON;
-import com.alibaba.nacos.shaded.com.google.gson.Gson;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.xunmei.common.core.constant.SecurityConstants;
+import com.xunmei.common.core.domain.worktime.domain.SysWorkTime;
 import com.xunmei.common.core.domain.worktime.dto.WorkTimeDto;
-import com.xunmei.common.core.event.WorkTimeChangeEvent;
-import com.xunmei.common.core.utils.DateHelper;
 import com.xunmei.common.core.utils.DateUtils;
 import com.xunmei.common.core.utils.Ymd;
-import com.xunmei.common.core.web.domain.AjaxResult;
 import com.xunmei.common.core.web.page.TableDataInfo;
 import com.xunmei.common.security.utils.SecurityUtils;
-import com.xunmei.common.core.domain.worktime.domain.SysWorkTime;
 import com.xunmei.system.domain.SysWorkTimeSet;
 import com.xunmei.system.dto.SysWorkTimeDto;
-import com.xunmei.system.dto.WorkTimeMonthEditNewDto;
 import com.xunmei.system.mapper.SysWorkTimeMapper;
 import com.xunmei.system.mapper.SysWorkTimeSetMapper;
 import com.xunmei.system.service.ISysOrgService;
 import com.xunmei.system.service.ISysWorkTimeService;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.ApplicationContext;
-import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
@@ -94,41 +86,39 @@ public class SysWorkTimeServiceImpl extends ServiceImpl<SysWorkTimeMapper, SysWo
         //查询条件
         QueryWrapper<SysWorkTime> query = new QueryWrapper<>();
 
-            if (sysWorkTime.getIsEnable() != null) {
-                query.eq("t.is_enable", sysWorkTime.getIsEnable());
-            }
-            if (sysWorkTime.getOrgId() != null && !sysWorkTime.getCheckSub()) {
-                query.eq("t.org_id", sysWorkTime.getOrgId());
-            }
-            if (sysWorkTime.getModifiedName() != null) {
-                query.eq("t.modified_name", sysWorkTime.getModifiedName());
-            }
-            if (sysWorkTime.getOrgType() != null) {
-                query.eq("o.type", sysWorkTime.getOrgType());
-            }
-            //下穿
-            if (sysWorkTime.getCheckSub()) {
-                query.like("o.path", sysWorkTime.getOrgId());
-            } else {
-                query.likeLeft("o.path", sysWorkTime.getOrgId() + "-");
-            }
+        if (sysWorkTime.getIsEnable() != null) {
+            query.eq("t.is_enable", sysWorkTime.getIsEnable());
+        }
+        if (sysWorkTime.getOrgId() != null && !sysWorkTime.getCheckSub()) {
+            query.eq("t.org_id", sysWorkTime.getOrgId());
+        }
+        if (sysWorkTime.getModifiedName() != null) {
+            query.eq("t.modified_name", sysWorkTime.getModifiedName());
+        }
+        if (sysWorkTime.getOrgType() != null) {
+            query.eq("o.type", sysWorkTime.getOrgType());
+        }
+        //下穿
+        if (sysWorkTime.getCheckSub()) {
+            query.like("o.path", sysWorkTime.getOrgId());
+        } else {
+            query.likeLeft("o.path", sysWorkTime.getOrgId() + "-");
+        }
 //            sysWorkTime.setOrgId(null);
 
-            //时间范围查询
-            if (sysWorkTime.getRange() != null && sysWorkTime.getRange().length > 1) {
-                query.between("t.ymd_date", extractDate(sysWorkTime.getRange()[0].toString(), "EEE MMM dd HH:mm:ss zzz yyyy"), extractDate(sysWorkTime.getRange()[1].toString(), "EEE MMM dd HH:mm:ss zzz yyyy"));
-            }
-            query.orderByDesc("ymd_date");
+        //时间范围查询
+        if (sysWorkTime.getRange() != null && sysWorkTime.getRange().length > 1) {
+            query.between("t.ymd_date", extractDate(sysWorkTime.getRange()[0].toString(), "EEE MMM dd HH:mm:ss zzz yyyy"), extractDate(sysWorkTime.getRange()[1].toString(), "EEE MMM dd HH:mm:ss zzz yyyy"));
+        }
+        query.orderByDesc("ymd_date");
 
         //获取数据
-        IPage<SysWorkTimeDto> page1= null;
-            if(sysWorkTime.getNoWorkTime())
-            {
-                page1 = sysWorkTimeMapper.selectNoWorkTimeByPage(page, query,sysWorkTime);
-            }
-            else{
-                page1 = sysWorkTimeMapper.selectByPage(page, query);
-            }
+        IPage<SysWorkTimeDto> page1 = null;
+        if (sysWorkTime.getNoWorkTime()) {
+            page1 = sysWorkTimeMapper.selectNoWorkTimeByPage(page, query, sysWorkTime);
+        } else {
+            page1 = sysWorkTimeMapper.selectByPage(page, query);
+        }
 
         //抓换为TableDataInfo适配前端
         return TableDataInfo.build(page1);
@@ -341,7 +331,7 @@ public class SysWorkTimeServiceImpl extends ServiceImpl<SysWorkTimeMapper, SysWo
         Date updateTime = new Date();
 
         for (SysWorkTime s : workTimeDtoList) {
-            if (s.getIsEnable() == null || s.getYmdDate().compareTo(now)<=0) {
+            if (s.getIsEnable() == null || s.getYmdDate().compareTo(now) <= 0) {
 
             } else {
                 List<SysWorkTime> list = baseMapper.selectList(new LambdaQueryWrapper<SysWorkTime>().eq(SysWorkTime::getOrgId, orgId).eq(SysWorkTime::getYmdDate, s.getYmdDate()));
@@ -362,6 +352,35 @@ public class SysWorkTimeServiceImpl extends ServiceImpl<SysWorkTimeMapper, SysWo
     }
 
     @Override
+    public List<SysWorkTime> batchNew(List<Long> orgIdList, List<SysWorkTime> workTimeDtoList) {
+        if (orgIdList.isEmpty() || workTimeDtoList.isEmpty()) {
+            return workTimeDtoList;
+        }
+        Date now = DateUtil.beginOfDay(new Date());
+        Date updateTime = new Date();
+        final List<SysWorkTime> collect = workTimeDtoList.stream().filter(w -> ObjectUtil.isNotNull(w.getIsEnable()) && w.getYmdDate().compareTo(now) > 0).collect(Collectors.toList());
+        final List<Date> dateList = workTimeDtoList.stream().map(SysWorkTime::getYmdDate).distinct().collect(Collectors.toList());
+        final int delete = baseMapper.delete(new LambdaQueryWrapper<SysWorkTime>().in(SysWorkTime::getOrgId, orgIdList).in(SysWorkTime::getYmdDate, dateList));
+        List<SysWorkTime> list = new ArrayList<>();
+        SysWorkTime workTime=null;
+        for (Long orgId : orgIdList) {
+            for (SysWorkTime s : collect) {
+                workTime=new SysWorkTime();
+                BeanUtils.copyProperties(s,workTime);
+                workTime.setId(String.valueOf(IdWorker.getId()));
+                workTime.setOrgId(orgId);
+                workTime.setIsManual(1L);
+                workTime.setUpdateTime(updateTime);
+                workTime.setModifiedId(SecurityUtils.getUserId());
+                workTime.setModifiedName(SecurityUtils.getUsername());
+                list.add(workTime);
+            }
+        }
+        final int i = baseMapper.batchInsertByXML(list);
+        return workTimeDtoList;
+    }
+
+    @Override
     public boolean existByYmd(Long orgId, Ymd ymd, boolean isEnable) {
         QueryWrapper<SysWorkTime> queryWrapper = new QueryWrapper<>();
         if (ymd.getDay() != null) {
@@ -470,7 +489,7 @@ public class SysWorkTimeServiceImpl extends ServiceImpl<SysWorkTimeMapper, SysWo
                 .ge(SysWorkTime::getYmdDate, workTimeDto.getStartTime())
                 .le(SysWorkTime::getYmdDate, workTimeDto.getEndTime())
                 .in(SysWorkTime::getOrgId, workTimeDto.getOrgIdList())
-                .eq(SysWorkTime::getIsEnable,1L)
+                .eq(SysWorkTime::getIsEnable, 1L)
                 .select(SysWorkTime::getId,
                         SysWorkTime::getIsEnable,
                         SysWorkTime::getYmdDate,

+ 8 - 2
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/util/ExportDatabaseUtil.java

@@ -36,6 +36,8 @@ public class ExportDatabaseUtil {
 
             //写入table
             writeTable(tables,stmt,rs,bw);
+            bw.flush();
+            bw.close();
             // 关闭资源
             fw.close();
 
@@ -89,6 +91,8 @@ public class ExportDatabaseUtil {
 
             //写入table
             writeTable(tables,stmt,rs,bw,tableName);
+            bw.flush();
+            bw.close();
             // 关闭资源
             fw.close();
 
@@ -133,14 +137,16 @@ public class ExportDatabaseUtil {
             stmt = conn.createStatement();
 
             // 获取数据库表名
-            List<String> tables = getTables(stmt,rs);
+//            List<String> tables = getTables(stmt,rs);
 
 
             FileWriter fw = new FileWriter(file, false);
             BufferedWriter bw = new BufferedWriter(fw);
 
             //写入table
-            writeTable(tables,stmt,rs,bw,tableNames);
+            writeTable(tableNames,stmt,rs,bw,tableNames);
+            bw.flush();
+            bw.close();
             // 关闭资源
             fw.close();