Sfoglia il codice sorgente

feature: 同步服务完善
1.kafKa消息班级与学员删除实现
2.解决身份证同步加密问题
3.解决入住时间不为报到时间问题

luo.yibo@datuai.com 1 anno fa
parent
commit
053ec80e1c
39 ha cambiato i file con 765 aggiunte e 150 eliminazioni
  1. 28 3
      ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/RemoteUserAccountService.java
  2. 9 0
      ruoyi-api/ruoyi-api-hotel/src/main/java/org/dromara/hotel/api/service/RemoteGuestService.java
  3. 9 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteDeptService.java
  4. 10 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteUserService.java
  5. 5 0
      ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/DefaultConstants.java
  6. 7 0
      ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/model/ErrorInfo.java
  7. 9 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/cardCenter/service/IPtCardService.java
  8. 63 41
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/cardCenter/service/impl/PtCardServiceImpl.java
  9. 17 15
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/domain/PtUserAccount.java
  10. 7 7
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/domain/bo/PtUserAccountBo.java
  11. 23 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/dubbo/RemoteUserAccountServiceImpl.java
  12. 24 1
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/service/IPtUserAccountService.java
  13. 50 9
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/service/impl/PtUserAccountServiceImpl.java
  14. 11 5
      ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/dubbo/RemoteGuestServiceImpl.java
  15. 8 0
      ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/service/IKfGuestService.java
  16. 9 1
      ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/service/IKfGuestTeamRService.java
  17. 11 0
      ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/service/impl/KfGuestServiceImpl.java
  18. 28 10
      ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/service/impl/KfGuestTeamRServiceImpl.java
  19. 2 3
      ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/service/impl/KfTeamServiceImpl.java
  20. 13 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteDeptServiceImpl.java
  21. 12 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteUserServiceImpl.java
  22. 0 10
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysUserMapper.java
  23. 9 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDeptService.java
  24. 17 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java
  25. 16 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/IUserDeptService.java
  26. 28 1
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java
  27. 48 5
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java
  28. 55 19
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/UserDeptServiceImpl.java
  29. 10 0
      ruoyi-server/ruoyi-server-base/src/main/java/org/dromara/server/base/service/dept/SyncRemoteDeptService.java
  30. 1 1
      ruoyi-server/ruoyi-server-base/src/main/java/org/dromara/server/base/service/dept/strategy/impl/TrainClassStrategyImpl.java
  31. 72 5
      ruoyi-server/ruoyi-server-base/src/main/java/org/dromara/server/base/service/user/SyncRemoteUserService.java
  32. 7 0
      ruoyi-server/ruoyi-server-base/src/main/java/org/dromara/server/base/service/user/strategy/ISyncUserStrategy.java
  33. 9 0
      ruoyi-server/ruoyi-server-base/src/main/java/org/dromara/server/base/service/user/strategy/SyncUserStrategyContent.java
  34. 5 0
      ruoyi-server/ruoyi-server-base/src/main/java/org/dromara/server/base/service/user/strategy/impl/SyncGraduateStrategyImpl.java
  35. 5 0
      ruoyi-server/ruoyi-server-base/src/main/java/org/dromara/server/base/service/user/strategy/impl/SyncTeacherStrategyImpl.java
  36. 36 1
      ruoyi-server/ruoyi-server-base/src/main/java/org/dromara/server/base/service/user/strategy/impl/SyncTraineeStrategyImpl.java
  37. 42 6
      ruoyi-server/ruoyi-server-base/src/main/java/org/dromara/server/base/util/TrainUtils.java
  38. 3 3
      ruoyi-server/ruoyi-server-mqdata/src/main/java/org/dromara/server/mq/event/kafka/impl/cloud/TrainEventStrategyImpl.java
  39. 47 4
      ruoyi-server/ruoyi-server-sync/src/main/java/org/dromara/server/sync/controller/SyncTest.java

+ 28 - 3
ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/RemoteUserAccountService.java

@@ -26,15 +26,22 @@ public interface RemoteUserAccountService {
     void insertByBo(RemoteUserAccountBo bo);
 
     R<RemoteUserAccountBo> openAccount(RemoteUserAccountBo bo);
+
     Boolean batchOpenAccount(Long[] userIds);
+
     Boolean batchCloseAccount(Long[] userIds);
-     void updateByBo(RemoteUserAccountBo bo);
+
+    void updateByBo(RemoteUserAccountBo bo);
+
     Boolean updateFreezeStatus(String freezeStatus, Long[] userIds);
 
-    Boolean resetLifespan(Long[] userIds,String lifespan);
-    Boolean resetCardType(Long[] userIds,String cardType);
+    Boolean resetLifespan(Long[] userIds, String lifespan);
+
+    Boolean resetCardType(Long[] userIds, String cardType);
+
     /**
      * 根据账户Id查询账户信息
+     *
      * @param userId 账户Id
      * @return 账户信息
      */
@@ -42,11 +49,29 @@ public interface RemoteUserAccountService {
 
     /**
      * 根据账户流水号查询账户信息
+     *
      * @param userNo 账户流水号
      * @return 账户信息
      */
     RemoteUserAccountVo getUserAccountVoByUserNo(Long userNo);
 
     RemoteUserAccountVo getUserAccountVoByUserNumb(String userNumb);
+    /**
+     * 删除指定部门下的一卡通账户信息
+     * @param deptId 部门Id
+     * @param operatorId 操作员Id
+     * @return 删除结果
+     */
+    int deleteByDeptId(Long deptId, Long operatorId);
+
+    /**
+     * 根据第三方Id删除人员账户信息
+     *
+     * @param userId     第三方人员Id
+     * @param deptId     第三方部门Id
+     * @param operatorId 操作员Id
+     * @return 操作成功与否
+     */
+    int delByUserAndDeptId(Long userId,Long deptId, Long operatorId);
 
 }

+ 9 - 0
ruoyi-api/ruoyi-api-hotel/src/main/java/org/dromara/hotel/api/service/RemoteGuestService.java

@@ -36,4 +36,13 @@ public interface RemoteGuestService {
      * @return 客人信息
      */
     R<RemoteGuestVo> selectGuestByOtherId(String otherId);
+
+    /**
+     * 删除客人
+     * @param userId 客人Id
+     * @param deptId 团客Id
+     * @param operatorId 操作员Id
+     * @return 删除结果
+     */
+    Boolean delByUserAndDeptId(Long userId, Long deptId, Long operatorId);
 }

+ 9 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteDeptService.java

@@ -78,6 +78,15 @@ public interface RemoteDeptService {
      */
     R<Object> deleteDeptByOtherId(String otherId);
 
+    /**
+     * 根据第三方对接的唯一标识符删除部门
+     *
+     * @param otherId 第三方对接后的唯一标识符
+     * @param operatorId 操作员Id
+     * @return 删除结果
+     */
+    R<Object> deleteDeptByOtherId(String otherId,Long operatorId);
+
     /**
      * 根据父节点Id和名称查询部门
      *

+ 10 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteUserService.java

@@ -167,4 +167,14 @@ public interface RemoteUserService {
      * @return 用户信息视图
      */
     RemoteUserVo selectUserById(Long userId);
+
+    /**
+     * 根据第三方Id删除人员信息
+     *
+     * @param userId     第三方人员Id
+     * @param deptId     第三方部门Id
+     * @param operatorId 操作员Id
+     * @return 操作成功与否
+     */
+    Boolean delByUserAndDeptId(Long userId, Long deptId, Long operatorId);
 }

+ 5 - 0
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/DefaultConstants.java

@@ -139,4 +139,9 @@ public interface DefaultConstants {
      * 研究生身份标志
      */
     String CATEGORY_GRADUATE = "3";
+
+    /**
+     * 已删除标志
+     */
+    String DELETED = "2";
 }

+ 7 - 0
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/model/ErrorInfo.java

@@ -3,6 +3,7 @@ package org.dromara.common.core.domain.model;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
+import org.dromara.common.core.enums.ResultCodeEnum;
 
 import java.io.Serial;
 import java.io.Serializable;
@@ -48,4 +49,10 @@ public class ErrorInfo implements Serializable {
         this.type = type;
         this.message = message;
     }
+
+    public ErrorInfo(ResultCodeEnum result) {
+        this.code = result.code();
+        this.type = result.message();
+        this.message = result.message();
+    }
 }

+ 9 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/cardCenter/service/IPtCardService.java

@@ -200,4 +200,13 @@ public interface IPtCardService {
      * @return 更新结果
      */
     Boolean updateCardDayData(Long cardNo, Long mealType, BigDecimal consumeValue, Date consumeDate);
+
+    /**
+     * 注销指定用户的卡片
+     *
+     * @param userId     用户Id
+     * @param operatorId 操作员Id
+     * @return 注销结果
+     */
+    Boolean cancelCard(Long userId, Long operatorId);
 }

+ 63 - 41
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/cardCenter/service/impl/PtCardServiceImpl.java

