Bläddra i källkod

optimize:工号重复问题,所有进我们系统的编号统一重新生成

xiari 11 månader sedan
förälder
incheckning
870449009b

+ 18 - 0
ruoyi-modules/ruoyi-backstage/src/test/java/org/dromara/backstage/mq/KafkaProducerTest.java

@@ -2,6 +2,8 @@ package org.dromara.backstage.mq;
 
 import cn.hutool.core.codec.Base64;
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import lombok.Data;
@@ -15,8 +17,11 @@ import org.dromara.common.excel.utils.ExcelUtil;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.core.StringRedisTemplate;
 
 import java.io.*;
+import java.time.Duration;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
@@ -30,6 +35,9 @@ public class KafkaProducerTest {
     @Autowired
     private PtUserAccountMapper userAccountMapper;
 
+    @Autowired
+    private StringRedisTemplate redisTemplate;
+
     // @Test
     // public void send()
     // {
@@ -87,6 +95,16 @@ public class KafkaProducerTest {
     }
 
 
+    @Test
+    public void testRedisIncr(){
+        String temp = DateUtil.format(new Date(), "yyyyMMdd");
+        String cacheKey = 25 + ":day_number:"+temp;
+        Long count = redisTemplate.opsForValue().increment(cacheKey, 1);
+        redisTemplate.expire(cacheKey, Duration.ofDays(1));
+        assert count != null;
+        String rs  =temp + StrUtil.padPre(count.toString(), 4, '0');
+        System.err.println(rs);
+    }
 
 
     @Data

+ 24 - 3
ruoyi-server/ruoyi-server-sync/src/main/java/org/dromara/server/sync/business/full/SyncGraduateService.java

@@ -21,6 +21,7 @@ import org.jetbrains.annotations.NotNull;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -76,15 +77,16 @@ public class SyncGraduateService {
     /**
      * 全量同步研究生数据
      *
+     * @param curYearIncrement 是否只同步当前年
      * @return Boolean
      */
-    public Boolean syncGraduate() {
+    public Boolean syncGraduate(boolean curYearIncrement) {
         HttpRequest req = CreateHttpRequest.createRequest();
         req.body(getQueryBodyForGraduate());
 
         try (HttpResponse res = req.execute()) {
             SyncFullDataBo dataBo = JSONUtil.toBean(res.body(), SyncFullDataBo.class);
-            List<ResourcePerson> resourcePersonList = getResourcePeople(dataBo);
+            List<ResourcePerson> resourcePersonList = getResourcePeople(dataBo, curYearIncrement);
             log.info("[全量获取到的研究生数据]-共[{}]条-[{}]", resourcePersonList.size(), JSONUtil.toJsonStr(dataBo));
 
             ISyncUserStrategy syncUserStrategy = SpringUtils.getBean(SyncResourceConstants.GRADUATE, ISyncUserStrategy.class);
@@ -99,10 +101,11 @@ public class SyncGraduateService {
      * 研究生数据预处理
      *
      * @param dataBo 研究生数据
+     *  @param curYearIncrement 是否只同步当前年
      * @return 处理结果
      */
     @NotNull
-    private List<ResourcePerson> getResourcePeople(SyncFullDataBo dataBo) {
+    private List<ResourcePerson> getResourcePeople(SyncFullDataBo dataBo, boolean curYearIncrement) {
         List<ResourcePerson> resourcePersonList = new ArrayList<>();
         for (List<String> list : dataBo.getResponseParam().getResourceInfos().get(0).getDataInfo()) {
             ResourcePerson person = new ResourcePerson();
@@ -114,6 +117,24 @@ public class SyncGraduateService {
                 person.setIdNumber(list.get(4));
             }
             person.setDeptId(list.get(5));
+            try {
+                //设置lifespan 默认10月1日
+                String s = list.get(7);
+                if (ObjectUtil.isNotEmpty(s)) {
+                    String s1 = s.split("-")[0];
+                    if(curYearIncrement){
+                        int year = Integer.parseInt(s1);
+                        int nowYear = Integer.parseInt(DateUtil.format(new Date(), "yyyy"));
+                        if(year-nowYear<3){
+                            continue;
+                        }
+                    }
+                    person.setLifespan(DateUtil.parse(s1+"-10-01", "yyyy-MM-dd"));
+                }
+            } catch (Exception e) {
+                log.warn("[同步研究生数据]-处理lifespan解析异常-[{}]", e.getMessage());
+            }
+
             person.setCategory(DefaultConstants.CATEGORY_GRADUATE);
             person.setPostCode(DefaultConstants.GRADUATE_CODE);
             person.setOperatorId(DefaultConstants.FULL_SYNC_ADMIN);

+ 10 - 20
ruoyi-server/ruoyi-server-sync/src/main/java/org/dromara/server/sync/business/user/SyncUserBusiness.java

@@ -34,6 +34,7 @@ import org.dromara.server.sync.service.IUserService;
 import org.dromara.system.api.RemoteDeptService;
 import org.dromara.system.api.RemotePostService;
 import org.dromara.system.api.RemoteUserService;
+import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.stereotype.Service;
 
 import java.time.Duration;
@@ -70,6 +71,8 @@ public class SyncUserBusiness {
     private final IUserService userService;
     private final IPostService postService;
 
+    public StringRedisTemplate redisTemplate;
+
     /**
      * 单个人员同步处理
      *
@@ -289,27 +292,14 @@ public class SyncUserBusiness {
      * @return 登录账号
      */
     private String getUserName(ResourcePerson person) {
-        String userName = person.getUserName();
-        // 如果同步的有登录账号,返回同步的登录账号
-        if (StrUtil.isNotEmpty(userName)) {
-            return userName;
-        }
-        String phone = person.getPhone();
-        // 如果同步没有登录账号,但同步有手机号,则将手机号作为登录账号
-        if (StrUtil.isNotEmpty(phone)) {
-            return phone;
-        }
-        // 如果都没有,则要自动生成一个
+        //要自动生成一个 category + 年月日 + 4位序号
         String temp = DateUtil.format(new Date(), "yyyyMMdd");
-        String cacheKey = person.getTenantId() + "_day_number:";
-        Integer count = RedisUtils.getCacheObject(cacheKey);
-        if (ObjectUtil.isEmpty(count)) {
-            count = 1;
-        } else {
-            count++;
-        }
-        RedisUtils.setCacheObject(cacheKey, count, Duration.ofDays(1));
-        return temp + StrUtil.padPre(count.toString(), 4, '0');
+        String cacheKey = person.getTenantId() + ":day_number:"+temp;
+        Long count = redisTemplate.opsForValue().increment(cacheKey, 1);
+        redisTemplate.expire(cacheKey, Duration.ofDays(1));
+        assert count != null;
+        String category = person.getCategory();
+        return category+temp + StrUtil.padPre(count.toString(), 4, '0');
     }
 
     /**

+ 10 - 1
ruoyi-server/ruoyi-server-sync/src/main/java/org/dromara/server/sync/controller/SyncHand.java

@@ -49,8 +49,17 @@ public class SyncHand {
      */
     @GetMapping("/sync/graduate")
     public R<Void> syncGraduate() {
-        return syncGraduateService.syncGraduate() ? R.ok() : R.fail();
+        return syncGraduateService.syncGraduate(false) ? R.ok() : R.fail();
     }
+
+    /**
+     * 研究生增量同步
+     */
+    @GetMapping("/sync/graduate/increment")
+    public R<Void> syncGraduateIncrement() {
+        return syncGraduateService.syncGraduate(true) ? R.ok() : R.fail();
+    }
+
     /**
      * 培研究生班级同步
      * @return 同步结果