瀏覽代碼

人员修改

Newspaper 1 年之前
父節點
當前提交
c64eab2277
共有 25 個文件被更改,包括 90 次插入1723 次删除
  1. 0 24
      snowy-plugin-api/snowy-plugin-sys-api/src/main/java/vip/xiaonuo/sys/api/SysUserApi.java
  2. 6 0
      snowy-plugin/snowy-plugin-sys/pom.xml
  3. 1 23
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/org/service/impl/SysOrgServiceImpl.java
  4. 0 152
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/position/controller/SysPositionController.java
  5. 0 63
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/position/entity/SysPosition.java
  6. 0 48
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/position/enums/SysPositionCategoryEnum.java
  7. 0 25
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/position/mapper/SysPositionMapper.java
  8. 0 6
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/position/mapper/mapping/SysPositionMapper.xml
  9. 0 55
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/position/param/SysPositionAddParam.java
  10. 0 60
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/position/param/SysPositionEditParam.java
  11. 0 35
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/position/param/SysPositionIdParam.java
  12. 0 56
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/position/param/SysPositionPageParam.java
  13. 0 44
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/position/param/SysPositionSelectorPositionParam.java
  14. 0 53
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/position/provider/SysPositionApiProvider.java
  15. 0 112
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/position/service/SysPositionService.java
  16. 0 220
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/position/service/impl/SysPositionServiceImpl.java
  17. 1 1
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/role/service/impl/SysRoleServiceImpl.java
  18. 3 58
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/controller/SysUserCenterController.java
  19. 16 16
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/controller/SysUserController.java
  20. 14 115
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/entity/SysUser.java
  21. 2 83
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/param/SysUserAddParam.java
  22. 0 50
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/param/SysUserFindPwdByEmailParam.java
  23. 0 115
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/provider/SysUserApiProvider.java
  24. 3 58
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/service/SysUserService.java
  25. 44 251
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/service/impl/SysUserServiceImpl.java

+ 0 - 24
snowy-plugin-api/snowy-plugin-sys-api/src/main/java/vip/xiaonuo/sys/api/SysUserApi.java

@@ -82,30 +82,6 @@ public interface SysUserApi {
     List<String> getUserIdListByOrgIdList(List<String> orgIdList);
 
     /**
-     * 根据职位id集合获取职位下用户id集合
-     *
-     * @author xuyuxiang
-     * @date 2022/6/6 11:44
-     **/
-    List<String> getUserIdListByPositionIdList(List<String> positionIdList);
-
-    /**
-     * 根据用户id和组织id和职位id和主管层级获取上级主管id
-     *
-     * @author xuyuxiang
-     * @date 2022/6/6 14:50
-     **/
-    JSONObject getSupervisorIdBySupervisorLevel(List<String> userIdList, String userId, String orgId, String supervisorLevel);
-
-    /**
-     * 根据用户id和组织id和职位id和终点主管层级获取上级主管id集合
-     *
-     * @author xuyuxiang
-     * @date 2022/6/6 14:50
-     **/
-    List<String> getMulSupervisorIdListByEndLevel(String userId, String orgId, String endLevel);
-
-    /**
      * 获取用户选择器
      *
      * @author xuyuxiang

+ 6 - 0
snowy-plugin/snowy-plugin-sys/pom.xml

@@ -38,5 +38,11 @@
             <groupId>vip.xiaonuo</groupId>
             <artifactId>snowy-plugin-mobile-api</artifactId>
         </dependency>
+
+        <dependency>
+            <groupId>com.jcraft</groupId>
+            <artifactId>jsch</artifactId>
+            <version>0.1.54</version>
+        </dependency>
     </dependencies>
 </project>

+ 1 - 23
snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/org/service/impl/SysOrgServiceImpl.java

@@ -40,8 +40,6 @@ import vip.xiaonuo.sys.modular.org.enums.SysOrgCategoryEnum;
 import vip.xiaonuo.sys.modular.org.mapper.SysOrgMapper;
 import vip.xiaonuo.sys.modular.org.param.*;
 import vip.xiaonuo.sys.modular.org.service.SysOrgService;
-import vip.xiaonuo.sys.modular.position.entity.SysPosition;
-import vip.xiaonuo.sys.modular.position.service.SysPositionService;
 import vip.xiaonuo.sys.modular.role.entity.SysRole;
 import vip.xiaonuo.sys.modular.role.service.SysRoleService;
 import vip.xiaonuo.sys.modular.user.entity.SysUser;
@@ -70,9 +68,6 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
     private SysRoleService sysRoleService;
 
     @Resource
-    private SysPositionService sysPositionService;
-
-    @Resource
     private SysUserService sysUserService;
 
     @Override
@@ -164,28 +159,11 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
             if(hasOrgUser) {
                 throw new CommonException("请先删除组织下的用户");
             }
-            // 组织下有人不能删除(兼任组织)
-            List<String> positionJsonList = sysUserService.list(new LambdaQueryWrapper<SysUser>()
-                    .isNotNull(SysUser::getPositionJson)).stream().map(SysUser::getPositionJson).collect(Collectors.toList());
-            if(ObjectUtil.isNotEmpty(positionJsonList)) {
-                List<String> positionOrgIdList = CollectionUtil.newArrayList();
-                positionJsonList.forEach(positionJson -> JSONUtil.toList(JSONUtil.parseArray(positionJson), JSONObject.class)
-                        .forEach(jsonObject -> positionOrgIdList.add(jsonObject.getStr("orgId"))));
-                boolean hasPositionUser = CollectionUtil.intersectionDistinct(toDeleteOrgIdList, CollectionUtil.removeNull(positionOrgIdList)).size() > 0;
-                if(hasPositionUser) {
-                    throw new CommonException("请先删除组织下的用户");
-                }
-            }
             // 组织下有角色不能删除
             boolean hasRole = sysRoleService.count(new LambdaQueryWrapper<SysRole>().in(SysRole::getOrgId, toDeleteOrgIdList)) > 0;
             if(hasRole) {
                 throw new CommonException("请先删除组织下的角色");
             }
-            // 组织下有职位不能删除
-            boolean hasPosition = sysPositionService.count(new LambdaQueryWrapper<SysPosition>().in(SysPosition::getOrgId, toDeleteOrgIdList)) > 0;
-            if(hasPosition) {
-                throw new CommonException("请先删除组织下的职位");
-            }
             // 执行删除
             this.removeByIds(toDeleteOrgIdList);
 
@@ -307,7 +285,7 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
     public Page<SysUser> userSelector(SysOrgSelectorUserParam sysOrgSelectorUserParam) {
         LambdaQueryWrapper<SysUser> lambdaQueryWrapper = new LambdaQueryWrapper<>();
         // 只查询部分字段
-        lambdaQueryWrapper.select(SysUser::getId, SysUser::getAvatar, SysUser::getOrgId, SysUser::getPositionId, SysUser::getAccount,
+        lambdaQueryWrapper.select(SysUser::getId, SysUser::getAvatar, SysUser::getOrgId, SysUser::getAccount,
                 SysUser::getName, SysUser::getSortCode, SysUser::getGender, SysUser::getEntryDate);
         // 如果查询条件为空,则直接查询
         if(ObjectUtil.isAllEmpty(sysOrgSelectorUserParam.getOrgId(), sysOrgSelectorUserParam.getSearchKey())) {

+ 0 - 152
snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/position/controller/SysPositionController.java

@@ -1,152 +0,0 @@
-/*
- * Copyright [2022] [https://www.xiaonuo.vip]
- *
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
- *
- * 1.请不要删除和修改根目录下的LICENSE文件。
- * 2.请不要删除和修改Snowy源码头部的版权声明。
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
- */
-package vip.xiaonuo.sys.modular.position.controller;
-
-import cn.hutool.core.lang.tree.Tree;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import com.github.xiaoymin.knife4j.annotations.ApiSupport;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RestController;
-import vip.xiaonuo.common.annotation.CommonLog;
-import vip.xiaonuo.common.pojo.CommonResult;
-import vip.xiaonuo.common.pojo.CommonValidList;
-import vip.xiaonuo.sys.modular.position.entity.SysPosition;
-import vip.xiaonuo.sys.modular.position.param.*;
-import vip.xiaonuo.sys.modular.position.service.SysPositionService;
-
-import javax.annotation.Resource;
-import javax.validation.Valid;
-import javax.validation.constraints.NotEmpty;
-import java.util.List;
-
-/**
- * 职位控制器
- *
- * @author xuyuxiang
- * @date 2022/4/25 20:40
- */
-@Api(tags = "职位控制器")
-@ApiSupport(author = "SNOWY_TEAM", order = 2)
-@RestController
-@Validated
-public class SysPositionController {
-
-    @Resource
-    private SysPositionService sysPositionService;
-
-    /**
-     * 获取职位分页
-     *
-     * @author xuyuxiang
-     * @date 2022/4/24 20:00
-     */
-    @ApiOperationSupport(order = 1)
-    @ApiOperation("获取职位分页")
-    @GetMapping("/sys/position/page")
-    public CommonResult<Page<SysPosition>> page(SysPositionPageParam sysPositionPageParam) {
-        return CommonResult.data(sysPositionService.page(sysPositionPageParam));
-    }
-
-    /**
-     * 添加职位
-     *
-     * @author xuyuxiang
-     * @date 2022/4/24 20:47
-     */
-    @ApiOperationSupport(order = 2)
-    @ApiOperation("添加职位")
-    @CommonLog("添加职位")
-    @PostMapping("/sys/position/add")
-    public CommonResult<String> add(@RequestBody @Valid SysPositionAddParam sysPositionAddParam) {
-        sysPositionService.add(sysPositionAddParam);
-        return CommonResult.ok();
-    }
-
-    /**
-     * 编辑职位
-     *
-     * @author xuyuxiang
-     * @date 2022/4/24 20:47
-     */
-    @ApiOperationSupport(order = 3)
-    @ApiOperation("编辑职位")
-    @CommonLog("编辑职位")
-    @PostMapping("/sys/position/edit")
-    public CommonResult<String> edit(@RequestBody @Valid SysPositionEditParam sysPositionEditParam) {
-        sysPositionService.edit(sysPositionEditParam);
-        return CommonResult.ok();
-    }
-
-    /**
-     * 删除职位
-     *
-     * @author xuyuxiang
-     * @date 2022/4/24 20:00
-     */
-    @ApiOperationSupport(order = 4)
-    @ApiOperation("删除职位")
-    @CommonLog("删除职位")
-    @PostMapping("/sys/position/delete")
-    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
-                                                   CommonValidList<SysPositionIdParam> sysPositionIdParamList) {
-        sysPositionService.delete(sysPositionIdParamList);
-        return CommonResult.ok();
-    }
-
-    /**
-     * 获取职位详情
-     *
-     * @author xuyuxiang
-     * @date 2022/4/24 20:00
-     */
-    @ApiOperationSupport(order = 5)
-    @ApiOperation("获取职位详情")
-    @GetMapping("/sys/position/detail")
-    public CommonResult<SysPosition> detail(@Valid SysPositionIdParam sysPositionIdParam) {
-        return CommonResult.data(sysPositionService.detail(sysPositionIdParam));
-    }
-
-    /* ====职位部分所需要用到的选择器==== */
-
-    /**
-     * 获取组织树选择器
-     *
-     * @author xuyuxiang
-     * @date 2022/4/24 20:00
-     */
-    @ApiOperationSupport(order = 6)
-    @ApiOperation("获取组织树选择器")
-    @GetMapping("/sys/position/orgTreeSelector")
-    public CommonResult<List<Tree<String>>> orgTreeSelector() {
-        return CommonResult.data(sysPositionService.orgTreeSelector());
-    }
-
-    /**
-     * 获取职位选择器
-     *
-     * @author xuyuxiang
-     * @date 2022/4/24 20:00
-     */
-    @ApiOperationSupport(order = 7)
-    @ApiOperation("获取职位选择器")
-    @GetMapping("/sys/position/positionSelector")
-    public CommonResult<Page<SysPosition>> positionSelector(SysPositionSelectorPositionParam sysPositionSelectorPositionParam) {
-        return CommonResult.data(sysPositionService.positionSelector(sysPositionSelectorPositionParam));
-    }
-}

