Prechádzať zdrojové kódy

Merge branch '人员重构'

Newspaper 1 rok pred
rodič
commit
890216d352
58 zmenil súbory, kde vykonal 1203 pridanie a 3129 odobranie
  1. 0 72
      snowy-plugin-api/snowy-plugin-auth-api/src/main/java/vip/xiaonuo/auth/core/pojo/SaBaseClientLoginUser.java
  2. 5 81
      snowy-plugin-api/snowy-plugin-auth-api/src/main/java/vip/xiaonuo/auth/core/pojo/SaBaseLoginUser.java
  3. 0 24
      snowy-plugin-api/snowy-plugin-sys-api/src/main/java/vip/xiaonuo/sys/api/SysUserApi.java
  4. 6 0
      snowy-plugin/snowy-plugin-biz/pom.xml
  5. 2 24
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/org/service/impl/BizOrgServiceImpl.java
  6. 0 160
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/position/controller/BizPositionController.java
  7. 0 63
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/position/entity/BizPosition.java
  8. 0 48
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/position/enums/BizPositionCategoryEnum.java
  9. 0 55
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/position/param/BizPositionAddParam.java
  10. 0 60
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/position/param/BizPositionEditParam.java
  11. 0 35
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/position/param/BizPositionIdParam.java
  12. 0 44
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/position/param/BizPositionSelectorPositionParam.java
  13. 0 104
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/position/service/BizPositionService.java
  14. 0 260
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/position/service/impl/BizPositionServiceImpl.java
  15. 36 23
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/user/controller/BizUserController.java
  16. 15 125
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/user/entity/BizUser.java
  17. 3 11
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/user/service/BizUserService.java
  18. 84 112
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/user/service/impl/BizUserServiceImpl.java
  19. 184 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/user/utils/BizUploadImage.java
  20. 6 0
      snowy-plugin/snowy-plugin-sys/pom.xml
  21. 111 0
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/department/controller/SysDepartmentController.java
  22. 34 28
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/department/entity/Department.java
  23. 16 7
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/position/mapper/SysPositionMapper.java
  24. 6 6
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/position/mapper/BizPositionMapper.java
  25. 1 2
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/position/mapper/mapping/BizPositionMapper.xml
  26. 74 0
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/department/param/DepartmentAddParam.java
  27. 79 0
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/department/param/DepartmentEditParam.java
  28. 7 7
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/position/param/SysPositionIdParam.java
  29. 10 15
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/position/param/BizPositionPageParam.java
  30. 80 0
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/department/service/SysDepartmentService.java
  31. 94 0
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/department/service/impl/SysDepartmentServiceImpl.java
  32. 1 23
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/org/service/impl/SysOrgServiceImpl.java
  33. 0 152
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/position/controller/SysPositionController.java
  34. 0 63
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/position/entity/SysPosition.java
  35. 0 48
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/position/enums/SysPositionCategoryEnum.java
  36. 0 6
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/position/mapper/mapping/SysPositionMapper.xml
  37. 0 55
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/position/param/SysPositionAddParam.java
  38. 0 60
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/position/param/SysPositionEditParam.java
  39. 0 56
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/position/param/SysPositionPageParam.java
  40. 0 44
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/position/param/SysPositionSelectorPositionParam.java
  41. 0 53
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/position/provider/SysPositionApiProvider.java
  42. 0 112
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/position/service/SysPositionService.java
  43. 0 220
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/position/service/impl/SysPositionServiceImpl.java
  44. 1 1
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/role/service/impl/SysRoleServiceImpl.java
  45. 3 58
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/controller/SysUserCenterController.java
  46. 33 18
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/controller/SysUserController.java
  47. 14 115
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/entity/SysUser.java
  48. 2 83
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/param/SysUserAddParam.java
  49. 0 50
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/param/SysUserFindPwdByEmailParam.java
  50. 0 115
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/provider/SysUserApiProvider.java
  51. 0 86
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/result/SysUserResult.java
  52. 4 59
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/service/SysUserService.java
  53. 77 273
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/service/impl/SysUserServiceImpl.java
  54. 184 0
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/utils/SysUploadImage.java
  55. 1 1
      snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingthreshold/controller/FeedingThresholdController.java
  56. 1 1
      snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingthreshold/service/FeedingThresholdService.java
  57. 12 11
      snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingthreshold/service/impl/FeedingThresholdServiceImpl.java
  58. 17 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingthreshold/vo/FeedingThresholdVo2.java

+ 0 - 72
snowy-plugin-api/snowy-plugin-auth-api/src/main/java/vip/xiaonuo/auth/core/pojo/SaBaseClientLoginUser.java

