Procházet zdrojové kódy

教育培训任务代码,生成pdf代码提交

jingyuanchao před 2 roky
rodič
revize
11cf455b91
13 změnil soubory, kde provedl 252 přidání a 9 odebrání
  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. 16 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/util/BeanHelper.java
  5. 41 3
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/utils/DateUtils.java
  6. 8 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/controller/CoreEduTrainingTaskController.java
  7. 2 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/ICoreEduTrainingTaskService.java
  8. 39 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/CoreEduTrainingTaskServiceImpl.java
  9. 33 0
      soc-modules/soc-modules-job/src/main/java/com/xunmei/job/task/CoreEduTrainingTask.java
  10. 12 5
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/controller/SysUserController.java
  11. 29 0
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/domain/vo/SysUserListVo.java
  12. 3 0
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/ISysUserService.java
  13. 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

+ 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);
 }

+ 39 - 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) {
@@ -404,6 +407,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 "创建成功";
+    }
 }
 
 

+ 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

@@ -12,9 +12,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;
@@ -22,10 +25,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;
@@ -347,13 +347,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);
         sysUser.setLastTime(loginTime);
@@ -362,4 +363,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;
@@ -15,6 +17,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;
@@ -571,7 +574,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);
+    }
 }