+ 0 - 63
snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/position/entity/SysPosition.java

@@ -1,63 +0,0 @@
-/*
- * Copyright [2022] [https://www.xiaonuo.vip]
- *
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
- *
- * 1.请不要删除和修改根目录下的LICENSE文件。
- * 2.请不要删除和修改Snowy源码头部的版权声明。
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
- */
-package vip.xiaonuo.sys.modular.position.entity;
-
-import com.baomidou.mybatisplus.annotation.FieldStrategy;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.fhs.core.trans.vo.TransPojo;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Getter;
-import lombok.Setter;
-import vip.xiaonuo.common.pojo.CommonEntity;
-
-/**
- * 职位实体
- *
- * @author xuyuxiang
- * @date 2022/4/21 16:13
- **/
-@Getter
-@Setter
-@TableName("SYS_POSITION")
-public class SysPosition extends CommonEntity implements TransPojo {
-
-    /** id */
-    @ApiModelProperty(value = "id", position = 1)
-    private String id;
-
-    /** 组织id */
-    @ApiModelProperty(value = "组织id", position = 2)
-    private String orgId;
-
-    /** 名称 */
-    @ApiModelProperty(value = "名称", position = 3)
-    private String name;
-
-    /** 编码 */
-    @ApiModelProperty(value = "编码", position = 4)
-    private String code;
-
-    /** 分类 */
-    @ApiModelProperty(value = "分类", position = 5)
-    private String category;
-
-    /** 排序码 */
-    @ApiModelProperty(value = "排序码", position = 6)
-    private Integer sortCode;
-
-    /** 扩展信息 */
-    @ApiModelProperty(value = "扩展信息", position = 7)
-    @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
-    private String extJson;
-}

+ 0 - 48
snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/position/enums/SysPositionCategoryEnum.java

@@ -1,48 +0,0 @@
-/*
- * Copyright [2022] [https://www.xiaonuo.vip]
- *
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
- *
- * 1.请不要删除和修改根目录下的LICENSE文件。
- * 2.请不要删除和修改Snowy源码头部的版权声明。
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
- */
-package vip.xiaonuo.sys.modular.position.enums;
-
-import lombok.Getter;
-import vip.xiaonuo.common.exception.CommonException;
-
-/**
- * 职位分类枚举
- *
- * @author xuyuxiang
- * @date 2022/4/21 19:56
- **/
-@Getter
-public enum SysPositionCategoryEnum {
-
-    /** 高层 */
-    HIGH("HIGH"),
-
-    /** 中层 */
-    MIDDLE("MIDDLE"),
-
-    /** 基层 */
-    LOW("LOW");
-
-    private final String value;
-
-    SysPositionCategoryEnum(String value) {
-        this.value = value;
-    }
-
-    public static void validate(String value) {
-        boolean flag = HIGH.getValue().equals(value) || MIDDLE.getValue().equals(value) || LOW.getValue().equals(value);
-        if(!flag) {
-            throw new CommonException("不支持的职位分类:{}", value);
-        }
-    }
-}

+ 0 - 25
snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/position/mapper/SysPositionMapper.java

@@ -1,25 +0,0 @@
-/*
- * Copyright [2022] [https://www.xiaonuo.vip]
- *
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
- *
- * 1.请不要删除和修改根目录下的LICENSE文件。
- * 2.请不要删除和修改Snowy源码头部的版权声明。
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
- */
-package vip.xiaonuo.sys.modular.position.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import vip.xiaonuo.sys.modular.position.entity.SysPosition;
-
-/**
- * 职位Mapper接口
- *
- * @author xuyuxiang
- * @date 2022/4/21 18:37
- **/
-public interface SysPositionMapper extends BaseMapper<SysPosition> {
-}

+ 0 - 6
snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/position/mapper/mapping/SysPositionMapper.xml

@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="vip.xiaonuo.sys.modular.position.mapper.SysPositionMapper">
-
-
-</mapper>

+ 0 - 55
snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/position/param/SysPositionAddParam.java

@@ -1,55 +0,0 @@
-/*
- * Copyright [2022] [https://www.xiaonuo.vip]
- *
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
- *
- * 1.请不要删除和修改根目录下的LICENSE文件。
- * 2.请不要删除和修改Snowy源码头部的版权声明。
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
- */
-package vip.xiaonuo.sys.modular.position.param;
-
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Getter;
-import lombok.Setter;
-
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
-
-/**
- * 职位添加参数
- *
- * @author xuyuxiang
- * @date 2022/4/21 16:13
- **/
-@Getter
-@Setter
-public class SysPositionAddParam {
-
-    /** 组织id */
-    @ApiModelProperty(value = "组织id", required = true, position = 1)
-    @NotBlank(message = "orgId不能为空")
-    private String orgId;
-
-    /** 名称 */
-    @ApiModelProperty(value = "名称", required = true, position = 2)
-    @NotBlank(message = "name不能为空")
-    private String name;
-
-    /** 分类 */
-    @ApiModelProperty(value = "分类", required = true, position = 3)
-    @NotBlank(message = "category不能为空")
-    private String category;
-
-    /** 排序码 */
-    @ApiModelProperty(value = "排序码", required = true, position = 4)
-    @NotNull(message = "sortCode不能为空")
-    private Integer sortCode;
-
-    /** 扩展JSON */
-    @ApiModelProperty(value = "扩展JSON", position = 5)
-    private String extJson;
-}

+ 0 - 60
snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/position/param/SysPositionEditParam.java

@@ -1,60 +0,0 @@
-/*
- * Copyright [2022] [https://www.xiaonuo.vip]
- *
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
- *
- * 1.请不要删除和修改根目录下的LICENSE文件。
- * 2.请不要删除和修改Snowy源码头部的版权声明。
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
- */
-package vip.xiaonuo.sys.modular.position.param;
-
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Getter;
-import lombok.Setter;
-
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
-
-/**
- * 职位编辑参数
- *
- * @author xuyuxiang
- * @date 2022/4/21 16:13
- **/
-@Getter
-@Setter
-public class SysPositionEditParam {
-
-    /** id */
-    @ApiModelProperty(value = "id", required = true, position = 1)
-    @NotBlank(message = "id不能为空")
-    private String id;
-
-    /** 组织id */
-    @ApiModelProperty(value = "组织id", required = true, position = 2)
-    @NotBlank(message = "orgId不能为空")
-    private String orgId;
-
-    /** 名称 */
-    @ApiModelProperty(value = "名称", required = true, position = 3)
-    @NotBlank(message = "name不能为空")
-    private String name;
-
-    /** 分类 */
-    @ApiModelProperty(value = "分类", required = true, position = 4)
-    @NotBlank(message = "category不能为空")
-    private String category;
-
-    /** 排序码 */
-    @ApiModelProperty(value = "排序码", required = true, position = 5)
-    @NotNull(message = "sortCode不能为空")
-    private Integer sortCode;
-
-    /** 扩展JSON */
-    @ApiModelProperty(value = "扩展JSON", position = 6)
-    private String extJson;
-}

+ 0 - 35
snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/position/param/SysPositionIdParam.java

@@ -1,35 +0,0 @@
-/*
- * Copyright [2022] [https://www.xiaonuo.vip]
- *
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
- *
- * 1.请不要删除和修改根目录下的LICENSE文件。
- * 2.请不要删除和修改Snowy源码头部的版权声明。
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
- */
-package vip.xiaonuo.sys.modular.position.param;
-
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Getter;
-import lombok.Setter;
-
-import javax.validation.constraints.NotBlank;
-
-/**
- * 职位Id参数
- *
- * @author xuyuxiang
- * @date 2022/4/21 16:13
- **/
-@Getter
-@Setter
-public class SysPositionIdParam {
-
-    /** id */
-    @ApiModelProperty(value = "id", required = true)
-    @NotBlank(message = "id不能为空")
-    private String id;
-}

+ 0 - 56
snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/position/param/SysPositionPageParam.java

@@ -1,56 +0,0 @@
-/*
- * Copyright [2022] [https://www.xiaonuo.vip]
- *
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
- *
- * 1.请不要删除和修改根目录下的LICENSE文件。
- * 2.请不要删除和修改Snowy源码头部的版权声明。
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
- */
-package vip.xiaonuo.sys.modular.position.param;
-
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Getter;
-import lombok.Setter;
-
-/**
- * 职位查询参数
- *
- * @author xuyuxiang
- * @date 2022/4/21 16:13
- **/
-@Getter
-@Setter
-public class SysPositionPageParam {
-
-    /** 当前页 */
-    @ApiModelProperty(value = "当前页码")
-    private Integer current;
-
-    /** 每页条数 */
-    @ApiModelProperty(value = "每页条数")
-    private Integer size;
-
-    /** 排序字段 */
-    @ApiModelProperty(value = "排序字段,字段驼峰名称,如:userName")
-    private String sortField;
-
-    /** 排序方式 */
-    @ApiModelProperty(value = "排序方式,升序:ASCEND;降序:DESCEND")
-    private String sortOrder;
-
-    /** 组织id */
-    @ApiModelProperty(value = "组织id")
-    private String orgId;
-
-    /** 职位分类 */
-    @ApiModelProperty(value = "职位分类")
-    private String category;
-
-    /** 名称关键词 */
-    @ApiModelProperty(value = "名称关键词")
-    private String searchKey;
-}

+ 0 - 44
snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/position/param/SysPositionSelectorPositionParam.java

@@ -1,44 +0,0 @@
-/*
- * Copyright [2022] [https://www.xiaonuo.vip]
- *
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
- *
- * 1.请不要删除和修改根目录下的LICENSE文件。
- * 2.请不要删除和修改Snowy源码头部的版权声明。
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
- */
-package vip.xiaonuo.sys.modular.position.param;
-
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Getter;
-import lombok.Setter;
-
-/**
- * 职位选择器参数
- *
- * @author xuyuxiang
- * @date 2022/4/21 16:13
- **/
-@Getter
-@Setter
-public class SysPositionSelectorPositionParam {
-
-    /** 当前页 */
-    @ApiModelProperty(value = "当前页码")
-    private Integer current;
-
-    /** 每页条数 */
-    @ApiModelProperty(value = "每页条数")
-    private Integer size;
-
-    /** 组织id */
-    @ApiModelProperty(value = "组织id")
-    private String orgId;
-
-    /** 名称关键词 */
-    @ApiModelProperty(value = "名称关键词")
-    private String searchKey;
-}

+ 0 - 53
snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/position/provider/SysPositionApiProvider.java

@@ -1,53 +0,0 @@
-/*
- * Copyright [2022] [https://www.xiaonuo.vip]
- *
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
- *
- * 1.请不要删除和修改根目录下的LICENSE文件。
- * 2.请不要删除和修改Snowy源码头部的版权声明。
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
- */
-package vip.xiaonuo.sys.modular.position.provider;
-
-import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.json.JSONObject;
-import cn.hutool.json.JSONUtil;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import org.springframework.stereotype.Service;
-import vip.xiaonuo.sys.api.SysPositionApi;
-import vip.xiaonuo.sys.modular.position.param.SysPositionSelectorPositionParam;
-import vip.xiaonuo.sys.modular.position.service.SysPositionService;
-
-import javax.annotation.Resource;
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- * 职位API接口提供者
- *
- * @author xuyuxiang
- * @date 2022/7/22 14:56
- **/
-@Service
-public class SysPositionApiProvider implements SysPositionApi {
-
-    @Resource
-    private SysPositionService sysPositionService;
-
-    @Override
-    public String getNameById(String positionId) {
-        return sysPositionService.queryEntity(positionId).getName();
-    }
-
-    @SuppressWarnings("ALL")
-    @Override
-    public Page<JSONObject> positionSelector(String orgId, String searchKey) {
-        SysPositionSelectorPositionParam sysPositionSelectorPositionParam = new SysPositionSelectorPositionParam();
-        sysPositionSelectorPositionParam.setOrgId(orgId);
-        sysPositionSelectorPositionParam.setSearchKey(searchKey);
-        return BeanUtil.toBean(sysPositionService.positionSelector(sysPositionSelectorPositionParam), Page.class);
-    }
-}

+ 0 - 112
snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/position/service/SysPositionService.java

@@ -1,112 +0,0 @@
-/*
- * Copyright [2022] [https://www.xiaonuo.vip]
- *
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
- *
- * 1.请不要删除和修改根目录下的LICENSE文件。
- * 2.请不要删除和修改Snowy源码头部的版权声明。
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
- */
-package vip.xiaonuo.sys.modular.position.service;
-
-import cn.hutool.core.lang.tree.Tree;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.IService;
-import vip.xiaonuo.sys.modular.position.entity.SysPosition;
-import vip.xiaonuo.sys.modular.position.param.*;
-
-import java.util.List;
-
-/**
- * 职位Service接口
- *
- * @author xuyuxiang
- * @date 2022/4/21 18:35
- **/
-public interface SysPositionService extends IService<SysPosition> {
-
-    /**
-     * 获取职位分页
-     *
-     * @author xuyuxiang
-     * @date 2022/4/24 20:08
-     */
-    Page<SysPosition> page(SysPositionPageParam sysPositionPageParam);
-
-    /**
-     * 添加职位
-     *
-     * @author xuyuxiang
-     * @date 2022/4/24 20:48
-     */
-    void add(SysPositionAddParam sysPositionAddParam);
-
-    /**
-     * 编辑职位
-     *
-     * @author xuyuxiang
-     * @date 2022/4/24 21:13
-     */
-    void edit(SysPositionEditParam sysPositionEditParam);
-
-    /**
-     * 删除职位
-     *
-     * @author xuyuxiang
-     * @date 2022/4/24 21:18
-     */
-    void delete(List<SysPositionIdParam> sysPositionIdParamList);
-
-    /**
-     * 获取职位详情
-     *
-     * @author xuyuxiang
-     * @date 2022/4/24 21:18
-     */
-    SysPosition detail(SysPositionIdParam sysPositionIdParam);
-
-    /**
-     * 获取职位详情
-     *
-     * @author xuyuxiang
-     * @date 2022/7/25 19:42
-     **/
-    SysPosition queryEntity(String id);
-
-    /**
-     * 根据id获取数据
-     *
-     * @author xuyuxiang
-     * @date 2022/8/15 14:55
-     **/
-    SysPosition getById(List<SysPosition> originDataList, String id);
-
-    /**
-     * 根据组织id和职位名称获取职位id,有则返回,无则创建
-     *
-     * @author xuyuxiang
-     * @date 2022/8/15 14:55
-     **/
-    String getPositionIdByPositionNameWithCreate(String orgId, String positionName);
-
-    /* ====职位部分所需要用到的选择器==== */
-
-    /**
-     * 获取组织树选择器
-     *
-     * @author xuyuxiang
-     * @date 2022/4/24 20:08
-     */
-    List<Tree<String>> orgTreeSelector();
-
-    /**
-     * 获取职位选择器
-     *
-     * @author xuyuxiang
-     * @date 2022/4/24 20:08
-     */
-    Page<SysPosition> positionSelector(SysPositionSelectorPositionParam sysPositionSelectorPositionParam);
-}

+ 0 - 220
snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/position/service/impl/SysPositionServiceImpl.java

@@ -1,220 +0,0 @@
-/*
- * Copyright [2022] [https://www.xiaonuo.vip]
- *
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
- *
- * 1.请不要删除和修改根目录下的LICENSE文件。
- * 2.请不要删除和修改Snowy源码头部的版权声明。
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
- */
-package vip.xiaonuo.sys.modular.position.service.impl;
-
-import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.collection.CollStreamUtil;
-import cn.hutool.core.collection.CollectionUtil;
-import cn.hutool.core.lang.tree.Tree;
-import cn.hutool.core.lang.tree.TreeNode;
-import cn.hutool.core.lang.tree.TreeUtil;
-import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.core.util.RandomUtil;
-import cn.hutool.core.util.StrUtil;
-import cn.hutool.json.JSONObject;
-import cn.hutool.json.JSONUtil;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import vip.xiaonuo.common.enums.CommonSortOrderEnum;
-import vip.xiaonuo.common.exception.CommonException;
-import vip.xiaonuo.common.listener.CommonDataChangeEventCenter;
-import vip.xiaonuo.common.page.CommonPageRequest;
-import vip.xiaonuo.sys.core.enums.SysDataTypeEnum;
-import vip.xiaonuo.sys.modular.org.entity.SysOrg;
-import vip.xiaonuo.sys.modular.org.service.SysOrgService;
-import vip.xiaonuo.sys.modular.position.entity.SysPosition;
-import vip.xiaonuo.sys.modular.position.enums.SysPositionCategoryEnum;
-import vip.xiaonuo.sys.modular.position.mapper.SysPositionMapper;
-import vip.xiaonuo.sys.modular.position.param.*;
-import vip.xiaonuo.sys.modular.position.service.SysPositionService;
-import vip.xiaonuo.sys.modular.user.entity.SysUser;
-import vip.xiaonuo.sys.modular.user.service.SysUserService;
-
-import javax.annotation.Resource;
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- * 职位Service接口实现类
- *
- * @author xuyuxiang
- * @date 2022/2/23 18:43
- **/
-@Service
-public class SysPositionServiceImpl extends ServiceImpl<SysPositionMapper, SysPosition> implements SysPositionService {
-
-    @Resource
-    private SysOrgService sysOrgService;
-
-    @Resource
-    private SysUserService sysUserService;
-
-    @Override
-    public Page<SysPosition> page(SysPositionPageParam sysPositionPageParam) {
-        QueryWrapper<SysPosition> queryWrapper = new QueryWrapper<>();
-        // 查询部分字段
-        queryWrapper.lambda().select(SysPosition::getId, SysPosition::getOrgId, SysPosition::getName,
-                SysPosition::getCategory, SysPosition::getSortCode);
-        if(ObjectUtil.isNotEmpty(sysPositionPageParam.getOrgId())) {
-            queryWrapper.lambda().eq(SysPosition::getOrgId, sysPositionPageParam.getOrgId());
-        }
-        if(ObjectUtil.isNotEmpty(sysPositionPageParam.getCategory())) {
-            queryWrapper.lambda().eq(SysPosition::getCategory, sysPositionPageParam.getCategory());
-        }
-        if(ObjectUtil.isNotEmpty(sysPositionPageParam.getSearchKey())) {
-            queryWrapper.lambda().like(SysPosition::getName, sysPositionPageParam.getSearchKey());
-        }
-        if(ObjectUtil.isAllNotEmpty(sysPositionPageParam.getSortField(), sysPositionPageParam.getSortOrder())) {
-            CommonSortOrderEnum.validate(sysPositionPageParam.getSortOrder());
-            queryWrapper.orderBy(true, sysPositionPageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
-                    StrUtil.toUnderlineCase(sysPositionPageParam.getSortField()));
-        } else {
-            queryWrapper.lambda().orderByAsc(SysPosition::getSortCode);
-        }
-        return this.page(CommonPageRequest.defaultPage(), queryWrapper);
-    }
-
-    @Transactional(rollbackFor = Exception.class)
-    @Override
-    public void add(SysPositionAddParam sysPositionAddParam) {
-        SysPositionCategoryEnum.validate(sysPositionAddParam.getCategory());
-        SysPosition sysPosition = BeanUtil.toBean(sysPositionAddParam, SysPosition.class);
-        boolean repeatName = this.count(new LambdaQueryWrapper<SysPosition>().eq(SysPosition::getOrgId, sysPosition.getOrgId())
-                .eq(SysPosition::getName, sysPosition.getName())) > 0;
-        if(repeatName) {
-            throw new CommonException("同组织下存在重复的职位,名称为:{}", sysPosition.getName());
-        }
-        sysPosition.setCode(RandomUtil.randomString(10));
-        this.save(sysPosition);
-
-        // 发布增加事件
-        CommonDataChangeEventCenter.doAddWithData(SysDataTypeEnum.POSITION.getValue(), JSONUtil.createArray().put(sysPosition));
-    }
-
-    @Transactional(rollbackFor = Exception.class)
-    @Override
-    public void edit(SysPositionEditParam sysPositionEditParam) {
-        SysPositionCategoryEnum.validate(sysPositionEditParam.getCategory());
-        SysPosition sysPosition = this.queryEntity(sysPositionEditParam.getId());
-        BeanUtil.copyProperties(sysPositionEditParam, sysPosition);
-        boolean repeatName = this.count(new LambdaQueryWrapper<SysPosition>().eq(SysPosition::getOrgId, sysPosition.getOrgId())
-                .eq(SysPosition::getName, sysPosition.getName()).ne(SysPosition::getId, sysPosition.getId())) > 0;
-        if(repeatName) {
-            throw new CommonException("同组织下存在重复的职位,名称为:{}", sysPosition.getName());
-        }
-        this.updateById(sysPosition);
-
-        // 发布更新事件
-        CommonDataChangeEventCenter.doUpdateWithData(SysDataTypeEnum.POSITION.getValue(), JSONUtil.createArray().put(sysPosition));
-    }
-
-    @Transactional(rollbackFor = Exception.class)
-    @Override
-    public void delete(List<SysPositionIdParam> sysPositionIdParamList) {
-        List<String> positionIdList = CollStreamUtil.toList(sysPositionIdParamList, SysPositionIdParam::getId);
-        if(ObjectUtil.isNotEmpty(positionIdList)) {
-            // 职位下有人不能删除(直属职位)
-            boolean hasOrgUser = sysUserService.count(new LambdaQueryWrapper<SysUser>().in(SysUser::getPositionId, positionIdList)) > 0;
-            if(hasOrgUser) {
-                throw new CommonException("请先删除职位下的用户");
-            }
-            // 职位下有人不能删除(兼任职位)
-            List<String> positionJsonList = sysUserService.list(new LambdaQueryWrapper<SysUser>()
-                    .isNotNull(SysUser::getPositionJson)).stream().map(SysUser::getPositionJson).collect(Collectors.toList());
-            if(ObjectUtil.isNotEmpty(positionJsonList)) {
-                List<String> extPositionIdList = CollectionUtil.newArrayList();
-                positionJsonList.forEach(positionJson -> JSONUtil.toList(JSONUtil.parseArray(positionJson), JSONObject.class)
-                        .forEach(jsonObject -> extPositionIdList.add(jsonObject.getStr("positionId"))));
-                boolean hasPositionUser = CollectionUtil.intersectionDistinct(positionIdList, CollectionUtil.removeNull(extPositionIdList)).size() > 0;
-                if(hasPositionUser) {
-                    throw new CommonException("请先删除职位下的用户");
-                }
-            }
-            // 执行删除
-            this.removeByIds(positionIdList);
-
-            // 发布删除事件
-            CommonDataChangeEventCenter.doDeleteWithDataId(SysDataTypeEnum.POSITION.getValue(), positionIdList);
-        }
-    }
-
-    @Override
-    public SysPosition detail(SysPositionIdParam sysPositionIdParam) {
-        return this.queryEntity(sysPositionIdParam.getId());
-    }
-
-    @Override
-    public SysPosition queryEntity(String id) {
-        SysPosition sysPosition = this.getById(id);
-        if(ObjectUtil.isEmpty(sysPosition)) {
-            throw new CommonException("职位不存在,id值为:{}", id);
-        }
-        return sysPosition;
-    }
-
-    @Override
-    public SysPosition getById(List<SysPosition> originDataList, String id) {
-        int index = CollStreamUtil.toList(originDataList, SysPosition::getId).indexOf(id);
-        return index == -1?null:originDataList.get(index);
-    }
-
-    @Override
-    public String getPositionIdByPositionNameWithCreate(String orgId, String positionName) {
-        SysPosition sysPosition = this.getOne(new LambdaQueryWrapper<SysPosition>().eq(SysPosition::getOrgId, orgId).eq(SysPosition::getName, positionName));
-        if(ObjectUtil.isNotEmpty(sysPosition)) {
-            return sysPosition.getId();
-        } else {
-            sysPosition = new SysPosition();
-            sysPosition.setOrgId(orgId);
-            sysPosition.setName(positionName);
-            sysPosition.setCode(RandomUtil.randomString(10));
-            sysPosition.setCategory(SysPositionCategoryEnum.LOW.getValue());
-            sysPosition.setSortCode(99);
-            this.save(sysPosition);
-            // 发布增加事件
-            CommonDataChangeEventCenter.doAddWithData(SysDataTypeEnum.POSITION.getValue(), JSONUtil.createArray().put(sysPosition));
-            return sysPosition.getId();
-        }
-    }
-
-    /* ====职位部分所需要用到的选择器==== */
-
-    @Override
-    public List<Tree<String>> orgTreeSelector() {
-        List<SysOrg> sysOrgList = sysOrgService.getAllOrgList();
-        List<TreeNode<String>> treeNodeList = sysOrgList.stream().map(sysOrg ->
-                new TreeNode<>(sysOrg.getId(), sysOrg.getParentId(), sysOrg.getName(), sysOrg.getSortCode()))
-                .collect(Collectors.toList());
-        return TreeUtil.build(treeNodeList, "0");
-    }
-
-    @Override
-    public Page<SysPosition> positionSelector(SysPositionSelectorPositionParam sysPositionSelectorPositionParam) {
-        LambdaQueryWrapper<SysPosition> lambdaQueryWrapper = new LambdaQueryWrapper<>();
-        // 查询部分字段
-        lambdaQueryWrapper.select(SysPosition::getId, SysPosition::getOrgId, SysPosition::getName,
-                SysPosition::getCategory, SysPosition::getSortCode);
-        if(ObjectUtil.isNotEmpty(sysPositionSelectorPositionParam.getOrgId())) {
-            lambdaQueryWrapper.eq(SysPosition::getOrgId, sysPositionSelectorPositionParam.getOrgId());
-        }
-        if(ObjectUtil.isNotEmpty(sysPositionSelectorPositionParam.getSearchKey())) {
-            lambdaQueryWrapper.like(SysPosition::getName, sysPositionSelectorPositionParam.getSearchKey());
-        }
-        lambdaQueryWrapper.orderByAsc(SysPosition::getSortCode);
-        return this.page(CommonPageRequest.defaultPage(), lambdaQueryWrapper);
-    }
-}

