Эх сурвалжийг харах

feature: 系统管理->用户管理

luoyb 1 жил өмнө
parent
commit
62d2360ccb
15 өөрчлөгдсөн 751 нэмэгдсэн , 37 устгасан
  1. 21 0
      ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/RemotePtParameterService.java
  2. 6 0
      ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/RemoteUserAccountService.java
  3. 28 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/dubbo/RemotePtParameterServiceImpl.java
  4. 12 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/dubbo/RemoteUserAccountServiceImpl.java
  5. 6 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/service/IPtUserAccountService.java
  6. 18 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/service/impl/PtUserAccountServiceImpl.java
  7. 106 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/UserDeptController.java
  8. 79 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/UserDept.java
  9. 76 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/UserDeptBo.java
  10. 73 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/UserDeptVo.java
  11. 15 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/UserDeptMapper.java
  12. 77 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/IUserDeptService.java
  13. 38 35
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java
  14. 194 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/UserDeptServiceImpl.java
  15. 2 2
      ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/UserDeptMapper.xml

+ 21 - 0
ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/RemotePtParameterService.java

@@ -0,0 +1,21 @@
+package org.dromara.backstage.api;
+
+/**
+ * name: RemotePtParameterService
+ * package: org.dromara.backstage.api
+ * description: 系统参数服务
+ * date: 2024-09-12 09:19:50 09:19
+ *
+ * @author luoyibo
+ * @version 0.1
+ * @since JDK 1.8
+ */
+public interface RemotePtParameterService {
+
+    /**
+     * 根据参数健值获取参数值
+     * @param key 参数键值
+     * @return 参数值
+     */
+    String getPtParameterByKey(String key);
+}

+ 6 - 0
ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/RemoteUserAccountService.java

@@ -1,5 +1,7 @@
 package org.dromara.backstage.api;
 
+import org.dromara.backstage.api.domain.bo.RemoteUserAccountBo;
+
 /**
  * name: RemoteUserAccountService
  * package: org.dromara.backstage.api
@@ -19,4 +21,8 @@ public interface RemoteUserAccountService {
      */
     Long queryCardTypeByUserId(Long userId);
 
+    //void insertByBo(RemoteUserAccountBo bo);
+
+    //void openAccount(RemoteUserAccountBo bo);
+
 }

+ 28 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/dubbo/RemotePtParameterServiceImpl.java

@@ -0,0 +1,28 @@
+package org.dromara.backstage.basics.dubbo;
+
+import lombok.RequiredArgsConstructor;
+import org.apache.dubbo.config.annotation.DubboService;
+import org.dromara.backstage.api.RemotePtParameterService;
+import org.dromara.backstage.basics.service.IPtParameterService;
+import org.springframework.stereotype.Service;
+
+/**
+ * name: RemotePtParameterServiceImpl
+ * package: org.dromara.backstage.basics.dubbo
+ * description: 系统参数服务实现
+ * date: 2024-09-12 09:23:26 09:23
+ *
+ * @author luoyibo
+ * @version 0.1
+ * @since JDK 1.8
+ */
+@RequiredArgsConstructor
+@Service
+@DubboService
+public class RemotePtParameterServiceImpl implements RemotePtParameterService {
+    private final IPtParameterService ptParameterService;
+    @Override
+    public String getPtParameterByKey(String key) {
+        return ptParameterService.selectParamByCode(key);
+    }
+}

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

@@ -31,4 +31,16 @@ public class RemoteUserAccountServiceImpl implements RemoteUserAccountService {
     public Long queryCardTypeByUserId(Long userId) {
         return userAccountService.queryById(userId).getCardType();
     }
+
+    //@Override
+    //public void insertByBo(RemoteUserAccountBo bo) {
+    //    PtUserAccountBo ptUserAccountBo = BeanUtil.copyProperties(bo, PtUserAccountBo.class);
+    //    userAccountService.insertByBo(ptUserAccountBo);
+    //}
+
+    //@Override
+    //public void openAccount(RemoteUserAccountBo bo) {
+    //    PtUserAccountBo ptUserAccountBo = BeanUtil.copyProperties(bo, PtUserAccountBo.class);
+    //    userAccountService.openAccount(ptUserAccountBo);
+    //}
 }

