523096025 1 ヶ月 前
コミット
6bf1985c03
21 ファイル変更1029 行追加9 行削除
  1. 5 0
      get-data/src/main/java/com/huimv/getdata/controller/ErpKuCunController.java
  2. 14 0
      get-data/src/main/java/com/huimv/getdata/entity/kucun/FSAFESTOCK.java
  3. 3 0
      get-data/src/main/java/com/huimv/getdata/mapper/ErpKuCunMapper.java
  4. 2 0
      get-data/src/main/java/com/huimv/getdata/service/IErpKuCunService.java
  5. 5 0
      get-data/src/main/java/com/huimv/getdata/service/impl/ErpKuCunServiceImpl.java
  6. 7 0
      get-data/src/main/resources/com/huimv/getdata/mapper/ErpKuCunMapper.xml
  7. 1 0
      huimv-farm/src/main/java/vip/xiaonuo/erp/entity/ErpBdRawMaterial.java
  8. 3 0
      huimv-farm/src/main/java/vip/xiaonuo/money/service/impl/MoneyOverdueServiceImpl.java
  9. 3 0
      huimv-farm/src/main/java/vip/xiaonuo/quality/param/QualityStockPageParam.java
  10. 3 0
      huimv-farm/src/main/java/vip/xiaonuo/quality/service/impl/QualityReagentStockServiceImpl.java
  11. 14 0
      huimv-farm/src/main/java/vip/xiaonuo/warehouse/entity/vo/FSAFESTOCK.java
  12. 183 0
      huimv-farm/src/main/resources/application-test1.properties
  13. 1 1
      huimv-farm/src/main/resources/application.properties
  14. 33 0
      huimv-farm/src/test/java/vip/xiaonuo/KuCunTest.java
  15. 1 1
      snowy-plugin-api/snowy-plugin-auth-api/src/main/java/vip/xiaonuo/auth/core/pojo/SaBaseLoginUser.java
  16. 18 0
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/org/controller/SysOrgController.java
  17. 2 0
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/resource/service/SysMenuService.java
  18. 318 0
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/role/controller/BizRoleController.java
  19. 58 7
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/role/service/impl/SysRoleServiceImpl.java
  20. 353 0
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/controller/BizUserCenterController.java
  21. 2 0
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/entity/SysUser.java

+ 5 - 0
get-data/src/main/java/com/huimv/getdata/controller/ErpKuCunController.java

@@ -47,6 +47,11 @@ public class ErpKuCunController {
                                                 @RequestParam(value = "type",required = false) String type ){
         return iErpKuCunService.getChengPinDangRi(date,type);
     }
+    @RequestMapping(value = "/getFSAFESTOCK",method = RequestMethod.GET)
+    public List<FSAFESTOCK> getFSAFESTOCK(@RequestParam(value = "date" ,required = false) String date ,
+                                                @RequestParam(value = "type",required = false) String type ){
+        return iErpKuCunService.getFSAFESTOCK(date,type);
+    }
 
     @RequestMapping(value = "/getYangMaoZhiDangRi",method = RequestMethod.GET)
     public List<ChengPinRuKu> getYangMaoZhiDangRi(@RequestParam(value = "date" ,required = false) String date){

+ 14 - 0
get-data/src/main/java/com/huimv/getdata/entity/kucun/FSAFESTOCK.java

@@ -0,0 +1,14 @@
+package com.huimv.getdata.entity.kucun;
+
+import lombok.Data;
+
+@Data
+public class FSAFESTOCK {
+    private Double FSAFESTOCK;
+
+    private Integer FMATERIALID;
+    private String fname;
+    private Integer FUSEORGID;
+    private String FSPECIFICATION;
+    private String FNUMBER;
+}

+ 3 - 0
get-data/src/main/java/com/huimv/getdata/mapper/ErpKuCunMapper.java

@@ -46,4 +46,7 @@ public interface ErpKuCunMapper {
     List<ChengPinRuKu> getChengPinDangRiAll(@Param("date")String date);
 
     List<ChenPinChuKu> getChengPinChuKuAll(@Param("date")String date);
+
+    List<FSAFESTOCK> getFSAFESTOCK();
+
 }

+ 2 - 0
get-data/src/main/java/com/huimv/getdata/service/IErpKuCunService.java

@@ -36,4 +36,6 @@ public interface IErpKuCunService {
     List<YangMaoZhiGongYingShang> getYangMaoZhiGongYingShang(String date);
 
     List<YangMaoZhiGongYingShang> getYangMaoZhiGongYingShangLeiJi(String date);
+
+    List<FSAFESTOCK> getFSAFESTOCK(String date, String type);
 }

+ 5 - 0
get-data/src/main/java/com/huimv/getdata/service/impl/ErpKuCunServiceImpl.java

@@ -118,4 +118,9 @@ public class ErpKuCunServiceImpl implements IErpKuCunService {
     public List<YangMaoZhiGongYingShang> getYangMaoZhiGongYingShangLeiJi(String date) {
        return erpKuCunMapper.getYangMaoZhiGongYingShangLeiJi(date);
     }
+
+    @Override
+    public List<FSAFESTOCK> getFSAFESTOCK(String date, String type) {
+        return erpKuCunMapper.getFSAFESTOCK();
+    }
 }

+ 7 - 0
get-data/src/main/resources/com/huimv/getdata/mapper/ErpKuCunMapper.xml

@@ -428,5 +428,12 @@ INNER JOIN T_STK_MISCELLANEOUSENTRY  B ON A.FID = B.FID
         </if>
 
     </select>
+    <select id="getFSAFESTOCK" resultType="com.huimv.getdata.entity.kucun.FSAFESTOCK">
+        SELECT   a.FSAFESTOCK , a.FMATERIALID  , b.fname ,A.FUSEORGID ,B.FSPECIFICATION ,c.FNUMBER  FROM t_BD_MaterialStock A
+inner join T_BD_MATERIAL_L b on a.FMATERIALID = b.FMATERIALID
+INNER JOIN T_BD_MATERIAL c on c.FMATERIALID = b.FMATERIALID
+where  a.FSAFESTOCK > 0
+ ORDER BY  a.FSAFESTOCK desc
+    </select>
 
 </mapper>

+ 1 - 0
huimv-farm/src/main/java/vip/xiaonuo/erp/entity/ErpBdRawMaterial.java

@@ -63,6 +63,7 @@ public class ErpBdRawMaterial implements Serializable {
 
     private String fspecification;
     private Integer materialType;
+    private Integer safeStock;
 
 
 }

+ 3 - 0
huimv-farm/src/main/java/vip/xiaonuo/money/service/impl/MoneyOverdueServiceImpl.java

@@ -75,6 +75,9 @@ public class MoneyOverdueServiceImpl extends ServiceImpl<MoneyOverdueMapper, Mon
 
         if (ObjectUtil.isNotEmpty(writeOverdues)) {
             for (MoneyWriteOverdue overdue : writeOverdues) {
+                if (ObjectUtil.isEmpty(overdue)){
+                    continue;
+                }
                 if (overdue.getEndTime().before(new Date())) {
                     isOverdue = isOverdue + Double.valueOf(overdue.getMoney());
                 }else {

+ 3 - 0
huimv-farm/src/main/java/vip/xiaonuo/quality/param/QualityStockPageParam.java

@@ -23,4 +23,7 @@ public class QualityStockPageParam {
 
     @ApiModelProperty(value = "试剂名称Id", position = 5)
     private Integer id;
+
+    @ApiModelProperty(value = "试剂名称", position = 5)
+    private String reagName;
 }

+ 3 - 0
huimv-farm/src/main/java/vip/xiaonuo/quality/service/impl/QualityReagentStockServiceImpl.java

@@ -30,11 +30,14 @@ public class QualityReagentStockServiceImpl extends ServiceImpl<QualityReagentSt
     @Override
     public Page<QualityReagentStock> page(QualityStockPageParam stockPageParam) {
         String orgId = stockPageParam.getOrgId();
+        String reagName = stockPageParam.getReagName();
         Integer pageNum = stockPageParam.getPageNum();
         Integer pageSize = stockPageParam.getPageSize();
         Page<QualityReagentStock> page = new Page<>(pageNum, pageSize);
         QueryWrapper<QualityReagentStock> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq(StringUtils.isNotBlank(orgId), "org_id", orgId);
+
+        queryWrapper.like(StringUtils.isNotBlank(reagName),"reagent",reagName);
         return stockMapper.selectPage(page,queryWrapper);
     }
 

+ 14 - 0
huimv-farm/src/main/java/vip/xiaonuo/warehouse/entity/vo/FSAFESTOCK.java

@@ -0,0 +1,14 @@
+package vip.xiaonuo.warehouse.entity.vo;
+
+import lombok.Data;
+
+@Data
+public class FSAFESTOCK {
+    private Double FSAFESTOCK;
+
+    private Integer FMATERIALID;
+    private String fname;
+    private Integer FUSEORGID;
+    private String FSPECIFICATION;
+    private String FNUMBER;
+}

+ 183 - 0
huimv-farm/src/main/resources/application-test1.properties

@@ -0,0 +1,183 @@
+#########################################
+# server configuration
+#########################################
+server.port=82
+
+#########################################
+# spring profiles configuration
+#########################################
+#spring.profiles.active=local
+#spring.profiles.active=test
+#spring.profiles.active=prod
+
+#########################################
+# multipart configurationapplication
+#########################################
+spring.servlet.multipart.max-request-size=100MB
+spring.servlet.multipart.max-file-size=100MB
+
+#########################################
+# datasource configuration
+#########################################
+
+# mysql
+spring.datasource.dynamic.datasource.master.driver-class-name=com.mysql.cj.jdbc.Driver
+#spring.datasource.dynamic.datasource.master.url=jdbc:mysql://localhost:3306/snowy?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&useInformationSchema=true
+spring.datasource.dynamic.datasource.master.url=jdbc:mysql://139.9.172.209:3309/huimv_garden?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&useInformationSchema=true
+spring.datasource.dynamic.datasource.master.username=eartag
+spring.datasource.dynamic.datasource.master.password=eartag@2022
+spring.datasource.dynamic.strict=true
+
+# postgres
+#spring.datasource.dynamic.datasource.master.driver-class-name=org.postgresql.Driver
+#spring.datasource.dynamic.datasource.master.url=jdbc:postgresql://localhost:5432/snowy
+#spring.datasource.dynamic.datasource.master.username=postgres
+#spring.datasource.dynamic.datasource.master.password=123456
+#spring.datasource.dynamic.strict=true
+
+# oracle
+#spring.datasource.dynamic.datasource.master.driver-class-name=oracle.jdbc.driver.OracleDriver
+#spring.datasource.dynamic.datasource.master.url=jdbc:oracle:thin:@//127.0.0.1:1521/XE?remarksReporting=true
+#spring.datasource.dynamic.datasource.master.username=SNOWY
+#spring.datasource.dynamic.datasource.master.password=12345678
+#spring.datasource.dynamic.strict=true
+
+# mssql
+#spring.datasource.dynamic.datasource.master.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
+#spring.datasource.dynamic.datasource.master.url=jdbc:sqlserver://localhost:1433;DatabaseName=SNOWY
+#spring.datasource.dynamic.datasource.master.username=sa
+#spring.datasource.dynamic.datasource.master.password=123456
+#spring.datasource.dynamic.strict=true
+
+# dm database
+#spring.datasource.dynamic.datasource.master.driver-class-name=dm.jdbc.driver.DmDriver
+#spring.datasource.dynamic.datasource.master.url=jdbc:dm://localhost:5236/SYSDBA
+#spring.datasource.dynamic.datasource.master.username=SYSDBA
+#spring.datasource.dynamic.datasource.master.password=SYSDBA
+#spring.datasource.dynamic.strict=true
+
+# kingbase database
+#spring.datasource.dynamic.datasource.master.driver-class-name=com.kingbase8.Driver
+#spring.datasource.dynamic.datasource.master.url=jdbc:kingbase8://localhost:54321/snowy
+#spring.datasource.dynamic.datasource.master.username=SYSTEM
+#spring.datasource.dynamic.datasource.master.password=123456
+#spring.datasource.dynamic.strict=true
+
+# druid monitor configuration
+spring.datasource.druid.stat-view-servlet.enabled=true
+spring.datasource.druid.stat-view-servlet.login-username=admin
+spring.datasource.druid.stat-view-servlet.login-password=123456
+
+# druid global configuration
+spring.datasource.dynamic.public-key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMWiTVtdXFVrgFHDDKELZM0SywkWY3KjugN90eY5Sogon1j8Y0ClPF7nx3FuE7pAeBKiv7ChIS0vvx/59WUpKmUCAwEAAQ==
+spring.datasource.dynamic.druid.initial-size=5
+spring.datasource.dynamic.druid.max-active=20
+spring.datasource.dynamic.druid.min-idle=5
+spring.datasource.dynamic.druid.max-wait=60000
+spring.datasource.dynamic.druid.pool-prepared-statements=true
+spring.datasource.dynamic.druid.max-pool-prepared-statement-per-connection-size=20
+spring.datasource.dynamic.druid.validation-query-timeout=2000
+spring.datasource.dynamic.druid.test-on-borrow=false
+spring.datasource.dynamic.druid.test-on-return=false
+spring.datasource.dynamic.druid.test-while-idle=true
+spring.datasource.dynamic.druid.time-between-eviction-runs-millis=60000
+spring.datasource.dynamic.druid.min-evictable-idle-time-millis=300000
+spring.datasource.dynamic.druid.filters=stat
+spring.datasource.dynamic.druid.break-after-acquire-failure=false
+
+#########################################
+# jackson configuration
+#########################################
+spring.jackson.time-zone=GMT+8
+spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
+spring.jackson.locale=zh_CN
+
+#########################################
+# redis configuration
+#########################################
+spring.redis.database=3
+spring.redis.host=122.112.224.199
+spring.redis.port=6379
+spring.redis.password=hm123456
+spring.redis.timeout=10s
+
+spring.redis.lettuce.pool.max-active=200
+spring.redis.lettuce.pool.max-wait=-1ms
+spring.redis.lettuce.pool.max-idle=10
+spring.redis.lettuce.pool.min-idle=0
+
+#########################################
+# mybatis-plus configuration
+#########################################
+mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
+mybatis-plus.configuration.jdbc-type-for-null=null
+mybatis-plus.global-config.banner=false
+mybatis-plus.global-config.enable-sql-runner=true
+mybatis-plus.global-config.db-config.id-type=ASSIGN_ID
+mybatis-plus.global-config.db-config.logic-delete-field=DELETE_FLAG
+mybatis-plus.global-config.db-config.logic-delete-value=DELETED
+mybatis-plus.global-config.db-config.logic-not-delete-value=NOT_DELETE
+mybatis-plus.mapper-locations=classpath*:mapper/*.xml
+mybatis-plus.type-handlers-package=vip.xiaonuo.common.handler
+
+#########################################
+# easy-trans configuration
+#########################################
+easy-trans.is-enable-redis=true
+easy-trans.is-enable-global=true
+easy-trans.is-enable-tile=true
+
+#########################################
+# sa-token configuration
+#########################################
+sa-token.token-name=token
+sa-token.timeout=2592000
+sa-token.activity-timeout=-1
+sa-token.is-concurrent=true
+sa-token.is-share=false
+sa-token.max-login-count=-1
+sa-token.token-style=random-32
+sa-token.is-log=false
+sa-token.is-print=false
+
+# sa-token alone-redis configuration
+sa-token.alone-redis.database=2
+sa-token.alone-redis.host=${spring.redis.host}
+sa-token.alone-redis.port=${spring.redis.port}
+sa-token.alone-redis.password=${spring.redis.password}
+sa-token.alone-redis.timeout=${spring.redis.timeout}
+sa-token.alone-redis.lettuce.pool.max-active=${spring.redis.lettuce.pool.max-active}
+sa-token.alone-redis.lettuce.pool.max-wait=${spring.redis.lettuce.pool.max-wait}
+sa-token.alone-redis.lettuce.pool.max-idle=${spring.redis.lettuce.pool.max-idle}
+sa-token.alone-redis.lettuce.pool.min-idle=${spring.redis.lettuce.pool.min-idle}
+
+#########################################
+# knife4j configuration
+#########################################
+knife4j.enable=true
+knife4j.production=false
+knife4j.basic.enable=true
+knife4j.basic.username=admin
+knife4j.basic.password=123456
+knife4j.setting.enableOpenApi=false
+knife4j.setting.enableSwaggerModels=false
+knife4j.setting.enableFooter=false
+knife4j.setting.enableFooterCustom=true
+knife4j.setting.footerCustomContent=Apache License 2.0 | Copyright 2022-[SNOWY](https://www.baiduc.com)
+
+#########################################
+# snowy configuration
+#########################################
+
+# common configuration
+snowy.config.common.front-url=http://localhost:81
+snowy.config.common.backend-url=http://localhost:82
+
+
+img.url=https://img.ifarmcloud.com/images/
+img.basePath=/home/huimv/img/
+img.ip=119.3.44.183
+img.user=huimv
+img.password=!hm123@1
+img.port=22
+

+ 1 - 1
huimv-farm/src/main/resources/application.properties

@@ -7,7 +7,7 @@ server.port=82
 # spring profiles configuration
 #########################################
 #spring.profiles.active=local
-spring.profiles.active=test
+spring.profiles.active=test1
 #spring.profiles.active=prod
 
 #########################################

+ 33 - 0
huimv-farm/src/test/java/vip/xiaonuo/KuCunTest.java

@@ -26,9 +26,11 @@ import org.springframework.http.ResponseEntity;
 import org.springframework.test.context.junit4.SpringRunner;
 import org.springframework.web.client.RestTemplate;
 import vip.xiaonuo.erp.entity.ErpBdOrg;
+import vip.xiaonuo.erp.entity.ErpBdRawMaterial;
 import vip.xiaonuo.erp.entity.caigou.*;
 import vip.xiaonuo.erp.entity.kucun.*;
 import vip.xiaonuo.erp.mapper.ErpBdOrgMapper;
+import vip.xiaonuo.erp.mapper.ErpBdRawMaterialMapper;
 import vip.xiaonuo.purchase.entity.PurchaseContract;
 import vip.xiaonuo.purchase.entity.PurchaseOrder;
 import vip.xiaonuo.purchase.entity.PurchasePay;
@@ -38,6 +40,7 @@ import vip.xiaonuo.purchase.mapper.PurchaseOrderMapper;
 import vip.xiaonuo.purchase.mapper.PurchasePayMapper;
 import vip.xiaonuo.purchase.mapper.PurchasePriceMapper;
 import vip.xiaonuo.warehouse.entity.*;
+import vip.xiaonuo.warehouse.entity.vo.FSAFESTOCK;
 import vip.xiaonuo.warehouse.mapper.*;
 
 import java.util.Date;
@@ -73,6 +76,36 @@ public class KuCunTest {
     private WarehouseMaterialInStockMapper materialInStockMapper;
     @Autowired
     private WarehouseStockSecondMapper stockSecondMapper;
+    @Autowired
+    private ErpBdRawMaterialMapper erpBdRawMaterialMapper;
+
+
+    //获取安全库存
+    @Test
+    public void test6() {
+        Date date = DateUtil.beginOfDay(new Date());  // 获取当前日期
+        // 构建URL,使用格式化的日期
+        ResponseEntity<List<FSAFESTOCK>> response = restTemplate.exchange(
+                "http://127.0.0.1:9200/erp-kucun/getFSAFESTOCK?date=",
+                HttpMethod.GET,
+                null,
+                new ParameterizedTypeReference<List<FSAFESTOCK>>() {
+                }
+        );
+        List<FSAFESTOCK> forObjects = response.getBody();
+        System.out.println(forObjects);
+        for (FSAFESTOCK forObject : forObjects) {
+            ErpBdOrg forgid = erpBdOrgMapper.selectOne(new QueryWrapper<ErpBdOrg>().eq("forgid", forObject.getFUSEORGID()));
+            if (ObjectUtil.isEmpty(forgid))
+                continue;
+            ErpBdRawMaterial erpBdRawMaterial = erpBdRawMaterialMapper.selectOne(new QueryWrapper<ErpBdRawMaterial>().eq("org_id", forgid.getOrgId()).eq("erp_fnumber", forObject.getFNUMBER()));
+            if (ObjectUtil.isNotEmpty(erpBdRawMaterial)){
+                erpBdRawMaterial.setSafeStock((int)Math.floor(forObject.getFSAFESTOCK()));
+                erpBdRawMaterialMapper.updateById(erpBdRawMaterial);
+            }
+        }
+
+    }
 
     @Test
     public void test() {

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

@@ -154,7 +154,7 @@ public abstract class SaBaseLoginUser {
     private String orgId;
     /** 组织id */
     @ApiModelProperty(value = "组织id2", position = 32)
-    private List<String> orgIds;
+    private String orgIds;
 
     /** 组织名称 */
     @ApiModelProperty(value = "组织名称", position = 33)

+ 18 - 0
snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/org/controller/SysOrgController.java

@@ -14,6 +14,7 @@ package vip.xiaonuo.sys.modular.org.controller;
 
 import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.lang.tree.Tree;
+import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -192,8 +193,25 @@ public class SysOrgController {
     public CommonResult<JSONArray> listOrgIds() {
         JSONArray jsonArray = new JSONArray();
         SaBaseLoginUser loginUser =  StpLoginUserUtil.getLoginUser();
+       String orgIds = loginUser.getOrgIds();
+        if (ObjectUtil.isNotEmpty(orgIds)){
+            String[] split = orgIds.split(",");
+            List<SysOrg> sysOrgs = sysOrgService.list(new QueryWrapper<SysOrg>().in("ID",split ));
+//            jsonObject.put("name", "全部");
+//            jsonObject.put("id", "");
+//            jsonArray.add(jsonObject);
+            for (SysOrg org : sysOrgs) {
+                JSONObject jsonObject1 = new JSONObject();
+                jsonObject1.put("name", org.getName());
+                jsonObject1.put("id", org.getId());
+                jsonArray.add(jsonObject1);
+            }
+            return CommonResult.data(jsonArray);
+        }
+
         String orgId = loginUser.getOrgId();//登录账号的orgId
         SysOrg sysOrg = sysOrgService.getOne(new QueryWrapper<SysOrg>().eq("ID", orgId));
+
         if (sysOrg.getParentId().equals("0")) {
             List<SysOrg> sysOrgs = sysOrgService.list(new QueryWrapper<SysOrg>().eq("PARENT_ID", sysOrg.getId())
                     .eq("CATEGORY", "COMPANY"));

+ 2 - 0
snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/resource/service/SysMenuService.java

@@ -138,4 +138,6 @@ public interface SysMenuService extends IService<SysMenu> {
      * @date 2022/4/24 20:08
      */
     List<Tree<String>> menuTreeSelector(SysMenuSelectorMenuParam sysMenuSelectorMenuParam);
+
+
 }

+ 318 - 0
snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/role/controller/BizRoleController.java

@@ -0,0 +1,318 @@
+/*
+ * Copyright [2022] [https://www.baiduc.com]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.baiduc.com
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.baiduc.com
+ */
+package vip.xiaonuo.sys.modular.role.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.role.entity.SysRole;
+import vip.xiaonuo.sys.modular.role.param.*;
+import vip.xiaonuo.sys.modular.role.result.*;
+import vip.xiaonuo.sys.modular.role.service.SysRoleService;
+import vip.xiaonuo.sys.modular.user.entity.SysUser;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+
+/**
+ * 角色控制器
+ *
+ * @author xuyuxiang
+ * @date 2022/4/25 20:19
+ */
+@Api(tags = "角色控制器")
+@ApiSupport(author = "SNOWY_TEAM", order = 8)
+@RestController
+@Validated
+public class BizRoleController {
+
+    @Resource
+    private SysRoleService sysRoleService;
+
+    /**
+     * 获取角色分页
+     *
+     * @author xuyuxiang
+     * @date 2022/4/24 20:00
+     */
+    @ApiOperationSupport(order = 1)
+    @ApiOperation("获取角色分页")
+    @GetMapping("/biz/role/page")
+    public CommonResult<Page<SysRole>> page(SysRolePageParam sysRolePageParam) {
+        return CommonResult.data(sysRoleService.page(sysRolePageParam));
+    }
+
+    /**
+     * 添加角色
+     *
+     * @author xuyuxiang
+     * @date 2022/4/24 20:47
+     */
+    @ApiOperationSupport(order = 2)
+    @ApiOperation("添加角色")
+    @CommonLog("添加角色")
+    @PostMapping("/biz/role/add")
+    public CommonResult<String> add(@RequestBody @Valid SysRoleAddParam sysRoleAddParam) {
+        sysRoleService.add(sysRoleAddParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 编辑角色
+     *
+     * @author xuyuxiang
+     * @date 2022/4/24 20:47
+     */
+    @ApiOperationSupport(order = 3)
+    @ApiOperation("编辑角色")
+    @CommonLog("编辑角色")
+    @PostMapping("/biz/role/edit")
+    public CommonResult<String> edit(@RequestBody @Valid SysRoleEditParam sysRoleEditParam) {
+        sysRoleService.edit(sysRoleEditParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 删除角色
+     *
+     * @author xuyuxiang
+     * @date 2022/4/24 20:00
+     */
+    @ApiOperationSupport(order = 4)
+    @ApiOperation("删除角色")
+    @CommonLog("删除角色")
+    @PostMapping("/biz/role/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                                   CommonValidList<SysRoleIdParam> sysRoleIdParamList) {
+        sysRoleService.delete(sysRoleIdParamList);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取角色详情
+     *
+     * @author xuyuxiang
+     * @date 2022/4/24 20:00
+     */
+    @ApiOperationSupport(order = 5)
+    @ApiOperation("获取角色详情")
+    @GetMapping("/biz/role/detail")
+    public CommonResult<SysRole> detail(@Valid SysRoleIdParam sysRoleIdParam) {
+        return CommonResult.data(sysRoleService.detail(sysRoleIdParam));
+    }
+
+    /**
+     * 获取角色拥有资源
+     *
+     * @author xuyuxiang
+     * @date 2022/4/24 20:00
+     */
+    @ApiOperationSupport(order = 6)
+    @ApiOperation("获取角色拥有资源")
+    @GetMapping("/biz/role/ownResource")
+    public CommonResult<SysRoleOwnResourceResult> ownResource(@Valid SysRoleIdParam sysRoleIdParam) {
+        return CommonResult.data(sysRoleService.ownResource(sysRoleIdParam));
+    }
+
+    /**
+     * 给角色授权资源
+     *
+     * @author xuyuxiang
+     * @date 2022/4/24 20:00
+     */
+    @ApiOperationSupport(order = 7)
+    @ApiOperation("给角色授权资源")
+    @CommonLog("给角色授权资源")
+    @PostMapping("/biz/role/grantResource")
+    public CommonResult<String> grantResource(@RequestBody @Valid SysRoleGrantResourceParam sysRoleGrantResourceParam) {
+        sysRoleService.grantResource(sysRoleGrantResourceParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取角色拥有移动端菜单
+     *
+     * @author xuyuxiang
+     * @date 2022/4/24 20:00
+     */
+    @ApiOperationSupport(order = 8)
+    @ApiOperation("获取角色拥有移动端菜单")
+    @GetMapping("/biz/role/ownMobileMenu")
+    public CommonResult<SysRoleOwnMobileMenuResult> ownMobileMenu(@Valid SysRoleIdParam sysRoleIdParam) {
+        return CommonResult.data(sysRoleService.ownMobileMenu(sysRoleIdParam));
+    }
+
+    /**
+     * 给角色授权移动端菜单
+     *
+     * @author xuyuxiang
+     * @date 2022/4/24 20:00
+     */
+    @ApiOperationSupport(order = 9)
+    @ApiOperation("给角色授权移动端菜单")
+    @CommonLog("给角色授权移动端菜单")
+    @PostMapping("/biz/role/grantMobileMenu")
+    public CommonResult<String> grantMobileMenu(@RequestBody @Valid SysRoleGrantMobileMenuParam sysRoleGrantMobileMenuParam) {
+        sysRoleService.grantMobileMenu(sysRoleGrantMobileMenuParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取角色拥有权限
+     *
+     * @author xuyuxiang
+     * @date 2022/4/24 20:00
+     */
+    @ApiOperationSupport(order = 10)
+    @ApiOperation("获取角色拥有权限")
+    @GetMapping("/biz/role/ownPermission")
+    public CommonResult<SysRoleOwnPermissionResult> ownPermission(@Valid SysRoleIdParam sysRoleIdParam) {
+        return CommonResult.data(sysRoleService.ownPermission(sysRoleIdParam));
+    }
+
+    /**
+     * 给角色授权权限
+     *
+     * @author xuyuxiang
+     * @date 2022/4/24 20:00
+     */
+    @ApiOperationSupport(order = 11)
+    @ApiOperation("给角色授权权限")
+    @CommonLog("给角色授权权限")
+    @PostMapping("/biz/role/grantPermission")
+    public CommonResult<String> grantPermission(@RequestBody @Valid SysRoleGrantPermissionParam sysRoleGrantPermissionParam) {
+        sysRoleService.grantPermission(sysRoleGrantPermissionParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取角色下的用户
+     *
+     * @author xuyuxiang
+     * @date 2022/4/24 20:00
+     */
+    @ApiOperationSupport(order = 12)
+    @ApiOperation("获取角色下的用户")
+    @GetMapping("/biz/role/ownUser")
+    public CommonResult<List<String>> ownUser(@Valid SysRoleIdParam sysRoleIdParam) {
+        return CommonResult.data(sysRoleService.ownUser(sysRoleIdParam));
+    }
+
+    /**
+     * 给角色授权用户
+     *
+     * @author xuyuxiang
+     * @date 2022/4/24 20:00
+     */
+    @ApiOperationSupport(order = 13)
+    @ApiOperation("给角色授权用户")
+    @CommonLog("给角色授权用户")
+    @PostMapping("/biz/role/grantUser")
+    public CommonResult<String> grantUser(@RequestBody @Valid SysRoleGrantUserParam sysRoleGrantUserParam) {
+        sysRoleService.grantUser(sysRoleGrantUserParam);
+        return CommonResult.ok();
+    }
+
+    /* ====角色部分所需要用到的选择器==== */
+
+    /**
+     * 获取组织树选择器
+     *
+     * @author xuyuxiang
+     * @date 2022/4/24 20:00
+     */
+    @ApiOperationSupport(order = 14)
+    @ApiOperation("获取组织树选择器")
+    @GetMapping("/biz/role/orgTreeSelector")
+    public CommonResult<List<Tree<String>>> orgTreeSelector() {
+        return CommonResult.data(sysRoleService.orgTreeSelector());
+    }
+
+    /**
+     * 获取资源授权树
+     *
+     * @author xuyuxiang
+     * @date 2022/4/24 20:00
+     */
+    @ApiOperationSupport(order = 15)
+    @ApiOperation("获取资源授权树")
+    @GetMapping("/biz/role/resourceTreeSelector")
+    public CommonResult<List<SysRoleGrantResourceTreeResult>> resourceTreeSelector() {
+        return CommonResult.data(sysRoleService.resourceTreeSelector());
+    }
+
+    /**
+     * 获取移动端菜单授权树
+     *
+     * @author xuyuxiang
+     * @date 2022/4/24 20:00
+     */
+    @ApiOperationSupport(order = 16)
+    @ApiOperation("获取移动端菜单授权树")
+    @GetMapping("/biz/role/mobileMenuTreeSelector")
+    public CommonResult<List<SysRoleGrantMobileMenuTreeResult>> mobileMenuTreeSelector() {
+        return CommonResult.data(sysRoleService.mobileMenuTreeSelector());
+    }
+
+    /**
+     * 获取权限授权树
+     *
+     * @author xuyuxiang
+     * @date 2022/4/24 20:00
+     */
+    @ApiOperationSupport(order = 17)
+    @ApiOperation("获取权限授权树")
+    @GetMapping("/biz/role/permissionTreeSelector")
+    public CommonResult<List<String>> permissionTreeSelector() {
+        return CommonResult.data(sysRoleService.permissionTreeSelector());
+    }
+
+    /**
+     * 获取角色选择器
+     *
+     * @author xuyuxiang
+     * @date 2022/4/24 20:00
+     */
+    @ApiOperationSupport(order = 18)
+    @ApiOperation("获取角色选择器")
+    @GetMapping("/biz/role/roleSelector")
+    public CommonResult<Page<SysRole>> roleSelector(SysRoleSelectorRoleParam sysRoleSelectorRoleParam) {
+        return CommonResult.data(sysRoleService.roleSelector(sysRoleSelectorRoleParam));
+    }
+
+    /**
+     * 获取用户选择器
+     *
+     * @author xuyuxiang
+     * @date 2022/4/24 20:00
+     */
+    @ApiOperationSupport(order = 19)
+    @ApiOperation("获取用户选择器")
+    @GetMapping("/biz/role/userSelector")
+    public CommonResult<Page<SysUser>> userSelector(SysRoleSelectorUserParam sysRoleSelectorUserParam) {
+        return CommonResult.data(sysRoleService.userSelector(sysRoleSelectorUserParam));
+    }
+}

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

@@ -28,8 +28,11 @@ 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.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import vip.xiaonuo.auth.core.pojo.SaBaseLoginUser;
+import vip.xiaonuo.auth.core.util.StpLoginUserUtil;
 import vip.xiaonuo.mobile.api.MobileMenuApi;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.stereotype.Service;
@@ -65,10 +68,7 @@ import vip.xiaonuo.sys.modular.user.entity.SysUser;
 import vip.xiaonuo.sys.modular.user.service.SysUserService;
 
 import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -101,9 +101,14 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
     @Override
     public Page<SysRole> page(SysRolePageParam sysRolePageParam) {
         QueryWrapper<SysRole> queryWrapper = new QueryWrapper<>();
+        SaBaseLoginUser saBaseLoginUser = StpLoginUserUtil.getLoginUser();
+        System.out.println("-------------->"+saBaseLoginUser.toString());
         // 查询部分字段
         queryWrapper.lambda().select(SysRole::getId, SysRole::getOrgId, SysRole::getName,
                 SysRole::getCategory, SysRole::getSortCode);
+        if ( !"superAdmin".equals(saBaseLoginUser.getAccount())){
+            queryWrapper.lambda().eq(SysRole::getCreateUser,saBaseLoginUser.getId());
+        }
         if(ObjectUtil.isNotEmpty(sysRolePageParam.getOrgId())) {
             queryWrapper.lambda().eq(SysRole::getOrgId, sysRolePageParam.getOrgId());
         }
@@ -322,7 +327,16 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
 
     @Override
     public List<Tree<String>> orgTreeSelector() {
-        List<SysOrg> sysOrgList = sysOrgService.getAllOrgList();
+        SaBaseLoginUser saBaseLoginUser = StpLoginUserUtil.getLoginUser();
+        List<SysOrg> sysOrgList ;
+        if (StringUtils.isNotBlank(saBaseLoginUser.getOrgIds())){
+
+            ArrayList<String> strings = new ArrayList<>(Arrays.asList(saBaseLoginUser.getOrgIds().split(",")));
+            strings.add("1543842934270394368");
+            sysOrgList =  sysOrgService.list(new QueryWrapper<SysOrg>().in("ID",strings));
+        }else {
+            sysOrgList = sysOrgService.getAllOrgList();
+        }
         List<TreeNode<String>> treeNodeList = sysOrgList.stream().map(sysOrg ->
                 new TreeNode<>(sysOrg.getId(), sysOrg.getParentId(), sysOrg.getName(), sysOrg.getSortCode()))
                 .collect(Collectors.toList());
@@ -331,13 +345,50 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
 
     @Override
     public List<SysRoleGrantResourceTreeResult> resourceTreeSelector() {
+        SaBaseLoginUser saBaseLoginUser = StpLoginUserUtil.getLoginUser();
         LambdaQueryWrapper<SysMenu> lambdaQueryWrapper = new LambdaQueryWrapper<>();
-        lambdaQueryWrapper.in(SysMenu::getCategory, SysResourceCategoryEnum.MODULE.getValue(), SysResourceCategoryEnum.MENU.getValue(),
-                SysResourceCategoryEnum.BUTTON.getValue());
+        if (!"superAdmin".equals(saBaseLoginUser.getAccount())){
+            //角色集合
+            List<String> roleIdList = sysRelationService.getRelationTargetIdListByObjectIdAndCategory(saBaseLoginUser.getId(),
+                    SysRelationCategoryEnum.SYS_USER_HAS_ROLE.getValue());
+            //权限合集
+            List<SysRelation> relationListByTargetIdList = sysRelationService.getRelationListByObjectIdListAndCategory(roleIdList, SysRelationCategoryEnum.SYS_ROLE_HAS_RESOURCE.getValue());
+
+            Set<String> menuIds = relationListByTargetIdList.stream()
+                    .map(sysRelation -> {
+                        // 将extJson字符串转换为SysRoleOwnMobileMenu对象
+                        SysRoleOwnMobileMenuResult.SysRoleOwnMobileMenu sysRoleOwnMobileMenu = JSONUtil.toBean(sysRelation.getExtJson(), SysRoleOwnMobileMenuResult.SysRoleOwnMobileMenu.class);
+
+                        // 获取菜单ID、按钮信息以及目标ID对应的菜单的父ID
+                        Set<String> tempMenuIds = new HashSet<>();
+                        tempMenuIds.add(sysRoleOwnMobileMenu.getMenuId());
+                        tempMenuIds.addAll(sysRoleOwnMobileMenu.getButtonInfo());
+                        SysMenu byId = sysMenuService.getById(sysRelation.getTargetId());
+                        tempMenuIds.add(byId.getModule());
+                        return tempMenuIds;
+                    })
+                    .flatMap(Set::stream)
+                    .collect(Collectors.toSet());
+
+            lambdaQueryWrapper.in(SysMenu::getCategory, SysResourceCategoryEnum.MODULE.getValue(), SysResourceCategoryEnum.MENU.getValue(),
+                    SysResourceCategoryEnum.BUTTON.getValue()).in(SysMenu::getId , menuIds);
+        }else {
+            lambdaQueryWrapper.in(SysMenu::getCategory, SysResourceCategoryEnum.MODULE.getValue(), SysResourceCategoryEnum.MENU.getValue(),
+                    SysResourceCategoryEnum.BUTTON.getValue());
+        }
+
+
+
+
+
         List<SysMenu> allMenuAndButtonAndFieldList = sysMenuService.list(lambdaQueryWrapper);
         List<SysMenu> sysModuleList = CollectionUtil.newArrayList();
         List<SysMenu> sysMenuList = CollectionUtil.newArrayList();
         List<SysMenu> sysButtonList = CollectionUtil.newArrayList();
+
+
+
+
         allMenuAndButtonAndFieldList.forEach(sysMenu -> {
             if (sysMenu.getCategory().equals(SysResourceCategoryEnum.MODULE.getValue())) {
                 sysModuleList.add(sysMenu);

+ 353 - 0
snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/controller/BizUserCenterController.java

@@ -0,0 +1,353 @@
+/*
+ * Copyright [2022] [https://www.baiduc.com]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.baiduc.com
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.baiduc.com
+ */
+package vip.xiaonuo.sys.modular.user.controller;
+
+import cn.dev33.satoken.stp.StpUtil;
+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 io.swagger.annotations.ApiParam;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+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.*;
+import vip.xiaonuo.sys.modular.user.result.SysUserMessageDetailResult;
+import vip.xiaonuo.sys.modular.user.result.SysUserMessageResult;
+import vip.xiaonuo.sys.modular.user.result.SysUserPicValidCodeResult;
+import vip.xiaonuo.sys.modular.user.result.SysUserPositionResult;
+import vip.xiaonuo.sys.modular.user.service.SysUserService;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+ * 用户个人控制器
+ *
+ * @author xuyuxiang
+ * @date 2022/4/22 9:34
+ **/
+@Api(tags = "用户个人控制器")
+@ApiSupport(author = "SNOWY_TEAM", order = 10)
+@RestController
+@Validated
+public class BizUserCenterController {
+
+    @Resource
+    private SysUserService sysUserService;
+
+    /**
+     * 获取图片验证码
+     *
+     * @author xuyuxiang
+     * @date 2022/7/8 9:26
+     **/
+    @ApiOperationSupport(order = 1)
+    @ApiOperation("获取图片验证码")
+    @GetMapping("/biz/userCenter/getPicCaptcha")
+    public CommonResult<SysUserPicValidCodeResult> getPicCaptcha() {
+        return CommonResult.data(sysUserService.getPicCaptcha());
+    }
+
+    /**
+     * 找回密码获取手机验证码
+     *
+     * @author xuyuxiang
+     * @date 2021/10/13 14:01
+     **/
+    @ApiOperationSupport(order = 2)
+    @ApiOperation("找回密码获取手机验证码")
+    @GetMapping("/biz/userCenter/findPasswordGetPhoneValidCode")
+    public CommonResult<String> findPasswordGetPhoneValidCode(@Valid SysUserGetPhoneValidCodeParam sysUserGetPhoneValidCodeParam) {
+        return CommonResult.data(sysUserService.findPasswordGetPhoneValidCode(sysUserGetPhoneValidCodeParam));
+    }
+
+    /**
+     * 找回密码获取邮箱验证码
+     *
+     * @author xuyuxiang
+     * @date 2021/10/13 14:01
+     **/
+    @ApiOperationSupport(order = 3)
+    @ApiOperation("找回密码获取邮箱验证码")
+    @GetMapping("/biz/userCenter/findPasswordGetEmailValidCode")
+    public CommonResult<String> findPasswordGetEmailValidCode(@Valid SysUserGetEmailValidCodeParam sysUserGetEmailValidCodeParam) {
+        return CommonResult.data(sysUserService.findPasswordGetEmailValidCode(sysUserGetEmailValidCodeParam));
+    }
+
+    /**
+     * 通过手机号找回用户密码
+     *
+     * @author xuyuxiang
+     * @date 2021/10/13 14:01
+     **/
+    @ApiOperationSupport(order = 4)
+    @ApiOperation("通过手机号找回用户密码")
+    @CommonLog("通过手机号找回用户密码")
+    @PostMapping("/biz/userCenter/findPasswordByPhone")
+    public CommonResult<String> findPasswordByPhone(@RequestBody @Valid SysUserFindPwdByPhoneParam sysUserFindPwdByPhoneParam) {
+        sysUserService.findPasswordByPhone(sysUserFindPwdByPhoneParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 通过邮箱找回用户密码
+     *
+     * @author xuyuxiang
+     * @date 2021/10/13 14:01
+     **/
+    @ApiOperationSupport(order = 5)
+    @ApiOperation("通过邮箱找回用户密码")
+    @CommonLog("通过邮箱找回用户密码")
+    @PostMapping("/biz/userCenter/findPasswordByEmail")
+    public CommonResult<String> findPasswordByEmail(@RequestBody @Valid SysUserFindPwdByEmailParam sysUserFindPwdByEmailParam) {
+        sysUserService.findPasswordByEmail(sysUserFindPwdByEmailParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 修改用户密码
+     *
+     * @author xuyuxiang
+     * @date 2021/10/13 14:01
+     **/
+    @ApiOperationSupport(order = 6)
+    @ApiOperation("修改用户密码")
+    @CommonLog("修改用户密码")
+    @PostMapping("/biz/userCenter/updatePassword")
+    public CommonResult<String> updatePassword(@RequestBody @Valid SysUserUpdatePwdParam sysUserUpdatePwdParam) {
+        sysUserService.updatePassword(sysUserUpdatePwdParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 修改用户头像
+     *
+     * @author xuyuxiang
+     * @date 2021/10/13 14:01
+     **/
+    @ApiOperationSupport(order = 7)
+    @ApiOperation("修改用户头像")
+    @CommonLog("修改用户头像")
+    @PostMapping("/biz/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("/biz/userCenter/updateSignature")
+    public CommonResult<String> updateSignature(@RequestBody @Valid SysUserSignatureParam sysUserSignatureParam) {
+        sysUserService.updateSignature(sysUserSignatureParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取登录用户的菜单(B端、PC端菜单)
+     *
+     * @author xuyuxiang
+     * @date 2022/4/24 20:00
+     */
+    @ApiOperationSupport(order = 9)
+    @ApiOperation("获取登录用户PC端菜单")
+    @GetMapping("/biz/userCenter/loginMenu")
+    public CommonResult<List<Tree<String>>> loginMenu() {
+        SysUserIdParam sysUserIdParam = new SysUserIdParam();
+        sysUserIdParam.setId(StpUtil.getLoginIdAsString());
+        return CommonResult.data(sysUserService.ownMenu(sysUserIdParam));
+    }
+
+    /**
+     * 获取登录用户的菜单(B端、移动端菜单)
+     *
+     * @author xuyuxiang
+     * @date 2022/4/24 20:00
+     */
+    @ApiOperationSupport(order = 10)
+    @ApiOperation("获取登录用户移动端菜单")
+    @GetMapping("/biz/userCenter/loginMobileMenu")
+    public CommonResult<List<Tree<String>>> loginMobileMenu() {
+        SysUserIdParam sysUserIdParam = new SysUserIdParam();
+        sysUserIdParam.setId(StpUtil.getLoginIdAsString());
+        return CommonResult.data(sysUserService.ownMobileMenu(sysUserIdParam));
+    }
+
+    /**
+     * 获取登录用户组织树
+     *
+     * @author xuyuxiang
+     * @date 2022/4/24 20:00
+     */
+    @ApiOperationSupport(order = 11)
+    @ApiOperation("获取登录用户组织树")
+    @GetMapping("/biz/userCenter/loginOrgTree")
+    public CommonResult<List<Tree<String>>> loginOrgTree() {
+        SysUserIdParam sysUserIdParam = new SysUserIdParam();
+        sysUserIdParam.setId(StpUtil.getLoginIdAsString());
+        return CommonResult.data(sysUserService.loginOrgTree(sysUserIdParam));
+    }
+
+    /**
+     * 获取登录用户的职位信息
+     *
+     * @author xuyuxiang
+     * @date 2022/4/24 20:00
+     */
+    @ApiOperationSupport(order = 12)
+    @ApiOperation("获取登录用户的职位信息")
+    @GetMapping("/biz/userCenter/loginPositionInfo")
+    public CommonResult<List<SysUserPositionResult>> loginPositionInfo() {
+        SysUserIdParam sysUserIdParam = new SysUserIdParam();
+        sysUserIdParam.setId(StpUtil.getLoginIdAsString());
+        return CommonResult.data(sysUserService.loginPositionInfo(sysUserIdParam));
+    }
+
+    /**
+     * 编辑个人信息
+     *
+     * @author xuyuxiang
+     * @date 2022/4/24 20:47
+     */
+    @ApiOperationSupport(order = 13)
+    @ApiOperation("编辑个人信息")
+    @CommonLog("编辑个人信息")
+    @PostMapping("/biz/userCenter/updateUserInfo")
+    public CommonResult<String> updateUserInfo(@RequestBody @Valid SysUserUpdateInfoParam sysUserUpdateInfoParam) {
+        sysUserService.updateUserInfo(sysUserUpdateInfoParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 编辑个人工作台
+     *
+     * @author xuyuxiang
+     * @date 2022/4/24 20:47
+     */
+    @ApiOperationSupport(order = 14)
+    @ApiOperation("编辑个人工作台")
+    @CommonLog("编辑个人工作台")
+    @PostMapping("/biz/userCenter/updateUserWorkbench")
+    public CommonResult<String> updateUserWorkbench(@RequestBody @Valid SysUserUpdateWorkbenchParam sysUserUpdateWorkbenchParam) {
+        sysUserService.updateUserWorkbench(sysUserUpdateWorkbenchParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取登录用户的工作台
+     *
+     * @author xuyuxiang
+     * @date 2022/4/24 20:00
+     */
+    @ApiOperationSupport(order = 15)
+    @ApiOperation("获取登录用户的工作台")
+    @GetMapping("/biz/userCenter/loginWorkbench")
+    public CommonResult<String> loginWorkbench() {
+        SysUserIdParam sysUserIdParam = new SysUserIdParam();
+        sysUserIdParam.setId(StpUtil.getLoginIdAsString());
+        return CommonResult.data(sysUserService.loginWorkbench(sysUserIdParam));
+    }
+
+    /**
+     * 获取登录用户的站内信分页
+     *
+     * @author xuyuxiang
+     * @date 2022/4/24 20:00
+     */
+    @ApiOperationSupport(order = 16)
+    @ApiOperation("获取登录用户的站内信分页")
+    @GetMapping("/biz/userCenter/loginUnreadMessagePage")
+    public CommonResult<Page<SysUserMessageResult>> loginMessagePage(SysUserMessagePageParam sysUserMessagePageParam) {
+        return CommonResult.data(sysUserService.loginMessagePage(sysUserMessagePageParam));
+    }
+
+    /**
+     * 读取登录用户站内信详情
+     *
+     * @author xuyuxiang
+     * @date 2022/4/24 20:00
+     */
+    @ApiOperationSupport(order = 17)
+    @ApiOperation("读取登录用户站内信详情")
+    @GetMapping("/biz/userCenter/loginUnreadMessageDetail")
+    public CommonResult<SysUserMessageDetailResult> loginMessageDetail(@Valid SysUserMessageIdParam sysUserMessageIdParam) {
+        return CommonResult.data(sysUserService.loginMessageDetail(sysUserMessageIdParam));
+    }
+
+    /**
+     * 根据id集合获取组织集合
+     *
+     * @author xuyuxiang
+     * @date 2022/4/24 20:00
+     */
+    @ApiOperationSupport(order = 18)
+    @ApiOperation("根据id集合获取组织集合")
+    @PostMapping("/biz/userCenter/getOrgListByIdList")
+    public CommonResult<List<SysOrg>> getOrgListByIdList(@RequestBody @Valid SysUserIdListParam sysUserIdListParam) {
+        return CommonResult.data(sysUserService.getOrgListByIdList(sysUserIdListParam));
+    }
+
+    /**
+     * 根据id集合获取用户集合
+     *
+     * @author xuyuxiang
+     * @date 2022/4/24 20:00
+     */
+    @ApiOperationSupport(order = 19)
+    @ApiOperation("根据id集合获取用户集合")
+    @PostMapping("/biz/userCenter/getUserListByIdList")
+    public CommonResult<List<SysUser>> getUserListByIdList(@RequestBody @Valid SysUserIdListParam sysUserIdListParam) {
+        return CommonResult.data(sysUserService.getUserListByIdList(sysUserIdListParam));
+    }
+
+    /**
+     * 根据id集合获取职位集合
+     *
+     * @author xuyuxiang
+     * @date 2022/4/24 20:00
+     */
+    @ApiOperationSupport(order = 20)
+    @ApiOperation("根据id集合获取职位集合")
+    @PostMapping("/biz/userCenter/getPositionListByIdList")
+    public CommonResult<List<SysPosition>> getPositionListByIdList(@RequestBody @Valid SysUserIdListParam sysUserIdListParam) {
+        return CommonResult.data(sysUserService.getPositionListByIdList(sysUserIdListParam));
+    }
+
+    /**
+     * 根据id集合获取角色集合
+     *
+     * @author xuyuxiang
+     * @date 2022/4/24 20:00
+     */
+    @ApiOperationSupport(order = 21)
+    @ApiOperation("根据id集合获取角色集合")
+    @PostMapping("/biz/userCenter/getRoleListByIdList")
+    public CommonResult<List<SysRole>> getRoleListByIdList(@RequestBody @Valid SysUserIdListParam sysUserIdListParam) {
+        return CommonResult.data(sysUserService.getRoleListByIdList(sysUserIdListParam));
+    }
+}

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

@@ -199,6 +199,8 @@ public class SysUser extends CommonEntity implements TransPojo {
     @Trans(type = TransType.SIMPLE, target = SysOrg.class, fields = "name", alias = "org", ref = "orgName")
     private String orgId;
 
+    private String orgIds;
+
     /** 职位id */
     @ApiModelProperty(value = "职位id", position = 33)
     @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)