+ 1 - 1
snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/role/service/impl/SysRoleServiceImpl.java

@@ -468,7 +468,7 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
     public Page<SysUser> userSelector(SysRoleSelectorUserParam sysRoleSelectorUserParam) {
         LambdaQueryWrapper<SysUser> lambdaQueryWrapper = new LambdaQueryWrapper<>();
         // 只查询部分字段
-        lambdaQueryWrapper.select(SysUser::getId, SysUser::getAvatar, SysUser::getOrgId, SysUser::getPositionId, SysUser::getAccount,
+        lambdaQueryWrapper.select(SysUser::getId, SysUser::getAvatar, SysUser::getOrgId, SysUser::getAccount,
                 SysUser::getName, SysUser::getSortCode, SysUser::getGender, SysUser::getEntryDate);
         // 如果查询条件为空,则直接查询
         if(ObjectUtil.isAllEmpty(sysRoleSelectorUserParam.getOrgId(), sysRoleSelectorUserParam.getSearchKey())) {

+ 3 - 58
snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/controller/SysUserCenterController.java

@@ -27,7 +27,6 @@ import org.springframework.web.multipart.MultipartFile;
 import vip.xiaonuo.common.annotation.CommonLog;
 import vip.xiaonuo.common.pojo.CommonResult;
 import vip.xiaonuo.sys.modular.org.entity.SysOrg;
-import vip.xiaonuo.sys.modular.position.entity.SysPosition;
 import vip.xiaonuo.sys.modular.role.entity.SysRole;
 import vip.xiaonuo.sys.modular.user.entity.SysUser;
 import vip.xiaonuo.sys.modular.user.param.*;
@@ -39,6 +38,7 @@ import vip.xiaonuo.sys.modular.user.service.SysUserService;
 
 import javax.annotation.Resource;
 import javax.validation.Valid;
+import java.io.IOException;
 import java.util.List;
 
 /**
@@ -83,19 +83,6 @@ public class SysUserCenterController {
     }
 
     /**
-     * 找回密码获取邮箱验证码
-     *
-     * @author xuyuxiang
-     * @date 2021/10/13 14:01
-     **/
-    @ApiOperationSupport(order = 3)
-    @ApiOperation("找回密码获取邮箱验证码")
-    @GetMapping("/sys/userCenter/findPasswordGetEmailValidCode")
-    public CommonResult<String> findPasswordGetEmailValidCode(@Valid SysUserGetEmailValidCodeParam sysUserGetEmailValidCodeParam) {
-        return CommonResult.data(sysUserService.findPasswordGetEmailValidCode(sysUserGetEmailValidCodeParam));
-    }
-
-    /**
      * 通过手机号找回用户密码
      *
      * @author xuyuxiang
@@ -111,21 +98,6 @@ public class SysUserCenterController {
     }
 
     /**
-     * 通过邮箱找回用户密码
-     *
-     * @author xuyuxiang
-     * @date 2021/10/13 14:01
-     **/
-    @ApiOperationSupport(order = 5)
-    @ApiOperation("通过邮箱找回用户密码")
-    @CommonLog("通过邮箱找回用户密码")
-    @PostMapping("/sys/userCenter/findPasswordByEmail")
-    public CommonResult<String> findPasswordByEmail(@RequestBody @Valid SysUserFindPwdByEmailParam sysUserFindPwdByEmailParam) {
-        sysUserService.findPasswordByEmail(sysUserFindPwdByEmailParam);
-        return CommonResult.ok();
-    }
-
-    /**
      * 修改用户密码
      *
      * @author xuyuxiang
@@ -150,22 +122,8 @@ public class SysUserCenterController {
     @ApiOperation("修改用户头像")
     @CommonLog("修改用户头像")
     @PostMapping("/sys/userCenter/updateAvatar")
-    public CommonResult<String> updateAvatar(@RequestPart("file") @ApiParam(value="文件", required = true) MultipartFile file) {
-        return CommonResult.data(sysUserService.updateAvatar(file));
-    }
-
-    /**
-     * 修改用户签名图片
-     *
-     * @author xuyuxiang
-     * @date 2021/10/13 14:01
-     **/
-    @ApiOperationSupport(order = 8)
-    @ApiOperation("修改用户签名图片")
-    @CommonLog("修改用户签名图片")
-    @PostMapping("/sys/userCenter/updateSignature")
-    public CommonResult<String> updateSignature(@RequestBody @Valid SysUserSignatureParam sysUserSignatureParam) {
-        sysUserService.updateSignature(sysUserSignatureParam);
+    public CommonResult<String> updateAvatar(@RequestParam @ApiParam(value = "员工照片") MultipartFile avatar) throws IOException {
+        sysUserService.updateAvatar(avatar);
         return CommonResult.ok();
     }
 
@@ -327,19 +285,6 @@ public class SysUserCenterController {
     }
 
     /**
-     * 根据id集合获取职位集合
-     *
-     * @author xuyuxiang
-     * @date 2022/4/24 20:00
-     */
-    @ApiOperationSupport(order = 20)
-    @ApiOperation("根据id集合获取职位集合")
-    @PostMapping("/sys/userCenter/getPositionListByIdList")
-    public CommonResult<List<SysPosition>> getPositionListByIdList(@RequestBody @Valid SysUserIdListParam sysUserIdListParam) {
-        return CommonResult.data(sysUserService.getPositionListByIdList(sysUserIdListParam));
-    }
-
-    /**
      * 根据id集合获取角色集合
      *
      * @author xuyuxiang

+ 16 - 16
snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/controller/SysUserController.java

@@ -28,7 +28,6 @@ import vip.xiaonuo.common.annotation.CommonLog;
 import vip.xiaonuo.common.pojo.CommonResult;
 import vip.xiaonuo.common.pojo.CommonValidList;
 import vip.xiaonuo.sys.modular.org.entity.SysOrg;
-import vip.xiaonuo.sys.modular.position.entity.SysPosition;
 import vip.xiaonuo.sys.modular.role.entity.SysRole;
 import vip.xiaonuo.sys.modular.user.entity.SysUser;
 import vip.xiaonuo.sys.modular.user.param.*;
@@ -81,8 +80,22 @@ public class SysUserController {
     @ApiOperation("添加用户")
     @CommonLog("添加用户")
     @PostMapping("/sys/user/add")
-    public CommonResult<String> add(@RequestBody @Valid SysUserAddParam sysUserAddParam) {
-        sysUserService.add(sysUserAddParam);
+    public CommonResult<String> add(@RequestParam @ApiParam(value = "员工编号") String empNo,
+                                    @RequestParam @ApiParam(value = "账号") String account,
+                                    @RequestParam @ApiParam(value = "姓名") String name,
+                                    @RequestParam @ApiParam(value = "组织id") String orgId,
+                                    @RequestParam @ApiParam(value = "部门id") String departmentId,
+                                    @RequestParam @ApiParam(value = "工作地点id") String workLocationId,
+                                    @RequestParam @ApiParam(value = "昵称") String nickname,
+                                    @RequestParam @ApiParam(value = "性别") String gender,
+                                    @RequestParam @ApiParam(value = "家庭住址") String homeAddress,
+                                    @RequestParam @ApiParam(value = "详细住址") String detailAddress,
+                                    @RequestParam @ApiParam(value = "身份证号") String idCardNumber,
+                                    @RequestParam @ApiParam(value = "手机") String phone,
+                                    @RequestParam @ApiParam(value = "紧急联系人电话") String emergencyPhone,
+                                    @RequestParam @ApiParam(value = "入职日期") String entryDate,
+                                    @RequestParam @ApiParam(value = "员工照片") MultipartFile avatar) throws IOException {
+        sysUserService.add(empNo,account,name,orgId,departmentId,workLocationId,nickname,gender,homeAddress,detailAddress,idCardNumber,phone,emergencyPhone,entryDate,avatar);
         return CommonResult.ok();
     }
 
@@ -344,19 +357,6 @@ public class SysUserController {
     }
 
     /**
-     * 获取职位选择器
-     *
-     * @author xuyuxiang
-     * @date 2022/4/24 20:00
-     */
-    @ApiOperationSupport(order = 21)
-    @ApiOperation("获取职位选择器")
-    @GetMapping("/sys/user/positionSelector")
-    public CommonResult<Page<SysPosition>> positionSelector(SysUserSelectorPositionParam sysUserSelectorPositionParam) {
-        return CommonResult.data(sysUserService.positionSelector(sysUserSelectorPositionParam));
-    }
-
-    /**
      * 获取角色选择器
      *
      * @author xuyuxiang

+ 14 - 115
snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/entity/SysUser.java

@@ -24,8 +24,8 @@ import lombok.Getter;
 import lombok.Setter;
 import vip.xiaonuo.common.handler.CommonSm4CbcTypeHandler;
 import vip.xiaonuo.common.pojo.CommonEntity;
+import vip.xiaonuo.sys.modular.department.entity.SysDepartment;
 import vip.xiaonuo.sys.modular.org.entity.SysOrg;
-import vip.xiaonuo.sys.modular.position.entity.SysPosition;
 
 import java.util.Date;
 
@@ -50,11 +50,6 @@ public class SysUser extends CommonEntity implements TransPojo {
     @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
     private String avatar;
 
-    /** 签名 */
-    @ApiModelProperty(value = "签名", position = 3)
-    @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
-    private String signature;
-
     /** 账号 */
     @ApiModelProperty(value = "账号", position = 4)
     private String account;
@@ -78,111 +73,32 @@ public class SysUser extends CommonEntity implements TransPojo {
     @Trans(type = TransType.DICTIONARY, key = "GENDER")
     private String gender;
 
-    /** 年龄 */
-    @ApiModelProperty(value = "年龄", position = 9)
-    @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
-    private String age;
-
-    /** 出生日期 */
-    @ApiModelProperty(value = "出生日期", position = 10)
-    @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
-    private String birthday;
-
-    /** 民族 */
-    @ApiModelProperty(value = "民族", position = 11)
-    @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
-    private String nation;
-
-    /** 籍贯 */
-    @ApiModelProperty(value = "籍贯", position = 12)
-    @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
-    private String nativePlace;
-
     /** 家庭住址 */
     @ApiModelProperty(value = "家庭住址", position = 13)
     @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
     private String homeAddress;
 
-    /** 通信地址 */
-    @ApiModelProperty(value = "通信地址", position = 14)
+    /** 详细地址 */
+    @ApiModelProperty(value = "详细地址", position = 14)
     @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
-    private String mailingAddress;
+    private String detailAddress;
 
-    /** 证件类型 */
-    @ApiModelProperty(value = "证件类型", position = 15)
-    @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
-    private String idCardType;
 
     /** 证件号码 */
     @ApiModelProperty(value = "证件号码", position = 16)
     @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED, typeHandler = CommonSm4CbcTypeHandler.class)
     private String idCardNumber;
 
-    /** 文化程度 */
-    @ApiModelProperty(value = "文化程度", position = 17)
-    @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
-    private String cultureLevel;
-
-    /** 政治面貌 */
-    @ApiModelProperty(value = "政治面貌", position = 18)
-    @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
-    private String politicalOutlook;
-
-    /** 毕业院校 */
-    @ApiModelProperty(value = "毕业院校", position = 19)
-    @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
-    private String college;
-
-    /** 学历 */
-    @ApiModelProperty(value = "学历", position = 20)
-    @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
-    private String education;
-
-    /** 学制 */
-    @ApiModelProperty(value = "学制", position = 21)
-    @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
-    private String eduLength;
-
-    /** 学位 */
-    @ApiModelProperty(value = "学位", position = 22)
-    @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
-    private String degree;
-
     /** 手机 */
     @ApiModelProperty(value = "手机", position = 23)
     @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED, typeHandler = CommonSm4CbcTypeHandler.class)
     private String phone;
 
-    /** 邮箱 */
-    @ApiModelProperty(value = "邮箱", position = 24)
-    @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
-    private String email;
-
-    /** 家庭电话 */
-    @ApiModelProperty(value = "家庭电话", position = 25)
-    @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
-    private String homeTel;
-
-    /** 办公电话 */
-    @ApiModelProperty(value = "办公电话", position = 26)
-    @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
-    private String officeTel;
-
-    /** 紧急联系人 */
-    @ApiModelProperty(value = "紧急联系人", position = 27)
-    @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
-    private String emergencyContact;
-
     /** 紧急联系人电话 */
     @ApiModelProperty(value = "紧急联系人电话", position = 28)
     @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED, typeHandler = CommonSm4CbcTypeHandler.class)
     private String emergencyPhone;
 
-    /** 紧急联系人地址 */
-    @ApiModelProperty(value = "紧急联系人地址", position = 29)
-    @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
-    private String emergencyAddress;
-
     /** 员工编号 */
     @ApiModelProperty(value = "员工编号", position = 30)
     @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
@@ -199,27 +115,15 @@ public class SysUser extends CommonEntity implements TransPojo {
     @Trans(type = TransType.SIMPLE, target = SysOrg.class, fields = "name", alias = "org", ref = "orgName")
     private String orgId;
 
-    /** 职位id */
-    @ApiModelProperty(value = "职位id", position = 33)
-    @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
-    @Trans(type = TransType.SIMPLE, target = SysPosition.class, fields = "name", alias = "position", ref = "positionName")
-    private String positionId;
-
-    /** 职级 */
-    @ApiModelProperty(value = "职级", position = 34)
-    @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
-    private String positionLevel;
-
-    /** 主管id */
-    @ApiModelProperty(value = "主管id", position = 35)
+    /** 组织id */
+    @ApiModelProperty(value = "部门id", position = 33)
     @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
-    @Trans(type = TransType.SIMPLE, target = SysUser.class, fields = "name", alias = "director", ref = "directorName")
-    private String directorId;
+    @Trans(type = TransType.SIMPLE, target = SysDepartment.class, fields = "departmentName", alias = "department", ref = "departmentName")
+    private String departmentId;
 
-    /** 兼任信息 */
-    @ApiModelProperty(value = "兼任信息", position = 36)
-    @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
-    private String positionJson;
+    /** 工作地点id */
+    @ApiModelProperty(value = "工作地点id", position = 34)
+    private String workLocationId;
 
     /** 上次登录ip */
     @ApiModelProperty(value = "上次登录ip", position = 37)
@@ -271,14 +175,9 @@ public class SysUser extends CommonEntity implements TransPojo {
     @TableField(exist = false)
     private String orgName;
 
-    /** 职位名称 */
-    @ApiModelProperty(value = "职位名称", position = 49)
-    @TableField(exist = false)
-    private String positionName;
-
-    /** 主管名称 */
-    @ApiModelProperty(value = "主管名称", position = 50)
+    /** 组织名称 */
+    @ApiModelProperty(value = "部门名称", position = 49)
     @TableField(exist = false)
-    private String directorName;
+    private String departmentName;
 
 }

+ 2 - 83
snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/param/SysUserAddParam.java

@@ -43,27 +43,10 @@ public class SysUserAddParam {
     @NotBlank(message = "orgId不能为空")
     private String orgId;
 
-    /** 职位id */
-    @ApiModelProperty(value = "职位id", required = true, position = 4)
-    @NotBlank(message = "positionId不能为空")
-    private String positionId;
-
-    /** 职级 */
-    @ApiModelProperty(value = "职级", position = 5)
-    private String positionLevel;
-
-    /** 主管id */
-    @ApiModelProperty(value = "主管id", position = 6)
-    private String directorId;
-
     /** 头像 */
-    @ApiModelProperty(value = "头像,图片base64", position = 7)
+    @ApiModelProperty(value = "头像", position = 7)
     private String avatar;
 
-    /** 签名 */
-    @ApiModelProperty(value = "签名,图片base64", position = 8)
-    private String signature;
-
     /** 昵称 */
     @ApiModelProperty(value = "昵称", position = 9)
     private String nickname;
@@ -80,94 +63,30 @@ public class SysUserAddParam {
     @ApiModelProperty(value = "出生日期", position = 12)
     private String birthday;
 
-    /** 民族 */
-    @ApiModelProperty(value = "民族", position = 13)
-    private String nation;
-
-    /** 籍贯 */
-    @ApiModelProperty(value = "籍贯", position = 14)
-    private String nativePlace;
-
     /** 家庭住址 */
     @ApiModelProperty(value = "家庭住址", position = 15)
     private String homeAddress;
 
-    /** 通信地址 */
-    @ApiModelProperty(value = "通信地址", position = 16)
-    private String mailingAddress;
-
-    /** 证件类型 */
-    @ApiModelProperty(value = "证件类型", position = 17)
-    private String idCardType;
-
     /** 证件号码 */
     @ApiModelProperty(value = "证件号码", position = 18)
     private String idCardNumber;
 
-    /** 文化程度 */
-    @ApiModelProperty(value = "文化程度", position = 19)
-    private String cultureLevel;
-
-    /** 政治面貌 */
-    @ApiModelProperty(value = "政治面貌", position = 20)
-    private String politicalOutlook;
-
-    /** 毕业院校 */
-    @ApiModelProperty(value = "毕业院校", position = 21)
-    private String college;
-
-    /** 学历 */
-    @ApiModelProperty(value = "学历", position = 22)
-    private String education;
-
-    /** 学制 */
-    @ApiModelProperty(value = "学制", position = 23)
-    private String eduLength;
-
-    /** 学位 */
-    @ApiModelProperty(value = "学位", position = 24)
-    private String degree;
-
     /** 手机 */
     @ApiModelProperty(value = "手机", position = 25)
     private String phone;
 
-    /** 邮箱 */
-    @ApiModelProperty(value = "邮箱", position = 26)
-    private String email;
-
-    /** 家庭电话 */
-    @ApiModelProperty(value = "家庭电话", position = 27)
-    private String homeTel;
-
-    /** 办公电话 */
-    @ApiModelProperty(value = "办公电话", position = 28)
-    private String officeTel;
-
-    /** 紧急联系人 */
-    @ApiModelProperty(value = "紧急联系人", position = 29)
-    private String emergencyContact;
-
     /** 紧急联系人电话 */
     @ApiModelProperty(value = "紧急联系人电话", position = 30)
     private String emergencyPhone;
 
-    /** 紧急联系人地址 */
-    @ApiModelProperty(value = "紧急联系人地址", position = 31)
-    private String emergencyAddress;
-
     /** 员工编号 */
     @ApiModelProperty(value = "员工编号", position = 32)
     private String empNo;
 
     /** 入职日期 */
-    @ApiModelProperty(value = "员工编号", position = 33)
+    @ApiModelProperty(value = "入职日期", position = 33)
     private String entryDate;
 
-    /** 兼任信息 */
-    @ApiModelProperty(value = "兼任信息", position = 34)
-    private String positionJson;
-
     /** 排序码 */
     @ApiModelProperty(value = "排序码", position = 35)
     private Integer sortCode;

+ 0 - 50
snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/param/SysUserFindPwdByEmailParam.java

@@ -1,50 +0,0 @@
-/*
- * Copyright [2022] [https://www.xiaonuo.vip]
- *
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
- *
- * 1.请不要删除和修改根目录下的LICENSE文件。
- * 2.请不要删除和修改Snowy源码头部的版权声明。
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
- */
-package vip.xiaonuo.sys.modular.user.param;
-
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Getter;
-import lombok.Setter;
-
-import javax.validation.constraints.NotBlank;
-
-/**
- * 用户找回密码参数
- *
- * @author xuyuxiang
- * @date 2022/7/26 16:04
- **/
-@Getter
-@Setter
-public class SysUserFindPwdByEmailParam {
-
-    /** 邮箱 */
-    @ApiModelProperty(value = "邮箱", required = true, position = 1)
-    @NotBlank(message = "email不能为空")
-    private String email;
-
-    /** 验证码 */
-    @ApiModelProperty(value = "验证码", required = true, position = 2)
-    @NotBlank(message = "validCode不能为空")
-    private String validCode;
-
-    /** 验证码请求号 */
-    @ApiModelProperty(value = "验证码请求号", required = true, position = 3)
-    @NotBlank(message = "validCodeReqNo不能为空")
-    private String validCodeReqNo;
-
-    /** 新密码 */
-    @ApiModelProperty(value = "新密码", required = true, position = 4)
-    @NotBlank(message = "newPassword不能为空")
-    private String newPassword;
-}

+ 0 - 115
snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/provider/SysUserApiProvider.java

@@ -100,121 +100,6 @@ public class SysUserApiProvider implements SysUserApi {
         return CollectionUtil.newArrayList();
     }
 
-    @Override
-    public List<String> getUserIdListByPositionIdList(List<String> positionIdList) {
-        if(ObjectUtil.isNotEmpty(positionIdList)) {
-            return sysUserService.list(new LambdaQueryWrapper<SysUser>().in(SysUser::getPositionId, positionIdList)).stream()
-                    .map(SysUser::getId).collect(Collectors.toList());
-        }
-        return CollectionUtil.newArrayList();
-    }
-
-    @Override
-    public JSONObject getSupervisorIdBySupervisorLevel(List<String> userIdList, String userId, String orgId, String supervisorLevel) {
-        SysUser sysUser = sysUserService.queryEntity(userId);
-        String userOrgId = sysUser.getOrgId();
-        String positionJson = sysUser.getPositionJson();
-        AtomicReference<String> result = new AtomicReference<>();
-        // 先查主职位主管
-        if(ObjectUtil.isAllNotEmpty(userOrgId)) {
-            if(userOrgId.equals(orgId)) {
-                String directorId = sysUser.getDirectorId();
-                if(ObjectUtil.isNotEmpty(directorId)) {
-                    result.set(directorId);
-                }
-            }
-        }
-        // 再查兼职职位主管
-        if(ObjectUtil.isEmpty(result.get())) {
-            if(ObjectUtil.isNotEmpty(positionJson)) {
-                JSONUtil.parseArray(positionJson).forEach(object -> {
-                    JSONObject jsonObject = JSONUtil.parseObj(object);
-                    String partTimeOrgId = jsonObject.getStr("orgId");
-                    if(ObjectUtil.isNotEmpty(partTimeOrgId) && orgId.equals(partTimeOrgId)) {
-                        String partTimDirectorId = jsonObject.getStr("directorId");
-                        if(ObjectUtil.isNotEmpty(partTimDirectorId)) {
-                            // 存在多个相同兼职职位,后者覆盖前者
-                            result.set(partTimDirectorId);
-                        }
-                    }
-                });
-            }
-        }
-        // 查询结果
-        String resultUserId = result.get();
-        // 如果要求查最高层级主管
-        if(supervisorLevel.equals("-1")) {
-            if(ObjectUtil.isEmpty(resultUserId)) {
-                // 查不到,则当前用户就是最高层级主管
-                if(ObjectUtil.isEmpty(userIdList)) {
-                    return JSONUtil.createObj().set("id", userId).set("idList", CollectionUtil.newArrayList(userId));
-                } else {
-                    return JSONUtil.createObj().set("id", userId).set("idList", userIdList);
-                }
-            } else {
-                if(ObjectUtil.isNotEmpty(userIdList)) {
-                    if(userIdList.contains(resultUserId)) {
-                        // 如果查出的结果已经出现过,意味着出现了循环主管,则当前的userId就是最高级主管
-                        return JSONUtil.createObj().set("id", userId).set("idList", userIdList);
-                    }
-                }
-                // 如果结果为空,则将查询的结果放入集合
-                userIdList.add(resultUserId);
-                // 继续查询
-                return this.getSupervisorIdBySupervisorLevel(userIdList, resultUserId, orgId, supervisorLevel);
-            }
-        } else {
-            // 如果要求查指定层级主管
-            if(ObjectUtil.isEmpty(resultUserId)) {
-                // 最直接主管查不到,则没有上级之说
-                return JSONUtil.createObj().set("id", null).set("idList", CollectionUtil.newArrayList());
-            } else {
-                // 由最低级向高级查,首先主管级别减1
-                String nextLevel = Convert.toStr(Convert.toInt(supervisorLevel) - 1);
-                // 如果减1后级别为0,表示查一级直属主管
-                if(nextLevel.equals("0")) {
-                    // 则当前结果就是一级直属主管
-                    return JSONUtil.createObj().set("id", resultUserId).set("idList", CollectionUtil.newArrayList(resultUserId));
-                } else {
-                    if(ObjectUtil.isNotEmpty(userIdList)) {
-                        if(userIdList.contains(resultUserId)) {
-                            // 如果查出的结果已经出现过,意味着出现了循环主管,则当前的userId就暂定是满足层级的主管
-                            return JSONUtil.createObj().set("id", userId).set("idList", userIdList);
-                        }
-                    }
-                    // 如果查出的结果没有出现过,则将查询的结果放入集合
-                    userIdList.add(resultUserId);
-                    // 继续查更高层级主管
-                    return this.getSupervisorIdBySupervisorLevel(userIdList, resultUserId, orgId, nextLevel);
-                }
-            }
-        }
-    }
-
-    @Override
-    public List<String> getMulSupervisorIdListByEndLevel(String userId, String orgId, String endLevel) {
-        List<String> resultList = CollectionUtil.newArrayList();
-        if(endLevel.equals("-1")) {
-            List<String> idList = this.getSupervisorIdBySupervisorLevel(CollectionUtil.newArrayList(), userId, orgId, endLevel)
-                    .getBeanList("idList", String.class);
-            if(ObjectUtil.isNotEmpty(idList)) {
-                resultList.addAll(idList);
-            }
-        } else {
-            Integer levelValue = Convert.toInt(endLevel);
-            for (int i = 1; i < levelValue; i++) {
-                String supervisorId = this.getSupervisorIdBySupervisorLevel(CollectionUtil.newArrayList(), userId, orgId,
-                        Convert.toStr(i)).getStr("id");
-                if(ObjectUtil.isNotEmpty(supervisorId)) {
-                    resultList.add(supervisorId);
-                } else {
-                    break;
-                }
-            }
-        }
-        return resultList;
-    }
-
     @SuppressWarnings("ALL")
     @Override
     public Page<JSONObject> userSelector(String orgId, String searchKey) {

+ 3 - 58
snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/service/SysUserService.java

@@ -18,7 +18,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import org.springframework.web.multipart.MultipartFile;
 import vip.xiaonuo.sys.modular.org.entity.SysOrg;
-import vip.xiaonuo.sys.modular.position.entity.SysPosition;
 import vip.xiaonuo.sys.modular.role.entity.SysRole;
 import vip.xiaonuo.sys.modular.user.entity.SysUser;
 import vip.xiaonuo.sys.modular.user.param.*;
@@ -61,14 +60,6 @@ public interface SysUserService extends IService<SysUser> {
     SysLoginUser getUserByPhone(String phone);
 
     /**
-     * 根据邮箱获取用户信息,查不到则返回null
-     *
-     * @author xuyuxiang
-     * @date 2022/4/27 21:38
-     */
-    SysLoginUser getUserByEmail(String email);
-
-    /**
      * 获取用户分页
      *
      * @author xuyuxiang
@@ -77,14 +68,6 @@ public interface SysUserService extends IService<SysUser> {
     Page<SysUser> page(SysUserPageParam sysUserPageParam);
 
     /**
-     * 添加用户
-     *
-     * @author xuyuxiang
-     * @date 2022/4/24 20:48
-     */
-    void add(SysUserAddParam sysUserAddParam);
-
-    /**
      * 编辑用户
      *
      * @author xuyuxiang
@@ -157,14 +140,6 @@ public interface SysUserService extends IService<SysUser> {
     String findPasswordGetPhoneValidCode(SysUserGetPhoneValidCodeParam sysUserGetPhoneValidCodeParam);
 
     /**
-     * 找回密码获取邮箱验证码
-     *
-     * @author xuyuxiang
-     * @date 2022/8/25 15:16
-     **/
-    String findPasswordGetEmailValidCode(SysUserGetEmailValidCodeParam sysUserGetEmailValidCodeParam);
-
-    /**
      * 通过手机号找回用户密码
      *
      * @author xuyuxiang
@@ -173,14 +148,6 @@ public interface SysUserService extends IService<SysUser> {
     void findPasswordByPhone(SysUserFindPwdByPhoneParam sysUserFindPwdByPhoneParam);
 
     /**
-     * 通过邮箱找回用户密码
-     *
-     * @author xuyuxiang
-     * @date 2022/4/22 15:53
-     **/
-    void findPasswordByEmail(SysUserFindPwdByEmailParam sysUserFindPwdByEmailParam);
-
-    /**
      * 修改用户密码
      *
      * @author xuyuxiang
@@ -194,15 +161,7 @@ public interface SysUserService extends IService<SysUser> {
      * @author xuyuxiang
      * @date 2022/4/22 15:53
      **/
-    String updateAvatar(MultipartFile file);
-
-    /**
-     * 修改用户签名图片返回base64
-     *
-     * @author xuyuxiang yubaoshan
-     * @date 2022/4/22 15:53
-     **/
-    void updateSignature(SysUserSignatureParam sysUserSignatureParam);
+    void updateAvatar(MultipartFile avatar) throws IOException;
 
     /**
      * 更新用户的登录时间和登录ip等信息
@@ -407,14 +366,6 @@ public interface SysUserService extends IService<SysUser> {
     Page<SysOrg> orgListSelector(SysUserSelectorOrgListParam sysUserSelectorOrgListParam);
 
     /**
-     * 获取职位选择器
-     *
-     * @author xuyuxiang
-     * @date 2022/5/13 21:00
-     */
-    Page<SysPosition> positionSelector(SysUserSelectorPositionParam sysUserSelectorPositionParam);
-
-    /**
      * 获取角色选择器
      *
      * @author xuyuxiang
@@ -463,18 +414,12 @@ public interface SysUserService extends IService<SysUser> {
     List<SysUser> getUserListByIdList(SysUserIdListParam sysUserIdListParam);
 
     /**
-     * 根据id集合获取职位集合
-     *
-     * @author xuyuxiang
-     * @date 2023/6/25 11:03
-     **/
-    List<SysPosition> getPositionListByIdList(SysUserIdListParam sysUserIdListParam);
-
-    /**
      * 根据id集合获取角色集合
      *
      * @author xuyuxiang
      * @date 2023/6/25 11:03
      **/
     List<SysRole> getRoleListByIdList(SysUserIdListParam sysUserIdListParam);
+
+    void add(String empNo, String account, String name, String orgId, String departmentId, String workLocationId, String nickname, String gender, String homeAddress, String detailAddress, String idCardNumber, String phone, String emergencyPhone, String entryDate, MultipartFile avatar) throws IOException;
 }

+ 44 - 251
snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/service/impl/SysUserServiceImpl.java

@@ -78,8 +78,6 @@ import vip.xiaonuo.sys.core.enums.SysBuildInEnum;
 import vip.xiaonuo.sys.core.enums.SysDataTypeEnum;
 import vip.xiaonuo.sys.modular.org.entity.SysOrg;
 import vip.xiaonuo.sys.modular.org.service.SysOrgService;
-import vip.xiaonuo.sys.modular.position.entity.SysPosition;
-import vip.xiaonuo.sys.modular.position.service.SysPositionService;
 import vip.xiaonuo.sys.modular.relation.entity.SysRelation;
 import vip.xiaonuo.sys.modular.relation.enums.SysRelationCategoryEnum;
 import vip.xiaonuo.sys.modular.relation.service.SysRelationService;
@@ -100,6 +98,7 @@ import vip.xiaonuo.sys.modular.user.mapper.SysUserMapper;
 import vip.xiaonuo.sys.modular.user.param.*;
 import vip.xiaonuo.sys.modular.user.result.*;
 import vip.xiaonuo.sys.modular.user.service.SysUserService;
+import vip.xiaonuo.sys.modular.user.utils.UploadImage;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
@@ -108,8 +107,6 @@ import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.*;
-import java.util.concurrent.atomic.AtomicReference;
-import java.util.concurrent.locks.Condition;
 import java.util.stream.Collectors;
 
 /**
@@ -133,15 +130,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     private CommonCacheOperator commonCacheOperator;
 
     @Resource
-    private DevSmsApi devSmsApi;
-
-    @Resource
     private TransService transService;
 
     @Resource
-    private DevEmailApi devEmailApi;
-
-    @Resource
     private DevConfigApi devConfigApi;
 
     @Resource
@@ -154,9 +145,6 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     private SysOrgService sysOrgService;
 
     @Resource
-    private SysPositionService sysPositionService;
-
-    @Resource
     private SysRoleService sysRoleService;
 
     @Resource
@@ -174,6 +162,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     @Resource
     private MobileButtonApi mobileButtonApi;
 
+    @Resource
+    private UploadImage uploadImage;
+
     @Override
     public SysLoginUser getUserById(String id) {
         SysUser sysUser = this.getById(id);
@@ -204,15 +195,6 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         return null;
     }
 
-    @Override
-    public SysLoginUser getUserByEmail(String email) {
-        SysUser sysUser = this.getOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getEmail, email));
-        if (ObjectUtil.isNotEmpty(sysUser)) {
-            transService.transOne(sysUser);
-            return BeanUtil.copyProperties(sysUser, SysLoginUser.class);
-        }
-        return null;
-    }
 
     @Override
     public Page<SysUser> page(SysUserPageParam sysUserPageParam) {
@@ -237,15 +219,29 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         return this.page(CommonPageRequest.defaultPage(), queryWrapper);
     }
 
-    @Transactional(rollbackFor = Exception.class)
     @Override
-    public void add(SysUserAddParam sysUserAddParam) {
-        checkParam(sysUserAddParam);
-        SysUser sysUser = BeanUtil.toBean(sysUserAddParam, SysUser.class);
-        if (ObjectUtil.isEmpty(sysUser.getAvatar())) {
-            // 设置默认头像
-            sysUser.setAvatar(CommonAvatarUtil.generateImg(sysUser.getName()));
+    public void add(String empNo, String account, String name, String orgId, String departmentId, String workLocationId, String nickname, String gender, String homeAddress, String detailAddress, String idCardNumber, String phone, String emergencyPhone, String entryDate, MultipartFile avatar) throws IOException {
+        checkParam(empNo,account,phone,orgId);
+        SysUser sysUser = new SysUser();
+        sysUser.setEmpNo(empNo);
+        sysUser.setAccount(account);
+        sysUser.setName(name);
+        sysUser.setOrgId(orgId);
+        sysUser.setDepartmentId(departmentId);
+        sysUser.setWorkLocationId(workLocationId);
+        sysUser.setNickname(nickname);
+        sysUser.setGender(gender);
+        sysUser.setHomeAddress(homeAddress);
+        sysUser.setDetailAddress(detailAddress);
+        sysUser.setIdCardNumber(idCardNumber);
+        sysUser.setPhone(phone);
+        sysUser.setEmergencyPhone(emergencyPhone);
+        sysUser.setEntryDate(entryDate);
+        String avatarUrl = uploadImage.getImageCom(avatar);
+        if (avatarUrl.equals("上传失败")){
+            throw new CommonException("图片上传失败!");
         }
+        sysUser.setAvatar(avatarUrl);
         // 设置默认密码
         sysUser.setPassword(CommonCryptogramUtil.doHashValue(devConfigApi.getValueByKey(SNOWY_SYS_DEFAULT_PASSWORD_KEY)));
         // 设置状态
@@ -256,27 +252,22 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         CommonDataChangeEventCenter.doAddWithData(SysDataTypeEnum.USER.getValue(), JSONUtil.createArray().put(sysUser));
     }
 
-    private void checkParam(SysUserAddParam sysUserAddParam) {
+    private void checkParam(String empNo, String account, String phone, String orgId) {
         if (this.count(new LambdaQueryWrapper<SysUser>()
-                .eq(SysUser::getAccount, sysUserAddParam.getAccount())) > 0) {
-            throw new CommonException("存在重复的账号,账号为:{}", sysUserAddParam.getAccount());
+                .eq(SysUser::getEmpNo, empNo).eq(SysUser::getOrgId,orgId)) > 0) {
+            throw new CommonException("存在重复的工号,工号为:{}", empNo);
         }
-        if (ObjectUtil.isNotEmpty(sysUserAddParam.getPhone())) {
-            if (!PhoneUtil.isMobile(sysUserAddParam.getPhone())) {
-                throw new CommonException("手机号码:{}格式错误", sysUserAddParam.getPhone());
-            }
-            if (this.count(new LambdaQueryWrapper<SysUser>()
-                    .eq(SysUser::getPhone, CommonCryptogramUtil.doSm4CbcEncrypt(sysUserAddParam.getPhone()))) > 0) {
-                throw new CommonException("存在重复的手机号,手机号为:{}", sysUserAddParam.getPhone());
-            }
+        if (this.count(new LambdaQueryWrapper<SysUser>()
+                .eq(SysUser::getAccount, account)) > 0) {
+            throw new CommonException("存在重复的账号,账号为:{}", account);
         }
-        if (ObjectUtil.isNotEmpty(sysUserAddParam.getEmail())) {
-            if (!CommonEmailUtil.isEmail(sysUserAddParam.getEmail())) {
-                throw new CommonException("邮箱:{}格式错误", sysUserAddParam.getEmail());
+        if (ObjectUtil.isNotEmpty(phone)) {
+            if (!PhoneUtil.isMobile(phone)) {
+                throw new CommonException("手机号码:{}格式错误", phone);
             }
             if (this.count(new LambdaQueryWrapper<SysUser>()
-                    .eq(SysUser::getEmail, sysUserAddParam.getEmail())) > 0) {
-                throw new CommonException("存在重复的邮箱,邮箱为:{}", sysUserAddParam.getEmail());
+                    .eq(SysUser::getPhone, CommonCryptogramUtil.doSm4CbcEncrypt(phone))) > 0) {
+                throw new CommonException("存在重复的手机号,手机号为:{}", phone);
             }
         }
     }
@@ -314,16 +305,6 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
                 throw new CommonException("存在重复的手机号,手机号为:{}", sysUserEditParam.getPhone());
             }
         }
-        if (ObjectUtil.isNotEmpty(sysUserEditParam.getEmail())) {
-            if (!CommonEmailUtil.isEmail(sysUserEditParam.getEmail())) {
-                throw new CommonException("邮箱:{}格式错误", sysUserEditParam.getEmail());
-            }
-            if (this.count(new LambdaQueryWrapper<SysUser>()
-                    .eq(SysUser::getEmail, sysUserEditParam.getEmail())
-                    .ne(SysUser::getId, sysUserEditParam.getId())) > 0) {
-                throw new CommonException("存在重复的邮箱,邮箱为:{}", sysUserEditParam.getEmail());
-            }
-        }
     }
 
     @Transactional(rollbackFor = Exception.class)
@@ -337,25 +318,6 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
                 throw new CommonException("不可删除系统内置超管用户");
             }
 
-            // 清除【将这些用户作为主管】的信息
-            this.update(new LambdaUpdateWrapper<SysUser>().in(SysUser::getDirectorId, sysUserIdList).set(SysUser::getDirectorId, null));
-
-            // 清除【将这些用户作为兼任职位的主管】的信息
-            this.list(new LambdaQueryWrapper<SysUser>().isNotNull(SysUser::getPositionJson)).forEach(sysUser -> {
-                List<JSONObject> handledJsonObjectList = JSONUtil.toList(JSONUtil.parseArray(sysUser.getPositionJson()),
-                        JSONObject.class).stream().peek(jsonObject -> {
-                    String directorId = jsonObject.getStr("directorId");
-                    if (ObjectUtil.isNotEmpty(directorId) && sysUserIdList.contains(directorId)) {
-                        jsonObject.remove("directorId");
-                    }
-                }).collect(Collectors.toList());
-                this.update(new LambdaUpdateWrapper<SysUser>().eq(SysUser::getId, sysUser.getId())
-                        .set(SysUser::getPositionJson, JSONUtil.toJsonStr(handledJsonObjectList)));
-            });
-
-            // 清除【将这些用户作为主管】的机构的主管信息
-            sysOrgService.update(new LambdaUpdateWrapper<SysOrg>().in(SysOrg::getDirectorId, sysUserIdList).set(SysOrg::getDirectorId, null));
-
             // 执行删除
             this.removeByIds(sysUserIdList);
 
@@ -473,34 +435,6 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         return phoneValidCodeReqNo;
     }
 
-    @Override
-    public String findPasswordGetEmailValidCode(SysUserGetEmailValidCodeParam sysUserGetEmailValidCodeParam) {
-        // 邮箱
-        String email = sysUserGetEmailValidCodeParam.getEmail();
-        // 验证码正确则校验邮箱格式
-        if (!CommonEmailUtil.isEmail(email)) {
-            throw new CommonException("邮箱:{}格式错误", email);
-        }
-        // 执行校验验证码
-        validValidCode(null, sysUserGetEmailValidCodeParam.getValidCode(), sysUserGetEmailValidCodeParam.getValidCodeReqNo());
-        // 根据邮箱获取用户信息,判断用户是否存在
-        if (ObjectUtil.isEmpty(this.getUserByEmail(email))) {
-            throw new CommonException("邮箱:{}不存在", email);
-        }
-        // 生成邮箱验证码的值,随机6为数字
-        String emailValidCode = RandomUtil.randomNumbers(6);
-        // 生成邮箱验证码的请求号
-        String emailValidCodeReqNo = IdWorker.getIdStr();
-
-        // TODO 使用本地发送邮件
-        String content = "您正在找回密码,验证码为:" + emailValidCode + ",5分钟内有效。";
-        devEmailApi.sendTextEmailLocal(email, "找回密码邮件", content, CollectionUtil.newArrayList());
-
-        // 将请求号作为key,验证码的值作为value放到redis,用于校验,5分钟有效
-        commonCacheOperator.put(USER_VALID_CODE_CACHE_KEY + email + StrUtil.UNDERLINE + emailValidCodeReqNo, emailValidCode, 5 * 60);
-        // 返回请求号
-        return emailValidCodeReqNo;
-    }
 
     @Override
     public void findPasswordByPhone(SysUserFindPwdByPhoneParam sysUserFindPwdByPhoneParam) {
@@ -512,15 +446,6 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     }
 
     @Override
-    public void findPasswordByEmail(SysUserFindPwdByEmailParam sysUserFindPwdByEmailParam) {
-        // 执行校验验证码
-        validValidCode(sysUserFindPwdByEmailParam.getEmail(), sysUserFindPwdByEmailParam.getValidCode(), sysUserFindPwdByEmailParam.getValidCodeReqNo());
-        this.update(new LambdaUpdateWrapper<SysUser>().eq(SysUser::getEmail,
-                sysUserFindPwdByEmailParam.getEmail()).set(SysUser::getPassword,
-                CommonCryptogramUtil.doHashValue(CommonCryptogramUtil.doSm2Decrypt(sysUserFindPwdByEmailParam.getNewPassword()))));
-    }
-
-    @Override
     public void updatePassword(SysUserUpdatePwdParam sysUserUpdatePwdParam) {
         SysUser sysUser = this.queryEntity(StpUtil.getLoginIdAsString());
         String password = sysUserUpdatePwdParam.getPassword();
@@ -534,33 +459,14 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     }
 
     @Override
-    public String updateAvatar(MultipartFile file) {
-        SysUser sysUser = this.queryEntity(StpUtil.getLoginIdAsString());
-        try {
-            String suffix = Objects.requireNonNull(FileUtil.getSuffix(file.getOriginalFilename())).toLowerCase();
-            String base64 = ImgUtil.toBase64DataUri(ImgUtil.scale(ImgUtil.toImage(file.getBytes()),
-                    100, 100, null), suffix);
-            this.update(new LambdaUpdateWrapper<SysUser>().eq(SysUser::getId,
-                    sysUser.getId()).set(SysUser::getAvatar, base64));
-            return base64;
-        } catch (IOException e) {
-            log.error(">>> 头像修改失败:", e);
-            throw new CommonException("头像修改失败,用户id值为:{}", sysUser.getId());
-        }
-    }
-
-    @Override
-    public void updateSignature(SysUserSignatureParam sysUserSignatureParam) {
+    public void updateAvatar(MultipartFile avatar) throws IOException {
         SysUser sysUser = this.queryEntity(StpUtil.getLoginIdAsString());
-        String sysUserSignatureStr = sysUserSignatureParam.getSignature();
-        if(sysUserSignatureParam.getSignature().contains(StrUtil.COMMA)) {
-            sysUserSignatureStr = StrUtil.split(sysUserSignatureStr, StrUtil.COMMA).get(1);
+        String avatarUrl = uploadImage.getImageCom(avatar);
+        if (avatarUrl.equals("上传失败")){
+            throw new CommonException("图片上传失败!");
         }
-        String base64 = ImgUtil.toBase64DataUri(ImgUtil.scale(ImgUtil.toImage(sysUserSignatureStr),
-                100, 50, null), ImgUtil.IMAGE_TYPE_PNG);
-        // 更新指定字段
-        this.update(new LambdaUpdateWrapper<SysUser>().eq(SysUser::getId, sysUser.getId())
-                .set(SysUser::getSignature, base64));
+        sysUser.setAvatar(avatarUrl);
+        this.updateById(sysUser);
     }
 
     @Override
@@ -861,15 +767,6 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         if(ObjectUtil.isNotEmpty(sysUserUpdateInfoParam.getGender())) {
             lambdaUpdateWrapper.set(SysUser::getGender, sysUserUpdateInfoParam.getGender());
         }
-        if(ObjectUtil.isNotEmpty(sysUserUpdateInfoParam.getBirthday())) {
-            lambdaUpdateWrapper.set(SysUser::getBirthday, sysUserUpdateInfoParam.getBirthday());
-        }
-        if(ObjectUtil.isNotEmpty(sysUserUpdateInfoParam.getEmail())) {
-            lambdaUpdateWrapper.set(SysUser::getEmail, sysUserUpdateInfoParam.getEmail());
-        }
-        if(ObjectUtil.isNotEmpty(sysUserUpdateInfoParam.getSignature())) {
-            lambdaUpdateWrapper.set(SysUser::getSignature, sysUserUpdateInfoParam.getSignature());
-        }
         // 更新指定字段
         this.update(lambdaUpdateWrapper);
     }
@@ -1049,8 +946,6 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
                 String positionName = CollectionUtil.getLast(StrUtil.split(positionFullName, StrUtil.DASHED));
                 // 机构id
                 String orgId = sysOrgService.getOrgIdByOrgFullNameWithCreate(orgFullName);
-                // 职位id
-                String positionId = sysPositionService.getPositionIdByPositionNameWithCreate(orgId, positionName);
 
                 // 查找账号对应索引
                 int index = CollStreamUtil.toList(allUserList, SysUser::getAccount).indexOf(account);
@@ -1064,7 +959,6 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 
                 // 获取手机号和邮箱
                 String phone = sysUserImportParam.getPhone();
-                String email = sysUserImportParam.getEmail();
 
                 // 判断手机号是否跟系统现有的重复
                 if(ObjectUtil.isNotEmpty(phone)) {
@@ -1086,36 +980,14 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
                         }
                     }
                 }
-                // 判断邮箱是否跟系统现有的重复
-                if(ObjectUtil.isNotEmpty(email)) {
-                    if(isAdd) {
-                        boolean repeatEmail = allUserList.stream().anyMatch(tempSysUser -> ObjectUtil
-                                .isNotEmpty(tempSysUser.getEmail()) && tempSysUser.getEmail().equals(email));
-                        if(repeatEmail) {
-                            // 新增邮箱重复则不导入该邮箱
-                            sysUserImportParam.setEmail(null);
-                        }
-                    } else {
-                        String finalExistUserId = sysUser.getId();
-                        boolean repeatEmail = allUserList.stream().anyMatch(tempSysUser -> ObjectUtil
-                                .isNotEmpty(tempSysUser.getEmail()) && tempSysUser.getEmail()
-                                .equals(email) && !tempSysUser.getId().equals(finalExistUserId));
-                        if(repeatEmail) {
-                            // 更新用户手机号重复则使用原邮箱
-                            sysUser.setEmail(sysUser.getEmail());
-                        }
-                    }
-                }
                 // 拷贝属性
                 BeanUtil.copyProperties(sysUserImportParam, sysUser);
 
                 // 设置机构id和职位id
                 sysUser.setOrgId(orgId);
-                sysUser.setPositionId(positionId);
 
                 // 设置机构名称和职位名称(暂时无作用)
                 sysUser.setOrgName(orgName);
-                sysUser.setPositionName(positionName);
 
                 // 发布事件
                 if(isAdd) {
@@ -1310,16 +1182,6 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
             ImageEntity imageEntity = new ImageEntity(ImgUtil.toBytes(ImgUtil.toImage(StrUtil
                     .split(avatarBase64, StrUtil.COMMA).get(1)), ImgUtil.IMAGE_TYPE_PNG), 120, 160);
             map.put("avatar", imageEntity);
-            if(ObjectUtil.isNotEmpty(sysUser.getBirthday())) {
-                try {
-                    // 年龄
-                    long age = DateUtil.betweenYear(DateUtil.parseDate(sysUser.getBirthday()), DateTime.now(), true);
-                    if(age != 0) {
-                        map.put("age", age + "岁");
-                    }
-                } catch (Exception ignored) {
-                }
-            }
             // 导出时间
             map.put("exportDateTime", DateUtil.format(DateTime.now(), DatePattern.CHINESE_DATE_PATTERN));
             // 生成doc
@@ -1357,61 +1219,18 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
             throw new CommonException("组织不存在,id值为:{}", primaryOrgId);
         }
         String primaryOrgName = primarySysOrg.getName();
-        List<SysPosition> sysPositionList = sysPositionService.list();
-        String primaryPositionId = sysUser.getPositionId();
-        SysPosition primaryPosition = sysPositionService.getById(sysPositionList, primaryPositionId);
-        if (ObjectUtil.isEmpty(primaryPosition)) {
-            throw new CommonException("职位不存在,id值为:{}", primaryPositionId);
-        }
-        String primaryPositionName = primaryPosition.getName();
         SysUserPositionResult primarySysUserPositionResult = new SysUserPositionResult();
         primarySysUserPositionResult.setOrgId(primaryOrgId);
         primarySysUserPositionResult.setOrgName(primaryOrgName);
-        primarySysUserPositionResult.setPositionId(primaryPositionId);
-        primarySysUserPositionResult.setPositionName(primaryPositionName);
-        primarySysUserPositionResult.setCategory(primarySysOrg.getCategory());
         primarySysUserPositionResult.setType("primary");
         sysUserPositionResultList.add(primarySysUserPositionResult);
-        String positionJson = sysUser.getPositionJson();
-        if (ObjectUtil.isNotEmpty(positionJson)) {
-            JSONArray jsonArray = JSONUtil.parseArray(positionJson);
-            if (ObjectUtil.isNotEmpty(jsonArray)) {
-                jsonArray.forEach(obj -> {
-                    JSONObject jsonObject = JSONUtil.parseObj(obj);
-                    String slaveOrgId = jsonObject.getStr("orgId");
-                    String slavePositionId = jsonObject.getStr("positionId");
-                    if (ObjectUtil.hasEmpty(slaveOrgId, slavePositionId)) {
-                        throw new CommonException("兼任职位数据不完整,用户id值为:{}", sysUserIdParam.getId());
-                    }
-                    SysOrg slaveSysOrg = sysOrgService.getById(sysOrgList, slaveOrgId);
-                    if (ObjectUtil.isEmpty(slaveSysOrg)) {
-                        throw new CommonException("组织不存在,id值为:{}", slaveSysOrg);
-                    }
-                    String slaveOrgName = slaveSysOrg.getName();
-
-                    SysPosition slavePosition = sysPositionService.getById(sysPositionList, slavePositionId);
-                    if (ObjectUtil.isEmpty(slavePosition)) {
-                        throw new CommonException("职位不存在,id值为:{}", slavePositionId);
-                    }
-                    String slavePositionName = slavePosition.getName();
-                    SysUserPositionResult slaveSysUserPositionResult = new SysUserPositionResult();
-                    slaveSysUserPositionResult.setOrgId(slaveOrgId);
-                    slaveSysUserPositionResult.setOrgName(slaveOrgName);
-                    slaveSysUserPositionResult.setPositionId(slavePositionId);
-                    slaveSysUserPositionResult.setPositionName(slavePositionName);
-                    slaveSysUserPositionResult.setCategory(slaveSysOrg.getCategory());
-                    slaveSysUserPositionResult.setType("slave");
-                    sysUserPositionResultList.add(slaveSysUserPositionResult);
-                });
-            }
-        }
         return sysUserPositionResultList;
     }
 
     @Override
     public Page<SysUser> getAllUserSelectorList() {
         return this.page(CommonPageRequest.defaultPage(), new LambdaQueryWrapper<SysUser>().select(SysUser::getId,
-                SysUser::getAvatar, SysUser::getOrgId, SysUser::getPositionId, SysUser::getAccount, SysUser::getName,
+                SysUser::getAvatar, SysUser::getOrgId, SysUser::getAccount, SysUser::getName,
                 SysUser::getSortCode, SysUser::getGender, SysUser::getEntryDate).orderByAsc(SysUser::getSortCode));
     }
 
@@ -1443,22 +1262,6 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     }
 
     @Override
-    public Page<SysPosition> positionSelector(SysUserSelectorPositionParam sysUserSelectorPositionParam) {
-        LambdaQueryWrapper<SysPosition> lambdaQueryWrapper = new LambdaQueryWrapper<>();
-        // 查询部分字段
-        lambdaQueryWrapper.select(SysPosition::getId, SysPosition::getOrgId, SysPosition::getName,
-                SysPosition::getCategory, SysPosition::getSortCode);
-        if (ObjectUtil.isNotEmpty(sysUserSelectorPositionParam.getOrgId())) {
-            lambdaQueryWrapper.eq(SysPosition::getOrgId, sysUserSelectorPositionParam.getOrgId());
-        }
-        if (ObjectUtil.isNotEmpty(sysUserSelectorPositionParam.getSearchKey())) {
-            lambdaQueryWrapper.like(SysPosition::getName, sysUserSelectorPositionParam.getSearchKey());
-        }
-        lambdaQueryWrapper.orderByAsc(SysPosition::getSortCode);
-        return sysPositionService.page(CommonPageRequest.defaultPage(), lambdaQueryWrapper);
-    }
-
-    @Override
     public Page<SysRole> roleSelector(SysUserSelectorRoleParam sysUserSelectorRoleParam) {
         LambdaQueryWrapper<SysRole> lambdaQueryWrapper = new LambdaQueryWrapper<>();
         lambdaQueryWrapper.select(SysRole::getId, SysRole::getOrgId, SysRole::getName,
@@ -1480,7 +1283,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     public Page<SysUser> userSelector(SysUserSelectorUserParam sysUserSelectorUserParam) {
         LambdaQueryWrapper<SysUser> lambdaQueryWrapper = new LambdaQueryWrapper<>();
         // 只查询部分字段
-        lambdaQueryWrapper.select(SysUser::getId, SysUser::getAvatar, SysUser::getOrgId, SysUser::getPositionId, SysUser::getAccount,
+        lambdaQueryWrapper.select(SysUser::getId, SysUser::getAvatar, SysUser::getOrgId, SysUser::getAccount,
                 SysUser::getName, SysUser::getSortCode, SysUser::getGender, SysUser::getEntryDate);
         // 如果查询条件为空,则直接查询
         if(ObjectUtil.isAllEmpty(sysUserSelectorUserParam.getOrgId(), sysUserSelectorUserParam.getSearchKey())) {
@@ -1536,16 +1339,6 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     }
 
     @Override
-    public List<SysPosition> getPositionListByIdList(SysUserIdListParam sysUserIdListParam) {
-        LambdaQueryWrapper<SysPosition> lambdaQueryWrapper = new LambdaQueryWrapper<>();
-        // 查询部分字段
-        lambdaQueryWrapper.select(SysPosition::getId, SysPosition::getOrgId, SysPosition::getName,
-                SysPosition::getCategory, SysPosition::getSortCode)
-                .in(SysPosition::getId, sysUserIdListParam.getIdList()).orderByAsc(SysPosition::getSortCode);
-        return sysPositionService.list(lambdaQueryWrapper);
-    }
-
-    @Override
     public List<SysRole> getRoleListByIdList(SysUserIdListParam sysUserIdListParam) {
         LambdaQueryWrapper<SysRole> lambdaQueryWrapper = new LambdaQueryWrapper<>();
         // 查询部分字段