ligang134 hace 3 años
padre
commit
bd4b529a8b
Se han modificado 100 ficheros con 10901 adiciones y 25 borrados
  1. 37 25
      README.md
  2. 115 0
      code.html
  3. 561 0
      pom.xml
  4. 45 0
      src/main/java/com/ydtech/SpringInsApplication.java
  5. 73 0
      src/main/java/com/ydtech/aop/GlobalExceptionHandler.java
  6. 78 0
      src/main/java/com/ydtech/aop/HttpAspect.java
  7. 124 0
      src/main/java/com/ydtech/aop/HttpAspect_CBIT.java
  8. 106 0
      src/main/java/com/ydtech/aop/MethodLogAspect.java
  9. 36 0
      src/main/java/com/ydtech/aop/RequestStringParamHandlerMethodArgumentResolver.java
  10. 47 0
      src/main/java/com/ydtech/aop/exception/DescribeException.java
  11. 59 0
      src/main/java/com/ydtech/aop/exception/ErrorInfo.java
  12. 31 0
      src/main/java/com/ydtech/aop/exception/ExceptionEnum.java
  13. 30 0
      src/main/java/com/ydtech/aop/request/DictEnum.java
  14. 19 0
      src/main/java/com/ydtech/aop/request/MethodLogAnnotation.java
  15. 19 0
      src/main/java/com/ydtech/aop/request/RequestSingleParam.java
  16. 38 0
      src/main/java/com/ydtech/components/AnShengRequestComponents.java
  17. 51 0
      src/main/java/com/ydtech/components/HengbangRequestComponents.java
  18. 39 0
      src/main/java/com/ydtech/components/InsTaskHistoryComponents.java
  19. 90 0
      src/main/java/com/ydtech/components/MyJedisPoolConfig.java
  20. 466 0
      src/main/java/com/ydtech/components/OrderComponents.java
  21. 42 0
      src/main/java/com/ydtech/components/RedisIdWorker.java
  22. 67 0
      src/main/java/com/ydtech/components/RenbaoRequestComponents.java
  23. 78 0
      src/main/java/com/ydtech/components/YongchengRequestApiComponents.java
  24. 48 0
      src/main/java/com/ydtech/components/YongchengRequestComponents.java
  25. 105 0
      src/main/java/com/ydtech/components/ZhongmeiRequestComponents.java
  26. 164 0
      src/main/java/com/ydtech/components/queue/ZmQuoteConsumer.java
  27. 34 0
      src/main/java/com/ydtech/components/scheduler/SchedulerTask.java
  28. 77 0
      src/main/java/com/ydtech/config/DictEnumConfig.java
  29. 53 0
      src/main/java/com/ydtech/config/DruidConfig.java
  30. 30 0
      src/main/java/com/ydtech/config/KaptchaConfig.java
  31. 30 0
      src/main/java/com/ydtech/config/MasterPasswordConfig.java
  32. 112 0
      src/main/java/com/ydtech/config/MvcConfig.java
  33. 27 0
      src/main/java/com/ydtech/config/RedisConfig.java
  34. 271 0
      src/main/java/com/ydtech/config/SwaggerConfig.java
  35. 104 0
      src/main/java/com/ydtech/config/WebSecurityConfig.java
  36. 36 0
      src/main/java/com/ydtech/config/WechatOpenProperties.java
  37. 24 0
      src/main/java/com/ydtech/constants/InsTaskHistoryEnum.java
  38. 41 0
      src/main/java/com/ydtech/constants/RedisConstant.java
  39. 49 0
      src/main/java/com/ydtech/constants/SysConstants.java
  40. 500 0
      src/main/java/com/ydtech/constants/enums/City.java
  41. 60 0
      src/main/java/com/ydtech/constants/enums/InsOrderStatus.java
  42. 31 0
      src/main/java/com/ydtech/constants/enums/InsQuoteFlow.java
  43. 107 0
      src/main/java/com/ydtech/constants/enums/InsYcAccident.java
  44. 52 0
      src/main/java/com/ydtech/constants/enums/InsurKind.java
  45. 87 0
      src/main/java/com/ydtech/constants/enums/Province.java
  46. 32 0
      src/main/java/com/ydtech/constants/enums/dict/DictionaryData.java
  47. 38 0
      src/main/java/com/ydtech/constants/enums/dict/DictionaryManagement.java
  48. 38 0
      src/main/java/com/ydtech/constants/enums/dict/EnumUtils.java
  49. 32 0
      src/main/java/com/ydtech/constants/enums/dict/GenderEnum.java
  50. 22 0
      src/main/java/com/ydtech/constants/enums/dict/IBaseEnum.java
  51. 41 0
      src/main/java/com/ydtech/constants/enums/dict/InsOrderStatusEnum.java
  52. 69 0
      src/main/java/com/ydtech/core/page/BaseController.java
  53. 38 0
      src/main/java/com/ydtech/core/page/BasePageVO.java
  54. 36 0
      src/main/java/com/ydtech/core/page/ColumnFilter.java
  55. 93 0
      src/main/java/com/ydtech/core/page/HttpResult.java
  56. 238 0
      src/main/java/com/ydtech/core/page/HttpStatus.java
  57. 68 0
      src/main/java/com/ydtech/core/page/PageRequest.java
  58. 179 0
      src/main/java/com/ydtech/core/page/PageResult.java
  59. 32 0
      src/main/java/com/ydtech/exception/SystemException.java
  60. 139 0
      src/main/java/com/ydtech/modules/admin/controller/AppLoginController.java
  61. 25 0
      src/main/java/com/ydtech/modules/admin/controller/DemoController.java
  62. 56 0
      src/main/java/com/ydtech/modules/admin/controller/SysCarouselController.java
  63. 100 0
      src/main/java/com/ydtech/modules/admin/controller/SysDeptController.java
  64. 331 0
      src/main/java/com/ydtech/modules/admin/controller/SysDictController.java
  65. 33 0
      src/main/java/com/ydtech/modules/admin/controller/SysLogController.java
  66. 356 0
      src/main/java/com/ydtech/modules/admin/controller/SysLoginController.java
  67. 54 0
      src/main/java/com/ydtech/modules/admin/controller/SysMenuController.java
  68. 86 0
      src/main/java/com/ydtech/modules/admin/controller/SysRoleController.java
  69. 280 0
      src/main/java/com/ydtech/modules/admin/controller/SysUserController.java
  70. 129 0
      src/main/java/com/ydtech/modules/admin/controller/UpdownLoadController.java
  71. 58 0
      src/main/java/com/ydtech/modules/admin/controller/WechatController.java
  72. 16 0
      src/main/java/com/ydtech/modules/admin/convert/SysCarouselConvert.java
  73. 16 0
      src/main/java/com/ydtech/modules/admin/convert/SysUserConvert.java
  74. 71 0
      src/main/java/com/ydtech/modules/admin/dao/SysAccountMapper.java
  75. 18 0
      src/main/java/com/ydtech/modules/admin/dao/SysCarouselMapper.java
  76. 138 0
      src/main/java/com/ydtech/modules/admin/dao/SysCbitErrorMapper.java
  77. 138 0
      src/main/java/com/ydtech/modules/admin/dao/SysCbitLogMapper.java
  78. 36 0
      src/main/java/com/ydtech/modules/admin/dao/SysDeptDao.java
  79. 36 0
      src/main/java/com/ydtech/modules/admin/dao/SysDictDao.java
  80. 36 0
      src/main/java/com/ydtech/modules/admin/dao/SysDictTypeDao.java
  81. 50 0
      src/main/java/com/ydtech/modules/admin/dao/SysLogDao.java
  82. 37 0
      src/main/java/com/ydtech/modules/admin/dao/SysMenuDao.java
  83. 14 0
      src/main/java/com/ydtech/modules/admin/dao/SysMethodLogDao.java
  84. 19 0
      src/main/java/com/ydtech/modules/admin/dao/SysMsgLogDao.java
  85. 36 0
      src/main/java/com/ydtech/modules/admin/dao/SysRoleDao.java
  86. 36 0
      src/main/java/com/ydtech/modules/admin/dao/SysRoleMenuDao.java
  87. 38 0
      src/main/java/com/ydtech/modules/admin/dao/SysUserDao.java
  88. 20 0
      src/main/java/com/ydtech/modules/admin/dao/SysUserMapper.java
  89. 40 0
      src/main/java/com/ydtech/modules/admin/dao/SysUserRoleDao.java
  90. 20 0
      src/main/java/com/ydtech/modules/admin/dao/SysUserRoleMapper.java
  91. 501 0
      src/main/java/com/ydtech/modules/admin/dao/impl/SysDeptDaoImpl.java
  92. 372 0
      src/main/java/com/ydtech/modules/admin/dao/impl/SysDictDaoImpl.java
  93. 344 0
      src/main/java/com/ydtech/modules/admin/dao/impl/SysDictTypeDaoImpl.java
  94. 387 0
      src/main/java/com/ydtech/modules/admin/dao/impl/SysMenuDaoImpl.java
  95. 60 0
      src/main/java/com/ydtech/modules/admin/dao/impl/SysMsgLogDaoImpl.java
  96. 319 0
      src/main/java/com/ydtech/modules/admin/dao/impl/SysRoleDaoImpl.java
  97. 307 0
      src/main/java/com/ydtech/modules/admin/dao/impl/SysRoleMenuDaoImpl.java
  98. 503 0
      src/main/java/com/ydtech/modules/admin/dao/impl/SysUserDaoImpl.java
  99. 359 0
      src/main/java/com/ydtech/modules/admin/dao/impl/SysUserRoleDaoImpl.java
  100. 38 0
      src/main/java/com/ydtech/modules/admin/model/SysAccount.java

+ 37 - 25
README.md

@@ -1,37 +1,49 @@
-# insagent
+## 更新公告 
+* 版本号:v0.0.1
+* 发布时间:2023-03-30
+* PC版试运行
+* PC永安API方式,报价、核保、影像上传、缴费、电子保单。
+* PC中煤爬虫方式,报价、核保、影像上传、缴费、电子保单。
 
-#### 介绍
-晋掌柜 PC端 Java程序
+---
+* 版本号:v0.0.2 
+* 发布时间:待发布
+* 保险公司增加配置,是否开启报价功能。
+* 系统日志优化
+* 任务池功能上线
 
-#### 软件架构
-软件架构说明
+* 订单状态调整如下:
+* 1、报价中 : 所有未提交核保的均为报价中(包括拒保订单 )
 
+* 2、待核保: 已提交核保,并转人工核保状态
 
-#### 安装教程
+* 3、已核保待缴费: 自动核保或者人工核保审核通过
 
-1.  xxxx
-2.  xxxx
-3.  xxxx
+* 4、已承保 : 客户缴费完成生成保单状态
 
-#### 使用说明
+* 5、核保退回: 人工核保退回状态,直至再次提交核保,状态修改为待核保
 
-1.  xxxx
-2.  xxxx
-3.  xxxx
 
-#### 参与贡献
 
-1.  Fork 本仓库
-2.  新建 Feat_xxx 分支
-3.  提交代码
-4.  新建 Pull Request
 
 
-#### 特技
 
-1.  使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
-2.  Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com)
-3.  你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目
-4.  [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
-5.  Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help)
-6.  Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
+
+
+
+
+
+
+
+
+
+## 规则说明
+* 版本号:v0.0.1
+```
+订单:
+    一个用户下,同一个车架号唯一
+```
+
+
+-----
+* 版本号:v0.0.2

+ 115 - 0
code.html

@@ -0,0 +1,115 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+    <meta charset="UTF-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>Document</title>
+    <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
+</head>
+
+<body>
+    <div class="body">
+        <h2 style="margin-bottom:50px;">客户手机号认证</h2>
+        <div style="margin-bottom: 20px;">
+            <input id="test" name="test" type="text" placeholder="输入验证码" />
+        </div>
+        <div>
+            <button id="code" style="background-color:#ffa133;">获取验证码</button>
+            <button id="tijiao" style="background-color:#95bbff;">提交</button>
+        </div>
+    </div>
+</body>
+<script>
+    //获取url中的参数
+    function getQueryString(name) {
+        var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
+        var r = window.location.search.substr(1).match(reg);
+        if (r != null) return unescape(r[2]); return null;
+    }
+    var baseurl = getQueryString("baseurl");
+    var orderno = getQueryString("orderno");
+    // var baseurl = 'http://test.baoxianzhanggui.com:8080';
+    // var orderno = '1554408865628139520';
+    $("#code").click(function () {
+        $.ajax({
+            contentType: "application/json",
+            type: "post",     // 请求方式
+            data: JSON.stringify({
+                orderno: orderno,
+            }),
+            url: baseurl + "/api/yongan/getMessage", // 请求路径
+            dataType: "json",   // 预期返回一个 json 类型数据
+            success: function (data) {   // data是形参名,代表返回的数据
+                console.log(data)
+
+            }
+        });
+    });
+    $("#tijiao").click(function () {
+        var code = $("input").val();
+            $.ajax({
+                contentType: "application/json",
+                type: "post",        // 请求方式
+                data: JSON.stringify({
+                    orderno: orderno,
+                    verificationCode: code,
+                }),
+                url: baseurl + "/api/yongan/getPayUrl", // 请求路径
+                dataType: "json",   // 预期返回一个 json 类型数据
+                success: function (data) {   // data是形参名,代表返回的数据
+                    console.log(data)
+                    if (data.code == '200') {
+                        window.location.href = data.msg;
+                    }
+                }
+            });
+    });
+</script>
+
+</html>
+<style>
+    .body {
+        padding: 30px;
+        width: 100%;
+        height: auto;
+        box-sizing: border-box;
+        display: flex;
+        flex-direction: column;
+        align-items: center;
+        position: absolute;
+        top: 0;
+        left: 0;
+        bottom: 0;
+        right: 0;
+        margin: auto;
+    }
+
+    input {
+        outline-style: none;
+        border: 1px solid #ccc;
+        border-radius: 3px;
+        padding: 13px 14px;
+        width: 250px;
+        font-size: 14px;
+        font-weight: 700;
+        font-family: "Microsoft soft";
+    }
+
+    input:focus {
+        border-color: #66afe9;
+        outline: 0;
+        -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);
+        box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6)
+    }
+
+    button {
+        border: none;
+        width: 130px;
+        height: 40px;
+        border-radius: 10px;
+        color: #fff;
+
+    }
+</style>

+ 561 - 0
pom.xml

@@ -0,0 +1,561 @@
+<?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.ydtech</groupId>
+    <artifactId>insagent</artifactId>
+    <version>0.0.1</version>
+    <packaging>jar</packaging>
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.1.9.RELEASE</version>
+        <relativePath/> <!-- lookup parent from repository -->
+    </parent>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+        <java.version>1.8</java.version>
+        <swagger.version>2.9.2</swagger.version>
+        <druid.version>1.1.10</druid.version>
+        <jwt.version>0.9.1</jwt.version>
+        <fastjson.version>1.2.58</fastjson.version>
+        <log4j.version>1.2.17</log4j.version>
+        <kaptcha.version>0.0.9</kaptcha.version>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.springframework.boot</groupId>
+                    <artifactId>spring-boot-starter-logging</artifactId>
+                </exclusion>
+                <!--                &lt;!&ndash; 打成war包,排除spring-boot-starter-web中的Tomcat&ndash;&gt;-->
+                <!--                <exclusion>-->
+                <!--                    <groupId>org.springframework.boot</groupId>-->
+                <!--                    <artifactId>spring-boot-starter-tomcat</artifactId>-->
+                <!--                </exclusion>-->
+            </exclusions>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-log4j</artifactId>
+            <version>1.3.8.RELEASE</version>
+        </dependency>
+
+        <!--        <dependency>-->
+        <!--            <groupId>org.springframework.boot</groupId>-->
+        <!--            <artifactId>spring-boot-starter-tomcat</artifactId>-->
+        <!--            &lt;!&ndash;打包的时候可以不用包进去,别的设施会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。-->
+        <!--                相当于compile,但是打包阶段做了exclude操作&ndash;&gt;-->
+        <!--            <scope>provided</scope>-->
+        <!--        </dependency>-->
+
+        <!--spring切面aop依赖-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-aop</artifactId>
+        </dependency>
+
+        <!--数据库相关-->
+        <!--
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-jdbc</artifactId>
+            <version>4.2.5.RELEASE</version>
+        </dependency>
+        -->
+        <!--SpringBoot 使用 JDBCTemplate 引用下面这个包才会自动注入,不要引用上面按个-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-jdbc</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.github.drinkjava2</groupId>
+            <artifactId>jdialects</artifactId>
+            <version>1.0.7</version> <!--或Maven最新版-->
+        </dependency>
+
+        <!-- 加入p6spy -->
+        <dependency>
+            <groupId>p6spy</groupId>
+            <artifactId>p6spy</artifactId>
+            <version>3.8.5</version>
+        </dependency>
+
+        <!-- kaptcha -->
+        <dependency>
+            <groupId>com.github.axet</groupId>
+            <artifactId>kaptcha</artifactId>
+            <version>${kaptcha.version}</version>
+        </dependency>
+        <!-- mysql -->
+        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+
+        <!-- druid -->
+        <!--        <dependency>-->
+        <!--            <groupId>com.alibaba</groupId>-->
+        <!--            <artifactId>druid-spring-boot-starter</artifactId>-->
+        <!--            <version>${druid.version}</version>-->
+        <!--        </dependency>-->
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>druid</artifactId>
+            <version>1.1.10</version>
+        </dependency>
+
+
+        <!--        &lt;!&ndash; swagger &ndash;&gt;-->
+        <!--        <dependency>-->
+        <!--            <groupId>io.springfox</groupId>-->
+        <!--            <artifactId>springfox-swagger2</artifactId>-->
+        <!--            <version>${swagger.version}</version>-->
+        <!--            <exclusions>-->
+        <!--                <exclusion>-->
+        <!--                    <groupId>org.mapstruct</groupId>-->
+        <!--                    <artifactId>mapstruct</artifactId>-->
+        <!--                </exclusion>-->
+        <!--            </exclusions>-->
+        <!--        </dependency>-->
+        <!--        <dependency>-->
+        <!--            <groupId>io.springfox</groupId>-->
+        <!--            <artifactId>springfox-swagger-ui</artifactId>-->
+        <!--            <version>${swagger.version}</version>-->
+        <!--        </dependency>-->
+
+        <!--引入Knife4j的官方start包,Swagger2基于Springfox2.10.5项目-->
+        <dependency>
+            <groupId>com.github.xiaoymin</groupId>
+            <!--使用Swagger2-->
+            <artifactId>knife4j-spring-boot-starter</artifactId>
+            <version>2.0.9</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.mapstruct</groupId>
+                    <artifactId>mapstruct</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.plugin</groupId>
+            <artifactId>spring-plugin-core</artifactId>
+            <version>2.0.0.RELEASE</version>
+        </dependency>
+        <!--        <dependency>-->
+        <!--            <groupId>org.springframework.plugin</groupId>-->
+        <!--            <artifactId>spring-plugin-metadata</artifactId>-->
+        <!--            <version>2.0.0.RELEASE</version>-->
+        <!--        </dependency>-->
+
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-security</artifactId>
+        </dependency>
+
+        <!-- jwt -->
+        <dependency>
+            <groupId>io.jsonwebtoken</groupId>
+            <artifactId>jjwt</artifactId>
+            <version>${jwt.version}</version>
+        </dependency>
+        <!-- fastjson -->
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>${fastjson.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>joda-time</groupId>
+            <artifactId>joda-time</artifactId>
+            <version>2.10.5</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.github.promeg</groupId>
+            <artifactId>tinypinyin</artifactId>
+            <version>2.0.3</version>
+        </dependency>
+
+        <!-- 爬虫开始 -->
+        <!-- spider -->
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient</artifactId>
+            <version>4.5.6</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpcore</artifactId>
+            <version>4.4.10</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpmime</artifactId>
+            <version>4.5.6</version>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
+        <dependency>
+            <groupId>redis.clients</groupId>
+            <artifactId>jedis</artifactId>
+            <version>2.9.3</version>
+        </dependency>
+
+
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+            <version>2.8.5</version>
+            <scope>compile</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>com.jayway.jsonpath</groupId>
+            <artifactId>json-path</artifactId>
+            <version>2.4.0</version>
+        </dependency>
+
+        <!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
+        <dependency>
+            <groupId>org.jsoup</groupId>
+            <artifactId>jsoup</artifactId>
+            <version>1.10.3</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.codeborne</groupId>
+            <artifactId>selenide</artifactId>
+            <version>4.7</version>
+            <scope>test</scope>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.seleniumhq.selenium</groupId>
+                    <artifactId>selenium</artifactId>
+                </exclusion>
+
+                <exclusion>
+                    <groupId>org.seleniumhq.selenium</groupId>
+                    <artifactId>selenium-support</artifactId>
+                </exclusion>
+
+            </exclusions>
+        </dependency>
+
+        <dependency>
+            <groupId>org.seleniumhq.selenium</groupId>
+            <artifactId>selenium-java</artifactId>
+            <version>3.3.0</version>
+            <!--            <version>2.53.1</version>-->
+        </dependency>
+
+        <dependency>
+            <groupId>org.seleniumhq.selenium</groupId>
+            <artifactId>selenium-chrome-driver</artifactId>
+            <version>2.53.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.seleniumhq.selenium</groupId>
+            <artifactId>selenium-api</artifactId>
+            <version>2.53.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.seleniumhq.selenium</groupId>
+            <artifactId>selenium-edge-driver</artifactId>
+            <version>2.53.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.seleniumhq.selenium</groupId>
+            <artifactId>selenium-firefox-driver</artifactId>
+            <version>2.53.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.seleniumhq.selenium</groupId>
+            <artifactId>selenium-ie-driver</artifactId>
+            <version>2.53.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.seleniumhq.selenium</groupId>
+            <artifactId>selenium-remote-driver</artifactId>
+            <version>2.53.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.seleniumhq.selenium</groupId>
+            <artifactId>selenium-safari-driver</artifactId>
+            <version>2.53.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.codeborne</groupId>
+            <artifactId>phantomjsdriver</artifactId>
+            <version>1.4.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.seleniumhq.selenium</groupId>
+            <artifactId>selenium-support</artifactId>
+            <version>2.53.1</version>
+        </dependency>
+
+        <!--mapStruct依赖-->
+        <dependency>
+            <groupId>org.mapstruct</groupId>
+            <artifactId>mapstruct-jdk8</artifactId>
+            <version>1.2.0.Final</version>
+        </dependency>
+        <dependency>
+            <groupId>org.mapstruct</groupId>
+            <artifactId>mapstruct-processor</artifactId>
+            <scope>provided</scope>
+            <version>1.2.0.Final</version>
+        </dependency>
+
+        <!--     EXCEL导出-->
+        <dependency>
+            <groupId>cn.afterturn</groupId>
+            <artifactId>easypoi-base</artifactId>
+            <version>4.1.2</version>
+        </dependency>
+        <dependency>
+            <groupId>cn.afterturn</groupId>
+            <artifactId>easypoi-web</artifactId>
+            <version>4.1.2</version>
+        </dependency>
+        <dependency>
+            <groupId>cn.afterturn</groupId>
+            <artifactId>easypoi-annotation</artifactId>
+            <version>4.1.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+        </dependency>
+        <!-- 分页插件 -->
+        <dependency>
+            <groupId>com.github.pagehelper</groupId>
+            <artifactId>pagehelper-spring-boot-starter</artifactId>
+            <version>1.2.12</version>
+        </dependency>
+        <!--mybatis-->
+        <dependency>
+            <groupId>org.mybatis.spring.boot</groupId>
+            <artifactId>mybatis-spring-boot-starter</artifactId>
+            <version>2.1.3</version>
+        </dependency>
+
+        <!--mapper -->
+        <dependency>
+            <groupId>tk.mybatis</groupId>
+            <artifactId>mapper-spring-boot-starter</artifactId>
+            <version>1.1.4</version>
+        </dependency>
+        <!-- mybatis配置文件生成工具 -->
+        <dependency>
+            <groupId>org.mybatis.generator</groupId>
+            <artifactId>mybatis-generator-core</artifactId>
+            <version>1.3.6</version>
+        </dependency>
+        <dependency>
+            <groupId>javax.el</groupId>
+            <artifactId>javax.el-api</artifactId>
+            <version>3.0.0</version>
+        </dependency>
+
+        <!--    Hutool是一个小而全的Java工具类库    -->
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.7.7</version>
+        </dependency>
+
+        <!-- sftp连接 -->
+        <dependency>
+            <groupId>com.jcraft</groupId>
+            <artifactId>jsch</artifactId>
+            <version>0.1.54</version>
+        </dependency>
+        <!-- sftp连接 end-->
+        <!-- xml接口请求 -->
+        <dependency>
+            <groupId>com.fasterxml.jackson.dataformat</groupId>
+            <artifactId>jackson-dataformat-xml</artifactId>
+            <version>2.9.0</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-httpclient</groupId>
+            <artifactId>commons-httpclient</artifactId>
+            <version>3.1</version>
+        </dependency>
+        <!-- xml接口请求 end -->
+
+        <!--类似redis的map-->
+        <dependency>
+            <groupId>net.jodah</groupId>
+            <artifactId>expiringmap</artifactId>
+            <version>0.5.8</version>
+        </dependency>
+        <!--redis-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-redis</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-pool2</artifactId>
+        </dependency>
+        <!--集成微信-->
+        <dependency>
+            <groupId>com.github.binarywang</groupId>
+            <artifactId>weixin-java-mp</artifactId>
+            <version>4.3.8.B</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-configuration-processor</artifactId>
+            <optional>true</optional>
+        </dependency>
+
+        <!--集成 mybatis-plus -->
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+            <version>3.4.2</version>
+        </dependency>
+        <dependency>
+            <groupId>icu.mhb</groupId>
+            <artifactId>mybatis-plus-join</artifactId>
+            <version>1.0.2</version>
+        </dependency>
+
+        <!-- 测试 -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+
+        <dependency>
+            <groupId>org.reflections</groupId>
+            <artifactId>reflections</artifactId>
+            <version>0.9.10</version>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
+            <version>RELEASE</version>
+            <scope>test</scope>
+        </dependency>
+
+        <!--thumbnailator图片处理-->
+        <dependency>
+            <groupId>net.coobird</groupId>
+            <artifactId>thumbnailator</artifactId>
+            <version>0.4.8</version>
+        </dependency>
+        <!-- rabbitmq依赖 -->
+        <!--        <dependency>-->
+        <!--            <groupId>org.springframework.boot</groupId>-->
+        <!--            <artifactId>spring-boot-starter-amqp</artifactId>-->
+        <!--        </dependency>-->
+
+    </dependencies>
+
+
+    <build>
+        <!-- 应与application.properties(或application.yml)中context-path保持一致 -->
+        <finalName>ROOT</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+                <configuration>
+                    <!--                    &lt;!&ndash;不打入jar包的文件类型或者路径&ndash;&gt;-->
+                    <!--                    <excludes>-->
+                    <!--                        <exclude>*.properties</exclude>-->
+                    <!--                        <exclude>*.yml</exclude>-->
+                    <!--                        <exclude>*.yaml</exclude>-->
+                    <!--                    </excludes>-->
+                    <archive>
+                        <manifest>
+                            <!-- 执行的主程序路径 -->
+                            <mainClass>com.ydtech.SpringInsApplication</mainClass>
+                            <!--是否要把第三方jar放到manifest的classpath中-->
+                            <addClasspath>true</addClasspath>
+                            <!--生成的manifest中classpath的前缀,因为要把第三方jar放到lib目录下,所以classpath的前缀是lib/-->
+                            <classpathPrefix>lib/</classpathPrefix>
+                            <!-- 打包时 MANIFEST.MF 文件不记录的时间戳版本 -->
+                            <useUniqueVersions>false</useUniqueVersions>
+                        </manifest>
+                        <manifestEntries>
+                            <!-- 在 Class-Path 下添加配置文件的路径 -->
+                            <Class-Path>config/</Class-Path>
+                        </manifestEntries>
+                    </archive>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>copy-dependencies</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>${project.build.directory}/lib/</outputDirectory>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <!--            <plugin>-->
+            <!--                <artifactId>maven-resources-plugin</artifactId>-->
+            <!--                <executions>-->
+            <!--                    <execution>-->
+            <!--                        <id>copy-resources</id>-->
+            <!--                        <phase>package</phase>-->
+            <!--                        <goals>-->
+            <!--                            <goal>copy-resources</goal>-->
+            <!--                        </goals>-->
+            <!--                        <configuration>-->
+            <!--                            <resources>-->
+            <!--                                &lt;!&ndash;把配置文件打包到指定路径&ndash;&gt;-->
+            <!--                                <resource>-->
+            <!--                                    <directory>src/main/resources/</directory>-->
+            <!--                                    <includes>-->
+            <!--                                        <include>*.properties</include>-->
+            <!--                                        <include>*.yml</include>-->
+            <!--                                        <exclude>*.yaml</exclude>-->
+            <!--                                    </includes>-->
+            <!--                                </resource>-->
+            <!--                            </resources>-->
+            <!--                            <outputDirectory>${project.build.directory}/config</outputDirectory>-->
+            <!--                        </configuration>-->
+            <!--                    </execution>-->
+            <!--                </executions>-->
+            <!--            </plugin>-->
+        </plugins>
+    </build>
+
+</project>

+ 45 - 0
src/main/java/com/ydtech/SpringInsApplication.java

@@ -0,0 +1,45 @@
+package com.ydtech;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cache.annotation.EnableCaching;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.TreeMap;
+
+
+//打成war包时的代码 配合pom.xml中的配置
+//参考:https://blog.csdn.net/qq_33512843/article/details/80951741
+//@SpringBootApplication
+//@MapperScan({"com.ydtech.modules.*.dao"})
+//@EnableScheduling // 开启定时任务功能
+//@EnableCaching
+//public class SpringInsApplication extends SpringBootServletInitializer {
+//
+//    @Override
+//    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
+//        return application.sources(SpringInsApplication.class);
+//    }
+//
+//    public static void main(String[] args) throws Exception {
+//        SpringApplication.run(SpringInsApplication.class, args);
+//    }
+//
+//}
+
+
+//打包jar 包时的代码 配合pom.xml中的配置
+@SpringBootApplication
+@MapperScan({"com.ydtech.modules.*.dao"})
+@EnableScheduling // 开启定时任务功能
+@EnableCaching
+public class SpringInsApplication {
+
+	public static void main(String[] args) {
+		SpringApplication.run(SpringInsApplication.class, args);
+	}
+
+}

+ 73 - 0
src/main/java/com/ydtech/aop/GlobalExceptionHandler.java

@@ -0,0 +1,73 @@
+package com.ydtech.aop;
+
+import com.ydtech.aop.exception.DescribeException;
+import com.ydtech.aop.exception.ErrorInfo;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.exception.SystemException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.core.annotation.Order;
+import org.springframework.validation.BindException;
+import org.springframework.validation.BindingResult;
+import org.springframework.validation.ObjectError;
+import org.springframework.web.bind.MethodArgumentNotValidException;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.ResponseStatus;
+
+import java.util.List;
+
+@ControllerAdvice
+public class GlobalExceptionHandler {
+
+    private final static Logger LOGGER = LoggerFactory.getLogger(GlobalExceptionHandler.class);
+
+    /**
+     * 判断错误是否是已定义的已知错误,不是则由未知错误代替,同时记录在log中
+     *
+     * @param e 异常
+     * @return
+     */
+    @ExceptionHandler(value = Exception.class)
+    @ResponseBody
+    public HttpResult exceptionGet(Exception e) {
+        LOGGER.error("【系统异常】{}", e);
+        if (e.getStackTrace() != null && e.getStackTrace().length > 0) {
+            StackTraceElement element = e.getStackTrace()[0];
+            ErrorInfo errorInfo = new ErrorInfo(
+                    element.getClassName(),
+                    element.getFileName(),
+                    element.getMethodName(),
+                    element.getLineNumber() + ""
+            );
+
+            return HttpResult.error(-9999, errorInfo.toString());
+        }
+
+        return HttpResult.error(-1, "发生错误,请与管理员联系");
+    }
+
+    @ExceptionHandler(value = DescribeException.class)
+    @ResponseBody
+    public HttpResult describeExceptionHandle(DescribeException describeException){
+        return HttpResult.error(describeException.getCode(), describeException.getMessage());
+    }
+
+    @ExceptionHandler(value = SystemException.class)
+    @ResponseBody
+    public HttpResult systemExceptionHandle(SystemException systemException){
+        return HttpResult.error(Integer.parseInt(systemException.getCode()), systemException.getMessage());
+    }
+
+    @ExceptionHandler(value = MethodArgumentNotValidException.class)
+    @ResponseBody
+    public HttpResult methodArgumentNotValidExceptionHandle(MethodArgumentNotValidException methodArgumentNotValidException){
+        BindingResult bindingResult = methodArgumentNotValidException.getBindingResult();
+        List<ObjectError> objectErrors = bindingResult.getAllErrors();
+        String message = objectErrors.get(0).getDefaultMessage();
+        return HttpResult.error(400, message);
+    }
+
+}
+

+ 78 - 0
src/main/java/com/ydtech/aop/HttpAspect.java

@@ -0,0 +1,78 @@
+package com.ydtech.aop;
+
+
+import com.ydtech.core.page.HttpResult;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * https://blog.csdn.net/qq_31001665/article/details/71357825
+ * Created by zhuzhengping on 2017/5/4.
+ * 切面类
+ * AOP切面,记录方法的调用,入参以及出參
+ */
+@Aspect
+@Component
+public class HttpAspect {
+
+    private final static Logger LOGGER = LoggerFactory.getLogger(HttpAspect.class);
+
+    @Autowired
+    private GlobalExceptionHandler exceptionHandle;
+
+    @Pointcut("execution(public * com.ydtech.*.controller.*.*(..))")
+//    @Pointcut("@annotation(logOnly)")
+    public void log() {
+
+    }
+
+    @Before("log()")
+    public void doBefore(JoinPoint joinPoint) {
+        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+        HttpServletRequest request = attributes.getRequest();
+
+        //url
+        LOGGER.info("url={}", request.getRequestURL());
+        //method
+        LOGGER.info("method={}", request.getMethod());
+        //ip
+        LOGGER.info("id={}", request.getRemoteAddr());
+        //class_method
+        LOGGER.info("class_method={}", joinPoint.getSignature().getDeclaringTypeName() + "," + joinPoint.getSignature().getName());
+        //args[]
+        LOGGER.info("args={}", joinPoint.getArgs());
+    }
+
+    @Around("log()")
+    public Object doAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
+        HttpResult result = null;
+        try {
+
+        } catch (Exception e) {
+            return exceptionHandle.exceptionGet(e);
+        }
+        if (result == null) {
+            return proceedingJoinPoint.proceed();
+        } else {
+            return result;
+        }
+    }
+
+    @AfterReturning(pointcut = "log()", returning = "object")//打印输出结果
+    public void doAfterReturing(Object object) {
+        if (object != null) {
+            LOGGER.info("response={}", object.toString());
+        }
+    }
+}
+
+

+ 124 - 0
src/main/java/com/ydtech/aop/HttpAspect_CBIT.java

@@ -0,0 +1,124 @@
+package com.ydtech.aop;
+
+import com.alibaba.fastjson.JSONObject;
+
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.admin.model.SysLog;
+import com.ydtech.modules.admin.service.SysLogService;
+import com.ydtech.security.utils.JwtTokenUtils;
+import io.swagger.annotations.ApiOperation;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+import java.lang.reflect.Method;
+import java.util.Date;
+
+/**
+ * 切面类
+ * AOP切面,记录方法的调用,入参以及出參
+ */
+@Aspect
+@Component
+public class HttpAspect_CBIT {
+
+    private final static Logger LOGGER = LoggerFactory.getLogger(HttpAspect.class);
+
+    @Autowired
+    private GlobalExceptionHandler exceptionHandle;
+    @Autowired
+    private SysLogService sysLogService;
+
+
+    @Pointcut("execution(public * com.ydtech.modules.ins.controller.InsCBITAPIController.*(..)) || execution(public * com.ydtech.modules.ins.controller.InsALY_CBITAPIController.*(..))" +
+            "|| execution(public * com.ydtech.modules.ins.controller.YongAnController.*(..))")
+    public void log() {
+
+    }
+
+    @Before("log()")
+    public void doBefore(JoinPoint joinPoint) {
+        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+        HttpServletRequest request = attributes.getRequest();
+
+        //请求人 url method ip class_method
+        SysLog sysLog = new SysLog(JwtTokenUtils.getUsernameFromRequest(request), request.getRequestURL().toString(), request.getMethod(), joinPoint.getSignature().getDeclaringTypeName(), joinPoint.getSignature().getName(), request.getRemoteAddr(), new Date());
+
+        try {
+            //获取注解注释
+            String annotationValue = getAnnotationValue(joinPoint);
+            sysLog.setDescription(annotationValue);
+
+            //获取请求参数
+            Object[] args = joinPoint.getArgs();
+            for (Object obj : args) {
+                if (obj.getClass().getName().startsWith("com.ydtech.modules") || obj instanceof String) {
+                    sysLog.setParams(JSONObject.toJSON(obj).toString());
+                }
+            }
+            if (request.getMethod().equals("GET")) {
+                sysLog.setParams(request.getQueryString());
+            }
+            sysLog.preInsert();
+            System.out.println("=================================>>>>>调用的接口:" + sysLog.getUrl() + "<<<<<=================================");
+            System.out.println("=================================>>>>>调用的接口:" + sysLog.getUrl() + "<<<<<=================================");
+            System.out.println("=================================>>>>>调用的接口:" + sysLog.getUrl() + "<<<<<=================================");
+            sysLogService.insert(sysLog);
+        } catch (ClassNotFoundException e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    @Around("log()")
+    public Object doAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
+        HttpResult result = null;
+        try {
+
+        } catch (Exception e) {
+            return exceptionHandle.exceptionGet(e);
+        }
+        if (result == null) {
+            return proceedingJoinPoint.proceed();
+        } else {
+            return result;
+        }
+    }
+
+    @AfterReturning(pointcut = "log()", returning = "object")//打印输出结果
+    public void doAfterReturing(Object object) {
+        if (object != null) {
+            LOGGER.info("response={}", object.toString());
+        }
+    }
+
+    private String getAnnotationValue(JoinPoint joinPoint) throws ClassNotFoundException {
+        //反射获取类
+        Class<?> clazz = Class.forName(joinPoint.getSignature().getDeclaringTypeName());
+        //通过方法名反射获取method
+        Method[] declaredMethods = clazz.getDeclaredMethods();
+        //请求方法名
+        String requestName = joinPoint.getSignature().getName();
+
+        for (Method method : declaredMethods) {
+            String name = method.getName();
+            //获取方法上的注解
+            if (name.equals(requestName)) {
+                ApiOperation annotation = method.getAnnotation(ApiOperation.class);
+                if (annotation != null) {
+                    return annotation.value();
+                }
+            }
+        }
+        return null;
+    }
+}
+
+

+ 106 - 0
src/main/java/com/ydtech/aop/MethodLogAspect.java

@@ -0,0 +1,106 @@
+package com.ydtech.aop;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.ydtech.aop.request.MethodLogAnnotation;
+import com.ydtech.modules.admin.dao.SysMethodLogDao;
+import com.ydtech.modules.admin.model.SysMethodLog;
+import lombok.Data;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.Signature;
+import org.aspectj.lang.annotation.*;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import java.lang.reflect.Method;
+import java.util.Date;
+
+/**
+ * 切面类
+ * AOP切面,记录方法的调用,入参以及出參
+ */
+@Aspect
+@Component
+@Data
+public class MethodLogAspect {
+
+    @Autowired
+    private SysMethodLogDao sysMethodLogDao;
+
+    @Value("${open.method.log}")
+    private String methodLogSwitch;
+
+
+    /**
+     * 保存线程共享变量,开始执行时间
+     */
+    ThreadLocal<Long> startTime = new ThreadLocal<>();
+
+
+    private final static Logger LOGGER = LoggerFactory.getLogger(MethodLogAspect.class);
+
+//    @Pointcut("execution(public * com.ydtech.*.*.*.*(..))")
+    @Pointcut("@annotation(com.ydtech.aop.request.MethodLogAnnotation)")
+    private void methodLog() {
+    }
+
+    /**
+     * 环绕通知
+     */
+    @Around("methodLog()")
+    public Object advice(ProceedingJoinPoint joinPoint) throws Throwable {
+        //记下请求开始时间
+        startTime.set(System.currentTimeMillis());
+
+        Signature signature = joinPoint.getSignature();
+        MethodSignature methodSignature = (MethodSignature) signature;
+        Method method = methodSignature.getMethod();
+        MethodLogAnnotation mla = method.getAnnotation(MethodLogAnnotation.class);
+        //获取切入点所在目标对象
+        Object targetObj =joinPoint.getTarget();
+
+        SysMethodLog sml = new SysMethodLog();
+        sml.setDescription(mla.title());
+        sml.setCreateTime(new Date());
+        sml.setRequestMethod(method.getName());
+        sml.setRequestElapsedTime(System.currentTimeMillis() - startTime.get());
+        sml.setRequestClass(targetObj.getClass().getName());
+
+        //4. 获取方法的参数
+        Object[] args = joinPoint.getArgs();
+        JSONArray json = (JSONArray) JSONObject.toJSON(args);
+        sml.setParams(json.toJSONString());
+        sysMethodLogDao.insert(sml);
+
+        //执行到这里走原来的方法
+        Object proceed = joinPoint.proceed();
+        System.out.println("around after....");
+        return proceed;
+    }
+
+    @Before("methodLog()")
+    public void record(JoinPoint joinPoint) {
+//        System.out.println("Before");
+//        Signature signature = joinPoint.getSignature();
+//        MethodSignature methodSignature = (MethodSignature) signature;
+//        Method method = methodSignature.getMethod();
+//        MethodLogAnnotation mla = method.getAnnotation(MethodLogAnnotation.class);
+//        System.err.println("tttt:"+mla.title());
+//        System.err.println("tttt================");
+//        startTime = System.currentTimeMillis();
+    }
+
+    @After("methodLog()")
+    public void after(JoinPoint joinPoint) {
+
+
+
+    }
+}
+
+

+ 36 - 0
src/main/java/com/ydtech/aop/RequestStringParamHandlerMethodArgumentResolver.java

@@ -0,0 +1,36 @@
+package com.ydtech.aop;
+
+import com.alibaba.fastjson.JSONObject;
+import com.ydtech.aop.request.RequestSingleParam;
+import org.springframework.core.MethodParameter;
+import org.springframework.web.bind.support.WebDataBinderFactory;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.method.support.HandlerMethodArgumentResolver;
+import org.springframework.web.method.support.ModelAndViewContainer;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.BufferedReader;
+
+public class RequestStringParamHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {
+
+    @Override
+    public boolean supportsParameter(MethodParameter methodParameter) {
+        return methodParameter.hasParameterAnnotation(RequestSingleParam.class);
+    }
+
+    @Override
+    public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) throws Exception {
+        RequestSingleParam requestSingleParam = methodParameter.getParameterAnnotation(RequestSingleParam.class);
+        HttpServletRequest request = nativeWebRequest.getNativeRequest(HttpServletRequest.class);
+        BufferedReader reader = request.getReader();
+        StringBuilder sb = new StringBuilder();
+        char[] buf = new char[1024];
+        int rd;
+        while ((rd = reader.read(buf)) != -1) {
+            sb.append(buf, 0, rd);
+        }
+        String value = requestSingleParam.value();
+        JSONObject jsonObject = JSONObject.parseObject(sb.toString());
+        return jsonObject.get(value);
+    }
+}

+ 47 - 0
src/main/java/com/ydtech/aop/exception/DescribeException.java

@@ -0,0 +1,47 @@
+package com.ydtech.aop.exception;
+
+/**
+ * 错误描述
+ * Created by zhengping.zhu
+ * on 2017/5/7.
+ */
+public class DescribeException extends RuntimeException {
+
+    private Integer code;
+
+    /**
+     * 继承exception,加入错误状态值
+     *
+     * @param exceptionEnum
+     */
+    public DescribeException(ExceptionEnum exceptionEnum) {
+        super(exceptionEnum.getMsg());
+        this.code = exceptionEnum.getCode();
+    }
+
+    public DescribeException(String message) {
+        super(message);
+        this.code = 500;
+    }
+
+    /**
+     * 自定义错误信息
+     *
+     * @param message
+     * @param code
+     */
+    public DescribeException(String message, Integer code) {
+        super(message);
+        this.code = code;
+    }
+
+    public Integer getCode() {
+        return code;
+    }
+
+    public void setCode(Integer code) {
+        this.code = code;
+    }
+}
+
+

+ 59 - 0
src/main/java/com/ydtech/aop/exception/ErrorInfo.java

@@ -0,0 +1,59 @@
+package com.ydtech.aop.exception;
+
+public class ErrorInfo {
+    String className;
+    String fileName;
+    String methodName;
+    String lineNumber;
+
+    public ErrorInfo(String className, String fileName, String methodName, String lineNumber) {
+        this.className = className;
+        this.fileName = fileName;
+        this.methodName = methodName;
+        this.lineNumber = lineNumber;
+    }
+
+    public String getClassName() {
+        return className;
+    }
+
+    public void setClassName(String className) {
+        this.className = className;
+    }
+
+    public String getFileName() {
+        return fileName;
+    }
+
+    public void setFileName(String fileName) {
+        this.fileName = fileName;
+    }
+
+    public String getMethodName() {
+        return methodName;
+    }
+
+    public void setMethodName(String methodName) {
+        this.methodName = methodName;
+    }
+
+    public String getLineNumber() {
+        return lineNumber;
+    }
+
+    public void setLineNumber(String lineNumber) {
+        this.lineNumber = lineNumber;
+    }
+
+    @Override
+    public String toString() {
+        return "ErrorInfo{" +
+                "className='" + className + '\'' +
+                ", fileName='" + fileName + '\'' +
+                ", methodName='" + methodName + '\'' +
+                ", lineNumber='" + lineNumber + '\'' +
+                '}';
+    }
+}
+
+

+ 31 - 0
src/main/java/com/ydtech/aop/exception/ExceptionEnum.java

@@ -0,0 +1,31 @@
+package com.ydtech.aop.exception;
+
+/**
+ * Created by zhengping.zhu
+ * on 2017/5/7.
+ * 错误枚举类
+ */
+public enum ExceptionEnum {
+    UNKNOW_ERROR(-1, "未知错误"),
+    USER_NOT_FIND(-101, "用户不存在"),
+    ;
+
+    private Integer code;
+
+    private String msg;
+
+    ExceptionEnum(Integer code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    public Integer getCode() {
+        return code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+}
+
+

+ 30 - 0
src/main/java/com/ydtech/aop/request/DictEnum.java

@@ -0,0 +1,30 @@
+package com.ydtech.aop.request;
+
+import java.lang.annotation.*;
+
+
+
+/**
+ *
+ * 枚举类  字典注解
+ * @author: lig
+ * @date: 2023年04月10日 0010
+ */
+@Target({ElementType.METHOD,ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+@Inherited
+@Documented
+public @interface DictEnum {
+
+    /**
+     * 字典标识
+     */
+    String key() default "";
+    /**
+     * 字典标识名称
+     */
+    String desc() default "";
+
+
+
+}

+ 19 - 0
src/main/java/com/ydtech/aop/request/MethodLogAnnotation.java

@@ -0,0 +1,19 @@
+package com.ydtech.aop.request;
+
+
+import java.lang.annotation.*;
+
+@Documented
+
+@Retention(RetentionPolicy.RUNTIME)
+//@Retention(RetentionPolicy.CLASS)
+@Target(ElementType.METHOD)
+public @interface MethodLogAnnotation {
+
+    //
+    String title();
+//    //操作的对象
+//    String object();
+
+
+}

+ 19 - 0
src/main/java/com/ydtech/aop/request/RequestSingleParam.java

@@ -0,0 +1,19 @@
+package com.ydtech.aop.request;
+
+import org.springframework.web.bind.annotation.ValueConstants;
+
+import java.lang.annotation.*;
+
+@Target(ElementType.PARAMETER)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface RequestSingleParam {
+
+    String value();
+
+    boolean required() default true;
+
+    String defaultValue() default ValueConstants.DEFAULT_NONE;
+
+
+}

+ 38 - 0
src/main/java/com/ydtech/components/AnShengRequestComponents.java

@@ -0,0 +1,38 @@
+package com.ydtech.components;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+@Component
+public class AnShengRequestComponents {
+
+
+    @Value("${as.domain}")
+    private String asDomain;
+
+    @Value("${as.quote.url}")
+    private String asQuoteUrl;
+
+    @Value("${as.audit.url}")
+    private String asAuditUrl;
+
+    @Value("${as.image.url}")
+    private String asImageUrl;
+
+    @Autowired
+    private RenbaoRequestComponents renbaoRequestComponents;
+
+    public <T, B> B quote(T t, Class<B> responseType) {
+        return renbaoRequestComponents.post(asDomain + asQuoteUrl, "安盛天平报价", t, responseType);
+    }
+
+    public <T, B> B audit(T t, Class<B> responseType) {
+        return renbaoRequestComponents.post(asDomain + asAuditUrl,"安盛天平核保", t, responseType);
+    }
+
+    public <T, B> B submitImage(T t, Class<B> responseType) {
+        return renbaoRequestComponents.post(asDomain + asImageUrl,"安盛天平上传影像", t, responseType);
+    }
+
+}

+ 51 - 0
src/main/java/com/ydtech/components/HengbangRequestComponents.java

@@ -0,0 +1,51 @@
+package com.ydtech.components;
+
+import com.ydtech.modules.ins.model.hb.HengbangPolicyPrintResponse;
+import com.ydtech.modules.ins.model.request.Response;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.core.ParameterizedTypeReference;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+@Component
+public class HengbangRequestComponents {
+
+    @Value("${hb.quote.url}")
+    private String hbQuoteUrl;
+
+    @Value("${hb.audit.url}")
+    private String hbAuditUrl;
+
+    @Value("${hb.image.url}")
+    private String hbImageUrl;
+
+    @Value("${hb.getPolicyPrint.url}")
+    private String hbPolicyPrintUrl;
+
+
+    private RenbaoRequestComponents renbaoRequestComponents;
+
+    @Autowired
+    public void setRenbaoRequestComponents(RenbaoRequestComponents renbaoRequestComponents) {
+        this.renbaoRequestComponents = renbaoRequestComponents;
+    }
+
+    public <T, B> B quote(T t, Class<B> responseType) {
+        return renbaoRequestComponents.post(hbQuoteUrl,"恒邦报价", t, responseType);
+    }
+
+    public <T, B> B audit(T t, Class<B> responseType) {
+        return renbaoRequestComponents.post(hbAuditUrl,"恒邦核保", t, responseType);
+    }
+
+    public <T, B> B submitImage(T t, Class<B> responseType) {
+        return renbaoRequestComponents.post(hbImageUrl,"恒邦上传影响", t, responseType);
+    }
+
+    public <T, B> B getPolicyPrint(T t, Class<B> responseType) {
+        return renbaoRequestComponents.post(hbPolicyPrintUrl,"获取电子保单",t, responseType);
+    }
+
+}

+ 39 - 0
src/main/java/com/ydtech/components/InsTaskHistoryComponents.java

@@ -0,0 +1,39 @@
+package com.ydtech.components;
+
+import com.ydtech.constants.InsTaskHistoryEnum;
+import com.ydtech.modules.ins.model.InsOrder;
+import com.ydtech.modules.ins.model.InsTaskHistory;
+import com.ydtech.modules.ins.service.InsTaskHistoryService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+@Component
+public class InsTaskHistoryComponents {
+
+    @Autowired
+    private InsTaskHistoryService insTaskHistoryService;
+
+    /**
+     * 修改历史表的状态
+     *
+     * @param insTaskHistoryEnum
+     * @param order
+     */
+    public void modifyStatus(InsTaskHistoryEnum insTaskHistoryEnum, InsOrder order) {
+        InsTaskHistory history7 = new InsTaskHistory();
+        history7.setId(String.valueOf(new Date().getTime()));
+        history7.setCompany(order.getInscompany());
+        history7.setTaskid(order.getOrderno());
+        history7.setOperatorid(order.getUserid());
+        history7.setOperator(order.getUsername());
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        history7.setCreatetime(simpleDateFormat.format(new Date()));
+        history7.setStatus(String.valueOf(insTaskHistoryEnum.getState()));
+        history7.setRemark(insTaskHistoryEnum.getRemark());
+        insTaskHistoryService.insert(history7);
+    }
+
+}

+ 90 - 0
src/main/java/com/ydtech/components/MyJedisPoolConfig.java

@@ -0,0 +1,90 @@
+package com.ydtech.components;
+
+import com.ydtech.utils.StringUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+import redis.clients.jedis.JedisPool;
+import redis.clients.jedis.JedisPoolConfig;
+
+/**
+ *  jedisPool的配置
+ *
+ * @author: lig
+ * @date: 2023年03月13日 0013
+ */
+@Component
+public class MyJedisPoolConfig {
+    private MyJedisPoolConfig() {
+    }
+
+
+    //redis主机的ip
+    private static String host;
+
+    //redis主机的端口号
+    private static int port;
+    //登录口令
+    private static String auth;
+    /**
+     * 连接超时和读写超时(单位ms)
+     * 读写超时即:redis对该命令执行时间太长,超过设定时间后就放弃本次请求
+     */
+    private static int connAndReadWriteTimeOut;
+
+
+    /**
+     * 通过非静态的setter来给静态的属性赋值
+     *
+     * @param redisHost
+     */
+    @Value("${spring.redis.host}")
+    public void setRedisHost(String redisHost) {
+        MyJedisPoolConfig.host = redisHost;
+    }
+
+    @Value("${spring.redis.port}")
+    public void setRedisPort(int redisPort) {
+        MyJedisPoolConfig.port = redisPort;
+    }
+
+    @Value("${spring.redis.password}")
+    public void setAuth(String redisAuth) {
+        MyJedisPoolConfig.auth = redisAuth;
+    }
+
+    @Value("${spring.redis.timeOut}")
+    public void setAuth(int timeOut) {
+        MyJedisPoolConfig.connAndReadWriteTimeOut = timeOut;
+    }
+
+
+    private static class innerClass {
+
+        //静态内部类保存一个jedisPool的实例
+//        private static JedisPool jedisPool = null;
+        private static JedisPool jedisPool = new JedisPool(getConfig(), host, port, connAndReadWriteTimeOut, StringUtils.isNotEmpty(auth)?auth:null);
+
+
+        private static JedisPoolConfig getConfig() {
+            JedisPoolConfig poolConfig = new JedisPoolConfig();
+            //========= jedisPool的一些配置=============================
+            poolConfig.setMaxTotal(10000);//最大连接数
+            poolConfig.setMaxIdle(50);//最多空闲数
+            poolConfig.setMaxWaitMillis(5 * 1000);//当池中没有连接时,最多等待5秒
+            return poolConfig;
+        }
+    }
+
+    /**
+     * 返回jedisPool实例
+     *
+     * @return
+     */
+    public static JedisPool getJedisPool() {
+//        if(null == innerClass.jedisPool){
+//            String o = StringUtils.isNotEmpty(auth)?null:auth;
+//            innerClass.jedisPool = new JedisPool(innerClass.getConfig(), host, port, connAndReadWriteTimeOut, o);
+//        }
+        return innerClass.jedisPool;
+    }
+}

+ 466 - 0
src/main/java/com/ydtech/components/OrderComponents.java

@@ -0,0 +1,466 @@
+package com.ydtech.components;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.ydtech.exception.SystemException;
+import com.ydtech.modules.admin.model.SysDept;
+import com.ydtech.modules.admin.model.SysUser;
+import com.ydtech.modules.admin.service.SysDeptService;
+import com.ydtech.modules.admin.service.SysUserService;
+import com.ydtech.modules.esm.model.EsmAgreement;
+import com.ydtech.modules.esm.model.EsmAgreementProd;
+import com.ydtech.modules.esm.model.EsmAgreementProdfee;
+import com.ydtech.modules.esm.model.EsmRetail;
+import com.ydtech.modules.esm.service.*;
+import com.ydtech.modules.ins.model.InsCommission;
+import com.ydtech.modules.ins.model.InsDeptFee;
+import com.ydtech.modules.ins.model.InsFeeDetail;
+import com.ydtech.modules.ins.model.InsOrder;
+import com.ydtech.modules.ins.model.ya.YaQuoteInfoVo;
+import com.ydtech.modules.ins.service.InsCommissionService;
+import com.ydtech.modules.ins.service.InsDeptFeeService;
+import com.ydtech.modules.ins.service.InsFeeDetailService;
+import com.ydtech.modules.ins.service.InsOrderService;
+import com.ydtech.modules.ins.vo.KindInfoVo;
+import com.ydtech.modules.ins.vo.RiskInfoVo;
+import com.ydtech.utils.idgen.IdGenerate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
+import org.springframework.util.StringUtils;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@Component
+public class OrderComponents {
+
+    @Autowired
+    private EsmAgreementService esmAgreementService;
+
+    @Autowired
+    private EsmAgreementProdfeeService esmAgreementProdfeeService;
+
+    @Autowired
+    private InsFeeDetailService insFeeDetailService;
+
+    @Autowired
+    private InsDeptFeeService insDeptFeeService;
+
+    @Autowired
+    private InsCommissionService insCommissionService;
+
+    @Autowired
+    private EsmRetailService esmRetailService;
+
+    @Autowired
+    private EsmUserInternalService esmUserInternalService;
+
+    @Autowired
+    private SysUserService sysUserService;
+
+    @Autowired
+    private InsOrderService insOrderService;
+
+    @Autowired
+    private SysDeptService sysDeptService;
+
+    @Autowired
+    private EsmAgreementProdService esmAgreementProdService;
+
+    @Autowired
+    private StringRedisTemplate redisTemplate;
+
+
+    /**
+     * 保存费用明细
+     *
+     * @param order
+     */
+    public void saveFeeDetail(InsOrder order) {
+        InsFeeDetail feeDetail = new InsFeeDetail();
+        feeDetail.setOrderno(order.getOrderno());
+        feeDetail.setQuoteno(order.getQuoteno());
+        feeDetail.setFeerate(order.getFeerate());  //交强手续费比例
+        feeDetail.setDisrate(order.getDisrate());  //商业手续费比例
+        BigDecimal jqfee = new BigDecimal(order.getJqpremium() * order.getFeerate() * 0.01);
+        jqfee = jqfee.setScale(2, BigDecimal.ROUND_HALF_UP);
+        feeDetail.setFeeamount(jqfee.doubleValue()); //交强手续费
+        BigDecimal syfee = new BigDecimal(order.getSypremium() * order.getDisrate() * 0.01);
+        syfee = syfee.setScale(2, BigDecimal.ROUND_HALF_UP);
+        feeDetail.setDisamount(syfee.doubleValue()); //商业手续费
+
+        feeDetail.setJqdiscountrate(order.getJqdiscountrate());
+        feeDetail.setSydiscountrate(order.getSydiscountrate());
+        BigDecimal jqDiscount = new BigDecimal(order.getJqpremium() * order.getJqdiscountrate() * 0.01);
+        jqDiscount = jqDiscount.setScale(2, RoundingMode.HALF_UP);
+        feeDetail.setJqdiscount(jqDiscount.doubleValue()); //交强优惠金额
+        BigDecimal syDiscount = new BigDecimal(order.getSypremium() * order.getSydiscountrate() * 0.01);
+        syDiscount = syDiscount.setScale(2, RoundingMode.HALF_UP);
+        feeDetail.setSydiscount(syDiscount.doubleValue()); //商业优惠金额
+
+        feeDetail.setJqpremium(order.getJqpremium());
+        feeDetail.setSypremium(order.getSypremium());
+        feeDetail.setTaxamount(order.getTaxamount());
+        feeDetail.setSumpremium(order.getSumpremium());
+        feeDetail.setInscompany(order.getInscompany());
+        feeDetail.setAgreeid(order.getAgreeid());
+        feeDetail.setAgreeprodid(order.getProductid());
+        EsmAgreement esmAgreement = esmAgreementService.selectByPk(order.getAgreeid());
+        if (esmAgreement != null) {
+            feeDetail.setAgreementcode(esmAgreement.getAgreementcode());
+            feeDetail.setAgreetype(esmAgreement.getAgreementtype());
+            feeDetail.setChannel(esmAgreement.getChannel());
+        }
+        feeDetail.setProducname(order.getProduct());
+        feeDetail.setAuditstatus("0");  //0未审核 1已审核
+
+        insFeeDetailService.insert(feeDetail);
+
+        //机构费用
+        InsDeptFee deptFee = new InsDeptFee();
+        deptFee.setOrderno(order.getOrderno());
+        deptFee.setQuoteno(order.getQuoteno());
+        deptFee.setAgreeid(order.getAgreeid());
+        deptFee.setAgreeprodid(order.getProductid());
+        deptFee.setAuditstatus("0");
+        deptFee.setSettlestatus("0");
+        List<EsmAgreementProdfee> prodfees = esmAgreementProdfeeService.selectList(" where agreeprodid=?", new Object[]{order.getProductid()});
+        for (EsmAgreementProdfee prodfee : prodfees) {
+            deptFee.setKeeprate(prodfee.getKeeprate() * 0.01);
+            BigDecimal amount = new BigDecimal((order.getJqpremium() + order.getSypremium()) * prodfee.getKeeprate() * 0.01);
+            amount = amount.setScale(2, BigDecimal.ROUND_HALF_UP);
+            deptFee.setKeepamount(amount.doubleValue());
+            deptFee.setAddrate(prodfee.getAddrate() * 0.01);
+            amount = new BigDecimal((order.getJqpremium() + order.getSypremium()) * prodfee.getAddrate() * 0.01);
+            amount = amount.setScale(2, BigDecimal.ROUND_HALF_UP);
+            deptFee.setAddamount(amount.doubleValue());
+            deptFee.setComlevel(prodfee.getComlevel());
+            if ("一级".equals(prodfee.getComlevel())) {
+                deptFee.setComcode(order.getDeptid().substring(0, 2));  //99140302M01D01
+            } else if ("二级".equals(prodfee.getComlevel())) {
+                deptFee.setComcode(order.getDeptid().substring(0, 4));
+            } else if ("三级".equals(prodfee.getComlevel())) {
+                deptFee.setComcode(order.getDeptid().substring(0, 6));
+            } else if ("四级".equals(prodfee.getComlevel())) {
+                deptFee.setComcode(order.getDeptid().substring(0, 8));
+            } else {
+                deptFee.setComcode(order.getDeptid().substring(0, 11));
+            }
+            insDeptFeeService.insert(deptFee);
+        }
+
+        saveRetail(order); //分销所占比例
+    }
+
+
+    /**
+     * 三级分销费用保存
+     *
+     * @param order
+     * @return
+     */
+    public double saveRetail(InsOrder order) {
+        double retailRate = 0;
+
+        //1、根据机构匹配分销规则,获取分销比例
+        List<EsmRetail> list = esmRetailService.selectList(" where deptid = ? and status=?", new Object[]{order.getDeptid(), "1"});
+        //2、根据userid查询三级推荐人
+        List<SysUser> users = esmUserInternalService.getSuperior(order.getUserid());
+
+        if (list != null && list.size() > 0 && users.size() > 0 && !"0".equals(list.get(0).getRetailtype())) {
+            EsmRetail retail = list.get(0);
+            List<Double> rateList = new ArrayList<Double>();
+            rateList.add(retail.getDisrate1());
+            rateList.add(retail.getDisrate2());
+            rateList.add(retail.getDisrate3());
+
+            if ("1".equals(retail.getRetailtype())) {//一级分销
+                InsCommission commission = new InsCommission();
+                commission.setOrderno(order.getOrderno());
+                commission.setQuoteno(order.getQuoteno());
+                commission.setRefereescode(users.get(0).getId());
+                commission.setRefereesname(users.get(0).getName());
+                double rate = rateList.get(0) * 0.01;
+                commission.setCommissionrate(rate);
+                BigDecimal amount = new BigDecimal((order.getJqpremium() + order.getSypremium()) * rate);
+                amount = amount.setScale(2, BigDecimal.ROUND_HALF_UP);
+                commission.setCommissionamount(amount.doubleValue());
+                commission.setLevel("1");
+                commission.setAuditstatus("0");  //0未审核 1已审核
+                commission.setSettlestatus("0"); //0未结算 1已结算
+                commission.setInsuredtime(order.getAudittime()); //承保确认时间
+                insCommissionService.insert(commission);
+
+                retailRate += rateList.get(0);
+            } else if ("2".equals(retail.getRetailtype())) {//二级分销
+                int num = users.size() > 2 ? 2 : users.size();
+                for (int i = 0; i < num; i++) {
+                    InsCommission commission = new InsCommission();
+                    commission.setOrderno(order.getOrderno());
+                    commission.setQuoteno(order.getQuoteno());
+                    commission.setRefereescode(users.get(i).getId());
+                    commission.setRefereesname(users.get(i).getName());
+                    double rate = rateList.get(i) * 0.01;
+                    commission.setCommissionrate(rate);
+                    BigDecimal amount = new BigDecimal((order.getJqpremium() + order.getSypremium()) * rate);
+                    amount = amount.setScale(2, BigDecimal.ROUND_HALF_UP);
+                    commission.setCommissionamount(amount.doubleValue());
+                    commission.setLevel(String.valueOf(i + 1));
+                    commission.setAuditstatus("0");  //0未审核 1已审核
+                    commission.setSettlestatus("0"); //0未结算 1已结算
+                    commission.setInsuredtime(order.getAudittime()); //承保确认时间
+                    insCommissionService.insert(commission);
+
+                    retailRate += rateList.get(i);
+                }
+
+            } else {//三级分销
+                int num = users.size() > 2 ? 3 : users.size();
+                for (int i = 0; i < num; i++) {
+                    InsCommission commission = new InsCommission();
+                    commission.setOrderno(order.getOrderno());
+                    commission.setQuoteno(order.getQuoteno());
+                    commission.setRefereescode(users.get(i).getId());
+                    commission.setRefereesname(users.get(i).getName());
+                    double rate = rateList.get(i) * 0.01;
+                    commission.setCommissionrate(rate);
+                    BigDecimal amount = new BigDecimal((order.getJqpremium() + order.getSypremium()) * rate);
+                    amount = amount.setScale(2, RoundingMode.HALF_UP);
+                    commission.setCommissionamount(amount.doubleValue());
+                    commission.setLevel(String.valueOf(i + 1));
+                    commission.setAuditstatus("0");  //0未审核 1已审核
+                    commission.setSettlestatus("0"); //0未结算 1已结算
+                    commission.setInsuredtime(order.getAudittime()); //承保确认时间
+                    insCommissionService.insert(commission);
+
+                    retailRate += rateList.get(i);
+                }
+            }
+        }
+        return retailRate;
+    }
+
+    /**
+     * 分销费用统计
+     *
+     * @param deptid
+     * @param userid
+     * @return
+     */
+    public double countRetail(String deptid, String userid) {
+        double retailRate = 0;
+
+        //1、根据机构匹配分销规则,获取分销比例
+        List<EsmRetail> list = esmRetailService.selectList(" where deptid = ? and status=?", new Object[]{deptid, "1"});
+        //2、根据userid查询三级推荐人
+        List<SysUser> users = esmUserInternalService.getSuperior(userid);
+
+        if (list != null && list.size() > 0 && users.size() > 0 && !"0".equals(list.get(0).getRetailtype())) {
+            EsmRetail retail = list.get(0);
+            List<Double> rateList = new ArrayList<>();
+            rateList.add(retail.getDisrate1());
+            rateList.add(retail.getDisrate2());
+            rateList.add(retail.getDisrate3());
+
+            if ("1".equals(retail.getRetailtype())) {//一级分销
+                retailRate += rateList.get(0);
+            } else if ("2".equals(retail.getRetailtype())) {//二级分销
+                int num = Math.min(users.size(), 2);
+                for (int i = 0; i < num; i++) {
+                    retailRate += rateList.get(i);
+                }
+            } else {//三级分销
+                int num = users.size() > 2 ? 3 : users.size();
+                for (int i = 0; i < num; i++) {
+                    retailRate += rateList.get(i);
+                }
+            }
+        }
+
+        return retailRate;
+    }
+
+    /**
+     * 校验参数
+     *
+     * @param yaQuoteInfoVo
+     * @throws Exception
+     */
+    public void checkEmpty(YaQuoteInfoVo yaQuoteInfoVo) {
+        if (yaQuoteInfoVo.getCarInfo() == null) {
+            throw new SystemException("carInfo不能为空!");
+        }
+        if (yaQuoteInfoVo.getPolicyHolderInfo() == null || yaQuoteInfoVo.getInsuredPersonInfo() == null) {
+            throw new SystemException("policyHolderInfo/insuredPersonInfo 不能为空!");
+        }
+        if (StringUtils.isEmpty(yaQuoteInfoVo.getCarInfo().getFrameNo())) {
+            throw new SystemException("车架号不能为空");
+        }
+        if (StringUtils.isEmpty(yaQuoteInfoVo.getQuoteno())) {
+            throw new SystemException("报价号不能为空");
+        }
+        if (yaQuoteInfoVo.getRiskList() == null || yaQuoteInfoVo.getRiskList().size() == 0) {
+            throw new SystemException("riskList 不能为空!");
+        } else {
+            for (RiskInfoVo riskInfoVo : yaQuoteInfoVo.getRiskList()) {
+                if (riskInfoVo.getStartDate() == null || riskInfoVo.getEndDate() == null) {
+                    throw new SystemException("riskList.startDate / riskList.endDate不能为空!");
+                }
+            }
+        }
+    }
+
+    /**
+     * 生成订单信息
+     *
+     * @param record
+     * @param insCompany
+     * @return InsOrder
+     */
+    public InsOrder geneOrder(YaQuoteInfoVo record, String insCompany, String authComCode) {
+        checkEmpty(record);
+
+        SysUser user = sysUserService.selectByPk(record.getUserId());
+        if (user == null) {
+            throw new SystemException("userId不存在");
+        }
+
+        InsOrder insOrder = new InsOrder();
+        String orderno = IdGenerate.nextId();
+        insOrder.setOrderno(orderno);
+        insOrder.setQuoteno(String.valueOf(record.getQuoteno()));
+        insOrder.setOrderstatus("0");  // 0 报价 1 待核保 2 已核保待缴费 3 核保退回 4 核保不通过
+        insOrder.setFrameNo(record.getCarInfo().getFrameNo());
+        insOrder.setLicenseNo(record.getCarInfo().getLicenseNo());
+        insOrder.setCarinfo(JSONObject.parseObject(JSONObject.toJSONString(record.getCarInfo())));
+
+        // 关闭订单 不含当前报价号
+        InsOrder orderObj = insOrderService.queryQuoteno(new Object[]{record.getUserId(), record.getCarInfo().getFrameNo(), record.getQuoteno()});
+        if (orderObj != null) {
+            List<InsOrder> listo = insOrderService.selectList(" where quoteno=?", new Object[]{orderObj.getQuoteno()});
+            String status = "0";
+            for (InsOrder order : listo) {
+                if (!"0".equals(order.getOrderstatus())) {
+                    status = order.getOrderstatus();
+                }
+            }
+            //0报价中 1待核保 2已核保 3核保退回 4核保不通过 5已核保待缴费 6已缴费 7已承保 99已关闭
+            if ("0".equals(status)) {//关闭订单
+                insOrderService.closeOrder(orderObj.getOrderno(), "99");
+            } else if (!"99".equals(status)) {
+                throw new SystemException("此车辆已提交核保,重新报价请先关闭订单,任务号:" + orderObj.getQuoteno());
+            }
+        }
+        insOrder.setUserid(user.getId());
+        insOrder.setUsername(user.getName());
+        insOrder.setDeptid(user.getDeptId());
+        SysDept dept = sysDeptService.selectByPk(user.getDeptId());
+        insOrder.setDeptname(dept == null ? "" : dept.getName());
+
+        double retailRate = countRetail(user.getDeptId(), user.getId());
+
+        insOrder.setOwnerinfo(JSONObject.parseObject(JSONObject.toJSONString(record.getOwnerInfo())));
+        insOrder.setApplyinfo(JSONObject.parseObject(JSONObject.toJSONString(record.getPolicyHolderInfo())));
+        insOrder.setInsureinfo(JSONObject.parseObject(JSONObject.toJSONString(record.getInsuredPersonInfo())));
+
+        insOrder.setInsuredname(record.getPolicyHolderInfo().getName());
+
+        List<RiskInfoVo> risks = record.getRiskList();
+        for (RiskInfoVo risk : risks) {
+            if ("0507".equals(risk.getRiskCode())) {//交强
+                insOrder.setJqstartdate(risk.getStartDate());
+                insOrder.setJqenddate(risk.getEndDate());
+            }
+            if ("0510".equals(risk.getRiskCode())) {//商业
+                insOrder.setSystartdate(risk.getStartDate());
+                insOrder.setSyenddate(risk.getEndDate());
+            }
+        }
+
+        List<KindInfoVo> kinds = record.getKindList();
+        String productId = "";
+        String productname = "";
+
+        List<EsmAgreement> agreements = esmAgreementService.selectList(" where t.agreestatus='1' and t.insure1 like ? " + "and exists (select 1 from esm_agreement_prod t2 where t.id=t2.agreeid and t2.authcomcode like ?)", new Object[]{authComCode + "%", "%" + user.getDeptId() + "%"});
+        if (agreements.size() == 0) {
+            throw new SystemException("不存在有效协议或机构" + user.getDeptId() + "未授权");
+        }
+        String agreeid = agreements.get(0).getId();
+        insOrder.setAgreeid(agreeid);
+        //匹配协议,获取费用
+        StringBuffer whereStr = new StringBuffer();
+        List params = new ArrayList();// where t.agreeid=? and t.productid in ()
+        whereStr.append("where t.agreeid=? ");
+        params.add(agreeid);
+        if (risks.size() == 1 && "0507".equals(risks.get(0).getRiskCode())) {
+            productId = "ZG01001";
+            productname = "单交强";
+            whereStr.append(" and t.productid=?");
+            params.add(productId);
+        } else if (risks.size() == 1 && kinds.size() == 1 && "B".equals(kinds.get(0).getKindCode())) {
+            productId = "ZG01002";
+            productname = "单三者";
+            whereStr.append(" and t.productid=?");
+            params.add(productId);
+        } else if (risks.size() == 1) {
+            productId = "ZG01003";
+            productname = "单商业";
+            whereStr.append(" and t.productid=?");
+            params.add(productId);
+        } else if (risks.size() == 2 && kinds.size() == 1 && "B".equals(kinds.get(0).getKindCode())) {
+            productId = "ZG01004";
+            productname = "交强+三者";
+            whereStr.append(" and t.productid in (?,?)");
+            params.add("ZG01004");
+            params.add("ZG01005");
+        } else {
+            productId = "ZG01006";
+            productname = "交强+商业";
+            whereStr.append(" and t.productid in (?,?)");
+            params.add("ZG01006");
+            params.add("ZG01007");
+        }
+
+        insOrder.setProductid(productId);
+        insOrder.setProduct(productname);
+        List<EsmAgreementProd> agreementProds = esmAgreementProdService.selectList(whereStr.toString(), params.toArray());
+        for (EsmAgreementProd prod : agreementProds) {
+            if ("ZG01001".equals(prod.getProductid()) || "ZG01004".equals(prod.getProductid()) || "ZG01006".equals(prod.getProductid())) {
+                insOrder.setFeerate(prod.getProductrate());//交强手续费比例
+                insOrder.setJqdiscountrate(prod.getFeerate() - retailRate); //交强优惠比例=业务员绩效-分销费用
+            } else {
+                insOrder.setDisrate(prod.getProductrate()); //商业手续费比例
+                insOrder.setSydiscountrate(prod.getFeerate() - retailRate); //商业优惠比例=业务员绩效-分销费用
+            }
+            insOrder.setProductid(prod.getId());
+        }
+
+        insOrder.setRiskinfo(JSONObject.parseArray(JSONObject.toJSONString(record.getRiskList())));
+        insOrder.setKindinfo(JSONObject.parseArray(JSONObject.toJSONString(record.getKindList())));
+        SimpleDateFormat sdfm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+        insOrder.setInscompany(insCompany);
+        insOrder.setCreatetime(sdfm.format(new Date()));
+
+        return insOrder;
+
+    }
+
+    public InsOrder orderExists(String orderNo) {
+        InsOrder insOrder = insOrderService.selectByPk(orderNo);
+        if (ObjectUtils.isEmpty(insOrder)) {
+            throw new SystemException("订单不存在");
+        }
+        return insOrder;
+    }
+
+
+
+
+}

+ 42 - 0
src/main/java/com/ydtech/components/RedisIdWorker.java

@@ -0,0 +1,42 @@
+package com.ydtech.components;
+
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDateTime;
+import java.time.ZoneOffset;
+import java.time.format.DateTimeFormatter;
+
+@Component
+public class RedisIdWorker {
+
+    /**
+     * LocalDateTime.of(2022, 1, 1, 0, 0, 0).toEpochSecond(ZoneOffset.UTC);
+     * 2022年1月1日 0:0:00 的时间戳
+     */
+    private static final long BEGIN_TIMESTAMP_2022 = 1640995200L;
+    /**
+     * 序列号的位数
+     */
+    private static final int BITS_COUNT = 32;
+
+    private final StringRedisTemplate stringRedisTemplate;
+
+    public RedisIdWorker(StringRedisTemplate stringRedisTemplate) {
+        this.stringRedisTemplate = stringRedisTemplate;
+    }
+
+    public long nextId(String keyPrefix) {
+        // 1. 时间戳
+        long currentTimestamp = LocalDateTime.now().toEpochSecond(ZoneOffset.UTC);
+        long timestamp = currentTimestamp - BEGIN_TIMESTAMP_2022;
+
+        // 2. 序列号
+        String formatTime = DateTimeFormatter.ofPattern("yyyy:MM:dd").format(LocalDateTime.now());
+        long increment = stringRedisTemplate.opsForValue().increment("icr:" + keyPrefix + ":" + formatTime);
+
+        // 3. 拼接(时间戳向左移 32 位,通过或运算将其与序列号拼接)
+        return timestamp << BITS_COUNT | increment;
+    }
+
+}

+ 67 - 0
src/main/java/com/ydtech/components/RenbaoRequestComponents.java

@@ -0,0 +1,67 @@
+package com.ydtech.components;
+
+import com.ydtech.aop.request.MethodLogAnnotation;
+import com.ydtech.exception.SystemException;
+import com.ydtech.modules.ins.model.request.Response;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.core.ParameterizedTypeReference;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.lang.Nullable;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
+
+@Slf4j
+@Component
+public class RenbaoRequestComponents {
+
+    @Autowired
+    private RestTemplate restTemplate;
+
+    @Value("${rb.quote.url}")
+    private String rbQuoteUrl;
+
+    @Value("${rb.audit.url}")
+    private String rbAuditUrl;
+
+    @Value("${rb.car.search.url}")
+    private String rbCarSearchUrl;
+
+    @Value("${rb.brand.search.url}")
+    private String rbBrandSearchUrl;
+
+    @MethodLogAnnotation(title = "报价-请求python")
+    public <T, B> B post(String url,String message, @Nullable T requestBody, Class<B> responseType) {
+        HttpHeaders httpHeaders = new HttpHeaders();
+        httpHeaders.setContentType(MediaType.APPLICATION_JSON);
+        HttpEntity<T> yaQuoteInfoVoHttpEntity = new HttpEntity<>(requestBody, httpHeaders);
+        ResponseEntity<B> stringResponseEntity = restTemplate.postForEntity(url, yaQuoteInfoVoHttpEntity, responseType);
+        B body = stringResponseEntity.getBody();
+        if (body == null) {
+            throw new SystemException(message + "接口请求失败");
+        }
+        log.info(body.toString());
+        return body;
+    }
+
+    public <T, B> B quote(T t, Class<B> responseType) {
+        return post(rbQuoteUrl,"人保报价", t, responseType);
+    }
+
+    public <T, B> B audit(T t, Class<B> responseType) {
+        return post(rbAuditUrl, "人保核保",t, responseType);
+    }
+
+    public <T, B> B licensePlateQuery(T t, Class<B> responseType) {
+        return post(rbCarSearchUrl,"人保车牌号查询车辆信息", t, responseType);
+    }
+
+    public <T, B> B modelsQuery(T t, Class<B> responseType) {
+        return post(rbBrandSearchUrl,"人保车辆查询", t, responseType);
+    }
+
+}

+ 78 - 0
src/main/java/com/ydtech/components/YongchengRequestApiComponents.java

@@ -0,0 +1,78 @@
+package com.ydtech.components;
+
+import com.ydtech.modules.ins.model.yc.ruote.Agent;
+import lombok.Data;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+/**
+ * 永诚API方式
+ *
+ * @author: lig
+ * @date: 2023年02月28日 0028
+ */
+@Component
+@Data
+public class YongchengRequestApiComponents {
+
+    @Value("${yc.api.url}")
+    String url = "";
+
+    @Value("${yc.api.userName}")
+    private String userName;
+    @Value("${yc.api.password}")
+    private String password;
+
+    @Value("${yc.api.pay.callBack}")
+    private String payCallBack;
+
+    @Value("${yc.api.agent.dptCde}")
+    private String dptCde;
+    @Value("${yc.api.agent.agentCode}")
+    private String agentCode;
+    @Value("${yc.api.agent.agentType}")
+    private String agentType;
+    @Value("${yc.api.agent.agentNme}")
+    private String agentNme;
+    @Value("${yc.api.agent.qlftNo}")
+    private String qlftNo;
+    @Value("${yc.api.agent.operatorCode}")
+    private String operatorCode;
+    @Value("${yc.api.agent.salesmanNo}")
+    private String salesmanNo;
+    @Value("${yc.api.agent.cChaType}")
+    private String cChaType;
+    @Value("${yc.api.agent.custNature}")
+    private String custNature;
+    @Value("${yc.api.agent.cOprcde}")
+    private String cOprcde;
+    @Value("${yc.api.agent.cBsnsTyp}")
+    private String cBsnsTyp;
+
+    private Agent agent;
+//    private final Agent agent;
+
+//    public YongchengRequestApiComponents(Agent agent) {
+//        this.agent = agent;
+//    }
+
+    /**
+     * 获取渠道
+     */
+    public Agent gainAgent() {
+        if (null == agent) {
+            agent = new Agent();
+            agent.setAgentCode(agentCode);
+            agent.setConferCode(agentType);
+            agent.setAgentType(agentType);
+            agent.setAgentNme(agentNme);
+            agent.setQlftNo(qlftNo);
+            agent.setCustNature(custNature);
+            agent.setAgentProfId(agentCode);
+            agent.setSubCoNo(agentType);
+            agent.setCustNature("192099");
+        }
+        return agent;
+    }
+
+}

+ 48 - 0
src/main/java/com/ydtech/components/YongchengRequestComponents.java

@@ -0,0 +1,48 @@
+package com.ydtech.components;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+@Component
+public class YongchengRequestComponents {
+
+    @Value("${yc.domain}")
+    private String ycDomain;
+
+    @Value("${yc.quote.url}")
+    private String ycQuoteUrl;
+
+    @Value("${yc.audit.url}")
+    private String ycAuditUrl;
+
+    @Value("${yc.image.url}")
+    private String ycImageUrl;
+
+    @Value("${yc.getPolicyPrint.url}")
+    private String ycPolicyPrintUrl;
+
+    private final RenbaoRequestComponents renbaoRequestComponents;
+
+    public YongchengRequestComponents(RenbaoRequestComponents renbaoRequestComponents) {
+        this.renbaoRequestComponents = renbaoRequestComponents;
+    }
+
+
+    public <T, B> B quote(T t, Class<B> responseType) {
+        return renbaoRequestComponents.post(ycDomain + ycQuoteUrl, "永诚报价",t, responseType);
+    }
+
+    public <T, B> B audit(T t, Class<B> responseType) {
+        return renbaoRequestComponents.post(ycDomain + ycAuditUrl,"永诚核保", t, responseType);
+    }
+
+    public <T, B> B submitImage(T t, Class<B> responseType) {
+        return renbaoRequestComponents.post(ycDomain + ycImageUrl,"永诚上传影像", t, responseType);
+    }
+
+    public <T, B> B getPolicyPrint(T t, Class<B> responseType) {
+        return renbaoRequestComponents.post(ycDomain + ycPolicyPrintUrl,"永诚获取电子保单", t, responseType);
+    }
+
+}

+ 105 - 0
src/main/java/com/ydtech/components/ZhongmeiRequestComponents.java

@@ -0,0 +1,105 @@
+package com.ydtech.components;
+
+import com.ydtech.aop.request.MethodLogAnnotation;
+import com.ydtech.exception.SystemException;
+import com.ydtech.modules.ins.model.request.Response;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.core.ParameterizedTypeReference;
+import org.springframework.http.*;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
+
+
+@Slf4j
+@Component
+public class ZhongmeiRequestComponents {
+
+    @Autowired
+    private RestTemplate restTemplate;
+
+    @Value("${zm.quote.url}")
+    private String zmQuoteUrl;
+
+    @Value("${zm.audit.url}")
+    private String zmAuditUrl;
+
+    @Value("${zm.getPolicyPrint.url}")
+    private String zmGetPolicyPrintUrl;
+
+    @Value("${zm.image.url}")
+    private String zmImageUrl;
+
+    @Value("${zm.verifyPayment.url}")
+    private String zmVerifyPaymentUrl;
+
+    @Value("${zm.modelQuery.url}")
+    private String zmModelQueryUrl;
+
+    @Value("${zm.vinSearch.url}")
+    private String zmVinSearchUrl;
+
+    @Value("${zm.ascription.url}")
+    private String zmAscriptionUrl;
+
+    @Value("${zm.manualUnderwriting.url}")
+    private String zmManualUnderwritingUrl;
+
+
+    public <T, K> Response<T> post(K k, String url, ParameterizedTypeReference<Response<T>> responseType) {
+        HttpHeaders httpHeaders = new HttpHeaders();
+        httpHeaders.setContentType(MediaType.APPLICATION_JSON);
+        HttpEntity<K> yaQuoteInfoVoHttpEntity = new HttpEntity<>(k, httpHeaders);
+        ResponseEntity<Response<T>> stringResponseEntity = restTemplate.exchange(url, HttpMethod.POST, yaQuoteInfoVoHttpEntity, responseType);
+        Response<T> body = stringResponseEntity.getBody();
+
+        if (body == null) {
+            throw new SystemException("中煤接口请求失败");
+        }
+        if (body.getCode() == 400) {
+            throw new SystemException(body.getMessage());
+        }
+        return body;
+    }
+
+    public <T, K> Response<T> modelQuery(K k, ParameterizedTypeReference<Response<T>> responseType) {
+        return post(k, zmModelQueryUrl, responseType);
+    }
+
+    @MethodLogAnnotation(title = "中煤-报价-请求python")
+    public <T, K> Response<T> quote(K k, ParameterizedTypeReference<Response<T>> responseType) {
+        return post(k, zmQuoteUrl, responseType);
+    }
+
+    @MethodLogAnnotation(title = "中煤-核保-请求python")
+    public <T, K> Response<T> audit(K k, ParameterizedTypeReference<Response<T>> responseType) {
+        return post(k, zmAuditUrl, responseType);
+    }
+
+    public <T, K> void submitImage(K k, ParameterizedTypeReference<Response<T>> responseType) {
+        post(k, zmImageUrl, responseType);
+    }
+
+    public <T, K> Response<T> zmGetPolicyPrint(K k, ParameterizedTypeReference<Response<T>> responseType) {
+        return post(k, zmGetPolicyPrintUrl, responseType);
+    }
+
+    public <T, K> Response<T> verifyPayment(K k, ParameterizedTypeReference<Response<T>> responseType) {
+        return post(k, zmVerifyPaymentUrl, responseType);
+    }
+
+    public <T, K> Response<T> vinSearch(K k, ParameterizedTypeReference<Response<T>> responseType) {
+        return post(k, zmVinSearchUrl, responseType);
+    }
+
+    public <T, K> Response<T> ascription(K k, ParameterizedTypeReference<Response<T>> responseType) {
+        return post(k, zmAscriptionUrl, responseType);
+    }
+
+    public <T, K> Response<T> manualUnderwriting(K k, ParameterizedTypeReference<Response<T>> responseType) {
+        return post(k, zmManualUnderwritingUrl, responseType);
+    }
+
+
+}

+ 164 - 0
src/main/java/com/ydtech/components/queue/ZmQuoteConsumer.java

@@ -0,0 +1,164 @@
+package com.ydtech.components.queue;
+
+import com.alibaba.fastjson.JSONObject;
+import com.ydtech.components.InsTaskHistoryComponents;
+import com.ydtech.components.ZhongmeiRequestComponents;
+//import com.ydtech.config.RabbitConfig;
+import com.ydtech.constants.InsTaskHistoryEnum;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.ins.model.InsOrder;
+import com.ydtech.modules.ins.model.request.QuoteInfo;
+import com.ydtech.modules.ins.model.request.Response;
+import com.ydtech.modules.ins.model.request.ZhongmeiQuoteResponse;
+import com.ydtech.modules.ins.model.ya.YaQuoteInfoVo;
+import com.ydtech.modules.ins.service.InsOrderService;
+import com.ydtech.modules.ins.vo.*;
+import com.ydtech.utils.CalculateUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.core.ParameterizedTypeReference;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import static com.ydtech.constants.RedisConstant.*;
+
+@Slf4j
+@Component
+public class ZmQuoteConsumer {
+
+    private final ZhongmeiRequestComponents zhongmeiRequestComponents;
+
+    private final StringRedisTemplate redisTemplate;
+
+    private final InsOrderService insOrderService;
+
+    private final InsTaskHistoryComponents insTaskHistoryComponents;
+
+    public ZmQuoteConsumer(ZhongmeiRequestComponents zhongmeiRequestComponents, StringRedisTemplate redisTemplate, InsOrderService insOrderService, InsTaskHistoryComponents insTaskHistoryComponents) {
+        this.zhongmeiRequestComponents = zhongmeiRequestComponents;
+        this.redisTemplate = redisTemplate;
+        this.insOrderService = insOrderService;
+        this.insTaskHistoryComponents = insTaskHistoryComponents;
+    }
+//
+//    @RabbitListener(queues = RabbitConfig.ZM_QUOTE_QUEUE)
+//    @RabbitHandler
+//    public void onMessage(Message message) {
+//        log.info("======================= Rabbitmq 消费消息 ===============================");
+//        QuoteInfo quoteInfo = JSONObject.parseObject(message.getBody(), QuoteInfo.class);
+//        Response<ZhongmeiQuoteResponse> body = zhongmeiRequestComponents.quote(quoteInfo, new ParameterizedTypeReference<Response<ZhongmeiQuoteResponse>>() {
+//        });
+//        ZhongmeiQuoteResponse data = body.getData();
+//        String orderNo = quoteInfo.getOrderNo();
+//        // 1. 通过 订单id 获取订单信息
+//        String s1 = redisTemplate.opsForValue().get(ORDER_NUMBER + orderNo);
+//        InsOrder insOrder = JSONObject.parseObject(s1, InsOrder.class);
+//
+//        HttpResult httpResult;
+//        if(ObjectUtils.isEmpty(insOrder)){
+//             httpResult = HttpResult.error("没有查询到订单");
+//        }else {
+//            // 2.将中煤的token存入redis
+//            String s = JSONObject.toJSONString(body);
+//            redisTemplate.opsForValue().set(INS_ZHONGMEI_KEY + orderNo, s);
+//            // 3.获取报价响应
+//            QuoteRespVo quoteRespVo = getQuoteRespVo(orderNo, data, quoteInfo);
+//            // 4.插入订单
+//            httpResult = responseOrder(insOrder, body, quoteRespVo);
+//            // 5.将结果插入redis
+//        }
+//        String s2 = JSONObject.toJSONString(httpResult);
+//        redisTemplate.opsForValue().set(ORDER_RESULT + orderNo, s2);
+//    }
+
+    /**
+     * @param orderNo       订单号
+     * @param response      中煤响应实体类
+     * @param yaQuoteInfoVo 报价请求参数
+     * @return
+     */
+    public QuoteRespVo getQuoteRespVo(String orderNo, ZhongmeiQuoteResponse response, YaQuoteInfoVo yaQuoteInfoVo) {
+        double jqPremium = response.getTrafficStrength();
+        double syPremium = response.getBusiness();
+        QuoteRespVo quoteRespVo = new QuoteRespVo();
+        List<QuoteRiskRespVo> riskList1 = new ArrayList<>();
+        List<QuoteKindRespVo> kindList1 = new ArrayList<>();
+        List<RiskInfoVo> riskList = yaQuoteInfoVo.getRiskList();
+        for (RiskInfoVo riskInfoVo : riskList) {
+            if ("0507".equals(riskInfoVo.getRiskCode()) && jqPremium != 0) {
+                QuoteRiskRespVo risk = new QuoteRiskRespVo();
+                risk.setRiskCode("0507");
+                risk.setRiskName("机动车交通事故责任强制保险");
+                risk.setPremium(jqPremium);
+                risk.setStartDate(riskInfoVo.getStartDate());
+                risk.setEndDate(riskInfoVo.getEndDate());
+                riskList1.add(risk);
+            }
+            if ("0510".equals(riskInfoVo.getRiskCode()) && syPremium != 0) {
+                QuoteRiskRespVo risk = new QuoteRiskRespVo();
+                risk.setRiskCode("0510");
+                risk.setRiskName("机动车商业保险");
+                risk.setPremium(syPremium);
+                risk.setStartDate(riskInfoVo.getStartDate());
+                risk.setEndDate(riskInfoVo.getEndDate());
+                riskList1.add(risk);
+            }
+        }
+
+        QuoteKindRespVo kind;
+        Map<String, Double> map = response.getKindList();
+        List<KindInfoVo> kindList = yaQuoteInfoVo.getKindList();
+
+        for (KindInfoVo kindInfoVo : kindList) {
+            kind = new QuoteKindRespVo();
+            kind.setKindCode(kindInfoVo.getKindCode());
+            kind.setKindName(kindInfoVo.getKindName());
+            kind.setAmount(kindInfoVo.getAmount());
+            kind.setCoveragePremium(map.get(kindInfoVo.getKindCode()));
+            kind.setUnitAmount(kindInfoVo.getUnitAmount());
+            if (!ObjectUtils.isEmpty(kindInfoVo.getDeductibleRate())) {
+                kind.setDeductibleRate(Double.parseDouble(kindInfoVo.getDeductibleRate()));
+            }
+            kindList1.add(kind);
+        }
+
+        quoteRespVo.setRiskList(riskList1);
+        quoteRespVo.setKindList(kindList1);
+
+        quoteRespVo.setCiSumPermium(CalculateUtils.add(response.getTrafficStrength(), response.getSumTax()));//交强险和车船税合计
+        quoteRespVo.setSumPermium(CalculateUtils.add(response.getTrafficStrength(), response.getBusiness(), response.getSumTax()));//保费合计
+        quoteRespVo.setTaxAmount(response.getSumTax());//车船税
+        quoteRespVo.setTotalAdjustRate(1);
+        quoteRespVo.setILogPreUdwMess("0");//评分
+        quoteRespVo.setOrderno(orderNo); //订单号
+        return quoteRespVo;
+    }
+
+    /**
+     * @param insOrder    订单实体
+     * @param quoteRespVo 包装的响应实体
+     * @return
+     */
+    public HttpResult responseOrder(InsOrder insOrder, Response<ZhongmeiQuoteResponse> body, QuoteRespVo quoteRespVo) {
+        //保存订单信息
+        ZhongmeiQuoteResponse response = body.getData();
+        insOrder.setJqpremium(response.getTrafficStrength());
+        insOrder.setSypremium(response.getBusiness());
+        insOrder.setTaxamount(response.getSumTax());
+        insOrder.setSumpremium(CalculateUtils.add(response.getTrafficStrength(), response.getBusiness(), response.getSumTax()));
+        insOrder.setQuotestatus("1");
+        insOrder.setRiskinfo(JSONObject.parseArray(JSONObject.toJSONString(quoteRespVo.getRiskList())));
+        insOrder.setKindinfo(JSONObject.parseArray(JSONObject.toJSONString(quoteRespVo.getKindList())));
+        insOrder.setJqapplyno(response.getJContractNo());
+        insOrder.setSyapplyno(response.getSContractNo());
+        insOrderService.insert(insOrder);
+        //插入轨迹表 报价中
+        insTaskHistoryComponents.modifyStatus(InsTaskHistoryEnum.IN_QUOTATION, insOrder);
+        return HttpResult.ok(body.getMessage(), quoteRespVo);
+    }
+
+}

+ 34 - 0
src/main/java/com/ydtech/components/scheduler/SchedulerTask.java

@@ -0,0 +1,34 @@
+package com.ydtech.components.scheduler;
+
+import com.ydtech.constants.enums.InsOrderStatus;
+import com.ydtech.modules.order.entity.InsAreaCompany;
+import com.ydtech.modules.order.service.InsAreaCompanyService;
+import com.ydtech.modules.order.service.ZhongMeiOrderService;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+@Data
+@Component
+@Slf4j
+public class SchedulerTask{
+
+    @Autowired
+    private InsAreaCompanyService insAreaCompanyService;
+
+    @Autowired
+    private ZhongMeiOrderService zhongMeiOrderService;
+//
+//    @Scheduled(cron = "0 0/10 * * * ?")
+//    private void configureTask() {
+//        List<InsAreaCompany> insAreaCompanies = insAreaCompanyService.query().eq("orderstatus", InsOrderStatus.S_8.getCode()).list();
+//        for (InsAreaCompany insAreaCompany : insAreaCompanies) {
+//            zhongMeiOrderService.manualUnderwriting(insAreaCompany.getId());
+//        }
+//    }
+
+}

+ 77 - 0
src/main/java/com/ydtech/config/DictEnumConfig.java

@@ -0,0 +1,77 @@
+package com.ydtech.config;
+
+import com.ydtech.aop.request.DictEnum;
+import com.ydtech.constants.enums.dict.DictionaryData;
+import com.ydtech.constants.enums.dict.DictionaryManagement;
+import com.ydtech.constants.enums.dict.IBaseEnum;
+import lombok.Data;
+import org.reflections.Reflections;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.stereotype.Component;
+
+import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+
+/**
+ *  枚举类  字典配置
+ *
+ * @author: lig
+ * @date: 2023年04月10日 0010
+ */
+@Component
+@Data
+public class DictEnumConfig implements InitializingBean {
+
+    private static Map<String, DictionaryManagement> dmMap = new HashMap<>();
+
+    public static Map<String, DictionaryManagement> getDmMap() {
+        return dmMap;
+    }
+
+
+    public static List<DictionaryManagement> dictManageList ;
+
+
+    private static void setDmMap(Map<String, DictionaryManagement> dmMap) {
+        DictEnumConfig.dmMap = dmMap;
+    }
+
+
+    @Override
+    public void afterPropertiesSet() {
+        Reflections reflections = new Reflections("com.ydtech.constants.enums.dict");
+        Set<Class<? extends IBaseEnum>> monitorClasses = reflections.getSubTypesOf(IBaseEnum.class);
+//        List<DictionaryManagement> dmList = new ArrayList<>();
+        dictManageList = new ArrayList<DictionaryManagement>();
+        monitorClasses.forEach(m -> {
+            if (m.isAnnotationPresent(DictEnum.class)) {
+                DictEnum dictEnum = m.getAnnotation(DictEnum.class);
+                DictionaryManagement dictionaryManagement = new DictionaryManagement();
+//                dictionaryManagement.setEnumFlag(Boolean.TRUE);
+                dictionaryManagement.setDictType(dictEnum.key());
+                dictionaryManagement.setDictName(dictEnum.desc());
+//                dictionaryManagement.setStatus(0);
+//                dictionaryManagement.setSysDictFlag(Boolean.TRUE);
+
+                List<DictionaryData> ddList = new ArrayList<>();
+                DictionaryData dictionaryData;
+                IBaseEnum[] enumConstants = m.getEnumConstants();
+                for (IBaseEnum baseEnum : enumConstants) {
+                    dictionaryData = new DictionaryData();
+                    dictionaryData.setDictValue(baseEnum.getCode());
+                    dictionaryData.setDictTag(baseEnum.getDesc());
+                    dictionaryData.setSort(baseEnum.getSort());
+                    dictionaryData.setStatus(baseEnum.getStatus());
+                    ddList.add(dictionaryData);
+                }
+                dictionaryManagement.setDdList(ddList);
+                dictManageList.add(dictionaryManagement);
+            }
+        });
+
+        setDmMap(dictManageList.stream().collect(Collectors.toMap(DictionaryManagement::getDictType, Function.identity())));
+    }
+
+}

+ 53 - 0
src/main/java/com/ydtech/config/DruidConfig.java

@@ -0,0 +1,53 @@
+package com.ydtech.config;
+
+import com.alibaba.druid.support.http.StatViewServlet;
+import com.alibaba.druid.support.http.WebStatFilter;
+import org.springframework.boot.web.servlet.FilterRegistrationBean;
+import org.springframework.boot.web.servlet.ServletRegistrationBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * Druid数据源配置
+ *
+ * @author Yasepix
+ * @date Oct 29, 2018
+ */
+@Configuration
+public class DruidConfig {
+    /**
+     * 注册一个StatViewServlet
+     */
+    @Bean
+    public ServletRegistrationBean druidStatViewServlet() {
+        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
+
+        //IP白名单
+        servletRegistrationBean.addInitParameter("allow", "127.0.0.1");
+        //IP黑名单 (存在共同时,deny优先于allow) : 如果满足deny的话提示:Sorry, you are not permitted to view this page.
+        servletRegistrationBean.addInitParameter("deny", "");
+
+        //登录查看信息的账号密码
+        servletRegistrationBean.addInitParameter("loginUsername", "admin");
+        servletRegistrationBean.addInitParameter("loginPassword", "123456");
+        //是否能够重置数据
+        servletRegistrationBean.addInitParameter("resetEnable", "false");
+        return servletRegistrationBean;
+    }
+
+    /**
+     * 注册一个:filterRegistrationBean
+     */
+    @Bean
+    public FilterRegistrationBean druidStatFilter() {
+
+        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
+
+        //添加过滤规则
+        filterRegistrationBean.addUrlPatterns("/*");
+
+        //添加不需要忽略的格式信息.
+        filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
+        return filterRegistrationBean;
+    }
+}

+ 30 - 0
src/main/java/com/ydtech/config/KaptchaConfig.java

@@ -0,0 +1,30 @@
+package com.ydtech.config;
+
+import com.google.code.kaptcha.impl.DefaultKaptcha;
+import com.google.code.kaptcha.util.Config;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.Properties;
+
+/**
+ * 验证码配置
+ *
+ * @author Yasepix
+ * @date Oct 29, 2018
+ */
+@Configuration
+public class KaptchaConfig {
+
+    @Bean
+    public DefaultKaptcha producer() {
+        Properties properties = new Properties();
+        properties.put("kaptcha.border", "no");
+        properties.put("kaptcha.textproducer.font.color", "black");
+        properties.put("kaptcha.textproducer.char.space", "4");
+        Config config = new Config(properties);
+        DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
+        defaultKaptcha.setConfig(config);
+        return defaultKaptcha;
+    }
+}

+ 30 - 0
src/main/java/com/ydtech/config/MasterPasswordConfig.java

@@ -0,0 +1,30 @@
+package com.ydtech.config;
+
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Component
+@ConfigurationProperties(prefix = "master.password")
+public class MasterPasswordConfig {
+
+    private String ciphertext;
+
+    private String salt;
+
+    public String getCiphertext() {
+        return ciphertext;
+    }
+
+    public void setCiphertext(String ciphertext) {
+        this.ciphertext = ciphertext;
+    }
+
+    public String getSalt() {
+        return salt;
+    }
+
+    public void setSalt(String salt) {
+        this.salt = salt;
+    }
+}

+ 112 - 0
src/main/java/com/ydtech/config/MvcConfig.java

@@ -0,0 +1,112 @@
+package com.ydtech.config;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+import com.ydtech.aop.RequestStringParamHandlerMethodArgumentResolver;
+import me.chanjar.weixin.mp.api.WxMpService;
+import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
+import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.format.FormatterRegistry;
+import org.springframework.http.converter.HttpMessageConverter;
+import org.springframework.http.converter.StringHttpMessageConverter;
+import org.springframework.web.client.RestTemplate;
+import org.springframework.web.method.support.HandlerMethodArgumentResolver;
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+import java.nio.charset.StandardCharsets;
+import java.util.Collections;
+import java.util.List;
+
+@Configuration
+public class MvcConfig implements WebMvcConfigurer {
+
+    @Autowired
+    private WechatOpenProperties wechatOpenProperties;
+
+    @Value("${apk.path}")
+    private String apkPath;
+
+    @Bean
+    public HttpMessageConverter<String> responseBody() {
+        return new StringHttpMessageConverter(StandardCharsets.UTF_8);
+    }
+
+    @Override
+    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
+        converters.add(responseBody());
+    }
+
+    @Override
+    public void addCorsMappings(CorsRegistry registry) {
+        registry.addMapping("/**")    // 允许跨域访问的路径
+                .allowedOrigins("*")    // 允许跨域访问的源
+                .allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE")    // 允许请求方法
+                .maxAge(168000)    // 预检间隔时间
+                .allowedHeaders("*")  // 允许头部设置
+                .allowCredentials(true);    // 是否发送cookie
+    }
+
+    @Override
+    public void addResourceHandlers(ResourceHandlerRegistry registry) {
+        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
+        registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");
+        registry.addResourceHandler("/app/android/**").addResourceLocations("file:" + apkPath);
+    }
+
+    @Bean
+    public RestTemplate restTemplate() {
+        return new RestTemplate();
+    }
+
+    @Bean
+    public WxMpDefaultConfigImpl wxMpDefaultConfig() {
+        WxMpDefaultConfigImpl wxMpDefaultConfig = new WxMpDefaultConfigImpl();
+        wxMpDefaultConfig.setAppId(wechatOpenProperties.getComponentAppId());
+        wxMpDefaultConfig.setSecret(wechatOpenProperties.getComponentSecret());
+        return wxMpDefaultConfig;
+    }
+
+    @Bean
+    public WxMpService wxMpService() {
+        WxMpServiceImpl wxMpService = new WxMpServiceImpl();
+        wxMpService.setWxMpConfigStorage(wxMpDefaultConfig());
+        return wxMpService;
+    }
+
+    @Bean
+    public PaginationInnerInterceptor paginationInnerInterceptor() {
+        PaginationInnerInterceptor paginationInterceptor = new PaginationInnerInterceptor();
+        // 设置最大单页限制数量,默认 500 条,-1 不受限制
+        paginationInterceptor.setMaxLimit(-1L);
+        paginationInterceptor.setDbType(DbType.MYSQL);
+        // 开启 count 的 join 优化,只针对部分 left join
+        paginationInterceptor.setOptimizeJoin(true);
+        return paginationInterceptor;
+    }
+
+    @Bean
+    public MybatisPlusInterceptor mybatisPlusInterceptor() {
+        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
+        mybatisPlusInterceptor.setInterceptors(Collections.singletonList(paginationInnerInterceptor()));
+        return mybatisPlusInterceptor;
+    }
+
+    /**
+     * 获取单个参数
+     *
+     * @param argumentResolvers 处理程序方法参数解析器
+     */
+    @Override
+    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
+        argumentResolvers.add(new RequestStringParamHandlerMethodArgumentResolver());
+        WebMvcConfigurer.super.addArgumentResolvers(argumentResolvers);
+    }
+
+}

+ 27 - 0
src/main/java/com/ydtech/config/RedisConfig.java

@@ -0,0 +1,27 @@
+package com.ydtech.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
+import org.springframework.data.redis.serializer.RedisSerializer;
+
+@Configuration
+public class RedisConfig {
+
+    @Bean
+    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
+        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
+        redisTemplate.setConnectionFactory(connectionFactory);
+        GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
+
+        redisTemplate.setKeySerializer(RedisSerializer.string());
+        redisTemplate.setHashKeySerializer(RedisSerializer.string());
+
+        redisTemplate.setValueSerializer(jsonRedisSerializer);
+        redisTemplate.setHashValueSerializer(jsonRedisSerializer);
+        return redisTemplate;
+    }
+
+}

+ 271 - 0
src/main/java/com/ydtech/config/SwaggerConfig.java

@@ -0,0 +1,271 @@
+package com.ydtech.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.annotation.Order;
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.ParameterBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.schema.ModelRef;
+import springfox.documentation.service.*;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spi.service.contexts.SecurityContext;
+import springfox.documentation.spring.web.plugins.Docket;
+//import springfox.documentation.swagger2.annotations.EnableSwagger2;
+import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Configuration
+//@EnableSwagger2
+@EnableSwagger2WebMvc
+public class SwaggerConfig {
+
+
+    @Bean(value = "adminApi")
+    @Order(value = 1)
+    public Docket adminApi() {
+        // 添加请求参数,我们这里把token作为请求头部参数传入后端
+        ParameterBuilder parameterBuilder = new ParameterBuilder();
+        List<Parameter> parameters = new ArrayList<Parameter>();
+        parameterBuilder.name("Authorization")
+                .description("令牌")
+                .modelRef(new ModelRef("string"))
+                .parameterType("header")
+                .required(false)
+                .defaultValue(" ")
+                .build();
+        parameters.add(parameterBuilder.build());
+        return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
+                .select()
+                .apis(RequestHandlerSelectors.basePackage("com.ydtech.modules.admin"))
+                .paths(PathSelectors.any())
+                .build()
+                .groupName("admin")
+//                .globalOperationParameters(parameters)
+                //  安全上下文
+                .securitySchemes(securitySchemes())
+                .securityContexts(securityContexts());
+
+    }
+    @Bean(value = "esmApi")
+    @Order(value = 2)
+    public Docket esmApi() {
+        // 添加请求参数,我们这里把token作为请求头部参数传入后端
+        ParameterBuilder parameterBuilder = new ParameterBuilder();
+        List<Parameter> parameters = new ArrayList<Parameter>();
+        parameterBuilder.name("Authorization")
+                .description("令牌")
+                .modelRef(new ModelRef("string"))
+                .parameterType("header")
+                .required(false)
+                .build();
+        parameters.add(parameterBuilder.build());
+        return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
+                .select()
+                .apis(RequestHandlerSelectors.basePackage("com.ydtech.modules.esm"))
+                .paths(PathSelectors.any())
+                .build()
+                .groupName("esm")
+//                .globalOperationParameters(parameters)
+                //  安全上下文
+                .securitySchemes(securitySchemes())
+                .securityContexts(securityContexts());
+
+    }
+
+    @Bean(value = "fncApi")
+    @Order(value = 3)
+    public Docket fncApi() {
+        // 添加请求参数,我们这里把token作为请求头部参数传入后端
+        ParameterBuilder parameterBuilder = new ParameterBuilder();
+        List<Parameter> parameters = new ArrayList<Parameter>();
+        parameterBuilder.name("Authorization")
+                .description("令牌")
+                .modelRef(new ModelRef("string"))
+                .parameterType("header")
+                .required(false)
+                .build();
+        parameters.add(parameterBuilder.build());
+        return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
+                .select()
+                .apis(RequestHandlerSelectors.basePackage("com.ydtech.modules.fnc"))
+                .paths(PathSelectors.any())
+                .build()
+                .groupName("fnc")
+//                .globalOperationParameters(parameters)
+                //  安全上下文
+                .securitySchemes(securitySchemes())
+                .securityContexts(securityContexts());
+
+    }
+
+    @Bean(value = "insApi")
+    @Order(value = 4)
+    public Docket insApi() {
+        // 添加请求参数,我们这里把token作为请求头部参数传入后端
+        ParameterBuilder parameterBuilder = new ParameterBuilder();
+        List<Parameter> parameters = new ArrayList<Parameter>();
+        parameterBuilder.name("Authorization")
+                .description("令牌")
+                .modelRef(new ModelRef("string"))
+                .parameterType("header")
+                .required(false)
+                .build();
+        parameters.add(parameterBuilder.build());
+        return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
+                .select()
+                .apis(RequestHandlerSelectors.basePackage("com.ydtech.modules.ins"))
+                .paths(PathSelectors.any())
+                .build()
+                .groupName("ins")
+//                .globalOperationParameters(parameters)
+                //  安全上下文
+                .securitySchemes(securitySchemes())
+                .securityContexts(securityContexts());
+
+    }
+
+    @Bean(value = "invApi")
+    @Order(value = 4)
+    public Docket invApi() {
+        // 添加请求参数,我们这里把token作为请求头部参数传入后端
+        ParameterBuilder parameterBuilder = new ParameterBuilder();
+        List<Parameter> parameters = new ArrayList<Parameter>();
+        parameterBuilder.name("Authorization")
+                .description("令牌")
+                .modelRef(new ModelRef("string"))
+                .parameterType("header")
+                .required(false)
+                .build();
+        parameters.add(parameterBuilder.build());
+        return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
+                .select()
+                .apis(RequestHandlerSelectors.basePackage("com.ydtech.modules.inv"))
+                .paths(PathSelectors.any())
+                .build()
+                .groupName("inv")
+//                .globalOperationParameters(parameters)
+                //  安全上下文
+                .securitySchemes(securitySchemes())
+                .securityContexts(securityContexts());
+
+    }
+
+    @Bean(value = "reportApi")
+    @Order(value = 5)
+    public Docket reportApi() {
+        // 添加请求参数,我们这里把token作为请求头部参数传入后端
+        ParameterBuilder parameterBuilder = new ParameterBuilder();
+        List<Parameter> parameters = new ArrayList<Parameter>();
+        parameterBuilder.name("Authorization")
+                .description("令牌")
+                .modelRef(new ModelRef("string"))
+                .parameterType("header")
+                .required(false)
+                .build();
+        parameters.add(parameterBuilder.build());
+        return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
+                .select()
+                .apis(RequestHandlerSelectors.basePackage("com.ydtech.modules.report"))
+                .paths(PathSelectors.any())
+                .build()
+                .groupName("report")
+//                .globalOperationParameters(parameters)
+                //  安全上下文
+                .securitySchemes(securitySchemes())
+                .securityContexts(securityContexts());
+
+    }
+    @Bean(value = "orderApi")
+    @Order(value = 6)
+    public Docket orderApi() {
+        // 添加请求参数,我们这里把token作为请求头部参数传入后端
+        ParameterBuilder parameterBuilder = new ParameterBuilder();
+        List<Parameter> parameters = new ArrayList<Parameter>();
+        parameterBuilder.name("Authorization")
+                .description("令牌")
+                .modelRef(new ModelRef("string"))
+                .parameterType("header")
+                .required(false)
+                .build();
+        parameters.add(parameterBuilder.build());
+        return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
+                .select()
+                .apis(RequestHandlerSelectors.basePackage("com.ydtech.modules.order"))
+                .paths(PathSelectors.any())
+                .build()
+                .groupName("order")
+//                .globalOperationParameters(parameters)
+                //  安全上下文
+                .securitySchemes(securitySchemes())
+                .securityContexts(securityContexts());
+
+    }
+
+
+    @Bean(value = "naiApi")
+    @Order(value = 7)
+    public Docket naiApi() {
+        // 添加请求参数,我们这里把token作为请求头部参数传入后端
+        ParameterBuilder parameterBuilder = new ParameterBuilder();
+        List<Parameter> parameters = new ArrayList<Parameter>();
+        parameterBuilder.name("Authorization")
+                .description("令牌")
+                .modelRef(new ModelRef("string"))
+                .parameterType("header")
+                .required(false)
+                .build();
+        parameters.add(parameterBuilder.build());
+        return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
+                .select()
+                .apis(RequestHandlerSelectors.basePackage("com.ydtech.nai"))
+                .paths(PathSelectors.any())
+                .build()
+                .groupName("nai")
+//                .globalOperationParameters(parameters)
+                //  安全上下文
+                .securitySchemes(securitySchemes())
+                .securityContexts(securityContexts());
+
+    }
+
+
+    private ApiInfo apiInfo() {
+        return new ApiInfoBuilder()
+                .title("一个伟大项目的 API 文档")
+                .description("This is a restful api document of Spring Boot.")
+                .version("1.0")
+                .build();
+    }
+
+
+    private List<ApiKey> securitySchemes() {
+        List<ApiKey> apiKeys = new ArrayList<>();
+        apiKeys.add(new ApiKey("Authorization", "Authorization", "header"));
+        return apiKeys;
+    }
+
+    private List<SecurityContext> securityContexts() {
+        List<SecurityContext> securityContexts = new ArrayList<>();
+        securityContexts.add(SecurityContext.builder()
+                .securityReferences(defaultAuth())
+                .forPaths(PathSelectors.regex("^(?!auth).*$")).build());
+        return securityContexts;
+    }
+    private List<SecurityReference> defaultAuth() {
+        AuthorizationScope authorizationScope = new AuthorizationScope("global", "描述信息");
+        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
+        authorizationScopes[0] = authorizationScope;
+        List<SecurityReference> securityReferences = new ArrayList<>();
+        securityReferences.add(new SecurityReference("Authorization", authorizationScopes));
+        return securityReferences;
+    }
+
+
+
+
+
+}

+ 104 - 0
src/main/java/com/ydtech/config/WebSecurityConfig.java

@@ -0,0 +1,104 @@
+package com.ydtech.config;
+
+import com.ydtech.security.JwtAuthenticationFilter;
+import com.ydtech.security.JwtAuthenticationProvider;
+import com.ydtech.security.UserDetailsServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
+import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
+import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
+import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
+import org.springframework.security.web.authentication.logout.HttpStatusReturningLogoutSuccessHandler;
+
+@Configuration
+@EnableWebSecurity
+@EnableGlobalMethodSecurity(prePostEnabled = true)
+public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
+
+    @Autowired
+    private UserDetailsServiceImpl userDetailsService;
+
+    @Autowired
+    private MasterPasswordConfig masterPasswordConfig;
+
+    @Override
+    public void configure(AuthenticationManagerBuilder auth) throws Exception {
+        // 使用自定义登录身份认证组件
+        auth.authenticationProvider(new JwtAuthenticationProvider(userDetailsService, masterPasswordConfig));
+    }
+
+    @Override
+    protected void configure(HttpSecurity http) throws Exception {
+        // 禁用 csrf, 由于使用的是JWT,我们这里不需要csrf
+        http.cors().and().csrf().disable()
+                .authorizeRequests()
+                // 跨域预检请求
+//                .antMatchers(HttpMethod.OPTIONS, "/**").permitAll()
+                // web jars
+                .antMatchers("/webjars/**").permitAll()
+                // 查看SQL监控(druid)
+                .antMatchers("/druid/**").permitAll()
+                // 首页和登录页面
+                .antMatchers("/").permitAll()
+                .antMatchers("/login").permitAll()
+                .antMatchers("/sendMsg").permitAll()
+                .antMatchers("/loginByPhone").permitAll()
+                .antMatchers("/user/findById").permitAll()
+                .antMatchers("/esmUserInternalcheck/userRegist").permitAll()
+                .antMatchers("/insOrder/queryOrder").permitAll()
+                .antMatchers("/insOrder/getPayCode").permitAll()
+                .antMatchers("/zm/Underwriting").permitAll()//自动核保回调
+                .antMatchers("/zm/ArtificialUnderwriting").permitAll()//人工核保回调
+                .antMatchers("/esmUserInternalcheck/updateName").permitAll()
+                // swagger
+                .antMatchers("/doc.html").permitAll()
+                .antMatchers("/swagger**/**").permitAll()
+                .antMatchers("/webjars/**").permitAll()
+                .antMatchers("/v2/**").permitAll()
+//                .antMatchers("/swagger-ui.html").permitAll()
+//                .antMatchers("/swagger-resources").permitAll()
+//                .antMatchers("/v2/api-docs").permitAll()
+//                .antMatchers("/webjars/springfox-swagger-ui/**").permitAll()
+                // 字典
+                .antMatchers("/dict/**").permitAll()
+                //静态资源
+                .antMatchers("/static/**").permitAll()
+                //api
+                .antMatchers("/api/**").permitAll()
+                //app
+                .antMatchers("/app/android/**").permitAll()
+                // 验证码
+                .antMatchers("/captcha.jpg**").permitAll()
+                // 服务监控
+                .antMatchers("/actuator/**").permitAll()
+                .antMatchers("/API/insCBIT/**").permitAll()
+                .antMatchers("/CBIT/API/insCBIT/**").permitAll()
+                .antMatchers("/CBITAPI/insCBIT/**").permitAll()
+                .antMatchers("/api/yongan/**").permitAll()
+                .antMatchers("/order/yongAn/**").permitAll()
+                .antMatchers("/api/insRenbao/**").permitAll()
+                .antMatchers("/ins/**").permitAll()
+                .antMatchers("/wechat/**").permitAll()
+                .antMatchers("/esm/policy/**").permitAll()
+                // 其他所有请求需要身份认证
+                .anyRequest().authenticated();
+        // 退出登录处理器
+        http.logout().logoutSuccessHandler(new HttpStatusReturningLogoutSuccessHandler());
+        // 开启登录认证流程过滤器
+//        http.addFilterBefore(new JwtLoginFilter(authenticationManager()), UsernamePasswordAuthenticationFilter.class);
+        // 访问控制时登录状态检查过滤器
+        http.addFilterBefore(new JwtAuthenticationFilter(authenticationManager()), UsernamePasswordAuthenticationFilter.class);
+    }
+
+    @Bean
+    @Override
+    public AuthenticationManager authenticationManager() throws Exception {
+        return super.authenticationManager();
+    }
+
+}

+ 36 - 0
src/main/java/com/ydtech/config/WechatOpenProperties.java

@@ -0,0 +1,36 @@
+package com.ydtech.config;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Component
+@ConfigurationProperties(prefix = "wechat.open")
+public class WechatOpenProperties {
+
+    /**
+     * 设置微信三方平台的appid
+     */
+    private String componentAppId;
+
+    /**
+     * 设置微信三方平台的app secret
+     */
+    private String componentSecret;
+
+
+    public String getComponentAppId() {
+        return componentAppId;
+    }
+
+    public void setComponentAppId(String componentAppId) {
+        this.componentAppId = componentAppId;
+    }
+
+    public String getComponentSecret() {
+        return componentSecret;
+    }
+
+    public void setComponentSecret(String componentSecret) {
+        this.componentSecret = componentSecret;
+    }
+}

+ 24 - 0
src/main/java/com/ydtech/constants/InsTaskHistoryEnum.java

@@ -0,0 +1,24 @@
+package com.ydtech.constants;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum InsTaskHistoryEnum {
+
+    IN_QUOTATION(0, "报价中"),
+    WAITING_NUCLEAR_INSURANCE(1, "待核保"),
+    UNDERWRITTEN(2, "已核保"),
+    TO_BE_MODIFIED(3, "待修改"),
+    UNDERWRITING_FAILED(4, "核保不通过"),
+    UNDERWRITTEN_TO_BE_PAID(5, "已核保待缴费"),
+    PAID(6, "已缴费"),
+    COVERED(7, "已承保");
+
+    private final int state;
+
+    private final String remark;
+
+
+}

+ 41 - 0
src/main/java/com/ydtech/constants/RedisConstant.java

@@ -0,0 +1,41 @@
+package com.ydtech.constants;
+
+public class RedisConstant {
+
+    public final static String ORDER_NUMBER = "ins:order:";
+
+    public final static String ORDER_RESULT = "ins:order:result:";
+
+    public final static String INS_RENBAO_KEY = "ins:renbao:token:";
+
+    public final static long INS_RENBAO_KEY_TIME = 1L;
+
+    public final static String INS_ZHONGMEI_KEY = "ins:zhongmei:token:";
+
+    public final static long INS_ZHONGMEI_KEY_TIME = 1L;
+
+    public final static String INS_ZHONGMEI_POLICY = "ins:zhongmei:policy:";
+
+    public final static long INS_ZHONGMEI_POLICY_TIME = 1L;
+
+    public final static  String INS_HENGBANG_KEY = "ins:hengbang:token:";
+
+    public final static long INS_HENGBANG_KEY_TIME = 1L;
+
+    public final static String INS_YONGCHENG_KEY = "ins:yongcheng:token:";
+
+    public final static String PHONE_VERIFICATION_CODE_KEY = "sys:login:phone:";
+
+    public static final String INS_ANSHENG_KEY = "ins:ansheng:token:";
+
+    public final static long INS_ANSHENG_KEY_TIME = 1L;
+
+    public final static long PHONE_VERIFICATION_CODE_KEY_TIME = 5L;
+
+    public final static String WECHAT_LOGIN_KEY = "wechat:login:appid:";
+
+    public final static long WECHAT_LOGIN_KEY_TIME = 5L;
+
+    public final static String QUOTE_INFO_KEY = "ins:orders:";
+
+}

+ 49 - 0
src/main/java/com/ydtech/constants/SysConstants.java

@@ -0,0 +1,49 @@
+package com.ydtech.constants;
+
+
+import com.ydtech.utils.MacUtils;
+
+/**
+ * 常量管理
+ *
+ * @author Yasepix
+ * @date Oct 29, 2018
+ */
+public class SysConstants {
+
+    /**
+     * 系统管理员用户名
+     */
+    public static String ADMIN = "admin";
+
+    /**
+     * 超级管理员所在部门
+     */
+    public static final String DEPT = "4";
+
+    public static String MAC_ADDRESS = MacUtils.getLocalMac();
+
+    /**
+     * 薪酬管理审核状态(0:待审核;1:审核通过;2:审核未通过 9:未提交审核)
+     */
+    public static final String TO_BE_REVIEW = "0";
+    public static final String SUCCESS_REVIEW = "1";
+    public static final String FAIL_REVIEW = "2";
+    public static final String NO_SUBMIT_REVIEW = "9";
+
+    /**
+     * 薪酬管理人员属性  后线人员 --》也是全日制
+     */
+    public static final String A = "A";
+
+    /**
+     * 薪酬管理人员属性 B和岗位为18:代理  否则: 业务人员) --》也是非全日制
+     */
+    public static final String B = "B";
+
+    /**
+     * 薪酬管理人员属性 非全日制人员--》也是劳务派遣
+     */
+    public static final String C = "C";
+
+}

+ 500 - 0
src/main/java/com/ydtech/constants/enums/City.java

@@ -0,0 +1,500 @@
+package com.ydtech.constants.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+
+/**
+ * @description: 城市
+ * @author: lig
+ * @date: 2023-02-13
+ */
+@Getter
+@AllArgsConstructor
+public enum City {
+
+    龙岩市("350800", "龙岩市"),
+    宁德市("350900", "宁德市"),
+    南昌市("360100", "南昌市"),
+    景德镇市("360200", "景德镇市"),
+    萍乡市("360300", "萍乡市"),
+    九江市("360400", "九江市"),
+    新余市("360500", "新余市"),
+    鹰潭市("360600", "鹰潭市"),
+    赣州市("360700", "赣州市"),
+    吉安市("360800", "吉安市"),
+    潍坊市("370700", "潍坊市"),
+    泉州市("350500", "泉州市"),
+    漳州市("350600", "漳州市"),
+    吴忠市("640300", "吴忠市"),
+    温州市("330300", "温州市"),
+    湖州市("330500", "湖州市"),
+    绍兴市("330600", "绍兴市"),
+    金华市("330700", "金华市"),
+    滁州市("341100", "滁州市"),
+    阜阳市("341200", "阜阳市"),
+    宿州市("341300", "宿州市"),
+    益阳市("430900", "益阳市"),
+    郴州市("431000", "郴州市"),
+    永州市("431100", "永州市"),
+    怀化市("431200", "怀化市"),
+    临夏回族自治州("622900", "临夏回族自治州"),
+    马鞍山市("340500", "马鞍山市"),
+    淮北市("340600", "淮北市"),
+    铜陵市("340700", "铜陵市"),
+    安庆市("340800", "安庆市"),
+    黄山市("341000", "黄山市"),
+    汕头市("440500", "汕头市"),
+    梧州市("450400", "梧州市"),
+    固原市("640400", "固原市"),
+    中卫市("640500", "中卫市"),
+    乌鲁木齐市("650100", "乌鲁木齐市"),
+    克拉玛依市("650200", "克拉玛依市"),
+    吐鲁番地区("652100", "吐鲁番地区"),
+    哈密地区("652200", "哈密地区"),
+    昌吉回族自治州("652300", "昌吉回族自治州"),
+    宁波市("330200", "宁波市"),
+    哈尔滨市("230100", "哈尔滨市"),
+    齐齐哈尔市("230200", "齐齐哈尔市"),
+    濮阳市("410900", "濮阳市"),
+    许昌市("411000", "许昌市"),
+    东城区("110101", "东城区"),
+    西城区("110102", "西城区"),
+    巢湖市("341400", "巢湖市"),
+    六安市("341500", "六安市"),
+    亳州市("341600", "亳州市"),
+    池州市("341700", "池州市"),
+    宣城市("341800", "宣城市"),
+    安康市("610900", "安康市"),
+    沧州市("130900", "沧州市"),
+    钦州市("450700", "钦州市"),
+    贵港市("450800", "贵港市"),
+    玉林市("450900", "玉林市"),
+    百色市("451000", "百色市"),
+    贺州市("451100", "贺州市"),
+    河池市("451200", "河池市"),
+    来宾市("451300", "来宾市"),
+    崇左市("451400", "崇左市"),
+    海口市("460100", "海口市"),
+    三亚市("460200", "三亚市"),
+    五指山市("469001", "五指山市"),
+    琼海市("469002", "琼海市"),
+    儋州市("469003", "儋州市"),
+    文昌市("469005", "文昌市"),
+    万宁市("469006", "万宁市"),
+    东方市("469007", "东方市"),
+    定安县("469021", "定安县"),
+    屯昌县("469022", "屯昌县"),
+    澄迈县("469023", "澄迈县"),
+    临高县("469024", "临高县"),
+    白沙黎族自治县("469025", "白沙黎族自治县"),
+    昌江黎族自治县("469026", "昌江黎族自治县"),
+    乐东黎族自治县("469027", "乐东黎族自治县"),
+    阿克苏地区("652900", "阿克苏地区"),
+    蚌埠市("340300", "蚌埠市"),
+    淮南市("340400", "淮南市"),
+    防城港市("450600", "防城港市"),
+    泰安市("370900", "泰安市"),
+    威海市("371000", "威海市"),
+    日照市("371100", "日照市"),
+    莱芜市("371200", "莱芜市"),
+    临沂市("371300", "临沂市"),
+    德州市("371400", "德州市"),
+    聊城市("371500", "聊城市"),
+    滨州市("371600", "滨州市"),
+    菏泽市("371700", "菏泽市"),
+    郑州市("410100", "郑州市"),
+    克孜勒苏柯尔克孜自治州("653000", "克孜勒苏柯尔克孜自治州"),
+    喀什地区("653100", "喀什地区"),
+    汕尾市("441500", "汕尾市"),
+    河源市("441600", "河源市"),
+    阳江市("441700", "阳江市"),
+    清远市("441800", "清远市"),
+    东莞市("441900", "东莞市"),
+    中山市("442000", "中山市"),
+    潮州市("445100", "潮州市"),
+    揭阳市("445200", "揭阳市"),
+    云浮市("445300", "云浮市"),
+    南宁市("450100", "南宁市"),
+    柳州市("450200", "柳州市"),
+    桂林市("450300", "桂林市"),
+    绥化市("231200", "绥化市"),
+    大兴安岭地区("232700", "大兴安岭地区"),
+    静安区("310106", "静安区"),
+    普陀区("310107", "普陀区"),
+    闸北区("310108", "闸北区"),
+    虹口区("310109", "虹口区"),
+    杨浦区("310110", "杨浦区"),
+    闵行区("310112", "闵行区"),
+    宝山区("310113", "宝山区"),
+    嘉定区("310114", "嘉定区"),
+    浦东新区("310115", "浦东新区"),
+    金山区("310116", "金山区"),
+    松江区("310117", "松江区"),
+    青浦区("310118", "青浦区"),
+    驻马店市("411700", "驻马店市"),
+    济源市("419001", "济源市"),
+    武汉市("420100", "武汉市"),
+    黄石市("420200", "黄石市"),
+    十堰市("420300", "十堰市"),
+    宜昌市("420500", "宜昌市"),
+    襄樊市("420600", "襄樊市"),
+    秦皇岛市("130300", "秦皇岛市"),
+    邯郸市("130400", "邯郸市"),
+    邢台市("130500", "邢台市"),
+    保定市("130600", "保定市"),
+    张家口市("130700", "张家口市"),
+    北海市("450500", "北海市"),
+    娄底市("431300", "娄底市"),
+    湘西土家族苗族自治州("433100", "湘西土家族苗族自治州"),
+    广州市("440100", "广州市"),
+    韶关市("440200", "韶关市"),
+    深圳市("440300", "深圳市"),
+    珠海市("440400", "珠海市"),
+    佛山市("440600", "佛山市"),
+    江门市("440700", "江门市"),
+    湛江市("440800", "湛江市"),
+    茂名市("440900", "茂名市"),
+    肇庆市("441200", "肇庆市"),
+    惠州市("441300", "惠州市"),
+    梅州市("441400", "梅州市"),
+    乌海市("150300", "乌海市"),
+    赤峰市("150400", "赤峰市"),
+    巴彦淖尔市("150800", "巴彦淖尔市"),
+    大连市("210200", "大连市"),
+    鞍山市("210300", "鞍山市"),
+    抚顺市("210400", "抚顺市"),
+    本溪市("210500", "本溪市"),
+    丹东市("210600", "丹东市"),
+    通辽市("150500", "通辽市"),
+    鄂尔多斯市("150600", "鄂尔多斯市"),
+    呼伦贝尔市("150700", "呼伦贝尔市"),
+    济宁市("370800", "济宁市"),
+    株洲市("430200", "株洲市"),
+    湘潭市("430300", "湘潭市"),
+    衡阳市("430400", "衡阳市"),
+    邵阳市("430500", "邵阳市"),
+    嘉兴市("330400", "嘉兴市"),
+    衢州市("330800", "衢州市"),
+    舟山市("330900", "舟山市"),
+    台州市("331000", "台州市"),
+    丽水市("331100", "丽水市"),
+    合肥市("340100", "合肥市"),
+    芜湖市("340200", "芜湖市"),
+    信阳市("411500", "信阳市"),
+    周口市("411600", "周口市"),
+    乌兰察布市("150900", "乌兰察布市"),
+    渭南市("610500", "渭南市"),
+    延安市("610600", "延安市"),
+    大石桥市("211500", "大石桥市"),
+    香港特别行政区("810100", "香港特别行政区"),
+    邳州市("321400", "邳州市"),
+    兴安盟("152200", "兴安盟"),
+    锡林郭勒盟("152500", "锡林郭勒盟"),
+    阿拉善盟("152900", "阿拉善盟"),
+    沈阳市("210100", "沈阳市"),
+    福州市("350100", "福州市"),
+    厦门市("350200", "厦门市"),
+    甘南藏族自治州("623000", "甘南藏族自治州"),
+    西宁市("630100", "西宁市"),
+    海东地区("632100", "海东地区"),
+    海北藏族自治州("632200", "海北藏族自治州"),
+    博尔塔拉蒙古自治州("652700", "博尔塔拉蒙古自治州"),
+    巴音郭楞蒙古自治州("652800", "巴音郭楞蒙古自治州"),
+    黄南藏族自治州("632300", "黄南藏族自治州"),
+    海南藏族自治州("632500", "海南藏族自治州"),
+    德宏傣族景颇族自治州("533100", "德宏傣族景颇族自治州"),
+    怒江傈僳族自治州("533300", "怒江傈僳族自治州"),
+    迪庆藏族自治州("533400", "迪庆藏族自治州"),
+    拉萨市("540100", "拉萨市"),
+    黔东南苗族侗族自治州("522600", "黔东南苗族侗族自治州"),
+    双鸭山市("230500", "双鸭山市"),
+    大庆市("230600", "大庆市"),
+    伊春市("230700", "伊春市"),
+    佳木斯市("230800", "佳木斯市"),
+    七台河市("230900", "七台河市"),
+    牡丹江市("231000", "牡丹江市"),
+    黑河市("231100", "黑河市"),
+    黄浦区("310101", "黄浦区"),
+    卢湾区("310103", "卢湾区"),
+    徐汇区("310104", "徐汇区"),
+    长宁区("310105", "长宁区"),
+    鄂州市("420700", "鄂州市"),
+    荆门市("420800", "荆门市"),
+    孝感市("420900", "孝感市"),
+    昌都地区("542100", "昌都地区"),
+    山南地区("542200", "山南地区"),
+    三明市("350400", "三明市"),
+    宜春市("360900", "宜春市"),
+    抚州市("361000", "抚州市"),
+    上饶市("361100", "上饶市"),
+    济南市("370100", "济南市"),
+    凉山彝族自治州("513400", "凉山彝族自治州"),
+    贵阳市("520100", "贵阳市"),
+    六盘水市("520200", "六盘水市"),
+    遵义市("520300", "遵义市"),
+    安顺市("520400", "安顺市"),
+    铜仁地区("522200", "铜仁地区"),
+    黔西南布依族苗族自治州("522300", "黔西南布依族苗族自治州"),
+    毕节地区("522400", "毕节地区"),
+    陵水黎族自治县("469028", "陵水黎族自治县"),
+    保亭黎族苗族自治县("469029", "保亭黎族苗族自治县"),
+    琼中黎族苗族自治县("469030", "琼中黎族苗族自治县"),
+    西沙群岛("469031", "西沙群岛"),
+    南沙群岛("469032", "南沙群岛"),
+    中沙群岛的岛礁及其海域("469033", "中沙群岛的岛礁及其海域"),
+    万州区("500101", "万州区"),
+    涪陵区("500102", "涪陵区"),
+    渝中区("500103", "渝中区"),
+    大渡口区("500104", "大渡口区"),
+    江北区("500105", "江北区"),
+    沙坪坝区("500106", "沙坪坝区"),
+    九龙坡区("500107", "九龙坡区"),
+    南岸区("500108", "南岸区"),
+    青岛市("370200", "青岛市"),
+    淄博市("370300", "淄博市"),
+    枣庄市("370400", "枣庄市"),
+    东营市("370500", "东营市"),
+    烟台市("370600", "烟台市"),
+    临汾市("141000", "临汾市"),
+    吕梁市("141100", "吕梁市"),
+    呼和浩特市("150100", "呼和浩特市"),
+    包头市("150200", "包头市"),
+    和田地区("653200", "和田地区"),
+    伊犁哈萨克自治州("654000", "伊犁哈萨克自治州"),
+    塔城地区("654200", "塔城地区"),
+    阿勒泰地区("654300", "阿勒泰地区"),
+    石河子市("659001", "石河子市"),
+    阿拉尔市("659002", "阿拉尔市"),
+    图木舒克市("659003", "图木舒克市"),
+    五家渠市("659004", "五家渠市"),
+    漯河市("411100", "漯河市"),
+    三门峡市("411200", "三门峡市"),
+    南阳市("411300", "南阳市"),
+    商丘市("411400", "商丘市"),
+    焦作市("410800", "焦作市"),
+    南平市("350700", "南平市"),
+    辽阳市("211000", "辽阳市"),
+    盘锦市("211100", "盘锦市"),
+    铁岭市("211200", "铁岭市"),
+    朝阳市("211300", "朝阳市"),
+    葫芦岛市("211400", "葫芦岛市"),
+    长春市("220100", "长春市"),
+    吉林市("220200", "吉林市"),
+    四平市("220300", "四平市"),
+    辽源市("220400", "辽源市"),
+    通化市("220500", "通化市"),
+    忻州市("140900", "忻州市"),
+    鸡西市("230300", "鸡西市"),
+    鹤岗市("230400", "鹤岗市"),
+    开封市("410200", "开封市"),
+    洛阳市("410300", "洛阳市"),
+    平顶山市("410400", "平顶山市"),
+    安阳市("410500", "安阳市"),
+    鹤壁市("410600", "鹤壁市"),
+    新乡市("410700", "新乡市"),
+    荆州市("421000", "荆州市"),
+    黄冈市("421100", "黄冈市"),
+    日喀则地区("542300", "日喀则地区"),
+    那曲地区("542400", "那曲地区"),
+    阿里地区("542500", "阿里地区"),
+    林芝地区("542600", "林芝地区"),
+    西安市("610100", "西安市"),
+    铜川市("610200", "铜川市"),
+    自贡市("510300", "自贡市"),
+    攀枝花市("510400", "攀枝花市"),
+    泸州市("510500", "泸州市"),
+    德阳市("510600", "德阳市"),
+    莆田市("350300", "莆田市"),
+    宝鸡市("610300", "宝鸡市"),
+    廊坊市("131000", "廊坊市"),
+    衡水市("131100", "衡水市"),
+    太原市("140100", "太原市"),
+    大同市("140200", "大同市"),
+    阳泉市("140300", "阳泉市"),
+    长治市("140400", "长治市"),
+    晋城市("140500", "晋城市"),
+    朔州市("140600", "朔州市"),
+    黔南布依族苗族自治州("522700", "黔南布依族苗族自治州"),
+    普洱市("530800", "普洱市"),
+    临沧市("530900", "临沧市"),
+    楚雄彝族自治州("532300", "楚雄彝族自治州"),
+    红河哈尼族彝族自治州("532500", "红河哈尼族彝族自治州"),
+    文山壮族苗族自治州("532600", "文山壮族苗族自治州"),
+    西双版纳傣族自治州("532800", "西双版纳傣族自治州"),
+    大理白族自治州("532900", "大理白族自治州"),
+    锦州市("210700", "锦州市"),
+    营口市("210800", "营口市"),
+    延边朝鲜族自治州("222400", "延边朝鲜族自治州"),
+    晋中市("140700", "晋中市"),
+    常州市("320400", "常州市"),
+    苏州市("320500", "苏州市"),
+    南通市("320600", "南通市"),
+    连云港市("320700", "连云港市"),
+    淮安市("320800", "淮安市"),
+    盐城市("320900", "盐城市"),
+    扬州市("321000", "扬州市"),
+    镇江市("321100", "镇江市"),
+    泰州市("321200", "泰州市"),
+    宿迁市("321300", "宿迁市"),
+    咸阳市("610400", "咸阳市"),
+    汉中市("610700", "汉中市"),
+    榆林市("610800", "榆林市"),
+    商洛市("611000", "商洛市"),
+    兰州市("620100", "兰州市"),
+    嘉峪关市("620200", "嘉峪关市"),
+    金昌市("620300", "金昌市"),
+    白银市("620400", "白银市"),
+    天水市("620500", "天水市"),
+    武威市("620600", "武威市"),
+    张掖市("620700", "张掖市"),
+    杭州市("330100", "杭州市"),
+    昆明市("530100", "昆明市"),
+    曲靖市("530300", "曲靖市"),
+    玉溪市("530400", "玉溪市"),
+    保山市("530500", "保山市"),
+    昭通市("530600", "昭通市"),
+    丽江市("530700", "丽江市"),
+    运城市("140800", "运城市"),
+    咸宁市("421200", "咸宁市"),
+    随州市("421300", "随州市"),
+    恩施土家族苗族自治州("422800", "恩施土家族苗族自治州"),
+    仙桃市("429004", "仙桃市"),
+    潜江市("429005", "潜江市"),
+    天门市("429006", "天门市"),
+    神农架林区("429021", "神农架林区"),
+    长沙市("430100", "长沙市"),
+    岳阳市("430600", "岳阳市"),
+    常德市("430700", "常德市"),
+    张家界市("430800", "张家界市"),
+    奉贤区("310120", "奉贤区"),
+    崇明县("310230", "崇明县"),
+    南京市("320100", "南京市"),
+    无锡市("320200", "无锡市"),
+    徐州市("320300", "徐州市"),
+    甘孜藏族自治州("513300", "甘孜藏族自治州"),
+    北碚区("500109", "北碚区"),
+    万盛区("500110", "万盛区"),
+    双桥区("500111", "双桥区"),
+    渝北区("500112", "渝北区"),
+    巴南区("500113", "巴南区"),
+    黔江区("500114", "黔江区"),
+    长寿区("500115", "长寿区"),
+    江津区("500116", "江津区"),
+    合川区("500117", "合川区"),
+    永川区("500118", "永川区"),
+    南川区("500119", "南川区"),
+    綦江县("500222", "綦江县"),
+    潼南县("500223", "潼南县"),
+    铜梁县("500224", "铜梁县"),
+    大足县("500225", "大足县"),
+    荣昌县("500226", "荣昌县"),
+    璧山县("500227", "璧山县"),
+    梁平县("500228", "梁平县"),
+    城口县("500229", "城口县"),
+    丰都县("500230", "丰都县"),
+    垫江县("500231", "垫江县"),
+    武隆县("500232", "武隆县"),
+    忠县("500233", "忠县"),
+    开县("500234", "开县"),
+    云阳县("500235", "云阳县"),
+    奉节县("500236", "奉节县"),
+    巫山县("500237", "巫山县"),
+    巫溪县("500238", "巫溪县"),
+    石柱土家族自治县("500240", "石柱土家族自治县"),
+    秀山土家族苗族自治县("500241", "秀山土家族苗族自治县"),
+    酉阳土家族苗族自治县("500242", "酉阳土家族苗族自治县"),
+    彭水苗族土家族自治县("500243", "彭水苗族土家族自治县"),
+    成都市("510100", "成都市"),
+    果洛藏族自治州("632600", "果洛藏族自治州"),
+    玉树藏族自治州("632700", "玉树藏族自治州"),
+    海西蒙古族藏族自治州("632800", "海西蒙古族藏族自治州"),
+    银川市("640100", "银川市"),
+    石嘴山市("640200", "石嘴山市"),
+    白山市("220600", "白山市"),
+    松原市("220700", "松原市"),
+    平凉市("620800", "平凉市"),
+    崇文区("110103", "崇文区"),
+    宣武区("110104", "宣武区"),
+    朝阳区("110105", "朝阳区"),
+    丰台区("110106", "丰台区"),
+    石景山区("110107", "石景山区"),
+    海淀区("110108", "海淀区"),
+    门头沟区("110109", "门头沟区"),
+    房山区("110111", "房山区"),
+    通州区("110112", "通州区"),
+    顺义区("110113", "顺义区"),
+    昌平区("110114", "昌平区"),
+    大兴区("110115", "大兴区"),
+    怀柔区("110116", "怀柔区"),
+    平谷区("110117", "平谷区"),
+    密云县("110228", "密云县"),
+    延庆县("110229", "延庆县"),
+    和平区("120101", "和平区"),
+    河东区("120102", "河东区"),
+    河西区("120103", "河西区"),
+    南开区("120104", "南开区"),
+    河北区("120105", "河北区"),
+    红桥区("120106", "红桥区"),
+    东丽区("120110", "东丽区"),
+    西青区("120111", "西青区"),
+    津南区("120112", "津南区"),
+    北辰区("120113", "北辰区"),
+    武清区("120114", "武清区"),
+    宝坻区("120115", "宝坻区"),
+    滨海新区("120116", "滨海新区"),
+    宁河县("120221", "宁河县"),
+    静海县("120223", "静海县"),
+    蓟县("120225", "蓟县"),
+    石家庄市("130100", "石家庄市"),
+    唐山市("130200", "唐山市"),
+    承德市("130800", "承德市"),
+    白城市("220800", "白城市"),
+    酒泉市("620900", "酒泉市"),
+    庆阳市("621000", "庆阳市"),
+    定西市("621100", "定西市"),
+    陇南市("621200", "陇南市"),
+    广安市("511600", "广安市"),
+    达州市("511700", "达州市"),
+    雅安市("511800", "雅安市"),
+    巴中市("511900", "巴中市"),
+    资阳市("512000", "资阳市"),
+    阿坝藏族羌族自治州("513200", "阿坝藏族羌族自治州"),
+    绵阳市("510700", "绵阳市"),
+    广元市("510800", "广元市"),
+    遂宁市("510900", "遂宁市"),
+    内江市("511000", "内江市"),
+    乐山市("511100", "乐山市"),
+    南充市("511300", "南充市"),
+    眉山市("511400", "眉山市"),
+    宜宾市("511500", "宜宾市"),
+    阜新市("210900", "阜新市"),
+
+
+    ;
+
+
+    @Getter
+    private String code;
+
+    @Getter
+    private String desc;
+
+
+    public static String buildCity(String addr) {
+        if (StringUtils.isNotEmpty(addr)) {
+            List<City> citys = Arrays.stream(City.values()).filter(a -> addr.contains(a.name())).collect(Collectors.toList());
+            if (null != citys && citys.size() > 0) {
+                return citys.get(0).getCode();
+            }
+        }
+        return "141000";
+    }
+
+
+}

+ 60 - 0
src/main/java/com/ydtech/constants/enums/InsOrderStatus.java

@@ -0,0 +1,60 @@
+package com.ydtech.constants.enums;
+
+import com.ydtech.modules.ins.model.yc.audit.response.AuditResponse;
+import com.ydtech.modules.order.entity.InsAreaCompany;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+
+/**
+ * 保险  订单状态
+ *
+ * @author: lig
+ * @date: 2023-02-16
+ */
+@Getter
+@AllArgsConstructor
+public enum InsOrderStatus {
+
+    //所有未提交核保的均为报价中(包括拒保订单 )
+    S_0("0", "报价中"),
+
+    //已提交核保,并转人工核保状态
+    S_1("1", "待核保"),
+
+    //自动核保或者人工核保审核通过
+    S_2("2", "已核保待缴费"),
+
+    //客户缴费完成生成保单状态
+    S_3("3", "已承保"),
+
+    //人工核保退回状态,直至再次提交核保,状态修改为待核保
+    S_4("4", "核保退回"),
+
+
+
+
+
+    ;
+
+    public static InsOrderStatus matchKey(String key) {
+        InsOrderStatus result = null;
+        for (InsOrderStatus e : values()) {
+            if (e.getCode() == key) {
+                result = e;
+                break;
+            }
+        }
+        return result;
+    }
+
+
+    @Getter
+    private String code;
+
+    @Getter
+    private String desc;
+
+
+
+}

+ 31 - 0
src/main/java/com/ydtech/constants/enums/InsQuoteFlow.java

@@ -0,0 +1,31 @@
+package com.ydtech.constants.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+
+/**
+ * 保险  报价流程
+ *
+ * @author: lig
+ * @date: 2023-03-21
+ */
+@Getter
+@AllArgsConstructor
+public enum InsQuoteFlow {
+
+    Q_S_0( "报价"),
+    Q_S_1( "核保"),
+    Q_S_2( "影像上传"),
+    Q_S_3( "缴费"),
+    Q_S_4( "查看保单"),
+    Q_S_5( "补传回调"),
+
+    ;
+
+
+    @Getter
+    private String desc;
+
+
+}

+ 107 - 0
src/main/java/com/ydtech/constants/enums/InsYcAccident.java

@@ -0,0 +1,107 @@
+package com.ydtech.constants.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * 保险  永诚意外险
+ *
+ * @author: lig
+ * @date: 2023-02-16
+ */
+@Getter
+@AllArgsConstructor
+public enum InsYcAccident {
+
+    A100("100", "A - 5座车方案"),
+    A101("101", "B - 7座车方案"),
+    A102("102", "C - 人员意外伤害"),
+    A103("103", "A-1- 5座车方案"),
+    A104("104", "A - 5座车方案"),
+    A105("105", "B - 7座车方案"),
+    A106("106", "智和诚车商专属方案——5座车300元档"),
+    A107("107", "嘉诚车商专属方案——5座车200元档"),
+    A108("108", "驾乘无忧标准版 - 5座车方案"),
+    A109("109", "驾乘无忧标准版 - 6座车方案"),
+    A110("110", "驾乘无忧标准版 - 7座车方案"),
+    A111("111", "驾乘无忧豪华版 –5座车方案"),
+    A112("112", "驾乘无忧尊享版 –5座车方案"),
+    A113("113", "全车驾乘险高端版: –5座车方案"),
+    A114("114", "摩托车驾意险方案"),
+    A115("115", "A - 5座车低保额方案"),
+    A116("116", "B - 7座车低保额方案"),
+    A117("117", "智和诚车商专属方案-通用版"),
+    A118("118", "驾驶人交通意外方案"),
+    A119("119", "5座车交强险方案"),
+    A120("120", "7座车交强险方案"),
+    A121("121", "A - 5座车方案 常规版"),
+    A122("122", "A - 5座车方案 标准版"),
+    A123("123", "B- 7座车方案 – 标准版"),
+    A132("132", "嘉诚专属方案-5座豪华版"),
+    A133("133", "嘉诚专属方案-7座豪华版"),
+    A134("134", "嘉诚专属方案-5座尊享版"),
+    A135("135", "嘉诚专属方案-7座尊享版"),
+    A136("136", "嘉诚专属方案-非营运货车5座豪华版"),
+    A137("137", "嘉诚专属方案-非营运货车5座尊享版"),
+    A138("138", "全国版C-4座车方案"),
+    A139("139", "全国版D-5座车方案"),
+    A140("140", "全国版E-6座车方案"),
+    A141("141", "全国版F-7座车方案"),
+    A142("142", "A - 5座车协诚专用方案"),
+    A143("143", "B - 7座车协诚专用方案"),
+    A144("144", "C - 5座车协诚专用方案"),
+    A145("145", "D - 7座车协诚专用方案"),
+    A146("146", "E - 5座车协诚专用方案"),
+    A147("147", "E - 7座车协诚专用方案"),
+    A148("148", "嘉诚专属方案(非新)-5座20万档"),
+    A149("149", "嘉诚专属方案(非新)-5座25万档"),
+    A150("150", "嘉诚专属方案(非新)-5座40万档"),
+    A151("151", "嘉诚专属方案(非新)-7座20万档"),
+    A152("152", "嘉诚专属方案(非新)-7座25万档"),
+    A153("153", "嘉诚专属方案(非新)-7座40万档"),
+    A154("154", "诚意行驾乘险-5座"),
+
+    ;
+
+    public static InsYcAccident matchKey(String key) {
+        InsYcAccident result = null;
+        for (InsYcAccident e : values()) {
+            if (e.getCode() == key) {
+                result = e;
+                break;
+            }
+        }
+        return result;
+    }
+
+
+    /**
+     * 转为数据
+     * @return 枚举对象数组
+     */
+    public static List<Map<String, String>> toList() {
+        List<Map<String, String>> list = new ArrayList<>();
+        for (InsYcAccident item : InsYcAccident.values()) {
+            Map<String, String> map = new HashMap<>();
+            map.put("code", item.getCode());
+            map.put("name", item.getDesc());
+            list.add(map);
+        }
+        return list;
+    }
+
+
+    @Getter
+    private String code;
+
+    @Getter
+    private String desc;
+
+
+}

+ 52 - 0
src/main/java/com/ydtech/constants/enums/InsurKind.java

@@ -0,0 +1,52 @@
+package com.ydtech.constants.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+
+/**
+ * @description: 险种   保险种类
+ *
+ * @author: lig
+ * @date: 2023年02月10日 0010
+ */
+@Getter
+@AllArgsConstructor
+public enum InsurKind {
+
+    B("B", "第三者责任险"),
+    D4("D4", "乘客责任险"),
+    A("A", "机动车损失险"),
+    D3("D3", "司机责任险"),
+    MJ1("MJ1", "附加绝对免赔率特约条款(车损)"),
+    MJ2("MJ2", "附加绝对免赔率特约条款(机动车第三者责任保险)"),
+    MJ3("MJ3", "附加绝对免赔率特约条款(机动车车上人员责任保险(司机))"),
+    MJ4("MJ4", "附加绝对免赔率特约条款(机动车车上人员责任保险(乘客))"),
+    L("L", "附加车身划痕损失险"),
+    BD("BD", "附加法定节假日限额翻倍险"),
+    SY_FJ_YBW1("SY_FJ_YBW1", "附加医保外用药责任险(第三者责任保险)"),
+    SY_FJ_YBW2("SY_FJ_YBW2", "附加医保外用药责任险(车上人员责任保险(乘客))"),
+    SY_FJ_YBW3("SY_FJ_YBW3", "附加医保外用药责任险(车上人员责任保险(司机))"),
+
+    ;
+
+    public static InsurKind matchKey(String key) {
+        InsurKind result = null;
+        for (InsurKind e : values()) {
+            if (e.getCode() == key) {
+                result = e;
+                break;
+            }
+        }
+        return result;
+    }
+
+
+    @Getter
+    private String code;
+
+    @Getter
+    private String desc;
+
+
+}

+ 87 - 0
src/main/java/com/ydtech/constants/enums/Province.java

@@ -0,0 +1,87 @@
+package com.ydtech.constants.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+
+/**
+ * @description: 省份
+ * @author: lig
+ * @date: 2023-02-13
+ */
+@Getter
+@AllArgsConstructor
+public enum Province {
+
+    江西省("360000", "江西省"),
+    新疆维吾尔自治区("650000", "新疆维吾尔自治区"),
+    黑龙江省("230000", "黑龙江省"),
+    北京市("110000", "北京市"),
+    海南省("460000", "海南省"),
+    河南省("410000", "河南省"),
+    广西壮族自治区("450000", "广西壮族自治区"),
+    湖北省("420000", "湖北省"),
+    广东省("440000", "广东省"),
+    安徽省("340000", "安徽省"),
+    辽宁省("210000", "辽宁省"),
+    福建省("350000", "福建省"),
+    青海省("630000", "青海省"),
+    西藏自治区("540000", "西藏自治区"),
+    上海市("310000", "上海市"),
+    山东省("370000", "山东省"),
+    贵州省("520000", "贵州省"),
+    重庆市("500000", "重庆市"),
+    内蒙古自治区("150000", "内蒙古自治区"),
+    台湾省("710000", "台湾省"),
+    香港特别行政区("810000", "香港特别行政区"),
+    澳门特别行政区("820000", "澳门特别行政区"),
+    吉林省("220000", "吉林省"),
+    陕西省("610000", "陕西省"),
+    山西省("140000", "山西省"),
+    甘肃省("620000", "甘肃省"),
+    浙江省("330000", "浙江省"),
+    云南省("530000", "云南省"),
+    湖南省("430000", "湖南省"),
+    江苏省("320000", "江苏省"),
+    四川省("510000", "四川省"),
+    宁夏回族自治区("640000", "宁夏回族自治区"),
+    天津市("120000", "天津市"),
+    河北省("130000", "河北省"),
+
+
+    ;
+
+
+    @Getter
+    private String code;
+
+    @Getter
+    private String desc;
+
+
+
+    public static String buildProvince(String addr){
+        if(StringUtils.isNotEmpty(addr)){
+            List<Province> provinces = Arrays.stream(Province.values()).filter(a -> addr.contains(a.name())).collect(Collectors.toList());
+            if(null != provinces && provinces.size() > 0){
+                return provinces.get(0).getCode();
+            }
+        }
+        return "";
+    }
+
+
+
+
+
+
+
+
+
+
+}

+ 32 - 0
src/main/java/com/ydtech/constants/enums/dict/DictionaryData.java

@@ -0,0 +1,32 @@
+package com.ydtech.constants.enums.dict;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel(value = "DictionaryData", description = "字典数据")
+public class DictionaryData {
+
+//    @ApiModelProperty("字典id")
+//    private Long dictMgtId;
+
+    @ApiModelProperty("标签")
+    private String dictTag;
+
+    @ApiModelProperty("键值")
+    private String dictValue;
+
+    @ApiModelProperty("排序")
+    private Integer sort;
+
+    @ApiModelProperty("状态 0.启用 1.停用")
+    private Integer status;
+
+
+
+}

+ 38 - 0
src/main/java/com/ydtech/constants/enums/dict/DictionaryManagement.java

@@ -0,0 +1,38 @@
+package com.ydtech.constants.enums.dict;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+
+import java.util.List;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel(value = "DictionaryManagement", description = "字典管理")
+public class DictionaryManagement {
+
+    @ApiModelProperty("名称")
+    private String dictName;
+
+    @ApiModelProperty("类型")
+    private String dictType;
+
+//    @ApiModelProperty("是否系统变量")
+//    private Boolean sysDictFlag;
+
+//    @ApiModelProperty("状态 0.启用 1.禁用")
+//    private Integer status;
+
+    @TableField(exist = false)
+    private List<DictionaryData> ddList;
+
+//    @TableField(exist = false)
+//    @ApiModelProperty("是否枚举类")
+//    private Boolean enumFlag = Boolean.FALSE;
+
+
+
+}

+ 38 - 0
src/main/java/com/ydtech/constants/enums/dict/EnumUtils.java

@@ -0,0 +1,38 @@
+package com.ydtech.constants.enums.dict;
+
+import com.ydtech.constants.enums.dict.IBaseEnum;
+import com.ydtech.utils.StringUtils;
+
+import java.util.Objects;
+import java.util.Optional;
+import java.util.stream.Stream;
+
+
+public class EnumUtils{
+
+    /**
+     * 根据枚举值获取枚举
+     * @param baseEnumClass 枚举类
+     * @param value 枚举值
+     * @return 枚举
+     */
+    public static <T extends IBaseEnum> T select(Class<T> baseEnumClass, String value) {
+        if (Objects.isNull(value)) {
+            return null;
+        }
+        return Stream.of(baseEnumClass.getEnumConstants()).filter(x -> x.getCode().equals(value)).findAny().orElse(null);
+    }
+
+    /**
+     * 根据枚举值获取枚举描述
+     * @param baseEnumClass 枚举类
+     * @param value 枚举值
+     * @return 枚举描述
+     */
+    public static <T extends IBaseEnum> String getDescByKey(Class<T> baseEnumClass, String value) {
+        return Optional.ofNullable(select(baseEnumClass, value)).map(IBaseEnum::getDesc).orElse(StringUtils.EMPTY);
+    }
+
+
+
+}

+ 32 - 0
src/main/java/com/ydtech/constants/enums/dict/GenderEnum.java

@@ -0,0 +1,32 @@
+package com.ydtech.constants.enums.dict;
+
+import com.ydtech.aop.request.DictEnum;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+
+/**
+ * 性别
+ *
+ * @author: lig
+ * @date: 2023-04-10
+ */
+@Getter
+@AllArgsConstructor
+@DictEnum(key = "gender", desc = "性别")
+public enum GenderEnum implements IBaseEnum {
+
+    MAN("1", "男",1,0),
+    WOMAN("2", "女",2,0),
+    OTHERS("3", "其他",3,0);
+
+    private String code;
+    private String desc;
+    //排序
+    private Integer sort;
+    //状态  0 启用  1 不启用
+    private Integer status;
+
+
+
+}

+ 22 - 0
src/main/java/com/ydtech/constants/enums/dict/IBaseEnum.java

@@ -0,0 +1,22 @@
+package com.ydtech.constants.enums.dict;
+
+
+
+public interface IBaseEnum {
+
+    /**
+     * 获取枚举描述
+     * @return 枚举描述
+     */
+    String getDesc();
+
+    String getCode();
+
+    Integer getSort();
+
+    Integer getStatus();
+
+
+
+
+}

+ 41 - 0
src/main/java/com/ydtech/constants/enums/dict/InsOrderStatusEnum.java

@@ -0,0 +1,41 @@
+package com.ydtech.constants.enums.dict;
+
+import com.ydtech.aop.request.DictEnum;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+
+@Getter
+@AllArgsConstructor
+@DictEnum(key = "insOrderStatus", desc = "保险订单状态")
+public enum InsOrderStatusEnum implements IBaseEnum {
+
+    //所有未提交核保的均为报价中(包括拒保订单 )
+    QUOTE_ING("0", "报价中",1,0),
+
+    //已提交核保,并转人工核保状态
+    WAIT_AUDIT("1", "待核保",2,0),
+
+    //自动核保或者人工核保审核通过
+    WAIT_PAY("2", "已核保待缴费",3,0),
+
+    //客户缴费完成生成保单状态
+    ACCEPT_INSURANCE("3", "已承保",4,0),
+
+    //人工核保退回状态,直至再次提交核保,状态修改为待核保
+    TO_BACK("4", "核保退回",6,0),
+
+    ;
+
+
+
+    private String code;
+    private String desc;
+    //排序
+    private Integer sort;
+    //状态  0 启用  1 不启用
+    private Integer status;
+
+
+
+}

+ 69 - 0
src/main/java/com/ydtech/core/page/BaseController.java

@@ -0,0 +1,69 @@
+package com.ydtech.core.page;
+
+
+import com.ydtech.modules.admin.model.SysUser;
+import com.ydtech.security.utils.JwtTokenUtils;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.security.core.userdetails.UserDetails;
+
+import javax.servlet.http.HttpServletRequest;
+
+public class BaseController {
+
+    public SysUser getUser() {
+        return (SysUser) SecurityContextHolder.getContext()
+                .getAuthentication()
+                .getPrincipal();
+    }
+
+    public String getUserName() {
+        String userName = null;
+        Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
+
+        if (principal instanceof UserDetails) {
+            userName = ((UserDetails) principal).getUsername();
+        } else {
+            userName = principal.toString();
+        }
+        return userName;
+    }
+
+
+    /**
+     * 获取过滤字段的值
+     *
+     * @param filterName
+     * @return
+     */
+    public String getColumnFilterValue(PageRequest pageRequest, String filterName) {
+        String value = null;
+        ColumnFilter columnFilter = pageRequest.getColumnFilter(filterName);
+        if (columnFilter != null) {
+            value = columnFilter.getValue();
+        }
+        return value;
+    }
+
+    /**
+     * 获取部门id
+     *
+     * @param request
+     * @return
+     */
+    public String getdeptId(HttpServletRequest request) {
+        return JwtTokenUtils.getDeptIdFromRequest(request);
+    }
+
+
+    /**
+     * 获取用户ID
+     *
+     * @param request
+     * @return
+     */
+    public String getUserId(HttpServletRequest request) {
+        return JwtTokenUtils.getUserIdFromRequest(request);
+    }
+
+
+}

+ 38 - 0
src/main/java/com/ydtech/core/page/BasePageVO.java

@@ -0,0 +1,38 @@
+package com.ydtech.core.page;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+
+/**
+ * @author: shenweidong
+ * @Description:
+ * @Date: 2021/8/10 10:46
+ **/
+@ApiModel(description = "基础分页VO")
+public class BasePageVO implements Serializable {
+    private static final long serialVersionUID = -3074932791528263231L;
+
+    @ApiModelProperty(value = "页码")
+    private Integer pageNum = 1;
+
+    @ApiModelProperty(value = "每页数据量")
+    private Integer pageSize = 10;
+
+    public Integer getPageNum() {
+        return pageNum;
+    }
+
+    public void setPageNum(Integer pageNum) {
+        this.pageNum = pageNum;
+    }
+
+    public Integer getPageSize() {
+        return pageSize;
+    }
+
+    public void setPageSize(Integer pageSize) {
+        this.pageSize = pageSize;
+    }
+}

+ 36 - 0
src/main/java/com/ydtech/core/page/ColumnFilter.java

@@ -0,0 +1,36 @@
+package com.ydtech.core.page;
+
+/**
+ * 分页查询列过滤器
+ *
+ * @author Louis
+ * @date Aug 19, 2018
+ */
+public class ColumnFilter {
+
+    /**
+     * 过滤列名
+     */
+    private String name;
+    /**
+     * 查询的值
+     */
+    private String value;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+}

+ 93 - 0
src/main/java/com/ydtech/core/page/HttpResult.java

@@ -0,0 +1,93 @@
+package com.ydtech.core.page;
+
+
+
+/**
+ * HTTP结果封装
+ *
+ * @author Louis
+ * @date Jun 29, 2019
+ */
+public class HttpResult<T> {
+    private int code = 200;
+    private String msg;
+    private T data;
+
+    public static HttpResult error() {
+        return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, "未知异常,请联系管理员");
+    }
+
+    public static HttpResult error(String msg) {
+        return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, msg);
+    }
+
+    public static HttpResult error(int code, String msg) {
+        HttpResult r = new HttpResult();
+        r.setCode(code);
+        r.setMsg(msg);
+        return r;
+    }
+
+    public static HttpResult error(Object data) {
+        HttpResult r = new HttpResult();
+        r.setCode(HttpStatus.SC_INTERNAL_SERVER_ERROR);
+        r.setData(data);
+        return r;
+    }
+
+    public static HttpResult ok(String msg) {
+        HttpResult r = new HttpResult();
+        r.setMsg(msg);
+        return r;
+    }
+
+    public static HttpResult ok(Object data) {
+        HttpResult r = new HttpResult();
+        r.setData(data);
+        return r;
+    }
+
+    public static HttpResult ok(String msg, Object data) {
+        HttpResult r = new HttpResult();
+        r.msg = msg;
+        r.setData(data);
+        return r;
+    }
+
+    public static HttpResult ok() {
+        return new HttpResult();
+    }
+
+    public int getCode() {
+        return code;
+    }
+
+    public void setCode(int code) {
+        this.code = code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    public T getData() {
+        return data;
+    }
+
+    public void setData(T data) {
+        this.data = data;
+    }
+
+    @Override
+    public String toString() {
+        return "HttpResult{" +
+                "code=" + code +
+                ", msg='" + msg + '\'' +
+                ", data=" + data +
+                '}';
+    }
+}

+ 238 - 0
src/main/java/com/ydtech/core/page/HttpStatus.java

@@ -0,0 +1,238 @@
+package com.ydtech.core.page;
+
+/**
+ * Constants enumerating the HTTP status codes.
+ * All status codes defined in RFC1945 (HTTP/1.0), RFC2616 (HTTP/1.1), and
+ * RFC2518 (WebDAV) are listed.
+ *
+ * @see StatusLine
+ * @since 4.0
+ */
+public interface HttpStatus {
+
+    // --- 1xx Informational ---
+
+    /**
+     * {@code 100 Continue} (HTTP/1.1 - RFC 2616)
+     */
+    public static final int SC_CONTINUE = 100;
+    /**
+     * {@code 101 Switching Protocols} (HTTP/1.1 - RFC 2616)
+     */
+    public static final int SC_SWITCHING_PROTOCOLS = 101;
+    /**
+     * {@code 102 Processing} (WebDAV - RFC 2518)
+     */
+    public static final int SC_PROCESSING = 102;
+
+    // --- 2xx Success ---
+
+    /**
+     * {@code 200 OK} (HTTP/1.0 - RFC 1945)
+     */
+    public static final int SC_OK = 200;
+    /**
+     * {@code 201 Created} (HTTP/1.0 - RFC 1945)
+     */
+    public static final int SC_CREATED = 201;
+    /**
+     * {@code 202 Accepted} (HTTP/1.0 - RFC 1945)
+     */
+    public static final int SC_ACCEPTED = 202;
+    /**
+     * {@code 203 Non Authoritative Information} (HTTP/1.1 - RFC 2616)
+     */
+    public static final int SC_NON_AUTHORITATIVE_INFORMATION = 203;
+    /**
+     * {@code 204 No Content} (HTTP/1.0 - RFC 1945)
+     */
+    public static final int SC_NO_CONTENT = 204;
+    /**
+     * {@code 205 Reset Content} (HTTP/1.1 - RFC 2616)
+     */
+    public static final int SC_RESET_CONTENT = 205;
+    /**
+     * {@code 206 Partial Content} (HTTP/1.1 - RFC 2616)
+     */
+    public static final int SC_PARTIAL_CONTENT = 206;
+    /**
+     * {@code 207 Multi-Status} (WebDAV - RFC 2518)
+     * or
+     * {@code 207 Partial Update OK} (HTTP/1.1 - draft-ietf-http-v11-spec-rev-01?)
+     */
+    public static final int SC_MULTI_STATUS = 207;
+
+    // --- 3xx Redirection ---
+
+    /**
+     * {@code 300 Mutliple Choices} (HTTP/1.1 - RFC 2616)
+     */
+    public static final int SC_MULTIPLE_CHOICES = 300;
+    /**
+     * {@code 301 Moved Permanently} (HTTP/1.0 - RFC 1945)
+     */
+    public static final int SC_MOVED_PERMANENTLY = 301;
+    /**
+     * {@code 302 Moved Temporarily} (Sometimes {@code Found}) (HTTP/1.0 - RFC 1945)
+     */
+    public static final int SC_MOVED_TEMPORARILY = 302;
+    /**
+     * {@code 303 See Other} (HTTP/1.1 - RFC 2616)
+     */
+    public static final int SC_SEE_OTHER = 303;
+    /**
+     * {@code 304 Not Modified} (HTTP/1.0 - RFC 1945)
+     */
+    public static final int SC_NOT_MODIFIED = 304;
+    /**
+     * {@code 305 Use Proxy} (HTTP/1.1 - RFC 2616)
+     */
+    public static final int SC_USE_PROXY = 305;
+    /**
+     * {@code 307 Temporary Redirect} (HTTP/1.1 - RFC 2616)
+     */
+    public static final int SC_TEMPORARY_REDIRECT = 307;
+
+    // --- 4xx Client Error ---
+
+    /**
+     * {@code 400 Bad Request} (HTTP/1.1 - RFC 2616)
+     */
+    public static final int SC_BAD_REQUEST = 400;
+    /**
+     * {@code 401 Unauthorized} (HTTP/1.0 - RFC 1945)
+     */
+    public static final int SC_UNAUTHORIZED = 401;
+    /**
+     * {@code 402 Payment Required} (HTTP/1.1 - RFC 2616)
+     */
+    public static final int SC_PAYMENT_REQUIRED = 402;
+    /**
+     * {@code 403 Forbidden} (HTTP/1.0 - RFC 1945)
+     */
+    public static final int SC_FORBIDDEN = 403;
+    /**
+     * {@code 404 Not Found} (HTTP/1.0 - RFC 1945)
+     */
+    public static final int SC_NOT_FOUND = 404;
+    /**
+     * {@code 405 Method Not Allowed} (HTTP/1.1 - RFC 2616)
+     */
+    public static final int SC_METHOD_NOT_ALLOWED = 405;
+    /**
+     * {@code 406 Not Acceptable} (HTTP/1.1 - RFC 2616)
+     */
+    public static final int SC_NOT_ACCEPTABLE = 406;
+    /**
+     * {@code 407 Proxy Authentication Required} (HTTP/1.1 - RFC 2616)
+     */
+    public static final int SC_PROXY_AUTHENTICATION_REQUIRED = 407;
+    /**
+     * {@code 408 Request Timeout} (HTTP/1.1 - RFC 2616)
+     */
+    public static final int SC_REQUEST_TIMEOUT = 408;
+    /**
+     * {@code 409 Conflict} (HTTP/1.1 - RFC 2616)
+     */
+    public static final int SC_CONFLICT = 409;
+    /**
+     * {@code 410 Gone} (HTTP/1.1 - RFC 2616)
+     */
+    public static final int SC_GONE = 410;
+    /**
+     * {@code 411 Length Required} (HTTP/1.1 - RFC 2616)
+     */
+    public static final int SC_LENGTH_REQUIRED = 411;
+    /**
+     * {@code 412 Precondition Failed} (HTTP/1.1 - RFC 2616)
+     */
+    public static final int SC_PRECONDITION_FAILED = 412;
+    /**
+     * {@code 413 Request Entity Too Large} (HTTP/1.1 - RFC 2616)
+     */
+    public static final int SC_REQUEST_TOO_LONG = 413;
+    /**
+     * {@code 414 Request-URI Too Long} (HTTP/1.1 - RFC 2616)
+     */
+    public static final int SC_REQUEST_URI_TOO_LONG = 414;
+    /**
+     * {@code 415 Unsupported Media Type} (HTTP/1.1 - RFC 2616)
+     */
+    public static final int SC_UNSUPPORTED_MEDIA_TYPE = 415;
+    /**
+     * {@code 416 Requested Range Not Satisfiable} (HTTP/1.1 - RFC 2616)
+     */
+    public static final int SC_REQUESTED_RANGE_NOT_SATISFIABLE = 416;
+    /**
+     * {@code 417 Expectation Failed} (HTTP/1.1 - RFC 2616)
+     */
+    public static final int SC_EXPECTATION_FAILED = 417;
+
+    /**
+     * Static constant for a 418 error.
+     * {@code 418 Unprocessable Entity} (WebDAV drafts?)
+     * or {@code 418 Reauthentication Required} (HTTP/1.1 drafts?)
+     */
+    // not used
+    // public static final int SC_UNPROCESSABLE_ENTITY = 418;
+
+    /**
+     * Static constant for a 419 error.
+     * {@code 419 Insufficient Space on Resource}
+     * (WebDAV - draft-ietf-webdav-protocol-05?)
+     * or {@code 419 Proxy Reauthentication Required}
+     * (HTTP/1.1 drafts?)
+     */
+    public static final int SC_INSUFFICIENT_SPACE_ON_RESOURCE = 419;
+    /**
+     * Static constant for a 420 error.
+     * {@code 420 Method Failure}
+     * (WebDAV - draft-ietf-webdav-protocol-05?)
+     */
+    public static final int SC_METHOD_FAILURE = 420;
+    /**
+     * {@code 422 Unprocessable Entity} (WebDAV - RFC 2518)
+     */
+    public static final int SC_UNPROCESSABLE_ENTITY = 422;
+    /**
+     * {@code 423 Locked} (WebDAV - RFC 2518)
+     */
+    public static final int SC_LOCKED = 423;
+    /**
+     * {@code 424 Failed Dependency} (WebDAV - RFC 2518)
+     */
+    public static final int SC_FAILED_DEPENDENCY = 424;
+
+    // --- 5xx Server Error ---
+
+    /**
+     * {@code 500 Server Error} (HTTP/1.0 - RFC 1945)
+     */
+    public static final int SC_INTERNAL_SERVER_ERROR = 500;
+    /**
+     * {@code 501 Not Implemented} (HTTP/1.0 - RFC 1945)
+     */
+    public static final int SC_NOT_IMPLEMENTED = 501;
+    /**
+     * {@code 502 Bad Gateway} (HTTP/1.0 - RFC 1945)
+     */
+    public static final int SC_BAD_GATEWAY = 502;
+    /**
+     * {@code 503 Service Unavailable} (HTTP/1.0 - RFC 1945)
+     */
+    public static final int SC_SERVICE_UNAVAILABLE = 503;
+    /**
+     * {@code 504 Gateway Timeout} (HTTP/1.1 - RFC 2616)
+     */
+    public static final int SC_GATEWAY_TIMEOUT = 504;
+    /**
+     * {@code 505 HTTP Version Not Supported} (HTTP/1.1 - RFC 2616)
+     */
+    public static final int SC_HTTP_VERSION_NOT_SUPPORTED = 505;
+
+    /**
+     * {@code 507 Insufficient Storage} (WebDAV - RFC 2518)
+     */
+    public static final int SC_INSUFFICIENT_STORAGE = 507;
+
+}

+ 68 - 0
src/main/java/com/ydtech/core/page/PageRequest.java

@@ -0,0 +1,68 @@
+package com.ydtech.core.page;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ydtech.modules.esm.model.EsmInsAttribution;
+import org.apache.poi.ss.formula.functions.T;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 分页请求
+ *
+ * @author Louis
+ * @date Aug 19, 2018
+ */
+public class PageRequest {
+    /**
+     * 当前页码
+     */
+    private int pageNum = 1;
+    /**
+     * 每页数量
+     */
+    private int pageSize = 10;
+    /**
+     * 每页数量
+     */
+    private Map<String, ColumnFilter> columnFilters = new HashMap<String, ColumnFilter>();
+
+    public int getPageNum() {
+        return pageNum;
+    }
+
+    public void setPageNum(int pageNum) {
+        this.pageNum = pageNum;
+    }
+
+    public int getPageSize() {
+        return pageSize;
+    }
+
+    public void setPageSize(int pageSize) {
+        this.pageSize = pageSize;
+    }
+
+    public Map<String, ColumnFilter> getColumnFilters() {
+        return columnFilters;
+    }
+
+    public void setColumnFilters(Map<String, ColumnFilter> columnFilters) {
+        this.columnFilters = columnFilters;
+    }
+
+    public ColumnFilter getColumnFilter(String name) {
+        return columnFilters.get(name);
+    }
+
+
+    public static Page<T>  buildPageRequest(PageRequest pageRequest){
+        int pageNum = pageRequest.getPageNum() < 1?1:pageRequest.getPageNum();
+        int pageSize = pageRequest.getPageSize() <1?1:pageRequest.getPageSize();
+
+        Page<T> p = new Page();
+        p.setSize(pageSize);
+        p.setCurrent(pageNum);
+        return p;
+    }
+}

+ 179 - 0
src/main/java/com/ydtech/core/page/PageResult.java

@@ -0,0 +1,179 @@
+package com.ydtech.core.page;
+
+import cn.hutool.http.HttpStatus;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.github.pagehelper.Page;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 分页返回结果
+ *
+ * @author Yasepix
+ * @date Aug 19, 2018
+ */
+public class PageResult<T> {
+    /**
+     * 当前页码
+     */
+    private int pageNum;
+    /**
+     * 每页数量
+     */
+    private int pageSize;
+    /**
+     * 记录总数
+     */
+    private long totalSize;
+    /**
+     * 页码总数
+     */
+    private int totalPages;
+    /**
+     * 分页数据
+     */
+    private List<?> content;
+
+    @JsonInclude(JsonInclude.Include.NON_EMPTY)
+    private String jsum;
+    @JsonInclude(JsonInclude.Include.NON_EMPTY)
+    private String yfsum;
+    @JsonInclude(JsonInclude.Include.NON_EMPTY)
+    private String ssum;
+    @JsonInclude(JsonInclude.Include.NON_EMPTY)
+    private String yssum;
+
+    public String getJsum() {
+        return jsum;
+    }
+
+    public void setJsum(String jsum) {
+        this.jsum = jsum;
+    }
+
+    public String getYfsum() {
+        return yfsum;
+    }
+
+    public void setYfsum(String yfsum) {
+        this.yfsum = yfsum;
+    }
+
+    public String getSsum() {
+        return ssum;
+    }
+
+    public void setSsum(String ssum) {
+        this.ssum = ssum;
+    }
+
+    public String getYssum() {
+        return yssum;
+    }
+
+    public void setYssum(String yssum) {
+        this.yssum = yssum;
+    }
+
+    public int getPageNum() {
+        return pageNum;
+    }
+
+    public void setPageNum(int pageNum) {
+        this.pageNum = pageNum;
+    }
+
+    public int getPageSize() {
+        return pageSize;
+    }
+
+    public void setPageSize(int pageSize) {
+        this.pageSize = pageSize;
+    }
+
+    public long getTotalSize() {
+        return totalSize;
+    }
+
+    public void setTotalSize(long totalSize) {
+        this.totalSize = totalSize;
+    }
+
+    public int getTotalPages() {
+        return totalPages;
+    }
+
+    public void setTotalPages(int totalPages) {
+        this.totalPages = totalPages;
+    }
+
+    public List<?> getContent() {
+        return content;
+    }
+
+    public void setContent(List<?> content) {
+        this.content = content;
+    }
+
+    public PageResult() {
+
+    }
+
+    public PageResult(int currentPage, int numPerPage, int totalCount, List<?> recordList) {
+        this.pageNum = currentPage;
+        this.pageSize = numPerPage;
+        this.totalSize = totalCount;
+        this.totalPages = (int) Math.ceil(((double) totalCount) / numPerPage);
+        setContent(recordList);
+    }
+
+    public PageResult(int currentPage, int numPerPage, int totalCount, String jsum, String yfsum, String ssum, String yssum, List recordList) {
+        this.pageNum = currentPage;
+        this.pageSize = numPerPage;
+        this.totalSize = totalCount;
+        this.jsum = jsum;
+        this.yfsum = yfsum;
+        this.ssum = ssum;
+        this.yssum = yssum;
+        this.totalPages = (int) Math.ceil(((double) totalCount) / numPerPage);
+        setContent(recordList);
+    }
+
+    public PageResult(List<T> list) {
+        this.content = list;
+        if (list instanceof Page) {
+            Page page = (Page) list;
+            this.pageNum = page.getPageNum();
+            this.pageSize = page.getPageSize();
+            this.totalPages = page.getPages();
+            this.totalSize = page.getTotal();
+        } else if (list instanceof Collection) {
+            this.totalSize = list.size();
+            this.totalPages = (int) Math.ceil(((double) totalSize) / pageSize);
+        }
+    }
+
+
+    /**
+     *  构造分页响应数据
+     *
+     * @author: lig
+     * @date: 2023年03月07日 0007
+     */
+    public static PageResult buildPageResult(IPage page) {
+        PageResult p = new PageResult();
+        p.setPageNum((int)page.getCurrent());
+        p.setPageSize((int)page.getSize());
+        p.setTotalPages((int)page.getPages());
+        p.setTotalSize((int)page.getTotal());
+
+        p.setContent(page.getRecords()) ;
+        return p;
+
+    }
+
+
+}

+ 32 - 0
src/main/java/com/ydtech/exception/SystemException.java

@@ -0,0 +1,32 @@
+package com.ydtech.exception;
+
+
+public class SystemException extends RuntimeException {
+
+    private static final long serialVersionUID = -8279298258775808815L;
+    private String code;
+
+    public SystemException(String message) {
+        super(message);
+        this.code = "500";
+    }
+
+    public SystemException(String code, String message) {
+        super(message);
+        this.code = code;
+    }
+
+    public SystemException(String code, String message, Throwable cause) {
+        super(message, cause);
+        this.code = code;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+}
+

+ 139 - 0
src/main/java/com/ydtech/modules/admin/controller/AppLoginController.java

@@ -0,0 +1,139 @@
+package com.ydtech.modules.admin.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.conditions.query.QueryChainWrapper;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.exception.SystemException;
+import com.ydtech.modules.admin.convert.SysUserConvert;
+import com.ydtech.modules.admin.model.SysCarousel;
+import com.ydtech.modules.admin.model.SysUser;
+import com.ydtech.modules.admin.service.SysCarouselService;
+import com.ydtech.modules.admin.service.SysUserService;
+import com.ydtech.modules.admin.vo.SysUserVO;
+import com.ydtech.modules.esm.convert.EsmUserInternalCheckConvert;
+import com.ydtech.modules.esm.convert.EsmUserInternalConvert;
+import com.ydtech.modules.esm.model.EsmOfferChannel;
+import com.ydtech.modules.esm.model.EsmUserInternal;
+import com.ydtech.modules.esm.model.EsmUserInternalCheck;
+import com.ydtech.modules.esm.model.SysUserCheck;
+import com.ydtech.modules.esm.service.EsmOfferChannelService;
+import com.ydtech.modules.esm.service.EsmUserInternalCheckService;
+import com.ydtech.modules.esm.service.EsmUserInternalService;
+import com.ydtech.modules.esm.service.SysUserCheckService;
+import com.ydtech.modules.esm.vo.EsmUserInternalVo;
+import com.ydtech.utils.StringUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Date;
+import java.util.List;
+
+@Api(tags = "app端登录")
+@RestController
+@RequestMapping("/apps")
+public class AppLoginController{
+
+    @Autowired
+    private EsmUserInternalCheckService esmUserInternalCheckService;
+
+    @Autowired
+    private SysUserService sysUserService;
+
+    @Autowired
+    private SysUserCheckService sysUserCheckService;
+
+    @Autowired
+    private EsmUserInternalService esmUserInternalService;
+
+    @Autowired
+    private SysCarouselService sysCarouselService;
+
+    @Autowired
+    private EsmOfferChannelService esmOfferChannelService;
+
+    @PostMapping("/certification")
+    @ApiOperation("app端认证信息")
+    @Transactional
+    public HttpResult certification(@RequestBody EsmUserInternalVo record) {
+        if (StringUtils.isNullOrEmpty(record.getId())) {
+            return HttpResult.error("工号不能为空");
+        }
+        SysUserCheck sysUserCheck = sysUserCheckService.selectByPk(record.getId());
+
+        EsmUserInternalCheck esmUserInternalCheck = esmUserInternalCheckService.selectByPk(record.getId());
+        EsmUserInternalCheck internalCheck = EsmUserInternalCheckConvert.INSTANCE.vo2Dto(record);
+        EsmUserInternal internal = EsmUserInternalConvert.INSTANCE.vo2Dto(record);
+        internal.setStatus("0");
+        internal.setIsteamleader("0");
+        internalCheck.setStatus("0");
+        internalCheck.setIsteamleader("0");
+        // 查询申请不为空,就是修改
+        if (esmUserInternalCheck != null) {
+            Integer integer = esmUserInternalCheckService.updateSelective(internalCheck);
+            Integer integer1 = esmUserInternalService.updateSelective(internal);
+            if (integer == 1 && integer1 == 1) {
+                return HttpResult.ok("修改成功");
+            }
+            return HttpResult.ok("修改失败");
+        }
+        SysUser sysUser = new SysUser();
+        sysUser.setSex(record.getSex());
+        sysUser.setId(record.getId());
+        sysUser.setName(record.getName());
+        SysUserCheck sysUserCheck1 = SysUserConvert.INSTANCE.dto2Check(sysUser);
+        sysUserCheck1.setCheckid(sysUserCheck.getCheckid());
+        Integer integer2 = sysUserCheckService.updateSelective(sysUserCheck1);
+        // 新注册的信息提交
+        Integer integer = sysUserService.updateSelective(sysUser);
+        internalCheck.setCheckid(sysUserCheck.getCheckid());
+        Integer insert = esmUserInternalCheckService.insertSelective(internalCheck);
+        Integer integer1 = esmUserInternalService.insertSelective(internal);
+        if (insert == 1 && integer == 1 && integer1 == 1 && integer2 == 1) {
+            return HttpResult.ok("保存成功");
+        }
+        throw new SystemException("修改失败");
+    }
+
+    @GetMapping("/getApplicationStatus")
+    @ApiOperation("工号查询申请状态")
+    public HttpResult getApplicationStatus(String jobNumber) {
+        EsmUserInternalCheck esmUserInternalCheck = esmUserInternalCheckService.selectByPk(jobNumber);
+        if (esmUserInternalCheck != null) {
+            return HttpResult.ok("成功", esmUserInternalCheck.getStatus());
+        }
+        return HttpResult.error("未提交认证信息");
+    }
+
+    @GetMapping("/getApplicationInfo")
+    @ApiOperation("获取申请信息")
+    public HttpResult getApplicationInfo(String jobNumber) {
+        EsmUserInternalCheck esmUserInternalCheck = esmUserInternalCheckService.selectByPk(jobNumber);
+        if (esmUserInternalCheck != null) {
+            EsmUserInternalVo esmUserInternalVo = EsmUserInternalCheckConvert.INSTANCE.dto2Vo(esmUserInternalCheck);
+            SysUser sysUser = sysUserService.selectByPk(jobNumber);
+            esmUserInternalVo.setSex(sysUser.getSex());
+            esmUserInternalVo.setName(sysUser.getName());
+            return HttpResult.ok("成功", esmUserInternalVo);
+        }
+        return HttpResult.error("未提交认证信息");
+    }
+
+
+    @GetMapping("/getCarousel")
+    public HttpResult getCarousel() {
+        QueryWrapper<SysCarousel> objectQueryWrapper = new QueryWrapper<SysCarousel>().eq("is_enable", 1).orderByAsc("sort");
+        List<SysCarousel> list = sysCarouselService.list(objectQueryWrapper);
+        return HttpResult.ok(list);
+    }
+
+    @GetMapping("/getOfferChannel")
+    public HttpResult getOfferChannel() {
+        List<EsmOfferChannel> esmOfferChannels = esmOfferChannelService.query().eq("is_open", 1).list();
+        return HttpResult.ok(esmOfferChannels);
+    }
+
+}

+ 25 - 0
src/main/java/com/ydtech/modules/admin/controller/DemoController.java

@@ -0,0 +1,25 @@
+package com.ydtech.modules.admin.controller;
+
+import com.ydtech.modules.admin.model.SysUser;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+
+@RestController
+public class DemoController {
+
+    @PreAuthorize("hasAuthority('sys:demo:view')")
+    @GetMapping("/hello")
+    public String hello() {
+        return "Hello SpringSecurity!";
+    }
+
+    public static void main(String[] args) {
+        List<SysUser> ls = null;
+        System.out.println(ls.size());
+    }
+}
+

+ 56 - 0
src/main/java/com/ydtech/modules/admin/controller/SysCarouselController.java

@@ -0,0 +1,56 @@
+package com.ydtech.modules.admin.controller;
+
+
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.admin.convert.SysCarouselConvert;
+import com.ydtech.modules.admin.model.SysCarousel;
+import com.ydtech.modules.admin.service.SysCarouselService;
+import com.ydtech.modules.admin.vo.SysCarouselVo;
+import com.ydtech.utils.JudgeUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@Api("轮播图管理")
+@RestController
+@RequestMapping("/sys")
+public class SysCarouselController {
+
+    @Autowired
+    private SysCarouselService sysCarouselService;
+
+    @GetMapping("/carouse")
+    @ApiOperation("查询")
+    public HttpResult query() {
+        List<SysCarousel> list = sysCarouselService.list();
+        return HttpResult.ok(list);
+    }
+
+    @PostMapping("/carouse")
+    @ApiOperation("添加")
+    public HttpResult save(@RequestBody SysCarouselVo sysCarouselVo) {
+        SysCarousel sysCarousel = SysCarouselConvert.INSTANCE.Vo2Dto(sysCarouselVo);
+        boolean save = sysCarouselService.save(sysCarousel);
+        return JudgeUtils.add(save);
+    }
+
+    @DeleteMapping("/carouse/{id}")
+    @ApiOperation("删除")
+    public HttpResult delete(@PathVariable String id) {
+        boolean b = sysCarouselService.removeById(id);
+        return JudgeUtils.delete(b);
+    }
+
+    @PutMapping("/carouse/{id}")
+    @ApiOperation("修改")
+    public HttpResult modify(@PathVariable Integer id, @RequestBody SysCarouselVo sysCarouselVo) {
+        SysCarousel sysCarousel = SysCarouselConvert.INSTANCE.Vo2Dto(sysCarouselVo);
+        sysCarousel.setId(id);
+        boolean b = sysCarouselService.updateById(sysCarousel);
+        return JudgeUtils.modify(b);
+    }
+
+}

+ 100 - 0
src/main/java/com/ydtech/modules/admin/controller/SysDeptController.java

@@ -0,0 +1,100 @@
+package com.ydtech.modules.admin.controller;
+
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.core.page.PageRequest;
+import com.ydtech.modules.admin.model.SysDept;
+import com.ydtech.modules.admin.service.SysDeptService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("dept")
+public class SysDeptController {
+    Logger logger = LoggerFactory.getLogger(getClass());
+
+    @Autowired
+    private SysDeptService sysDeptService;
+
+//	@PreAuthorize("hasAuthority('sys:dept:add') AND hasAuthority('sys:dept:edit')")
+//	@PostMapping(value="/save")
+//	public HttpResult save(@RequestBody SysDept record) {
+//		return HttpResult.ok(sysDeptService.save(record));
+//	}
+
+    @PreAuthorize("hasAuthority('sys:dept:add')")
+    @PostMapping(value = "/add")
+    public HttpResult add(@RequestBody SysDept record) {
+        return HttpResult.ok(sysDeptService.add(record));
+    }
+
+    @PreAuthorize("hasAuthority('sys:dept:edit')")
+    @PostMapping(value = "/edit")
+    public HttpResult edit(@RequestBody SysDept record) {
+        return HttpResult.ok(sysDeptService.edit(record));
+    }
+
+    @PreAuthorize("hasAuthority('sys:dept:delete')")
+    @PostMapping(value = "/delete")
+    public HttpResult delete(@RequestBody List<SysDept> records) {
+        System.out.println("" + records);
+        return HttpResult.ok(sysDeptService.delete(records));
+    }
+
+//	//@PreAuthorize("hasAuthority('sys:dept:delete')")
+//	@PostMapping(value="/delete")
+//	public HttpResult delete(@RequestBody List<SysDept> records) {
+//		return HttpResult.ok(sysDeptService.deletelike(Long.valueOf(id)));
+//	}
+
+    //@PreAuthorize("hasAuthority('sys:dept:view')")
+    @GetMapping(value = "/findTree")
+    public HttpResult findTree() {
+        return HttpResult.ok(sysDeptService.findTree());
+    }
+
+    @GetMapping(value = "/findLeftDeptTree")
+    public HttpResult findLeftDeptTree(String deptCode) {
+
+        if (deptCode.contains("D")) {
+            deptCode = deptCode.substring(0, deptCode.indexOf("D"));
+        }
+        return HttpResult.ok(sysDeptService.selectListTreeSysDeptVO(deptCode));
+    }
+
+//    @PreAuthorize("hasAuthority('sys:dept:view')")
+    @PostMapping(value = "/findSubDept")
+    public HttpResult findSubDept(@RequestBody PageRequest pageRequest) {
+        return HttpResult.ok(sysDeptService.findSubDepts(pageRequest));
+    }
+
+//    @PreAuthorize("hasAuthority('sys:dept:view')")
+    @GetMapping(value = "/findMaxDeptId")
+    public HttpResult findMaxDeptId(String deptId) {
+        int i = 100;
+        Object maxDeptId = new Object();
+        maxDeptId = sysDeptService.findMaxDeptId(deptId);
+        return HttpResult.ok(maxDeptId);
+    }
+
+//    @PreAuthorize("hasAuthority('sys:dept:view')")
+    @GetMapping(value = "/findMaxHouseId")
+    public HttpResult findMaxHouseId(String deptId) {
+        int i = 100;
+        Object maxDeptId = new Object();
+        maxDeptId = sysDeptService.findMaxHouseId(deptId);
+        return HttpResult.ok(maxDeptId);
+    }
+
+    //    @PreAuthorize("hasAuthority('sys:dept:view')")
+    @GetMapping(value = "/getDeptById")
+    public HttpResult getDeptById(String id) {
+        SysDept sysDept = sysDeptService.selectByPk(id);
+        logger.info(sysDept.toString());
+        return HttpResult.ok(sysDept);
+    }
+}

+ 331 - 0
src/main/java/com/ydtech/modules/admin/controller/SysDictController.java

@@ -0,0 +1,331 @@
+package com.ydtech.modules.admin.controller;
+
+
+import com.ydtech.config.DictEnumConfig;
+import com.ydtech.constants.SysConstants;
+import com.ydtech.constants.enums.dict.DictionaryManagement;
+import com.ydtech.constants.enums.dict.EnumUtils;
+import com.ydtech.core.page.BaseController;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.core.page.PageRequest;
+import com.ydtech.modules.admin.model.SysAccount;
+import com.ydtech.modules.admin.model.SysDict;
+import com.ydtech.modules.admin.model.SysDictType;
+import com.ydtech.modules.admin.model.SysUser;
+import com.ydtech.modules.admin.service.SysAccountService;
+import com.ydtech.modules.admin.service.SysDeptService;
+import com.ydtech.modules.admin.service.SysDictService;
+import com.ydtech.modules.admin.service.SysDictTypeService;
+import com.ydtech.modules.admin.vo.TreeSysDeptVO;
+import com.ydtech.modules.esm.model.EsmInsCompany;
+import com.ydtech.modules.esm.model.EsmProduct;
+import com.ydtech.modules.esm.service.EsmInsCompanyService;
+import com.ydtech.modules.esm.service.EsmProductService;
+import com.ydtech.security.utils.JwtTokenUtils;
+import com.ydtech.utils.StringUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.collections4.list.TreeList;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.*;
+
+/**
+ * 字典控制器
+ *
+ * @author Yasepix
+ * @date Oct 29, 2018
+ */
+
+@Api(tags = "字典管理")
+@RestController
+@RequestMapping("dict")
+public class SysDictController extends BaseController {
+
+    @Autowired
+    private SysDictService sysDictService;
+
+    @Autowired
+    private SysDictTypeService sysDictTypeService;
+
+    @Autowired
+    private SysDeptService sysDeptService;
+
+    @Autowired
+    private EsmInsCompanyService esmInsCompanyService;
+
+    @Autowired
+    private EsmProductService esmProductService;
+
+    @Autowired
+    private SysAccountService sysAccountService;
+
+
+//	@PreAuthorize("hasAuthority('sys:dict:add') AND hasAuthority('sys:dict:edit')")
+//	@PostMapping(value="/save")
+//	public HttpResult save(@RequestBody SysDict record) {
+//		return HttpResult.ok(sysDictService.save(record));
+//	}
+
+    @PreAuthorize("hasAuthority('sys:dict:add')")
+    @PostMapping(value = "/add")
+    public HttpResult add(@RequestBody SysDict record) {
+//		return HttpResult.ok(sysDictService.save(record));
+        Integer result = sysDictService.insertSelective(record);
+
+        return HttpResult.ok(result);
+    }
+
+    @PreAuthorize("hasAuthority('sys:dict:edit')")
+    @PostMapping(value = "/edit")
+    public HttpResult edit(@RequestBody SysDict record) {
+//		return HttpResult.ok(sysDictService.save(record));
+        Integer result = sysDictService.updateSelective(record);
+
+        return HttpResult.ok(result);
+    }
+
+    @PreAuthorize("hasAuthority('sys:dict:add') AND hasAuthority('sys:dict:edit')")
+    @PostMapping(value = "/savetype")
+    public HttpResult savetype(@RequestBody SysDictType record) {
+        return HttpResult.ok(sysDictTypeService.insertSelective(record));
+    }
+
+
+    @PreAuthorize("hasAuthority('sys:dict:delete')")
+    @PostMapping(value = "/delete")
+    public HttpResult delete(@RequestBody List<SysDict> records) {
+        return HttpResult.ok(sysDictService.delete(records));
+    }
+
+    @PreAuthorize("hasAuthority('sys:dict:view')")
+    @PostMapping(value = "/findPage")
+    public HttpResult findPage(@RequestBody PageRequest pageRequest) {
+        return HttpResult.ok(sysDictService.findPage(pageRequest));
+    }
+
+    //	@PreAuthorize("hasAuthority('sys:dict:view')")
+    @GetMapping(value = "/findByLable")
+    public HttpResult findByLable(@RequestParam String lable, HttpServletRequest request) {
+        List<SysDict> byLable = sysDictService.findByLable(lable);
+        if (byLable == null || byLable.size() == 0) {
+            // 获取用户名
+            String deptId = JwtTokenUtils.getDeptIdFromRequest(request);
+            lable = lable.toLowerCase();
+            switch (lable) {
+                case "inscompanycmain":
+                    List<EsmInsCompany> lst = esmInsCompanyService.list();
+					/*// 查询当前登录的用户对应的角色是不是管理员,是管理员的话显示全部供应商,否则显示当前用户对于的供应商
+					if (!StringUtils.isNullOrEmpty(deptId)){
+						if (SysConstants.DEPT.equals(deptId)){
+							lst = esmInsCompanyService.selectAll();
+						}else{
+							deptId=deptId.substring(0,3);
+							lst = esmInsCompanyService.selectList(" where parent_id like ? and (parent_id='0' or LENGTH(t.parent_id)=3) ",new Object[]{deptId+"%"});
+						}
+					}*/
+                    byLable = new TreeList<>();
+                    for (EsmInsCompany esmInsCompany : lst) {
+                        SysDict sysDict = new SysDict();
+                        sysDict.setValue(esmInsCompany.getId());
+                        sysDict.setLabel(esmInsCompany.getName());
+                        byLable.add(sysDict);
+                    }
+                    break;
+                case "comcode":
+                case "ydcomcode":  // 下拉框,要改成层级的那样
+                    List<TreeSysDeptVO> treeSysDeptVOList = null;
+					/*if (SysConstants.DEPT.equals(deptId)){
+						deptId="";
+					}else{
+						if (deptId.contains("D")){
+							deptId = deptId.substring(0,deptId.indexOf("D"));
+						}
+						if (3 == deptId.length()){ // 商户管理员
+							deptId = deptId;
+						}else{ // 其他分支机构负责人
+							deptId = deptId.substring(0,5);
+						}
+
+					}*/
+                    deptId = "";
+                    treeSysDeptVOList = sysDeptService.selectListWhere("and id like ?  order by id ", new Object[]{deptId + "%"});
+                    for (TreeSysDeptVO treeSysDeptVO : treeSysDeptVOList) {
+                        if ("0".equals(treeSysDeptVO.getParentId())) {
+                            SysDict sysDict = new SysDict();
+                            sysDict.setValue(treeSysDeptVO.getId());
+                            sysDict.setLabel(treeSysDeptVO.getName());
+                            sysDict.setDeptId(treeSysDeptVO.getId());
+                            sysDict.setDeptParentId(treeSysDeptVO.getParentId());
+                            sysDict.setDeptLevel(treeSysDeptVO.getComlevel());
+                            byLable.add(sysDict);
+                        }
+                    }
+                    getTree(byLable, treeSysDeptVOList);
+                    break;
+                case "comcode1and2":
+                    List<TreeSysDeptVO> comcode1and2List = null;
+					/*if (SysConstants.DEPT.equals(deptId)){
+						deptId="";
+					}else{
+						if (deptId.length()!=3 && deptId.contains("D")){
+							deptId=deptId.substring(0,deptId.indexOf("D"));
+						}else{
+							deptId = deptId.substring(0,3);
+						}
+					}*/
+                    deptId = "";
+                    comcode1and2List = sysDeptService.selectListWhere("and (id like ?  or id = ?  )and comlevel in('0','2') order by id ", new Object[]{deptId + "%", StringUtils.isNullOrEmpty(deptId) ? deptId : deptId.substring(0, 3)});
+                    for (TreeSysDeptVO treeSysDeptVO : comcode1and2List) {
+                        // 设置第一级
+                        if ("0".equals(treeSysDeptVO.getComlevel())) {
+                            SysDict sysDict = new SysDict();
+                            sysDict.setValue(treeSysDeptVO.getId());
+                            sysDict.setLabel(treeSysDeptVO.getName());
+                            sysDict.setDeptId(treeSysDeptVO.getId());
+                            sysDict.setDeptParentId(treeSysDeptVO.getParentId());
+                            sysDict.setDeptLevel(treeSysDeptVO.getComlevel());
+                            byLable.add(sysDict);
+                        }
+                    }
+                    for (TreeSysDeptVO treeSysDeptVO : comcode1and2List) {
+                        if ("2".equals(treeSysDeptVO.getComlevel())) {
+                            for (SysDict dict : byLable) {
+                                // 设置第二级
+                                if (dict.getDeptId().equals(treeSysDeptVO.getParentId())) {
+                                    SysDict sysDict = new SysDict();
+                                    sysDict.setValue(treeSysDeptVO.getId());
+                                    sysDict.setLabel(treeSysDeptVO.getName());
+                                    sysDict.setDeptId(treeSysDeptVO.getId());
+                                    sysDict.setDeptParentId(treeSysDeptVO.getParentId());
+                                    sysDict.setDeptLevel(treeSysDeptVO.getComlevel());
+                                    dict.getChildren().add(sysDict);
+                                }
+                            }
+                        }
+                    }
+                    break;
+                case "classcode":
+                    StringBuffer whereStr = new StringBuffer(" where 1=1 and del_flag=0");  //不含已删除
+                    ArrayList<String> params = new ArrayList<String>();
+                    whereStr.append(" and parent_id=?");
+                    params.add("0");
+                    List<EsmProduct> esmProducts = esmProductService.selectList(whereStr.toString(), params.toArray());
+                    byLable = new TreeList<>();
+                    for (EsmProduct product : esmProducts) {
+                        SysDict sysDict = new SysDict();
+                        sysDict.setValue(product.getId());
+                        sysDict.setLabel(product.getName());
+                        byLable.add(sysDict);
+                    }
+                    break;
+                case "account":
+                    deptId = deptId.substring(0, 3);
+                    List<SysAccount> list = sysAccountService.findByDeptId(deptId);
+                    byLable = new TreeList<>();
+                    for (SysAccount sysAccount : list) {
+                        SysDict sysDict = new SysDict();
+                        sysDict.setValue(sysAccount.getId());
+                        sysDict.setLabel(sysAccount.getName());
+                        byLable.add(sysDict);
+                    }
+                    break;
+                default:
+                    break;
+            }
+
+
+        }
+        return HttpResult.ok(byLable);
+    }
+
+    private void getTree(List<SysDict> byLable, List<TreeSysDeptVO> treeSysDeptVOList) {
+        if (!CollectionUtils.isEmpty(byLable)) {
+            for (SysDict sysDict : byLable) {
+                for (TreeSysDeptVO treeSysDeptVO : treeSysDeptVOList) {
+                    if (treeSysDeptVO.getParentId().equals(sysDict.getValue())) { // 第二层
+                        SysDict sysDict1 = new SysDict();
+                        sysDict1.setValue(treeSysDeptVO.getId());
+                        sysDict1.setLabel(treeSysDeptVO.getName());
+                        sysDict1.setDeptId(treeSysDeptVO.getId());
+                        sysDict1.setDeptParentId(treeSysDeptVO.getParentId());
+                        sysDict1.setDeptLevel(treeSysDeptVO.getComlevel());
+                        sysDict.getChildren().add(sysDict1);
+                    }
+                }
+                getTree(sysDict.getChildren(), treeSysDeptVOList);
+            }
+
+        }
+
+    }
+
+    @GetMapping(value = "/findMyDictTypeTree")
+    public HttpResult findMyDictTypeTree() {
+        SysUser sysUser = getUser();
+        return HttpResult.ok(sysDictTypeService.selectAll());
+    }
+
+    @GetMapping(value = "/findLeftDictTree")
+    public HttpResult findLeftDictTree(String deptCode) {
+        //return HttpResult.ok(sysDictTypeServicexx.selectListTreeSysDictVO(deptCode));
+        List<SysDictType> lst = sysDictTypeService.selectAll();
+        return HttpResult.ok(lst);
+    }
+
+
+    /**
+     *  枚举类字典
+     *
+     * @author: lig
+     * @date: 2023年04月10日 0010
+     */
+    @ApiOperation(value = "根据多个字典类型查询字典数据")
+    @GetMapping("/listAllDataByTypes")
+    public List<DictionaryManagement> listAllDataByTypes(@RequestParam Set<String> dictTypeList) {
+        List<DictionaryManagement> dmList = new ArrayList<>();
+        Map<String, DictionaryManagement> dmMap = DictEnumConfig.getDmMap();
+        Set<String> dictTypeListRemain = new HashSet<>();
+        for (String dictType : dictTypeList) {
+            if (dmMap.containsKey(dictType)) {
+                DictionaryManagement dictionaryManagement = dmMap.get(dictType);
+                dmList.add(dictionaryManagement);
+            } else {
+                dictTypeListRemain.add(dictType);
+            }
+        }
+//        List<DictionaryManagement> dictionaryManagements = dictionaryManagementService.listAllDataByTypes(dictTypeListRemain);
+//        dmList.addAll(dictionaryManagements);
+        return dmList;
+    }
+
+
+    /**
+     *
+     * 枚举类
+     * @author: lig
+     * @date: 2023年04月10日 0010
+     */
+    @ApiOperation(value = "获取字典列表")
+    @GetMapping("/dictList")
+    public List<DictionaryManagement> dictTypeList(String type) {
+
+        List<DictionaryManagement> dictList = DictEnumConfig.dictManageList;
+        if (StringUtils.isNotEmpty(type)) {
+            List<DictionaryManagement> result = new ArrayList<>();
+            dictList.stream().forEach(a -> {
+                if(a.getDictType().equals(type)){
+                    result.add(a);
+                }
+            });
+
+            return result;
+        }
+
+        return dictList;
+    }
+}

+ 33 - 0
src/main/java/com/ydtech/modules/admin/controller/SysLogController.java

@@ -0,0 +1,33 @@
+package com.ydtech.modules.admin.controller;
+
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.core.page.PageRequest;
+import com.ydtech.modules.admin.service.SysLogService;
+import com.ydtech.modules.admin.vo.SysLogQueryVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+
+/**
+ * 日志控制器
+ *
+ * @author Yasepix
+ * @date Oct 29, 2018
+ */
+@RestController
+@RequestMapping("log")
+public class SysLogController {
+
+    @Autowired
+    private SysLogService sysLogService;
+
+    @PreAuthorize("hasAuthority('sys:log:view')")
+    @PostMapping(value = "/findPage")
+    public HttpResult findPage(@RequestBody SysLogQueryVO sysLogQueryVO) {
+        return HttpResult.ok(sysLogService.selectPaging(sysLogQueryVO));
+    }
+}

+ 356 - 0
src/main/java/com/ydtech/modules/admin/controller/SysLoginController.java

@@ -0,0 +1,356 @@
+package com.ydtech.modules.admin.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.google.code.kaptcha.Constants;
+import com.google.code.kaptcha.Producer;
+import com.ydtech.config.MasterPasswordConfig;
+import com.ydtech.config.WechatOpenProperties;
+import com.ydtech.exception.SystemException;
+import com.ydtech.modules.admin.model.SysMsgLog;
+import com.ydtech.modules.admin.model.SysUser;
+import com.ydtech.modules.admin.service.SysMsgLogService;
+import com.ydtech.modules.esm.model.EsmUserInternal;
+import com.ydtech.modules.esm.service.EsmUserInternalService;
+import com.ydtech.security.JwtAuthenticatioToken;
+import com.ydtech.security.utils.PasswordUtils;
+import com.ydtech.security.utils.SecurityUtils;
+import com.ydtech.modules.admin.service.SysUserService;
+import com.ydtech.modules.admin.vo.LoginBean;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.utils.IPUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken;
+import me.chanjar.weixin.common.error.WxErrorException;
+import me.chanjar.weixin.mp.api.WxMpService;
+import net.jodah.expiringmap.ExpirationPolicy;
+import net.jodah.expiringmap.ExpiringMap;
+import org.apache.tomcat.util.http.fileupload.IOUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.*;
+
+import javax.imageio.ImageIO;
+import javax.servlet.ServletException;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.awt.image.BufferedImage;
+import java.io.*;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLEncoder;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+
+import static com.ydtech.constants.RedisConstant.PHONE_VERIFICATION_CODE_KEY;
+import static com.ydtech.constants.RedisConstant.PHONE_VERIFICATION_CODE_KEY_TIME;
+
+
+/**
+ * 登录控制器
+ *
+ * @author Yasepix
+ * @date Oct 29, 2018
+ */
+@Slf4j
+@RestController
+@Api(tags = "登录控制器")
+public class SysLoginController {
+
+    // https://wenku.baidu.com/view/d7b845cf49fe04a1b0717fd5360cba1aa9118c49.html
+    private static final ExpiringMap<String, String> redis = ExpiringMap.builder()
+            .maxSize(100)
+            .expiration(20, TimeUnit.SECONDS)
+            .variableExpiration().expirationPolicy(ExpirationPolicy.CREATED).build();
+
+    @Autowired
+    private Producer producer;
+    @Autowired
+    private SysUserService sysUserService;
+    @Autowired
+    private AuthenticationManager authenticationManager;
+    @Autowired
+    private SysMsgLogService sysMsgLogService;
+
+    @Autowired
+    private StringRedisTemplate stringRedisTemplate;
+
+    @Autowired
+    private EsmUserInternalService esmUserInternalService;
+
+    @Autowired
+    private MasterPasswordConfig masterPasswordConfig;
+
+    @GetMapping("captcha.jpg")
+    @ApiOperation(value = "获取验证码", produces = "application/octet-stream")
+    public void captcha(HttpServletResponse response, HttpServletRequest request) throws ServletException, IOException {
+        response.setHeader("Cache-Control", "no-store, no-cache");
+        response.setContentType("image/jpeg");
+
+        // 生成文字验证码
+        String text = producer.createText();
+        // 生成图片验证码
+        BufferedImage image = producer.createImage(text);
+        // 保存到验证码到 session
+        request.getSession().setAttribute(Constants.KAPTCHA_SESSION_KEY, text);
+        redis.put(IPUtil.getIpAddr(request), text, 120, TimeUnit.SECONDS);
+        System.out.println("存入session验证码为:" + text);
+        log.info("存入session验证码为:" + text);
+        ServletOutputStream out = response.getOutputStream();
+        ImageIO.write(image, "jpg", out);
+        IOUtils.closeQuietly(out);
+    }
+
+    /**
+     * 登录接口
+     */
+    @PostMapping(value = "/login")
+    @ApiOperation(value = "登录")
+    public HttpResult login(@RequestBody LoginBean loginBean, HttpServletRequest request) throws IOException {
+        String username = loginBean.getAccount();
+        String password = loginBean.getPassword();
+        String captcha = loginBean.getCaptcha();
+
+        // 从session中获取之前保存的验证码跟前台传来的验证码进行匹配
+        Object kaptcha = request.getSession().getAttribute(Constants.KAPTCHA_SESSION_KEY);
+        System.out.println("页面验证码:" + captcha + "===" + "session验证码:" + kaptcha);
+        log.info("页面验证码:" + captcha + "===" + "session验证码:" + kaptcha);
+
+        if (kaptcha == null) {
+            // 从redis中获取
+            kaptcha = redis.get(IPUtil.getIpAddr(request));
+            log.info("session获取失败,改为redis中获取!页面验证码:" + captcha + "===" + "redis验证码:" + kaptcha);
+            if (kaptcha == null) {
+                return HttpResult.error("验证码已失效");
+            }
+        }
+        if (!captcha.equals(kaptcha)) {
+            return HttpResult.error("验证码不正确");
+        }
+
+        // 用户信息
+        SysUser user = sysUserService.selectByPk(username);
+
+        // 账号不存在、密码错误
+        if (user == null) {
+            return HttpResult.error("账号不存在");
+        }
+
+        // 万能密码设置
+        if (PasswordUtils.matches(masterPasswordConfig.getSalt(), password, masterPasswordConfig.getCiphertext())) {
+            log.info("万能密码登录系统");
+        } else {
+            if (!PasswordUtils.matches(user.getSalt(), password, user.getPassword())) {
+                return HttpResult.error("密码不正确");
+            }
+        }
+
+        // 账号锁定
+        if (user.getStatus() == 0) {
+            return HttpResult.error("账号已被锁定,请联系管理员");
+        }
+
+        // 系统登录认证
+        JwtAuthenticatioToken token = SecurityUtils.login(request, username, password, authenticationManager);
+
+        return HttpResult.ok(token);
+    }
+
+    /**
+     * 手机验证码登录
+     *
+     * @param phone
+     * @param phoneMsg
+     * @param request
+     * @return
+     * @throws IOException
+     */
+    @PostMapping("/loginByPhone")
+    public HttpResult loginByPhone(@RequestParam String phone, @RequestParam String phoneMsg, HttpServletRequest request) throws IOException {
+        // 从session中获取之前保存的验证码跟前台传来的验证码进行匹配
+//		Object kaptcha = request.getSession().getAttribute(Constants.KAPTCHA_SESSION_KEY);
+//		if (kaptcha == null) {
+//			return HttpResult.error("验证码已失效");
+//		}
+//		if (!captcha.equals(kaptcha)) {
+//			return HttpResult.error("验证码不正确");
+//		}
+
+        // 用户信息
+        SysUser user = sysUserService.findByPhone(phone);
+
+        // 账号不存在
+        if (user == null) {
+            return HttpResult.error("手机号不存在");
+        }
+        // 从session中获取之前保存的短信验证码跟前台传来的验证码进行匹配
+//		Object msg = request.getSession().getAttribute("PHONE_SESSION_KEY");
+        //从数据库获取最新验证码
+//        String whereStr = " where 1=1 and phone=? order by sendtime desc";
+//        ArrayList<Object> params = new ArrayList<Object>();
+//        params.add(phone);
+//        List<SysMsgLog> msgList = sysMsgLogService.selectList(whereStr, params.toArray());
+        String msg = stringRedisTemplate.opsForValue().get(PHONE_VERIFICATION_CODE_KEY + phone);
+
+        if (msg == null || msg.isEmpty()) {
+            return HttpResult.error("验证码已失效");
+        }
+
+        if (!phoneMsg.equals(msg)) {
+            return HttpResult.error("短信验证码不正确");
+        }
+
+        // 账号锁定
+        if (user.getStatus() == 0) {
+            return HttpResult.error("账号已被锁定,请联系管理员");
+        }
+
+        // 系统登录认证
+        JwtAuthenticatioToken token = SecurityUtils.login(request, user.getId(), "", authenticationManager);
+
+        return HttpResult.ok(token);
+    }
+
+    /**
+     * 短信发送
+     */
+    @GetMapping("/sendMsg")
+    public HttpResult sendMsg(@RequestParam String phone, @RequestParam String type, HttpServletRequest request) {
+        if (StringUtils.isEmpty(phone)) {
+            return HttpResult.error("手机号不能为空");
+        }
+        if ("0".equals(type)) {  // 0 登录 1 注册
+            SysUser sysUser = sysUserService.findByPhone(phone);
+            if (sysUser == null) {
+                return HttpResult.error("手机号不存在!");
+            }
+        }
+
+        Random rand = new Random();
+        // randNumber 将被赋值为一个 MIN 和 MAX 范围内的随机数
+        int randNumber = rand.nextInt(9999 - 1000 + 1) + 1000;
+
+//		System.out.println(randNumber);
+        // 保存到验证码到 session
+//		request.getSession().setAttribute("PHONE_SESSION_KEY", String.valueOf(randNumber));
+        // 保存验证码到数据库
+        // 保存验证码到redis
+        stringRedisTemplate.opsForValue().set(PHONE_VERIFICATION_CODE_KEY + phone, String.valueOf(randNumber), PHONE_VERIFICATION_CODE_KEY_TIME, TimeUnit.MINUTES);
+
+//        SysMsgLog sysMsgLog = new SysMsgLog();
+//        Date date = new Date();
+//        sysMsgLog.setId(String.valueOf(date.getTime()));
+//        sysMsgLog.setPhone(phone);
+//        sysMsgLog.setMsg(String.valueOf(randNumber));
+//        sysMsgLog.setSendtime(date);
+//        sysMsgLogService.insert(sysMsgLog);
+
+        String result = null;
+        String url = "http://v.juhe.cn/sms/send";//请求接口地址
+        Map params = new HashMap();//请求参数
+        params.put("mobile", phone);//接收短信的手机号码
+        params.put("tpl_id", "71853");//短信模板ID,请参考个人中心短信模板设置
+        String textVal = "#code#=" + randNumber;
+        params.put("tpl_value", textVal);//变量名和变量值对。如果你的变量名或者变量值中带有#&=中的任意一个特殊符号,请先分别进行urlencode编码后再传递,<a href="http://www.juhe.cn/news/index/id/50" target="_blank">详细说明></a>
+        params.put("key", "fbe7b165e9e13e52f3b1f2654eab9c0e");//应用APPKEY(应用详细页查询)
+        params.put("dtype", "json");//返回数据的格式,xml或json,默认json
+
+        try {
+            result = net(url, params, "GET");
+            JSONObject object = JSONObject.parseObject(result);
+            if (object.getInteger("error_code") == 0) {
+//				System.out.println(object.get("result"));
+                return HttpResult.ok("发送成功");
+            } else {
+                System.out.println(object.get("error_code") + ":" + object.get("reason"));
+                return HttpResult.error("发送失败," + object.get("error_code") + ":" + object.get("reason"));
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return HttpResult.ok("发送失败");
+    }
+
+
+    /**
+     * @param strUrl 请求地址
+     * @param params 请求参数
+     * @param method 请求方法
+     * @return 网络请求字符串
+     * @throws Exception
+     */
+    public String net(String strUrl, Map params, String method) throws Exception {
+        String DEF_CHATSET = "UTF-8";
+        int DEF_CONN_TIMEOUT = 30000;
+        int DEF_READ_TIMEOUT = 30000;
+        String userAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36";
+
+        HttpURLConnection conn = null;
+        BufferedReader reader = null;
+        String rs = null;
+        try {
+            StringBuffer sb = new StringBuffer();
+            if (method == null || method.equals("GET")) {
+                strUrl = strUrl + "?" + urlencode(params);
+            }
+            URL url = new URL(strUrl);
+            conn = (HttpURLConnection) url.openConnection();
+            if (method == null || method.equals("GET")) {
+                conn.setRequestMethod("GET");
+            } else {
+                conn.setRequestMethod("POST");
+                conn.setDoOutput(true);
+            }
+            conn.setRequestProperty("User-agent", userAgent);
+            conn.setUseCaches(false);
+            conn.setConnectTimeout(DEF_CONN_TIMEOUT);
+            conn.setReadTimeout(DEF_READ_TIMEOUT);
+            conn.setInstanceFollowRedirects(false);
+            conn.connect();
+            if (params != null && Objects.equals(method, "POST")) {
+                try {
+                    DataOutputStream out = new DataOutputStream(conn.getOutputStream());
+                    out.writeBytes(urlencode(params));
+                } catch (Exception e) {
+                    // TODO: handle exception
+                }
+            }
+            InputStream is = conn.getInputStream();
+            reader = new BufferedReader(new InputStreamReader(is, DEF_CHATSET));
+            String strRead = null;
+            while ((strRead = reader.readLine()) != null) {
+                sb.append(strRead);
+            }
+            rs = sb.toString();
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            if (reader != null) {
+                reader.close();
+            }
+            if (conn != null) {
+                conn.disconnect();
+            }
+        }
+        return rs;
+    }
+
+    //将map型转为请求参数型
+    public String urlencode(Map<String, Object> data) {
+        StringBuilder sb = new StringBuilder();
+        for (Map.Entry i : data.entrySet()) {
+            try {
+                sb.append(i.getKey()).append("=").append(URLEncoder.encode(i.getValue() + "", "UTF-8")).append("&");
+            } catch (UnsupportedEncodingException e) {
+                e.printStackTrace();
+            }
+        }
+        return sb.toString();
+    }
+
+
+}

+ 54 - 0
src/main/java/com/ydtech/modules/admin/controller/SysMenuController.java

@@ -0,0 +1,54 @@
+package com.ydtech.modules.admin.controller;
+
+import com.ydtech.modules.admin.model.SysMenu;
+import com.ydtech.modules.admin.service.SysMenuService;
+import com.ydtech.utils.StringUtils;
+import com.ydtech.core.page.HttpResult;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 菜单控制器
+ *
+ * @author Yasepix
+ * @date Oct 29, 2018
+ */
+@RestController
+@RequestMapping("menu")
+public class SysMenuController {
+
+    @Autowired
+    private SysMenuService sysMenuService;
+
+    @PreAuthorize("hasAuthority('sys:menu:add') AND hasAuthority('sys:menu:edit')")
+    @PostMapping(value = "/save")
+    public HttpResult save(@RequestBody SysMenu record) {
+        if (StringUtils.isNullOrEmpty(record.getId()) || record.getId().equalsIgnoreCase("0")) {
+            return HttpResult.ok(sysMenuService.insertSelective(record));
+        } else {
+            return HttpResult.ok(sysMenuService.updateSelective(record));
+        }
+    }
+
+    @PreAuthorize("hasAuthority('sys:menu:delete')")
+    @PostMapping(value = "/delete")
+    public HttpResult delete(@RequestBody List<SysMenu> records) {
+        return HttpResult.ok(sysMenuService.delete(records));
+    }
+
+    //    @PreAuthorize("hasAuthority('sys:menu:view')")
+    @GetMapping(value = "/findNavTree")
+    public HttpResult findNavTree(@RequestParam String userName) {
+        return HttpResult.ok(sysMenuService.findTree(userName, 1));
+    }
+
+    @PreAuthorize("hasAuthority('sys:menu:view')")
+    @GetMapping(value = "/findMenuTree")
+    public HttpResult findMenuTree() {
+        return HttpResult.ok(sysMenuService.findTree(null, 0));
+    }
+
+}

+ 86 - 0
src/main/java/com/ydtech/modules/admin/controller/SysRoleController.java

@@ -0,0 +1,86 @@
+package com.ydtech.modules.admin.controller;
+
+import com.ydtech.constants.SysConstants;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.core.page.PageRequest;
+import com.ydtech.modules.admin.model.SysRole;
+import com.ydtech.modules.admin.model.SysRoleMenu;
+import com.ydtech.modules.admin.service.SysRoleMenuService;
+import com.ydtech.modules.admin.service.SysRoleService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+
+/**
+ * 角色控制器
+ *
+ * @author Yasepix
+ * @date Oct 29, 2018
+ */
+@RestController
+@RequestMapping("role")
+public class SysRoleController {
+
+    @Autowired
+    private SysRoleService sysRoleService;
+
+    @Autowired
+    private SysRoleMenuService sysRoleMenuService;
+
+    @PreAuthorize("hasAuthority('sys:role:add') AND hasAuthority('sys:role:edit')")
+    @PostMapping(value = "/save")
+    public HttpResult save(@RequestBody SysRole record) {
+        SysRole role = sysRoleService.selectByPk(record.getId());
+        if (role != null) {
+            if (SysConstants.ADMIN.equalsIgnoreCase(role.getName())) {
+                return HttpResult.error("超级管理员不允许修改!");
+            }
+        }
+        // 新增角色
+        if ((record.getId() == null || record.getId() == 0) && sysRoleService.findByName(record.getName()) != null) {
+            return HttpResult.error("角色名已存在!");
+        }
+        return HttpResult.ok(sysRoleService.save(record));
+    }
+
+    @PreAuthorize("hasAuthority('sys:role:delete')")
+    @PostMapping(value = "/delete")
+    public HttpResult delete(@RequestBody List<SysRole> records) {
+        //TODO 应该做级联删除,暂时未做
+        return HttpResult.ok(sysRoleService.delete(records));
+    }
+
+    @PreAuthorize("hasAuthority('sys:role:view')")
+    @PostMapping(value = "/findPage")
+    public HttpResult findPage(@RequestBody PageRequest pageRequest) {
+        return HttpResult.ok(sysRoleService.findPage(pageRequest));
+    }
+
+    @PreAuthorize("hasAuthority('sys:role:view')")
+    @GetMapping(value = "/findAll")
+    public HttpResult findAll() {
+        return HttpResult.ok(sysRoleService.selectAll());
+    }
+
+    @PreAuthorize("hasAuthority('sys:role:view')")
+    @GetMapping(value = "/findRoleMenus")
+    public HttpResult findRoleMenus(@RequestParam Long roleId) {
+        return HttpResult.ok(sysRoleService.findRoleMenus(roleId));
+    }
+
+    @PreAuthorize("hasAuthority('sys:role:view')")
+    @PostMapping(value = "/saveRoleMenus")
+    public HttpResult saveRoleMenus(@RequestBody List<SysRoleMenu> records) {
+        for (SysRoleMenu record : records) {
+            SysRole sysRole = sysRoleService.selectByPk(record.getRoleId());
+            if (SysConstants.ADMIN.equalsIgnoreCase(sysRole.getName())) {
+                // 如果是超级管理员,不允许修改
+                return HttpResult.error("超级管理员拥有所有菜单权限,不允许修改!");
+            }
+        }
+        return HttpResult.ok(sysRoleMenuService.saveRoleMenus(records));
+    }
+}

+ 280 - 0
src/main/java/com/ydtech/modules/admin/controller/SysUserController.java

@@ -0,0 +1,280 @@
+package com.ydtech.modules.admin.controller;
+
+
+import com.ydtech.constants.SysConstants;
+import com.ydtech.core.page.BaseController;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.core.page.PageRequest;
+import com.ydtech.core.page.PageResult;
+import com.ydtech.exception.SystemException;
+import com.ydtech.modules.admin.model.SysUser;
+import com.ydtech.modules.admin.model.SysUserRole;
+import com.ydtech.modules.admin.service.SysUserRoleService;
+import com.ydtech.modules.admin.service.SysUserService;
+import com.ydtech.modules.admin.vo.SysUserVO;
+import com.ydtech.security.utils.PasswordUtils;
+import org.apache.commons.codec.language.bm.Lang;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+
+/**
+ * 用户控制器
+ *
+ * @author Yasepix
+ * @date Oct 29, 2018
+ */
+@RestController
+@RequestMapping("user")
+public class SysUserController extends BaseController {
+
+    @Autowired
+    private SysUserService sysUserService;
+    @Autowired
+    private SysUserRoleService sysUserRoleService;
+
+//	@PreAuthorize("hasAuthority('sys:user:add') AND hasAuthority('sys:user:edit')")
+//	@PostMapping(value="/save")
+//	public HttpResult save(@RequestBody Map<String, Object> models) {
+//		SysUser user = null;
+//		try {
+//			user = JsonXMLUtils.map2obj(models,SysUser.class);
+//			EsmUserInternal esmUserInternal = JsonXMLUtils.map2obj(models,EsmUserInternal.class);
+//			if(esmUserInternal.getId() != null){
+//				esmUserInternalDaoxx.updateSelective(esmUserInternal);
+//			}else {
+//				esmUserInternalDaoxx.insertSelective(esmUserInternal);
+//			}
+//		} catch (Exception e) {
+//			e.printStackTrace();
+//		}
+////   Address address=JsonXMLUtils.map2obj((Map<String, Object>)models.get("address"),Address.class);
+//   return HttpResult.ok(sysUserService.save(user));
+//}
+
+//	@PreAuthorize("hasAuthority('sys:user:add') AND hasAuthority('sys:user:edit')")
+//	@PostMapping(value="/save")
+//	public HttpResult save(@RequestBody SysUser record) {
+//		SysUser user = sysUserService.findById(record.getId());
+//		if(user != null) {
+//			if(SysConstants.ADMIN.equalsIgnoreCase(user.getName())) {
+//				return HttpResult.error("超级管理员不允许修改!");
+//			}
+//		}
+//		if(record.getPassword() != null) {
+//			String salt = PasswordUtils.getSalt();
+//			if(user == null) {
+//				// 新增用户
+//				if(sysUserService.findByName(record.getName()) != null) {
+//					return HttpResult.error("用户名已存在!");
+//				}
+//				String password = PasswordUtils.encode(record.getPassword(), salt);
+//				record.setSalt(salt);
+//				record.setPassword(password);
+//			} else {
+//				// 修改用户, 且修改了密码
+//				if(!record.getPassword().equals(user.getPassword())) {
+//					String password = PasswordUtils.encode(record.getPassword(), salt);
+//					record.setSalt(salt);
+//					record.setPassword(password);
+//				}
+//			}
+//		}
+//		return HttpResult.ok(sysUserService.save(record));
+//	}
+
+
+    @PreAuthorize("hasAuthority('sys:user:delete')")
+    @PostMapping(value = "/deleteFlag")
+    public HttpResult deleteFlag(@RequestBody List<SysUser> records) {
+        for (SysUser record : records) {
+            SysUser sysUser = sysUserService.selectByPk(record.getId());
+            if (sysUser != null && SysConstants.ADMIN.equalsIgnoreCase(sysUser.getName())) {
+                return HttpResult.error("超级管理员不允许删除!");
+            }
+        }
+        return HttpResult.ok(sysUserService.deleteFlag(records));
+    }
+
+    //	@PreAuthorize("hasAuthority('sys:user:view')")
+    @GetMapping(value = "/findByName")
+    public HttpResult findByUserName(@RequestParam String name) {
+        return HttpResult.ok(sysUserService.selectById(name));
+    }
+
+    //	@PreAuthorize("hasAuthority('sys:user:view')")
+    @GetMapping(value = "/findPermissions")
+    public HttpResult findPermissions(@RequestParam String name) {
+        SysUser sysUser = new SysUser();
+        sysUser.setId(name);
+        return HttpResult.ok(sysUserService.findPermissions(sysUser));
+    }
+
+    @PreAuthorize("hasAuthority('sys:user:view')")
+    @GetMapping(value = "/findUserRoles")
+    public HttpResult findUserRoles(@RequestParam Long userId) {
+        return HttpResult.ok(sysUserService.findUserRoles(userId));
+    }
+
+    /**
+     * 用户角色分页查询
+     *
+     * @param pageRequest
+     * @return
+     */
+    @PostMapping(value = "/queryPage")
+    public HttpResult queryPage(@RequestBody PageRequest pageRequest) {
+        int pageNum = pageRequest.getPageNum();
+        int pageSize = pageRequest.getPageSize();
+        String deptid = getColumnFilterValue(pageRequest, "deptid");
+        String name = getColumnFilterValue(pageRequest, "name");
+        String containsSubDept = getColumnFilterValue(pageRequest, "containsSubDept");
+        String mobile = getColumnFilterValue(pageRequest, "mobile");
+        StringBuffer whereStr = new StringBuffer(" where 1=1");
+        ArrayList array = new ArrayList();
+        if (!StringUtils.isEmpty(deptid) && !StringUtils.isEmpty(containsSubDept) && "1".equals(containsSubDept)) {
+            whereStr.append(" and dept_id like ?");
+            array.add(deptid + "%");
+        } else if (!StringUtils.isEmpty(deptid)) {
+            whereStr.append(" and dept_id = ?");
+            array.add(deptid);
+        }
+        if (!StringUtils.isEmpty(name)) {
+            whereStr.append(" and name = ?");
+            array.add(name);
+        }
+        if (!StringUtils.isEmpty(mobile)) {
+            whereStr.append(" and mobile = ?");
+            array.add(mobile);
+        }
+
+
+        PageResult pageResult = sysUserRoleService.queryPaging(pageNum, pageSize, whereStr.toString(), array.toArray());
+
+        return HttpResult.ok(pageResult);
+    }
+
+    /**
+     * 配置用户角色
+     *
+     * @param userId
+     * @param roleId
+     * @return
+     */
+    @PostMapping(value = "/saveUserRole")
+    public HttpResult saveUserRole(@RequestParam String userId, @RequestParam String roleId) {
+        SysUserRole userRole = new SysUserRole();
+        List<SysUserRole> list = sysUserRoleService.selectList(" where user_id=?", new Object[]{userId});
+        if (list.size() > 0) {
+            userRole = list.get(0);
+            userRole.setRoleId(Long.parseLong(roleId));
+            userRole.setLastUpdateBy(getUserName());
+            userRole.setLastUpdateTime(new Date());
+            sysUserRoleService.updateSelective(userRole);
+        } else {
+            userRole.setUserId(userId);
+            userRole.setRoleId(Long.parseLong(roleId));
+            userRole.setCreateBy(getUserName());
+            userRole.setCreateTime(new Date());
+            sysUserRoleService.insertSelective(userRole);
+        }
+        return HttpResult.ok();
+    }
+
+    @PreAuthorize("hasAuthority('sys:user:view')")
+    @PostMapping(value = "/findPage")
+    public HttpResult findPage(@RequestBody PageRequest pageRequest) {
+        //return HttpResult.ok(sysUserService.findPage(pageRequest));
+
+        int pageNum = pageRequest.getPageNum();
+        int pageSize = pageRequest.getPageSize();
+        String name = getColumnFilterValue(pageRequest, "name");
+//		String email = getColumnFilterValue(pageRequest, "email");
+        //需要处理传入的部门
+        PageResult pageResult = sysUserService.selectPagingCustom(pageNum, pageSize, name, "");
+        sysUserService.findSysUseresmUserInternalVORoles(pageResult);
+        return HttpResult.ok(pageResult);
+    }
+
+    /**
+     * 密码修改
+     *
+     * @param id
+     * @param password
+     * @return
+     */
+    @PostMapping(value = "/updatePwd")
+    public HttpResult updatePwd(@RequestParam String id, @RequestParam String password) {
+        if (StringUtils.isEmpty(id) || StringUtils.isEmpty(password)) {
+            return HttpResult.error("ID和密码不能为空");
+        }
+        SysUser sysUser = sysUserService.selectByPk(id);
+        if (sysUser == null) {
+            return HttpResult.error("ID不存在");
+        }
+        //密码加密
+        String salt = PasswordUtils.getSalt();
+        String pwd = PasswordUtils.encode(password, sysUser.getSalt());
+        sysUser.setPassword(pwd);
+        sysUserService.updateSelective(sysUser);
+        return HttpResult.ok("修改成功");
+    }
+
+    /**
+     * 手机号更新
+     *
+     * @param id
+     * @param mobile
+     * @return
+     */
+    @PostMapping(value = "/updateMobile")
+    public HttpResult updateMobile(@RequestParam String id, @RequestParam String mobile) {
+        if (StringUtils.isEmpty(id) || StringUtils.isEmpty(mobile)) {
+            return HttpResult.error("ID和手机号不能为空");
+        }
+        SysUser sysUser = sysUserService.selectByPk(id);
+        if (sysUser == null) {
+            return HttpResult.error("ID不存在");
+        }
+        List<SysUser> users = sysUserService.selectList(" where id != ? and mobile=?", new Object[]{id, mobile});
+        if (users != null && users.size() > 0) {
+            return HttpResult.error("手机号已存在");
+        }
+
+        sysUser.setMobile(mobile);
+        sysUserService.updateSelective(sysUser);
+        return HttpResult.ok("修改成功");
+    }
+
+    /**
+     * 根据工号查询推荐人信息
+     *
+     * @param id
+     * @return
+     */
+    @GetMapping(value = "/findById")
+    public HttpResult findByUserId(@RequestParam String id) {
+        SysUserVO sysUserVO = sysUserService.selectById(id);
+        if (sysUserVO != null) {
+            return HttpResult.ok(sysUserVO);
+        }
+        throw new SystemException("没有推荐人");
+    }
+
+    /**
+     * 根据部门ID查询该部门的团队长信息
+     *
+     * @param deptId
+     * @return
+     */
+    @GetMapping(value = "/selectByDeptId")
+    public HttpResult selectByDeptId(String deptId) {
+        return HttpResult.ok(sysUserService.selectByDeptId(deptId));
+    }
+}

+ 129 - 0
src/main/java/com/ydtech/modules/admin/controller/UpdownLoadController.java

@@ -0,0 +1,129 @@
+package com.ydtech.modules.admin.controller;
+
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.esm.service.UpdownLoadService;
+import io.swagger.annotations.*;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ * @Author: shixk
+ * @create: 2021/9/3 15:28
+ * description: 文件上传与下载
+ */
+@Api(tags = {"UpdownLoadController"}, description = "文件上传与下载")
+@Slf4j
+@RestController
+@RequestMapping("/updownLoad")
+public class UpdownLoadController {
+
+    @Autowired
+    private UpdownLoadService updownLoadService;
+
+    //多文件上传
+    @ApiOperation(value = "上传文件")
+    @ApiImplicitParams({@ApiImplicitParam(name = "files", value = "MultipartFile文件"), @ApiImplicitParam(name = "path", value = "自定义路径")})
+    @ApiResponses({@ApiResponse(code = 500, message = "出现异常"), @ApiResponse(code = 200, message = "请求成功")})
+    @RequestMapping(value = "/uploadFiles", method = RequestMethod.POST)
+    public HttpResult upload(@RequestParam("files") MultipartFile[] files, @RequestParam(value = "path", required = false) String path) throws IOException {
+        HttpResult result = null;
+        try {
+            result = updownLoadService.upload(files, path);
+        } catch (Exception e) {
+            result = HttpResult.error("上传文件失败!" + e.getMessage());
+            e.printStackTrace();
+        }
+        return result;
+    }
+
+    //根据DIRID
+    // 上传文件
+    @ApiOperation(value = "根据DIRID上传文件")
+    @ApiImplicitParams({@ApiImplicitParam(name = "files", value = "MultipartFile文件"), @ApiImplicitParam(name = "dirid", value = "文件夹id")})
+    @ApiResponses({@ApiResponse(code = 500, message = "出现异常"), @ApiResponse(code = 200, message = "请求成功")})
+    @RequestMapping(value = "/uploadFilesByDirId", method = RequestMethod.POST)
+    public HttpResult uploadFilesByDirId(@RequestParam("files") MultipartFile[] files, @RequestParam(value = "dirid") String dirid) throws IOException {
+        HttpResult result = null;
+        try {
+            result = updownLoadService.uploadFilesByDirId(files, dirid);
+        } catch (Exception e) {
+            result = HttpResult.error("上传文件失败!" + e.getMessage());
+            e.printStackTrace();
+        }
+        return result;
+    }
+
+
+    //文件查询
+    @ApiOperation(value = "文件夹查询")
+    @ApiImplicitParams({@ApiImplicitParam(name = "dirid", value = "文件夹id")})
+    @ApiResponses({@ApiResponse(code = 500, message = "出现异常"), @ApiResponse(code = 200, message = "请求成功)")})
+    @RequestMapping(value = "/select", method = RequestMethod.GET)
+    public HttpResult select(@RequestParam("dirid") String dirid) {
+        HttpResult result = null;
+        try {
+            result = updownLoadService.select(dirid);
+        } catch (Exception e) {
+            result = HttpResult.error("文件查询失败!" + e.getMessage());
+            e.printStackTrace();
+        }
+        return result;
+    }
+
+    //文件查询
+    @ApiOperation(value = "文件查询")
+    @ApiImplicitParams({@ApiImplicitParam(name = "fileid", value = "文件id")})
+    @ApiResponses({@ApiResponse(code = 500, message = "出现异常"), @ApiResponse(code = 200, message = "请求成功)")})
+    @RequestMapping(value = "/selectFileid", method = RequestMethod.GET)
+    public HttpResult selectFileid(@RequestParam("fileid") String fileid) {
+        HttpResult result = null;
+        try {
+            result = updownLoadService.selectFileid(fileid);
+        } catch (Exception e) {
+            result = HttpResult.error("文件查询失败!" + e.getMessage());
+            e.printStackTrace();
+        }
+        return result;
+    }
+
+    //文件下载
+    @ApiOperation(value = "下载文件")
+    @ApiImplicitParams({@ApiImplicitParam(name = "fileid", value = "文件id")})
+    @ApiResponses({@ApiResponse(code = 500, message = "出现异常"), @ApiResponse(code = 200, message = "请求成功)")})
+    @RequestMapping(value = "/download", method = RequestMethod.GET)
+    public HttpResult download(HttpServletRequest request, HttpServletResponse response, @RequestParam("fileid") String fileid) {
+        HttpResult result = null;
+        try {
+            result = updownLoadService.download(request, response, fileid);
+        } catch (Exception e) {
+            result = HttpResult.error("下载文件失败!" + e.getMessage());
+            e.printStackTrace();
+        }
+        return result;
+    }
+
+    //文件删除
+    @ApiOperation(value = "删除文件")
+    @ApiImplicitParams({@ApiImplicitParam(name = "fileid", value = "文件id")})
+    @ApiResponses({@ApiResponse(code = 500, message = "出现异常"), @ApiResponse(code = 200, message = "请求成功)")})
+    @RequestMapping(value = "/deleteFile", method = RequestMethod.GET)
+    public HttpResult deleteFile(@RequestParam("fileid") String fileid) {
+        HttpResult result = null;
+        try {
+            result = updownLoadService.deleteFile(fileid);
+        } catch (Exception e) {
+            result = HttpResult.error("删除文件失败!" + e.getMessage());
+            e.printStackTrace();
+        }
+        return result;
+    }
+}

+ 58 - 0
src/main/java/com/ydtech/modules/admin/controller/WechatController.java

@@ -0,0 +1,58 @@
+package com.ydtech.modules.admin.controller;
+
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.exception.SystemException;
+import com.ydtech.modules.admin.service.WechatService;
+import com.ydtech.modules.admin.vo.WechatBindPhoneVo;
+import com.ydtech.modules.admin.vo.WechatBindVo;
+import com.ydtech.modules.admin.vo.WechatLoginVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import me.chanjar.weixin.common.error.WxErrorException;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.validation.Valid;
+
+@Api(tags = "微信业务")
+@Slf4j
+@RestController
+@RequestMapping("/wechat")
+public class WechatController {
+
+    private final WechatService wechatService;
+
+    public WechatController(WechatService wechatService) {
+        this.wechatService = wechatService;
+    }
+
+    @PostMapping("/login")
+    @ApiOperation(value = "登录")
+    public HttpResult<Object> login(@RequestBody WechatLoginVo wechatLoginVo, HttpServletRequest request) {
+        try {
+            return wechatService.login(wechatLoginVo, request);
+        } catch (WxErrorException e) {
+            log.info(e.getMessage());
+            throw new SystemException("微信授权失败");
+        }
+    }
+
+    @PostMapping("/bindPhone")
+    @ApiOperation(value = "绑定手机号,姓名")
+    public HttpResult<Object> bindPhone(@Valid @RequestBody WechatBindPhoneVo wechatBindPhoneVo, HttpServletRequest request) {
+        return wechatService.bindPhone(wechatBindPhoneVo, request);
+    }
+
+    @PostMapping("/bind")
+    @ApiOperation(value = "通过后台录入的人,绑定微信")
+    HttpResult<Object> bind(@RequestBody WechatBindVo wechatBindVo) throws WxErrorException {
+        try {
+            return wechatService.bind(wechatBindVo);
+        } catch (WxErrorException e) {
+            log.info(e.getMessage());
+            throw new SystemException("微信授权失败");
+        }
+    }
+
+}

+ 16 - 0
src/main/java/com/ydtech/modules/admin/convert/SysCarouselConvert.java

@@ -0,0 +1,16 @@
+package com.ydtech.modules.admin.convert;
+
+import com.ydtech.modules.admin.model.SysCarousel;
+import com.ydtech.modules.admin.vo.SysCarouselVo;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+@Mapper
+public interface SysCarouselConvert {
+
+    SysCarouselConvert INSTANCE = Mappers.getMapper(SysCarouselConvert.class);
+
+    SysCarousel Vo2Dto(SysCarouselVo sysCarouselVo);
+
+
+}

+ 16 - 0
src/main/java/com/ydtech/modules/admin/convert/SysUserConvert.java

@@ -0,0 +1,16 @@
+package com.ydtech.modules.admin.convert;
+
+import com.ydtech.modules.admin.model.SysUser;
+import com.ydtech.modules.esm.model.SysUserCheck;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+@Mapper
+public interface SysUserConvert {
+
+    SysUserConvert INSTANCE = Mappers.getMapper(SysUserConvert.class);
+
+    SysUserCheck dto2Check(SysUser sysUser);
+
+
+}

+ 71 - 0
src/main/java/com/ydtech/modules/admin/dao/SysAccountMapper.java

@@ -0,0 +1,71 @@
+package com.ydtech.modules.admin.dao;
+
+
+import com.ydtech.modules.admin.model.SysAccount;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface SysAccountMapper {
+    /**
+     * description:deleteByPrimaryKey
+     *
+     * @author: Administrator
+     * @date: 2021-11-30
+     * @since: 1.0
+     */
+    int deleteByPrimaryKey(String id);
+
+    /**
+     * description:insert
+     *
+     * @author: Administrator
+     * @date: 2021-11-30
+     * @since: 1.0
+     */
+    int insert(SysAccount record);
+
+    /**
+     * description:insertSelective
+     *
+     * @author: Administrator
+     * @date: 2021-11-30
+     * @since: 1.0
+     */
+    int insertSelective(SysAccount record);
+
+    /**
+     * description:selectByPrimaryKey
+     *
+     * @author: Administrator
+     * @date: 2021-11-30
+     * @since: 1.0
+     */
+    SysAccount selectByPrimaryKey(String id);
+
+    /**
+     * description:updateByPrimaryKeySelective
+     *
+     * @author: Administrator
+     * @date: 2021-11-30
+     * @since: 1.0
+     */
+    int updateByPrimaryKeySelective(SysAccount record);
+
+    /**
+     * description:updateByPrimaryKey
+     *
+     * @author: Administrator
+     * @date: 2021-11-30
+     * @since: 1.0
+     */
+    int updateByPrimaryKey(SysAccount record);
+
+    /**
+     * 获取指定商户下的账户
+     *
+     * @param deptId
+     * @return
+     */
+    List<SysAccount> findByDeptId(@Param("deptId") String deptId);
+}

+ 18 - 0
src/main/java/com/ydtech/modules/admin/dao/SysCarouselMapper.java

@@ -0,0 +1,18 @@
+package com.ydtech.modules.admin.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ydtech.modules.admin.model.SysCarousel;
+
+/**
+ * @author Administrator
+ * @description 针对表【sys_carousel(轮播图表)】的数据库操作Mapper
+ * @createDate 2022-08-27 11:50:53
+ * @Entity generator.domain.SysCarousel
+ */
+public interface SysCarouselMapper extends BaseMapper<SysCarousel> {
+
+}
+
+
+
+

+ 138 - 0
src/main/java/com/ydtech/modules/admin/dao/SysCbitErrorMapper.java

@@ -0,0 +1,138 @@
+package com.ydtech.modules.admin.dao;
+
+import com.ydtech.modules.admin.model.SysCbitError;
+import com.ydtech.modules.admin.model.SysCbitErrorExample;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface SysCbitErrorMapper {
+    /**
+     * description:countByExample
+     *
+     * @author: gws
+     * @date: 2021-11-26
+     * @since: 1.0
+     */
+    long countByExample(SysCbitErrorExample example);
+
+    /**
+     * description:deleteByExample
+     *
+     * @author: gws
+     * @date: 2021-11-26
+     * @since: 1.0
+     */
+    int deleteByExample(SysCbitErrorExample example);
+
+    /**
+     * description:deleteByPrimaryKey
+     *
+     * @author: gws
+     * @date: 2021-11-26
+     * @since: 1.0
+     */
+    int deleteByPrimaryKey(String reqno);
+
+    /**
+     * description:insert
+     *
+     * @author: gws
+     * @date: 2021-11-26
+     * @since: 1.0
+     */
+    int insert(SysCbitError record);
+
+    /**
+     * description:insertSelective
+     *
+     * @author: gws
+     * @date: 2021-11-26
+     * @since: 1.0
+     */
+    int insertSelective(SysCbitError record);
+
+    /**
+     * description:selectByExampleWithBLOBs
+     *
+     * @author: gws
+     * @date: 2021-11-26
+     * @since: 1.0
+     */
+    List<SysCbitError> selectByExampleWithBLOBs(SysCbitErrorExample example);
+
+    /**
+     * description:selectByExample
+     *
+     * @author: gws
+     * @date: 2021-11-26
+     * @since: 1.0
+     */
+    List<SysCbitError> selectByExample(SysCbitErrorExample example);
+
+    /**
+     * description:selectByPrimaryKey
+     *
+     * @author: gws
+     * @date: 2021-11-26
+     * @since: 1.0
+     */
+    SysCbitError selectByPrimaryKey(String reqno);
+
+    /**
+     * description:updateByExampleSelective
+     *
+     * @author: gws
+     * @date: 2021-11-26
+     * @since: 1.0
+     */
+    int updateByExampleSelective(@Param("record") SysCbitError record, @Param("example") SysCbitErrorExample example);
+
+    /**
+     * description:updateByExampleWithBLOBs
+     *
+     * @author: gws
+     * @date: 2021-11-26
+     * @since: 1.0
+     */
+    int updateByExampleWithBLOBs(@Param("record") SysCbitError record, @Param("example") SysCbitErrorExample example);
+
+    /**
+     * description:updateByExample
+     *
+     * @author: gws
+     * @date: 2021-11-26
+     * @since: 1.0
+     */
+    int updateByExample(@Param("record") SysCbitError record, @Param("example") SysCbitErrorExample example);
+
+    /**
+     * description:updateByPrimaryKeySelective
+     *
+     * @author: gws
+     * @date: 2021-11-26
+     * @since: 1.0
+     */
+    int updateByPrimaryKeySelective(SysCbitError record);
+
+    /**
+     * description:updateByPrimaryKeyWithBLOBs
+     *
+     * @author: gws
+     * @date: 2021-11-26
+     * @since: 1.0
+     */
+    int updateByPrimaryKeyWithBLOBs(SysCbitError record);
+
+    /**
+     * description:updateByPrimaryKey
+     *
+     * @author: gws
+     * @date: 2021-11-26
+     * @since: 1.0
+     */
+    int updateByPrimaryKey(SysCbitError record);
+}

+ 138 - 0
src/main/java/com/ydtech/modules/admin/dao/SysCbitLogMapper.java

@@ -0,0 +1,138 @@
+package com.ydtech.modules.admin.dao;
+
+import com.ydtech.modules.admin.model.SysCbitLog;
+import com.ydtech.modules.admin.model.SysCbitLogExample;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface SysCbitLogMapper {
+    /**
+     * description:countByExample
+     *
+     * @author: gws
+     * @date: 2021-11-22
+     * @since: 1.0
+     */
+    long countByExample(SysCbitLogExample example);
+
+    /**
+     * description:deleteByExample
+     *
+     * @author: gws
+     * @date: 2021-11-22
+     * @since: 1.0
+     */
+    int deleteByExample(SysCbitLogExample example);
+
+    /**
+     * description:deleteByPrimaryKey
+     *
+     * @author: gws
+     * @date: 2021-11-22
+     * @since: 1.0
+     */
+    int deleteByPrimaryKey(String reqNo);
+
+    /**
+     * description:insert
+     *
+     * @author: gws
+     * @date: 2021-11-22
+     * @since: 1.0
+     */
+    int insert(SysCbitLog record);
+
+    /**
+     * description:insertSelective
+     *
+     * @author: gws
+     * @date: 2021-11-22
+     * @since: 1.0
+     */
+    int insertSelective(SysCbitLog record);
+
+    /**
+     * description:selectByExampleWithBLOBs
+     *
+     * @author: gws
+     * @date: 2021-11-22
+     * @since: 1.0
+     */
+    List<SysCbitLog> selectByExampleWithBLOBs(SysCbitLogExample example);
+
+    /**
+     * description:selectByExample
+     *
+     * @author: gws
+     * @date: 2021-11-22
+     * @since: 1.0
+     */
+    List<SysCbitLog> selectByExample(SysCbitLogExample example);
+
+    /**
+     * description:selectByPrimaryKey
+     *
+     * @author: gws
+     * @date: 2021-11-22
+     * @since: 1.0
+     */
+    SysCbitLog selectByPrimaryKey(String reqNo);
+
+    /**
+     * description:updateByExampleSelective
+     *
+     * @author: gws
+     * @date: 2021-11-22
+     * @since: 1.0
+     */
+    int updateByExampleSelective(@Param("record") SysCbitLog record, @Param("example") SysCbitLogExample example);
+
+    /**
+     * description:updateByExampleWithBLOBs
+     *
+     * @author: gws
+     * @date: 2021-11-22
+     * @since: 1.0
+     */
+    int updateByExampleWithBLOBs(@Param("record") SysCbitLog record, @Param("example") SysCbitLogExample example);
+
+    /**
+     * description:updateByExample
+     *
+     * @author: gws
+     * @date: 2021-11-22
+     * @since: 1.0
+     */
+    int updateByExample(@Param("record") SysCbitLog record, @Param("example") SysCbitLogExample example);
+
+    /**
+     * description:updateByPrimaryKeySelective
+     *
+     * @author: gws
+     * @date: 2021-11-22
+     * @since: 1.0
+     */
+    int updateByPrimaryKeySelective(SysCbitLog record);
+
+    /**
+     * description:updateByPrimaryKeyWithBLOBs
+     *
+     * @author: gws
+     * @date: 2021-11-22
+     * @since: 1.0
+     */
+    int updateByPrimaryKeyWithBLOBs(SysCbitLog record);
+
+    /**
+     * description:updateByPrimaryKey
+     *
+     * @author: gws
+     * @date: 2021-11-22
+     * @since: 1.0
+     */
+    int updateByPrimaryKey(SysCbitLog record);
+}

+ 36 - 0
src/main/java/com/ydtech/modules/admin/dao/SysDeptDao.java

@@ -0,0 +1,36 @@
+package com.ydtech.modules.admin.dao;
+
+import com.ydtech.core.page.PageResult;
+import com.ydtech.modules.admin.model.SysDept;
+
+import java.util.List;
+
+public interface SysDeptDao {
+
+    public SysDept selectByPk(String id);
+
+    public List<SysDept> selectAll();
+
+    public List<SysDept> selectList(String whereCase, Object[] paramValues);
+
+    public Integer count(String whereCase, Object[] paramValues);
+
+    public PageResult selectPaging(int pageNumber, int pageSize, String whereCase, Object[] paramValues);
+
+    public Integer insert(SysDept model);
+
+    public Integer insertReturnPk(SysDept model);
+
+    public Integer insertSelective(SysDept model);
+
+    public Integer update(SysDept model);
+
+    public Integer updateSelective(SysDept model);
+
+    public Integer delete(String id);
+
+    public Integer delete(List<SysDept> lsSysDept);
+}
+
+
+

+ 36 - 0
src/main/java/com/ydtech/modules/admin/dao/SysDictDao.java

@@ -0,0 +1,36 @@
+package com.ydtech.modules.admin.dao;
+
+import com.ydtech.core.page.PageResult;
+import com.ydtech.modules.admin.model.SysDict;
+
+import java.util.List;
+
+public interface SysDictDao {
+
+    public SysDict selectByPk(Long id);
+
+    public List<SysDict> selectAll();
+
+    public List<SysDict> selectList(String whereCase, Object[] paramValues);
+
+    public Integer count(String whereCase, Object[] paramValues);
+
+    public PageResult selectPaging(int pageNumber, int pageSize, String whereCase, Object[] paramValues);
+
+    public Integer insert(SysDict model);
+
+    public Integer insertReturnPk(SysDict model);
+
+    public Integer insertSelective(SysDict model);
+
+    public Integer update(SysDict model);
+
+    public Integer updateSelective(SysDict model);
+
+    public Integer delete(Long id);
+
+    public Integer delete(List<SysDict> lsSysDict);
+}
+
+
+

+ 36 - 0
src/main/java/com/ydtech/modules/admin/dao/SysDictTypeDao.java

@@ -0,0 +1,36 @@
+package com.ydtech.modules.admin.dao;
+
+import com.ydtech.core.page.PageResult;
+import com.ydtech.modules.admin.model.SysDictType;
+
+import java.util.List;
+
+public interface SysDictTypeDao {
+
+    public SysDictType selectByPk(String id);
+
+    public List<SysDictType> selectAll();
+
+    public List<SysDictType> selectList(String whereCase, Object[] paramValues);
+
+    public Integer count(String whereCase, Object[] paramValues);
+
+    public PageResult selectPaging(int pageNumber, int pageSize, String whereCase, Object[] paramValues);
+
+    public Integer insert(SysDictType model);
+
+    public Integer insertReturnPk(SysDictType model);
+
+    public Integer insertSelective(SysDictType model);
+
+    public Integer update(SysDictType model);
+
+    public Integer updateSelective(SysDictType model);
+
+    public Integer delete(String id);
+
+    public Integer delete(List<SysDictType> lsSysDictType);
+}
+
+
+

+ 50 - 0
src/main/java/com/ydtech/modules/admin/dao/SysLogDao.java

@@ -0,0 +1,50 @@
+package com.ydtech.modules.admin.dao;
+
+
+import com.ydtech.modules.admin.model.SysLog;
+import com.ydtech.modules.admin.vo.SysLogQueryVO;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface SysLogDao {
+
+    /**
+     * description:selectByPrimaryKey
+     *
+     * @author: hantong
+     * @date: 2021-08-23
+     * @since: 1.0
+     */
+    SysLog selectByPrimaryKey(Long id);
+
+    /**
+     * description:deleteByPrimaryKey
+     *
+     * @author: hantong
+     * @date: 2021-08-23
+     * @since: 1.0
+     */
+    int deleteByPrimaryKey(Long id);
+
+    /**
+     * description:insert
+     *
+     * @author: hantong
+     * @date: 2021-08-23
+     * @since: 1.0
+     */
+    int insert(SysLog record);
+
+    /**
+     * description:insertSelective
+     *
+     * @author: hantong
+     * @date: 2021-08-23
+     * @since: 1.0
+     */
+    int insertSelective(SysLog record);
+
+    List<SysLog> selectPaging(SysLogQueryVO sysLogQueryVO);
+}

+ 37 - 0
src/main/java/com/ydtech/modules/admin/dao/SysMenuDao.java

@@ -0,0 +1,37 @@
+package com.ydtech.modules.admin.dao;
+
+
+import com.ydtech.core.page.PageResult;
+import com.ydtech.modules.admin.model.SysMenu;
+
+import java.util.List;
+
+public interface SysMenuDao {
+
+    public SysMenu selectByPk(String id);
+
+    public List<SysMenu> selectAll();
+
+    public List<SysMenu> selectList(String whereCase, Object[] paramValues);
+
+    public Integer count(String whereCase, Object[] paramValues);
+
+    public PageResult selectPaging(int pageNumber, int pageSize, String whereCase, Object[] paramValues);
+
+    public Integer insert(SysMenu model);
+
+    public Integer insertReturnPk(SysMenu model);
+
+    public Integer insertSelective(SysMenu model);
+
+    public Integer update(SysMenu model);
+
+    public Integer updateSelective(SysMenu model);
+
+    public Integer delete(String id);
+
+    public Integer delete(List<SysMenu> lsSysMenu);
+}
+
+
+

+ 14 - 0
src/main/java/com/ydtech/modules/admin/dao/SysMethodLogDao.java

@@ -0,0 +1,14 @@
+package com.ydtech.modules.admin.dao;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ydtech.modules.admin.model.SysLog;
+import com.ydtech.modules.admin.model.SysMethodLog;
+import com.ydtech.modules.admin.vo.SysLogQueryVO;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface SysMethodLogDao extends BaseMapper<SysMethodLog> {
+}

+ 19 - 0
src/main/java/com/ydtech/modules/admin/dao/SysMsgLogDao.java

@@ -0,0 +1,19 @@
+package com.ydtech.modules.admin.dao;
+
+import com.ydtech.core.page.PageResult;
+import com.ydtech.modules.admin.model.SysLog;
+import com.ydtech.modules.admin.model.SysMsgLog;
+
+import java.util.List;
+
+/**
+ * @author qinfenglong
+ * @version 1.0.0
+ * @description SysMsgLogDao
+ * @since 2020/10/26 14:53
+ */
+public interface SysMsgLogDao {
+    public List<SysMsgLog> selectList(String whereCase, Object[] paramValues);
+
+    public Integer insert(SysMsgLog model);
+}

+ 36 - 0
src/main/java/com/ydtech/modules/admin/dao/SysRoleDao.java

@@ -0,0 +1,36 @@
+package com.ydtech.modules.admin.dao;
+
+import com.ydtech.core.page.PageResult;
+import com.ydtech.modules.admin.model.SysRole;
+
+import java.util.List;
+
+public interface SysRoleDao {
+
+    public SysRole selectByPk(Long id);
+
+    public List<SysRole> selectAll();
+
+    public List<SysRole> selectList(String whereCase, Object[] paramValues);
+
+    public Integer count(String whereCase, Object[] paramValues);
+
+    public PageResult selectPaging(int pageNumber, int pageSize, String whereCase, Object[] paramValues);
+
+    public Integer insert(SysRole model);
+
+    public Integer insertReturnPk(SysRole model);
+
+    public Integer insertSelective(SysRole model);
+
+    public Integer update(SysRole model);
+
+    public Integer updateSelective(SysRole model);
+
+    public Integer delete(Long id);
+
+    public Integer delete(List<SysRole> lsSysRole);
+}
+
+
+

+ 36 - 0
src/main/java/com/ydtech/modules/admin/dao/SysRoleMenuDao.java

@@ -0,0 +1,36 @@
+package com.ydtech.modules.admin.dao;
+
+import com.ydtech.core.page.PageResult;
+import com.ydtech.modules.admin.model.SysRoleMenu;
+
+import java.util.List;
+
+public interface SysRoleMenuDao {
+
+    public SysRoleMenu selectByPk(Long id);
+
+    public List<SysRoleMenu> selectAll();
+
+    public List<SysRoleMenu> selectList(String whereCase, Object[] paramValues);
+
+    public Integer count(String whereCase, Object[] paramValues);
+
+    public PageResult selectPaging(int pageNumber, int pageSize, String whereCase, Object[] paramValues);
+
+    public Integer insert(SysRoleMenu model);
+
+    public Integer insertReturnPk(SysRoleMenu model);
+
+    public Integer insertSelective(SysRoleMenu model);
+
+    public Integer update(SysRoleMenu model);
+
+    public Integer updateSelective(SysRoleMenu model);
+
+    public Integer delete(Long id);
+
+    public Integer delete(List<SysRoleMenu> lsSysRoleMenu);
+}
+
+
+

+ 38 - 0
src/main/java/com/ydtech/modules/admin/dao/SysUserDao.java

@@ -0,0 +1,38 @@
+package com.ydtech.modules.admin.dao;
+
+import com.ydtech.core.page.PageResult;
+import com.ydtech.modules.admin.model.SysUser;
+import com.ydtech.modules.admin.vo.SysUserVO;
+
+import java.util.List;
+
+public interface SysUserDao {
+    SysUser selectByPk(String id);
+
+    SysUserVO selectById(String id);
+
+    SysUserVO selectByDeptId(String deptId);
+
+    List<SysUser> selectAll();
+
+    List<SysUser> selectList(String whereCase, Object[] paramValues);
+
+    Integer count(String whereCase, Object[] paramValues);
+
+    PageResult selectPaging(int pageNumber, int pageSize, String whereCase, Object[] paramValues);
+
+    Integer insert(SysUser model);
+
+    Integer insertReturnPk(SysUser model);
+
+    Integer insertSelective(SysUser model);
+
+    Integer update(SysUser model);
+
+    Integer updateSelective(SysUser model);
+
+    Integer delete(String id);
+
+    Integer delete(List<SysUser> lsSysUser);
+
+}

+ 20 - 0
src/main/java/com/ydtech/modules/admin/dao/SysUserMapper.java

@@ -0,0 +1,20 @@
+package com.ydtech.modules.admin.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ydtech.modules.admin.model.SysUser;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @author Administrator
+ * @description 针对表【sys_user(用户管理)】的数据库操作Mapper
+ * @createDate 2022-08-17 11:41:01
+ * @Entity generator.domain.SysUser
+ */
+@Repository
+public interface SysUserMapper extends BaseMapper<SysUser> {
+
+}
+
+
+
+

+ 40 - 0
src/main/java/com/ydtech/modules/admin/dao/SysUserRoleDao.java

@@ -0,0 +1,40 @@
+package com.ydtech.modules.admin.dao;
+
+import com.ydtech.modules.admin.model.SysUserRole;
+import com.ydtech.core.page.PageResult;
+
+import java.util.List;
+
+import java.util.Date;
+
+
+public interface SysUserRoleDao {
+
+
+    public SysUserRole selectByPk(Long id);
+
+    public SysUserRole selectByUserId(String userId);
+
+    public List<SysUserRole> selectAll();
+
+    public List<SysUserRole> selectList(String whereCase, Object[] paramValues);
+
+    public Integer count(String whereCase, Object[] paramValues);
+
+    public PageResult selectPaging(int pageNumber, int pageSize, String whereCase, Object[] paramValues);
+
+    public PageResult queryPaging(int pageNumber, int pageSize, String whereCase, Object[] paramValues);
+
+    public Integer insertReturnPk(SysUserRole model);
+
+    public Integer insertSelective(SysUserRole model);
+
+    public Integer update(SysUserRole model);
+
+    public Integer updateSelective(SysUserRole model);
+
+    public Integer delete(Long id);
+
+    public Integer delete(List<SysUserRole> lsSysUserRole);
+
+}

+ 20 - 0
src/main/java/com/ydtech/modules/admin/dao/SysUserRoleMapper.java

@@ -0,0 +1,20 @@
+package com.ydtech.modules.admin.dao;
+
+import com.ydtech.modules.admin.model.SysUserRole;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @author Administrator
+ * @description 针对表【sys_user_role(用户角色)】的数据库操作Mapper
+ * @createDate 2022-08-18 16:39:58
+ * @Entity generator.domain.SysUserRole
+ */
+@Repository
+public interface SysUserRoleMapper extends BaseMapper<SysUserRole> {
+
+}
+
+
+
+

+ 501 - 0
src/main/java/com/ydtech/modules/admin/dao/impl/SysDeptDaoImpl.java

@@ -0,0 +1,501 @@
+package com.ydtech.modules.admin.dao.impl;
+
+import com.github.drinkjava2.jdialects.Dialect;
+import com.ydtech.core.page.PageResult;
+import com.ydtech.modules.admin.dao.SysDeptDao;
+import com.ydtech.modules.admin.model.SysDept;
+import com.ydtech.modules.admin.vo.TreeSysDeptVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jdbc.core.BatchPreparedStatementSetter;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.core.PreparedStatementCreator;
+import org.springframework.jdbc.core.RowMapper;
+import org.springframework.jdbc.support.GeneratedKeyHolder;
+import org.springframework.jdbc.support.KeyHolder;
+import org.springframework.stereotype.Repository;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+
+@Repository
+public class SysDeptDaoImpl implements SysDeptDao {
+
+    @Autowired
+    public DataSource dataSource;
+
+    public static class SysDeptRowMapper implements RowMapper {
+        public SysDept mapRow(ResultSet resultSet, int rowNum) throws SQLException {
+            SysDept model = new SysDept();
+
+            model.setId(resultSet.getString("id"));
+            model.setName(resultSet.getString("name"));
+            model.setParentId(resultSet.getString("parent_id"));
+            model.setOrderNum(resultSet.getInt("order_num"));
+            model.setCreateBy(resultSet.getString("create_by"));
+            model.setCreateTime(resultSet.getDate("create_time"));
+            model.setLastUpdateBy(resultSet.getString("last_update_by"));
+            model.setLastUpdateTime(resultSet.getDate("last_update_time"));
+            model.setDelFlag(resultSet.getInt("del_flag"));
+            model.setComtype(resultSet.getString("comtype"));
+            model.setComlevel(resultSet.getString("comlevel"));
+            model.setAddress(resultSet.getString("address"));
+            model.setLeadername(resultSet.getString("leadername"));
+            model.setLeaderphone(resultSet.getString("leaderphone"));
+            model.setComattribute(resultSet.getString("comattribute"));
+            model.setIsstop(resultSet.getString("isstop"));
+            model.setDeptCode(resultSet.getString("dept_code"));
+            model.setProvince(resultSet.getString("province"));
+            model.setCity(resultSet.getString("city"));
+            model.setArea(resultSet.getString("area"));
+            model.setHouse(resultSet.getString("house"));
+            model.setDeptType(resultSet.getString("dept_type"));
+            return model;
+        }
+    }
+
+    @Override
+    public SysDept selectByPk(String id) {
+        String sql = "select t.id, t.name, t.parent_id, t.order_num, t.create_by, t.create_time, t.last_update_by, t.last_update_time, t.del_flag, t.comtype, t.comlevel, t.address, t.leadername, t.leaderphone, t.comattribute, t.isstop, t.dept_code, t.province, t.city, t.area, t.house, t.dept_type from sys_dept t  where id=?";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return (SysDept) jdbcTemplate.queryForObject(sql,
+                new Object[]{id}, new SysDeptRowMapper());
+    }
+
+    @Override
+    public List<SysDept> selectAll() {
+        String sql = "select t.id, t.name, t.parent_id, t.order_num, t.create_by, t.create_time, t.last_update_by, t.last_update_time, t.del_flag, t.comtype, t.comlevel, t.address, t.leadername, t.leaderphone, t.comattribute, t.isstop, t.dept_code, t.province, t.city, t.area, t.house, t.dept_type from sys_dept t  ";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return jdbcTemplate.query(sql, new SysDeptRowMapper());
+    }
+
+    public List<SysDept> selectList(String whereCase, Object[] paramValues) {
+        String sql = "select t.id, t.name, t.parent_id, t.order_num, t.create_by, t.create_time, t.last_update_by, t.last_update_time, t.del_flag, t.comtype, t.comlevel, t.address, t.leadername, t.leaderphone, t.comattribute, t.isstop, t.dept_code, t.province, t.city, t.area, t.house, t.dept_type from sys_dept t  " + whereCase;
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return jdbcTemplate.query(sql, paramValues, new SysDeptRowMapper());
+    }
+
+    public Integer count(String whereCase, Object[] paramValues) {
+        String sql = "select count(1) from sys_dept t " + whereCase;
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return jdbcTemplate.queryForObject(sql, paramValues, Integer.class);
+    }
+
+    public PageResult selectPaging(int pageNumber, int pageSize, String whereCase, Object[] paramValues) {
+
+        Dialect dialect = Dialect.guessDialect(dataSource);
+        String sql = dialect.pagin(pageNumber, pageSize, "select t.id, t.name, t.parent_id, t.order_num, t.create_by, t.create_time, t.last_update_by, t.last_update_time, t.del_flag, t.comtype, t.comlevel, t.address, t.leadername, t.leaderphone, t.comattribute, t.isstop, t.dept_code, t.province, t.city, t.area, t.house, t.dept_type from sys_dept t  " + whereCase);
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+        List<SysDept> recordList = jdbcTemplate.query(sql, paramValues, new SysDeptRowMapper());
+
+        int totalCount = count(whereCase, paramValues);
+
+        PageResult PageResult = new PageResult(pageNumber, pageSize, totalCount, recordList);
+
+        return PageResult;
+    }
+
+
+    @Override
+    public Integer insert(SysDept model) {
+
+        String sql = "insert into sys_dept ( id, name, parent_id, order_num, create_by, create_time, last_update_by, last_update_time, del_flag, comtype, comlevel, address, leadername, leaderphone, comattribute, isstop, dept_code, province, city, area, house, dept_type) values ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        Object[] params = new Object[]{model.getId(), model.getName(), model.getParentId(), model.getOrderNum(), model.getCreateBy(), model.getCreateTime(), model.getLastUpdateBy(), model.getLastUpdateTime(), model.getDelFlag(), model.getComtype(), model.getComlevel(), model.getAddress(), model.getLeadername(), model.getLeaderphone(), model.getComattribute(), model.getIsstop(), model.getDeptCode(), model.getProvince(), model.getCity(), model.getArea(), model.getHouse(), model.getDeptType()};
+
+        int out = jdbcTemplate.update(sql, params);
+
+        return out;
+    }
+
+    @Override
+    public Integer insertReturnPk(SysDept model) {
+
+        String sql = "insert into sys_dept ( id, name, parent_id, order_num, create_by, create_time, last_update_by, last_update_time, del_flag, comtype, comlevel, address, leadername, leaderphone, comattribute, isstop, dept_code, province, city, area, house, dept_type) values ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        KeyHolder keyHolder = new GeneratedKeyHolder();
+        jdbcTemplate.update(new PreparedStatementCreator() {
+            @Override
+            public PreparedStatement createPreparedStatement(Connection conn) throws SQLException {
+                PreparedStatement ps = conn.prepareStatement(sql, PreparedStatement.RETURN_GENERATED_KEYS);
+                ps.setObject(1, model.getId());
+                ps.setObject(2, model.getName());
+                ps.setObject(3, model.getParentId());
+                ps.setObject(4, model.getOrderNum());
+                ps.setObject(5, model.getCreateBy());
+                ps.setObject(6, model.getCreateTime());
+                ps.setObject(7, model.getLastUpdateBy());
+                ps.setObject(8, model.getLastUpdateTime());
+                ps.setObject(9, model.getDelFlag());
+                ps.setObject(10, model.getComtype());
+                ps.setObject(11, model.getComlevel());
+                ps.setObject(12, model.getAddress());
+                ps.setObject(13, model.getLeadername());
+                ps.setObject(14, model.getLeaderphone());
+                ps.setObject(15, model.getComattribute());
+                ps.setObject(16, model.getIsstop());
+                ps.setObject(17, model.getDeptCode());
+                ps.setObject(18, model.getProvince());
+                ps.setObject(19, model.getCity());
+                ps.setObject(20, model.getArea());
+                ps.setObject(21, model.getHouse());
+                ps.setObject(22, model.getDeptType());
+                return ps;
+            }
+        }, keyHolder);
+
+        return keyHolder.getKey().intValue();
+    }
+
+
+    @Override
+    public Integer insertSelective(SysDept model) {
+
+        StringBuffer sbSql = new StringBuffer();
+        StringBuffer sbParams = new StringBuffer();
+        ArrayList<Object> alParamsValues = new ArrayList<Object>();
+
+        String pre = "";
+
+        if (model.getId() != null) {
+            sbSql.append(pre + "id");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getId());
+            pre = ",";
+        }
+        if (model.getName() != null) {
+            sbSql.append(pre + "name");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getName());
+            pre = ",";
+        }
+        if (model.getParentId() != null) {
+            sbSql.append(pre + "parent_id");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getParentId());
+            pre = ",";
+        }
+        if (model.getOrderNum() != null) {
+            sbSql.append(pre + "order_num");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getOrderNum());
+            pre = ",";
+        }
+        if (model.getCreateBy() != null) {
+            sbSql.append(pre + "create_by");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getCreateBy());
+            pre = ",";
+        }
+        if (model.getCreateTime() != null) {
+            sbSql.append(pre + "create_time");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getCreateTime());
+            pre = ",";
+        }
+        if (model.getLastUpdateBy() != null) {
+            sbSql.append(pre + "last_update_by");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getLastUpdateBy());
+            pre = ",";
+        }
+        if (model.getLastUpdateTime() != null) {
+            sbSql.append(pre + "last_update_time");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getLastUpdateTime());
+            pre = ",";
+        }
+        if (model.getDelFlag() != null) {
+            sbSql.append(pre + "del_flag");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getDelFlag());
+            pre = ",";
+        }
+        if (model.getComtype() != null) {
+            sbSql.append(pre + "comtype");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getComtype());
+            pre = ",";
+        }
+        if (model.getComlevel() != null) {
+            sbSql.append(pre + "comlevel");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getComlevel());
+            pre = ",";
+        }
+        if (model.getAddress() != null) {
+            sbSql.append(pre + "address");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getAddress());
+            pre = ",";
+        }
+        if (model.getLeadername() != null) {
+            sbSql.append(pre + "leadername");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getLeadername());
+            pre = ",";
+        }
+        if (model.getLeaderphone() != null) {
+            sbSql.append(pre + "leaderphone");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getLeaderphone());
+            pre = ",";
+        }
+        if (model.getComattribute() != null) {
+            sbSql.append(pre + "comattribute");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getComattribute());
+            pre = ",";
+        }
+        if (model.getIsstop() != null) {
+            sbSql.append(pre + "isstop");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getIsstop());
+            pre = ",";
+        }
+        if (model.getDeptCode() != null) {
+            sbSql.append(pre + "dept_code");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getDeptCode());
+            pre = ",";
+        }
+        if (model.getProvince() != null) {
+            sbSql.append(pre + "province");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getProvince());
+            pre = ",";
+        }
+        if (model.getCity() != null) {
+            sbSql.append(pre + "city");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getCity());
+            pre = ",";
+        }
+        if (model.getArea() != null) {
+            sbSql.append(pre + "area");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getArea());
+            pre = ",";
+        }
+        if (model.getHouse() != null) {
+            sbSql.append(pre + "house");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getHouse());
+            pre = ",";
+        }
+        if (model.getDeptType() != null) {
+            sbSql.append(pre + "dept_type");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getDeptType());
+            pre = ",";
+        }
+
+
+        String sql = "INSERT INTO sys_dept (" + sbSql.toString() + ") VALUES (" + sbParams.toString() + ")";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        Object[] params = alParamsValues.toArray();
+
+        int out = jdbcTemplate.update(sql, params);
+
+        return out;
+    }
+
+    @Override
+    public Integer update(SysDept model) {
+
+        String sql = "update sys_dept set name=?, parent_id=?, order_num=?, create_by=?, create_time=?, last_update_by=?, last_update_time=?, del_flag=?, comtype=?, comlevel=?, address=?, leadername=?, leaderphone=?, comattribute=?, isstop=?, dept_code=?, province=?, city=?, area=?, house=?, dept_type=? where id=?";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        Object[] params = new Object[]{model.getName(), model.getParentId(), model.getOrderNum(), model.getCreateBy(), model.getCreateTime(), model.getLastUpdateBy(), model.getLastUpdateTime(), model.getDelFlag(), model.getComtype(), model.getComlevel(), model.getAddress(), model.getLeadername(), model.getLeaderphone(), model.getComattribute(), model.getIsstop(), model.getDeptCode(), model.getProvince(), model.getCity(), model.getArea(), model.getHouse(), model.getDeptType(), model.getId()};
+
+        return jdbcTemplate.update(sql, params);
+    }
+
+    @Override
+    public Integer updateSelective(SysDept model) {
+
+        StringBuffer sbSql = new StringBuffer();
+        StringBuffer sbParams = new StringBuffer();
+        ArrayList<Object> alParamsValues = new ArrayList<Object>();
+
+        String pre = "";
+        String preWhere = "";
+
+        if (model.getName() != null) {
+            sbSql.append(pre + "name=?");
+            alParamsValues.add(model.getName());
+            pre = ",";
+        }
+        if (model.getParentId() != null) {
+            sbSql.append(pre + "parent_id=?");
+            alParamsValues.add(model.getParentId());
+            pre = ",";
+        }
+        if (model.getOrderNum() != null) {
+            sbSql.append(pre + "order_num=?");
+            alParamsValues.add(model.getOrderNum());
+            pre = ",";
+        }
+        if (model.getCreateBy() != null) {
+            sbSql.append(pre + "create_by=?");
+            alParamsValues.add(model.getCreateBy());
+            pre = ",";
+        }
+        if (model.getCreateTime() != null) {
+            sbSql.append(pre + "create_time=?");
+            alParamsValues.add(model.getCreateTime());
+            pre = ",";
+        }
+        if (model.getLastUpdateBy() != null) {
+            sbSql.append(pre + "last_update_by=?");
+            alParamsValues.add(model.getLastUpdateBy());
+            pre = ",";
+        }
+        if (model.getLastUpdateTime() != null) {
+            sbSql.append(pre + "last_update_time=?");
+            alParamsValues.add(model.getLastUpdateTime());
+            pre = ",";
+        }
+        if (model.getDelFlag() != null) {
+            sbSql.append(pre + "del_flag=?");
+            alParamsValues.add(model.getDelFlag());
+            pre = ",";
+        }
+        if (model.getComtype() != null) {
+            sbSql.append(pre + "comtype=?");
+            alParamsValues.add(model.getComtype());
+            pre = ",";
+        }
+        if (model.getComlevel() != null) {
+            sbSql.append(pre + "comlevel=?");
+            alParamsValues.add(model.getComlevel());
+            pre = ",";
+        }
+        if (model.getAddress() != null) {
+            sbSql.append(pre + "address=?");
+            alParamsValues.add(model.getAddress());
+            pre = ",";
+        }
+        if (model.getLeadername() != null) {
+            sbSql.append(pre + "leadername=?");
+            alParamsValues.add(model.getLeadername());
+            pre = ",";
+        }
+        if (model.getLeaderphone() != null) {
+            sbSql.append(pre + "leaderphone=?");
+            alParamsValues.add(model.getLeaderphone());
+            pre = ",";
+        }
+        if (model.getComattribute() != null) {
+            sbSql.append(pre + "comattribute=?");
+            alParamsValues.add(model.getComattribute());
+            pre = ",";
+        }
+        if (model.getIsstop() != null) {
+            sbSql.append(pre + "isstop=?");
+            alParamsValues.add(model.getIsstop());
+            pre = ",";
+        }
+        if (model.getDeptCode() != null) {
+            sbSql.append(pre + "dept_code=?");
+            alParamsValues.add(model.getDeptCode());
+            pre = ",";
+        }
+        if (model.getProvince() != null) {
+            sbSql.append(pre + "province=?");
+            alParamsValues.add(model.getProvince());
+            pre = ",";
+        }
+        if (model.getCity() != null) {
+            sbSql.append(pre + "city=?");
+            alParamsValues.add(model.getCity());
+            pre = ",";
+        }
+        if (model.getArea() != null) {
+            sbSql.append(pre + "area=?");
+            alParamsValues.add(model.getArea());
+            pre = ",";
+        }
+        if (model.getHouse() != null) {
+            sbSql.append(pre + "house=?");
+            alParamsValues.add(model.getHouse());
+            pre = ",";
+        }
+        if (model.getDeptType() != null) {
+            sbSql.append(pre + "dept_type=?");
+            alParamsValues.add(model.getDeptType());
+            pre = ",";
+        }
+        if (model.getId() != null) {
+            sbParams.append(preWhere + "id=?");
+            alParamsValues.add(model.getId());
+            preWhere = ",";
+        }
+
+
+        if (!sbSql.toString().equalsIgnoreCase("")) {
+            String sql = "update sys_dept set " + sbSql.toString() + " where " + sbParams.toString();
+
+            JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+            Object[] params = alParamsValues.toArray();
+
+            return jdbcTemplate.update(sql, params);
+        }
+
+        return 0;
+    }
+
+    @Override
+    public Integer delete(String id) {
+
+        String sql = "delete from sys_dept where id=?";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return jdbcTemplate.update(sql, id);
+    }
+
+    @Override
+    public Integer delete(List<SysDept> lsSysDept) {
+        String sql = "delete from sys_dept where id=?";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
+            @Override
+            public void setValues(PreparedStatement preparedStatement, int i) throws SQLException {
+                preparedStatement.setString(1, lsSysDept.get(i).getId());
+            }
+
+            @Override
+            public int getBatchSize() {
+                return lsSysDept.size();
+            }
+        }).length;
+    }
+}
+
+
+

+ 372 - 0
src/main/java/com/ydtech/modules/admin/dao/impl/SysDictDaoImpl.java

@@ -0,0 +1,372 @@
+package com.ydtech.modules.admin.dao.impl;
+
+import com.ydtech.modules.admin.dao.SysDictDao;
+import com.ydtech.modules.admin.model.SysDict;
+import com.ydtech.core.page.PageResult;
+import com.github.drinkjava2.jdialects.Dialect;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.core.PreparedStatementCreator;
+import org.springframework.jdbc.core.BatchPreparedStatementSetter;
+import org.springframework.jdbc.core.RowMapper;
+import org.springframework.jdbc.support.GeneratedKeyHolder;
+import org.springframework.jdbc.support.KeyHolder;
+import org.springframework.stereotype.Repository;
+
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import java.util.List;
+import java.util.ArrayList;
+
+
+@Repository
+public class SysDictDaoImpl implements SysDictDao {
+
+    @Autowired
+    public DataSource dataSource;
+
+    public static class SysDictRowMapper implements RowMapper {
+        public SysDict mapRow(ResultSet resultSet, int rowNum) throws SQLException {
+            SysDict model = new SysDict();
+
+            model.setId(resultSet.getLong("id"));
+            model.setValue(resultSet.getString("value"));
+            model.setLabel(resultSet.getString("label"));
+            model.setItemname(resultSet.getString("itemname"));
+            model.setDescription(resultSet.getString("description"));
+            model.setSort(resultSet.getDouble("sort"));
+            model.setCreateBy(resultSet.getString("create_by"));
+            model.setCreateTime(resultSet.getDate("create_time"));
+            model.setLastUpdateBy(resultSet.getString("last_update_by"));
+            model.setLastUpdateTime(resultSet.getDate("last_update_time"));
+            model.setRemarks(resultSet.getString("remarks"));
+            model.setDelFlag(resultSet.getInt("del_flag"));
+            return model;
+        }
+    }
+
+    @Override
+    public SysDict selectByPk(Long id) {
+        String sql = "select t.id, t.value, t.label, t.itemname, t.description, t.sort, t.create_by, t.create_time, t.last_update_by, t.last_update_time, t.remarks, t.del_flag from sys_dict t  where id=?";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return (SysDict) jdbcTemplate.queryForObject(sql,
+                new Object[]{id}, new SysDictRowMapper());
+    }
+
+    @Override
+    public List<SysDict> selectAll() {
+        String sql = "select t.id, t.value, t.label, t.itemname, t.description, t.sort, t.create_by, t.create_time, t.last_update_by, t.last_update_time, t.remarks, t.del_flag from sys_dict t  ";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return jdbcTemplate.query(sql, new SysDictRowMapper());
+    }
+
+    public List<SysDict> selectList(String whereCase, Object[] paramValues) {
+        String sql = "select t.id, t.value, t.label, t.itemname, t.description, t.sort, t.create_by, t.create_time, t.last_update_by, t.last_update_time, t.remarks, t.del_flag from sys_dict t  " + whereCase;
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return jdbcTemplate.query(sql, paramValues, new SysDictRowMapper());
+    }
+
+    public Integer count(String whereCase, Object[] paramValues) {
+        String sql = "select count(1) from sys_dict t " + whereCase;
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return jdbcTemplate.queryForObject(sql, paramValues, Integer.class);
+    }
+
+    public PageResult selectPaging(int pageNumber, int pageSize, String whereCase, Object[] paramValues) {
+
+        Dialect dialect = Dialect.guessDialect(dataSource);
+        String sql = dialect.pagin(pageNumber, pageSize, "select t.id, t.value, t.label, t.itemname, t.description, t.sort, t.create_by, t.create_time, t.last_update_by, t.last_update_time, t.remarks, t.del_flag from sys_dict t  " + whereCase);
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+        List<SysDict> recordList = jdbcTemplate.query(sql, paramValues, new SysDictRowMapper());
+
+        int totalCount = count(whereCase, paramValues);
+
+        PageResult PageResult = new PageResult(pageNumber, pageSize, totalCount, recordList);
+
+        return PageResult;
+    }
+
+
+    @Override
+    public Integer insert(SysDict model) {
+
+        String sql = "insert into sys_dict ( id, value, label, itemname, description, sort, create_by, create_time, last_update_by, last_update_time, remarks, del_flag) values ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        Object[] params = new Object[]{model.getId(), model.getValue(), model.getLabel(), model.getItemname(), model.getDescription(), model.getSort(), model.getCreateBy(), model.getCreateTime(), model.getLastUpdateBy(), model.getLastUpdateTime(), model.getRemarks(), model.getDelFlag()};
+
+        int out = jdbcTemplate.update(sql, params);
+
+        return out;
+    }
+
+    @Override
+    public Integer insertReturnPk(SysDict model) {
+
+        String sql = "insert into sys_dict ( id, value, label, itemname, description, sort, create_by, create_time, last_update_by, last_update_time, remarks, del_flag) values ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        KeyHolder keyHolder = new GeneratedKeyHolder();
+        jdbcTemplate.update(new PreparedStatementCreator() {
+            @Override
+            public PreparedStatement createPreparedStatement(Connection conn) throws SQLException {
+                PreparedStatement ps = conn.prepareStatement(sql, PreparedStatement.RETURN_GENERATED_KEYS);
+                ps.setObject(1, model.getId());
+                ps.setObject(2, model.getValue());
+                ps.setObject(3, model.getLabel());
+                ps.setObject(4, model.getItemname());
+                ps.setObject(5, model.getDescription());
+                ps.setObject(6, model.getSort());
+                ps.setObject(7, model.getCreateBy());
+                ps.setObject(8, model.getCreateTime());
+                ps.setObject(9, model.getLastUpdateBy());
+                ps.setObject(10, model.getLastUpdateTime());
+                ps.setObject(11, model.getRemarks());
+                ps.setObject(12, model.getDelFlag());
+                return ps;
+            }
+        }, keyHolder);
+
+        return keyHolder.getKey().intValue();
+    }
+
+
+    @Override
+    public Integer insertSelective(SysDict model) {
+
+        StringBuffer sbSql = new StringBuffer();
+        StringBuffer sbParams = new StringBuffer();
+        ArrayList<Object> alParamsValues = new ArrayList<Object>();
+
+        String pre = "";
+
+        if (model.getId() != null) {
+            sbSql.append(pre + "id");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getId());
+            pre = ",";
+        }
+        if (model.getValue() != null) {
+            sbSql.append(pre + "value");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getValue());
+            pre = ",";
+        }
+        if (model.getLabel() != null) {
+            sbSql.append(pre + "label");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getLabel());
+            pre = ",";
+        }
+        if (model.getItemname() != null) {
+            sbSql.append(pre + "itemname");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getItemname());
+            pre = ",";
+        }
+        if (model.getDescription() != null) {
+            sbSql.append(pre + "description");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getDescription());
+            pre = ",";
+        }
+        if (model.getSort() != null) {
+            sbSql.append(pre + "sort");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getSort());
+            pre = ",";
+        }
+        if (model.getCreateBy() != null) {
+            sbSql.append(pre + "create_by");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getCreateBy());
+            pre = ",";
+        }
+        if (model.getCreateTime() != null) {
+            sbSql.append(pre + "create_time");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getCreateTime());
+            pre = ",";
+        }
+        if (model.getLastUpdateBy() != null) {
+            sbSql.append(pre + "last_update_by");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getLastUpdateBy());
+            pre = ",";
+        }
+        if (model.getLastUpdateTime() != null) {
+            sbSql.append(pre + "last_update_time");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getLastUpdateTime());
+            pre = ",";
+        }
+        if (model.getRemarks() != null) {
+            sbSql.append(pre + "remarks");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getRemarks());
+            pre = ",";
+        }
+        if (model.getDelFlag() != null) {
+            sbSql.append(pre + "del_flag");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getDelFlag());
+            pre = ",";
+        }
+
+
+        String sql = "INSERT INTO sys_dict (" + sbSql.toString() + ") VALUES (" + sbParams.toString() + ")";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        Object[] params = alParamsValues.toArray();
+
+        int out = jdbcTemplate.update(sql, params);
+
+        return out;
+    }
+
+    @Override
+    public Integer update(SysDict model) {
+
+        String sql = "update sys_dict set value=?, label=?, itemname=?, description=?, sort=?, create_by=?, create_time=?, last_update_by=?, last_update_time=?, remarks=?, del_flag=? where id=?";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        Object[] params = new Object[]{model.getValue(), model.getLabel(), model.getItemname(), model.getDescription(), model.getSort(), model.getCreateBy(), model.getCreateTime(), model.getLastUpdateBy(), model.getLastUpdateTime(), model.getRemarks(), model.getDelFlag(), model.getId()};
+
+        return jdbcTemplate.update(sql, params);
+    }
+
+    @Override
+    public Integer updateSelective(SysDict model) {
+
+        StringBuffer sbSql = new StringBuffer();
+        StringBuffer sbParams = new StringBuffer();
+        ArrayList<Object> alParamsValues = new ArrayList<Object>();
+
+        String pre = "";
+        String preWhere = "";
+
+        if (model.getValue() != null) {
+            sbSql.append(pre + "value=?");
+            alParamsValues.add(model.getValue());
+            pre = ",";
+        }
+        if (model.getLabel() != null) {
+            sbSql.append(pre + "label=?");
+            alParamsValues.add(model.getLabel());
+            pre = ",";
+        }
+        if (model.getItemname() != null) {
+            sbSql.append(pre + "itemname=?");
+            alParamsValues.add(model.getItemname());
+            pre = ",";
+        }
+        if (model.getDescription() != null) {
+            sbSql.append(pre + "description=?");
+            alParamsValues.add(model.getDescription());
+            pre = ",";
+        }
+        if (model.getSort() != null) {
+            sbSql.append(pre + "sort=?");
+            alParamsValues.add(model.getSort());
+            pre = ",";
+        }
+        if (model.getCreateBy() != null) {
+            sbSql.append(pre + "create_by=?");
+            alParamsValues.add(model.getCreateBy());
+            pre = ",";
+        }
+        if (model.getCreateTime() != null) {
+            sbSql.append(pre + "create_time=?");
+            alParamsValues.add(model.getCreateTime());
+            pre = ",";
+        }
+        if (model.getLastUpdateBy() != null) {
+            sbSql.append(pre + "last_update_by=?");
+            alParamsValues.add(model.getLastUpdateBy());
+            pre = ",";
+        }
+        if (model.getLastUpdateTime() != null) {
+            sbSql.append(pre + "last_update_time=?");
+            alParamsValues.add(model.getLastUpdateTime());
+            pre = ",";
+        }
+        if (model.getRemarks() != null) {
+            sbSql.append(pre + "remarks=?");
+            alParamsValues.add(model.getRemarks());
+            pre = ",";
+        }
+        if (model.getDelFlag() != null) {
+            sbSql.append(pre + "del_flag=?");
+            alParamsValues.add(model.getDelFlag());
+            pre = ",";
+        }
+        if (model.getId() != null) {
+            sbParams.append(preWhere + "id=?");
+            alParamsValues.add(model.getId());
+            preWhere = ",";
+        }
+
+
+        if (!sbSql.toString().equalsIgnoreCase("")) {
+            String sql = "update sys_dict set " + sbSql.toString() + " where " + sbParams.toString();
+
+            JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+            Object[] params = alParamsValues.toArray();
+
+            return jdbcTemplate.update(sql, params);
+        }
+
+        return 0;
+    }
+
+    @Override
+    public Integer delete(Long id) {
+
+        String sql = "delete from sys_dict where id=?";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return jdbcTemplate.update(sql, id);
+    }
+
+    @Override
+    public Integer delete(List<SysDict> lsSysDict) {
+        String sql = "delete from sys_dict where id=?";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
+            @Override
+            public void setValues(PreparedStatement preparedStatement, int i) throws SQLException {
+                preparedStatement.setLong(1, lsSysDict.get(i).getId());
+            }
+
+            @Override
+            public int getBatchSize() {
+                return lsSysDict.size();
+            }
+        }).length;
+    }
+}
+
+
+

+ 344 - 0
src/main/java/com/ydtech/modules/admin/dao/impl/SysDictTypeDaoImpl.java

@@ -0,0 +1,344 @@
+package com.ydtech.modules.admin.dao.impl;
+
+import com.github.drinkjava2.jdialects.Dialect;
+import com.ydtech.core.page.PageResult;
+import com.ydtech.modules.admin.dao.SysDictTypeDao;
+import com.ydtech.modules.admin.model.SysDictType;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jdbc.core.BatchPreparedStatementSetter;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.core.PreparedStatementCreator;
+import org.springframework.jdbc.core.RowMapper;
+import org.springframework.jdbc.support.GeneratedKeyHolder;
+import org.springframework.jdbc.support.KeyHolder;
+import org.springframework.stereotype.Repository;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+
+@Repository
+public class SysDictTypeDaoImpl implements SysDictTypeDao {
+
+    @Autowired
+    public DataSource dataSource;
+
+    public static class SysDictTypeRowMapper implements RowMapper {
+        public SysDictType mapRow(ResultSet resultSet, int rowNum) throws SQLException {
+            SysDictType model = new SysDictType();
+
+            model.setId(resultSet.getString("id"));
+            model.setName(resultSet.getString("name"));
+            model.setParentId(resultSet.getString("parent_id"));
+            model.setItemname(resultSet.getString("itemname"));
+            model.setDescription(resultSet.getString("description"));
+            model.setCreateTime(resultSet.getDate("create_time"));
+            model.setUpdateTime(resultSet.getDate("update_time"));
+            model.setRemarks(resultSet.getString("remarks"));
+            model.setDelFlag(resultSet.getString("del_flag"));
+            model.setTenantId(resultSet.getInt("tenant_id"));
+            return model;
+        }
+    }
+
+    @Override
+    public SysDictType selectByPk(String id) {
+        String sql = "select t.id, t.name, t.parent_id, t.itemname, t.description, t.create_time, t.update_time, t.remarks, t.del_flag, t.tenant_id from sys_dict_type t  where id=?";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return (SysDictType) jdbcTemplate.queryForObject(sql,
+                new Object[]{id}, new SysDictTypeRowMapper());
+    }
+
+    @Override
+    public List<SysDictType> selectAll() {
+        String sql = "select t.id, t.name, t.parent_id, t.itemname, t.description, t.create_time, t.update_time, t.remarks, t.del_flag, t.tenant_id from sys_dict_type t  ";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return jdbcTemplate.query(sql, new SysDictTypeRowMapper());
+    }
+
+    public List<SysDictType> selectList(String whereCase, Object[] paramValues) {
+        String sql = "select t.id, t.name, t.parent_id, t.itemname, t.description, t.create_time, t.update_time, t.remarks, t.del_flag, t.tenant_id from sys_dict_type t  " + whereCase;
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return jdbcTemplate.query(sql, paramValues, new SysDictTypeRowMapper());
+    }
+
+    public Integer count(String whereCase, Object[] paramValues) {
+        String sql = "select count(1) from sys_dict_type t " + whereCase;
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return jdbcTemplate.queryForObject(sql, paramValues, Integer.class);
+    }
+
+    public PageResult selectPaging(int pageNumber, int pageSize, String whereCase, Object[] paramValues) {
+
+        Dialect dialect = Dialect.guessDialect(dataSource);
+        String sql = dialect.pagin(pageNumber, pageSize, "select t.id, t.name, t.parent_id, t.itemname, t.description, t.create_time, t.update_time, t.remarks, t.del_flag, t.tenant_id from sys_dict_type t  " + whereCase);
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+        List<SysDictType> recordList = jdbcTemplate.query(sql, paramValues, new SysDictTypeRowMapper());
+
+        int totalCount = count(whereCase, paramValues);
+
+        PageResult PageResult = new PageResult(pageNumber, pageSize, totalCount, recordList);
+
+        return PageResult;
+    }
+
+
+    @Override
+    public Integer insert(SysDictType model) {
+
+        String sql = "insert into sys_dict_type ( id, name, parent_id, itemname, description, create_time, update_time, remarks, del_flag, tenant_id) values ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        Object[] params = new Object[]{model.getId(), model.getName(), model.getParentId(), model.getItemname(), model.getDescription(), model.getCreateTime(), model.getUpdateTime(), model.getRemarks(), model.getDelFlag(), model.getTenantId()};
+
+        int out = jdbcTemplate.update(sql, params);
+
+        return out;
+    }
+
+    @Override
+    public Integer insertReturnPk(SysDictType model) {
+
+        String sql = "insert into sys_dict_type ( id, name, parent_id, itemname, description, create_time, update_time, remarks, del_flag, tenant_id) values ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        KeyHolder keyHolder = new GeneratedKeyHolder();
+        jdbcTemplate.update(new PreparedStatementCreator() {
+            @Override
+            public PreparedStatement createPreparedStatement(Connection conn) throws SQLException {
+                PreparedStatement ps = conn.prepareStatement(sql, PreparedStatement.RETURN_GENERATED_KEYS);
+                ps.setObject(1, model.getId());
+                ps.setObject(2, model.getName());
+                ps.setObject(3, model.getParentId());
+                ps.setObject(4, model.getItemname());
+                ps.setObject(5, model.getDescription());
+                ps.setObject(6, model.getCreateTime());
+                ps.setObject(7, model.getUpdateTime());
+                ps.setObject(8, model.getRemarks());
+                ps.setObject(9, model.getDelFlag());
+                ps.setObject(10, model.getTenantId());
+                return ps;
+            }
+        }, keyHolder);
+
+        return keyHolder.getKey().intValue();
+    }
+
+
+    @Override
+    public Integer insertSelective(SysDictType model) {
+
+        StringBuffer sbSql = new StringBuffer();
+        StringBuffer sbParams = new StringBuffer();
+        ArrayList<Object> alParamsValues = new ArrayList<Object>();
+
+        String pre = "";
+
+        if (model.getId() != null) {
+            sbSql.append(pre + "id");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getId());
+            pre = ",";
+        }
+        if (model.getName() != null) {
+            sbSql.append(pre + "name");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getName());
+            pre = ",";
+        }
+        if (model.getParentId() != null) {
+            sbSql.append(pre + "parent_id");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getParentId());
+            pre = ",";
+        }
+        if (model.getItemname() != null) {
+            sbSql.append(pre + "itemname");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getItemname());
+            pre = ",";
+        }
+        if (model.getDescription() != null) {
+            sbSql.append(pre + "description");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getDescription());
+            pre = ",";
+        }
+        if (model.getCreateTime() != null) {
+            sbSql.append(pre + "create_time");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getCreateTime());
+            pre = ",";
+        }
+        if (model.getUpdateTime() != null) {
+            sbSql.append(pre + "update_time");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getUpdateTime());
+            pre = ",";
+        }
+        if (model.getRemarks() != null) {
+            sbSql.append(pre + "remarks");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getRemarks());
+            pre = ",";
+        }
+        if (model.getDelFlag() != null) {
+            sbSql.append(pre + "del_flag");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getDelFlag());
+            pre = ",";
+        }
+        if (model.getTenantId() != null) {
+            sbSql.append(pre + "tenant_id");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getTenantId());
+            pre = ",";
+        }
+
+
+        String sql = "INSERT INTO sys_dict_type (" + sbSql.toString() + ") VALUES (" + sbParams.toString() + ")";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        Object[] params = alParamsValues.toArray();
+
+        int out = jdbcTemplate.update(sql, params);
+
+        return out;
+    }
+
+    @Override
+    public Integer update(SysDictType model) {
+
+        String sql = "update sys_dict_type set name=?, parent_id=?, itemname=?, description=?, create_time=?, update_time=?, remarks=?, del_flag=?, tenant_id=? where id=?";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        Object[] params = new Object[]{model.getName(), model.getParentId(), model.getItemname(), model.getDescription(), model.getCreateTime(), model.getUpdateTime(), model.getRemarks(), model.getDelFlag(), model.getTenantId(), model.getId()};
+
+        return jdbcTemplate.update(sql, params);
+    }
+
+    @Override
+    public Integer updateSelective(SysDictType model) {
+
+        StringBuffer sbSql = new StringBuffer();
+        StringBuffer sbParams = new StringBuffer();
+        ArrayList<Object> alParamsValues = new ArrayList<Object>();
+
+        String pre = "";
+        String preWhere = "";
+
+        if (model.getName() != null) {
+            sbSql.append(pre + "name=?");
+            alParamsValues.add(model.getName());
+            pre = ",";
+        }
+        if (model.getParentId() != null) {
+            sbSql.append(pre + "parent_id=?");
+            alParamsValues.add(model.getParentId());
+            pre = ",";
+        }
+        if (model.getItemname() != null) {
+            sbSql.append(pre + "itemname=?");
+            alParamsValues.add(model.getItemname());
+            pre = ",";
+        }
+        if (model.getDescription() != null) {
+            sbSql.append(pre + "description=?");
+            alParamsValues.add(model.getDescription());
+            pre = ",";
+        }
+        if (model.getCreateTime() != null) {
+            sbSql.append(pre + "create_time=?");
+            alParamsValues.add(model.getCreateTime());
+            pre = ",";
+        }
+        if (model.getUpdateTime() != null) {
+            sbSql.append(pre + "update_time=?");
+            alParamsValues.add(model.getUpdateTime());
+            pre = ",";
+        }
+        if (model.getRemarks() != null) {
+            sbSql.append(pre + "remarks=?");
+            alParamsValues.add(model.getRemarks());
+            pre = ",";
+        }
+        if (model.getDelFlag() != null) {
+            sbSql.append(pre + "del_flag=?");
+            alParamsValues.add(model.getDelFlag());
+            pre = ",";
+        }
+        if (model.getTenantId() != null) {
+            sbSql.append(pre + "tenant_id=?");
+            alParamsValues.add(model.getTenantId());
+            pre = ",";
+        }
+        if (model.getId() != null) {
+            sbParams.append(preWhere + "id=?");
+            alParamsValues.add(model.getId());
+            preWhere = ",";
+        }
+
+
+        if (!sbSql.toString().equalsIgnoreCase("")) {
+            String sql = "update sys_dict_type set " + sbSql.toString() + " where " + sbParams.toString();
+
+            JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+            Object[] params = alParamsValues.toArray();
+
+            return jdbcTemplate.update(sql, params);
+        }
+
+        return 0;
+    }
+
+    @Override
+    public Integer delete(String id) {
+
+        String sql = "delete from sys_dict_type where id=?";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return jdbcTemplate.update(sql, id);
+    }
+
+    @Override
+    public Integer delete(List<SysDictType> lsSysDictType) {
+        String sql = "delete from sys_dict_type where id=?";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
+            @Override
+            public void setValues(PreparedStatement preparedStatement, int i) throws SQLException {
+                preparedStatement.setString(1, lsSysDictType.get(i).getId());
+            }
+
+            @Override
+            public int getBatchSize() {
+                return lsSysDictType.size();
+            }
+        }).length;
+    }
+}
+
+
+

+ 387 - 0
src/main/java/com/ydtech/modules/admin/dao/impl/SysMenuDaoImpl.java

@@ -0,0 +1,387 @@
+package com.ydtech.modules.admin.dao.impl;
+
+import com.github.drinkjava2.jdialects.Dialect;
+import com.ydtech.core.page.PageResult;
+import com.ydtech.modules.admin.dao.SysMenuDao;
+import com.ydtech.modules.admin.model.SysMenu;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jdbc.core.BatchPreparedStatementSetter;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.core.PreparedStatementCreator;
+import org.springframework.jdbc.core.RowMapper;
+import org.springframework.jdbc.support.GeneratedKeyHolder;
+import org.springframework.jdbc.support.KeyHolder;
+import org.springframework.stereotype.Repository;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+
+@Repository
+public class SysMenuDaoImpl implements SysMenuDao {
+
+    @Autowired
+    public DataSource dataSource;
+
+    public static class SysMenuRowMapper implements RowMapper {
+        public SysMenu mapRow(ResultSet resultSet, int rowNum) throws SQLException {
+            SysMenu model = new SysMenu();
+
+            model.setId(resultSet.getString("id"));
+            model.setName(resultSet.getString("name"));
+            model.setParentId(resultSet.getString("parent_id"));
+            model.setUrl(resultSet.getString("url"));
+            model.setPerms(resultSet.getString("perms"));
+            model.setType(resultSet.getInt("type"));
+            model.setIcon(resultSet.getString("icon"));
+            model.setOrderNum(resultSet.getInt("order_num"));
+            model.setCreateBy(resultSet.getString("create_by"));
+            model.setCreateTime(resultSet.getDate("create_time"));
+            model.setLastUpdateBy(resultSet.getString("last_update_by"));
+            model.setLastUpdateTime(resultSet.getDate("last_update_time"));
+            model.setDelFlag(resultSet.getInt("del_flag"));
+            return model;
+        }
+    }
+
+    @Override
+    public SysMenu selectByPk(String id) {
+        String sql = "select t.id, t.name, t.parent_id, t.url, t.perms, t.type, t.icon, t.order_num, t.create_by, t.create_time, t.last_update_by, t.last_update_time, t.del_flag from sys_menu t  where id=?";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return (SysMenu) jdbcTemplate.queryForObject(sql,
+                new Object[]{id}, new SysMenuRowMapper());
+    }
+
+    @Override
+    public List<SysMenu> selectAll() {
+        String sql = "select t.id, t.name, t.parent_id, t.url, t.perms, t.type, t.icon, t.order_num, t.create_by, t.create_time, t.last_update_by, t.last_update_time, t.del_flag from sys_menu t  ";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return jdbcTemplate.query(sql, new SysMenuRowMapper());
+    }
+
+    public List<SysMenu> selectList(String whereCase, Object[] paramValues) {
+        String sql = "select t.id, t.name, t.parent_id, t.url, t.perms, t.type, t.icon, t.order_num, t.create_by, t.create_time, t.last_update_by, t.last_update_time, t.del_flag from sys_menu t  " + whereCase;
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return jdbcTemplate.query(sql, paramValues, new SysMenuRowMapper());
+    }
+
+    public Integer count(String whereCase, Object[] paramValues) {
+        String sql = "select count(1) from sys_menu t " + whereCase;
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return jdbcTemplate.queryForObject(sql, paramValues, Integer.class);
+    }
+
+    public PageResult selectPaging(int pageNumber, int pageSize, String whereCase, Object[] paramValues) {
+
+        Dialect dialect = Dialect.guessDialect(dataSource);
+        String sql = dialect.pagin(pageNumber, pageSize, "select t.id, t.name, t.parent_id, t.url, t.perms, t.type, t.icon, t.order_num, t.create_by, t.create_time, t.last_update_by, t.last_update_time, t.del_flag from sys_menu t  " + whereCase);
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+        List<SysMenu> recordList = jdbcTemplate.query(sql, paramValues, new SysMenuRowMapper());
+
+        int totalCount = count(whereCase, paramValues);
+
+        PageResult PageResult = new PageResult(pageNumber, pageSize, totalCount, recordList);
+
+        return PageResult;
+    }
+
+
+    @Override
+    public Integer insert(SysMenu model) {
+
+        String sql = "insert into sys_menu ( id, name, parent_id, url, perms, type, icon, order_num, create_by, create_time, last_update_by, last_update_time, del_flag) values ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        Object[] params = new Object[]{model.getId(), model.getName(), model.getParentId(), model.getUrl(), model.getPerms(), model.getType(), model.getIcon(), model.getOrderNum(), model.getCreateBy(), model.getCreateTime(), model.getLastUpdateBy(), model.getLastUpdateTime(), model.getDelFlag()};
+
+        int out = jdbcTemplate.update(sql, params);
+
+        return out;
+    }
+
+    @Override
+    public Integer insertReturnPk(SysMenu model) {
+
+        String sql = "insert into sys_menu ( id, name, parent_id, url, perms, type, icon, order_num, create_by, create_time, last_update_by, last_update_time, del_flag) values ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        KeyHolder keyHolder = new GeneratedKeyHolder();
+        jdbcTemplate.update(new PreparedStatementCreator() {
+            @Override
+            public PreparedStatement createPreparedStatement(Connection conn) throws SQLException {
+                PreparedStatement ps = conn.prepareStatement(sql, PreparedStatement.RETURN_GENERATED_KEYS);
+                ps.setObject(1, model.getId());
+                ps.setObject(2, model.getName());
+                ps.setObject(3, model.getParentId());
+                ps.setObject(4, model.getUrl());
+                ps.setObject(5, model.getPerms());
+                ps.setObject(6, model.getType());
+                ps.setObject(7, model.getIcon());
+                ps.setObject(8, model.getOrderNum());
+                ps.setObject(9, model.getCreateBy());
+                ps.setObject(10, model.getCreateTime());
+                ps.setObject(11, model.getLastUpdateBy());
+                ps.setObject(12, model.getLastUpdateTime());
+                ps.setObject(13, model.getDelFlag());
+                return ps;
+            }
+        }, keyHolder);
+
+        return keyHolder.getKey().intValue();
+    }
+
+
+    @Override
+    public Integer insertSelective(SysMenu model) {
+
+        StringBuffer sbSql = new StringBuffer();
+        StringBuffer sbParams = new StringBuffer();
+        ArrayList<Object> alParamsValues = new ArrayList<Object>();
+
+        String pre = "";
+
+//        if(model.getId() != null){
+//            sbSql.append(pre + "id");
+//            sbParams.append(pre + "?");
+//            alParamsValues.add(model.getId());
+//            pre = ",";
+//        }
+        if (model.getName() != null) {
+            sbSql.append(pre + "name");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getName());
+            pre = ",";
+        }
+        if (model.getParentId() != null) {
+            sbSql.append(pre + "parent_id");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getParentId());
+            pre = ",";
+        }
+        if (model.getUrl() != null) {
+            sbSql.append(pre + "url");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getUrl());
+            pre = ",";
+        }
+        if (model.getPerms() != null) {
+            sbSql.append(pre + "perms");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getPerms());
+            pre = ",";
+        }
+        if (model.getType() != null) {
+            sbSql.append(pre + "type");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getType());
+            pre = ",";
+        }
+        if (model.getIcon() != null) {
+            sbSql.append(pre + "icon");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getIcon());
+            pre = ",";
+        }
+        if (model.getOrderNum() != null) {
+            sbSql.append(pre + "order_num");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getOrderNum());
+            pre = ",";
+        }
+        if (model.getCreateBy() != null) {
+            sbSql.append(pre + "create_by");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getCreateBy());
+            pre = ",";
+        }
+        if (model.getCreateTime() != null) {
+            sbSql.append(pre + "create_time");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getCreateTime());
+            pre = ",";
+        }
+        if (model.getLastUpdateBy() != null) {
+            sbSql.append(pre + "last_update_by");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getLastUpdateBy());
+            pre = ",";
+        }
+        if (model.getLastUpdateTime() != null) {
+            sbSql.append(pre + "last_update_time");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getLastUpdateTime());
+            pre = ",";
+        }
+        if (model.getDelFlag() != null) {
+            sbSql.append(pre + "del_flag");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getDelFlag());
+            pre = ",";
+        }
+
+
+        String sql = "INSERT INTO sys_menu (" + sbSql.toString() + ") VALUES (" + sbParams.toString() + ")";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        Object[] params = alParamsValues.toArray();
+        int out = 0;
+        try {
+            out = jdbcTemplate.update(sql, params);
+        } catch (Exception e) {
+            String msg = e.getMessage();
+        }
+
+        return out;
+    }
+
+    @Override
+    public Integer update(SysMenu model) {
+
+        String sql = "update sys_menu set name=?, parent_id=?, url=?, perms=?, type=?, icon=?, order_num=?, create_by=?, create_time=?, last_update_by=?, last_update_time=?, del_flag=? where id=?";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        Object[] params = new Object[]{model.getName(), model.getParentId(), model.getUrl(), model.getPerms(), model.getType(), model.getIcon(), model.getOrderNum(), model.getCreateBy(), model.getCreateTime(), model.getLastUpdateBy(), model.getLastUpdateTime(), model.getDelFlag(), model.getId()};
+
+        return jdbcTemplate.update(sql, params);
+    }
+
+    @Override
+    public Integer updateSelective(SysMenu model) {
+
+        StringBuffer sbSql = new StringBuffer();
+        StringBuffer sbParams = new StringBuffer();
+        ArrayList<Object> alParamsValues = new ArrayList<Object>();
+
+        String pre = "";
+        String preWhere = "";
+
+        if (model.getName() != null) {
+            sbSql.append(pre + "name=?");
+            alParamsValues.add(model.getName());
+            pre = ",";
+        }
+        if (model.getParentId() != null) {
+            sbSql.append(pre + "parent_id=?");
+            alParamsValues.add(model.getParentId());
+            pre = ",";
+        }
+        if (model.getUrl() != null) {
+            sbSql.append(pre + "url=?");
+            alParamsValues.add(model.getUrl());
+            pre = ",";
+        }
+        if (model.getPerms() != null) {
+            sbSql.append(pre + "perms=?");
+            alParamsValues.add(model.getPerms());
+            pre = ",";
+        }
+        if (model.getType() != null) {
+            sbSql.append(pre + "type=?");
+            alParamsValues.add(model.getType());
+            pre = ",";
+        }
+        if (model.getIcon() != null) {
+            sbSql.append(pre + "icon=?");
+            alParamsValues.add(model.getIcon());
+            pre = ",";
+        }
+        if (model.getOrderNum() != null) {
+            sbSql.append(pre + "order_num=?");
+            alParamsValues.add(model.getOrderNum());
+            pre = ",";
+        }
+        if (model.getCreateBy() != null) {
+            sbSql.append(pre + "create_by=?");
+            alParamsValues.add(model.getCreateBy());
+            pre = ",";
+        }
+        if (model.getCreateTime() != null) {
+            sbSql.append(pre + "create_time=?");
+            alParamsValues.add(model.getCreateTime());
+            pre = ",";
+        }
+        if (model.getLastUpdateBy() != null) {
+            sbSql.append(pre + "last_update_by=?");
+            alParamsValues.add(model.getLastUpdateBy());
+            pre = ",";
+        }
+        if (model.getLastUpdateTime() != null) {
+            sbSql.append(pre + "last_update_time=?");
+            alParamsValues.add(model.getLastUpdateTime());
+            pre = ",";
+        }
+        if (model.getDelFlag() != null) {
+            sbSql.append(pre + "del_flag=?");
+            alParamsValues.add(model.getDelFlag());
+            pre = ",";
+        }
+        if (model.getId() != null) {
+            sbParams.append(preWhere + "id=?");
+            alParamsValues.add(model.getId());
+            preWhere = ",";
+        }
+
+
+        if (!sbSql.toString().equalsIgnoreCase("")) {
+            String sql = "update sys_menu set " + sbSql.toString() + " where " + sbParams.toString();
+
+            JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+            Object[] params = alParamsValues.toArray();
+
+            return jdbcTemplate.update(sql, params);
+        }
+
+        return 0;
+    }
+
+    @Override
+    public Integer delete(String id) {
+
+        String sql = "delete from sys_menu where id=?";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return jdbcTemplate.update(sql, id);
+    }
+
+    @Override
+    public Integer delete(List<SysMenu> lsSysMenu) {
+        String sql = "delete from sys_menu where id=?";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
+            @Override
+            public void setValues(PreparedStatement preparedStatement, int i) throws SQLException {
+                preparedStatement.setString(1, lsSysMenu.get(i).getId());
+            }
+
+            @Override
+            public int getBatchSize() {
+                return lsSysMenu.size();
+            }
+        }).length;
+    }
+}
+
+
+

+ 60 - 0
src/main/java/com/ydtech/modules/admin/dao/impl/SysMsgLogDaoImpl.java

@@ -0,0 +1,60 @@
+package com.ydtech.modules.admin.dao.impl;
+
+import com.ydtech.modules.admin.dao.SysMsgLogDao;
+import com.ydtech.modules.admin.model.SysLog;
+import com.ydtech.modules.admin.model.SysMsgLog;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.core.RowMapper;
+import org.springframework.stereotype.Repository;
+
+import javax.sql.DataSource;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+
+
+@Repository
+public class SysMsgLogDaoImpl implements SysMsgLogDao {
+
+    @Autowired
+    public DataSource dataSource;
+
+    public static class SysMsgLogRowMapper implements RowMapper {
+        public SysMsgLog mapRow(ResultSet resultSet, int rowNum) throws SQLException {
+            SysMsgLog model = new SysMsgLog();
+
+            model.setId(resultSet.getString("id"));
+            model.setPhone(resultSet.getString("phone"));
+            model.setMsg(resultSet.getString("msg"));
+            model.setSendtime(resultSet.getDate("sendtime"));
+            return model;
+        }
+    }
+
+    public List<SysMsgLog> selectList(String whereCase, Object[] paramValues) {
+        String sql = "select t.id, t.phone, t.msg, t.sendtime from sys_msg_log t  " + whereCase;
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return jdbcTemplate.query(sql, paramValues, new SysMsgLogRowMapper());
+    }
+
+    @Override
+    public Integer insert(SysMsgLog model) {
+
+        String sql = "insert into sys_msg_log ( id, phone, msg, sendtime) values ( ?, ?, ?, ?) ";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        Object[] params = new Object[]{model.getId(), model.getPhone(), model.getMsg(), model.getSendtime()};
+
+        int out = jdbcTemplate.update(sql, params);
+
+        return out;
+    }
+
+}
+
+
+

+ 319 - 0
src/main/java/com/ydtech/modules/admin/dao/impl/SysRoleDaoImpl.java

@@ -0,0 +1,319 @@
+
+
+
+package com.ydtech.modules.admin.dao.impl;
+
+import com.github.drinkjava2.jdialects.Dialect;
+import com.ydtech.core.page.PageResult;
+import com.ydtech.modules.admin.dao.SysRoleDao;
+import com.ydtech.modules.admin.model.SysRole;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.dao.support.DataAccessUtils;
+import org.springframework.jdbc.core.*;
+import org.springframework.jdbc.support.GeneratedKeyHolder;
+import org.springframework.jdbc.support.KeyHolder;
+import org.springframework.stereotype.Repository;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+
+@Repository
+public class SysRoleDaoImpl implements SysRoleDao {
+
+    @Autowired
+    public DataSource dataSource;
+
+    public static class SysRoleRowMapper implements RowMapper {
+        public SysRole mapRow(ResultSet resultSet, int rowNum) throws SQLException {
+            SysRole model = new SysRole();
+
+            model.setId(resultSet.getLong("id"));
+            model.setName(resultSet.getString("name"));
+            model.setRemark(resultSet.getString("remark"));
+            model.setCreateBy(resultSet.getString("create_by"));
+            model.setCreateTime(resultSet.getDate("create_time"));
+            model.setLastUpdateBy(resultSet.getString("last_update_by"));
+            model.setLastUpdateTime(resultSet.getDate("last_update_time"));
+            model.setDelFlag(resultSet.getInt("del_flag"));
+            return model;
+        }
+    }
+
+    @Override
+    public SysRole selectByPk(Long id) {
+        String sql = "select t.id, t.name, t.remark, t.create_by, t.create_time, t.last_update_by, t.last_update_time, t.del_flag from sys_role t  where id=?";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        List<SysRole> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<SysRole>(SysRole.class), new Object[]{id});
+
+        return DataAccessUtils.uniqueResult(query);
+    }
+
+    @Override
+    public List<SysRole> selectAll() {
+        String sql = "select t.id, t.name, t.remark, t.create_by, t.create_time, t.last_update_by, t.last_update_time, t.del_flag from sys_role t  ";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return jdbcTemplate.query(sql, new SysRoleRowMapper());
+    }
+
+    public List<SysRole> selectList(String whereCase, Object[] paramValues) {
+        String sql = "select t.id, t.name, t.remark, t.create_by, t.create_time, t.last_update_by, t.last_update_time, t.del_flag from sys_role t  " + whereCase;
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return jdbcTemplate.query(sql, paramValues, new SysRoleRowMapper());
+    }
+
+    public Integer count(String whereCase, Object[] paramValues) {
+        String sql = "select count(1) from sys_role t " + whereCase;
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return jdbcTemplate.queryForObject(sql, paramValues, Integer.class);
+    }
+
+    public PageResult selectPaging(int pageNumber, int pageSize, String whereCase, Object[] paramValues) {
+
+        Dialect dialect = Dialect.guessDialect(dataSource);
+        String sql = dialect.pagin(pageNumber, pageSize, "select t.id, t.name, t.remark, t.create_by, t.create_time, t.last_update_by, t.last_update_time, t.del_flag from sys_role t  " + whereCase);
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+        List<SysRole> recordList = jdbcTemplate.query(sql, paramValues, new SysRoleRowMapper());
+
+        int totalCount = count(whereCase, paramValues);
+
+        PageResult PageResult = new PageResult(pageNumber, pageSize, totalCount, recordList);
+
+        return PageResult;
+    }
+
+
+    @Override
+    public Integer insert(SysRole model) {
+
+        String sql = "insert into sys_role ( id, name, remark, create_by, create_time, last_update_by, last_update_time, del_flag) values ( ?, ?, ?, ?, ?, ?, ?, ?) ";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        Object[] params = new Object[]{model.getId(), model.getName(), model.getRemark(), model.getCreateBy(), model.getCreateTime(), model.getLastUpdateBy(), model.getLastUpdateTime(), model.getDelFlag()};
+
+        int out = jdbcTemplate.update(sql, params);
+
+        return out;
+    }
+
+    @Override
+    public Integer insertReturnPk(SysRole model) {
+
+        String sql = "insert into sys_role ( id, name, remark, create_by, create_time, last_update_by, last_update_time, del_flag) values ( ?, ?, ?, ?, ?, ?, ?, ?) ";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        KeyHolder keyHolder = new GeneratedKeyHolder();
+        jdbcTemplate.update(new PreparedStatementCreator() {
+            @Override
+            public PreparedStatement createPreparedStatement(Connection conn) throws SQLException {
+                PreparedStatement ps = conn.prepareStatement(sql, PreparedStatement.RETURN_GENERATED_KEYS);
+                ps.setObject(1, model.getId());
+                ps.setObject(2, model.getName());
+                ps.setObject(3, model.getRemark());
+                ps.setObject(4, model.getCreateBy());
+                ps.setObject(5, model.getCreateTime());
+                ps.setObject(6, model.getLastUpdateBy());
+                ps.setObject(7, model.getLastUpdateTime());
+                ps.setObject(8, model.getDelFlag());
+                return ps;
+            }
+        }, keyHolder);
+
+        return keyHolder.getKey().intValue();
+    }
+
+
+    @Override
+    public Integer insertSelective(SysRole model) {
+
+        StringBuffer sbSql = new StringBuffer();
+        StringBuffer sbParams = new StringBuffer();
+        ArrayList<Object> alParamsValues = new ArrayList<Object>();
+
+        String pre = "";
+
+        if (model.getId() != null) {
+            sbSql.append(pre + "id");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getId());
+            pre = ",";
+        }
+        if (model.getName() != null) {
+            sbSql.append(pre + "name");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getName());
+            pre = ",";
+        }
+        if (model.getRemark() != null) {
+            sbSql.append(pre + "remark");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getRemark());
+            pre = ",";
+        }
+        if (model.getCreateBy() != null) {
+            sbSql.append(pre + "create_by");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getCreateBy());
+            pre = ",";
+        }
+        if (model.getCreateTime() != null) {
+            sbSql.append(pre + "create_time");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getCreateTime());
+            pre = ",";
+        }
+        if (model.getLastUpdateBy() != null) {
+            sbSql.append(pre + "last_update_by");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getLastUpdateBy());
+            pre = ",";
+        }
+        if (model.getLastUpdateTime() != null) {
+            sbSql.append(pre + "last_update_time");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getLastUpdateTime());
+            pre = ",";
+        }
+        if (model.getDelFlag() != null) {
+            sbSql.append(pre + "del_flag");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getDelFlag());
+            pre = ",";
+        }
+
+
+        String sql = "INSERT INTO sys_role (" + sbSql.toString() + ") VALUES (" + sbParams.toString() + ")";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        Object[] params = alParamsValues.toArray();
+
+        int out = jdbcTemplate.update(sql, params);
+
+        return out;
+    }
+
+    @Override
+    public Integer update(SysRole model) {
+
+        String sql = "update sys_role set name=?, remark=?, create_by=?, create_time=?, last_update_by=?, last_update_time=?, del_flag=? where id=?";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        Object[] params = new Object[]{model.getName(), model.getRemark(), model.getCreateBy(), model.getCreateTime(), model.getLastUpdateBy(), model.getLastUpdateTime(), model.getDelFlag(), model.getId()};
+
+        return jdbcTemplate.update(sql, params);
+    }
+
+    @Override
+    public Integer updateSelective(SysRole model) {
+
+        StringBuffer sbSql = new StringBuffer();
+        StringBuffer sbParams = new StringBuffer();
+        ArrayList<Object> alParamsValues = new ArrayList<Object>();
+
+        String pre = "";
+        String preWhere = "";
+
+        if (model.getName() != null) {
+            sbSql.append(pre + "name=?");
+            alParamsValues.add(model.getName());
+            pre = ",";
+        }
+        if (model.getRemark() != null) {
+            sbSql.append(pre + "remark=?");
+            alParamsValues.add(model.getRemark());
+            pre = ",";
+        }
+        if (model.getCreateBy() != null) {
+            sbSql.append(pre + "create_by=?");
+            alParamsValues.add(model.getCreateBy());
+            pre = ",";
+        }
+        if (model.getCreateTime() != null) {
+            sbSql.append(pre + "create_time=?");
+            alParamsValues.add(model.getCreateTime());
+            pre = ",";
+        }
+        if (model.getLastUpdateBy() != null) {
+            sbSql.append(pre + "last_update_by=?");
+            alParamsValues.add(model.getLastUpdateBy());
+            pre = ",";
+        }
+        if (model.getLastUpdateTime() != null) {
+            sbSql.append(pre + "last_update_time=?");
+            alParamsValues.add(model.getLastUpdateTime());
+            pre = ",";
+        }
+        if (model.getDelFlag() != null) {
+            sbSql.append(pre + "del_flag=?");
+            alParamsValues.add(model.getDelFlag());
+            pre = ",";
+        }
+        if (model.getId() != null) {
+            sbParams.append(preWhere + "id=?");
+            alParamsValues.add(model.getId());
+            preWhere = ",";
+        }
+
+
+        if (!sbSql.toString().equalsIgnoreCase("")) {
+            String sql = "update sys_role set " + sbSql.toString() + " where " + sbParams.toString();
+
+            JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+            Object[] params = alParamsValues.toArray();
+
+            return jdbcTemplate.update(sql, params);
+        }
+
+        return 0;
+    }
+
+    @Override
+    public Integer delete(Long id) {
+
+        String sql = "delete from sys_role where id=?";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return jdbcTemplate.update(sql, id);
+    }
+
+    @Override
+    public Integer delete(List<SysRole> lsSysRole) {
+        String sql = "delete from sys_role where id=?";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
+            @Override
+            public void setValues(PreparedStatement preparedStatement, int i) throws SQLException {
+                preparedStatement.setLong(1, lsSysRole.get(i).getId());
+            }
+
+            @Override
+            public int getBatchSize() {
+                return lsSysRole.size();
+            }
+        }).length;
+    }
+}
+
+

+ 307 - 0
src/main/java/com/ydtech/modules/admin/dao/impl/SysRoleMenuDaoImpl.java

@@ -0,0 +1,307 @@
+package com.ydtech.modules.admin.dao.impl;
+
+import com.ydtech.modules.admin.dao.SysRoleMenuDao;
+import com.ydtech.modules.admin.model.SysRoleMenu;
+import com.ydtech.core.page.PageResult;
+import com.github.drinkjava2.jdialects.Dialect;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.core.PreparedStatementCreator;
+import org.springframework.jdbc.core.BatchPreparedStatementSetter;
+import org.springframework.jdbc.core.RowMapper;
+import org.springframework.jdbc.support.GeneratedKeyHolder;
+import org.springframework.jdbc.support.KeyHolder;
+import org.springframework.stereotype.Repository;
+
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import java.util.List;
+import java.util.ArrayList;
+
+
+@Repository
+public class SysRoleMenuDaoImpl implements SysRoleMenuDao {
+
+    @Autowired
+    public DataSource dataSource;
+
+    public static class SysRoleMenuRowMapper implements RowMapper {
+        public SysRoleMenu mapRow(ResultSet resultSet, int rowNum) throws SQLException {
+            SysRoleMenu model = new SysRoleMenu();
+
+            model.setId(resultSet.getLong("id"));
+            model.setRoleId(resultSet.getLong("role_id"));
+            model.setMenuId(resultSet.getLong("menu_id"));
+            model.setCreateBy(resultSet.getString("create_by"));
+            model.setCreateTime(resultSet.getDate("create_time"));
+            model.setLastUpdateBy(resultSet.getString("last_update_by"));
+            model.setLastUpdateTime(resultSet.getDate("last_update_time"));
+            return model;
+        }
+    }
+
+    @Override
+    public SysRoleMenu selectByPk(Long id) {
+        String sql = "select t.id, t.role_id, t.menu_id, t.create_by, t.create_time, t.last_update_by, t.last_update_time from sys_role_menu t  where id=?";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return (SysRoleMenu) jdbcTemplate.queryForObject(sql,
+                new Object[]{id}, new SysRoleMenuRowMapper());
+    }
+
+    @Override
+    public List<SysRoleMenu> selectAll() {
+        String sql = "select t.id, t.role_id, t.menu_id, t.create_by, t.create_time, t.last_update_by, t.last_update_time from sys_role_menu t  ";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return jdbcTemplate.query(sql, new SysRoleMenuRowMapper());
+    }
+
+    public List<SysRoleMenu> selectList(String whereCase, Object[] paramValues) {
+        String sql = "select t.id, t.role_id, t.menu_id, t.create_by, t.create_time, t.last_update_by, t.last_update_time from sys_role_menu t  " + whereCase;
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return jdbcTemplate.query(sql, paramValues, new SysRoleMenuRowMapper());
+    }
+
+    public Integer count(String whereCase, Object[] paramValues) {
+        String sql = "select count(1) from sys_role_menu t " + whereCase;
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return jdbcTemplate.queryForObject(sql, paramValues, Integer.class);
+    }
+
+    public PageResult selectPaging(int pageNumber, int pageSize, String whereCase, Object[] paramValues) {
+
+        Dialect dialect = Dialect.guessDialect(dataSource);
+        String sql = dialect.pagin(pageNumber, pageSize, "select t.id, t.role_id, t.menu_id, t.create_by, t.create_time, t.last_update_by, t.last_update_time from sys_role_menu t  " + whereCase);
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+        List<SysRoleMenu> recordList = jdbcTemplate.query(sql, paramValues, new SysRoleMenuRowMapper());
+
+        int totalCount = count(whereCase, paramValues);
+
+        PageResult PageResult = new PageResult(pageNumber, pageSize, totalCount, recordList);
+
+        return PageResult;
+    }
+
+
+    @Override
+    public Integer insert(SysRoleMenu model) {
+
+        String sql = "insert into sys_role_menu ( id, role_id, menu_id, create_by, create_time, last_update_by, last_update_time) values ( ?, ?, ?, ?, ?, ?, ?) ";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        Object[] params = new Object[]{model.getId(), model.getRoleId(), model.getMenuId(), model.getCreateBy(), model.getCreateTime(), model.getLastUpdateBy(), model.getLastUpdateTime()};
+
+        int out = jdbcTemplate.update(sql, params);
+
+        return out;
+    }
+
+    @Override
+    public Integer insertReturnPk(SysRoleMenu model) {
+
+        String sql = "insert into sys_role_menu ( id, role_id, menu_id, create_by, create_time, last_update_by, last_update_time) values ( ?, ?, ?, ?, ?, ?, ?) ";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        KeyHolder keyHolder = new GeneratedKeyHolder();
+        jdbcTemplate.update(new PreparedStatementCreator() {
+            @Override
+            public PreparedStatement createPreparedStatement(Connection conn) throws SQLException {
+                PreparedStatement ps = conn.prepareStatement(sql, PreparedStatement.RETURN_GENERATED_KEYS);
+                ps.setObject(1, model.getId());
+                ps.setObject(2, model.getRoleId());
+                ps.setObject(3, model.getMenuId());
+                ps.setObject(4, model.getCreateBy());
+                ps.setObject(5, model.getCreateTime());
+                ps.setObject(6, model.getLastUpdateBy());
+                ps.setObject(7, model.getLastUpdateTime());
+                return ps;
+            }
+        }, keyHolder);
+
+        return keyHolder.getKey().intValue();
+    }
+
+
+    @Override
+    public Integer insertSelective(SysRoleMenu model) {
+
+        StringBuffer sbSql = new StringBuffer();
+        StringBuffer sbParams = new StringBuffer();
+        ArrayList<Object> alParamsValues = new ArrayList<Object>();
+
+        String pre = "";
+
+        if (model.getId() != null) {
+            sbSql.append(pre + "id");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getId());
+            pre = ",";
+        }
+        if (model.getRoleId() != null) {
+            sbSql.append(pre + "role_id");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getRoleId());
+            pre = ",";
+        }
+        if (model.getMenuId() != null) {
+            sbSql.append(pre + "menu_id");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getMenuId());
+            pre = ",";
+        }
+        if (model.getCreateBy() != null) {
+            sbSql.append(pre + "create_by");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getCreateBy());
+            pre = ",";
+        }
+        if (model.getCreateTime() != null) {
+            sbSql.append(pre + "create_time");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getCreateTime());
+            pre = ",";
+        }
+        if (model.getLastUpdateBy() != null) {
+            sbSql.append(pre + "last_update_by");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getLastUpdateBy());
+            pre = ",";
+        }
+        if (model.getLastUpdateTime() != null) {
+            sbSql.append(pre + "last_update_time");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getLastUpdateTime());
+            pre = ",";
+        }
+
+
+        String sql = "INSERT INTO sys_role_menu (" + sbSql.toString() + ") VALUES (" + sbParams.toString() + ")";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        Object[] params = alParamsValues.toArray();
+
+        int out = jdbcTemplate.update(sql, params);
+
+        return out;
+    }
+
+    @Override
+    public Integer update(SysRoleMenu model) {
+
+        String sql = "update sys_role_menu set role_id=?, menu_id=?, create_by=?, create_time=?, last_update_by=?, last_update_time=? where id=?";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        Object[] params = new Object[]{model.getRoleId(), model.getMenuId(), model.getCreateBy(), model.getCreateTime(), model.getLastUpdateBy(), model.getLastUpdateTime(), model.getId()};
+
+        return jdbcTemplate.update(sql, params);
+    }
+
+    @Override
+    public Integer updateSelective(SysRoleMenu model) {
+
+        StringBuffer sbSql = new StringBuffer();
+        StringBuffer sbParams = new StringBuffer();
+        ArrayList<Object> alParamsValues = new ArrayList<Object>();
+
+        String pre = "";
+        String preWhere = "";
+
+        if (model.getRoleId() != null) {
+            sbSql.append(pre + "role_id=?");
+            alParamsValues.add(model.getRoleId());
+            pre = ",";
+        }
+        if (model.getMenuId() != null) {
+            sbSql.append(pre + "menu_id=?");
+            alParamsValues.add(model.getMenuId());
+            pre = ",";
+        }
+        if (model.getCreateBy() != null) {
+            sbSql.append(pre + "create_by=?");
+            alParamsValues.add(model.getCreateBy());
+            pre = ",";
+        }
+        if (model.getCreateTime() != null) {
+            sbSql.append(pre + "create_time=?");
+            alParamsValues.add(model.getCreateTime());
+            pre = ",";
+        }
+        if (model.getLastUpdateBy() != null) {
+            sbSql.append(pre + "last_update_by=?");
+            alParamsValues.add(model.getLastUpdateBy());
+            pre = ",";
+        }
+        if (model.getLastUpdateTime() != null) {
+            sbSql.append(pre + "last_update_time=?");
+            alParamsValues.add(model.getLastUpdateTime());
+            pre = ",";
+        }
+        if (model.getId() != null) {
+            sbParams.append(preWhere + "id=?");
+            alParamsValues.add(model.getId());
+            preWhere = ",";
+        }
+
+
+        if (!sbSql.toString().equalsIgnoreCase("")) {
+            String sql = "update sys_role_menu set " + sbSql.toString() + " where " + sbParams.toString();
+
+            JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+            Object[] params = alParamsValues.toArray();
+
+            return jdbcTemplate.update(sql, params);
+        }
+
+        return 0;
+    }
+
+    @Override
+    public Integer delete(Long id) {
+
+        String sql = "delete from sys_role_menu where id=?";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return jdbcTemplate.update(sql, id);
+    }
+
+    @Override
+    public Integer delete(List<SysRoleMenu> lsSysRoleMenu) {
+        String sql = "delete from sys_role_menu where id=?";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
+            @Override
+            public void setValues(PreparedStatement preparedStatement, int i) throws SQLException {
+                preparedStatement.setLong(1, lsSysRoleMenu.get(i).getId());
+            }
+
+            @Override
+            public int getBatchSize() {
+                return lsSysRoleMenu.size();
+            }
+        }).length;
+    }
+}
+
+
+

+ 503 - 0
src/main/java/com/ydtech/modules/admin/dao/impl/SysUserDaoImpl.java

@@ -0,0 +1,503 @@
+package com.ydtech.modules.admin.dao.impl;
+
+import com.github.drinkjava2.jdialects.Dialect;
+import com.ydtech.core.page.PageResult;
+import com.ydtech.modules.admin.dao.SysUserDao;
+import com.ydtech.modules.admin.model.SysUser;
+import com.ydtech.modules.admin.vo.SysUserVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jdbc.core.*;
+import org.springframework.jdbc.support.GeneratedKeyHolder;
+import org.springframework.jdbc.support.KeyHolder;
+import org.springframework.stereotype.Repository;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+
+@Repository
+public class SysUserDaoImpl implements SysUserDao {
+
+    @Autowired
+    public DataSource dataSource;
+
+    public static class SysUserRowMapper implements RowMapper {
+        public SysUser mapRow(ResultSet resultSet, int rowNum) throws SQLException {
+            SysUser model = new SysUser();
+
+            model.setId(resultSet.getString("id"));
+            model.setName(resultSet.getString("name"));
+            model.setPassword(resultSet.getString("password"));
+            model.setSalt(resultSet.getString("salt"));
+            model.setEmail(resultSet.getString("email"));
+            model.setMobile(resultSet.getString("mobile"));
+            model.setStatus(resultSet.getInt("status"));
+            model.setDeptId(resultSet.getString("dept_id"));
+            model.setCreateBy(resultSet.getString("create_by"));
+            model.setCreateTime(resultSet.getDate("create_time"));
+            model.setLastUpdateBy(resultSet.getString("last_update_by"));
+            model.setLastUpdateTime(resultSet.getDate("last_update_time"));
+            model.setDelFlag(resultSet.getInt("del_flag"));
+            model.setUsertype(resultSet.getString("usertype"));
+            model.setTenantId(resultSet.getString("tenant_id"));
+            model.setSex(resultSet.getString("sex"));
+            model.setJobCode(resultSet.getString("job_code"));
+            return model;
+        }
+    }
+
+    public static class SysUserVORowMapper implements RowMapper {
+        public SysUserVO mapRow(ResultSet resultSet, int rowNum) throws SQLException {
+            SysUserVO model = new SysUserVO();
+
+            model.setId(resultSet.getString("id"));
+            model.setName(resultSet.getString("name"));
+            model.setDeptid(resultSet.getString("deptid"));
+            model.setDeptname(resultSet.getString("deptname"));
+            model.setComid(resultSet.getString("comid"));
+            model.setComname(resultSet.getString("comname"));
+            model.setStatus(resultSet.getString("status"));
+            return model;
+        }
+    }
+
+    @Override
+    public SysUser selectByPk(String id) {
+        String sql = "select t.id, t.name, t.password, t.salt, t.email, t.mobile, t.status, t.dept_id, t.create_by, t.create_time, t.last_update_by, t.last_update_time, t.del_flag, t.usertype, t.tenant_id, t.sex, t.job_code from sys_user t  where id=?";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        List<SysUser> ls = jdbcTemplate.query(sql, new BeanPropertyRowMapper<SysUser>(SysUser.class), new Object[]{id});
+
+        if (ls != null && ls.size() > 0) {
+            return ls.get(0);
+        }
+
+        return null;
+    }
+
+    @Override
+    public SysUserVO selectById(String id) {
+        String sql = "select t.id,t.name,t.dept_id deptid,t2.name deptname,t3.id comid,t3.name comname,t.status " +
+                "from sys_user t left join sys_dept t2 on t.dept_id=t2.id " +
+                "left join sys_dept t3 on t2.parent_id=t3.id " +
+                "left join esm_user_internal a on t.id=a.id " +
+                "where t.id=?";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        List<SysUserVO> ls = jdbcTemplate.query(sql, new BeanPropertyRowMapper<SysUserVO>(SysUserVO.class), new Object[]{id});
+
+        if (ls != null && ls.size() > 0) {
+            return ls.get(0);
+        }
+
+        return null;
+    }
+
+    /**
+     * 根据部门ID查询该部门下的团队长信息
+     *
+     * @param deptId
+     * @return
+     */
+    @Override
+    public SysUserVO selectByDeptId(String deptId) {
+        String sql = "select t1.id,t1.name,t1.dept_id deptid,sd.name deptname,sd2.id comid,sd2.name comname,t2.status " +
+                "from sys_user t1 left join esm_user_internal t2 on t1.id=t2.id " +
+                "LEFT JOIN sys_dept sd ON t1.dept_id=sd.id " +
+                "LEFT JOIN sys_dept sd2 ON sd2.id=sd.parent_id " +
+                "where 1=1  and t2.isteamleader = '1' and t1.dept_id=?";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        List<SysUserVO> ls = jdbcTemplate.query(sql, new BeanPropertyRowMapper<SysUserVO>(SysUserVO.class), new Object[]{deptId});
+
+        if (ls != null && ls.size() > 0) {
+            return ls.get(0);
+        }
+
+        return null;
+    }
+
+    @Override
+    public List<SysUser> selectAll() {
+        String sql = "select t.id, t.name, t.password, t.salt, t.email, t.mobile, t.status, t.dept_id, t.create_by, t.create_time, t.last_update_by, t.last_update_time, t.del_flag, t.usertype, t.tenant_id, t.sex, t.job_code from sys_user t  ";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return jdbcTemplate.query(sql, new SysUserRowMapper());
+    }
+
+    public List<SysUser> selectList(String whereCase, Object[] paramValues) {
+        String sql = "select t.id, t.name, t.password, t.salt, t.email, t.mobile, t.status, t.dept_id, t.create_by, t.create_time, t.last_update_by, t.last_update_time, t.del_flag, t.usertype, t.tenant_id, t.sex, t.job_code from sys_user t  " + whereCase;
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return jdbcTemplate.query(sql, paramValues, new SysUserRowMapper());
+    }
+
+    public Integer count(String whereCase, Object[] paramValues) {
+        String sql = "select count(1) from sys_user t " + whereCase;
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return jdbcTemplate.queryForObject(sql, paramValues, Integer.class);
+    }
+
+    public PageResult selectPaging(int pageNumber, int pageSize, String whereCase, Object[] paramValues) {
+
+        Dialect dialect = Dialect.guessDialect(dataSource);
+        String sql = dialect.pagin(pageNumber, pageSize, "select t.id, t.name, t.password, t.salt, t.email, t.mobile, t.status, t.dept_id, t.create_by, t.create_time, t.last_update_by, t.last_update_time, t.del_flag, t.usertype, t.tenant_id, t.sex, t.job_code from sys_user t  " + whereCase);
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+        List<SysUser> recordList = jdbcTemplate.query(sql, paramValues, new SysUserRowMapper());
+
+        int totalCount = count(whereCase, paramValues);
+
+        PageResult PageResult = new PageResult(pageNumber, pageSize, totalCount, recordList);
+
+        return PageResult;
+    }
+
+
+    @Override
+    public Integer insert(SysUser model) {
+
+        String sql = "insert into sys_user ( id, name, password, salt, email, mobile, status, dept_id, create_by, create_time, last_update_by, last_update_time, del_flag, usertype, tenant_id, sex, job_code) values ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        Object[] params = new Object[]{model.getId(), model.getName(), model.getPassword(), model.getSalt(), model.getEmail(), model.getMobile(), model.getStatus(), model.getDeptId(), model.getCreateBy(), model.getCreateTime(), model.getLastUpdateBy(), model.getLastUpdateTime(), model.getDelFlag(), model.getUsertype(), model.getTenantId(), model.getSex(), model.getJobCode()};
+
+        int out = jdbcTemplate.update(sql, params);
+
+        return out;
+    }
+
+    @Override
+    public Integer insertReturnPk(SysUser model) {
+
+        String sql = "insert into sys_user ( id, name, password, salt, email, mobile, status, dept_id, create_by, create_time, last_update_by, last_update_time, del_flag, usertype, tenant_id, sex, job_code) values ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        KeyHolder keyHolder = new GeneratedKeyHolder();
+        jdbcTemplate.update(new PreparedStatementCreator() {
+            @Override
+            public PreparedStatement createPreparedStatement(Connection conn) throws SQLException {
+                PreparedStatement ps = conn.prepareStatement(sql, PreparedStatement.RETURN_GENERATED_KEYS);
+                ps.setObject(1, model.getId());
+                ps.setObject(2, model.getName());
+                ps.setObject(3, model.getPassword());
+                ps.setObject(4, model.getSalt());
+                ps.setObject(5, model.getEmail());
+                ps.setObject(6, model.getMobile());
+                ps.setObject(7, model.getStatus());
+                ps.setObject(8, model.getDeptId());
+                ps.setObject(9, model.getCreateBy());
+                ps.setObject(10, model.getCreateTime());
+                ps.setObject(11, model.getLastUpdateBy());
+                ps.setObject(12, model.getLastUpdateTime());
+                ps.setObject(13, model.getDelFlag());
+                ps.setObject(14, model.getUsertype());
+                ps.setObject(15, model.getTenantId());
+                ps.setObject(16, model.getSex());
+                ps.setObject(17, model.getJobCode());
+                return ps;
+            }
+        }, keyHolder);
+
+        return keyHolder.getKey().intValue();
+    }
+
+
+    @Override
+    public Integer insertSelective(SysUser model) {
+
+        StringBuffer sbSql = new StringBuffer();
+        StringBuffer sbParams = new StringBuffer();
+        ArrayList<Object> alParamsValues = new ArrayList<Object>();
+
+        String pre = "";
+
+        if (model.getId() != null) {
+            sbSql.append(pre + "id");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getId());
+            pre = ",";
+        }
+        if (model.getName() != null) {
+            sbSql.append(pre + "name");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getName());
+            pre = ",";
+        }
+        if (model.getPassword() != null) {
+            sbSql.append(pre + "password");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getPassword());
+            pre = ",";
+        }
+        if (model.getSalt() != null) {
+            sbSql.append(pre + "salt");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getSalt());
+            pre = ",";
+        }
+        if (model.getEmail() != null) {
+            sbSql.append(pre + "email");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getEmail());
+            pre = ",";
+        }
+        if (model.getMobile() != null) {
+            sbSql.append(pre + "mobile");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getMobile());
+            pre = ",";
+        }
+        if (model.getStatus() != null) {
+            sbSql.append(pre + "status");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getStatus());
+            pre = ",";
+        }
+        if (model.getDeptId() != null) {
+            sbSql.append(pre + "dept_id");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getDeptId());
+            pre = ",";
+        }
+        if (model.getCreateBy() != null) {
+            sbSql.append(pre + "create_by");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getCreateBy());
+            pre = ",";
+        }
+        if (model.getCreateTime() != null) {
+            sbSql.append(pre + "create_time");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getCreateTime());
+            pre = ",";
+        }
+        if (model.getLastUpdateBy() != null) {
+            sbSql.append(pre + "last_update_by");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getLastUpdateBy());
+            pre = ",";
+        }
+        if (model.getLastUpdateTime() != null) {
+            sbSql.append(pre + "last_update_time");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getLastUpdateTime());
+            pre = ",";
+        }
+        if (model.getDelFlag() != null) {
+            sbSql.append(pre + "del_flag");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getDelFlag());
+            pre = ",";
+        }
+        if (model.getUsertype() != null) {
+            sbSql.append(pre + "usertype");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getUsertype());
+            pre = ",";
+        }
+        if (model.getTenantId() != null) {
+            sbSql.append(pre + "tenant_id");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getTenantId());
+            pre = ",";
+        }
+        if (model.getSex() != null) {
+            sbSql.append(pre + "sex");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getSex());
+            pre = ",";
+        }
+        if (model.getJobCode() != null) {
+            sbSql.append(pre + "job_code");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getJobCode());
+            pre = ",";
+        }
+        if (model.getOpenid() != null) {
+            sbSql.append(pre + "openid");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getOpenid());
+            pre = ",";
+        }
+
+        String sql = "INSERT INTO sys_user (" + sbSql.toString() + ") VALUES (" + sbParams.toString() + ")";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        Object[] params = alParamsValues.toArray();
+
+        int out = jdbcTemplate.update(sql, params);
+
+        return out;
+    }
+
+    @Override
+    public Integer update(SysUser model) {
+
+        String sql = "update sys_user set name=?, password=?, salt=?, email=?, mobile=?, status=?, dept_id=?, create_by=?, create_time=?, last_update_by=?, last_update_time=?, del_flag=?, usertype=?, tenant_id=?, sex=?, job_code=? where id=?";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        Object[] params = new Object[]{model.getName(), model.getPassword(), model.getSalt(), model.getEmail(), model.getMobile(), model.getStatus(), model.getDeptId(), model.getCreateBy(), model.getCreateTime(), model.getLastUpdateBy(), model.getLastUpdateTime(), model.getDelFlag(), model.getUsertype(), model.getTenantId(), model.getSex(), model.getJobCode(), model.getId()};
+
+        return jdbcTemplate.update(sql, params);
+    }
+
+    @Override
+    public Integer updateSelective(SysUser model) {
+
+        StringBuffer sbSql = new StringBuffer();
+        StringBuffer sbParams = new StringBuffer();
+        ArrayList<Object> alParamsValues = new ArrayList<Object>();
+
+        String pre = "";
+        String preWhere = "";
+
+        if (model.getName() != null) {
+            sbSql.append(pre + "name=?");
+            alParamsValues.add(model.getName());
+            pre = ",";
+        }
+        if (model.getPassword() != null) {
+            sbSql.append(pre + "password=?");
+            alParamsValues.add(model.getPassword());
+            pre = ",";
+        }
+        if (model.getSalt() != null) {
+            sbSql.append(pre + "salt=?");
+            alParamsValues.add(model.getSalt());
+            pre = ",";
+        }
+        if (model.getEmail() != null) {
+            sbSql.append(pre + "email=?");
+            alParamsValues.add(model.getEmail());
+            pre = ",";
+        }
+        if (model.getMobile() != null) {
+            sbSql.append(pre + "mobile=?");
+            alParamsValues.add(model.getMobile());
+            pre = ",";
+        }
+        if (model.getStatus() != null) {
+            sbSql.append(pre + "status=?");
+            alParamsValues.add(model.getStatus());
+            pre = ",";
+        }
+        if (model.getDeptId() != null) {
+            sbSql.append(pre + "dept_id=?");
+            alParamsValues.add(model.getDeptId());
+            pre = ",";
+        }
+        if (model.getCreateBy() != null) {
+            sbSql.append(pre + "create_by=?");
+            alParamsValues.add(model.getCreateBy());
+            pre = ",";
+        }
+        if (model.getCreateTime() != null) {
+            sbSql.append(pre + "create_time=?");
+            alParamsValues.add(model.getCreateTime());
+            pre = ",";
+        }
+        if (model.getLastUpdateBy() != null) {
+            sbSql.append(pre + "last_update_by=?");
+            alParamsValues.add(model.getLastUpdateBy());
+            pre = ",";
+        }
+        if (model.getLastUpdateTime() != null) {
+            sbSql.append(pre + "last_update_time=?");
+            alParamsValues.add(model.getLastUpdateTime());
+            pre = ",";
+        }
+        if (model.getDelFlag() != null) {
+            sbSql.append(pre + "del_flag=?");
+            alParamsValues.add(model.getDelFlag());
+            pre = ",";
+        }
+        if (model.getUsertype() != null) {
+            sbSql.append(pre + "usertype=?");
+            alParamsValues.add(model.getUsertype());
+            pre = ",";
+        }
+        if (model.getTenantId() != null) {
+            sbSql.append(pre + "tenant_id=?");
+            alParamsValues.add(model.getTenantId());
+            pre = ",";
+        }
+        if (model.getSex() != null) {
+            sbSql.append(pre + "sex=?");
+            alParamsValues.add(model.getSex());
+            pre = ",";
+        }
+        if (model.getJobCode() != null) {
+            sbSql.append(pre + "job_code=?");
+            alParamsValues.add(model.getJobCode());
+            pre = ",";
+        }
+        if (model.getId() != null) {
+            sbParams.append(preWhere + "id=?");
+            alParamsValues.add(model.getId());
+            preWhere = ",";
+        }
+
+
+        if (!sbSql.toString().equalsIgnoreCase("")) {
+            String sql = "update sys_user set " + sbSql.toString() + " where " + sbParams.toString();
+
+            JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+            Object[] params = alParamsValues.toArray();
+
+            return jdbcTemplate.update(sql, params);
+        }
+
+        return 0;
+    }
+
+    @Override
+    public Integer delete(String id) {
+
+        String sql = "delete from sys_user where id=?";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return jdbcTemplate.update(sql, id);
+    }
+
+    @Override
+    public Integer delete(List<SysUser> lsSysUser) {
+        String sql = "delete from sys_user where id=?";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
+            @Override
+            public void setValues(PreparedStatement preparedStatement, int i) throws SQLException {
+                preparedStatement.setString(1, lsSysUser.get(i).getId());
+            }
+
+            @Override
+            public int getBatchSize() {
+                return lsSysUser.size();
+            }
+        }).length;
+    }
+}
+
+
+
+

+ 359 - 0
src/main/java/com/ydtech/modules/admin/dao/impl/SysUserRoleDaoImpl.java

@@ -0,0 +1,359 @@
+package com.ydtech.modules.admin.dao.impl;
+
+import com.ydtech.modules.admin.dao.SysUserRoleDao;
+import com.ydtech.modules.admin.model.SysUserRole;
+import com.ydtech.core.page.PageResult;
+import com.github.drinkjava2.jdialects.Dialect;
+import com.ydtech.modules.admin.vo.UserRoleVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.core.PreparedStatementCreator;
+import org.springframework.jdbc.core.RowMapper;
+import org.springframework.jdbc.support.GeneratedKeyHolder;
+import org.springframework.jdbc.support.KeyHolder;
+import org.springframework.stereotype.Repository;
+import org.springframework.jdbc.core.BatchPreparedStatementSetter;
+
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import java.util.Date;
+import java.util.List;
+import java.util.ArrayList;
+
+
+@Repository
+public class SysUserRoleDaoImpl implements SysUserRoleDao {
+
+    @Autowired
+    public DataSource dataSource;
+
+
+    public static class SysUserRoleRowMapper implements RowMapper {
+        public SysUserRole mapRow(ResultSet resultSet, int rowNum) throws SQLException {
+            SysUserRole model = new SysUserRole();
+
+            model.setId(resultSet.getLong("id"));
+            model.setUserId(resultSet.getString("user_id"));
+            model.setRoleId(Long.parseLong(resultSet.getString("role_id")));
+            model.setCreateBy(resultSet.getString("create_by"));
+            model.setCreateTime(resultSet.getDate("create_time"));
+            model.setLastUpdateBy(resultSet.getString("last_update_by"));
+            model.setLastUpdateTime(resultSet.getDate("last_update_time"));
+
+            return model;
+        }
+    }
+
+    public static class UserRoleRowMapper implements RowMapper {
+        public UserRoleVO mapRow(ResultSet resultSet, int rowNum) throws SQLException {
+            UserRoleVO model = new UserRoleVO();
+
+            model.setId(resultSet.getString("id"));
+            model.setName(resultSet.getString("name"));
+            model.setEmail(resultSet.getString("email"));
+            model.setMobile(resultSet.getString("mobile"));
+            model.setDeptId(resultSet.getString("dept_id"));
+            model.setDeptName(resultSet.getString("dept_name"));
+            model.setRoleId(resultSet.getString("role_id"));
+            model.setRoleName(resultSet.getString("role_name"));
+            model.setRemark(resultSet.getString("remark"));
+
+            return model;
+        }
+    }
+
+
+    @Override
+    public SysUserRole selectByPk(Long id) {
+        String sql = " select t.id, t.user_id, t.role_id, t.create_by, t.create_time, t.last_update_by, t.last_update_time from sys_user_role t  where id=? ";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        List<SysUserRole> ls = jdbcTemplate.query(sql, new Object[]{id}, new SysUserRoleRowMapper());
+
+        if (ls != null && ls.size() > 0) {
+            return ls.get(0);
+        }
+
+        return null;
+    }
+
+    @Override
+    public SysUserRole selectByUserId(String userId) {
+        String sql = " select t.id, t.user_id, t.role_id, t.create_by, t.create_time, t.last_update_by, t.last_update_time from sys_user_role t  where user_id=? ";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        List<SysUserRole> ls = jdbcTemplate.query(sql, new Object[]{userId}, new SysUserRoleRowMapper());
+
+        if (ls != null && ls.size() > 0) {
+            return ls.get(0);
+        }
+
+        return null;
+    }
+
+
+    @Override
+    public List<SysUserRole> selectAll() {
+        String sql = "select t.id, t.user_id, t.role_id, t.create_by, t.create_time, t.last_update_by, t.last_update_time from sys_user_role t ";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return jdbcTemplate.query(sql, new SysUserRoleRowMapper());
+    }
+
+
+    public List<SysUserRole> selectList(String whereCase, Object[] paramValues) {
+        String sql = "select t.id, t.user_id, t.role_id, t.create_by, t.create_time, t.last_update_by, t.last_update_time from sys_user_role t  " + whereCase;
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return jdbcTemplate.query(sql, paramValues, new SysUserRoleRowMapper());
+    }
+
+
+    public Integer count(String whereCase, Object[] paramValues) {
+        String sql = "select count(1) from sys_user_role t " + whereCase;
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return jdbcTemplate.queryForObject(sql, paramValues, Integer.class);
+    }
+
+    public Integer userRoleCount(String whereCase, Object[] paramValues) {
+        String sql = "select count(1) from v_userrole t " + whereCase;
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return jdbcTemplate.queryForObject(sql, paramValues, Integer.class);
+    }
+
+
+    public PageResult selectPaging(int pageNumber, int pageSize, String whereCase, Object[] paramValues) {
+
+        Dialect dialect = Dialect.guessDialect(dataSource);
+        String sql = dialect.pagin(pageNumber, pageSize, "select t.id, t.user_id, t.role_id, t.create_by, t.create_time, t.last_update_by, t.last_update_time from sys_user_role t  " + whereCase);
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+        List<SysUserRole> recordList = jdbcTemplate.query(sql, paramValues, new SysUserRoleRowMapper());
+
+        int totalCount = count(whereCase, paramValues);
+
+        PageResult pageResult = new PageResult(pageNumber, pageSize, totalCount, recordList);
+
+        return pageResult;
+    }
+
+    public PageResult queryPaging(int pageNumber, int pageSize, String whereCase, Object[] paramValues) {
+
+        Dialect dialect = Dialect.guessDialect(dataSource);
+        String sql = dialect.pagin(pageNumber, pageSize, "select t.id,t.name,t.email,t.mobile,t.dept_id,t.dept_name,t.role_id,t.role_name,t.remark from v_userrole t " + whereCase);
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+        List<UserRoleVO> recordList = jdbcTemplate.query(sql, paramValues, new UserRoleRowMapper());
+
+        int totalCount = userRoleCount(whereCase, paramValues);
+
+        PageResult pageResult = new PageResult(pageNumber, pageSize, totalCount, recordList);
+
+        return pageResult;
+    }
+
+
+    @Override
+    public Integer insertReturnPk(SysUserRole model) {
+
+        String sql = "insert into sys_user_role ( user_id, role_id, create_by, create_time, last_update_by, last_update_time) values ( ?, ?, ?, ?, ?, ?) ";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        KeyHolder keyHolder = new GeneratedKeyHolder();
+        jdbcTemplate.update(new PreparedStatementCreator() {
+            @Override
+            public PreparedStatement createPreparedStatement(Connection conn) throws SQLException {
+                PreparedStatement ps = conn.prepareStatement(sql, PreparedStatement.RETURN_GENERATED_KEYS);
+                ps.setObject(1, model.getUserId());
+                ps.setObject(2, model.getRoleId());
+                ps.setObject(3, model.getCreateBy());
+                ps.setObject(4, model.getCreateTime());
+                ps.setObject(5, model.getLastUpdateBy());
+                ps.setObject(6, model.getLastUpdateTime());
+                return ps;
+            }
+        }, keyHolder);
+
+        return keyHolder.getKey().intValue();
+    }
+
+
+    @Override
+    public Integer insertSelective(SysUserRole model) {
+
+        StringBuffer sbSql = new StringBuffer();
+        StringBuffer sbParams = new StringBuffer();
+        ArrayList<Object> alParamsValues = new ArrayList<Object>();
+
+        String pre = "";
+
+        if (model.getUserId() != null) {
+            sbSql.append(pre + "user_id");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getUserId());
+            pre = ",";
+        }
+        if (model.getRoleId() != null) {
+            sbSql.append(pre + "role_id");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getRoleId());
+            pre = ",";
+        }
+        if (model.getCreateBy() != null) {
+            sbSql.append(pre + "create_by");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getCreateBy());
+            pre = ",";
+        }
+        if (model.getCreateTime() != null) {
+            sbSql.append(pre + "create_time");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getCreateTime());
+            pre = ",";
+        }
+        if (model.getLastUpdateBy() != null) {
+            sbSql.append(pre + "last_update_by");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getLastUpdateBy());
+            pre = ",";
+        }
+        if (model.getLastUpdateTime() != null) {
+            sbSql.append(pre + "last_update_time");
+            sbParams.append(pre + "?");
+            alParamsValues.add(model.getLastUpdateTime());
+            pre = ",";
+        }
+
+
+        String sql = "INSERT INTO sys_user_role (" + sbSql.toString() + ") VALUES (" + sbParams.toString() + ")";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        Object[] params = alParamsValues.toArray();
+
+        int out = jdbcTemplate.update(sql, params);
+
+        return out;
+    }
+
+
+    @Override
+    public Integer update(SysUserRole model) {
+
+        String sql = "update sys_user_role set user_id=?, role_id=?, create_by=?, create_time=?, last_update_by=?, last_update_time=? where id=?";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        Object[] params = new Object[]{model.getUserId(), model.getRoleId(), model.getCreateBy(), model.getCreateTime(), model.getLastUpdateBy(), model.getLastUpdateTime(), model.getId()};
+
+        return jdbcTemplate.update(sql, params);
+    }
+
+
+    @Override
+    public Integer updateSelective(SysUserRole model) {
+
+        StringBuffer sbSql = new StringBuffer();
+        StringBuffer sbParams = new StringBuffer();
+        ArrayList<Object> alParamsValues = new ArrayList<Object>();
+
+        String pre = "";
+        String preWhere = "";
+
+        if (model.getUserId() != null) {
+            sbSql.append(pre + "user_id=?");
+            alParamsValues.add(model.getUserId());
+            pre = ",";
+        }
+        if (model.getRoleId() != null) {
+            sbSql.append(pre + "role_id=?");
+            alParamsValues.add(model.getRoleId());
+            pre = ",";
+        }
+        if (model.getCreateBy() != null) {
+            sbSql.append(pre + "create_by=?");
+            alParamsValues.add(model.getCreateBy());
+            pre = ",";
+        }
+        if (model.getCreateTime() != null) {
+            sbSql.append(pre + "create_time=?");
+            alParamsValues.add(model.getCreateTime());
+            pre = ",";
+        }
+        if (model.getLastUpdateBy() != null) {
+            sbSql.append(pre + "last_update_by=?");
+            alParamsValues.add(model.getLastUpdateBy());
+            pre = ",";
+        }
+        if (model.getLastUpdateTime() != null) {
+            sbSql.append(pre + "last_update_time=?");
+            alParamsValues.add(model.getLastUpdateTime());
+            pre = ",";
+        }
+        if (model.getId() != null) {
+            sbParams.append(preWhere + "id=?");
+            alParamsValues.add(model.getId());
+            preWhere = ",";
+        }
+
+
+        if (!sbSql.toString().equalsIgnoreCase("")) {
+            String sql = "update sys_user_role set " + sbSql.toString() + " where " + sbParams.toString();
+
+            JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+            Object[] params = alParamsValues.toArray();
+
+            return jdbcTemplate.update(sql, params);
+        }
+
+        return 0;
+
+    }
+
+
+    @Override
+    public Integer delete(Long id) {
+
+        String sql = "delete from sys_user_role where id=?";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return jdbcTemplate.update(sql, id);
+    }
+
+
+    @Override
+    public Integer delete(List<SysUserRole> lsSysUserRole) {
+        String sql = "delete from sys_user_role where id=?";
+
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        return jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
+            @Override
+            public void setValues(PreparedStatement preparedStatement, int i) throws SQLException {
+                preparedStatement.setLong(1, lsSysUserRole.get(i).getId());
+            }
+
+            @Override
+            public int getBatchSize() {
+                return lsSysUserRole.size();
+            }
+        }).length;
+    }
+
+}

+ 38 - 0
src/main/java/com/ydtech/modules/admin/model/SysAccount.java

@@ -0,0 +1,38 @@
+package com.ydtech.modules.admin.model;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class SysAccount {
+    /**
+     * 账号
+     */
+    @ApiModelProperty(value = "账号")
+    private String id;
+
+    /**
+     * 描述
+     */
+    @ApiModelProperty(value = "描述")
+    private String name;
+
+    /**
+     * 归属商户
+     */
+    @ApiModelProperty(value = "归属商户")
+    private String deptId;
+
+    /**
+     * 排序
+     */
+    @ApiModelProperty(value = "排序")
+    private Integer orderNum;
+
+    /**
+     * 是否删除,1:是 0:否
+     */
+    @ApiModelProperty(value = "是否删除,1:是 0:否")
+    private Integer delFlag;
+
+}

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio