huanglizhi 11 mesiacov pred
rodič
commit
b06fccc616
100 zmenil súbory, kde vykonal 2128 pridanie a 1268 odobranie
  1. 0 1
      .gitignore
  2. 2 0
      framework/src/main/java/com/hys/app/framework/auth/impl/JwtTokenCreater.java
  3. 39 11
      framework/src/main/java/com/hys/app/framework/context/user/AdminUserContext.java
  4. 2 0
      framework/src/main/java/com/hys/app/framework/security/impl/TokenManagerImpl.java
  5. 75 1
      framework/src/main/java/com/hys/app/framework/security/model/Admin.java
  6. 5 0
      module-erp/pom.xml
  7. 6 12
      module-erp/src/main/java/com/hys/app/controller/erp/use/AdminUserOperationManagerController.java
  8. 9 7
      module-erp/src/main/java/com/hys/app/controller/erp/use/CompanyController.java
  9. 11 4
      module-erp/src/main/java/com/hys/app/controller/erp/use/CompanyPackageController.java
  10. 48 3
      module-erp/src/main/java/com/hys/app/controller/erp/use/DeptController.java
  11. 0 1
      module-erp/src/main/java/com/hys/app/controller/erp/use/GoodsManagerController.java
  12. 117 70
      module-erp/src/main/java/com/hys/app/controller/erp/use/PayController.java
  13. 26 10
      module-erp/src/main/java/com/hys/app/controller/erp/use/RoleManagerController.java
  14. 106 6
      module-erp/src/main/java/com/hys/app/controller/erp/use/SmsMailController.java
  15. 1 1
      module-erp/src/main/java/com/hys/app/controller/erp/use/msg/AliSmsUtil.java
  16. 1 1
      module-erp/src/main/java/com/hys/app/controller/erp/use/msg/MailSmtpUtil.java
  17. 103 0
      module-erp/src/main/java/com/hys/app/controller/erp/use/msg/MsgUtilClient.java
  18. 36 0
      module-erp/src/main/java/com/hys/app/controller/erp/use/msg/entity/MessageReceiveTypeEnum.java
  19. 18 0
      module-erp/src/main/java/com/hys/app/controller/erp/use/msg/msgTemplate/MailMsgContant.java
  20. 17 0
      module-erp/src/main/java/com/hys/app/controller/erp/use/msg/msgTemplate/MailMsgDefault.java
  21. 17 0
      module-erp/src/main/java/com/hys/app/controller/erp/use/msg/msgTemplate/SMsMsgTemplate.java
  22. 17 0
      module-erp/src/main/java/com/hys/app/controller/erp/use/msg/msgTemplate/SystemMsgContent.java
  23. 17 0
      module-erp/src/main/java/com/hys/app/controller/erp/use/msg/msgTemplate/SystemMsgTemplate.java
  24. 24 2
      module-erp/src/main/java/com/hys/app/controller/system/AdminUserManagerController.java
  25. 3 3
      module-erp/src/main/java/com/hys/app/controller/system/MenuManagerController.java
  26. 5 8
      module-erp/src/main/java/com/hys/app/converter/erp/CompanyConverter.java
  27. 1 0
      module-erp/src/main/java/com/hys/app/framework/security/AdminAccessDecisionManager.java
  28. 16 0
      module-erp/src/main/java/com/hys/app/mapper/erp/CompanyBandMsgMapper.java
  29. 26 0
      module-erp/src/main/java/com/hys/app/mapper/erp/CompanyErpMapper.java
  30. 2 2
      module-erp/src/main/java/com/hys/app/mapper/erp/CompanyMapper.java
  31. 21 0
      module-erp/src/main/java/com/hys/app/mapper/erp/MessageReceiveMapper.java
  32. 1 1
      module-erp/src/main/java/com/hys/app/mapper/system/AdminUserMapper.java
  33. 13 0
      module-erp/src/main/java/com/hys/app/mapper/system/DeptMapper.java
  34. 1 1
      module-erp/src/main/java/com/hys/app/mapper/system/RoleMapper.java
  35. 11 18
      module-erp/src/main/java/com/hys/app/model/erp/dos/MessageReceiveDO.java
  36. 3 1
      module-erp/src/main/java/com/hys/app/model/erp/dos/SmsMailTemplate.java
  37. 25 0
      module-erp/src/main/java/com/hys/app/model/erp/dto/BandTemplateDTO.java
  38. 5 4
      module-erp/src/main/java/com/hys/app/model/erp/dto/PayTypeUrl.java
  39. 9 0
      module-erp/src/main/java/com/hys/app/model/erp/dto/SmsMailTemplateDTO.java
  40. 8 2
      module-erp/src/main/java/com/hys/app/model/erp/entity/Company.java
  41. 31 0
      module-erp/src/main/java/com/hys/app/model/erp/entity/CompanyBandMsg.java
  42. 0 50
      module-erp/src/main/java/com/hys/app/model/erp/entity/CompanyDO.java
  43. 127 0
      module-erp/src/main/java/com/hys/app/model/erp/entity/CompanyErp.java
  44. 11 0
      module-erp/src/main/java/com/hys/app/model/erp/entity/CompanyPackage.java
  45. 10 0
      module-erp/src/main/java/com/hys/app/model/erp/entity/CompanyPackageDO.java
  46. 24 0
      module-erp/src/main/java/com/hys/app/model/erp/entity/CompanyPackageQuery.java
  47. 1 13
      module-erp/src/main/java/com/hys/app/model/erp/entity/CompanyRenewDO.java
  48. 10 12
      module-erp/src/main/java/com/hys/app/model/erp/entity/CompanyUpdateDO.java
  49. 18 15
      module-erp/src/main/java/com/hys/app/model/erp/entity/CompanyVO.java
  50. 1 1
      module-erp/src/main/java/com/hys/app/model/erp/enums/MsgTypeEnum.java
  51. 9 0
      module-erp/src/main/java/com/hys/app/model/erp/vo/SmsMailTemplateVO.java
  52. 15 1
      module-erp/src/main/java/com/hys/app/model/system/dos/AdminUser.java
  53. 8 1
      module-erp/src/main/java/com/hys/app/model/system/dos/DeptDO.java
  54. 20 0
      module-erp/src/main/java/com/hys/app/model/system/dos/RoleDO.java
  55. 2 0
      module-erp/src/main/java/com/hys/app/model/system/dto/DeptQueryParams.java
  56. 5 1
      module-erp/src/main/java/com/hys/app/model/system/vo/AdminLoginVO.java
  57. 6 0
      module-erp/src/main/java/com/hys/app/model/system/vo/AdminUserVO.java
  58. 4 0
      module-erp/src/main/java/com/hys/app/model/system/vo/DeptBaseVO.java
  59. 7 39
      module-erp/src/main/java/com/hys/app/model/system/vo/Menus.java
  60. 1 0
      module-erp/src/main/java/com/hys/app/pay/ali/AliPayService.java
  61. 2 0
      module-erp/src/main/java/com/hys/app/pay/ali/PayOrder.java
  62. 24 0
      module-erp/src/main/java/com/hys/app/service/erp/CompanyBandMsgManager.java
  63. 62 0
      module-erp/src/main/java/com/hys/app/service/erp/CompanyErpManager.java
  64. 1 1
      module-erp/src/main/java/com/hys/app/service/erp/CompanyManager.java
  65. 2 0
      module-erp/src/main/java/com/hys/app/service/erp/CompanyPackageManager.java
  66. 34 0
      module-erp/src/main/java/com/hys/app/service/erp/MessageReceiveManager.java
  67. 11 0
      module-erp/src/main/java/com/hys/app/service/erp/SmsMailManager.java
  68. 73 0
      module-erp/src/main/java/com/hys/app/service/erp/impl/CompanyBandMsgManagerImpl.java
  69. 219 0
      module-erp/src/main/java/com/hys/app/service/erp/impl/CompanyErpManagerImpl.java
  70. 172 118
      module-erp/src/main/java/com/hys/app/service/erp/impl/CompanyManagerImpl.java
  71. 10 0
      module-erp/src/main/java/com/hys/app/service/erp/impl/CompanyPackageManagerImpl.java
  72. 0 2
      module-erp/src/main/java/com/hys/app/service/erp/impl/GoodsManagerImpl.java
  73. 2 2
      module-erp/src/main/java/com/hys/app/service/erp/impl/MailSmsCountManagerImpl.java
  74. 34 0
      module-erp/src/main/java/com/hys/app/service/erp/impl/MessageReceiveManagerImpl.java
  75. 57 3
      module-erp/src/main/java/com/hys/app/service/erp/impl/SmsMailManagerImpl.java
  76. 1 1
      module-erp/src/main/java/com/hys/app/service/system/AdminUserManager.java
  77. 8 0
      module-erp/src/main/java/com/hys/app/service/system/DeptManager.java
  78. 1 1
      module-erp/src/main/java/com/hys/app/service/system/MenuManager.java
  79. 1 1
      module-erp/src/main/java/com/hys/app/service/system/RoleManager.java
  80. 82 58
      module-erp/src/main/java/com/hys/app/service/system/impl/AdminUserManagerImpl.java
  81. 17 5
      module-erp/src/main/java/com/hys/app/service/system/impl/DeptManagerImpl.java
  82. 40 26
      module-erp/src/main/java/com/hys/app/service/system/impl/MenuManagerImpl.java
  83. 17 9
      module-erp/src/main/java/com/hys/app/service/system/impl/RoleManagerImpl.java
  84. 71 0
      module-erp/src/main/java/com/hys/app/util/PinYingUtil.java
  85. 20 0
      module-erp/src/main/resources/mapper/CompanyErpMapper.xml
  86. 1 1
      module-erp/src/main/resources/mapper/ProductStockMapper.xml
  87. 9 6
      module-erp/src/main/resources/mapper/system/AdminUserMapper.xml
  88. 0 22
      module-openapi/pom.xml
  89. 0 52
      module-openapi/src/main/java/com/hys/app/controller/admin/datasync/MessagePushController.java
  90. 0 47
      module-openapi/src/main/java/com/hys/app/controller/admin/datasync/MessageReceiveController.java
  91. 0 75
      module-openapi/src/main/java/com/hys/app/controller/admin/oauth2/OAuth2ClientController.java
  92. 0 48
      module-openapi/src/main/java/com/hys/app/controller/admin/oauth2/OAuth2TokenController.java
  93. 0 51
      module-openapi/src/main/java/com/hys/app/controller/open/MessageReceiveOpenController.java
  94. 0 199
      module-openapi/src/main/java/com/hys/app/controller/open/OAuth2OpenController.java
  95. 0 34
      module-openapi/src/main/java/com/hys/app/controller/open/TestController.java
  96. 0 26
      module-openapi/src/main/java/com/hys/app/converter/datasync/MessagePushConverter.java
  97. 0 28
      module-openapi/src/main/java/com/hys/app/converter/datasync/MessageReceiveConverter.java
  98. 0 58
      module-openapi/src/main/java/com/hys/app/converter/oauth2/OAuth2OpenConvert.java
  99. 0 53
      module-openapi/src/main/java/com/hys/app/mapper/datasync/MessagePushMapper.java
  100. 0 38
      module-openapi/src/main/java/com/hys/app/mapper/datasync/MessageReceiveMapper.java

+ 0 - 1
.gitignore

@@ -26,4 +26,3 @@ selenium-debug.log
 
 server/target
 module-erp/target
-module-openapi/target

+ 2 - 0
framework/src/main/java/com/hys/app/framework/auth/impl/JwtTokenCreater.java

@@ -1,11 +1,13 @@
 package com.hys.app.framework.auth.impl;
 
 import com.hys.app.framework.auth.AuthUser;
+import com.hys.app.framework.auth.BeanUtil;
 import com.hys.app.framework.auth.Token;
 import com.hys.app.framework.auth.TokenCreater;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import io.jsonwebtoken.Jwts;
 import io.jsonwebtoken.SignatureAlgorithm;
+import org.apache.commons.beanutils.BeanMap;
 
 import java.util.Calendar;
 import java.util.Date;

+ 39 - 11
framework/src/main/java/com/hys/app/framework/context/user/AdminUserContext.java

@@ -74,6 +74,9 @@ public class AdminUserContext {
         if (admin == null) {
             return null;
         }
+        if (ObjectUtil.isNull(admin.getCompanyId())) {
+            return null;
+        }
         return admin.getCompanyId();
     }
 
