Explorar el Código

feature: 同步服务完善
1.教务kafka同步

luoyb hace 1 año
padre
commit
c6b28e0c49

+ 50 - 0
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/CloudMqTopicConstants.java

@@ -0,0 +1,50 @@
+package org.dromara.common.core.constant;
+
+/**
+ * @ClassName CloudMqTopicConstants
+ * @Description 云端消息队列topic常量
+ * @Author luoyibo
+ * @Date 2024-12-27 22:11
+ * @Version 1.0
+ * @since jdk17
+ */
+public interface CloudMqTopicConstants {
+
+    /**
+     * 老一卡通系统kafka队列topic
+     */
+    String OLD_YKT = "eventBus";
+
+    String OLD_YKT_TEST = "eventBus_test";
+    /**
+     * 队列topic
+     */
+    String TOPIC = "CLOUD_PUSH_EVENT";
+    /**
+     * 业务系统编号
+     */
+    String SENDER = "000";
+    /**
+     * 消费记录
+     */
+    String CONSUME = SENDER + "00001";
+    /**
+     * 部门数据
+     */
+    String DEPT = SENDER + "00002";
+
+    /**
+     * 用户数据
+     */
+    String USER = SENDER + "00003";
+
+    /**
+     * 一卡通账户数据
+     */
+    String ACCOUNT = SENDER + "00004";
+
+    /**
+     * 一卡通账户数据
+     */
+    String CARD = SENDER + "00005";
+}

+ 6 - 1
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/enums/CloudMqEventEnum.java

