瀏覽代碼

首次提交

龙伟 1 年之前
當前提交
aa745cbd89
共有 100 個文件被更改,包括 16721 次插入0 次删除
  1. 1 0
      .github/FUNDING.yml
  2. 47 0
      .gitignore
  3. 20 0
      LICENSE
  4. 0 0
      README.md
  5. 38 0
      base/.gitignore
  6. 65 0
      base/pom.xml
  7. 19 0
      base/src/main/java/com/ruoyi/contractInfo/contractInfoEnum/ContractInfoSjly.java
  8. 1253 0
      base/src/main/java/com/ruoyi/contractInfo/domain/ComContractInfoExchange.java
  9. 75 0
      base/src/main/java/com/ruoyi/contractInfo/mapper/ComContractInfoExchangeMapper.java
  10. 72 0
      base/src/main/java/com/ruoyi/contractInfo/service/IComContractInfoExchangeService.java
  11. 107 0
      base/src/main/java/com/ruoyi/contractInfo/service/impl/ComContractInfoExchangeServiceImpl.java
  12. 12 0
      base/src/main/java/com/ruoyi/depart/departEnum/DepartType.java
  13. 278 0
      base/src/main/java/com/ruoyi/depart/domain/SysDepart.java
  14. 71 0
      base/src/main/java/com/ruoyi/depart/mapper/SysDepartMapper.java
  15. 69 0
      base/src/main/java/com/ruoyi/depart/service/ISysDepartService.java
  16. 107 0
      base/src/main/java/com/ruoyi/depart/service/impl/SysDepartServiceImpl.java
  17. 443 0
      base/src/main/java/com/ruoyi/financeBudget/domain/FinanceBudget.java
  18. 71 0
      base/src/main/java/com/ruoyi/financeBudget/mapper/FinanceBudgetMapper.java
  19. 69 0
      base/src/main/java/com/ruoyi/financeBudget/service/IFinanceBudgetService.java
  20. 104 0
      base/src/main/java/com/ruoyi/financeBudget/service/impl/FinanceBudgetServiceImpl.java
  21. 319 0
      base/src/main/java/com/ruoyi/kyBg/domain/KyBgInfo.java
  22. 75 0
      base/src/main/java/com/ruoyi/kyBg/mapper/KyBgInfoMapper.java
  23. 69 0
      base/src/main/java/com/ruoyi/kyBg/service/IKyBgInfoService.java
  24. 105 0
      base/src/main/java/com/ruoyi/kyBg/service/impl/KyBgInfoServiceImpl.java
  25. 1723 0
      base/src/main/java/com/ruoyi/kyTask/domain/KyTaskInfo.java
  26. 80 0
      base/src/main/java/com/ruoyi/kyTask/mapper/KyTaskInfoMapper.java
  27. 72 0
      base/src/main/java/com/ruoyi/kyTask/service/IKyTaskInfoService.java
  28. 115 0
      base/src/main/java/com/ruoyi/kyTask/service/impl/KyTaskInfoServiceImpl.java
  29. 616 0
      base/src/main/java/com/ruoyi/mesInfo/domain/MesInfo.java
  30. 77 0
      base/src/main/java/com/ruoyi/mesInfo/mapper/MesInfoMapper.java
  31. 73 0
      base/src/main/java/com/ruoyi/mesInfo/service/IMesInfoService.java
  32. 112 0
      base/src/main/java/com/ruoyi/mesInfo/service/impl/MesInfoServiceImpl.java
  33. 308 0
      base/src/main/java/com/ruoyi/projectChbSwf/domain/KzksProjectChbSwf.java
  34. 73 0
      base/src/main/java/com/ruoyi/projectChbSwf/mapper/KzksProjectChbSwfMapper.java
  35. 71 0
      base/src/main/java/com/ruoyi/projectChbSwf/service/IKzksProjectChbSwfService.java
  36. 109 0
      base/src/main/java/com/ruoyi/projectChbSwf/service/impl/KzksProjectChbSwfServiceImpl.java
  37. 308 0
      base/src/main/java/com/ruoyi/projectChbWxf/domain/KzksProjectChbWxf.java
  38. 72 0
      base/src/main/java/com/ruoyi/projectChbWxf/mapper/KzksProjectChbWxfMapper.java
  39. 70 0
      base/src/main/java/com/ruoyi/projectChbWxf/service/IKzksProjectChbWxfService.java
  40. 108 0
      base/src/main/java/com/ruoyi/projectChbWxf/service/impl/KzksProjectChbWxfServiceImpl.java
  41. 308 0
      base/src/main/java/com/ruoyi/projectChbZyf/domain/KzksProjectChbZyf.java
  42. 70 0
      base/src/main/java/com/ruoyi/projectChbZyf/mapper/KzksProjectChbZyfMapper.java
  43. 70 0
      base/src/main/java/com/ruoyi/projectChbZyf/service/IKzksProjectChbZyfService.java
  44. 108 0
      base/src/main/java/com/ruoyi/projectChbZyf/service/impl/KzksProjectChbZyfServiceImpl.java
  45. 104 0
      base/src/main/java/com/ruoyi/projectCost/controller/ProjectCostController.java
  46. 655 0
      base/src/main/java/com/ruoyi/projectCost/domain/ProjectCost.java
  47. 69 0
      base/src/main/java/com/ruoyi/projectCost/mapper/ProjectCostMapper.java
  48. 69 0
      base/src/main/java/com/ruoyi/projectCost/service/IProjectCostService.java
  49. 98 0
      base/src/main/java/com/ruoyi/projectCost/service/impl/ProjectCostServiceImpl.java
  50. 612 0
      base/src/main/java/com/ruoyi/wzCk/ckDetail/domain/WzOutboundOrderB.java
  51. 89 0
      base/src/main/java/com/ruoyi/wzCk/ckDetail/mapper/WzOutboundOrderBMapper.java
  52. 87 0
      base/src/main/java/com/ruoyi/wzCk/ckDetail/service/IWzOutboundOrderBService.java
  53. 127 0
      base/src/main/java/com/ruoyi/wzCk/ckDetail/service/impl/WzOutboundOrderBServiceImpl.java
  54. 345 0
      base/src/main/java/com/ruoyi/wzCk/ckInfo/domain/WzOutboundOrderH.java
  55. 73 0
      base/src/main/java/com/ruoyi/wzCk/ckInfo/mapper/WzOutboundOrderHMapper.java
  56. 71 0
      base/src/main/java/com/ruoyi/wzCk/ckInfo/service/IWzOutboundOrderHService.java
  57. 106 0
      base/src/main/java/com/ruoyi/wzCk/ckInfo/service/impl/WzOutboundOrderHServiceImpl.java
  58. 488 0
      base/src/main/resources/mapper/contractInfo/ComContractInfoExchangeMapper.xml
  59. 156 0
      base/src/main/resources/mapper/depart/SysDepartMapper.xml
  60. 199 0
      base/src/main/resources/mapper/financeBudget/FinanceBudgetMapper.xml
  61. 157 0
      base/src/main/resources/mapper/kyBg/KyBgInfoMapper.xml
  62. 659 0
      base/src/main/resources/mapper/kyTask/KyTaskInfoMapper.xml
  63. 261 0
      base/src/main/resources/mapper/mesInfo/MesInfoMapper.xml
  64. 168 0
      base/src/main/resources/mapper/projectChbSwf/KzksProjectChbSwfMapper.xml
  65. 167 0
      base/src/main/resources/mapper/projectChbWxf/KzksProjectChbWxfMapper.xml
  66. 167 0
      base/src/main/resources/mapper/projectChbZyf/KzksProjectChbZyfMapper.xml
  67. 330 0
      base/src/main/resources/mapper/projectCost/ProjectCostMapper.xml
  68. 267 0
      base/src/main/resources/mapper/wzCk/ckDetail/WzOutboundOrderBMapper.xml
  69. 164 0
      base/src/main/resources/mapper/wzCk/ckInfo/WzOutboundOrderHMapper.xml
  70. 12 0
      bin/clean.bat
  71. 12 0
      bin/package.bat
  72. 14 0
      bin/run.bat
  73. 二進制
      doc/若依环境使用手册.docx
  74. 228 0
      pom.xml
  75. 55 0
      ruoyi-admin/pom.xml
  76. 30 0
      ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
  77. 18 0
      ruoyi-admin/src/main/java/com/ruoyi/RuoYiServletInitializer.java
  78. 94 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java
  79. 163 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java
  80. 120 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/CacheController.java
  81. 27 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/ServerController.java
  82. 82 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysLogininforController.java
  83. 69 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysOperlogController.java
  84. 83 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysUserOnlineController.java
  85. 133 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysConfigController.java
  86. 132 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java
  87. 121 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictDataController.java
  88. 131 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java
  89. 29 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysIndexController.java
  90. 86 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
  91. 142 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java
  92. 91 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysNoticeController.java
  93. 129 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysPostController.java
  94. 141 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java
  95. 38 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRegisterController.java
  96. 262 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java
  97. 251 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
  98. 183 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java
  99. 125 0
      ruoyi-admin/src/main/java/com/ruoyi/web/core/config/SwaggerConfig.java
  100. 0 0
      ruoyi-admin/src/main/resources/META-INF/spring-devtools.properties

+ 1 - 0
.github/FUNDING.yml

@@ -0,0 +1 @@
+custom: http://doc.ruoyi.vip/ruoyi-vue/other/donate.html

+ 47 - 0
.gitignore

@@ -0,0 +1,47 @@
+######################################################################
+# Build Tools
+
+.gradle
+/build/
+!gradle/wrapper/gradle-wrapper.jar
+
+target/
+!.mvn/wrapper/maven-wrapper.jar
+
+######################################################################
+# IDE
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### JRebel ###
+rebel.xml
+
+### NetBeans ###
+nbproject/private/
+build/*
+nbbuild/
+dist/
+nbdist/
+.nb-gradle/
+
+######################################################################
+# Others
+*.log
+*.xml.versionsBackup
+*.swp
+
+!*/build/*.java
+!*/build/*.html
+!*/build/*.xml

+ 20 - 0
LICENSE

@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright (c) 2018 RuoYi
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 0 - 0
README.md


+ 38 - 0
base/.gitignore

@@ -0,0 +1,38 @@
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### IntelliJ IDEA ###
+.idea/modules.xml
+.idea/jarRepositories.xml
+.idea/compiler.xml
+.idea/libraries/
+*.iws
+*.iml
+*.ipr
+
+### Eclipse ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
+
+### Mac OS ###
+.DS_Store

+ 65 - 0
base/pom.xml

@@ -0,0 +1,65 @@
+<?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.ruoyi</groupId>
+        <artifactId>Visible</artifactId>
+        <version>3.8.6</version>
+    </parent>
+
+    <artifactId>base</artifactId>
+
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+    <dependencies>
+        <!-- spring-boot-devtools -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-devtools</artifactId>
+            <optional>true</optional> <!-- 表示依赖不会传递 -->
+        </dependency>
+
+        <!-- swagger3-->
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-boot-starter</artifactId>
+        </dependency>
+
+        <!-- 防止进入swagger页面报类型转换错误,排除3.0.0中的引用,手动增加1.6.2版本 -->
+        <dependency>
+            <groupId>io.swagger</groupId>
+            <artifactId>swagger-models</artifactId>
+            <version>1.6.2</version>
+        </dependency>
+
+        <!-- Mysql驱动包 -->
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+        </dependency>
+
+        <!-- 核心模块-->
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>ruoyi-framework</artifactId>
+        </dependency>
+
+        <!-- 定时任务-->
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>ruoyi-quartz</artifactId>
+        </dependency>
+
+        <!-- 代码生成-->
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>ruoyi-generator</artifactId>
+        </dependency>
+
+    </dependencies>
+</project>

+ 19 - 0
base/src/main/java/com/ruoyi/contractInfo/contractInfoEnum/ContractInfoSjly.java

@@ -0,0 +1,19 @@
+package com.ruoyi.contractInfo.contractInfoEnum;
+
+
+public class ContractInfoSjly {
+
+    //合同宽表 数据来源
+    public static final Integer CONTRACT_MANAGE = 10;  //合同管理
+
+    public static final Integer CONTRACT_TASK = 20;  //合同任务
+
+    public static final Integer TASK_CONTRACT = 30;  //任务合同
+
+    public static final Integer CONTRACT_PAY = 40;  //合同付款
+
+    public static final Integer CONTRACT_INVOICE = 50;  //合同发票
+
+    public static final Integer WX_CONTRACT = 60;  //外协合同
+
+}

文件差異過大導致無法顯示
+ 1253 - 0
base/src/main/java/com/ruoyi/contractInfo/domain/ComContractInfoExchange.java


+ 75 - 0
base/src/main/java/com/ruoyi/contractInfo/mapper/ComContractInfoExchangeMapper.java

@@ -0,0 +1,75 @@
+package com.ruoyi.contractInfo.mapper;
+
+import com.ruoyi.contractInfo.domain.ComContractInfoExchange;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+
+/**
+ * 合同信息存储Mapper接口
+ * 
+ * @author yanxun
+ * @date 2023-08-10
+ */
+@Mapper
+public interface ComContractInfoExchangeMapper 
+{
+    /**
+     * 查询合同信息存储
+     * 
+     * @param id 合同信息存储主键
+     * @return 合同信息存储
+     */
+    public ComContractInfoExchange selectComContractInfoExchangeById(Long id);
+
+    /**
+     * 查询合同信息存储列表
+     * 
+     * @param comContractInfoExchange 合同信息存储
+     * @return 合同信息存储集合
+     */
+    public List<ComContractInfoExchange> selectComContractInfoExchangeList(ComContractInfoExchange comContractInfoExchange);
+
+    /**
+     * 新增合同信息存储
+     * 
+     * @param comContractInfoExchange 合同信息存储
+     * @return 结果
+     */
+    public int insertComContractInfoExchange(ComContractInfoExchange comContractInfoExchange);
+
+    /**
+     * 修改合同信息存储
+     * 
+     * @param comContractInfoExchange 合同信息存储
+     * @return 结果
+     */
+    public int updateComContractInfoExchange(ComContractInfoExchange comContractInfoExchange);
+
+    /**
+     * 删除合同信息存储
+     * 
+     * @param id 合同信息存储主键
+     * @return 结果
+     */
+    public int deleteComContractInfoExchangeById(Long id);
+
+    /**
+     * 批量删除合同信息存储
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteComContractInfoExchangeByIds(Long[] ids);
+
+    /**
+     * 根据任务号从合同任务查找项目成本的组成部分
+     *
+     * @param taskno 任务号
+     * @param sjly 数据来源
+     * @return 结果
+     */
+    List<ComContractInfoExchange> selectProjectCostFromCOmContractInfoExchangeByTaskNo(@Param("taskno") String taskno, @Param("sjly") Integer sjly);
+}

+ 72 - 0
base/src/main/java/com/ruoyi/contractInfo/service/IComContractInfoExchangeService.java

@@ -0,0 +1,72 @@
+package com.ruoyi.contractInfo.service;
+
+import com.ruoyi.contractInfo.domain.ComContractInfoExchange;
+
+import java.util.List;
+
+
+/**
+ * 合同信息存储Service接口
+ * 
+ * @author yanxun
+ * @date 2023-08-10
+ */
+public interface IComContractInfoExchangeService 
+{
+    /**
+     * 查询合同信息存储
+     * 
+     * @param id 合同信息存储主键
+     * @return 合同信息存储
+     */
+    public ComContractInfoExchange selectComContractInfoExchangeById(Long id);
+
+    /**
+     * 查询合同信息存储列表
+     * 
+     * @param comContractInfoExchange 合同信息存储
+     * @return 合同信息存储集合
+     */
+    public List<ComContractInfoExchange> selectComContractInfoExchangeList(ComContractInfoExchange comContractInfoExchange);
+
+    /**
+     * 新增合同信息存储
+     * 
+     * @param comContractInfoExchange 合同信息存储
+     * @return 结果
+     */
+    public int insertComContractInfoExchange(ComContractInfoExchange comContractInfoExchange);
+
+    /**
+     * 修改合同信息存储
+     * 
+     * @param comContractInfoExchange 合同信息存储
+     * @return 结果
+     */
+    public int updateComContractInfoExchange(ComContractInfoExchange comContractInfoExchange);
+
+    /**
+     * 批量删除合同信息存储
+     * 
+     * @param ids 需要删除的合同信息存储主键集合
+     * @return 结果
+     */
+    public int deleteComContractInfoExchangeByIds(Long[] ids);
+
+    /**
+     * 删除合同信息存储信息
+     * 
+     * @param id 合同信息存储主键
+     * @return 结果
+     */
+    public int deleteComContractInfoExchangeById(Long id);
+
+    /**
+     * 根据任务号从合同任务查找项目成本的组成部分
+     *
+     * @param taskno 任务号
+     * @param sjly 数据来源
+     * @return 结果
+     */
+    List<ComContractInfoExchange> selectProjectCostFromCOmContractInfoExchangeByTaskNo(String taskno,Integer sjly);
+}

+ 107 - 0
base/src/main/java/com/ruoyi/contractInfo/service/impl/ComContractInfoExchangeServiceImpl.java

@@ -0,0 +1,107 @@
+package com.ruoyi.contractInfo.service.impl;
+
+import java.util.List;
+
+import com.ruoyi.contractInfo.domain.ComContractInfoExchange;
+import com.ruoyi.contractInfo.mapper.ComContractInfoExchangeMapper;
+import com.ruoyi.contractInfo.service.IComContractInfoExchangeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+
+/**
+ * 合同信息存储Service业务层处理
+ * 
+ * @author yanxun
+ * @date 2023-08-10
+ */
+@Service
+public class ComContractInfoExchangeServiceImpl implements IComContractInfoExchangeService
+{
+    @Autowired
+    private ComContractInfoExchangeMapper comContractInfoExchangeMapper;
+
+    /**
+     * 查询合同信息存储
+     * 
+     * @param id 合同信息存储主键
+     * @return 合同信息存储
+     */
+    @Override
+    public ComContractInfoExchange selectComContractInfoExchangeById(Long id)
+    {
+        return comContractInfoExchangeMapper.selectComContractInfoExchangeById(id);
+    }
+
+    /**
+     * 查询合同信息存储列表
+     * 
+     * @param comContractInfoExchange 合同信息存储
+     * @return 合同信息存储
+     */
+    @Override
+    public List<ComContractInfoExchange> selectComContractInfoExchangeList(ComContractInfoExchange comContractInfoExchange)
+    {
+        return comContractInfoExchangeMapper.selectComContractInfoExchangeList(comContractInfoExchange);
+    }
+
+    /**
+     * 新增合同信息存储
+     * 
+     * @param comContractInfoExchange 合同信息存储
+     * @return 结果
+     */
+    @Override
+    public int insertComContractInfoExchange(ComContractInfoExchange comContractInfoExchange)
+    {
+        return comContractInfoExchangeMapper.insertComContractInfoExchange(comContractInfoExchange);
+    }
+
+    /**
+     * 修改合同信息存储
+     * 
+     * @param comContractInfoExchange 合同信息存储
+     * @return 结果
+     */
+    @Override
+    public int updateComContractInfoExchange(ComContractInfoExchange comContractInfoExchange)
+    {
+        return comContractInfoExchangeMapper.updateComContractInfoExchange(comContractInfoExchange);
+    }
+
+    /**
+     * 批量删除合同信息存储
+     * 
+     * @param ids 需要删除的合同信息存储主键
+     * @return 结果
+     */
+    @Override
+    public int deleteComContractInfoExchangeByIds(Long[] ids)
+    {
+        return comContractInfoExchangeMapper.deleteComContractInfoExchangeByIds(ids);
+    }
+
+    /**
+     * 删除合同信息存储信息
+     * 
+     * @param id 合同信息存储主键
+     * @return 结果
+     */
+    @Override
+    public int deleteComContractInfoExchangeById(Long id)
+    {
+        return comContractInfoExchangeMapper.deleteComContractInfoExchangeById(id);
+    }
+
+    /**
+     * 根据任务号从合同任务查找项目成本的组成部分
+     *
+     * @param taskno 任务号
+     * @param sjly 数据来源
+     * @return 结果
+     */
+    @Override
+    public List<ComContractInfoExchange> selectProjectCostFromCOmContractInfoExchangeByTaskNo(String taskno,Integer sjly) {
+        return comContractInfoExchangeMapper.selectProjectCostFromCOmContractInfoExchangeByTaskNo(taskno,sjly);
+    }
+}

+ 12 - 0
base/src/main/java/com/ruoyi/depart/departEnum/DepartType.java

@@ -0,0 +1,12 @@
+package com.ruoyi.depart.departEnum;
+
+/*部门类型*/
+public class DepartType {
+
+    /*设计工时*/
+    public static final Integer DESIGN_TIME = 0;
+
+    /*生产工时*/
+    public static final Integer PRODUCE_TIME = 1;
+
+}

+ 278 - 0
base/src/main/java/com/ruoyi/depart/domain/SysDepart.java

@@ -0,0 +1,278 @@
+package com.ruoyi.depart.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 组织机构对象 sys_depart
+ * 
+ * @author ruoyi
+ * @date 2023-08-14
+ */
+public class SysDepart extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** ID */
+    private String id;
+
+    /** 父机构ID */
+    @Excel(name = "父机构ID")
+    private String parentId;
+
+    /** 机构/部门名称 */
+    @Excel(name = "机构/部门名称")
+    private String departName;
+
+    /** 英文名 */
+    @Excel(name = "英文名")
+    private String departNameEn;
+
+    /** 缩写 */
+    @Excel(name = "缩写")
+    private String departNameAbbr;
+
+    /** 排序 */
+    @Excel(name = "排序")
+    private Long departOrder;
+
+    /** 描述 */
+    @Excel(name = "描述")
+    private String description;
+
+    /** 机构类别 1公司,2组织机构,2岗位 */
+    @Excel(name = "机构类别 1公司,2组织机构,2岗位")
+    private String orgCategory;
+
+    /** 机构类型 1一级部门 2子部门 */
+    @Excel(name = "机构类型 1一级部门 2子部门")
+    private String orgType;
+
+    /** 机构编码 */
+    @Excel(name = "机构编码")
+    private String orgCode;
+
+    /** 手机号 */
+    @Excel(name = "手机号")
+    private String mobile;
+
+    /** 传真 */
+    @Excel(name = "传真")
+    private String fax;
+
+    /** 地址 */
+    @Excel(name = "地址")
+    private String address;
+
+    /** 备注 */
+    @Excel(name = "备注")
+    private String memo;
+
+    /** 状态(1启用,0不启用) */
+    @Excel(name = "状态", readConverterExp = "1=启用,0不启用")
+    private String status;
+
+    /** 删除状态(0,正常,1已删除) */
+    private String delFlag;
+
+    /** 对接企业微信的ID */
+    @Excel(name = "对接企业微信的ID")
+    private String qywxIdentifier;
+
+    /** 0:设计部门,1:生产部门 */
+    @Excel(name = "0:设计部门,1:生产部门")
+    private Integer deptType;
+
+    public void setId(String id) 
+    {
+        this.id = id;
+    }
+
+    public String getId() 
+    {
+        return id;
+    }
+    public void setParentId(String parentId) 
+    {
+        this.parentId = parentId;
+    }
+
+    public String getParentId() 
+    {
+        return parentId;
+    }
+    public void setDepartName(String departName) 
+    {
+        this.departName = departName;
+    }
+
+    public String getDepartName() 
+    {
+        return departName;
+    }
+    public void setDepartNameEn(String departNameEn) 
+    {
+        this.departNameEn = departNameEn;
+    }
+
+    public String getDepartNameEn() 
+    {
+        return departNameEn;
+    }
+    public void setDepartNameAbbr(String departNameAbbr) 
+    {
+        this.departNameAbbr = departNameAbbr;
+    }
+
+    public String getDepartNameAbbr() 
+    {
+        return departNameAbbr;
+    }
+    public void setDepartOrder(Long departOrder) 
+    {
+        this.departOrder = departOrder;
+    }
+
+    public Long getDepartOrder() 
+    {
+        return departOrder;
+    }
+    public void setDescription(String description) 
+    {
+        this.description = description;
+    }
+
+    public String getDescription() 
+    {
+        return description;
+    }
+    public void setOrgCategory(String orgCategory) 
+    {
+        this.orgCategory = orgCategory;
+    }
+
+    public String getOrgCategory() 
+    {
+        return orgCategory;
+    }
+    public void setOrgType(String orgType) 
+    {
+        this.orgType = orgType;
+    }
+
+    public String getOrgType() 
+    {
+        return orgType;
+    }
+    public void setOrgCode(String orgCode) 
+    {
+        this.orgCode = orgCode;
+    }
+
+    public String getOrgCode() 
+    {
+        return orgCode;
+    }
+    public void setMobile(String mobile) 
+    {
+        this.mobile = mobile;
+    }
+
+    public String getMobile() 
+    {
+        return mobile;
+    }
+    public void setFax(String fax) 
+    {
+        this.fax = fax;
+    }
+
+    public String getFax() 
+    {
+        return fax;
+    }
+    public void setAddress(String address) 
+    {
+        this.address = address;
+    }
+
+    public String getAddress() 
+    {
+        return address;
+    }
+    public void setMemo(String memo) 
+    {
+        this.memo = memo;
+    }
+
+    public String getMemo() 
+    {
+        return memo;
+    }
+    public void setStatus(String status) 
+    {
+        this.status = status;
+    }
+
+    public String getStatus() 
+    {
+        return status;
+    }
+    public void setDelFlag(String delFlag) 
+    {
+        this.delFlag = delFlag;
+    }
+
+    public String getDelFlag() 
+    {
+        return delFlag;
+    }
+    public void setQywxIdentifier(String qywxIdentifier) 
+    {
+        this.qywxIdentifier = qywxIdentifier;
+    }
+
+    public String getQywxIdentifier() 
+    {
+        return qywxIdentifier;
+    }
+    public void setDeptType(Integer deptType) 
+    {
+        this.deptType = deptType;
+    }
+
+    public Integer getDeptType() 
+    {
+        return deptType;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("parentId", getParentId())
+            .append("departName", getDepartName())
+            .append("departNameEn", getDepartNameEn())
+            .append("departNameAbbr", getDepartNameAbbr())
+            .append("departOrder", getDepartOrder())
+            .append("description", getDescription())
+            .append("orgCategory", getOrgCategory())
+            .append("orgType", getOrgType())
+            .append("orgCode", getOrgCode())
+            .append("mobile", getMobile())
+            .append("fax", getFax())
+            .append("address", getAddress())
+            .append("memo", getMemo())
+            .append("status", getStatus())
+            .append("delFlag", getDelFlag())
+            .append("qywxIdentifier", getQywxIdentifier())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("deptType", getDeptType())
+            .toString();
+    }
+}

+ 71 - 0
base/src/main/java/com/ruoyi/depart/mapper/SysDepartMapper.java

@@ -0,0 +1,71 @@
+package com.ruoyi.depart.mapper;
+
+import java.util.List;
+import com.ruoyi.depart.domain.SysDepart;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 组织机构Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2023-08-14
+ */
+@Mapper
+public interface SysDepartMapper 
+{
+    /**
+     * 查询组织机构
+     * 
+     * @param id 组织机构主键
+     * @return 组织机构
+     */
+    public SysDepart selectSysDepartById(String id);
+
+    /**
+     * 查询组织机构列表
+     * 
+     * @param sysDepart 组织机构
+     * @return 组织机构集合
+     */
+    public List<SysDepart> selectSysDepartList(SysDepart sysDepart);
+
+    /**
+     * 新增组织机构
+     * 
+     * @param sysDepart 组织机构
+     * @return 结果
+     */
+    public int insertSysDepart(SysDepart sysDepart);
+
+    /**
+     * 修改组织机构
+     * 
+     * @param sysDepart 组织机构
+     * @return 结果
+     */
+    public int updateSysDepart(SysDepart sysDepart);
+
+    /**
+     * 删除组织机构
+     * 
+     * @param id 组织机构主键
+     * @return 结果
+     */
+    public int deleteSysDepartById(String id);
+
+    /**
+     * 批量删除组织机构
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteSysDepartByIds(String[] ids);
+
+    /**
+     * 根据部门名称查询部门信息
+     *
+     * @param userdept 部门名称
+     * @return 结果
+     */
+    SysDepart selectDeptTypeByDeptName(String userdept);
+}

+ 69 - 0
base/src/main/java/com/ruoyi/depart/service/ISysDepartService.java

@@ -0,0 +1,69 @@
+package com.ruoyi.depart.service;
+
+import java.util.List;
+import com.ruoyi.depart.domain.SysDepart;
+
+/**
+ * 组织机构Service接口
+ * 
+ * @author ruoyi
+ * @date 2023-08-14
+ */
+public interface ISysDepartService 
+{
+    /**
+     * 查询组织机构
+     * 
+     * @param id 组织机构主键
+     * @return 组织机构
+     */
+    public SysDepart selectSysDepartById(String id);
+
+    /**
+     * 查询组织机构列表
+     * 
+     * @param sysDepart 组织机构
+     * @return 组织机构集合
+     */
+    public List<SysDepart> selectSysDepartList(SysDepart sysDepart);
+
+    /**
+     * 新增组织机构
+     * 
+     * @param sysDepart 组织机构
+     * @return 结果
+     */
+    public int insertSysDepart(SysDepart sysDepart);
+
+    /**
+     * 修改组织机构
+     * 
+     * @param sysDepart 组织机构
+     * @return 结果
+     */
+    public int updateSysDepart(SysDepart sysDepart);
+
+    /**
+     * 批量删除组织机构
+     * 
+     * @param ids 需要删除的组织机构主键集合
+     * @return 结果
+     */
+    public int deleteSysDepartByIds(String[] ids);
+
+    /**
+     * 删除组织机构信息
+     * 
+     * @param id 组织机构主键
+     * @return 结果
+     */
+    public int deleteSysDepartById(String id);
+
+    /**
+     * 根据部门名称查询部门信息
+     *
+     * @param userdept 部门名称
+     * @return 结果
+     */
+    SysDepart selectDeptTypeByDeptName(String userdept);
+}

+ 107 - 0
base/src/main/java/com/ruoyi/depart/service/impl/SysDepartServiceImpl.java

@@ -0,0 +1,107 @@
+package com.ruoyi.depart.service.impl;
+
+import java.util.List;
+import com.ruoyi.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.depart.mapper.SysDepartMapper;
+import com.ruoyi.depart.domain.SysDepart;
+import com.ruoyi.depart.service.ISysDepartService;
+
+/**
+ * 组织机构Service业务层处理
+ * 
+ * @author ruoyi
+ * @date 2023-08-14
+ */
+@Service
+public class SysDepartServiceImpl implements ISysDepartService 
+{
+    @Autowired
+    private SysDepartMapper sysDepartMapper;
+
+    /**
+     * 查询组织机构
+     * 
+     * @param id 组织机构主键
+     * @return 组织机构
+     */
+    @Override
+    public SysDepart selectSysDepartById(String id)
+    {
+        return sysDepartMapper.selectSysDepartById(id);
+    }
+
+    /**
+     * 查询组织机构列表
+     * 
+     * @param sysDepart 组织机构
+     * @return 组织机构
+     */
+    @Override
+    public List<SysDepart> selectSysDepartList(SysDepart sysDepart)
+    {
+        return sysDepartMapper.selectSysDepartList(sysDepart);
+    }
+
+    /**
+     * 新增组织机构
+     * 
+     * @param sysDepart 组织机构
+     * @return 结果
+     */
+    @Override
+    public int insertSysDepart(SysDepart sysDepart)
+    {
+        sysDepart.setCreateTime(DateUtils.getNowDate());
+        return sysDepartMapper.insertSysDepart(sysDepart);
+    }
+
+    /**
+     * 修改组织机构
+     * 
+     * @param sysDepart 组织机构
+     * @return 结果
+     */
+    @Override
+    public int updateSysDepart(SysDepart sysDepart)
+    {
+        sysDepart.setUpdateTime(DateUtils.getNowDate());
+        return sysDepartMapper.updateSysDepart(sysDepart);
+    }
+
+    /**
+     * 批量删除组织机构
+     * 
+     * @param ids 需要删除的组织机构主键
+     * @return 结果
+     */
+    @Override
+    public int deleteSysDepartByIds(String[] ids)
+    {
+        return sysDepartMapper.deleteSysDepartByIds(ids);
+    }
+
+    /**
+     * 删除组织机构信息
+     * 
+     * @param id 组织机构主键
+     * @return 结果
+     */
+    @Override
+    public int deleteSysDepartById(String id)
+    {
+        return sysDepartMapper.deleteSysDepartById(id);
+    }
+
+    /**
+     * 根据部门名称查询部门信息
+     *
+     * @param userdept 部门名称
+     * @return 结果
+     */
+    @Override
+    public SysDepart selectDeptTypeByDeptName(String userdept) {
+        return sysDepartMapper.selectDeptTypeByDeptName(userdept);
+    }
+}

+ 443 - 0
base/src/main/java/com/ruoyi/financeBudget/domain/FinanceBudget.java

@@ -0,0 +1,443 @@
+package com.ruoyi.financeBudget.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 财务预算对象 finance_budget
+ * 
+ * @author yanxun
+ * @date 2023-08-10
+ */
+public class FinanceBudget extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** $column.columnComment */
+    private Long id;
+
+    /** 任务编号 */
+    @Excel(name = "任务编号")
+    private String taskno;
+
+    /** 任务名称 */
+    @Excel(name = "任务名称")
+    private String taskname;
+
+    /** 任务编号 */
+    @Excel(name = "任务编号")
+    private String iflag;
+
+    /** 任务编号 */
+    @Excel(name = "任务编号")
+    private String hxzxname;
+
+    /** 型号id */
+    @Excel(name = "型号id")
+    private String xhid;
+
+    /** 研制阶段 */
+    @Excel(name = "研制阶段")
+    private String yzjdname;
+
+    /** 研制数量 */
+    @Excel(name = "研制数量")
+    private String yzsl;
+
+    /** 投产单位 */
+    @Excel(name = "投产单位")
+    private String tcdw;
+
+    /** 任务来源简称 */
+    @Excel(name = "任务来源简称")
+    private String Brief;
+
+    /** 责任部门 */
+    @Excel(name = "责任部门")
+    private String zrbm;
+
+    /** 下达部门 */
+    @Excel(name = "下达部门")
+    private String jycs;
+
+    /** 任务类型 */
+    @Excel(name = "任务类型")
+    private String tasktype;
+
+    /** 审计审价 */
+    @Excel(name = "审计审价")
+    private String auditPrice;
+
+    /** 业务员名称 */
+    @Excel(name = "业务员名称")
+    private String businessManName;
+
+    /** 下达时间 */
+    @Excel(name = "下达时间")
+    private String lrsj;
+
+    /** 设计开始时间 */
+    @Excel(name = "设计开始时间")
+    private String sjkssj;
+
+    /** 计划完成时间(进度要求) */
+    @Excel(name = "计划完成时间", readConverterExp = "进=度要求")
+    private String jhwcsj;
+
+    /** 项目进度 */
+    @Excel(name = "项目进度")
+    private String ProcessPercent;
+
+    /** 预估价 */
+    @Excel(name = "预估价")
+    private String EstimationCoat;
+
+    /** 合同分配额 */
+    @Excel(name = "合同分配额")
+    private String contractfpe;
+
+    /** 任务编号 */
+    @Excel(name = "任务编号")
+    private String sjCost;
+
+    /** 任务编号 */
+    @Excel(name = "任务编号")
+    private String clCost;
+
+    /** 任务编号 */
+    @Excel(name = "任务编号")
+    private String wxCost;
+
+    /** 任务编号 */
+    @Excel(name = "任务编号")
+    private String zyCost;
+
+    /** 任务编号 */
+    @Excel(name = "任务编号")
+    private String gzCost;
+
+    /** 任务编号 */
+    @Excel(name = "任务编号")
+    private String rdCost;
+
+    /** 任务编号 */
+    @Excel(name = "任务编号")
+    private String glCost;
+
+    /** 任务编号 */
+    @Excel(name = "任务编号")
+    private String rgCost;
+
+    /** 任务编号 */
+    @Excel(name = "任务编号")
+    private String refTaskNo;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setTaskno(String taskno) 
+    {
+        this.taskno = taskno;
+    }
+
+    public String getTaskno() 
+    {
+        return taskno;
+    }
+    public void setTaskname(String taskname) 
+    {
+        this.taskname = taskname;
+    }
+
+    public String getTaskname() 
+    {
+        return taskname;
+    }
+    public void setIflag(String iflag) 
+    {
+        this.iflag = iflag;
+    }
+
+    public String getIflag() 
+    {
+        return iflag;
+    }
+    public void setHxzxname(String hxzxname) 
+    {
+        this.hxzxname = hxzxname;
+    }
+
+    public String getHxzxname() 
+    {
+        return hxzxname;
+    }
+    public void setXhid(String xhid) 
+    {
+        this.xhid = xhid;
+    }
+
+    public String getXhid() 
+    {
+        return xhid;
+    }
+    public void setYzjdname(String yzjdname) 
+    {
+        this.yzjdname = yzjdname;
+    }
+
+    public String getYzjdname() 
+    {
+        return yzjdname;
+    }
+    public void setYzsl(String yzsl) 
+    {
+        this.yzsl = yzsl;
+    }
+
+    public String getYzsl() 
+    {
+        return yzsl;
+    }
+    public void setTcdw(String tcdw) 
+    {
+        this.tcdw = tcdw;
+    }
+
+    public String getTcdw() 
+    {
+        return tcdw;
+    }
+    public void setBrief(String Brief) 
+    {
+        this.Brief = Brief;
+    }
+
+    public String getBrief() 
+    {
+        return Brief;
+    }
+    public void setZrbm(String zrbm) 
+    {
+        this.zrbm = zrbm;
+    }
+
+    public String getZrbm() 
+    {
+        return zrbm;
+    }
+    public void setJycs(String jycs) 
+    {
+        this.jycs = jycs;
+    }
+
+    public String getJycs() 
+    {
+        return jycs;
+    }
+    public void setTasktype(String tasktype) 
+    {
+        this.tasktype = tasktype;
+    }
+
+    public String getTasktype() 
+    {
+        return tasktype;
+    }
+    public void setAuditPrice(String auditPrice) 
+    {
+        this.auditPrice = auditPrice;
+    }
+
+    public String getAuditPrice() 
+    {
+        return auditPrice;
+    }
+    public void setBusinessManName(String businessManName) 
+    {
+        this.businessManName = businessManName;
+    }
+
+    public String getBusinessManName() 
+    {
+        return businessManName;
+    }
+    public void setLrsj(String lrsj) 
+    {
+        this.lrsj = lrsj;
+    }
+
+    public String getLrsj() 
+    {
+        return lrsj;
+    }
+    public void setSjkssj(String sjkssj) 
+    {
+        this.sjkssj = sjkssj;
+    }
+
+    public String getSjkssj() 
+    {
+        return sjkssj;
+    }
+    public void setJhwcsj(String jhwcsj) 
+    {
+        this.jhwcsj = jhwcsj;
+    }
+
+    public String getJhwcsj() 
+    {
+        return jhwcsj;
+    }
+    public void setProcessPercent(String ProcessPercent) 
+    {
+        this.ProcessPercent = ProcessPercent;
+    }
+
+    public String getProcessPercent() 
+    {
+        return ProcessPercent;
+    }
+    public void setEstimationCoat(String EstimationCoat) 
+    {
+        this.EstimationCoat = EstimationCoat;
+    }
+
+    public String getEstimationCoat() 
+    {
+        return EstimationCoat;
+    }
+    public void setContractfpe(String contractfpe) 
+    {
+        this.contractfpe = contractfpe;
+    }
+
+    public String getContractfpe() 
+    {
+        return contractfpe;
+    }
+    public void setSjCost(String sjCost) 
+    {
+        this.sjCost = sjCost;
+    }
+
+    public String getSjCost() 
+    {
+        return sjCost;
+    }
+    public void setClCost(String clCost) 
+    {
+        this.clCost = clCost;
+    }
+
+    public String getClCost() 
+    {
+        return clCost;
+    }
+    public void setWxCost(String wxCost) 
+    {
+        this.wxCost = wxCost;
+    }
+
+    public String getWxCost() 
+    {
+        return wxCost;
+    }
+    public void setZyCost(String zyCost) 
+    {
+        this.zyCost = zyCost;
+    }
+
+    public String getZyCost() 
+    {
+        return zyCost;
+    }
+    public void setGzCost(String gzCost) 
+    {
+        this.gzCost = gzCost;
+    }
+
+    public String getGzCost() 
+    {
+        return gzCost;
+    }
+    public void setRdCost(String rdCost) 
+    {
+        this.rdCost = rdCost;
+    }
+
+    public String getRdCost() 
+    {
+        return rdCost;
+    }
+    public void setGlCost(String glCost) 
+    {
+        this.glCost = glCost;
+    }
+
+    public String getGlCost() 
+    {
+        return glCost;
+    }
+    public void setRgCost(String rgCost) 
+    {
+        this.rgCost = rgCost;
+    }
+
+    public String getRgCost() 
+    {
+        return rgCost;
+    }
+    public void setRefTaskNo(String refTaskNo) 
+    {
+        this.refTaskNo = refTaskNo;
+    }
+
+    public String getRefTaskNo() 
+    {
+        return refTaskNo;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("taskno", getTaskno())
+            .append("taskname", getTaskname())
+            .append("iflag", getIflag())
+            .append("hxzxname", getHxzxname())
+            .append("xhid", getXhid())
+            .append("yzjdname", getYzjdname())
+            .append("yzsl", getYzsl())
+            .append("tcdw", getTcdw())
+            .append("Brief", getBrief())
+            .append("zrbm", getZrbm())
+            .append("jycs", getJycs())
+            .append("tasktype", getTasktype())
+            .append("auditPrice", getAuditPrice())
+            .append("businessManName", getBusinessManName())
+            .append("lrsj", getLrsj())
+            .append("sjkssj", getSjkssj())
+            .append("jhwcsj", getJhwcsj())
+            .append("ProcessPercent", getProcessPercent())
+            .append("EstimationCoat", getEstimationCoat())
+            .append("contractfpe", getContractfpe())
+            .append("sjCost", getSjCost())
+            .append("clCost", getClCost())
+            .append("wxCost", getWxCost())
+            .append("zyCost", getZyCost())
+            .append("gzCost", getGzCost())
+            .append("rdCost", getRdCost())
+            .append("glCost", getGlCost())
+            .append("rgCost", getRgCost())
+            .append("refTaskNo", getRefTaskNo())
+            .toString();
+    }
+}

+ 71 - 0
base/src/main/java/com/ruoyi/financeBudget/mapper/FinanceBudgetMapper.java

@@ -0,0 +1,71 @@
+package com.ruoyi.financeBudget.mapper;
+
+import java.util.List;
+import com.ruoyi.financeBudget.domain.FinanceBudget;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 财务预算Mapper接口
+ * 
+ * @author yanxun
+ * @date 2023-08-10
+ */
+@Mapper
+public interface FinanceBudgetMapper 
+{
+    /**
+     * 查询财务预算
+     * 
+     * @param id 财务预算主键
+     * @return 财务预算
+     */
+    public FinanceBudget selectFinanceBudgetById(Long id);
+
+    /**
+     * 查询财务预算列表
+     * 
+     * @param financeBudget 财务预算
+     * @return 财务预算集合
+     */
+    public List<FinanceBudget> selectFinanceBudgetList(FinanceBudget financeBudget);
+
+    /**
+     * 新增财务预算
+     * 
+     * @param financeBudget 财务预算
+     * @return 结果
+     */
+    public int insertFinanceBudget(FinanceBudget financeBudget);
+
+    /**
+     * 修改财务预算
+     * 
+     * @param financeBudget 财务预算
+     * @return 结果
+     */
+    public int updateFinanceBudget(FinanceBudget financeBudget);
+
+    /**
+     * 删除财务预算
+     * 
+     * @param id 财务预算主键
+     * @return 结果
+     */
+    public int deleteFinanceBudgetById(Long id);
+
+    /**
+     * 批量删除财务预算
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteFinanceBudgetByIds(Long[] ids);
+
+    /**
+     * 根据科研任务号查询任务的预估价
+     *
+     * @param taskno 科研任务号
+     * @return 结果
+     */
+    FinanceBudget selectEstimationCoatByTaskno(String taskno);
+}

+ 69 - 0
base/src/main/java/com/ruoyi/financeBudget/service/IFinanceBudgetService.java

@@ -0,0 +1,69 @@
+package com.ruoyi.financeBudget.service;
+
+import java.util.List;
+import com.ruoyi.financeBudget.domain.FinanceBudget;
+
+/**
+ * 财务预算Service接口
+ * 
+ * @author yanxun
+ * @date 2023-08-10
+ */
+public interface IFinanceBudgetService 
+{
+    /**
+     * 查询财务预算
+     * 
+     * @param id 财务预算主键
+     * @return 财务预算
+     */
+    public FinanceBudget selectFinanceBudgetById(Long id);
+
+    /**
+     * 查询财务预算列表
+     * 
+     * @param financeBudget 财务预算
+     * @return 财务预算集合
+     */
+    public List<FinanceBudget> selectFinanceBudgetList(FinanceBudget financeBudget);
+
+    /**
+     * 新增财务预算
+     * 
+     * @param financeBudget 财务预算
+     * @return 结果
+     */
+    public int insertFinanceBudget(FinanceBudget financeBudget);
+
+    /**
+     * 修改财务预算
+     * 
+     * @param financeBudget 财务预算
+     * @return 结果
+     */
+    public int updateFinanceBudget(FinanceBudget financeBudget);
+
+    /**
+     * 批量删除财务预算
+     * 
+     * @param ids 需要删除的财务预算主键集合
+     * @return 结果
+     */
+    public int deleteFinanceBudgetByIds(Long[] ids);
+
+    /**
+     * 删除财务预算信息
+     * 
+     * @param id 财务预算主键
+     * @return 结果
+     */
+    public int deleteFinanceBudgetById(Long id);
+
+    /**
+     * 根据科研任务号查询任务的预估价
+     *
+     * @param taskno 科研任务号
+     * @return 结果
+     */
+    FinanceBudget selectEstimationCoatByTaskno(String taskno);
+}

+ 104 - 0
base/src/main/java/com/ruoyi/financeBudget/service/impl/FinanceBudgetServiceImpl.java

@@ -0,0 +1,104 @@
+package com.ruoyi.financeBudget.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.financeBudget.mapper.FinanceBudgetMapper;
+import com.ruoyi.financeBudget.domain.FinanceBudget;
+import com.ruoyi.financeBudget.service.IFinanceBudgetService;
+
+/**
+ * 财务预算Service业务层处理
+ * 
+ * @author yanxun
+ * @date 2023-08-10
+ */
+@Service
+public class FinanceBudgetServiceImpl implements IFinanceBudgetService 
+{
+    @Autowired
+    private FinanceBudgetMapper financeBudgetMapper;
+
+    /**
+     * 查询财务预算
+     * 
+     * @param id 财务预算主键
+     * @return 财务预算
+     */
+    @Override
+    public FinanceBudget selectFinanceBudgetById(Long id)
+    {
+        return financeBudgetMapper.selectFinanceBudgetById(id);
+    }
+
+    /**
+     * 查询财务预算列表
+     * 
+     * @param financeBudget 财务预算
+     * @return 财务预算
+     */
+    @Override
+    public List<FinanceBudget> selectFinanceBudgetList(FinanceBudget financeBudget)
+    {
+        return financeBudgetMapper.selectFinanceBudgetList(financeBudget);
+    }
+
+    /**
+     * 新增财务预算
+     * 
+     * @param financeBudget 财务预算
+     * @return 结果
+     */
+    @Override
+    public int insertFinanceBudget(FinanceBudget financeBudget)
+    {
+        return financeBudgetMapper.insertFinanceBudget(financeBudget);
+    }
+
+    /**
+     * 修改财务预算
+     * 
+     * @param financeBudget 财务预算
+     * @return 结果
+     */
+    @Override
+    public int updateFinanceBudget(FinanceBudget financeBudget)
+    {
+        return financeBudgetMapper.updateFinanceBudget(financeBudget);
+    }
+
+    /**
+     * 批量删除财务预算
+     * 
+     * @param ids 需要删除的财务预算主键
+     * @return 结果
+     */
+    @Override
+    public int deleteFinanceBudgetByIds(Long[] ids)
+    {
+        return financeBudgetMapper.deleteFinanceBudgetByIds(ids);
+    }
+
+    /**
+     * 删除财务预算信息
+     * 
+     * @param id 财务预算主键
+     * @return 结果
+     */
+    @Override
+    public int deleteFinanceBudgetById(Long id)
+    {
+        return financeBudgetMapper.deleteFinanceBudgetById(id);
+    }
+
+    /**
+     * 根据科研任务号查询任务的预估价
+     *
+     * @param taskno 科研任务号
+     * @return 结果
+     */
+    @Override
+    public FinanceBudget selectEstimationCoatByTaskno(String taskno) {
+        return financeBudgetMapper.selectEstimationCoatByTaskno(taskno);
+    }
+}

+ 319 - 0
base/src/main/java/com/ruoyi/kyBg/domain/KyBgInfo.java

@@ -0,0 +1,319 @@
+package com.ruoyi.kyBg.domain;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 科研报工对象 ky_bg_info
+ * 
+ * @author ruoyi
+ * @date 2023-08-10
+ */
+public class KyBgInfo extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** $column.columnComment */
+    private Long key;
+
+    /** $column.columnComment */
+    private Long id;
+
+    /** 报工任务号 */
+    @Excel(name = "报工任务号")
+    private String taskno;
+
+    /** 任务名称 */
+    @Excel(name = "任务名称")
+    private String taskname;
+
+    /** 工作内容 */
+    @Excel(name = "工作内容")
+    private String workcontent;
+
+    /** 当日用时(h) */
+    @Excel(name = "当日用时", readConverterExp = "h=")
+    private BigDecimal workhour;
+
+    /** 型号 */
+    @Excel(name = "型号")
+    private String xhname;
+
+    /** 研制数量 */
+    @Excel(name = "研制数量")
+    private Long yzsl;
+
+    /** 研制阶段 */
+    @Excel(name = "研制阶段")
+    private String yzjdname;
+
+    /** 用户名称 */
+    @Excel(name = "用户名称")
+    private String tcdw;
+
+    /** 用户简称 */
+    @Excel(name = "用户简称")
+    private String brief;
+
+    /** 状态 */
+    @Excel(name = "状态")
+    private String status;
+
+    /** 计划开始时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "计划开始时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date jhkssj;
+
+    /** 计划完成时间(进度要求) */
+    @Excel(name = "计划完成时间", readConverterExp = "进=度要求")
+    private Date jhwcsj;
+
+    /** 工作日期 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "工作日期", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date worktime;
+
+    @Excel(name = "填写时间")
+    private Date Createtime;
+
+    /** 填报人 */
+    @Excel(name = "填报人")
+    private String username;
+
+    /** 填报部门 */
+    @Excel(name = "填报部门")
+    private String userdept;
+
+    /** 审核人 */
+    @Excel(name = "审核人")
+    private String shr;
+
+    /** 审批人 */
+    @Excel(name = "审批人")
+    private String spr;
+
+    /** 备注 */
+    @Excel(name = "备注")
+    private String memo;
+
+    public Date getCreatetime() {
+        return Createtime;
+    }
+
+    public void setCreatetime(Date createtime) {
+        Createtime = createtime;
+    }
+
+    public void setKey(Long key)
+    {
+        this.key = key;
+    }
+
+    public Long getKey() 
+    {
+        return key;
+    }
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setTaskno(String taskno) 
+    {
+        this.taskno = taskno;
+    }
+
+    public String getTaskno() 
+    {
+        return taskno;
+    }
+    public void setTaskname(String taskname) 
+    {
+        this.taskname = taskname;
+    }
+
+    public String getTaskname() 
+    {
+        return taskname;
+    }
+    public void setWorkcontent(String workcontent) 
+    {
+        this.workcontent = workcontent;
+    }
+
+    public String getWorkcontent() 
+    {
+        return workcontent;
+    }
+    public void setWorkhour(BigDecimal workhour) 
+    {
+        this.workhour = workhour;
+    }
+
+    public BigDecimal getWorkhour() 
+    {
+        return workhour;
+    }
+    public void setXhname(String xhname) 
+    {
+        this.xhname = xhname;
+    }
+
+    public String getXhname() 
+    {
+        return xhname;
+    }
+    public void setYzsl(Long yzsl) 
+    {
+        this.yzsl = yzsl;
+    }
+
+    public Long getYzsl() 
+    {
+        return yzsl;
+    }
+    public void setYzjdname(String yzjdname) 
+    {
+        this.yzjdname = yzjdname;
+    }
+
+    public String getYzjdname() 
+    {
+        return yzjdname;
+    }
+    public void setTcdw(String tcdw) 
+    {
+        this.tcdw = tcdw;
+    }
+
+    public String getTcdw() 
+    {
+        return tcdw;
+    }
+    public void setBrief(String brief) 
+    {
+        this.brief = brief;
+    }
+
+    public String getBrief() 
+    {
+        return brief;
+    }
+    public void setStatus(String status) 
+    {
+        this.status = status;
+    }
+
+    public String getStatus() 
+    {
+        return status;
+    }
+    public void setJhkssj(Date jhkssj) 
+    {
+        this.jhkssj = jhkssj;
+    }
+
+    public Date getJhkssj() 
+    {
+        return jhkssj;
+    }
+    public void setJhwcsj(Date jhwcsj) 
+    {
+        this.jhwcsj = jhwcsj;
+    }
+
+    public Date getJhwcsj() 
+    {
+        return jhwcsj;
+    }
+    public void setWorktime(Date worktime) 
+    {
+        this.worktime = worktime;
+    }
+
+    public Date getWorktime() 
+    {
+        return worktime;
+    }
+    public void setUsername(String username) 
+    {
+        this.username = username;
+    }
+
+    public String getUsername() 
+    {
+        return username;
+    }
+    public void setUserdept(String userdept) 
+    {
+        this.userdept = userdept;
+    }
+
+    public String getUserdept() 
+    {
+        return userdept;
+    }
+    public void setShr(String shr) 
+    {
+        this.shr = shr;
+    }
+
+    public String getShr() 
+    {
+        return shr;
+    }
+    public void setSpr(String spr) 
+    {
+        this.spr = spr;
+    }
+
+    public String getSpr() 
+    {
+        return spr;
+    }
+    public void setMemo(String memo) 
+    {
+        this.memo = memo;
+    }
+
+    public String getMemo() 
+    {
+        return memo;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("key", getKey())
+            .append("id", getId())
+            .append("taskno", getTaskno())
+            .append("taskname", getTaskname())
+            .append("workcontent", getWorkcontent())
+            .append("workhour", getWorkhour())
+            .append("xhname", getXhname())
+            .append("yzsl", getYzsl())
+            .append("yzjdname", getYzjdname())
+            .append("tcdw", getTcdw())
+            .append("brief", getBrief())
+            .append("status", getStatus())
+            .append("jhkssj", getJhkssj())
+            .append("jhwcsj", getJhwcsj())
+            .append("worktime", getWorktime())
+            .append("createtime", getCreatetime())
+            .append("username", getUsername())
+            .append("userdept", getUserdept())
+            .append("shr", getShr())
+            .append("spr", getSpr())
+            .append("memo", getMemo())
+            .toString();
+    }
+}

+ 75 - 0
base/src/main/java/com/ruoyi/kyBg/mapper/KyBgInfoMapper.java

@@ -0,0 +1,75 @@
+package com.ruoyi.kyBg.mapper;
+
+import java.util.List;
+import com.ruoyi.kyBg.domain.KyBgInfo;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 科研报工Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2023-08-10
+ */
+@Mapper
+public interface KyBgInfoMapper 
+{
+
+    /**
+     * 根据任务号查找任务关联的所有报工信息
+     *
+     * @param taskno 任务号
+     * @return 结果
+     */
+     List<KyBgInfo> selectKyBgInfoListByTaskno(String taskno);
+
+
+    /**
+     * 查询科研报工
+     * 
+     * @param key 科研报工主键
+     * @return 科研报工
+     */
+    public KyBgInfo selectKyBgInfoByKey(Long key);
+
+    /**
+     * 查询科研报工列表
+     * 
+     * @param kyBgInfo 科研报工
+     * @return 科研报工集合
+     */
+    public List<KyBgInfo> selectKyBgInfoList(KyBgInfo kyBgInfo);
+
+    /**
+     * 新增科研报工
+     * 
+     * @param kyBgInfo 科研报工
+     * @return 结果
+     */
+    public int insertKyBgInfo(KyBgInfo kyBgInfo);
+
+    /**
+     * 修改科研报工
+     * 
+     * @param kyBgInfo 科研报工
+     * @return 结果
+     */
+    public int updateKyBgInfo(KyBgInfo kyBgInfo);
+
+    /**
+     * 删除科研报工
+     * 
+     * @param key 科研报工主键
+     * @return 结果
+     */
+    public int deleteKyBgInfoByKey(Long key);
+
+    /**
+     * 批量删除科研报工
+     * 
+     * @param keys 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteKyBgInfoByKeys(Long[] keys);
+
+    KyBgInfo selectProjectCostFromKyBgInfoByTaskno(String taskno);
+}

+ 69 - 0
base/src/main/java/com/ruoyi/kyBg/service/IKyBgInfoService.java

@@ -0,0 +1,69 @@
+package com.ruoyi.kyBg.service;
+
+import java.util.List;
+import com.ruoyi.kyBg.domain.KyBgInfo;
+
+/**
+ * 科研报工Service接口
+ * 
+ * @author ruoyi
+ * @date 2023-08-10
+ */
+public interface IKyBgInfoService 
+{
+    /**
+     * 查询科研报工
+     * 
+     * @param key 科研报工主键
+     * @return 科研报工
+     */
+    public KyBgInfo selectKyBgInfoByKey(Long key);
+
+    /**
+     * 查询科研报工列表
+     * 
+     * @param kyBgInfo 科研报工
+     * @return 科研报工集合
+     */
+    public List<KyBgInfo> selectKyBgInfoList(KyBgInfo kyBgInfo);
+
+    /**
+     * 新增科研报工
+     * 
+     * @param kyBgInfo 科研报工
+     * @return 结果
+     */
+    public int insertKyBgInfo(KyBgInfo kyBgInfo);
+
+    /**
+     * 修改科研报工
+     * 
+     * @param kyBgInfo 科研报工
+     * @return 结果
+     */
+    public int updateKyBgInfo(KyBgInfo kyBgInfo);
+
+    /**
+     * 批量删除科研报工
+     * 
+     * @param keys 需要删除的科研报工主键集合
+     * @return 结果
+     */
+    public int deleteKyBgInfoByKeys(Long[] keys);
+
+    /**
+     * 删除科研报工信息
+     * 
+     * @param key 科研报工主键
+     * @return 结果
+     */
+    public int deleteKyBgInfoByKey(Long key);
+
+    /**
+     * 根据任务号查找任务关联的所有报工信息
+     *
+     * @param taskno 任务号
+     * @return 结果
+     */
+    List<KyBgInfo> selectKyBgInfoListByTaskno(String taskno);
+}

+ 105 - 0
base/src/main/java/com/ruoyi/kyBg/service/impl/KyBgInfoServiceImpl.java

@@ -0,0 +1,105 @@
+package com.ruoyi.kyBg.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.kyBg.mapper.KyBgInfoMapper;
+import com.ruoyi.kyBg.domain.KyBgInfo;
+import com.ruoyi.kyBg.service.IKyBgInfoService;
+
+/**
+ * 科研报工Service业务层处理
+ * 
+ * @author ruoyi
+ * @date 2023-08-10
+ */
+@Service
+public class KyBgInfoServiceImpl implements IKyBgInfoService 
+{
+    @Autowired
+    private KyBgInfoMapper kyBgInfoMapper;
+
+    /**
+     * 查询科研报工
+     * 
+     * @param key 科研报工主键
+     * @return 科研报工
+     */
+    @Override
+    public KyBgInfo selectKyBgInfoByKey(Long key)
+    {
+        return kyBgInfoMapper.selectKyBgInfoByKey(key);
+    }
+
+    /**
+     * 查询科研报工列表
+     * 
+     * @param kyBgInfo 科研报工
+     * @return 科研报工
+     */
+    @Override
+    public List<KyBgInfo> selectKyBgInfoList(KyBgInfo kyBgInfo)
+    {
+        return kyBgInfoMapper.selectKyBgInfoList(kyBgInfo);
+    }
+
+    /**
+     * 新增科研报工
+     * 
+     * @param kyBgInfo 科研报工
+     * @return 结果
+     */
+    @Override
+    public int insertKyBgInfo(KyBgInfo kyBgInfo)
+    {
+        return kyBgInfoMapper.insertKyBgInfo(kyBgInfo);
+    }
+
+    /**
+     * 修改科研报工
+     * 
+     * @param kyBgInfo 科研报工
+     * @return 结果
+     */
+    @Override
+    public int updateKyBgInfo(KyBgInfo kyBgInfo)
+    {
+        return kyBgInfoMapper.updateKyBgInfo(kyBgInfo);
+    }
+
+    /**
+     * 批量删除科研报工
+     * 
+     * @param keys 需要删除的科研报工主键
+     * @return 结果
+     */
+    @Override
+    public int deleteKyBgInfoByKeys(Long[] keys)
+    {
+        return kyBgInfoMapper.deleteKyBgInfoByKeys(keys);
+    }
+
+    /**
+     * 删除科研报工信息
+     * 
+     * @param key 科研报工主键
+     * @return 结果
+     */
+    @Override
+    public int deleteKyBgInfoByKey(Long key)
+    {
+        return kyBgInfoMapper.deleteKyBgInfoByKey(key);
+    }
+
+    /**
+     * 根据任务号查找任务关联的所有报工信息
+     *
+     * @param taskno 任务号
+     * @return 结果
+     */
+    @Override
+    public List<KyBgInfo> selectKyBgInfoListByTaskno(String taskno) {
+        return kyBgInfoMapper.selectKyBgInfoListByTaskno(taskno);
+    }
+
+}

文件差異過大導致無法顯示
+ 1723 - 0
base/src/main/java/com/ruoyi/kyTask/domain/KyTaskInfo.java


+ 80 - 0
base/src/main/java/com/ruoyi/kyTask/mapper/KyTaskInfoMapper.java

@@ -0,0 +1,80 @@
+package com.ruoyi.kyTask.mapper;
+
+import java.util.List;
+import com.ruoyi.kyTask.domain.KyTaskInfo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 科研任务Mapper接口
+ * 
+ * @author yanxun
+ * @date 2023-08-10
+ */
+@Mapper
+public interface KyTaskInfoMapper 
+{
+    /**
+     * 查询科研任务
+     * 
+     * @param key 科研任务主键
+     * @return 科研任务
+     */
+    public KyTaskInfo selectKyTaskInfoByKey(Long key);
+
+    /**
+     * 查询科研任务列表
+     * 
+     * @param kyTaskInfo 科研任务
+     * @return 科研任务集合
+     */
+    public List<KyTaskInfo> selectKyTaskInfoList(KyTaskInfo kyTaskInfo);
+
+    /**
+     * 新增科研任务
+     * 
+     * @param kyTaskInfo 科研任务
+     * @return 结果
+     */
+    public int insertKyTaskInfo(KyTaskInfo kyTaskInfo);
+
+    /**
+     * 修改科研任务
+     * 
+     * @param kyTaskInfo 科研任务
+     * @return 结果
+     */
+    public int updateKyTaskInfo(KyTaskInfo kyTaskInfo);
+
+    /**
+     * 删除科研任务
+     * 
+     * @param key 科研任务主键
+     * @return 结果
+     */
+    public int deleteKyTaskInfoByKey(Long key);
+
+    /**
+     * 批量删除科研任务
+     * 
+     * @param keys 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteKyTaskInfoByKeys(Long[] keys);
+
+
+    /**
+     * 获取科研任务总数
+     * @return 结果
+     */
+    int getTaskCount();
+
+    /**
+     * 查找偏移量范围内的科研任务
+     *
+     * @param beginOffset 开始偏移量
+     * @param size 数量
+     * @return 结果
+     */
+    List<KyTaskInfo> seletcKyTaskInfoListByRanage(@Param("beginOffset") int beginOffset, @Param("size") int size);
+}

+ 72 - 0
base/src/main/java/com/ruoyi/kyTask/service/IKyTaskInfoService.java

@@ -0,0 +1,72 @@
+package com.ruoyi.kyTask.service;
+
+import java.util.List;
+import com.ruoyi.kyTask.domain.KyTaskInfo;
+
+/**
+ * 科研任务Service接口
+ * 
+ * @author yanxun
+ * @date 2023-08-10
+ */
+public interface IKyTaskInfoService 
+{
+    /**
+     * 查询科研任务
+     * 
+     * @param key 科研任务主键
+     * @return 科研任务
+     */
+    public KyTaskInfo selectKyTaskInfoByKey(Long key);
+
+    /**
+     * 查询科研任务列表
+     * 
+     * @param kyTaskInfo 科研任务
+     * @return 科研任务集合
+     */
+    public List<KyTaskInfo> selectKyTaskInfoList(KyTaskInfo kyTaskInfo);
+
+    /**
+     * 新增科研任务
+     * 
+     * @param kyTaskInfo 科研任务
+     * @return 结果
+     */
+    public int insertKyTaskInfo(KyTaskInfo kyTaskInfo);
+
+    /**
+     * 修改科研任务
+     * 
+     * @param kyTaskInfo 科研任务
+     * @return 结果
+     */
+    public int updateKyTaskInfo(KyTaskInfo kyTaskInfo);
+
+    /**
+     * 批量删除科研任务
+     * 
+     * @param keys 需要删除的科研任务主键集合
+     * @return 结果
+     */
+    public int deleteKyTaskInfoByKeys(Long[] keys);
+
+    /**
+     * 删除科研任务信息
+     * 
+     * @param key 科研任务主键
+     * @return 结果
+     */
+    public int deleteKyTaskInfoByKey(Long key);
+
+    int getTaskCount();
+
+    /**
+     * 查找偏移量范围内的科研任务
+     *
+     * @param beginOffset 开始偏移量
+     * @param size 数量
+     * @return 结果
+     */
+    List<KyTaskInfo> selectKyTaskInfoListByRange(int beginOffset, int size);
+}

+ 115 - 0
base/src/main/java/com/ruoyi/kyTask/service/impl/KyTaskInfoServiceImpl.java

@@ -0,0 +1,115 @@
+package com.ruoyi.kyTask.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.kyTask.mapper.KyTaskInfoMapper;
+import com.ruoyi.kyTask.domain.KyTaskInfo;
+import com.ruoyi.kyTask.service.IKyTaskInfoService;
+
+/**
+ * 科研任务Service业务层处理
+ * 
+ * @author yanxun
+ * @date 2023-08-10
+ */
+@Service
+public class KyTaskInfoServiceImpl implements IKyTaskInfoService 
+{
+    @Autowired
+    private KyTaskInfoMapper kyTaskInfoMapper;
+
+    /**
+     * 查询科研任务
+     * 
+     * @param key 科研任务主键
+     * @return 科研任务
+     */
+    @Override
+    public KyTaskInfo selectKyTaskInfoByKey(Long key)
+    {
+        return kyTaskInfoMapper.selectKyTaskInfoByKey(key);
+    }
+
+    /**
+     * 查询科研任务列表
+     * 
+     * @param kyTaskInfo 科研任务
+     * @return 科研任务
+     */
+    @Override
+    public List<KyTaskInfo> selectKyTaskInfoList(KyTaskInfo kyTaskInfo)
+    {
+        return kyTaskInfoMapper.selectKyTaskInfoList(kyTaskInfo);
+    }
+
+    /**
+     * 新增科研任务
+     * 
+     * @param kyTaskInfo 科研任务
+     * @return 结果
+     */
+    @Override
+    public int insertKyTaskInfo(KyTaskInfo kyTaskInfo)
+    {
+        return kyTaskInfoMapper.insertKyTaskInfo(kyTaskInfo);
+    }
+
+    /**
+     * 修改科研任务
+     * 
+     * @param kyTaskInfo 科研任务
+     * @return 结果
+     */
+    @Override
+    public int updateKyTaskInfo(KyTaskInfo kyTaskInfo)
+    {
+        return kyTaskInfoMapper.updateKyTaskInfo(kyTaskInfo);
+    }
+
+    /**
+     * 批量删除科研任务
+     * 
+     * @param keys 需要删除的科研任务主键
+     * @return 结果
+     */
+    @Override
+    public int deleteKyTaskInfoByKeys(Long[] keys)
+    {
+        return kyTaskInfoMapper.deleteKyTaskInfoByKeys(keys);
+    }
+
+    /**
+     * 删除科研任务信息
+     * 
+     * @param key 科研任务主键
+     * @return 结果
+     */
+    @Override
+    public int deleteKyTaskInfoByKey(Long key)
+    {
+        return kyTaskInfoMapper.deleteKyTaskInfoByKey(key);
+    }
+
+    /**
+     * 获取科研任务总数
+     *
+     * @return 结果
+     */
+    @Override
+    public int getTaskCount() {
+        return kyTaskInfoMapper.getTaskCount();
+    }
+
+    /**
+     * 查找偏移量范围内的科研任务
+     *
+     * @param beginOffset 开始偏移量
+     * @param endOffset 结束偏移量
+     * @return 结果
+     */
+    @Override
+    public List<KyTaskInfo> selectKyTaskInfoListByRange(int beginOffset, int size) {
+        return kyTaskInfoMapper.seletcKyTaskInfoListByRanage(beginOffset,size);
+    }
+}

+ 616 - 0
base/src/main/java/com/ruoyi/mesInfo/domain/MesInfo.java

@@ -0,0 +1,616 @@
+package com.ruoyi.mesInfo.domain;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * mes装机信息卡对象 mes_info
+ * 
+ * @author yanxun
+ * @date 2023-08-10
+ */
+public class MesInfo extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** $column.columnComment */
+    private Long keyId;
+
+    /** 任务号 */
+    @Excel(name = "任务号")
+    private String taskno;
+
+    /** 工单号 */
+    @Excel(name = "工单号")
+    private String wo;
+
+    /** 制令单号 */
+    @Excel(name = "制令单号")
+    private String mo;
+
+    /** 生产条码 */
+    @Excel(name = "生产条码")
+    private String serialNumber;
+
+    /** 出所编号 */
+    @Excel(name = "出所编号")
+    private String outNo;
+
+    /** 产品代号 */
+    @Excel(name = "产品代号")
+    private String productNumber;
+
+    /** 唯一id */
+    private Long id;
+
+    /** 物料编码 */
+    @Excel(name = "物料编码")
+    private String pnCode;
+
+    /** 物料名称 */
+    @Excel(name = "物料名称")
+    private String pnName;
+
+    /** 批次 */
+    @Excel(name = "批次")
+    private String batchNo;
+
+    /** 元器件编号 */
+    @Excel(name = "元器件编号")
+    private String componentSn;
+
+    /** 供应商 */
+    @Excel(name = "供应商")
+    private String supplier;
+
+    /** 质量等级 */
+    @Excel(name = "质量等级")
+    private String qualitygrate;
+
+    /** 位号 */
+    @Excel(name = "位号")
+    private String pcbItem;
+
+    /** 数量 */
+    @Excel(name = "数量")
+    private BigDecimal qty;
+
+    /** 有效期 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "有效期", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date validDate;
+
+    /** 筛选情况 */
+    @Excel(name = "筛选情况")
+    private String filter;
+
+    /** 备注 */
+    @Excel(name = "备注")
+    private String remarks;
+
+    /** 更新人 */
+    @Excel(name = "更新人")
+    private String updator;
+
+    /** 更新时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "更新时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date updateDate;
+
+    /** 位号2 */
+    @Excel(name = "位号2")
+    private String pcbItem2;
+
+    /** 型号规格 */
+    @Excel(name = "型号规格")
+    private String pnSpec;
+
+    /** 物料条码 */
+    @Excel(name = "物料条码")
+    private String iqcSn;
+
+    /** 操作者 */
+    @Excel(name = "操作者")
+    private String workMan;
+
+    /** 操作工序 */
+    @Excel(name = "操作工序")
+    private String workLocat;
+
+    /** 检验者 */
+    @Excel(name = "检验者")
+    private String checkMan;
+
+    /** j检验时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "j检验时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date checkDate;
+
+    /** 原始位号 */
+    @Excel(name = "原始位号")
+    private String pcbItemS;
+
+    /** 原始数量 */
+    @Excel(name = "原始数量")
+    private BigDecimal qtyS;
+
+    /** 拆除位号 */
+    @Excel(name = "拆除位号")
+    private String pcbItemR;
+
+    /** 拆除数量 */
+    @Excel(name = "拆除数量")
+    private BigDecimal qtyR;
+
+    /** 呈现位号 */
+    @Excel(name = "呈现位号")
+    private String pcbItemShow;
+
+    /** PID */
+    @Excel(name = "PID")
+    private String pid;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String dpano;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String technicalstandard;
+
+    /** 行号 */
+    @Excel(name = "行号")
+    private String iqcIndex;
+
+    /** 出库单号 */
+    @Excel(name = "出库单号")
+    private String outStockNo;
+
+    /** 印制板号 */
+    @Excel(name = "印制板号")
+    private String boardNo;
+
+    /** 入库批次号 */
+    @Excel(name = "入库批次号")
+    private String inbatchno;
+
+    /** 采购单价 */
+    @Excel(name = "采购单价")
+    private BigDecimal purchaseprice;
+
+    /** 内部单价 */
+    @Excel(name = "内部单价")
+    private BigDecimal internalprice;
+
+    public void setKeyId(Long keyId) 
+    {
+        this.keyId = keyId;
+    }
+
+    public Long getKeyId() 
+    {
+        return keyId;
+    }
+    public void setTaskno(String taskno) 
+    {
+        this.taskno = taskno;
+    }
+
+    public String getTaskno() 
+    {
+        return taskno;
+    }
+    public void setWo(String wo) 
+    {
+        this.wo = wo;
+    }
+
+    public String getWo() 
+    {
+        return wo;
+    }
+    public void setMo(String mo) 
+    {
+        this.mo = mo;
+    }
+
+    public String getMo() 
+    {
+        return mo;
+    }
+    public void setSerialNumber(String serialNumber) 
+    {
+        this.serialNumber = serialNumber;
+    }
+
+    public String getSerialNumber() 
+    {
+        return serialNumber;
+    }
+    public void setOutNo(String outNo) 
+    {
+        this.outNo = outNo;
+    }
+
+    public String getOutNo() 
+    {
+        return outNo;
+    }
+    public void setProductNumber(String productNumber) 
+    {
+        this.productNumber = productNumber;
+    }
+
+    public String getProductNumber() 
+    {
+        return productNumber;
+    }
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setPnCode(String pnCode) 
+    {
+        this.pnCode = pnCode;
+    }
+
+    public String getPnCode() 
+    {
+        return pnCode;
+    }
+    public void setPnName(String pnName) 
+    {
+        this.pnName = pnName;
+    }
+
+    public String getPnName() 
+    {
+        return pnName;
+    }
+    public void setBatchNo(String batchNo) 
+    {
+        this.batchNo = batchNo;
+    }
+
+    public String getBatchNo() 
+    {
+        return batchNo;
+    }
+    public void setComponentSn(String componentSn) 
+    {
+        this.componentSn = componentSn;
+    }
+
+    public String getComponentSn() 
+    {
+        return componentSn;
+    }
+    public void setSupplier(String supplier) 
+    {
+        this.supplier = supplier;
+    }
+
+    public String getSupplier() 
+    {
+        return supplier;
+    }
+    public void setQualitygrate(String qualitygrate) 
+    {
+        this.qualitygrate = qualitygrate;
+    }
+
+    public String getQualitygrate() 
+    {
+        return qualitygrate;
+    }
+    public void setPcbItem(String pcbItem) 
+    {
+        this.pcbItem = pcbItem;
+    }
+
+    public String getPcbItem() 
+    {
+        return pcbItem;
+    }
+    public void setQty(BigDecimal qty) 
+    {
+        this.qty = qty;
+    }
+
+    public BigDecimal getQty() 
+    {
+        return qty;
+    }
+    public void setValidDate(Date validDate) 
+    {
+        this.validDate = validDate;
+    }
+
+    public Date getValidDate() 
+    {
+        return validDate;
+    }
+    public void setFilter(String filter) 
+    {
+        this.filter = filter;
+    }
+
+    public String getFilter() 
+    {
+        return filter;
+    }
+    public void setRemarks(String remarks) 
+    {
+        this.remarks = remarks;
+    }
+
+    public String getRemarks() 
+    {
+        return remarks;
+    }
+    public void setUpdator(String updator) 
+    {
+        this.updator = updator;
+    }
+
+    public String getUpdator() 
+    {
+        return updator;
+    }
+    public void setUpdateDate(Date updateDate) 
+    {
+        this.updateDate = updateDate;
+    }
+
+    public Date getUpdateDate() 
+    {
+        return updateDate;
+    }
+    public void setPcbItem2(String pcbItem2) 
+    {
+        this.pcbItem2 = pcbItem2;
+    }
+
+    public String getPcbItem2() 
+    {
+        return pcbItem2;
+    }
+    public void setPnSpec(String pnSpec) 
+    {
+        this.pnSpec = pnSpec;
+    }
+
+    public String getPnSpec() 
+    {
+        return pnSpec;
+    }
+    public void setIqcSn(String iqcSn) 
+    {
+        this.iqcSn = iqcSn;
+    }
+
+    public String getIqcSn() 
+    {
+        return iqcSn;
+    }
+    public void setWorkMan(String workMan) 
+    {
+        this.workMan = workMan;
+    }
+
+    public String getWorkMan() 
+    {
+        return workMan;
+    }
+    public void setWorkLocat(String workLocat) 
+    {
+        this.workLocat = workLocat;
+    }
+
+    public String getWorkLocat() 
+    {
+        return workLocat;
+    }
+    public void setCheckMan(String checkMan) 
+    {
+        this.checkMan = checkMan;
+    }
+
+    public String getCheckMan() 
+    {
+        return checkMan;
+    }
+    public void setCheckDate(Date checkDate) 
+    {
+        this.checkDate = checkDate;
+    }
+
+    public Date getCheckDate() 
+    {
+        return checkDate;
+    }
+    public void setPcbItemS(String pcbItemS) 
+    {
+        this.pcbItemS = pcbItemS;
+    }
+
+    public String getPcbItemS() 
+    {
+        return pcbItemS;
+    }
+    public void setQtyS(BigDecimal qtyS) 
+    {
+        this.qtyS = qtyS;
+    }
+
+    public BigDecimal getQtyS() 
+    {
+        return qtyS;
+    }
+    public void setPcbItemR(String pcbItemR) 
+    {
+        this.pcbItemR = pcbItemR;
+    }
+
+    public String getPcbItemR() 
+    {
+        return pcbItemR;
+    }
+    public void setQtyR(BigDecimal qtyR) 
+    {
+        this.qtyR = qtyR;
+    }
+
+    public BigDecimal getQtyR() 
+    {
+        return qtyR;
+    }
+    public void setPcbItemShow(String pcbItemShow) 
+    {
+        this.pcbItemShow = pcbItemShow;
+    }
+
+    public String getPcbItemShow() 
+    {
+        return pcbItemShow;
+    }
+    public void setPid(String pid) 
+    {
+        this.pid = pid;
+    }
+
+    public String getPid() 
+    {
+        return pid;
+    }
+    public void setDpano(String dpano) 
+    {
+        this.dpano = dpano;
+    }
+
+    public String getDpano() 
+    {
+        return dpano;
+    }
+    public void setTechnicalstandard(String technicalstandard) 
+    {
+        this.technicalstandard = technicalstandard;
+    }
+
+    public String getTechnicalstandard() 
+    {
+        return technicalstandard;
+    }
+    public void setIqcIndex(String iqcIndex) 
+    {
+        this.iqcIndex = iqcIndex;
+    }
+
+    public String getIqcIndex() 
+    {
+        return iqcIndex;
+    }
+    public void setOutStockNo(String outStockNo) 
+    {
+        this.outStockNo = outStockNo;
+    }
+
+    public String getOutStockNo() 
+    {
+        return outStockNo;
+    }
+    public void setBoardNo(String boardNo) 
+    {
+        this.boardNo = boardNo;
+    }
+
+    public String getBoardNo() 
+    {
+        return boardNo;
+    }
+    public void setInbatchno(String inbatchno) 
+    {
+        this.inbatchno = inbatchno;
+    }
+
+    public String getInbatchno() 
+    {
+        return inbatchno;
+    }
+    public void setPurchaseprice(BigDecimal purchaseprice) 
+    {
+        this.purchaseprice = purchaseprice;
+    }
+
+    public BigDecimal getPurchaseprice() 
+    {
+        return purchaseprice;
+    }
+    public void setInternalprice(BigDecimal internalprice) 
+    {
+        this.internalprice = internalprice;
+    }
+
+    public BigDecimal getInternalprice() 
+    {
+        return internalprice;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("keyId", getKeyId())
+            .append("taskno", getTaskno())
+            .append("wo", getWo())
+            .append("mo", getMo())
+            .append("serialNumber", getSerialNumber())
+            .append("outNo", getOutNo())
+            .append("productNumber", getProductNumber())
+            .append("id", getId())
+            .append("pnCode", getPnCode())
+            .append("pnName", getPnName())
+            .append("batchNo", getBatchNo())
+            .append("componentSn", getComponentSn())
+            .append("supplier", getSupplier())
+            .append("qualitygrate", getQualitygrate())
+            .append("pcbItem", getPcbItem())
+            .append("qty", getQty())
+            .append("validDate", getValidDate())
+            .append("filter", getFilter())
+            .append("remarks", getRemarks())
+            .append("updator", getUpdator())
+            .append("updateDate", getUpdateDate())
+            .append("pcbItem2", getPcbItem2())
+            .append("pnSpec", getPnSpec())
+            .append("iqcSn", getIqcSn())
+            .append("workMan", getWorkMan())
+            .append("workLocat", getWorkLocat())
+            .append("checkMan", getCheckMan())
+            .append("checkDate", getCheckDate())
+            .append("pcbItemS", getPcbItemS())
+            .append("qtyS", getQtyS())
+            .append("pcbItemR", getPcbItemR())
+            .append("qtyR", getQtyR())
+            .append("pcbItemShow", getPcbItemShow())
+            .append("pid", getPid())
+            .append("dpano", getDpano())
+            .append("technicalstandard", getTechnicalstandard())
+            .append("iqcIndex", getIqcIndex())
+            .append("outStockNo", getOutStockNo())
+            .append("boardNo", getBoardNo())
+            .append("inbatchno", getInbatchno())
+            .append("purchaseprice", getPurchaseprice())
+            .append("internalprice", getInternalprice())
+            .toString();
+    }
+}

+ 77 - 0
base/src/main/java/com/ruoyi/mesInfo/mapper/MesInfoMapper.java

@@ -0,0 +1,77 @@
+package com.ruoyi.mesInfo.mapper;
+
+import java.util.List;
+import com.ruoyi.mesInfo.domain.MesInfo;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * mes装机信息卡Mapper接口
+ * 
+ * @author yanxun
+ * @date 2023-08-10
+ */
+@Mapper
+public interface MesInfoMapper 
+{
+    /**
+     * 查询mes装机信息卡
+     * 
+     * @param keyId mes装机信息卡主键
+     * @return mes装机信息卡
+     */
+    public MesInfo selectMesInfoByKeyId(Long keyId);
+
+    /**
+     * 查询mes装机信息卡列表
+     * 
+     * @param mesInfo mes装机信息卡
+     * @return mes装机信息卡集合
+     */
+    public List<MesInfo> selectMesInfoList(MesInfo mesInfo);
+
+    /**
+     * 新增mes装机信息卡
+     * 
+     * @param mesInfo mes装机信息卡
+     * @return 结果
+     */
+    public int insertMesInfo(MesInfo mesInfo);
+
+    /**
+     * 修改mes装机信息卡
+     * 
+     * @param mesInfo mes装机信息卡
+     * @return 结果
+     */
+    public int updateMesInfo(MesInfo mesInfo);
+
+    /**
+     * 删除mes装机信息卡
+     * 
+     * @param keyId mes装机信息卡主键
+     * @return 结果
+     */
+    public int deleteMesInfoByKeyId(Long keyId);
+
+    /**
+     * 批量删除mes装机信息卡
+     * 
+     * @param keyIds 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteMesInfoByKeyIds(Long[] keyIds);
+
+    /**
+     * 获取上次处理的装机信息卡最后一条数据的位置
+     *
+     * @return 结果
+     */
+    Long selectCheckPoint();
+
+    /**
+     * 获取当前装机信息卡最大的主键
+     * @return 结果
+     */
+    Long getMesInfoMaxKeyId();
+
+}

+ 73 - 0
base/src/main/java/com/ruoyi/mesInfo/service/IMesInfoService.java

@@ -0,0 +1,73 @@
+package com.ruoyi.mesInfo.service;
+
+import java.util.List;
+import com.ruoyi.mesInfo.domain.MesInfo;
+
+/**
+ * mes装机信息卡Service接口
+ * 
+ * @author yanxun
+ * @date 2023-08-10
+ */
+public interface IMesInfoService
+{
+    /**
+     * 查询mes装机信息卡
+     * 
+     * @param keyId mes装机信息卡主键
+     * @return mes装机信息卡
+     */
+    public MesInfo selectMesInfoByKeyId(Long keyId);
+
+    /**
+     * 查询mes装机信息卡列表
+     * 
+     * @param mesInfo mes装机信息卡
+     * @return mes装机信息卡集合
+     */
+    public List<MesInfo> selectMesInfoList(MesInfo mesInfo);
+
+    /**
+     * 新增mes装机信息卡
+     * 
+     * @param mesInfo mes装机信息卡
+     * @return 结果
+     */
+    public int insertMesInfo(MesInfo mesInfo);
+
+    /**
+     * 修改mes装机信息卡
+     * 
+     * @param mesInfo mes装机信息卡
+     * @return 结果
+     */
+    public int updateMesInfo(MesInfo mesInfo);
+
+    /**
+     * 批量删除mes装机信息卡
+     * 
+     * @param keyIds 需要删除的mes装机信息卡主键集合
+     * @return 结果
+     */
+    public int deleteMesInfoByKeyIds(Long[] keyIds);
+
+    /**
+     * 删除mes装机信息卡信息
+     * 
+     * @param keyId mes装机信息卡主键
+     * @return 结果
+     */
+    public int deleteMesInfoByKeyId(Long keyId);
+
+    /**
+     * 获取上次处理的装机信息卡最后一条数据的位置
+     * @return 结果
+     */
+    Long selectCheckPoint();
+
+    /**
+     * 获取当前装机信息卡最大的主键
+     * @return 结果
+     */
+    Long getMesInfoMaxKeyId();
+}

+ 112 - 0
base/src/main/java/com/ruoyi/mesInfo/service/impl/MesInfoServiceImpl.java

@@ -0,0 +1,112 @@
+package com.ruoyi.mesInfo.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.mesInfo.mapper.MesInfoMapper;
+import com.ruoyi.mesInfo.domain.MesInfo;
+import com.ruoyi.mesInfo.service.IMesInfoService;
+
+/**
+ * mes装机信息卡Service业务层处理
+ * 
+ * @author yanxun
+ * @date 2023-08-10
+ */
+@Service
+public class MesInfoServiceImpl implements IMesInfoService 
+{
+    @Autowired
+    private MesInfoMapper mesInfoMapper;
+
+    /**
+     * 查询mes装机信息卡
+     * 
+     * @param keyId mes装机信息卡主键
+     * @return mes装机信息卡
+     */
+    @Override
+    public MesInfo selectMesInfoByKeyId(Long keyId)
+    {
+        return mesInfoMapper.selectMesInfoByKeyId(keyId);
+    }
+
+    /**
+     * 查询mes装机信息卡列表
+     * 
+     * @param mesInfo mes装机信息卡
+     * @return mes装机信息卡
+     */
+    @Override
+    public List<MesInfo> selectMesInfoList(MesInfo mesInfo)
+    {
+        return mesInfoMapper.selectMesInfoList(mesInfo);
+    }
+
+    /**
+     * 新增mes装机信息卡
+     * 
+     * @param mesInfo mes装机信息卡
+     * @return 结果
+     */
+    @Override
+    public int insertMesInfo(MesInfo mesInfo)
+    {
+        return mesInfoMapper.insertMesInfo(mesInfo);
+    }
+
+    /**
+     * 修改mes装机信息卡
+     * 
+     * @param mesInfo mes装机信息卡
+     * @return 结果
+     */
+    @Override
+    public int updateMesInfo(MesInfo mesInfo)
+    {
+        return mesInfoMapper.updateMesInfo(mesInfo);
+    }
+
+    /**
+     * 批量删除mes装机信息卡
+     * 
+     * @param keyIds 需要删除的mes装机信息卡主键
+     * @return 结果
+     */
+    @Override
+    public int deleteMesInfoByKeyIds(Long[] keyIds)
+    {
+        return mesInfoMapper.deleteMesInfoByKeyIds(keyIds);
+    }
+
+    /**
+     * 删除mes装机信息卡信息
+     * 
+     * @param keyId mes装机信息卡主键
+     * @return 结果
+     */
+    @Override
+    public int deleteMesInfoByKeyId(Long keyId)
+    {
+        return mesInfoMapper.deleteMesInfoByKeyId(keyId);
+    }
+
+    /**
+     * 获取上次处理的装机信息卡最后一条数据的主键
+     *
+     * @return 结果
+     */
+    @Override
+    public Long selectCheckPoint() {
+        return mesInfoMapper.selectCheckPoint();
+    }
+
+    /**
+     * 获取当前装机信息卡最大的主键
+     * @return 结果
+     */
+    @Override
+    public Long getMesInfoMaxKeyId() {
+        return mesInfoMapper.getMesInfoMaxKeyId();
+    }
+}

+ 308 - 0
base/src/main/java/com/ruoyi/projectChbSwf/domain/KzksProjectChbSwf.java

@@ -0,0 +1,308 @@
+package com.ruoyi.projectChbSwf.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+import java.math.BigDecimal;
+
+/**
+ * 事务费对象 kzks_project_chb_swf
+ * 
+ * @author yanxun
+ * @date 2023-08-10
+ */
+public class KzksProjectChbSwf extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** $column.columnComment */
+    private String id;
+
+    /** 所属部门 */
+    @Excel(name = "所属部门")
+    private String sysOrgCode;
+
+    /** 年度 */
+    @Excel(name = "年度")
+    private String nd;
+
+    /** 凭证日期 */
+    @Excel(name = "凭证日期")
+    private String pzrq;
+
+    /** 凭证号 */
+    @Excel(name = "凭证号")
+    private String pzh;
+
+    /** 摘要 */
+    @Excel(name = "摘要")
+    private String zy;
+
+    /** 科目编号 */
+    @Excel(name = "科目编号")
+    private String kmbh;
+
+    /** 科目名称 */
+    @Excel(name = "科目名称")
+    private String km;
+
+    /** 方向 */
+    @Excel(name = "方向")
+    private String fx;
+
+    /** 金额 */
+    @Excel(name = "金额")
+    private BigDecimal je;
+
+    /** 部门 */
+    @Excel(name = "部门")
+    private String bm;
+
+    /** 往来单位 */
+    @Excel(name = "往来单位")
+    private String wldw;
+
+    /** 辅助金额 */
+    @Excel(name = "辅助金额")
+    private BigDecimal fzje;
+
+    /** 制单人 */
+    @Excel(name = "制单人")
+    private String zdr;
+
+    /** 会计期间 */
+    @Excel(name = "会计期间")
+    private String kjqj;
+
+    /** 凭证内码 */
+    @Excel(name = "凭证内码")
+    private String pznm;
+
+    /** 项目编号 */
+    @Excel(name = "项目编号")
+    private String xmbh;
+
+    /** 项目名称 */
+    @Excel(name = "项目名称")
+    private String xmmc;
+
+    /** 项目类别 */
+    @Excel(name = "项目类别")
+    private String xmlb;
+
+    /** 任务号 */
+    @Excel(name = "任务号")
+    private String taskno;
+
+    public void setId(String id) 
+    {
+        this.id = id;
+    }
+
+    public String getId() 
+    {
+        return id;
+    }
+    public void setSysOrgCode(String sysOrgCode) 
+    {
+        this.sysOrgCode = sysOrgCode;
+    }
+
+    public String getSysOrgCode() 
+    {
+        return sysOrgCode;
+    }
+    public void setNd(String nd) 
+    {
+        this.nd = nd;
+    }
+
+    public String getNd() 
+    {
+        return nd;
+    }
+    public void setPzrq(String pzrq) 
+    {
+        this.pzrq = pzrq;
+    }
+
+    public String getPzrq() 
+    {
+        return pzrq;
+    }
+    public void setPzh(String pzh) 
+    {
+        this.pzh = pzh;
+    }
+
+    public String getPzh() 
+    {
+        return pzh;
+    }
+    public void setZy(String zy) 
+    {
+        this.zy = zy;
+    }
+
+    public String getZy() 
+    {
+        return zy;
+    }
+    public void setKmbh(String kmbh) 
+    {
+        this.kmbh = kmbh;
+    }
+
+    public String getKmbh() 
+    {
+        return kmbh;
+    }
+    public void setKm(String km) 
+    {
+        this.km = km;
+    }
+
+    public String getKm() 
+    {
+        return km;
+    }
+    public void setFx(String fx) 
+    {
+        this.fx = fx;
+    }
+
+    public String getFx() 
+    {
+        return fx;
+    }
+
+    public BigDecimal getJe() {
+        return je;
+    }
+
+    public void setJe(BigDecimal je) {
+        this.je = je;
+    }
+
+    public BigDecimal getFzje() {
+        return fzje;
+    }
+
+    public void setFzje(BigDecimal fzje) {
+        this.fzje = fzje;
+    }
+
+    public void setBm(String bm)
+    {
+        this.bm = bm;
+    }
+
+    public String getBm() 
+    {
+        return bm;
+    }
+    public void setWldw(String wldw) 
+    {
+        this.wldw = wldw;
+    }
+
+    public String getWldw() 
+    {
+        return wldw;
+    }
+    public void setZdr(String zdr) 
+    {
+        this.zdr = zdr;
+    }
+
+    public String getZdr() 
+    {
+        return zdr;
+    }
+    public void setKjqj(String kjqj) 
+    {
+        this.kjqj = kjqj;
+    }
+
+    public String getKjqj() 
+    {
+        return kjqj;
+    }
+    public void setPznm(String pznm) 
+    {
+        this.pznm = pznm;
+    }
+
+    public String getPznm() 
+    {
+        return pznm;
+    }
+    public void setXmbh(String xmbh) 
+    {
+        this.xmbh = xmbh;
+    }
+
+    public String getXmbh() 
+    {
+        return xmbh;
+    }
+    public void setXmmc(String xmmc) 
+    {
+        this.xmmc = xmmc;
+    }
+
+    public String getXmmc() 
+    {
+        return xmmc;
+    }
+    public void setXmlb(String xmlb) 
+    {
+        this.xmlb = xmlb;
+    }
+
+    public String getXmlb() 
+    {
+        return xmlb;
+    }
+    public void setTaskno(String taskno) 
+    {
+        this.taskno = taskno;
+    }
+
+    public String getTaskno() 
+    {
+        return taskno;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("sysOrgCode", getSysOrgCode())
+            .append("nd", getNd())
+            .append("pzrq", getPzrq())
+            .append("pzh", getPzh())
+            .append("zy", getZy())
+            .append("kmbh", getKmbh())
+            .append("km", getKm())
+            .append("fx", getFx())
+            .append("je", getJe())
+            .append("bm", getBm())
+            .append("wldw", getWldw())
+            .append("fzje", getFzje())
+            .append("zdr", getZdr())
+            .append("kjqj", getKjqj())
+            .append("pznm", getPznm())
+            .append("xmbh", getXmbh())
+            .append("xmmc", getXmmc())
+            .append("xmlb", getXmlb())
+            .append("taskno", getTaskno())
+            .toString();
+    }
+}

+ 73 - 0
base/src/main/java/com/ruoyi/projectChbSwf/mapper/KzksProjectChbSwfMapper.java

@@ -0,0 +1,73 @@
+package com.ruoyi.projectChbSwf.mapper;
+
+import java.math.BigDecimal;
+import java.util.List;
+import com.ruoyi.projectChbSwf.domain.KzksProjectChbSwf;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 事务费Mapper接口
+ * 
+ * @author yanxun
+ * @date 2023-08-10
+ */
+@Mapper
+public interface KzksProjectChbSwfMapper 
+{
+    /**
+     * 查询事务费
+     * 
+     * @param id 事务费主键
+     * @return 事务费
+     */
+    public KzksProjectChbSwf selectKzksProjectChbSwfById(String id);
+
+    /**
+     * 查询事务费列表
+     * 
+     * @param kzksProjectChbSwf 事务费
+     * @return 事务费集合
+     */
+    public List<KzksProjectChbSwf> selectKzksProjectChbSwfList(KzksProjectChbSwf kzksProjectChbSwf);
+
+    /**
+     * 新增事务费
+     * 
+     * @param kzksProjectChbSwf 事务费
+     * @return 结果
+     */
+    public int insertKzksProjectChbSwf(KzksProjectChbSwf kzksProjectChbSwf);
+
+    /**
+     * 修改事务费
+     * 
+     * @param kzksProjectChbSwf 事务费
+     * @return 结果
+     */
+    public int updateKzksProjectChbSwf(KzksProjectChbSwf kzksProjectChbSwf);
+
+    /**
+     * 删除事务费
+     * 
+     * @param id 事务费主键
+     * @return 结果
+     */
+    public int deleteKzksProjectChbSwfById(String id);
+
+    /**
+     * 批量删除事务费
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteKzksProjectChbSwfByIds(String[] ids);
+
+
+    /**
+     * 根据科研任务号获取事务费总和
+     *
+     * @param taskno 任务号
+     * @return 结果
+     */
+    BigDecimal selectSwfByTaskno(String taskno);
+}

+ 71 - 0
base/src/main/java/com/ruoyi/projectChbSwf/service/IKzksProjectChbSwfService.java

@@ -0,0 +1,71 @@
+package com.ruoyi.projectChbSwf.service;
+
+import java.math.BigDecimal;
+import java.util.List;
+import com.ruoyi.projectChbSwf.domain.KzksProjectChbSwf;
+
+/**
+ * 事务费Service接口
+ * 
+ * @author yanxun
+ * @date 2023-08-10
+ */
+public interface IKzksProjectChbSwfService 
+{
+    /**
+     * 查询事务费
+     * 
+     * @param id 事务费主键
+     * @return 事务费
+     */
+    public KzksProjectChbSwf selectKzksProjectChbSwfById(String id);
+
+    /**
+     * 查询事务费列表
+     * 
+     * @param kzksProjectChbSwf 事务费
+     * @return 事务费集合
+     */
+    public List<KzksProjectChbSwf> selectKzksProjectChbSwfList(KzksProjectChbSwf kzksProjectChbSwf);
+
+    /**
+     * 新增事务费
+     * 
+     * @param kzksProjectChbSwf 事务费
+     * @return 结果
+     */
+    public int insertKzksProjectChbSwf(KzksProjectChbSwf kzksProjectChbSwf);
+
+    /**
+     * 修改事务费
+     * 
+     * @param kzksProjectChbSwf 事务费
+     * @return 结果
+     */
+    public int updateKzksProjectChbSwf(KzksProjectChbSwf kzksProjectChbSwf);
+
+    /**
+     * 批量删除事务费
+     * 
+     * @param ids 需要删除的事务费主键集合
+     * @return 结果
+     */
+    public int deleteKzksProjectChbSwfByIds(String[] ids);
+
+    /**
+     * 删除事务费信息
+     * 
+     * @param id 事务费主键
+     * @return 结果
+     */
+    public int deleteKzksProjectChbSwfById(String id);
+
+
+    /**
+     * 根据科研任务号获取事务费总和
+     *
+     * @param taskno 任务号
+     * @return 结果
+     */
+    BigDecimal selectSwfByTaskno(String taskno);
+}

+ 109 - 0
base/src/main/java/com/ruoyi/projectChbSwf/service/impl/KzksProjectChbSwfServiceImpl.java

@@ -0,0 +1,109 @@
+package com.ruoyi.projectChbSwf.service.impl;
+
+import java.math.BigDecimal;
+import java.util.List;
+import com.ruoyi.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.projectChbSwf.mapper.KzksProjectChbSwfMapper;
+import com.ruoyi.projectChbSwf.domain.KzksProjectChbSwf;
+import com.ruoyi.projectChbSwf.service.IKzksProjectChbSwfService;
+
+/**
+ * 事务费Service业务层处理
+ * 
+ * @author yanxun
+ * @date 2023-08-10
+ */
+@Service
+public class KzksProjectChbSwfServiceImpl implements IKzksProjectChbSwfService 
+{
+    @Autowired
+    private KzksProjectChbSwfMapper kzksProjectChbSwfMapper;
+
+    /**
+     * 查询事务费
+     * 
+     * @param id 事务费主键
+     * @return 事务费
+     */
+    @Override
+    public KzksProjectChbSwf selectKzksProjectChbSwfById(String id)
+    {
+        return kzksProjectChbSwfMapper.selectKzksProjectChbSwfById(id);
+    }
+
+    /**
+     * 查询事务费列表
+     * 
+     * @param kzksProjectChbSwf 事务费
+     * @return 事务费
+     */
+    @Override
+    public List<KzksProjectChbSwf> selectKzksProjectChbSwfList(KzksProjectChbSwf kzksProjectChbSwf)
+    {
+        return kzksProjectChbSwfMapper.selectKzksProjectChbSwfList(kzksProjectChbSwf);
+    }
+
+    /**
+     * 新增事务费
+     * 
+     * @param kzksProjectChbSwf 事务费
+     * @return 结果
+     */
+    @Override
+    public int insertKzksProjectChbSwf(KzksProjectChbSwf kzksProjectChbSwf)
+    {
+        kzksProjectChbSwf.setCreateTime(DateUtils.getNowDate());
+        return kzksProjectChbSwfMapper.insertKzksProjectChbSwf(kzksProjectChbSwf);
+    }
+
+    /**
+     * 修改事务费
+     * 
+     * @param kzksProjectChbSwf 事务费
+     * @return 结果
+     */
+    @Override
+    public int updateKzksProjectChbSwf(KzksProjectChbSwf kzksProjectChbSwf)
+    {
+        kzksProjectChbSwf.setUpdateTime(DateUtils.getNowDate());
+        return kzksProjectChbSwfMapper.updateKzksProjectChbSwf(kzksProjectChbSwf);
+    }
+
+    /**
+     * 批量删除事务费
+     * 
+     * @param ids 需要删除的事务费主键
+     * @return 结果
+     */
+    @Override
+    public int deleteKzksProjectChbSwfByIds(String[] ids)
+    {
+        return kzksProjectChbSwfMapper.deleteKzksProjectChbSwfByIds(ids);
+    }
+
+    /**
+     * 删除事务费信息
+     * 
+     * @param id 事务费主键
+     * @return 结果
+     */
+    @Override
+    public int deleteKzksProjectChbSwfById(String id)
+    {
+        return kzksProjectChbSwfMapper.deleteKzksProjectChbSwfById(id);
+    }
+
+
+    /**
+     * 根据科研任务号获取事务费总和
+     *
+     * @param taskno 任务号
+     * @return 结果
+     */
+    @Override
+    public BigDecimal selectSwfByTaskno(String taskno) {
+        return kzksProjectChbSwfMapper.selectSwfByTaskno(taskno);
+    }
+}

+ 308 - 0
base/src/main/java/com/ruoyi/projectChbWxf/domain/KzksProjectChbWxf.java

@@ -0,0 +1,308 @@
+package com.ruoyi.projectChbWxf.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+import java.math.BigDecimal;
+
+/**
+ * 外协费对象 kzks_project_chb_wxf
+ * 
+ * @author ruoyi
+ * @date 2023-08-10
+ */
+public class KzksProjectChbWxf extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** $column.columnComment */
+    private String id;
+
+    /** 所属部门 */
+    @Excel(name = "所属部门")
+    private String sysOrgCode;
+
+    /** 年度 */
+    @Excel(name = "年度")
+    private String nd;
+
+    /** 凭证日期 */
+    @Excel(name = "凭证日期")
+    private String pzrq;
+
+    /** 凭证号 */
+    @Excel(name = "凭证号")
+    private String pzh;
+
+    /** 摘要 */
+    @Excel(name = "摘要")
+    private String zy;
+
+    /** 科目编号 */
+    @Excel(name = "科目编号")
+    private String kmbh;
+
+    /** 科目名称 */
+    @Excel(name = "科目名称")
+    private String km;
+
+    /** 方向 */
+    @Excel(name = "方向")
+    private String fx;
+
+    /** 金额 */
+    @Excel(name = "金额")
+    private BigDecimal je;
+
+    /** 部门 */
+    @Excel(name = "部门")
+    private String bm;
+
+    /** 往来单位 */
+    @Excel(name = "往来单位")
+    private String wldw;
+
+    /** 辅助金额 */
+    @Excel(name = "辅助金额")
+    private BigDecimal fzje;
+
+    /** 制单人 */
+    @Excel(name = "制单人")
+    private String zdr;
+
+    /** 会计期间 */
+    @Excel(name = "会计期间")
+    private String kjqj;
+
+    /** 凭证内码 */
+    @Excel(name = "凭证内码")
+    private String pznm;
+
+    /** 项目编号 */
+    @Excel(name = "项目编号")
+    private String xmbh;
+
+    /** 项目名称 */
+    @Excel(name = "项目名称")
+    private String xmmc;
+
+    /** 项目类别 */
+    @Excel(name = "项目类别")
+    private String xmlb;
+
+    /** 任务号 */
+    @Excel(name = "任务号")
+    private String taskno;
+
+    public void setId(String id) 
+    {
+        this.id = id;
+    }
+
+    public String getId() 
+    {
+        return id;
+    }
+    public void setSysOrgCode(String sysOrgCode) 
+    {
+        this.sysOrgCode = sysOrgCode;
+    }
+
+    public String getSysOrgCode() 
+    {
+        return sysOrgCode;
+    }
+    public void setNd(String nd) 
+    {
+        this.nd = nd;
+    }
+
+    public String getNd() 
+    {
+        return nd;
+    }
+    public void setPzrq(String pzrq) 
+    {
+        this.pzrq = pzrq;
+    }
+
+    public String getPzrq() 
+    {
+        return pzrq;
+    }
+    public void setPzh(String pzh) 
+    {
+        this.pzh = pzh;
+    }
+
+    public String getPzh() 
+    {
+        return pzh;
+    }
+    public void setZy(String zy) 
+    {
+        this.zy = zy;
+    }
+
+    public String getZy() 
+    {
+        return zy;
+    }
+    public void setKmbh(String kmbh) 
+    {
+        this.kmbh = kmbh;
+    }
+
+    public String getKmbh() 
+    {
+        return kmbh;
+    }
+    public void setKm(String km) 
+    {
+        this.km = km;
+    }
+
+    public String getKm() 
+    {
+        return km;
+    }
+    public void setFx(String fx) 
+    {
+        this.fx = fx;
+    }
+
+    public String getFx() 
+    {
+        return fx;
+    }
+    public void setBm(String bm) 
+    {
+        this.bm = bm;
+    }
+
+    public String getBm() 
+    {
+        return bm;
+    }
+    public void setWldw(String wldw) 
+    {
+        this.wldw = wldw;
+    }
+
+    public String getWldw() 
+    {
+        return wldw;
+    }
+
+    public BigDecimal getJe() {
+        return je;
+    }
+
+    public void setJe(BigDecimal je) {
+        this.je = je;
+    }
+
+    public BigDecimal getFzje() {
+        return fzje;
+    }
+
+    public void setFzje(BigDecimal fzje) {
+        this.fzje = fzje;
+    }
+
+    public void setZdr(String zdr)
+    {
+        this.zdr = zdr;
+    }
+
+    public String getZdr() 
+    {
+        return zdr;
+    }
+    public void setKjqj(String kjqj) 
+    {
+        this.kjqj = kjqj;
+    }
+
+    public String getKjqj() 
+    {
+        return kjqj;
+    }
+    public void setPznm(String pznm) 
+    {
+        this.pznm = pznm;
+    }
+
+    public String getPznm() 
+    {
+        return pznm;
+    }
+    public void setXmbh(String xmbh) 
+    {
+        this.xmbh = xmbh;
+    }
+
+    public String getXmbh() 
+    {
+        return xmbh;
+    }
+    public void setXmmc(String xmmc) 
+    {
+        this.xmmc = xmmc;
+    }
+
+    public String getXmmc() 
+    {
+        return xmmc;
+    }
+    public void setXmlb(String xmlb) 
+    {
+        this.xmlb = xmlb;
+    }
+
+    public String getXmlb() 
+    {
+        return xmlb;
+    }
+    public void setTaskno(String taskno) 
+    {
+        this.taskno = taskno;
+    }
+
+    public String getTaskno() 
+    {
+        return taskno;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("sysOrgCode", getSysOrgCode())
+            .append("nd", getNd())
+            .append("pzrq", getPzrq())
+            .append("pzh", getPzh())
+            .append("zy", getZy())
+            .append("kmbh", getKmbh())
+            .append("km", getKm())
+            .append("fx", getFx())
+            .append("je", getJe())
+            .append("bm", getBm())
+            .append("wldw", getWldw())
+            .append("fzje", getFzje())
+            .append("zdr", getZdr())
+            .append("kjqj", getKjqj())
+            .append("pznm", getPznm())
+            .append("xmbh", getXmbh())
+            .append("xmmc", getXmmc())
+            .append("xmlb", getXmlb())
+            .append("taskno", getTaskno())
+            .toString();
+    }
+}

+ 72 - 0
base/src/main/java/com/ruoyi/projectChbWxf/mapper/KzksProjectChbWxfMapper.java

@@ -0,0 +1,72 @@
+package com.ruoyi.projectChbWxf.mapper;
+
+import java.math.BigDecimal;
+import java.util.List;
+import com.ruoyi.projectChbWxf.domain.KzksProjectChbWxf;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 外协费Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2023-08-10
+ */
+@Mapper
+public interface KzksProjectChbWxfMapper 
+{
+    /**
+     * 查询外协费
+     * 
+     * @param id 外协费主键
+     * @return 外协费
+     */
+    public KzksProjectChbWxf selectKzksProjectChbWxfById(String id);
+
+    /**
+     * 查询外协费列表
+     * 
+     * @param kzksProjectChbWxf 外协费
+     * @return 外协费集合
+     */
+    public List<KzksProjectChbWxf> selectKzksProjectChbWxfList(KzksProjectChbWxf kzksProjectChbWxf);
+
+    /**
+     * 新增外协费
+     * 
+     * @param kzksProjectChbWxf 外协费
+     * @return 结果
+     */
+    public int insertKzksProjectChbWxf(KzksProjectChbWxf kzksProjectChbWxf);
+
+    /**
+     * 修改外协费
+     * 
+     * @param kzksProjectChbWxf 外协费
+     * @return 结果
+     */
+    public int updateKzksProjectChbWxf(KzksProjectChbWxf kzksProjectChbWxf);
+
+    /**
+     * 删除外协费
+     * 
+     * @param id 外协费主键
+     * @return 结果
+     */
+    public int deleteKzksProjectChbWxfById(String id);
+
+    /**
+     * 批量删除外协费
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteKzksProjectChbWxfByIds(String[] ids);
+
+    /**
+     * 根据科研任务号获取外协费总和
+     *
+     * @param taskno 任务号
+     * @return 结果
+     */
+    BigDecimal selectWxfByTaskno(String taskno);
+}

+ 70 - 0
base/src/main/java/com/ruoyi/projectChbWxf/service/IKzksProjectChbWxfService.java

@@ -0,0 +1,70 @@
+package com.ruoyi.projectChbWxf.service;
+
+import java.math.BigDecimal;
+import java.util.List;
+import com.ruoyi.projectChbWxf.domain.KzksProjectChbWxf;
+
+/**
+ * 外协费Service接口
+ * 
+ * @author ruoyi
+ * @date 2023-08-10
+ */
+public interface IKzksProjectChbWxfService 
+{
+    /**
+     * 查询外协费
+     * 
+     * @param id 外协费主键
+     * @return 外协费
+     */
+    public KzksProjectChbWxf selectKzksProjectChbWxfById(String id);
+
+    /**
+     * 查询外协费列表
+     * 
+     * @param kzksProjectChbWxf 外协费
+     * @return 外协费集合
+     */
+    public List<KzksProjectChbWxf> selectKzksProjectChbWxfList(KzksProjectChbWxf kzksProjectChbWxf);
+
+    /**
+     * 新增外协费
+     * 
+     * @param kzksProjectChbWxf 外协费
+     * @return 结果
+     */
+    public int insertKzksProjectChbWxf(KzksProjectChbWxf kzksProjectChbWxf);
+
+    /**
+     * 修改外协费
+     * 
+     * @param kzksProjectChbWxf 外协费
+     * @return 结果
+     */
+    public int updateKzksProjectChbWxf(KzksProjectChbWxf kzksProjectChbWxf);
+
+    /**
+     * 批量删除外协费
+     * 
+     * @param ids 需要删除的外协费主键集合
+     * @return 结果
+     */
+    public int deleteKzksProjectChbWxfByIds(String[] ids);
+
+    /**
+     * 删除外协费信息
+     * 
+     * @param id 外协费主键
+     * @return 结果
+     */
+    public int deleteKzksProjectChbWxfById(String id);
+
+    /**
+     * 根据科研任务号获取外协费总和
+     *
+     * @param taskno 任务号
+     * @return 结果
+     */
+    BigDecimal selectWxfByTaskno(String taskno);
+}

+ 108 - 0
base/src/main/java/com/ruoyi/projectChbWxf/service/impl/KzksProjectChbWxfServiceImpl.java

@@ -0,0 +1,108 @@
+package com.ruoyi.projectChbWxf.service.impl;
+
+import java.math.BigDecimal;
+import java.util.List;
+import com.ruoyi.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.projectChbWxf.mapper.KzksProjectChbWxfMapper;
+import com.ruoyi.projectChbWxf.domain.KzksProjectChbWxf;
+import com.ruoyi.projectChbWxf.service.IKzksProjectChbWxfService;
+
+/**
+ * 外协费Service业务层处理
+ * 
+ * @author ruoyi
+ * @date 2023-08-10
+ */
+@Service
+public class KzksProjectChbWxfServiceImpl implements IKzksProjectChbWxfService 
+{
+    @Autowired
+    private KzksProjectChbWxfMapper kzksProjectChbWxfMapper;
+
+    /**
+     * 查询外协费
+     * 
+     * @param id 外协费主键
+     * @return 外协费
+     */
+    @Override
+    public KzksProjectChbWxf selectKzksProjectChbWxfById(String id)
+    {
+        return kzksProjectChbWxfMapper.selectKzksProjectChbWxfById(id);
+    }
+
+    /**
+     * 查询外协费列表
+     * 
+     * @param kzksProjectChbWxf 外协费
+     * @return 外协费
+     */
+    @Override
+    public List<KzksProjectChbWxf> selectKzksProjectChbWxfList(KzksProjectChbWxf kzksProjectChbWxf)
+    {
+        return kzksProjectChbWxfMapper.selectKzksProjectChbWxfList(kzksProjectChbWxf);
+    }
+
+    /**
+     * 新增外协费
+     * 
+     * @param kzksProjectChbWxf 外协费
+     * @return 结果
+     */
+    @Override
+    public int insertKzksProjectChbWxf(KzksProjectChbWxf kzksProjectChbWxf)
+    {
+        kzksProjectChbWxf.setCreateTime(DateUtils.getNowDate());
+        return kzksProjectChbWxfMapper.insertKzksProjectChbWxf(kzksProjectChbWxf);
+    }
+
+    /**
+     * 修改外协费
+     * 
+     * @param kzksProjectChbWxf 外协费
+     * @return 结果
+     */
+    @Override
+    public int updateKzksProjectChbWxf(KzksProjectChbWxf kzksProjectChbWxf)
+    {
+        kzksProjectChbWxf.setUpdateTime(DateUtils.getNowDate());
+        return kzksProjectChbWxfMapper.updateKzksProjectChbWxf(kzksProjectChbWxf);
+    }
+
+    /**
+     * 批量删除外协费
+     * 
+     * @param ids 需要删除的外协费主键
+     * @return 结果
+     */
+    @Override
+    public int deleteKzksProjectChbWxfByIds(String[] ids)
+    {
+        return kzksProjectChbWxfMapper.deleteKzksProjectChbWxfByIds(ids);
+    }
+
+    /**
+     * 删除外协费信息
+     * 
+     * @param id 外协费主键
+     * @return 结果
+     */
+    @Override
+    public int deleteKzksProjectChbWxfById(String id)
+    {
+        return kzksProjectChbWxfMapper.deleteKzksProjectChbWxfById(id);
+    }
+
+    /**
+     * 根据科研任务号获取外协费总和
+     *
+     * @param taskno 任务号
+     * @return 结果
+     */
+    @Override
+    public BigDecimal selectWxfByTaskno(String taskno) {
+        return kzksProjectChbWxfMapper.selectWxfByTaskno(taskno);
+    }
+}

+ 308 - 0
base/src/main/java/com/ruoyi/projectChbZyf/domain/KzksProjectChbZyf.java

@@ -0,0 +1,308 @@
+package com.ruoyi.projectChbZyf.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+import java.math.BigDecimal;
+
+/**
+ * 专用费对象 kzks_project_chb_zyf
+ * 
+ * @author yanxun
+ * @date 2023-08-10
+ */
+public class KzksProjectChbZyf extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** $column.columnComment */
+    private String id;
+
+    /** 所属部门 */
+    @Excel(name = "所属部门")
+    private String sysOrgCode;
+
+    /** 年度 */
+    @Excel(name = "年度")
+    private String nd;
+
+    /** 凭证日期 */
+    @Excel(name = "凭证日期")
+    private String pzrq;
+
+    /** 凭证号 */
+    @Excel(name = "凭证号")
+    private String pzh;
+
+    /** 摘要 */
+    @Excel(name = "摘要")
+    private String zy;
+
+    /** 科目编号 */
+    @Excel(name = "科目编号")
+    private String kmbh;
+
+    /** 科目名称 */
+    @Excel(name = "科目名称")
+    private String km;
+
+    /** 方向 */
+    @Excel(name = "方向")
+    private String fx;
+
+    /** 金额 */
+    @Excel(name = "金额")
+    private BigDecimal je;
+
+    /** 部门 */
+    @Excel(name = "部门")
+    private String bm;
+
+    /** 往来单位 */
+    @Excel(name = "往来单位")
+    private String wldw;
+
+    /** 辅助金额 */
+    @Excel(name = "辅助金额")
+    private BigDecimal fzje;
+
+    /** 制单人 */
+    @Excel(name = "制单人")
+    private String zdr;
+
+    /** 会计期间 */
+    @Excel(name = "会计期间")
+    private String kjqj;
+
+    /** 凭证内码 */
+    @Excel(name = "凭证内码")
+    private String pznm;
+
+    /** 项目编号 */
+    @Excel(name = "项目编号")
+    private String xmbh;
+
+    /** 项目名称 */
+    @Excel(name = "项目名称")
+    private String xmmc;
+
+    /** 项目类别 */
+    @Excel(name = "项目类别")
+    private String xmlb;
+
+    /** 任务号 */
+    @Excel(name = "任务号")
+    private String taskno;
+
+    public void setId(String id) 
+    {
+        this.id = id;
+    }
+
+    public String getId() 
+    {
+        return id;
+    }
+    public void setSysOrgCode(String sysOrgCode) 
+    {
+        this.sysOrgCode = sysOrgCode;
+    }
+
+    public String getSysOrgCode() 
+    {
+        return sysOrgCode;
+    }
+    public void setNd(String nd) 
+    {
+        this.nd = nd;
+    }
+
+    public String getNd() 
+    {
+        return nd;
+    }
+    public void setPzrq(String pzrq) 
+    {
+        this.pzrq = pzrq;
+    }
+
+    public String getPzrq() 
+    {
+        return pzrq;
+    }
+    public void setPzh(String pzh) 
+    {
+        this.pzh = pzh;
+    }
+
+    public String getPzh() 
+    {
+        return pzh;
+    }
+    public void setZy(String zy) 
+    {
+        this.zy = zy;
+    }
+
+    public String getZy() 
+    {
+        return zy;
+    }
+    public void setKmbh(String kmbh) 
+    {
+        this.kmbh = kmbh;
+    }
+
+    public String getKmbh() 
+    {
+        return kmbh;
+    }
+    public void setKm(String km) 
+    {
+        this.km = km;
+    }
+
+    public String getKm() 
+    {
+        return km;
+    }
+    public void setFx(String fx) 
+    {
+        this.fx = fx;
+    }
+
+    public String getFx() 
+    {
+        return fx;
+    }
+    public void setBm(String bm) 
+    {
+        this.bm = bm;
+    }
+
+    public String getBm() 
+    {
+        return bm;
+    }
+    public void setWldw(String wldw) 
+    {
+        this.wldw = wldw;
+    }
+
+    public String getWldw() 
+    {
+        return wldw;
+    }
+
+    public BigDecimal getJe() {
+        return je;
+    }
+
+    public void setJe(BigDecimal je) {
+        this.je = je;
+    }
+
+    public BigDecimal getFzje() {
+        return fzje;
+    }
+
+    public void setFzje(BigDecimal fzje) {
+        this.fzje = fzje;
+    }
+
+    public void setZdr(String zdr)
+    {
+        this.zdr = zdr;
+    }
+
+    public String getZdr() 
+    {
+        return zdr;
+    }
+    public void setKjqj(String kjqj) 
+    {
+        this.kjqj = kjqj;
+    }
+
+    public String getKjqj() 
+    {
+        return kjqj;
+    }
+    public void setPznm(String pznm) 
+    {
+        this.pznm = pznm;
+    }
+
+    public String getPznm() 
+    {
+        return pznm;
+    }
+    public void setXmbh(String xmbh) 
+    {
+        this.xmbh = xmbh;
+    }
+
+    public String getXmbh() 
+    {
+        return xmbh;
+    }
+    public void setXmmc(String xmmc) 
+    {
+        this.xmmc = xmmc;
+    }
+
+    public String getXmmc() 
+    {
+        return xmmc;
+    }
+    public void setXmlb(String xmlb) 
+    {
+        this.xmlb = xmlb;
+    }
+
+    public String getXmlb() 
+    {
+        return xmlb;
+    }
+    public void setTaskno(String taskno) 
+    {
+        this.taskno = taskno;
+    }
+
+    public String getTaskno() 
+    {
+        return taskno;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("sysOrgCode", getSysOrgCode())
+            .append("nd", getNd())
+            .append("pzrq", getPzrq())
+            .append("pzh", getPzh())
+            .append("zy", getZy())
+            .append("kmbh", getKmbh())
+            .append("km", getKm())
+            .append("fx", getFx())
+            .append("je", getJe())
+            .append("bm", getBm())
+            .append("wldw", getWldw())
+            .append("fzje", getFzje())
+            .append("zdr", getZdr())
+            .append("kjqj", getKjqj())
+            .append("pznm", getPznm())
+            .append("xmbh", getXmbh())
+            .append("xmmc", getXmmc())
+            .append("xmlb", getXmlb())
+            .append("taskno", getTaskno())
+            .toString();
+    }
+}

+ 70 - 0
base/src/main/java/com/ruoyi/projectChbZyf/mapper/KzksProjectChbZyfMapper.java

@@ -0,0 +1,70 @@
+package com.ruoyi.projectChbZyf.mapper;
+
+import java.math.BigDecimal;
+import java.util.List;
+import com.ruoyi.projectChbZyf.domain.KzksProjectChbZyf;
+
+/**
+ * 专用费Mapper接口
+ * 
+ * @author yanxun
+ * @date 2023-08-10
+ */
+public interface KzksProjectChbZyfMapper 
+{
+    /**
+     * 查询专用费
+     * 
+     * @param id 专用费主键
+     * @return 专用费
+     */
+    public KzksProjectChbZyf selectKzksProjectChbZyfById(String id);
+
+    /**
+     * 查询专用费列表
+     * 
+     * @param kzksProjectChbZyf 专用费
+     * @return 专用费集合
+     */
+    public List<KzksProjectChbZyf> selectKzksProjectChbZyfList(KzksProjectChbZyf kzksProjectChbZyf);
+
+    /**
+     * 新增专用费
+     * 
+     * @param kzksProjectChbZyf 专用费
+     * @return 结果
+     */
+    public int insertKzksProjectChbZyf(KzksProjectChbZyf kzksProjectChbZyf);
+
+    /**
+     * 修改专用费
+     * 
+     * @param kzksProjectChbZyf 专用费
+     * @return 结果
+     */
+    public int updateKzksProjectChbZyf(KzksProjectChbZyf kzksProjectChbZyf);
+
+    /**
+     * 删除专用费
+     * 
+     * @param id 专用费主键
+     * @return 结果
+     */
+    public int deleteKzksProjectChbZyfById(String id);
+
+    /**
+     * 批量删除专用费
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteKzksProjectChbZyfByIds(String[] ids);
+
+    /**
+     * 根据科研任务号获取外协费总和
+     *
+     * @param taskno 任务号
+     * @return 结果
+     */
+    BigDecimal selectZyfByTaskno(String taskno);
+}

+ 70 - 0
base/src/main/java/com/ruoyi/projectChbZyf/service/IKzksProjectChbZyfService.java

@@ -0,0 +1,70 @@
+package com.ruoyi.projectChbZyf.service;
+
+import java.math.BigDecimal;
+import java.util.List;
+import com.ruoyi.projectChbZyf.domain.KzksProjectChbZyf;
+
+/**
+ * 专用费Service接口
+ * 
+ * @author yanxun
+ * @date 2023-08-10
+ */
+public interface IKzksProjectChbZyfService 
+{
+    /**
+     * 查询专用费
+     * 
+     * @param id 专用费主键
+     * @return 专用费
+     */
+    public KzksProjectChbZyf selectKzksProjectChbZyfById(String id);
+
+    /**
+     * 查询专用费列表
+     * 
+     * @param kzksProjectChbZyf 专用费
+     * @return 专用费集合
+     */
+    public List<KzksProjectChbZyf> selectKzksProjectChbZyfList(KzksProjectChbZyf kzksProjectChbZyf);
+
+    /**
+     * 新增专用费
+     * 
+     * @param kzksProjectChbZyf 专用费
+     * @return 结果
+     */
+    public int insertKzksProjectChbZyf(KzksProjectChbZyf kzksProjectChbZyf);
+
+    /**
+     * 修改专用费
+     * 
+     * @param kzksProjectChbZyf 专用费
+     * @return 结果
+     */
+    public int updateKzksProjectChbZyf(KzksProjectChbZyf kzksProjectChbZyf);
+
+    /**
+     * 批量删除专用费
+     * 
+     * @param ids 需要删除的专用费主键集合
+     * @return 结果
+     */
+    public int deleteKzksProjectChbZyfByIds(String[] ids);
+
+    /**
+     * 删除专用费信息
+     * 
+     * @param id 专用费主键
+     * @return 结果
+     */
+    public int deleteKzksProjectChbZyfById(String id);
+
+    /**
+     * 根据科研任务号获取专用费总和
+     *
+     * @param taskno 任务号
+     * @return 结果
+     */
+    BigDecimal selectZyfByTaskno(String taskno);
+}

+ 108 - 0
base/src/main/java/com/ruoyi/projectChbZyf/service/impl/KzksProjectChbZyfServiceImpl.java

@@ -0,0 +1,108 @@
+package com.ruoyi.projectChbZyf.service.impl;
+
+import java.math.BigDecimal;
+import java.util.List;
+import com.ruoyi.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.projectChbZyf.mapper.KzksProjectChbZyfMapper;
+import com.ruoyi.projectChbZyf.domain.KzksProjectChbZyf;
+import com.ruoyi.projectChbZyf.service.IKzksProjectChbZyfService;
+
+/**
+ * 专用费Service业务层处理
+ * 
+ * @author yanxun
+ * @date 2023-08-10
+ */
+@Service
+public class KzksProjectChbZyfServiceImpl implements IKzksProjectChbZyfService 
+{
+    @Autowired
+    private KzksProjectChbZyfMapper kzksProjectChbZyfMapper;
+
+    /**
+     * 查询专用费
+     * 
+     * @param id 专用费主键
+     * @return 专用费
+     */
+    @Override
+    public KzksProjectChbZyf selectKzksProjectChbZyfById(String id)
+    {
+        return kzksProjectChbZyfMapper.selectKzksProjectChbZyfById(id);
+    }
+
+    /**
+     * 查询专用费列表
+     * 
+     * @param kzksProjectChbZyf 专用费
+     * @return 专用费
+     */
+    @Override
+    public List<KzksProjectChbZyf> selectKzksProjectChbZyfList(KzksProjectChbZyf kzksProjectChbZyf)
+    {
+        return kzksProjectChbZyfMapper.selectKzksProjectChbZyfList(kzksProjectChbZyf);
+    }
+
+    /**
+     * 新增专用费
+     * 
+     * @param kzksProjectChbZyf 专用费
+     * @return 结果
+     */
+    @Override
+    public int insertKzksProjectChbZyf(KzksProjectChbZyf kzksProjectChbZyf)
+    {
+        kzksProjectChbZyf.setCreateTime(DateUtils.getNowDate());
+        return kzksProjectChbZyfMapper.insertKzksProjectChbZyf(kzksProjectChbZyf);
+    }
+
+    /**
+     * 修改专用费
+     * 
+     * @param kzksProjectChbZyf 专用费
+     * @return 结果
+     */
+    @Override
+    public int updateKzksProjectChbZyf(KzksProjectChbZyf kzksProjectChbZyf)
+    {
+        kzksProjectChbZyf.setUpdateTime(DateUtils.getNowDate());
+        return kzksProjectChbZyfMapper.updateKzksProjectChbZyf(kzksProjectChbZyf);
+    }
+
+    /**
+     * 批量删除专用费
+     * 
+     * @param ids 需要删除的专用费主键
+     * @return 结果
+     */
+    @Override
+    public int deleteKzksProjectChbZyfByIds(String[] ids)
+    {
+        return kzksProjectChbZyfMapper.deleteKzksProjectChbZyfByIds(ids);
+    }
+
+    /**
+     * 删除专用费信息
+     * 
+     * @param id 专用费主键
+     * @return 结果
+     */
+    @Override
+    public int deleteKzksProjectChbZyfById(String id)
+    {
+        return kzksProjectChbZyfMapper.deleteKzksProjectChbZyfById(id);
+    }
+
+    /**
+     * 根据科研任务号获取外协费总和
+     *
+     * @param taskno 任务号
+     * @return 结果
+     */
+    @Override
+    public BigDecimal selectZyfByTaskno(String taskno) {
+        return kzksProjectChbZyfMapper.selectZyfByTaskno(taskno);
+    }
+}

+ 104 - 0
base/src/main/java/com/ruoyi/projectCost/controller/ProjectCostController.java

@@ -0,0 +1,104 @@
+package com.ruoyi.projectCost.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.projectCost.domain.ProjectCost;
+import com.ruoyi.projectCost.service.IProjectCostService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * projectCostController
+ * 
+ * @author ruoyi
+ * @date 2023-08-14
+ */
+@RestController
+@RequestMapping("/projectCost/projectCost")
+public class ProjectCostController extends BaseController
+{
+    @Autowired
+    private IProjectCostService projectCostService;
+
+    /**
+     * 查询projectCost列表
+     */
+    @PreAuthorize("@ss.hasPermi('projectCost:projectCost:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(ProjectCost projectCost)
+    {
+        startPage();
+        List<ProjectCost> list = projectCostService.selectProjectCostList(projectCost);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出projectCost列表
+     */
+    @PreAuthorize("@ss.hasPermi('projectCost:projectCost:export')")
+    @Log(title = "projectCost", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, ProjectCost projectCost)
+    {
+        List<ProjectCost> list = projectCostService.selectProjectCostList(projectCost);
+        ExcelUtil<ProjectCost> util = new ExcelUtil<ProjectCost>(ProjectCost.class);
+        util.exportExcel(response, list, "projectCost数据");
+    }
+
+    /**
+     * 获取projectCost详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('projectCost:projectCost:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(projectCostService.selectProjectCostById(id));
+    }
+
+    /**
+     * 新增projectCost
+     */
+    @PreAuthorize("@ss.hasPermi('projectCost:projectCost:add')")
+    @Log(title = "projectCost", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody ProjectCost projectCost)
+    {
+        return toAjax(projectCostService.insertProjectCost(projectCost));
+    }
+
+    /**
+     * 修改projectCost
+     */
+    @PreAuthorize("@ss.hasPermi('projectCost:projectCost:edit')")
+    @Log(title = "projectCost", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody ProjectCost projectCost)
+    {
+        return toAjax(projectCostService.updateProjectCost(projectCost));
+    }
+
+    /**
+     * 删除projectCost
+     */
+    @PreAuthorize("@ss.hasPermi('projectCost:projectCost:remove')")
+    @Log(title = "projectCost", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(projectCostService.deleteProjectCostByIds(ids));
+    }
+}

+ 655 - 0
base/src/main/java/com/ruoyi/projectCost/domain/ProjectCost.java

@@ -0,0 +1,655 @@
+package com.ruoyi.projectCost.domain;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * projectCost对象 project_cost
+ * 
+ * @author ruoyi
+ * @date 2023-08-14
+ */
+public class ProjectCost extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 主键 */
+    private Long id;
+
+    /** 任务号/来自科研任务 */
+    @Excel(name = "任务号/来自科研任务")
+    private String taskno;
+
+    /** 任务名称/来自科研任务 */
+    @Excel(name = "任务名称/来自科研任务")
+    private String taskname;
+
+    /** 型号/来自科研报工 */
+    @Excel(name = "型号/来自科研报工")
+    private String xhname;
+
+    /** 计划完成时间(进度要求)来自科研任务 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "计划完成时间(进度要求)来自科研任务", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date jhwcsj;
+
+    /** 阶段/来自科研报工 */
+    @Excel(name = "阶段/来自科研报工")
+    private String yzjdname;
+
+    /** 项目进度/来自科研任务 */
+    @Excel(name = "项目进度/来自科研任务")
+    private BigDecimal processPercent;
+
+    /** 成本进度 */
+    @Excel(name = "成本进度")
+    private BigDecimal costPercent;
+
+    /** 研制数量/来自科研任务 */
+    private Long yzsl;
+
+    /** 单台收入/(合同额or预估价)/研制数量 */
+    @Excel(name = "单台收入/", readConverterExp = "合=同额or预估价")
+    private BigDecimal oneIncome;
+
+    /** 单台成本/  总成本额/研制数量 */
+    @Excel(name = "单台成本/  总成本额/研制数量")
+    private BigDecimal oneCost;
+
+    /** 单台利润/  利润额/研制数量 */
+    @Excel(name = "单台利润/  利润额/研制数量")
+    private BigDecimal oneProfit;
+
+    /** 利润额/(合同额or预估价)-总成本额 */
+    @Excel(name = "利润额/", readConverterExp = "合=同额or预估价")
+    private BigDecimal lre;
+
+    /** 利润率/ 利润额/(合同额or预估价)*100% */
+    @Excel(name = "利润率/ 利润额/", readConverterExp = "合=同额or预估价")
+    private BigDecimal lrl;
+
+    /** 预估价/来自财务预算 */
+    @Excel(name = "预估价/来自财务预算")
+    private BigDecimal EstimationCoat;
+
+    /** 合同额/来自收款合同的合同分配额  */
+    @Excel(name = "合同额/来自收款合同的合同分配额 ")
+    private BigDecimal contractfpe;
+
+    /** 已收款/ 来自合同收款详细的任务收款额 */
+    @Excel(name = "已收款/ 来自合同收款详细的任务收款额")
+    private BigDecimal TaskMoney;
+
+    /** 总成本/ 直接成本+间接费用/直接成本=材料费(出库)+外协费+专用费+事务费/间接费用=工资费+管理费+燃动费+固资费 */
+    @Excel(name = "总成本/ 直接成本+间接费用/直接成本=材料费", readConverterExp = "出=库")
+    private BigDecimal zcb;
+
+    /** 材料费/物资出库单明细 实发主数量*采购单价 */
+    @Excel(name = "材料费/物资出库单明细 实发主数量*采购单价")
+    private BigDecimal clf;
+
+    /** 专用费 */
+    @Excel(name = "专用费")
+    private BigDecimal zyf;
+
+    /** 事务费 */
+    @Excel(name = "事务费")
+    private BigDecimal swf;
+
+    /** 外协费 */
+    @Excel(name = "外协费")
+    private BigDecimal wxf;
+
+    /** 燃料动力费/(材料费+外协费+事务费+专用费)×1.5% */
+    @Excel(name = "燃料动力费/", readConverterExp = "材=料费+外协费+事务费+专用费")
+    private BigDecimal rldlf;
+
+    /** 固定资产折旧/(材料费+外协费+事务费+专用费)×2.5% */
+    @Excel(name = "固定资产折旧/", readConverterExp = "材=料费+外协费+事务费+专用费")
+    private BigDecimal gdzczj;
+
+    /** 工资及劳务费/(材料费+外协费+事务费+专用费)×17% */
+    @Excel(name = "工资及劳务费/", readConverterExp = "材=料费+外协费+事务费+专用费")
+    private BigDecimal gzjlwf;
+
+    /** 管理费/(材料费+外协费+事务费+专用费)×5% */
+    @Excel(name = "管理费/", readConverterExp = "材=料费+外协费+事务费+专用费")
+    private BigDecimal glf;
+
+    /** 装机成本/ mes装机信息卡的采购单价*数量 */
+    @Excel(name = "装机成本/ mes装机信息卡的采购单价*数量")
+    private BigDecimal zjcb;
+
+    /** 内部试验 */
+    @Excel(name = "内部试验")
+    private BigDecimal lbsy;
+
+    /** 工时(h)/来自科研报工,每次科研报工累加计时 */
+    @Excel(name = "工时(h)/来自科研报工,每次科研报工累加计时")
+    private BigDecimal workhour;
+
+    /** 责任部门/来自科研任务 */
+    @Excel(name = "责任部门/来自科研任务")
+    private String zrbm;
+
+    /** 下达部门id/来自科研任务 */
+    @Excel(name = "下达部门id/来自科研任务")
+    private Long jycsid;
+
+    /** 下达部门/来自科研任务 */
+    @Excel(name = "下达部门/来自科研任务")
+    private String jycs;
+
+    /** 1:横向 2:纵向/来自科研任务 */
+    @Excel(name = "1:横向 2:纵向/来自科研任务")
+    private Long hxzxid;
+
+    /** 横向纵向/来自科研任务 */
+    @Excel(name = "横向纵向/来自科研任务")
+    private String hxzxname;
+
+    /** 任务类型/来自科研任务 */
+    @Excel(name = "任务类型/来自科研任务")
+    private String tasktype;
+
+    /** 审计审价/来自科研任务 */
+    @Excel(name = "审计审价/来自科研任务")
+    private String AuditPrice;
+
+    /** 任务状态/来自科研任务 */
+    @Excel(name = "任务状态/来自科研任务")
+    private String iflag;
+
+    /** 提出单位简称/来自科研任务 */
+    @Excel(name = "提出单位简称/来自科研任务")
+    private String Brief;
+
+    /** 父级任务/来自科研任务 */
+    @Excel(name = "父级任务/来自科研任务")
+    private Long RefTaskNo;
+
+    /** 批产任务号/来自科研任务 */
+    @Excel(name = "批产任务号/来自科研任务")
+    private Long pcCode;
+
+    /** 备产任务号/来自科研任务 */
+    @Excel(name = "备产任务号/来自科研任务")
+    private Long bcCode;
+
+    /** 备料任务号/来自科研任务 */
+    @Excel(name = "备料任务号/来自科研任务")
+    private Long blCode;
+
+    /** 业务员/来自科研任务 */
+    @Excel(name = "业务员/来自科研任务")
+    private String BusinessMan;
+
+    /** 设计工时 */
+    @Excel(name = "设计工时")
+    private BigDecimal sjgs;
+
+    /** 生产工时 */
+    @Excel(name = "生产工时")
+    private BigDecimal scgs;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setTaskno(String taskno) 
+    {
+        this.taskno = taskno;
+    }
+
+    public String getTaskno() 
+    {
+        return taskno;
+    }
+    public void setTaskname(String taskname) 
+    {
+        this.taskname = taskname;
+    }
+
+    public String getTaskname() 
+    {
+        return taskname;
+    }
+    public void setXhname(String xhname) 
+    {
+        this.xhname = xhname;
+    }
+
+    public String getXhname() 
+    {
+        return xhname;
+    }
+    public void setJhwcsj(Date jhwcsj) 
+    {
+        this.jhwcsj = jhwcsj;
+    }
+
+    public Date getJhwcsj() 
+    {
+        return jhwcsj;
+    }
+    public void setYzjdname(String yzjdname) 
+    {
+        this.yzjdname = yzjdname;
+    }
+
+    public String getYzjdname() 
+    {
+        return yzjdname;
+    }
+
+    public BigDecimal getProcessPercent() {
+        return processPercent;
+    }
+
+    public void setProcessPercent(BigDecimal processPercent) {
+        this.processPercent = processPercent;
+    }
+
+    public BigDecimal getCostPercent() {
+        return costPercent;
+    }
+
+    public void setCostPercent(BigDecimal costPercent) {
+        this.costPercent = costPercent;
+    }
+
+    public void setYzsl(Long yzsl)
+    {
+        this.yzsl = yzsl;
+    }
+
+    public Long getYzsl() 
+    {
+        return yzsl;
+    }
+    public void setOneIncome(BigDecimal oneIncome) 
+    {
+        this.oneIncome = oneIncome;
+    }
+
+    public BigDecimal getOneIncome() 
+    {
+        return oneIncome;
+    }
+    public void setOneCost(BigDecimal oneCost) 
+    {
+        this.oneCost = oneCost;
+    }
+
+    public BigDecimal getOneCost() 
+    {
+        return oneCost;
+    }
+    public void setOneProfit(BigDecimal oneProfit) 
+    {
+        this.oneProfit = oneProfit;
+    }
+
+    public BigDecimal getOneProfit() 
+    {
+        return oneProfit;
+    }
+    public void setLre(BigDecimal lre) 
+    {
+        this.lre = lre;
+    }
+
+    public BigDecimal getLre() 
+    {
+        return lre;
+    }
+    public void setLrl(BigDecimal lrl) 
+    {
+        this.lrl = lrl;
+    }
+
+    public BigDecimal getLrl() 
+    {
+        return lrl;
+    }
+    public void setEstimationCoat(BigDecimal EstimationCoat) 
+    {
+        this.EstimationCoat = EstimationCoat;
+    }
+
+    public BigDecimal getEstimationCoat() 
+    {
+        return EstimationCoat;
+    }
+    public void setContractfpe(BigDecimal contractfpe) 
+    {
+        this.contractfpe = contractfpe;
+    }
+
+    public BigDecimal getContractfpe() 
+    {
+        return contractfpe;
+    }
+    public void setTaskMoney(BigDecimal TaskMoney) 
+    {
+        this.TaskMoney = TaskMoney;
+    }
+
+    public BigDecimal getTaskMoney() 
+    {
+        return TaskMoney;
+    }
+    public void setZcb(BigDecimal zcb) 
+    {
+        this.zcb = zcb;
+    }
+
+    public BigDecimal getZcb() 
+    {
+        return zcb;
+    }
+    public void setClf(BigDecimal clf) 
+    {
+        this.clf = clf;
+    }
+
+    public BigDecimal getClf() 
+    {
+        return clf;
+    }
+    public void setZyf(BigDecimal zyf) 
+    {
+        this.zyf = zyf;
+    }
+
+    public BigDecimal getZyf() 
+    {
+        return zyf;
+    }
+    public void setSwf(BigDecimal swf) 
+    {
+        this.swf = swf;
+    }
+
+    public BigDecimal getSwf() 
+    {
+        return swf;
+    }
+    public void setWxf(BigDecimal wxf) 
+    {
+        this.wxf = wxf;
+    }
+
+    public BigDecimal getWxf() 
+    {
+        return wxf;
+    }
+    public void setRldlf(BigDecimal rldlf) 
+    {
+        this.rldlf = rldlf;
+    }
+
+    public BigDecimal getRldlf() 
+    {
+        return rldlf;
+    }
+    public void setGdzczj(BigDecimal gdzczj) 
+    {
+        this.gdzczj = gdzczj;
+    }
+
+    public BigDecimal getGdzczj() 
+    {
+        return gdzczj;
+    }
+    public void setGzjlwf(BigDecimal gzjlwf) 
+    {
+        this.gzjlwf = gzjlwf;
+    }
+
+    public BigDecimal getGzjlwf() 
+    {
+        return gzjlwf;
+    }
+    public void setGlf(BigDecimal glf) 
+    {
+        this.glf = glf;
+    }
+
+    public BigDecimal getGlf() 
+    {
+        return glf;
+    }
+    public void setZjcb(BigDecimal zjcb) 
+    {
+        this.zjcb = zjcb;
+    }
+
+    public BigDecimal getZjcb() 
+    {
+        return zjcb;
+    }
+    public void setLbsy(BigDecimal lbsy) 
+    {
+        this.lbsy = lbsy;
+    }
+
+    public BigDecimal getLbsy() 
+    {
+        return lbsy;
+    }
+    public void setWorkhour(BigDecimal workhour) 
+    {
+        this.workhour = workhour;
+    }
+
+    public BigDecimal getWorkhour() 
+    {
+        return workhour;
+    }
+    public void setZrbm(String zrbm) 
+    {
+        this.zrbm = zrbm;
+    }
+
+    public String getZrbm() 
+    {
+        return zrbm;
+    }
+    public void setJycsid(Long jycsid) 
+    {
+        this.jycsid = jycsid;
+    }
+
+    public Long getJycsid() 
+    {
+        return jycsid;
+    }
+    public void setJycs(String jycs) 
+    {
+        this.jycs = jycs;
+    }
+
+    public String getJycs() 
+    {
+        return jycs;
+    }
+    public void setHxzxid(Long hxzxid) 
+    {
+        this.hxzxid = hxzxid;
+    }
+
+    public Long getHxzxid() 
+    {
+        return hxzxid;
+    }
+    public void setHxzxname(String hxzxname) 
+    {
+        this.hxzxname = hxzxname;
+    }
+
+    public String getHxzxname() 
+    {
+        return hxzxname;
+    }
+    public void setTasktype(String tasktype) 
+    {
+        this.tasktype = tasktype;
+    }
+
+    public String getTasktype() 
+    {
+        return tasktype;
+    }
+    public void setAuditPrice(String AuditPrice) 
+    {
+        this.AuditPrice = AuditPrice;
+    }
+
+    public String getAuditPrice() 
+    {
+        return AuditPrice;
+    }
+    public void setIflag(String iflag) 
+    {
+        this.iflag = iflag;
+    }
+
+    public String getIflag() 
+    {
+        return iflag;
+    }
+    public void setBrief(String Brief) 
+    {
+        this.Brief = Brief;
+    }
+
+    public String getBrief() 
+    {
+        return Brief;
+    }
+    public void setRefTaskNo(Long RefTaskNo) 
+    {
+        this.RefTaskNo = RefTaskNo;
+    }
+
+    public Long getRefTaskNo() 
+    {
+        return RefTaskNo;
+    }
+    public void setPcCode(Long pcCode) 
+    {
+        this.pcCode = pcCode;
+    }
+
+    public Long getPcCode() 
+    {
+        return pcCode;
+    }
+    public void setBcCode(Long bcCode) 
+    {
+        this.bcCode = bcCode;
+    }
+
+    public Long getBcCode() 
+    {
+        return bcCode;
+    }
+    public void setBlCode(Long blCode) 
+    {
+        this.blCode = blCode;
+    }
+
+    public Long getBlCode() 
+    {
+        return blCode;
+    }
+    public void setBusinessMan(String BusinessMan) 
+    {
+        this.BusinessMan = BusinessMan;
+    }
+
+    public String getBusinessMan() 
+    {
+        return BusinessMan;
+    }
+    public void setSjgs(BigDecimal sjgs) 
+    {
+        this.sjgs = sjgs;
+    }
+
+    public BigDecimal getSjgs() 
+    {
+        return sjgs;
+    }
+    public void setScgs(BigDecimal scgs) 
+    {
+        this.scgs = scgs;
+    }
+
+    public BigDecimal getScgs() 
+    {
+        return scgs;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("taskno", getTaskno())
+            .append("taskname", getTaskname())
+            .append("xhname", getXhname())
+            .append("jhwcsj", getJhwcsj())
+            .append("yzjdname", getYzjdname())
+            .append("processPercent", getProcessPercent())
+            .append("costPercent", getCostPercent())
+            .append("yzsl", getYzsl())
+            .append("oneIncome", getOneIncome())
+            .append("oneCost", getOneCost())
+            .append("oneProfit", getOneProfit())
+            .append("lre", getLre())
+            .append("lrl", getLrl())
+            .append("EstimationCoat", getEstimationCoat())
+            .append("contractfpe", getContractfpe())
+            .append("TaskMoney", getTaskMoney())
+            .append("zcb", getZcb())
+            .append("clf", getClf())
+            .append("zyf", getZyf())
+            .append("swf", getSwf())
+            .append("wxf", getWxf())
+            .append("rldlf", getRldlf())
+            .append("gdzczj", getGdzczj())
+            .append("gzjlwf", getGzjlwf())
+            .append("glf", getGlf())
+            .append("zjcb", getZjcb())
+            .append("lbsy", getLbsy())
+            .append("workhour", getWorkhour())
+            .append("zrbm", getZrbm())
+            .append("jycsid", getJycsid())
+            .append("jycs", getJycs())
+            .append("hxzxid", getHxzxid())
+            .append("hxzxname", getHxzxname())
+            .append("tasktype", getTasktype())
+            .append("AuditPrice", getAuditPrice())
+            .append("iflag", getIflag())
+            .append("Brief", getBrief())
+            .append("RefTaskNo", getRefTaskNo())
+            .append("pcCode", getPcCode())
+            .append("bcCode", getBcCode())
+            .append("blCode", getBlCode())
+            .append("BusinessMan", getBusinessMan())
+            .append("sjgs", getSjgs())
+            .append("scgs", getScgs())
+            .toString();
+    }
+}

+ 69 - 0
base/src/main/java/com/ruoyi/projectCost/mapper/ProjectCostMapper.java

@@ -0,0 +1,69 @@
+package com.ruoyi.projectCost.mapper;
+
+import java.util.List;
+import com.ruoyi.projectCost.domain.ProjectCost;
+
+/**
+ * projectCostMapper接口
+ * 
+ * @author ruoyi
+ * @date 2023-08-14
+ */
+public interface ProjectCostMapper 
+{
+    /**
+     * 查询projectCost
+     * 
+     * @param id projectCost主键
+     * @return projectCost
+     */
+    public ProjectCost selectProjectCostById(Long id);
+
+    /**
+     * 查询projectCost列表
+     * 
+     * @param projectCost projectCost
+     * @return projectCost集合
+     */
+    public List<ProjectCost> selectProjectCostList(ProjectCost projectCost);
+
+    /**
+     * 新增projectCost
+     * 
+     * @param projectCost projectCost
+     * @return 结果
+     */
+    public int insertProjectCost(ProjectCost projectCost);
+
+    /**
+     * 修改projectCost
+     * 
+     * @param projectCost projectCost
+     * @return 结果
+     */
+    public int updateProjectCost(ProjectCost projectCost);
+
+    /**
+     * 删除projectCost
+     * 
+     * @param id projectCost主键
+     * @return 结果
+     */
+    public int deleteProjectCostById(Long id);
+
+    /**
+     * 批量删除projectCost
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteProjectCostByIds(Long[] ids);
+
+    /**
+     * 批量新增projectCost
+     *
+     * @param projectCosts projectCosts
+     * @return 结果
+     */
+    boolean insertBatchProjectCost(List<ProjectCost> projectCosts);
+}

+ 69 - 0
base/src/main/java/com/ruoyi/projectCost/service/IProjectCostService.java

@@ -0,0 +1,69 @@
+package com.ruoyi.projectCost.service;
+
+import java.util.List;
+import com.ruoyi.projectCost.domain.ProjectCost;
+
+/**
+ * projectCostService接口
+ * 
+ * @author ruoyi
+ * @date 2023-08-14
+ */
+public interface IProjectCostService 
+{
+    /**
+     * 查询projectCost
+     * 
+     * @param id projectCost主键
+     * @return projectCost
+     */
+    public ProjectCost selectProjectCostById(Long id);
+
+    /**
+     * 查询projectCost列表
+     * 
+     * @param projectCost projectCost
+     * @return projectCost集合
+     */
+    public List<ProjectCost> selectProjectCostList(ProjectCost projectCost);
+
+    /**
+     * 新增projectCost
+     * 
+     * @param projectCost projectCost
+     * @return 结果
+     */
+    public int insertProjectCost(ProjectCost projectCost);
+
+    /**
+     * 修改projectCost
+     * 
+     * @param projectCost projectCost
+     * @return 结果
+     */
+    public int updateProjectCost(ProjectCost projectCost);
+
+    /**
+     * 批量删除projectCost
+     * 
+     * @param ids 需要删除的projectCost主键集合
+     * @return 结果
+     */
+    public int deleteProjectCostByIds(Long[] ids);
+
+    /**
+     * 删除projectCost信息
+     * 
+     * @param id projectCost主键
+     * @return 结果
+     */
+    public int deleteProjectCostById(Long id);
+
+    /**
+     * 批量新增projectCost
+     *
+     * @param projectCosts projectCosts
+     * @return 结果
+     */
+    boolean insertBatchProjectCost(List<ProjectCost> projectCosts);
+}

+ 98 - 0
base/src/main/java/com/ruoyi/projectCost/service/impl/ProjectCostServiceImpl.java

@@ -0,0 +1,98 @@
+package com.ruoyi.projectCost.service.impl;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.projectCost.mapper.ProjectCostMapper;
+import com.ruoyi.projectCost.domain.ProjectCost;
+import com.ruoyi.projectCost.service.IProjectCostService;
+
+/**
+ * projectCostService业务层处理
+ *
+ * @author ruoyi
+ * @date 2023-08-14
+ */
+@Service
+public class ProjectCostServiceImpl implements IProjectCostService {
+    @Autowired
+    private ProjectCostMapper projectCostMapper;
+
+    /**
+     * 查询projectCost
+     *
+     * @param id projectCost主键
+     * @return projectCost
+     */
+    @Override
+    public ProjectCost selectProjectCostById(Long id) {
+        return projectCostMapper.selectProjectCostById(id);
+    }
+
+    /**
+     * 查询projectCost列表
+     *
+     * @param projectCost projectCost
+     * @return projectCost
+     */
+    @Override
+    public List<ProjectCost> selectProjectCostList(ProjectCost projectCost) {
+        return projectCostMapper.selectProjectCostList(projectCost);
+    }
+
+    /**
+     * 新增projectCost
+     *
+     * @param projectCost projectCost
+     * @return 结果
+     */
+    @Override
+    public int insertProjectCost(ProjectCost projectCost) {
+        return projectCostMapper.insertProjectCost(projectCost);
+    }
+
+    /**
+     * 修改projectCost
+     *
+     * @param projectCost projectCost
+     * @return 结果
+     */
+    @Override
+    public int updateProjectCost(ProjectCost projectCost) {
+        return projectCostMapper.updateProjectCost(projectCost);
+    }
+
+    /**
+     * 批量删除projectCost
+     *
+     * @param ids 需要删除的projectCost主键
+     * @return 结果
+     */
+    @Override
+    public int deleteProjectCostByIds(Long[] ids) {
+        return projectCostMapper.deleteProjectCostByIds(ids);
+    }
+
+    /**
+     * 删除projectCost信息
+     *
+     * @param id projectCost主键
+     * @return 结果
+     */
+    @Override
+    public int deleteProjectCostById(Long id) {
+        return projectCostMapper.deleteProjectCostById(id);
+    }
+
+    /**
+     * 批量新增projectCost
+     *
+     * @param projectCosts projectCosts
+     * @return 结果
+     */
+    @Override
+    public boolean insertBatchProjectCost(List<ProjectCost> projectCosts) {
+        return projectCostMapper.insertBatchProjectCost(projectCosts);
+    }
+}

+ 612 - 0
base/src/main/java/com/ruoyi/wzCk/ckDetail/domain/WzOutboundOrderB.java

@@ -0,0 +1,612 @@
+package com.ruoyi.wzCk.ckDetail.domain;
+
+import java.math.BigDecimal;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 物资出库明细_基础数据对象 wz_outbound_order_b
+ * 
+ * @author ruoyi
+ * @date 2023-08-10
+ */
+public class WzOutboundOrderB extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** $column.columnComment */
+    private Long id;
+
+    /** 物料编码 */
+    @Excel(name = "物料编码")
+    private String wlbm;
+
+    /** 物料名称 */
+    @Excel(name = "物料名称")
+    private String wlmc;
+
+    /** 规格型号 */
+    @Excel(name = "规格型号")
+    private String ggxh;
+
+    /** 牌号 */
+    @Excel(name = "牌号")
+    private String ph;
+
+    /** 详细技术规范 */
+    @Excel(name = "详细技术规范")
+    private String xxjsgf;
+
+    /** 技术标准 */
+    @Excel(name = "技术标准")
+    private String jsbz;
+
+    /** 质量等级 */
+    @Excel(name = "质量等级")
+    private String zldj;
+
+    /** 封装形式 */
+    @Excel(name = "封装形式")
+    private String fzxs;
+
+    /** 生产厂家 */
+    @Excel(name = "生产厂家")
+    private String sccj;
+
+    /** 国产进口 */
+    @Excel(name = "国产进口")
+    private String gcjk;
+
+    /** 采购单价 */
+    @Excel(name = "采购单价")
+    private BigDecimal cgdj;
+
+    /** 内部单价 */
+    @Excel(name = "内部单价")
+    private BigDecimal nbdj;
+
+    /** 备料计划单据号 */
+    @Excel(name = "备料计划单据号")
+    private String bljhdjh;
+
+    /** 行号 */
+    @Excel(name = "行号")
+    private String hh;
+
+    /** 出库日期 */
+    @Excel(name = "出库日期")
+    private String ckrq;
+
+    /** 实发主数量 */
+    @Excel(name = "实发主数量")
+    private BigDecimal sfzsl;
+
+    /** 应发主数量 */
+    @Excel(name = "应发主数量")
+    private BigDecimal yfzsl;
+
+    /** 入库批次号 */
+    @Excel(name = "入库批次号")
+    private String rkpch;
+
+    /** 型号规格技术指标 */
+    @Excel(name = "型号规格技术指标")
+    private String xhgljszb;
+
+    /** 工序单号 */
+    @Excel(name = "工序单号")
+    private String gxdh;
+
+    /** DPA号 */
+    @Excel(name = "DPA号")
+    private String dpah;
+
+    /** 合格证上传情况 */
+    @Excel(name = "合格证上传情况")
+    private String hgzscqk;
+
+    /** 质保有效期 */
+    @Excel(name = "质保有效期")
+    private String zbyxq;
+
+    /** 外观标识 */
+    @Excel(name = "外观标识")
+    private String wgbs;
+
+    /** 供应商批次号 */
+    @Excel(name = "供应商批次号")
+    private String gyspch;
+
+    /** 库位号 */
+    @Excel(name = "库位号")
+    private String kwh;
+
+    /** 质保单位 */
+    @Excel(name = "质保单位")
+    private String zbdw;
+
+    /** 质保依据 */
+    @Excel(name = "质保依据")
+    private String zbyj;
+
+    /** 任务号 */
+    @Excel(name = "任务号")
+    private String rwh;
+
+    /** 元器件分类 */
+    @Excel(name = "元器件分类")
+    private String yqjfl;
+
+    /** 出库备注 */
+    @Excel(name = "出库备注")
+    private String ckbz;
+
+    /** 出库单表头主键 */
+    @Excel(name = "出库单表头主键")
+    private String ckdbtzj;
+
+    /** 出库单表体主键 */
+    @Excel(name = "出库单表体主键")
+    private String ckdbtizj;
+
+    /** 来源单据号 */
+    @Excel(name = "来源单据号")
+    private String lydjh;
+
+    /** 来源单类型编码 */
+    @Excel(name = "来源单类型编码")
+    private String lydlxbm;
+
+    /** 来源交易类型主键 */
+    @Excel(name = "来源交易类型主键")
+    private String lyjylxzj;
+
+    /** 件数 */
+    @Excel(name = "件数")
+    private String js;
+
+    /** 条码 */
+    @Excel(name = "条码")
+    private String tm;
+
+    /** 出库单号 */
+    @Excel(name = "出库单号")
+    private String ckdh;
+
+    /** 复验单位 */
+    @Excel(name = "复验单位")
+    private String fydw;
+
+    /** 最新时间戳 */
+    @Excel(name = "最新时间戳")
+    private String zxsjc;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setWlbm(String wlbm) 
+    {
+        this.wlbm = wlbm;
+    }
+
+    public String getWlbm() 
+    {
+        return wlbm;
+    }
+    public void setWlmc(String wlmc) 
+    {
+        this.wlmc = wlmc;
+    }
+
+    public String getWlmc() 
+    {
+        return wlmc;
+    }
+    public void setGgxh(String ggxh) 
+    {
+        this.ggxh = ggxh;
+    }
+
+    public String getGgxh() 
+    {
+        return ggxh;
+    }
+    public void setPh(String ph) 
+    {
+        this.ph = ph;
+    }
+
+    public String getPh() 
+    {
+        return ph;
+    }
+    public void setXxjsgf(String xxjsgf) 
+    {
+        this.xxjsgf = xxjsgf;
+    }
+
+    public String getXxjsgf() 
+    {
+        return xxjsgf;
+    }
+    public void setJsbz(String jsbz) 
+    {
+        this.jsbz = jsbz;
+    }
+
+    public String getJsbz() 
+    {
+        return jsbz;
+    }
+    public void setZldj(String zldj) 
+    {
+        this.zldj = zldj;
+    }
+
+    public String getZldj() 
+    {
+        return zldj;
+    }
+    public void setFzxs(String fzxs) 
+    {
+        this.fzxs = fzxs;
+    }
+
+    public String getFzxs() 
+    {
+        return fzxs;
+    }
+    public void setSccj(String sccj) 
+    {
+        this.sccj = sccj;
+    }
+
+    public String getSccj() 
+    {
+        return sccj;
+    }
+    public void setGcjk(String gcjk) 
+    {
+        this.gcjk = gcjk;
+    }
+
+    public String getGcjk() 
+    {
+        return gcjk;
+    }
+    public void setCgdj(BigDecimal cgdj) 
+    {
+        this.cgdj = cgdj;
+    }
+
+    public BigDecimal getCgdj() 
+    {
+        return cgdj;
+    }
+    public void setNbdj(BigDecimal nbdj) 
+    {
+        this.nbdj = nbdj;
+    }
+
+    public BigDecimal getNbdj() 
+    {
+        return nbdj;
+    }
+    public void setBljhdjh(String bljhdjh) 
+    {
+        this.bljhdjh = bljhdjh;
+    }
+
+    public String getBljhdjh() 
+    {
+        return bljhdjh;
+    }
+    public void setHh(String hh) 
+    {
+        this.hh = hh;
+    }
+
+    public String getHh() 
+    {
+        return hh;
+    }
+    public void setCkrq(String ckrq) 
+    {
+        this.ckrq = ckrq;
+    }
+
+    public String getCkrq() 
+    {
+        return ckrq;
+    }
+    public void setSfzsl(BigDecimal sfzsl) 
+    {
+        this.sfzsl = sfzsl;
+    }
+
+    public BigDecimal getSfzsl() 
+    {
+        return sfzsl;
+    }
+    public void setYfzsl(BigDecimal yfzsl) 
+    {
+        this.yfzsl = yfzsl;
+    }
+
+    public BigDecimal getYfzsl() 
+    {
+        return yfzsl;
+    }
+    public void setRkpch(String rkpch) 
+    {
+        this.rkpch = rkpch;
+    }
+
+    public String getRkpch() 
+    {
+        return rkpch;
+    }
+    public void setXhgljszb(String xhgljszb) 
+    {
+        this.xhgljszb = xhgljszb;
+    }
+
+    public String getXhgljszb() 
+    {
+        return xhgljszb;
+    }
+    public void setGxdh(String gxdh) 
+    {
+        this.gxdh = gxdh;
+    }
+
+    public String getGxdh() 
+    {
+        return gxdh;
+    }
+    public void setDpah(String dpah) 
+    {
+        this.dpah = dpah;
+    }
+
+    public String getDpah() 
+    {
+        return dpah;
+    }
+    public void setHgzscqk(String hgzscqk) 
+    {
+        this.hgzscqk = hgzscqk;
+    }
+
+    public String getHgzscqk() 
+    {
+        return hgzscqk;
+    }
+    public void setZbyxq(String zbyxq) 
+    {
+        this.zbyxq = zbyxq;
+    }
+
+    public String getZbyxq() 
+    {
+        return zbyxq;
+    }
+    public void setWgbs(String wgbs) 
+    {
+        this.wgbs = wgbs;
+    }
+
+    public String getWgbs() 
+    {
+        return wgbs;
+    }
+    public void setGyspch(String gyspch) 
+    {
+        this.gyspch = gyspch;
+    }
+
+    public String getGyspch() 
+    {
+        return gyspch;
+    }
+    public void setKwh(String kwh) 
+    {
+        this.kwh = kwh;
+    }
+
+    public String getKwh() 
+    {
+        return kwh;
+    }
+    public void setZbdw(String zbdw) 
+    {
+        this.zbdw = zbdw;
+    }
+
+    public String getZbdw() 
+    {
+        return zbdw;
+    }
+    public void setZbyj(String zbyj) 
+    {
+        this.zbyj = zbyj;
+    }
+
+    public String getZbyj() 
+    {
+        return zbyj;
+    }
+    public void setRwh(String rwh) 
+    {
+        this.rwh = rwh;
+    }
+
+    public String getRwh() 
+    {
+        return rwh;
+    }
+    public void setYqjfl(String yqjfl) 
+    {
+        this.yqjfl = yqjfl;
+    }
+
+    public String getYqjfl() 
+    {
+        return yqjfl;
+    }
+    public void setCkbz(String ckbz) 
+    {
+        this.ckbz = ckbz;
+    }
+
+    public String getCkbz() 
+    {
+        return ckbz;
+    }
+    public void setCkdbtzj(String ckdbtzj) 
+    {
+        this.ckdbtzj = ckdbtzj;
+    }
+
+    public String getCkdbtzj() 
+    {
+        return ckdbtzj;
+    }
+    public void setCkdbtizj(String ckdbtizj) 
+    {
+        this.ckdbtizj = ckdbtizj;
+    }
+
+    public String getCkdbtizj() 
+    {
+        return ckdbtizj;
+    }
+    public void setLydjh(String lydjh) 
+    {
+        this.lydjh = lydjh;
+    }
+
+    public String getLydjh() 
+    {
+        return lydjh;
+    }
+    public void setLydlxbm(String lydlxbm) 
+    {
+        this.lydlxbm = lydlxbm;
+    }
+
+    public String getLydlxbm() 
+    {
+        return lydlxbm;
+    }
+    public void setLyjylxzj(String lyjylxzj) 
+    {
+        this.lyjylxzj = lyjylxzj;
+    }
+
+    public String getLyjylxzj() 
+    {
+        return lyjylxzj;
+    }
+    public void setJs(String js) 
+    {
+        this.js = js;
+    }
+
+    public String getJs() 
+    {
+        return js;
+    }
+    public void setTm(String tm) 
+    {
+        this.tm = tm;
+    }
+
+    public String getTm() 
+    {
+        return tm;
+    }
+    public void setCkdh(String ckdh) 
+    {
+        this.ckdh = ckdh;
+    }
+
+    public String getCkdh() 
+    {
+        return ckdh;
+    }
+    public void setFydw(String fydw) 
+    {
+        this.fydw = fydw;
+    }
+
+    public String getFydw() 
+    {
+        return fydw;
+    }
+    public void setZxsjc(String zxsjc) 
+    {
+        this.zxsjc = zxsjc;
+    }
+
+    public String getZxsjc() 
+    {
+        return zxsjc;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("wlbm", getWlbm())
+            .append("wlmc", getWlmc())
+            .append("ggxh", getGgxh())
+            .append("ph", getPh())
+            .append("xxjsgf", getXxjsgf())
+            .append("jsbz", getJsbz())
+            .append("zldj", getZldj())
+            .append("fzxs", getFzxs())
+            .append("sccj", getSccj())
+            .append("gcjk", getGcjk())
+            .append("cgdj", getCgdj())
+            .append("nbdj", getNbdj())
+            .append("bljhdjh", getBljhdjh())
+            .append("hh", getHh())
+            .append("ckrq", getCkrq())
+            .append("sfzsl", getSfzsl())
+            .append("yfzsl", getYfzsl())
+            .append("rkpch", getRkpch())
+            .append("xhgljszb", getXhgljszb())
+            .append("gxdh", getGxdh())
+            .append("dpah", getDpah())
+            .append("hgzscqk", getHgzscqk())
+            .append("zbyxq", getZbyxq())
+            .append("wgbs", getWgbs())
+            .append("gyspch", getGyspch())
+            .append("kwh", getKwh())
+            .append("zbdw", getZbdw())
+            .append("zbyj", getZbyj())
+            .append("rwh", getRwh())
+            .append("yqjfl", getYqjfl())
+            .append("ckbz", getCkbz())
+            .append("ckdbtzj", getCkdbtzj())
+            .append("ckdbtizj", getCkdbtizj())
+            .append("lydjh", getLydjh())
+            .append("lydlxbm", getLydlxbm())
+            .append("lyjylxzj", getLyjylxzj())
+            .append("js", getJs())
+            .append("tm", getTm())
+            .append("ckdh", getCkdh())
+            .append("fydw", getFydw())
+            .append("zxsjc", getZxsjc())
+            .toString();
+    }
+}

+ 89 - 0
base/src/main/java/com/ruoyi/wzCk/ckDetail/mapper/WzOutboundOrderBMapper.java

@@ -0,0 +1,89 @@
+package com.ruoyi.wzCk.ckDetail.mapper;
+
+import com.ruoyi.wzCk.ckDetail.domain.WzOutboundOrderB;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+
+/**
+ * 物资出库明细_基础数据Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2023-08-10
+ */
+@Mapper
+public interface WzOutboundOrderBMapper 
+{
+    /**
+     * 查询物资出库明细_基础数据
+     * 
+     * @param id 物资出库明细_基础数据主键
+     * @return 物资出库明细_基础数据
+     */
+    public WzOutboundOrderB selectWzOutboundOrderBById(Long id);
+
+    /**
+     * 查询物资出库明细_基础数据列表
+     * 
+     * @param wzOutboundOrderB 物资出库明细_基础数据
+     * @return 物资出库明细_基础数据集合
+     */
+    public List<WzOutboundOrderB> selectWzOutboundOrderBList(WzOutboundOrderB wzOutboundOrderB);
+
+    /**
+     * 新增物资出库明细_基础数据
+     * 
+     * @param wzOutboundOrderB 物资出库明细_基础数据
+     * @return 结果
+     */
+    public int insertWzOutboundOrderB(WzOutboundOrderB wzOutboundOrderB);
+
+    /**
+     * 修改物资出库明细_基础数据
+     * 
+     * @param wzOutboundOrderB 物资出库明细_基础数据
+     * @return 结果
+     */
+    public int updateWzOutboundOrderB(WzOutboundOrderB wzOutboundOrderB);
+
+    /**
+     * 删除物资出库明细_基础数据
+     * 
+     * @param id 物资出库明细_基础数据主键
+     * @return 结果
+     */
+    public int deleteWzOutboundOrderBById(Long id);
+
+    /**
+     * 批量删除物资出库明细_基础数据
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteWzOutboundOrderBByIds(Long[] ids);
+
+    /**
+     * 获取项目成本的组成部分,根据任务号查询物资出库单信息组成材料费
+     *
+     * @param taskno 任务号
+     * @return 结果
+     */
+    List<WzOutboundOrderB> selectProjectCostFromCkDetailByTaskNo(String taskno);
+
+    /**
+     * 获取项目成本的组成部分,根据出库单号查询物资出库单信息组成材料费
+     *
+     * @param ckdh 出库单号
+     * @return 结果
+     */
+    List<WzOutboundOrderB> selectProjectCostFromCkDetailByCkdh(String ckdh);
+
+    /**
+     * 根据出库单号查询对应的物资出库单信息总条数
+     *
+     * @param ckdh 出库单号
+     * @return 结果
+     */
+    Integer getCkDetailDataCountByCkdh(String ckdh);
+}

+ 87 - 0
base/src/main/java/com/ruoyi/wzCk/ckDetail/service/IWzOutboundOrderBService.java

@@ -0,0 +1,87 @@
+package com.ruoyi.wzCk.ckDetail.service;
+
+import com.ruoyi.wzCk.ckDetail.domain.WzOutboundOrderB;
+
+import java.util.List;
+
+
+/**
+ * 物资出库明细_基础数据Service接口
+ * 
+ * @author ruoyi
+ * @date 2023-08-10
+ */
+public interface IWzOutboundOrderBService 
+{
+    /**
+     * 查询物资出库明细_基础数据
+     * 
+     * @param id 物资出库明细_基础数据主键
+     * @return 物资出库明细_基础数据
+     */
+    public WzOutboundOrderB selectWzOutboundOrderBById(Long id);
+
+    /**
+     * 查询物资出库明细_基础数据列表
+     * 
+     * @param wzOutboundOrderB 物资出库明细_基础数据
+     * @return 物资出库明细_基础数据集合
+     */
+    public List<WzOutboundOrderB> selectWzOutboundOrderBList(WzOutboundOrderB wzOutboundOrderB);
+
+    /**
+     * 新增物资出库明细_基础数据
+     * 
+     * @param wzOutboundOrderB 物资出库明细_基础数据
+     * @return 结果
+     */
+    public int insertWzOutboundOrderB(WzOutboundOrderB wzOutboundOrderB);
+
+    /**
+     * 修改物资出库明细_基础数据
+     * 
+     * @param wzOutboundOrderB 物资出库明细_基础数据
+     * @return 结果
+     */
+    public int updateWzOutboundOrderB(WzOutboundOrderB wzOutboundOrderB);
+
+    /**
+     * 批量删除物资出库明细_基础数据
+     * 
+     * @param ids 需要删除的物资出库明细_基础数据主键集合
+     * @return 结果
+     */
+    public int deleteWzOutboundOrderBByIds(Long[] ids);
+
+    /**
+     * 删除物资出库明细_基础数据信息
+     * 
+     * @param id 物资出库明细_基础数据主键
+     * @return 结果
+     */
+    public int deleteWzOutboundOrderBById(Long id);
+
+    /**
+     * 获取项目成本的组成部分,根据任务号查询物资出库单信息组成材料费
+     *
+     * @param taskno 任务号
+     * @return 结果
+     */
+    List<WzOutboundOrderB> selectProjectCostFromCkDetailByTaskNo(String taskno);
+
+    /**
+     * 获取项目成本的组成部分,根据出库单号查询物资出库单信息组成材料费
+     *
+     * @param ckdh 出库单号
+     * @return 结果
+     */
+    List<WzOutboundOrderB> selectProjectCostFromCkDetailByCkdh(String ckdh);
+
+    /**
+     * 根据出库单号查询对应的物资出库单信息总条数
+     *
+     * @param ckdh 出库单号
+     * @return 结果
+     */
+    Integer getCkDetailDataCountByCkdh(String ckdh);
+}

+ 127 - 0
base/src/main/java/com/ruoyi/wzCk/ckDetail/service/impl/WzOutboundOrderBServiceImpl.java

@@ -0,0 +1,127 @@
+package com.ruoyi.wzCk.ckDetail.service.impl;
+
+import java.util.List;
+
+import com.ruoyi.wzCk.ckDetail.domain.WzOutboundOrderB;
+import com.ruoyi.wzCk.ckDetail.mapper.WzOutboundOrderBMapper;
+import com.ruoyi.wzCk.ckDetail.service.IWzOutboundOrderBService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * 物资出库明细_基础数据Service业务层处理
+ * 
+ * @author ruoyi
+ * @date 2023-08-10
+ */
+@Service
+public class WzOutboundOrderBServiceImpl implements IWzOutboundOrderBService
+{
+    @Autowired
+    private WzOutboundOrderBMapper wzOutboundOrderBMapper;
+
+    /**
+     * 查询物资出库明细_基础数据
+     * 
+     * @param id 物资出库明细_基础数据主键
+     * @return 物资出库明细_基础数据
+     */
+    @Override
+    public WzOutboundOrderB selectWzOutboundOrderBById(Long id)
+    {
+        return wzOutboundOrderBMapper.selectWzOutboundOrderBById(id);
+    }
+
+    /**
+     * 查询物资出库明细_基础数据列表
+     * 
+     * @param wzOutboundOrderB 物资出库明细_基础数据
+     * @return 物资出库明细_基础数据
+     */
+    @Override
+    public List<WzOutboundOrderB> selectWzOutboundOrderBList(WzOutboundOrderB wzOutboundOrderB)
+    {
+        return wzOutboundOrderBMapper.selectWzOutboundOrderBList(wzOutboundOrderB);
+    }
+
+    /**
+     * 新增物资出库明细_基础数据
+     * 
+     * @param wzOutboundOrderB 物资出库明细_基础数据
+     * @return 结果
+     */
+    @Override
+    public int insertWzOutboundOrderB(WzOutboundOrderB wzOutboundOrderB)
+    {
+        return wzOutboundOrderBMapper.insertWzOutboundOrderB(wzOutboundOrderB);
+    }
+
+    /**
+     * 修改物资出库明细_基础数据
+     * 
+     * @param wzOutboundOrderB 物资出库明细_基础数据
+     * @return 结果
+     */
+    @Override
+    public int updateWzOutboundOrderB(WzOutboundOrderB wzOutboundOrderB)
+    {
+        return wzOutboundOrderBMapper.updateWzOutboundOrderB(wzOutboundOrderB);
+    }
+
+    /**
+     * 批量删除物资出库明细_基础数据
+     * 
+     * @param ids 需要删除的物资出库明细_基础数据主键
+     * @return 结果
+     */
+    @Override
+    public int deleteWzOutboundOrderBByIds(Long[] ids)
+    {
+        return wzOutboundOrderBMapper.deleteWzOutboundOrderBByIds(ids);
+    }
+
+    /**
+     * 删除物资出库明细_基础数据信息
+     * 
+     * @param id 物资出库明细_基础数据主键
+     * @return 结果
+     */
+    @Override
+    public int deleteWzOutboundOrderBById(Long id)
+    {
+        return wzOutboundOrderBMapper.deleteWzOutboundOrderBById(id);
+    }
+
+    /**
+     * 获取项目成本的组成部分,根据任务号查询物资出库单信息组成材料费
+     *
+     * @param taskno 任务号
+     * @return 结果
+     */
+    @Override
+    public List<WzOutboundOrderB> selectProjectCostFromCkDetailByTaskNo(String taskno) {
+        return wzOutboundOrderBMapper.selectProjectCostFromCkDetailByTaskNo(taskno);
+    }
+
+    /**
+     * 获取项目成本的组成部分,根据出库单号查询物资出库单信息组成材料费
+     *
+     * @param ckdh 出库单号
+     * @return 结果
+     */
+    @Override
+    public List<WzOutboundOrderB> selectProjectCostFromCkDetailByCkdh(String ckdh) {
+        return wzOutboundOrderBMapper.selectProjectCostFromCkDetailByCkdh(ckdh);
+    }
+
+    /**
+     * 根据出库单号查询对应的物资出库单信息总条数
+     *
+     * @param ckdh 出库单号
+     * @return 结果
+     */
+    @Override
+    public Integer getCkDetailDataCountByCkdh(String ckdh) {
+        return wzOutboundOrderBMapper.getCkDetailDataCountByCkdh(ckdh);
+    }
+}

+ 345 - 0
base/src/main/java/com/ruoyi/wzCk/ckInfo/domain/WzOutboundOrderH.java

@@ -0,0 +1,345 @@
+package com.ruoyi.wzCk.ckInfo.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 物资出库单_基础数据对象 wz_outbound_order_h
+ * 
+ * @author ruoyi
+ * @date 2023-08-10
+ */
+public class WzOutboundOrderH extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** $column.columnComment */
+    private Long id;
+
+    /** 签字人 */
+    @Excel(name = "签字人")
+    private String qzr;
+
+    /** 制单人 */
+    @Excel(name = "制单人")
+    private String zdr;
+
+    /** 领料员 */
+    @Excel(name = "领料员")
+    private String lly;
+
+    /** 领用部门 */
+    @Excel(name = "领用部门")
+    private String lybm;
+
+    /** 仓库 */
+    @Excel(name = "仓库")
+    private String ck;
+
+    /** 库管员编码 */
+    @Excel(name = "库管员编码")
+    private String khybm;
+
+    /** 库管员名称 */
+    @Excel(name = "库管员名称")
+    private String kgymc;
+
+    /** 制单日期 */
+    @Excel(name = "制单日期")
+    private String zdrq;
+
+    /** 单据状态 */
+    @Excel(name = "单据状态")
+    private String djzt;
+
+    /** 总数量 */
+    @Excel(name = "总数量")
+    private String zsl;
+
+    /** 签字日期 */
+    @Excel(name = "签字日期")
+    private String qzrq;
+
+    /** 出库单号 */
+    @Excel(name = "出库单号")
+    private String ckdh;
+
+    /** 配套指令号 */
+    @Excel(name = "配套指令号")
+    private String ptzlh;
+
+    /** 任务号 */
+    @Excel(name = "任务号")
+    private String rwh;
+
+    /** 工程型号 */
+    @Excel(name = "工程型号")
+    private String gcxh;
+
+    /** 质保单位 */
+    @Excel(name = "质保单位")
+    private String zbdw;
+
+    /** 质保依据 */
+    @Excel(name = "质保依据")
+    private String zbyj;
+
+    /** 板号 */
+    @Excel(name = "板号")
+    private String bh;
+
+    /** 设备名称 */
+    @Excel(name = "设备名称")
+    private String sbmc;
+
+    /** 任务阶段 */
+    @Excel(name = "任务阶段")
+    private String rwjd;
+
+    /** 打印次数 */
+    @Excel(name = "打印次数")
+    private String dycs;
+
+    /** 出库单主键 */
+    @Excel(name = "出库单主键")
+    private String ckdzj;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setQzr(String qzr) 
+    {
+        this.qzr = qzr;
+    }
+
+    public String getQzr() 
+    {
+        return qzr;
+    }
+    public void setZdr(String zdr) 
+    {
+        this.zdr = zdr;
+    }
+
+    public String getZdr() 
+    {
+        return zdr;
+    }
+    public void setLly(String lly) 
+    {
+        this.lly = lly;
+    }
+
+    public String getLly() 
+    {
+        return lly;
+    }
+    public void setLybm(String lybm) 
+    {
+        this.lybm = lybm;
+    }
+
+    public String getLybm() 
+    {
+        return lybm;
+    }
+    public void setCk(String ck) 
+    {
+        this.ck = ck;
+    }
+
+    public String getCk() 
+    {
+        return ck;
+    }
+    public void setKhybm(String khybm) 
+    {
+        this.khybm = khybm;
+    }
+
+    public String getKhybm() 
+    {
+        return khybm;
+    }
+    public void setKgymc(String kgymc) 
+    {
+        this.kgymc = kgymc;
+    }
+
+    public String getKgymc() 
+    {
+        return kgymc;
+    }
+    public void setZdrq(String zdrq) 
+    {
+        this.zdrq = zdrq;
+    }
+
+    public String getZdrq() 
+    {
+        return zdrq;
+    }
+    public void setDjzt(String djzt) 
+    {
+        this.djzt = djzt;
+    }
+
+    public String getDjzt() 
+    {
+        return djzt;
+    }
+    public void setZsl(String zsl) 
+    {
+        this.zsl = zsl;
+    }
+
+    public String getZsl() 
+    {
+        return zsl;
+    }
+    public void setQzrq(String qzrq) 
+    {
+        this.qzrq = qzrq;
+    }
+
+    public String getQzrq() 
+    {
+        return qzrq;
+    }
+    public void setCkdh(String ckdh) 
+    {
+        this.ckdh = ckdh;
+    }
+
+    public String getCkdh() 
+    {
+        return ckdh;
+    }
+    public void setPtzlh(String ptzlh) 
+    {
+        this.ptzlh = ptzlh;
+    }
+
+    public String getPtzlh() 
+    {
+        return ptzlh;
+    }
+    public void setRwh(String rwh) 
+    {
+        this.rwh = rwh;
+    }
+
+    public String getRwh() 
+    {
+        return rwh;
+    }
+    public void setGcxh(String gcxh) 
+    {
+        this.gcxh = gcxh;
+    }
+
+    public String getGcxh() 
+    {
+        return gcxh;
+    }
+    public void setZbdw(String zbdw) 
+    {
+        this.zbdw = zbdw;
+    }
+
+    public String getZbdw() 
+    {
+        return zbdw;
+    }
+    public void setZbyj(String zbyj) 
+    {
+        this.zbyj = zbyj;
+    }
+
+    public String getZbyj() 
+    {
+        return zbyj;
+    }
+    public void setBh(String bh) 
+    {
+        this.bh = bh;
+    }
+
+    public String getBh() 
+    {
+        return bh;
+    }
+    public void setSbmc(String sbmc) 
+    {
+        this.sbmc = sbmc;
+    }
+
+    public String getSbmc() 
+    {
+        return sbmc;
+    }
+    public void setRwjd(String rwjd) 
+    {
+        this.rwjd = rwjd;
+    }
+
+    public String getRwjd() 
+    {
+        return rwjd;
+    }
+    public void setDycs(String dycs) 
+    {
+        this.dycs = dycs;
+    }
+
+    public String getDycs() 
+    {
+        return dycs;
+    }
+    public void setCkdzj(String ckdzj) 
+    {
+        this.ckdzj = ckdzj;
+    }
+
+    public String getCkdzj() 
+    {
+        return ckdzj;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("qzr", getQzr())
+            .append("zdr", getZdr())
+            .append("lly", getLly())
+            .append("lybm", getLybm())
+            .append("ck", getCk())
+            .append("khybm", getKhybm())
+            .append("kgymc", getKgymc())
+            .append("zdrq", getZdrq())
+            .append("djzt", getDjzt())
+            .append("zsl", getZsl())
+            .append("qzrq", getQzrq())
+            .append("ckdh", getCkdh())
+            .append("ptzlh", getPtzlh())
+            .append("rwh", getRwh())
+            .append("gcxh", getGcxh())
+            .append("zbdw", getZbdw())
+            .append("zbyj", getZbyj())
+            .append("bh", getBh())
+            .append("sbmc", getSbmc())
+            .append("rwjd", getRwjd())
+            .append("dycs", getDycs())
+            .append("ckdzj", getCkdzj())
+            .toString();
+    }
+}

+ 73 - 0
base/src/main/java/com/ruoyi/wzCk/ckInfo/mapper/WzOutboundOrderHMapper.java

@@ -0,0 +1,73 @@
+package com.ruoyi.wzCk.ckInfo.mapper;
+
+import com.ruoyi.wzCk.ckInfo.domain.WzOutboundOrderH;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+
+/**
+ * 物资出库单_基础数据Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2023-08-10
+ */
+@Mapper
+public interface WzOutboundOrderHMapper 
+{
+    /**
+     * 查询物资出库单_基础数据
+     * 
+     * @param id 物资出库单_基础数据主键
+     * @return 物资出库单_基础数据
+     */
+    public WzOutboundOrderH selectWzOutboundOrderHById(Long id);
+
+    /**
+     * 查询物资出库单_基础数据列表
+     * 
+     * @param wzOutboundOrderH 物资出库单_基础数据
+     * @return 物资出库单_基础数据集合
+     */
+    public List<WzOutboundOrderH> selectWzOutboundOrderHList(WzOutboundOrderH wzOutboundOrderH);
+
+    /**
+     * 新增物资出库单_基础数据
+     * 
+     * @param wzOutboundOrderH 物资出库单_基础数据
+     * @return 结果
+     */
+    public int insertWzOutboundOrderH(WzOutboundOrderH wzOutboundOrderH);
+
+    /**
+     * 修改物资出库单_基础数据
+     * 
+     * @param wzOutboundOrderH 物资出库单_基础数据
+     * @return 结果
+     */
+    public int updateWzOutboundOrderH(WzOutboundOrderH wzOutboundOrderH);
+
+    /**
+     * 删除物资出库单_基础数据
+     * 
+     * @param id 物资出库单_基础数据主键
+     * @return 结果
+     */
+    public int deleteWzOutboundOrderHById(Long id);
+
+    /**
+     * 批量删除物资出库单_基础数据
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteWzOutboundOrderHByIds(Long[] ids);
+
+    /**
+     * 根据任务号查询出库单号
+     *
+     * @param taskno 任务号
+     * @return 结果
+     */
+    List<WzOutboundOrderH> selectCkdhListFromCkinfoByTaskNo(String taskno);
+}

+ 71 - 0
base/src/main/java/com/ruoyi/wzCk/ckInfo/service/IWzOutboundOrderHService.java

@@ -0,0 +1,71 @@
+package com.ruoyi.wzCk.ckInfo.service;
+
+import com.ruoyi.wzCk.ckInfo.domain.WzOutboundOrderH;
+
+import java.util.List;
+
+
+/**
+ * 物资出库单_基础数据Service接口
+ * 
+ * @author ruoyi
+ * @date 2023-08-10
+ */
+public interface IWzOutboundOrderHService 
+{
+    /**
+     * 查询物资出库单_基础数据
+     * 
+     * @param id 物资出库单_基础数据主键
+     * @return 物资出库单_基础数据
+     */
+    public WzOutboundOrderH selectWzOutboundOrderHById(Long id);
+
+    /**
+     * 查询物资出库单_基础数据列表
+     * 
+     * @param wzOutboundOrderH 物资出库单_基础数据
+     * @return 物资出库单_基础数据集合
+     */
+    public List<WzOutboundOrderH> selectWzOutboundOrderHList(WzOutboundOrderH wzOutboundOrderH);
+
+    /**
+     * 新增物资出库单_基础数据
+     * 
+     * @param wzOutboundOrderH 物资出库单_基础数据
+     * @return 结果
+     */
+    public int insertWzOutboundOrderH(WzOutboundOrderH wzOutboundOrderH);
+
+    /**
+     * 修改物资出库单_基础数据
+     * 
+     * @param wzOutboundOrderH 物资出库单_基础数据
+     * @return 结果
+     */
+    public int updateWzOutboundOrderH(WzOutboundOrderH wzOutboundOrderH);
+
+    /**
+     * 批量删除物资出库单_基础数据
+     * 
+     * @param ids 需要删除的物资出库单_基础数据主键集合
+     * @return 结果
+     */
+    public int deleteWzOutboundOrderHByIds(Long[] ids);
+
+    /**
+     * 删除物资出库单_基础数据信息
+     * 
+     * @param id 物资出库单_基础数据主键
+     * @return 结果
+     */
+    public int deleteWzOutboundOrderHById(Long id);
+
+    /**
+     * 根据任务号查询出库单号
+     *
+     * @param taskno 任务号
+     * @return 结果
+     */
+    List<WzOutboundOrderH> selectCkdhListFromCkinfoByTaskNo(String taskno);
+}

+ 106 - 0
base/src/main/java/com/ruoyi/wzCk/ckInfo/service/impl/WzOutboundOrderHServiceImpl.java

@@ -0,0 +1,106 @@
+package com.ruoyi.wzCk.ckInfo.service.impl;
+
+import java.util.List;
+
+import com.ruoyi.wzCk.ckInfo.domain.WzOutboundOrderH;
+import com.ruoyi.wzCk.ckInfo.mapper.WzOutboundOrderHMapper;
+import com.ruoyi.wzCk.ckInfo.service.IWzOutboundOrderHService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+
+/**
+ * 物资出库单_基础数据Service业务层处理
+ * 
+ * @author ruoyi
+ * @date 2023-08-10
+ */
+@Service
+public class WzOutboundOrderHServiceImpl implements IWzOutboundOrderHService
+{
+    @Autowired
+    private WzOutboundOrderHMapper wzOutboundOrderHMapper;
+
+    /**
+     * 查询物资出库单_基础数据
+     * 
+     * @param id 物资出库单_基础数据主键
+     * @return 物资出库单_基础数据
+     */
+    @Override
+    public WzOutboundOrderH selectWzOutboundOrderHById(Long id)
+    {
+        return wzOutboundOrderHMapper.selectWzOutboundOrderHById(id);
+    }
+
+    /**
+     * 查询物资出库单_基础数据列表
+     * 
+     * @param wzOutboundOrderH 物资出库单_基础数据
+     * @return 物资出库单_基础数据
+     */
+    @Override
+    public List<WzOutboundOrderH> selectWzOutboundOrderHList(WzOutboundOrderH wzOutboundOrderH)
+    {
+        return wzOutboundOrderHMapper.selectWzOutboundOrderHList(wzOutboundOrderH);
+    }
+
+    /**
+     * 新增物资出库单_基础数据
+     * 
+     * @param wzOutboundOrderH 物资出库单_基础数据
+     * @return 结果
+     */
+    @Override
+    public int insertWzOutboundOrderH(WzOutboundOrderH wzOutboundOrderH)
+    {
+        return wzOutboundOrderHMapper.insertWzOutboundOrderH(wzOutboundOrderH);
+    }
+
+    /**
+     * 修改物资出库单_基础数据
+     * 
+     * @param wzOutboundOrderH 物资出库单_基础数据
+     * @return 结果
+     */
+    @Override
+    public int updateWzOutboundOrderH(WzOutboundOrderH wzOutboundOrderH)
+    {
+        return wzOutboundOrderHMapper.updateWzOutboundOrderH(wzOutboundOrderH);
+    }
+
+    /**
+     * 批量删除物资出库单_基础数据
+     * 
+     * @param ids 需要删除的物资出库单_基础数据主键
+     * @return 结果
+     */
+    @Override
+    public int deleteWzOutboundOrderHByIds(Long[] ids)
+    {
+        return wzOutboundOrderHMapper.deleteWzOutboundOrderHByIds(ids);
+    }
+
+    /**
+     * 删除物资出库单_基础数据信息
+     * 
+     * @param id 物资出库单_基础数据主键
+     * @return 结果
+     */
+    @Override
+    public int deleteWzOutboundOrderHById(Long id)
+    {
+        return wzOutboundOrderHMapper.deleteWzOutboundOrderHById(id);
+    }
+
+    /**
+     * 根据任务号查询出库单号
+     *
+     * @param taskno 任务号
+     * @return 结果
+     */
+    @Override
+    public List<WzOutboundOrderH> selectCkdhListFromCkinfoByTaskNo(String taskno) {
+        return wzOutboundOrderHMapper.selectCkdhListFromCkinfoByTaskNo(taskno);
+    }
+}

文件差異過大導致無法顯示
+ 488 - 0
base/src/main/resources/mapper/contractInfo/ComContractInfoExchangeMapper.xml


+ 156 - 0
base/src/main/resources/mapper/depart/SysDepartMapper.xml

@@ -0,0 +1,156 @@
+<?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.ruoyi.depart.mapper.SysDepartMapper">
+    
+    <resultMap type="SysDepart" id="SysDepartResult">
+        <result property="id"    column="id"    />
+        <result property="parentId"    column="parent_id"    />
+        <result property="departName"    column="depart_name"    />
+        <result property="departNameEn"    column="depart_name_en"    />
+        <result property="departNameAbbr"    column="depart_name_abbr"    />
+        <result property="departOrder"    column="depart_order"    />
+        <result property="description"    column="description"    />
+        <result property="orgCategory"    column="org_category"    />
+        <result property="orgType"    column="org_type"    />
+        <result property="orgCode"    column="org_code"    />
+        <result property="mobile"    column="mobile"    />
+        <result property="fax"    column="fax"    />
+        <result property="address"    column="address"    />
+        <result property="memo"    column="memo"    />
+        <result property="status"    column="status"    />
+        <result property="delFlag"    column="del_flag"    />
+        <result property="qywxIdentifier"    column="qywx_identifier"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="deptType"    column="dept_type"    />
+    </resultMap>
+
+    <sql id="selectSysDepartVo">
+        select id, parent_id, depart_name, depart_name_en, depart_name_abbr, depart_order, description, org_category, org_type, org_code, mobile, fax, address, memo, status, del_flag, qywx_identifier, create_by, create_time, update_by, update_time, dept_type from sys_depart
+    </sql>
+
+    <select id="selectSysDepartList" parameterType="SysDepart" resultMap="SysDepartResult">
+        <include refid="selectSysDepartVo"/>
+        <where>  
+            <if test="parentId != null  and parentId != ''"> and parent_id = #{parentId}</if>
+            <if test="departName != null  and departName != ''"> and depart_name like concat('%', #{departName}, '%')</if>
+            <if test="departNameEn != null  and departNameEn != ''"> and depart_name_en = #{departNameEn}</if>
+            <if test="departNameAbbr != null  and departNameAbbr != ''"> and depart_name_abbr = #{departNameAbbr}</if>
+            <if test="departOrder != null "> and depart_order = #{departOrder}</if>
+            <if test="description != null  and description != ''"> and description = #{description}</if>
+            <if test="orgCategory != null  and orgCategory != ''"> and org_category = #{orgCategory}</if>
+            <if test="orgType != null  and orgType != ''"> and org_type = #{orgType}</if>
+            <if test="orgCode != null  and orgCode != ''"> and org_code = #{orgCode}</if>
+            <if test="mobile != null  and mobile != ''"> and mobile = #{mobile}</if>
+            <if test="fax != null  and fax != ''"> and fax = #{fax}</if>
+            <if test="address != null  and address != ''"> and address = #{address}</if>
+            <if test="memo != null  and memo != ''"> and memo = #{memo}</if>
+            <if test="status != null  and status != ''"> and status = #{status}</if>
+            <if test="qywxIdentifier != null  and qywxIdentifier != ''"> and qywx_identifier = #{qywxIdentifier}</if>
+            <if test="deptType != null "> and dept_type = #{deptType}</if>
+        </where>
+    </select>
+    
+    <select id="selectSysDepartById" parameterType="String" resultMap="SysDepartResult">
+        <include refid="selectSysDepartVo"/>
+        where id = #{id}
+    </select>
+    <select id="selectDeptTypeByDeptName" resultType="com.ruoyi.depart.domain.SysDepart">
+        select depart_name,id,parent_id,dept_type from sys_depart where depart_name = #{userdept}
+    </select>
+
+    <insert id="insertSysDepart" parameterType="SysDepart">
+        insert into sys_depart
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">id,</if>
+            <if test="parentId != null">parent_id,</if>
+            <if test="departName != null and departName != ''">depart_name,</if>
+            <if test="departNameEn != null">depart_name_en,</if>
+            <if test="departNameAbbr != null">depart_name_abbr,</if>
+            <if test="departOrder != null">depart_order,</if>
+            <if test="description != null">description,</if>
+            <if test="orgCategory != null and orgCategory != ''">org_category,</if>
+            <if test="orgType != null">org_type,</if>
+            <if test="orgCode != null and orgCode != ''">org_code,</if>
+            <if test="mobile != null">mobile,</if>
+            <if test="fax != null">fax,</if>
+            <if test="address != null">address,</if>
+            <if test="memo != null">memo,</if>
+            <if test="status != null">status,</if>
+            <if test="delFlag != null">del_flag,</if>
+            <if test="qywxIdentifier != null">qywx_identifier,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="deptType != null">dept_type,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="parentId != null">#{parentId},</if>
+            <if test="departName != null and departName != ''">#{departName},</if>
+            <if test="departNameEn != null">#{departNameEn},</if>
+            <if test="departNameAbbr != null">#{departNameAbbr},</if>
+            <if test="departOrder != null">#{departOrder},</if>
+            <if test="description != null">#{description},</if>
+            <if test="orgCategory != null and orgCategory != ''">#{orgCategory},</if>
+            <if test="orgType != null">#{orgType},</if>
+            <if test="orgCode != null and orgCode != ''">#{orgCode},</if>
+            <if test="mobile != null">#{mobile},</if>
+            <if test="fax != null">#{fax},</if>
+            <if test="address != null">#{address},</if>
+            <if test="memo != null">#{memo},</if>
+            <if test="status != null">#{status},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+            <if test="qywxIdentifier != null">#{qywxIdentifier},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="deptType != null">#{deptType},</if>
+         </trim>
+    </insert>
+
+    <update id="updateSysDepart" parameterType="SysDepart">
+        update sys_depart
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="parentId != null">parent_id = #{parentId},</if>
+            <if test="departName != null and departName != ''">depart_name = #{departName},</if>
+            <if test="departNameEn != null">depart_name_en = #{departNameEn},</if>
+            <if test="departNameAbbr != null">depart_name_abbr = #{departNameAbbr},</if>
+            <if test="departOrder != null">depart_order = #{departOrder},</if>
+            <if test="description != null">description = #{description},</if>
+            <if test="orgCategory != null and orgCategory != ''">org_category = #{orgCategory},</if>
+            <if test="orgType != null">org_type = #{orgType},</if>
+            <if test="orgCode != null and orgCode != ''">org_code = #{orgCode},</if>
+            <if test="mobile != null">mobile = #{mobile},</if>
+            <if test="fax != null">fax = #{fax},</if>
+            <if test="address != null">address = #{address},</if>
+            <if test="memo != null">memo = #{memo},</if>
+            <if test="status != null">status = #{status},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+            <if test="qywxIdentifier != null">qywx_identifier = #{qywxIdentifier},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="deptType != null">dept_type = #{deptType},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteSysDepartById" parameterType="String">
+        delete from sys_depart where id = #{id}
+    </delete>
+
+    <delete id="deleteSysDepartByIds" parameterType="String">
+        delete from sys_depart where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 199 - 0
base/src/main/resources/mapper/financeBudget/FinanceBudgetMapper.xml

@@ -0,0 +1,199 @@
+<?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.ruoyi.financeBudget.mapper.FinanceBudgetMapper">
+    
+    <resultMap type="FinanceBudget" id="FinanceBudgetResult">
+        <result property="id"    column="id"    />
+        <result property="taskno"    column="taskno"    />
+        <result property="taskname"    column="taskname"    />
+        <result property="iflag"    column="iflag"    />
+        <result property="hxzxname"    column="hxzxname"    />
+        <result property="xhid"    column="xhid"    />
+        <result property="yzjdname"    column="yzjdname"    />
+        <result property="yzsl"    column="yzsl"    />
+        <result property="tcdw"    column="tcdw"    />
+        <result property="Brief"    column="Brief"    />
+        <result property="zrbm"    column="zrbm"    />
+        <result property="jycs"    column="jycs"    />
+        <result property="tasktype"    column="tasktype"    />
+        <result property="auditPrice"    column="auditPrice"    />
+        <result property="businessManName"    column="businessManName"    />
+        <result property="lrsj"    column="lrsj"    />
+        <result property="sjkssj"    column="sjkssj"    />
+        <result property="jhwcsj"    column="jhwcsj"    />
+        <result property="ProcessPercent"    column="ProcessPercent"    />
+        <result property="EstimationCoat"    column="EstimationCoat"    />
+        <result property="contractfpe"    column="contractfpe"    />
+        <result property="sjCost"    column="sjCost"    />
+        <result property="clCost"    column="clCost"    />
+        <result property="wxCost"    column="wxCost"    />
+        <result property="zyCost"    column="zyCost"    />
+        <result property="gzCost"    column="gzCost"    />
+        <result property="rdCost"    column="rdCost"    />
+        <result property="glCost"    column="glCost"    />
+        <result property="rgCost"    column="rgCost"    />
+        <result property="refTaskNo"    column="refTaskNo"    />
+    </resultMap>
+
+    <sql id="selectFinanceBudgetVo">
+        select id, taskno, taskname, iflag, hxzxname, xhid, yzjdname, yzsl, tcdw, Brief, zrbm, jycs, tasktype, auditPrice, businessManName, lrsj, sjkssj, jhwcsj, ProcessPercent, EstimationCoat, contractfpe, sjCost, clCost, wxCost, zyCost, gzCost, rdCost, glCost, rgCost, refTaskNo from finance_budget
+    </sql>
+
+    <select id="selectFinanceBudgetList" parameterType="FinanceBudget" resultMap="FinanceBudgetResult">
+        <include refid="selectFinanceBudgetVo"/>
+        <where>  
+            <if test="taskno != null  and taskno != ''"> and taskno = #{taskno}</if>
+            <if test="taskname != null  and taskname != ''"> and taskname like concat('%', #{taskname}, '%')</if>
+            <if test="iflag != null  and iflag != ''"> and iflag = #{iflag}</if>
+            <if test="hxzxname != null  and hxzxname != ''"> and hxzxname like concat('%', #{hxzxname}, '%')</if>
+            <if test="xhid != null  and xhid != ''"> and xhid = #{xhid}</if>
+            <if test="yzjdname != null  and yzjdname != ''"> and yzjdname like concat('%', #{yzjdname}, '%')</if>
+            <if test="yzsl != null  and yzsl != ''"> and yzsl = #{yzsl}</if>
+            <if test="tcdw != null  and tcdw != ''"> and tcdw = #{tcdw}</if>
+            <if test="Brief != null  and Brief != ''"> and Brief = #{Brief}</if>
+            <if test="zrbm != null  and zrbm != ''"> and zrbm = #{zrbm}</if>
+            <if test="jycs != null  and jycs != ''"> and jycs = #{jycs}</if>
+            <if test="tasktype != null  and tasktype != ''"> and tasktype = #{tasktype}</if>
+            <if test="auditPrice != null  and auditPrice != ''"> and auditPrice = #{auditPrice}</if>
+            <if test="businessManName != null  and businessManName != ''"> and businessManName like concat('%', #{businessManName}, '%')</if>
+            <if test="lrsj != null  and lrsj != ''"> and lrsj = #{lrsj}</if>
+            <if test="sjkssj != null  and sjkssj != ''"> and sjkssj = #{sjkssj}</if>
+            <if test="jhwcsj != null  and jhwcsj != ''"> and jhwcsj = #{jhwcsj}</if>
+            <if test="ProcessPercent != null  and ProcessPercent != ''"> and ProcessPercent = #{ProcessPercent}</if>
+            <if test="EstimationCoat != null  and EstimationCoat != ''"> and EstimationCoat = #{EstimationCoat}</if>
+            <if test="contractfpe != null  and contractfpe != ''"> and contractfpe = #{contractfpe}</if>
+            <if test="sjCost != null  and sjCost != ''"> and sjCost = #{sjCost}</if>
+            <if test="clCost != null  and clCost != ''"> and clCost = #{clCost}</if>
+            <if test="wxCost != null  and wxCost != ''"> and wxCost = #{wxCost}</if>
+            <if test="zyCost != null  and zyCost != ''"> and zyCost = #{zyCost}</if>
+            <if test="gzCost != null  and gzCost != ''"> and gzCost = #{gzCost}</if>
+            <if test="rdCost != null  and rdCost != ''"> and rdCost = #{rdCost}</if>
+            <if test="glCost != null  and glCost != ''"> and glCost = #{glCost}</if>
+            <if test="rgCost != null  and rgCost != ''"> and rgCost = #{rgCost}</if>
+            <if test="refTaskNo != null  and refTaskNo != ''"> and refTaskNo = #{refTaskNo}</if>
+        </where>
+    </select>
+    
+    <select id="selectFinanceBudgetById" parameterType="Long" resultMap="FinanceBudgetResult">
+        <include refid="selectFinanceBudgetVo"/>
+        where id = #{id}
+    </select>
+    <select id="selectEstimationCoatByTaskno" resultType="com.ruoyi.financeBudget.domain.FinanceBudget">
+        select id,taskno,EstimationCoat from finance_budget where taskno = #{taskno}
+    </select>
+
+    <insert id="insertFinanceBudget" parameterType="FinanceBudget" useGeneratedKeys="true" keyProperty="id">
+        insert into finance_budget
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="taskno != null">taskno,</if>
+            <if test="taskname != null">taskname,</if>
+            <if test="iflag != null">iflag,</if>
+            <if test="hxzxname != null">hxzxname,</if>
+            <if test="xhid != null">xhid,</if>
+            <if test="yzjdname != null">yzjdname,</if>
+            <if test="yzsl != null">yzsl,</if>
+            <if test="tcdw != null">tcdw,</if>
+            <if test="Brief != null">Brief,</if>
+            <if test="zrbm != null">zrbm,</if>
+            <if test="jycs != null">jycs,</if>
+            <if test="tasktype != null">tasktype,</if>
+            <if test="auditPrice != null">auditPrice,</if>
+            <if test="businessManName != null">businessManName,</if>
+            <if test="lrsj != null">lrsj,</if>
+            <if test="sjkssj != null">sjkssj,</if>
+            <if test="jhwcsj != null">jhwcsj,</if>
+            <if test="ProcessPercent != null">ProcessPercent,</if>
+            <if test="EstimationCoat != null">EstimationCoat,</if>
+            <if test="contractfpe != null">contractfpe,</if>
+            <if test="sjCost != null">sjCost,</if>
+            <if test="clCost != null">clCost,</if>
+            <if test="wxCost != null">wxCost,</if>
+            <if test="zyCost != null">zyCost,</if>
+            <if test="gzCost != null">gzCost,</if>
+            <if test="rdCost != null">rdCost,</if>
+            <if test="glCost != null">glCost,</if>
+            <if test="rgCost != null">rgCost,</if>
+            <if test="refTaskNo != null">refTaskNo,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="taskno != null">#{taskno},</if>
+            <if test="taskname != null">#{taskname},</if>
+            <if test="iflag != null">#{iflag},</if>
+            <if test="hxzxname != null">#{hxzxname},</if>
+            <if test="xhid != null">#{xhid},</if>
+            <if test="yzjdname != null">#{yzjdname},</if>
+            <if test="yzsl != null">#{yzsl},</if>
+            <if test="tcdw != null">#{tcdw},</if>
+            <if test="Brief != null">#{Brief},</if>
+            <if test="zrbm != null">#{zrbm},</if>
+            <if test="jycs != null">#{jycs},</if>
+            <if test="tasktype != null">#{tasktype},</if>
+            <if test="auditPrice != null">#{auditPrice},</if>
+            <if test="businessManName != null">#{businessManName},</if>
+            <if test="lrsj != null">#{lrsj},</if>
+            <if test="sjkssj != null">#{sjkssj},</if>
+            <if test="jhwcsj != null">#{jhwcsj},</if>
+            <if test="ProcessPercent != null">#{ProcessPercent},</if>
+            <if test="EstimationCoat != null">#{EstimationCoat},</if>
+            <if test="contractfpe != null">#{contractfpe},</if>
+            <if test="sjCost != null">#{sjCost},</if>
+            <if test="clCost != null">#{clCost},</if>
+            <if test="wxCost != null">#{wxCost},</if>
+            <if test="zyCost != null">#{zyCost},</if>
+            <if test="gzCost != null">#{gzCost},</if>
+            <if test="rdCost != null">#{rdCost},</if>
+            <if test="glCost != null">#{glCost},</if>
+            <if test="rgCost != null">#{rgCost},</if>
+            <if test="refTaskNo != null">#{refTaskNo},</if>
+         </trim>
+    </insert>
+
+    <update id="updateFinanceBudget" parameterType="FinanceBudget">
+        update finance_budget
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="taskno != null">taskno = #{taskno},</if>
+            <if test="taskname != null">taskname = #{taskname},</if>
+            <if test="iflag != null">iflag = #{iflag},</if>
+            <if test="hxzxname != null">hxzxname = #{hxzxname},</if>
+            <if test="xhid != null">xhid = #{xhid},</if>
+            <if test="yzjdname != null">yzjdname = #{yzjdname},</if>
+            <if test="yzsl != null">yzsl = #{yzsl},</if>
+            <if test="tcdw != null">tcdw = #{tcdw},</if>
+            <if test="Brief != null">Brief = #{Brief},</if>
+            <if test="zrbm != null">zrbm = #{zrbm},</if>
+            <if test="jycs != null">jycs = #{jycs},</if>
+            <if test="tasktype != null">tasktype = #{tasktype},</if>
+            <if test="auditPrice != null">auditPrice = #{auditPrice},</if>
+            <if test="businessManName != null">businessManName = #{businessManName},</if>
+            <if test="lrsj != null">lrsj = #{lrsj},</if>
+            <if test="sjkssj != null">sjkssj = #{sjkssj},</if>
+            <if test="jhwcsj != null">jhwcsj = #{jhwcsj},</if>
+            <if test="ProcessPercent != null">ProcessPercent = #{ProcessPercent},</if>
+            <if test="EstimationCoat != null">EstimationCoat = #{EstimationCoat},</if>
+            <if test="contractfpe != null">contractfpe = #{contractfpe},</if>
+            <if test="sjCost != null">sjCost = #{sjCost},</if>
+            <if test="clCost != null">clCost = #{clCost},</if>
+            <if test="wxCost != null">wxCost = #{wxCost},</if>
+            <if test="zyCost != null">zyCost = #{zyCost},</if>
+            <if test="gzCost != null">gzCost = #{gzCost},</if>
+            <if test="rdCost != null">rdCost = #{rdCost},</if>
+            <if test="glCost != null">glCost = #{glCost},</if>
+            <if test="rgCost != null">rgCost = #{rgCost},</if>
+            <if test="refTaskNo != null">refTaskNo = #{refTaskNo},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteFinanceBudgetById" parameterType="Long">
+        delete from finance_budget where id = #{id}
+    </delete>
+
+    <delete id="deleteFinanceBudgetByIds" parameterType="String">
+        delete from finance_budget where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 157 - 0
base/src/main/resources/mapper/kyBg/KyBgInfoMapper.xml

@@ -0,0 +1,157 @@
+<?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.ruoyi.kyBg.mapper.KyBgInfoMapper">
+    
+    <resultMap type="KyBgInfo" id="KyBgInfoResult">
+        <result property="key"    column="key"    />
+        <result property="id"    column="id"    />
+        <result property="taskno"    column="taskno"    />
+        <result property="taskname"    column="taskname"    />
+        <result property="workcontent"    column="workcontent"    />
+        <result property="workhour"    column="workhour"    />
+        <result property="xhname"    column="xhname"    />
+        <result property="yzsl"    column="yzsl"    />
+        <result property="yzjdname"    column="yzjdname"    />
+        <result property="tcdw"    column="tcdw"    />
+        <result property="brief"    column="brief"    />
+        <result property="status"    column="status"    />
+        <result property="jhkssj"    column="jhkssj"    />
+        <result property="jhwcsj"    column="jhwcsj"    />
+        <result property="worktime"    column="worktime"    />
+        <result property="createtime"    column="createtime"    />
+        <result property="username"    column="username"    />
+        <result property="userdept"    column="userdept"    />
+        <result property="shr"    column="shr"    />
+        <result property="spr"    column="spr"    />
+        <result property="memo"    column="memo"    />
+    </resultMap>
+
+    <sql id="selectKyBgInfoVo">
+        select key, id, taskno, taskname, workcontent, workhour, xhname, yzsl, yzjdname, tcdw, brief, status, jhkssj, jhwcsj, worktime, createtime, username, userdept, shr, spr, memo from ky_bg_info
+    </sql>
+
+    <select id="selectKyBgInfoList" parameterType="KyBgInfo" resultMap="KyBgInfoResult">
+        <include refid="selectKyBgInfoVo"/>
+        <where>  
+            <if test="taskno != null  and taskno != ''"> and taskno = #{taskno}</if>
+            <if test="taskname != null  and taskname != ''"> and taskname like concat('%', #{taskname}, '%')</if>
+            <if test="workcontent != null  and workcontent != ''"> and workcontent = #{workcontent}</if>
+            <if test="workhour != null "> and workhour = #{workhour}</if>
+            <if test="xhname != null  and xhname != ''"> and xhname like concat('%', #{xhname}, '%')</if>
+            <if test="yzsl != null "> and yzsl = #{yzsl}</if>
+            <if test="yzjdname != null  and yzjdname != ''"> and yzjdname like concat('%', #{yzjdname}, '%')</if>
+            <if test="tcdw != null  and tcdw != ''"> and tcdw = #{tcdw}</if>
+            <if test="brief != null  and brief != ''"> and brief = #{brief}</if>
+            <if test="status != null  and status != ''"> and status = #{status}</if>
+            <if test="jhkssj != null "> and jhkssj = #{jhkssj}</if>
+            <if test="jhwcsj != null "> and jhwcsj = #{jhwcsj}</if>
+            <if test="worktime != null "> and worktime = #{worktime}</if>
+            <if test="createtime != null "> and createtime = #{createtime}</if>
+            <if test="username != null  and username != ''"> and username like concat('%', #{username}, '%')</if>
+            <if test="userdept != null  and userdept != ''"> and userdept = #{userdept}</if>
+            <if test="shr != null  and shr != ''"> and shr = #{shr}</if>
+            <if test="spr != null  and spr != ''"> and spr = #{spr}</if>
+            <if test="memo != null  and memo != ''"> and memo = #{memo}</if>
+        </where>
+    </select>
+    
+    <select id="selectKyBgInfoByKey" parameterType="Long" resultMap="KyBgInfoResult">
+        <include refid="selectKyBgInfoVo"/>
+        where key = #{key}
+    </select>
+    <select id="selectProjectCostFromKyBgInfoByTaskno" resultType="com.ruoyi.kyBg.domain.KyBgInfo">
+        select xhname,yzjdname,
+        from from ky_bg_info
+    </select>
+    <select id="selectKyBgInfoListByTaskno" resultType="com.ruoyi.kyBg.domain.KyBgInfo">
+        select userdept,taskno,workhour from ky_bg_info where taskno = #{taskno};
+    </select>
+
+    <insert id="insertKyBgInfo" parameterType="KyBgInfo" useGeneratedKeys="true" keyProperty="key">
+        insert into ky_bg_info
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">id,</if>
+            <if test="taskno != null">taskno,</if>
+            <if test="taskname != null">taskname,</if>
+            <if test="workcontent != null">workcontent,</if>
+            <if test="workhour != null">workhour,</if>
+            <if test="xhname != null">xhname,</if>
+            <if test="yzsl != null">yzsl,</if>
+            <if test="yzjdname != null">yzjdname,</if>
+            <if test="tcdw != null">tcdw,</if>
+            <if test="brief != null">brief,</if>
+            <if test="status != null">status,</if>
+            <if test="jhkssj != null">jhkssj,</if>
+            <if test="jhwcsj != null">jhwcsj,</if>
+            <if test="worktime != null">worktime,</if>
+            <if test="createtime != null">createtime,</if>
+            <if test="username != null">username,</if>
+            <if test="userdept != null">userdept,</if>
+            <if test="shr != null">shr,</if>
+            <if test="spr != null">spr,</if>
+            <if test="memo != null">memo,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="taskno != null">#{taskno},</if>
+            <if test="taskname != null">#{taskname},</if>
+            <if test="workcontent != null">#{workcontent},</if>
+            <if test="workhour != null">#{workhour},</if>
+            <if test="xhname != null">#{xhname},</if>
+            <if test="yzsl != null">#{yzsl},</if>
+            <if test="yzjdname != null">#{yzjdname},</if>
+            <if test="tcdw != null">#{tcdw},</if>
+            <if test="brief != null">#{brief},</if>
+            <if test="status != null">#{status},</if>
+            <if test="jhkssj != null">#{jhkssj},</if>
+            <if test="jhwcsj != null">#{jhwcsj},</if>
+            <if test="worktime != null">#{worktime},</if>
+            <if test="createtime != null">#{createtime},</if>
+            <if test="username != null">#{username},</if>
+            <if test="userdept != null">#{userdept},</if>
+            <if test="shr != null">#{shr},</if>
+            <if test="spr != null">#{spr},</if>
+            <if test="memo != null">#{memo},</if>
+         </trim>
+    </insert>
+
+    <update id="updateKyBgInfo" parameterType="KyBgInfo">
+        update ky_bg_info
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="id != null">id = #{id},</if>
+            <if test="taskno != null">taskno = #{taskno},</if>
+            <if test="taskname != null">taskname = #{taskname},</if>
+            <if test="workcontent != null">workcontent = #{workcontent},</if>
+            <if test="workhour != null">workhour = #{workhour},</if>
+            <if test="xhname != null">xhname = #{xhname},</if>
+            <if test="yzsl != null">yzsl = #{yzsl},</if>
+            <if test="yzjdname != null">yzjdname = #{yzjdname},</if>
+            <if test="tcdw != null">tcdw = #{tcdw},</if>
+            <if test="brief != null">brief = #{brief},</if>
+            <if test="status != null">status = #{status},</if>
+            <if test="jhkssj != null">jhkssj = #{jhkssj},</if>
+            <if test="jhwcsj != null">jhwcsj = #{jhwcsj},</if>
+            <if test="worktime != null">worktime = #{worktime},</if>
+            <if test="createtime != null">createtime = #{createtime},</if>
+            <if test="username != null">username = #{username},</if>
+            <if test="userdept != null">userdept = #{userdept},</if>
+            <if test="shr != null">shr = #{shr},</if>
+            <if test="spr != null">spr = #{spr},</if>
+            <if test="memo != null">memo = #{memo},</if>
+        </trim>
+        where key = #{key}
+    </update>
+
+    <delete id="deleteKyBgInfoByKey" parameterType="Long">
+        delete from ky_bg_info where key = #{key}
+    </delete>
+
+    <delete id="deleteKyBgInfoByKeys" parameterType="String">
+        delete from ky_bg_info where key in 
+        <foreach item="key" collection="array" open="(" separator="," close=")">
+            #{key}
+        </foreach>
+    </delete>
+</mapper>

文件差異過大導致無法顯示
+ 659 - 0
base/src/main/resources/mapper/kyTask/KyTaskInfoMapper.xml


+ 261 - 0
base/src/main/resources/mapper/mesInfo/MesInfoMapper.xml

@@ -0,0 +1,261 @@
+<?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.ruoyi.mesInfo.mapper.MesInfoMapper">
+    
+    <resultMap type="MesInfo" id="MesInfoResult">
+        <result property="keyId"    column="key_id"    />
+        <result property="taskno"    column="taskno"    />
+        <result property="wo"    column="wo"    />
+        <result property="mo"    column="mo"    />
+        <result property="serialNumber"    column="serial_number"    />
+        <result property="outNo"    column="out_no"    />
+        <result property="productNumber"    column="product_number"    />
+        <result property="id"    column="id"    />
+        <result property="pnCode"    column="pn_code"    />
+        <result property="pnName"    column="pn_name"    />
+        <result property="batchNo"    column="batch_no"    />
+        <result property="componentSn"    column="component_sn"    />
+        <result property="supplier"    column="supplier"    />
+        <result property="qualitygrate"    column="qualitygrate"    />
+        <result property="pcbItem"    column="pcb_item"    />
+        <result property="qty"    column="qty"    />
+        <result property="validDate"    column="valid_date"    />
+        <result property="filter"    column="filter"    />
+        <result property="remarks"    column="remarks"    />
+        <result property="updator"    column="updator"    />
+        <result property="updateDate"    column="update_date"    />
+        <result property="pcbItem2"    column="pcb_item2"    />
+        <result property="pnSpec"    column="pn_spec"    />
+        <result property="iqcSn"    column="iqc_sn"    />
+        <result property="workMan"    column="work_man"    />
+        <result property="workLocat"    column="work_locat"    />
+        <result property="checkMan"    column="check_man"    />
+        <result property="checkDate"    column="check_date"    />
+        <result property="pcbItemS"    column="pcb_item_s"    />
+        <result property="qtyS"    column="qty_s"    />
+        <result property="pcbItemR"    column="pcb_item_r"    />
+        <result property="qtyR"    column="qty_r"    />
+        <result property="pcbItemShow"    column="pcb_item_show"    />
+        <result property="pid"    column="pid"    />
+        <result property="dpano"    column="dpano"    />
+        <result property="technicalstandard"    column="technicalstandard"    />
+        <result property="iqcIndex"    column="iqc_index"    />
+        <result property="outStockNo"    column="out_stock_no"    />
+        <result property="boardNo"    column="board_no"    />
+        <result property="inbatchno"    column="inbatchno"    />
+        <result property="purchaseprice"    column="purchaseprice"    />
+        <result property="internalprice"    column="internalprice"    />
+    </resultMap>
+
+    <sql id="selectMesInfoVo">
+        select key_id, taskno, wo, mo, serial_number, out_no, product_number, id, pn_code, pn_name, batch_no, component_sn, supplier, qualitygrate, pcb_item, qty, valid_date, filter, remarks, updator, update_date, pcb_item2, pn_spec, iqc_sn, work_man, work_locat, check_man, check_date, pcb_item_s, qty_s, pcb_item_r, qty_r, pcb_item_show, pid, dpano, technicalstandard, iqc_index, out_stock_no, board_no, inbatchno, purchaseprice, internalprice from mes_info
+    </sql>
+
+    <select id="selectMesInfoList" parameterType="MesInfo" resultMap="MesInfoResult">
+        <include refid="selectMesInfoVo"/>
+        <where>  
+            <if test="taskno != null  and taskno != ''"> and taskno = #{taskno}</if>
+            <if test="wo != null  and wo != ''"> and wo = #{wo}</if>
+            <if test="mo != null  and mo != ''"> and mo = #{mo}</if>
+            <if test="serialNumber != null  and serialNumber != ''"> and serial_number = #{serialNumber}</if>
+            <if test="outNo != null  and outNo != ''"> and out_no = #{outNo}</if>
+            <if test="productNumber != null  and productNumber != ''"> and product_number = #{productNumber}</if>
+            <if test="pnCode != null  and pnCode != ''"> and pn_code = #{pnCode}</if>
+            <if test="pnName != null  and pnName != ''"> and pn_name like concat('%', #{pnName}, '%')</if>
+            <if test="batchNo != null  and batchNo != ''"> and batch_no = #{batchNo}</if>
+            <if test="componentSn != null  and componentSn != ''"> and component_sn = #{componentSn}</if>
+            <if test="supplier != null  and supplier != ''"> and supplier = #{supplier}</if>
+            <if test="qualitygrate != null  and qualitygrate != ''"> and qualitygrate = #{qualitygrate}</if>
+            <if test="pcbItem != null  and pcbItem != ''"> and pcb_item = #{pcbItem}</if>
+            <if test="qty != null "> and qty = #{qty}</if>
+            <if test="validDate != null "> and valid_date = #{validDate}</if>
+            <if test="filter != null  and filter != ''"> and filter = #{filter}</if>
+            <if test="remarks != null  and remarks != ''"> and remarks = #{remarks}</if>
+            <if test="updator != null  and updator != ''"> and updator = #{updator}</if>
+            <if test="updateDate != null "> and update_date = #{updateDate}</if>
+            <if test="pcbItem2 != null  and pcbItem2 != ''"> and pcb_item2 = #{pcbItem2}</if>
+            <if test="pnSpec != null  and pnSpec != ''"> and pn_spec = #{pnSpec}</if>
+            <if test="iqcSn != null  and iqcSn != ''"> and iqc_sn = #{iqcSn}</if>
+            <if test="workMan != null  and workMan != ''"> and work_man = #{workMan}</if>
+            <if test="workLocat != null  and workLocat != ''"> and work_locat = #{workLocat}</if>
+            <if test="checkMan != null  and checkMan != ''"> and check_man = #{checkMan}</if>
+            <if test="checkDate != null "> and check_date = #{checkDate}</if>
+            <if test="pcbItemS != null  and pcbItemS != ''"> and pcb_item_s = #{pcbItemS}</if>
+            <if test="qtyS != null "> and qty_s = #{qtyS}</if>
+            <if test="pcbItemR != null  and pcbItemR != ''"> and pcb_item_r = #{pcbItemR}</if>
+            <if test="qtyR != null "> and qty_r = #{qtyR}</if>
+            <if test="pcbItemShow != null  and pcbItemShow != ''"> and pcb_item_show = #{pcbItemShow}</if>
+            <if test="pid != null  and pid != ''"> and pid = #{pid}</if>
+            <if test="dpano != null  and dpano != ''"> and dpano = #{dpano}</if>
+            <if test="technicalstandard != null  and technicalstandard != ''"> and technicalstandard = #{technicalstandard}</if>
+            <if test="iqcIndex != null  and iqcIndex != ''"> and iqc_index = #{iqcIndex}</if>
+            <if test="outStockNo != null  and outStockNo != ''"> and out_stock_no = #{outStockNo}</if>
+            <if test="boardNo != null  and boardNo != ''"> and board_no = #{boardNo}</if>
+            <if test="inbatchno != null  and inbatchno != ''"> and inbatchno = #{inbatchno}</if>
+            <if test="purchaseprice != null "> and purchaseprice = #{purchaseprice}</if>
+            <if test="internalprice != null "> and internalprice = #{internalprice}</if>
+        </where>
+    </select>
+    
+    <select id="selectMesInfoByKeyId" parameterType="Long" resultMap="MesInfoResult">
+        <include refid="selectMesInfoVo"/>
+        where key_id = #{keyId}
+    </select>
+    <select id="selectCheckPoint" resultType="java.lang.Long">
+        select checkPoint from mes_info_watermark where id = 1;
+    </select>
+    <select id="getMesInfoMaxKeyId" resultType="java.lang.Long">
+        select max(key_id) from mes_info
+    </select>
+
+    <insert id="insertMesInfo" parameterType="MesInfo" useGeneratedKeys="true" keyProperty="keyId">
+        insert into mes_info
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="taskno != null">taskno,</if>
+            <if test="wo != null">wo,</if>
+            <if test="mo != null">mo,</if>
+            <if test="serialNumber != null">serial_number,</if>
+            <if test="outNo != null">out_no,</if>
+            <if test="productNumber != null">product_number,</if>
+            <if test="id != null">id,</if>
+            <if test="pnCode != null">pn_code,</if>
+            <if test="pnName != null">pn_name,</if>
+            <if test="batchNo != null">batch_no,</if>
+            <if test="componentSn != null">component_sn,</if>
+            <if test="supplier != null">supplier,</if>
+            <if test="qualitygrate != null">qualitygrate,</if>
+            <if test="pcbItem != null">pcb_item,</if>
+            <if test="qty != null">qty,</if>
+            <if test="validDate != null">valid_date,</if>
+            <if test="filter != null">filter,</if>
+            <if test="remarks != null">remarks,</if>
+            <if test="updator != null">updator,</if>
+            <if test="updateDate != null">update_date,</if>
+            <if test="pcbItem2 != null">pcb_item2,</if>
+            <if test="pnSpec != null">pn_spec,</if>
+            <if test="iqcSn != null">iqc_sn,</if>
+            <if test="workMan != null">work_man,</if>
+            <if test="workLocat != null">work_locat,</if>
+            <if test="checkMan != null">check_man,</if>
+            <if test="checkDate != null">check_date,</if>
+            <if test="pcbItemS != null">pcb_item_s,</if>
+            <if test="qtyS != null">qty_s,</if>
+            <if test="pcbItemR != null">pcb_item_r,</if>
+            <if test="qtyR != null">qty_r,</if>
+            <if test="pcbItemShow != null">pcb_item_show,</if>
+            <if test="pid != null">pid,</if>
+            <if test="dpano != null">dpano,</if>
+            <if test="technicalstandard != null">technicalstandard,</if>
+            <if test="iqcIndex != null">iqc_index,</if>
+            <if test="outStockNo != null">out_stock_no,</if>
+            <if test="boardNo != null">board_no,</if>
+            <if test="inbatchno != null">inbatchno,</if>
+            <if test="purchaseprice != null">purchaseprice,</if>
+            <if test="internalprice != null">internalprice,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="taskno != null">#{taskno},</if>
+            <if test="wo != null">#{wo},</if>
+            <if test="mo != null">#{mo},</if>
+            <if test="serialNumber != null">#{serialNumber},</if>
+            <if test="outNo != null">#{outNo},</if>
+            <if test="productNumber != null">#{productNumber},</if>
+            <if test="id != null">#{id},</if>
+            <if test="pnCode != null">#{pnCode},</if>
+            <if test="pnName != null">#{pnName},</if>
+            <if test="batchNo != null">#{batchNo},</if>
+            <if test="componentSn != null">#{componentSn},</if>
+            <if test="supplier != null">#{supplier},</if>
+            <if test="qualitygrate != null">#{qualitygrate},</if>
+            <if test="pcbItem != null">#{pcbItem},</if>
+            <if test="qty != null">#{qty},</if>
+            <if test="validDate != null">#{validDate},</if>
+            <if test="filter != null">#{filter},</if>
+            <if test="remarks != null">#{remarks},</if>
+            <if test="updator != null">#{updator},</if>
+            <if test="updateDate != null">#{updateDate},</if>
+            <if test="pcbItem2 != null">#{pcbItem2},</if>
+            <if test="pnSpec != null">#{pnSpec},</if>
+            <if test="iqcSn != null">#{iqcSn},</if>
+            <if test="workMan != null">#{workMan},</if>
+            <if test="workLocat != null">#{workLocat},</if>
+            <if test="checkMan != null">#{checkMan},</if>
+            <if test="checkDate != null">#{checkDate},</if>
+            <if test="pcbItemS != null">#{pcbItemS},</if>
+            <if test="qtyS != null">#{qtyS},</if>
+            <if test="pcbItemR != null">#{pcbItemR},</if>
+            <if test="qtyR != null">#{qtyR},</if>
+            <if test="pcbItemShow != null">#{pcbItemShow},</if>
+            <if test="pid != null">#{pid},</if>
+            <if test="dpano != null">#{dpano},</if>
+            <if test="technicalstandard != null">#{technicalstandard},</if>
+            <if test="iqcIndex != null">#{iqcIndex},</if>
+            <if test="outStockNo != null">#{outStockNo},</if>
+            <if test="boardNo != null">#{boardNo},</if>
+            <if test="inbatchno != null">#{inbatchno},</if>
+            <if test="purchaseprice != null">#{purchaseprice},</if>
+            <if test="internalprice != null">#{internalprice},</if>
+         </trim>
+    </insert>
+
+    <update id="updateMesInfo" parameterType="MesInfo">
+        update mes_info
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="taskno != null">taskno = #{taskno},</if>
+            <if test="wo != null">wo = #{wo},</if>
+            <if test="mo != null">mo = #{mo},</if>
+            <if test="serialNumber != null">serial_number = #{serialNumber},</if>
+            <if test="outNo != null">out_no = #{outNo},</if>
+            <if test="productNumber != null">product_number = #{productNumber},</if>
+            <if test="id != null">id = #{id},</if>
+            <if test="pnCode != null">pn_code = #{pnCode},</if>
+            <if test="pnName != null">pn_name = #{pnName},</if>
+            <if test="batchNo != null">batch_no = #{batchNo},</if>
+            <if test="componentSn != null">component_sn = #{componentSn},</if>
+            <if test="supplier != null">supplier = #{supplier},</if>
+            <if test="qualitygrate != null">qualitygrate = #{qualitygrate},</if>
+            <if test="pcbItem != null">pcb_item = #{pcbItem},</if>
+            <if test="qty != null">qty = #{qty},</if>
+            <if test="validDate != null">valid_date = #{validDate},</if>
+            <if test="filter != null">filter = #{filter},</if>
+            <if test="remarks != null">remarks = #{remarks},</if>
+            <if test="updator != null">updator = #{updator},</if>
+            <if test="updateDate != null">update_date = #{updateDate},</if>
+            <if test="pcbItem2 != null">pcb_item2 = #{pcbItem2},</if>
+            <if test="pnSpec != null">pn_spec = #{pnSpec},</if>
+            <if test="iqcSn != null">iqc_sn = #{iqcSn},</if>
+            <if test="workMan != null">work_man = #{workMan},</if>
+            <if test="workLocat != null">work_locat = #{workLocat},</if>
+            <if test="checkMan != null">check_man = #{checkMan},</if>
+            <if test="checkDate != null">check_date = #{checkDate},</if>
+            <if test="pcbItemS != null">pcb_item_s = #{pcbItemS},</if>
+            <if test="qtyS != null">qty_s = #{qtyS},</if>
+            <if test="pcbItemR != null">pcb_item_r = #{pcbItemR},</if>
+            <if test="qtyR != null">qty_r = #{qtyR},</if>
+            <if test="pcbItemShow != null">pcb_item_show = #{pcbItemShow},</if>
+            <if test="pid != null">pid = #{pid},</if>
+            <if test="dpano != null">dpano = #{dpano},</if>
+            <if test="technicalstandard != null">technicalstandard = #{technicalstandard},</if>
+            <if test="iqcIndex != null">iqc_index = #{iqcIndex},</if>
+            <if test="outStockNo != null">out_stock_no = #{outStockNo},</if>
+            <if test="boardNo != null">board_no = #{boardNo},</if>
+            <if test="inbatchno != null">inbatchno = #{inbatchno},</if>
+            <if test="purchaseprice != null">purchaseprice = #{purchaseprice},</if>
+            <if test="internalprice != null">internalprice = #{internalprice},</if>
+        </trim>
+        where key_id = #{keyId}
+    </update>
+
+    <delete id="deleteMesInfoByKeyId" parameterType="Long">
+        delete from mes_info where key_id = #{keyId}
+    </delete>
+
+    <delete id="deleteMesInfoByKeyIds" parameterType="String">
+        delete from mes_info where key_id in 
+        <foreach item="keyId" collection="array" open="(" separator="," close=")">
+            #{keyId}
+        </foreach>
+    </delete>
+</mapper>

+ 168 - 0
base/src/main/resources/mapper/projectChbSwf/KzksProjectChbSwfMapper.xml

@@ -0,0 +1,168 @@
+<?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.ruoyi.projectChbSwf.mapper.KzksProjectChbSwfMapper">
+    
+    <resultMap type="KzksProjectChbSwf" id="KzksProjectChbSwfResult">
+        <result property="id"    column="id"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="sysOrgCode"    column="sys_org_code"    />
+        <result property="nd"    column="nd"    />
+        <result property="pzrq"    column="pzrq"    />
+        <result property="pzh"    column="pzh"    />
+        <result property="zy"    column="zy"    />
+        <result property="kmbh"    column="kmbh"    />
+        <result property="km"    column="km"    />
+        <result property="fx"    column="fx"    />
+        <result property="je"    column="je"    />
+        <result property="bm"    column="bm"    />
+        <result property="wldw"    column="wldw"    />
+        <result property="fzje"    column="fzje"    />
+        <result property="zdr"    column="zdr"    />
+        <result property="kjqj"    column="kjqj"    />
+        <result property="pznm"    column="pznm"    />
+        <result property="xmbh"    column="xmbh"    />
+        <result property="xmmc"    column="xmmc"    />
+        <result property="xmlb"    column="xmlb"    />
+        <result property="taskno"    column="taskno"    />
+    </resultMap>
+
+    <sql id="selectKzksProjectChbSwfVo">
+        select id, create_by, create_time, update_by, update_time, sys_org_code, nd, pzrq, pzh, zy, kmbh, km, fx, je, bm, wldw, fzje, zdr, kjqj, pznm, xmbh, xmmc, xmlb, taskno from kzks_project_chb_swf
+    </sql>
+
+    <select id="selectKzksProjectChbSwfList" parameterType="KzksProjectChbSwf" resultMap="KzksProjectChbSwfResult">
+        <include refid="selectKzksProjectChbSwfVo"/>
+        <where>  
+            <if test="sysOrgCode != null  and sysOrgCode != ''"> and sys_org_code = #{sysOrgCode}</if>
+            <if test="nd != null  and nd != ''"> and nd = #{nd}</if>
+            <if test="pzrq != null  and pzrq != ''"> and pzrq = #{pzrq}</if>
+            <if test="pzh != null  and pzh != ''"> and pzh = #{pzh}</if>
+            <if test="zy != null  and zy != ''"> and zy = #{zy}</if>
+            <if test="kmbh != null  and kmbh != ''"> and kmbh = #{kmbh}</if>
+            <if test="km != null  and km != ''"> and km = #{km}</if>
+            <if test="fx != null  and fx != ''"> and fx = #{fx}</if>
+            <if test="je != null  and je != ''"> and je = #{je}</if>
+            <if test="bm != null  and bm != ''"> and bm = #{bm}</if>
+            <if test="wldw != null  and wldw != ''"> and wldw = #{wldw}</if>
+            <if test="fzje != null  and fzje != ''"> and fzje = #{fzje}</if>
+            <if test="zdr != null  and zdr != ''"> and zdr = #{zdr}</if>
+            <if test="kjqj != null  and kjqj != ''"> and kjqj = #{kjqj}</if>
+            <if test="pznm != null  and pznm != ''"> and pznm = #{pznm}</if>
+            <if test="xmbh != null  and xmbh != ''"> and xmbh = #{xmbh}</if>
+            <if test="xmmc != null  and xmmc != ''"> and xmmc = #{xmmc}</if>
+            <if test="xmlb != null  and xmlb != ''"> and xmlb = #{xmlb}</if>
+            <if test="taskno != null  and taskno != ''"> and taskno = #{taskno}</if>
+        </where>
+    </select>
+    
+    <select id="selectKzksProjectChbSwfById" parameterType="String" resultMap="KzksProjectChbSwfResult">
+        <include refid="selectKzksProjectChbSwfVo"/>
+        where id = #{id}
+    </select>
+
+    <select id="selectSwfByTaskno" resultType="java.math.BigDecimal">
+        select SUM(fzje),taskno from kzks_project_chb_swf where taskno = #{taskno}
+    </select>
+
+    <insert id="insertKzksProjectChbSwf" parameterType="KzksProjectChbSwf">
+        insert into kzks_project_chb_swf
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">id,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="sysOrgCode != null">sys_org_code,</if>
+            <if test="nd != null">nd,</if>
+            <if test="pzrq != null">pzrq,</if>
+            <if test="pzh != null">pzh,</if>
+            <if test="zy != null">zy,</if>
+            <if test="kmbh != null">kmbh,</if>
+            <if test="km != null">km,</if>
+            <if test="fx != null">fx,</if>
+            <if test="je != null">je,</if>
+            <if test="bm != null">bm,</if>
+            <if test="wldw != null">wldw,</if>
+            <if test="fzje != null">fzje,</if>
+            <if test="zdr != null">zdr,</if>
+            <if test="kjqj != null">kjqj,</if>
+            <if test="pznm != null">pznm,</if>
+            <if test="xmbh != null">xmbh,</if>
+            <if test="xmmc != null">xmmc,</if>
+            <if test="xmlb != null">xmlb,</if>
+            <if test="taskno != null">taskno,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="sysOrgCode != null">#{sysOrgCode},</if>
+            <if test="nd != null">#{nd},</if>
+            <if test="pzrq != null">#{pzrq},</if>
+            <if test="pzh != null">#{pzh},</if>
+            <if test="zy != null">#{zy},</if>
+            <if test="kmbh != null">#{kmbh},</if>
+            <if test="km != null">#{km},</if>
+            <if test="fx != null">#{fx},</if>
+            <if test="je != null">#{je},</if>
+            <if test="bm != null">#{bm},</if>
+            <if test="wldw != null">#{wldw},</if>
+            <if test="fzje != null">#{fzje},</if>
+            <if test="zdr != null">#{zdr},</if>
+            <if test="kjqj != null">#{kjqj},</if>
+            <if test="pznm != null">#{pznm},</if>
+            <if test="xmbh != null">#{xmbh},</if>
+            <if test="xmmc != null">#{xmmc},</if>
+            <if test="xmlb != null">#{xmlb},</if>
+            <if test="taskno != null">#{taskno},</if>
+         </trim>
+    </insert>
+
+    <update id="updateKzksProjectChbSwf" parameterType="KzksProjectChbSwf">
+        update kzks_project_chb_swf
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="sysOrgCode != null">sys_org_code = #{sysOrgCode},</if>
+            <if test="nd != null">nd = #{nd},</if>
+            <if test="pzrq != null">pzrq = #{pzrq},</if>
+            <if test="pzh != null">pzh = #{pzh},</if>
+            <if test="zy != null">zy = #{zy},</if>
+            <if test="kmbh != null">kmbh = #{kmbh},</if>
+            <if test="km != null">km = #{km},</if>
+            <if test="fx != null">fx = #{fx},</if>
+            <if test="je != null">je = #{je},</if>
+            <if test="bm != null">bm = #{bm},</if>
+            <if test="wldw != null">wldw = #{wldw},</if>
+            <if test="fzje != null">fzje = #{fzje},</if>
+            <if test="zdr != null">zdr = #{zdr},</if>
+            <if test="kjqj != null">kjqj = #{kjqj},</if>
+            <if test="pznm != null">pznm = #{pznm},</if>
+            <if test="xmbh != null">xmbh = #{xmbh},</if>
+            <if test="xmmc != null">xmmc = #{xmmc},</if>
+            <if test="xmlb != null">xmlb = #{xmlb},</if>
+            <if test="taskno != null">taskno = #{taskno},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteKzksProjectChbSwfById" parameterType="String">
+        delete from kzks_project_chb_swf where id = #{id}
+    </delete>
+
+    <delete id="deleteKzksProjectChbSwfByIds" parameterType="String">
+        delete from kzks_project_chb_swf where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 167 - 0
base/src/main/resources/mapper/projectChbWxf/KzksProjectChbWxfMapper.xml

@@ -0,0 +1,167 @@
+<?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.ruoyi.projectChbWxf.mapper.KzksProjectChbWxfMapper">
+    
+    <resultMap type="KzksProjectChbWxf" id="KzksProjectChbWxfResult">
+        <result property="id"    column="id"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="sysOrgCode"    column="sys_org_code"    />
+        <result property="nd"    column="nd"    />
+        <result property="pzrq"    column="pzrq"    />
+        <result property="pzh"    column="pzh"    />
+        <result property="zy"    column="zy"    />
+        <result property="kmbh"    column="kmbh"    />
+        <result property="km"    column="km"    />
+        <result property="fx"    column="fx"    />
+        <result property="je"    column="je"    />
+        <result property="bm"    column="bm"    />
+        <result property="wldw"    column="wldw"    />
+        <result property="fzje"    column="fzje"    />
+        <result property="zdr"    column="zdr"    />
+        <result property="kjqj"    column="kjqj"    />
+        <result property="pznm"    column="pznm"    />
+        <result property="xmbh"    column="xmbh"    />
+        <result property="xmmc"    column="xmmc"    />
+        <result property="xmlb"    column="xmlb"    />
+        <result property="taskno"    column="taskno"    />
+    </resultMap>
+
+    <sql id="selectKzksProjectChbWxfVo">
+        select id, create_by, create_time, update_by, update_time, sys_org_code, nd, pzrq, pzh, zy, kmbh, km, fx, je, bm, wldw, fzje, zdr, kjqj, pznm, xmbh, xmmc, xmlb, taskno from kzks_project_chb_wxf
+    </sql>
+
+    <select id="selectKzksProjectChbWxfList" parameterType="KzksProjectChbWxf" resultMap="KzksProjectChbWxfResult">
+        <include refid="selectKzksProjectChbWxfVo"/>
+        <where>  
+            <if test="sysOrgCode != null  and sysOrgCode != ''"> and sys_org_code = #{sysOrgCode}</if>
+            <if test="nd != null  and nd != ''"> and nd = #{nd}</if>
+            <if test="pzrq != null  and pzrq != ''"> and pzrq = #{pzrq}</if>
+            <if test="pzh != null  and pzh != ''"> and pzh = #{pzh}</if>
+            <if test="zy != null  and zy != ''"> and zy = #{zy}</if>
+            <if test="kmbh != null  and kmbh != ''"> and kmbh = #{kmbh}</if>
+            <if test="km != null  and km != ''"> and km = #{km}</if>
+            <if test="fx != null  and fx != ''"> and fx = #{fx}</if>
+            <if test="je != null  and je != ''"> and je = #{je}</if>
+            <if test="bm != null  and bm != ''"> and bm = #{bm}</if>
+            <if test="wldw != null  and wldw != ''"> and wldw = #{wldw}</if>
+            <if test="fzje != null  and fzje != ''"> and fzje = #{fzje}</if>
+            <if test="zdr != null  and zdr != ''"> and zdr = #{zdr}</if>
+            <if test="kjqj != null  and kjqj != ''"> and kjqj = #{kjqj}</if>
+            <if test="pznm != null  and pznm != ''"> and pznm = #{pznm}</if>
+            <if test="xmbh != null  and xmbh != ''"> and xmbh = #{xmbh}</if>
+            <if test="xmmc != null  and xmmc != ''"> and xmmc = #{xmmc}</if>
+            <if test="xmlb != null  and xmlb != ''"> and xmlb = #{xmlb}</if>
+            <if test="taskno != null  and taskno != ''"> and taskno = #{taskno}</if>
+        </where>
+    </select>
+    
+    <select id="selectKzksProjectChbWxfById" parameterType="String" resultMap="KzksProjectChbWxfResult">
+        <include refid="selectKzksProjectChbWxfVo"/>
+        where id = #{id}
+    </select>
+    <select id="selectWxfByTaskno" resultType="java.math.BigDecimal">
+        select SUM(fzje),taskno from kzks_project_chb_wxf where taskno = #{taskno}
+    </select>
+
+    <insert id="insertKzksProjectChbWxf" parameterType="KzksProjectChbWxf">
+        insert into kzks_project_chb_wxf
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">id,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="sysOrgCode != null">sys_org_code,</if>
+            <if test="nd != null">nd,</if>
+            <if test="pzrq != null">pzrq,</if>
+            <if test="pzh != null">pzh,</if>
+            <if test="zy != null">zy,</if>
+            <if test="kmbh != null">kmbh,</if>
+            <if test="km != null">km,</if>
+            <if test="fx != null">fx,</if>
+            <if test="je != null">je,</if>
+            <if test="bm != null">bm,</if>
+            <if test="wldw != null">wldw,</if>
+            <if test="fzje != null">fzje,</if>
+            <if test="zdr != null">zdr,</if>
+            <if test="kjqj != null">kjqj,</if>
+            <if test="pznm != null">pznm,</if>
+            <if test="xmbh != null">xmbh,</if>
+            <if test="xmmc != null">xmmc,</if>
+            <if test="xmlb != null">xmlb,</if>
+            <if test="taskno != null">taskno,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="sysOrgCode != null">#{sysOrgCode},</if>
+            <if test="nd != null">#{nd},</if>
+            <if test="pzrq != null">#{pzrq},</if>
+            <if test="pzh != null">#{pzh},</if>
+            <if test="zy != null">#{zy},</if>
+            <if test="kmbh != null">#{kmbh},</if>
+            <if test="km != null">#{km},</if>
+            <if test="fx != null">#{fx},</if>
+            <if test="je != null">#{je},</if>
+            <if test="bm != null">#{bm},</if>
+            <if test="wldw != null">#{wldw},</if>
+            <if test="fzje != null">#{fzje},</if>
+            <if test="zdr != null">#{zdr},</if>
+            <if test="kjqj != null">#{kjqj},</if>
+            <if test="pznm != null">#{pznm},</if>
+            <if test="xmbh != null">#{xmbh},</if>
+            <if test="xmmc != null">#{xmmc},</if>
+            <if test="xmlb != null">#{xmlb},</if>
+            <if test="taskno != null">#{taskno},</if>
+         </trim>
+    </insert>
+
+    <update id="updateKzksProjectChbWxf" parameterType="KzksProjectChbWxf">
+        update kzks_project_chb_wxf
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="sysOrgCode != null">sys_org_code = #{sysOrgCode},</if>
+            <if test="nd != null">nd = #{nd},</if>
+            <if test="pzrq != null">pzrq = #{pzrq},</if>
+            <if test="pzh != null">pzh = #{pzh},</if>
+            <if test="zy != null">zy = #{zy},</if>
+            <if test="kmbh != null">kmbh = #{kmbh},</if>
+            <if test="km != null">km = #{km},</if>
+            <if test="fx != null">fx = #{fx},</if>
+            <if test="je != null">je = #{je},</if>
+            <if test="bm != null">bm = #{bm},</if>
+            <if test="wldw != null">wldw = #{wldw},</if>
+            <if test="fzje != null">fzje = #{fzje},</if>
+            <if test="zdr != null">zdr = #{zdr},</if>
+            <if test="kjqj != null">kjqj = #{kjqj},</if>
+            <if test="pznm != null">pznm = #{pznm},</if>
+            <if test="xmbh != null">xmbh = #{xmbh},</if>
+            <if test="xmmc != null">xmmc = #{xmmc},</if>
+            <if test="xmlb != null">xmlb = #{xmlb},</if>
+            <if test="taskno != null">taskno = #{taskno},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteKzksProjectChbWxfById" parameterType="String">
+        delete from kzks_project_chb_wxf where id = #{id}
+    </delete>
+
+    <delete id="deleteKzksProjectChbWxfByIds" parameterType="String">
+        delete from kzks_project_chb_wxf where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 167 - 0
base/src/main/resources/mapper/projectChbZyf/KzksProjectChbZyfMapper.xml

@@ -0,0 +1,167 @@
+<?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.ruoyi.projectChbZyf.mapper.KzksProjectChbZyfMapper">
+    
+    <resultMap type="KzksProjectChbZyf" id="KzksProjectChbZyfResult">
+        <result property="id"    column="id"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="sysOrgCode"    column="sys_org_code"    />
+        <result property="nd"    column="nd"    />
+        <result property="pzrq"    column="pzrq"    />
+        <result property="pzh"    column="pzh"    />
+        <result property="zy"    column="zy"    />
+        <result property="kmbh"    column="kmbh"    />
+        <result property="km"    column="km"    />
+        <result property="fx"    column="fx"    />
+        <result property="je"    column="je"    />
+        <result property="bm"    column="bm"    />
+        <result property="wldw"    column="wldw"    />
+        <result property="fzje"    column="fzje"    />
+        <result property="zdr"    column="zdr"    />
+        <result property="kjqj"    column="kjqj"    />
+        <result property="pznm"    column="pznm"    />
+        <result property="xmbh"    column="xmbh"    />
+        <result property="xmmc"    column="xmmc"    />
+        <result property="xmlb"    column="xmlb"    />
+        <result property="taskno"    column="taskno"    />
+    </resultMap>
+
+    <sql id="selectKzksProjectChbZyfVo">
+        select id, create_by, create_time, update_by, update_time, sys_org_code, nd, pzrq, pzh, zy, kmbh, km, fx, je, bm, wldw, fzje, zdr, kjqj, pznm, xmbh, xmmc, xmlb, taskno from kzks_project_chb_zyf
+    </sql>
+
+    <select id="selectKzksProjectChbZyfList" parameterType="KzksProjectChbZyf" resultMap="KzksProjectChbZyfResult">
+        <include refid="selectKzksProjectChbZyfVo"/>
+        <where>  
+            <if test="sysOrgCode != null  and sysOrgCode != ''"> and sys_org_code = #{sysOrgCode}</if>
+            <if test="nd != null  and nd != ''"> and nd = #{nd}</if>
+            <if test="pzrq != null  and pzrq != ''"> and pzrq = #{pzrq}</if>
+            <if test="pzh != null  and pzh != ''"> and pzh = #{pzh}</if>
+            <if test="zy != null  and zy != ''"> and zy = #{zy}</if>
+            <if test="kmbh != null  and kmbh != ''"> and kmbh = #{kmbh}</if>
+            <if test="km != null  and km != ''"> and km = #{km}</if>
+            <if test="fx != null  and fx != ''"> and fx = #{fx}</if>
+            <if test="je != null  and je != ''"> and je = #{je}</if>
+            <if test="bm != null  and bm != ''"> and bm = #{bm}</if>
+            <if test="wldw != null  and wldw != ''"> and wldw = #{wldw}</if>
+            <if test="fzje != null  and fzje != ''"> and fzje = #{fzje}</if>
+            <if test="zdr != null  and zdr != ''"> and zdr = #{zdr}</if>
+            <if test="kjqj != null  and kjqj != ''"> and kjqj = #{kjqj}</if>
+            <if test="pznm != null  and pznm != ''"> and pznm = #{pznm}</if>
+            <if test="xmbh != null  and xmbh != ''"> and xmbh = #{xmbh}</if>
+            <if test="xmmc != null  and xmmc != ''"> and xmmc = #{xmmc}</if>
+            <if test="xmlb != null  and xmlb != ''"> and xmlb = #{xmlb}</if>
+            <if test="taskno != null  and taskno != ''"> and taskno = #{taskno}</if>
+        </where>
+    </select>
+    
+    <select id="selectKzksProjectChbZyfById" parameterType="String" resultMap="KzksProjectChbZyfResult">
+        <include refid="selectKzksProjectChbZyfVo"/>
+        where id = #{id}
+    </select>
+    <select id="selectZyfByTaskno" resultType="java.math.BigDecimal">
+        select SUM(fzje),taskno from kzks_project_chb_zyf where taskno = #{taskno}
+    </select>
+
+    <insert id="insertKzksProjectChbZyf" parameterType="KzksProjectChbZyf">
+        insert into kzks_project_chb_zyf
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">id,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="sysOrgCode != null">sys_org_code,</if>
+            <if test="nd != null">nd,</if>
+            <if test="pzrq != null">pzrq,</if>
+            <if test="pzh != null">pzh,</if>
+            <if test="zy != null">zy,</if>
+            <if test="kmbh != null">kmbh,</if>
+            <if test="km != null">km,</if>
+            <if test="fx != null">fx,</if>
+            <if test="je != null">je,</if>
+            <if test="bm != null">bm,</if>
+            <if test="wldw != null">wldw,</if>
+            <if test="fzje != null">fzje,</if>
+            <if test="zdr != null">zdr,</if>
+            <if test="kjqj != null">kjqj,</if>
+            <if test="pznm != null">pznm,</if>
+            <if test="xmbh != null">xmbh,</if>
+            <if test="xmmc != null">xmmc,</if>
+            <if test="xmlb != null">xmlb,</if>
+            <if test="taskno != null">taskno,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="sysOrgCode != null">#{sysOrgCode},</if>
+            <if test="nd != null">#{nd},</if>
+            <if test="pzrq != null">#{pzrq},</if>
+            <if test="pzh != null">#{pzh},</if>
+            <if test="zy != null">#{zy},</if>
+            <if test="kmbh != null">#{kmbh},</if>
+            <if test="km != null">#{km},</if>
+            <if test="fx != null">#{fx},</if>
+            <if test="je != null">#{je},</if>
+            <if test="bm != null">#{bm},</if>
+            <if test="wldw != null">#{wldw},</if>
+            <if test="fzje != null">#{fzje},</if>
+            <if test="zdr != null">#{zdr},</if>
+            <if test="kjqj != null">#{kjqj},</if>
+            <if test="pznm != null">#{pznm},</if>
+            <if test="xmbh != null">#{xmbh},</if>
+            <if test="xmmc != null">#{xmmc},</if>
+            <if test="xmlb != null">#{xmlb},</if>
+            <if test="taskno != null">#{taskno},</if>
+         </trim>
+    </insert>
+
+    <update id="updateKzksProjectChbZyf" parameterType="KzksProjectChbZyf">
+        update kzks_project_chb_zyf
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="sysOrgCode != null">sys_org_code = #{sysOrgCode},</if>
+            <if test="nd != null">nd = #{nd},</if>
+            <if test="pzrq != null">pzrq = #{pzrq},</if>
+            <if test="pzh != null">pzh = #{pzh},</if>
+            <if test="zy != null">zy = #{zy},</if>
+            <if test="kmbh != null">kmbh = #{kmbh},</if>
+            <if test="km != null">km = #{km},</if>
+            <if test="fx != null">fx = #{fx},</if>
+            <if test="je != null">je = #{je},</if>
+            <if test="bm != null">bm = #{bm},</if>
+            <if test="wldw != null">wldw = #{wldw},</if>
+            <if test="fzje != null">fzje = #{fzje},</if>
+            <if test="zdr != null">zdr = #{zdr},</if>
+            <if test="kjqj != null">kjqj = #{kjqj},</if>
+            <if test="pznm != null">pznm = #{pznm},</if>
+            <if test="xmbh != null">xmbh = #{xmbh},</if>
+            <if test="xmmc != null">xmmc = #{xmmc},</if>
+            <if test="xmlb != null">xmlb = #{xmlb},</if>
+            <if test="taskno != null">taskno = #{taskno},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteKzksProjectChbZyfById" parameterType="String">
+        delete from kzks_project_chb_zyf where id = #{id}
+    </delete>
+
+    <delete id="deleteKzksProjectChbZyfByIds" parameterType="String">
+        delete from kzks_project_chb_zyf where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 330 - 0
base/src/main/resources/mapper/projectCost/ProjectCostMapper.xml

@@ -0,0 +1,330 @@
+<?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.ruoyi.projectCost.mapper.ProjectCostMapper">
+    
+    <resultMap type="ProjectCost" id="ProjectCostResult">
+        <result property="id"    column="id"    />
+        <result property="taskno"    column="taskno"    />
+        <result property="taskname"    column="taskname"    />
+        <result property="xhname"    column="xhname"    />
+        <result property="jhwcsj"    column="jhwcsj"    />
+        <result property="yzjdname"    column="yzjdname"    />
+        <result property="processPercent"    column="processPercent"    />
+        <result property="costPercent"    column="cost_percent"    />
+        <result property="yzsl"    column="yzsl"    />
+        <result property="oneIncome"    column="one_income"    />
+        <result property="oneCost"    column="one_cost"    />
+        <result property="oneProfit"    column="one_profit"    />
+        <result property="lre"    column="lre"    />
+        <result property="lrl"    column="lrl"    />
+        <result property="EstimationCoat"    column="EstimationCoat"    />
+        <result property="contractfpe"    column="contractfpe"    />
+        <result property="TaskMoney"    column="TaskMoney"    />
+        <result property="zcb"    column="zcb"    />
+        <result property="clf"    column="clf"    />
+        <result property="zyf"    column="zyf"    />
+        <result property="swf"    column="swf"    />
+        <result property="wxf"    column="wxf"    />
+        <result property="rldlf"    column="rldlf"    />
+        <result property="gdzczj"    column="gdzczj"    />
+        <result property="gzjlwf"    column="gzjlwf"    />
+        <result property="glf"    column="glf"    />
+        <result property="zjcb"    column="zjcb"    />
+        <result property="lbsy"    column="lbsy"    />
+        <result property="workhour"    column="workhour"    />
+        <result property="zrbm"    column="zrbm"    />
+        <result property="jycsid"    column="jycsid"    />
+        <result property="jycs"    column="jycs"    />
+        <result property="hxzxid"    column="hxzxid"    />
+        <result property="hxzxname"    column="hxzxname"    />
+        <result property="tasktype"    column="tasktype"    />
+        <result property="AuditPrice"    column="AuditPrice"    />
+        <result property="iflag"    column="iflag"    />
+        <result property="Brief"    column="Brief"    />
+        <result property="RefTaskNo"    column="RefTaskNo"    />
+        <result property="pcCode"    column="pcCode"    />
+        <result property="bcCode"    column="bcCode"    />
+        <result property="blCode"    column="blCode"    />
+        <result property="BusinessMan"    column="BusinessMan"    />
+        <result property="sjgs"    column="sjgs"    />
+        <result property="scgs"    column="scgs"    />
+    </resultMap>
+
+    <sql id="selectProjectCostVo">
+        select id, taskno, taskname, xhname, jhwcsj, yzjdname, processPercent, cost_percent, yzsl, one_income, one_cost, one_profit, lre, lrl, EstimationCoat, contractfpe, TaskMoney, zcb, clf, zyf, swf, wxf, rldlf, gdzczj, gzjlwf, glf, zjcb, lbsy, workhour, zrbm, jycsid, jycs, hxzxid, hxzxname, tasktype, AuditPrice, iflag, Brief, RefTaskNo, pcCode, bcCode, blCode, BusinessMan, sjgs, scgs from project_cost
+    </sql>
+
+    <select id="selectProjectCostList" parameterType="ProjectCost" resultMap="ProjectCostResult">
+        <include refid="selectProjectCostVo"/>
+        <where>  
+            <if test="taskno != null  and taskno != ''"> and taskno = #{taskno}</if>
+            <if test="taskname != null  and taskname != ''"> and taskname like concat('%', #{taskname}, '%')</if>
+            <if test="xhname != null  and xhname != ''"> and xhname like concat('%', #{xhname}, '%')</if>
+            <if test="jhwcsj != null "> and jhwcsj = #{jhwcsj}</if>
+            <if test="yzjdname != null  and yzjdname != ''"> and yzjdname like concat('%', #{yzjdname}, '%')</if>
+            <if test="processPercent != null  and processPercent != ''"> and processPercent = #{processPercent}</if>
+            <if test="costPercent != null  and costPercent != ''"> and cost_percent = #{costPercent}</if>
+            <if test="oneIncome != null "> and one_income = #{oneIncome}</if>
+            <if test="oneCost != null "> and one_cost = #{oneCost}</if>
+            <if test="oneProfit != null "> and one_profit = #{oneProfit}</if>
+            <if test="lre != null "> and lre = #{lre}</if>
+            <if test="lrl != null "> and lrl = #{lrl}</if>
+            <if test="EstimationCoat != null "> and EstimationCoat = #{EstimationCoat}</if>
+            <if test="contractfpe != null "> and contractfpe = #{contractfpe}</if>
+            <if test="TaskMoney != null "> and TaskMoney = #{TaskMoney}</if>
+            <if test="zcb != null "> and zcb = #{zcb}</if>
+            <if test="clf != null "> and clf = #{clf}</if>
+            <if test="zyf != null "> and zyf = #{zyf}</if>
+            <if test="swf != null "> and swf = #{swf}</if>
+            <if test="wxf != null "> and wxf = #{wxf}</if>
+            <if test="rldlf != null "> and rldlf = #{rldlf}</if>
+            <if test="gdzczj != null "> and gdzczj = #{gdzczj}</if>
+            <if test="gzjlwf != null "> and gzjlwf = #{gzjlwf}</if>
+            <if test="glf != null "> and glf = #{glf}</if>
+            <if test="zjcb != null "> and zjcb = #{zjcb}</if>
+            <if test="lbsy != null "> and lbsy = #{lbsy}</if>
+            <if test="workhour != null "> and workhour = #{workhour}</if>
+            <if test="zrbm != null  and zrbm != ''"> and zrbm = #{zrbm}</if>
+            <if test="jycsid != null "> and jycsid = #{jycsid}</if>
+            <if test="jycs != null  and jycs != ''"> and jycs = #{jycs}</if>
+            <if test="hxzxid != null "> and hxzxid = #{hxzxid}</if>
+            <if test="hxzxname != null  and hxzxname != ''"> and hxzxname like concat('%', #{hxzxname}, '%')</if>
+            <if test="tasktype != null  and tasktype != ''"> and tasktype = #{tasktype}</if>
+            <if test="AuditPrice != null  and AuditPrice != ''"> and AuditPrice = #{AuditPrice}</if>
+            <if test="iflag != null  and iflag != ''"> and iflag = #{iflag}</if>
+            <if test="Brief != null  and Brief != ''"> and Brief = #{Brief}</if>
+            <if test="RefTaskNo != null "> and RefTaskNo = #{RefTaskNo}</if>
+            <if test="pcCode != null "> and pcCode = #{pcCode}</if>
+            <if test="bcCode != null "> and bcCode = #{bcCode}</if>
+            <if test="blCode != null "> and blCode = #{blCode}</if>
+            <if test="BusinessMan != null  and BusinessMan != ''"> and BusinessMan = #{BusinessMan}</if>
+            <if test="sjgs != null "> and sjgs = #{sjgs}</if>
+            <if test="scgs != null "> and scgs = #{scgs}</if>
+        </where>
+    </select>
+    
+    <select id="selectProjectCostById" parameterType="Long" resultMap="ProjectCostResult">
+        <include refid="selectProjectCostVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertProjectCost" parameterType="ProjectCost">
+        insert into project_cost
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">id,</if>
+            <if test="taskno != null">taskno,</if>
+            <if test="taskname != null">taskname,</if>
+            <if test="xhname != null and xhname != ''">xhname,</if>
+            <if test="jhwcsj != null">jhwcsj,</if>
+            <if test="yzjdname != null">yzjdname,</if>
+            <if test="processPercent != null">processPercent,</if>
+            <if test="costPercent != null">cost_percent,</if>
+            <if test="yzsl != null">yzsl,</if>
+            <if test="oneIncome != null">one_income,</if>
+            <if test="oneCost != null">one_cost,</if>
+            <if test="oneProfit != null">one_profit,</if>
+            <if test="lre != null">lre,</if>
+            <if test="lrl != null">lrl,</if>
+            <if test="EstimationCoat != null">EstimationCoat,</if>
+            <if test="contractfpe != null">contractfpe,</if>
+            <if test="TaskMoney != null">TaskMoney,</if>
+            <if test="zcb != null">zcb,</if>
+            <if test="clf != null">clf,</if>
+            <if test="zyf != null">zyf,</if>
+            <if test="swf != null">swf,</if>
+            <if test="wxf != null">wxf,</if>
+            <if test="rldlf != null">rldlf,</if>
+            <if test="gdzczj != null">gdzczj,</if>
+            <if test="gzjlwf != null">gzjlwf,</if>
+            <if test="glf != null">glf,</if>
+            <if test="zjcb != null">zjcb,</if>
+            <if test="lbsy != null">lbsy,</if>
+            <if test="workhour != null">workhour,</if>
+            <if test="zrbm != null">zrbm,</if>
+            <if test="jycsid != null">jycsid,</if>
+            <if test="jycs != null">jycs,</if>
+            <if test="hxzxid != null">hxzxid,</if>
+            <if test="hxzxname != null">hxzxname,</if>
+            <if test="tasktype != null and tasktype != ''">tasktype,</if>
+            <if test="AuditPrice != null">AuditPrice,</if>
+            <if test="iflag != null">iflag,</if>
+            <if test="Brief != null">Brief,</if>
+            <if test="RefTaskNo != null">RefTaskNo,</if>
+            <if test="pcCode != null">pcCode,</if>
+            <if test="bcCode != null">bcCode,</if>
+            <if test="blCode != null">blCode,</if>
+            <if test="BusinessMan != null">BusinessMan,</if>
+            <if test="sjgs != null">sjgs,</if>
+            <if test="scgs != null">scgs,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="taskno != null">#{taskno},</if>
+            <if test="taskname != null">#{taskname},</if>
+            <if test="xhname != null and xhname != ''">#{xhname},</if>
+            <if test="jhwcsj != null">#{jhwcsj},</if>
+            <if test="yzjdname != null">#{yzjdname},</if>
+            <if test="processPercent != null">#{processPercent},</if>
+            <if test="costPercent != null">#{costPercent},</if>
+            <if test="yzsl != null">#{yzsl},</if>
+            <if test="oneIncome != null">#{oneIncome},</if>
+            <if test="oneCost != null">#{oneCost},</if>
+            <if test="oneProfit != null">#{oneProfit},</if>
+            <if test="lre != null">#{lre},</if>
+            <if test="lrl != null">#{lrl},</if>
+            <if test="EstimationCoat != null">#{EstimationCoat},</if>
+            <if test="contractfpe != null">#{contractfpe},</if>
+            <if test="TaskMoney != null">#{TaskMoney},</if>
+            <if test="zcb != null">#{zcb},</if>
+            <if test="clf != null">#{clf},</if>
+            <if test="zyf != null">#{zyf},</if>
+            <if test="swf != null">#{swf},</if>
+            <if test="wxf != null">#{wxf},</if>
+            <if test="rldlf != null">#{rldlf},</if>
+            <if test="gdzczj != null">#{gdzczj},</if>
+            <if test="gzjlwf != null">#{gzjlwf},</if>
+            <if test="glf != null">#{glf},</if>
+            <if test="zjcb != null">#{zjcb},</if>
+            <if test="lbsy != null">#{lbsy},</if>
+            <if test="workhour != null">#{workhour},</if>
+            <if test="zrbm != null">#{zrbm},</if>
+            <if test="jycsid != null">#{jycsid},</if>
+            <if test="jycs != null">#{jycs},</if>
+            <if test="hxzxid != null">#{hxzxid},</if>
+            <if test="hxzxname != null">#{hxzxname},</if>
+            <if test="tasktype != null and tasktype != ''">#{tasktype},</if>
+            <if test="AuditPrice != null">#{AuditPrice},</if>
+            <if test="iflag != null">#{iflag},</if>
+            <if test="Brief != null">#{Brief},</if>
+            <if test="RefTaskNo != null">#{RefTaskNo},</if>
+            <if test="pcCode != null">#{pcCode},</if>
+            <if test="bcCode != null">#{bcCode},</if>
+            <if test="blCode != null">#{blCode},</if>
+            <if test="BusinessMan != null">#{BusinessMan},</if>
+            <if test="sjgs != null">#{sjgs},</if>
+            <if test="scgs != null">#{scgs},</if>
+         </trim>
+    </insert>
+
+    <insert id="insertBatchProjectCost" parameterType="java.util.List">
+        insert into
+        project_cost(id,taskno,taskname,xhname,jhwcsj,yzjdname,processPercent,cost_percent,yzsl,one_income,one_cost,
+        one_profit,lre, lrl,
+        EstimationCoat,contractfpe,TaskMoney,zcb,clf,zyf,swf,wxf,rldlf,gdzczj,gzjlwf,glf,zjcb,lbsy,workhour,zrbm,jycsid,jycs,
+        hxzxid,hxzxname,tasktype,AuditPrice, iflag,Brief,RefTaskNo,pcCode,bcCode,blCode,BusinessMan,sjgs,scgs)
+        VALUES
+        <foreach collection="list" item="projectCost" index="index" separator=",">
+            (
+            #{projectCost.id},
+            #{projectCost.taskno},
+            #{projectCost.taskname},
+            #{projectCost.xhname},
+            #{projectCost.jhwcsj},
+            #{projectCost.yzjdname},
+            #{projectCost.processPercent},
+            #{projectCost.costPercent},
+            #{projectCost.yzsl},
+            #{projectCost.oneIncome},
+            #{projectCost.oneCost},
+            #{projectCost.oneProfit},
+            #{projectCost.lre},
+            #{projectCost.lrl},
+            #{projectCost.EstimationCoat},
+            #{projectCost.contractfpe},
+            #{projectCost.TaskMoney},
+            #{projectCost.zcb},
+            #{projectCost.clf},
+            #{projectCost.zyf},
+            #{projectCost.swf},
+            #{projectCost.wxf},
+            #{projectCost.rldlf},
+            #{projectCost.gdzczj},
+            #{projectCost.gzjlwf},
+            #{projectCost.glf},
+            #{projectCost.zjcb},
+            #{projectCost.lbsy},
+            #{projectCost.workhour},
+            #{projectCost.zrbm},
+            #{projectCost.jycsid},
+            #{projectCost.jycs},
+            #{projectCost.hxzxid},
+            #{projectCost.hxzxname},
+            #{projectCost.tasktype},
+            #{projectCost.AuditPrice},
+            #{projectCost.iflag},
+            #{projectCost.Brief},
+            #{projectCost.RefTaskNo},
+            #{projectCost.pcCode},
+            #{projectCost.bcCode},
+            #{projectCost.blCode},
+            #{projectCost.BusinessMan},
+            #{projectCost.sjgs},
+            #{projectCost.scgs}
+            )
+        </foreach>
+    </insert>
+
+    <update id="updateProjectCost" parameterType="ProjectCost">
+        update project_cost
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="taskno != null">taskno = #{taskno},</if>
+            <if test="taskname != null">taskname = #{taskname},</if>
+            <if test="xhname != null and xhname != ''">xhname = #{xhname},</if>
+            <if test="jhwcsj != null">jhwcsj = #{jhwcsj},</if>
+            <if test="yzjdname != null">yzjdname = #{yzjdname},</if>
+            <if test="processPercent != null">processPercent = #{processPercent},</if>
+            <if test="costPercent != null">cost_percent = #{costPercent},</if>
+            <if test="yzsl != null">yzsl = #{yzsl},</if>
+            <if test="oneIncome != null">one_income = #{oneIncome},</if>
+            <if test="oneCost != null">one_cost = #{oneCost},</if>
+            <if test="oneProfit != null">one_profit = #{oneProfit},</if>
+            <if test="lre != null">lre = #{lre},</if>
+            <if test="lrl != null">lrl = #{lrl},</if>
+            <if test="EstimationCoat != null">EstimationCoat = #{EstimationCoat},</if>
+            <if test="contractfpe != null">contractfpe = #{contractfpe},</if>
+            <if test="TaskMoney != null">TaskMoney = #{TaskMoney},</if>
+            <if test="zcb != null">zcb = #{zcb},</if>
+            <if test="clf != null">clf = #{clf},</if>
+            <if test="zyf != null">zyf = #{zyf},</if>
+            <if test="swf != null">swf = #{swf},</if>
+            <if test="wxf != null">wxf = #{wxf},</if>
+            <if test="rldlf != null">rldlf = #{rldlf},</if>
+            <if test="gdzczj != null">gdzczj = #{gdzczj},</if>
+            <if test="gzjlwf != null">gzjlwf = #{gzjlwf},</if>
+            <if test="glf != null">glf = #{glf},</if>
+            <if test="zjcb != null">zjcb = #{zjcb},</if>
+            <if test="lbsy != null">lbsy = #{lbsy},</if>
+            <if test="workhour != null">workhour = #{workhour},</if>
+            <if test="zrbm != null">zrbm = #{zrbm},</if>
+            <if test="jycsid != null">jycsid = #{jycsid},</if>
+            <if test="jycs != null">jycs = #{jycs},</if>
+            <if test="hxzxid != null">hxzxid = #{hxzxid},</if>
+            <if test="hxzxname != null">hxzxname = #{hxzxname},</if>
+            <if test="tasktype != null and tasktype != ''">tasktype = #{tasktype},</if>
+            <if test="AuditPrice != null">AuditPrice = #{AuditPrice},</if>
+            <if test="iflag != null">iflag = #{iflag},</if>
+            <if test="Brief != null">Brief = #{Brief},</if>
+            <if test="RefTaskNo != null">RefTaskNo = #{RefTaskNo},</if>
+            <if test="pcCode != null">pcCode = #{pcCode},</if>
+            <if test="bcCode != null">bcCode = #{bcCode},</if>
+            <if test="blCode != null">blCode = #{blCode},</if>
+            <if test="BusinessMan != null">BusinessMan = #{BusinessMan},</if>
+            <if test="sjgs != null">sjgs = #{sjgs},</if>
+            <if test="scgs != null">scgs = #{scgs},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteProjectCostById" parameterType="Long">
+        delete from project_cost where id = #{id}
+    </delete>
+
+    <delete id="deleteProjectCostByIds" parameterType="String">
+        delete from project_cost where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 267 - 0
base/src/main/resources/mapper/wzCk/ckDetail/WzOutboundOrderBMapper.xml

@@ -0,0 +1,267 @@
+<?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.ruoyi.wzCk.ckDetail.mapper.WzOutboundOrderBMapper">
+    
+    <resultMap type="WzOutboundOrderB" id="WzOutboundOrderBResult">
+        <result property="id"    column="id"    />
+        <result property="wlbm"    column="wlbm"    />
+        <result property="wlmc"    column="wlmc"    />
+        <result property="ggxh"    column="ggxh"    />
+        <result property="ph"    column="ph"    />
+        <result property="xxjsgf"    column="xxjsgf"    />
+        <result property="jsbz"    column="jsbz"    />
+        <result property="zldj"    column="zldj"    />
+        <result property="fzxs"    column="fzxs"    />
+        <result property="sccj"    column="sccj"    />
+        <result property="gcjk"    column="gcjk"    />
+        <result property="cgdj"    column="cgdj"    />
+        <result property="nbdj"    column="nbdj"    />
+        <result property="bljhdjh"    column="bljhdjh"    />
+        <result property="hh"    column="hh"    />
+        <result property="ckrq"    column="ckrq"    />
+        <result property="sfzsl"    column="sfzsl"    />
+        <result property="yfzsl"    column="yfzsl"    />
+        <result property="rkpch"    column="rkpch"    />
+        <result property="xhgljszb"    column="xhgljszb"    />
+        <result property="gxdh"    column="gxdh"    />
+        <result property="dpah"    column="dpah"    />
+        <result property="hgzscqk"    column="hgzscqk"    />
+        <result property="zbyxq"    column="zbyxq"    />
+        <result property="wgbs"    column="wgbs"    />
+        <result property="gyspch"    column="gyspch"    />
+        <result property="kwh"    column="kwh"    />
+        <result property="zbdw"    column="zbdw"    />
+        <result property="zbyj"    column="zbyj"    />
+        <result property="rwh"    column="rwh"    />
+        <result property="yqjfl"    column="yqjfl"    />
+        <result property="ckbz"    column="ckbz"    />
+        <result property="ckdbtzj"    column="ckdbtzj"    />
+        <result property="ckdbtizj"    column="ckdbtizj"    />
+        <result property="lydjh"    column="lydjh"    />
+        <result property="lydlxbm"    column="lydlxbm"    />
+        <result property="lyjylxzj"    column="lyjylxzj"    />
+        <result property="js"    column="js"    />
+        <result property="tm"    column="tm"    />
+        <result property="ckdh"    column="ckdh"    />
+        <result property="fydw"    column="fydw"    />
+        <result property="zxsjc"    column="zxsjc"    />
+    </resultMap>
+
+    <sql id="selectWzOutboundOrderBVo">
+        select id, wlbm, wlmc, ggxh, ph, xxjsgf, jsbz, zldj, fzxs, sccj, gcjk, cgdj, nbdj, bljhdjh, hh, ckrq, sfzsl, yfzsl, rkpch, xhgljszb, gxdh, dpah, hgzscqk, zbyxq, wgbs, gyspch, kwh, zbdw, zbyj, rwh, yqjfl, ckbz, ckdbtzj, ckdbtizj, lydjh, lydlxbm, lyjylxzj, js, tm, ckdh, fydw, zxsjc from wz_outbound_order_b
+    </sql>
+
+    <select id="selectWzOutboundOrderBList" parameterType="WzOutboundOrderB" resultMap="WzOutboundOrderBResult">
+        <include refid="selectWzOutboundOrderBVo"/>
+        <where>  
+            <if test="wlbm != null  and wlbm != ''"> and wlbm = #{wlbm}</if>
+            <if test="wlmc != null  and wlmc != ''"> and wlmc = #{wlmc}</if>
+            <if test="ggxh != null  and ggxh != ''"> and ggxh = #{ggxh}</if>
+            <if test="ph != null  and ph != ''"> and ph = #{ph}</if>
+            <if test="xxjsgf != null  and xxjsgf != ''"> and xxjsgf = #{xxjsgf}</if>
+            <if test="jsbz != null  and jsbz != ''"> and jsbz = #{jsbz}</if>
+            <if test="zldj != null  and zldj != ''"> and zldj = #{zldj}</if>
+            <if test="fzxs != null  and fzxs != ''"> and fzxs = #{fzxs}</if>
+            <if test="sccj != null  and sccj != ''"> and sccj = #{sccj}</if>
+            <if test="gcjk != null  and gcjk != ''"> and gcjk = #{gcjk}</if>
+            <if test="cgdj != null "> and cgdj = #{cgdj}</if>
+            <if test="nbdj != null "> and nbdj = #{nbdj}</if>
+            <if test="bljhdjh != null  and bljhdjh != ''"> and bljhdjh = #{bljhdjh}</if>
+            <if test="hh != null  and hh != ''"> and hh = #{hh}</if>
+            <if test="ckrq != null  and ckrq != ''"> and ckrq = #{ckrq}</if>
+            <if test="sfzsl != null "> and sfzsl = #{sfzsl}</if>
+            <if test="yfzsl != null "> and yfzsl = #{yfzsl}</if>
+            <if test="rkpch != null  and rkpch != ''"> and rkpch = #{rkpch}</if>
+            <if test="xhgljszb != null  and xhgljszb != ''"> and xhgljszb = #{xhgljszb}</if>
+            <if test="gxdh != null  and gxdh != ''"> and gxdh = #{gxdh}</if>
+            <if test="dpah != null  and dpah != ''"> and dpah = #{dpah}</if>
+            <if test="hgzscqk != null  and hgzscqk != ''"> and hgzscqk = #{hgzscqk}</if>
+            <if test="zbyxq != null  and zbyxq != ''"> and zbyxq = #{zbyxq}</if>
+            <if test="wgbs != null  and wgbs != ''"> and wgbs = #{wgbs}</if>
+            <if test="gyspch != null  and gyspch != ''"> and gyspch = #{gyspch}</if>
+            <if test="kwh != null  and kwh != ''"> and kwh = #{kwh}</if>
+            <if test="zbdw != null  and zbdw != ''"> and zbdw = #{zbdw}</if>
+            <if test="zbyj != null  and zbyj != ''"> and zbyj = #{zbyj}</if>
+            <if test="rwh != null  and rwh != ''"> and rwh = #{rwh}</if>
+            <if test="yqjfl != null  and yqjfl != ''"> and yqjfl = #{yqjfl}</if>
+            <if test="ckbz != null  and ckbz != ''"> and ckbz = #{ckbz}</if>
+            <if test="ckdbtzj != null  and ckdbtzj != ''"> and ckdbtzj = #{ckdbtzj}</if>
+            <if test="ckdbtizj != null  and ckdbtizj != ''"> and ckdbtizj = #{ckdbtizj}</if>
+            <if test="lydjh != null  and lydjh != ''"> and lydjh = #{lydjh}</if>
+            <if test="lydlxbm != null  and lydlxbm != ''"> and lydlxbm = #{lydlxbm}</if>
+            <if test="lyjylxzj != null  and lyjylxzj != ''"> and lyjylxzj = #{lyjylxzj}</if>
+            <if test="js != null  and js != ''"> and js = #{js}</if>
+            <if test="tm != null  and tm != ''"> and tm = #{tm}</if>
+            <if test="ckdh != null  and ckdh != ''"> and ckdh = #{ckdh}</if>
+            <if test="fydw != null  and fydw != ''"> and fydw = #{fydw}</if>
+            <if test="zxsjc != null  and zxsjc != ''"> and zxsjc = #{zxsjc}</if>
+        </where>
+    </select>
+    
+    <select id="selectWzOutboundOrderBById" parameterType="Long" resultMap="WzOutboundOrderBResult">
+        <include refid="selectWzOutboundOrderBVo"/>
+        where id = #{id}
+    </select>
+    <select id="selectProjectCostFromCkDetailByTaskNo"
+            resultType="com.ruoyi.wzCk.ckDetail.domain.WzOutboundOrderB">
+        select sfzsl,cgdj,nbdj,rwh from wz_outbound_order_b where rwh = #{taskno}
+    </select>
+    <select id="selectProjectCostFromCkDetailByCkdh"
+            resultType="com.ruoyi.wzCk.ckDetail.domain.WzOutboundOrderB">
+        select sfzsl,cgdj,nbdj,rwh,ckdh from wz_outbound_order_b where rwh = #{ckdh}
+    </select>
+    <select id="getCkDetailDataCountByCkdh" resultType="java.lang.Integer">
+        select count(*) from wz_outbound_order_b where rwh = #{ckdh}
+    </select>
+
+    <insert id="insertWzOutboundOrderB" parameterType="WzOutboundOrderB" useGeneratedKeys="true" keyProperty="id">
+        insert into wz_outbound_order_b
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="wlbm != null">wlbm,</if>
+            <if test="wlmc != null">wlmc,</if>
+            <if test="ggxh != null">ggxh,</if>
+            <if test="ph != null">ph,</if>
+            <if test="xxjsgf != null">xxjsgf,</if>
+            <if test="jsbz != null">jsbz,</if>
+            <if test="zldj != null">zldj,</if>
+            <if test="fzxs != null">fzxs,</if>
+            <if test="sccj != null">sccj,</if>
+            <if test="gcjk != null">gcjk,</if>
+            <if test="cgdj != null">cgdj,</if>
+            <if test="nbdj != null">nbdj,</if>
+            <if test="bljhdjh != null">bljhdjh,</if>
+            <if test="hh != null">hh,</if>
+            <if test="ckrq != null">ckrq,</if>
+            <if test="sfzsl != null">sfzsl,</if>
+            <if test="yfzsl != null">yfzsl,</if>
+            <if test="rkpch != null">rkpch,</if>
+            <if test="xhgljszb != null">xhgljszb,</if>
+            <if test="gxdh != null">gxdh,</if>
+            <if test="dpah != null">dpah,</if>
+            <if test="hgzscqk != null">hgzscqk,</if>
+            <if test="zbyxq != null">zbyxq,</if>
+            <if test="wgbs != null">wgbs,</if>
+            <if test="gyspch != null">gyspch,</if>
+            <if test="kwh != null">kwh,</if>
+            <if test="zbdw != null">zbdw,</if>
+            <if test="zbyj != null">zbyj,</if>
+            <if test="rwh != null">rwh,</if>
+            <if test="yqjfl != null">yqjfl,</if>
+            <if test="ckbz != null">ckbz,</if>
+            <if test="ckdbtzj != null">ckdbtzj,</if>
+            <if test="ckdbtizj != null">ckdbtizj,</if>
+            <if test="lydjh != null">lydjh,</if>
+            <if test="lydlxbm != null">lydlxbm,</if>
+            <if test="lyjylxzj != null">lyjylxzj,</if>
+            <if test="js != null">js,</if>
+            <if test="tm != null">tm,</if>
+            <if test="ckdh != null">ckdh,</if>
+            <if test="fydw != null">fydw,</if>
+            <if test="zxsjc != null">zxsjc,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="wlbm != null">#{wlbm},</if>
+            <if test="wlmc != null">#{wlmc},</if>
+            <if test="ggxh != null">#{ggxh},</if>
+            <if test="ph != null">#{ph},</if>
+            <if test="xxjsgf != null">#{xxjsgf},</if>
+            <if test="jsbz != null">#{jsbz},</if>
+            <if test="zldj != null">#{zldj},</if>
+            <if test="fzxs != null">#{fzxs},</if>
+            <if test="sccj != null">#{sccj},</if>
+            <if test="gcjk != null">#{gcjk},</if>
+            <if test="cgdj != null">#{cgdj},</if>
+            <if test="nbdj != null">#{nbdj},</if>
+            <if test="bljhdjh != null">#{bljhdjh},</if>
+            <if test="hh != null">#{hh},</if>
+            <if test="ckrq != null">#{ckrq},</if>
+            <if test="sfzsl != null">#{sfzsl},</if>
+            <if test="yfzsl != null">#{yfzsl},</if>
+            <if test="rkpch != null">#{rkpch},</if>
+            <if test="xhgljszb != null">#{xhgljszb},</if>
+            <if test="gxdh != null">#{gxdh},</if>
+            <if test="dpah != null">#{dpah},</if>
+            <if test="hgzscqk != null">#{hgzscqk},</if>
+            <if test="zbyxq != null">#{zbyxq},</if>
+            <if test="wgbs != null">#{wgbs},</if>
+            <if test="gyspch != null">#{gyspch},</if>
+            <if test="kwh != null">#{kwh},</if>
+            <if test="zbdw != null">#{zbdw},</if>
+            <if test="zbyj != null">#{zbyj},</if>
+            <if test="rwh != null">#{rwh},</if>
+            <if test="yqjfl != null">#{yqjfl},</if>
+            <if test="ckbz != null">#{ckbz},</if>
+            <if test="ckdbtzj != null">#{ckdbtzj},</if>
+            <if test="ckdbtizj != null">#{ckdbtizj},</if>
+            <if test="lydjh != null">#{lydjh},</if>
+            <if test="lydlxbm != null">#{lydlxbm},</if>
+            <if test="lyjylxzj != null">#{lyjylxzj},</if>
+            <if test="js != null">#{js},</if>
+            <if test="tm != null">#{tm},</if>
+            <if test="ckdh != null">#{ckdh},</if>
+            <if test="fydw != null">#{fydw},</if>
+            <if test="zxsjc != null">#{zxsjc},</if>
+         </trim>
+    </insert>
+
+    <update id="updateWzOutboundOrderB" parameterType="WzOutboundOrderB">
+        update wz_outbound_order_b
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="wlbm != null">wlbm = #{wlbm},</if>
+            <if test="wlmc != null">wlmc = #{wlmc},</if>
+            <if test="ggxh != null">ggxh = #{ggxh},</if>
+            <if test="ph != null">ph = #{ph},</if>
+            <if test="xxjsgf != null">xxjsgf = #{xxjsgf},</if>
+            <if test="jsbz != null">jsbz = #{jsbz},</if>
+            <if test="zldj != null">zldj = #{zldj},</if>
+            <if test="fzxs != null">fzxs = #{fzxs},</if>
+            <if test="sccj != null">sccj = #{sccj},</if>
+            <if test="gcjk != null">gcjk = #{gcjk},</if>
+            <if test="cgdj != null">cgdj = #{cgdj},</if>
+            <if test="nbdj != null">nbdj = #{nbdj},</if>
+            <if test="bljhdjh != null">bljhdjh = #{bljhdjh},</if>
+            <if test="hh != null">hh = #{hh},</if>
+            <if test="ckrq != null">ckrq = #{ckrq},</if>
+            <if test="sfzsl != null">sfzsl = #{sfzsl},</if>
+            <if test="yfzsl != null">yfzsl = #{yfzsl},</if>
+            <if test="rkpch != null">rkpch = #{rkpch},</if>
+            <if test="xhgljszb != null">xhgljszb = #{xhgljszb},</if>
+            <if test="gxdh != null">gxdh = #{gxdh},</if>
+            <if test="dpah != null">dpah = #{dpah},</if>
+            <if test="hgzscqk != null">hgzscqk = #{hgzscqk},</if>
+            <if test="zbyxq != null">zbyxq = #{zbyxq},</if>
+            <if test="wgbs != null">wgbs = #{wgbs},</if>
+            <if test="gyspch != null">gyspch = #{gyspch},</if>
+            <if test="kwh != null">kwh = #{kwh},</if>
+            <if test="zbdw != null">zbdw = #{zbdw},</if>
+            <if test="zbyj != null">zbyj = #{zbyj},</if>
+            <if test="rwh != null">rwh = #{rwh},</if>
+            <if test="yqjfl != null">yqjfl = #{yqjfl},</if>
+            <if test="ckbz != null">ckbz = #{ckbz},</if>
+            <if test="ckdbtzj != null">ckdbtzj = #{ckdbtzj},</if>
+            <if test="ckdbtizj != null">ckdbtizj = #{ckdbtizj},</if>
+            <if test="lydjh != null">lydjh = #{lydjh},</if>
+            <if test="lydlxbm != null">lydlxbm = #{lydlxbm},</if>
+            <if test="lyjylxzj != null">lyjylxzj = #{lyjylxzj},</if>
+            <if test="js != null">js = #{js},</if>
+            <if test="tm != null">tm = #{tm},</if>
+            <if test="ckdh != null">ckdh = #{ckdh},</if>
+            <if test="fydw != null">fydw = #{fydw},</if>
+            <if test="zxsjc != null">zxsjc = #{zxsjc},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteWzOutboundOrderBById" parameterType="Long">
+        delete from wz_outbound_order_b where id = #{id}
+    </delete>
+
+    <delete id="deleteWzOutboundOrderBByIds" parameterType="String">
+        delete from wz_outbound_order_b where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 164 - 0
base/src/main/resources/mapper/wzCk/ckInfo/WzOutboundOrderHMapper.xml

@@ -0,0 +1,164 @@
+<?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.ruoyi.wzCk.ckInfo.mapper.WzOutboundOrderHMapper">
+    
+    <resultMap type="WzOutboundOrderH" id="WzOutboundOrderHResult">
+        <result property="id"    column="id"    />
+        <result property="qzr"    column="qzr"    />
+        <result property="zdr"    column="zdr"    />
+        <result property="lly"    column="lly"    />
+        <result property="lybm"    column="lybm"    />
+        <result property="ck"    column="ck"    />
+        <result property="khybm"    column="khybm"    />
+        <result property="kgymc"    column="kgymc"    />
+        <result property="zdrq"    column="zdrq"    />
+        <result property="djzt"    column="djzt"    />
+        <result property="zsl"    column="zsl"    />
+        <result property="qzrq"    column="qzrq"    />
+        <result property="ckdh"    column="ckdh"    />
+        <result property="ptzlh"    column="ptzlh"    />
+        <result property="rwh"    column="rwh"    />
+        <result property="gcxh"    column="gcxh"    />
+        <result property="zbdw"    column="zbdw"    />
+        <result property="zbyj"    column="zbyj"    />
+        <result property="bh"    column="bh"    />
+        <result property="sbmc"    column="sbmc"    />
+        <result property="rwjd"    column="rwjd"    />
+        <result property="dycs"    column="dycs"    />
+        <result property="ckdzj"    column="ckdzj"    />
+    </resultMap>
+
+    <sql id="selectWzOutboundOrderHVo">
+        select id, qzr, zdr, lly, lybm, ck, khybm, kgymc, zdrq, djzt, zsl, qzrq, ckdh, ptzlh, rwh, gcxh, zbdw, zbyj, bh, sbmc, rwjd, dycs, ckdzj from wz_outbound_order_h
+    </sql>
+
+    <select id="selectWzOutboundOrderHList" parameterType="WzOutboundOrderH" resultMap="WzOutboundOrderHResult">
+        <include refid="selectWzOutboundOrderHVo"/>
+        <where>  
+            <if test="qzr != null  and qzr != ''"> and qzr = #{qzr}</if>
+            <if test="zdr != null  and zdr != ''"> and zdr = #{zdr}</if>
+            <if test="lly != null  and lly != ''"> and lly = #{lly}</if>
+            <if test="lybm != null  and lybm != ''"> and lybm = #{lybm}</if>
+            <if test="ck != null  and ck != ''"> and ck = #{ck}</if>
+            <if test="khybm != null  and khybm != ''"> and khybm = #{khybm}</if>
+            <if test="kgymc != null  and kgymc != ''"> and kgymc = #{kgymc}</if>
+            <if test="zdrq != null  and zdrq != ''"> and zdrq = #{zdrq}</if>
+            <if test="djzt != null  and djzt != ''"> and djzt = #{djzt}</if>
+            <if test="zsl != null  and zsl != ''"> and zsl = #{zsl}</if>
+            <if test="qzrq != null  and qzrq != ''"> and qzrq = #{qzrq}</if>
+            <if test="ckdh != null  and ckdh != ''"> and ckdh = #{ckdh}</if>
+            <if test="ptzlh != null  and ptzlh != ''"> and ptzlh = #{ptzlh}</if>
+            <if test="rwh != null  and rwh != ''"> and rwh = #{rwh}</if>
+            <if test="gcxh != null  and gcxh != ''"> and gcxh = #{gcxh}</if>
+            <if test="zbdw != null  and zbdw != ''"> and zbdw = #{zbdw}</if>
+            <if test="zbyj != null  and zbyj != ''"> and zbyj = #{zbyj}</if>
+            <if test="bh != null  and bh != ''"> and bh = #{bh}</if>
+            <if test="sbmc != null  and sbmc != ''"> and sbmc = #{sbmc}</if>
+            <if test="rwjd != null  and rwjd != ''"> and rwjd = #{rwjd}</if>
+            <if test="dycs != null  and dycs != ''"> and dycs = #{dycs}</if>
+            <if test="ckdzj != null  and ckdzj != ''"> and ckdzj = #{ckdzj}</if>
+        </where>
+    </select>
+    
+    <select id="selectWzOutboundOrderHById" parameterType="Long" resultMap="WzOutboundOrderHResult">
+        <include refid="selectWzOutboundOrderHVo"/>
+        where id = #{id}
+    </select>
+    <select id="selectCkdhListFromCkinfoByTaskNo" resultType="com.ruoyi.wzCk.ckInfo.domain.WzOutboundOrderH">
+        select ckdh,rwh from wz_outbound_order_h where rwh = #{taskno}
+    </select>
+
+    <insert id="insertWzOutboundOrderH" parameterType="WzOutboundOrderH" useGeneratedKeys="true" keyProperty="id">
+        insert into wz_outbound_order_h
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="qzr != null">qzr,</if>
+            <if test="zdr != null">zdr,</if>
+            <if test="lly != null">lly,</if>
+            <if test="lybm != null">lybm,</if>
+            <if test="ck != null">ck,</if>
+            <if test="khybm != null">khybm,</if>
+            <if test="kgymc != null">kgymc,</if>
+            <if test="zdrq != null">zdrq,</if>
+            <if test="djzt != null">djzt,</if>
+            <if test="zsl != null">zsl,</if>
+            <if test="qzrq != null">qzrq,</if>
+            <if test="ckdh != null">ckdh,</if>
+            <if test="ptzlh != null">ptzlh,</if>
+            <if test="rwh != null">rwh,</if>
+            <if test="gcxh != null">gcxh,</if>
+            <if test="zbdw != null">zbdw,</if>
+            <if test="zbyj != null">zbyj,</if>
+            <if test="bh != null">bh,</if>
+            <if test="sbmc != null">sbmc,</if>
+            <if test="rwjd != null">rwjd,</if>
+            <if test="dycs != null">dycs,</if>
+            <if test="ckdzj != null">ckdzj,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="qzr != null">#{qzr},</if>
+            <if test="zdr != null">#{zdr},</if>
+            <if test="lly != null">#{lly},</if>
+            <if test="lybm != null">#{lybm},</if>
+            <if test="ck != null">#{ck},</if>
+            <if test="khybm != null">#{khybm},</if>
+            <if test="kgymc != null">#{kgymc},</if>
+            <if test="zdrq != null">#{zdrq},</if>
+            <if test="djzt != null">#{djzt},</if>
+            <if test="zsl != null">#{zsl},</if>
+            <if test="qzrq != null">#{qzrq},</if>
+            <if test="ckdh != null">#{ckdh},</if>
+            <if test="ptzlh != null">#{ptzlh},</if>
+            <if test="rwh != null">#{rwh},</if>
+            <if test="gcxh != null">#{gcxh},</if>
+            <if test="zbdw != null">#{zbdw},</if>
+            <if test="zbyj != null">#{zbyj},</if>
+            <if test="bh != null">#{bh},</if>
+            <if test="sbmc != null">#{sbmc},</if>
+            <if test="rwjd != null">#{rwjd},</if>
+            <if test="dycs != null">#{dycs},</if>
+            <if test="ckdzj != null">#{ckdzj},</if>
+         </trim>
+    </insert>
+
+    <update id="updateWzOutboundOrderH" parameterType="WzOutboundOrderH">
+        update wz_outbound_order_h
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="qzr != null">qzr = #{qzr},</if>
+            <if test="zdr != null">zdr = #{zdr},</if>
+            <if test="lly != null">lly = #{lly},</if>
+            <if test="lybm != null">lybm = #{lybm},</if>
+            <if test="ck != null">ck = #{ck},</if>
+            <if test="khybm != null">khybm = #{khybm},</if>
+            <if test="kgymc != null">kgymc = #{kgymc},</if>
+            <if test="zdrq != null">zdrq = #{zdrq},</if>
+            <if test="djzt != null">djzt = #{djzt},</if>
+            <if test="zsl != null">zsl = #{zsl},</if>
+            <if test="qzrq != null">qzrq = #{qzrq},</if>
+            <if test="ckdh != null">ckdh = #{ckdh},</if>
+            <if test="ptzlh != null">ptzlh = #{ptzlh},</if>
+            <if test="rwh != null">rwh = #{rwh},</if>
+            <if test="gcxh != null">gcxh = #{gcxh},</if>
+            <if test="zbdw != null">zbdw = #{zbdw},</if>
+            <if test="zbyj != null">zbyj = #{zbyj},</if>
+            <if test="bh != null">bh = #{bh},</if>
+            <if test="sbmc != null">sbmc = #{sbmc},</if>
+            <if test="rwjd != null">rwjd = #{rwjd},</if>
+            <if test="dycs != null">dycs = #{dycs},</if>
+            <if test="ckdzj != null">ckdzj = #{ckdzj},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteWzOutboundOrderHById" parameterType="Long">
+        delete from wz_outbound_order_h where id = #{id}
+    </delete>
+
+    <delete id="deleteWzOutboundOrderHByIds" parameterType="String">
+        delete from wz_outbound_order_h where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 12 - 0
bin/clean.bat

@@ -0,0 +1,12 @@
+@echo off
+echo.
+echo [信息] 清理工程target生成路径。
+echo.
+
+%~d0
+cd %~dp0
+
+cd ..
+call mvn clean
+
+pause

+ 12 - 0
bin/package.bat

@@ -0,0 +1,12 @@
+@echo off
+echo.
+echo [信息] 打包Web工程,生成war/jar包文件。
+echo.
+
+%~d0
+cd %~dp0
+
+cd ..
+call mvn clean package -Dmaven.test.skip=true
+
+pause

+ 14 - 0
bin/run.bat

@@ -0,0 +1,14 @@
+@echo off
+echo.
+echo [信息] 使用Jar命令运行Web工程。
+echo.
+
+cd %~dp0
+cd ../ruoyi-admin/target
+
+set JAVA_OPTS=-Xms256m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
+
+java -jar %JAVA_OPTS% ruoyi-admin.jar
+
+cd bin
+pause

二進制
doc/若依环境使用手册.docx


+ 228 - 0
pom.xml

@@ -0,0 +1,228 @@
+<?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>
+	
+    <groupId>com.ruoyi</groupId>
+    <artifactId>Visible</artifactId>
+    <version>3.8.6</version>
+
+    <name>ruoyi</name>
+    <url>http://www.ruoyi.vip</url>
+    <description>若依管理系统</description>
+    
+    <properties>
+        <ruoyi.version>3.8.6</ruoyi.version>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+        <java.version>1.8</java.version>
+        <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
+        <druid.version>1.2.16</druid.version>
+        <bitwalker.version>1.21</bitwalker.version>
+        <swagger.version>3.0.0</swagger.version>
+        <kaptcha.version>2.3.3</kaptcha.version>
+        <pagehelper.boot.version>1.4.6</pagehelper.boot.version>
+        <fastjson.version>2.0.34</fastjson.version>
+        <oshi.version>6.4.3</oshi.version>
+        <commons.io.version>2.11.0</commons.io.version>
+        <commons.collections.version>3.2.2</commons.collections.version>
+        <poi.version>4.1.2</poi.version>
+        <velocity.version>2.3</velocity.version>
+        <jwt.version>0.9.1</jwt.version>
+    </properties>
+	
+    <!-- 依赖声明 -->
+    <dependencyManagement>
+        <dependencies>
+
+            <!-- SpringBoot的依赖配置-->
+            <dependency>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-dependencies</artifactId>
+                <version>2.5.15</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+
+            <!-- 阿里数据库连接池 -->
+            <dependency>
+                <groupId>com.alibaba</groupId>
+                <artifactId>druid-spring-boot-starter</artifactId>
+                <version>${druid.version}</version>
+            </dependency>
+
+            <!-- 解析客户端操作系统、浏览器等 -->
+            <dependency>
+                <groupId>eu.bitwalker</groupId>
+                <artifactId>UserAgentUtils</artifactId>
+                <version>${bitwalker.version}</version>
+            </dependency>
+
+            <!-- pagehelper 分页插件 -->
+            <dependency>
+                <groupId>com.github.pagehelper</groupId>
+                <artifactId>pagehelper-spring-boot-starter</artifactId>
+                <version>${pagehelper.boot.version}</version>
+            </dependency>
+
+            <!-- 获取系统信息 -->
+            <dependency>
+                <groupId>com.github.oshi</groupId>
+                <artifactId>oshi-core</artifactId>
+                <version>${oshi.version}</version>
+            </dependency>
+
+            <!-- Swagger3依赖 -->
+            <dependency>
+                <groupId>io.springfox</groupId>
+                <artifactId>springfox-boot-starter</artifactId>
+                <version>${swagger.version}</version>
+                <exclusions>
+                    <exclusion>
+                        <groupId>io.swagger</groupId>
+                        <artifactId>swagger-models</artifactId>
+                    </exclusion>
+                </exclusions>
+            </dependency>
+
+            <!-- io常用工具类 -->
+            <dependency>
+                <groupId>commons-io</groupId>
+                <artifactId>commons-io</artifactId>
+                <version>${commons.io.version}</version>
+            </dependency>
+
+            <!-- excel工具 -->
+            <dependency>
+                <groupId>org.apache.poi</groupId>
+                <artifactId>poi-ooxml</artifactId>
+                <version>${poi.version}</version>
+            </dependency>
+
+            <!-- velocity代码生成使用模板 -->
+            <dependency>
+                <groupId>org.apache.velocity</groupId>
+                <artifactId>velocity-engine-core</artifactId>
+                <version>${velocity.version}</version>
+            </dependency>
+
+            <!-- collections工具类 -->
+            <dependency>
+                <groupId>commons-collections</groupId>
+                <artifactId>commons-collections</artifactId>
+                <version>${commons.collections.version}</version>
+            </dependency>
+
+            <!-- 阿里JSON解析器 -->
+            <dependency>
+                <groupId>com.alibaba.fastjson2</groupId>
+                <artifactId>fastjson2</artifactId>
+                <version>${fastjson.version}</version>
+            </dependency>
+
+            <!-- Token生成与解析-->
+            <dependency>
+                <groupId>io.jsonwebtoken</groupId>
+                <artifactId>jjwt</artifactId>
+                <version>${jwt.version}</version>
+            </dependency>
+
+            <!-- 验证码 -->
+            <dependency>
+                <groupId>pro.fessional</groupId>
+                <artifactId>kaptcha</artifactId>
+                <version>${kaptcha.version}</version>
+            </dependency>
+
+            <!-- 定时任务-->
+            <dependency>
+                <groupId>com.ruoyi</groupId>
+                <artifactId>ruoyi-quartz</artifactId>
+                <version>${ruoyi.version}</version>
+            </dependency>
+
+            <!-- 代码生成-->
+            <dependency>
+                <groupId>com.ruoyi</groupId>
+                <artifactId>ruoyi-generator</artifactId>
+                <version>${ruoyi.version}</version>
+            </dependency>
+
+            <!-- 核心模块-->
+            <dependency>
+                <groupId>com.ruoyi</groupId>
+                <artifactId>ruoyi-framework</artifactId>
+                <version>${ruoyi.version}</version>
+            </dependency>
+
+            <!-- 系统模块-->
+            <dependency>
+                <groupId>com.ruoyi</groupId>
+                <artifactId>ruoyi-system</artifactId>
+                <version>${ruoyi.version}</version>
+            </dependency>
+
+            <!-- 通用工具-->
+            <dependency>
+                <groupId>com.ruoyi</groupId>
+                <artifactId>ruoyi-common</artifactId>
+                <version>${ruoyi.version}</version>
+            </dependency>
+
+        </dependencies>
+    </dependencyManagement>
+
+    <modules>
+        <module>ruoyi-admin</module>
+        <module>ruoyi-framework</module>
+        <module>ruoyi-system</module>
+        <module>ruoyi-quartz</module>
+        <module>ruoyi-generator</module>
+        <module>ruoyi-common</module>
+        <module>base</module>
+        <module>summary</module>
+    </modules>
+    <packaging>pom</packaging>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.1</version>
+                <configuration>
+                    <source>${java.version}</source>
+                    <target>${java.version}</target>
+                    <encoding>${project.build.sourceEncoding}</encoding>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+    <repositories>
+        <repository>
+            <id>public</id>
+            <name>aliyun nexus</name>
+            <url>https://maven.aliyun.com/repository/public</url>
+            <releases>
+                <enabled>true</enabled>
+            </releases>
+        </repository>
+    </repositories>
+
+    <pluginRepositories>
+        <pluginRepository>
+            <id>public</id>
+            <name>aliyun nexus</name>
+            <url>https://maven.aliyun.com/repository/public</url>
+            <releases>
+                <enabled>true</enabled>
+            </releases>
+            <snapshots>
+                <enabled>false</enabled>
+            </snapshots>
+        </pluginRepository>
+    </pluginRepositories>
+
+</project>

+ 55 - 0
ruoyi-admin/pom.xml

@@ -0,0 +1,55 @@
+<?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>Visible</artifactId>
+        <groupId>com.ruoyi</groupId>
+        <version>3.8.6</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    <packaging>jar</packaging>
+    <artifactId>ruoyi-admin</artifactId>
+
+    <description>
+        web服务入口
+    </description>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>summary</artifactId>
+            <version>3.8.6</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <version>2.1.1.RELEASE</version>
+                <configuration>
+                    <fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-war-plugin</artifactId>
+                <version>3.1.0</version>
+                <configuration>
+                    <failOnMissingWebXml>false</failOnMissingWebXml>
+                    <warName>${project.artifactId}</warName>
+                </configuration>
+            </plugin>
+        </plugins>
+        <finalName>${project.artifactId}</finalName>
+    </build>
+</project>

+ 30 - 0
ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java

@@ -0,0 +1,30 @@
+package com.ruoyi;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+
+/**
+ * 启动程序
+ * 
+ * @author ruoyi
+ */
+@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
+public class RuoYiApplication
+{
+    public static void main(String[] args)
+    {
+        // System.setProperty("spring.devtools.restart.enabled", "false");
+        SpringApplication.run(RuoYiApplication.class, args);
+        System.out.println("(♥◠‿◠)ノ゙  若依启动成功   ლ(´ڡ`ლ)゙  \n" +
+                " .-------.       ____     __        \n" +
+                " |  _ _   \\      \\   \\   /  /    \n" +
+                " | ( ' )  |       \\  _. /  '       \n" +
+                " |(_ o _) /        _( )_ .'         \n" +
+                " | (_,_).' __  ___(_ o _)'          \n" +
+                " |  |\\ \\  |  ||   |(_,_)'         \n" +
+                " |  | \\ `'   /|   `-'  /           \n" +
+                " |  |  \\    /  \\      /           \n" +
+                " ''-'   `'-'    `-..-'              ");
+    }
+}

+ 18 - 0
ruoyi-admin/src/main/java/com/ruoyi/RuoYiServletInitializer.java

@@ -0,0 +1,18 @@
+package com.ruoyi;
+
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
+
+/**
+ * web容器中进行部署
+ * 
+ * @author ruoyi
+ */
+public class RuoYiServletInitializer extends SpringBootServletInitializer
+{
+    @Override
+    protected SpringApplicationBuilder configure(SpringApplicationBuilder application)
+    {
+        return application.sources(RuoYiApplication.class);
+    }
+}

+ 94 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java

@@ -0,0 +1,94 @@
+package com.ruoyi.web.controller.common;
+
+import java.awt.image.BufferedImage;
+import java.io.IOException;
+import java.util.concurrent.TimeUnit;
+import javax.annotation.Resource;
+import javax.imageio.ImageIO;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.FastByteArrayOutputStream;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.google.code.kaptcha.Producer;
+import com.ruoyi.common.config.RuoYiConfig;
+import com.ruoyi.common.constant.CacheConstants;
+import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.redis.RedisCache;
+import com.ruoyi.common.utils.sign.Base64;
+import com.ruoyi.common.utils.uuid.IdUtils;
+import com.ruoyi.system.service.ISysConfigService;
+
+/**
+ * 验证码操作处理
+ * 
+ * @author ruoyi
+ */
+@RestController
+public class CaptchaController
+{
+    @Resource(name = "captchaProducer")
+    private Producer captchaProducer;
+
+    @Resource(name = "captchaProducerMath")
+    private Producer captchaProducerMath;
+
+    @Autowired
+    private RedisCache redisCache;
+    
+    @Autowired
+    private ISysConfigService configService;
+    /**
+     * 生成验证码
+     */
+    @GetMapping("/captchaImage")
+    public AjaxResult getCode(HttpServletResponse response) throws IOException
+    {
+        AjaxResult ajax = AjaxResult.success();
+        boolean captchaEnabled = configService.selectCaptchaEnabled();
+        ajax.put("captchaEnabled", captchaEnabled);
+        if (!captchaEnabled)
+        {
+            return ajax;
+        }
+
+        // 保存验证码信息
+        String uuid = IdUtils.simpleUUID();
+        String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + uuid;
+
+        String capStr = null, code = null;
+        BufferedImage image = null;
+
+        // 生成验证码
+        String captchaType = RuoYiConfig.getCaptchaType();
+        if ("math".equals(captchaType))
+        {
+            String capText = captchaProducerMath.createText();
+            capStr = capText.substring(0, capText.lastIndexOf("@"));
+            code = capText.substring(capText.lastIndexOf("@") + 1);
+            image = captchaProducerMath.createImage(capStr);
+        }
+        else if ("char".equals(captchaType))
+        {
+            capStr = code = captchaProducer.createText();
+            image = captchaProducer.createImage(capStr);
+        }
+
+        redisCache.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES);
+        // 转换流信息写出
+        FastByteArrayOutputStream os = new FastByteArrayOutputStream();
+        try
+        {
+            ImageIO.write(image, "jpg", os);
+        }
+        catch (IOException e)
+        {
+            return AjaxResult.error(e.getMessage());
+        }
+
+        ajax.put("uuid", uuid);
+        ajax.put("img", Base64.encode(os.toByteArray()));
+        return ajax;
+    }
+}

+ 163 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java

@@ -0,0 +1,163 @@
+package com.ruoyi.web.controller.common;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+import com.ruoyi.common.config.RuoYiConfig;
+import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.file.FileUploadUtils;
+import com.ruoyi.common.utils.file.FileUtils;
+import com.ruoyi.framework.config.ServerConfig;
+
+/**
+ * 通用请求处理
+ * 
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/common")
+public class CommonController
+{
+    private static final Logger log = LoggerFactory.getLogger(CommonController.class);
+
+    @Autowired
+    private ServerConfig serverConfig;
+
+    private static final String FILE_DELIMETER = ",";
+
+    /**
+     * 通用下载请求
+     * 
+     * @param fileName 文件名称
+     * @param delete 是否删除
+     */
+    @GetMapping("/download")
+    public void fileDownload(String fileName, Boolean delete, HttpServletResponse response, HttpServletRequest request)
+    {
+        try
+        {
+            if (!FileUtils.checkAllowDownload(fileName))
+            {
+                throw new Exception(StringUtils.format("文件名称({})非法,不允许下载。 ", fileName));
+            }
+            String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
+            String filePath = RuoYiConfig.getDownloadPath() + fileName;
+
+            response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
+            FileUtils.setAttachmentResponseHeader(response, realFileName);
+            FileUtils.writeBytes(filePath, response.getOutputStream());
+            if (delete)
+            {
+                FileUtils.deleteFile(filePath);
+            }
+        }
+        catch (Exception e)
+        {
+            log.error("下载文件失败", e);
+        }
+    }
+
+    /**
+     * 通用上传请求(单个)
+     */
+    @PostMapping("/upload")
+    public AjaxResult uploadFile(MultipartFile file) throws Exception
+    {
+        try
+        {
+            // 上传文件路径
+            String filePath = RuoYiConfig.getUploadPath();
+            // 上传并返回新文件名称
+            String fileName = FileUploadUtils.upload(filePath, file);
+            String url = serverConfig.getUrl() + fileName;
+            AjaxResult ajax = AjaxResult.success();
+            ajax.put("url", url);
+            ajax.put("fileName", fileName);
+            ajax.put("newFileName", FileUtils.getName(fileName));
+            ajax.put("originalFilename", file.getOriginalFilename());
+            return ajax;
+        }
+        catch (Exception e)
+        {
+            return AjaxResult.error(e.getMessage());
+        }
+    }
+
+    /**
+     * 通用上传请求(多个)
+     */
+    @PostMapping("/uploads")
+    public AjaxResult uploadFiles(List<MultipartFile> files) throws Exception
+    {
+        try
+        {
+            // 上传文件路径
+            String filePath = RuoYiConfig.getUploadPath();
+            List<String> urls = new ArrayList<String>();
+            List<String> fileNames = new ArrayList<String>();
+            List<String> newFileNames = new ArrayList<String>();
+            List<String> originalFilenames = new ArrayList<String>();
+            for (MultipartFile file : files)
+            {
+                // 上传并返回新文件名称
+                String fileName = FileUploadUtils.upload(filePath, file);
+                String url = serverConfig.getUrl() + fileName;
+                urls.add(url);
+                fileNames.add(fileName);
+                newFileNames.add(FileUtils.getName(fileName));
+                originalFilenames.add(file.getOriginalFilename());
+            }
+            AjaxResult ajax = AjaxResult.success();
+            ajax.put("urls", StringUtils.join(urls, FILE_DELIMETER));
+            ajax.put("fileNames", StringUtils.join(fileNames, FILE_DELIMETER));
+            ajax.put("newFileNames", StringUtils.join(newFileNames, FILE_DELIMETER));
+            ajax.put("originalFilenames", StringUtils.join(originalFilenames, FILE_DELIMETER));
+            return ajax;
+        }
+        catch (Exception e)
+        {
+            return AjaxResult.error(e.getMessage());
+        }
+    }
+
+    /**
+     * 本地资源通用下载
+     */
+    @GetMapping("/download/resource")
+    public void resourceDownload(String resource, HttpServletRequest request, HttpServletResponse response)
+            throws Exception
+    {
+        try
+        {
+            if (!FileUtils.checkAllowDownload(resource))
+            {
+                throw new Exception(StringUtils.format("资源文件({})非法,不允许下载。 ", resource));
+            }
+            // 本地资源路径
+            String localPath = RuoYiConfig.getProfile();
+            // 数据库资源地址
+            String downloadPath = localPath + StringUtils.substringAfter(resource, Constants.RESOURCE_PREFIX);
+            // 下载名称
+            String downloadName = StringUtils.substringAfterLast(downloadPath, "/");
+            response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
+            FileUtils.setAttachmentResponseHeader(response, downloadName);
+            FileUtils.writeBytes(downloadPath, response.getOutputStream());
+        }
+        catch (Exception e)
+        {
+            log.error("下载文件失败", e);
+        }
+    }
+}

+ 120 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/CacheController.java

@@ -0,0 +1,120 @@
+package com.ruoyi.web.controller.monitor;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisCallback;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.DeleteMapping;
+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;
+import com.ruoyi.common.constant.CacheConstants;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.system.domain.SysCache;
+
+/**
+ * 缓存监控
+ * 
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/monitor/cache")
+public class CacheController
+{
+    @Autowired
+    private RedisTemplate<String, String> redisTemplate;
+
+    private final static List<SysCache> caches = new ArrayList<SysCache>();
+    {
+        caches.add(new SysCache(CacheConstants.LOGIN_TOKEN_KEY, "用户信息"));
+        caches.add(new SysCache(CacheConstants.SYS_CONFIG_KEY, "配置信息"));
+        caches.add(new SysCache(CacheConstants.SYS_DICT_KEY, "数据字典"));
+        caches.add(new SysCache(CacheConstants.CAPTCHA_CODE_KEY, "验证码"));
+        caches.add(new SysCache(CacheConstants.REPEAT_SUBMIT_KEY, "防重提交"));
+        caches.add(new SysCache(CacheConstants.RATE_LIMIT_KEY, "限流处理"));
+        caches.add(new SysCache(CacheConstants.PWD_ERR_CNT_KEY, "密码错误次数"));
+    }
+
+    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
+    @GetMapping()
+    public AjaxResult getInfo() throws Exception
+    {
+        Properties info = (Properties) redisTemplate.execute((RedisCallback<Object>) connection -> connection.info());
+        Properties commandStats = (Properties) redisTemplate.execute((RedisCallback<Object>) connection -> connection.info("commandstats"));
+        Object dbSize = redisTemplate.execute((RedisCallback<Object>) connection -> connection.dbSize());
+
+        Map<String, Object> result = new HashMap<>(3);
+        result.put("info", info);
+        result.put("dbSize", dbSize);
+
+        List<Map<String, String>> pieList = new ArrayList<>();
+        commandStats.stringPropertyNames().forEach(key -> {
+            Map<String, String> data = new HashMap<>(2);
+            String property = commandStats.getProperty(key);
+            data.put("name", StringUtils.removeStart(key, "cmdstat_"));
+            data.put("value", StringUtils.substringBetween(property, "calls=", ",usec"));
+            pieList.add(data);
+        });
+        result.put("commandStats", pieList);
+        return AjaxResult.success(result);
+    }
+
+    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
+    @GetMapping("/getNames")
+    public AjaxResult cache()
+    {
+        return AjaxResult.success(caches);
+    }
+
+    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
+    @GetMapping("/getKeys/{cacheName}")
+    public AjaxResult getCacheKeys(@PathVariable String cacheName)
+    {
+        Set<String> cacheKeys = redisTemplate.keys(cacheName + "*");
+        return AjaxResult.success(cacheKeys);
+    }
+
+    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
+    @GetMapping("/getValue/{cacheName}/{cacheKey}")
+    public AjaxResult getCacheValue(@PathVariable String cacheName, @PathVariable String cacheKey)
+    {
+        String cacheValue = redisTemplate.opsForValue().get(cacheKey);
+        SysCache sysCache = new SysCache(cacheName, cacheKey, cacheValue);
+        return AjaxResult.success(sysCache);
+    }
+
+    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
+    @DeleteMapping("/clearCacheName/{cacheName}")
+    public AjaxResult clearCacheName(@PathVariable String cacheName)
+    {
+        Collection<String> cacheKeys = redisTemplate.keys(cacheName + "*");
+        redisTemplate.delete(cacheKeys);
+        return AjaxResult.success();
+    }
+
+    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
+    @DeleteMapping("/clearCacheKey/{cacheKey}")
+    public AjaxResult clearCacheKey(@PathVariable String cacheKey)
+    {
+        redisTemplate.delete(cacheKey);
+        return AjaxResult.success();
+    }
+
+    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
+    @DeleteMapping("/clearCacheAll")
+    public AjaxResult clearCacheAll()
+    {
+        Collection<String> cacheKeys = redisTemplate.keys("*");
+        redisTemplate.delete(cacheKeys);
+        return AjaxResult.success();
+    }
+}

+ 27 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/ServerController.java

@@ -0,0 +1,27 @@
+package com.ruoyi.web.controller.monitor;
+
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.framework.web.domain.Server;
+
+/**
+ * 服务器监控
+ * 
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/monitor/server")
+public class ServerController
+{
+    @PreAuthorize("@ss.hasPermi('monitor:server:list')")
+    @GetMapping()
+    public AjaxResult getInfo() throws Exception
+    {
+        Server server = new Server();
+        server.copyTo();
+        return AjaxResult.success(server);
+    }
+}

+ 82 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysLogininforController.java

@@ -0,0 +1,82 @@
+package com.ruoyi.web.controller.monitor;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.framework.web.service.SysPasswordService;
+import com.ruoyi.system.domain.SysLogininfor;
+import com.ruoyi.system.service.ISysLogininforService;
+
+/**
+ * 系统访问记录
+ * 
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/monitor/logininfor")
+public class SysLogininforController extends BaseController
+{
+    @Autowired
+    private ISysLogininforService logininforService;
+
+    @Autowired
+    private SysPasswordService passwordService;
+
+    @PreAuthorize("@ss.hasPermi('monitor:logininfor:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(SysLogininfor logininfor)
+    {
+        startPage();
+        List<SysLogininfor> list = logininforService.selectLogininforList(logininfor);
+        return getDataTable(list);
+    }
+
+    @Log(title = "登录日志", businessType = BusinessType.EXPORT)
+    @PreAuthorize("@ss.hasPermi('monitor:logininfor:export')")
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, SysLogininfor logininfor)
+    {
+        List<SysLogininfor> list = logininforService.selectLogininforList(logininfor);
+        ExcelUtil<SysLogininfor> util = new ExcelUtil<SysLogininfor>(SysLogininfor.class);
+        util.exportExcel(response, list, "登录日志");
+    }
+
+    @PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')")
+    @Log(title = "登录日志", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{infoIds}")
+    public AjaxResult remove(@PathVariable Long[] infoIds)
+    {
+        return toAjax(logininforService.deleteLogininforByIds(infoIds));
+    }
+
+    @PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')")
+    @Log(title = "登录日志", businessType = BusinessType.CLEAN)
+    @DeleteMapping("/clean")
+    public AjaxResult clean()
+    {
+        logininforService.cleanLogininfor();
+        return success();
+    }
+
+    @PreAuthorize("@ss.hasPermi('monitor:logininfor:unlock')")
+    @Log(title = "账户解锁", businessType = BusinessType.OTHER)
+    @GetMapping("/unlock/{userName}")
+    public AjaxResult unlock(@PathVariable("userName") String userName)
+    {
+        passwordService.clearLoginRecordCache(userName);
+        return success();
+    }
+}

+ 69 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysOperlogController.java

@@ -0,0 +1,69 @@
+package com.ruoyi.web.controller.monitor;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.domain.SysOperLog;
+import com.ruoyi.system.service.ISysOperLogService;
+
+/**
+ * 操作日志记录
+ * 
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/monitor/operlog")
+public class SysOperlogController extends BaseController
+{
+    @Autowired
+    private ISysOperLogService operLogService;
+
+    @PreAuthorize("@ss.hasPermi('monitor:operlog:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(SysOperLog operLog)
+    {
+        startPage();
+        List<SysOperLog> list = operLogService.selectOperLogList(operLog);
+        return getDataTable(list);
+    }
+
+    @Log(title = "操作日志", businessType = BusinessType.EXPORT)
+    @PreAuthorize("@ss.hasPermi('monitor:operlog:export')")
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, SysOperLog operLog)
+    {
+        List<SysOperLog> list = operLogService.selectOperLogList(operLog);
+        ExcelUtil<SysOperLog> util = new ExcelUtil<SysOperLog>(SysOperLog.class);
+        util.exportExcel(response, list, "操作日志");
+    }
+
+    @Log(title = "操作日志", businessType = BusinessType.DELETE)
+    @PreAuthorize("@ss.hasPermi('monitor:operlog:remove')")
+    @DeleteMapping("/{operIds}")
+    public AjaxResult remove(@PathVariable Long[] operIds)
+    {
+        return toAjax(operLogService.deleteOperLogByIds(operIds));
+    }
+
+    @Log(title = "操作日志", businessType = BusinessType.CLEAN)
+    @PreAuthorize("@ss.hasPermi('monitor:operlog:remove')")
+    @DeleteMapping("/clean")
+    public AjaxResult clean()
+    {
+        operLogService.cleanOperLog();
+        return success();
+    }
+}

+ 83 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysUserOnlineController.java

@@ -0,0 +1,83 @@
+package com.ruoyi.web.controller.monitor;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.DeleteMapping;
+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;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.constant.CacheConstants;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.model.LoginUser;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.core.redis.RedisCache;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.system.domain.SysUserOnline;
+import com.ruoyi.system.service.ISysUserOnlineService;
+
+/**
+ * 在线用户监控
+ * 
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/monitor/online")
+public class SysUserOnlineController extends BaseController
+{
+    @Autowired
+    private ISysUserOnlineService userOnlineService;
+
+    @Autowired
+    private RedisCache redisCache;
+
+    @PreAuthorize("@ss.hasPermi('monitor:online:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(String ipaddr, String userName)
+    {
+        Collection<String> keys = redisCache.keys(CacheConstants.LOGIN_TOKEN_KEY + "*");
+        List<SysUserOnline> userOnlineList = new ArrayList<SysUserOnline>();
+        for (String key : keys)
+        {
+            LoginUser user = redisCache.getCacheObject(key);
+            if (StringUtils.isNotEmpty(ipaddr) && StringUtils.isNotEmpty(userName))
+            {
+                userOnlineList.add(userOnlineService.selectOnlineByInfo(ipaddr, userName, user));
+            }
+            else if (StringUtils.isNotEmpty(ipaddr))
+            {
+                userOnlineList.add(userOnlineService.selectOnlineByIpaddr(ipaddr, user));
+            }
+            else if (StringUtils.isNotEmpty(userName) && StringUtils.isNotNull(user.getUser()))
+            {
+                userOnlineList.add(userOnlineService.selectOnlineByUserName(userName, user));
+            }
+            else
+            {
+                userOnlineList.add(userOnlineService.loginUserToUserOnline(user));
+            }
+        }
+        Collections.reverse(userOnlineList);
+        userOnlineList.removeAll(Collections.singleton(null));
+        return getDataTable(userOnlineList);
+    }
+
+    /**
+     * 强退用户
+     */
+    @PreAuthorize("@ss.hasPermi('monitor:online:forceLogout')")
+    @Log(title = "在线用户", businessType = BusinessType.FORCE)
+    @DeleteMapping("/{tokenId}")
+    public AjaxResult forceLogout(@PathVariable String tokenId)
+    {
+        redisCache.deleteObject(CacheConstants.LOGIN_TOKEN_KEY + tokenId);
+        return success();
+    }
+}

+ 133 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysConfigController.java

@@ -0,0 +1,133 @@
+package com.ruoyi.web.controller.system;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.domain.SysConfig;
+import com.ruoyi.system.service.ISysConfigService;
+
+/**
+ * 参数配置 信息操作处理
+ * 
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/system/config")
+public class SysConfigController extends BaseController
+{
+    @Autowired
+    private ISysConfigService configService;
+
+    /**
+     * 获取参数配置列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:config:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(SysConfig config)
+    {
+        startPage();
+        List<SysConfig> list = configService.selectConfigList(config);
+        return getDataTable(list);
+    }
+
+    @Log(title = "参数管理", businessType = BusinessType.EXPORT)
+    @PreAuthorize("@ss.hasPermi('system:config:export')")
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, SysConfig config)
+    {
+        List<SysConfig> list = configService.selectConfigList(config);
+        ExcelUtil<SysConfig> util = new ExcelUtil<SysConfig>(SysConfig.class);
+        util.exportExcel(response, list, "参数数据");
+    }
+
+    /**
+     * 根据参数编号获取详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('system:config:query')")
+    @GetMapping(value = "/{configId}")
+    public AjaxResult getInfo(@PathVariable Long configId)
+    {
+        return success(configService.selectConfigById(configId));
+    }
+
+    /**
+     * 根据参数键名查询参数值
+     */
+    @GetMapping(value = "/configKey/{configKey}")
+    public AjaxResult getConfigKey(@PathVariable String configKey)
+    {
+        return success(configService.selectConfigByKey(configKey));
+    }
+
+    /**
+     * 新增参数配置
+     */
+    @PreAuthorize("@ss.hasPermi('system:config:add')")
+    @Log(title = "参数管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@Validated @RequestBody SysConfig config)
+    {
+        if (!configService.checkConfigKeyUnique(config))
+        {
+            return error("新增参数'" + config.getConfigName() + "'失败,参数键名已存在");
+        }
+        config.setCreateBy(getUsername());
+        return toAjax(configService.insertConfig(config));
+    }
+
+    /**
+     * 修改参数配置
+     */
+    @PreAuthorize("@ss.hasPermi('system:config:edit')")
+    @Log(title = "参数管理", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@Validated @RequestBody SysConfig config)
+    {
+        if (!configService.checkConfigKeyUnique(config))
+        {
+            return error("修改参数'" + config.getConfigName() + "'失败,参数键名已存在");
+        }
+        config.setUpdateBy(getUsername());
+        return toAjax(configService.updateConfig(config));
+    }
+
+    /**
+     * 删除参数配置
+     */
+    @PreAuthorize("@ss.hasPermi('system:config:remove')")
+    @Log(title = "参数管理", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{configIds}")
+    public AjaxResult remove(@PathVariable Long[] configIds)
+    {
+        configService.deleteConfigByIds(configIds);
+        return success();
+    }
+
+    /**
+     * 刷新参数缓存
+     */
+    @PreAuthorize("@ss.hasPermi('system:config:remove')")
+    @Log(title = "参数管理", businessType = BusinessType.CLEAN)
+    @DeleteMapping("/refreshCache")
+    public AjaxResult refreshCache()
+    {
+        configService.resetConfigCache();
+        return success();
+    }
+}

+ 132 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java

@@ -0,0 +1,132 @@
+package com.ruoyi.web.controller.system;
+
+import java.util.List;
+import org.apache.commons.lang3.ArrayUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.constant.UserConstants;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysDept;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.system.service.ISysDeptService;
+
+/**
+ * 部门信息
+ * 
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/system/dept")
+public class SysDeptController extends BaseController
+{
+    @Autowired
+    private ISysDeptService deptService;
+
+    /**
+     * 获取部门列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:dept:list')")
+    @GetMapping("/list")
+    public AjaxResult list(SysDept dept)
+    {
+        List<SysDept> depts = deptService.selectDeptList(dept);
+        return success(depts);
+    }
+
+    /**
+     * 查询部门列表(排除节点)
+     */
+    @PreAuthorize("@ss.hasPermi('system:dept:list')")
+    @GetMapping("/list/exclude/{deptId}")
+    public AjaxResult excludeChild(@PathVariable(value = "deptId", required = false) Long deptId)
+    {
+        List<SysDept> depts = deptService.selectDeptList(new SysDept());
+        depts.removeIf(d -> d.getDeptId().intValue() == deptId || ArrayUtils.contains(StringUtils.split(d.getAncestors(), ","), deptId + ""));
+        return success(depts);
+    }
+
+    /**
+     * 根据部门编号获取详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('system:dept:query')")
+    @GetMapping(value = "/{deptId}")
+    public AjaxResult getInfo(@PathVariable Long deptId)
+    {
+        deptService.checkDeptDataScope(deptId);
+        return success(deptService.selectDeptById(deptId));
+    }
+
+    /**
+     * 新增部门
+     */
+    @PreAuthorize("@ss.hasPermi('system:dept:add')")
+    @Log(title = "部门管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@Validated @RequestBody SysDept dept)
+    {
+        if (!deptService.checkDeptNameUnique(dept))
+        {
+            return error("新增部门'" + dept.getDeptName() + "'失败,部门名称已存在");
+        }
+        dept.setCreateBy(getUsername());
+        return toAjax(deptService.insertDept(dept));
+    }
+
+    /**
+     * 修改部门
+     */
+    @PreAuthorize("@ss.hasPermi('system:dept:edit')")
+    @Log(title = "部门管理", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@Validated @RequestBody SysDept dept)
+    {
+        Long deptId = dept.getDeptId();
+        deptService.checkDeptDataScope(deptId);
+        if (!deptService.checkDeptNameUnique(dept))
+        {
+            return error("修改部门'" + dept.getDeptName() + "'失败,部门名称已存在");
+        }
+        else if (dept.getParentId().equals(deptId))
+        {
+            return error("修改部门'" + dept.getDeptName() + "'失败,上级部门不能是自己");
+        }
+        else if (StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus()) && deptService.selectNormalChildrenDeptById(deptId) > 0)
+        {
+            return error("该部门包含未停用的子部门!");
+        }
+        dept.setUpdateBy(getUsername());
+        return toAjax(deptService.updateDept(dept));
+    }
+
+    /**
+     * 删除部门
+     */
+    @PreAuthorize("@ss.hasPermi('system:dept:remove')")
+    @Log(title = "部门管理", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{deptId}")
+    public AjaxResult remove(@PathVariable Long deptId)
+    {
+        if (deptService.hasChildByDeptId(deptId))
+        {
+            return warn("存在下级部门,不允许删除");
+        }
+        if (deptService.checkDeptExistUser(deptId))
+        {
+            return warn("部门存在用户,不允许删除");
+        }
+        deptService.checkDeptDataScope(deptId);
+        return toAjax(deptService.deleteDeptById(deptId));
+    }
+}

+ 121 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictDataController.java

@@ -0,0 +1,121 @@
+package com.ruoyi.web.controller.system;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysDictData;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.service.ISysDictDataService;
+import com.ruoyi.system.service.ISysDictTypeService;
+
+/**
+ * 数据字典信息
+ * 
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/system/dict/data")
+public class SysDictDataController extends BaseController
+{
+    @Autowired
+    private ISysDictDataService dictDataService;
+
+    @Autowired
+    private ISysDictTypeService dictTypeService;
+
+    @PreAuthorize("@ss.hasPermi('system:dict:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(SysDictData dictData)
+    {
+        startPage();
+        List<SysDictData> list = dictDataService.selectDictDataList(dictData);
+        return getDataTable(list);
+    }
+
+    @Log(title = "字典数据", businessType = BusinessType.EXPORT)
+    @PreAuthorize("@ss.hasPermi('system:dict:export')")
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, SysDictData dictData)
+    {
+        List<SysDictData> list = dictDataService.selectDictDataList(dictData);
+        ExcelUtil<SysDictData> util = new ExcelUtil<SysDictData>(SysDictData.class);
+        util.exportExcel(response, list, "字典数据");
+    }
+
+    /**
+     * 查询字典数据详细
+     */
+    @PreAuthorize("@ss.hasPermi('system:dict:query')")
+    @GetMapping(value = "/{dictCode}")
+    public AjaxResult getInfo(@PathVariable Long dictCode)
+    {
+        return success(dictDataService.selectDictDataById(dictCode));
+    }
+
+    /**
+     * 根据字典类型查询字典数据信息
+     */
+    @GetMapping(value = "/type/{dictType}")
+    public AjaxResult dictType(@PathVariable String dictType)
+    {
+        List<SysDictData> data = dictTypeService.selectDictDataByType(dictType);
+        if (StringUtils.isNull(data))
+        {
+            data = new ArrayList<SysDictData>();
+        }
+        return success(data);
+    }
+
+    /**
+     * 新增字典类型
+     */
+    @PreAuthorize("@ss.hasPermi('system:dict:add')")
+    @Log(title = "字典数据", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@Validated @RequestBody SysDictData dict)
+    {
+        dict.setCreateBy(getUsername());
+        return toAjax(dictDataService.insertDictData(dict));
+    }
+
+    /**
+     * 修改保存字典类型
+     */
+    @PreAuthorize("@ss.hasPermi('system:dict:edit')")
+    @Log(title = "字典数据", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@Validated @RequestBody SysDictData dict)
+    {
+        dict.setUpdateBy(getUsername());
+        return toAjax(dictDataService.updateDictData(dict));
+    }
+
+    /**
+     * 删除字典类型
+     */
+    @PreAuthorize("@ss.hasPermi('system:dict:remove')")
+    @Log(title = "字典类型", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{dictCodes}")
+    public AjaxResult remove(@PathVariable Long[] dictCodes)
+    {
+        dictDataService.deleteDictDataByIds(dictCodes);
+        return success();
+    }
+}

+ 131 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java

@@ -0,0 +1,131 @@
+package com.ruoyi.web.controller.system;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysDictType;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.service.ISysDictTypeService;
+
+/**
+ * 数据字典信息
+ * 
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/system/dict/type")
+public class SysDictTypeController extends BaseController
+{
+    @Autowired
+    private ISysDictTypeService dictTypeService;
+
+    @PreAuthorize("@ss.hasPermi('system:dict:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(SysDictType dictType)
+    {
+        startPage();
+        List<SysDictType> list = dictTypeService.selectDictTypeList(dictType);
+        return getDataTable(list);
+    }
+
+    @Log(title = "字典类型", businessType = BusinessType.EXPORT)
+    @PreAuthorize("@ss.hasPermi('system:dict:export')")
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, SysDictType dictType)
+    {
+        List<SysDictType> list = dictTypeService.selectDictTypeList(dictType);
+        ExcelUtil<SysDictType> util = new ExcelUtil<SysDictType>(SysDictType.class);
+        util.exportExcel(response, list, "字典类型");
+    }
+
+    /**
+     * 查询字典类型详细
+     */
+    @PreAuthorize("@ss.hasPermi('system:dict:query')")
+    @GetMapping(value = "/{dictId}")
+    public AjaxResult getInfo(@PathVariable Long dictId)
+    {
+        return success(dictTypeService.selectDictTypeById(dictId));
+    }
+
+    /**
+     * 新增字典类型
+     */
+    @PreAuthorize("@ss.hasPermi('system:dict:add')")
+    @Log(title = "字典类型", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@Validated @RequestBody SysDictType dict)
+    {
+        if (!dictTypeService.checkDictTypeUnique(dict))
+        {
+            return error("新增字典'" + dict.getDictName() + "'失败,字典类型已存在");
+        }
+        dict.setCreateBy(getUsername());
+        return toAjax(dictTypeService.insertDictType(dict));
+    }
+
+    /**
+     * 修改字典类型
+     */
+    @PreAuthorize("@ss.hasPermi('system:dict:edit')")
+    @Log(title = "字典类型", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@Validated @RequestBody SysDictType dict)
+    {
+        if (!dictTypeService.checkDictTypeUnique(dict))
+        {
+            return error("修改字典'" + dict.getDictName() + "'失败,字典类型已存在");
+        }
+        dict.setUpdateBy(getUsername());
+        return toAjax(dictTypeService.updateDictType(dict));
+    }
+
+    /**
+     * 删除字典类型
+     */
+    @PreAuthorize("@ss.hasPermi('system:dict:remove')")
+    @Log(title = "字典类型", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{dictIds}")
+    public AjaxResult remove(@PathVariable Long[] dictIds)
+    {
+        dictTypeService.deleteDictTypeByIds(dictIds);
+        return success();
+    }
+
+    /**
+     * 刷新字典缓存
+     */
+    @PreAuthorize("@ss.hasPermi('system:dict:remove')")
+    @Log(title = "字典类型", businessType = BusinessType.CLEAN)
+    @DeleteMapping("/refreshCache")
+    public AjaxResult refreshCache()
+    {
+        dictTypeService.resetDictCache();
+        return success();
+    }
+
+    /**
+     * 获取字典选择框列表
+     */
+    @GetMapping("/optionselect")
+    public AjaxResult optionselect()
+    {
+        List<SysDictType> dictTypes = dictTypeService.selectDictTypeAll();
+        return success(dictTypes);
+    }
+}

+ 29 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysIndexController.java

@@ -0,0 +1,29 @@
+package com.ruoyi.web.controller.system;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.config.RuoYiConfig;
+import com.ruoyi.common.utils.StringUtils;
+
+/**
+ * 首页
+ *
+ * @author ruoyi
+ */
+@RestController
+public class SysIndexController
+{
+    /** 系统基础配置 */
+    @Autowired
+    private RuoYiConfig ruoyiConfig;
+
+    /**
+     * 访问首页,提示语
+     */
+    @RequestMapping("/")
+    public String index()
+    {
+        return StringUtils.format("欢迎使用{}后台管理框架,当前版本:v{},请通过前端地址访问。", ruoyiConfig.getName(), ruoyiConfig.getVersion());
+    }
+}

+ 86 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java

@@ -0,0 +1,86 @@
+package com.ruoyi.web.controller.system;
+
+import java.util.List;
+import java.util.Set;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysMenu;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.domain.model.LoginBody;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.framework.web.service.SysLoginService;
+import com.ruoyi.framework.web.service.SysPermissionService;
+import com.ruoyi.system.service.ISysMenuService;
+
+/**
+ * 登录验证
+ * 
+ * @author ruoyi
+ */
+@RestController
+public class SysLoginController
+{
+    @Autowired
+    private SysLoginService loginService;
+
+    @Autowired
+    private ISysMenuService menuService;
+
+    @Autowired
+    private SysPermissionService permissionService;
+
+    /**
+     * 登录方法
+     * 
+     * @param loginBody 登录信息
+     * @return 结果
+     */
+    @PostMapping("/login")
+    public AjaxResult login(@RequestBody LoginBody loginBody)
+    {
+        AjaxResult ajax = AjaxResult.success();
+        // 生成令牌
+        String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),
+                loginBody.getUuid());
+        ajax.put(Constants.TOKEN, token);
+        return ajax;
+    }
+
+    /**
+     * 获取用户信息
+     * 
+     * @return 用户信息
+     */
+    @GetMapping("getInfo")
+    public AjaxResult getInfo()
+    {
+        SysUser user = SecurityUtils.getLoginUser().getUser();
+        // 角色集合
+        Set<String> roles = permissionService.getRolePermission(user);
+        // 权限集合
+        Set<String> permissions = permissionService.getMenuPermission(user);
+        AjaxResult ajax = AjaxResult.success();
+        ajax.put("user", user);
+        ajax.put("roles", roles);
+        ajax.put("permissions", permissions);
+        return ajax;
+    }
+
+    /**
+     * 获取路由信息
+     * 
+     * @return 路由信息
+     */
+    @GetMapping("getRouters")
+    public AjaxResult getRouters()
+    {
+        Long userId = SecurityUtils.getUserId();
+        List<SysMenu> menus = menuService.selectMenuTreeByUserId(userId);
+        return AjaxResult.success(menuService.buildMenus(menus));
+    }
+}

+ 142 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java

@@ -0,0 +1,142 @@
+package com.ruoyi.web.controller.system;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.constant.UserConstants;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysMenu;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.system.service.ISysMenuService;
+
+/**
+ * 菜单信息
+ * 
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/system/menu")
+public class SysMenuController extends BaseController
+{
+    @Autowired
+    private ISysMenuService menuService;
+
+    /**
+     * 获取菜单列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:menu:list')")
+    @GetMapping("/list")
+    public AjaxResult list(SysMenu menu)
+    {
+        List<SysMenu> menus = menuService.selectMenuList(menu, getUserId());
+        return success(menus);
+    }
+
+    /**
+     * 根据菜单编号获取详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('system:menu:query')")
+    @GetMapping(value = "/{menuId}")
+    public AjaxResult getInfo(@PathVariable Long menuId)
+    {
+        return success(menuService.selectMenuById(menuId));
+    }
+
+    /**
+     * 获取菜单下拉树列表
+     */
+    @GetMapping("/treeselect")
+    public AjaxResult treeselect(SysMenu menu)
+    {
+        List<SysMenu> menus = menuService.selectMenuList(menu, getUserId());
+        return success(menuService.buildMenuTreeSelect(menus));
+    }
+
+    /**
+     * 加载对应角色菜单列表树
+     */
+    @GetMapping(value = "/roleMenuTreeselect/{roleId}")
+    public AjaxResult roleMenuTreeselect(@PathVariable("roleId") Long roleId)
+    {
+        List<SysMenu> menus = menuService.selectMenuList(getUserId());
+        AjaxResult ajax = AjaxResult.success();
+        ajax.put("checkedKeys", menuService.selectMenuListByRoleId(roleId));
+        ajax.put("menus", menuService.buildMenuTreeSelect(menus));
+        return ajax;
+    }
+
+    /**
+     * 新增菜单
+     */
+    @PreAuthorize("@ss.hasPermi('system:menu:add')")
+    @Log(title = "菜单管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@Validated @RequestBody SysMenu menu)
+    {
+        if (!menuService.checkMenuNameUnique(menu))
+        {
+            return error("新增菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
+        }
+        else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath()))
+        {
+            return error("新增菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头");
+        }
+        menu.setCreateBy(getUsername());
+        return toAjax(menuService.insertMenu(menu));
+    }
+
+    /**
+     * 修改菜单
+     */
+    @PreAuthorize("@ss.hasPermi('system:menu:edit')")
+    @Log(title = "菜单管理", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@Validated @RequestBody SysMenu menu)
+    {
+        if (!menuService.checkMenuNameUnique(menu))
+        {
+            return error("修改菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
+        }
+        else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath()))
+        {
+            return error("修改菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头");
+        }
+        else if (menu.getMenuId().equals(menu.getParentId()))
+        {
+            return error("修改菜单'" + menu.getMenuName() + "'失败,上级菜单不能选择自己");
+        }
+        menu.setUpdateBy(getUsername());
+        return toAjax(menuService.updateMenu(menu));
+    }
+
+    /**
+     * 删除菜单
+     */
+    @PreAuthorize("@ss.hasPermi('system:menu:remove')")
+    @Log(title = "菜单管理", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{menuId}")
+    public AjaxResult remove(@PathVariable("menuId") Long menuId)
+    {
+        if (menuService.hasChildByMenuId(menuId))
+        {
+            return warn("存在子菜单,不允许删除");
+        }
+        if (menuService.checkMenuExistRole(menuId))
+        {
+            return warn("菜单已分配,不允许删除");
+        }
+        return toAjax(menuService.deleteMenuById(menuId));
+    }
+}

+ 91 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysNoticeController.java

@@ -0,0 +1,91 @@
+package com.ruoyi.web.controller.system;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.system.domain.SysNotice;
+import com.ruoyi.system.service.ISysNoticeService;
+
+/**
+ * 公告 信息操作处理
+ * 
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/system/notice")
+public class SysNoticeController extends BaseController
+{
+    @Autowired
+    private ISysNoticeService noticeService;
+
+    /**
+     * 获取通知公告列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:notice:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(SysNotice notice)
+    {
+        startPage();
+        List<SysNotice> list = noticeService.selectNoticeList(notice);
+        return getDataTable(list);
+    }
+
+    /**
+     * 根据通知公告编号获取详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('system:notice:query')")
+    @GetMapping(value = "/{noticeId}")
+    public AjaxResult getInfo(@PathVariable Long noticeId)
+    {
+        return success(noticeService.selectNoticeById(noticeId));
+    }
+
+    /**
+     * 新增通知公告
+     */
+    @PreAuthorize("@ss.hasPermi('system:notice:add')")
+    @Log(title = "通知公告", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@Validated @RequestBody SysNotice notice)
+    {
+        notice.setCreateBy(getUsername());
+        return toAjax(noticeService.insertNotice(notice));
+    }
+
+    /**
+     * 修改通知公告
+     */
+    @PreAuthorize("@ss.hasPermi('system:notice:edit')")
+    @Log(title = "通知公告", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@Validated @RequestBody SysNotice notice)
+    {
+        notice.setUpdateBy(getUsername());
+        return toAjax(noticeService.updateNotice(notice));
+    }
+
+    /**
+     * 删除通知公告
+     */
+    @PreAuthorize("@ss.hasPermi('system:notice:remove')")
+    @Log(title = "通知公告", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{noticeIds}")
+    public AjaxResult remove(@PathVariable Long[] noticeIds)
+    {
+        return toAjax(noticeService.deleteNoticeByIds(noticeIds));
+    }
+}

+ 129 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysPostController.java

@@ -0,0 +1,129 @@
+package com.ruoyi.web.controller.system;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.domain.SysPost;
+import com.ruoyi.system.service.ISysPostService;
+
+/**
+ * 岗位信息操作处理
+ * 
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/system/post")
+public class SysPostController extends BaseController
+{
+    @Autowired
+    private ISysPostService postService;
+
+    /**
+     * 获取岗位列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:post:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(SysPost post)
+    {
+        startPage();
+        List<SysPost> list = postService.selectPostList(post);
+        return getDataTable(list);
+    }
+    
+    @Log(title = "岗位管理", businessType = BusinessType.EXPORT)
+    @PreAuthorize("@ss.hasPermi('system:post:export')")
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, SysPost post)
+    {
+        List<SysPost> list = postService.selectPostList(post);
+        ExcelUtil<SysPost> util = new ExcelUtil<SysPost>(SysPost.class);
+        util.exportExcel(response, list, "岗位数据");
+    }
+
+    /**
+     * 根据岗位编号获取详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('system:post:query')")
+    @GetMapping(value = "/{postId}")
+    public AjaxResult getInfo(@PathVariable Long postId)
+    {
+        return success(postService.selectPostById(postId));
+    }
+
+    /**
+     * 新增岗位
+     */
+    @PreAuthorize("@ss.hasPermi('system:post:add')")
+    @Log(title = "岗位管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@Validated @RequestBody SysPost post)
+    {
+        if (!postService.checkPostNameUnique(post))
+        {
+            return error("新增岗位'" + post.getPostName() + "'失败,岗位名称已存在");
+        }
+        else if (!postService.checkPostCodeUnique(post))
+        {
+            return error("新增岗位'" + post.getPostName() + "'失败,岗位编码已存在");
+        }
+        post.setCreateBy(getUsername());
+        return toAjax(postService.insertPost(post));
+    }
+
+    /**
+     * 修改岗位
+     */
+    @PreAuthorize("@ss.hasPermi('system:post:edit')")
+    @Log(title = "岗位管理", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@Validated @RequestBody SysPost post)
+    {
+        if (!postService.checkPostNameUnique(post))
+        {
+            return error("修改岗位'" + post.getPostName() + "'失败,岗位名称已存在");
+        }
+        else if (!postService.checkPostCodeUnique(post))
+        {
+            return error("修改岗位'" + post.getPostName() + "'失败,岗位编码已存在");
+        }
+        post.setUpdateBy(getUsername());
+        return toAjax(postService.updatePost(post));
+    }
+
+    /**
+     * 删除岗位
+     */
+    @PreAuthorize("@ss.hasPermi('system:post:remove')")
+    @Log(title = "岗位管理", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{postIds}")
+    public AjaxResult remove(@PathVariable Long[] postIds)
+    {
+        return toAjax(postService.deletePostByIds(postIds));
+    }
+
+    /**
+     * 获取岗位选择框列表
+     */
+    @GetMapping("/optionselect")
+    public AjaxResult optionselect()
+    {
+        List<SysPost> posts = postService.selectPostAll();
+        return success(posts);
+    }
+}

+ 141 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java

@@ -0,0 +1,141 @@
+package com.ruoyi.web.controller.system;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.config.RuoYiConfig;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.domain.model.LoginUser;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.file.FileUploadUtils;
+import com.ruoyi.common.utils.file.MimeTypeUtils;
+import com.ruoyi.framework.web.service.TokenService;
+import com.ruoyi.system.service.ISysUserService;
+
+/**
+ * 个人信息 业务处理
+ * 
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/system/user/profile")
+public class SysProfileController extends BaseController
+{
+    @Autowired
+    private ISysUserService userService;
+
+    @Autowired
+    private TokenService tokenService;
+
+    /**
+     * 个人信息
+     */
+    @GetMapping
+    public AjaxResult profile()
+    {
+        LoginUser loginUser = getLoginUser();
+        SysUser user = loginUser.getUser();
+        AjaxResult ajax = AjaxResult.success(user);
+        ajax.put("roleGroup", userService.selectUserRoleGroup(loginUser.getUsername()));
+        ajax.put("postGroup", userService.selectUserPostGroup(loginUser.getUsername()));
+        return ajax;
+    }
+
+    /**
+     * 修改用户
+     */
+    @Log(title = "个人信息", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult updateProfile(@RequestBody SysUser user)
+    {
+        LoginUser loginUser = getLoginUser();
+        SysUser sysUser = loginUser.getUser();
+        user.setUserName(sysUser.getUserName());
+        if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user))
+        {
+            return error("修改用户'" + user.getUserName() + "'失败,手机号码已存在");
+        }
+        if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user))
+        {
+            return error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在");
+        }
+        user.setUserId(sysUser.getUserId());
+        user.setPassword(null);
+        user.setAvatar(null);
+        user.setDeptId(null);
+        if (userService.updateUserProfile(user) > 0)
+        {
+            // 更新缓存用户信息
+            sysUser.setNickName(user.getNickName());
+            sysUser.setPhonenumber(user.getPhonenumber());
+            sysUser.setEmail(user.getEmail());
+            sysUser.setSex(user.getSex());
+            tokenService.setLoginUser(loginUser);
+            return success();
+        }
+        return error("修改个人信息异常,请联系管理员");
+    }
+
+    /**
+     * 重置密码
+     */
+    @Log(title = "个人信息", businessType = BusinessType.UPDATE)
+    @PutMapping("/updatePwd")
+    public AjaxResult updatePwd(String oldPassword, String newPassword)
+    {
+        LoginUser loginUser = getLoginUser();
+        String userName = loginUser.getUsername();
+        String password = loginUser.getPassword();
+        if (!SecurityUtils.matchesPassword(oldPassword, password))
+        {
+            return error("修改密码失败,旧密码错误");
+        }
+        if (SecurityUtils.matchesPassword(newPassword, password))
+        {
+            return error("新密码不能与旧密码相同");
+        }
+        if (userService.resetUserPwd(userName, SecurityUtils.encryptPassword(newPassword)) > 0)
+        {
+            // 更新缓存用户密码
+            loginUser.getUser().setPassword(SecurityUtils.encryptPassword(newPassword));
+            tokenService.setLoginUser(loginUser);
+            return success();
+        }
+        return error("修改密码异常,请联系管理员");
+    }
+
+    /**
+     * 头像上传
+     */
+    @Log(title = "用户头像", businessType = BusinessType.UPDATE)
+    @PostMapping("/avatar")
+    public AjaxResult avatar(@RequestParam("avatarfile") MultipartFile file) throws Exception
+    {
+        if (!file.isEmpty())
+        {
+            LoginUser loginUser = getLoginUser();
+            String avatar = FileUploadUtils.upload(RuoYiConfig.getAvatarPath(), file, MimeTypeUtils.IMAGE_EXTENSION);
+            if (userService.updateUserAvatar(loginUser.getUsername(), avatar))
+            {
+                AjaxResult ajax = AjaxResult.success();
+                ajax.put("imgUrl", avatar);
+                // 更新缓存用户头像
+                loginUser.getUser().setAvatar(avatar);
+                tokenService.setLoginUser(loginUser);
+                return ajax;
+            }
+        }
+        return error("上传图片异常,请联系管理员");
+    }
+}

+ 38 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRegisterController.java

@@ -0,0 +1,38 @@
+package com.ruoyi.web.controller.system;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.model.RegisterBody;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.framework.web.service.SysRegisterService;
+import com.ruoyi.system.service.ISysConfigService;
+
+/**
+ * 注册验证
+ * 
+ * @author ruoyi
+ */
+@RestController
+public class SysRegisterController extends BaseController
+{
+    @Autowired
+    private SysRegisterService registerService;
+
+    @Autowired
+    private ISysConfigService configService;
+
+    @PostMapping("/register")
+    public AjaxResult register(@RequestBody RegisterBody user)
+    {
+        if (!("true".equals(configService.selectConfigByKey("sys.account.registerUser"))))
+        {
+            return error("当前系统没有开启注册功能!");
+        }
+        String msg = registerService.register(user);
+        return StringUtils.isEmpty(msg) ? success() : error(msg);
+    }
+}

+ 262 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java

@@ -0,0 +1,262 @@
+package com.ruoyi.web.controller.system;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysDept;
+import com.ruoyi.common.core.domain.entity.SysRole;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.domain.model.LoginUser;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.framework.web.service.SysPermissionService;
+import com.ruoyi.framework.web.service.TokenService;
+import com.ruoyi.system.domain.SysUserRole;
+import com.ruoyi.system.service.ISysDeptService;
+import com.ruoyi.system.service.ISysRoleService;
+import com.ruoyi.system.service.ISysUserService;
+
+/**
+ * 角色信息
+ * 
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/system/role")
+public class SysRoleController extends BaseController
+{
+    @Autowired
+    private ISysRoleService roleService;
+
+    @Autowired
+    private TokenService tokenService;
+
+    @Autowired
+    private SysPermissionService permissionService;
+
+    @Autowired
+    private ISysUserService userService;
+
+    @Autowired
+    private ISysDeptService deptService;
+
+    @PreAuthorize("@ss.hasPermi('system:role:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(SysRole role)
+    {
+        startPage();
+        List<SysRole> list = roleService.selectRoleList(role);
+        return getDataTable(list);
+    }
+
+    @Log(title = "角色管理", businessType = BusinessType.EXPORT)
+    @PreAuthorize("@ss.hasPermi('system:role:export')")
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, SysRole role)
+    {
+        List<SysRole> list = roleService.selectRoleList(role);
+        ExcelUtil<SysRole> util = new ExcelUtil<SysRole>(SysRole.class);
+        util.exportExcel(response, list, "角色数据");
+    }
+
+    /**
+     * 根据角色编号获取详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('system:role:query')")
+    @GetMapping(value = "/{roleId}")
+    public AjaxResult getInfo(@PathVariable Long roleId)
+    {
+        roleService.checkRoleDataScope(roleId);
+        return success(roleService.selectRoleById(roleId));
+    }
+
+    /**
+     * 新增角色
+     */
+    @PreAuthorize("@ss.hasPermi('system:role:add')")
+    @Log(title = "角色管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@Validated @RequestBody SysRole role)
+    {
+        if (!roleService.checkRoleNameUnique(role))
+        {
+            return error("新增角色'" + role.getRoleName() + "'失败,角色名称已存在");
+        }
+        else if (!roleService.checkRoleKeyUnique(role))
+        {
+            return error("新增角色'" + role.getRoleName() + "'失败,角色权限已存在");
+        }
+        role.setCreateBy(getUsername());
+        return toAjax(roleService.insertRole(role));
+
+    }
+
+    /**
+     * 修改保存角色
+     */
+    @PreAuthorize("@ss.hasPermi('system:role:edit')")
+    @Log(title = "角色管理", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@Validated @RequestBody SysRole role)
+    {
+        roleService.checkRoleAllowed(role);
+        roleService.checkRoleDataScope(role.getRoleId());
+        if (!roleService.checkRoleNameUnique(role))
+        {
+            return error("修改角色'" + role.getRoleName() + "'失败,角色名称已存在");
+        }
+        else if (!roleService.checkRoleKeyUnique(role))
+        {
+            return error("修改角色'" + role.getRoleName() + "'失败,角色权限已存在");
+        }
+        role.setUpdateBy(getUsername());
+        
+        if (roleService.updateRole(role) > 0)
+        {
+            // 更新缓存用户权限
+            LoginUser loginUser = getLoginUser();
+            if (StringUtils.isNotNull(loginUser.getUser()) && !loginUser.getUser().isAdmin())
+            {
+                loginUser.setPermissions(permissionService.getMenuPermission(loginUser.getUser()));
+                loginUser.setUser(userService.selectUserByUserName(loginUser.getUser().getUserName()));
+                tokenService.setLoginUser(loginUser);
+            }
+            return success();
+        }
+        return error("修改角色'" + role.getRoleName() + "'失败,请联系管理员");
+    }
+
+    /**
+     * 修改保存数据权限
+     */
+    @PreAuthorize("@ss.hasPermi('system:role:edit')")
+    @Log(title = "角色管理", businessType = BusinessType.UPDATE)
+    @PutMapping("/dataScope")
+    public AjaxResult dataScope(@RequestBody SysRole role)
+    {
+        roleService.checkRoleAllowed(role);
+        roleService.checkRoleDataScope(role.getRoleId());
+        return toAjax(roleService.authDataScope(role));
+    }
+
+    /**
+     * 状态修改
+     */
+    @PreAuthorize("@ss.hasPermi('system:role:edit')")
+    @Log(title = "角色管理", businessType = BusinessType.UPDATE)
+    @PutMapping("/changeStatus")
+    public AjaxResult changeStatus(@RequestBody SysRole role)
+    {
+        roleService.checkRoleAllowed(role);
+        roleService.checkRoleDataScope(role.getRoleId());
+        role.setUpdateBy(getUsername());
+        return toAjax(roleService.updateRoleStatus(role));
+    }
+
+    /**
+     * 删除角色
+     */
+    @PreAuthorize("@ss.hasPermi('system:role:remove')")
+    @Log(title = "角色管理", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{roleIds}")
+    public AjaxResult remove(@PathVariable Long[] roleIds)
+    {
+        return toAjax(roleService.deleteRoleByIds(roleIds));
+    }
+
+    /**
+     * 获取角色选择框列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:role:query')")
+    @GetMapping("/optionselect")
+    public AjaxResult optionselect()
+    {
+        return success(roleService.selectRoleAll());
+    }
+
+    /**
+     * 查询已分配用户角色列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:role:list')")
+    @GetMapping("/authUser/allocatedList")
+    public TableDataInfo allocatedList(SysUser user)
+    {
+        startPage();
+        List<SysUser> list = userService.selectAllocatedList(user);
+        return getDataTable(list);
+    }
+
+    /**
+     * 查询未分配用户角色列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:role:list')")
+    @GetMapping("/authUser/unallocatedList")
+    public TableDataInfo unallocatedList(SysUser user)
+    {
+        startPage();
+        List<SysUser> list = userService.selectUnallocatedList(user);
+        return getDataTable(list);
+    }
+
+    /**
+     * 取消授权用户
+     */
+    @PreAuthorize("@ss.hasPermi('system:role:edit')")
+    @Log(title = "角色管理", businessType = BusinessType.GRANT)
+    @PutMapping("/authUser/cancel")
+    public AjaxResult cancelAuthUser(@RequestBody SysUserRole userRole)
+    {
+        return toAjax(roleService.deleteAuthUser(userRole));
+    }
+
+    /**
+     * 批量取消授权用户
+     */
+    @PreAuthorize("@ss.hasPermi('system:role:edit')")
+    @Log(title = "角色管理", businessType = BusinessType.GRANT)
+    @PutMapping("/authUser/cancelAll")
+    public AjaxResult cancelAuthUserAll(Long roleId, Long[] userIds)
+    {
+        return toAjax(roleService.deleteAuthUsers(roleId, userIds));
+    }
+
+    /**
+     * 批量选择用户授权
+     */
+    @PreAuthorize("@ss.hasPermi('system:role:edit')")
+    @Log(title = "角色管理", businessType = BusinessType.GRANT)
+    @PutMapping("/authUser/selectAll")
+    public AjaxResult selectAuthUserAll(Long roleId, Long[] userIds)
+    {
+        roleService.checkRoleDataScope(roleId);
+        return toAjax(roleService.insertAuthUsers(roleId, userIds));
+    }
+
+    /**
+     * 获取对应角色部门树列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:role:query')")
+    @GetMapping(value = "/deptTree/{roleId}")
+    public AjaxResult deptTree(@PathVariable("roleId") Long roleId)
+    {
+        AjaxResult ajax = AjaxResult.success();
+        ajax.put("checkedKeys", deptService.selectDeptListByRoleId(roleId));
+        ajax.put("depts", deptService.selectDeptTreeList(new SysDept()));
+        return ajax;
+    }
+}

+ 251 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java

@@ -0,0 +1,251 @@
+package com.ruoyi.web.controller.system;
+
+import java.util.List;
+import java.util.stream.Collectors;
+import javax.servlet.http.HttpServletResponse;
+import org.apache.commons.lang3.ArrayUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysDept;
+import com.ruoyi.common.core.domain.entity.SysRole;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.service.ISysDeptService;
+import com.ruoyi.system.service.ISysPostService;
+import com.ruoyi.system.service.ISysRoleService;
+import com.ruoyi.system.service.ISysUserService;
+
+/**
+ * 用户信息
+ * 
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/system/user")
+public class SysUserController extends BaseController
+{
+    @Autowired
+    private ISysUserService userService;
+
+    @Autowired
+    private ISysRoleService roleService;
+
+    @Autowired
+    private ISysDeptService deptService;
+
+    @Autowired
+    private ISysPostService postService;
+
+    /**
+     * 获取用户列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:user:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(SysUser user)
+    {
+        startPage();
+        List<SysUser> list = userService.selectUserList(user);
+        return getDataTable(list);
+    }
+
+    @Log(title = "用户管理", businessType = BusinessType.EXPORT)
+    @PreAuthorize("@ss.hasPermi('system:user:export')")
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, SysUser user)
+    {
+        List<SysUser> list = userService.selectUserList(user);
+        ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
+        util.exportExcel(response, list, "用户数据");
+    }
+
+    @Log(title = "用户管理", businessType = BusinessType.IMPORT)
+    @PreAuthorize("@ss.hasPermi('system:user:import')")
+    @PostMapping("/importData")
+    public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
+    {
+        ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
+        List<SysUser> userList = util.importExcel(file.getInputStream());
+        String operName = getUsername();
+        String message = userService.importUser(userList, updateSupport, operName);
+        return success(message);
+    }
+
+    @PostMapping("/importTemplate")
+    public void importTemplate(HttpServletResponse response)
+    {
+        ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
+        util.importTemplateExcel(response, "用户数据");
+    }
+
+    /**
+     * 根据用户编号获取详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('system:user:query')")
+    @GetMapping(value = { "/", "/{userId}" })
+    public AjaxResult getInfo(@PathVariable(value = "userId", required = false) Long userId)
+    {
+        userService.checkUserDataScope(userId);
+        AjaxResult ajax = AjaxResult.success();
+        List<SysRole> roles = roleService.selectRoleAll();
+        ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
+        ajax.put("posts", postService.selectPostAll());
+        if (StringUtils.isNotNull(userId))
+        {
+            SysUser sysUser = userService.selectUserById(userId);
+            ajax.put(AjaxResult.DATA_TAG, sysUser);
+            ajax.put("postIds", postService.selectPostListByUserId(userId));
+            ajax.put("roleIds", sysUser.getRoles().stream().map(SysRole::getRoleId).collect(Collectors.toList()));
+        }
+        return ajax;
+    }
+
+    /**
+     * 新增用户
+     */
+    @PreAuthorize("@ss.hasPermi('system:user:add')")
+    @Log(title = "用户管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@Validated @RequestBody SysUser user)
+    {
+        if (!userService.checkUserNameUnique(user))
+        {
+            return error("新增用户'" + user.getUserName() + "'失败,登录账号已存在");
+        }
+        else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user))
+        {
+            return error("新增用户'" + user.getUserName() + "'失败,手机号码已存在");
+        }
+        else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user))
+        {
+            return error("新增用户'" + user.getUserName() + "'失败,邮箱账号已存在");
+        }
+        user.setCreateBy(getUsername());
+        user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
+        return toAjax(userService.insertUser(user));
+    }
+
+    /**
+     * 修改用户
+     */
+    @PreAuthorize("@ss.hasPermi('system:user:edit')")
+    @Log(title = "用户管理", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@Validated @RequestBody SysUser user)
+    {
+        userService.checkUserAllowed(user);
+        userService.checkUserDataScope(user.getUserId());
+        if (!userService.checkUserNameUnique(user))
+        {
+            return error("修改用户'" + user.getUserName() + "'失败,登录账号已存在");
+        }
+        else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user))
+        {
+            return error("修改用户'" + user.getUserName() + "'失败,手机号码已存在");
+        }
+        else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user))
+        {
+            return error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在");
+        }
+        user.setUpdateBy(getUsername());
+        return toAjax(userService.updateUser(user));
+    }
+
+    /**
+     * 删除用户
+     */
+    @PreAuthorize("@ss.hasPermi('system:user:remove')")
+    @Log(title = "用户管理", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{userIds}")
+    public AjaxResult remove(@PathVariable Long[] userIds)
+    {
+        if (ArrayUtils.contains(userIds, getUserId()))
+        {
+            return error("当前用户不能删除");
+        }
+        return toAjax(userService.deleteUserByIds(userIds));
+    }
+
+    /**
+     * 重置密码
+     */
+    @PreAuthorize("@ss.hasPermi('system:user:resetPwd')")
+    @Log(title = "用户管理", businessType = BusinessType.UPDATE)
+    @PutMapping("/resetPwd")
+    public AjaxResult resetPwd(@RequestBody SysUser user)
+    {
+        userService.checkUserAllowed(user);
+        userService.checkUserDataScope(user.getUserId());
+        user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
+        user.setUpdateBy(getUsername());
+        return toAjax(userService.resetPwd(user));
+    }
+
+    /**
+     * 状态修改
+     */
+    @PreAuthorize("@ss.hasPermi('system:user:edit')")
+    @Log(title = "用户管理", businessType = BusinessType.UPDATE)
+    @PutMapping("/changeStatus")
+    public AjaxResult changeStatus(@RequestBody SysUser user)
+    {
+        userService.checkUserAllowed(user);
+        userService.checkUserDataScope(user.getUserId());
+        user.setUpdateBy(getUsername());
+        return toAjax(userService.updateUserStatus(user));
+    }
+
+    /**
+     * 根据用户编号获取授权角色
+     */
+    @PreAuthorize("@ss.hasPermi('system:user:query')")
+    @GetMapping("/authRole/{userId}")
+    public AjaxResult authRole(@PathVariable("userId") Long userId)
+    {
+        AjaxResult ajax = AjaxResult.success();
+        SysUser user = userService.selectUserById(userId);
+        List<SysRole> roles = roleService.selectRolesByUserId(userId);
+        ajax.put("user", user);
+        ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
+        return ajax;
+    }
+
+    /**
+     * 用户授权角色
+     */
+    @PreAuthorize("@ss.hasPermi('system:user:edit')")
+    @Log(title = "用户管理", businessType = BusinessType.GRANT)
+    @PutMapping("/authRole")
+    public AjaxResult insertAuthRole(Long userId, Long[] roleIds)
+    {
+        userService.checkUserDataScope(userId);
+        userService.insertUserAuth(userId, roleIds);
+        return success();
+    }
+
+    /**
+     * 获取部门树列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:user:list')")
+    @GetMapping("/deptTree")
+    public AjaxResult deptTree(SysDept dept)
+    {
+        return success(deptService.selectDeptTreeList(dept));
+    }
+}

+ 183 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java

@@ -0,0 +1,183 @@
+package com.ruoyi.web.controller.tool;
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.utils.StringUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * swagger 用户测试方法
+ * 
+ * @author ruoyi
+ */
+@Api("用户信息管理")
+@RestController
+@RequestMapping("/test/user")
+public class TestController extends BaseController
+{
+    private final static Map<Integer, UserEntity> users = new LinkedHashMap<Integer, UserEntity>();
+    {
+        users.put(1, new UserEntity(1, "admin", "admin123", "15888888888"));
+        users.put(2, new UserEntity(2, "ry", "admin123", "15666666666"));
+    }
+
+    @ApiOperation("获取用户列表")
+    @GetMapping("/list")
+    public R<List<UserEntity>> userList()
+    {
+        List<UserEntity> userList = new ArrayList<UserEntity>(users.values());
+        return R.ok(userList);
+    }
+
+    @ApiOperation("获取用户详细")
+    @ApiImplicitParam(name = "userId", value = "用户ID", required = true, dataType = "int", paramType = "path", dataTypeClass = Integer.class)
+    @GetMapping("/{userId}")
+    public R<UserEntity> getUser(@PathVariable Integer userId)
+    {
+        if (!users.isEmpty() && users.containsKey(userId))
+        {
+            return R.ok(users.get(userId));
+        }
+        else
+        {
+            return R.fail("用户不存在");
+        }
+    }
+
+    @ApiOperation("新增用户")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "userId", value = "用户id", dataType = "Integer", dataTypeClass = Integer.class),
+        @ApiImplicitParam(name = "username", value = "用户名称", dataType = "String", dataTypeClass = String.class),
+        @ApiImplicitParam(name = "password", value = "用户密码", dataType = "String", dataTypeClass = String.class),
+        @ApiImplicitParam(name = "mobile", value = "用户手机", dataType = "String", dataTypeClass = String.class)
+    })
+    @PostMapping("/save")
+    public R<String> save(UserEntity user)
+    {
+        if (StringUtils.isNull(user) || StringUtils.isNull(user.getUserId()))
+        {
+            return R.fail("用户ID不能为空");
+        }
+        users.put(user.getUserId(), user);
+        return R.ok();
+    }
+
+    @ApiOperation("更新用户")
+    @PutMapping("/update")
+    public R<String> update(@RequestBody UserEntity user)
+    {
+        if (StringUtils.isNull(user) || StringUtils.isNull(user.getUserId()))
+        {
+            return R.fail("用户ID不能为空");
+        }
+        if (users.isEmpty() || !users.containsKey(user.getUserId()))
+        {
+            return R.fail("用户不存在");
+        }
+        users.remove(user.getUserId());
+        users.put(user.getUserId(), user);
+        return R.ok();
+    }
+
+    @ApiOperation("删除用户信息")
+    @ApiImplicitParam(name = "userId", value = "用户ID", required = true, dataType = "int", paramType = "path", dataTypeClass = Integer.class)
+    @DeleteMapping("/{userId}")
+    public R<String> delete(@PathVariable Integer userId)
+    {
+        if (!users.isEmpty() && users.containsKey(userId))
+        {
+            users.remove(userId);
+            return R.ok();
+        }
+        else
+        {
+            return R.fail("用户不存在");
+        }
+    }
+}
+
+@ApiModel(value = "UserEntity", description = "用户实体")
+class UserEntity
+{
+    @ApiModelProperty("用户ID")
+    private Integer userId;
+
+    @ApiModelProperty("用户名称")
+    private String username;
+
+    @ApiModelProperty("用户密码")
+    private String password;
+
+    @ApiModelProperty("用户手机")
+    private String mobile;
+
+    public UserEntity()
+    {
+
+    }
+
+    public UserEntity(Integer userId, String username, String password, String mobile)
+    {
+        this.userId = userId;
+        this.username = username;
+        this.password = password;
+        this.mobile = mobile;
+    }
+
+    public Integer getUserId()
+    {
+        return userId;
+    }
+
+    public void setUserId(Integer userId)
+    {
+        this.userId = userId;
+    }
+
+    public String getUsername()
+    {
+        return username;
+    }
+
+    public void setUsername(String username)
+    {
+        this.username = username;
+    }
+
+    public String getPassword()
+    {
+        return password;
+    }
+
+    public void setPassword(String password)
+    {
+        this.password = password;
+    }
+
+    public String getMobile()
+    {
+        return mobile;
+    }
+
+    public void setMobile(String mobile)
+    {
+        this.mobile = mobile;
+    }
+}

+ 125 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/core/config/SwaggerConfig.java

@@ -0,0 +1,125 @@
+package com.ruoyi.web.core.config;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import com.ruoyi.common.config.RuoYiConfig;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.models.auth.In;
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.service.ApiInfo;
+import springfox.documentation.service.ApiKey;
+import springfox.documentation.service.AuthorizationScope;
+import springfox.documentation.service.Contact;
+import springfox.documentation.service.SecurityReference;
+import springfox.documentation.service.SecurityScheme;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spi.service.contexts.SecurityContext;
+import springfox.documentation.spring.web.plugins.Docket;
+
+/**
+ * Swagger2的接口配置
+ * 
+ * @author ruoyi
+ */
+@Configuration
+public class SwaggerConfig
+{
+    /** 系统基础配置 */
+    @Autowired
+    private RuoYiConfig ruoyiConfig;
+
+    /** 是否开启swagger */
+    @Value("${swagger.enabled}")
+    private boolean enabled;
+
+    /** 设置请求的统一前缀 */
+    @Value("${swagger.pathMapping}")
+    private String pathMapping;
+
+    /**
+     * 创建API
+     */
+    @Bean
+    public Docket createRestApi()
+    {
+        return new Docket(DocumentationType.OAS_30)
+                // 是否启用Swagger
+                .enable(enabled)
+                // 用来创建该API的基本信息,展示在文档的页面中(自定义展示的信息)
+                .apiInfo(apiInfo())
+                // 设置哪些接口暴露给Swagger展示
+                .select()
+                // 扫描所有有注解的api,用这种方式更灵活
+                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
+                // 扫描指定包中的swagger注解
+                // .apis(RequestHandlerSelectors.basePackage("com.ruoyi.project.tool.swagger"))
+                // 扫描所有 .apis(RequestHandlerSelectors.any())
+                .paths(PathSelectors.any())
+                .build()
+                /* 设置安全模式,swagger可以设置访问token */
+                .securitySchemes(securitySchemes())
+                .securityContexts(securityContexts())
+                .pathMapping(pathMapping);
+    }
+
+    /**
+     * 安全模式,这里指定token通过Authorization头请求头传递
+     */
+    private List<SecurityScheme> securitySchemes()
+    {
+        List<SecurityScheme> apiKeyList = new ArrayList<SecurityScheme>();
+        apiKeyList.add(new ApiKey("Authorization", "Authorization", In.HEADER.toValue()));
+        return apiKeyList;
+    }
+
+    /**
+     * 安全上下文
+     */
+    private List<SecurityContext> securityContexts()
+    {
+        List<SecurityContext> securityContexts = new ArrayList<>();
+        securityContexts.add(
+                SecurityContext.builder()
+                        .securityReferences(defaultAuth())
+                        .operationSelector(o -> o.requestMappingPattern().matches("/.*"))
+                        .build());
+        return securityContexts;
+    }
+
+    /**
+     * 默认的安全上引用
+     */
+    private List<SecurityReference> defaultAuth()
+    {
+        AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
+        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
+        authorizationScopes[0] = authorizationScope;
+        List<SecurityReference> securityReferences = new ArrayList<>();
+        securityReferences.add(new SecurityReference("Authorization", authorizationScopes));
+        return securityReferences;
+    }
+
+    /**
+     * 添加摘要信息
+     */
+    private ApiInfo apiInfo()
+    {
+        // 用ApiInfoBuilder进行定制
+        return new ApiInfoBuilder()
+                // 设置标题
+                .title("标题:若依管理系统_接口文档")
+                // 描述
+                .description("描述:用于管理集团旗下公司的人员信息,具体包括XXX,XXX模块...")
+                // 作者信息
+                .contact(new Contact(ruoyiConfig.getName(), null, null))
+                // 版本
+                .version("版本号:" + ruoyiConfig.getVersion())
+                .build();
+    }
+}

+ 0 - 0
ruoyi-admin/src/main/resources/META-INF/spring-devtools.properties


部分文件因文件數量過多而無法顯示