@@ -87,23 +90,36 @@ public class AdminUserContext {
         if (admin == null) {
             throw new ServiceException("未查询到人员信息");
         }
-        if (ObjectUtil.isNull(admin.getCompanyId())) {
+        if (ObjectUtil.isNotNull(admin.getCompanyId()) || admin.getFounder() == 1) {
             throw new ServiceException("平台工作人员不允许操作公司内部业务");
         }
         return admin.getCompanyId();
     }
 
     /**
-     * 获取当前管理员账号
+     * 获取当前管理员
      *
      * @return
      */
-    public static void compareCompany(Long companyId) {
-        if (ObjectUtil.isNull(getCompanyId())) {
-            throw new ServiceException("平台工作人员不允许操作公司内部业务");
+    public static Boolean hasFound() {
+        Admin admin = getAdmin();
+        if (admin != null && admin.getFounder() == 1) {
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * 获取当前管理员
+     *
+     * @return
+     */
+    public static void hasAdmin() {
+        if (AdminUserContext.hasFound()) {
+            throw new ServiceException("平台工作人员,不允许进行此操作");
         }
-        if (!getCompanyId().equals(companyId)) {
-            throw new ServiceException("你无权操作此数据");
+        if (!"admin".equals(AdminUserContext.getAdminUserName())) {
+            throw new ServiceException("只有管理员才能进行此操作");
         }
     }
 
@@ -112,11 +128,23 @@ public class AdminUserContext {
      *
      * @return
      */
-    public static Boolean hasFound() {
+    public static void hasAdminAndSuper() {
+        if (!AdminUserContext.hasFound() && !"admin".equals(AdminUserContext.getAdminUserName())) {
+            throw new ServiceException("只有管理员才能进行此操作");
+        }
+    }
+
+
+    /**
+     * 是否是平台管理员登录    todo 后面做到平台管理员选择公司的时候  在那时候放入公司id
+     *
+     * @return
+     */
+    public static void hasSuperAdminQuery(Long companyId) {
         Admin admin = getAdmin();
-        if (admin != null && admin.getFounder() == 1) {
-            return true;
+        if (admin.getFounder() == 1 && ObjectUtil.isNull(companyId)) {
+            throw new ServiceException("平台管理员查看业务数据请先选择公司");
         }
-        return false;
+        admin.setCompanyId(companyId);
     }
 }

+ 2 - 0
framework/src/main/java/com/hys/app/framework/security/impl/TokenManagerImpl.java

@@ -7,6 +7,8 @@ import com.hys.app.framework.auth.TokenParseException;
 import com.hys.app.framework.auth.impl.JwtTokenCreater;
 import com.hys.app.framework.auth.impl.JwtTokenParser;
 import com.hys.app.framework.security.TokenManager;
+import com.hys.app.framework.security.model.Admin;
+import org.apache.poi.ss.formula.functions.T;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 

+ 75 - 1
framework/src/main/java/com/hys/app/framework/security/model/Admin.java

@@ -2,8 +2,10 @@ package com.hys.app.framework.security.model;
 
 import cn.hutool.core.map.MapUtil;
 import com.fasterxml.jackson.annotation.JsonIgnore;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import javax.validation.constraints.NotNull;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -16,13 +18,38 @@ import java.util.Map;
  * @date 18/6/27 上午10:09
  * @since v7.0
  */
-@Data
 public class Admin extends User {
 
+    @ApiModelProperty(name = "dept_id", value = "是否是部门主管", required = false)
+    @NotNull(message = "是否是部门主管不能为空")
+    private Boolean hasDeptManager;
+
     /**
      * 公司id
      */
     private Long companyId;
+
+    /**
+     * 公司id
+     */
+    private Long deptId;
+
+    public Long getDeptId() {
+        return deptId;
+    }
+
+    public void setDeptId(Long deptId) {
+        this.deptId = deptId;
+    }
+
+    public Boolean getHasDeptManager() {
+        return hasDeptManager;
+    }
+
+    public void setHasDeptManager(Boolean hasDeptManager) {
+        this.hasDeptManager = hasDeptManager;
+    }
+
     /**
      * 是否是超级管理员
      */
@@ -61,4 +88,51 @@ public class Admin extends User {
         return MapUtil.get(context, key, type);
     }
 
+    public Admin() {
+    }
+
+
+    public Integer getFounder() {
+        return founder;
+    }
+
+    public void setFounder(Integer founder) {
+        this.founder = founder;
+    }
+
+    public String getPlatformShopName() {
+        return platformShopName;
+    }
+
+    public void setPlatformShopName(String platformShopName) {
+        this.platformShopName = platformShopName;
+    }
+
+    public Long getPlatformShopId() {
+        return platformShopId;
+    }
+
+    public void setPlatformShopId(Long platformShopId) {
+        this.platformShopId = platformShopId;
+    }
+
+    @Override
+    public String toString() {
+        return "Admin{" +
+                "founder=" + founder +
+                "companyId=" + companyId +
+                ", roles=" + roles +
+                ", platformShopName='" + platformShopName + '\'' +
+                ", platformShopId=" + platformShopId +
+                '}' + super.toString();
+
+    }
+
+    public Long getCompanyId() {
+        return companyId;
+    }
+
+    public void setCompanyId(Long companyId) {
+        this.companyId = companyId;
+    }
 }

+ 5 - 0
module-erp/pom.xml

@@ -84,6 +84,11 @@
             <artifactId>dysmsapi20170525</artifactId>
             <version>2.0.24</version>
         </dependency>
+        <dependency>
+            <groupId>com.github.binarywang</groupId>
+            <artifactId>weixin-java-mp</artifactId>
+            <version>4.3.0</version>
+        </dependency>
     </dependencies>
 
 

+ 6 - 12
module-erp/src/main/java/com/hys/app/controller/erp/use/AdminUserOperationManagerController.java

@@ -38,9 +38,6 @@ public class AdminUserOperationManagerController {
     @Autowired
     private AdminUserManager adminUserManager;
 
-    @Autowired
-    private DeptManager deptManager;
-
 
     @ApiOperation(value = "查询平台管理员列表", response = AdminUser.class)
     @GetMapping
@@ -53,9 +50,7 @@ public class AdminUserOperationManagerController {
     @PostMapping
     @Log(client = LogClient.admin, detail = "添加用户编号为[${adminUserVO.sn}]的管理员")
     public AdminUser add(@Valid AdminUserVO adminUserVO) {
-        if (AdminUserContext.hasFound()) {
-            throw new ServiceException("平台工作人员不允许创建账号");
-        }
+        AdminUserContext.hasAdmin();
         return this.adminUserManager.add(adminUserVO);
     }
 
@@ -63,26 +58,26 @@ public class AdminUserOperationManagerController {
     @ApiOperation(value = "修改平台管理员", response = AdminUser.class)
     @Log(client = LogClient.admin, detail = "修改ID为[${id}]的管理员信息")
     public AdminUser edit(@Valid AdminUserVO adminUserVO, @PathVariable Long id) {
+        AdminUserContext.hasAdmin();
         return this.adminUserManager.edit(adminUserVO, id);
     }
 
-
     @DeleteMapping(value = "/{id}")
     @ApiOperation(value = "删除平台管理员")
     @Log(client = LogClient.admin, detail = "删除ID为[${id}]的管理员信息")
-    public String delete(@PathVariable Long id) {
-        this.adminUserManager.delete(id);
-        return "";
+    public void delete(@PathVariable Long id) {
+        AdminUserContext.hasAdmin();
+        adminUserManager.delete(id);
     }
 
     @PutMapping(value = "/{id}/recover")
     @ApiOperation(value = "恢复平台管理员")
     @Log(client = LogClient.admin, detail = "恢复ID为[${id}]的管理员信息")
     public void recover(@PathVariable Long id) {
+        AdminUserContext.hasAdmin();
         this.adminUserManager.recover(id);
     }
 
-
     @GetMapping(value = "/{id}")
     @ApiOperation(value = "查询一个平台管理员")
     public AdminUser get(@PathVariable Long id) {
@@ -90,7 +85,6 @@ public class AdminUserOperationManagerController {
         return adminUser;
     }
 
-
     @GetMapping(value = "/getUserByDept")
     @ApiOperation(value = "查看自己部门下的所有人员")
     public List<AdminUser> getUserByDept() {

+ 9 - 7
module-erp/src/main/java/com/hys/app/controller/erp/use/CompanyController.java

@@ -1,10 +1,11 @@
 package com.hys.app.controller.erp.use;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.hys.app.framework.context.user.AdminUserContext;
 import com.hys.app.model.erp.entity.*;
 import com.hys.app.model.support.LogClient;
 import com.hys.app.model.support.validator.annotation.Log;
-import com.hys.app.service.erp.CompanyManager;
+import com.hys.app.service.erp.CompanyErpManager;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
@@ -19,11 +20,11 @@ import java.math.BigDecimal;
 @AllArgsConstructor
 public class CompanyController {
 
-    private CompanyManager companyManager;
+    private CompanyErpManager companyManager;
     @PostMapping("createCompany")
     @ApiOperation(value = "创建公司")
     @Log(client = LogClient.admin, detail = "创建名称为[${companyDO.name}]的公司信息")
-    public Long createCompany(@Valid @RequestBody CompanyDO companyDO) {
+    public String createCompany(@Valid @RequestBody CompanyDO companyDO) {
         return companyManager.createCompany(companyDO);
     }
 
@@ -34,17 +35,18 @@ public class CompanyController {
         return companyManager.updateCompany(companyUpdateDO, id);
     }
     @PostMapping("renewCompany/difference/{id}")
-    @ApiOperation(value = "公司续费未到期更换套餐")
+    @ApiOperation(value = "公司续费未到期更换套餐获取差价")
     @Log(client = LogClient.admin, detail = "名称为[${companyDO.name}]的公司进行了续费")
     public BigDecimal renewCompanyDifference(@PathVariable Long id) {
         return companyManager.renewCompanyDifference(id);
     }
 
-    @PostMapping("renewCompany/{id}")
+    @PostMapping("renewCompany/{id}/{packageId}")
     @ApiOperation(value = "公司续费")
     @Log(client = LogClient.admin, detail = "名称为[${companyDO.name}]的公司进行了续费")
-    public Long renewCompany(@Valid @RequestBody CompanyRenewDO companyUpdateDO, @PathVariable Long id) {
-        return companyManager.renewCompany(companyUpdateDO, id);
+    public Long renewCompany( @PathVariable Long id, @PathVariable Long packageId) {
+        AdminUserContext.hasCompany();
+        return companyManager.renewCompany(id,packageId);
     }
 
     @GetMapping("getOne/{id}")

+ 11 - 4
module-erp/src/main/java/com/hys/app/controller/erp/use/CompanyPackageController.java

@@ -33,6 +33,13 @@ public class CompanyPackageController {
         return companyPackageManager.createCompanyPackage(packageDo);
     }
 
+    @PostMapping("updateCompanyPackage/{id}")
+    @ApiOperation(value = "修改套餐")
+    @Log(client = LogClient.admin, detail = "创建名称为[${companyDO.name}]的公司信息")
+    public Long updateCompanyPackage(@Valid @RequestBody CompanyPackageDO packageDo, @PathVariable Long id) {
+        return companyPackageManager.updateCompanyPackage(packageDo,id);
+    }
+
     @PostMapping("disAbleUse/{id}")
     @ApiOperation(value = "套餐启用禁用")
     @Log(client = LogClient.admin, detail = "修改id为[${id}]套餐的状态")
@@ -48,11 +55,11 @@ public class CompanyPackageController {
         return CompanyPackageConverter.INSTANCE.convert(companyPackageManager.getById(id));
     }
 
-    @GetMapping()
+    @PostMapping()
     @ApiOperation(value = "获取套餐列表")
-    public IPage<CompanyPackageVO> getPackageList(CompanyPackageDO packageDO, BaseQueryParam queryParam) {
-        return CompanyPackageConverter.INSTANCE.convert(companyPackageManager.page(new Page<>(queryParam.getPageNo(), queryParam.getPageSize()),
+    public IPage<CompanyPackageVO> getPackageList(@RequestBody CompanyPackageQuery packageDO) {
+        return CompanyPackageConverter.INSTANCE.convert(companyPackageManager.page(new Page<>(packageDO.getPageNo(), packageDO.getPageSize()),
                 new LambdaQueryWrapper<CompanyPackage>().eq(ObjectUtil.isNotNull(packageDO.getUseAble()), CompanyPackage::getUseAble, packageDO.getUseAble())
-                        .like(StrUtil.isNotBlank(packageDO.getName()), CompanyPackage::getName, packageDO.getName())));
+                        .like(StrUtil.isNotBlank(packageDO.getName()), CompanyPackage::getName, packageDO.getName()).orderByDesc(CompanyPackage::getUseAble,CompanyPackage::getCreateTime)));
     }
 }

+ 48 - 3
module-erp/src/main/java/com/hys/app/controller/system/DeptController.java → module-erp/src/main/java/com/hys/app/controller/erp/use/DeptController.java

@@ -1,11 +1,18 @@
-package com.hys.app.controller.system;
+package com.hys.app.controller.erp.use;
 
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.hys.app.converter.system.DeptConverter;
 import com.hys.app.framework.context.user.AdminUserContext;
+import com.hys.app.framework.exception.ServiceException;
+import com.hys.app.framework.util.JsonUtil;
+import com.hys.app.mapper.system.AdminUserMapper;
 import com.hys.app.model.base.context.Region;
 import com.hys.app.model.base.context.RegionFormat;
 import com.hys.app.model.support.LogClient;
 import com.hys.app.model.support.validator.annotation.Log;
+import com.hys.app.model.system.dos.AdminUser;
 import com.hys.app.model.system.dos.DeptDO;
 import com.hys.app.model.system.dto.DataPermissionDTO;
 import com.hys.app.model.system.dto.DeptCreateDTO;
@@ -13,6 +20,8 @@ import com.hys.app.model.system.dto.DeptQueryParams;
 import com.hys.app.model.system.dto.DeptUpdateDTO;
 import com.hys.app.model.system.vo.DeptRespVO;
 import com.hys.app.model.system.vo.DeptSimpleRespVO;
+import com.hys.app.model.system.vo.Menus;
+import com.hys.app.service.system.AdminUserManager;
 import com.hys.app.service.system.DeptManager;
 import com.hys.app.service.system.RoleManager;
 import io.swagger.annotations.Api;
@@ -21,9 +30,11 @@ import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
+import springfox.documentation.annotations.ApiIgnore;
 
 import javax.annotation.Resource;
 import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
 import java.util.Comparator;
 import java.util.List;
 
@@ -42,11 +53,15 @@ public class DeptController {
     @Autowired
     private DeptConverter converter;
 
+    @Autowired
+    private AdminUserMapper adminUserMapper;
+
     @PostMapping("create")
     @ApiOperation(value = "创建部门")
     @ApiImplicitParam(name = "region", value = "地区", required = true, example = "1024")
     @Log(client = LogClient.admin, detail = "创建名称为[${reqVO.name}]的部门信息")
     public void createDept(@Valid @RequestBody DeptCreateDTO reqVO, @RequestParam("region") @RegionFormat Region region) {
+        AdminUserContext.hasAdmin();
         deptManager.createDept(reqVO, region);
     }
 
@@ -55,6 +70,7 @@ public class DeptController {
     @ApiImplicitParam(name = "region", value = "地区", required = true, example = "1024")
     @Log(client = LogClient.admin, detail = "修改名称为[${reqVO.name}]的部门信息")
     public void updateDept(@Valid @RequestBody DeptUpdateDTO reqVO, @RequestParam("region") @RegionFormat Region region) {
+        AdminUserContext.hasAdmin();
         deptManager.updateDept(reqVO, region);
     }
 
@@ -63,6 +79,7 @@ public class DeptController {
     @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024")
     @Log(client = LogClient.admin, detail = "删除ID为[${id}]的部门信息")
     public void deleteDept(@RequestParam("id") Long id) {
+        AdminUserContext.hasAdmin();
         deptManager.deleteDept(id);
     }
 
@@ -78,9 +95,9 @@ public class DeptController {
     @ApiOperation(value = "获取部门精简信息列表")
     public List<DeptSimpleRespVO> getSimpleDeptList(DeptQueryParams reqVO) {
         // 只查询当前用户有权限的部门
-        if(Boolean.TRUE.equals(reqVO.getOnlyPermission())){
+        if (Boolean.TRUE.equals(reqVO.getOnlyPermission())) {
             DataPermissionDTO dataPermissionDTO = roleManager.getDataPermission(AdminUserContext.getAdminUserId());
-            if(!dataPermissionDTO.getAll()){
+            if (!dataPermissionDTO.getAll()) {
                 reqVO.setDeptIds(dataPermissionDTO.getDeptIds());
             }
         }
@@ -98,4 +115,32 @@ public class DeptController {
         return converter.convert(deptManager.getDept(id));
     }
 
+//    @GetMapping("/getMenusByDept/{deptId}")
+//    @ApiOperation(value = "获取这个部门所有的菜单")
+//    public List<Menus> getMenusByDept(@PathVariable Long deptId) {
+//        AdminUserContext.hasCompany();
+//        if ("admin".equals(AdminUserContext.getAdminUserName()) && deptId == 0) {
+//            AdminUser user = adminUserMapper.selectById(AdminUserContext.getAdminUserId());
+//            return JsonUtil.jsonToList(user.getAuthIds(), Menus.class);
+//        }
+//        DeptDO dept = deptManager.getDept(deptId);
+//        if (ObjectUtil.isNull(dept) || StrUtil.isBlank(dept.getAuthIds())) {
+//            throw new ServiceException("未获取到相关信息");
+//        }
+//        return JsonUtil.jsonToList(dept.getAuthIds(), Menus.class);
+//    }
+
+//    @GetMapping("/getAllSubDept")
+//    @ApiOperation(value = "获取所有的子部门")
+//    public List<DeptDO> getAllSubDept(@PathVariable String type) {
+//        if ("admin".equals(AdminUserContext.getAdminUserName())) {
+//            List<DeptDO> list = deptManager.list(new LambdaQueryWrapper<DeptDO>().eq(DeptDO::getCompanyId, AdminUserContext.getCompanyId()));
+//                DeptDO deptDO = new DeptDO();
+//                deptDO.setName("公司管理员");
+//                deptDO.setId(0L);
+//                list.add(deptDO);
+//            return list;
+//        }
+//        return deptManager.getAllSubDept(AdminUserContext.getDeptId());
+//    }
 }

+ 0 - 1
module-erp/src/main/java/com/hys/app/controller/erp/use/GoodsManagerController.java

@@ -64,7 +64,6 @@ public class GoodsManagerController {
     public void status(@RequestBody @Valid GoodsUpdateDTO request) {
         AdminUserContext.hasCompany();
         GoodsDO goodsDO = ValidateUtil.getOne(goodsMapper, GoodsDO::getId, request.getId(), "商品");
-        AdminUserContext.compareCompany(goodsDO.getCompanyId());
         goodsDO.setMarketEnable(!request.getMarketEnable());
         goodsManager.updateById(goodsDO);
     }

+ 117 - 70
module-erp/src/main/java/com/hys/app/controller/erp/use/PayController.java

@@ -2,8 +2,6 @@ package com.hys.app.controller.erp.use;
 
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.json.JSONObject;
-import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult;
@@ -15,20 +13,28 @@ import com.hys.app.framework.util.JsonUtil;
 import com.hys.app.framework.util.ScriptUtil;
 import com.hys.app.framework.util.StringUtil;
 import com.hys.app.mapper.system.AdminUserMapper;
+import com.hys.app.mapper.system.RoleMapper;
 import com.hys.app.model.erp.dos.OrderCustomerFee;
 import com.hys.app.model.erp.dos.OrderDO;
 import com.hys.app.model.erp.dto.PayTypeUrl;
-import com.hys.app.model.erp.entity.Company;
+import com.hys.app.model.erp.entity.CompanyErp;
 import com.hys.app.model.system.dos.AdminUser;
+import com.hys.app.model.system.dos.RoleDO;
+import com.hys.app.model.system.vo.Menus;
 import com.hys.app.pay.ali.AliPayService;
 import com.hys.app.pay.ali.PayOrder;
 import com.hys.app.pay.wx.WxPayServiceMy;
-import com.hys.app.service.erp.CompanyManager;
+import com.hys.app.service.erp.CompanyErpManager;
 import com.hys.app.service.erp.OrderCustomerFeeManager;
 import com.hys.app.service.erp.OrderManager;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
+import me.chanjar.weixin.common.error.WxErrorException;
+import me.chanjar.weixin.mp.api.WxMpService;
+import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
+import me.chanjar.weixin.mp.bean.template.WxMpTemplateIndustry;
+import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.transaction.annotation.Transactional;
@@ -42,10 +48,10 @@ import javax.servlet.http.HttpSession;
 import java.io.UnsupportedEncodingException;
 import java.math.BigDecimal;
 import java.net.URLDecoder;
-import java.net.URLEncoder;
 import java.net.UnknownHostException;
 import java.time.LocalDateTime;
 import java.util.*;
+import java.util.stream.Collectors;
 
 @RestController
 @RequestMapping("/admin/erp/pay")
@@ -57,8 +63,9 @@ public class PayController extends HttpServlet {
     private AliPayService aliPayService;
     private WxPayServiceMy wxPayServiceMy;
     private OrderCustomerFeeManager orderCustomerFeeManager;
-    private CompanyManager companyManager;
+    private CompanyErpManager companyManager;
     private AdminUserMapper adminUserMapper;
+    private RoleMapper roleMapper;
 
     private static final Logger log = LoggerFactory.getLogger(ScriptUtil.class);
 
@@ -66,36 +73,29 @@ public class PayController extends HttpServlet {
     @ApiOperation(value = "扫描完获取拉起支付的url")
     @PostMapping("/getPayUrl")
     public Object getListByScan(@RequestBody @Validated PayTypeUrl payTypeUrl) throws UnknownHostException, WxPayException {
-        System.out.println("授权完成后带过来的openid-------------------------------------------------------------" + payTypeUrl.getOpenid() + "------------------------------------" + payTypeUrl.getOrderId());
-        OrderDO aDo = orderManager.getById(payTypeUrl.getOrderId());
-        if (ObjectUtil.isNull(aDo)) {
-            throw new ServiceException("未查询到订单信息");
+        CompanyErp company = companyManager.getById(payTypeUrl.getId());
+        if (ObjectUtil.isNull(company)) {
+            throw new ServiceException("未查询到公司信息");
         }
         PayOrder payOrder = new PayOrder();
-        payOrder.setTraceNo(aDo.getId().toString());
-        payOrder.setOpenId(payTypeUrl.getOpenid());
-
-        payOrder.setSubject("订单支付金额");
+        payOrder.setTraceNo(company.getId().toString());
+        payOrder.setSubject("购买公司使用权账号");
         payOrder.setTimeExpire(LocalDateTime.now().plusMinutes(30));
-        List<OrderCustomerFee> list = orderCustomerFeeManager.list(new LambdaQueryWrapper<OrderCustomerFee>().eq(OrderCustomerFee::getOrderId, payTypeUrl.getOrderId()));
-        if (CollectionUtil.isNotEmpty(list)) {
-            payOrder.setTotalAmount(new BigDecimal(aDo.getRealPrice()).add(list.stream().map(OrderCustomerFee::getMoney).reduce(BigDecimal.ZERO, BigDecimal::add)).multiply(new BigDecimal(1 + aDo.getTaxRate() * 0.01)).doubleValue());
-        } else {
-            payOrder.setTotalAmount(aDo.getRealPrice() * (1 + aDo.getTaxRate() * 0.01));
-        }
-
+        payOrder.setTotalAmount(company.getThisMoney().doubleValue());
+        payOrder.setOrderPayType("company");
         switch (payTypeUrl.getPayType()) {
             case "ali":
                 return aliPayService.pay(payOrder);
             case "wx":
-                return wxPayServiceMy.pay(payOrder);
+                return "暂未开通";
             default:
                 return "不支持的支付方式";
         }
     }
 
     @PostMapping("/aliReturnCall")
-    public String aliReturnCall(HttpServletRequest request) {
+    @Transactional(rollbackFor = Exception.class)
+    public String aliReturnCall(HttpServletRequest request) throws Exception {
         Map<String, String> params = new HashMap<>();
         Map<String, String[]> requestParams = request.getParameterMap();
         for (String name : requestParams.keySet()) {
@@ -104,9 +104,44 @@ public class PayController extends HttpServlet {
             params.put(name, valueStr);
         }
         if (aliPayService.checkReturnParam(params)) {
-            OrderDO aDo = orderManager.getById(params.get("out_trade_no"));
-            aDo.setHasPayReturn(true);
-            orderManager.updateById(aDo);
+            String passbackParams = URLDecoder.decode(params.get("passback_params"), "UTF-8");
+            if ("company".equals(passbackParams)) {
+                CompanyErp company = companyManager.getById(params.get("out_trade_no"));
+                //如果结束时间大于当前时间,那么就从现在加起
+                Date currentDate = company.getEndUseTime();
+                if (new Date().compareTo(company.getEndUseTime()) > 0) {
+                    currentDate = new Date();
+
+                }
+                // 使用 加上套餐包的天数
+                Calendar calendar = Calendar.getInstance();
+                calendar.setTime(currentDate);
+                calendar.add(Calendar.DAY_OF_MONTH, company.getThisDay());
+
+                company.setEndUseTime(calendar.getTime());
+                company.setMoney(company.getMoney().add(company.getThisMoney()));
+                company.setRoleId(company.getThisRoleId());
+                company.setUserNum(company.getThisUserNum());
+                company.setCompanyPackageId(company.getThisCompanyPackageId());
+
+                company.setThisDay(0);
+                company.setThisCompanyPackageId(0L);
+                company.setThisMoney(new BigDecimal(0));
+                company.setThisRoleId(0L);
+                company.setThisUserNum(0);
+
+                companyManager.updateById(company);
+//                //  不管换没换套餐  把新的套餐权限赋值到公司的admin账号上
+                AdminUser user = adminUserMapper.selectOne(new LambdaQueryWrapper<AdminUser>()
+                        .eq(AdminUser::getCompanyId, company.getId())
+                        .eq(AdminUser::getUsername, "admin").last("limit 1"));
+                //把这个管理员能看到的所有页面保存起来
+                RoleDO roleDO = roleMapper.selectById(company.getThisRoleId());
+                List<Menus> menus = JsonUtil.jsonToList(roleDO.getAuthIds(), Menus.class);
+                List<Menus> collect = menus.stream().filter(Menus::isChecked).collect(Collectors.toList());
+                user.setAuthIds(JSON.toJSONString(collect));
+                adminUserMapper.updateById(user);
+            }
         }
         return "success";
     }
@@ -143,7 +178,7 @@ public class PayController extends HttpServlet {
 
     @GetMapping("/weixin/callback/openidCode")
     public void handleWeixinCallback(@RequestParam("code") String code, @RequestParam("state") String state, HttpSession session, HttpServletResponse response) throws Exception {
-        System.out.println("授权回调来了啊    code=" + code + "111111111111111111111111111111111111111111111state=" + state);
+        System.out.println("授权回调来了啊    code=" + code + "-111111111111111111111111111111111111111111111state=" + state);
         String[] split = state.split("--");
         String orderId = split[0];
         String ip = split[1];
@@ -169,48 +204,60 @@ public class PayController extends HttpServlet {
         response.sendRedirect(url);
     }
 
-    @PostMapping("/aliReturnCall/createCompany")
-    @Transactional(rollbackFor = Exception.class)
-    public String aliReturnCallCreateCompany(HttpServletRequest request) throws Exception {
-        Map<String, String> params = new HashMap<>();
-        Map<String, String[]> requestParams = request.getParameterMap();
-        for (String name : requestParams.keySet()) {
-            String[] values = requestParams.get(name);
-            String valueStr = String.join(",", values);
-            params.put(name, valueStr);
-        }
-        if (aliPayService.checkReturnParam(params)) {
-            String passbackParams = URLDecoder.decode(params.get("passback_params"), "UTF-8");
-            if ("company".equals(passbackParams)){
-                Company company = companyManager.getById(params.get("out_trade_no"));
-                company.setEndUseTime(company.getEndUseTime().plusDays(company.getThisDay()));
-                company.setThisDay(null);
-                company.setThisMoney(null);
-                companyManager.updateById(company);
-                //给公司创建初始账号
-                String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
-                StringBuilder sb = new StringBuilder();
-                Random random = new Random();
-                for (int i = 0; i < 6; i++) {
-                    int index = random.nextInt(characters.length());
-                    sb.append(characters.charAt(index));
-                }
-                String password = sb.toString();
-
-                //管理员信息入库
-                AdminUser adminUser = new AdminUser();
-                adminUser.setCompanyId(company.getId());
-                adminUser.setUsername("admin");
-                adminUser.setRoleId(company.getRoleId());
-                adminUser.setFounder(0);
-                adminUser.setNickname(company.getName()+"管理员");
-                adminUser.setPassword(StringUtil.md5(password + adminUser.getUsername().toLowerCase()));
-                adminUser.setDateLine(DateUtil.getDateline());
-                adminUser.setUserState(0);
-                adminUserMapper.insert(adminUser);
-                //todo  用短信和邮件把账号密码发给用户
-            }
-        }
-        return "success";
+//    @PostMapping("/aliReturnCall/createCompany")
+//    @Transactional(rollbackFor = Exception.class)
+//    public String aliReturnCallCreateCompany(HttpServletRequest request) throws Exception {
+//        Map<String, String> params = new HashMap<>();
+//        Map<String, String[]> requestParams = request.getParameterMap();
+//        for (String name : requestParams.keySet()) {
+//            String[] values = requestParams.get(name);
+//            String valueStr = String.join(",", values);
+//            params.put(name, valueStr);
+//        }
+//        if (aliPayService.checkReturnParam(params)) {
+//            String passbackParams = URLDecoder.decode(params.get("passback_params"), "UTF-8");
+//            if ("company".equals(passbackParams)){
+//                CompanyErp company = companyManager.getById(params.get("out_trade_no"));
+//                company.setEndUseTime(company.getEndUseTime().plusDays(company.getThisDay()));
+//                company.setThisDay(null);
+//                company.setThisMoney(null);
+//                companyManager.updateById(company);
+//                //给公司创建初始账号
+//                String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
+//                StringBuilder sb = new StringBuilder();
+//                Random random = new Random();
+//                for (int i = 0; i < 6; i++) {
+//                    int index = random.nextInt(characters.length());
+//                    sb.append(characters.charAt(index));
+//                }
+//                String password = sb.toString();
+//
+//                //管理员信息入库
+//                AdminUser adminUser = new AdminUser();
+//                adminUser.setCompanyId(company.getId());
+//                adminUser.setUsername("admin");
+//                adminUser.setRoleId(company.getRoleId());
+//                adminUser.setFounder(0);
+//                adminUser.setNickname(company.getName()+"管理员");
+//                adminUser.setPassword(StringUtil.md5(password + adminUser.getUsername().toLowerCase()));
+//                adminUser.setDateLine(DateUtil.getDateline());
+//                adminUser.setUserState(0);
+//                adminUserMapper.insert(adminUser);
+//                //todo  用短信和邮件把账号密码发给用户
+//            }
+//        }
+//        return "success";
+//    }
+
+    @GetMapping("/getIndustry")
+    public WxMpTemplateIndustry getIndustry() throws WxErrorException {
+        WxMpDefaultConfigImpl config = new WxMpDefaultConfigImpl();
+        config.setAppId("wx51e98f2dee35237d");
+        config.setSecret("13803c1b0d911e023c7da0b300cbce89");
+        WxMpService   wxService = new WxMpServiceImpl();
+        wxService.setWxMpConfigStorage(config);
+        return wxService.getTemplateMsgService().getIndustry();
     }
+
+
 }

+ 26 - 10
module-erp/src/main/java/com/hys/app/controller/system/RoleManagerController.java → module-erp/src/main/java/com/hys/app/controller/erp/use/RoleManagerController.java

@@ -1,6 +1,10 @@
-package com.hys.app.controller.system;
+package com.hys.app.controller.erp.use;
 
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.hys.app.framework.context.user.AdminUserContext;
 import com.hys.app.framework.database.WebPage;
+import com.hys.app.framework.exception.ServiceException;
 import com.hys.app.model.support.LogClient;
 import com.hys.app.model.support.validator.annotation.Log;
 import com.hys.app.model.system.dos.RoleDO;
@@ -35,15 +39,17 @@ public class RoleManagerController {
     private RoleManager roleManager;
 
 
-    @ApiOperation(value = "查询角色列表", response = RoleDO.class)
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "page_no", value = "页码", required = true, dataType = "int", paramType = "query"),
-            @ApiImplicitParam(name = "page_size", value = "每页显示数量", required = true, dataType = "int", paramType = "query"),
-            @ApiImplicitParam(name = "keyword", value = "关键字", dataType = "String", paramType = "query")
-    })
+    @ApiOperation(value = "角色列表分页", response = RoleDO.class)
     @GetMapping
     public WebPage list(@ApiIgnore @NotEmpty(message = "页码不能为空") Long pageNo, @ApiIgnore @NotEmpty(message = "每页数量不能为空") Long pageSize, @ApiIgnore String keyword) {
-        return this.roleManager.list(pageNo, pageSize, keyword);
+        return this.roleManager.list(pageNo, pageSize, keyword,null);
+    }
+
+
+    @ApiOperation(value = "角色列表分页", response = RoleDO.class)
+    @GetMapping("packageSuper")
+    public WebPage packageSuper(@ApiIgnore @NotEmpty(message = "页码不能为空") Long pageNo, @ApiIgnore @NotEmpty(message = "每页数量不能为空") Long pageSize, @ApiIgnore String keyword) {
+        return this.roleManager.list(pageNo, pageSize, keyword,"packageSuper");
     }
 
 
@@ -54,6 +60,7 @@ public class RoleManagerController {
     @PostMapping
     @Log(client = LogClient.admin, detail = "添加名称为[${roleVO.roleName}]的角色信息")
     public RoleVO add(@RequestBody @ApiIgnore RoleVO roleVO) {
+        AdminUserContext.hasAdminAndSuper();
         return this.roleManager.add(roleVO);
     }
 
@@ -65,6 +72,7 @@ public class RoleManagerController {
     })
     @Log(client = LogClient.admin, detail = "修改ID为[${id}]的角色信息")
     public RoleVO edit(@RequestBody @ApiIgnore RoleVO roleVO, @PathVariable Long id) {
+        AdminUserContext.hasAdminAndSuper();
         return this.roleManager.edit(roleVO, id);
     }
 
@@ -75,9 +83,9 @@ public class RoleManagerController {
             @ApiImplicitParam(name = "id", value = "要删除的角色表主键", required = true, dataType = "int", paramType = "path")
     })
     @Log(client = LogClient.admin, detail = "删除ID为[${id}]的角色信息")
-    public String delete(@PathVariable Long id) {
+    public void delete(@PathVariable Long id) {
+        AdminUserContext.hasAdminAndSuper();
         this.roleManager.delete(id);
-        return "";
     }
 
 
@@ -99,4 +107,12 @@ public class RoleManagerController {
         return this.roleManager.getRoleMenu(id);
     }
 
+
+    @GetMapping(value = "/getRoleByDept/{deptId}")
+    @ApiOperation(value = "根据部门获取部门下所有的角色")
+    public List<RoleDO> getRoleByDept(@PathVariable String deptId) {
+        return roleManager.list(new LambdaQueryWrapper<RoleDO>()
+                .eq(RoleDO::getCompanyId, AdminUserContext.getCompanyId())
+                .eq(RoleDO::getDeptId, deptId));
+    }
 }

+ 106 - 6
module-erp/src/main/java/com/hys/app/controller/erp/use/SmsMailController.java

@@ -1,26 +1,44 @@
 package com.hys.app.controller.erp.use;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.hys.app.controller.erp.use.msg.entity.MessageReceiveTypeEnum;
 import com.hys.app.converter.erp.SmsMailConverter;
+import com.hys.app.framework.context.user.AdminUserContext;
+import com.hys.app.framework.database.BaseQueryParam;
+import com.hys.app.framework.exception.ServiceException;
+import com.hys.app.framework.util.BeanUtil;
+import com.hys.app.framework.util.BeanUtils;
+import com.hys.app.model.erp.dos.MailSmsCountDO;
+import com.hys.app.model.erp.dos.MessageReceiveDO;
 import com.hys.app.model.erp.dos.SmsMailTemplate;
+import com.hys.app.model.erp.dto.BandTemplateDTO;
 import com.hys.app.model.erp.dto.SmsMailTemplateDTO;
+import com.hys.app.model.erp.entity.CompanyBandMsg;
 import com.hys.app.model.erp.entity.MailSmsCountQuery;
+import com.hys.app.model.erp.enums.MsgTypeEnum;
 import com.hys.app.model.erp.vo.MailSmsCountVO;
 import com.hys.app.model.erp.vo.SmsMailTemplateQuery;
 import com.hys.app.model.erp.vo.SmsMailTemplateVO;
 import com.hys.app.model.support.LogClient;
 import com.hys.app.model.support.validator.annotation.Log;
 
-import com.hys.app.service.erp.MailSmsCountManager;
-import com.hys.app.service.erp.SmsMailManager;
+import com.hys.app.model.system.dos.AdminUser;
+import com.hys.app.service.erp.*;
+import com.hys.app.service.system.AdminUserManager;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
 
-@Api(tags = "公司")
+@Api(tags = "消息  消息模板")
 @RestController
 @RequestMapping("/admin/erp/SmsMailTemplate")
 @AllArgsConstructor
@@ -28,6 +46,10 @@ public class SmsMailController {
 
     private SmsMailManager smsMailManager;
     private MailSmsCountManager mailSmsCountManager;
+    private MessageReceiveManager messageReceiveManager;
+    private AdminUserManager adminUserManager;
+    private CompanyBandMsgManager companyBandMsgManager;
+    private RedisTemplate redisTemplate;
 
     @PostMapping("createTemplate")
     @ApiOperation(value = "创建模板")
@@ -55,6 +77,13 @@ public class SmsMailController {
         return smsMailManager.queryTemplate(query);
     }
 
+
+    @GetMapping("getSysNotBand/{type}")
+    @ApiOperation(value = "创建邮件消息和短信消息获取未绑定的系统消息")
+    public List<SmsMailTemplate> getSysNotBand(@PathVariable MsgTypeEnum type) {
+        return smsMailManager.getSysNotBand(type);
+    }
+
     @PostMapping("delete/{id}")
     @ApiOperation(value = "删除模板")
     public void delete(@PathVariable Long id) {
@@ -68,9 +97,80 @@ public class SmsMailController {
         byId.setEnableStatus(!byId.getEnableStatus());
         smsMailManager.updateById(byId);
     }
+
+//    @GetMapping("getSendNumByCompany")
+//    @ApiOperation(value = "")
+//    public IPage<MailSmsCountVO> getSendNumByCompany(MailSmsCountQuery query) {
+//        return mailSmsCountManager.getPage(query);
+//    }
+
     @GetMapping("getSendNumByCompany")
-    @ApiOperation(value = "获取各公司")
-    public IPage<MailSmsCountVO> getSendNumByCompany(MailSmsCountQuery query) {
-        return mailSmsCountManager.getPage(query);
+    @ApiOperation(value = "获取模板树状图,勾选之后和公司绑定")
+    public List<SmsMailTemplateVO> getTemplateTree() {
+        List<SmsMailTemplateVO> bean = BeanUtils.toBean(mailSmsCountManager.list(), SmsMailTemplateVO.class);
+        for (SmsMailTemplateVO templateVO : bean) {
+            templateVO.setChild(bean.stream().filter(item -> item.getPid().equals(templateVO.getId())).collect(Collectors.toList()));
+        }
+        return bean;
     }
+
+    @PostMapping("updateSelectMsg")
+    @ApiOperation(value = "公司选中的模板")
+    public void updateSeletMsg(@RequestBody BandTemplateDTO dto) {
+        AdminUserContext.hasCompany();
+        AdminUser model = adminUserManager.getModel(AdminUserContext.getAdminUserId());
+        if (!model.getUsername().equals("admin")) {
+            throw new ServiceException("只能admin账号才能进行此操作");
+        }
+        for (SmsMailTemplateVO vo : dto.getVos()) {
+            if (vo.getType().equals(MsgTypeEnum.SYSTEM)) {
+                vo.setHasSelect(true);
+            }
+        }
+        List<SmsMailTemplateVO> collect = dto.getVos().stream().filter(SmsMailTemplateVO::getHasSelect).collect(Collectors.toList());
+
+        List<CompanyBandMsg> list = new ArrayList<>();
+        for (SmsMailTemplateVO vo : collect) {
+            CompanyBandMsg companyBandMsg = new CompanyBandMsg();
+            companyBandMsg.setCompanyId(AdminUserContext.getCompanyId());
+            companyBandMsg.setTemplateId(vo.getId());
+            companyBandMsg.setTemplateCode(vo.getCode());
+        }
+        companyBandMsgManager.remove(new LambdaQueryWrapper<CompanyBandMsg>().eq(CompanyBandMsg::getCompanyId,AdminUserContext.getCompanyId()));
+        companyBandMsgManager.saveBatch(list);
+        redisTemplate.opsForHash().delete("companyTemplate", AdminUserContext.getCompanyId().toString());
+        redisTemplate.opsForHash().put("companyTemplate",AdminUserContext.getCompanyId().toString(),list);
+    }
+
+
+    @GetMapping("getMessageByTypeCompany/{type}")
+    @ApiOperation(value = "获取各公司发的消息记录")
+    public IPage<MessageReceiveDO> getMessageByTypeCompany(BaseQueryParam query, @PathVariable String type) {
+        return messageReceiveManager.getPage(query, type);
+    }
+
+    @GetMapping("countNotReadSys")
+    @ApiOperation(value = "统计自己账号所有未读的消息")
+    public long countNotReadSys() {
+        return messageReceiveManager.count(new LambdaQueryWrapper<MessageReceiveDO>()
+                .eq(MessageReceiveDO::getUserId, AdminUserContext.getAdminUserId())
+                .eq(MessageReceiveDO::getType, MessageReceiveTypeEnum.SYSTEM)
+                .eq(MessageReceiveDO::getStatus, false));
+    }
+
+    @GetMapping("getSysMsgByOwn")
+    @ApiOperation(value = "获取自己所有的消息")
+    public IPage<MessageReceiveDO> getMessageByTypeCompany(BaseQueryParam query) {
+        //把自己所有的消息全部设置为已读
+        MessageReceiveDO messageReceiveDO = new MessageReceiveDO();
+        messageReceiveDO.setStatus(true);
+        messageReceiveManager.update(messageReceiveDO, new LambdaQueryWrapper<MessageReceiveDO>()
+                .eq(MessageReceiveDO::getUserId, AdminUserContext.getAdminUserId())
+                .eq(MessageReceiveDO::getType, MessageReceiveTypeEnum.SYSTEM));
+
+        return messageReceiveManager.page(new Page<>(query.getPageNo(), query.getPageSize()), new LambdaQueryWrapper<MessageReceiveDO>()
+                .eq(MessageReceiveDO::getUserId, AdminUserContext.getAdminUserId())
+                .eq(MessageReceiveDO::getType, MessageReceiveTypeEnum.SYSTEM));
+    }
+
 }

+ 1 - 1
module-erp/src/main/java/com/hys/app/util/AliSmsUtil.java → module-erp/src/main/java/com/hys/app/controller/erp/use/msg/AliSmsUtil.java

@@ -1,4 +1,4 @@
-package com.hys.app.util;
+package com.hys.app.controller.erp.use.msg;
 
 
 import cn.hutool.json.JSONUtil;

+ 1 - 1
module-erp/src/main/java/com/hys/app/util/MailSmtpUtil.java → module-erp/src/main/java/com/hys/app/controller/erp/use/msg/MailSmtpUtil.java

@@ -1,4 +1,4 @@
-package com.hys.app.util;
+package com.hys.app.controller.erp.use.msg;
 
 import javax.mail.*;
 import javax.mail.internet.InternetAddress;

+ 103 - 0
module-erp/src/main/java/com/hys/app/controller/erp/use/msg/MsgUtilClient.java

@@ -0,0 +1,103 @@
+package com.hys.app.controller.erp.use.msg;
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.extra.spring.SpringUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.hys.app.controller.erp.use.msg.entity.MessageReceiveTypeEnum;
+import com.hys.app.controller.erp.use.msg.msgTemplate.MailMsgContant;
+import com.hys.app.model.erp.dos.MessageReceiveDO;
+import com.hys.app.model.erp.dos.SmsMailTemplate;
+import com.hys.app.service.erp.MessageReceiveManager;
+import com.hys.app.service.erp.SmsMailManager;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+@AllArgsConstructor
+@Service
+public class MsgUtilClient {
+
+    private SmsMailManager smsMailManager;
+    private MessageReceiveManager messageReceiveManager;
+
+    /**
+     * 发系统消息
+     */
+    public  void sendSys(String contentSys, String defContent, Long userId, Long companyId, String... format) {
+//        try {
+            SmsMailTemplate one = smsMailManager.getOne(new LambdaQueryWrapper<SmsMailTemplate>().eq(SmsMailTemplate::getCode, contentSys));
+            String content = ObjectUtil.isNotNull(one) ? one.getContent() : defContent;
+            String formatContent = StrUtil.format(content, format);
+            MessageReceiveDO anEnum = new MessageReceiveDO();
+            anEnum.setType(MessageReceiveTypeEnum.SYSTEM);
+            anEnum.setContent(formatContent);
+            anEnum.setUserId(userId);
+            anEnum.setCompanyId(companyId);
+            messageReceiveManager.save(anEnum);
+//        }catch (Exception e){
+//
+//        }
+    }
+
+    /**
+     * 发邮件
+     */
+    public  void sendMail(String contentSys, String defContent, String subHead,String toMail, Long companyId, String... format)   {
+        try {
+            SmsMailTemplate one = smsMailManager.getOne(new LambdaQueryWrapper<SmsMailTemplate>().eq(SmsMailTemplate::getCode, contentSys));
+            String content = ObjectUtil.isNotNull(one) ? one.getContent() : defContent;
+            String formatContent = StrUtil.format(content, format);
+            String header = ObjectUtil.isNotNull(one) ? one.getName() : subHead;
+            MailSmtpUtil.sendEmail(toMail,header,formatContent);
+            MessageReceiveDO anEnum = new MessageReceiveDO();
+            anEnum.setType(MessageReceiveTypeEnum.MAIL);
+            anEnum.setContent(formatContent);
+            anEnum.setMail(toMail);
+            anEnum.setCompanyId(companyId);
+            messageReceiveManager.save(anEnum);
+        }catch (Exception e){
+            System.out.println("11111111111111");
+        }
+    }
+
+    /**
+     * 发短信
+     */
+    public  void sendSms() {
+
+
+    }
+
+
+//    /**
+//     * 发短信 发系统消息
+//     */
+//    public static void sendSmsSys() {
+//
+//    }
+//
+//
+//    /**
+//     * 发短信 发邮件
+//     */
+//    public static void sendSmsMail() {
+//
+//    }
+//
+//
+//    /**
+//     * 发邮件 发系统消息
+//     */
+//    public static void sendSysMail() {
+//
+//    }
+//
+//    /**
+//     * 发邮件 发系统消息  发短信
+//     */
+//    public static void sendSysMailSms() {
+//
+//    }
+
+
+}

+ 36 - 0
module-erp/src/main/java/com/hys/app/controller/erp/use/msg/entity/MessageReceiveTypeEnum.java

@@ -0,0 +1,36 @@
+package com.hys.app.controller.erp.use.msg.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 消息接收类型
+ *
+ * @author 张崧
+ * @since 2023-12-19
+ */
+@Getter
+public enum MessageReceiveTypeEnum {
+
+    SYSTEM("SYSTEM", "系统消息"),
+    SMS("SMS", "手机短息"),
+    MAIL("MAIL", "邮件消息");
+
+    MessageReceiveTypeEnum(String value, String label) {
+        this.value = value;
+        this.label = label;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public String getLabel() {
+        return label;
+    }
+
+    private final String value;
+
+    private final String label;
+
+}

+ 18 - 0
module-erp/src/main/java/com/hys/app/controller/erp/use/msg/msgTemplate/MailMsgContant.java

@@ -0,0 +1,18 @@
+package com.hys.app.controller.erp.use.msg.msgTemplate;
+
+import org.springframework.stereotype.Service;
+
+/**
+ * 阿里云短信API
+ *
+ * @author zhangsong
+ * @version v1.0
+ * @since v7.3.0
+ * 2021-01-27
+ */
+public class MailMsgContant {
+
+
+    public static final String CREATE_SUCCESS_MAIL = "CREATESUCCESS";
+
+}

+ 17 - 0
module-erp/src/main/java/com/hys/app/controller/erp/use/msg/msgTemplate/MailMsgDefault.java

@@ -0,0 +1,17 @@
+package com.hys.app.controller.erp.use.msg.msgTemplate;
+
+
+/**
+ * 阿里云短信API
+ *
+ * @author zhangsong
+ * @version v1.0
+ * @since v7.3.0
+ * 2021-01-27
+ */
+public class MailMsgDefault {
+
+    public static final String CREATE_SUCCESS_HEAD_MAIL = "公司创建成功,发送初始账号密码";
+    public static final String CREATE_SUCCESS_MAIL = "公司创建成功,初始账号为admin,密码为{},体验期限到{},如需更优质的服务前往”我的“购买";
+
+}

+ 17 - 0
module-erp/src/main/java/com/hys/app/controller/erp/use/msg/msgTemplate/SMsMsgTemplate.java

@@ -0,0 +1,17 @@
+package com.hys.app.controller.erp.use.msg.msgTemplate;
+
+
+/**
+ * 阿里云短信API
+ *
+ * @author zhangsong
+ * @version v1.0
+ * @since v7.3.0
+ * 2021-01-27
+ */
+public class SMsMsgTemplate {
+
+
+    public static final String createSuccess = "公司创建成功,初始账号为admin,密码为{},体验期限到{},如需更优质的服务前往我的购买";
+
+}

+ 17 - 0
module-erp/src/main/java/com/hys/app/controller/erp/use/msg/msgTemplate/SystemMsgContent.java

@@ -0,0 +1,17 @@
+package com.hys.app.controller.erp.use.msg.msgTemplate;
+
+
+/**
+ * 阿里云短信API
+ *
+ * @author zhangsong
+ * @version v1.0
+ * @since v7.3.0
+ * 2021-01-27
+ */
+public class SystemMsgContent {
+
+
+    public static final String CREATE_SUCCESS_SYSTEM = "CREATESUCCESS";
+
+}

+ 17 - 0
module-erp/src/main/java/com/hys/app/controller/erp/use/msg/msgTemplate/SystemMsgTemplate.java

@@ -0,0 +1,17 @@
+package com.hys.app.controller.erp.use.msg.msgTemplate;
+
+
+/**
+ * 阿里云短信API
+ *
+ * @author zhangsong
+ * @version v1.0
+ * @since v7.3.0
+ * 2021-01-27
+ */
+public class SystemMsgTemplate  {
+
+
+    public static final String CREATE_SUCCESS_SYSTEM = "公司创建成功,初始账号为admin,密码为{},体验期限到{},如需更优质的服务前往我的购买";
+
+}

+ 24 - 2
module-erp/src/main/java/com/hys/app/controller/system/AdminUserManagerController.java

@@ -1,16 +1,20 @@
 package com.hys.app.controller.system;
 
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.hys.app.framework.context.user.AdminUserContext;
 import com.hys.app.framework.exception.ResourceNotFoundException;
 import com.hys.app.framework.exception.ServiceException;
 import com.hys.app.framework.util.BeanUtil;
 import com.hys.app.framework.util.StringUtil;
 import com.hys.app.framework.validation.annotation.DemoSiteDisable;
+import com.hys.app.model.erp.entity.CompanyErp;
 import com.hys.app.model.errorcode.SystemErrorCode;
 import com.hys.app.model.system.dos.AdminUser;
 import com.hys.app.model.system.vo.AdminLoginVO;
 import com.hys.app.model.system.vo.AdminUserVO;
 import com.hys.app.service.base.service.ValidatorManager;
+import com.hys.app.service.erp.CompanyErpManager;
 import com.hys.app.service.system.AdminUserManager;
 import io.jsonwebtoken.ExpiredJwtException;
 import io.swagger.annotations.Api;
@@ -24,6 +28,7 @@ import springfox.documentation.annotations.ApiIgnore;
 
 import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
+import java.util.List;
 
 /**
  * 平台管理员控制器
@@ -44,6 +49,9 @@ public class AdminUserManagerController {
     @Autowired
     private ValidatorManager validatorManager;
 
+    @Autowired
+    private CompanyErpManager companyManager;
+
 
     @GetMapping("/login")
     @ApiOperation(value = "用户名(手机号)/密码登录API")
@@ -51,11 +59,14 @@ public class AdminUserManagerController {
             @ApiImplicitParam(name = "username", value = "用户名", required = true, dataType = "String", paramType = "query"),
             @ApiImplicitParam(name = "password", value = "密码", required = true, dataType = "String", paramType = "query")
     })
-    public AdminLoginVO login(@NotEmpty(message = "用户名不能为空") String username, @NotEmpty(message = "密码不能为空") String password,String companyName) {
+    public AdminLoginVO login(@NotEmpty(message = "用户名不能为空") String username,
+                              @NotEmpty(message = "密码不能为空") String password,
+                              @NotEmpty(message = "登录类型不能为空") String type,
+                              Long companyId) {
         //验证登录参数是否正确
         this.validatorManager.validate();
 
-        return adminUserManager.login(username, password,companyName);
+        return adminUserManager.login(username, password, companyId,type);
     }
 
     @ApiOperation(value = "刷新token")
@@ -124,4 +135,15 @@ public class AdminUserManagerController {
         return this.adminUserManager.getModel(AdminUserContext.getAdminUserId());
     }
 
+
+    @GetMapping("/login/getCompany")
+    public List<CompanyErp> loginGetCompany( String key) {
+        return companyManager.list(new LambdaQueryWrapper<CompanyErp>()
+                .select(CompanyErp::getId,CompanyErp::getName)
+                .and(StrUtil.isNotBlank(key), item -> item.like(CompanyErp::getName, key)
+                        .or()
+                        .like(CompanyErp::getFirstPy, key)
+                        .or()
+                        .like(CompanyErp::getPinying, key)));
+    }
 }

+ 3 - 3
module-erp/src/main/java/com/hys/app/controller/system/MenuManagerController.java

@@ -40,9 +40,9 @@ public class MenuManagerController {
     @ApiImplicitParams({
             @ApiImplicitParam(name = "parent_id", value = "菜单父id,如果查询顶级菜单则传0", required = true, dataType = "int", paramType = "path")
     })
-    @GetMapping("/children/{parent_id}")
-    public List<MenusVO> getMenuTree(@PathVariable("parent_id") @ApiIgnore Long parentId) {
-        return this.menuManager.getMenuTree(parentId);
+    @GetMapping("/children")
+    public List<MenusVO> getMenuTree() {
+        return this.menuManager.getMenuTree();
     }
 
 

+ 5 - 8
module-erp/src/main/java/com/hys/app/converter/erp/CompanyConverter.java

@@ -1,10 +1,7 @@
 package com.hys.app.converter.erp;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.hys.app.model.erp.entity.Company;
-import com.hys.app.model.erp.entity.CompanyDO;
-import com.hys.app.model.erp.entity.CompanyUpdateDO;
-import com.hys.app.model.erp.entity.CompanyVO;
+import com.hys.app.model.erp.entity.*;
 import org.mapstruct.Mapper;
 import org.mapstruct.MappingConstants;
 import org.mapstruct.MappingTarget;
@@ -14,11 +11,11 @@ import org.mapstruct.factory.Mappers;
 public interface CompanyConverter {
     CompanyConverter INSTANCE = Mappers.getMapper(CompanyConverter.class);
 
-    Company convert(CompanyDO bean);
+    CompanyErp convert(CompanyDO bean);
 
-    void convert(@MappingTarget Company company , CompanyUpdateDO updateDO);
+    void convert(@MappingTarget CompanyErp company , CompanyUpdateDO updateDO);
 
-    CompanyVO convert(Company bean);
+    CompanyVO convert(CompanyErp bean);
 
-    Page<CompanyVO> convert(Page<Company> bean);
+    Page<CompanyVO> convert(Page<CompanyErp> bean);
 }

+ 1 - 0
module-erp/src/main/java/com/hys/app/framework/security/AdminAccessDecisionManager.java

@@ -47,6 +47,7 @@ public class AdminAccessDecisionManager implements org.springframework.security.
         result = result || matcher.match("/admin/erp/scancode/**", url);
         result = result || matcher.match("/admin/erp/pay/**", url);
         result = result || matcher.match("/weixin", url);
+        result = result || matcher.match("/admin/systems/admin-users/login/**", url);
         if (result) {
             return;
         }

+ 16 - 0
module-erp/src/main/java/com/hys/app/mapper/erp/CompanyBandMsgMapper.java

@@ -0,0 +1,16 @@
+package com.hys.app.mapper.erp;
+
+import com.hys.app.framework.database.mybatisplus.base.BaseMapperX;
+import com.hys.app.model.erp.entity.Company;
+import com.hys.app.model.erp.entity.CompanyBandMsg;
+
+
+/**
+ * 品牌BrandDO的Mapper
+ * @author fk
+ * @version 1.0
+ * @since 7.1.0
+ * 2020/7/21
+ */
+public interface CompanyBandMsgMapper extends BaseMapperX<CompanyBandMsg> {
+}

+ 26 - 0
module-erp/src/main/java/com/hys/app/mapper/erp/CompanyErpMapper.java

@@ -0,0 +1,26 @@
+package com.hys.app.mapper.erp;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.hys.app.framework.cache.MybatisRedisCache;
+import com.hys.app.model.erp.entity.CompanyErp;
+import com.hys.app.model.erp.entity.CompanyPackage;
+import com.hys.app.model.erp.entity.CompanyQuery;
+import com.hys.app.model.erp.entity.CompanyVO;
+import org.apache.ibatis.annotations.CacheNamespace;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+
+/**
+ * 品牌BrandDO的Mapper
+ * @author fk
+ * @version 1.0
+ * @since 7.1.0
+ * 2020/7/21
+ */
+public interface CompanyErpMapper extends BaseMapper<CompanyErp> {
+  List<CompanyVO> queryPage( @Param("query") CompanyQuery query);
+
+}

+ 2 - 2
module-erp/src/main/java/com/hys/app/mapper/erp/CompanyMapper.java

@@ -2,6 +2,7 @@ package com.hys.app.mapper.erp;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.hys.app.framework.cache.MybatisRedisCache;
+import com.hys.app.framework.database.mybatisplus.base.BaseMapperX;
 import com.hys.app.model.erp.entity.Company;
 import org.apache.ibatis.annotations.CacheNamespace;
 
@@ -13,6 +14,5 @@ import org.apache.ibatis.annotations.CacheNamespace;
  * @since 7.1.0
  * 2020/7/21
  */
-@CacheNamespace(implementation= MybatisRedisCache.class,eviction=MybatisRedisCache.class)
-public interface CompanyMapper extends BaseMapper<Company> {
+public interface CompanyMapper extends BaseMapperX<Company> {
 }

+ 21 - 0
module-erp/src/main/java/com/hys/app/mapper/erp/MessageReceiveMapper.java

@@ -0,0 +1,21 @@
+package com.hys.app.mapper.erp;
+
+import com.hys.app.framework.context.user.AdminUserContext;
+import com.hys.app.framework.database.WebPage;
+import com.hys.app.framework.database.mybatisplus.base.BaseMapperX;
+import com.hys.app.model.erp.dos.MessageReceiveDO;
+import com.hys.app.model.erp.dos.WarehouseAreaDO;
+import com.hys.app.model.erp.dto.WarehouseAreaQueryParams;
+
+/**
+ * 出库单商品明细的Mapper
+ *
+ * @author 张崧
+ * @since 2023-12-07 17:06:32
+ */
+public interface MessageReceiveMapper extends BaseMapperX<MessageReceiveDO> {
+
+
+
+}
+

+ 1 - 1
module-erp/src/main/java/com/hys/app/mapper/system/AdminUserMapper.java

@@ -32,7 +32,7 @@ public interface AdminUserMapper extends BaseMapper<AdminUser> {
      * @param userState
      * @return AdminUserDTO
      */
-    IPage<AdminUserDTO> selectPageDto(Page<AdminUserDTO> page, @Param("keyword") String keyword, @Param("userState") Integer userState);
+    IPage<AdminUserDTO> selectPageDto(Page<AdminUserDTO> page, @Param("keyword") String keyword, @Param("userState") Integer userState,@Param("companyId") Long companyId);
 
     List<DeptDO> getAllDept();
 

+ 13 - 0
module-erp/src/main/java/com/hys/app/mapper/system/DeptMapper.java

@@ -1,10 +1,14 @@
 package com.hys.app.mapper.system;
 
+import com.hys.app.framework.context.user.AdminUserContext;
+import com.hys.app.model.erp.dos.WarehouseOutDO;
 import com.hys.app.model.system.dto.DeptQueryParams;
 import com.hys.app.model.system.dos.DeptDO;
 import com.hys.app.framework.database.mybatisplus.base.BaseMapperX;
 import com.hys.app.framework.database.mybatisplus.wrapper.LambdaQueryWrapperX;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 
 import java.util.Collection;
 import java.util.List;
@@ -15,6 +19,7 @@ public interface DeptMapper extends BaseMapperX<DeptDO> {
     default List<DeptDO> selectList(DeptQueryParams reqVO) {
         return selectList(new LambdaQueryWrapperX<DeptDO>()
                 .likeIfPresent(DeptDO::getName, reqVO.getName())
+                .eqIfPresent(DeptDO::getCompanyId, AdminUserContext.getCompanyId())
                 .inIfPresent(DeptDO::getId, reqVO.getDeptIds()));
     }
 
@@ -30,4 +35,12 @@ public interface DeptMapper extends BaseMapperX<DeptDO> {
         return selectList(DeptDO::getParentId, parentIds);
     }
 
+    @Select("WITH RECURSIVE sub_departments AS (" +
+            "SELECT * FROM erp_company_dept WHERE id = #{deptId} " +
+            "UNION ALL " +
+            "SELECT d.* FROM erp_company_dept d " +
+            "INNER JOIN sub_departments sd ON d.parent_id = sd.id" +
+            ") " +
+            "SELECT * FROM sub_departments")
+    List<DeptDO> getAllSubDept(@Param("deptId") Long deptId);
 }

+ 1 - 1
module-erp/src/main/java/com/hys/app/mapper/system/RoleMapper.java

@@ -13,6 +13,6 @@ import org.apache.ibatis.annotations.CacheNamespace;
  * @since v7.2.2
  * 2020/7/21
  */
-@CacheNamespace(implementation= MybatisRedisCache.class,eviction=MybatisRedisCache.class)
+//@CacheNamespace(implementation= MybatisRedisCache.class,eviction=MybatisRedisCache.class)
 public interface RoleMapper extends BaseMapper<RoleDO> {
 }

+ 11 - 18
module-openapi/src/main/java/com/hys/app/model/datasync/dos/MessageReceiveDO.java → module-erp/src/main/java/com/hys/app/model/erp/dos/MessageReceiveDO.java

@@ -1,10 +1,10 @@
-package com.hys.app.model.datasync.dos;
+package com.hys.app.model.erp.dos;
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.hys.app.model.datasync.enums.MessageReceiveStatusEnum;
-import com.hys.app.model.datasync.enums.MessageReceiveTypeEnum;
+import com.hys.app.controller.erp.use.msg.entity.MessageReceiveTypeEnum;
+import com.hys.app.framework.database.mybatisplus.base.BaseDO;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
@@ -18,7 +18,7 @@ import java.io.Serializable;
  */
 @TableName("erp_message_receive")
 @Data
-public class MessageReceiveDO implements Serializable {
+public class MessageReceiveDO extends BaseDO implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
@@ -29,25 +29,18 @@ public class MessageReceiveDO implements Serializable {
     @ApiModelProperty(name = "type", value = "消息类型")
     private MessageReceiveTypeEnum type;
 
-    @ApiModelProperty(name = "msg_id", value = "外部系统的消息id")
-    private String msgId;
-
-    /**
-     * todo 大文本字段单独存一张表
-     */
     @ApiModelProperty(name = "content", value = "消息内容")
     private String content;
 
-    @ApiModelProperty(name = "produce_time", value = "外部系统生成消息的时间")
-    private Long produceTime;
-
-    @ApiModelProperty(name = "receive_time", value = "接收消息的时间")
-    private Long receiveTime;
 
     @ApiModelProperty(name = "status", value = "状态")
-    private MessageReceiveStatusEnum status;
+    private Boolean status;
+
+    private Long userId;
+
+    private String phone;
+
+    private String mail;
 
-    @ApiModelProperty(name = "remark", value = "处理结果备注")
-    private String remark;
 
 }

+ 3 - 1
module-erp/src/main/java/com/hys/app/model/erp/dos/SmsMailTemplate.java

@@ -20,7 +20,7 @@ import java.io.Serializable;
  * @since v7.3.0
  * 2021-01-26 16:04:22
  */
-@TableName("es_sms_mail_template")
+@TableName("erp_mail_sms_template")
 @ApiModel
 @Data
 public class SmsMailTemplate extends BaseDO implements Serializable {
@@ -32,6 +32,8 @@ public class SmsMailTemplate extends BaseDO implements Serializable {
      */
     @TableId(type = IdType.ASSIGN_ID)
     private Long id;
+
+    private Long pid;
     /**
      * 模板类型短信还是邮件
      */

+ 25 - 0
module-erp/src/main/java/com/hys/app/model/erp/dto/BandTemplateDTO.java

@@ -0,0 +1,25 @@
+package com.hys.app.model.erp.dto;
+
+import com.hys.app.model.erp.enums.MsgTypeEnum;
+import com.hys.app.model.erp.vo.SmsMailTemplateVO;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+
+
+/**
+ * 短信模板实体
+ *
+ * @author zhangsong
+ * @version v1.0
+ * @since v7.3.0
+ * 2021-01-26 16:04:22
+ */
+@Data
+public class BandTemplateDTO {
+
+    @NotEmpty
+    List<SmsMailTemplateVO> vos;
+}

+ 5 - 4
module-erp/src/main/java/com/hys/app/model/erp/dto/PayTypeUrl.java

@@ -21,11 +21,12 @@ public class PayTypeUrl {
     private String payType;
 
     @ApiModelProperty(name = "order_id", value = "订单ID")
-    @NotNull(message = "订单ID不能为空")
-    private Long orderId;
+    @NotNull(message = "ID不能为空")
+    private Long id;
 
-    @ApiModelProperty("openid")
-    private String openid;
+    @ApiModelProperty(name = "order_id", value = "订单ID")
+    @NotNull(message = "ID不能为空")
+    private String orderPayType;
 
 }
 

+ 9 - 0
module-erp/src/main/java/com/hys/app/model/erp/dto/SmsMailTemplateDTO.java

@@ -1,5 +1,7 @@
 package com.hys.app.model.erp.dto;
 
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
 import com.hys.app.model.erp.enums.MsgTypeEnum;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -16,6 +18,13 @@ import lombok.Data;
 @Data
 public class SmsMailTemplateDTO {
 
+
+    /**
+     * 主键
+     */
+    @ApiModelProperty("上级模板,挂在哪一个系统消息下面,如果是短信或者邮件必填")
+    private Long pid;
+
     /**
      * 模板类型短信还是邮件
      */

+ 8 - 2
module-erp/src/main/java/com/hys/app/model/erp/entity/Company.java

@@ -13,8 +13,7 @@ import java.time.LocalDateTime;
  */
 @TableName(value = "erp_company")
 @Data
-@EqualsAndHashCode(callSuper = true)
-public class Company extends BaseDO {
+public class Company {
 
     public static final Long ROOT_ID = 0L;
 
@@ -103,4 +102,11 @@ public class Company extends BaseDO {
      * 套餐id
      */
     private Long companyPackageId;
+
+    private  String  firstPy;
+
+    private  String  pinying;
+
+    private Long companyId;
+
 }

+ 31 - 0
module-erp/src/main/java/com/hys/app/model/erp/entity/CompanyBandMsg.java

@@ -0,0 +1,31 @@
+package com.hys.app.model.erp.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 部门表
+ */
+@TableName(value = "erp_company_band_msg")
+@Data
+public class CompanyBandMsg {
+
+    public static final Long ROOT_ID = 0L;
+
+    private Long id;
+    /**
+     * 名称
+     */
+    private Long companyId;
+    /**
+     * 营业执照
+     */
+    private Long templateId;
+    /**
+     * 统一社会性用代码
+     */
+    private String templateCode;
+}

+ 0 - 50
module-erp/src/main/java/com/hys/app/model/erp/entity/CompanyDO.java

@@ -51,18 +51,6 @@ public class CompanyDO {
     @ApiModelProperty("省")
     @NotBlank(message = "省不能为空")
     private String province;
-    /**
-     * 市
-     */
-    @ApiModelProperty("市")
-    @NotBlank(message = "市不能为空")
-    private String city;
-    /**
-     * 县
-     */
-    @ApiModelProperty("县")
-    @NotBlank(message = "县不能为空")
-    private String area;
     /**
      * 邮政编码
      */
@@ -90,44 +78,6 @@ public class CompanyDO {
      */
     @ApiModelProperty("官网")
     private String website;
-    /**
-     * 使用截止时间
-     */
-    @ApiModelProperty("使用截止时间")
-    @NotNull(message = "使用截止时间不能为空")
-    private LocalDateTime endUseTime;
-
-    /**
-     * 最大创建账号数
-     */
-    @ApiModelProperty("最大创建账号数")
-    @NotNull(message = "最大创建账号数不能为空")
-    private Integer userNum;
-    /**
-     * 付款金额
-     */
-    @ApiModelProperty("累计付款金额")
-    private BigDecimal money;
-    /**
-     * 权限id
-     */
-    @ApiModelProperty("套餐id")
-    @NotNull(message = "套餐不能为空")
-    private Long roleId;
-
-    /**
-     * 本次付款金额
-     */
-    @ApiModelProperty("本次付款金额")
-    @NotNull(message = "本次应付金额不能为空")
-    private BigDecimal thisMoney;
-
-    /**
-     * 本次购买天数
-     */
-    @ApiModelProperty("本次购买天数")
-    @NotNull(message = "本次购买天数不能为空")
-    private Integer thisDay;
 
     @ApiModelProperty("套餐id")
     @NotNull(message = "套餐不能为空")

+ 127 - 0
module-erp/src/main/java/com/hys/app/model/erp/entity/CompanyErp.java

@@ -0,0 +1,127 @@
+package com.hys.app.model.erp.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.hys.app.framework.database.mybatisplus.base.BaseDO;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ * 部门表
+ */
+@TableName(value = "erp_company")
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class CompanyErp extends BaseDO {
+
+    public static final Long ROOT_ID = 0L;
+
+    private Long id;
+    /**
+     * 名称
+     */
+    private String name;
+    /**
+     * 营业执照
+     */
+    private String license;
+    /**
+     * 统一社会性用代码
+     */
+    private String creditCode;
+    /**
+     * 行业
+     */
+    private String industry;
+    /**
+     * 地址
+     */
+    private String address;
+    /**
+     * 省
+     */
+    private String province;
+    /**
+     * 市
+     */
+    private String city;
+    /**
+     * 县
+     */
+    private String area;
+    /**
+     * 邮政编码
+     */
+    private String postalCode;
+    /**
+     * 联系人
+     */
+    private String userName;
+    /**
+     * 联系人电话
+     */
+    private String phone;
+    /**
+     * 邮箱
+     */
+    private String email;
+    /**
+     * 官网
+     */
+    private String website;
+    /**
+     * 使用截止时间
+     */
+    private Date endUseTime;
+
+    /**
+     * 最大创建账号数
+     */
+    private Integer userNum;
+    /**
+     * 累计付款金额
+     */
+    private BigDecimal money;
+    /**
+     * 权限id
+     */
+    private Long roleId;
+
+    /**
+     * 权限id
+     */
+    private Long thisRoleId;
+
+    /**
+     * 本次付款金额
+     */
+    private BigDecimal thisMoney;
+
+    /**
+     * 本次购买天数
+     */
+    private Integer thisDay;
+
+    /**
+     * 最大创建账号数
+     */
+    private Integer thisUserNum;
+
+    /**
+     * 套餐id
+     */
+    private Long companyPackageId;
+
+    private Long thisCompanyPackageId;
+
+    private String firstPy;
+    //小写首字母
+    private String firstPyLower;
+
+    private String pinying;
+
+    private Long companyId;
+}

+ 11 - 0
module-erp/src/main/java/com/hys/app/model/erp/entity/CompanyPackage.java

@@ -2,9 +2,11 @@ package com.hys.app.model.erp.entity;
 
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.hys.app.framework.database.mybatisplus.base.BaseDO;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
+import javax.validation.constraints.NotNull;
 import java.math.BigDecimal;
 
 /**
@@ -37,4 +39,13 @@ public class CompanyPackage extends BaseDO {
     private Boolean useAble;
 
     private String name;
+
+    private String remark;
+
+    /**
+     * 最大创建账号数
+     */
+    @ApiModelProperty("最大创建账号数")
+    @NotNull(message = "最大创建账号数不能为空")
+    private Integer userNum;
 }

+ 10 - 0
module-erp/src/main/java/com/hys/app/model/erp/entity/CompanyPackageDO.java

@@ -13,6 +13,13 @@ import java.math.BigDecimal;
 @Data
 public class CompanyPackageDO {
 
+    /**
+     * 最大创建账号数
+     */
+    @ApiModelProperty("最大创建账号数")
+    @NotNull(message = "最大创建账号数不能为空")
+    private Integer userNum;
+
     /**
      * 权限id
      */
@@ -39,4 +46,7 @@ public class CompanyPackageDO {
     @ApiModelProperty("套餐名称")
     @NotBlank(message = "套餐名称不能为空")
     private String  name;
+
+    @ApiModelProperty("备注")
+    private String  remark;
 }

+ 24 - 0
module-erp/src/main/java/com/hys/app/model/erp/entity/CompanyPackageQuery.java

@@ -0,0 +1,24 @@
+package com.hys.app.model.erp.entity;
+
+import com.hys.app.framework.database.BaseQueryParam;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+
+/**
+ * 部门表
+ */
+@Data
+public class CompanyPackageQuery extends BaseQueryParam {
+
+    @ApiModelProperty("状态")
+    private Boolean useAble;
+
+    @ApiModelProperty("套餐名称")
+    private String  name;
+
+
+}

+ 1 - 13
module-erp/src/main/java/com/hys/app/model/erp/entity/CompanyRenewDO.java

@@ -14,18 +14,6 @@ import java.time.LocalDateTime;
 @Getter
 @Setter
 public class CompanyRenewDO {
-    /**
-     * 使用截止时间
-     */
-    @ApiModelProperty("使用截止时间")
-    @NotNull(message = "使用截止时间不能为空")
-    private LocalDateTime endUseTime;
-    /**
-     * 最大创建账号数
-     */
-    @ApiModelProperty("最大创建账号数")
-    @NotNull(message = "最大创建账号数不能为空")
-    private Integer userNum;
     /**
      * 付款金额
      */
@@ -37,5 +25,5 @@ public class CompanyRenewDO {
      */
     @ApiModelProperty("套餐id")
     @NotNull(message = "套餐不能为空")
-    private Integer roleId;
+    private Long companyPackageId;
 }

+ 10 - 12
module-erp/src/main/java/com/hys/app/model/erp/entity/CompanyUpdateDO.java

@@ -30,18 +30,7 @@ public class CompanyUpdateDO {
     @ApiModelProperty("省")
     @NotBlank(message = "省不能为空")
     private String province;
-    /**
-     * 市
-     */
-    @ApiModelProperty("市")
-    @NotBlank(message = "市不能为空")
-    private String city;
-    /**
-     * 县
-     */
-    @ApiModelProperty("县")
-    @NotBlank(message = "县不能为空")
-    private String area;
+
     /**
      * 邮政编码
      */
@@ -69,4 +58,13 @@ public class CompanyUpdateDO {
      */
     @ApiModelProperty("官网")
     private String website;
+
+    /**
+     * 营业执照
+     */
+    @ApiModelProperty("营业执照")
+    @NotBlank(message = "营业执照不能为空")
+    private String license;
+
+
 }

+ 18 - 15
module-erp/src/main/java/com/hys/app/model/erp/entity/CompanyVO.java

@@ -1,17 +1,16 @@
 package com.hys.app.model.erp.entity;
 
-import com.hys.app.framework.database.mybatisplus.base.BaseDO;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.math.BigDecimal;
-import java.time.LocalDateTime;
+import java.util.Date;
 
 /**
  * 部门表
  */
 @Data
-public class CompanyVO extends BaseDO {
+public class CompanyVO  {
 
     private Long id;
     /**
@@ -44,16 +43,6 @@ public class CompanyVO extends BaseDO {
      */
     @ApiModelProperty("省")
     private String province;
-    /**
-     * 市
-     */
-    @ApiModelProperty("市")
-    private String city;
-    /**
-     * 县
-     */
-    @ApiModelProperty("县")
-    private String area;
     /**
      * 邮政编码
      */
@@ -83,7 +72,7 @@ public class CompanyVO extends BaseDO {
      * 使用截止时间
      */
     @ApiModelProperty("使用截止时间")
-    private LocalDateTime endUseTime;
+    private Date endUseTime;
 
     /**
      * 最大创建账号数
@@ -112,6 +101,20 @@ public class CompanyVO extends BaseDO {
      * 在职人数
      */
     @ApiModelProperty("在职人数")
-    private Integer currentUserNum;
+    private Integer currentUserNum = 0;
+
+
+    private Long createTime;
+
+    /**
+     * 本次付款金额
+     */
+    private BigDecimal thisMoney;
+
+    /**
+     * 本次购买天数
+     */
+    private Integer thisDay;
 
+    private Long companyPackageId;
 }

+ 1 - 1
module-erp/src/main/java/com/hys/app/model/erp/enums/MsgTypeEnum.java

@@ -10,7 +10,7 @@ import lombok.Getter;
  */
 @Getter
 public enum MsgTypeEnum {
-
+    SYSTEM("SYSTEM", "系统"),
     SMS("SMS", "短信"),
     MAIL("MAIL", "邮件");
 

+ 9 - 0
module-erp/src/main/java/com/hys/app/model/erp/vo/SmsMailTemplateVO.java

@@ -6,6 +6,8 @@ import com.hys.app.model.erp.enums.MsgTypeEnum;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.util.List;
+
 
 /**
  * 短信模板实体
@@ -23,6 +25,8 @@ public class SmsMailTemplateVO {
      */
     @TableId(type = IdType.ASSIGN_ID)
     private Long id;
+
+    private Long pid;
     /**
      * 模板类型短信还是邮件
      */
@@ -73,4 +77,9 @@ public class SmsMailTemplateVO {
      */
     @ApiModelProperty("审核未通过原因")
     private String failReason;
+
+    @ApiModelProperty("是否勾选")
+    private Boolean hasSelect;
+
+    List<SmsMailTemplateVO> child;
 }

+ 15 - 1
module-erp/src/main/java/com/hys/app/model/system/dos/AdminUser.java

@@ -15,6 +15,8 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import javax.validation.constraints.NotNull;
+
 
 /**
  * 平台管理员实体
@@ -24,7 +26,7 @@ import lombok.Data;
  * @since v7.0.0
  * 2018-06-20 20:38:26
  */
-@TableName("es_admin_user")
+@TableName("erp_company_user")
 @ApiModel
 @JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class)
 @Data
@@ -98,6 +100,10 @@ public class AdminUser implements Serializable {
      */
     @ApiModelProperty(name = "dept_id", value = "所属部门id", required = false)
     private Long deptId;
+
+    @ApiModelProperty(name = "dept_id", value = "是否是部门主管", required = false)
+    @NotNull(message = "是否是部门主管不能为空")
+    private Boolean hasDeptManager;
     /**
      * 所属岗位id
      */
@@ -117,6 +123,14 @@ public class AdminUser implements Serializable {
     @ApiModelProperty(name = "nickname", value = "公司id", required = false)
     private Long companyId;
 
+    private String firstPassword;
+
+    private String phone;
+
+    private String email;
+
+    @ApiModelProperty(name = "auth_ids", value = "角色介绍", required = false)
+    private String authIds;
 
     @Override
     public boolean equals(Object o) {

+ 8 - 1
module-erp/src/main/java/com/hys/app/model/system/dos/DeptDO.java

@@ -7,6 +7,7 @@ import com.hys.app.model.system.enums.DeptTypeEnum;
 import com.hys.app.framework.database.mybatisplus.base.BaseDO;
 import com.hys.app.framework.database.mybatisplus.type.LongListTypeHandler;
 import com.hys.app.framework.database.mybatisplus.type.StringListTypeHandler;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -15,7 +16,7 @@ import java.util.List;
 /**
  * 部门表
  */
-@TableName(value = "system_dept", autoResultMap = true)
+@TableName(value = "erp_company_dept", autoResultMap = true)
 @Data
 @EqualsAndHashCode(callSuper = true)
 public class DeptDO extends BaseDO {
@@ -65,4 +66,10 @@ public class DeptDO extends BaseDO {
      * 部门说明
      */
     private String remark;
+
+
+    private Long  roleId;
+
+    @ApiModelProperty(name = "auth_ids", value = "角色介绍", required = false)
+    private String authIds;
 }

+ 20 - 0
module-erp/src/main/java/com/hys/app/model/system/dos/RoleDO.java

@@ -65,6 +65,26 @@ public class RoleDO implements Serializable {
     @ApiModelProperty(name = "dept_ids", value = "部门id集合", required = false)
     private String deptIds;
 
+    private Long companyId;
+
+    public Long getCompanyId() {
+        return companyId;
+    }
+
+    public void setCompanyId(Long companyId) {
+        this.companyId = companyId;
+    }
+
+    public Long getDeptId() {
+        return deptId;
+    }
+
+    public void setDeptId(Long deptId) {
+        this.deptId = deptId;
+    }
+
+    private Long deptId;
+
     @PrimaryKeyField
     public Long getRoleId() {
         return roleId;

+ 2 - 0
module-erp/src/main/java/com/hys/app/model/system/dto/DeptQueryParams.java

@@ -20,4 +20,6 @@ public class DeptQueryParams {
     @ApiModelProperty(value = "只查询当前用户有权限的部门", hidden = true)
     private Set<Long> deptIds;
 
+    private Long companyId;
+
 }

+ 5 - 1
module-erp/src/main/java/com/hys/app/model/system/vo/AdminLoginVO.java

@@ -2,6 +2,7 @@ package com.hys.app.model.system.vo;
 
 import com.hys.app.model.erp.entity.Company;
 import com.hys.app.model.erp.entity.CompanyDO;
+import com.hys.app.model.erp.entity.CompanyErp;
 import lombok.Data;
 
 /**
@@ -52,6 +53,9 @@ public class AdminLoginVO {
      */
     private Long deptId;
 
-    private Company  companyVo;
+    private CompanyErp companyVo;
+
+
+    private Boolean hasDeptManager;
 
 }

+ 6 - 0
module-erp/src/main/java/com/hys/app/model/system/vo/AdminUserVO.java

@@ -75,6 +75,12 @@ public class AdminUserVO {
     @ApiModelProperty(name = "dept_id", value = "所属部门id", required = false)
     @NotNull(message = "所属部门不能为空")
     private Long deptId;
+    /**
+     * 所属部门id
+     */
+    @ApiModelProperty(name = "dept_id", value = "是否是部门主管", required = false)
+    @NotNull(message = "是否是部门主管不能为空")
+    private Boolean hasDeptManager;
     /**
      * 所属岗位id
      */

+ 4 - 0
module-erp/src/main/java/com/hys/app/model/system/vo/DeptBaseVO.java

@@ -45,4 +45,8 @@ public class DeptBaseVO {
     @ApiModelProperty(value = "所在地区名称")
     private List<String> regionNames;
 
+    @ApiModelProperty(value = "部门权限")
+    @NotBlank(message = "部门权限不能为空")
+    private Long  roleId;
+
 }

+ 7 - 39
module-erp/src/main/java/com/hys/app/model/system/vo/Menus.java

@@ -1,5 +1,7 @@
 package com.hys.app.model.system.vo;
 
+import lombok.Data;
+
 import java.util.List;
 
 /**
@@ -11,6 +13,7 @@ import java.util.List;
  * @since v7.0
  */
 
+@Data
 public class Menus {
     /**
      * 菜单标题
@@ -34,45 +37,10 @@ public class Menus {
      */
     private List<Menus> children;
 
-    public String getTitle() {
-        return title;
-    }
-
-    public void setTitle(String title) {
-        this.title = title;
-    }
-
-    public String getIdentifier() {
-        return identifier;
-    }
-
-    public void setIdentifier(String identifier) {
-        this.identifier = identifier;
-    }
-
-    public boolean isChecked() {
-        return checked;
-    }
-
-    public void setChecked(boolean checked) {
-        this.checked = checked;
-    }
-
-    public List<Menus> getChildren() {
-        return children;
-    }
-
-    public void setChildren(List<Menus> children) {
-        this.children = children;
-    }
-
-    public String getAuthRegular() {
-        return authRegular;
-    }
-
-    public void setAuthRegular(String authRegular) {
-        this.authRegular = authRegular;
-    }
+    /**
+     * 父id
+     */
+    private Long parentId;
 
     @Override
     public String toString() {

+ 1 - 0
module-erp/src/main/java/com/hys/app/pay/ali/AliPayService.java

@@ -34,6 +34,7 @@ public class AliPayService {
             model.setOutTradeNo(payOrder.getTraceNo());
             model.setTotalAmount(payOrder.getTotalAmount().toString());
             model.setSubject(payOrder.getSubject());
+            model.setPassbackParams(payOrder.getOrderPayType());
             request.setBizModel(model);
             request.setNotifyUrl(alipayConfig1.getNotifyUrl());
             AlipayTradeWapPayResponse response = alipayClient.pageExecute(request, "GET");

+ 2 - 0
module-erp/src/main/java/com/hys/app/pay/ali/PayOrder.java

@@ -21,4 +21,6 @@ public class PayOrder {
 
     private String openId;
 
+    private String orderPayType;//订单类型
+
 }

+ 24 - 0
module-erp/src/main/java/com/hys/app/service/erp/CompanyBandMsgManager.java

@@ -0,0 +1,24 @@
+package com.hys.app.service.erp;
+
+import com.hys.app.framework.database.mybatisplus.base.BaseService;
+import com.hys.app.model.erp.dos.AreaStock;
+import com.hys.app.model.erp.entity.CompanyBandMsg;
+
+import java.util.List;
+
+/**
+ * 出库单商品明细业务层接口
+ *
+ * @author 张崧
+ * @since 2023-12-07 17:06:32
+ */
+public interface CompanyBandMsgManager extends BaseService<CompanyBandMsg> {
+
+    /**
+     * 获取公司已经绑定的模板
+     * @param companyId
+     * @return
+     */
+    List<CompanyBandMsg>  getCompanyBandMsg(Long companyId);
+    List<String>  getCompanyBandMsgCode(Long companyId);
+}

+ 62 - 0
module-erp/src/main/java/com/hys/app/service/erp/CompanyErpManager.java

@@ -0,0 +1,62 @@
+package com.hys.app.service.erp;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.hys.app.framework.database.mybatisplus.base.BaseService;
+import com.hys.app.model.erp.entity.*;
+
+import java.math.BigDecimal;
+
+/**
+ * 部门 Service 接口
+ */
+public interface CompanyErpManager extends BaseService<CompanyErp> {
+    /**
+     * 创建公司
+     *
+     * @param companyDO
+     * @return
+     */
+    String createCompany(CompanyDO companyDO);
+
+    /**
+     * 修改公司
+     *
+     * @param companyUpdateDO
+     * @param id
+     * @return
+     */
+    Long updateCompany(CompanyUpdateDO companyUpdateDO, Long id);
+
+    /**
+     * 公司续费
+     *
+     * @param companyUpdateDO
+     * @param id
+     * @return
+     */
+    Long renewCompany( Long id,Long packageId);
+
+    /**
+     * 获取公司详情
+     *
+     * @param id
+     * @return
+     */
+    CompanyVO getOneCompany(Long id);
+
+    /**
+     * 分页
+     *
+     * @param query
+     * @return
+     */
+    IPage<CompanyVO> getPage(CompanyQuery query);
+
+    /**
+     * 更改套餐获取差价
+     *
+     * @param id
+     * @return
+     */
+    BigDecimal renewCompanyDifference(Long id);
+}

+ 1 - 1
module-erp/src/main/java/com/hys/app/service/erp/CompanyManager.java

@@ -16,7 +16,7 @@ public interface CompanyManager extends BaseService<Company> {
      * @param companyDO
      * @return
      */
-    Long createCompany(CompanyDO companyDO);
+    String createCompany(CompanyDO companyDO);
 
     /**
      * 修改公司

+ 2 - 0
module-erp/src/main/java/com/hys/app/service/erp/CompanyPackageManager.java

@@ -10,4 +10,6 @@ public interface CompanyPackageManager extends BaseService<CompanyPackage> {
 
     Long createCompanyPackage(CompanyPackageDO packageDo);
 
+
+    Long updateCompanyPackage(CompanyPackageDO packageDo, Long id);
 }

+ 34 - 0
module-erp/src/main/java/com/hys/app/service/erp/MessageReceiveManager.java

@@ -0,0 +1,34 @@
+package com.hys.app.service.erp;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.hys.app.framework.database.BaseQueryParam;
+import com.hys.app.framework.database.WebPage;
+import com.hys.app.framework.database.mybatisplus.base.BaseService;
+import com.hys.app.model.erp.dos.MessageReceiveDO;
+import com.hys.app.model.erp.dos.WarehouseAreaDO;
+import com.hys.app.model.erp.dto.WarehouseAreaQueryParams;
+import com.hys.app.model.erp.entity.MailSmsCountQuery;
+import com.hys.app.model.erp.vo.ProductStockVO;
+import com.hys.app.model.erp.vo.WarehouseAreaVO;
+import org.springframework.web.bind.annotation.PathVariable;
+
+import java.util.List;
+
+/**
+ * 出库单商品明细业务层接口
+ *
+ * @author 张崧
+ * @since 2023-12-07 17:06:32
+ */
+public interface MessageReceiveManager extends BaseService<MessageReceiveDO> {
+
+    /**
+     * 获取
+     * @param query
+     * @return
+     */
+    IPage<MessageReceiveDO> getPage(BaseQueryParam query,  String type);
+
+}
+

+ 11 - 0
module-erp/src/main/java/com/hys/app/service/erp/SmsMailManager.java

@@ -5,9 +5,12 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.hys.app.framework.database.mybatisplus.base.BaseService;
 import com.hys.app.model.erp.dos.SmsMailTemplate;
 import com.hys.app.model.erp.dto.SmsMailTemplateDTO;
+import com.hys.app.model.erp.enums.MsgTypeEnum;
 import com.hys.app.model.erp.vo.SmsMailTemplateQuery;
 import com.hys.app.model.erp.vo.SmsMailTemplateVO;
 
+import java.util.List;
+
 /**
  * 部门 Service 接口
  */
@@ -44,4 +47,12 @@ public interface SmsMailManager extends BaseService<SmsMailTemplate> {
      * @return
      */
     void delete(Long id);
+
+    /**
+     * 创建消息获取上级消息
+     *
+     * @param type
+     * @return
+     */
+    List<SmsMailTemplate> getSysNotBand(MsgTypeEnum type);
 }

+ 73 - 0
module-erp/src/main/java/com/hys/app/service/erp/impl/CompanyBandMsgManagerImpl.java

@@ -0,0 +1,73 @@
+package com.hys.app.service.erp.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.hys.app.controller.erp.use.msg.MsgUtilClient;
+import com.hys.app.controller.erp.use.msg.msgTemplate.MailMsgContant;
+import com.hys.app.controller.erp.use.msg.msgTemplate.MailMsgDefault;
+import com.hys.app.controller.erp.use.msg.msgTemplate.SystemMsgContent;
+import com.hys.app.controller.erp.use.msg.msgTemplate.SystemMsgTemplate;
+import com.hys.app.converter.erp.CompanyConverter;
+import com.hys.app.framework.context.user.AdminUserContext;
+import com.hys.app.framework.exception.ServiceException;
+import com.hys.app.framework.util.StringUtil;
+import com.hys.app.mapper.erp.CompanyBandMsgMapper;
+import com.hys.app.mapper.erp.CompanyErpMapper;
+import com.hys.app.mapper.system.AdminUserMapper;
+import com.hys.app.model.erp.entity.*;
+import com.hys.app.model.system.dos.AdminUser;
+import com.hys.app.service.erp.CompanyBandMsgManager;
+import com.hys.app.service.erp.CompanyErpManager;
+import com.hys.app.service.erp.CompanyPackageManager;
+import com.hys.app.util.PinYingUtil;
+import com.hys.app.util.ValidateUtil;
+import lombok.AllArgsConstructor;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+import java.util.Random;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+/**
+ * 平台管理员业务类
+ *
+ * @author zh
+ * @version v7.0
+ * @since v7.0.0
+ * 2018-06-20 20:38:26
+ */
+@Service
+@AllArgsConstructor
+public class CompanyBandMsgManagerImpl extends ServiceImpl<CompanyBandMsgMapper, CompanyBandMsg> implements CompanyBandMsgManager {
+
+    private RedisTemplate redisTemplate;
+
+    @Override
+    public List<CompanyBandMsg> getCompanyBandMsg(Long companyId) {
+        List<CompanyBandMsg> msgs = (List<CompanyBandMsg>) redisTemplate.opsForHash().get("companyTemplate", companyId.toString());
+        if (CollUtil.isEmpty(msgs)) {
+            msgs = list(new LambdaQueryWrapper<CompanyBandMsg>().eq(CompanyBandMsg::getCompanyId, companyId));
+        }
+        redisTemplate.opsForHash().put("companyTemplate", companyId.toString(), msgs);
+        return msgs;
+    }
+
+    @Override
+    public List<String> getCompanyBandMsgCode(Long companyId) {
+        List<CompanyBandMsg> companyBandMsg = getCompanyBandMsg(companyId);
+        return companyBandMsg.stream().map(CompanyBandMsg::getTemplateCode).collect(Collectors.toList());
+    }
+}

+ 219 - 0
module-erp/src/main/java/com/hys/app/service/erp/impl/CompanyErpManagerImpl.java

@@ -0,0 +1,219 @@
+package com.hys.app.service.erp.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.hys.app.controller.erp.use.msg.MsgUtilClient;
+import com.hys.app.controller.erp.use.msg.msgTemplate.MailMsgContant;
+import com.hys.app.controller.erp.use.msg.msgTemplate.MailMsgDefault;
+import com.hys.app.controller.erp.use.msg.msgTemplate.SystemMsgContent;
+import com.hys.app.controller.erp.use.msg.msgTemplate.SystemMsgTemplate;
+import com.hys.app.converter.erp.CompanyConverter;
+import com.hys.app.framework.context.user.AdminUserContext;
+import com.hys.app.framework.exception.ServiceException;
+import com.hys.app.framework.util.JsonUtil;
+import com.hys.app.framework.util.StringUtil;
+import com.hys.app.mapper.erp.CompanyErpMapper;
+import com.hys.app.mapper.system.AdminUserMapper;
+import com.hys.app.mapper.system.RoleMapper;
+import com.hys.app.model.erp.entity.*;
+import com.hys.app.model.system.dos.AdminUser;
+import com.hys.app.model.system.dos.RoleDO;
+import com.hys.app.model.system.vo.Menus;
+import com.hys.app.service.erp.CompanyBandMsgManager;
+import com.hys.app.service.erp.CompanyErpManager;
+import com.hys.app.service.erp.CompanyPackageManager;
+import com.hys.app.util.PinYingUtil;
+import com.hys.app.util.ValidateUtil;
+import lombok.AllArgsConstructor;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+import java.util.Random;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+/**
+ * 平台管理员业务类
+ *
+ * @author zh
+ * @version v7.0
+ * @since v7.0.0
+ * 2018-06-20 20:38:26
+ */
+@Service
+@AllArgsConstructor
+public class CompanyErpManagerImpl extends ServiceImpl<CompanyErpMapper, CompanyErp> implements CompanyErpManager {
+    private RedisTemplate redisTemplate;
+    private CompanyPackageManager companyPackageManager;
+    private AdminUserMapper adminUserMapper;
+    private MsgUtilClient msgUtilClient;
+    private CompanyBandMsgManager companyBandMsgManager;
+    private RoleMapper roleMapper;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public String createCompany(CompanyDO companyDO) {
+        CompanyPackage byId = companyPackageManager.getById(companyDO.getCompanyPackageId());
+        if (ObjectUtil.isNull(byId)) {
+            throw new ServiceException("套餐不存在");
+        }
+        CompanyErp convert = CompanyConverter.INSTANCE.convert(companyDO);
+
+        convert.setThisDay(byId.getDay());
+        convert.setThisMoney(byId.getMoney());
+        convert.setThisRoleId(byId.getId());
+        convert.setThisUserNum(byId.getUserNum());
+        convert.setThisCompanyPackageId(byId.getId());
+
+        convert.setRoleId(byId.getRoleId());
+        convert.setUserNum(byId.getUserNum());
+        convert.setMoney(new BigDecimal(0));
+
+        checkParam(convert);
+
+        Date currentDate = new Date();
+        // 使用 Calendar 加上15天
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(currentDate);
+        calendar.add(Calendar.DAY_OF_MONTH, 15);
+        convert.setEndUseTime(calendar.getTime());
+        convert.setPinying(PinYingUtil.toPinyin(companyDO.getName()));
+        String pinyinFirstLetter = PinYingUtil.toPinyinFirstLetter(companyDO.getName());
+        convert.setFirstPy(pinyinFirstLetter);
+        convert.setFirstPyLower(pinyinFirstLetter.toLowerCase());
+
+
+
+        save(convert);
+        //给公司创建初始账号
+        String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
+        StringBuilder sb = new StringBuilder();
+        Random random = new Random();
+        for (int i = 0; i < 6; i++) {
+            int index = random.nextInt(characters.length());
+            sb.append(characters.charAt(index));
+        }
+        String password = sb.toString();
+        //管理员信息入库
+        AdminUser adminUser = new AdminUser();
+        adminUser.setCompanyId(convert.getId());
+        adminUser.setUsername("admin");
+        adminUser.setRoleId(convert.getRoleId());
+        adminUser.setFounder(0);
+        adminUser.setNickname(convert.getName() + "管理员");
+        adminUser.setPassword(StringUtil.md5(password));
+
+        adminUser.setDateLine(com.hys.app.framework.util.DateUtil.getDateline());
+        adminUser.setUserState(0);
+        adminUser.setFirstPassword(password);
+        adminUser.setPhone(convert.getPhone());
+        adminUser.setEmail(convert.getEmail());
+        //把这个管理员能看到的所有页面保存起来
+        RoleDO roleDO = roleMapper.selectById(byId.getRoleId());
+        List<Menus> menus = JsonUtil.jsonToList(roleDO.getAuthIds(), Menus.class);
+        List<Menus> collect = menus.stream().filter(Menus::isChecked).collect(Collectors.toList());
+        adminUser.setAuthIds(JSON.toJSONString(collect));
+        adminUserMapper.insert(adminUser);
+        //  发消息
+        msgUtilClient.sendSys(SystemMsgContent.CREATE_SUCCESS_SYSTEM, SystemMsgTemplate.CREATE_SUCCESS_SYSTEM, adminUser.getId(), convert.getId(), password, calendar.getTime().toString());
+
+        List<String> companyBandMsg = companyBandMsgManager.getCompanyBandMsgCode(convert.getId());
+        if (companyBandMsg.contains(MailMsgContant.CREATE_SUCCESS_MAIL)) {
+            msgUtilClient.sendMail(MailMsgContant.CREATE_SUCCESS_MAIL, MailMsgDefault.CREATE_SUCCESS_MAIL, MailMsgDefault.CREATE_SUCCESS_HEAD_MAIL, convert.getEmail(), convert.getId(), password, calendar.getTime().toString());
+        }
+        return password;
+    }
+
+    @Override
+    public Long updateCompany(CompanyUpdateDO companyUpdateDO, Long id) {
+        CompanyErp company = ValidateUtil.getOne(baseMapper, CompanyErp::getId, id, "企业");
+        CompanyConverter.INSTANCE.convert(company, companyUpdateDO);
+        updateById(company);
+        return id;
+    }
+
+    @Override
+    public Long renewCompany(Long id, Long packageId) {
+        CompanyErp byId = getById(id);
+        if (ObjectUtil.isNull(byId)) {
+            throw new ServiceException("未查询到公司信息");
+        }
+        CompanyPackage companyPackage = companyPackageManager.getById(packageId);
+        if (ObjectUtil.isNull(companyPackage)) {
+            throw new ServiceException("未查询到套餐包");
+        }
+        byId.setThisCompanyPackageId(packageId);
+        byId.setThisMoney(companyPackage.getMoney().add(renewCompanyDifference(packageId)));
+        byId.setThisDay(companyPackage.getDay());
+        byId.setThisUserNum(companyPackage.getUserNum());
+        byId.setThisRoleId(companyPackage.getRoleId());
+        updateById(byId);
+        return null;
+    }
+
+    @Override
+    public CompanyVO getOneCompany(Long id) {
+        return CompanyConverter.INSTANCE.convert(ValidateUtil.getOne(baseMapper, CompanyErp::getId, id, "企业"));
+    }
+
+    @Override
+    public IPage<CompanyVO> getPage(CompanyQuery query) {
+
+        Page<CompanyErp> page = this.baseMapper.selectPage(new Page<>(query.getPageNo(), query.getPageSize()),
+                new LambdaQueryWrapper<CompanyErp>().like(StrUtil.isNotBlank(query.getName()), CompanyErp::getName, query.getName())
+                        .like(StrUtil.isNotBlank(query.getIndustry()), CompanyErp::getIndustry, query.getIndustry())
+                        .like(StrUtil.isNotBlank(query.getUserName()), CompanyErp::getUserName, query.getUserName())
+                        .ge(ObjectUtil.isNotNull(query.getHasUse()), CompanyErp::getEndUseTime, LocalDateTime.now())
+                        .eq(!AdminUserContext.hasFound(), CompanyErp::getId, AdminUserContext.getCompanyId()));
+        Page<CompanyVO> convert = CompanyConverter.INSTANCE.convert(page);
+        for (CompanyVO vo : convert.getRecords()) {
+            //todo 人员做好了之后统计人数
+            vo.setCurrentUserNum(1);
+        }
+        return convert;
+    }
+
+    @Override
+    public BigDecimal renewCompanyDifference(Long id) {
+        CompanyErp company = getById(AdminUserContext.getCompanyId());
+        if (id.equals(company.getCompanyPackageId())) {
+            return BigDecimal.valueOf(0);
+        }
+        CompanyPackage changePackage = companyPackageManager.getById(id);
+        CompanyPackage usePackage = companyPackageManager.getById(company.getCompanyPackageId());
+        BigDecimal subtract = changePackage.getMoney().divide(BigDecimal.valueOf(changePackage.getDay()))
+                .subtract(usePackage.getMoney().divide(BigDecimal.valueOf(usePackage.getDay())));
+        if (subtract.compareTo(BigDecimal.ZERO) < 0) {
+            return BigDecimal.ZERO;
+        }
+        long betweenDay = DateUtil.betweenDay(new Date(), company.getEndUseTime(), true);
+        return subtract.multiply(BigDecimal.valueOf(betweenDay));
+    }
+
+
+    private void checkParam(CompanyErp convert) {
+        if (Pattern.matches(".*[\\u4e00-\\u9fa5\\p{P}].*", convert.getCreditCode())) {
+            throw new ServiceException("统一社会信用代码不能包含中文和特殊符号");
+        }
+        if (ValidateUtil.checkRepeat(baseMapper, CompanyErp::getCreditCode, convert.getCreditCode(), CompanyErp::getId, convert.getId())) {
+            throw new ServiceException("统一社会代码已存在");
+        }
+        if (ValidateUtil.checkRepeat(baseMapper, CompanyErp::getName, convert.getName(), CompanyErp::getId, convert.getId())) {
+            throw new ServiceException("公司名称重复");
+        }
+    }
+
+}

+ 172 - 118
module-erp/src/main/java/com/hys/app/service/erp/impl/CompanyManagerImpl.java

@@ -1,118 +1,172 @@
-package com.hys.app.service.erp.impl;
-
-import cn.hutool.core.date.DateUtil;
-import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.core.util.StrUtil;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.hys.app.converter.erp.CompanyConverter;
-import com.hys.app.framework.context.user.AdminUserContext;
-import com.hys.app.framework.exception.ServiceException;
-import com.hys.app.mapper.erp.CompanyMapper;
-import com.hys.app.model.erp.entity.*;
-import com.hys.app.service.erp.CompanyManager;
-import com.hys.app.service.erp.CompanyPackageManager;
-import com.hys.app.util.ValidateUtil;
-import lombok.AllArgsConstructor;
-import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.stereotype.Service;
-
-import java.math.BigDecimal;
-import java.time.LocalDateTime;
-import java.time.ZoneId;
-import java.util.Date;
-import java.util.regex.Pattern;
-
-/**
- * 平台管理员业务类
- *
- * @author zh
- * @version v7.0
- * @since v7.0.0
- * 2018-06-20 20:38:26
- */
-@Service
-@AllArgsConstructor
-public class CompanyManagerImpl extends ServiceImpl<CompanyMapper, Company> implements CompanyManager {
-
-    private RedisTemplate redisTemplate;
-    private CompanyPackageManager companyPackageManager;
-
-    @Override
-    public Long createCompany(CompanyDO companyDO) {
-        //todo 需要调起支付在支付的回调里面更改公司的使用状态
-        Company convert = CompanyConverter.INSTANCE.convert(companyDO);
-        checkParam(convert);
-        convert.setEndUseTime(LocalDateTime.now().plusDays(15));
-        save(convert);
-        return convert.getId();
-    }
-
-    @Override
-    public Long updateCompany(CompanyUpdateDO companyUpdateDO, Long id) {
-        Company company = ValidateUtil.getOne(baseMapper, Company::getId, id, "企业");
-        CompanyConverter.INSTANCE.convert(company, companyUpdateDO);
-        updateById(company);
-        return id;
-    }
-
-    @Override
-    public Long renewCompany(CompanyRenewDO companyUpdateDO, Long id) {
-        redisTemplate.opsForHash().put("company", id, companyUpdateDO);
-        //todo  如果没到期就续费并更改了套餐和人数需要计算出来差价,在付款了之后再回调里面更改状态和到期时间
-        return null;
-    }
-
-    @Override
-    public CompanyVO getOneCompany(Long id) {
-        return CompanyConverter.INSTANCE.convert(ValidateUtil.getOne(baseMapper, Company::getId, id, "企业"));
-    }
-
-    @Override
-    public IPage<CompanyVO> getPage(CompanyQuery query) {
-        Page<Company> page = page(new Page<>(query.getPageNo(), query.getPageSize()),
-                new LambdaQueryWrapper<Company>().like(StrUtil.isNotBlank(query.getName()), Company::getName, query.getName())
-                        .like(StrUtil.isNotBlank(query.getIndustry()), Company::getIndustry, query.getIndustry())
-                        .like(StrUtil.isNotBlank(query.getUserName()), Company::getUserName, query.getUserName())
-                        .ge(ObjectUtil.isNotNull(query. getHasUse()), Company::getEndUseTime, LocalDateTime.now())
-                        .eq(!AdminUserContext.hasFound(),Company::getId,AdminUserContext.getCompanyId()));
-        Page<CompanyVO> convert = CompanyConverter.INSTANCE.convert(page);
-        for (CompanyVO vo : convert.getRecords()) {
-            //todo 人员做好了之后统计人数
-            vo.setCurrentUserNum(1);
-        }
-        return convert;
-    }
-
-    @Override
-    public BigDecimal renewCompanyDifference(Long id) {
-        Company company =getById(AdminUserContext.getCompanyId());
-        CompanyPackage changePackage = companyPackageManager.getById(id);
-        CompanyPackage usePackage = companyPackageManager.getById(company.getCompanyPackageId());
-        BigDecimal subtract = changePackage.getMoney().divide(BigDecimal.valueOf(changePackage.getDay()))
-                .subtract(usePackage.getMoney().divide(BigDecimal.valueOf(usePackage.getDay())));
-        if (subtract.compareTo(BigDecimal.ZERO)<0){
-            return BigDecimal.ZERO;
-        }
-        long betweenDay = DateUtil.betweenDay(Date.from(LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant()),
-                Date.from(company.getEndUseTime().atZone(ZoneId.systemDefault()).toInstant()),
-                true);
-        return subtract.multiply(BigDecimal.valueOf(betweenDay));
-    }
-
-
-
-    private void checkParam(Company convert) {
-        if (Pattern.matches(".*[\\u4e00-\\u9fa5\\p{P}].*", convert.getCreditCode())){
-            throw new ServiceException("统一社会信用代码不能包含中文和特殊符号");
-        }
-        if (ValidateUtil.checkRepeat(baseMapper, Company::getCreditCode, convert.getCreditCode(), Company::getId, convert.getId())) {
-            throw new ServiceException("统一社会代码已存在");
-        }
-        if (ValidateUtil.checkRepeat(baseMapper, Company::getName, convert.getName(), Company::getId, convert.getId())) {
-            throw new ServiceException("公司名称重复");
-        }
-    }
-}
+//package com.hys.app.service.erp.impl;
+//
+//import cn.hutool.core.date.DateUtil;
+//import cn.hutool.core.util.ObjectUtil;
+//import cn.hutool.core.util.StrUtil;
+//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+//import com.baomidou.mybatisplus.core.metadata.IPage;
+//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+//import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+//import com.hys.app.converter.erp.CompanyConverter;
+//import com.hys.app.framework.context.user.AdminUserContext;
+//import com.hys.app.framework.exception.ServiceException;
+//import com.hys.app.framework.util.StringUtil;
+//import com.hys.app.mapper.erp.CompanyMapper;
+//import com.hys.app.mapper.system.AdminUserMapper;
+//import com.hys.app.model.erp.dos.ProductStockDO;
+//import com.hys.app.model.erp.entity.*;
+//import com.hys.app.model.system.dos.AdminUser;
+//import com.hys.app.service.erp.CompanyManager;
+//import com.hys.app.service.erp.CompanyPackageManager;
+//import com.hys.app.util.PinYingUtil;
+//import com.hys.app.util.ValidateUtil;
+//import lombok.AllArgsConstructor;
+//import org.springframework.data.redis.core.RedisTemplate;
+//import org.springframework.stereotype.Service;
+//
+//import java.math.BigDecimal;
+//import java.time.LocalDateTime;
+//import java.time.ZoneId;
+//import java.util.Date;
+//import java.util.List;
+//import java.util.Random;
+//import java.util.regex.Pattern;
+//
+///**
+// * 平台管理员业务类
+// *
+// * @author zh
+// * @version v7.0
+// * @since v7.0.0
+// * 2018-06-20 20:38:26
+// */
+//@Service
+//@AllArgsConstructor
+//public class CompanyManagerImpl extends ServiceImpl<CompanyMapper, Company> implements CompanyManager {
+//
+//    private RedisTemplate redisTemplate;
+//    private CompanyPackageManager companyPackageManager;
+//    private AdminUserMapper adminUserMapper;
+//
+//    @Override
+//    public String createCompany(CompanyDO companyDO) {
+//        CompanyPackage byId = companyPackageManager.getById(companyDO.getCompanyPackageId());
+//        if (ObjectUtil.isNull(byId)){
+//            throw new ServiceException("套餐不存在");
+//        }
+//        CompanyErp convert = CompanyConverter.INSTANCE.convert(companyDO);
+//        convert.setThisDay(byId.getDay());
+//        convert.setThisMoney(byId.getMoney());
+//        convert.setRoleId(byId.getRoleId());
+//        convert.setUserNum(byId.getUserNum());
+//        checkParam(convert);
+//        convert.setEndUseTime(LocalDateTime.now().plusDays(15));
+//        convert.setPinying(PinYingUtil.toPinyin(companyDO.getName()));
+//        convert.setFirstPy(PinYingUtil.toPinyinFirstLetter(companyDO.getName()));
+//        save(convert);
+//
+//        //给公司创建初始账号
+//        String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
+//        StringBuilder sb = new StringBuilder();
+//        Random random = new Random();
+//        for (int i = 0; i < 6; i++) {
+//            int index = random.nextInt(characters.length());
+//            sb.append(characters.charAt(index));
+//        }
+//        String password = sb.toString();
+//
+//        //管理员信息入库
+//        AdminUser adminUser = new AdminUser();
+//        adminUser.setCompanyId(convert.getId());
+//        adminUser.setUsername("admin");
+//        adminUser.setRoleId(convert.getRoleId());
+//        adminUser.setFounder(0);
+//        adminUser.setNickname(convert.getName()+"管理员");
+//        adminUser.setPassword(StringUtil.md5(password + adminUser.getUsername().toLowerCase()));
+//        adminUser.setDateLine(com.hys.app.framework.util.DateUtil.getDateline());
+//        adminUser.setUserState(0);
+//        adminUser.setFirstPassword(password);
+//        adminUser.setPhone(convert.getPhone());
+//        adminUser.setEmail(convert.getEmail());
+//        adminUserMapper.insert(adminUser);
+//        //todo  发消息
+//        return password;
+//    }
+//
+//    @Override
+//    public Long updateCompany(CompanyUpdateDO companyUpdateDO, Long id) {
+//        Company company = ValidateUtil.getOne(baseMapper, Company::getId, id, "企业");
+//        CompanyConverter.INSTANCE.convert(company, companyUpdateDO);
+//        updateById(company);
+//        return id;
+//    }
+//
+//    @Override
+//    public Long renewCompany(CompanyRenewDO companyUpdateDO, Long id) {
+//        redisTemplate.opsForHash().put("company", id, companyUpdateDO);
+//        //todo  如果没到期就续费并更改了套餐和人数需要计算出来差价,在付款了之后再回调里面更改状态和到期时间
+//        return null;
+//    }
+//
+//    @Override
+//    public CompanyVO getOneCompany(Long id) {
+//        return CompanyConverter.INSTANCE.convert(ValidateUtil.getOne(baseMapper, Company::getId, id, "企业"));
+//    }
+//
+//    @Override
+//    public IPage<CompanyVO> getPage(CompanyQuery query) {
+//        CompanyPackage changePackage = companyPackageManager.getById(1810563436374044674L);
+//        Company company = getById(56474);
+//        List<Company> list1 = list();
+//
+//        List<Company> list = list(new LambdaQueryWrapper<Company>().like(StrUtil.isNotBlank(query.getName()), Company::getName, query.getName())
+//                .like(StrUtil.isNotBlank(query.getIndustry()), Company::getIndustry, query.getIndustry())
+//                .like(StrUtil.isNotBlank(query.getUserName()), Company::getUserName, query.getUserName())
+//                .ge(ObjectUtil.isNotNull(query.getHasUse()), Company::getEndUseTime, LocalDateTime.now())
+//                .eq(!AdminUserContext.hasFound(), Company::getId, AdminUserContext.getCompanyId()));
+//
+//
+//        Page<Company> page = this.baseMapper.selectPage(new Page<>(query.getPageNo(), query.getPageSize()),
+//                new LambdaQueryWrapper<Company>().like(StrUtil.isNotBlank(query.getName()), Company::getName, query.getName())
+//                        .like(StrUtil.isNotBlank(query.getIndustry()), Company::getIndustry, query.getIndustry())
+//                        .like(StrUtil.isNotBlank(query.getUserName()), Company::getUserName, query.getUserName())
+//                        .ge(ObjectUtil.isNotNull(query. getHasUse()), Company::getEndUseTime, LocalDateTime.now())
+//                        .eq(!AdminUserContext.hasFound(),Company::getId,AdminUserContext.getCompanyId()));
+//        Page<CompanyVO> convert = CompanyConverter.INSTANCE.convert(page);
+//        for (CompanyVO vo : convert.getRecords()) {
+//            //todo 人员做好了之后统计人数
+//            vo.setCurrentUserNum(1);
+//        }
+//        return convert;
+//    }
+//
+//    @Override
+//    public BigDecimal renewCompanyDifference(Long id) {
+//        Company company =getById(AdminUserContext.getCompanyId());
+//        CompanyPackage changePackage = companyPackageManager.getById(id);
+//        CompanyPackage usePackage = companyPackageManager.getById(company.getCompanyPackageId());
+//        BigDecimal subtract = changePackage.getMoney().divide(BigDecimal.valueOf(changePackage.getDay()))
+//                .subtract(usePackage.getMoney().divide(BigDecimal.valueOf(usePackage.getDay())));
+//        if (subtract.compareTo(BigDecimal.ZERO)<0){
+//            return BigDecimal.ZERO;
+//        }
+//        long betweenDay = DateUtil.betweenDay(Date.from(LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant()),
+//                Date.from(company.getEndUseTime().atZone(ZoneId.systemDefault()).toInstant()),
+//                true);
+//        return subtract.multiply(BigDecimal.valueOf(betweenDay));
+//    }
+//
+//
+//
+//    private void checkParam(Company convert) {
+//        if (Pattern.matches(".*[\\u4e00-\\u9fa5\\p{P}].*", convert.getCreditCode())){
+//            throw new ServiceException("统一社会信用代码不能包含中文和特殊符号");
+//        }
+//        if (ValidateUtil.checkRepeat(baseMapper, Company::getCreditCode, convert.getCreditCode(), Company::getId, convert.getId())) {
+//            throw new ServiceException("统一社会代码已存在");
+//        }
+//        if (ValidateUtil.checkRepeat(baseMapper, Company::getName, convert.getName(), Company::getId, convert.getId())) {
+//            throw new ServiceException("公司名称重复");
+//        }
+//    }
+//}

+ 10 - 0
module-erp/src/main/java/com/hys/app/service/erp/impl/CompanyPackageManagerImpl.java

@@ -1,5 +1,6 @@
 package com.hys.app.service.erp.impl;
 
+import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.hys.app.converter.erp.CompanyPackageConverter;
 import com.hys.app.framework.exception.ServiceException;
@@ -30,6 +31,15 @@ public class CompanyPackageManagerImpl extends ServiceImpl<CompanyPackageMapper,
         return convert.getId();
     }
 
+    @Override
+    public Long updateCompanyPackage(CompanyPackageDO packageDo, Long id) {
+        CompanyPackage convert = getById(id);
+        BeanUtil.copyProperties(packageDo,convert);
+        checkParam(convert);
+        updateById(convert);
+        return id;
+    }
+
     private void checkParam(CompanyPackage convert) {
         if (ValidateUtil.checkRepeat(baseMapper, CompanyPackage::getName, convert.getName(), CompanyPackage::getId, convert.getId())) {
             throw new ServiceException("套餐名称重复");

+ 0 - 2
module-erp/src/main/java/com/hys/app/service/erp/impl/GoodsManagerImpl.java

@@ -95,7 +95,6 @@ public class GoodsManagerImpl extends BaseServiceImpl<GoodsMapper, GoodsDO> impl
     @Transactional(rollbackFor = Exception.class)
     public void edit(GoodsDTO goodsDTO,Long id) {
         GoodsDO goodsDO = ValidateUtil.getOne(baseMapper, GoodsDO::getId, id, "商品");
-        AdminUserContext.compareCompany(goodsDO.getCompanyId());
         checkParams(goodsDTO);
         // 更新商品
         BeanUtil.copyProperties(goodsDTO, goodsDO);
@@ -194,7 +193,6 @@ public class GoodsManagerImpl extends BaseServiceImpl<GoodsMapper, GoodsDO> impl
     @Transactional(rollbackFor = Exception.class)
     public void delete(Long id) {
         GoodsDO goodsDO = ValidateUtil.getOne(baseMapper, GoodsDO::getId, id, "商品");
-        AdminUserContext.compareCompany(goodsDO.getCompanyId());
         if (goodsDO.getMarketEnable()) {
             throw new ServiceException("请先下架商品");
         }

+ 2 - 2
module-erp/src/main/java/com/hys/app/service/erp/impl/MailSmsCountManagerImpl.java

@@ -12,8 +12,8 @@ import com.hys.app.model.erp.dos.MailSmsCountDO;
 import com.hys.app.model.erp.entity.MailSmsCountQuery;
 import com.hys.app.model.erp.vo.MailSmsCountVO;
 import com.hys.app.service.erp.MailSmsCountManager;
-import com.hys.app.util.AliSmsUtil;
-import com.hys.app.util.MailSmtpUtil;
+import com.hys.app.controller.erp.use.msg.AliSmsUtil;
+import com.hys.app.controller.erp.use.msg.MailSmtpUtil;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 

+ 34 - 0
module-erp/src/main/java/com/hys/app/service/erp/impl/MessageReceiveManagerImpl.java

@@ -0,0 +1,34 @@
+package com.hys.app.service.erp.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.hys.app.framework.context.user.AdminUserContext;
+import com.hys.app.framework.database.BaseQueryParam;
+import com.hys.app.framework.database.mybatisplus.base.BaseServiceImpl;
+import com.hys.app.mapper.erp.MessageReceiveMapper;
+import com.hys.app.model.erp.dos.MessageReceiveDO;
+import com.hys.app.model.erp.entity.MailSmsCountQuery;
+import com.hys.app.service.erp.MessageReceiveManager;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+ * 出库单商品明细业务层实现
+ *
+ * @author 张崧
+ * @since 2023-12-07 17:06:32
+ */
+@Service
+@AllArgsConstructor
+public class MessageReceiveManagerImpl extends BaseServiceImpl<MessageReceiveMapper, MessageReceiveDO> implements MessageReceiveManager {
+
+    @Override
+    public IPage<MessageReceiveDO> getPage(BaseQueryParam query, String type) {
+        return page(new Page<>(query.getPageNo(), query.getPageSize()),
+                new LambdaQueryWrapper<MessageReceiveDO>().eq(MessageReceiveDO::getType, type)
+                        .eq(ObjectUtil.isNotNull(AdminUserContext.getCompanyId()), MessageReceiveDO::getCompanyId, AdminUserContext.getCompanyId()));
+    }
+}
+

+ 57 - 3
module-erp/src/main/java/com/hys/app/service/erp/impl/SmsMailManagerImpl.java

@@ -20,14 +20,20 @@ import com.hys.app.model.erp.enums.MsgTypeEnum;
 import com.hys.app.model.erp.vo.SmsMailTemplateQuery;
 import com.hys.app.model.erp.vo.SmsMailTemplateVO;
 import com.hys.app.service.erp.SmsMailManager;
-import com.hys.app.util.AliSmsUtil;
+import com.hys.app.controller.erp.use.msg.AliSmsUtil;
 import com.hys.app.util.ValidateUtil;
 import lombok.AllArgsConstructor;
+import me.chanjar.weixin.common.error.WxErrorException;
+import me.chanjar.weixin.mp.api.WxMpService;
+import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
+import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
+import java.util.Set;
 import java.util.regex.Pattern;
+import java.util.stream.Collectors;
 
 /**
  * 平台管理员业务类
@@ -46,8 +52,10 @@ public class SmsMailManagerImpl extends ServiceImpl<SmsMailMapper, SmsMailTempla
         SmsMailTemplate convert = SmsMailConverter.INSTANCE.convert(smsMailTemplateDTO);
         checkParam(convert);
         //如果是短信模板向短信平台提交申请
-        String smsTemplateCode = AliSmsUtil.createSmsTemplate(smsMailTemplateDTO.getTemplateType(), smsMailTemplateDTO.getName(), smsMailTemplateDTO.getContent(), smsMailTemplateDTO.getRemark());
-        convert.setTemplateCode(smsTemplateCode);
+        if (convert.getType().equals(MsgTypeEnum.SMS)){
+            String smsTemplateCode = AliSmsUtil.createSmsTemplate(smsMailTemplateDTO.getTemplateType(), smsMailTemplateDTO.getName(), smsMailTemplateDTO.getContent(), smsMailTemplateDTO.getRemark());
+            convert.setTemplateCode(smsTemplateCode);
+        }
         save(convert);
         return convert.getId();
     }
@@ -66,8 +74,27 @@ public class SmsMailManagerImpl extends ServiceImpl<SmsMailMapper, SmsMailTempla
             updateById(template);
             return template.getId();
         }
+        updateById(template);
         return null;
     }
+
+    private static WxMpService wxService;
+
+    static {
+        WxMpDefaultConfigImpl config = new WxMpDefaultConfigImpl();
+        config.setAppId("你的AppID");
+        config.setSecret("你的AppSecret");
+        wxService = new WxMpServiceImpl();
+        wxService.setWxMpConfigStorage(config);
+    }
+
+    public static String applyTemplate(String shortTemplateId) throws WxErrorException {
+        String templateId = wxService.getTemplateMsgService().addTemplate(shortTemplateId);
+        System.out.println("成功添加模板,模板ID: " + templateId);
+        return templateId;
+    }
+
+
     @Override
     public IPage<SmsMailTemplateVO> queryTemplate(SmsMailTemplateQuery query) {
         Page<SmsMailTemplate> page = page(new Page<>(query.getPageNo(), query.getPageSize()), new LambdaQueryWrapper<SmsMailTemplate>()
@@ -87,7 +114,23 @@ public class SmsMailManagerImpl extends ServiceImpl<SmsMailMapper, SmsMailTempla
         removeById(id);
     }
 
+    @Override
+    public List<SmsMailTemplate> getSysNotBand(MsgTypeEnum type) {
+        //查询这个消息类型
+        List<SmsMailTemplate> list = list(new LambdaQueryWrapper<SmsMailTemplate>()
+                .select(SmsMailTemplate::getPid)
+                .eq(SmsMailTemplate::getType,type)
+                .eq(SmsMailTemplate::getEnableStatus,type));
+        Set<Long> set = list.stream().map(SmsMailTemplate::getPid).collect(Collectors.toSet());
+        return list(new LambdaQueryWrapper<SmsMailTemplate>().notIn(SmsMailTemplate::getId,set));
+    }
+
     private void checkParam(SmsMailTemplate smsMailTemplate) {
+        if (smsMailTemplate.getType().equals(MsgTypeEnum.SMS) || smsMailTemplate.getType().equals(MsgTypeEnum.MAIL) ){
+            if (ObjectUtil.isNull(smsMailTemplate.getPid())){
+                throw new ServiceException("短信模板,邮件模板,公众号模板必须挂在消息模板下面");
+            }
+        }
         if (Pattern.matches(".*[\\u4e00-\\u9fa5\\p{P}].*", smsMailTemplate.getCode())) {
             throw new ServiceException("自定义编码不能包含中文和特殊符号");
         }
@@ -100,6 +143,17 @@ public class SmsMailManagerImpl extends ServiceImpl<SmsMailMapper, SmsMailTempla
         if (smsMailTemplate.getType().equals(MsgTypeEnum.MAIL)) {
             smsMailTemplate.setAuditStatus(true);
         }
+        //短信模板和消息模板在每个系统消息下面,并且盛和通过的智能有一条
+        if (!smsMailTemplate.getType().equals(MsgTypeEnum.SYSTEM) && ObjectUtil.isNotNull(smsMailTemplate.getPid())){
+            SmsMailTemplate one = getOne(new LambdaQueryWrapper<SmsMailTemplate>()
+                    .eq(SmsMailTemplate::getPid,smsMailTemplate.getPid())
+                    .eq(SmsMailTemplate::getEnableStatus,true)
+                    .eq(SmsMailTemplate::getType,smsMailTemplate.getType())
+                    .ne(ObjectUtil.isNotNull(smsMailTemplate.getId()),SmsMailTemplate::getId,smsMailTemplate.getId()));
+            if (ObjectUtil.isNotNull(one)){
+                throw new ServiceException("一个系统消息下面只能同时挂载一个已起用的"+smsMailTemplate.getType().getLabel()+"消息");
+            }
+        }
     }
 
 

+ 1 - 1
module-erp/src/main/java/com/hys/app/service/system/AdminUserManager.java

@@ -75,7 +75,7 @@ public interface AdminUserManager {
      * @param password 管理员密码
      * @return
      */
-    AdminLoginVO login(String name, String password,String companyName);
+    AdminLoginVO login(String name, String password,Long companyId,String type);
 
     /**
      * 通过refreshToken重新获取accessToken

+ 8 - 0
module-erp/src/main/java/com/hys/app/service/system/DeptManager.java

@@ -93,4 +93,12 @@ public interface DeptManager extends BaseService<DeptDO> {
      * @return 子部门列表
      */
     Set<Long> getChildDeptIdListFromCache(Long id);
+
+    /**
+     * 地柜查询自己的部门及子部门
+     *
+     * @param deptId
+     * @return
+     */
+    List<DeptDO> getAllSubDept(Long deptId);
 }

+ 1 - 1
module-erp/src/main/java/com/hys/app/service/system/MenuManager.java

@@ -64,7 +64,7 @@ public interface MenuManager {
      * @param id 菜单的id
      * @return
      */
-    List<MenusVO> getMenuTree(Long id);
+    List<MenusVO> getMenuTree();
 
     /**
      * 获取菜单管理

+ 1 - 1
module-erp/src/main/java/com/hys/app/service/system/RoleManager.java

@@ -28,7 +28,7 @@ public interface RoleManager extends IService<RoleDO> {
      * @param keyword 搜索关键字
      * @return WebPage
      */
-    WebPage list(long page, long pageSize, String keyword);
+    WebPage list(long page, long pageSize, String keyword,String packageSuper);
 
     /**
      * 添加角色表

+ 82 - 58
module-erp/src/main/java/com/hys/app/service/system/impl/AdminUserManagerImpl.java

@@ -13,14 +13,12 @@ import com.hys.app.framework.context.user.AdminUserContext;
 import com.hys.app.framework.database.WebPage;
 import com.hys.app.framework.exception.ResourceNotFoundException;
 import com.hys.app.framework.exception.ServiceException;
-import com.hys.app.framework.redis.RedisChannel;
 import com.hys.app.framework.security.TokenManager;
-import com.hys.app.framework.security.message.UserDisableMsg;
 import com.hys.app.framework.security.model.Admin;
-import com.hys.app.framework.security.model.Role;
 import com.hys.app.framework.util.*;
 import com.hys.app.mapper.system.AdminUserMapper;
-import com.hys.app.model.erp.entity.Company;
+import com.hys.app.mapper.system.DeptMapper;
+import com.hys.app.model.erp.entity.CompanyErp;
 import com.hys.app.model.errorcode.SystemErrorCode;
 import com.hys.app.model.support.LogClient;
 import com.hys.app.model.support.validator.annotation.LogLevel;
@@ -31,9 +29,8 @@ import com.hys.app.model.system.dos.SystemLogs;
 import com.hys.app.model.system.dto.AdminUserDTO;
 import com.hys.app.model.system.vo.AdminLoginVO;
 import com.hys.app.model.system.vo.AdminUserVO;
-import com.hys.app.service.erp.CompanyManager;
+import com.hys.app.service.erp.CompanyErpManager;
 import com.hys.app.service.system.AdminUserManager;
-import com.hys.app.service.system.DeptManager;
 import com.hys.app.service.system.RoleManager;
 import com.hys.app.service.system.SystemLogsManager;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -69,7 +66,9 @@ public class AdminUserManagerImpl implements AdminUserManager {
     @Autowired
     private SystemLogsManager systemLogsManager;
     @Autowired
-    private CompanyManager companyManager;
+    private CompanyErpManager companyManager;
+    @Autowired
+    private DeptMapper deptMapper;
     private List<Long> ids = new ArrayList<>();
 
     /**
@@ -82,8 +81,12 @@ public class AdminUserManagerImpl implements AdminUserManager {
      */
     @Override
     public WebPage list(long page, long pageSize, String keyword, Integer userState) {
-
-        IPage<AdminUserDTO> iPage = adminUserMapper.selectPageDto(new Page<>(page, pageSize), keyword, userState);
+        IPage<AdminUserDTO> iPage;
+        if (ObjectUtil.isNotNull(AdminUserContext.getCompanyId())) {
+            iPage = adminUserMapper.selectPageDto(new Page<>(page, pageSize), keyword, userState, AdminUserContext.getCompanyId());
+        } else {
+            iPage = adminUserMapper.selectPageDto(new Page<>(page, pageSize), keyword, userState, null);
+        }
         return PageConvert.convert(iPage);
     }
 
@@ -101,6 +104,12 @@ public class AdminUserManagerImpl implements AdminUserManager {
         if (!bool) {
             throw new ServiceException(SystemErrorCode.E917.code(), "密码格式不正确");
         }
+        DeptDO deptDO = deptMapper.selectById(adminUserVO.getDeptId());
+        if (ObjectUtil.isNull(deptDO)) {
+            throw new ServiceException("部门不存在");
+        }
+        adminUserVO.setRoleId(deptDO.getRoleId());
+
         //校验用户名称是否重复
         QueryWrapper<AdminUser> wrapper = new QueryWrapper<>();
         wrapper.eq("username", adminUserVO.getUsername()).eq("user_state", 0);
@@ -116,18 +125,23 @@ public class AdminUserManagerImpl implements AdminUserManager {
 //                throw new ResourceNotFoundException("所属权限不存在");
 //            }
 //        }
-        Company company = companyManager.getById(AdminUserContext.getCompanyId());
+        CompanyErp company = companyManager.getById(AdminUserContext.getCompanyId());
+        Long count = adminUserMapper.selectCount(new LambdaQueryWrapper<AdminUser>().eq(AdminUser::getCompanyId, company.getId()));
+        if (count + 1 > company.getUserNum()) {
+            throw new ServiceException("超过最大账号创建数量,如有需要请联系平台管理员更换套餐");
+        }
         //管理员信息入库
         String password = adminUserVO.getPassword();
         AdminUser adminUser = new AdminUser();
         adminUser.setCompanyId(company.getId());
-        adminUser.setRoleId(company.getRoleId());
         BeanUtil.copyProperties(adminUserVO, adminUser);
         adminUser.setPassword(StringUtil.md5(password + adminUser.getUsername().toLowerCase()));
         adminUser.setDateLine(DateUtil.getDateline());
         adminUser.setUserState(0);
+        adminUser.setFounder(0);
         adminUserMapper.insert(adminUser);
 
+
         return adminUser;
     }
 
@@ -144,25 +158,25 @@ public class AdminUserManagerImpl implements AdminUserManager {
         //对要修改的管理员是否存在进行校验
         AdminUser adminUser = this.getModel(id);
         if (adminUser == null) {
-            throw new ResourceNotFoundException("当前管理员不存在");
+            throw new ResourceNotFoundException("需要修改的账号不存在");
         }
-        if (!Objects.equals(AdminUserContext.getAdminUserId(), id)){
-            throw new ServiceException("你无权修改此账号");
+        if (!Objects.equals(AdminUserContext.getCompanyId(), adminUser.getCompanyId())) {
+            throw new ServiceException("只能修改自己公司的账号");
         }
-        if ("admin".equals(adminUser.getUsername()) && !"admin".equals(adminUserVO.getUsername())){
+        if ("admin".equals(adminUser.getUsername()) && !"admin".equals(adminUserVO.getUsername())) {
             throw new ServiceException("admin 登录名称不允许修改");
         }
-        //如果修改的是从超级管理员到普通管理员 需要校验此管理员是否是最后一个超级管理员
-        if (adminUser.getFounder().equals(1) && !adminUserVO.getFounder().equals(1)) {
-
-            QueryWrapper<AdminUser> wrapper = new QueryWrapper<>();
-            wrapper.eq("founder", 1).eq("user_state", 0);
-            List<AdminUser> adminUsers = adminUserMapper.selectList(wrapper);
-
-            if (adminUsers.size() <= 1) {
-                throw new ServiceException(SystemErrorCode.E916.code(), "必须保留一个超级管理员");
-            }
-        }
+//        //如果修改的是从超级管理员到普通管理员 需要校验此管理员是否是最后一个超级管理员
+//        if (adminUser.getFounder().equals(1) && !adminUserVO.getFounder().equals(1)) {
+//
+//            QueryWrapper<AdminUser> wrapper = new QueryWrapper<>();
+//            wrapper.eq("founder", 1).eq("user_state", 0);
+//            List<AdminUser> adminUsers = adminUserMapper.selectList(wrapper);
+//
+//            if (adminUsers.size() <= 1) {
+//                throw new ServiceException(SystemErrorCode.E916.code(), "必须保留一个超级管理员");
+//            }
+//        }
 //        if (!adminUserVO.getFounder().equals(1)) {
 //            RoleDO roleDO = roleManager.getModel(adminUserVO.getRoleId());
 //            if (roleDO == null) {
@@ -204,25 +218,25 @@ public class AdminUserManagerImpl implements AdminUserManager {
         if (adminUser == null) {
             throw new ResourceNotFoundException("当前管理员不存在");
         }
-        if ("admin".equals(adminUser.getUsername())){
+        if ("admin".equals(adminUser.getUsername())) {
             throw new ResourceNotFoundException("管理员不能删除");
         }
-        //校验要删除的管理员是否是最后一个超级管理员
-        QueryWrapper<AdminUser> wrapper = new QueryWrapper<>();
-        wrapper.eq("founder", 1).eq("user_state", 0);
-        List<AdminUser> adminUsers = adminUserMapper.selectList(wrapper);
-
-        if (adminUsers.size() <= 1 && adminUser.getFounder().equals(1)) {
-            throw new ServiceException(SystemErrorCode.E916.code(), "必须保留一个超级管理员");
-        }
+//        //校验要删除的管理员是否是最后一个超级管理员
+//        QueryWrapper<AdminUser> wrapper = new QueryWrapper<>();
+//        wrapper.eq("founder", 1).eq("user_state", 0);
+//        List<AdminUser> adminUsers = adminUserMapper.selectList(wrapper);
+//
+//        if (adminUsers.size() <= 1 && adminUser.getFounder().equals(1)) {
+//            throw new ServiceException(SystemErrorCode.E916.code(), "必须保留一个超级管理员");
+//        }
         // 设置管理员状态为删除
         adminUser.setUserState(-1);
         adminUserMapper.updateById(adminUser);
 
-        //发送redis订阅消息,通知各个节点此用户已经禁用
-        UserDisableMsg userDisableMsg = new UserDisableMsg(id, Role.ADMIN, UserDisableMsg.ADD);
-        String msgJson = JsonUtil.objectToJson(userDisableMsg);
-        redisTemplate.convertAndSend(RedisChannel.USER_DISABLE, msgJson);
+//        //发送redis订阅消息,通知各个节点此用户已经禁用
+//        UserDisableMsg userDisableMsg = new UserDisableMsg(id, Role.ADMIN, UserDisableMsg.ADD);
+//        String msgJson = JsonUtil.objectToJson(userDisableMsg);
+//        redisTemplate.convertAndSend(RedisChannel.USER_DISABLE, msgJson);
 
     }
 
@@ -253,35 +267,44 @@ public class AdminUserManagerImpl implements AdminUserManager {
      * @return
      */
     @Override
-    public AdminLoginVO login(String name, String password,String companyName) {
+    public AdminLoginVO login(String name, String password, Long companyId, String type) {
+
         //查询管理员信息
-        QueryWrapper<AdminUser> wrapper = new QueryWrapper<>();
-        wrapper.eq("username", name).eq("password", StringUtil.md5(password + name.toLowerCase())).eq("user_state", 0);
-        AdminUser adminUser = adminUserMapper.selectOne(wrapper);
+        LambdaQueryWrapper<AdminUser> queryWrapper = new LambdaQueryWrapper<AdminUser>()
+                .eq(AdminUser::getUsername, name)
+                .eq(AdminUser::getPassword, password).eq(AdminUser::getUserState, 0);
+        if ("com".equals(type) && ObjectUtil.isNotNull(companyId)) {
+            queryWrapper.eq(AdminUser::getCompanyId, companyId);
+        }
+        AdminUser adminUser = adminUserMapper.selectOne(queryWrapper);
         //管理员信息不存在
         if (adminUser == null || !StringUtil.equals(adminUser.getUsername(), name)) {
             throw new ServiceException(SystemErrorCode.E918.code(), "管理员账号密码错误");
         }
-        Company company=null;
-        if (adminUser.getFounder() != 1){
-            if (ObjectUtil.isNull(companyName)){
+        CompanyErp company = null;
+        if (adminUser.getFounder() != 1) {
+            if (ObjectUtil.isNull(companyId)) {
                 throw new ServiceException("非平台工作人员公司必填");
             }
-            company = companyManager.getOne(new LambdaQueryWrapper<Company>().eq(Company::getName,companyName));
-            if (ObjectUtil.isNull(company)){
+            company = companyManager.getById(companyId);
+            if (ObjectUtil.isNull(company)) {
                 throw new ServiceException("该公司未注册");
             }
-            if (adminUser.getCompanyId() != company.getCompanyId()){
+            if (!adminUser.getCompanyId().equals(company.getId())) {
                 throw new ServiceException("此账号不属于该公司");
             }
-            if (LocalDateTime.now().isAfter(company.getEndUseTime())){
+
+            if (new Date().compareTo(company.getEndUseTime()) > 0) {
                 throw new ServiceException("该公司使用已到期,请续费");
             }
         }
-
+//        if ("admin".equals(name) && password.equals(adminUser.getFirstPassword())){
+//            throw new ServiceException("第一次登录需修改密码");
+//        }
         //返回管理员信息
         AdminLoginVO adminLoginVO = new AdminLoginVO();
         adminLoginVO.setUid(adminUser.getId());
+
         adminLoginVO.setUsername(name);
         adminLoginVO.setCompanyVo(company);
         adminLoginVO.setDepartment(adminUser.getDepartment());
@@ -289,7 +312,11 @@ public class AdminUserManagerImpl implements AdminUserManager {
         adminLoginVO.setRoleId(adminUser.getRoleId());
         adminLoginVO.setFounder(adminUser.getFounder());
         adminLoginVO.setDeptId(adminUser.getDeptId());
+        adminLoginVO.setHasDeptManager(adminUser.getHasDeptManager());
         // 设置访问token的失效时间维持管理员在线状态
+        if (adminUser.getFounder() != 1) {
+            adminUser.setCompanyId(company.getId());
+        }
         Token token = createToken(adminUser);
 
         String accessToken = token.getAccessToken();
@@ -352,8 +379,6 @@ public class AdminUserManagerImpl implements AdminUserManager {
         admin.setUid(adminUser.getId());
         admin.setCompanyId(adminUser.getCompanyId());
         admin.setUsername(adminUser.getUsername());
-//        admin.setPlatformShopId(platform.getShopId());
-//        admin.setPlatformShopName(platform.getShopName());
         admin.setFounder(adminUser.getFounder());
         if (adminUser.getFounder().equals(1)) {
             admin.add("SUPER_ADMIN");
@@ -361,7 +386,6 @@ public class AdminUserManagerImpl implements AdminUserManager {
             RoleDO roleDO = this.roleManager.getModel(adminUser.getRoleId());
             admin.add(roleDO.getRoleName());
         }
-
         return tokenManager.create(admin);
 
     }
@@ -399,10 +423,10 @@ public class AdminUserManagerImpl implements AdminUserManager {
         adminUser.setUserState(0);
         adminUserMapper.updateById(adminUser);
 
-        //发送redis订阅消息,通知各个节点此用户已经恢复
-        UserDisableMsg userDisableMsg = new UserDisableMsg(id, Role.ADMIN, UserDisableMsg.DELETE);
-        String msgJson = JsonUtil.objectToJson(userDisableMsg);
-        redisTemplate.convertAndSend(RedisChannel.USER_DISABLE, msgJson);
+//        //发送redis订阅消息,通知各个节点此用户已经恢复
+//        UserDisableMsg userDisableMsg = new UserDisableMsg(id, Role.ADMIN, UserDisableMsg.DELETE);
+//        String msgJson = JsonUtil.objectToJson(userDisableMsg);
+//        redisTemplate.convertAndSend(RedisChannel.USER_DISABLE, msgJson);
     }
 
     @Override

+ 17 - 5
module-erp/src/main/java/com/hys/app/service/system/impl/DeptManagerImpl.java

@@ -2,6 +2,11 @@ package com.hys.app.service.system.impl;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSON;
+import com.hys.app.framework.context.user.AdminUserContext;
+import com.hys.app.framework.util.JsonUtil;
+import com.hys.app.mapper.system.RoleMapper;
+import com.hys.app.model.system.dos.RoleDO;
 import com.hys.app.model.system.dto.DeptCreateDTO;
 import com.hys.app.model.system.dto.DeptQueryParams;
 import com.hys.app.model.system.dto.DeptUpdateDTO;
@@ -13,9 +18,11 @@ import com.hys.app.mapper.system.DeptMapper;
 import com.hys.app.model.base.CachePrefix;
 import com.hys.app.model.base.context.Region;
 import com.hys.app.model.system.dos.DeptDO;
+import com.hys.app.model.system.vo.Menus;
 import com.hys.app.service.erp.WarehouseManager;
 import com.hys.app.service.system.AdminUserManager;
 import com.hys.app.service.system.DeptManager;
+import com.hys.app.service.system.RoleManager;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
@@ -23,6 +30,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
 import java.util.*;
+import java.util.stream.Collectors;
 
 import static com.hys.app.framework.util.CollectionUtils.convertSet;
 
@@ -50,17 +58,14 @@ public class DeptManagerImpl extends BaseServiceImpl<DeptMapper, DeptDO> impleme
 
     @Autowired
     @Lazy
-    private WarehouseManager warehouseManager;
+    private RoleMapper roleMapper;
 
     @Override
     public Long createDept(DeptCreateDTO reqVO, Region region) {
-        // 校验正确性
-        if (reqVO.getParentId() == null) {
-            reqVO.setParentId(DeptDO.ROOT_ID);
-        }
         validateForCreateOrUpdate(null, reqVO.getParentId(), reqVO.getName());
         // 插入部门
         DeptDO dept = converter.convert(reqVO, region);
+        dept.setCompanyId(AdminUserContext.getCompanyId());
         deptMapper.insert(dept);
         cache.remove(CachePrefix.DEPT_CHILDREN_ID_LIST.getPrefix());
         return dept.getId();
@@ -75,6 +80,7 @@ public class DeptManagerImpl extends BaseServiceImpl<DeptMapper, DeptDO> impleme
         validateForCreateOrUpdate(reqVO.getId(), reqVO.getParentId(), reqVO.getName());
         // 更新部门
         DeptDO updateObj = converter.convert(reqVO, region);
+        updateObj.setCompanyId(AdminUserContext.getCompanyId());
         deptMapper.updateById(updateObj);
         cache.remove(CachePrefix.DEPT_CHILDREN_ID_LIST.getPrefix());
     }
@@ -198,4 +204,10 @@ public class DeptManagerImpl extends BaseServiceImpl<DeptMapper, DeptDO> impleme
         return ids;
     }
 
+    @Override
+    public List<DeptDO> getAllSubDept(Long deptId) {
+
+        return this.baseMapper.getAllSubDept(deptId);
+    }
+
 }

+ 40 - 26
module-erp/src/main/java/com/hys/app/service/system/impl/MenuManagerImpl.java

@@ -1,22 +1,27 @@
 package com.hys.app.service.system.impl;
 
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.hys.app.framework.util.PageConvert;
+import com.hys.app.framework.context.user.AdminUserContext;
+import com.hys.app.framework.util.*;
+import com.hys.app.mapper.system.AdminUserMapper;
 import com.hys.app.mapper.system.MenuMapper;
 import com.hys.app.model.errorcode.SystemErrorCode;
+import com.hys.app.model.system.dos.AdminUser;
 import com.hys.app.model.system.dos.Menu;
 import com.hys.app.model.system.vo.MenuVO;
+import com.hys.app.model.system.vo.Menus;
 import com.hys.app.model.system.vo.MenusVO;
 import com.hys.app.service.system.MenuManager;
 import com.hys.app.framework.database.WebPage;
 import com.hys.app.framework.exception.ResourceNotFoundException;
 import com.hys.app.framework.exception.ServiceException;
-import com.hys.app.framework.util.BeanUtil;
-import com.hys.app.framework.util.StringUtil;
+import org.apache.logging.log4j.core.util.JsonUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
@@ -25,6 +30,7 @@ import org.springframework.transaction.annotation.Transactional;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 菜单管理业务类
@@ -40,6 +46,9 @@ public class MenuManagerImpl implements MenuManager {
     @Autowired
     private MenuMapper menuMapper;
 
+    @Autowired
+    private AdminUserMapper adminUserMapper;
+
 
     /**
      * 查询菜单管理列表
@@ -52,7 +61,7 @@ public class MenuManagerImpl implements MenuManager {
     public WebPage list(long page, long pageSize) {
 
         QueryWrapper<Menu> wrapper = new QueryWrapper<>();
-        IPage<Menu> iPage = menuMapper.selectPage(new Page<>(page,pageSize), wrapper);
+        IPage<Menu> iPage = menuMapper.selectPage(new Page<>(page, pageSize), wrapper);
         return PageConvert.convert(iPage);
     }
 
@@ -92,14 +101,14 @@ public class MenuManagerImpl implements MenuManager {
 //        } else if (menuResult != null) {
 //            throw new ServiceException(SystemErrorCode.E925.code(), "菜单名称重复");
 //        } else {
-            //执行保存操作
-            Menu menu = new Menu();
-            BeanUtil.copyProperties(menuVO, menu);
-            menu.setDeleteFlag(0);
+        //执行保存操作
+        Menu menu = new Menu();
+        BeanUtil.copyProperties(menuVO, menu);
+        menu.setDeleteFlag(0);
 
-            menuMapper.insert(menu);
+        menuMapper.insert(menu);
 
-            return this.updateMenu(menu);
+        return this.updateMenu(menu);
 //        }
     }
 
@@ -191,12 +200,12 @@ public class MenuManagerImpl implements MenuManager {
 
         Menu menuu = new Menu();
         UpdateWrapper<Menu> wrapper = new UpdateWrapper<>();
-        wrapper.eq("id",id);
+        wrapper.eq("id", id);
         menuu.setDeleteFlag(-1);
-        menuMapper.update(menuu,wrapper);
-        wrapper.eq("parent_id",id);
+        menuMapper.update(menuu, wrapper);
+        wrapper.eq("parent_id", id);
         menuu.setDeleteFlag(-1);
-        menuMapper.update(menuu,wrapper);
+        menuMapper.update(menuu, wrapper);
 
         //复杂的in语句,分布式事务不支持,故改成查询循环修改 add by fk
         //this.systemDaoSupport.execute("update es_menu as e1 set e1.delete_flag = -1 where e1.parent_id in ( select em.id from (select * from es_menu) as em where  em.parent_id =  ?)", id);
@@ -205,12 +214,12 @@ public class MenuManagerImpl implements MenuManager {
         if (StringUtil.isNotEmpty(list)) {
             for (Map map : list) {
 
-                Long childId = (Long)map.get("id");
+                Long childId = (Long) map.get("id");
                 Menu menuuu = new Menu();
                 UpdateWrapper<Menu> wrapperr = new UpdateWrapper<>();
                 menuuu.setDeleteFlag(-1);
-                wrapperr.eq("id",childId);
-                menuMapper.update(menuuu,wrapperr);
+                wrapperr.eq("id", childId);
+                menuMapper.update(menuuu, wrapperr);
 
 //                Long childId = (Long)map.get("id");
 //                this.systemDaoSupport.execute("update es_menu set delete_flag = -1 where id = ?", childId);
@@ -241,19 +250,24 @@ public class MenuManagerImpl implements MenuManager {
      * @return
      */
     @Override
-    public List<MenusVO> getMenuTree(Long id) {
+    public List<MenusVO> getMenuTree() {
+
+        if (!AdminUserContext.hasFound() && "admin".equals(AdminUserContext.getAdminUserName())) {
+            AdminUser user = adminUserMapper.selectById(AdminUserContext.getAdminUserId());
+            if (ObjectUtil.isNotNull(user) && StrUtil.isNotBlank(user.getAuthIds())) {
+                List<Menus> menus = JsonUtil.jsonToList(user.getAuthIds(), Menus.class);
+                List<MenusVO>  menuList = BeanUtils.toBean(menus, MenusVO.class);
+                return menuList;
+            }
+        }
 
         List<MenusVO> menuList = menuMapper.queryForVo();
-
-        List<MenusVO> topMenuList = new ArrayList<MenusVO>();
         for (MenusVO menu : menuList) {
-            if (menu.getParentId().compareTo(id) == 0) {
-                List<MenusVO> children = this.getChildren(menuList, menu.getId());
-                menu.setChildren(children);
-                topMenuList.add(menu);
-            }
+            List<MenusVO> collect = menuList.stream().filter(item -> item.getParentId().equals(menu.getId())).collect(Collectors.toList());
+            List<MenusVO> bean = BeanUtils.toBean(collect, MenusVO.class);
+            menu.setChildren(bean);
         }
-        return topMenuList;
+        return menuList.stream().filter(item ->item.getParentId() == 0).collect(Collectors.toList());
     }
 
     /**

+ 17 - 9
module-erp/src/main/java/com/hys/app/service/system/impl/RoleManagerImpl.java

@@ -1,9 +1,14 @@
 package com.hys.app.service.system.impl;
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.hys.app.framework.context.user.AdminUserContext;
 import com.hys.app.framework.datapermission.annotation.DataPermission;
 import com.hys.app.framework.util.PageConvert;
 import com.hys.app.mapper.system.AdminUserMapper;
@@ -62,12 +67,13 @@ public class RoleManagerImpl extends ServiceImpl<RoleMapper, RoleDO> implements
      * @return WebPage
      */
     @Override
-    public WebPage list(long page, long pageSize, String keyword) {
-
-        QueryWrapper<RoleDO> wrapper = new QueryWrapper<>();
-        wrapper.select("role_id", "role_name", "role_describe");
-        wrapper.like(StringUtil.notEmpty(keyword), "role_name", keyword);
-        wrapper.orderByDesc("role_id ");
+    public WebPage list(long page, long pageSize, String keyword,String packageSuper) {
+        LambdaQueryWrapper<RoleDO> wrapper = new LambdaQueryWrapper<RoleDO>()
+                .select(RoleDO::getRoleId,RoleDO::getRoleName,RoleDO::getRoleDescribe)
+                .like(StringUtil.notEmpty(keyword),RoleDO::getRoleName,keyword)
+                .eq(ObjectUtil.isNotNull(AdminUserContext.getCompanyId()),RoleDO::getCompanyId,AdminUserContext.getCompanyId())
+                .isNull(StrUtil.isNotBlank(packageSuper),RoleDO::getCompanyId)
+                .orderByDesc(RoleDO::getRoleId);
         IPage<RoleDO> iPage = roleMapper.selectPage(new Page<>(page, pageSize), wrapper);
         return PageConvert.convert(iPage);
     }
@@ -89,7 +95,7 @@ public class RoleManagerImpl extends ServiceImpl<RoleMapper, RoleDO> implements
         roleDO.setRoleDescribe(role.getRoleDescribe());
         roleDO.setDataScope(role.getDataScope());
         roleDO.setDeptIds(role.getDeptIds());
-
+        roleDO.setCompanyId(AdminUserContext.getCompanyId());
         roleMapper.insert(roleDO);
         role.setRoleId(roleDO.getRoleId());
 
@@ -114,6 +120,7 @@ public class RoleManagerImpl extends ServiceImpl<RoleMapper, RoleDO> implements
 
         wrapper.eq("role_name", role.getRoleName());
         wrapper.ne("role_id", id);
+        wrapper.ne("company_id", AdminUserContext.getCompanyId());
 
 
         List list = roleMapper.selectList(wrapper);
@@ -150,6 +157,7 @@ public class RoleManagerImpl extends ServiceImpl<RoleMapper, RoleDO> implements
         roleDO.setRoleDescribe(role.getRoleDescribe());
         roleDO.setDataScope(role.getDataScope());
         roleDO.setDeptIds(role.getDeptIds());
+        roleDO.setCompanyId(AdminUserContext.getCompanyId());
         roleMapper.updateById(roleDO);
         role.setRoleId(id);
         //删除缓存中角色所拥有的菜单权限
@@ -238,7 +246,7 @@ public class RoleManagerImpl extends ServiceImpl<RoleMapper, RoleDO> implements
             if (menus.isChecked()) {
                 authList.add(menus.getAuthRegular());
             }
-            if (!menus.getChildren().isEmpty()) {
+            if (CollUtil.isNotEmpty(menus.getChildren())) {
                 getChildren(menus.getChildren(), authList);
             }
         }
@@ -333,7 +341,7 @@ public class RoleManagerImpl extends ServiceImpl<RoleMapper, RoleDO> implements
             if (menus.isChecked()) {
                 authList.add(menus.getIdentifier());
             }
-            if (!menus.getChildren().isEmpty()) {
+            if (CollUtil.isNotEmpty(menus.getChildren())) {
                 reset(menus.getChildren(), authList);
             }
         }

+ 71 - 0
module-erp/src/main/java/com/hys/app/util/PinYingUtil.java

@@ -0,0 +1,71 @@
+package com.hys.app.util;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
+import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
+import com.hys.app.framework.exception.ServiceException;
+import com.hys.app.framework.util.StringUtil;
+import lombok.experimental.UtilityClass;
+import net.sourceforge.pinyin4j.PinyinHelper;
+import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
+import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
+import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
+import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
+
+/**
+ * 校验工具类
+ *
+ * @author 张崧
+ * @since 2023-12-11
+ */
+@UtilityClass
+public class PinYingUtil {
+
+    /**
+     * 将中文字符转换为拼音全拼
+     * @param chinese 中文字符
+     * @return 拼音全拼
+     */
+    public static String toPinyin(String chinese) {
+        HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
+        format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
+        format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
+        format.setVCharType(HanyuPinyinVCharType.WITH_V);
+
+        StringBuilder pinyin = new StringBuilder();
+        try {
+            for (char c : chinese.toCharArray()) {
+                if (Character.toString(c).matches("[\\u4E00-\\u9FA5]+")) {
+                    String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(c, format);
+                    if (pinyinArray != null) {
+                        pinyin.append(pinyinArray[0]);
+                    }
+                } else {
+                    pinyin.append(c);
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return pinyin.toString();
+    }
+
+    /**
+     * 将中文字符转换为拼音首字母
+     * @param chinese 中文字符
+     * @return 拼音首字母
+     */
+    public static String toPinyinFirstLetter(String chinese) {
+        StringBuilder pinyin = new StringBuilder();
+        for (char c : chinese.toCharArray()) {
+            String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(c);
+            if (pinyinArray != null) {
+                pinyin.append(pinyinArray[0].charAt(0));
+            } else {
+                pinyin.append(c);
+            }
+        }
+        return pinyin.toString().toUpperCase();
+    }
+}

+ 20 - 0
module-erp/src/main/resources/mapper/CompanyErpMapper.xml

@@ -0,0 +1,20 @@
+<?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="com.hys.app.mapper.erp.CompanyErpMapper">
+
+
+    <select id="queryPage" resultType="com.hys.app.model.erp.entity.CompanyVO">
+        select * from erp_company_copy1 ec
+        where  1= 1
+        <if test="query.industry != null and query.industry != ''">
+            ec.industry like concat('%',#{query.industry},'%')
+        </if>
+        <if test="query.name != null and query.name != ''">
+            ec.name like concat('%',#{query.name},'%')
+        </if>
+        <if test="query.userName != null and query.userName != ''">
+            ec.user_name like concat('%',#{userName},'%')
+        </if>
+    </select>
+</mapper>

+ 1 - 1
module-erp/src/main/resources/mapper/ProductStockMapper.xml

@@ -84,7 +84,7 @@
         select p.*,ps.warehouse_id,w.`name` as warehouse_name,w.dept_id,sd.`name` as dept_name,ps.num as stock_num from erp_product_stock ps
         left join erp_warehouse w on ps.warehouse_id = w.id
         left join erp_product p on ps.product_id = p.id
-        left join system_dept sd on w.dept_id = sd.id
+        left join erp_company_dept sd on w.dept_id = sd.id
         <where>
             ps.num &lt;= p.warning_value
             <if test="deptId != null and deptId != 0">

+ 9 - 6
module-erp/src/main/resources/mapper/system/AdminUserMapper.xml

@@ -7,11 +7,14 @@
     <!--查询平台管理员列表-->
     <select id="selectPageDto" resultType="com.hys.app.model.system.dto.AdminUserDTO" useCache="false">
         select u.*,r.role_name,d.name deptName,p.name postName
-        from es_admin_user u
+        from erp_company_user u
         left join es_role r ON u.role_id=r.role_id
-        left join system_dept d ON u.dept_id=d.id
+        left join erp_company_dept d ON u.dept_id=d.id
         left join erp_post p ON u.post_id=p.id
         <where>
+            <if test="companyId != null ">
+                and u.company_id = #{companyId}
+            </if>
             <if test="keyword != null and keyword != ''">
                 and (username like concat('%',#{keyword},'%') or department like concat('%' ,#{keyword} ,'%') or real_name like concat('%' ,#{keyword}, '%'))
             </if>
@@ -22,19 +25,19 @@
         order by sort, date_line desc
     </select>
     <select id="getAllDept" resultType="com.hys.app.model.system.dos.DeptDO">
-        SELECT * FROM `system_dept`  where deleted = 0
+        SELECT * FROM `erp_company_dept`  where deleted = 0
     </select>
     <select id="getAllSubDept" resultType="java.lang.Long">
         WITH RECURSIVE SubDepartments AS (
             SELECT id
-            FROM system_dept
+            FROM erp_company_dept
             WHERE id = #{deptId}
             UNION ALL
             SELECT d.id
-            FROM system_dept d
+            FROM erp_company_dept d
                      INNER JOIN SubDepartments sd ON d.parent_id = sd.id
         )
-        SELECT * FROM system_dept;
+        SELECT * FROM erp_company_dept;
     </select>
 
 </mapper>

+ 0 - 22
module-openapi/pom.xml

@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>com.hys.app</groupId>
-        <artifactId>warehouse</artifactId>
-        <version>7.2.2</version>
-    </parent>
-
-    <artifactId>module-openapi</artifactId>
-
-    <dependencies>
-        <dependency>
-            <groupId>com.hys.app</groupId>
-            <artifactId>module-erp</artifactId>
-            <version>${erp-version}</version>
-        </dependency>
-    </dependencies>
-
-</project>

+ 0 - 52
module-openapi/src/main/java/com/hys/app/controller/admin/datasync/MessagePushController.java

@@ -1,52 +0,0 @@
-package com.hys.app.controller.admin.datasync;
-
-import com.hys.app.framework.database.WebPage;
-import com.hys.app.model.datasync.dos.MessagePushDO;
-import com.hys.app.model.datasync.dto.MessagePushQueryParams;
-import com.hys.app.model.datasync.vo.MessagePushVO;
-import com.hys.app.service.datasync.push.common.MessagePushManager;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * 消息推送API
- *
- * @author 张崧
- * @since 2023-12-18 16:24:10
- */
-@RestController
-@RequestMapping("/admin/datasync/messagePush")
-@Api(tags = "消息推送API")
-@Validated
-public class MessagePushController {
-
-    @Autowired
-    private MessagePushManager messagePushManager;
-
-    @ApiOperation(value = "分页列表")
-    @GetMapping
-    public WebPage<MessagePushVO> list(MessagePushQueryParams queryParams) {
-        return messagePushManager.list(queryParams);
-    }
-
-    @ApiOperation(value = "查询")
-    @GetMapping("/{id}")
-    public MessagePushVO getDetail(@PathVariable Long id) {
-        return messagePushManager.getDetail(id);
-    }
-
-    @ApiOperation(value = "手动推送一条消息")
-    @GetMapping("/{id}/push")
-    public void push(@PathVariable Long id) {
-        MessagePushDO messagePushDO = messagePushManager.getById(id);
-        messagePushManager.pushSync(messagePushDO);
-    }
-
-}
-

+ 0 - 47
module-openapi/src/main/java/com/hys/app/controller/admin/datasync/MessageReceiveController.java

@@ -1,47 +0,0 @@
-package com.hys.app.controller.admin.datasync;
-
-import com.hys.app.framework.database.WebPage;
-import com.hys.app.model.datasync.dto.MessageReceiveQueryParams;
-import com.hys.app.model.datasync.vo.MessageReceiveVO;
-import com.hys.app.service.datasync.receive.common.MessageReceiveManager;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-/**
- * 消息接收API
- *
- * @author 张崧
- * @since 2023-12-19 17:41:37
- */
-@RestController
-@RequestMapping("/admin/datasync/messageReceive")
-@Api(tags = "消息接收API")
-@Validated
-public class MessageReceiveController {
-
-    @Autowired
-    private MessageReceiveManager messageReceiveManager;
-
-    @ApiOperation(value = "分页列表")
-    @GetMapping
-    public WebPage<MessageReceiveVO> list(MessageReceiveQueryParams queryParams) {
-        return messageReceiveManager.list(queryParams);
-    }
-
-    @ApiOperation(value = "查询")
-    @GetMapping("/{id}")
-    public MessageReceiveVO getDetail(@PathVariable Long id) {
-        return messageReceiveManager.getDetail(id);
-    }
-
-    @ApiOperation(value = "手动执行一条消息")
-    @GetMapping("/{id}/handle")
-    public void handle(@PathVariable Long id) {
-        messageReceiveManager.handle(id);
-    }
-
-}
-

+ 0 - 75
module-openapi/src/main/java/com/hys/app/controller/admin/oauth2/OAuth2ClientController.java

@@ -1,75 +0,0 @@
-package com.hys.app.controller.admin.oauth2;
-
-import cn.hutool.core.util.StrUtil;
-import com.hys.app.framework.database.WebPage;
-import com.hys.app.framework.util.BeanUtils;
-import com.hys.app.framework.util.StrUtils;
-import com.hys.app.model.oauth2.dos.OAuth2ClientDO;
-import com.hys.app.model.oauth2.dto.OAuth2ClientPageReqVO;
-import com.hys.app.model.oauth2.dto.OAuth2ClientSaveReqVO;
-import com.hys.app.model.oauth2.vo.OAuth2ClientRespVO;
-import com.hys.app.model.support.LogClient;
-import com.hys.app.model.support.validator.annotation.Log;
-import com.hys.app.service.oauth2.OAuth2ClientManager;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-import javax.validation.Valid;
-
-/**
- * OAuth2.0 客户端 API
- *
- * @author 张崧
- * @since 2024-02-20
- */
-@Api(tags = "管理后台 - OAuth2.0 客户端")
-@RestController
-@RequestMapping("/admin/systems/oauth2-client")
-@Validated
-public class OAuth2ClientController {
-
-    @Autowired
-    private OAuth2ClientManager oAuth2ClientManager;
-
-    @PostMapping
-    @ApiOperation(value = "创建 OAuth2 客户端")
-    @Log(client = LogClient.admin, detail = "创建 OAuth2 客户端")
-    public void createOAuth2Client(@Valid @RequestBody OAuth2ClientSaveReqVO createReqVO) {
-        oAuth2ClientManager.createOAuth2Client(createReqVO);
-    }
-
-    @PutMapping("/{id}")
-    @ApiOperation(value = "更新 OAuth2 客户端")
-    @Log(client = LogClient.admin, detail = "修改id为[${updateReqVO.id}]的 OAuth2 客户端")
-    public void updateOAuth2Client(@PathVariable Long id, @Valid @RequestBody OAuth2ClientSaveReqVO updateReqVO) {
-        updateReqVO.setId(id);
-        oAuth2ClientManager.updateOAuth2Client(updateReqVO);
-    }
-
-    @DeleteMapping("/{id}")
-    @ApiOperation(value = "删除 OAuth2 客户端")
-    @Log(client = LogClient.admin, detail = "删除id为[${id}]的 OAuth2 客户端")
-    public void deleteOAuth2Client(@PathVariable Long id) {
-        oAuth2ClientManager.deleteOAuth2Client(id);
-    }
-
-    @GetMapping("/{id}")
-    @ApiOperation(value = "获得 OAuth2 客户端")
-    @ApiImplicitParam(name = "id", value = "编号", required = true)
-    public OAuth2ClientRespVO getOAuth2Client(@PathVariable Long id) {
-        OAuth2ClientDO client = oAuth2ClientManager.getOAuth2Client(id);
-        return BeanUtils.toBean(client, OAuth2ClientRespVO.class);
-    }
-
-    @GetMapping
-    @ApiOperation(value = "获得 OAuth2 客户端分页")
-    public WebPage<OAuth2ClientRespVO> getOAuth2ClientPage(@Valid OAuth2ClientPageReqVO pageVO) {
-        WebPage<OAuth2ClientDO> pageResult = oAuth2ClientManager.getOAuth2ClientPage(pageVO);
-        return BeanUtils.toBean(pageResult, OAuth2ClientRespVO.class);
-    }
-
-}

+ 0 - 48
module-openapi/src/main/java/com/hys/app/controller/admin/oauth2/OAuth2TokenController.java

@@ -1,48 +0,0 @@
-package com.hys.app.controller.admin.oauth2;
-
-import com.hys.app.framework.database.WebPage;
-import com.hys.app.framework.util.BeanUtils;
-import com.hys.app.model.oauth2.dos.OAuth2AccessTokenDO;
-import com.hys.app.model.oauth2.dto.OAuth2AccessTokenPageReqVO;
-import com.hys.app.model.oauth2.vo.OAuth2AccessTokenRespVO;
-import com.hys.app.model.support.LogClient;
-import com.hys.app.model.support.validator.annotation.Log;
-import com.hys.app.service.oauth2.OAuth2TokenManager;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import javax.validation.Valid;
-import java.util.List;
-
-
-/**
- * OAuth2.0 令牌 API
- *
- * @author 张崧
- * @since 2024-02-20
- */
-@Api(tags = "管理后台 - OAuth2.0 令牌")
-@RestController
-@RequestMapping("/admin/systems/oauth2-token")
-public class OAuth2TokenController {
-
-    @Autowired
-    private OAuth2TokenManager oAuth2TokenManager;
-
-    @GetMapping
-    @ApiOperation(value = "获得访问令牌分页")
-    public WebPage<OAuth2AccessTokenRespVO> getAccessTokenPage(@Valid OAuth2AccessTokenPageReqVO reqVO) {
-        WebPage<OAuth2AccessTokenDO> pageResult = oAuth2TokenManager.getAccessTokenPage(reqVO);
-        return BeanUtils.toBean(pageResult, OAuth2AccessTokenRespVO.class);
-    }
-
-    @DeleteMapping("/{access_tokens}")
-    @ApiOperation(value = "删除访问令牌")
-    @Log(client = LogClient.admin, detail = "删除访问令牌[${accessTokens}]")
-    public void deleteAccessToken(@PathVariable("access_tokens") List<String> accessTokens) {
-        accessTokens.forEach(oAuth2TokenManager::removeAccessToken);
-    }
-
-}

+ 0 - 51
module-openapi/src/main/java/com/hys/app/controller/open/MessageReceiveOpenController.java

@@ -1,51 +0,0 @@
-package com.hys.app.controller.open;
-
-import com.hys.app.model.datasync.dto.MessageReceiveDTO;
-import com.hys.app.oauth2.LoginClientHolder;
-import com.hys.app.service.datasync.receive.common.MessageReceiveManager;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-import javax.validation.Valid;
-
-/**
- * 接收第三方系统消息
- *
- * @author 张崧
- * @since 2024-04-01
- */
-@RestController
-@RequestMapping("/open/message-receive")
-@Api(tags = "接收商城的消息")
-@Validated
-public class MessageReceiveOpenController {
-
-    private final Logger logger = LoggerFactory.getLogger(getClass());
-
-    @Autowired
-    private MessageReceiveManager messageReceiveManager;
-
-    /**
-     * 接收成功标识
-     */
-    private static final String SUCCESS = "SUCCESS";
-
-    @PostMapping
-    @ApiOperation(value = "接收消息通知")
-    public String receive(@RequestBody @Valid MessageReceiveDTO messageReceiveDTO) {
-
-        logger.info("接收第三方消息推送\n 类型:{}\n 消息id:{}\n 消息时间:{}\n 消息内容:{}",
-                messageReceiveDTO.getType(), messageReceiveDTO.getMsgId(), messageReceiveDTO.getProduceTime(), messageReceiveDTO.getContent());
-
-        System.out.println(LoginClientHolder.getClientId());
-
-        messageReceiveManager.receive(messageReceiveDTO);
-        return SUCCESS;
-    }
-
-}

+ 0 - 199
module-openapi/src/main/java/com/hys/app/controller/open/OAuth2OpenController.java

@@ -1,199 +0,0 @@
-package com.hys.app.controller.open;
-
-import cn.hutool.core.lang.Assert;
-import cn.hutool.core.util.ArrayUtil;
-import cn.hutool.core.util.StrUtil;
-import com.hys.app.converter.oauth2.OAuth2OpenConvert;
-import com.hys.app.framework.exception.ServiceException;
-import com.hys.app.model.oauth2.dos.OAuth2AccessTokenDO;
-import com.hys.app.model.oauth2.dos.OAuth2ClientDO;
-import com.hys.app.model.oauth2.enums.OAuth2GrantTypeEnum;
-import com.hys.app.model.oauth2.vo.OAuth2OpenAccessTokenRespVO;
-import com.hys.app.model.oauth2.vo.OAuth2OpenAuthorizeInfoRespVO;
-import com.hys.app.model.oauth2.vo.OAuth2OpenCheckTokenRespVO;
-import com.hys.app.service.oauth2.OAuth2ClientManager;
-import com.hys.app.service.oauth2.OAuth2GrantManager;
-import com.hys.app.service.oauth2.OAuth2TokenManager;
-import com.hys.app.oauth2.utils.OAuth2HttpUtils;
-import com.hys.app.oauth2.utils.OAuth2Utils;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-import javax.servlet.http.HttpServletRequest;
-import java.util.List;
-
-/**
- * OAuth2.0 授权 API
- *
- * @author 张崧
- * @since 2024-02-20
- */
-@Api(tags = "OAuth2.0 授权")
-@RestController
-@RequestMapping("/oauth2")
-@Validated
-@Slf4j
-public class OAuth2OpenController {
-
-    @Autowired
-    private OAuth2GrantManager oAuth2GrantManager;
-    @Autowired
-    private OAuth2ClientManager oAuth2ClientManager;
-    @Autowired
-    private OAuth2TokenManager oAuth2TokenManager;
-
-    /**
-     * 对应 Spring Security OAuth的  TokenEndpoint 类的 postAccessToken 方法
-     * <p>
-     * 授权码 authorization_code 模式时:code + redirectUri + state 参数
-     * 密码 password 模式时:username + password + scope 参数
-     * 刷新 refresh_token 模式时:refreshToken 参数
-     * 客户端 client_credentials 模式:scope 参数
-     * 简化 implicit 模式时:不支持
-     * <p>
-     * 默认都需要传递 client_id + client_secret 参数
-     */
-    @GetMapping("/token")
-    @ApiOperation(value = "获得访问令牌")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "grant_type", required = true, value = "授权类型",
-                    allowableValues = "password,authorization_code,client_credentials,refresh_token"),
-            @ApiImplicitParam(name = "code", value = "授权码(授权码模式必传)"),
-            @ApiImplicitParam(name = "redirect_uri", value = "重定向 URI(授权码模式必传)"),
-            @ApiImplicitParam(name = "state", value = "状态(授权码模式选传)"),
-            @ApiImplicitParam(name = "username", value = "用户名(密码模式必传)"),
-            @ApiImplicitParam(name = "password", value = "密码(密码模式必传)"),
-            @ApiImplicitParam(name = "scope", value = "授权范围(授权码、密码模式必传)"),
-            @ApiImplicitParam(name = "refresh_token", value = "刷新token(刷新模式必传)")
-    })
-    public OAuth2OpenAccessTokenRespVO postAccessToken(HttpServletRequest request,
-                                                       @RequestParam("grant_type") String grantType,
-                                                       @RequestParam(value = "code", required = false) String code,
-                                                       @RequestParam(value = "redirect_uri", required = false) String redirectUri,
-                                                       @RequestParam(value = "state", required = false) String state,
-                                                       @RequestParam(value = "username", required = false) String username,
-                                                       @RequestParam(value = "password", required = false) String password,
-                                                       @RequestParam(value = "scope", required = false) String scope,
-                                                       @RequestParam(value = "refresh_token", required = false) String refreshToken) {
-        List<String> scopes = OAuth2Utils.buildScopes(scope);
-        // 1.1 校验授权类型
-        OAuth2GrantTypeEnum grantTypeEnum = OAuth2GrantTypeEnum.getByGranType(grantType);
-        if (grantTypeEnum == null) {
-            throw new ServiceException(StrUtil.format("未知授权类型({})", grantType));
-        }
-        if (grantTypeEnum == OAuth2GrantTypeEnum.IMPLICIT) {
-            throw new ServiceException("Token 接口不支持 implicit 授权模式");
-        }
-
-        // 1.2 校验客户端
-        String[] clientIdAndSign = obtainBasicAuthorization(request);
-        OAuth2ClientDO client = oAuth2ClientManager.validOAuthClientFromCache(clientIdAndSign[0], clientIdAndSign[1], clientIdAndSign[2],
-                grantType, scopes, redirectUri);
-
-        // 2. 根据授权模式,获取访问令牌
-        OAuth2AccessTokenDO accessTokenDO;
-        switch (grantTypeEnum) {
-            case CLIENT_CREDENTIALS:
-                accessTokenDO = oAuth2GrantManager.grantClientCredentials(client.getClientId(), null);
-                break;
-            case REFRESH_TOKEN:
-                accessTokenDO = oAuth2GrantManager.grantRefreshToken(refreshToken, client.getClientId());
-                break;
-            case AUTHORIZATION_CODE:
-            case PASSWORD:
-                // todo 目前只用到了客户端模式
-                throw new UnsupportedOperationException("暂不支持");
-            default:
-                throw new IllegalArgumentException("未知授权类型:" + grantType);
-        }
-        Assert.notNull(accessTokenDO, "访问令牌错误");
-        return OAuth2OpenConvert.INSTANCE.convert(accessTokenDO);
-    }
-
-    @DeleteMapping("/token")
-    @ApiOperation(value = "删除访问令牌")
-    @ApiImplicitParam(name = "token", required = true, value = "访问令牌")
-    public void revokeToken(HttpServletRequest request, @RequestParam("token") String token) {
-        // 校验客户端
-        String[] clientIdAndSecret = obtainBasicAuthorization(request);
-        OAuth2ClientDO client = oAuth2ClientManager.validOAuthClientFromCache(clientIdAndSecret[0], clientIdAndSecret[1],
-                clientIdAndSecret[2], null, null, null);
-
-        // 删除访问令牌
-        oAuth2GrantManager.revokeToken(client.getClientId(), token);
-    }
-
-    /**
-     * 对应 Spring Security OAuth 的 CheckTokenEndpoint 类的 checkToken 方法
-     */
-    @PostMapping("/check-token")
-    @ApiOperation(value = "校验访问令牌")
-    @ApiImplicitParam(name = "token", required = true, value = "访问令牌", example = "biu")
-    public OAuth2OpenCheckTokenRespVO checkToken(HttpServletRequest request,
-                                                 @RequestParam("token") String token) {
-        // 校验客户端
-        String[] clientIdAndSecret = obtainBasicAuthorization(request);
-        oAuth2ClientManager.validOAuthClientFromCache(clientIdAndSecret[0], clientIdAndSecret[1],
-                clientIdAndSecret[2], null, null, null);
-
-        // 校验令牌
-        OAuth2AccessTokenDO accessTokenDO = oAuth2TokenManager.checkAccessToken(token);
-        return OAuth2OpenConvert.INSTANCE.convert2(accessTokenDO);
-    }
-
-    /**
-     * 对应 Spring Security OAuth 的 AuthorizationEndpoint 类的 authorize 方法
-     */
-    @GetMapping("/authorize")
-    @ApiOperation(value = "获得授权信息", notes = "适合 code 授权码模式,或者 implicit 简化模式;在 sso.vue 单点登录界面被【获取】调用")
-    @ApiImplicitParam(name = "clientId", required = true, value = "客户端编号", example = "tudou")
-    public OAuth2OpenAuthorizeInfoRespVO authorize(@RequestParam("clientId") String clientId) {
-        // todo 目前系统只实现客户端模式
-        throw new UnsupportedOperationException("暂不支持");
-    }
-
-    /**
-     * 对应 Spring Security OAuth 的 AuthorizationEndpoint 类的 approveOrDeny 方法
-     * <p>
-     * 场景一:【自动授权 autoApprove = true】
-     * 刚进入 sso.vue 界面,调用该接口,用户历史已经给该应用做过对应的授权,或者 OAuth2Client 支持该 scope 的自动授权
-     * 场景二:【手动授权 autoApprove = false】
-     * 在 sso.vue 界面,用户选择好 scope 授权范围,调用该接口,进行授权。此时,approved 为 true 或者 false
-     * <p>
-     * 因为前后端分离,Axios 无法很好的处理 302 重定向,所以和 Spring Security OAuth 略有不同,返回结果是重定向的 URL,剩余交给前端处理
-     */
-    @PostMapping("/authorize")
-    @ApiOperation(value = "申请授权", notes = "适合 code 授权码模式,或者 implicit 简化模式;在 sso.vue 单点登录界面被【提交】调用")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "response_type", required = true, value = "响应类型"),
-            @ApiImplicitParam(name = "client_id", required = true, value = "客户端编号"),
-            @ApiImplicitParam(name = "scope", value = "授权范围", example = "userinfo.read"), // 使用 Map<String, Boolean> 格式,Spring MVC 暂时不支持这么接收参数
-            @ApiImplicitParam(name = "redirect_uri", required = true, value = "重定向 URI"),
-            @ApiImplicitParam(name = "auto_approve", required = true, value = "用户是否接受", example = "true"),
-            @ApiImplicitParam(name = "state", example = "1")
-    })
-    public String approveOrDeny(@RequestParam("response_type") String responseType,
-                                @RequestParam("client_id") String clientId,
-                                @RequestParam(value = "scope", required = false) String scope,
-                                @RequestParam("redirect_uri") String redirectUri,
-                                @RequestParam(value = "auto_approve") Boolean autoApprove,
-                                @RequestParam(value = "state", required = false) String state) {
-        // todo 目前系统只实现客户端模式
-        throw new UnsupportedOperationException("暂不支持");
-    }
-
-    private String[] obtainBasicAuthorization(HttpServletRequest request) {
-        String[] clientIdAndSecret = OAuth2HttpUtils.obtainBasicAuthorization(request);
-        if (ArrayUtil.isEmpty(clientIdAndSecret) || clientIdAndSecret.length != 3) {
-            throw new ServiceException("client_id 或 sign 或 timestamp 未正确传递");
-        }
-        return clientIdAndSecret;
-    }
-
-}

+ 0 - 34
module-openapi/src/main/java/com/hys/app/controller/open/TestController.java

@@ -1,34 +0,0 @@
-package com.hys.app.controller.open;
-
-import com.hys.app.model.oauth2.dto.LoginClient;
-import com.hys.app.model.oauth2.vo.OAuth2OpenAuthorizeInfoRespVO;
-import com.hys.app.oauth2.LoginClientHolder;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * OAuth2.0 授权 API
- *
- * @author 张崧
- * @since 2024-02-20
- */
-@Api(tags = "OAuth2.0 授权")
-@RestController
-@RequestMapping("/open/test")
-@Validated
-@Slf4j
-public class TestController {
-
-    @GetMapping
-    public String test() {
-        return LoginClientHolder.getClientId();
-    }
-
-}

+ 0 - 26
module-openapi/src/main/java/com/hys/app/converter/datasync/MessagePushConverter.java

@@ -1,26 +0,0 @@
-package com.hys.app.converter.datasync;
-
-import org.mapstruct.Mapper;
-import org.mapstruct.MappingConstants;
-import com.hys.app.model.datasync.dos.MessagePushDO;
-import com.hys.app.model.datasync.vo.MessagePushVO;
-import com.hys.app.framework.database.WebPage;
-import java.util.List;
-
-/**
- * 消息推送 Convert
- *
- * @author 张崧
- * @since 2023-12-18 16:24:10
- */
-@Mapper(componentModel = MappingConstants.ComponentModel.SPRING)
-public interface MessagePushConverter {
-
-    MessagePushVO convert(MessagePushDO messagePushDO);
-    
-    List<MessagePushVO> convert(List<MessagePushDO> list);
-    
-    WebPage<MessagePushVO> convert(WebPage<MessagePushDO> webPage);
-    
-}
-

+ 0 - 28
module-openapi/src/main/java/com/hys/app/converter/datasync/MessageReceiveConverter.java

@@ -1,28 +0,0 @@
-package com.hys.app.converter.datasync;
-
-import org.mapstruct.Mapper;
-import org.mapstruct.MappingConstants;
-import com.hys.app.model.datasync.dos.MessageReceiveDO;
-import com.hys.app.model.datasync.vo.MessageReceiveVO;
-import com.hys.app.model.datasync.dto.MessageReceiveDTO;
-import com.hys.app.framework.database.WebPage;
-import java.util.List;
-
-/**
- * 消息接收 Convert
- *
- * @author 张崧
- * @since 2023-12-19 17:41:37
- */
-@Mapper(componentModel = MappingConstants.ComponentModel.SPRING)
-public interface MessageReceiveConverter {
-    MessageReceiveDO convert(MessageReceiveDTO messageReceiveDTO);
-    
-    MessageReceiveVO convert(MessageReceiveDO messageReceiveDO);
-    
-    List<MessageReceiveVO> convert(List<MessageReceiveDO> list);
-    
-    WebPage<MessageReceiveVO> convert(WebPage<MessageReceiveDO> webPage);
-    
-}
-

+ 0 - 58
module-openapi/src/main/java/com/hys/app/converter/oauth2/OAuth2OpenConvert.java

@@ -1,58 +0,0 @@
-package com.hys.app.converter.oauth2;
-
-import com.hys.app.framework.util.BeanUtils;
-import com.hys.app.framework.util.CollectionUtils;
-import com.hys.app.model.base.KeyValue;
-import com.hys.app.model.oauth2.dos.OAuth2AccessTokenDO;
-import com.hys.app.model.oauth2.dos.OAuth2ApproveDO;
-import com.hys.app.model.oauth2.dos.OAuth2ClientDO;
-import com.hys.app.model.oauth2.vo.OAuth2OpenAccessTokenRespVO;
-import com.hys.app.model.oauth2.vo.OAuth2OpenAuthorizeInfoRespVO;
-import com.hys.app.model.oauth2.vo.OAuth2OpenCheckTokenRespVO;
-import com.hys.app.oauth2.utils.OAuth2Utils;
-import org.mapstruct.Mapper;
-import org.mapstruct.factory.Mappers;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-/**
- * OAuth2Open的 converter
- *
- * @author 张崧
- * @since 2024-02-20
- */
-@Mapper
-public interface OAuth2OpenConvert {
-
-    OAuth2OpenConvert INSTANCE = Mappers.getMapper(OAuth2OpenConvert.class);
-
-    default OAuth2OpenAccessTokenRespVO convert(OAuth2AccessTokenDO bean) {
-        OAuth2OpenAccessTokenRespVO respVO = BeanUtils.toBean(bean, OAuth2OpenAccessTokenRespVO.class);
-        respVO.setTokenType(OAuth2Utils.AUTHORIZATION_BEARER.toLowerCase());
-        respVO.setExpiresIn(OAuth2Utils.getExpiresIn(bean.getExpiresTime()));
-        respVO.setScope(OAuth2Utils.buildScopeStr(bean.getScopes()));
-        return respVO;
-    }
-
-    default OAuth2OpenCheckTokenRespVO convert2(OAuth2AccessTokenDO bean) {
-        OAuth2OpenCheckTokenRespVO respVO = BeanUtils.toBean(bean, OAuth2OpenCheckTokenRespVO.class);
-        respVO.setExp(bean.getExpiresTime());
-        return respVO;
-    }
-
-    default OAuth2OpenAuthorizeInfoRespVO convert(OAuth2ClientDO client, List<OAuth2ApproveDO> approves) {
-        // 构建 scopes
-        List<KeyValue<String, Boolean>> scopes = new ArrayList<>(client.getScopes().size());
-        Map<String, OAuth2ApproveDO> approveMap = CollectionUtils.convertMap(approves, OAuth2ApproveDO::getScope);
-        client.getScopes().forEach(scope -> {
-            OAuth2ApproveDO approve = approveMap.get(scope);
-            scopes.add(new KeyValue<>(scope, approve != null ? approve.getApproved() : false));
-        });
-        // 拼接返回
-        return new OAuth2OpenAuthorizeInfoRespVO(
-                new OAuth2OpenAuthorizeInfoRespVO.Client(client.getName(), client.getLogo()), scopes);
-    }
-
-}

+ 0 - 53
module-openapi/src/main/java/com/hys/app/mapper/datasync/MessagePushMapper.java

@@ -1,53 +0,0 @@
-package com.hys.app.mapper.datasync;
-
-import com.hys.app.framework.database.WebPage;
-import com.hys.app.framework.database.mybatisplus.base.BaseMapperX;
-import com.hys.app.model.datasync.dos.MessagePushDO;
-import com.hys.app.model.datasync.dto.MessagePushQueryParams;
-import com.hys.app.model.datasync.enums.MessagePushStatusEnum;
-
-import java.util.List;
-
-/**
- * 消息推送的Mapper
- *
- * @author 张崧
- * @since 2023-12-18 16:24:10
- */
-public interface MessagePushMapper extends BaseMapperX<MessagePushDO> {
-
-    default WebPage<MessagePushDO> selectPage(MessagePushQueryParams params) {
-        return lambdaQuery()
-                .eqIfPresent(MessagePushDO::getTargetSystem, params.getTargetSystem())
-                .eqIfPresent(MessagePushDO::getBusinessType, params.getBusinessType())
-                .likeIfPresent(MessagePushDO::getSummary, params.getSummary())
-                .likeIfPresent(MessagePushDO::getContent, params.getContent())
-                .betweenIfPresent(MessagePushDO::getProduceTime, params.getProduceTime())
-                .eqIfPresent(MessagePushDO::getStatus, params.getStatus())
-                .likeIfPresent(MessagePushDO::getRemark, params.getRemark())
-                .orderByDesc(MessagePushDO::getId)
-                .page(params);
-    }
-
-    default List<MessagePushDO> selectWaitPushList(Long lastId, int limit, int maxRetryCount){
-        return lambdaQuery()
-                // 查询推送失败的
-                .in(MessagePushDO::getStatus, MessagePushStatusEnum.Fail)
-                // 失败次数达到一定次数不再推送
-                .lt(MessagePushDO::getFailCount, maxRetryCount)
-                .gt(MessagePushDO::getId, lastId)
-                .last("limit " + limit)
-                .list();
-    }
-
-    default void updateStatus(Long id, MessagePushStatusEnum status, String remark){
-        lambdaUpdate()
-                .set(MessagePushDO::getStatus, status)
-                .set(MessagePushDO::getRemark, remark)
-                // 如果是失败,失败次数+1
-                .setSql(status == MessagePushStatusEnum.Fail, "fail_count = fail_count + 1")
-                .eq(MessagePushDO::getId, id)
-                .update();
-    }
-}
-

+ 0 - 38
module-openapi/src/main/java/com/hys/app/mapper/datasync/MessageReceiveMapper.java

@@ -1,38 +0,0 @@
-package com.hys.app.mapper.datasync;
-
-import com.hys.app.framework.database.WebPage;
-import com.hys.app.framework.database.mybatisplus.base.BaseMapperX;
-import com.hys.app.model.datasync.dos.MessageReceiveDO;
-import com.hys.app.model.datasync.dto.MessageReceiveQueryParams;
-import com.hys.app.model.datasync.enums.MessageReceiveStatusEnum;
-
-/**
- * 消息接收的Mapper
- *
- * @author 张崧
- * @since 2023-12-19 17:41:37
- */
-public interface MessageReceiveMapper extends BaseMapperX<MessageReceiveDO> {
-
-    default WebPage<MessageReceiveDO> selectPage(MessageReceiveQueryParams params) {
-        return lambdaQuery()
-                .eqIfPresent(MessageReceiveDO::getType, params.getType())
-                .eqIfPresent(MessageReceiveDO::getMsgId, params.getMsgId())
-                .likeIfPresent(MessageReceiveDO::getContent, params.getContent())
-                .betweenIfPresent(MessageReceiveDO::getProduceTime, params.getProduceTime())
-                .betweenIfPresent(MessageReceiveDO::getReceiveTime, params.getReceiveTime())
-                .eqIfPresent(MessageReceiveDO::getStatus, params.getStatus())
-                .likeIfPresent(MessageReceiveDO::getRemark, params.getRemark())
-                .orderByDesc(MessageReceiveDO::getId)
-                .page(params);
-    }
-
-    default void updateStatus(Long id, MessageReceiveStatusEnum status, String remark) {
-        lambdaUpdate()
-                .set(MessageReceiveDO::getStatus, status)
-                .set(MessageReceiveDO::getRemark, remark)
-                .eq(MessageReceiveDO::getId, id)
-                .update();
-    }
-}
-

Niektoré súbory nie sú zobrazené, pretože je v týchto rozdielových dátach zmenené mnoho súborov