+ 6 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/service/IPtUserAccountService.java

@@ -134,6 +134,12 @@ public interface IPtUserAccountService {
      */
     int openAccount(Long[] userIds);
 
+    /**
+     * 开户
+     * @param bo 账户业务对象
+     * @return 开户结果
+     */
+    int openAccount(PtUserAccountBo bo);
     /*
      * 销户
      *

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

@@ -327,6 +327,24 @@ public class PtUserAccountServiceImpl implements IPtUserAccountService {
         }
         return userIds.length;
     }
+    /**
+     * 开户
+     * @param bo 账户业务对象
+     * @return 开户结果
+     */
+    @Override
+    public int openAccount(PtUserAccountBo bo) {
+        PtUserAccount add = MapstructUtils.convert(bo, PtUserAccount.class);
+        validEntityBeforeSave(add);
+        boolean flag = baseMapper.insert(add) > 0;
+        if (flag) {
+            if (add != null) {
+                bo.setUserId(add.getUserId());
+            }
+            bagService.initAccountBag(bo.getUserId());
+        }
+        return 0;
+    }
 
     /*
      * 销户

+ 106 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/UserDeptController.java

@@ -0,0 +1,106 @@
+package org.dromara.system.controller.system;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.system.domain.vo.UserDeptVo;
+import org.dromara.system.domain.bo.UserDeptBo;
+import org.dromara.system.service.IUserDeptService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 用户部门
+ * 前端访问路由地址为:/system/userDept
+ *
+ * @author LionLi
+ * @date 2024-09-11
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/system/userDept")
+public class UserDeptController extends BaseController {
+
+    private final IUserDeptService userDeptService;
+
+    /**
+     * 查询用户部门列表
+     */
+    @SaCheckPermission("system:userDept:list")
+    @GetMapping("/list")
+    public TableDataInfo<UserDeptVo> list(UserDeptBo bo, PageQuery pageQuery) {
+        return userDeptService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 导出用户部门列表
+     */
+    @SaCheckPermission("system:userDept:export")
+    @Log(title = "用户部门", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(UserDeptBo bo, HttpServletResponse response) {
+        List<UserDeptVo> list = userDeptService.queryList(bo);
+        ExcelUtil.exportExcel(list, "用户部门", UserDeptVo.class, response);
+    }
+
+    /**
+     * 获取用户部门详细信息
+     *
+     * @param userDeptId 主键
+     */
+    @SaCheckPermission("system:userDept:query")
+    @GetMapping("/{userDeptId}")
+    public R<UserDeptVo> getInfo(@NotNull(message = "主键不能为空")
+                                     @PathVariable Long userDeptId) {
+        return R.ok(userDeptService.queryById(userDeptId));
+    }
+
+    /**
+     * 新增用户部门
+     */
+    @SaCheckPermission("system:userDept:add")
+    @Log(title = "用户部门", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody UserDeptBo bo) {
+        return toAjax(userDeptService.insertByBo(bo));
+    }
+
+    /**
+     * 修改用户部门
+     */
+    @SaCheckPermission("system:userDept:edit")
+    @Log(title = "用户部门", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody UserDeptBo bo) {
+        return toAjax(userDeptService.updateByBo(bo));
+    }
+
+    /**
+     * 删除用户部门
+     *
+     * @param userDeptIds 主键串
+     */
+    @SaCheckPermission("system:userDept:remove")
+    @Log(title = "用户部门", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{userDeptIds}")
+    public R<Void> remove(@NotEmpty(message = "主键不能为空")
+                          @PathVariable Long[] userDeptIds) {
+        return toAjax(userDeptService.deleteWithValidByIds(List.of(userDeptIds), true));
+    }
+}

+ 79 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/UserDept.java

@@ -0,0 +1,79 @@
+package org.dromara.system.domain;
+
+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;
+
+/**
+ * 用户部门对象 t_user_dept
+ *
+ * @author LionLi
+ * @date 2024-09-11
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("t_user_dept")
+public class UserDept extends TenantEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 用户部门Id,主键
+     */
+    @TableId(value = "user_dept_id")
+    private Long userDeptId;
+
+    /**
+     * 用户Id
+     */
+    private Long userId;
+
+    /**
+     * 部门Id
+     */
+    private Long deptId;
+
+    /**
+     * 岗位Id
+     */
+    private Long postId;
+
+    /**
+     * 是否主部门,见sys_yes_no字典类别
+     */
+    private String mainDept;
+
+    /**
+     * 报到状态,见sys_yes_no字典类别,学员报到专用
+     */
+    private String checkStatus;
+
+    /**
+     * 报到时间,学员报到专用
+     */
+    private Date checkDate;
+
+    /**
+     * 缴费状态,见sys_yes_no字典类别,学员报到专用
+     */
+    private String payStatus;
+
+    /**
+     * 缴费时间,学员报到专用
+     */
+    private Date payDate;
+
+    /**
+     * 删除标志(0-未删除 2-已删除)
+     */
+    @TableLogic
+    private String delFlag;
+
+
+}

+ 76 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/UserDeptBo.java

@@ -0,0 +1,76 @@
+package org.dromara.system.domain.bo;
+
+import org.dromara.system.domain.UserDept;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+/**
+ * 用户部门业务对象 t_user_dept
+ *
+ * @author LionLi
+ * @date 2024-09-11
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = UserDept.class, reverseConvertGenerate = false)
+public class UserDeptBo extends BaseEntity {
+
+    /**
+     * 用户部门Id,主键
+     */
+    @NotNull(message = "用户部门Id,主键不能为空", groups = { EditGroup.class })
+    private Long userDeptId;
+
+    /**
+     * 用户Id
+     */
+    @NotNull(message = "用户Id不能为空", groups = { AddGroup.class, EditGroup.class })
+    private Long userId;
+
+    /**
+     * 部门Id
+     */
+    @NotNull(message = "部门Id不能为空", groups = { AddGroup.class, EditGroup.class })
+    private Long deptId;
+
+    /**
+     * 岗位Id
+     */
+    @NotNull(message = "岗位Id不能为空", groups = { AddGroup.class, EditGroup.class })
+    private Long postId;
+
+    /**
+     * 是否主部门,见sys_yes_no字典类别
+     */
+    @NotBlank(message = "是否主部门,见sys_yes_no字典类别不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String mainDept;
+
+    /**
+     * 报到状态,见sys_yes_no字典类别,学员报到专用
+     */
+    private String checkStatus;
+
+    /**
+     * 报到时间,学员报到专用
+     */
+    private Date checkDate;
+
+    /**
+     * 缴费状态,见sys_yes_no字典类别,学员报到专用
+     */
+    private String payStatus;
+
+    /**
+     * 缴费时间,学员报到专用
+     */
+    private Date payDate;
+
+
+}

+ 73 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/UserDeptVo.java

@@ -0,0 +1,73 @@
+package org.dromara.system.domain.vo;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.dromara.system.domain.UserDept;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 用户部门视图对象 t_user_dept
+ *
+ * @author LionLi
+ * @date 2024-09-11
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = UserDept.class)
+public class UserDeptVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 用户部门Id,主键
+     */
+    @ExcelProperty(value = "用户部门Id,主键")
+    private Long userDeptId;
+
+    /**
+     * 是否主部门,见sys_yes_no字典类别
+     */
+    @ExcelProperty(value = "是否主部门,见sys_yes_no字典类别", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(dictType = "sys_yes_no")
+    private String mainDept;
+
+    /**
+     * 报到状态,见sys_yes_no字典类别,学员报到专用
+     */
+    @ExcelProperty(value = "报到状态,见sys_yes_no字典类别,学员报到专用", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(dictType = "sys_yes_no")
+    private String checkStatus;
+
+    /**
+     * 报到时间,学员报到专用
+     */
+    @ExcelProperty(value = "报到时间,学员报到专用")
+    private Date checkDate;
+
+    /**
+     * 缴费状态,见sys_yes_no字典类别,学员报到专用
+     */
+    @ExcelProperty(value = "缴费状态,见sys_yes_no字典类别,学员报到专用", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(dictType = "sys_yes_no")
+    private String payStatus;
+
+    /**
+     * 缴费时间,学员报到专用
+     */
+    @ExcelProperty(value = "缴费时间,学员报到专用")
+    private Date payDate;
+
+
+}

+ 15 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/UserDeptMapper.java

@@ -0,0 +1,15 @@
+package org.dromara.system.mapper;
+
+import org.dromara.system.domain.UserDept;
+import org.dromara.system.domain.vo.UserDeptVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 用户部门Mapper接口
+ *
+ * @author LionLi
+ * @date 2024-09-11
+ */
+public interface UserDeptMapper extends BaseMapperPlus<UserDept, UserDeptVo> {
+
+}

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

@@ -0,0 +1,77 @@
+package org.dromara.system.service;
+
+import org.dromara.system.domain.vo.UserDeptVo;
+import org.dromara.system.domain.bo.UserDeptBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 用户部门Service接口
+ *
+ * @author LionLi
+ * @date 2024-09-11
+ */
+public interface IUserDeptService {
+
+    /**
+     * 查询用户部门
+     *
+     * @param userDeptId 主键
+     * @return 用户部门
+     */
+    UserDeptVo queryById(Long userDeptId);
+
+    /**
+     * 分页查询用户部门列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 用户部门分页列表
+     */
+    TableDataInfo<UserDeptVo> queryPageList(UserDeptBo bo, PageQuery pageQuery);
+
+    /**
+     * 查询符合条件的用户部门列表
+     *
+     * @param bo 查询条件
+     * @return 用户部门列表
+     */
+    List<UserDeptVo> queryList(UserDeptBo bo);
+
+    /**
+     * 新增用户部门
+     *
+     * @param bo 用户部门
+     * @return 是否新增成功
+     */
+    Boolean insertByBo(UserDeptBo bo);
+
+    /**
+     * 修改用户部门
+     *
+     * @param bo 用户部门
+     * @return 是否修改成功
+     */
+    Boolean updateByBo(UserDeptBo bo);
+
+    /**
+     * 校验并批量删除用户部门信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+
+    Boolean updateMainDeptByUserId(Long userId);
+
+    Boolean setUserDeptPost(UserDeptBo bo);
+
+    Boolean deleteByBo(UserDeptBo bo);
+
+    Boolean deleteByUserIds(Collection<Long> userIds);
+
+}

+ 38 - 35
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java

@@ -1,5 +1,6 @@
 package org.dromara.system.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.convert.Convert;
 import cn.hutool.core.util.ArrayUtil;
@@ -12,6 +13,10 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.dromara.backstage.api.RemotePtParameterService;
+import org.dromara.backstage.api.RemoteUserAccountService;
+import org.dromara.backstage.api.domain.bo.RemoteUserAccountBo;
 import org.dromara.common.core.constant.CacheNames;
 import org.dromara.common.core.constant.UserConstants;
 import org.dromara.common.core.exception.ServiceException;
@@ -25,15 +30,16 @@ import org.dromara.common.mybatis.helper.DataBaseHelper;
 import org.dromara.common.satoken.utils.LoginHelper;
 import org.dromara.system.domain.SysDept;
 import org.dromara.system.domain.SysUser;
-import org.dromara.system.domain.SysUserPost;
 import org.dromara.system.domain.SysUserRole;
 import org.dromara.system.domain.bo.SysUserBo;
+import org.dromara.system.domain.bo.UserDeptBo;
 import org.dromara.system.domain.vo.SysPostVo;
 import org.dromara.system.domain.vo.SysRoleVo;
 import org.dromara.system.domain.vo.SysUserExportVo;
 import org.dromara.system.domain.vo.SysUserVo;
 import org.dromara.system.mapper.*;
 import org.dromara.system.service.ISysUserService;
+import org.dromara.system.service.IUserDeptService;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
@@ -58,7 +64,12 @@ public class SysUserServiceImpl implements ISysUserService {
     private final SysRoleMapper roleMapper;
     private final SysPostMapper postMapper;
     private final SysUserRoleMapper userRoleMapper;
-    private final SysUserPostMapper userPostMapper;
+    private final IUserDeptService userDeptService;
+
+    @DubboReference
+    private final RemotePtParameterService remotePtParameterService;
+    private final RemoteUserAccountService remoteUserAccountService;
+    //private final RemoteUserAccountService remoteUserAccountService;
 
     @Override
     public TableDataInfo<SysUserVo> selectPageUserList(SysUserBo user, PageQuery pageQuery) {
@@ -83,6 +94,7 @@ public class SysUserServiceImpl implements ISysUserService {
         wrapper.eq("u.del_flag", UserConstants.USER_NORMAL)
             .eq(ObjectUtil.isNotNull(user.getUserId()), "u.user_id", user.getUserId())
             .like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName())
+            .like(StringUtils.isNotBlank(user.getRealName()), "u.real_name", user.getRealName())
             .eq(StringUtils.isNotBlank(user.getStatus()), "u.status", user.getStatus())
             .like(StringUtils.isNotBlank(user.getPhone()), "u.phone", user.getPhone())
             .between(params.get("beginTime") != null && params.get("endTime") != null,
@@ -310,10 +322,17 @@ public class SysUserServiceImpl implements ISysUserService {
             user.setUserId(sysUser.getUserId());
         }
         // 新增用户岗位关联
-        //insertUserPost(user, false);
-        insertUserDept(user,false);
+         insertUserDept(user);
         // 新增用户与角色管理
         insertUserRole(user, false);
+        String autoUserAccount = remotePtParameterService.getPtParameterByKey("AUTO_CREATE_BAG");
+        RemoteUserAccountBo remoteUserAccountBo = BeanUtil.copyProperties(user, RemoteUserAccountBo.class);
+        //if("1".equals(autoUserAccount)){
+        //
+        //} else {
+          remoteUserAccountBo.setAccountStatus("0");
+          //remoteUserAccountService.insertByBo(remoteUserAccountBo);
+        //}
         return rows;
     }
 
@@ -344,8 +363,8 @@ public class SysUserServiceImpl implements ISysUserService {
     public int updateUser(SysUserBo user) {
         // 新增用户与角色管理
         insertUserRole(user, true);
-        // 新增用户岗位管理
-        insertUserPost(user, true);
+        // 新增用户部门岗位管理
+        insertUserDept(user);
         SysUser sysUser = MapstructUtils.convert(user, SysUser.class);
         // 防止错误更新后导致的数据误删除
         int flag = baseMapper.updateById(sysUser);
@@ -440,30 +459,6 @@ public class SysUserServiceImpl implements ISysUserService {
         this.insertUserRole(user.getUserId(), user.getRoleIds(), clear);
     }
 
-    /**
-     * 新增用户岗位信息
-     *
-     * @param user  用户对象
-     * @param clear 清除已存在的关联数据
-     */
-    private void insertUserPost(SysUserBo user, boolean clear) {
-        Long[] posts = user.getPostIds();
-        if (ArrayUtil.isNotEmpty(posts)) {
-            if (clear) {
-                // 删除用户与岗位关联
-                userPostMapper.delete(new LambdaQueryWrapper<SysUserPost>().eq(SysUserPost::getUserId, user.getUserId()));
-            }
-            // 新增用户与岗位管理
-            List<SysUserPost> list = StreamUtils.toList(List.of(posts), postId -> {
-                SysUserPost up = new SysUserPost();
-                up.setUserId(user.getUserId());
-                up.setPostId(postId);
-                return up;
-            });
-            userPostMapper.insertBatch(list);
-        }
-    }
-
     /**
      * 新增用户角色信息
      *
@@ -513,7 +508,11 @@ public class SysUserServiceImpl implements ISysUserService {
         // 删除用户与角色关联
         userRoleMapper.delete(new LambdaQueryWrapper<SysUserRole>().eq(SysUserRole::getUserId, userId));
         // 删除用户与岗位表
-        userPostMapper.delete(new LambdaQueryWrapper<SysUserPost>().eq(SysUserPost::getUserId, userId));
+        UserDeptBo userDeptBo = new UserDeptBo();
+        userDeptBo.setUserId(userId);
+        userDeptBo.setMainDept("N");
+        userDeptService.deleteByBo(userDeptBo);
+
         // 防止更新失败导致的数据删除
         int flag = baseMapper.deleteById(userId);
         if (flag < 1) {
@@ -538,8 +537,8 @@ public class SysUserServiceImpl implements ISysUserService {
         List<Long> ids = List.of(userIds);
         // 删除用户与角色关联
         userRoleMapper.delete(new LambdaQueryWrapper<SysUserRole>().in(SysUserRole::getUserId, ids));
-        // 删除用户与岗位
-        userPostMapper.delete(new LambdaQueryWrapper<SysUserPost>().in(SysUserPost::getUserId, ids));
+        // 删除用户部门
+        userDeptService.deleteByUserIds(List.of(userIds));
         // 防止更新失败导致的数据删除
         int flag = baseMapper.deleteByIds(ids);
         if (flag < 1) {
@@ -635,8 +634,12 @@ public class SysUserServiceImpl implements ISysUserService {
         return ObjectUtil.isNull(sysUser) ? null : sysUser.getEmail();
     }
 
-    private void insertUserDept(SysUserBo bo,Boolean clear){
-        Long deptId =  bo.getDeptId();
+    private void insertUserDept(SysUserBo bo){
+        UserDeptBo userDeptBo = new UserDeptBo();
+        userDeptBo.setDeptId(bo.getDeptId());
+        userDeptBo.setPostId(bo.getPostId());
+        userDeptBo.setUserId(bo.getUserId());
 
+        userDeptService.setUserDeptPost(userDeptBo);
     }
 }

+ 194 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/UserDeptServiceImpl.java

@@ -0,0 +1,194 @@
+package org.dromara.system.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+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.springframework.stereotype.Service;
+import org.dromara.system.domain.bo.UserDeptBo;
+import org.dromara.system.domain.vo.UserDeptVo;
+import org.dromara.system.domain.UserDept;
+import org.dromara.system.mapper.UserDeptMapper;
+import org.dromara.system.service.IUserDeptService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 用户部门Service业务层处理
+ *
+ * @author LionLi
+ * @date 2024-09-11
+ */
+@RequiredArgsConstructor
+@Service
+public class UserDeptServiceImpl implements IUserDeptService {
+
+    private final UserDeptMapper baseMapper;
+
+    /**
+     * 查询用户部门
+     *
+     * @param userDeptId 主键
+     * @return 用户部门
+     */
+    @Override
+    public UserDeptVo queryById(Long userDeptId){
+        return baseMapper.selectVoById(userDeptId);
+    }
+
+    /**
+     * 分页查询用户部门列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 用户部门分页列表
+     */
+    @Override
+    public TableDataInfo<UserDeptVo> queryPageList(UserDeptBo bo, PageQuery pageQuery) {
+        LambdaQueryWrapper<UserDept> lqw = buildQueryWrapper(bo);
+        Page<UserDeptVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        return TableDataInfo.build(result);
+    }
+
+    /**
+     * 查询符合条件的用户部门列表
+     *
+     * @param bo 查询条件
+     * @return 用户部门列表
+     */
+    @Override
+    public List<UserDeptVo> queryList(UserDeptBo bo) {
+        LambdaQueryWrapper<UserDept> lqw = buildQueryWrapper(bo);
+        return baseMapper.selectVoList(lqw);
+    }
+
+    private LambdaQueryWrapper<UserDept> buildQueryWrapper(UserDeptBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<UserDept> lqw = Wrappers.lambdaQuery();
+        lqw.eq(StringUtils.isNotBlank(bo.getMainDept()), UserDept::getMainDept, bo.getMainDept());
+        lqw.eq(StringUtils.isNotBlank(bo.getCheckStatus()), UserDept::getCheckStatus, bo.getCheckStatus());
+        lqw.eq(StringUtils.isNotBlank(bo.getPayStatus()), UserDept::getPayStatus, bo.getPayStatus());
+        lqw.eq(StringUtils.isNotBlank(bo.getDeptId().toString()), UserDept::getDeptId, bo.getDeptId());
+        lqw.eq(StringUtils.isNotBlank(bo.getPostId().toString()), UserDept::getPostId, bo.getPostId());
+        lqw.eq(StringUtils.isNotBlank(bo.getUserId().toString()), UserDept::getUserId, bo.getUserId());
+        lqw.eq(bo.getCheckDate() != null, UserDept::getCheckDate, bo.getCheckDate());
+        lqw.eq(bo.getPayDate() != null, UserDept::getPayDate, bo.getPayDate());
+
+        return lqw;
+    }
+
+    private QueryWrapper<UserDept> buildQueryWrapper(UserDeptBo bo,String tableAlias) {
+        QueryWrapper<UserDept> lqw = new QueryWrapper<>();
+        String columnPrefix = "";
+        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());
+        return lqw;
+    }
+
+    /**
+     * 新增用户部门
+     *
+     * @param bo 用户部门
+     * @return 是否新增成功
+     */
+    @Override
+    public Boolean insertByBo(UserDeptBo bo) {
+        UserDept add = MapstructUtils.convert(bo, UserDept.class);
+        validEntityBeforeSave(add);
+        boolean flag = baseMapper.insert(add) > 0;
+        if (flag) {
+            bo.setUserDeptId(add.getUserDeptId());
+        }
+        return flag;
+    }
+
+    /**
+     * 修改用户部门
+     *
+     * @param bo 用户部门
+     * @return 是否修改成功
+     */
+    @Override
+    public Boolean updateByBo(UserDeptBo bo) {
+        UserDept update = MapstructUtils.convert(bo, UserDept.class);
+        validEntityBeforeSave(update);
+        return baseMapper.updateById(update) > 0;
+    }
+
+    /**
+     * 保存前的数据校验
+     */
+    private void validEntityBeforeSave(UserDept entity){
+        //TODO 做一些数据校验,如唯一约束
+
+    }
+
+    /**
+     * 校验并批量删除用户部门信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return baseMapper.deleteByIds(ids) > 0;
+    }
+
+    @Override
+    public Boolean updateMainDeptByUserId(Long userId) {
+        LambdaUpdateWrapper<UserDept> luw = new LambdaUpdateWrapper<>();
+        luw.set(UserDept::getMainDept, 'N');
+        luw.eq(UserDept::getUserId, userId);
+        return baseMapper.update(null, luw) > 0;
+    }
+
+    @Override
+    public Boolean setUserDeptPost(UserDeptBo bo) {
+        this.updateMainDeptByUserId(bo.getUserId());
+        UserDept entity = MapstructUtils.convert(bo, UserDept.class);
+        LambdaQueryWrapper<UserDept> lqw = buildQueryWrapper(bo);
+        UserDeptVo vo = baseMapper.selectVoOne(lqw);
+        if (entity != null) {
+            entity.setMainDept("Y");
+        }
+        if(vo==null){
+            return baseMapper.insert(entity) > 0;
+        } else {
+            if (entity != null) {
+                entity.setUserDeptId(vo.getUserDeptId());
+            }
+            return baseMapper.updateById(entity) > 0;
+        }
+    }
+
+    @Override
+    public Boolean deleteByBo(UserDeptBo bo) {
+        LambdaQueryWrapper<UserDept> lqw = buildQueryWrapper(bo);
+        return baseMapper.delete(lqw) > 0;
+    }
+
+    @Override
+    public Boolean deleteByUserIds(Collection<Long> userIds) {
+        return baseMapper.delete(new LambdaQueryWrapper<UserDept>()
+            .in(UserDept::getUserId, userIds)
+            .eq(UserDept::getMainDept, 'N'))>0;
+    }
+}

+ 2 - 2
ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/UserDeptMapper.xml

@@ -2,9 +2,9 @@
 <!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.dromara.system.right.mapper.UserDeptMapper">
+<mapper namespace="org.dromara.system.mapper.UserDeptMapper">
 
-    <resultMap type="org.dromara.system.right.domain.UserDept" id="UserDeptResult">
+    <resultMap type="org.dromara.system.domain.UserDept" id="UserDeptResult">
             <result property="userDeptId"    column="user_dept_id"    />
             <result property="tenantId"    column="tenant_id"    />
             <result property="userId"    column="user_id"    />