@@ -127,7 +127,7 @@ public class PtCardServiceImpl implements IPtCardService {
      */
     @Override
     public Boolean insertByBo(PtCardBo bo) {
-        if(ObjUtil.isEmpty(bo.getLastPay())){
+        if (ObjUtil.isEmpty(bo.getLastPay())) {
             bo.setLastPay(DateUtil.offsetDay(DateUtil.date(), -1));
         }
         bo.setLastMeal(0L);
@@ -154,10 +154,10 @@ public class PtCardServiceImpl implements IPtCardService {
     public Boolean updateByBo(PtCardBo bo) {
         PtCard update = MapstructUtils.convert(bo, PtCard.class);
         validEntityBeforeSave(update);
-        int count =  baseMapper.updateById(update) ;
+        int count = baseMapper.updateById(update);
         PtCardVo vo = baseMapper.selectVoById(bo.getCardId());
         kafkaNormalProducer.sendKafkaMessage(KafkaTopicConstants.SYNC_DATA_TOPIC, EventTypeConstants.CARD, EventSenderEnum.BACKSTAGE.code(), vo);
-        return count>0;
+        return count > 0;
     }
 
     /**
@@ -177,9 +177,9 @@ public class PtCardServiceImpl implements IPtCardService {
     @Override
     public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
         if (isValid) {
-            //TODO 做一些业务上的校验,判断是否需要校验
+            // TODO 做一些业务上的校验,判断是否需要校验
         }
-        //ids.forEach(id->{
+        // ids.forEach(id->{
         //    sendCloudConsume(baseMapper.selectVoById(id));
         //});
         return baseMapper.deleteByIds(ids) > 0;
@@ -198,11 +198,11 @@ public class PtCardServiceImpl implements IPtCardService {
     public int resetLifespan(Long[] userIds, String lifespan) {
         for (Long userId : userIds) {
             baseMapper.update(null, new LambdaUpdateWrapper<PtCard>()
-                .set(PtCard::getLifespan, lifespan)
-                .set(PtCard::getChangeTime, DateUtil.date())
-                .eq(PtCard::getStatus, '1')
-                .eq(PtCard::getUserId, userId));
-            //sendCloudConsume(baseMapper.selectVoById(userId));
+                                        .set(PtCard::getLifespan, lifespan)
+                                        .set(PtCard::getChangeTime, DateUtil.date())
+                                        .eq(PtCard::getStatus, '1')
+                                        .eq(PtCard::getUserId, userId));
+            // sendCloudConsume(baseMapper.selectVoById(userId));
         }
         return userIds.length;
     }
@@ -218,12 +218,13 @@ public class PtCardServiceImpl implements IPtCardService {
      */
     @Override
     public int resetCardType(Long[] userIds, String cardType) {
-        Arrays.stream(userIds).forEach(userId -> {baseMapper.update(null, new LambdaUpdateWrapper<PtCard>()
-            .set(PtCard::getCardType, cardType)
-            .set(PtCard::getChangeTime, DateUtil.date())
-            .eq(PtCard::getStatus, '1')
-            .eq(PtCard::getUserId, userId));
-        //sendCloudConsume(baseMapper.selectVoById(userId));
+        Arrays.stream(userIds).forEach(userId -> {
+            baseMapper.update(null, new LambdaUpdateWrapper<PtCard>()
+                                        .set(PtCard::getCardType, cardType)
+                                        .set(PtCard::getChangeTime, DateUtil.date())
+                                        .eq(PtCard::getStatus, '1')
+                                        .eq(PtCard::getUserId, userId));
+            // sendCloudConsume(baseMapper.selectVoById(userId));
         });
         return userIds.length;
     }
@@ -246,7 +247,8 @@ public class PtCardServiceImpl implements IPtCardService {
             if (listVo.isEmpty()) {
                 list.add(CardOpenEnum.NO.message());
             } else {
-                String cardInfo = listVo.stream().anyMatch(p -> p.getFactoryId() == 0) ? CardOpenEnum.VIRTUAL.message() : CardOpenEnum.ENTITY.message();
+                String cardInfo = listVo.stream().anyMatch(
+                    p -> p.getFactoryId() == 0) ? CardOpenEnum.VIRTUAL.message() : CardOpenEnum.ENTITY.message();
                 list.add(cardInfo);
             }
         }
@@ -261,12 +263,12 @@ public class PtCardServiceImpl implements IPtCardService {
      */
     @Override
     public boolean lockCard(Long cardId) {
-        //sendCloudConsume(baseMapper.selectVoById(cardId));
+        // sendCloudConsume(baseMapper.selectVoById(cardId));
         return baseMapper.update(null, new LambdaUpdateWrapper<PtCard>()
-            .set(PtCard::getStatus, '2')
-            .set(PtCard::getChangeTime, DateUtil.date())
-            .eq(PtCard::getStatus, '1')
-            .eq(PtCard::getCardId, cardId)) > 0;
+                                           .set(PtCard::getStatus, '2')
+                                           .set(PtCard::getChangeTime, DateUtil.date())
+                                           .eq(PtCard::getStatus, '1')
+                                           .eq(PtCard::getCardId, cardId)) > 0;
     }
 
     /**
@@ -277,12 +279,12 @@ public class PtCardServiceImpl implements IPtCardService {
      */
     @Override
     public boolean unlockCard(Long cardId) {
-        //sendCloudConsume(baseMapper.selectVoById(cardId));
+        // sendCloudConsume(baseMapper.selectVoById(cardId));
         return baseMapper.update(null, new LambdaUpdateWrapper<PtCard>()
-            .set(PtCard::getStatus, '1')
-            .set(PtCard::getChangeTime, DateUtil.date())
-            .eq(PtCard::getStatus, '2')
-            .eq(PtCard::getCardId, cardId)) > 0;
+                                           .set(PtCard::getStatus, '1')
+                                           .set(PtCard::getChangeTime, DateUtil.date())
+                                           .eq(PtCard::getStatus, '2')
+                                           .eq(PtCard::getCardId, cardId)) > 0;
     }
 
     /**
@@ -294,25 +296,26 @@ public class PtCardServiceImpl implements IPtCardService {
      */
     @Override
     public BigDecimal computeCommission(PtBagBo bo) {
-        //当前账户的卡类
+        // 当前账户的卡类
         PtCardtypeVo cardTypeVo = cardTypeService.queryByCode(bo.getCardTypeId());
-        //卡类对应的管理费
+        // 卡类对应的管理费
         BigDecimal commissionRate = new BigDecimal(cardTypeVo.getCommissionCharge());
         if (commissionRate.compareTo(BigDecimal.ZERO) > 0) {
-            //设置有管理费率,需要计算管理费
+            // 设置有管理费率,需要计算管理费
             BigDecimal commission;
             String commType = parameterService.selectParamByCode("COMMISSION_TYPE");
-            //从系统参数表中拿收管理费的设置
+            // 从系统参数表中拿收管理费的设置
             if (Constants.TAKE_COMMISSION.equals(commType)) {
-                //按比例收取
-                commission = bo.getReceiptMoney().multiply(commissionRate.divide(new BigDecimal(100), 2, RoundingMode.HALF_UP)).setScale(2, RoundingMode.HALF_UP);
+                // 按比例收取
+                commission = bo.getReceiptMoney().multiply(commissionRate.divide(new BigDecimal(100), 2, RoundingMode.HALF_UP)).setScale(2,
+                                                                                                                                         RoundingMode.HALF_UP);
             } else {
-                //直接设置
+                // 直接设置
                 commission = commissionRate;
             }
             return commission;
         } else {
-            //没有设置管理费,设置为0
+            // 没有设置管理费,设置为0
             return BigDecimal.ZERO;
         }
     }
@@ -369,10 +372,10 @@ public class PtCardServiceImpl implements IPtCardService {
         List<PtCardVo> list = this.queryList(bo);
         if (ObjUtil.isNotNull(list) && !list.isEmpty()) {
             PtCardVo vo = list.get(0);
-            if(ObjUtil.isEmpty(vo.getLastPay())){
-                vo.setLastPay(DateUtil.offsetDay(DateUtil.date(),-1));
+            if (ObjUtil.isEmpty(vo.getLastPay())) {
+                vo.setLastPay(DateUtil.offsetDay(DateUtil.date(), -1));
             }
-            if (ObjUtil.isEmpty(vo.getLastMeal())|| ObjUtil.isNull(vo.getLastMeal())) {
+            if (ObjUtil.isEmpty(vo.getLastMeal()) || ObjUtil.isNull(vo.getLastMeal())) {
                 vo.setLastMeal(0L);
             }
             return vo;
@@ -491,12 +494,14 @@ public class PtCardServiceImpl implements IPtCardService {
 
         return baseMapper.update(null, lpw) > 0;
     }
+
     /**
      * 更新当天的消费信息
-     * @param cardNo 卡流水号
-     * @param mealType 餐类
+     *
+     * @param cardNo       卡流水号
+     * @param mealType     餐类
      * @param consumeValue 消费金额
-     * @param consumeDate 消费日期
+     * @param consumeDate  消费日期
      * @return 更新结果
      */
     @Override
@@ -527,4 +532,21 @@ public class PtCardServiceImpl implements IPtCardService {
 
         return true;
     }
+
+    /**
+     * 注销指定用户的卡片
+     *
+     * @param userId     用户Id
+     * @param operatorId 操作员Id
+     * @return 注销结果
+     */
+    @Override
+    public Boolean cancelCard(Long userId, Long operatorId) {
+        LambdaUpdateWrapper<PtCard> luw = new LambdaUpdateWrapper<PtCard>().set(PtCard::getStatus, CardStatusEnum.CLOSE.code().toString())
+                                              .set(PtCard::getChangeTime, DateUtil.date())
+                                              .set(PtCard::getUpdateBy, operatorId)
+                                              .eq(PtCard::getUserId, userId)
+                                              .eq(PtCard::getStatus, CardStatusEnum.NORMAL.code().toString());
+        return baseMapper.update(null, luw) >= 0;
+    }
 }

+ 17 - 15
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/domain/PtUserAccount.java

@@ -1,15 +1,16 @@
 package org.dromara.backstage.payment.domain;
 
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
 import org.dromara.common.encrypt.annotation.EncryptField;
 import org.dromara.common.encrypt.enumd.AlgorithmType;
 import org.dromara.common.tenant.core.TenantEntity;
-import com.baomidou.mybatisplus.annotation.*;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import java.util.Date;
-import com.fasterxml.jackson.annotation.JsonFormat;
 
 import java.io.Serial;
+import java.util.Date;
 
 /**
  * 一卡通账户对象 t_pt_userAccount
@@ -49,7 +50,7 @@ public class PtUserAccount extends TenantEntity {
     /**
      * 登录密码
      */
-    private String password;
+    // private String password;
 
     /**
      * 账户编号/工号
@@ -59,7 +60,7 @@ public class PtUserAccount extends TenantEntity {
     /**
      * 账户昵称
      */
-    private String nickName;
+    // private String nickName;
 
     /**
      * 账户姓名
@@ -79,12 +80,12 @@ public class PtUserAccount extends TenantEntity {
     /**
      * 账户邮箱
      */
-    private String email;
+    // private String email;
 
     /**
      * 通信地址
      */
-    private String address;
+    // private String address;
 
     /**
      * 手机号码
@@ -95,11 +96,12 @@ public class PtUserAccount extends TenantEntity {
     /**
      * 头像地址
      */
-    private Long avatar;
+    // private Long avatar;
 
     /**
      * 身份证号
      */
+    @EncryptField(algorithm = AlgorithmType.BASE64)
     private String idNumber;
 
     /**
@@ -146,12 +148,12 @@ public class PtUserAccount extends TenantEntity {
     /**
      * 人员编制,对应 ZXXBZLB 字典类型
      */
-    private String formation;
+    // private String formation;
 
     /**
      * 是否隐藏,见sys_yes_no字典类型,内置的系统账号是需要隐藏的
      */
-    private String hidden;
+    // private String hidden;
 
     /**
      * 唯一身份标识,第三方统一身份认证ID
@@ -171,12 +173,12 @@ public class PtUserAccount extends TenantEntity {
     /**
      * 最后登录IP
      */
-    private String loginIp;
+    // private String loginIp;
 
     /**
      * 最后登录时间
      */
-    private Date loginDate;
+    // private Date loginDate;
 
     /**
      * 账户状态,见sys_normal_disable字典类型
@@ -192,7 +194,7 @@ public class PtUserAccount extends TenantEntity {
     /**
      * 账户类型(sys_user一卡通账户)
      */
-    private String userType;
+    // private String userType;
 
 
 }

+ 7 - 7
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/domain/bo/PtUserAccountBo.java

@@ -58,7 +58,7 @@ public class PtUserAccountBo extends TenantEntity {
     /**
      * 登录密码
      */
-    private String password;
+    // private String password;
 
     /**
      * 账户编号/工号
@@ -69,7 +69,7 @@ public class PtUserAccountBo extends TenantEntity {
     /**
      * 账户昵称
      */
-    private String nickName;
+    // private String nickName;
 
     /**
      * 账户姓名
@@ -92,12 +92,12 @@ public class PtUserAccountBo extends TenantEntity {
     /**
      * 账户邮箱
      */
-    private String email;
+    // private String email;
 
     /**
      * 通信地址
      */
-    private String address;
+    // private String address;
 
     /**
      * 手机号码
@@ -110,7 +110,7 @@ public class PtUserAccountBo extends TenantEntity {
     /**
      * 头像地址
      */
-    private Long avatar;
+    // private Long avatar;
 
     /**
      * 身份证号
@@ -166,12 +166,12 @@ public class PtUserAccountBo extends TenantEntity {
     /**
      * 人员编制,对应 ZXXBZLB 字典类型
      */
-    private String formation;
+    // private String formation;
 
     /**
      * 是否隐藏,见sys_yes_no字典类型,内置的系统账号是需要隐藏的
      */
-    private String hidden;
+    // private String hidden;
 
     /**
      * 唯一身份标识,第三方统一身份认证ID

+ 23 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/dubbo/RemoteUserAccountServiceImpl.java

@@ -111,4 +111,27 @@ public class RemoteUserAccountServiceImpl implements RemoteUserAccountService {
         PtUserAccountVo vo = userAccountService.getUserAccountVoByUserNumb(userNumb);
         return MapstructUtils.convert(vo, RemoteUserAccountVo.class);
     }
+    /**
+     * 删除指定部门下的一卡通账户信息
+     * @param deptId 部门Id
+     * @param operatorId 操作员Id
+     * @return 删除结果
+     */
+    @Override
+    public int deleteByDeptId(Long deptId, Long operatorId) {
+        return userAccountService.deleteByDeptId(deptId, operatorId);
+    }
+    /**
+     * 根据第三方Id删除人员账户信息
+     *
+     * @param userId     第三方人员Id
+     * @param deptId     第三方部门Id
+     * @param operatorId 操作员Id
+     * @return 操作成功与否
+     */
+    @Override
+    public int delByUserAndDeptId(Long userId, Long deptId, Long operatorId) {
+        return userAccountService.delByUserAndDeptId(userId, deptId, operatorId);
+    }
+
 }

+ 24 - 1
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/service/IPtUserAccountService.java

@@ -38,6 +38,7 @@ public interface IPtUserAccountService {
      * @return 一卡通账户分页列表
      */
     TableDataInfo<PtUserAccountVo> queryPageList(PtUserAccountBo bo, PageQuery pageQuery);
+
     TableDataInfo<PtUserAccount4SelectVo> queryPageList4Select(PtUserAccountBo bo, PageQuery pageQuery);
 
     /**
@@ -105,6 +106,7 @@ public interface IPtUserAccountService {
      * @return 受影响的记录数据
      */
     int resetLifespan(Long[] userIds, String lifespan);
+
     /*
      * 根据Id更新账户的卡类
      *
@@ -144,6 +146,7 @@ public interface IPtUserAccountService {
      * @return 开户结果
      */
     R<String> openAccount(PtUserAccountBo bo);
+
     /*
      * 销户
      *
@@ -156,6 +159,7 @@ public interface IPtUserAccountService {
 
     /**
      * 批量上传人脸照片
+     *
      * @param files
      * @return
      */
@@ -163,11 +167,12 @@ public interface IPtUserAccountService {
 
     /**
      * 根据人员编号与姓名查询人员信息
+     *
      * @param realName 人员姓名
      * @param userNumb 人员编号
      * @return 人员信息
      */
-    PtUserAccountVo queryByNameAndNumb(String realName,String userNumb);
+    PtUserAccountVo queryByNameAndNumb(String realName, String userNumb);
 
     PtUserAccountVo getUserAccountVoByUserNo(Long userNo);
 
@@ -176,4 +181,22 @@ public interface IPtUserAccountService {
     PtUserAccountVo selectVoOneByBo(PtUserAccountBo bo);
 
     YcTraineeVo selectTraineeByBo(PtUserAccountBo bo, Date doingDate);
+
+    /**
+     * 删除指定部门下的一卡通账户信息
+     * @param deptId 部门Id
+     * @param operatorId 操作员Id
+     * @return 删除结果
+     */
+    int deleteByDeptId(Long deptId, Long operatorId);
+
+    /**
+     * 根据第三方Id删除人员账户信息
+     *
+     * @param userId     第三方人员Id
+     * @param deptId     第三方部门Id
+     * @param operatorId 操作员Id
+     * @return 操作成功与否
+     */
+    int delByUserAndDeptId(Long userId,Long deptId, Long operatorId);
 }

+ 50 - 9
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/service/impl/PtUserAccountServiceImpl.java

@@ -28,6 +28,7 @@ import org.dromara.backstage.payment.mapper.PtUserAccountMapper;
 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.DefaultConstants;
 import org.dromara.common.core.domain.R;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.SpringUtils;
@@ -148,12 +149,13 @@ public class PtUserAccountServiceImpl implements IPtUserAccountService {
         bo.setPhone(encryptInterceptor.encrypt(bo.getPhone()));
         Map<String, Object> params = bo.getParams();
         LambdaQueryWrapper<PtUserAccount> lqw = Wrappers.lambdaQuery();
+        lqw.eq(bo.getUserId() != null, PtUserAccount::getUserId, bo.getUserId());
         lqw.eq(bo.getPostId() != null, PtUserAccount::getPostId, bo.getPostId());
-//        lqw.eq(bo.getDeptId() != null, PtUserAccount::getDeptId, bo.getDeptId());
+       lqw.eq(bo.getDeptId() != null, PtUserAccount::getDeptId, bo.getDeptId());
         lqw.like(StringUtils.isNotBlank(bo.getUserName()), PtUserAccount::getUserName, bo.getUserName());
-        lqw.eq(StringUtils.isNotBlank(bo.getPassword()), PtUserAccount::getPassword, bo.getPassword());
+        // lqw.eq(StringUtils.isNotBlank(bo.getPassword()), PtUserAccount::getPassword, bo.getPassword());
         lqw.eq(StringUtils.isNotBlank(bo.getUserNumb()), PtUserAccount::getUserNumb, bo.getUserNumb());
-        lqw.like(StringUtils.isNotBlank(bo.getNickName()), PtUserAccount::getNickName, bo.getNickName());
+        // lqw.like(StringUtils.isNotBlank(bo.getNickName()), PtUserAccount::getNickName, bo.getNickName());
         lqw.like(StringUtils.isNotBlank(bo.getRealName()), PtUserAccount::getRealName, bo.getRealName());
         lqw.eq(StringUtils.isNotBlank(bo.getSex()), PtUserAccount::getSex, bo.getSex());
         if(StringUtils.isNotBlank(bo.getCategory())){
@@ -165,10 +167,10 @@ public class PtUserAccountServiceImpl implements IPtUserAccountService {
             }
         }
 
-        lqw.eq(StringUtils.isNotBlank(bo.getEmail()), PtUserAccount::getEmail, bo.getEmail());
-        lqw.eq(StringUtils.isNotBlank(bo.getAddress()), PtUserAccount::getAddress, bo.getAddress());
+        // lqw.eq(StringUtils.isNotBlank(bo.getEmail()), PtUserAccount::getEmail, bo.getEmail());
+        // lqw.eq(StringUtils.isNotBlank(bo.getAddress()), PtUserAccount::getAddress, bo.getAddress());
         lqw.eq(StringUtils.isNotBlank(bo.getPhone()), PtUserAccount::getPhone, bo.getPhone());
-        lqw.eq(bo.getAvatar() != null, PtUserAccount::getAvatar, bo.getAvatar());
+        // lqw.eq(bo.getAvatar() != null, PtUserAccount::getAvatar, bo.getAvatar());
         lqw.eq(StringUtils.isNotBlank(bo.getIdNumber()), PtUserAccount::getIdNumber, bo.getIdNumber());
         lqw.eq(StringUtils.isNotBlank(bo.getAccountStatus()), PtUserAccount::getAccountStatus, bo.getAccountStatus());
         lqw.eq(StringUtils.isNotBlank(bo.getFreezeStatus()), PtUserAccount::getFreezeStatus, bo.getFreezeStatus());
@@ -178,12 +180,12 @@ public class PtUserAccountServiceImpl implements IPtUserAccountService {
         lqw.eq(bo.getLifespan() != null, PtUserAccount::getLifespan, bo.getLifespan());
         lqw.eq(bo.getUserAttr() != null, PtUserAccount::getUserAttr, bo.getUserAttr());
         lqw.eq(StringUtils.isNotBlank(bo.getPhoto()), PtUserAccount::getPhoto, bo.getPhoto());
-        lqw.eq(StringUtils.isNotBlank(bo.getFormation()), PtUserAccount::getFormation, bo.getFormation());
-        lqw.eq(StringUtils.isNotBlank(bo.getHidden()), PtUserAccount::getHidden, bo.getHidden());
+        // lqw.eq(StringUtils.isNotBlank(bo.getFormation()), PtUserAccount::getFormation, bo.getFormation());
+        // lqw.eq(StringUtils.isNotBlank(bo.getHidden()), PtUserAccount::getHidden, bo.getHidden());
         lqw.eq(StringUtils.isNotBlank(bo.getOtherId()), PtUserAccount::getOtherId, bo.getOtherId());
         lqw.eq(StringUtils.isNotBlank(bo.getUserState()), PtUserAccount::getUserState, bo.getUserState());
         lqw.eq(StringUtils.isNotBlank(bo.getStatus()), PtUserAccount::getStatus, bo.getStatus());
-        lqw.eq(StringUtils.isNotBlank(bo.getUserType()), PtUserAccount::getUserType, bo.getUserType());
+        // lqw.eq(StringUtils.isNotBlank(bo.getUserType()), PtUserAccount::getUserType, bo.getUserType());
         return lqw;
     }
 
@@ -554,6 +556,45 @@ public class PtUserAccountServiceImpl implements IPtUserAccountService {
     public YcTraineeVo selectTraineeByBo(PtUserAccountBo bo, Date doingDate) {
         return baseMapper.selectTraineeByBo(bo, doingDate);
     }
+    /**
+     * 删除指定部门下的一卡通账户信息
+     * @param deptId 部门Id
+     * @param operatorId 操作员Id
+     * @return 删除结果
+     */
+    @Override
+    public int deleteByDeptId(Long deptId, Long operatorId) {
+        LambdaUpdateWrapper<PtUserAccount> luw = new LambdaUpdateWrapper<PtUserAccount>().set(PtUserAccount::getDelFlag, DefaultConstants.DELETED)
+                                               .set(PtUserAccount::getUpdateBy, operatorId)
+                                               .eq(PtUserAccount::getDeptId, deptId);
+        return baseMapper.update(null, luw);
+    }
+    /**
+     * 根据第三方Id删除人员账户信息
+     *
+     * @param userId     第三方人员Id
+     * @param deptId     第三方部门Id
+     * @param operatorId 操作员Id
+     * @return 操作成功与否
+     */
+    @Override
+    public int delByUserAndDeptId(Long userId, Long deptId, Long operatorId) {
+        PtUserAccountBo bo = new PtUserAccountBo();
+        bo.setUserId(userId);
+        bo.setDeptId(deptId);
+        LambdaQueryWrapper<PtUserAccount> lqw = this.buildQueryWrapper(bo);
+        PtUserAccountVo vo = baseMapper.selectVoOne(lqw);
+        if (ObjectUtil.isNotEmpty(vo)) {
+            // 如果存在账户信息,则先注销卡片
+            ptCardService.cancelCard(userId, operatorId);
+            LambdaUpdateWrapper<PtUserAccount> luw = new LambdaUpdateWrapper<PtUserAccount>().set(PtUserAccount::getDelFlag, DefaultConstants.DELETED)
+                                                         .set(PtUserAccount::getUpdateBy, operatorId)
+                                                         .eq(PtUserAccount::getDeptId, deptId)
+                                                         .eq(PtUserAccount::getDeptId, deptId);
+            return baseMapper.update(null, luw);
+        }
+        return 0;
+    }
 
     public static void downloadPicture(String urlList, String name, String userNumb) {
         URL url = null;

+ 11 - 5
ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/dubbo/RemoteGuestServiceImpl.java

@@ -11,14 +11,9 @@ import org.dromara.common.json.utils.JsonUtils;
 import org.dromara.hotel.api.domain.bo.RemoteGuestBo;
 import org.dromara.hotel.api.domain.vo.RemoteGuestVo;
 import org.dromara.hotel.api.service.RemoteGuestService;
-import org.dromara.hotel.domain.KfGuestTeamR;
 import org.dromara.hotel.domain.bo.KfGuestBo;
-import org.dromara.hotel.domain.bo.KfGuestTeamRBo;
-import org.dromara.hotel.domain.bo.KfTeamBo;
 import org.dromara.hotel.domain.vo.KfGuestVo;
 import org.dromara.hotel.service.IKfGuestService;
-import org.dromara.hotel.service.IKfGuestTeamRService;
-import org.dromara.hotel.service.IKfTeamService;
 import org.springframework.stereotype.Service;
 
 /**
@@ -102,4 +97,15 @@ public class RemoteGuestServiceImpl implements RemoteGuestService {
             return R.fail("获取客人信息失败");
         }
     }
+    /**
+     * 删除客人
+     * @param userId 客人Id
+     * @param deptId 团客Id
+     * @param operatorId 操作员Id
+     * @return 删除结果
+     */
+    @Override
+    public Boolean delByUserAndDeptId(Long userId, Long deptId, Long operatorId) {
+        return kfGuestService.delByUserAndDeptId(userId, deptId, operatorId);
+    }
 }

+ 8 - 0
ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/service/IKfGuestService.java

@@ -85,4 +85,12 @@ public interface IKfGuestService {
      * @return 客人信息
      */
     KfGuestVo selectGuestByBo(KfGuestBo bo);
+    /**
+     * 删除客人
+     * @param userId 客人Id
+     * @param deptId 团客Id
+     * @param operatorId 操作员Id
+     * @return 删除结果
+     */
+    Boolean delByUserAndDeptId(Long userId, Long deptId, Long operatorId);
 }

+ 9 - 1
ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/service/IKfGuestTeamRService.java

@@ -4,7 +4,6 @@ import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.hotel.domain.bo.KfGuestTeamRBo;
 import org.dromara.hotel.domain.vo.KfGuestTeamRVo;
-import org.dromara.hotel.domain.vo.KfGuestVo;
 
 import java.util.Collection;
 import java.util.List;
@@ -87,4 +86,13 @@ public interface IKfGuestTeamRService {
      * @return 更新结果
      */
     Boolean setGuestCheckInStatus(Long guestId, Long teamId);
+
+    /**
+     * 删除团客关系
+     * @param userId 客人Id
+     * @param deptId 团客Id
+     * @param operatorId 操作员
+     * @return 操作结果
+     */
+    Boolean delByUserAndDeptId(Long userId, Long deptId, Long operatorId);
 }

+ 11 - 0
ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/service/impl/KfGuestServiceImpl.java

@@ -229,6 +229,17 @@ public class KfGuestServiceImpl implements IKfGuestService {
         LambdaQueryWrapper<KfGuest> lqw = this.buildQueryWrapper(bo);
         return baseMapper.selectVoOne(lqw, KfGuestVo.class);
     }
+    /**
+     * 删除客人
+     * @param userId 客人Id
+     * @param deptId 团客Id
+     * @param operatorId 操作员Id
+     * @return 删除结果
+     */
+    @Override
+    public Boolean delByUserAndDeptId(Long userId, Long deptId, Long operatorId) {
+        return guestTeamRService.delByUserAndDeptId(userId, deptId, operatorId);
+    }
 
     /**
      * 生成客人与团客对应关系

+ 28 - 10
ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/service/impl/KfGuestTeamRServiceImpl.java

@@ -1,26 +1,26 @@
 package org.dromara.hotel.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.constant.DefaultConstants;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StringUtils;
-import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.common.mybatis.core.page.PageQuery;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import lombok.RequiredArgsConstructor;
-import org.dromara.hotel.domain.vo.KfGuestVo;
-import org.springframework.stereotype.Service;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.hotel.domain.KfGuestTeamR;
 import org.dromara.hotel.domain.bo.KfGuestTeamRBo;
 import org.dromara.hotel.domain.vo.KfGuestTeamRVo;
-import org.dromara.hotel.domain.KfGuestTeamR;
 import org.dromara.hotel.mapper.KfGuestTeamRMapper;
 import org.dromara.hotel.service.IKfGuestTeamRService;
+import org.springframework.stereotype.Service;
 
+import java.util.Collection;
 import java.util.List;
 import java.util.Map;
-import java.util.Collection;
 
 /**
  * 客人客团关系Service业务层处理
@@ -186,4 +186,22 @@ public class KfGuestTeamRServiceImpl implements IKfGuestTeamRService {
 
         return baseMapper.update(null,luq)>0;
     }
+
+    /**
+     * 删除团客关系
+     * @param userId 客人Id
+     * @param deptId 团客Id
+     * @param operatorId 操作员
+     * @return 操作结果
+     */
+    @Override
+    public Boolean delByUserAndDeptId(Long userId, Long deptId, Long operatorId) {
+        LambdaUpdateWrapper<KfGuestTeamR> luq = new LambdaUpdateWrapper<>();
+        luq.set(KfGuestTeamR::getDelFlag, DefaultConstants.DELETED);
+        luq.set(KfGuestTeamR::getUpdateBy, operatorId);
+        luq.eq(KfGuestTeamR::getGuestId, userId);
+        luq.eq(KfGuestTeamR::getTeamId, deptId);
+
+        return baseMapper.update(null,luq)>=0;
+    }
 }

+ 2 - 3
ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/service/impl/KfTeamServiceImpl.java

@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.constant.DefaultConstants;
 import org.dromara.common.core.constant.HotelBusinessConstants;
 import org.dromara.common.core.domain.R;
 import org.dromara.common.core.utils.MapstructUtils;
@@ -17,12 +18,10 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.hotel.domain.KfGuest;
 import org.dromara.hotel.domain.KfGuestTeamR;
 import org.dromara.hotel.domain.KfTeam;
-import org.dromara.hotel.domain.bo.KfGuestBo;
 import org.dromara.hotel.domain.bo.KfGuestTeamRBo;
 import org.dromara.hotel.domain.bo.KfTeamBo;
 import org.dromara.hotel.domain.vo.KfGuestTeamRVo;
 import org.dromara.hotel.domain.vo.KfTeamVo;
-import org.dromara.hotel.mapper.KfGuestMapper;
 import org.dromara.hotel.mapper.KfGuestTeamRMapper;
 import org.dromara.hotel.mapper.KfTeamMapper;
 import org.dromara.hotel.service.IKfGuestService;
@@ -249,7 +248,7 @@ public class KfTeamServiceImpl implements IKfTeamService {
     @Override
     public Boolean deleteWithOtherId(String otherId, Long operatorId) {
         LambdaUpdateWrapper<KfTeam> luw = new LambdaUpdateWrapper<>();
-        luw.set(KfTeam::getDelFlag, "2");
+        luw.set(KfTeam::getDelFlag, DefaultConstants.DELETED);
         luw.set(KfTeam::getUpdateBy, operatorId);
         luw.eq(KfTeam::getOtherId, otherId);
         return baseMapper.update(null, luw) > 0;

+ 13 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteDeptServiceImpl.java

@@ -147,6 +147,19 @@ public class RemoteDeptServiceImpl implements RemoteDeptService {
         int count = sysDeptService.deleteDeptByOtherId(otherId);
         return count > 0 ? R.ok() : R.fail(message);
     }
+    /**
+     * 根据第三方对接的唯一标识符删除部门
+     *
+     * @param otherId 第三方对接后的唯一标识符
+     * @param operatorId 操作员Id
+     * @return 删除结果
+     */
+    @Override
+    public R<Object> deleteDeptByOtherId(String otherId, Long operatorId) {
+        String message = MessageFormat.format("[删除部门失败]-[部门标识Id:{0}]", otherId);
+        int count = sysDeptService.deleteDeptByOtherId(otherId, operatorId);
+        return count > 0 ? R.ok() : R.fail(message);
+    }
 
     /**
      * 根据父节点Id和名称查询部门

+ 12 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteUserServiceImpl.java

@@ -393,6 +393,18 @@ public class RemoteUserServiceImpl implements RemoteUserService {
         SysUserVo vo = userService.selectUserById(userId);
         return BeanUtil.copyProperties(vo, RemoteUserVo.class);
     }
+    /**
+     * 根据第三方Id删除人员信息
+     *
+     * @param userId     第三方人员Id
+     * @param deptId     第三方部门Id
+     * @param operatorId 操作员Id
+     * @return 操作成功与否
+     */
+    @Override
+    public Boolean delByUserAndDeptId(Long userId, Long deptId, Long operatorId) {
+        return userService.delByUserAndDeptId(userId, deptId, operatorId);
+    }
 
     private void setUserDept(SysUserBo bo, RemoteUserBo remoteBo){
         List<UserDeptBo> userDeptBoList = new ArrayList<>();

+ 0 - 10
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysUserMapper.java

@@ -4,8 +4,6 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Param;
-import org.apache.ibatis.annotations.ResultType;
-import org.apache.ibatis.annotations.Select;
 import org.dromara.common.mybatis.annotation.DataColumn;
 import org.dromara.common.mybatis.annotation.DataPermission;
 import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
@@ -76,12 +74,4 @@ public interface SysUserMapper extends BaseMapperPlus<SysUser, SysUserVo> {
         @DataColumn(key = "userName", value = "user_id")
     })
     long countUserById(Long userId);
-
-    @Override
-    @DataPermission({
-        @DataColumn(key = "deptName", value = "dept_id"),
-        @DataColumn(key = "userName", value = "user_id")
-    })
-    int update(@Param(Constants.ENTITY) SysUser user, @Param(Constants.WRAPPER) Wrapper<SysUser> updateWrapper);
-
 }

+ 9 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDeptService.java

@@ -180,6 +180,15 @@ public interface ISysDeptService {
      */
     int deleteDeptByOtherId(String otherId);
 
+    /**
+     * 删除部门管理信息
+     *
+     * @param otherId 部门ID
+     * @param operatorId 操作员Id
+     * @return 结果
+     */
+    int deleteDeptByOtherId(String otherId,Long operatorId);
+
     /**
      * 查询指定时间的进行中的班级
      * @param doingDate 指定时间

+ 17 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java

@@ -288,4 +288,21 @@ public interface ISysUserService {
      * @return 用户信息
      */
     SysUserVo selectUserVoByUserName(String userName);
+
+    /**
+     * 删除指定部门下的人员信息
+     * @param deptId 部门Id
+     * @param operatorId 操作员Id
+     * @return 删除结果
+     */
+    int deleteByDeptId(Long deptId, Long operatorId);
+    /**
+     * 根据第三方Id删除人员信息
+     *
+     * @param userId     第三方人员Id
+     * @param deptId     第三方部门Id
+     * @param operatorId 操作员Id
+     * @return 操作成功与否
+     */
+    Boolean delByUserAndDeptId(Long userId, Long deptId, Long operatorId);
 }

+ 16 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/IUserDeptService.java

@@ -75,5 +75,21 @@ public interface IUserDeptService {
     Boolean deleteByUserIds(Collection<Long> userIds);
 
     Boolean setCheckInStatus(Long deptId, Long userId);
+    /**
+     * 删除指定部门和人员绑定关系
+     * @param deptId 部门Id
+     * @param operatorId 操作员Id
+     * @return 删除结果
+     */
+    int deleteByDeptId(Long deptId, Long operatorId);
+
+    /**
+     * 删除指定部门和人员的绑定关系
+     * @param userId 人员Id
+     * @param deptId 部门Id
+     * @param operatorId 操作员Id
+     * @return 操作结果
+     */
+    int delByUserAndDeptId(Long userId, Long deptId, Long operatorId);
 
 }

+ 28 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java

@@ -32,6 +32,7 @@ import org.dromara.system.mapper.SysRoleMapper;
 import org.dromara.system.mapper.SysUserMapper;
 import org.dromara.system.mq.PushKafkaData;
 import org.dromara.system.service.ISysDeptService;
+import org.dromara.system.service.ISysUserService;
 import org.dromara.system.service.IUserDeptService;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.stereotype.Service;
@@ -52,6 +53,7 @@ public class SysDeptServiceImpl implements ISysDeptService {
     private final SysDeptMapper baseMapper;
     private final SysRoleMapper roleMapper;
     private final SysUserMapper userMapper;
+    private final ISysUserService sysUserService;
     private final IUserDeptService userDeptService;
     private final PushKafkaData kafkaNormalProducer;
 
@@ -321,7 +323,7 @@ public class SysDeptServiceImpl implements ISysDeptService {
             // 如果该部门是启用状态,则启用该部门的所有上级部门
             updateParentDeptStatusNormal(dept);
         }
-        //sendCloudConsume(baseMapper.selectVoById(dept.getDeptId()));
+        // sendCloudConsume(baseMapper.selectVoById(dept.getDeptId()));
         SysDeptVo vo = baseMapper.selectVoById(bo.getDeptId());
         kafkaNormalProducer.sendKafkaMessage(KafkaTopicConstants.SYNC_DATA_TOPIC, EventTypeConstants.DEPT, EventSenderEnum.SYSTEM.code(), vo);
         return result;
@@ -425,6 +427,31 @@ public class SysDeptServiceImpl implements ISysDeptService {
         return baseMapper.deleteDeptByOtherId(otherId, new Date());
     }
 
+    /**
+     * 删除部门管理信息
+     *
+     * @param otherId    部门ID
+     * @param operatorId 操作员Id
+     * @return 结果
+     */
+    @Override
+    public int deleteDeptByOtherId(String otherId, Long operatorId) {
+        SysDeptVo vo = this.selectVoByOtherId(otherId);
+        if (ObjectUtil.isNotEmpty(vo)) {
+            // 删除部门人员信息
+            sysUserService.deleteByDeptId(vo.getDeptId(), operatorId);
+            // 删除部门信息
+            LambdaUpdateWrapper<SysDept> luw = new LambdaUpdateWrapper<>();
+            luw.set(SysDept::getUpdateBy, operatorId);
+            luw.set(SysDept::getDelFlag, "2");
+
+            luw.eq(SysDept::getOtherId, otherId);
+
+            return baseMapper.update(null, luw);
+        }
+        return 0;
+    }
+
     /**
      * 查询指定时间的进行中的班级
      *

+ 48 - 5
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java

@@ -19,10 +19,7 @@ import org.dromara.backstage.api.RemotePtParameterService;
 import org.dromara.backstage.api.RemoteUserAccountService;
 import org.dromara.backstage.api.domain.bo.RemoteUserAccountBo;
 import org.dromara.backstage.api.domain.vo.RemoteUserAccountVo;
-import org.dromara.common.core.constant.CacheNames;
-import org.dromara.common.core.constant.Constants;
-import org.dromara.common.core.constant.HttpStatus;
-import org.dromara.common.core.constant.UserConstants;
+import org.dromara.common.core.constant.*;
 import org.dromara.common.core.domain.R;
 import org.dromara.common.core.exception.ServiceException;
 import org.dromara.common.core.exception.user.UserException;
@@ -729,12 +726,58 @@ public class SysUserServiceImpl implements ISysUserService {
      * @param userName 账号
      * @return 用户信息
      */
-
     @Override
     public SysUserVo selectUserVoByUserName(String userName) {
         return baseMapper.selectVoOne(new LambdaQueryWrapper<SysUser>()
             .eq(SysUser::getUserName, userName));
     }
+    /**
+     * 删除指定部门下的人员信息
+     * @param deptId 部门Id
+     * @param operatorId 操作员Id
+     * @return 删除结果
+     */
+    @Override
+    public int deleteByDeptId(Long deptId, Long operatorId) {
+        // 删除部门下的一卡通账户信息
+        remoteUserAccountService.deleteByDeptId(deptId, operatorId);
+        // 删除部门下的人员部门对应关系
+        userDeptService.deleteByDeptId(deptId, operatorId);
+        // 删除用户表中该部门对应的人员
+        LambdaUpdateWrapper<SysUser> luw = new LambdaUpdateWrapper<SysUser>().set(SysUser::getDelFlag, DefaultConstants.DELETED)
+                                               .set(SysUser::getUpdateBy, operatorId)
+                                               .eq(SysUser::getDeptId, deptId);
+        return baseMapper.update(null, luw);
+    }
+    /**
+     * 根据第三方Id删除人员信息
+     *
+     * @param userId     第三方人员Id
+     * @param deptId     第三方部门Id
+     * @param operatorId 操作员Id
+     * @return 操作成功与否
+     */
+    @Override
+    public Boolean delByUserAndDeptId(Long userId, Long deptId, Long operatorId) {
+
+        int count = remoteUserAccountService.delByUserAndDeptId(userId, deptId, operatorId);
+        if (count < 0) {
+            return false;
+        }
+        // 删除部门下的人员部门对应关系
+        count = userDeptService.delByUserAndDeptId(userId,deptId, operatorId);
+        if (count < 0) {
+            return false;
+        }
+        // 删除用户表中该部门对应的人员
+        LambdaUpdateWrapper<SysUser> luw = new LambdaUpdateWrapper<SysUser>().set(SysUser::getDelFlag, DefaultConstants.DELETED)
+                                               .set(SysUser::getUpdateBy, operatorId)
+                                               .eq(SysUser::getDeptId, deptId)
+                                               .eq(SysUser::getUserId,userId);
+        count = baseMapper.update(null, luw);
+
+        return count>=0;
+    }
 
     private void insertUserDept(SysUserBo bo, List<UserDeptBo> userDeptBoList) {
         // 将已有的人员部门关系设置成非主部门

+ 55 - 19
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/UserDeptServiceImpl.java

@@ -42,7 +42,7 @@ public class UserDeptServiceImpl implements IUserDeptService {
      * @return 用户部门
      */
     @Override
-    public UserDeptVo queryById(Long userDeptId){
+    public UserDeptVo queryById(Long userDeptId) {
         return baseMapper.selectVoById(userDeptId);
     }
 
@@ -87,17 +87,17 @@ public class UserDeptServiceImpl implements IUserDeptService {
         return lqw;
     }
 
-    private QueryWrapper<UserDept> buildQueryWrapper(UserDeptBo bo,String tableAlias) {
+    private QueryWrapper<UserDept> buildQueryWrapper(UserDeptBo bo, String tableAlias) {
         QueryWrapper<UserDept> lqw = new QueryWrapper<>();
         String columnPrefix = "";
-        if(StringUtils.isNotBlank(tableAlias)){
+        if (StringUtils.isNotBlank(tableAlias)) {
             columnPrefix = tableAlias + ".";
         }
-        lqw.eq(StringUtils.isNotBlank(bo.getMainDept()), columnPrefix+"main_dept", bo.getMainDept());
-        lqw.eq(StringUtils.isNotBlank(bo.getCheckStatus()), columnPrefix+"check_status", bo.getCheckStatus());
-        lqw.eq(bo.getCheckDate() != null, columnPrefix+"check_date", bo.getCheckDate());
-        lqw.eq(StringUtils.isNotBlank(bo.getPayStatus()), columnPrefix+"pay_status", bo.getPayStatus());
-        lqw.eq(bo.getPayDate() != null, columnPrefix+"pay_date", bo.getPayDate());
+        lqw.eq(StringUtils.isNotBlank(bo.getMainDept()), columnPrefix + "main_dept", bo.getMainDept());
+        lqw.eq(StringUtils.isNotBlank(bo.getCheckStatus()), columnPrefix + "check_status", bo.getCheckStatus());
+        lqw.eq(bo.getCheckDate() != null, columnPrefix + "check_date", bo.getCheckDate());
+        lqw.eq(StringUtils.isNotBlank(bo.getPayStatus()), columnPrefix + "pay_status", bo.getPayStatus());
+        lqw.eq(bo.getPayDate() != null, columnPrefix + "pay_date", bo.getPayDate());
         return lqw;
     }
 
@@ -134,8 +134,8 @@ public class UserDeptServiceImpl implements IUserDeptService {
     /**
      * 保存前的数据校验
      */
-    private void validEntityBeforeSave(UserDept entity){
-        //TODO 做一些数据校验,如唯一约束
+    private void validEntityBeforeSave(UserDept entity) {
+        // TODO 做一些数据校验,如唯一约束
 
     }
 
@@ -148,8 +148,8 @@ public class UserDeptServiceImpl implements IUserDeptService {
      */
     @Override
     public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
-        if(isValid){
-            //TODO 做一些业务上的校验,判断是否需要校验
+        if (isValid) {
+            // TODO 做一些业务上的校验,判断是否需要校验
         }
         return baseMapper.deleteByIds(ids) > 0;
     }
@@ -166,14 +166,14 @@ public class UserDeptServiceImpl implements IUserDeptService {
     public Boolean setUserDeptPost(UserDeptBo bo) {
         UserDept entity = MapstructUtils.convert(bo, UserDept.class);
         LambdaQueryWrapper<UserDept> lqw = new LambdaQueryWrapper<UserDept>()
-            .eq(UserDept::getUserId,bo.getUserId())
-            .eq(UserDept::getPostId, bo.getPostId())
-            .eq(UserDept::getDeptId, bo.getDeptId());
+                                               .eq(UserDept::getUserId, bo.getUserId())
+                                               .eq(UserDept::getPostId, bo.getPostId())
+                                               .eq(UserDept::getDeptId, bo.getDeptId());
 
         UserDeptVo vo = baseMapper.selectVoOne(lqw);
-        if(ObjectUtil.isEmpty(vo)){
+        if (ObjectUtil.isEmpty(vo)) {
             return baseMapper.insert(entity) > 0;
-        } else{
+        } else {
             if (entity != null) {
                 entity.setUserDeptId(vo.getUserDeptId());
             }
@@ -190,8 +190,8 @@ public class UserDeptServiceImpl implements IUserDeptService {
     @Override
     public Boolean deleteByUserIds(Collection<Long> userIds) {
         return baseMapper.delete(new LambdaQueryWrapper<UserDept>()
-            .in(UserDept::getUserId, userIds)
-            .eq(UserDept::getMainDept, 'N'))>0;
+                                     .in(UserDept::getUserId, userIds)
+                                     .eq(UserDept::getMainDept, 'N')) > 0;
     }
 
     @Override
@@ -206,4 +206,40 @@ public class UserDeptServiceImpl implements IUserDeptService {
 
         return baseMapper.update(null, luw) > 0;
     }
+
+    /**
+     * 删除指定部门下的人员部门信息
+     *
+     * @param deptId     部门Id
+     * @param operatorId 操作员Id
+     * @return 删除结果
+     */
+    @Override
+    public int deleteByDeptId(Long deptId, Long operatorId) {
+        LambdaUpdateWrapper<UserDept> luw = new LambdaUpdateWrapper<UserDept>().set(UserDept::getDelFlag, "2")
+                                                .set(UserDept::getMainDept, "N")
+                                                .set(UserDept::getUpdateBy, operatorId)
+                                                .eq(UserDept::getDeptId, deptId);
+
+
+        return baseMapper.update(null, luw);
+    }
+    /**
+     * 删除指定部门和人员的绑定关系
+     * @param userId 人员Id
+     * @param deptId 部门Id
+     * @param operatorId 操作员Id
+     * @return 操作结果
+     */
+    @Override
+    public int delByUserAndDeptId(Long userId, Long deptId, Long operatorId) {
+        LambdaUpdateWrapper<UserDept> luw = new LambdaUpdateWrapper<UserDept>().set(UserDept::getDelFlag, "2")
+                                                .set(UserDept::getMainDept, "N")
+                                                .set(UserDept::getUpdateBy, operatorId)
+                                                .eq(UserDept::getDeptId, deptId)
+                                                .eq(UserDept::getUserId, userId);
+
+
+        return baseMapper.update(null, luw);
+    }
 }

+ 10 - 0
ruoyi-server/ruoyi-server-base/src/main/java/org/dromara/server/base/service/dept/SyncRemoteDeptService.java

@@ -95,6 +95,16 @@ public class SyncRemoteDeptService {
     public R<Object> deleteDeptByOtherId(String otherId) {
         return remoteDeptService.deleteDeptByOtherId(otherId);
     }
+    /**
+     * 根据第三方对接的唯一标识符删除部门
+     *
+     * @param otherId 第三方对接后的唯一标识符
+     * @param operatorId 操作员Id
+     * @return 删除结果
+     */
+    public R<Object> deleteDeptByOtherId(String otherId,Long operatorId) {
+        return remoteDeptService.deleteDeptByOtherId(otherId,operatorId);
+    }
 
     /**
      * 查询团客信息

+ 1 - 1
ruoyi-server/ruoyi-server-base/src/main/java/org/dromara/server/base/service/dept/strategy/impl/TrainClassStrategyImpl.java

@@ -71,7 +71,7 @@ public class TrainClassStrategyImpl implements ISyncDeptStrategy {
         List<String> syncDelMessage = new ArrayList<>();
         List<String> syncDelTeamMessage = new ArrayList<>();
         deptList.forEach(resourceDept -> {
-            R<Object>result = syncRemoteDeptService.deleteDeptByOtherId(resourceDept.getDept_id());
+            R<Object>result = syncRemoteDeptService.deleteDeptByOtherId(resourceDept.getDept_id(),resourceDept.getOperatorId());
 
             if (result.getCode() == R.SUCCESS) {
                 syncDelMessage.add(MessageFormat.format("[同步删除培训班成功]-[{0}]", JsonUtils.toJsonString(resourceDept)));

+ 72 - 5
ruoyi-server/ruoyi-server-base/src/main/java/org/dromara/server/base/service/user/SyncRemoteUserService.java

@@ -12,6 +12,7 @@ import org.apache.dubbo.config.annotation.DubboReference;
 import org.dromara.common.core.constant.DefaultConstants;
 import org.dromara.common.core.domain.R;
 import org.dromara.common.core.domain.model.ErrorInfo;
+import org.dromara.common.core.enums.ResultCodeEnum;
 import org.dromara.common.redis.utils.RedisUtils;
 import org.dromara.hotel.api.domain.bo.RemoteGuestBo;
 import org.dromara.hotel.api.domain.bo.RemoteTeamBo;
@@ -91,6 +92,39 @@ public class SyncRemoteUserService {
         }
     }
 
+    /**
+     * 单个人员同步处理(删除)
+     *
+     * @param person 人员
+     * @return 结果
+     */
+    public R<ErrorInfo> syncDelPeron(ResourcePerson person) {
+        try {
+            String otherId = person.getUserId();
+            String otherDeptId = person.getDeptId();
+            Long operatorId = person.getOperatorId();
+
+            RemoteUserVo remoteUserVo = remoteUserService.selectUserVoByOtherId(otherId);
+            if (ObjectUtil.isEmpty(remoteUserVo)) {
+                log.warn("[不存在对应的人员Id]-[{}]", otherId);
+                return R.ok();
+            }
+            RemoteDeptVo remoteDeptVo = remoteDeptService.selectDeptByOtherId(otherDeptId,person.getTenantId());
+            if (ObjectUtil.isEmpty(remoteUserVo)) {
+                log.warn("[不存在对应的部门Id]-[{}]", otherDeptId);
+                return R.ok();
+            }
+            // 删除人员
+            if(remoteUserService.delByUserAndDeptId(remoteUserVo.getUserId(), remoteDeptVo.getDeptId(), operatorId)){
+                return R.ok();
+            }
+            return R.fail();
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            return R.fail(new ErrorInfo(ResultCodeEnum.INTERFACE_OUTER_INVOKE_ERROR));
+        }
+    }
+
     /**
      * 获取租户配置的岗位清单
      *
@@ -223,7 +257,6 @@ public class SyncRemoteUserService {
      */
     private String getUserIdNumber(String sourceIdNumb) {
         return ObjectUtil.isEmpty(sourceIdNumb) ? null : EncryptorUtil.decode(sourceIdNumb);
-        //return ObjectUtil.isEmpty(sourceIdNumb) ? null : sourceIdNumb;
     }
 
     /**
@@ -328,11 +361,11 @@ public class SyncRemoteUserService {
         return remoteUserDeptBos;
     }
 
-
-    //region 同步客人信息
+    // region 同步客人信息
 
     /**
      * 同步客人信息
+     *
      * @param person 源客人信息
      * @return 同步结果
      */
@@ -356,10 +389,43 @@ public class SyncRemoteUserService {
             return R.fail(e.getMessage());
         }
     }
+    /**
+     * 同步删除客人信息
+     *
+     * @param person 源客人信息
+     * @return 同步结果
+     */
+    public R<ErrorInfo> syncDeleteGuest(ResourcePerson person) {
+        String otherId = person.getUserId();
+        String otherTeamId = person.getDeptId();
+        Long operatorId = person.getOperatorId();
+        try {
+            R<RemoteGuestVo> result = remoteGuestService.selectGuestByOtherId(otherId);
+            if (R.isError(result)) {
+                log.warn("[不存在对应的客人Id]-[{}]", otherId);
+                return R.ok();
+            }
+            RemoteTeamBo remoteTeamBo = new RemoteTeamBo().setOtherId(otherTeamId).setTenantId(person.getTenantId());
+            R<RemoteTeamVo> getTeamResult = remoteTeamService.selectTeamByBo(remoteTeamBo);
+            if (R.isError(getTeamResult)) {
+                log.warn("[不存在对应的团客Id]-[{}]", otherTeamId);
+                return R.ok();
+            }
+            // 删除客人
+            if(remoteGuestService.delByUserAndDeptId(result.getData().getId(), getTeamResult.getData().getId(), operatorId)){
+                return R.ok();
+            }
+            return R.fail();
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            return R.fail(e.getMessage());
+        }
+    }
 
     /**
      * 组装写库的客人信息
-     * @param person 源
+     *
+     * @param person        源
      * @param remoteGuestVo 客人信息
      * @return 写库客人业务对象
      */
@@ -387,6 +453,7 @@ public class SyncRemoteUserService {
 
     /**
      * 获取客人与团客对应的团客Id
+     *
      * @param person 源客人信息
      * @return 团客Id
      */
@@ -402,5 +469,5 @@ public class SyncRemoteUserService {
 
         return 0L;
     }
-    //endregion
+    // endregion
 }

+ 7 - 0
ruoyi-server/ruoyi-server-base/src/main/java/org/dromara/server/base/service/user/strategy/ISyncUserStrategy.java

@@ -22,4 +22,11 @@ public interface ISyncUserStrategy {
      * @return 同步结果
      */
     boolean syncUser(List<ResourcePerson> persons);
+
+    /**
+     * 人员同步删除处理
+     * @param persons 源人员列表
+     * @return 同步结果
+     */
+    boolean syncDelUser(List<ResourcePerson> persons);
 }

+ 9 - 0
ruoyi-server/ruoyi-server-base/src/main/java/org/dromara/server/base/service/user/strategy/SyncUserStrategyContent.java

@@ -35,4 +35,13 @@ public class SyncUserStrategyContent {
     public boolean syncUser(List<ResourcePerson> personList , String syncResource){
         return strategyMap.get(syncResource).syncUser(personList);
     }
+
+    /**
+     * 同步删除处理入口
+     * @param personList 人员数据
+     * @param syncResource 数据来源
+     */
+    public boolean syncDelUser(List<ResourcePerson> personList , String syncResource){
+        return strategyMap.get(syncResource).syncDelUser(personList);
+    }
 }

+ 5 - 0
ruoyi-server/ruoyi-server-base/src/main/java/org/dromara/server/base/service/user/strategy/impl/SyncGraduateStrategyImpl.java

@@ -46,4 +46,9 @@ public class SyncGraduateStrategyImpl implements ISyncUserStrategy {
         syncMessage.forEach(log::info);
         return true;
     }
+
+    @Override
+    public boolean syncDelUser(List<ResourcePerson> persons) {
+        return false;
+    }
 }

+ 5 - 0
ruoyi-server/ruoyi-server-base/src/main/java/org/dromara/server/base/service/user/strategy/impl/SyncTeacherStrategyImpl.java

@@ -46,4 +46,9 @@ public class SyncTeacherStrategyImpl implements ISyncUserStrategy {
         syncMessage.forEach(log::info);
         return true;
     }
+
+    @Override
+    public boolean syncDelUser(List<ResourcePerson> persons) {
+        return false;
+    }
 }

+ 36 - 1
ruoyi-server/ruoyi-server-base/src/main/java/org/dromara/server/base/service/user/strategy/impl/SyncTraineeStrategyImpl.java

@@ -32,6 +32,11 @@ import java.util.List;
 public class SyncTraineeStrategyImpl implements ISyncUserStrategy {
     private final SyncRemoteUserService syncUserService;
 
+    /**
+     * 同步人员(增加、修改)
+     * @param persons 源人员列表
+     * @return 同步结果
+     */
     @Override
     public boolean syncUser(List<ResourcePerson> persons) {
         List<String> syncMessage = new ArrayList<>();
@@ -45,7 +50,7 @@ public class SyncTraineeStrategyImpl implements ISyncUserStrategy {
             }
 
             R<ErrorInfo> resultGuest = syncUserService.syncGuest(person);
-            if(R.isSuccess(resultGuest)){
+            if (R.isSuccess(resultGuest)) {
                 syncGuestMessage.add(MessageFormat.format("[同步团客人员成功]-[{0}]", JsonUtils.toJsonString(person)));
             } else {
                 syncGuestMessage.add(MessageFormat.format("[同步团客人员员失败]-[{0}]-[{1}]", JsonUtils.toJsonString(person), result.getMsg()));
@@ -55,4 +60,34 @@ public class SyncTraineeStrategyImpl implements ISyncUserStrategy {
         syncGuestMessage.forEach(log::info);
         return true;
     }
+
+    /**
+     * 同步人员(删除)
+     * @param persons 源人员列表
+     * @return 同步结果
+     */
+    @Override
+    public boolean syncDelUser(List<ResourcePerson> persons) {
+        List<String> syncDelMessage = new ArrayList<>();
+        List<String> syncDelGuestMessage = new ArrayList<>();
+        persons.forEach(person -> {
+            R<ErrorInfo> result = syncUserService.syncDelPeron(person);
+            if (R.isSuccess(result)) {
+                syncDelMessage.add(MessageFormat.format("[同步删除学员成功]-[{0}]", JsonUtils.toJsonString(person)));
+            } else {
+                syncDelMessage.add(MessageFormat.format("[同步删除学员失败]-[{0}]-[{1}]", JsonUtils.toJsonString(person), result.getMsg()));
+            }
+
+            result = syncUserService.syncDeleteGuest(person);
+            if (R.isSuccess(result)) {
+                syncDelGuestMessage.add(MessageFormat.format("[同步删除客人成功]-[{0}]", JsonUtils.toJsonString(person)));
+            } else {
+                syncDelGuestMessage.add(MessageFormat.format("[同步删除客人失败]-[{0}]-[{1}]", JsonUtils.toJsonString(person), result.getMsg()));
+            }
+        });
+        syncDelMessage.forEach(System.out::println);
+        syncDelGuestMessage.forEach(System.out::println);
+
+        return true;
+    }
 }

+ 42 - 6
ruoyi-server/ruoyi-server-base/src/main/java/org/dromara/server/base/util/TrainUtils.java

@@ -31,7 +31,7 @@ public class TrainUtils {
         defaultConfig = SpringUtils.getBean(DefaultConfig.class);
     }
     /**
-     * 培训班级处理
+     * 培训班级处理,增加和修改
      *
      * @param data 班级数据
      * @return 处理结果
@@ -53,8 +53,8 @@ public class TrainUtils {
         dept.setPlanCount(Integer.valueOf(data.getOrDefault("studentNum", "0").toString()));
         dept.setPayCheck(ObjectUtil.isEmpty(data.get("noPayAllow")) ? "0" : data.get("noPayAllow").toString());
         dept.setOperatorId(DefaultConstants.KAFKA_SYNC_ADMIN);
-        if (ObjectUtil.isNotEmpty(data.get("tenantId"))) {
-            dept.setTenantId(data.get("tenantId").toString());
+        if (ObjectUtil.isNotEmpty(data.get("tenantCode"))) {
+            dept.setTenantId(data.get("tenantCode").toString());
         } else {
             dept.setTenantId(defaultConfig.getTenantId());
         }
@@ -64,7 +64,26 @@ public class TrainUtils {
     }
 
     /**
-     * 处理教学员信息
+     * 培训班处理 删除
+     * @param data 班级数据
+     * @return 处理结果
+     */
+    public static List<ResourceDept> getSycDeleteClass(JSONObject data) {
+        List<ResourceDept> resourceDeptlist = new ArrayList<>();
+        ResourceDept dept = new ResourceDept();
+        dept.setDept_id(data.get("id").toString());
+        dept.setOperatorId(DefaultConstants.KAFKA_SYNC_ADMIN);
+        if (ObjectUtil.isNotEmpty(data.get("tenant_code"))) {
+            dept.setTenantId(data.get("tenant_code").toString());
+        } else {
+            dept.setTenantId(defaultConfig.getTenantId());
+        }
+        resourceDeptlist.add(dept);
+
+        return resourceDeptlist;
+    }
+    /**
+     * 处理教学员信息(增加、修改)
      *
      * @param data 教职工
      * @return 结果
@@ -82,8 +101,8 @@ public class TrainUtils {
         person.setCategory(DefaultConstants.CATEGORY_TRAINEE);
         person.setOperatorId(DefaultConstants.KAFKA_SYNC_ADMIN);
         person.setPostCode(DefaultConstants.TRAINEE_CODE);
-        if (ObjectUtil.isNotEmpty(data.get("tenantId"))) {
-            person.setTenantId(data.get("tenantId").toString());
+        if (ObjectUtil.isNotEmpty(data.get("tenantCode"))) {
+            person.setTenantId(data.get("tenantCode").toString());
         } else {
             person.setTenantId(defaultConfig.getTenantId());
         }
@@ -95,6 +114,23 @@ public class TrainUtils {
         return resourcePersonList;
     }
 
+    public static List<ResourcePerson> getSyncDeleteTrainee(JSONObject data) {
+        List<ResourcePerson> resourcePersonList = new ArrayList<>();
+        ResourcePerson person = new ResourcePerson();
+        person.setUserId(data.getStr("id"));
+        person.setDeptId(data.getStr("classId"));
+        person.setOperatorId(DefaultConstants.KAFKA_SYNC_ADMIN);
+        if (ObjectUtil.isNotEmpty(data.get("tenantCode"))) {
+            person.setTenantId(data.get("tenantCode").toString());
+        } else {
+            person.setTenantId(defaultConfig.getTenantId());
+        }
+
+        resourcePersonList.add(person);
+
+        return resourcePersonList;
+    }
+
     private static List<ResourcePersonDept> getResourcePersonDeptList(JSONObject data){
         JSONObject stuClassObj = data.getJSONObject("trainClassStudent");
         List<ResourcePersonDept> resourcePersonDeptList = new ArrayList<>();

+ 3 - 3
ruoyi-server/ruoyi-server-mqdata/src/main/java/org/dromara/server/mq/event/kafka/impl/cloud/TrainEventStrategyImpl.java

@@ -45,7 +45,7 @@ public class TrainEventStrategyImpl implements IYktEventStrategy {
                 syncDeptStrategyContent.syncDept(resourceDeptlist, SyncResourceConstants.TRAIN_CLASS);
             }
             case EventTypeConstants.TRAIN_CLASS_DEL -> {
-                List<ResourceDept> resourceDeptlist = TrainUtils.getSycClass(JSONUtil.parseObj(msg));
+                List<ResourceDept> resourceDeptlist = TrainUtils.getSycDeleteClass(JSONUtil.parseObj(msg));
                 log.info("[处理教务系统->云端班级删除请求]-[部门信息:{}]", JSONUtil.toJsonStr(resourceDeptlist));
                 syncDeptStrategyContent.syncDelDept(resourceDeptlist, SyncResourceConstants.TRAIN_CLASS);
             }
@@ -60,9 +60,9 @@ public class TrainEventStrategyImpl implements IYktEventStrategy {
                 syncUserStrategyContent.syncUser(resourcePersonList, SyncResourceConstants.TRAINEE);
             }
             case EventTypeConstants.TRAINEE_DEL -> {
-                List<ResourcePerson> resourcePersonList = TrainUtils.getSyncTrainee(JSONUtil.parseObj(msg));
+                List<ResourcePerson> resourcePersonList = TrainUtils.getSyncDeleteTrainee(JSONUtil.parseObj(msg));
                 log.info("[处理教务系统->云端学员删除请求]-[学员信息:{}]", JSONUtil.toJsonStr(resourcePersonList));
-                syncUserStrategyContent.syncUser(resourcePersonList, SyncResourceConstants.TRAINEE);
+                syncUserStrategyContent.syncDelUser(resourcePersonList, SyncResourceConstants.TRAINEE);
             }
         }
     }

+ 47 - 4
ruoyi-server/ruoyi-server-sync/src/main/java/org/dromara/server/sync/controller/SyncTest.java

@@ -6,6 +6,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.dromara.common.core.domain.R;
 import org.dromara.server.base.service.dept.strategy.SyncDeptStrategyContent;
 import org.dromara.server.base.service.user.strategy.SyncUserStrategyContent;
+import org.dromara.server.base.util.EncryptorUtil;
 import org.dromara.server.base.util.GraduateUtils;
 import org.dromara.server.base.util.TeacherUtils;
 import org.dromara.server.base.util.TrainUtils;
@@ -13,10 +14,7 @@ import org.dromara.server.common.constant.SyncResourceConstants;
 import org.dromara.server.common.domain.bo.ResourceDept;
 import org.dromara.server.common.domain.bo.ResourcePerson;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 import java.util.Map;
@@ -52,6 +50,18 @@ public class SyncTest {
         return R.ok();
     }
 
+    /**
+     * 培训班同步测试删除
+     * @return 同步结果
+     * @param data 部门数据
+     */
+    @GetMapping("/sync/train/class/del")
+    public R<Void> syncDelTrainClass(@RequestBody Map<String, Object> data){
+        List<ResourceDept> resourceDeptlist = TrainUtils.getSycDeleteClass(JSONUtil.parseObj(data));
+        syncDeptStrategyContent.syncDelDept(resourceDeptlist, SyncResourceConstants.TRAIN_CLASS);
+
+        return R.ok();
+    }
     /**
      * 培训学员同步测试
      * @param data 学员信息
@@ -66,6 +76,19 @@ public class SyncTest {
         return R.ok();
     }
 
+    /**
+     * 培训学员同步测试
+     * @param data 学员信息
+     * @return 同步结果
+     */
+    @GetMapping("/sync/trainee/del")
+    public R<Void> syncDelTrainee(@RequestBody Map<String, Object> data) {
+        List<ResourcePerson> resourcePersonList = TrainUtils.getSyncDeleteTrainee(JSONUtil.parseObj(data));
+        syncUserStrategyContent.syncDelUser(resourcePersonList, SyncResourceConstants.TRAINEE);
+
+        return R.ok();
+    }
+
     /**
      * 研究生班级同步测试
      * @param data 研究生班级数据
@@ -121,4 +144,24 @@ public class SyncTest {
 
         return R.ok();
     }
+
+    /**
+     * 身份证同步加密测试
+     * @param idNumber 身份证
+     * @return 加密结果
+     */
+    @GetMapping("/sync/encrypt/{idNumber}")
+    public R<String> syncEncrypt(@PathVariable("idNumber") String idNumber) {
+        return R.ok(EncryptorUtil.encrypt(idNumber));
+    }
+
+    /**
+     * 身份证同步解密测试
+     * @param idNumber 加密后的身份证
+     * @return 解密结果
+     */
+    @GetMapping("/sync/decrypt")
+    public R<String> syncDecrypt(@RequestParam("idNumber") String idNumber) {
+        return R.ok(EncryptorUtil.decode(idNumber));
+    }
 }