Prechádzať zdrojové kódy

Merge branch 'V0.0.1' of http://10.87.10.227:4000/jzyd_yyds/soc into V0.0.1

zhulu 2 rokov pred
rodič
commit
c01487b6fd
24 zmenil súbory, kde vykonal 394 pridanie a 32 odobranie
  1. 29 0
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/RemoteEduTrainingService.java
  2. 23 0
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/factory/RemoteEduTrainingFallbackFactory.java
  3. 1 0
      soc-api/soc-api-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
  4. 2 1
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/edu/dto/CoreEduTrainingTaskEditDto.java
  5. 16 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/util/BeanHelper.java
  6. 41 3
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/utils/DateUtils.java
  7. 8 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/controller/CoreEduTrainingTaskController.java
  8. 2 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/ICoreEduTrainingTaskService.java
  9. 41 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/CoreEduTrainingTaskServiceImpl.java
  10. 30 11
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/controller/ApiPlanController.java
  11. 1 1
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/domain/AppPlan.java
  12. 18 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/dto/DistributeDto.java
  13. 9 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/dto/DistributeStatusDto.java
  14. 1 1
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/dto/TaskDetailsDto.java
  15. 3 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/service/AppPlanService.java
  16. 19 8
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/service/ResumptionBusiness.java
  17. 41 1
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/service/impl/AppPlanServiceImpl.java
  18. 13 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/vo/ProtectionVo.java
  19. 3 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/vo/ResumptionPointVo.java
  20. 33 0
      soc-modules/soc-modules-job/src/main/java/com/xunmei/job/task/CoreEduTrainingTask.java
  21. 12 5
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/controller/SysUserController.java
  22. 29 0
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/domain/vo/SysUserListVo.java
  23. 3 0
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/ISysUserService.java
  24. 16 1
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysUserServiceImpl.java

+ 29 - 0
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/RemoteEduTrainingService.java

@@ -0,0 +1,29 @@
+package com.xunmei.system.api;
+
+import com.xunmei.common.core.constant.ServiceNameConstants;
+import com.xunmei.common.core.web.domain.AjaxResult;
+import com.xunmei.system.api.factory.RemoteEduTrainingFallbackFactory;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.Date;
+
+/**
+ * 教育培训
+ *
+ * @author xunmei
+ */
+@FeignClient(contextId = "remoteEduTrainingService", value = ServiceNameConstants.CORE_SERVICE, fallbackFactory = RemoteEduTrainingFallbackFactory.class)
+public interface RemoteEduTrainingService {
+
+    /**
+     * 生成教育培训任务
+     *
+     * @param cycle
+     * @param date
+     * @return
+     */
+    @GetMapping(value = "/eduTask/buildEduTask")
+    AjaxResult buildEduTask(@RequestParam(required = false, value = "cycle") Integer cycle, @RequestParam(required = false, value = "date") Date date);
+}

+ 23 - 0
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/factory/RemoteEduTrainingFallbackFactory.java

@@ -0,0 +1,23 @@
+package com.xunmei.system.api.factory;
+
+import com.xunmei.system.api.RemoteEduTrainingService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.cloud.openfeign.FallbackFactory;
+import org.springframework.stereotype.Component;
+
+/**
+ * 字典服务降级处理
+ *
+ * @author xunmei
+ */
+@Component
+public class RemoteEduTrainingFallbackFactory implements FallbackFactory<RemoteEduTrainingService> {
+    private static final Logger log = LoggerFactory.getLogger(RemoteEduTrainingFallbackFactory.class);
+
+
+    @Override
+    public RemoteEduTrainingService create(Throwable cause) {
+        return null;
+    }
+}

+ 1 - 0
soc-api/soc-api-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

@@ -8,3 +8,4 @@ com.xunmei.system.api.factory.RemoteSyncOrgAndUserFactory
 com.xunmei.system.api.factory.RemoteTaskFallbackFactory
 com.xunmei.system.api.factory.RemoteDictDataFallbackFactory
 com.xunmei.system.api.factory.RemoteRetrievalTaskFallbackFactory
+com.xunmei.system.api.factory.RemoteEduTrainingFallbackFactory

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

