Browse Source

代码提交

fuyuchuan 5 months ago
parent
commit
579575c318

+ 1 - 1
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/PmProjectController.java

@@ -90,7 +90,7 @@ public class PmProjectController {
      *
      * @param projectId 项目id
      */
-    @DeleteMapping("/delNew")
+    @DeleteMapping("/{projectId}")
     public void del(@RequestParam Integer projectId) {
         pmProjectService.delProject(projectId);
     }

+ 31 - 15
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/PmProjectServiceImpl.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.datascope.annotation.DataScope;
+import com.ruoyi.common.datascope.context.DataScopeContextHolder;
 import com.usky.common.core.bean.CommonPage;
 import com.usky.common.core.exception.BusinessException;
 import com.usky.common.security.utils.SecurityUtils;
@@ -67,7 +69,7 @@ public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, P
         Integer tenantId = SecurityUtils.getTenantId();
         LocalDateTime now = LocalDateTime.now();
 
-        if (project.getVisibleRange() == null){
+        if (project.getVisibleRange() == null) {
             project.setVisibleRange((byte) 1);
         }
 
@@ -154,7 +156,7 @@ public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, P
                 )
                 .in(PmProject::getProjectStatus, 1, 2, 3);
         List<PmProject> list = this.list(wrapper);
-        if (list.isEmpty()){
+        if (list.isEmpty()) {
             return list;
         }
 
@@ -165,8 +167,8 @@ public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, P
                 .in(PmWorkContent::getProjectId, projectIds)
                 .between(PmWorkContent::getCreateTime, LocalDateTime.now().minusDays(29), LocalDateTime.now());
         List<PmWorkContent> pmWorkContents = pmWorkContentMapper.selectList(queryWrapper);
-        if (pmWorkContents.isEmpty()){
-            for (PmProject project : list){
+        if (pmWorkContents.isEmpty()) {
+            for (PmProject project : list) {
                 project.setSubmissions(0L);
             }
             return list;
@@ -177,10 +179,10 @@ public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, P
 
         for (PmProject project : list) {
             Integer id = project.getId();
-            Long aLong = projectIdCountMap.getOrDefault(id,0L);
+            Long aLong = projectIdCountMap.getOrDefault(id, 0L);
             project.setSubmissions(aLong);
         }
-        //降序排序
+        // 降序排序
         Collections.sort(list, new Comparator<PmProject>() {
             @Override
             public int compare(PmProject p1, PmProject p2) {
@@ -247,7 +249,7 @@ public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, P
         }
         lambdaQuery.orderByDesc(PmProject::getCreateTime);
         List<PmProject> pmProjects = pmProjectMapper.selectList(lambdaQuery);
-        if (pmProjects.isEmpty()){
+        if (pmProjects.isEmpty()) {
             return new CommonPage<>(pmProjects, 0, pageSize, pageNum);
         }
 
@@ -345,13 +347,17 @@ public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, P
     public List<Map<String, Object>> projectUsers(Long userId) {
         List<Map<String, Object>> returnList = new ArrayList<>();
         List<SysUser> userList = new ArrayList<>();
+        LambdaQueryWrapper<SysUser> queryNameId = Wrappers.lambdaQuery();
         if (userId != null) {
-            LambdaQueryWrapper<SysUser> queryNameId = Wrappers.lambdaQuery();
-            queryNameId.select(SysUser::getUserId, SysUser::getNickName)
+            queryNameId.select(SysUser::getUserId, SysUser::getNickName, SysUser::getUserName)
                     .eq(SysUser::getUserId, userId);
-            userList = sysUserMapper.selectList(queryNameId);
         } else {
-            LambdaQueryWrapper<PmProject> wrapper = Wrappers.lambdaQuery();
+            queryNameId.select(SysUser::getUserId, SysUser::getNickName, SysUser::getUserName)
+                    .eq(SysUser::getDelFlag, 0)
+                    .eq(SysUser::getStatus, "0")
+                    .apply(Objects.nonNull(DataScopeContextHolder.getDataScopeSql()), DataScopeContextHolder.getDataScopeSql());
+
+/*            LambdaQueryWrapper<PmProject> wrapper = Wrappers.lambdaQuery();
             wrapper.select(PmProject::getProjectHead, PmProject::getProjectMember)
                     .eq(PmProject::getTenantId, SecurityUtils.getTenantId())
                     .eq(PmProject::getDelFlag, 0);
@@ -372,8 +378,9 @@ public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, P
             LambdaQueryWrapper<SysUser> wrapper2 = Wrappers.lambdaQuery();
             wrapper2.select(SysUser::getUserId, SysUser::getNickName)
                     .in(SysUser::getUserId, finalList);
-            userList = sysUserMapper.selectList(wrapper2);
+            userList = sysUserMapper.selectList(wrapper2);*/
         }
+        userList = sysUserMapper.selectList(queryNameId);
         for (SysUser user : userList) {
             Map<String, Object> map = new HashMap<>();
             map.put("id", user.getUserId());
@@ -388,16 +395,25 @@ public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, P
      *
      * @return
      */
+    @DataScope
     @Override
     public List<Map<String, Object>> projectIdName(Integer projectId) {
+        Long userId = SecurityUtils.getUserId();
         List<Map<String, Object>> returnList = new ArrayList<>();
         LambdaQueryWrapper<PmProject> wrapper = Wrappers.lambdaQuery();
-        wrapper.select(PmProject::getId, PmProject::getProjectName)
-                .eq(PmProject::getTenantId, SecurityUtils.getTenantId())
-                .eq(PmProject::getDelFlag, 0);
+        wrapper.select(PmProject::getId, PmProject::getProjectName);
         if (projectId != null) {
             wrapper.eq(PmProject::getId, projectId);
+        } else {
+            wrapper.eq(PmProject::getDelFlag, 0)
+                    .and(qw -> qw
+                            .apply(Objects.nonNull(DataScopeContextHolder.getDataScopeSql()), DataScopeContextHolder.getDataScopeSql())
+                            .or().eq(PmProject::getProjectHead, userId)
+                            .or().eq(PmProject::getCreateBy, SecurityUtils.getUsername())
+                            .or().apply("FIND_IN_SET('" + SecurityUtils.getUserId() + "', project_member) > 0")
+                    );
         }
+
         List<PmProject> projects = pmProjectMapper.selectList(wrapper);
         for (PmProject project : projects) {
             Map<String, Object> returnMap = new HashMap<>();

+ 64 - 42
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/PmWorkContentServiceImpl.java

@@ -697,19 +697,24 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
      * @description: 项目查询-工具
      * @author: fu
      * @date: 2024/8/8 19:22
-     * @param: [startDate, endDate]
      * @return: java.util.List<java.lang.Integer>
      **/
     private List<PmProject> projects(Integer projectId) {
-        Integer tenantId = SecurityUtils.getTenantId();
-        Long deptId = SecurityUtils.getLoginUser().getSysUser().getDeptId();
+        Long userId = SecurityUtils.getUserId();
         LambdaQueryWrapper<PmProject> projectsQuery = Wrappers.lambdaQuery();
         projectsQuery.select(PmProject::getId, PmProject::getProjectName);
         if (projectId != null && projectId >= 0) {
             projectsQuery.eq(PmProject::getId, projectId);
             return pmProjectMapper.selectList(projectsQuery);
+        } else {
+            projectsQuery.and(qw -> qw
+                    .apply(Objects.nonNull(DataScopeContextHolder.getDataScopeSql()), DataScopeContextHolder.getDataScopeSql())
+                    .or().eq(PmProject::getProjectHead, userId)
+                    .or().eq(PmProject::getCreateBy, SecurityUtils.getUsername())
+                    .or().apply("FIND_IN_SET('" + SecurityUtils.getUserId() + "', project_member) > 0")
+            );
         }
-        projectsQuery.eq(PmProject::getTenantId, tenantId).eq(PmProject::getDeptId, deptId).eq(PmProject::getDelFlag, 0);
+        projectsQuery.eq(PmProject::getDelFlag, 0);
         return pmProjectMapper.selectList(projectsQuery);
     }
 
@@ -800,13 +805,13 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
             userId = requestVO.getUserIds();
         }
         Integer projectId = requestVO.getProjectId();
-        Integer filter = 1;
+        int filter = 1;
         if (requestVO.getFilter() != null) {
             filter = requestVO.getFilter();
         }
         String startDate = requestVO.getStartDate();
         String endDate = requestVO.getEndDate();
-        Integer workerOrProject = 1;
+        int workerOrProject = 1;
         if (requestVO.getWorkerOrProject() != null) {
             workerOrProject = requestVO.getWorkerOrProject();
         }
@@ -823,14 +828,6 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
             throw new BusinessException("请设置查询时间范围!");
         }
 
-        List<PmProject> pmProjects = projects(projectId);
-        List<String> pmProjectName = new ArrayList<>();
-        List<Integer> pmProjectId = new ArrayList<>();
-        for (PmProject project : pmProjects) {
-            pmProjectName.add(project.getProjectName());
-            pmProjectId.add(project.getId());
-        }
-
         List<SysUser> users = userNameList(userId);
         List<Long> userIds = new ArrayList<>();
         List<String> nickName = new ArrayList<>();
@@ -839,6 +836,14 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
             nickName.add(user.getNickName());
         }
 
+        List<PmProject> pmProjects = projects(projectId);
+        List<String> pmProjectName = new ArrayList<>();
+        List<Integer> pmProjectId = new ArrayList<>();
+        for (PmProject project : pmProjects) {
+            pmProjectName.add(project.getProjectName());
+            pmProjectId.add(project.getId());
+        }
+
         // 统计userId每个项目所需工时
         List<WorkHoursStatisticsVO> userAndProject = new ArrayList<>();
         List<PmWorkContent> pmWorkContentList = workTimeCount(userIds, pmProjectId, startDate, endDate);
@@ -859,7 +864,7 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
                 for (PmProject project : pmProjects) {
                     Integer projectId2 = project.getId();
                     String projectName = project.getProjectName();
-                    if (projectId2 == projectId1) {
+                    if (Objects.equals(projectId2, projectId1)) {
                         workHoursStatisticsVO.setProjectName(projectName);
                     }
                 }
@@ -881,13 +886,14 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
                         workTime.add(BigDecimal.ZERO);
                     }
                 } else {
-                    for (String currentNickName : nickName) {
-                        boolean foundWorkTime = false;
-                        for (WorkHoursStatisticsVO workHoursStatisticsVO : userAndProject) {
-                            String userNickName = workHoursStatisticsVO.getNickName();
-                            String projectName = workHoursStatisticsVO.getProjectName();
-                            BigDecimal userProjectWorkTime = workHoursStatisticsVO.getWorkTime();
-                            if (projectName == name && userNickName == currentNickName) {
+
+                    boolean foundWorkTime = false;
+                    for (WorkHoursStatisticsVO workHoursStatisticsVO : userAndProject) {
+                        String userNickName = workHoursStatisticsVO.getNickName();
+                        String projectName = workHoursStatisticsVO.getProjectName();
+                        BigDecimal userProjectWorkTime = workHoursStatisticsVO.getWorkTime();
+                        for (String currentNickName : nickName) {
+                            if (Objects.equals(projectName, name) && Objects.equals(userNickName, currentNickName)) {
                                 workTime.add(userProjectWorkTime);
                                 if (userProjectWorkTime.compareTo(BigDecimal.ZERO) != 0) {
                                     hasNonZeroWorkTime = true;
@@ -896,9 +902,10 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
                                 break;
                             }
                         }
-                        if (!foundWorkTime) {
-                            workTime.add(BigDecimal.ZERO);
-                        }
+
+                    }
+                    if (!foundWorkTime) {
+                        workTime.add(BigDecimal.ZERO);
                     }
                 }
                 // 过滤0工时
@@ -910,17 +917,16 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
             returnList.add(projectWorkTime);
 
 
-            returnList.add(pmProjectName);
             // 重组返回数据结构
             for (String uName : nickName) {
-                String name1 = uName;
+                String name = uName;
                 UserWorkTimeVO userWorkTimeVO2 = new UserWorkTimeVO();
-                userWorkTimeVO2.setProjectOrPerson(name1);
-                List<BigDecimal> workTime1 = new ArrayList<>();
-                boolean hasNonZeroWorkTime1 = false;
+                userWorkTimeVO2.setProjectOrPerson(name);
+                List<BigDecimal> workTime = new ArrayList<>();
+                boolean hasNonZeroWorkTime = false;
                 if (userAndProjectD.isEmpty()) {
                     for (String currentNickName : pmProjectName) {
-                        workTime1.add(BigDecimal.ZERO);
+                        workTime.add(BigDecimal.ZERO);
                     }
                 } else {
                     for (String currentNickName : pmProjectName) {
@@ -929,26 +935,28 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
                             String userNickName = workHoursStatisticsVO.getNickName();
                             String projectName = workHoursStatisticsVO.getProjectName();
                             BigDecimal userProjectWorkTime = workHoursStatisticsVO.getWorkTime();
-                            if (userNickName == name1 && projectName == currentNickName) {
-                                workTime1.add(userProjectWorkTime);
+                            if (Objects.equals(userNickName, name) && Objects.equals(projectName, currentNickName)) {
+                                workTime.add(userProjectWorkTime);
                                 if (userProjectWorkTime.compareTo(BigDecimal.ZERO) != 0) {
-                                    hasNonZeroWorkTime1 = true;
+                                    hasNonZeroWorkTime = true;
                                 }
                                 foundWorkTime = true;
                                 break;
                             }
                         }
                         if (!foundWorkTime) {
-                            workTime1.add(BigDecimal.ZERO);
+                            workTime.add(BigDecimal.ZERO);
                         }
                     }
                 }
                 // 过滤0工时
-                if (filter != 2 || hasNonZeroWorkTime1) {
-                    userWorkTimeVO2.setWorkTime(workTime1);
+                if (filter != 2 || hasNonZeroWorkTime) {
+                    userWorkTimeVO2.setWorkTime(workTime);
                     userWorkTimeVO.add(userWorkTimeVO2);
                 }
             }
+
+            returnList.add(pmProjectName);
             returnList.add(userWorkTimeVO);
 
         } else {
@@ -971,7 +979,7 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
                             String userNickName = workHoursStatisticsVO.getNickName();
                             String projectName = workHoursStatisticsVO.getProjectName();
                             BigDecimal userProjectWorkTime = workHoursStatisticsVO.getWorkTime();
-                            if (userNickName == name && projectName == currentNickName) {
+                            if (Objects.equals(userNickName, name) && Objects.equals(projectName, currentNickName)) {
                                 workTime.add(userProjectWorkTime);
                                 if (userProjectWorkTime.compareTo(BigDecimal.ZERO) != 0) {
                                     hasNonZeroWorkTime = true;
@@ -993,8 +1001,6 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
             }
             returnList.add(userWorkTimeVO);
 
-
-            returnList.add(nickName);
             // 重组返回数据结构
             for (String name : pmProjectName) {
                 ProjectWorkTimeVO projectWorkTimeVO = new ProjectWorkTimeVO();
@@ -1032,12 +1038,28 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
                     projectWorkTime.add(projectWorkTimeVO);
                 }
             }
+
+            if (filter == 2) {
+                List<String> nickName2 = new ArrayList<>();
+                for (int i = 0; i < nickName.size(); i++) {
+                    BigDecimal workerTimeSum = BigDecimal.ZERO;
+                    for (int j = 0; j < projectWorkTime.size(); j++) {
+                        BigDecimal bigDecimal = projectWorkTime.get(j).getWorkTime().get(i);
+                        workerTimeSum = workerTimeSum.add(bigDecimal);
+                    }
+                    if (workerTimeSum.compareTo(BigDecimal.ZERO) != 0) {
+                        nickName2.add(nickName.get(i));
+                    }
+                }
+                nickName = nickName2;
+            }
+            returnList.add(nickName);
             returnList.add(projectWorkTime);
         }
         return returnList;
     }
 
-    //回退代码
+    // 回退代码
     @DataScope
     @Override
     public List<Object> workHourStatistic(Long userId, Integer projectId, Integer filter, String startDate, String endDate, Integer workerOrProject) {
@@ -1276,7 +1298,7 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
     @Override
     public List<WorkTimeExportVO> workHourStatisticExport(PmWorkHourStatisticRequestVO requestVO) {
         List<Long> userIds = new ArrayList<>();
-        if (Objects.isNull(requestVO.getUserIds()) || requestVO.getUserIds().isEmpty()){
+        if (Objects.isNull(requestVO.getUserIds()) || requestVO.getUserIds().isEmpty()) {
             userIds.add(SecurityUtils.getUserId());
             requestVO.setUserIds(userIds);
         }

+ 20 - 0
service-oa/pom.xml

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<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">
+    <parent>
+        <artifactId>usky-modules</artifactId>
+        <groupId>com.usky</groupId>
+        <version>0.0.1</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>service-oa</artifactId>
+
+    <packaging>pom</packaging>
+    <version>0.0.1</version>
+
+    <modules>
+        <module>service-oa-biz</module>
+        <module>service-oa-api</module>
+    </modules>
+</project>

+ 27 - 0
service-oa/service-oa-api/pom.xml

@@ -0,0 +1,27 @@
+<?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">
+    <parent>
+        <artifactId>service-oa</artifactId>
+        <groupId>com.usky</groupId>
+        <version>0.0.1</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>service-oa-api</artifactId>
+    <!-- SpringCloud Openfeign -->
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-openfeign</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.usky</groupId>
+            <artifactId>usky-common-core</artifactId>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <finalName>${project.artifactId}</finalName>
+    </build>
+
+</project>

+ 146 - 0
service-oa/service-oa-biz/pom.xml

@@ -0,0 +1,146 @@
+<?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">
+    <parent>
+        <artifactId>service-oa</artifactId>
+        <groupId>com.usky</groupId>
+        <version>0.0.1</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>service-oa-biz</artifactId>
+    <dependencies>
+        <dependency>
+            <groupId>com.usky</groupId>
+            <artifactId>common-cloud-starter</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.usky</groupId>
+            <artifactId>service-backend-api</artifactId>
+            <version>0.0.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.usky</groupId>
+            <artifactId>service-oa-api</artifactId>
+            <version>0.0.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>cn.afterturn</groupId>
+            <artifactId>easypoi-spring-boot-starter</artifactId>
+            <version>4.1.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>aliyun-java-sdk-core</artifactId>
+            <version>4.5.16</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
+            <version>1.1.0</version>
+        </dependency>
+
+        <!--MQTT依赖-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-integration</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.integration</groupId>
+            <artifactId>spring-integration-mqtt</artifactId>
+        </dependency>
+        <!--websocket依赖-->
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-websocket</artifactId>
+            <version>5.2.8.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>com.usky</groupId>
+            <artifactId>service-agbox-api</artifactId>
+            <version>0.0.1</version>
+            <scope>compile</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>com.usky</groupId>
+            <artifactId>service-system-api</artifactId>
+            <version>0.0.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.github.binarywang</groupId>
+            <artifactId>weixin-java-mp</artifactId>
+            <version>4.3.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-amqp</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.usky</groupId>
+            <artifactId>service-alarm-api</artifactId>
+            <version>0.0.1</version>
+            <scope>compile</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>com.usky</groupId>
+            <artifactId>ruoyi-common-core</artifactId>
+        </dependency>
+
+        <!--钉钉-->
+        <!--获取企业accessToken(企业内部应用) 新版SDK-->
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>dingtalk</artifactId>
+            <version>2.1.34</version>
+        </dependency>
+        <!--旧版SDK-->
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>alibaba-dingtalk-service-sdk</artifactId>
+            <version>2.0.0</version>
+        </dependency>
+
+    </dependencies>
+
+    <build>
+        <finalName>${project.artifactId}</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <version>2.2.6.RELEASE</version>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>com.github.shalousun</groupId>
+                <artifactId>smart-doc-maven-plugin</artifactId>
+                <version>2.1.1</version>
+                <configuration>
+                    <!--指定生成文档的使用的配置文件,配置文件放在自己的项目中-->
+                    <configFile>./src/main/resources/smart-doc.json</configFile>
+                    <!--指定项目名称-->
+                    <projectName>test</projectName>
+                    <!--                    <excludes>-->
+                    <!--                        <exclude>com.bizmatics:product-service-provider</exclude>-->
+                    <!--                        <exclude>cn.afterturn:easypoi-web</exclude>-->
+                    <!--                    </excludes>-->
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>

+ 66 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/ServiceOaApplication.java

@@ -0,0 +1,66 @@
+package com.usky.oa;
+
+
+
+import com.usky.oa.constant.constant;
+import io.swagger.annotations.SwaggerDefinition;
+import lombok.val;
+import me.chanjar.weixin.mp.api.WxMpService;
+import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
+import me.chanjar.weixin.mp.config.impl.WxMpMapConfigImpl;
+import org.mybatis.spring.annotation.MapperScan;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.amqp.rabbit.annotation.EnableRabbit;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.core.env.Environment;
+
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+
+/**
+ * 系统模块
+ * 
+ * @author ruoyi
+ */
+
+//@EnableSwagger2
+@EnableFeignClients(basePackages = "com.usky")
+@MapperScan(value = "com.usky.oa.mapper")
+@ComponentScan("com.usky")
+@SpringBootApplication
+@EnableRabbit
+public class ServiceOaApplication
+{
+    private static final Logger LOGGER = LoggerFactory.getLogger(RuoYiSystemApplication.class);
+
+    @Bean
+    public WxMpService wxMpService(){
+        WxMpMapConfigImpl wxMpMapConfig = new WxMpMapConfigImpl();
+        wxMpMapConfig.setAppId(constant.WE_CHAT_APP_ID);
+        wxMpMapConfig.setSecret(constant.WE_CHAT_SECRET);
+        val wxMpService = new WxMpServiceImpl();
+        wxMpService.setWxMpConfigStorage(wxMpMapConfig);
+
+        return wxMpService;
+    }
+
+    public static void main(String[] args) throws UnknownHostException {
+        ConfigurableApplicationContext application = SpringApplication.run(RuoYiSystemApplication.class, args);
+        Environment env = application.getEnvironment();
+        String ip = InetAddress.getLocalHost().getHostAddress();
+        String port = env.getProperty("server.port");
+        String path = env.getProperty("server.servlet.context-path");
+        LOGGER.info("\n----------------------------------------------------------\n\t" +
+                "Application is running! Access URLs:\n\t" +
+                "Local: \t\thttp://localhost:" + port + (null==path?"":path) + "/\n\t" +
+                "External: \thttp://" + ip + ":" + port + (null==path?"":path) + "/\n\t" +
+                "Api: \t\thttp://" + ip + ":" + port + (null==path?"":path) + "/swagger-ui/index.html\n\t" +
+                "----------------------------------------------------------");
+    }
+}

+ 108 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/controller/MybatisGeneratorUtils.java

@@ -0,0 +1,108 @@
+package com.usky.iot.controller;//package com.usky.iot.controller;//package com.usky.dm.controller.web.business;//package com.usky.dm.controller.web;
+
+
+import com.baomidou.mybatisplus.core.toolkit.StringPool;
+import com.baomidou.mybatisplus.generator.AutoGenerator;
+import com.baomidou.mybatisplus.generator.InjectionConfig;
+import com.baomidou.mybatisplus.generator.config.*;
+import com.baomidou.mybatisplus.generator.config.po.TableInfo;
+import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author yq
+ * @date 2021/7/6 11:42
+ */
+public class MybatisGeneratorUtils {
+    public static void main(String[] args) {
+
+            shell("service-oa","service-oa-biz");
+    }
+
+    private static void shell(String parentName,String model) {
+
+        AutoGenerator mpg = new AutoGenerator();
+        //1、全局配置
+        GlobalConfig gc = new GlobalConfig();
+//        File file = new File(model);
+//        String path = file.getAbsolutePath();
+        String projectPath = System.getProperty("user.dir");
+        projectPath+="/"+parentName;
+        projectPath+="/"+model;
+        gc.setOutputDir(projectPath+ "/src/main/java");  //生成路径(一般都是生成在此项目的src/main/java下面)
+        //修改为自己的名字
+        gc.setAuthor("fu"); //设置作者
+        gc.setOpen(false);
+        gc.setFileOverride(true); //第二次生成会把第一次生成的覆盖掉
+        gc.setServiceName("%sService"); //生成的service接口名字首字母是否为I,这样设置就没有
+        gc.setBaseResultMap(true); //生成resultMap
+        mpg.setGlobalConfig(gc);
+
+        //2、数据源配置
+        //修改数据源
+        DataSourceConfig dsc = new DataSourceConfig();
+        dsc.setUrl("jdbc:mysql://172.16.120.165:3306/usky-cloud?useUnicode=true&serverTimezone=GMT&useSSL=false&characterEncoding=utf8");
+        dsc.setDriverName("com.mysql.jdbc.Driver");
+        dsc.setUsername("usky");
+        dsc.setPassword("Yt#75Usky");
+        mpg.setDataSource(dsc);
+
+        // 3、包配置
+        PackageConfig pc = new PackageConfig();
+        pc.setParent("com.usky.oa");
+        pc.setController("controller.web");
+        pc.setEntity("domain");
+        pc.setMapper("mapper");
+        pc.setService("service");
+        pc.setServiceImpl("service.impl");
+//        pc.setXml("mapper.demo");
+        //pc.setModuleName("test");
+        mpg.setPackageInfo(pc);
+
+        // 4、策略配置
+        StrategyConfig strategy = new StrategyConfig();
+        strategy.setNaming(NamingStrategy.underline_to_camel);
+        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
+        strategy.setSuperMapperClass("com.usky.common.mybatis.core.CrudMapper");
+        strategy.setSuperServiceClass("com.usky.common.mybatis.core.CrudService");
+        strategy.setSuperServiceImplClass("com.usky.common.mybatis.core.AbstractCrudService");
+        // strategy.setTablePrefix("t_"); // 表名前缀
+        strategy.setEntityLombokModel(true); //使用lombok
+        //修改自己想要生成的表
+        strategy.setInclude("sys_dept");  // 逆向工程使用的表   如果要生成多个,这里可以传入String[]
+        mpg.setStrategy(strategy);
+
+        // 关闭默认 xml 生成,调整生成 至 根目录
+        //修改对应的模块名称
+        TemplateConfig tc = new TemplateConfig();
+        // 自定义配置
+        InjectionConfig cfg = new InjectionConfig() {
+            @Override
+            public void initMap() {
+                // to do nothing
+            }
+        };
+        //如果模板引擎是 velocity
+        String templatePath = "/templates/mapper.xml.vm";
+        // 自定义输出配置
+        List<FileOutConfig> focList = new ArrayList<>();
+        // 自定义配置会被优先输出
+        String finalProjectPath = projectPath;
+        focList.add(new FileOutConfig(templatePath) {
+            @Override
+            public String outputFile(TableInfo tableInfo) {
+                // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
+                return finalProjectPath + "/src/main/resources/mapper/iot" + "/"
+                        + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
+            }
+        });
+        cfg.setFileOutConfigList(focList);
+        mpg.setCfg(cfg);
+        tc.setXml(null);
+        mpg.setTemplate(tc);
+        //5、执行
+        mpg.execute();
+    }
+}

+ 25 - 0
service-oa/service-oa-biz/src/main/resources/bootstrap.yml

@@ -0,0 +1,25 @@
+# Tomcat
+server:
+  port: 9889
+
+# Spring
+spring: 
+  application:
+    # 应用名称
+    name: service-oa
+  profiles:
+    # 环境配置
+    active: dev
+  cloud:
+    nacos:
+      discovery:
+        # 服务注册地址
+        server-addr: usky-cloud-nacos:8848
+      config:
+        # 配置中心地址
+        server-addr: usky-cloud-nacos:8848
+        # 配置文件格式
+        file-extension: yml
+        # 共享配置
+        shared-configs:
+          - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}

+ 108 - 0
service-oa/service-oa-biz/src/main/resources/doc/index.adoc

@@ -0,0 +1,108 @@
+= oa项目
+
+[width="100%",options="header"]
+[stripes=even]
+|====================
+|Version |  Update Time  | Status | Author |  Description
+|v2022-04-21 16:57:08|2022-04-21 16:57:08|auto|@yq|Created by smart-doc
+|====================
+
+
+== &lt;p&gt;参数配置表 前端控制器&lt;/p&gt;
+== &lt;p&gt;部门信息&lt;/p&gt;
+=== 查看部门信息
+*URL:* http:10.23.39.1:8082/sysDept/list
+
+*Type:* POST
+
+*Author:* ya
+
+*Content-Type:* application/json; charset=utf-8
+
+
+
+
+*Body-parameters:*
+
+[width="100%",options="header"]
+[stripes=even]
+|====================
+|Parameter | Type|Description|Required|Since
+|deptId|int64|部门id|false|-
+|parentId|int64|父部门id|false|-
+|ancestors|string|祖级列表|false|-
+|deptName|string|部门名称|false|-
+|orderNum|int32|显示顺序|false|-
+|leader|string|负责人|false|-
+|phone|string|联系电话|false|-
+|email|string|邮箱|false|-
+|status|string|部门状态(0正常 1停用)|false|-
+|delFlag|string|删除标志(0代表存在 2代表删除)|false|-
+|createBy|string|创建者|false|-
+|createTime|string|创建时间|false|-
+|updateBy|string|更新者|false|-
+|updateTime|string|更新时间|false|-
+|bId|int64|建筑id|false|-
+|====================
+
+*Response-fields:*
+
+[width="100%",options="header"]
+[stripes=even]
+|====================
+|Field | Type|Description|Since
+|status|object|No comments found.|-
+|code|string|No comments found.|-
+|msg|string|No comments found.|-
+|data|object|No comments found.|-
+|└─deptId|int64|部门id|-
+|└─parentId|int64|父部门id|-
+|└─ancestors|string|祖级列表|-
+|└─deptName|string|部门名称|-
+|└─orderNum|int32|显示顺序|-
+|└─leader|string|负责人|-
+|└─phone|string|联系电话|-
+|└─email|string|邮箱|-
+|└─status|string|部门状态(0正常 1停用)|-
+|└─delFlag|string|删除标志(0代表存在 2代表删除)|-
+|└─createBy|string|创建者|-
+|└─createTime|string|创建时间|-
+|└─updateBy|string|更新者|-
+|└─updateTime|string|更新时间|-
+|└─bId|int64|建筑id|-
+|exception|string|No comments found.|-
+|====================
+
+*Response-example:*
+----
+{
+	"status": {
+		
+	},
+	"code": "97564",
+	"msg": "wnr5qt",
+	"data": [
+		{
+			"deptId": 540,
+			"parentId": 858,
+			"ancestors": "o5lg60",
+			"deptName": "文.沈",
+			"orderNum": 260,
+			"leader": "ufz93p",
+			"phone": "17852835049",
+			"email": "智渊.徐@yahoo.com",
+			"status": "nu6cnp",
+			"delFlag": "72oiji",
+			"createBy": "5fxr6j",
+			"createTime": "2022-04-21 16:57:10",
+			"updateBy": "4kcs4e",
+			"updateTime": "2022-04-21 16:57:10",
+			"bId": 977
+		}
+	],
+	"exception": "53u6bg"
+}
+----
+
+== &lt;p&gt;用户信息表 前端控制器&lt;/p&gt;
+

+ 94 - 0
service-oa/service-oa-biz/src/main/resources/logback.xml

@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration scan="true" scanPeriod="60 seconds" debug="false">
+    <!-- 日志存放路径 -->
+    <property name="log.path" value="/var/log/uskycloud/service-oa" />
+    <!-- 日志输出格式 -->
+    <property name="log.pattern" value="%d{MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{26}:%line: %msg%n" />
+    <!--    	<property name="log.pattern" value="%gray(%d{MM-dd HH:mm:ss.SSS}) %highlight(%-5level) &#45;&#45; [%gray(%thread)] %cyan(%logger{26}:%line): %msg%n" />-->
+
+
+    <property name="SQL_PACKAGE" value="com.usky.oa.mapper"/>
+
+    <!-- 控制台输出 -->
+    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+        </encoder>
+    </appender>
+
+    <appender name="file_sql" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${log.path}/sql.log</file>
+        <!-- 循环政策:基于时间创建日志文件 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 日志文件名格式 -->
+            <fileNamePattern>${log.path}/sql.%d{yyyy-MM-dd}.log</fileNamePattern>
+            <!-- 日志最大的历史 60天 -->
+            <maxHistory>3</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+        </encoder>
+    </appender>
+
+    <!-- 系统日志输出 -->
+    <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${log.path}/info.log</file>
+        <!-- 循环政策:基于时间创建日志文件 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 日志文件名格式 -->
+            <fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
+            <!-- 日志最大的历史 60天 -->
+            <maxHistory>3</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+        </encoder>
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <!-- 过滤的级别 -->
+            <level>INFO</level>
+            <!-- 匹配时的操作:接收(记录) -->
+            <onMatch>ACCEPT</onMatch>
+            <!-- 不匹配时的操作:拒绝(不记录) -->
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${log.path}/error.log</file>
+        <!-- 循环政策:基于时间创建日志文件 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 日志文件名格式 -->
+            <fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
+            <!-- 日志最大的历史 60天 -->
+            <maxHistory>60</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+        </encoder>
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <!-- 过滤的级别 -->
+            <level>ERROR</level>
+            <!-- 匹配时的操作:接收(记录) -->
+            <onMatch>ACCEPT</onMatch>
+            <!-- 不匹配时的操作:拒绝(不记录) -->
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <!-- 系统模块日志级别控制  -->
+    <!--	<logger name="com.usky" level="info" />-->
+    <!-- Spring日志级别控制  -->
+    <!--	<logger name="org.springframework" level="warn" />-->
+
+    <logger name="${SQL_PACKAGE}" additivity="false" level="debug">
+        <appender-ref ref="console"/>
+        <appender-ref ref="file_sql"/>
+    </logger>
+
+    <!--系统操作日志-->
+    <root level="info">
+        <appender-ref ref="file_info" />
+        <appender-ref ref="file_error" />
+        <appender-ref ref="console" />
+    </root>
+</configuration>

+ 15 - 0
service-oa/service-oa-biz/src/main/resources/smart-doc.json

@@ -0,0 +1,15 @@
+{
+  "outPath":"./src/main/resources/doc",
+  "serverUrl": "http:10.23.39.1:9887/",
+  "isStrict": false,
+  "coverOld": true,
+  "allInOne": true,
+  "packageFilters": "com.usky.iot.controller.web",
+  "requestExample":"false",
+  "responseExample":"true",
+  "projectName": "iot项目",
+  "appKey": "20211216921084883495813120",
+  "appToken":"967031b0cc6f474aaf73616cbf2b25c2",
+  "secret": "N@Pd,KXAHki*BW3=zK.XPNykf!=CM79J",
+  "openUrl": "http://101.133.214.75:7700/api"
+}