@@ -37,10 +37,6 @@ public abstract class SaBaseClientLoginUser {
     @ApiModelProperty(value = "头像,图片base64", position = 2)
     private String avatar;
 
-    /** 签名 */
-    @ApiModelProperty(value = "签名,图片base64", position = 3)
-    private String signature;
-
     /** 账号 */
     @ApiModelProperty(value = "账号", position = 4)
     private String account;
@@ -57,90 +53,22 @@ public abstract class SaBaseClientLoginUser {
     @ApiModelProperty(value = "性别", position = 7)
     private String gender;
 
-    /** 年龄 */
-    @ApiModelProperty(value = "年龄", position = 8)
-    private String age;
-
-    /** 出生日期 */
-    @ApiModelProperty(value = "出生日期", position = 9)
-    private String birthday;
-
-    /** 民族 */
-    @ApiModelProperty(value = "民族", position = 10)
-    private String nation;
-
-    /** 籍贯 */
-    @ApiModelProperty(value = "籍贯", position = 11)
-    private String nativePlace;
-
     /** 家庭住址 */
     @ApiModelProperty(value = "家庭住址", position = 12)
     private String homeAddress;
 
-    /** 通信地址 */
-    @ApiModelProperty(value = "通信地址", position = 13)
-    private String mailingAddress;
-
-    /** 证件类型 */
-    @ApiModelProperty(value = "证件类型", position = 14)
-    private String idCardType;
-
     /** 证件号码 */
     @ApiModelProperty(value = "证件号码", position = 15)
     private String idCardNumber;
 
-    /** 文化程度 */
-    @ApiModelProperty(value = "文化程度", position = 16)
-    private String cultureLevel;
-
-    /** 政治面貌 */
-    @ApiModelProperty(value = "政治面貌", position = 17)
-    private String politicalOutlook;
-
-    /** 毕业院校 */
-    @ApiModelProperty(value = "毕业院校", position = 18)
-    private String college;
-
-    /** 学历 */
-    @ApiModelProperty(value = "学历", position = 19)
-    private String education;
-
-    /** 学制 */
-    @ApiModelProperty(value = "学制", position = 20)
-    private String eduLength;
-
-    /** 学位 */
-    @ApiModelProperty(value = "学位", position = 21)
-    private String degree;
-
     /** 手机 */
     @ApiModelProperty(value = "手机", position = 22)
     private String phone;
 
-    /** 邮箱 */
-    @ApiModelProperty(value = "邮箱", position = 23)
-    private String email;
-
-    /** 家庭电话 */
-    @ApiModelProperty(value = "家庭电话", position = 24)
-    private String homeTel;
-
-    /** 办公电话 */
-    @ApiModelProperty(value = "办公电话", position = 25)
-    private String officeTel;
-
-    /** 紧急联系人 */
-    @ApiModelProperty(value = "紧急联系人", position = 26)
-    private String emergencyContact;
-
     /** 紧急联系人电话 */
     @ApiModelProperty(value = "紧急联系人电话", position = 27)
     private String emergencyPhone;
 
-    /** 紧急联系人地址 */
-    @ApiModelProperty(value = "紧急联系人地址", position = 28)
-    private String emergencyAddress;
-
     /** 上次登录ip */
     @ApiModelProperty(value = "上次登录ip", position = 29)
     private String lastLoginIp;

+ 5 - 81
snowy-plugin-api/snowy-plugin-auth-api/src/main/java/vip/xiaonuo/auth/core/pojo/SaBaseLoginUser.java

@@ -37,10 +37,6 @@ public abstract class SaBaseLoginUser {
     @ApiModelProperty(value = "头像", position = 3)
     private String avatar;
 
-    /** 签名 */
-    @ApiModelProperty(value = "签名", position = 4)
-    private String signature;
-
     /** 账号 */
     @ApiModelProperty(value = "账号", position = 5)
     private String account;
@@ -57,90 +53,30 @@ public abstract class SaBaseLoginUser {
     @ApiModelProperty(value = "性别", position = 8)
     private String gender;
 
-    /** 年龄 */
-    @ApiModelProperty(value = "年龄", position = 9)
-    private String age;
-
-    /** 出生日期 */
-    @ApiModelProperty(value = "出生日期", position = 10)
-    private String birthday;
-
-    /** 民族 */
-    @ApiModelProperty(value = "民族", position = 11)
-    private String nation;
-
-    /** 籍贯 */
-    @ApiModelProperty(value = "籍贯", position = 12)
-    private String nativePlace;
-
     /** 家庭住址 */
     @ApiModelProperty(value = "家庭住址", position = 13)
     private String homeAddress;
 
     /** 通信地址 */
     @ApiModelProperty(value = "通信地址", position = 14)
-    private String mailingAddress;
+    private String detailAddress;
 
     /** 证件类型 */
     @ApiModelProperty(value = "证件类型", position = 15)
     private String idCardType;
 
-    /** 证件号码 */
-    @ApiModelProperty(value = "证件号码", position = 16)
-    private String idCardNumber;
-
     /** 文化程度 */
     @ApiModelProperty(value = "文化程度", position = 17)
     private String cultureLevel;
 
-    /** 政治面貌 */
-    @ApiModelProperty(value = "政治面貌", position = 18)
-    private String politicalOutlook;
-
-    /** 毕业院校 */
-    @ApiModelProperty(value = "毕业院校", position = 19)
-    private String college;
-
-    /** 学历 */
-    @ApiModelProperty(value = "学历", position = 20)
-    private String education;
-
-    /** 学制 */
-    @ApiModelProperty(value = "学制", position = 21)
-    private String eduLength;
-
-    /** 学位 */
-    @ApiModelProperty(value = "学位", position = 22)
-    private String degree;
-
     /** 手机 */
     @ApiModelProperty(value = "手机", position = 23)
     private String phone;
 
-    /** 邮箱 */
-    @ApiModelProperty(value = "邮箱", position = 24)
-    private String email;
-
-    /** 家庭电话 */
-    @ApiModelProperty(value = "家庭电话", position = 25)
-    private String homeTel;
-
-    /** 办公电话 */
-    @ApiModelProperty(value = "办公电话", position = 26)
-    private String officeTel;
-
-    /** 紧急联系人 */
-    @ApiModelProperty(value = "紧急联系人", position = 27)
-    private String emergencyContact;
-
     /** 紧急联系人电话 */
     @ApiModelProperty(value = "紧急联系人电话", position = 28)
     private String emergencyPhone;
 
-    /** 紧急联系人地址 */
-    @ApiModelProperty(value = "紧急联系人地址", position = 29)
-    private String emergencyAddress;
-
     /** 员工编号 */
     @ApiModelProperty(value = "员工编号", position = 30)
     private String empNo;
@@ -158,24 +94,12 @@ public abstract class SaBaseLoginUser {
     private String orgName;
 
     /** 职位id */
-    @ApiModelProperty(value = "职位id", position = 34)
-    private String positionId;
+    @ApiModelProperty(value = "部门id", position = 34)
+    private String departmentId;
 
     /** 职位名称 */
-    @ApiModelProperty(value = "职位名称", position = 35)
-    private String positionName;
-
-    /** 职级 */
-    @ApiModelProperty(value = "职级", position = 36)
-    private String positionLevel;
-
-    /** 主管id */
-    @ApiModelProperty(value = "主管id", position = 37)
-    private String directorId;
-
-    /** 兼任信息 */
-    @ApiModelProperty(value = "兼任信息", position = 38)
-    private String positionJson;
+    @ApiModelProperty(value = "部门名称", position = 35)
+    private String departmentName;
 
     /** 上次登录ip */
     @ApiModelProperty(value = "上次登录ip", position = 39)

+ 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-biz/pom.xml

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

+ 2 - 24
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/org/service/impl/BizOrgServiceImpl.java

@@ -36,8 +36,6 @@ import vip.xiaonuo.biz.modular.org.enums.BizOrgCategoryEnum;
 import vip.xiaonuo.biz.modular.org.mapper.BizOrgMapper;
 import vip.xiaonuo.biz.modular.org.param.*;
 import vip.xiaonuo.biz.modular.org.service.BizOrgService;
-import vip.xiaonuo.biz.modular.position.entity.BizPosition;
-import vip.xiaonuo.biz.modular.position.service.BizPositionService;
 import vip.xiaonuo.biz.modular.user.entity.BizUser;
 import vip.xiaonuo.biz.modular.user.service.BizUserService;
 import vip.xiaonuo.common.cache.CommonCacheOperator;
@@ -71,9 +69,6 @@ public class BizOrgServiceImpl extends ServiceImpl<BizOrgMapper, BizOrg> impleme
     private SysRoleApi sysRoleApi;
 
     @Resource
-    private BizPositionService bizPositionService;
-
-    @Resource
     private BizUserService bizUserService;
 
     @Override
@@ -213,28 +208,11 @@ public class BizOrgServiceImpl extends ServiceImpl<BizOrgMapper, BizOrg> impleme
             if(hasOrgUser) {
                 throw new CommonException("请先删除机构下的人员");
             }
-            // 机构下有人不能删除(兼任机构)
-            List<String> positionJsonList = bizUserService.list(new LambdaQueryWrapper<BizUser>()
-                    .isNotNull(BizUser::getPositionJson)).stream().map(BizUser::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 = sysRoleApi.orgHasRole(toDeleteOrgIdList);
             if(hasRole) {
                 throw new CommonException("请先删除机构下的角色");
             }
-            // 机构下有岗位不能删除
-            boolean hasPosition = bizPositionService.count(new LambdaQueryWrapper<BizPosition>().in(BizPosition::getOrgId, toDeleteOrgIdList)) > 0;
-            if(hasPosition) {
-                throw new CommonException("请先删除机构下的岗位");
-            }
             // 执行删除
             this.removeByIds(toDeleteOrgIdList);
 
@@ -375,8 +353,8 @@ public class BizOrgServiceImpl extends ServiceImpl<BizOrgMapper, BizOrg> impleme
             return new Page<>();
         }
         // 只查询部分字段
-        lambdaQueryWrapper.select(BizUser::getId, BizUser::getAvatar, BizUser::getOrgId, BizUser::getPositionId, BizUser::getAccount,
-                BizUser::getName, BizUser::getSortCode, BizUser::getGender, BizUser::getEntryDate);
+        lambdaQueryWrapper.select(BizUser::getId, BizUser::getAvatar, BizUser::getOrgId, BizUser::getAccount,
+                BizUser::getName, BizUser::getSortCode, BizUser::getEntryDate);
         if (ObjectUtil.isNotEmpty(bizOrgSelectorUserParam.getOrgId())) {
             // 如果机构id不为空,则查询该机构及其子机构下的所有人
             List<String> childOrgIdList = CollStreamUtil.toList(this.getChildListById(this

+ 0 - 160
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/position/controller/BizPositionController.java

@@ -1,160 +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.biz.modular.position.controller;
-
-import cn.dev33.satoken.annotation.SaCheckPermission;
-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.biz.modular.position.entity.BizPosition;
-import vip.xiaonuo.biz.modular.position.param.*;
-import vip.xiaonuo.biz.modular.position.service.BizPositionService;
-import vip.xiaonuo.common.annotation.CommonLog;
-import vip.xiaonuo.common.pojo.CommonResult;
-import vip.xiaonuo.common.pojo.CommonValidList;
-
-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 BizPositionController {
-
-    @Resource
-    private BizPositionService bizPositionService;
-
-    /**
-     * 获取岗位分页
-     *
-     * @author xuyuxiang
-     * @date 2022/4/24 20:00
-     */
-    @ApiOperationSupport(order = 1)
-    @ApiOperation("获取岗位分页")
-    @SaCheckPermission("/biz/position/page")
-    @GetMapping("/biz/position/page")
-    public CommonResult<Page<BizPosition>> page(BizPositionPageParam bizPositionPageParam) {
-        return CommonResult.data(bizPositionService.page(bizPositionPageParam));
-    }
-
-    /**
-     * 添加岗位
-     *
-     * @author xuyuxiang
-     * @date 2022/4/24 20:47
-     */
-    @ApiOperationSupport(order = 2)
-    @ApiOperation("添加岗位")
-    @CommonLog("添加岗位")
-    @SaCheckPermission("/biz/position/add")
-    @PostMapping("/biz/position/add")
-    public CommonResult<String> add(@RequestBody @Valid BizPositionAddParam bizPositionAddParam) {
-        bizPositionService.add(bizPositionAddParam);
-        return CommonResult.ok();
-    }
-
-    /**
-     * 编辑岗位
-     *
-     * @author xuyuxiang
-     * @date 2022/4/24 20:47
-     */
-    @ApiOperationSupport(order = 3)
-    @ApiOperation("编辑岗位")
-    @CommonLog("编辑岗位")
-    @SaCheckPermission("/biz/position/edit")
-    @PostMapping("/biz/position/edit")
-    public CommonResult<String> edit(@RequestBody @Valid BizPositionEditParam bizPositionEditParam) {
-        bizPositionService.edit(bizPositionEditParam);
-        return CommonResult.ok();
-    }
-
-    /**
-     * 删除岗位
-     *
-     * @author xuyuxiang
-     * @date 2022/4/24 20:00
-     */
-    @ApiOperationSupport(order = 4)
-    @ApiOperation("删除岗位")
-    @CommonLog("删除岗位")
-    @SaCheckPermission("/biz/position/delete")
-    @PostMapping("/biz/position/delete")
-    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
-                                                   CommonValidList<BizPositionIdParam> bizPositionIdParamList) {
-        bizPositionService.delete(bizPositionIdParamList);
-        return CommonResult.ok();
-    }
-
-    /**
-     * 获取岗位详情
-     *
-     * @author xuyuxiang
-     * @date 2022/4/24 20:00
-     */
-    @ApiOperationSupport(order = 5)
-    @ApiOperation("获取岗位详情")
-    @SaCheckPermission("/biz/position/detail")
-    @GetMapping("/biz/position/detail")
-    public CommonResult<BizPosition> detail(@Valid BizPositionIdParam bizPositionIdParam) {
-        return CommonResult.data(bizPositionService.detail(bizPositionIdParam));
-    }
-
-    /* ====岗位部分所需要用到的选择器==== */
-
-    /**
-     * 获取组织树选择器
-     *
-     * @author xuyuxiang
-     * @date 2022/4/24 20:00
-     */
-    @ApiOperationSupport(order = 6)
-    @ApiOperation("获取组织树选择器")
-    @SaCheckPermission("/biz/position/orgTreeSelector")
-    @GetMapping("/biz/position/orgTreeSelector")
-    public CommonResult<List<Tree<String>>> orgTreeSelector() {
-        return CommonResult.data(bizPositionService.orgTreeSelector());
-    }
-
-    /**
-     * 获取岗位选择器
-     *
-     * @author xuyuxiang
-     * @date 2022/4/24 20:00
-     */
-    @ApiOperationSupport(order = 7)
-    @ApiOperation("获取岗位选择器")
-    @SaCheckPermission("/biz/position/positionSelector")
-    @GetMapping("/biz/position/positionSelector")
-    public CommonResult<Page<BizPosition>> positionSelector(BizPositionSelectorPositionParam bizPositionSelectorPositionParam) {
-        return CommonResult.data(bizPositionService.positionSelector(bizPositionSelectorPositionParam));
-    }
-}

+ 0 - 63
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/position/entity/BizPosition.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.biz.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 BizPosition 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-biz/src/main/java/vip/xiaonuo/biz/modular/position/enums/BizPositionCategoryEnum.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.biz.modular.position.enums;
-
-import lombok.Getter;
-import vip.xiaonuo.common.exception.CommonException;
-
-/**
- * 岗位分类枚举
- *
- * @author xuyuxiang
- * @date 2022/4/21 19:56
- **/
-@Getter
-public enum BizPositionCategoryEnum {
-
-    /** 高层 */
-    HIGH("HIGH"),
-
-    /** 中层 */
-    MIDDLE("MIDDLE"),
-
-    /** 基层 */
-    LOW("LOW");
-
-    private final String value;
-
-    BizPositionCategoryEnum(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 - 55
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/position/param/BizPositionAddParam.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.biz.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 BizPositionAddParam {
-
-    /** 机构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-biz/src/main/java/vip/xiaonuo/biz/modular/position/param/BizPositionEditParam.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.biz.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 BizPositionEditParam {
-
-    /** 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-biz/src/main/java/vip/xiaonuo/biz/modular/position/param/BizPositionIdParam.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.biz.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 BizPositionIdParam {
-
-    /** id */
-    @ApiModelProperty(value = "id", required = true)
-    @NotBlank(message = "id不能为空")
-    private String id;
-}

+ 0 - 44
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/position/param/BizPositionSelectorPositionParam.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.biz.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 BizPositionSelectorPositionParam {
-
-    /** 当前页 */
-    @ApiModelProperty(value = "当前页码")
-    private Integer current;
-
-    /** 每页条数 */
-    @ApiModelProperty(value = "每页条数")
-    private Integer size;
-
-    /** 机构id */
-    @ApiModelProperty(value = "机构id")
-    private String orgId;
-
-    /** 名称关键词 */
-    @ApiModelProperty(value = "名称关键词")
-    private String searchKey;
-}

+ 0 - 104
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/position/service/BizPositionService.java

@@ -1,104 +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.biz.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.biz.modular.position.entity.BizPosition;
-import vip.xiaonuo.biz.modular.position.param.*;
-
-import java.util.List;
-
-/**
- * 岗位Service接口
- *
- * @author xuyuxiang
- * @date 2022/4/21 18:35
- **/
-public interface BizPositionService extends IService<BizPosition> {
-
-    /**
-     * 获取岗位分页
-     *
-     * @author xuyuxiang
-     * @date 2022/4/24 20:08
-     */
-    Page<BizPosition> page(BizPositionPageParam bizPositionPageParam);
-
-    /**
-     * 添加岗位
-     *
-     * @author xuyuxiang
-     * @date 2022/4/24 20:48
-     */
-    void add(BizPositionAddParam bizPositionAddParam);
-
-    /**
-     * 编辑岗位
-     *
-     * @author xuyuxiang
-     * @date 2022/4/24 21:13
-     */
-    void edit(BizPositionEditParam bizPositionEditParam);
-
-    /**
-     * 删除岗位
-     *
-     * @author xuyuxiang
-     * @date 2022/4/24 21:18
-     */
-    void delete(List<BizPositionIdParam> bizPositionIdParamList);
-
-    /**
-     * 获取岗位详情
-     *
-     * @author xuyuxiang
-     * @date 2022/4/24 21:18
-     */
-    BizPosition detail(BizPositionIdParam bizPositionIdParam);
-
-    /**
-     * 获取岗位详情
-     *
-     * @author xuyuxiang
-     * @date 2022/7/25 19:42
-     **/
-    BizPosition queryEntity(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<BizPosition> positionSelector(BizPositionSelectorPositionParam bizPositionSelectorPositionParam);
-}

+ 0 - 260
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/position/service/impl/BizPositionServiceImpl.java

@@ -1,260 +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.biz.modular.position.service.impl;
-
-import cn.dev33.satoken.stp.StpUtil;
-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.auth.core.util.StpLoginUserUtil;
-import vip.xiaonuo.biz.core.enums.BizDataTypeEnum;
-import vip.xiaonuo.biz.modular.org.entity.BizOrg;
-import vip.xiaonuo.biz.modular.org.service.BizOrgService;
-import vip.xiaonuo.biz.modular.position.entity.BizPosition;
-import vip.xiaonuo.biz.modular.position.enums.BizPositionCategoryEnum;
-import vip.xiaonuo.biz.modular.position.mapper.BizPositionMapper;
-import vip.xiaonuo.biz.modular.position.param.*;
-import vip.xiaonuo.biz.modular.position.service.BizPositionService;
-import vip.xiaonuo.biz.modular.user.entity.BizUser;
-import vip.xiaonuo.biz.modular.user.service.BizUserService;
-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 javax.annotation.Resource;
-import java.util.List;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-/**
- * 岗位Service接口实现类
- *
- * @author xuyuxiang
- * @date 2022/2/23 18:43
- **/
-@Service
-public class BizPositionServiceImpl extends ServiceImpl<BizPositionMapper, BizPosition> implements BizPositionService {
-
-    @Resource
-    private BizOrgService bizOrgService;
-
-    @Resource
-    private BizUserService bizUserService;
-
-    @Override
-    public Page<BizPosition> page(BizPositionPageParam bizPositionPageParam) {
-        QueryWrapper<BizPosition> queryWrapper = new QueryWrapper<>();
-        // 查询部分字段
-        queryWrapper.lambda().select(BizPosition::getId, BizPosition::getOrgId, BizPosition::getName,
-                BizPosition::getCategory, BizPosition::getSortCode);
-        if(ObjectUtil.isNotEmpty(bizPositionPageParam.getOrgId())) {
-            queryWrapper.lambda().eq(BizPosition::getOrgId, bizPositionPageParam.getOrgId());
-        }
-        if(ObjectUtil.isNotEmpty(bizPositionPageParam.getCategory())) {
-            queryWrapper.lambda().eq(BizPosition::getCategory, bizPositionPageParam.getCategory());
-        }
-        if(ObjectUtil.isAllNotEmpty(bizPositionPageParam.getSortField(), bizPositionPageParam.getSortOrder())) {
-            CommonSortOrderEnum.validate(bizPositionPageParam.getSortOrder());
-            queryWrapper.orderBy(true, bizPositionPageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
-                    StrUtil.toUnderlineCase(bizPositionPageParam.getSortField()));
-        } else {
-            queryWrapper.lambda().orderByAsc(BizPosition::getSortCode);
-        }
-        // 校验数据范围
-        List<String> loginUserDataScope = StpLoginUserUtil.getLoginUserDataScope();
-        if(ObjectUtil.isNotEmpty(loginUserDataScope)) {
-            queryWrapper.lambda().in(BizPosition::getOrgId, loginUserDataScope);
-        } else {
-            return new Page<>();
-        }
-        return this.page(CommonPageRequest.defaultPage(), queryWrapper);
-    }
-
-    @Transactional(rollbackFor = Exception.class)
-    @Override
-    public void add(BizPositionAddParam bizPositionAddParam) {
-        BizPositionCategoryEnum.validate(bizPositionAddParam.getCategory());
-        // 校验数据范围
-        List<String> loginUserDataScope = StpLoginUserUtil.getLoginUserDataScope();
-        if(ObjectUtil.isNotEmpty(loginUserDataScope)) {
-            if(!loginUserDataScope.contains(bizPositionAddParam.getOrgId())) {
-                throw new CommonException("您没有权限在该机构下增加岗位,机构id:{}", bizPositionAddParam.getOrgId());
-            }
-        } else {
-            throw new CommonException("您没有权限在该机构下增加岗位,机构id:{}", bizPositionAddParam.getOrgId());
-        }
-        BizPosition bizPosition = BeanUtil.toBean(bizPositionAddParam, BizPosition.class);
-        boolean repeatName = this.count(new LambdaQueryWrapper<BizPosition>().eq(BizPosition::getOrgId, bizPosition.getOrgId())
-                .eq(BizPosition::getName, bizPosition.getName())) > 0;
-        if(repeatName) {
-            throw new CommonException("同机构下存在重复的岗位,名称为:{}", bizPosition.getName());
-        }
-        bizPosition.setCode(RandomUtil.randomString(10));
-        this.save(bizPosition);
-
-        // 发布增加事件
-        CommonDataChangeEventCenter.doAddWithData(BizDataTypeEnum.POSITION.getValue(), JSONUtil.createArray().put(bizPosition));
-    }
-
-    @Transactional(rollbackFor = Exception.class)
-    @Override
-    public void edit(BizPositionEditParam bizPositionEditParam) {
-        BizPositionCategoryEnum.validate(bizPositionEditParam.getCategory());
-        BizPosition bizPosition = this.queryEntity(bizPositionEditParam.getId());
-        // 校验数据范围
-        List<String> loginUserDataScope = StpLoginUserUtil.getLoginUserDataScope();
-        if(ObjectUtil.isNotEmpty(loginUserDataScope)) {
-            if(!loginUserDataScope.contains(bizPositionEditParam.getOrgId())) {
-                throw new CommonException("您没有权限编辑该机构下的岗位,机构id:{}", bizPositionEditParam.getOrgId());
-            }
-        } else {
-            if(!bizPositionEditParam.getId().equals(StpUtil.getLoginIdAsString())) {
-                throw new CommonException("您没有权限编辑该机构下的岗位,机构id:{}", bizPositionEditParam.getOrgId());
-            }
-        }
-        BeanUtil.copyProperties(bizPositionEditParam, bizPosition);
-        boolean repeatName = this.count(new LambdaQueryWrapper<BizPosition>().eq(BizPosition::getOrgId, bizPosition.getOrgId())
-                .eq(BizPosition::getName, bizPosition.getName()).ne(BizPosition::getId, bizPosition.getId())) > 0;
-        if(repeatName) {
-            throw new CommonException("同机构下存在重复的岗位,名称为:{}", bizPosition.getName());
-        }
-        this.updateById(bizPosition);
-
-        // 发布更新事件
-        CommonDataChangeEventCenter.doUpdateWithData(BizDataTypeEnum.POSITION.getValue(), JSONUtil.createArray().put(bizPosition));
-    }
-
-    @Transactional(rollbackFor = Exception.class)
-    @Override
-    public void delete(List<BizPositionIdParam> bizPositionIdParamList) {
-        List<String> positionIdList = CollStreamUtil.toList(bizPositionIdParamList, BizPositionIdParam::getId);
-        if(ObjectUtil.isNotEmpty(positionIdList)) {
-            // 获取这些岗位的的机构id集合
-            Set<String> positionOrgIdList = this.listByIds(positionIdList).stream().map(BizPosition::getOrgId).collect(Collectors.toSet());
-            // 校验数据范围
-            List<String> loginUserDataScope = StpLoginUserUtil.getLoginUserDataScope();
-            if(ObjectUtil.isNotEmpty(loginUserDataScope)) {
-                if(!loginUserDataScope.containsAll(positionOrgIdList)) {
-                    throw new CommonException("您没有权限删除这些机构下的岗位,机构id:{}", positionOrgIdList);
-                }
-            } else {
-                throw new CommonException("您没有权限删除这些机构下的岗位,机构id:{}", positionOrgIdList);
-            }
-            // 岗位下有人不能删除(直属岗位)
-            boolean hasOrgUser = bizUserService.count(new LambdaQueryWrapper<BizUser>().in(BizUser::getPositionId, positionIdList)) > 0;
-            if(hasOrgUser) {
-                throw new CommonException("请先删除岗位下的用户");
-            }
-            // 岗位下有人不能删除(兼任岗位)
-            List<String> positionJsonList = bizUserService.list(new LambdaQueryWrapper<BizUser>()
-                    .isNotNull(BizUser::getPositionJson)).stream().map(BizUser::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(BizDataTypeEnum.POSITION.getValue(), positionIdList);
-        }
-    }
-
-    @Override
-    public BizPosition detail(BizPositionIdParam bizPositionIdParam) {
-        return this.queryEntity(bizPositionIdParam.getId());
-    }
-
-    @Override
-    public BizPosition queryEntity(String id) {
-        BizPosition bizPosition = this.getById(id);
-        if(ObjectUtil.isEmpty(bizPosition)) {
-            throw new CommonException("岗位不存在,id值为:{}", id);
-        }
-        return bizPosition;
-    }
-
-    @Override
-    public String getPositionIdByPositionNameWithCreate(String orgId, String positionName) {
-        return null;
-    }
-
-    /* ====岗位部分所需要用到的选择器==== */
-
-    @Override
-    public List<Tree<String>> orgTreeSelector() {
-        LambdaQueryWrapper<BizOrg> lambdaQueryWrapper = new LambdaQueryWrapper<>();
-        // 校验数据范围
-        List<String> loginUserDataScope = StpLoginUserUtil.getLoginUserDataScope();
-        // 定义机构集合
-        Set<BizOrg> bizOrgSet = CollectionUtil.newHashSet();
-        if(ObjectUtil.isNotEmpty(loginUserDataScope)) {
-            // 获取所有机构
-            List<BizOrg> allOrgList = bizOrgService.list();
-            loginUserDataScope.forEach(orgId -> bizOrgSet.addAll(bizOrgService.getParentListById(allOrgList, orgId, true)));
-            List<String> loginUserDataScopeFullList = bizOrgSet.stream().map(BizOrg::getId).collect(Collectors.toList());
-            lambdaQueryWrapper.in(BizOrg::getId, loginUserDataScopeFullList);
-        } else {
-            return CollectionUtil.newArrayList();
-        }
-        lambdaQueryWrapper.orderByAsc(BizOrg::getSortCode);
-        List<BizOrg> bizOrgList = bizOrgService.list(lambdaQueryWrapper);
-        List<TreeNode<String>> treeNodeList = bizOrgList.stream().map(bizOrg ->
-                new TreeNode<>(bizOrg.getId(), bizOrg.getParentId(), bizOrg.getName(), bizOrg.getSortCode()))
-                .collect(Collectors.toList());
-        return TreeUtil.build(treeNodeList, "0");
-    }
-
-    @Override
-    public Page<BizPosition> positionSelector(BizPositionSelectorPositionParam bizPositionSelectorPositionParam) {
-        LambdaQueryWrapper<BizPosition> lambdaQueryWrapper = new LambdaQueryWrapper<>();
-        // 校验数据范围
-        List<String> loginUserDataScope = StpLoginUserUtil.getLoginUserDataScope();
-        if(ObjectUtil.isNotEmpty(loginUserDataScope)) {
-            lambdaQueryWrapper.in(BizPosition::getOrgId, loginUserDataScope);
-        } else {
-            return new Page<>();
-        }
-        // 查询部分字段
-        lambdaQueryWrapper.select(BizPosition::getId, BizPosition::getOrgId, BizPosition::getName,
-                BizPosition::getCategory, BizPosition::getSortCode);
-        if(ObjectUtil.isNotEmpty(bizPositionSelectorPositionParam.getOrgId())) {
-            lambdaQueryWrapper.eq(BizPosition::getOrgId, bizPositionSelectorPositionParam.getOrgId());
-        }
-        if(ObjectUtil.isNotEmpty(bizPositionSelectorPositionParam.getSearchKey())) {
-            lambdaQueryWrapper.like(BizPosition::getName, bizPositionSelectorPositionParam.getSearchKey());
-        }
-        lambdaQueryWrapper.orderByAsc(BizPosition::getSortCode);
-        return this.page(CommonPageRequest.defaultPage(), lambdaQueryWrapper);
-    }
-}

+ 36 - 23
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/user/controller/BizUserController.java

@@ -19,14 +19,12 @@ 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 io.swagger.annotations.ApiParam;
 import org.springframework.http.MediaType;
 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 org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 import vip.xiaonuo.biz.modular.org.entity.BizOrg;
-import vip.xiaonuo.biz.modular.position.entity.BizPosition;
 import vip.xiaonuo.biz.modular.user.entity.BizUser;
 import vip.xiaonuo.biz.modular.user.param.*;
 import vip.xiaonuo.biz.modular.user.result.BizUserRoleResult;
@@ -82,8 +80,22 @@ public class BizUserController {
     @CommonLog("添加人员")
     @SaCheckPermission("/biz/user/add")
     @PostMapping("/biz/user/add")
-    public CommonResult<String> add(@RequestBody @Valid BizUserAddParam bizUserAddParam) {
-        bizUserService.add(bizUserAddParam);
+    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 {
+        bizUserService.add(empNo,account,name,orgId,departmentId,workLocationId,nickname,gender,homeAddress,detailAddress,idCardNumber,phone,emergencyPhone,entryDate,avatar);
         return CommonResult.ok();
     }
 
@@ -98,8 +110,23 @@ public class BizUserController {
     @CommonLog("编辑人员")
     @SaCheckPermission("/biz/user/edit")
     @PostMapping("/biz/user/edit")
-    public CommonResult<String> edit(@RequestBody @Valid BizUserEditParam bizUserEditParam) {
-        bizUserService.edit(bizUserEditParam);
+    public CommonResult<String> edit(@RequestParam @ApiParam(value = "id") String id,
+                                     @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 {
+        bizUserService.edit(id,empNo,account,name,orgId,departmentId,workLocationId,nickname,gender,homeAddress,detailAddress,idCardNumber,phone,emergencyPhone,entryDate,avatar);
         return CommonResult.ok();
     }
 
@@ -273,20 +300,6 @@ public class BizUserController {
     }
 
     /**
-     * 获取岗位选择器
-     *
-     * @author xuyuxiang
-     * @date 2022/4/24 20:00
-     */
-    @ApiOperationSupport(order = 15)
-    @ApiOperation("获取岗位选择器")
-    @SaCheckPermission("/biz/user/positionSelector")
-    @GetMapping("/biz/user/positionSelector")
-    public CommonResult<Page<BizPosition>> positionSelector(BizUserSelectorPositionParam bizUserSelectorPositionParam) {
-        return CommonResult.data(bizUserService.positionSelector(bizUserSelectorPositionParam));
-    }
-
-    /**
      * 获取角色选择器
      *
      * @author xuyuxiang

+ 15 - 125
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/user/entity/BizUser.java

@@ -22,9 +22,7 @@ import com.fhs.core.trans.vo.TransPojo;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.Setter;
-import vip.xiaonuo.biz.modular.department.entity.Department;
 import vip.xiaonuo.biz.modular.org.entity.BizOrg;
-import vip.xiaonuo.biz.modular.position.entity.BizPosition;
 import vip.xiaonuo.common.handler.CommonSm4CbcTypeHandler;
 import vip.xiaonuo.common.pojo.CommonEntity;
 
@@ -51,11 +49,6 @@ public class BizUser 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;
@@ -79,111 +72,32 @@ public class BizUser 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)
@@ -194,39 +108,21 @@ public class BizUser extends CommonEntity implements TransPojo {
     @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
     private String entryDate;
 
-    /** 机构id */
-    @ApiModelProperty(value = "机构id", position = 32)
+    /** 组织id */
+    @ApiModelProperty(value = "组织id", position = 32)
     @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
     @Trans(type = TransType.SIMPLE, target = BizOrg.class, fields = "name", alias = "org", ref = "orgName")
     private String orgId;
 
-    /** 部门id */
-    @ApiModelProperty(value = "部门id", position = 32)
+    /** 组织id */
+    @ApiModelProperty(value = "部门id", position = 33)
     @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
-    @Trans(type = TransType.SIMPLE, target = Department.class, fields = "departmentName", alias = "department", ref = "departmentName")
+//    @Trans(type = TransType.SIMPLE, target = SysDepartment.class, fields = "departmentName", alias = "department", ref = "departmentName")
     private String departmentId;
 
-    /** 岗位id */
-    @ApiModelProperty(value = "岗位id", position = 33)
-    @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
-    @Trans(type = TransType.SIMPLE, target = BizPosition.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)
-    @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
-    @Trans(type = TransType.SIMPLE, target = BizUser.class, fields = "name", alias = "director", ref = "directorName")
-    private String directorId;
-
-    /** 兼任信息 */
-    @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)
@@ -273,19 +169,13 @@ public class BizUser extends CommonEntity implements TransPojo {
     @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
     private String extJson;
 
-    @ApiModelProperty(value = "机构名称", position = 48)
+    /** 组织名称 */
+    @ApiModelProperty(value = "组织名称", position = 48)
     @TableField(exist = false)
     private String orgName;
 
-    @ApiModelProperty(value = "部门名称", position = 48)
+    /** 组织名称 */
+    @ApiModelProperty(value = "部门名称", position = 49)
     @TableField(exist = false)
     private String departmentName;
-
-    @ApiModelProperty(value = "岗位名称", position = 49)
-    @TableField(exist = false)
-    private String positionName;
-
-    @ApiModelProperty(value = "主管名称", position = 50)
-    @TableField(exist = false)
-    private String directorName;
 }

+ 3 - 11
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/user/service/BizUserService.java

@@ -15,8 +15,8 @@ package vip.xiaonuo.biz.modular.user.service;
 import cn.hutool.core.lang.tree.Tree;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
+import org.springframework.web.multipart.MultipartFile;
 import vip.xiaonuo.biz.modular.org.entity.BizOrg;
-import vip.xiaonuo.biz.modular.position.entity.BizPosition;
 import vip.xiaonuo.biz.modular.user.entity.BizUser;
 import vip.xiaonuo.biz.modular.user.param.*;
 import vip.xiaonuo.biz.modular.user.result.BizUserRoleResult;
@@ -47,7 +47,7 @@ public interface BizUserService extends IService<BizUser> {
      * @author xuyuxiang
      * @date 2022/4/24 20:48
      */
-    void add(BizUserAddParam bizUserAddParam);
+    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;
 
     /**
      * 编辑人员
@@ -55,7 +55,7 @@ public interface BizUserService extends IService<BizUser> {
      * @author xuyuxiang
      * @date 2022/4/24 21:13
      */
-    void edit(BizUserEditParam bizUserEditParam);
+    void edit(String id, 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;
 
     /**
      * 删除人员
@@ -156,14 +156,6 @@ public interface BizUserService extends IService<BizUser> {
     Page<BizOrg> orgListSelector(BizUserSelectorOrgListParam bizUserSelectorOrgListParam);
 
     /**
-     * 获取岗位选择器
-     *
-     * @author xuyuxiang
-     * @date 2022/5/13 21:00
-     */
-    Page<BizPosition> positionSelector(BizUserSelectorPositionParam bizUserSelectorPositionParam);
-
-    /**
      * 获取角色选择器
      *
      * @author xuyuxiang

+ 84 - 112
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/user/service/impl/BizUserServiceImpl.java

@@ -30,7 +30,6 @@ import cn.hutool.core.lang.tree.TreeUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.PhoneUtil;
 import cn.hutool.core.util.StrUtil;
-import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.excel.EasyExcel;
 import com.alibaba.excel.metadata.data.WriteCellData;
@@ -51,13 +50,12 @@ import org.apache.poi.ss.usermodel.*;
 import org.apache.poi.xwpf.usermodel.XWPFDocument;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
 import vip.xiaonuo.auth.core.util.StpLoginUserUtil;
 import vip.xiaonuo.biz.core.enums.BizBuildInEnum;
 import vip.xiaonuo.biz.core.enums.BizDataTypeEnum;
 import vip.xiaonuo.biz.modular.org.entity.BizOrg;
 import vip.xiaonuo.biz.modular.org.service.BizOrgService;
-import vip.xiaonuo.biz.modular.position.entity.BizPosition;
-import vip.xiaonuo.biz.modular.position.service.BizPositionService;
 import vip.xiaonuo.biz.modular.user.entity.BizUser;
 import vip.xiaonuo.biz.modular.user.enums.BizRoleCategoryEnum;
 import vip.xiaonuo.biz.modular.user.enums.BizUserStatusEnum;
@@ -114,8 +112,8 @@ public class BizUserServiceImpl extends ServiceImpl<BizUserMapper, BizUser> impl
     @Resource
     private BizOrgService bizOrgService;
 
-    @Resource
-    private BizPositionService bizPositionService;
+//    @Resource
+//    private BizUploadImage uploadImage;
 
     @Override
     public Page<BizUser> page(BizUserPageParam bizUserPageParam) {
@@ -151,13 +149,28 @@ public class BizUserServiceImpl extends ServiceImpl<BizUserMapper, BizUser> impl
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public void add(BizUserAddParam bizUserAddParam) {
-        checkParam(bizUserAddParam);
-        BizUser bizUser = BeanUtil.toBean(bizUserAddParam, BizUser.class);
-        if(ObjectUtil.isEmpty(bizUser.getAvatar())) {
-            // 设置默认头像
-            bizUser.setAvatar(CommonAvatarUtil.generateImg(bizUser.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);
+        BizUser bizUser = new BizUser();
+        bizUser.setEmpNo(empNo);
+        bizUser.setAccount(account);
+        bizUser.setName(name);
+        bizUser.setOrgId(orgId);
+        bizUser.setDepartmentId(departmentId);
+        bizUser.setWorkLocationId(workLocationId);
+        bizUser.setNickname(nickname);
+        bizUser.setGender(gender);
+        bizUser.setHomeAddress(homeAddress);
+        bizUser.setDetailAddress(detailAddress);
+        bizUser.setIdCardNumber(idCardNumber);
+        bizUser.setPhone(phone);
+        bizUser.setEmergencyPhone(emergencyPhone);
+        bizUser.setEntryDate(entryDate);
+//        String avatarUrl = uploadImage.getImageCom(avatar);
+//        if (avatarUrl.equals("上传失败")){
+//            throw new CommonException("图片上传失败!");
+//        }
+//        bizUser.setAvatar(avatarUrl);
         // 设置密码
         bizUser.setPassword(CommonCryptogramUtil.doHashValue(devConfigApi.getValueByKey(SNOWY_SYS_DEFAULT_PASSWORD_KEY)));
         // 设置状态
@@ -168,92 +181,102 @@ public class BizUserServiceImpl extends ServiceImpl<BizUserMapper, BizUser> impl
         CommonDataChangeEventCenter.doAddWithData(BizDataTypeEnum.USER.getValue(), JSONUtil.createArray().put(bizUser));
     }
 
-    private void checkParam(BizUserAddParam bizUserAddParam) {
+    private void checkParam(String empNo, String account, String phone, String orgId) {
         // 校验数据范围
         List<String> loginUserDataScope = StpLoginUserUtil.getLoginUserDataScope();
         if(ObjectUtil.isNotEmpty(loginUserDataScope)) {
-            if(!loginUserDataScope.contains(bizUserAddParam.getOrgId())) {
-                throw new CommonException("您没有权限在该机构下增加人员,机构id:{}", bizUserAddParam.getOrgId());
+            if(!loginUserDataScope.contains(orgId)) {
+                throw new CommonException("您没有权限在该机构下增加人员,机构id:{}", orgId);
             }
         } else {
-            throw new CommonException("您没有权限在该机构下增加人员,机构id:{}", bizUserAddParam.getOrgId());
+            throw new CommonException("您没有权限在该机构下增加人员,机构id:{}", orgId);
         }
         if (this.count(new LambdaQueryWrapper<BizUser>()
-                .eq(BizUser::getAccount, bizUserAddParam.getAccount())) > 0) {
-            throw new CommonException("存在重复的账号,账号为:{}", bizUserAddParam.getAccount());
+                .eq(BizUser::getEmpNo, empNo)) > 0) {
+            throw new CommonException("存在重复的工号,工号为:{}", empNo);
         }
-        if(ObjectUtil.isNotEmpty(bizUserAddParam.getPhone())) {
-            if(!PhoneUtil.isMobile(bizUserAddParam.getPhone())) {
-                throw new CommonException("手机号码:{}格式错误", bizUserAddParam.getPhone());
-            }
-            if (this.count(new LambdaQueryWrapper<BizUser>()
-                    .eq(BizUser::getPhone, CommonCryptogramUtil.doSm4CbcEncrypt(bizUserAddParam.getPhone()))) > 0) {
-                throw new CommonException("存在重复的手机号,手机号为:{}", bizUserAddParam.getPhone());
-            }
+        if (this.count(new LambdaQueryWrapper<BizUser>()
+                .eq(BizUser::getAccount, account)) > 0) {
+            throw new CommonException("存在重复的账号,账号为:{}", account);
         }
-        if(ObjectUtil.isNotEmpty(bizUserAddParam.getEmail())) {
-            if(!CommonEmailUtil.isEmail(bizUserAddParam.getEmail())) {
-                throw new CommonException("邮箱:{}格式错误", bizUserAddParam.getEmail());
+        if(ObjectUtil.isNotEmpty(phone)) {
+            if(!PhoneUtil.isMobile(phone)) {
+                throw new CommonException("手机号码:{}格式错误", phone);
             }
             if (this.count(new LambdaQueryWrapper<BizUser>()
-                    .eq(BizUser::getEmail, bizUserAddParam.getEmail())) > 0) {
-                throw new CommonException("存在重复的邮箱,邮箱为:{}", bizUserAddParam.getEmail());
+                    .eq(BizUser::getPhone, CommonCryptogramUtil.doSm4CbcEncrypt(phone))) > 0) {
+                throw new CommonException("存在重复的手机号,手机号为:{}",phone);
             }
         }
     }
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public void edit(BizUserEditParam bizUserEditParam) {
-        BizUser bizUser = this.queryEntity(bizUserEditParam.getId());
-        checkParam(bizUserEditParam);
-        boolean updateSuperAdminAccount = bizUser.getAccount().equals(BizBuildInEnum.BUILD_IN_USER_ACCOUNT.getValue()) &&
-                !bizUserEditParam.getAccount().equals(BizBuildInEnum.BUILD_IN_USER_ACCOUNT.getValue());
+    public void edit(String id, 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 {
+        BizUser bizUser = this.queryEntity(id);
+        checkParam(id,empNo,account,phone,orgId);
+        boolean updateSuperAdminAccount = account.equals(BizBuildInEnum.BUILD_IN_USER_ACCOUNT.getValue()) &&
+                !account.equals(BizBuildInEnum.BUILD_IN_USER_ACCOUNT.getValue());
         if(updateSuperAdminAccount) {
             throw new CommonException("不可修改系统内置超管人员账号");
         }
-        BeanUtil.copyProperties(bizUserEditParam, bizUser);
+        bizUser.setEmpNo(empNo);
+        bizUser.setAccount(account);
+        bizUser.setName(name);
+        bizUser.setOrgId(orgId);
+        bizUser.setDepartmentId(departmentId);
+        bizUser.setWorkLocationId(workLocationId);
+        bizUser.setNickname(nickname);
+        bizUser.setGender(gender);
+        bizUser.setHomeAddress(homeAddress);
+        bizUser.setDetailAddress(detailAddress);
+        bizUser.setIdCardNumber(idCardNumber);
+        bizUser.setPhone(phone);
+        bizUser.setEmergencyPhone(emergencyPhone);
+        bizUser.setEntryDate(entryDate);
+//        if (ObjectUtil.isNotEmpty(avatar)){
+//            String avatarUrl = uploadImage.getImageCom(avatar);
+//            if (avatarUrl.equals("上传失败")){
+//                throw new CommonException("图片上传失败!");
+//            }
+//            bizUser.setAvatar(avatarUrl);
+//        }
+
         this.updateById(bizUser);
 
         // 发布更新事件
         CommonDataChangeEventCenter.doUpdateWithData(BizDataTypeEnum.USER.getValue(), JSONUtil.createArray().put(bizUser));
     }
 
-    private void checkParam(BizUserEditParam bizUserEditParam) {
+    private void checkParam(String id, String empNo, String account, String phone, String orgId) {
         // 校验数据范围
         List<String> loginUserDataScope = StpLoginUserUtil.getLoginUserDataScope();
         if(ObjectUtil.isNotEmpty(loginUserDataScope)) {
-            if(!loginUserDataScope.contains(bizUserEditParam.getOrgId())) {
-                throw new CommonException("您没有权限编辑该机构下的人员,机构id:{}", bizUserEditParam.getOrgId());
+            if(!loginUserDataScope.contains(orgId)) {
+                throw new CommonException("您没有权限编辑该机构下的人员,机构id:{}", orgId);
             }
         } else {
-            if(!bizUserEditParam.getId().equals(StpUtil.getLoginIdAsString())) {
-                throw new CommonException("您没有权限编辑该机构下的人员,机构id:{}", bizUserEditParam.getOrgId());
+            if(!id.equals(StpUtil.getLoginIdAsString())) {
+                throw new CommonException("您没有权限编辑该机构下的人员,机构id:{}", orgId);
             }
         }
         if (this.count(new LambdaQueryWrapper<BizUser>()
-                .eq(BizUser::getAccount, bizUserEditParam.getAccount())
-                .ne(BizUser::getId, bizUserEditParam.getId())) > 0) {
-            throw new CommonException("存在重复的账号,账号为:{}", bizUserEditParam.getAccount());
+                .eq(BizUser::getEmpNo, empNo).eq(BizUser::getOrgId,orgId).ne(BizUser::getId,id)) > 0) {
+            throw new CommonException("存在重复的工号,工号为:{}", empNo);
         }
-        if(ObjectUtil.isNotEmpty(bizUserEditParam.getPhone())) {
-            if(!PhoneUtil.isMobile(bizUserEditParam.getPhone())) {
-                throw new CommonException("手机号码:{}格式错误", bizUserEditParam.getPhone());
-            }
-            if (this.count(new LambdaQueryWrapper<BizUser>()
-                    .eq(BizUser::getPhone, CommonCryptogramUtil.doSm4CbcEncrypt(bizUserEditParam.getPhone()))
-                    .ne(BizUser::getId, bizUserEditParam.getId())) > 0) {
-                throw new CommonException("存在重复的手机号,手机号为:{}", bizUserEditParam.getPhone());
-            }
+        if (this.count(new LambdaQueryWrapper<BizUser>()
+                .eq(BizUser::getAccount, account)
+                .ne(BizUser::getId, id)) > 0) {
+            throw new CommonException("存在重复的账号,账号为:{}", account);
         }
-        if(ObjectUtil.isNotEmpty(bizUserEditParam.getEmail())) {
-            if(!CommonEmailUtil.isEmail(bizUserEditParam.getEmail())) {
-                throw new CommonException("邮箱:{}格式错误", bizUserEditParam.getEmail());
+        if(ObjectUtil.isNotEmpty(phone)) {
+            if(!PhoneUtil.isMobile(phone)) {
+                throw new CommonException("手机号码:{}格式错误", phone);
             }
             if (this.count(new LambdaQueryWrapper<BizUser>()
-                    .eq(BizUser::getEmail, bizUserEditParam.getEmail())
-                    .ne(BizUser::getId, bizUserEditParam.getId())) > 0) {
-                throw new CommonException("存在重复的邮箱,邮箱为:{}", bizUserEditParam.getEmail());
+                    .eq(BizUser::getPhone, CommonCryptogramUtil.doSm4CbcEncrypt(phone))
+                    .ne(BizUser::getId, id)) > 0) {
+                throw new CommonException("存在重复的手机号,手机号为:{}", phone);
             }
         }
     }
@@ -282,24 +305,6 @@ public class BizUserServiceImpl extends ServiceImpl<BizUserMapper, BizUser> impl
                     throw new CommonException("您没有权限删除这些机构下的人员,机构id:{}", userOrgIdList);
                 }
             }
-            // 清除【将这些人员作为主管】的信息
-            this.update(new LambdaUpdateWrapper<BizUser>().in(BizUser::getDirectorId, bizUserIdList).set(BizUser::getDirectorId, null));
-
-            // 清除【将这些人员作为兼任岗位的主管】的信息
-            this.list(new LambdaQueryWrapper<BizUser>() .isNotNull(BizUser::getPositionJson)).forEach(bizUser -> {
-                List<JSONObject> handledJsonObjectList = JSONUtil.toList(JSONUtil.parseArray(bizUser.getPositionJson()),
-                        JSONObject.class).stream().peek(jsonObject -> {
-                    String directorId = jsonObject.getStr("directorId");
-                    if (ObjectUtil.isNotEmpty(directorId) && bizUserIdList.contains(directorId)) {
-                        jsonObject.remove("directorId");
-                    }
-                }).collect(Collectors.toList());
-                this.update(new LambdaUpdateWrapper<BizUser>().eq(BizUser::getId, bizUser.getId())
-                        .set(BizUser::getPositionJson, JSONUtil.toJsonStr(handledJsonObjectList)));
-            });
-
-            // 清除【将这些人员作为主管】的机构的主管信息
-            bizOrgService.update(new LambdaUpdateWrapper<BizOrg>().in(BizOrg::getDirectorId, bizUserIdList).set(BizOrg::getDirectorId, null));
 
             // 执行删除
             this.removeByIds(bizUserIdList);
@@ -560,16 +565,6 @@ public class BizUserServiceImpl extends ServiceImpl<BizUserMapper, BizUser> 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(bizUser.getBirthday())) {
-                try {
-                    // 年龄
-                    long age = cn.hutool.core.date.DateUtil.betweenYear(cn.hutool.core.date.DateUtil.parseDate(bizUser.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
@@ -654,29 +649,6 @@ public class BizUserServiceImpl extends ServiceImpl<BizUserMapper, BizUser> impl
         return bizOrgService.page(CommonPageRequest.defaultPage(), lambdaQueryWrapper);
     }
 
-    @Override
-    public Page<BizPosition> positionSelector(BizUserSelectorPositionParam bizUserSelectorPositionParam) {
-        LambdaQueryWrapper<BizPosition> lambdaQueryWrapper = new LambdaQueryWrapper<>();
-        // 校验数据范围
-        List<String> loginUserDataScope = StpLoginUserUtil.getLoginUserDataScope();
-        if(ObjectUtil.isNotEmpty(loginUserDataScope)) {
-            lambdaQueryWrapper.in(BizPosition::getOrgId, loginUserDataScope);
-        } else {
-            return new Page<>();
-        }
-        // 查询部分字段
-        lambdaQueryWrapper.select(BizPosition::getId, BizPosition::getOrgId, BizPosition::getName,
-                BizPosition::getCategory, BizPosition::getSortCode);
-        if(ObjectUtil.isNotEmpty(bizUserSelectorPositionParam.getOrgId())) {
-            lambdaQueryWrapper.eq(BizPosition::getOrgId, bizUserSelectorPositionParam.getOrgId());
-        }
-        if(ObjectUtil.isNotEmpty(bizUserSelectorPositionParam.getSearchKey())) {
-            lambdaQueryWrapper.like(BizPosition::getName, bizUserSelectorPositionParam.getSearchKey());
-        }
-        lambdaQueryWrapper.orderByAsc(BizPosition::getSortCode);
-        return bizPositionService.page(CommonPageRequest.defaultPage(), lambdaQueryWrapper);
-    }
-
     @SuppressWarnings("ALL")
     @Override
     public Page<BizUserRoleResult> roleSelector(BizUserSelectorRoleParam bizUserSelectorRoleParam) {
@@ -716,7 +688,7 @@ public class BizUserServiceImpl extends ServiceImpl<BizUserMapper, BizUser> impl
             return new Page<>();
         }
         // 只查询部分字段
-        lambdaQueryWrapper.select(BizUser::getId, BizUser::getAvatar, BizUser::getOrgId, BizUser::getPositionId, BizUser::getAccount,
+        lambdaQueryWrapper.select(BizUser::getId, BizUser::getAvatar, BizUser::getOrgId, BizUser::getAccount,
                 BizUser::getName, BizUser::getSortCode, BizUser::getGender, BizUser::getEntryDate);
         if (ObjectUtil.isNotEmpty(bizUserSelectorUserParam.getOrgId())) {
             // 如果机构id不为空,则查询该机构及其子机构下的所有人

+ 184 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/user/utils/BizUploadImage.java

@@ -0,0 +1,184 @@
+//package vip.xiaonuo.biz.modular.user.utils;
+//
+//import cn.hutool.core.date.DateUtil;
+//import cn.hutool.core.lang.UUID;
+//import com.jcraft.jsch.*;
+//import org.springframework.beans.factory.annotation.Value;
+//import org.springframework.stereotype.Component;
+//import org.springframework.util.StringUtils;
+//import org.springframework.web.multipart.MultipartFile;
+//
+//import javax.imageio.ImageIO;
+//import java.awt.*;
+//import java.awt.image.BufferedImage;
+//import java.io.*;
+//import java.util.Date;
+//
+//@Component
+//public class BizUploadImage {
+//
+//    @Value("${img.basePath}")
+//    private   String basePath;
+//
+//    @Value("${img.ip}")
+//    private    String ip ;
+////    private   String ip = "36.134.209.211";
+////    private   String ip = "192.168.0.13";
+//
+//    @Value("${img.user}")
+//    private  String user ;
+//
+////    private   String password = "!Hm537e@1";
+//
+//    @Value("${img.password}")
+//    private   String password ;
+//
+//    @Value("${img.port}")
+//    public   Integer port ;
+//
+//    @Value("${img.url}")
+//    public   String url ;
+//
+//
+//
+//    /**
+//     * 利用JSch包实现SFTP上传文件
+//     * @param bytes  文件字节流
+//     * @param fileName  文件名
+//     * @throws Exception
+//     */
+//    public   void sshSftp(byte[] bytes,String path,String fileName) throws Exception{
+//
+//        // 服务器保存路径
+//        String filepath = basePath +path ;
+//        Session session = null;
+//        Channel channel = null;
+//
+//        JSch jSch = new JSch();
+//
+//        if(port <=0){
+//            //连接服务器,采用默认端口
+//            session = jSch.getSession(user, ip);
+//        }else{
+//            //采用指定的端口连接服务器
+//            session = jSch.getSession(user, ip ,port);
+//        }
+//
+//        //如果服务器连接不上,则抛出异常
+//        if (session == null) {
+//            throw new Exception("session is null");
+//        }
+//
+//        //设置登陆主机的密码
+//        session.setPassword(password);//设置密码
+//        //设置第一次登陆的时候提示,可选值:(ask | yes | no)
+//        session.setConfig("userauth.gssapi-with-mic","no");
+//        session.setConfig("StrictHostKeyChecking", "no");
+//        //设置登陆超时时间
+//        session.connect(30000);
+//
+//        OutputStream outstream = null;
+//        try {
+//            //创建sftp通信通道
+//            channel = (Channel) session.openChannel("sftp");
+//            channel.connect(1000);
+//            ChannelSftp sftp = (ChannelSftp) channel;
+//
+//            //进入服务器指定的文件夹
+//            sftp.cd(basePath);
+//
+//            SftpATTRS attrs = null;
+//            try {
+//                attrs = sftp.stat(filepath);
+//            } catch (Exception e) {
+//                // TODO: handle exception
+//            }
+//            if (attrs == null) {
+//                sftp.mkdir(filepath);
+//                System.out.println(("创建子目录:" + filepath));
+//            }
+//            sftp.cd(filepath);
+//
+//            //以下代码实现从本地上传一个文件到服务器,如果要实现下载,对换一下流就可以了
+//            outstream = sftp.put(fileName);
+//            outstream.write(bytes);
+//
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        } finally {
+//            //关流操作
+//            if (outstream != null) {
+//                outstream.flush();
+//                outstream.close();
+//            }
+//            if (session != null) {
+//                session.disconnect();
+//            }
+//            if (channel != null) {
+//                channel.disconnect();
+//            }
+//            System.out.println("上传成功!");
+//        }
+//    }
+//
+//    //上传压缩的图片
+//    public  String getImageCom(MultipartFile image) throws IOException {
+//        //获取文件输入流
+//        InputStream inputStream = image.getInputStream();
+//        String originalFilename = image.getOriginalFilename();
+//        String filenameExtension = StringUtils.getFilenameExtension(originalFilename);
+//        String path = DateUtil.format(new Date(), "yyyy-MM");
+//
+//        try {
+//            // 把图片读入到内存中
+//            BufferedImage bufImg = ImageIO.read(inputStream);
+//            // 压缩代码,存储图片文件byte数组
+//            ByteArrayOutputStream bos = new ByteArrayOutputStream();
+//            //防止图片变红,这一步非常重要
+//            BufferedImage bufferedImage = new BufferedImage(bufImg.getWidth(), bufImg.getHeight(), BufferedImage.TYPE_INT_RGB);
+//            bufferedImage.createGraphics().drawImage(bufImg,0,0, Color.WHITE,null);
+//            //先转成jpg格式来压缩,然后在通过OSS来修改成源文件本来的后缀格式
+//            ImageIO.write(bufferedImage,"jpg",bos);
+//            byte[] bytes = bos.toByteArray();
+//            String imgname = UUID.randomUUID() + "." + filenameExtension;
+//            sshSftp(bytes, path, imgname);
+//            return url+ path + "/" + imgname;
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//            return "上传失败";
+//        } finally {
+//            inputStream.close();
+//        }
+//    }
+//
+//
+//    //上传原图
+//    public  String uploadImg( MultipartFile image ) {
+//        String originalFilename = image.getOriginalFilename();
+//        String filenameExtension = StringUtils.getFilenameExtension(originalFilename);
+//        String path = DateUtil.format(new Date(), "yyyy-MM");
+//        try {
+//            InputStream inputStream = image.getInputStream();
+//            BufferedInputStream in = new BufferedInputStream(inputStream);
+//            ByteArrayOutputStream out = new ByteArrayOutputStream(1024);
+//
+//            byte[] temp = new byte[1024];
+//            int size = 0;
+//            while ((size = in.read(temp)) != -1) {
+//                out.write(temp, 0, size);
+//            }
+//            in.close();
+//            byte[] content = out.toByteArray();
+//            String imgname = UUID.randomUUID() + "." + filenameExtension;
+//            sshSftp(content, path, imgname);
+//            return url + path + "/" + imgname;
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//            return "上传失败";
+//        }
+//    }
+//
+//}
+//
+//
+//

+ 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>

+ 111 - 0
snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/department/controller/SysDepartmentController.java

@@ -0,0 +1,111 @@
+/*
+ * 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.department.controller;
+
+import com.github.xiaoymin.knife4j.annotations.ApiSupport;
+import io.swagger.annotations.Api;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 部门控制器
+ *
+ * @author newspaper
+ * @date  2024/01/22 19:30
+ */
+@Api(tags = "部门控制器")
+@ApiSupport(author = "SNOWY_TEAM", order = 1)
+@RestController
+@Validated
+public class SysDepartmentController {
+
+//    @Resource
+//    private DepartmentService departmentService;
+//
+//    /**
+//     * 获取部门分页
+//     *
+//     * @author newspaper
+//     * @date  2024/01/22 19:30
+//     */
+//    @ApiOperationSupport(order = 1)
+//    @ApiOperation("获取部门分页")
+//    @SaCheckPermission("/sys/department/page")
+//    @GetMapping("/sys/department/page")
+//    public CommonResult<Page<Department>> page(DepartmentPageParam departmentPageParam) {
+//        return CommonResult.data(departmentService.page(departmentPageParam));
+//    }
+//
+//    /**
+//     * 添加部门
+//     *
+//     * @author newspaper
+//     * @date  2024/01/22 19:30
+//     */
+//    @ApiOperationSupport(order = 2)
+//    @ApiOperation("添加部门")
+//    @CommonLog("添加部门")
+//    @SaCheckPermission("/sys/department/add")
+//    @PostMapping("/sys/department/add")
+//    public CommonResult<String> add(@RequestBody @Valid DepartmentAddParam departmentAddParam) {
+//        departmentService.add(departmentAddParam);
+//        return CommonResult.ok();
+//    }
+//
+//    /**
+//     * 编辑部门
+//     *
+//     * @author newspaper
+//     * @date  2024/01/22 19:30
+//     */
+//    @ApiOperationSupport(order = 3)
+//    @ApiOperation("编辑部门")
+//    @CommonLog("编辑部门")
+//    @SaCheckPermission("/sys/department/edit")
+//    @PostMapping("/sys/department/edit")
+//    public CommonResult<String> edit(@RequestBody @Valid DepartmentEditParam departmentEditParam) {
+//        departmentService.edit(departmentEditParam);
+//        return CommonResult.ok();
+//    }
+//
+//    /**
+//     * 删除部门
+//     *
+//     * @author newspaper
+//     * @date  2024/01/22 19:30
+//     */
+//    @ApiOperationSupport(order = 4)
+//    @ApiOperation("删除部门")
+//    @CommonLog("删除部门")
+//    @SaCheckPermission("/sys/department/delete")
+//    @PostMapping("/sys/department/delete")
+//    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+//                                                   CommonValidList<DepartmentIdParam> departmentIdParamList) {
+//        departmentService.delete(departmentIdParamList);
+//        return CommonResult.ok();
+//    }
+//
+//    /**
+//     * 获取部门详情
+//     *
+//     * @author newspaper
+//     * @date  2024/01/22 19:30
+//     */
+//    @ApiOperationSupport(order = 5)
+//    @ApiOperation("获取部门详情")
+//    @SaCheckPermission("/sys/department/detail")
+//    @GetMapping("/sys/department/detail")
+//    public CommonResult<Department> detail(@Valid DepartmentIdParam departmentIdParam) {
+//        return CommonResult.data(departmentService.detail(departmentIdParam));
+//    }
+}

+ 34 - 28
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/department/entity/Department.java

@@ -10,30 +10,27 @@
  * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
  * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
  */
-package vip.xiaonuo.biz.modular.department.entity;
-
-import com.baomidou.mybatisplus.annotation.FieldFill;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.fhs.core.trans.anno.Trans;
-import com.fhs.core.trans.constant.TransType;
+package vip.xiaonuo.sys.modular.department.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
 import com.fhs.core.trans.vo.TransPojo;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.Setter;
-import vip.xiaonuo.common.pojo.CommonEntity;
+
+import java.math.BigDecimal;
+import java.util.Date;
 
 /**
  * 部门实体
  *
  * @author newspaper
- * @date  2023/12/13 08:44
+ * @date  2024/01/22 19:30
  **/
 @Getter
 @Setter
-@TableName(value = "department" ,autoResultMap = true)
-public class Department extends CommonEntity implements TransPojo {
+@TableName("department")
+public class SysDepartment implements TransPojo {
 
     /** ID */
     @TableId
@@ -45,12 +42,11 @@ public class Department extends CommonEntity implements TransPojo {
     private String departmentName;
 
     /** 部门照片 */
-    @ApiModelProperty(value = "部门照片id", position = 3)
-    private String departmentImgId;
+    @ApiModelProperty(value = "部门照片", position = 3)
+    private String departmentImgUrl;
 
     /** 上级部门ID */
     @ApiModelProperty(value = "上级部门ID", position = 4)
-    @Trans(type = TransType.SIMPLE, target = Department.class, fields = "departmentName", alias = "parent", ref = "parentName")
     private String parentId;
 
     /** 所在区域 */
@@ -79,21 +75,31 @@ public class Department extends CommonEntity implements TransPojo {
 
     /** 组织ID */
     @ApiModelProperty(value = "组织ID", position = 11)
-    @TableField(fill = FieldFill.INSERT)
     private String orgId;
 
-    /** 负责人名称 */
-    @ApiModelProperty(value = "负责人", position = 12)
-    @TableField(exist = false)
-    private String managerName;
+    /** 删除标志 */
+    @ApiModelProperty(value = "删除标志", position = 12)
+    @TableLogic
+    @TableField(fill = FieldFill.INSERT)
+    private String deleteFlag;
 
-    /** 上级部门 */
-    @ApiModelProperty(value = "上级部门", position = 13)
-    @TableField(exist = false)
-    private String parentName;
+    /** 创建时间 */
+    @ApiModelProperty(value = "创建时间", position = 13)
+    @TableField(fill = FieldFill.INSERT)
+    private Date createTime;
 
-    /** 部门照片 */
-    @ApiModelProperty(value = "部门照片", position = 3)
-    @TableField(exist = false)
-    private String departmentImgUrl;
+    /** 创建用户 */
+    @ApiModelProperty(value = "创建用户", position = 14)
+    @TableField(fill = FieldFill.INSERT)
+    private String createUser;
+
+    /** 修改时间 */
+    @ApiModelProperty(value = "修改时间", position = 15)
+    @TableField(fill = FieldFill.UPDATE)
+    private Date updateTime;
+
+    /** 修改用户 */
+    @ApiModelProperty(value = "修改用户", position = 16)
+    @TableField(fill = FieldFill.UPDATE)
+    private String updateUser;
 }

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

@@ -10,16 +10,25 @@
  * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
  * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
  */
-package vip.xiaonuo.sys.modular.position.mapper;
+package vip.xiaonuo.sys.modular.department.enums;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import vip.xiaonuo.sys.modular.position.entity.SysPosition;
+import lombok.Getter;
 
 /**
- * 职位Mapper接口
+ * 部门枚举
  *
- * @author xuyuxiang
- * @date 2022/4/21 18:37
+ * @author newspaper
+ * @date  2024/01/22 19:30
  **/
-public interface SysPositionMapper extends BaseMapper<SysPosition> {
+@Getter
+public enum DepartmentEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    DepartmentEnum(String value) {
+        this.value = value;
+    }
 }

+ 6 - 6
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/position/mapper/BizPositionMapper.java

@@ -10,16 +10,16 @@
  * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
  * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
  */
-package vip.xiaonuo.biz.modular.position.mapper;
+package vip.xiaonuo.sys.modular.department.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import vip.xiaonuo.biz.modular.position.entity.BizPosition;
+import vip.xiaonuo.sys.modular.department.entity.SysDepartment;
 
 /**
- * 岗位Mapper接口
+ * 部门Mapper接口
  *
- * @author xuyuxiang
- * @date 2022/4/21 18:37
+ * @author newspaper
+ * @date  2024/01/22 19:30
  **/
-public interface BizPositionMapper extends BaseMapper<BizPosition> {
+public interface SysDepartmentMapper extends BaseMapper<SysDepartment> {
 }

+ 1 - 2
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/position/mapper/mapping/BizPositionMapper.xml

@@ -1,6 +1,5 @@
 <?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.biz.modular.position.mapper.BizPositionMapper">
-
+<mapper namespace="vip.xiaonuo.sys.modular.department.mapper.SysDepartmentMapper">
 
 </mapper>

+ 74 - 0
snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/department/param/DepartmentAddParam.java

@@ -0,0 +1,74 @@
+/*
+ * 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.department.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 部门添加参数
+ *
+ * @author newspaper
+ * @date  2024/01/22 19:30
+ **/
+@Getter
+@Setter
+public class DepartmentAddParam {
+
+    /** 部门名称 */
+    @ApiModelProperty(value = "部门名称", position = 2)
+    private String departmentName;
+
+    /** 部门照片 */
+    @ApiModelProperty(value = "部门照片", position = 3)
+    private String departmentImgUrl;
+
+    /** 上级部门ID */
+    @ApiModelProperty(value = "上级部门ID", position = 4)
+    private String parentId;
+
+    /** 所在区域 */
+    @ApiModelProperty(value = "所在区域", position = 5)
+    private String departmentRegion;
+
+    /** 详细地址 */
+    @ApiModelProperty(value = "详细地址", position = 6)
+    private String detailLocation;
+
+    /** 部门电话 */
+    @ApiModelProperty(value = "部门电话", position = 7)
+    private String departmentPhone;
+
+    /** 部门负责人ID */
+    @ApiModelProperty(value = "部门负责人ID", position = 8)
+    private String departmentManager;
+
+    /** 描述 */
+    @ApiModelProperty(value = "描述", position = 9)
+    private String remarks;
+
+    /** 排序码 */
+    @ApiModelProperty(value = "排序码", position = 10)
+    private Integer sortCode;
+
+    /** 组织ID */
+    @ApiModelProperty(value = "组织ID", position = 11)
+    private String orgId;
+
+}

+ 79 - 0
snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/department/param/DepartmentEditParam.java

@@ -0,0 +1,79 @@
+/*
+ * 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.department.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 部门编辑参数
+ *
+ * @author newspaper
+ * @date  2024/01/22 19:30
+ **/
+@Getter
+@Setter
+public class DepartmentEditParam {
+
+    /** ID */
+    @ApiModelProperty(value = "ID", required = true, position = 1)
+    @NotBlank(message = "id不能为空")
+    private String id;
+
+    /** 部门名称 */
+    @ApiModelProperty(value = "部门名称", position = 2)
+    private String departmentName;
+
+    /** 部门照片 */
+    @ApiModelProperty(value = "部门照片", position = 3)
+    private String departmentImgUrl;
+
+    /** 上级部门ID */
+    @ApiModelProperty(value = "上级部门ID", position = 4)
+    private String parentId;
+
+    /** 所在区域 */
+    @ApiModelProperty(value = "所在区域", position = 5)
+    private String departmentRegion;
+
+    /** 详细地址 */
+    @ApiModelProperty(value = "详细地址", position = 6)
+    private String detailLocation;
+
+    /** 部门电话 */
+    @ApiModelProperty(value = "部门电话", position = 7)
+    private String departmentPhone;
+
+    /** 部门负责人ID */
+    @ApiModelProperty(value = "部门负责人ID", position = 8)
+    private String departmentManager;
+
+    /** 描述 */
+    @ApiModelProperty(value = "描述", position = 9)
+    private String remarks;
+
+    /** 排序码 */
+    @ApiModelProperty(value = "排序码", position = 10)
+    private Integer sortCode;
+
+    /** 组织ID */
+    @ApiModelProperty(value = "组织ID", position = 11)
+    private String orgId;
+
+}

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

@@ -10,7 +10,7 @@
  * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
  * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
  */
-package vip.xiaonuo.sys.modular.position.param;
+package vip.xiaonuo.sys.modular.department.param;
 
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
@@ -19,17 +19,17 @@ import lombok.Setter;
 import javax.validation.constraints.NotBlank;
 
 /**
- * 职位Id参数
+ * 部门Id参数
  *
- * @author xuyuxiang
- * @date 2022/4/21 16:13
+ * @author newspaper
+ * @date  2024/01/22 19:30
  **/
 @Getter
 @Setter
-public class SysPositionIdParam {
+public class DepartmentIdParam {
 
-    /** id */
-    @ApiModelProperty(value = "id", required = true)
+    /** ID */
+    @ApiModelProperty(value = "ID", required = true)
     @NotBlank(message = "id不能为空")
     private String id;
 }

+ 10 - 15
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/position/param/BizPositionPageParam.java

@@ -10,21 +10,23 @@
  * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
  * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
  */
-package vip.xiaonuo.biz.modular.position.param;
+package vip.xiaonuo.sys.modular.department.param;
 
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
 
 /**
- * 岗位查询参数
+ * 部门查询参数
  *
- * @author xuyuxiang
- * @date 2022/4/21 16:13
+ * @author newspaper
+ * @date  2024/01/22 19:30
  **/
 @Getter
 @Setter
-public class BizPositionPageParam {
+public class DepartmentPageParam {
 
     /** 当前页 */
     @ApiModelProperty(value = "当前页码")
@@ -42,15 +44,8 @@ public class BizPositionPageParam {
     @ApiModelProperty(value = "排序方式,升序:ASCEND;降序:DESCEND")
     private String sortOrder;
 
-    /** 机构id */
-    @ApiModelProperty(value = "机构id")
-    private String orgId;
-
-    /** 岗位分类 */
-    @ApiModelProperty(value = "岗位分类")
-    private String category;
-
-    /** 名称关键词 */
-    @ApiModelProperty(value = "名称关键词")
+    /** 关键词 */
+    @ApiModelProperty(value = "关键词")
     private String searchKey;
+
 }

+ 80 - 0
snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/department/service/SysDepartmentService.java

@@ -0,0 +1,80 @@
+/*
+ * 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.department.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import vip.xiaonuo.sys.modular.department.entity.SysDepartment;
+import vip.xiaonuo.sys.modular.department.param.DepartmentAddParam;
+import vip.xiaonuo.sys.modular.department.param.DepartmentEditParam;
+import vip.xiaonuo.sys.modular.department.param.DepartmentIdParam;
+import vip.xiaonuo.sys.modular.department.param.DepartmentPageParam;
+
+import java.util.List;
+
+/**
+ * 部门Service接口
+ *
+ * @author newspaper
+ * @date  2024/01/22 19:30
+ **/
+public interface SysDepartmentService extends IService<SysDepartment> {
+
+    /**
+     * 获取部门分页
+     *
+     * @author newspaper
+     * @date  2024/01/22 19:30
+     */
+    Page<SysDepartment> page(DepartmentPageParam departmentPageParam);
+
+    /**
+     * 添加部门
+     *
+     * @author newspaper
+     * @date  2024/01/22 19:30
+     */
+    void add(DepartmentAddParam departmentAddParam);
+
+    /**
+     * 编辑部门
+     *
+     * @author newspaper
+     * @date  2024/01/22 19:30
+     */
+    void edit(DepartmentEditParam departmentEditParam);
+
+    /**
+     * 删除部门
+     *
+     * @author newspaper
+     * @date  2024/01/22 19:30
+     */
+    void delete(List<DepartmentIdParam> departmentIdParamList);
+
+    /**
+     * 获取部门详情
+     *
+     * @author newspaper
+     * @date  2024/01/22 19:30
+     */
+    SysDepartment detail(DepartmentIdParam departmentIdParam);
+
+    /**
+     * 获取部门详情
+     *
+     * @author newspaper
+     * @date  2024/01/22 19:30
+     **/
+    SysDepartment queryEntity(String id);
+}

+ 94 - 0
snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/department/service/impl/SysDepartmentServiceImpl.java

@@ -0,0 +1,94 @@
+/*
+ * 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.department.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollStreamUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+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.page.CommonPageRequest;
+import vip.xiaonuo.sys.modular.department.entity.SysDepartment;
+import vip.xiaonuo.sys.modular.department.mapper.SysDepartmentMapper;
+import vip.xiaonuo.sys.modular.department.param.DepartmentAddParam;
+import vip.xiaonuo.sys.modular.department.param.DepartmentEditParam;
+import vip.xiaonuo.sys.modular.department.param.DepartmentIdParam;
+import vip.xiaonuo.sys.modular.department.param.DepartmentPageParam;
+import vip.xiaonuo.sys.modular.department.service.SysDepartmentService;
+
+import java.util.List;
+
+/**
+ * 部门Service接口实现类
+ *
+ * @author newspaper
+ * @date  2024/01/22 19:30
+ **/
+@Service
+public class SysDepartmentServiceImpl extends ServiceImpl<SysDepartmentMapper, SysDepartment> implements SysDepartmentService {
+
+    @Override
+    public Page<SysDepartment> page(DepartmentPageParam departmentPageParam) {
+        QueryWrapper<SysDepartment> queryWrapper = new QueryWrapper<>();
+        if(ObjectUtil.isAllNotEmpty(departmentPageParam.getSortField(), departmentPageParam.getSortOrder())) {
+            CommonSortOrderEnum.validate(departmentPageParam.getSortOrder());
+            queryWrapper.orderBy(true, departmentPageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
+                    StrUtil.toUnderlineCase(departmentPageParam.getSortField()));
+        } else {
+            queryWrapper.lambda().orderByAsc(SysDepartment::getSortCode);
+        }
+        return this.page(CommonPageRequest.defaultPage(), queryWrapper);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(DepartmentAddParam departmentAddParam) {
+        SysDepartment department = BeanUtil.toBean(departmentAddParam, SysDepartment.class);
+        this.save(department);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(DepartmentEditParam departmentEditParam) {
+        SysDepartment department = this.queryEntity(departmentEditParam.getId());
+        BeanUtil.copyProperties(departmentEditParam, department);
+        this.updateById(department);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<DepartmentIdParam> departmentIdParamList) {
+        // 执行删除
+        this.removeByIds(CollStreamUtil.toList(departmentIdParamList, DepartmentIdParam::getId));
+    }
+
+    @Override
+    public SysDepartment detail(DepartmentIdParam departmentIdParam) {
+        return this.queryEntity(departmentIdParam.getId());
+    }
+
+    @Override
+    public SysDepartment queryEntity(String id) {
+        SysDepartment department = this.getById(id);
+        if(ObjectUtil.isEmpty(department)) {
+            throw new CommonException("部门不存在,id值为:{}", id);
+        }
+        return department;
+    }
+}

+ 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 - 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 - 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

+ 33 - 18
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();
     }
 
@@ -96,8 +109,23 @@ public class SysUserController {
     @ApiOperation("编辑用户")
     @CommonLog("编辑用户")
     @PostMapping("/sys/user/edit")
-    public CommonResult<String> edit(@RequestBody @Valid SysUserEditParam sysUserEditParam) {
-        sysUserService.edit(sysUserEditParam);
+    public CommonResult<String> edit(@RequestParam @ApiParam(value = "id") String id,
+                                     @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) {
+        sysUserService.edit(id,empNo,account,name,orgId,departmentId,workLocationId,nickname,gender,homeAddress,detailAddress,idCardNumber,phone,emergencyPhone,entryDate,avatar);
         return CommonResult.ok();
     }
 
@@ -344,19 +372,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) {

+ 0 - 86
snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/result/SysUserResult.java

@@ -36,10 +36,6 @@ public class SysUserResult {
     @ApiModelProperty(value = "头像", position = 3)
     private String avatar;
 
-    /** 签名 */
-    @ApiModelProperty(value = "签名", position = 4)
-    private String signature;
-
     /** 账号 */
     @ApiModelProperty(value = "账号", position = 5)
     private String account;
@@ -56,89 +52,25 @@ public class SysUserResult {
     @ApiModelProperty(value = "性别", position = 9)
     private String gender;
 
-    /** 年龄 */
-    @ApiModelProperty(value = "年龄", position = 10)
-    private String age;
-
-    /** 出生日期 */
-    @ApiModelProperty(value = "出生日期", position = 11)
-    private String birthday;
-
-    /** 民族 */
-    @ApiModelProperty(value = "民族", position = 12)
-    private String nation;
-
-    /** 籍贯 */
-    @ApiModelProperty(value = "籍贯", position = 13)
-    private String nativePlace;
-
     /** 家庭住址 */
     @ApiModelProperty(value = "家庭住址", position = 14)
     private String homeAddress;
 
-    /** 通信地址 */
-    @ApiModelProperty(value = "通信地址", position = 15)
-    private String mailingAddress;
-
-    /** 证件类型 */
-    @ApiModelProperty(value = "证件类型", position = 16)
-    private String idCardType;
 
     /** 证件号码 */
     @ApiModelProperty(value = "证件号码", position = 17)
     private String idCardNumber;
 
-    /** 文化程度 */
-    @ApiModelProperty(value = "文化程度", position = 18)
-    private String cultureLevel;
-
-    /** 政治面貌 */
-    @ApiModelProperty(value = "政治面貌", position = 19)
-    private String politicalOutlook;
-
-    /** 毕业院校 */
-    @ApiModelProperty(value = "毕业院校", position = 20)
-    private String college;
-
-    /** 学历 */
-    @ApiModelProperty(value = "学历", position = 21)
-    private String education;
 
-    /** 学制 */
-    @ApiModelProperty(value = "学制", position = 22)
-    private String eduLength;
-
-    /** 学位 */
-    @ApiModelProperty(value = "学位", position = 23)
-    private String degree;
 
     /** 手机 */
     @ApiModelProperty(value = "手机", position = 24)
     private String phone;
 
-    /** 邮箱 */
-    @ApiModelProperty(value = "邮箱", position = 25)
-    private String email;
-
-    /** 家庭电话 */
-    @ApiModelProperty(value = "家庭电话", position = 26)
-    private String homeTel;
-
-    /** 办公电话 */
-    @ApiModelProperty(value = "办公电话", position = 27)
-    private String officeTel;
-
-    /** 紧急联系人 */
-    @ApiModelProperty(value = "紧急联系人", position = 28)
-    private String emergencyContact;
-
     /** 紧急联系人电话 */
     @ApiModelProperty(value = "紧急联系人电话", position = 29)
     private String emergencyPhone;
 
-    /** 紧急联系人地址 */
-    @ApiModelProperty(value = "紧急联系人地址", position = 30)
-    private String emergencyAddress;
 
     /** 员工编号 */
     @ApiModelProperty(value = "员工编号", position = 31)
@@ -152,17 +84,6 @@ public class SysUserResult {
     @ApiModelProperty(value = "组织id", position = 33)
     private String orgId;
 
-    /** 职位id */
-    @ApiModelProperty(value = "职位id", position = 34)
-    private String positionId;
-
-    /** 职级 */
-    @ApiModelProperty(value = "职级", position = 35)
-    private String positionLevel;
-
-    /** 主管id */
-    @ApiModelProperty(value = "主管id", position = 36)
-    private String directorId;
 
     /** 上次登录ip */
     @ApiModelProperty(value = "上次登录ip", position = 37)
@@ -214,11 +135,4 @@ public class SysUserResult {
     @ApiModelProperty(value = "组织名称", position = 48)
     private String orgName;
 
-    /** 职位名称 */
-    @ApiModelProperty(value = "职位名称", position = 49)
-    private String positionName;
-
-    /** 主管名称 */
-    @ApiModelProperty(value = "主管名称", position = 50)
-    private String directorName;
 }

+ 4 - 59
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,20 +68,12 @@ 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
      * @date 2022/4/24 21:13
      */
-    void edit(SysUserEditParam sysUserEditParam);
+    void edit(String id, 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);
 
     /**
      * 删除用户
@@ -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;
 }

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

@@ -69,17 +69,13 @@ import vip.xiaonuo.common.listener.CommonDataChangeEventCenter;
 import vip.xiaonuo.common.page.CommonPageRequest;
 import vip.xiaonuo.common.util.*;
 import vip.xiaonuo.dev.api.DevConfigApi;
-import vip.xiaonuo.dev.api.DevEmailApi;
 import vip.xiaonuo.dev.api.DevMessageApi;
-import vip.xiaonuo.dev.api.DevSmsApi;
 import vip.xiaonuo.mobile.api.MobileButtonApi;
 import vip.xiaonuo.mobile.api.MobileMenuApi;
 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 +96,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.SysUploadImage;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
@@ -108,8 +105,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 +128,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 +143,6 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     private SysOrgService sysOrgService;
 
     @Resource
-    private SysPositionService sysPositionService;
-
-    @Resource
     private SysRoleService sysRoleService;
 
     @Resource
@@ -174,6 +160,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     @Resource
     private MobileButtonApi mobileButtonApi;
 
+//    @Resource
+//    private SysUploadImage uploadImage;
+
     @Override
     public SysLoginUser getUserById(String id) {
         SysUser sysUser = this.getById(id);
@@ -204,15 +193,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 +217,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,72 +250,70 @@ 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);
             }
         }
     }
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public void edit(SysUserEditParam sysUserEditParam) {
-        SysUser sysUser = this.queryEntity(sysUserEditParam.getId());
-        checkParam(sysUserEditParam);
-        boolean updateSuperAdminAccount = sysUser.getAccount().equals(SysBuildInEnum.BUILD_IN_USER_ACCOUNT.getValue()) &&
-                !sysUserEditParam.getAccount().equals(SysBuildInEnum.BUILD_IN_USER_ACCOUNT.getValue());
+    public void edit(String id, 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) {
+        SysUser sysUser = this.queryEntity(id);
+        checkParam(id,empNo,account,phone,orgId);
+        boolean updateSuperAdminAccount = account.equals(SysBuildInEnum.BUILD_IN_USER_ACCOUNT.getValue()) &&
+                !account.equals(SysBuildInEnum.BUILD_IN_USER_ACCOUNT.getValue());
         if(updateSuperAdminAccount) {
             throw new CommonException("不可修改系统内置超管用户账号");
         }
-        BeanUtil.copyProperties(sysUserEditParam, sysUser);
-        this.updateById(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);
 
-        // 发布更新事件
-        CommonDataChangeEventCenter.doUpdateWithData(SysDataTypeEnum.USER.getValue(), JSONUtil.createArray().put(sysUser));
+        this.updateById(sysUser);
     }
 
-    private void checkParam(SysUserEditParam sysUserEditParam) {
+    private void checkParam(String id, String empNo, String account, String phone, String orgId) {
         if (this.count(new LambdaQueryWrapper<SysUser>()
-                .eq(SysUser::getAccount, sysUserEditParam.getAccount())
-                .ne(SysUser::getId, sysUserEditParam.getId())) > 0) {
-            throw new CommonException("存在重复的账号,账号为:{}", sysUserEditParam.getAccount());
+                .eq(SysUser::getEmpNo, empNo).eq(SysUser::getOrgId,orgId).ne(SysUser::getId,id)) > 0) {
+            throw new CommonException("存在重复的工号,工号为:{}", empNo);
         }
-        if (ObjectUtil.isNotEmpty(sysUserEditParam.getPhone())) {
-            if (!PhoneUtil.isMobile(sysUserEditParam.getPhone())) {
-                throw new CommonException("手机号码:{}格式错误", sysUserEditParam.getPhone());
-            }
-            if (this.count(new LambdaQueryWrapper<SysUser>()
-                    .eq(SysUser::getPhone, CommonCryptogramUtil.doSm4CbcEncrypt(sysUserEditParam.getPhone()))
-                    .ne(SysUser::getId, sysUserEditParam.getId())) > 0) {
-                throw new CommonException("存在重复的手机号,手机号为:{}", sysUserEditParam.getPhone());
-            }
+        if (this.count(new LambdaQueryWrapper<SysUser>()
+                .eq(SysUser::getAccount, account).ne(SysUser::getId,id)) > 0) {
+            throw new CommonException("存在重复的账号,账号为:{}", account);
         }
-        if (ObjectUtil.isNotEmpty(sysUserEditParam.getEmail())) {
-            if (!CommonEmailUtil.isEmail(sysUserEditParam.getEmail())) {
-                throw new CommonException("邮箱:{}格式错误", sysUserEditParam.getEmail());
+        if (ObjectUtil.isNotEmpty(phone)) {
+            if (!PhoneUtil.isMobile(phone)) {
+                throw new CommonException("手机号码:{}格式错误", phone);
             }
             if (this.count(new LambdaQueryWrapper<SysUser>()
-                    .eq(SysUser::getEmail, sysUserEditParam.getEmail())
-                    .ne(SysUser::getId, sysUserEditParam.getId())) > 0) {
-                throw new CommonException("存在重复的邮箱,邮箱为:{}", sysUserEditParam.getEmail());
+                    .eq(SysUser::getPhone, CommonCryptogramUtil.doSm4CbcEncrypt(phone)).ne(SysUser::getId,id)) > 0) {
+                throw new CommonException("存在重复的手机号,手机号为:{}", phone);
             }
         }
     }
@@ -337,25 +329,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 +446,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 +457,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 +470,14 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     }
 
     @Override
-    public String updateAvatar(MultipartFile file) {
+    public void updateAvatar(MultipartFile avatar) throws IOException {
         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) {
-        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 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));
+//        String avatarUrl = uploadImage.getImageCom(avatar);
+//        if (avatarUrl.equals("上传失败")){
+//            throw new CommonException("图片上传失败!");
+//        }
+//        sysUser.setAvatar(avatarUrl);
+        this.updateById(sysUser);
     }
 
     @Override
@@ -861,15 +778,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 +957,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 +970,6 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 
                 // 获取手机号和邮箱
                 String phone = sysUserImportParam.getPhone();
-                String email = sysUserImportParam.getEmail();
 
                 // 判断手机号是否跟系统现有的重复
                 if(ObjectUtil.isNotEmpty(phone)) {
@@ -1086,36 +991,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 +1193,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 +1230,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 +1273,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 +1294,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 +1350,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<>();
         // 查询部分字段

+ 184 - 0
snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/utils/SysUploadImage.java

@@ -0,0 +1,184 @@
+//package vip.xiaonuo.sys.modular.user.utils;
+//
+//import cn.hutool.core.date.DateUtil;
+//import cn.hutool.core.lang.UUID;
+//import com.jcraft.jsch.*;
+//import org.springframework.beans.factory.annotation.Value;
+//import org.springframework.stereotype.Component;
+//import org.springframework.util.StringUtils;
+//import org.springframework.web.multipart.MultipartFile;
+//
+//import javax.imageio.ImageIO;
+//import java.awt.*;
+//import java.awt.image.BufferedImage;
+//import java.io.*;
+//import java.util.Date;
+//
+//@Component
+//public class SysUploadImage {
+//
+//    @Value("${img.basePath}")
+//    private   String basePath;
+//
+//    @Value("${img.ip}")
+//    private    String ip ;
+////    private   String ip = "36.134.209.211";
+////    private   String ip = "192.168.0.13";
+//
+//    @Value("${img.user}")
+//    private  String user ;
+//
+////    private   String password = "!Hm537e@1";
+//
+//    @Value("${img.password}")
+//    private   String password ;
+//
+//    @Value("${img.port}")
+//    public   Integer port ;
+//
+//    @Value("${img.url}")
+//    public   String url ;
+//
+//
+//
+//    /**
+//     * 利用JSch包实现SFTP上传文件
+//     * @param bytes  文件字节流
+//     * @param fileName  文件名
+//     * @throws Exception
+//     */
+//    public   void sshSftp(byte[] bytes,String path,String fileName) throws Exception{
+//
+//        // 服务器保存路径
+//        String filepath = basePath +path ;
+//        Session session = null;
+//        Channel channel = null;
+//
+//        JSch jSch = new JSch();
+//
+//        if(port <=0){
+//            //连接服务器,采用默认端口
+//            session = jSch.getSession(user, ip);
+//        }else{
+//            //采用指定的端口连接服务器
+//            session = jSch.getSession(user, ip ,port);
+//        }
+//
+//        //如果服务器连接不上,则抛出异常
+//        if (session == null) {
+//            throw new Exception("session is null");
+//        }
+//
+//        //设置登陆主机的密码
+//        session.setPassword(password);//设置密码
+//        //设置第一次登陆的时候提示,可选值:(ask | yes | no)
+//        session.setConfig("userauth.gssapi-with-mic","no");
+//        session.setConfig("StrictHostKeyChecking", "no");
+//        //设置登陆超时时间
+//        session.connect(30000);
+//
+//        OutputStream outstream = null;
+//        try {
+//            //创建sftp通信通道
+//            channel = (Channel) session.openChannel("sftp");
+//            channel.connect(1000);
+//            ChannelSftp sftp = (ChannelSftp) channel;
+//
+//            //进入服务器指定的文件夹
+//            sftp.cd(basePath);
+//
+//            SftpATTRS attrs = null;
+//            try {
+//                attrs = sftp.stat(filepath);
+//            } catch (Exception e) {
+//                // TODO: handle exception
+//            }
+//            if (attrs == null) {
+//                sftp.mkdir(filepath);
+//                System.out.println(("创建子目录:" + filepath));
+//            }
+//            sftp.cd(filepath);
+//
+//            //以下代码实现从本地上传一个文件到服务器,如果要实现下载,对换一下流就可以了
+//            outstream = sftp.put(fileName);
+//            outstream.write(bytes);
+//
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        } finally {
+//            //关流操作
+//            if (outstream != null) {
+//                outstream.flush();
+//                outstream.close();
+//            }
+//            if (session != null) {
+//                session.disconnect();
+//            }
+//            if (channel != null) {
+//                channel.disconnect();
+//            }
+//            System.out.println("上传成功!");
+//        }
+//    }
+//
+//    //上传压缩的图片
+//    public  String getImageCom(MultipartFile image) throws IOException {
+//        //获取文件输入流
+//        InputStream inputStream = image.getInputStream();
+//        String originalFilename = image.getOriginalFilename();
+//        String filenameExtension = StringUtils.getFilenameExtension(originalFilename);
+//        String path = DateUtil.format(new Date(), "yyyy-MM");
+//
+//        try {
+//            // 把图片读入到内存中
+//            BufferedImage bufImg = ImageIO.read(inputStream);
+//            // 压缩代码,存储图片文件byte数组
+//            ByteArrayOutputStream bos = new ByteArrayOutputStream();
+//            //防止图片变红,这一步非常重要
+//            BufferedImage bufferedImage = new BufferedImage(bufImg.getWidth(), bufImg.getHeight(), BufferedImage.TYPE_INT_RGB);
+//            bufferedImage.createGraphics().drawImage(bufImg,0,0, Color.WHITE,null);
+//            //先转成jpg格式来压缩,然后在通过OSS来修改成源文件本来的后缀格式
+//            ImageIO.write(bufferedImage,"jpg",bos);
+//            byte[] bytes = bos.toByteArray();
+//            String imgname = UUID.randomUUID() + "." + filenameExtension;
+//            sshSftp(bytes, path, imgname);
+//            return url+ path + "/" + imgname;
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//            return "上传失败";
+//        } finally {
+//            inputStream.close();
+//        }
+//    }
+//
+//
+//    //上传原图
+//    public  String uploadImg( MultipartFile image ) {
+//        String originalFilename = image.getOriginalFilename();
+//        String filenameExtension = StringUtils.getFilenameExtension(originalFilename);
+//        String path = DateUtil.format(new Date(), "yyyy-MM");
+//        try {
+//            InputStream inputStream = image.getInputStream();
+//            BufferedInputStream in = new BufferedInputStream(inputStream);
+//            ByteArrayOutputStream out = new ByteArrayOutputStream(1024);
+//
+//            byte[] temp = new byte[1024];
+//            int size = 0;
+//            while ((size = in.read(temp)) != -1) {
+//                out.write(temp, 0, size);
+//            }
+//            in.close();
+//            byte[] content = out.toByteArray();
+//            String imgname = UUID.randomUUID() + "." + filenameExtension;
+//            sshSftp(content, path, imgname);
+//            return url + path + "/" + imgname;
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//            return "上传失败";
+//        }
+//    }
+//
+//}
+//
+//
+//

+ 1 - 1
snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingthreshold/controller/FeedingThresholdController.java

@@ -94,7 +94,7 @@ public class FeedingThresholdController {
     @ApiOperation("修改精准饲喂料塔阈值")
     @CommonLog("修改精准饲喂料塔阈值")
     @PostMapping("/feed/feedingthreshold/editFeeding")
-    public CommonResult<String> editFeeding(@RequestBody @Valid FeedingEditParam feedingEditParam) {
+    public CommonResult<String> editFeeding(@RequestBody @Valid FeedingThresholdVo2 feedingEditParam) {
         feedingThresholdService.editFeeding(feedingEditParam);
         return CommonResult.ok();
     }

+ 1 - 1
snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingthreshold/service/FeedingThresholdService.java

@@ -57,6 +57,6 @@ public interface FeedingThresholdService extends IService<FeedingThreshold> {
 
     List<FeedingThresholdVo2> listFeeding(AddFeedingParam feedingParam);
 
-    void editFeeding(FeedingEditParam feedingEditParam);
+    void editFeeding(FeedingThresholdVo2 feedingEditParam);
 
 }

+ 12 - 11
snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingthreshold/service/impl/FeedingThresholdServiceImpl.java

@@ -67,7 +67,7 @@ public class FeedingThresholdServiceImpl extends ServiceImpl<FeedingThresholdMap
     @Override
     public FeedingThresholdVo listFat(String orgId) {
         QueryWrapper<FeedingThreshold> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("org_id", orgId);
+        queryWrapper.eq("org_id", orgId).eq("threshold_type",1);
         FeedingThreshold threshold = thresholdMapper.selectOne(queryWrapper);
         FeedingThresholdVo feedingThresholdVo = new FeedingThresholdVo();
         BeanUtil.copyProperties(threshold, feedingThresholdVo);
@@ -105,22 +105,23 @@ public class FeedingThresholdServiceImpl extends ServiceImpl<FeedingThresholdMap
             thresholdVo2.setFeedingName(threshold.getFeedingName());
             thresholdVo2.setFeedingUnitId(threshold.getFeedingUnitId());
             thresholdVo2.setMarginValue(threshold.getMarginValue());
+            thresholdVo2.setId(threshold.getId().toString());
+            thresholdVo2.setOrgId(threshold.getOrgId());
             list.add(thresholdVo2);
         }
         return list;
     }
 
     @Override
-    public void editFeeding(FeedingEditParam feedingEditParam) {
-        String orgId = feedingEditParam.getOrgId();
-        List<FeedingThresholdVo2> thresholdVo2s = feedingEditParam.getList();
-        for (FeedingThresholdVo2 thresholdVo2 : thresholdVo2s) {
-            QueryWrapper<FeedingThreshold> queryWrapper = new QueryWrapper<>();
-            queryWrapper.eq("org_id", orgId).eq("feeding_unit_id", thresholdVo2.getFeedingUnitId());
-            FeedingThreshold threshold = thresholdMapper.selectOne(queryWrapper);
-            BeanUtil.copyProperties(thresholdVo2, threshold);
-            thresholdMapper.updateById(threshold);
-        }
+    public void editFeeding(FeedingThresholdVo2 feedingEditParam) {
+        FeedingThreshold feedingThreshold = new FeedingThreshold();
+        feedingThreshold.setFeedingName(feedingEditParam.getFeedingName());
+        feedingThreshold.setFeedingUnitId(feedingEditParam.getFeedingUnitId());
+        feedingThreshold.setMarginValue(feedingEditParam.getMarginValue());
+        feedingThreshold.setOrgId(feedingEditParam.getOrgId());
+        feedingThreshold.setDeleteFlag("NOT_DELETE");
+        feedingThreshold.setId(Integer.valueOf(feedingEditParam.getId()));
+        thresholdMapper.updateById(feedingThreshold);
     }
 
 }

+ 17 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/feed/feedingthreshold/vo/FeedingThresholdVo2.java

@@ -1,5 +1,6 @@
 package vip.xiaonuo.modular.feed.feedingthreshold.vo;
 
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 @Data
@@ -8,16 +9,32 @@ public class FeedingThresholdVo2 {
     /**
      * 料塔名称
      */
+    /** 组织id */
+    @ApiModelProperty(value = "料塔名称", position = 8)
     private String feedingName;
 
     /**
      * 采食下限
      */
+    /** 组织id */
+    @ApiModelProperty(value = "采食下限", position = 8)
     private String marginValue;
 
     /**
      * 料塔名称id
      */
+    /** 组织id */
+    @ApiModelProperty(value = "料塔名称id", position = 8)
     private String feedingUnitId;
 
+    /**
+     * 料塔名称id
+     */
+    /** 组织id */
+    @ApiModelProperty(value = "组织id", position = 8)
+    private String orgId;
+
+    @ApiModelProperty(value = "id", position = 8)
+    private String id;
+
 }