@@ -13,7 +13,12 @@ public enum CloudMqEventEnum {
     DEPT("00000002","部门信息"),
     USER("00000003","用户信息"),
     ACCOUNT("00000004","账户信息"),
-    CARD("00000005","卡片信息");
+    CARD("00000005","卡片信息"),
+    CONSUME_RECORD("00500001","消费记录"),
+    REPORTED("00500002","报到状态");
+
+
+
     private final String code;
     private final String name;
 

+ 46 - 0
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/enums/TraineeStatusEnum.java

@@ -0,0 +1,46 @@
+package org.dromara.common.core.enums;
+
+/**
+ * @ClassName TraineeStatusEnum
+ * @Description 学员状态枚举
+ * @Author luoyibo
+ * @Date 2025-01-04 22:53
+ * @Version 1.0
+ * @since jdk17
+ */
+public enum TraineeStatusEnum {
+    REGISTERED("797","已报名"),
+    REPORTED("798","已报到"),
+    GRADUATED("799","已结业"),
+    OUT("800","已退学");
+
+    private final String code;
+    private final String name;
+
+    TraineeStatusEnum(String code, String name) {
+        this.code = code;
+        this.name = name;
+    }
+
+    public String code() {
+        return this.code;
+    }
+
+    public String message() {
+        return this.name;
+    }
+
+    public static String getMessage(String code) {
+        for (TraineeStatusEnum item : TraineeStatusEnum.values()) {
+            if (item.code().equals(code)) {
+                return item.name;
+            }
+        }
+        return "未知";
+    }
+
+    @Override
+    public String toString() {
+        return this.name();
+    }
+}

+ 6 - 1
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/business/self/TraineeBusiness.java

@@ -30,6 +30,7 @@ import org.dromara.backstage.payment.domain.vo.PtBagVo;
 import org.dromara.backstage.payment.service.IPtBagService;
 import org.dromara.backstage.payment.service.IPtUserAccountService;
 import org.dromara.common.core.constant.CacheNames;
+import org.dromara.common.core.constant.CloudMqTopicConstants;
 import org.dromara.common.core.constant.HotelBusinessConstants;
 import org.dromara.common.core.domain.R;
 import org.dromara.common.core.domain.model.ErrorInfo;
@@ -104,6 +105,9 @@ public class TraineeBusiness {
         if (ObjectUtil.isEmpty(traineeVo)) {
             return R.fail("没有您的培训信息");
         }
+        if(ObjectUtil.isEmpty(traineeVo.getCheckinState())){
+            traineeVo.setCheckinState(0);
+        }
         // 卡片信息
         setTraineeCardInfo(traineeVo);
         // 钱包信息
@@ -358,6 +362,7 @@ public class TraineeBusiness {
         Boolean result = remoteDeptService.updateCheckInStatus(Long.valueOf(bo.getDeptId()),Long.valueOf(bo.getUserId()));
         if(result){
             ycTraineeVo.setCheckinState(1);
+            ycTraineeVo.setCheckinDate(DateUtil.date());
         }
     }
 
@@ -407,7 +412,7 @@ public class TraineeBusiness {
         message.setHeader(header);
         message.setBody(traineeCheckIn);
 
-        kafkaProducer.sendKafkaMessage("eventBus",bo.getGuestId(),message,false);
+        kafkaProducer.sendKafkaMessage(CloudMqTopicConstants.OLD_YKT_TEST,message);
     }
 
     public YcLockCardVo queryLockCardInfo(Map<String, Object> mapQuery){

+ 1 - 1
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/controller/self/TraineeController.java

@@ -82,7 +82,7 @@ public class TraineeController {
      */
     @PostMapping("/api/v1/register")
     public ReturnResult checkInTrainee(@RequestBody YcTraineeBo bo) {
-        if (bo.getCheckInState() == 1) {
+        if (ObjectUtil.isNotEmpty(bo.getCheckInState()) && bo.getCheckInState() == 1) {
             return ReturnResult.failure(ResultCodeEnum.RESOURCE_EXISTED, "您已经报到过了,请勿重复报到");
         }
         YcTraineeVo traineeVo = new YcTraineeVo();

+ 5 - 4
ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/service/impl/KfOrderServiceImpl.java

@@ -245,10 +245,10 @@ public class KfOrderServiceImpl implements IKfOrderService {
             String key = CacheNames.CLASS_ROOM + "_" + teamId;
             if(RedisUtils.isExistsObject(key)){
                 RedisUtils.deleteObject(key);
-                LinkedBlockingQueue<String> concurrentLinkedQueue = new LinkedBlockingQueue<>();
-                orders.forEach(k -> concurrentLinkedQueue.add(k.getRoomCode()));
-                RedisUtils.setCacheObject(key, concurrentLinkedQueue);
             }
+            LinkedBlockingQueue<String> concurrentLinkedQueue = new LinkedBlockingQueue<>();
+            orders.forEach(k -> concurrentLinkedQueue.add(k.getRoomCode()));
+            RedisUtils.setCacheObject(key, concurrentLinkedQueue);
             //刷新房间状态
             orders.forEach(k -> {
                 baseMapper.updateRoomStatus(k.getRoomCode(), HotelRoomStatusEnum.SF.code());
@@ -562,6 +562,8 @@ public class KfOrderServiceImpl implements IKfOrderService {
 //    @Transactional
     public RemoteOrderVo checkInTeamByBo(RemoteOrderBo remoteBo) {
         KfOrderBo bo = MapstructUtils.convert(remoteBo, KfOrderBo.class);
+        //KfTeamGuestVo
+        //teamGuestCheckIn()
         return checkInTeamByBoPrivate(bo);
     }
 
@@ -571,7 +573,6 @@ public class KfOrderServiceImpl implements IKfOrderService {
             KfOrderVo vo = baseMapper.selectVoOne(
                 new LambdaQueryWrapper<KfOrder>()
                     .eq(KfOrder::getTeamId, bo.getTeamId())
-                    .eq(KfOrder::getGuestId, bo.getGuestId())
                     .eq(KfOrder::getRoomCode, bo.getRoomCode())
                     .in(KfOrder::getOrderStatus, orderStatusList));
             if (ObjectUtil.isNotEmpty(vo)) {

+ 1 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java

@@ -736,6 +736,7 @@ public class SysUserServiceImpl implements ISysUserService {
         justUserDeptBo.setDeptId(bo.getDeptId());
         justUserDeptBo.setPostId(bo.getPostId());
         justUserDeptBo.setMainDept("Y");
+
         userDeptService.setUserDeptPost(justUserDeptBo);
         //如果有多部门,设置多部门
         if (CollectionUtil.isNotEmpty(userDeptBoList)) {

+ 2 - 1
ruoyi-server/ruoyi-server-base/src/main/java/org/dromara/server/base/service/user/SyncRemoteUserService.java

@@ -226,7 +226,8 @@ public class SyncRemoteUserService {
      * @return 解密后身份证号
      */
     private String getUserIdNumber(String sourceIdNumb) {
-        return ObjectUtil.isEmpty(sourceIdNumb) ? null : EncryptorUtil.decode(sourceIdNumb);
+        //return ObjectUtil.isEmpty(sourceIdNumb) ? null : EncryptorUtil.decode(sourceIdNumb);
+        return ObjectUtil.isEmpty(sourceIdNumb) ? null : sourceIdNumb;
     }
 
     /**

+ 3 - 3
ruoyi-server/ruoyi-server-mqdata/src/main/java/org/dromara/server/mq/consumer/SyncKafkaConsumer.java

@@ -24,12 +24,12 @@ import org.springframework.stereotype.Component;
  */
 @RequiredArgsConstructor
 @Slf4j
-//@Component
-@ConditionalOnExpression("'local'.equals('${locationFlag}')")
+@Component
+@ConditionalOnExpression("'cloud'.equals('${locationFlag}')")
 public class SyncKafkaConsumer {
     private final EventStrategyContext eventStrategyContext;
 
-    //@KafkaListener(topics = "old-kafka-jw", groupId = "test-ykt2")
+    @KafkaListener(topics = "old-kafka-jw", groupId = "test-ykt2")
     public void kafkaReceiveHandler(ConsumerRecord<String, String> record) {
         KafkaMessage<?> receiveMsg = JSONUtil.toBean(record.value(), KafkaMessage.class);
         String eventType = receiveMsg.getHeader().getEventType();

+ 2 - 2
ruoyi-server/ruoyi-server-mqdata/src/main/java/org/dromara/server/mq/event/kafka/impl/teacher/TeacherUtils.java

@@ -24,7 +24,7 @@ import java.util.List;
 public class TeacherUtils {
 
     /**
-     * 处理教职工信息
+     * 处理教学员信息
      *
      * @param data 教职工
      * @return 结果
@@ -53,7 +53,7 @@ public class TeacherUtils {
     }
 
     /**
-     * 处理学员数据
+     * 处理教职工数据
      */
     public static List<ResourcePerson> getSyncTeacher(JSONObject data) {
         List<ResourcePerson> resourcePersonList = new ArrayList<>();

+ 62 - 6
ruoyi-server/ruoyi-server-mqdata/src/main/java/org/dromara/server/mq/event/kafka/impl/train/TrainUtils.java

@@ -1,9 +1,14 @@
 package org.dromara.server.mq.event.kafka.impl.train;
 
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.json.JSONObject;
+import org.dromara.common.core.enums.TraineeStatusEnum;
 import org.dromara.server.common.constant.DefaultConstants;
 import org.dromara.server.common.domain.bo.ResourceDept;
+import org.dromara.server.common.domain.bo.ResourcePerson;
+import org.dromara.server.common.domain.bo.ResourcePersonDept;
+import org.dromara.server.common.domain.bo.SyncFullDataBo;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -22,6 +27,7 @@ public class TrainUtils {
 
     /**
      * 培训班级处理
+     *
      * @param data 班级数据
      * @return 处理结果
      */
@@ -32,21 +38,71 @@ public class TrainUtils {
         dept.setDept_name(data.get("name").toString());
         dept.setYear(Integer.valueOf(data.get("year").toString()));
         dept.setSemester("0".equals(data.get("xq").toString()) ? "上学期" : "下学期");
-        dept.setPayBegin(DateUtil.parse(data.get("bmStarttime").toString(),DefaultConstants.DATE_TIME_FORMAT));
-        dept.setCheckDate(DateUtil.parse(data.get("bdTime").toString(),DefaultConstants.DATE_TIME_FORMAT));
-        dept.setBeginDate(DateUtil.parse(data.get("kbTime").toString(),DefaultConstants.DATE_TIME_FORMAT));
+        dept.setPayBegin(DateUtil.parse(data.get("bmStarttime").toString(), DefaultConstants.DATE_TIME_FORMAT));
+        dept.setCheckDate(DateUtil.parse(data.get("bdTime").toString(), DefaultConstants.DATE_TIME_FORMAT));
+        dept.setBeginDate(DateUtil.parse(data.get("kbTime").toString(), DefaultConstants.DATE_TIME_FORMAT));
         dept.setEndDate(DateUtil.parse(data.get("byTime").toString(), DefaultConstants.DATE_TIME_FORMAT));
         dept.setPayEnd(DateUtil.parse(data.get("byTime").toString(), DefaultConstants.DATE_TIME_FORMAT));
         dept.setChooseRoom("0");
         dept.setCanEat("1");
         dept.setPlanCount(Integer.valueOf(data.getOrDefault("studentNum", "0").toString()));
-//        dept.setPayCheck(data.get("noPayAllow").toString());
-//        dept.setDept_num(data.get("sortNum").toString());
+        dept.setPayCheck(ObjectUtil.isEmpty(data.get("noPayAllow")) ? "0" : data.get("noPayAllow").toString());
+        //dept.setDept_num("");
         dept.setOperatorId(DefaultConstants.KAFKA_SYNC_ADMIN);
-//        dept.setTenantId(DefaultConstants.TENANT_ID);
         dept.setTenantId(data.getStr("tenantId"));
         resourceDeptlist.add(dept);
 
         return resourceDeptlist;
     }
+
+    /**
+     * 处理教学员信息
+     *
+     * @param data 教职工
+     * @return 结果
+     */
+    public static List<ResourcePerson> getSyncTrainee(JSONObject data) {
+        List<ResourcePerson> resourcePersonList = new ArrayList<>();
+        JSONObject stuObj = data.getJSONObject("student");
+        ResourcePerson person = new ResourcePerson();
+        person.setUserId(stuObj.getStr("id"));
+        person.setRealName(stuObj.get("name").toString());
+        person.setSex(stuObj.get("sex").toString());
+        person.setPhone(stuObj.get("phone").toString());
+        person.setDeptId(stuObj.getStr("currentClassId"));
+        person.setPostCode(DefaultConstants.TRAINEE_CODE);
+        person.setIdNumber(stuObj.getStr("idCard"));
+        person.setCategory("2");
+        person.setOperatorId(DefaultConstants.KAFKA_SYNC_ADMIN);
+        person.setTenantId(data.getStr("tenantId"));
+        // 学员班级列表处理
+        List<ResourcePersonDept> resourcePersonDeptList = getResourcePersonDeptList(data);
+        person.setUserDeptList(resourcePersonDeptList);
+        resourcePersonList.add(person);
+
+        return resourcePersonList;
+    }
+
+    private static List<ResourcePersonDept> getResourcePersonDeptList(JSONObject data){
+        JSONObject stuClassObj = data.getJSONObject("trainClassStudent");
+        List<ResourcePersonDept> resourcePersonDeptList = new ArrayList<>();
+        ResourcePersonDept personDept = new ResourcePersonDept();
+        // 学员Id
+        personDept.setUserId(stuClassObj.getStr("studentId"));
+        // 班级Id
+        personDept.setDeptId(stuClassObj.getStr("classId"));
+        // 岗位编码,默认为学员
+        personDept.setPostCode(DefaultConstants.TRAINEE_CODE);
+        // 和班级的绑定状态 0-已报名 1-已确认 3-已报到 一卡通按正常状态处理  2-已拒绝 7-已离校 一卡通按删除状态处理
+        String status = stuClassObj.getStr("status");
+        if (ObjectUtil.equals(status, TraineeStatusEnum.REGISTERED.code()) || ObjectUtil.equals(status,TraineeStatusEnum.REPORTED.code())) {
+            personDept.setDelFlag("0");
+        } else {
+            personDept.setDelFlag("2");
+        }
+
+        resourcePersonDeptList.add(personDept);
+        return resourcePersonDeptList;
+    }
+
 }

+ 1 - 1
ruoyi-server/ruoyi-server-mqdata/src/main/java/org/dromara/server/mq/event/kafka/impl/train/TraineeAddEventStrategyImpl.java

@@ -33,7 +33,7 @@ public class TraineeAddEventStrategyImpl implements IEventStrategy {
     private final SyncUserStrategyContent syncUserStrategyContent;
     @Override
     public void doMsgHandle(JSONObject msg) {
-        List<ResourcePerson> resourcePersonList = TeacherUtils.getSyncTrainee(msg);
+        List<ResourcePerson> resourcePersonList = TrainUtils.getSyncTrainee(msg);
         syncUserStrategyContent.syncUser(resourcePersonList, SyncResourceConstants.TRAINEE);
     }
 }