@@ -5,7 +5,6 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.xunmei.common.core.domain.edu.domain.CoreEduTrainingTaskToUser;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
-import org.springframework.format.annotation.DateTimeFormat;
 
 import javax.validation.constraints.NotNull;
 import java.util.Date;
@@ -50,9 +49,11 @@ public class CoreEduTrainingTaskEditDto {
     @ApiModelProperty(value = "截止日期")
     private Date endDate;
 
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     @ApiModelProperty(value = "培训开始时间")
     private Date trainingStartDateTime;
 
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     @ApiModelProperty(value = "培训截止时间")
     private Date trainingEndDateTime;
 

+ 16 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/util/BeanHelper.java

@@ -133,4 +133,20 @@ public class BeanHelper {
         Field[] fields = new Field[fieldList.size()];
         return fieldList.toArray(fields);
     }
+
+    public static <T, U> List<T> copyProperties(List<U> sourceList, Class<T> targetClass) {
+        List<T> targetList = new ArrayList<>();
+
+        for (U sourceObject : sourceList) {
+            try {
+                T targetObject = targetClass.getDeclaredConstructor().newInstance();
+                BeanUtils.copyProperties(sourceObject, targetObject);
+                targetList.add(targetObject);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+
+        return targetList;
+    }
 }

+ 41 - 3
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/utils/DateUtils.java

@@ -11,9 +11,7 @@ import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.time.*;
 import java.time.temporal.TemporalAdjusters;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
+import java.util.*;
 
 /**
  * 时间工具类
@@ -260,6 +258,46 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
         return dateRanges;
     }
 
+    /**
+     * 判断当前时间属于哪个周期的第一天,返回对应的周期,默认返回 1,每日
+     *
+     * @param date
+     * @return
+     */
+    public static List<Integer> checkDate(Date date) {
+        Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("Asia/Shanghai"));
+        calendar.setTime(date);
+
+        int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
+        int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
+        int month = calendar.get(Calendar.MONTH);
+        int dayOfYear = calendar.get(Calendar.DAY_OF_YEAR);
+        ArrayList<Integer> list = new ArrayList<>();
+        //每年
+        if (dayOfYear == 1) {
+            list.add(6);
+        }
+        // 每半年
+        if ((month == Calendar.JANUARY && dayOfMonth == 1) || (month == Calendar.JULY && dayOfMonth == 1)) {
+            list.add(5);
+        }
+        // 每季度
+        if ((month == Calendar.JANUARY || month == Calendar.APRIL || month == Calendar.JULY || month == Calendar.OCTOBER) && dayOfMonth == 1) {
+            list.add(4);
+        }
+        // 每月
+        if (dayOfMonth == 1) {
+            list.add(3);
+        }
+        // 每周
+        if (dayOfWeek == Calendar.MONDAY) {
+            list.add(2);
+        }
+        list.add(1);
+        return list;
+    }
+
+
     public static void main(String[] args) throws ParseException {
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         Date startDate = sdf.parse("2023-01-01 00:00:00");

+ 8 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/controller/CoreEduTrainingTaskController.java

@@ -20,6 +20,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.Date;
+
 /**
  * 教育任务Controller
  *
@@ -125,4 +127,10 @@ public class CoreEduTrainingTaskController extends BaseController {
     public AjaxResult pdf(@PathVariable("id") Long id) {
         return coreEduTrainingTaskService.buildEduPdf(id);
     }
+
+    @ApiOperation(value = "生成任务")
+    @GetMapping(value = "/buildEduTask")
+    AjaxResult buildEduTask(@RequestParam(required = false, value = "cycle") Integer cycle, @RequestParam(required = false, value = "date") Date date) {
+        return success(coreEduTrainingTaskService.buildEduTask(cycle, date));
+    }
 }

+ 2 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/ICoreEduTrainingTaskService.java

@@ -88,4 +88,6 @@ public interface ICoreEduTrainingTaskService extends IService<CoreEduTrainingTas
     Integer selectCoreEduTrainingTaskSign(CoreEduTrainingTaskSignDto request);
 
     AjaxResult buildEduPdf(Long id);
+
+    String buildEduTask(Integer cycle, Date date);
 }

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

@@ -31,6 +31,7 @@ import com.xunmei.common.core.utils.DateUtils;
 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.core.edu.mapper.CoreEduTrainingPlanMapper;
 import com.xunmei.core.edu.mapper.CoreEduTrainingTaskMapper;
 import com.xunmei.core.edu.mapper.CoreEduTrainingTaskToRoleMapper;
 import com.xunmei.core.edu.mapper.CoreEduTrainingTaskToUserMapper;
@@ -81,6 +82,8 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
     private CoreEduTrainingTaskToUserMapper taskToUserMapper;
     @Autowired
     private ICoreEduTrainingTaskToUserService coreEduTrainingTaskToUserService;
+    @Autowired
+    private CoreEduTrainingPlanMapper coreEduTrainingPlanMapper;
 
     @Override
     public TableDataInfo<CoreEduTrainingTaskPageVo> selectPage(CoreEduTrainingTaskPageDto request) {
@@ -158,6 +161,8 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
      */
     @Override
     public int updateCoreEduTrainingTask(CoreEduTrainingTaskEditDto request) {
+        String format = DateUtil.format(request.getTrainingStartDateTime(), "yyyy-MM-dd HH:mm:ss");
+        System.out.println("------------------" + format + "------------------");
         CoreEduTrainingTask coreEduTrainingTask = coreEduTrainingTaskMapper.selectById(request.getId());
         BeanUtils.copyProperties(request, coreEduTrainingTask);
         coreEduTrainingTask.setRecorderId(SecurityUtils.getUserId());
@@ -404,6 +409,42 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
         }
         return resource + File.separator + fileName;
     }
+
+    @Override
+    public String buildEduTask(Integer cycle, Date date) {
+        if (ObjectUtil.isNull(date)) {
+            date = new Date();
+        }
+        List<Integer> cycleList = DateUtils.checkDate(date);
+        List<CoreEduTrainingPlan> planList;
+        if (null == cycle) {
+            planList = coreEduTrainingPlanMapper.selectList(new LambdaQueryWrapper<CoreEduTrainingPlan>()
+                    .eq(CoreEduTrainingPlan::getStandard, 0)
+                    .in(CoreEduTrainingPlan::getPlanCycle, cycleList)
+                    .eq(CoreEduTrainingPlan::getDeleted, 0)
+                    .select(CoreEduTrainingPlan::getId, CoreEduTrainingPlan::getPlanCycle));
+        } else {
+            planList = coreEduTrainingPlanMapper.selectList(new LambdaQueryWrapper<CoreEduTrainingPlan>()
+                    .eq(CoreEduTrainingPlan::getStandard, 0)
+                    .eq(CoreEduTrainingPlan::getPlanCycle, cycle)
+                    .eq(CoreEduTrainingPlan::getDeleted, 0)
+                    .select(CoreEduTrainingPlan::getId, CoreEduTrainingPlan::getPlanCycle));
+        }
+        if (ObjectUtil.isEmpty(planList)) {
+            return "没有需要生成的任务";
+        }
+        Date finalDate = date;
+
+        //此list中Plan对象仅id与planCycle字段有值,
+        for (CoreEduTrainingPlan plan : planList) {
+            CompletableFuture.runAsync(() -> {
+                CoreEduTrainingPlanDataVo detailPlanData = coreEduTrainingPlanMapper.getDetailPlanData(plan.getId());
+                DateRange range = DateUtils.getStartAndEnd(finalDate, plan.getPlanCycle());
+                this.createTaskForNow(detailPlanData, range.getStartTime(), range.getEndTime());
+            });
+        }
+        return "创建成功";
+    }
 }
 
 

+ 30 - 11
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/controller/ApiPlanController.java

@@ -5,6 +5,7 @@ import com.xunmei.common.core.constant.SecurityConstants;
 import com.xunmei.common.core.domain.R;
 import com.xunmei.common.core.web.domain.AjaxResult;
 import com.xunmei.core.resumption.domain.AppPlan;
+import com.xunmei.core.resumption.dto.DistributeDto;
 import com.xunmei.core.resumption.service.AppPlanService;
 import com.xunmei.core.resumption.vo.appPlan.AppPlanVo;
 import com.xunmei.core.resumption.vo.appPlan.RuleItemVo;
@@ -39,20 +40,33 @@ public class ApiPlanController {
 
     /**
      * 计划分页查询
+     *
      * @param info
      * @return
      */
     @PostMapping("/find")
-    public AjaxResult hostList(@RequestBody AppPlanVo info){
+    public AjaxResult hostList(@RequestBody AppPlanVo info) {
 
         Page<AppPlan> result = appPlanService.selectPage(info);
         return AjaxResult.success(result);
     }
+
+    @PostMapping("/distribute")
+    public AjaxResult distribute(@RequestBody DistributeDto dto) {
+        try {
+            appPlanService.distributeToOrg(dto);
+            return AjaxResult.success();
+        } catch (Exception e) {
+            e.printStackTrace();
+            return AjaxResult.error("数据处理错误:" + e.getMessage());
+        }
+    }
+
     @RequestMapping("/test")
-    public AjaxResult test(Integer type){
+    public AjaxResult test(Integer type) {
         R<List<Long>> res = remoteOrgService.findListByOrgType(type, SecurityConstants.INNER);
-        List<Long> list=null;
-        if (res.getCode()==200) {
+        List<Long> list = null;
+        if (res.getCode() == 200) {
             list = res.getData();
         }
         return AjaxResult.success(list);
@@ -60,50 +74,54 @@ public class ApiPlanController {
 
     /**
      * 检查要点分页查询
+     *
      * @return Message
      * @author 高雄
      * @time 2022/5/5 14:39
      */
     @RequestMapping("/item/find")
-    public AjaxResult itemList(@RequestBody RuleItemVo info){
+    public AjaxResult itemList(@RequestBody RuleItemVo info) {
         Page<RuleItemVo> result = appPlanService.selectItemPage(info);
         return AjaxResult.success(result);
     }
 
     /**
      * 获取机构或者机构类型对应的检查规范
+     *
      * @param info
      * @return Message
      * @author 高雄
      * @time 2022/5/5 15:05
      */
     @RequestMapping("/find/rule")
-    public AjaxResult findRule(@RequestBody RuleRequestVo info){
+    public AjaxResult findRule(@RequestBody RuleRequestVo info) {
         List<Map<String, Object>> list = appPlanService.findByOrg(info);
         return AjaxResult.success(list);
     }
 
     /**
      * 新增 修改履职计划
+     *
      * @param info
      * @return Message
      * @author 高雄
      * @time 2022/5/5 16:37
      */
     @RequestMapping("/edit")
-    public AjaxResult edit(@RequestBody AppPlanVo info){
+    public AjaxResult edit(@RequestBody AppPlanVo info) {
         try {
             appPlanService.saveOrUpdatePlan(info);
             return AjaxResult.success();
         } catch (Exception e) {
             e.printStackTrace();
-            return AjaxResult.error("数据处理错误:"+ e.getMessage());
+            return AjaxResult.error("数据处理错误:" + e.getMessage());
         }
     }
 
 
     /**
      * 获取详情数据
+     *
      * @param id
      * @return Message
      * @author 高雄
@@ -111,19 +129,20 @@ public class ApiPlanController {
      */
     @ApiOperation(value = "获取详情")
     @GetMapping(value = "/find/{id}")
-    public AjaxResult findById(@PathVariable  Long id){
+    public AjaxResult findById(@PathVariable Long id) {
         AppPlanVo app = appPlanService.findById(id);
         return AjaxResult.success(app);
     }
 
     @ApiOperation(value = "获取详情")
     @GetMapping(value = "/getPointIds/{id}")
-    public AjaxResult getPointIds(@PathVariable  Long id){
+    public AjaxResult getPointIds(@PathVariable Long id) {
         return AjaxResult.success(appPlanService.selectItemIdsByPlanId(id));
     }
 
     /**
      * 获取详情数据
+     *
      * @param id
      * @return Message
      * @author 高雄
@@ -131,7 +150,7 @@ public class ApiPlanController {
      */
     @ApiOperation(value = "删除计划")
     @GetMapping(value = "/delete/{id}")
-    public AjaxResult deleted(@PathVariable  Long id){
+    public AjaxResult deleted(@PathVariable Long id) {
         try {
             appPlanService.deleted(id);
             return AjaxResult.success("数据处理成功");

+ 1 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/domain/AppPlan.java

@@ -87,7 +87,7 @@ public class AppPlan extends Model<AppPlan> implements Serializable {
     private String planOfOrgId;
     private String count;
     private String distributeStatus;
-    private String parentId;
+    private Long parentId;
 
 
     /**

+ 18 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/dto/DistributeDto.java

@@ -0,0 +1,18 @@
+package com.xunmei.core.resumption.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class DistributeDto {
+    /**
+     * 准备下发的计划id
+     */
+    private Long id;
+    /**
+     * 下发的计划机构与状态的关联关系默认状态 0:禁用 1:启用
+     */
+    private List<DistributeStatusDto> orgAndStatus;
+
+}

+ 9 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/dto/DistributeStatusDto.java

@@ -0,0 +1,9 @@
+package com.xunmei.core.resumption.dto;
+
+import lombok.Data;
+
+@Data
+public class DistributeStatusDto {
+    private Long orgId;
+    private Integer status;
+}

+ 1 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/dto/TaskDetailsDto.java

@@ -17,7 +17,7 @@ import java.util.Date;
 @ApiModel(description = "履职任务列表")
 public class TaskDetailsDto {
     @ApiModelProperty(value = "任务id")
-    @NotBlank(message = "请填写任务id")
+    @NotNull (message = "请填写任务id")
     private Long taskId;
     private int type;
     @ApiModelProperty(value = "日期")

+ 3 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/service/AppPlanService.java

@@ -3,6 +3,7 @@ package com.xunmei.core.resumption.service;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.xunmei.core.resumption.domain.AppPlan;
+import com.xunmei.core.resumption.dto.DistributeDto;
 import com.xunmei.core.resumption.vo.appPlan.AppPlanVo;
 import com.xunmei.core.resumption.vo.appPlan.RuleItemVo;
 import com.xunmei.core.resumption.vo.appPlan.RuleRequestVo;
@@ -77,4 +78,6 @@ public interface AppPlanService extends IService<AppPlan> {
      * @return
      */
     List<Long> findRoleByPlan(Long id);
+
+    void distributeToOrg(DistributeDto dto);
 }

+ 19 - 8
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/service/ResumptionBusiness.java

@@ -45,6 +45,8 @@ public class ResumptionBusiness {
     private IAppRulePointService appRulePointService;
     @Autowired
     private AppResumptionDataService appResumptionDataService;
+    @Autowired
+    private IProtectionService protectionService;
 
     public Map<String, Object> tasktotal(ResumptionTaskDto request) throws ParseException {
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
@@ -177,13 +179,15 @@ public class ResumptionBusiness {
         }
         return tasktotal;
     }
-public Date LocalDateTimeToDate(LocalDateTime localDateTime){
+
+    public Date LocalDateTimeToDate(LocalDateTime localDateTime) {
 //    LocalDateTime localDateTime = LocalDateTime.now();
-    ZoneId zoneId = ZoneId.systemDefault();
-    ZonedDateTime zdt = localDateTime.atZone(zoneId);
-    Date date = Date.from(zdt.toInstant());
-    return date;
-}
+        ZoneId zoneId = ZoneId.systemDefault();
+        ZonedDateTime zdt = localDateTime.atZone(zoneId);
+        Date date = Date.from(zdt.toInstant());
+        return date;
+    }
+
     public List<ResumptionTaskListVo> taskListVo(List<Map<String, Object>> list, int type) throws ParseException {
         List<ResumptionTaskListVo> listVos = new ArrayList<>();
         List<Map<String, Object>> taskarealist = new ArrayList<>();
@@ -212,11 +216,11 @@ public Date LocalDateTimeToDate(LocalDateTime localDateTime){
                 ResumptionTaskListVo vo = new ResumptionTaskListVo();
                 vo.setId(map.get("id").toString());
                 vo.setPlanstarttime(map.get("planstarttime") == null ? "" : sdft.format(LocalDateTimeToDate((LocalDateTime) map.get("planstarttime"))));
-                vo.setPlanendtime(map.get("planendtime") == null ? "" : sdft.format(LocalDateTimeToDate((LocalDateTime)  map.get("planendtime"))));
+                vo.setPlanendtime(map.get("planendtime") == null ? "" : sdft.format(LocalDateTimeToDate((LocalDateTime) map.get("planendtime"))));
                 vo.setTitle(map.get("title").toString());
                 vo.setStatus((int) map.get("status"));
                 vo.setSubmitBy(map.get("submitBy") == null ? "" : map.get("submitBy").toString());
-                vo.setSubmitTime(map.get("submitTime") == null ? "" : sdftb.format(LocalDateTimeToDate((LocalDateTime)   map.get("submitTime"))));
+                vo.setSubmitTime(map.get("submitTime") == null ? "" : sdftb.format(LocalDateTimeToDate((LocalDateTime) map.get("submitTime"))));
                 listVos.add(vo);
             }
 
@@ -549,6 +553,13 @@ public Date LocalDateTimeToDate(LocalDateTime localDateTime){
                 List<ResumptionPointVo> checkitemlist = pointsListMapItem.get(keya);
                 if (checkitemlist == null || checkitemlist.size() == 0) {
                     continue;
+                } else {
+                    for (ResumptionPointVo r :
+                            checkitemlist) {
+                        if (r.getBusinessType() == 1) {
+                            r.setProtectionVo(protectionService.findNotAllHour(resumption.getOrgId()));
+                        }
+                    }
                 }
                 Map<String, Object> item = new HashMap<>();
                 item.put("itemid", keya);

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

@@ -1,12 +1,15 @@
 package com.xunmei.core.resumption.service.impl;
 
 import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 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.security.utils.SecurityUtils;
 import com.xunmei.core.resumption.domain.*;
+import com.xunmei.core.resumption.dto.DistributeDto;
+import com.xunmei.core.resumption.dto.DistributeStatusDto;
 import com.xunmei.core.resumption.mapper.*;
 import com.xunmei.core.resumption.service.AppPlanService;
 import com.xunmei.core.resumption.vo.appPlan.AppPlanVo;
@@ -20,6 +23,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @author : 高雄
@@ -65,7 +69,7 @@ public class AppPlanServiceImpl extends ServiceImpl<AppPlanMapper, AppPlan> impl
     @Override
     public Page<AppPlan> selectPage(AppPlanVo info) {
         Page<AppPlan> page = new Page<>();
-        long current = info.getPageNum() + 1;
+        long current = info.getPageNum();
         long size = info.getPageSize();
         page.setCurrent(current);
         page.setSize(size);
@@ -83,6 +87,42 @@ public class AppPlanServiceImpl extends ServiceImpl<AppPlanMapper, AppPlan> impl
         return baseMapper.findRoleByPlan(plan_id);
     }
 
+    @Override
+    public void distributeToOrg(DistributeDto dto) {
+        for (DistributeStatusDto d :
+                dto.getOrgAndStatus()) {
+
+            AppPlan plan = baseMapper.selectById(dto.getId());
+            plan.setOrgId(d.getOrgId().toString());
+            plan.setPlanStatus(d.getStatus());
+            plan.setId(null);
+            plan.setPlanName("下发-" + plan.getPlanName());
+            plan.setParentId(dto.getId());
+            baseMapper.insert(plan);
+            Long id = plan.getId();
+
+            List<Long> roleList = appPlanToRoleMapper.selectList(new LambdaQueryWrapper<AppPlanToRole>().eq(AppPlanToRole::getPlanId, dto.getId())).stream().map(AppPlanToRole::getRoleId).collect(Collectors.toList());
+            AppPlanToRole atr = null;
+            for (Long roleId : roleList) {
+                atr = new AppPlanToRole();
+                atr.setRoleId(roleId);
+                atr.setPlanId(id);
+                appPlanToRoleMapper.insert(atr);
+            }
+
+            List<AppPlanToPoint> itemList = appPlanToItemMapper.selectList(new LambdaQueryWrapper<AppPlanToPoint>().eq(AppPlanToPoint::getPlanId, dto.getId()));
+            AppPlanToPoint item = null;
+            for (AppPlanToPoint ruleItemVo : itemList) {
+                item = new AppPlanToPoint();
+                item.setPointId(ruleItemVo.getPointId());
+                item.setPlanId(id);
+                item.setPointScan(ruleItemVo.isPointScan());
+                item.setRequired(ruleItemVo.isRequired());
+                appPlanToItemMapper.insert(item);
+            }
+        }
+    }
+
     /**
      * 获取检查要点分页
      *

+ 13 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/vo/ProtectionVo.java

@@ -0,0 +1,13 @@
+package com.xunmei.core.resumption.vo;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class ProtectionVo {
+    private Long id;
+    private String name;
+    private String status;
+    private Date time;
+}

+ 3 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/vo/ResumptionPointVo.java

@@ -2,6 +2,7 @@ package com.xunmei.core.resumption.vo;
 
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.xunmei.core.resumption.domain.Protection;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
@@ -29,6 +30,8 @@ public class ResumptionPointVo {
     private int pointnum;
     private int pointScan;
 
+    private List<Protection> protectionVo;
+
     private  int required;
     private Long planId;
     @JsonSerialize(using = ToStringSerializer.class)

+ 33 - 0
soc-modules/soc-modules-job/src/main/java/com/xunmei/job/task/CoreEduTrainingTask.java

@@ -0,0 +1,33 @@
+package com.xunmei.job.task;
+
+import cn.hutool.core.lang.UUID;
+import com.alibaba.fastjson2.JSON;
+import com.xunmei.common.core.web.domain.AjaxResult;
+import com.xunmei.system.api.RemoteEduTrainingService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+
+@Slf4j
+@Component("CoreEduTrainingTask")
+public class CoreEduTrainingTask {
+
+    @Autowired
+    RemoteEduTrainingService remoteEduTrainingService;
+
+    public void buildEduTask() {
+        String id = UUID.fastUUID().toString();
+        log.info("开始执行教育培训定时任务,当前任务 id:{},当前时间:{}", id, new Date());
+        AjaxResult result = remoteEduTrainingService.buildEduTask(null, null);
+        log.info("执行教育培训定时任务结束....,当前任务 id:{},当前时间:{},结果:{}", id, new Date(), JSON.toJSONString(result));
+    }
+
+    public void buildEduTask(Integer cycle, Date date) {
+        String id = UUID.fastUUID().toString();
+        log.info("开始执行教育培训定时任务,当前任务 id:{},周期:{},时间:{}", id, cycle, date);
+        AjaxResult result = remoteEduTrainingService.buildEduTask(cycle, date);
+        log.info("执行教育培训定时任务结束,当前任务 id:{},周期:{},时间:{},结果:{}", id, cycle, date, JSON.toJSONString(result));
+    }
+}

+ 12 - 5
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/controller/SysUserController.java

@@ -13,9 +13,12 @@ import com.xunmei.common.security.annotation.InnerAuth;
 import com.xunmei.common.security.annotation.RequiresPermissions;
 import com.xunmei.common.security.utils.SaltHelper;
 import com.xunmei.common.security.utils.SecurityUtils;
-import com.xunmei.system.api.domain.*;
+import com.xunmei.system.api.domain.SysRole;
+import com.xunmei.system.api.domain.SysUser;
+import com.xunmei.system.api.domain.SysUserInformation;
 import com.xunmei.system.api.model.LoginUser;
 import com.xunmei.system.domain.SysUserRole;
+import com.xunmei.system.domain.vo.SysUserListVo;
 import com.xunmei.system.service.*;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.ArrayUtils;
@@ -23,10 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
 
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
 import java.util.Date;
 import java.util.List;
 import java.util.Set;
@@ -355,13 +355,14 @@ public class SysUserController extends BaseController {
         userService.batchSaveOrUpdate(sysUserList);
         return R.ok(true);
     }
+
     /**
      * 查询机构列表
      */
     @ApiOperation(value = "记录用户最后一次登录")
     @InnerAuth
     @PostMapping("/userLoginInfo")
-    public R<Boolean> userLoginInfo(Long id,Date loginTime, String loginIp) {
+    public R<Boolean> userLoginInfo(Long id, Date loginTime, String loginIp) {
         SysUser sysUser = userService.selectUserById(id);
         sysUser.setLastIp(loginIp);
         if (null==loginTime){
@@ -373,4 +374,10 @@ public class SysUserController extends BaseController {
     }
 
 
+    @ApiOperation(value = "根据机构id查询用户")
+    @GetMapping("/getByOrgId/{orgId}")
+    public R<List<SysUserListVo>> getByOrgId(@PathVariable Long orgId) {
+        List<SysUserListVo> sysUsers = userService.selectUserByOrgId(orgId);
+        return R.ok(sysUsers);
+    }
 }

+ 29 - 0
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/domain/vo/SysUserListVo.java

@@ -0,0 +1,29 @@
+package com.xunmei.system.domain.vo;
+
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "SysUserListVo", description = "用户列表")
+public class SysUserListVo {
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "id")
+    private Long id;
+
+    @ApiModelProperty(value = "用户名")
+    private String username;
+
+    @ApiModelProperty(value = "姓名")
+    private String name;
+
+    @ApiModelProperty(value = "机构")
+    private Long orgId;
+
+    @ApiModelProperty(value = "机构名称")
+    private String orgName;
+}

+ 3 - 0
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/ISysUserService.java

@@ -3,6 +3,7 @@ package com.xunmei.system.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.xunmei.common.core.web.page.TableDataInfo;
 import com.xunmei.system.api.domain.SysUser;
+import com.xunmei.system.domain.vo.SysUserListVo;
 import com.xunmei.system.domain.vo.SysUserVO;
 
 import java.util.List;
@@ -210,4 +211,6 @@ public interface ISysUserService extends IService<SysUser> {
     String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName);
 
     void batchSaveOrUpdate(List<SysUser> sysUserList);
+
+    List<SysUserListVo> selectUserByOrgId(Long orgId);
 }

+ 16 - 1
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysUserServiceImpl.java

@@ -1,10 +1,12 @@
 package com.xunmei.system.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xunmei.common.core.constant.UserConstants;
 import com.xunmei.common.core.exception.ServiceException;
+import com.xunmei.common.core.util.BeanHelper;
 import com.xunmei.common.core.utils.StringUtils;
 import com.xunmei.common.core.utils.bean.BeanValidators;
 import com.xunmei.common.core.web.page.TableDataInfo;
@@ -16,6 +18,7 @@ import com.xunmei.system.api.domain.SysUser;
 import com.xunmei.system.domain.SysPost;
 import com.xunmei.system.domain.SysUserPost;
 import com.xunmei.system.domain.SysUserRole;
+import com.xunmei.system.domain.vo.SysUserListVo;
 import com.xunmei.system.domain.vo.SysUserVO;
 import com.xunmei.system.mapper.*;
 import com.xunmei.system.service.ISysConfigService;
@@ -575,7 +578,19 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     @Override
     @Async
     public void batchSaveOrUpdate(List<SysUser> sysUserList) {
-     saveOrUpdateBatch(sysUserList);
+        saveOrUpdateBatch(sysUserList);
     }
 
+
+    @Override
+    public List<SysUserListVo> selectUserByOrgId(Long orgId) {
+        LambdaQueryWrapper<SysUser> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(SysUser::getOrgId, orgId);
+        wrapper.eq(SysUser::getDeleted, 0);
+        wrapper.eq(SysUser::getLocked, '0');
+        wrapper.eq(SysUser::getIsLock, 0);
+        wrapper.select(SysUser::getId, SysUser::getOrgId, SysUser::getOrgName, SysUser::getUsername, SysUser::getName);
+        List<SysUser> sysUsers = baseMapper.selectList(wrapper);
+        return BeanHelper.copyProperties(sysUsers, SysUserListVo.class);
+    }
 }