@@ -0,0 +1,33 @@ | |||||
HELP.md | |||||
target/ | |||||
!.mvn/wrapper/maven-wrapper.jar | |||||
!**/src/main/**/target/ | |||||
!**/src/test/**/target/ | |||||
### STS ### | |||||
.apt_generated | |||||
.classpath | |||||
.factorypath | |||||
.project | |||||
.settings | |||||
.springBeans | |||||
.sts4-cache | |||||
### IntelliJ IDEA ### | |||||
.idea | |||||
*.iws | |||||
*.iml | |||||
*.ipr | |||||
### NetBeans ### | |||||
/nbproject/private/ | |||||
/nbbuild/ | |||||
/dist/ | |||||
/nbdist/ | |||||
/.nb-gradle/ | |||||
build/ | |||||
!**/src/main/**/build/ | |||||
!**/src/test/**/build/ | |||||
### VS Code ### | |||||
.vscode/ |
@@ -0,0 +1,191 @@ | |||||
Apache License | |||||
Version 2.0, January 2004 | |||||
http://www.apache.org/licenses/ | |||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION | |||||
1. Definitions. | |||||
"License" shall mean the terms and conditions for use, reproduction, and | |||||
distribution as defined by Sections 1 through 9 of this document. | |||||
"Licensor" shall mean the copyright owner or entity authorized by the copyright | |||||
owner that is granting the License. | |||||
"Legal Entity" shall mean the union of the acting entity and all other entities | |||||
that control, are controlled by, or are under common control with that entity. | |||||
For the purposes of this definition, "control" means (i) the power, direct or | |||||
indirect, to cause the direction or management of such entity, whether by | |||||
contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the | |||||
outstanding shares, or (iii) beneficial ownership of such entity. | |||||
"You" (or "Your") shall mean an individual or Legal Entity exercising | |||||
permissions granted by this License. | |||||
"Source" form shall mean the preferred form for making modifications, including | |||||
but not limited to software source code, documentation source, and configuration | |||||
files. | |||||
"Object" form shall mean any form resulting from mechanical transformation or | |||||
translation of a Source form, including but not limited to compiled object code, | |||||
generated documentation, and conversions to other media types. | |||||
"Work" shall mean the work of authorship, whether in Source or Object form, made | |||||
available under the License, as indicated by a copyright notice that is included | |||||
in or attached to the work (an example is provided in the Appendix below). | |||||
"Derivative Works" shall mean any work, whether in Source or Object form, that | |||||
is based on (or derived from) the Work and for which the editorial revisions, | |||||
annotations, elaborations, or other modifications represent, as a whole, an | |||||
original work of authorship. For the purposes of this License, Derivative Works | |||||
shall not include works that remain separable from, or merely link (or bind by | |||||
name) to the interfaces of, the Work and Derivative Works thereof. | |||||
"Contribution" shall mean any work of authorship, including the original version | |||||
of the Work and any modifications or additions to that Work or Derivative Works | |||||
thereof, that is intentionally submitted to Licensor for inclusion in the Work | |||||
by the copyright owner or by an individual or Legal Entity authorized to submit | |||||
on behalf of the copyright owner. For the purposes of this definition, | |||||
"submitted" means any form of electronic, verbal, or written communication sent | |||||
to the Licensor or its representatives, including but not limited to | |||||
communication on electronic mailing lists, source code control systems, and | |||||
issue tracking systems that are managed by, or on behalf of, the Licensor for | |||||
the purpose of discussing and improving the Work, but excluding communication | |||||
that is conspicuously marked or otherwise designated in writing by the copyright | |||||
owner as "Not a Contribution." | |||||
"Contributor" shall mean Licensor and any individual or Legal Entity on behalf | |||||
of whom a Contribution has been received by Licensor and subsequently | |||||
incorporated within the Work. | |||||
2. Grant of Copyright License. | |||||
Subject to the terms and conditions of this License, each Contributor hereby | |||||
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, | |||||
irrevocable copyright license to reproduce, prepare Derivative Works of, | |||||
publicly display, publicly perform, sublicense, and distribute the Work and such | |||||
Derivative Works in Source or Object form. | |||||
3. Grant of Patent License. | |||||
Subject to the terms and conditions of this License, each Contributor hereby | |||||
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, | |||||
irrevocable (except as stated in this section) patent license to make, have | |||||
made, use, offer to sell, sell, import, and otherwise transfer the Work, where | |||||
such license applies only to those patent claims licensable by such Contributor | |||||
that are necessarily infringed by their Contribution(s) alone or by combination | |||||
of their Contribution(s) with the Work to which such Contribution(s) was | |||||
submitted. If You institute patent litigation against any entity (including a | |||||
cross-claim or counterclaim in a lawsuit) alleging that the Work or a | |||||
Contribution incorporated within the Work constitutes direct or contributory | |||||
patent infringement, then any patent licenses granted to You under this License | |||||
for that Work shall terminate as of the date such litigation is filed. | |||||
4. Redistribution. | |||||
You may reproduce and distribute copies of the Work or Derivative Works thereof | |||||
in any medium, with or without modifications, and in Source or Object form, | |||||
provided that You meet the following conditions: | |||||
You must give any other recipients of the Work or Derivative Works a copy of | |||||
this License; and | |||||
You must cause any modified files to carry prominent notices stating that You | |||||
changed the files; and | |||||
You must retain, in the Source form of any Derivative Works that You distribute, | |||||
all copyright, patent, trademark, and attribution notices from the Source form | |||||
of the Work, excluding those notices that do not pertain to any part of the | |||||
Derivative Works; and | |||||
If the Work includes a "NOTICE" text file as part of its distribution, then any | |||||
Derivative Works that You distribute must include a readable copy of the | |||||
attribution notices contained within such NOTICE file, excluding those notices | |||||
that do not pertain to any part of the Derivative Works, in at least one of the | |||||
following places: within a NOTICE text file distributed as part of the | |||||
Derivative Works; within the Source form or documentation, if provided along | |||||
with the Derivative Works; or, within a display generated by the Derivative | |||||
Works, if and wherever such third-party notices normally appear. The contents of | |||||
the NOTICE file are for informational purposes only and do not modify the | |||||
License. You may add Your own attribution notices within Derivative Works that | |||||
You distribute, alongside or as an addendum to the NOTICE text from the Work, | |||||
provided that such additional attribution notices cannot be construed as | |||||
modifying the License. | |||||
You may add Your own copyright statement to Your modifications and may provide | |||||
additional or different license terms and conditions for use, reproduction, or | |||||
distribution of Your modifications, or for any such Derivative Works as a whole, | |||||
provided Your use, reproduction, and distribution of the Work otherwise complies | |||||
with the conditions stated in this License. | |||||
5. Submission of Contributions. | |||||
Unless You explicitly state otherwise, any Contribution intentionally submitted | |||||
for inclusion in the Work by You to the Licensor shall be under the terms and | |||||
conditions of this License, without any additional terms or conditions. | |||||
Notwithstanding the above, nothing herein shall supersede or modify the terms of | |||||
any separate license agreement you may have executed with Licensor regarding | |||||
such Contributions. | |||||
6. Trademarks. | |||||
This License does not grant permission to use the trade names, trademarks, | |||||
service marks, or product names of the Licensor, except as required for | |||||
reasonable and customary use in describing the origin of the Work and | |||||
reproducing the content of the NOTICE file. | |||||
7. Disclaimer of Warranty. | |||||
Unless required by applicable law or agreed to in writing, Licensor provides the | |||||
Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, | |||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, | |||||
including, without limitation, any warranties or conditions of TITLE, | |||||
NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are | |||||
solely responsible for determining the appropriateness of using or | |||||
redistributing the Work and assume any risks associated with Your exercise of | |||||
permissions under this License. | |||||
8. Limitation of Liability. | |||||
In no event and under no legal theory, whether in tort (including negligence), | |||||
contract, or otherwise, unless required by applicable law (such as deliberate | |||||
and grossly negligent acts) or agreed to in writing, shall any Contributor be | |||||
liable to You for damages, including any direct, indirect, special, incidental, | |||||
or consequential damages of any character arising as a result of this License or | |||||
out of the use or inability to use the Work (including but not limited to | |||||
damages for loss of goodwill, work stoppage, computer failure or malfunction, or | |||||
any and all other commercial damages or losses), even if such Contributor has | |||||
been advised of the possibility of such damages. | |||||
9. Accepting Warranty or Additional Liability. | |||||
While redistributing the Work or Derivative Works thereof, You may choose to | |||||
offer, and charge a fee for, acceptance of support, warranty, indemnity, or | |||||
other liability obligations and/or rights consistent with this License. However, | |||||
in accepting such obligations, You may act only on Your own behalf and on Your | |||||
sole responsibility, not on behalf of any other Contributor, and only if You | |||||
agree to indemnify, defend, and hold each Contributor harmless for any liability | |||||
incurred by, or claims asserted against, such Contributor by reason of your | |||||
accepting any such warranty or additional liability. | |||||
END OF TERMS AND CONDITIONS | |||||
APPENDIX: How to apply the Apache License to your work | |||||
To apply the Apache License to your work, attach the following boilerplate | |||||
notice, with the fields enclosed by brackets "{}" replaced with your own | |||||
identifying information. (Don't include the brackets!) The text should be | |||||
enclosed in the appropriate comment syntax for the file format. We also | |||||
recommend that a file or class name and description of purpose be included on | |||||
the same "printed page" as the copyright notice for easier identification within | |||||
third-party archives. | |||||
Copyright 2019-2020 Zheng Jie | |||||
Licensed under the Apache License, Version 2.0 (the "License"); | |||||
you may not use this file except in compliance with the License. | |||||
You may obtain a copy of the License at | |||||
http://www.apache.org/licenses/LICENSE-2.0 | |||||
Unless required by applicable law or agreed to in writing, software | |||||
distributed under the License is distributed on an "AS IS" BASIS, | |||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
See the License for the specific language governing permissions and | |||||
limitations under the License. |
@@ -0,0 +1,83 @@ | |||||
<h1 style="text-align: center">EL-ADMIN 后台管理系统</h1> | |||||
<div style="text-align: center"> | |||||
#### 项目简介 | |||||
一个基于 Spring Boot 2.1.0 、 Spring Boot Jpa、 JWT、Spring Security、Redis、Vue的前后端分离的后台管理系统 | |||||
**开发文档:** [https://el-admin.vip](https://el-admin.vip) | |||||
**体验地址:** [https://el-admin.xin](https://el-admin.xin) | |||||
**账号密码:** `admin / 123456` | |||||
#### 项目源码 | |||||
| | 后端源码 | 前端源码 | | |||||
|--- |--- | --- | | |||||
| github | https://github.com/elunez/eladmin | https://github.com/elunez/eladmin-web | | |||||
| 码云 | https://gitee.com/elunez/eladmin | https://gitee.com/elunez/eladmin-web | | |||||
#### 主要特性 | |||||
- 使用最新技术栈,社区资源丰富。 | |||||
- 高效率开发,代码生成器可一键生成前后端代码 | |||||
- 支持数据字典,可方便地对一些状态进行管理 | |||||
- 支持接口限流,避免恶意请求导致服务层压力过大 | |||||
- 支持接口级别的功能权限与数据权限,可自定义操作 | |||||
- 自定义权限注解与匿名接口注解,可快速对接口拦截与放行 | |||||
- 对一些常用地前端组件封装:表格数据请求、数据字典等 | |||||
- 前后端统一异常拦截处理,统一输出异常,避免繁琐的判断 | |||||
- 支持在线用户管理与服务器性能监控,支持限制单用户登录 | |||||
- 支持运维管理,可方便地对远程服务器的应用进行部署与管理 | |||||
#### 系统功能 | |||||
- 用户管理:提供用户的相关配置,新增用户后,默认密码为123456 | |||||
- 角色管理:对权限与菜单进行分配,可根据部门设置角色的数据权限 | |||||
- 菜单管理:已实现菜单动态路由,后端可配置化,支持多级菜单 | |||||
- 部门管理:可配置系统组织架构,树形表格展示 | |||||
- 岗位管理:配置各个部门的职位 | |||||
- 字典管理:可维护常用一些固定的数据,如:状态,性别等 | |||||
- 系统日志:记录用户操作日志与异常日志,方便开发人员定位排错 | |||||
- SQL监控:采用druid 监控数据库访问性能,默认用户名admin,密码123456 | |||||
- 定时任务:整合Quartz做定时任务,加入任务日志,任务运行情况一目了然 | |||||
- 代码生成:高灵活度生成前后端代码,减少大量重复的工作任务 | |||||
- 邮件工具:配合富文本,发送html格式的邮件 | |||||
- 七牛云存储:可同步七牛云存储的数据到系统,无需登录七牛云直接操作云数据 | |||||
- 支付宝支付:整合了支付宝支付并且提供了测试账号,可自行测试 | |||||
- 服务监控:监控服务器的负载情况 | |||||
- 运维管理:一键部署你的应用 | |||||
#### 项目结构 | |||||
项目采用按功能分模块的开发方式,结构如下 | |||||
- `capiltal-common` 为系统的公共模块,各种工具类,公共配置存在该模块 | |||||
- `capiltal-client` 为客户端api模块,也是最终需要打包部署的模块 | |||||
- `capiltal-system` 为系统核心模块也是项目入口模块,也是最终需要打包部署的模块 | |||||
- `capiltal-logging` 为系统的日志模块,其他模块如果需要记录日志需要引入该模块 | |||||
- `capiltal-tools` 为第三方工具模块,包含:图床、邮件、云存储、本地存储、支付宝 | |||||
- `capiltal-generator` 为系统的代码生成模块,代码生成的模板在 system 模块中 | |||||
#### 详细结构 | |||||
``` | |||||
- capiltal-common 公共模块 | |||||
- annotation 为系统自定义注解 | |||||
- aspect 自定义注解的切面 | |||||
- base 提供了Entity、DTO基类和mapstruct的通用mapper | |||||
- config 自定义权限实现、redis配置、swagger配置、Rsa配置等 | |||||
- dao MybatiesPlus Dao | |||||
- mapper mybatiesPlus Mapper | |||||
- exception 项目统一异常的处理 | |||||
- utils 系统通用工具类 | |||||
- capiltal-system 系统核心模块(系统启动入口) | |||||
- config 配置跨域与静态资源,与数据权限 | |||||
- thread 线程池相关 | |||||
- modules 系统相关模块(登录授权、系统监控、定时任务、运维管理等) | |||||
- capiltal-logging 系统日志模块 | |||||
- capiltal-tools 系统第三方工具模块 | |||||
- capiltal-generator 系统代码生成模块 | |||||
``` | |||||
@@ -0,0 +1,321 @@ | |||||
<?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>me.zhengjie</groupId> | |||||
<artifactId>wjcy</artifactId> | |||||
<packaging>pom</packaging> | |||||
<version>1.0</version> | |||||
<modules> | |||||
<module>wjcy-common</module> | |||||
<module>wjcy-logging</module> | |||||
<module>wjcy-system</module> | |||||
<module>wjcy-tools</module> | |||||
<module>wjcy-generator</module> | |||||
</modules> | |||||
<name>EL-ADMIN 后台管理</name> | |||||
<url>http://auauz.net</url> | |||||
<parent> | |||||
<groupId>org.springframework.boot</groupId> | |||||
<artifactId>spring-boot-starter-parent</artifactId> | |||||
<version>2.2.10.RELEASE</version> | |||||
</parent> | |||||
<properties> | |||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> | |||||
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> | |||||
<java.version>1.8</java.version> | |||||
<log4jdbc.version>1.16</log4jdbc.version> | |||||
<fastjson.version>1.2.70</fastjson.version> | |||||
<druid.version>1.1.24</druid.version> | |||||
<commons-pool2.version>2.5.0</commons-pool2.version> | |||||
<mapstruct.version>1.3.1.Final</mapstruct.version> | |||||
<rocketmq-version>2.1.1</rocketmq-version> | |||||
<log4j2.version>2.15.0</log4j2.version> | |||||
<knife4j.version>2.0.7</knife4j.version> | |||||
</properties> | |||||
<dependencies> | |||||
<!--Spring boot 核心--> | |||||
<dependency> | |||||
<groupId>org.springframework.boot</groupId> | |||||
<artifactId>spring-boot-starter-logging</artifactId> | |||||
<exclusions> | |||||
<exclusion> | |||||
<groupId>*</groupId> | |||||
<artifactId>*</artifactId> | |||||
</exclusion> | |||||
</exclusions> | |||||
</dependency> | |||||
<dependency> | |||||
<groupId>org.springframework.boot</groupId> | |||||
<artifactId>spring-boot-starter-data-jpa</artifactId> | |||||
</dependency> | |||||
<!--Spring boot Web容器--> | |||||
<dependency> | |||||
<groupId>org.springframework.boot</groupId> | |||||
<artifactId>spring-boot-starter-web</artifactId> | |||||
</dependency> | |||||
<!--Spring boot 测试--> | |||||
<dependency> | |||||
<groupId>org.springframework.boot</groupId> | |||||
<artifactId>spring-boot-starter-test</artifactId> | |||||
<scope>test</scope> | |||||
</dependency> | |||||
<!--Spring boot 安全框架--> | |||||
<dependency> | |||||
<groupId>org.springframework.boot</groupId> | |||||
<artifactId>spring-boot-starter-security</artifactId> | |||||
</dependency> | |||||
<!-- spring boot 缓存 --> | |||||
<dependency> | |||||
<groupId>org.springframework.boot</groupId> | |||||
<artifactId>spring-boot-starter-cache</artifactId> | |||||
</dependency> | |||||
<!--Spring boot Redis--> | |||||
<dependency> | |||||
<groupId>org.springframework.boot</groupId> | |||||
<artifactId>spring-boot-starter-data-redis</artifactId> | |||||
</dependency> | |||||
<!--spring boot 集成redis所需common-pool2--> | |||||
<dependency> | |||||
<groupId>org.apache.commons</groupId> | |||||
<artifactId>commons-pool2</artifactId> | |||||
<version>${commons-pool2.version}</version> | |||||
</dependency> | |||||
<dependency> | |||||
<groupId>org.apache.commons</groupId> | |||||
<artifactId>commons-lang3</artifactId> | |||||
</dependency> | |||||
<dependency> | |||||
<groupId>org.springframework.boot</groupId> | |||||
<artifactId>spring-boot-configuration-processor</artifactId> | |||||
<optional>true</optional> | |||||
</dependency> | |||||
<!--监控sql日志--> | |||||
<dependency> | |||||
<groupId>org.bgee.log4jdbc-log4j2</groupId> | |||||
<artifactId>log4jdbc-log4j2-jdbc4.1</artifactId> | |||||
<version>${log4jdbc.version}</version> | |||||
</dependency> | |||||
<!-- 新版本 --> | |||||
<dependency> | |||||
<groupId>com.github.xiaoymin</groupId> | |||||
<artifactId>knife4j-spring-boot-starter</artifactId> | |||||
<version>${knife4j.version}</version> | |||||
</dependency> | |||||
<!--Mysql依赖包--> | |||||
<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>org.lionsoul</groupId> | |||||
<artifactId>ip2region</artifactId> | |||||
<version>1.7.2</version> | |||||
</dependency> | |||||
<!--lombok插件--> | |||||
<dependency> | |||||
<groupId>org.projectlombok</groupId> | |||||
<artifactId>lombok</artifactId> | |||||
<optional>true</optional> | |||||
</dependency> | |||||
<!-- fastjson --> | |||||
<dependency> | |||||
<groupId>com.alibaba</groupId> | |||||
<artifactId>fastjson</artifactId> | |||||
<version>${fastjson.version}</version> | |||||
</dependency> | |||||
<!--mapStruct依赖--> | |||||
<dependency> | |||||
<groupId>org.mapstruct</groupId> | |||||
<artifactId>mapstruct</artifactId> | |||||
<version>${mapstruct.version}</version> | |||||
</dependency> | |||||
<dependency> | |||||
<groupId>org.mapstruct</groupId> | |||||
<artifactId>mapstruct-processor</artifactId> | |||||
<version>${mapstruct.version}</version> | |||||
<scope>provided</scope> | |||||
</dependency> | |||||
<dependency> | |||||
<groupId>javax.inject</groupId> | |||||
<artifactId>javax.inject</artifactId> | |||||
<version>1</version> | |||||
</dependency> | |||||
<!-- Java图形验证码 --> | |||||
<dependency> | |||||
<groupId>com.github.whvcse</groupId> | |||||
<artifactId>easy-captcha</artifactId> | |||||
<version>1.6.2</version> | |||||
</dependency> | |||||
<!-- 解析客户端操作系统、浏览器信息 --> | |||||
<dependency> | |||||
<groupId>nl.basjes.parse.useragent</groupId> | |||||
<artifactId>yauaa</artifactId> | |||||
<version>5.23</version> | |||||
</dependency> | |||||
<!--mybatis-plus-boot--> | |||||
<dependency> | |||||
<groupId>com.baomidou</groupId> | |||||
<artifactId>mybatis-plus-boot-starter</artifactId> | |||||
<version>3.3.2</version> | |||||
</dependency> | |||||
<dependency> | |||||
<groupId>com.h2database</groupId> | |||||
<artifactId>h2</artifactId> | |||||
<scope>runtime</scope> | |||||
</dependency> | |||||
<!--log4j2--> | |||||
<!--添加对日志系统的支持,采用最新的log4j2框架--> | |||||
<dependency> | |||||
<groupId>org.springframework.boot</groupId> | |||||
<artifactId>spring-boot-starter-log4j2</artifactId> | |||||
</dependency> | |||||
<!-- 引入poi,解析workbook视图 --> | |||||
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> | |||||
<dependency> | |||||
<groupId>org.apache.poi</groupId> | |||||
<artifactId>poi</artifactId> | |||||
<version>4.0.1</version> | |||||
</dependency> | |||||
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml --> | |||||
<dependency> | |||||
<groupId>org.apache.poi</groupId> | |||||
<artifactId>poi-ooxml</artifactId> | |||||
<version>4.0.1</version> | |||||
</dependency> | |||||
<!-- 处理excel和上面功能是一样的--> | |||||
<dependency> | |||||
<groupId>net.sourceforge.jexcelapi</groupId> | |||||
<artifactId>jxl</artifactId> | |||||
<version>2.6.10</version> | |||||
</dependency> | |||||
<!--redisson 依赖--> | |||||
<dependency> | |||||
<groupId>org.redisson</groupId> | |||||
<artifactId>redisson</artifactId> | |||||
<version>3.5.7</version> | |||||
</dependency> | |||||
<!--rocketMq--> | |||||
<dependency> | |||||
<groupId>org.apache.rocketmq</groupId> | |||||
<artifactId>rocketmq-client</artifactId> | |||||
<version>4.4.0</version> | |||||
</dependency> | |||||
<!--trc--> | |||||
<dependency> | |||||
<groupId>com.google.guava</groupId> | |||||
<artifactId>guava</artifactId> | |||||
<version>24.1-jre</version> | |||||
</dependency> | |||||
<dependency> | |||||
<groupId>com.madgag.spongycastle</groupId> | |||||
<artifactId>core</artifactId> | |||||
<version>1.58.0.0</version> | |||||
</dependency> | |||||
<dependency> | |||||
<groupId>org.springframework.boot</groupId> | |||||
<artifactId>spring-boot-starter-thymeleaf</artifactId> | |||||
</dependency> | |||||
<dependency> | |||||
<groupId>org.springframework.cloud</groupId> | |||||
<artifactId>spring-cloud-starter-openfeign</artifactId> | |||||
<version>2.2.5.RELEASE</version> | |||||
</dependency> | |||||
<dependency> | |||||
<groupId>com.netflix.feign</groupId> | |||||
<artifactId>feign-jackson</artifactId> | |||||
<version>8.18.0</version> | |||||
</dependency> | |||||
<dependency> | |||||
<groupId>org.telegram</groupId> | |||||
<artifactId>telegrambots</artifactId> | |||||
<version>5.5.0</version> | |||||
</dependency> | |||||
</dependencies> | |||||
<build> | |||||
<resources> | |||||
<resource> | |||||
<directory>src/main/java</directory> | |||||
<includes> | |||||
<include>**/*.xml</include> | |||||
</includes> | |||||
<filtering>true</filtering> | |||||
</resource> | |||||
</resources> | |||||
<plugins> | |||||
<!-- 打包时跳过测试 --> | |||||
<plugin> | |||||
<groupId>org.apache.maven.plugins</groupId> | |||||
<artifactId>maven-surefire-plugin</artifactId> | |||||
<configuration> | |||||
<skip>true</skip> | |||||
</configuration> | |||||
</plugin> | |||||
</plugins> | |||||
</build> | |||||
<repositories> | |||||
<repository> | |||||
<id>public</id> | |||||
<name>aliyun nexus</name> | |||||
<url>http://maven.aliyun.com/nexus/content/groups/public/</url> | |||||
<releases> | |||||
<enabled>true</enabled> | |||||
</releases> | |||||
</repository> | |||||
</repositories> | |||||
<pluginRepositories> | |||||
<pluginRepository> | |||||
<id>public</id> | |||||
<name>aliyun nexus</name> | |||||
<url>http://maven.aliyun.com/nexus/content/groups/public/</url> | |||||
<releases> | |||||
<enabled>true</enabled> | |||||
</releases> | |||||
<snapshots> | |||||
<enabled>false</enabled> | |||||
</snapshots> | |||||
</pluginRepository> | |||||
</pluginRepositories> | |||||
</project> |
@@ -0,0 +1,37 @@ | |||||
<?xml version="1.0" encoding="UTF-8"?> | |||||
<project xmlns="http://maven.apache.org/POM/4.0.0" | |||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | |||||
<parent> | |||||
<artifactId>wjcy</artifactId> | |||||
<groupId>me.zhengjie</groupId> | |||||
<version>1.0</version> | |||||
</parent> | |||||
<modelVersion>4.0.0</modelVersion> | |||||
<properties> | |||||
<hutool.version>5.3.4</hutool.version> | |||||
</properties> | |||||
<artifactId>wjcy-common</artifactId> | |||||
<name>公共模块</name> | |||||
<dependencies> | |||||
<!--工具包--> | |||||
<dependency> | |||||
<groupId>cn.hutool</groupId> | |||||
<artifactId>hutool-all</artifactId> | |||||
<version>${hutool.version}</version> | |||||
</dependency> | |||||
<dependency> | |||||
<groupId>org.apache.httpcomponents</groupId> | |||||
<artifactId>httpclient</artifactId> | |||||
<version>4.5.12</version> | |||||
</dependency> | |||||
<dependency> | |||||
<groupId>org.jodd</groupId> | |||||
<artifactId>jodd-core</artifactId> | |||||
<version>3.7.1</version> | |||||
</dependency> | |||||
</dependencies> | |||||
</project> |
@@ -0,0 +1,30 @@ | |||||
/* | |||||
* Copyright 2019-2020 Zheng Jie | |||||
* | |||||
* Licensed under the Apache License, Version 2.0 (the "License"); | |||||
* you may not use this file except in compliance with the License. | |||||
* You may obtain a copy of the License at | |||||
* | |||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* Unless required by applicable law or agreed to in writing, software | |||||
* distributed under the License is distributed on an "AS IS" BASIS, | |||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
* See the License for the specific language governing permissions and | |||||
* limitations under the License. | |||||
*/ | |||||
package me.zhengjie.annotation; | |||||
import java.lang.annotation.*; | |||||
/** | |||||
* @author jacky | |||||
* 用于标记匿名访问方法 | |||||
*/ | |||||
@Inherited | |||||
@Documented | |||||
@Target({ElementType.METHOD,ElementType.ANNOTATION_TYPE}) | |||||
@Retention(RetentionPolicy.RUNTIME) | |||||
public @interface AnonymousAccess { | |||||
} |
@@ -0,0 +1,25 @@ | |||||
package me.zhengjie.annotation; | |||||
import me.zhengjie.utils.CheckPwdValidator; | |||||
import javax.validation.Constraint; | |||||
import javax.validation.Payload; | |||||
import java.lang.annotation.*; | |||||
/* | |||||
* | |||||
* @Description 密码校验 | |||||
* @Date 2022/3/21 | |||||
* @Author zeng | |||||
*/ | |||||
@Target({ElementType.FIELD, ElementType.PARAMETER}) | |||||
@Retention(RetentionPolicy.RUNTIME) | |||||
@Constraint(validatedBy = CheckPwdValidator.class) | |||||
public @interface CheckPwd { | |||||
String message() default "密码格式错误,必须包含大小写字母、数子、英文特殊符号,且长度在16~64之间!"; | |||||
Class<?>[] groups() default {}; | |||||
Class<? extends Payload>[] payload() default {}; | |||||
} |
@@ -0,0 +1,47 @@ | |||||
/* | |||||
* Copyright 2019-2020 Zheng Jie | |||||
* | |||||
* Licensed under the Apache License, Version 2.0 (the "License"); | |||||
* you may not use this file except in compliance with the License. | |||||
* You may obtain a copy of the License at | |||||
* | |||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* Unless required by applicable law or agreed to in writing, software | |||||
* distributed under the License is distributed on an "AS IS" BASIS, | |||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
* See the License for the specific language governing permissions and | |||||
* limitations under the License. | |||||
*/ | |||||
package me.zhengjie.annotation; | |||||
import java.lang.annotation.ElementType; | |||||
import java.lang.annotation.Retention; | |||||
import java.lang.annotation.RetentionPolicy; | |||||
import java.lang.annotation.Target; | |||||
/** | |||||
* <p> | |||||
* 用于判断是否过滤数据权限 | |||||
* 1、如果没有用到 @OneToOne 这种关联关系,只需要填写 fieldName [参考:DeptQueryCriteria.class] | |||||
* 2、如果用到了 @OneToOne ,fieldName 和 joinName 都需要填写,拿UserQueryCriteria.class举例: | |||||
* 应该是 @DataPermission(joinName = "dept", fieldName = "id") | |||||
* </p> | |||||
* @author Zheng Jie | |||||
* @website https://el-admin.vip | |||||
* @date 2020-05-07 | |||||
**/ | |||||
@Target(ElementType.TYPE) | |||||
@Retention(RetentionPolicy.RUNTIME) | |||||
public @interface DataPermission { | |||||
/** | |||||
* Entity 中的字段名称 | |||||
*/ | |||||
String fieldName() default ""; | |||||
/** | |||||
* Entity 中与部门关联的字段名称 | |||||
*/ | |||||
String joinName() default ""; | |||||
} |
@@ -0,0 +1,31 @@ | |||||
package me.zhengjie.annotation; | |||||
import me.zhengjie.utils.DateTimeValidator; | |||||
import javax.validation.Constraint; | |||||
import javax.validation.Payload; | |||||
import java.lang.annotation.ElementType; | |||||
import java.lang.annotation.Retention; | |||||
import java.lang.annotation.RetentionPolicy; | |||||
import java.lang.annotation.Target; | |||||
/** | |||||
* <p> | |||||
* 日期格式效验 | |||||
* </p> | |||||
* | |||||
* @Author xx | |||||
* @Date 2021/7/27 | |||||
**/ | |||||
@Target({ElementType.FIELD, ElementType.PARAMETER}) | |||||
@Retention(RetentionPolicy.RUNTIME) | |||||
@Constraint(validatedBy = DateTimeValidator.class) | |||||
public @interface DateTime { | |||||
String message() default "日期格式错误"; | |||||
String format() default "yyyy-MM-dd HH:mm:ss"; | |||||
Class<?>[] groups() default {}; | |||||
Class<? extends Payload>[] payload() default {}; | |||||
} |
@@ -0,0 +1,28 @@ | |||||
package me.zhengjie.annotation; | |||||
import java.lang.annotation.ElementType; | |||||
import java.lang.annotation.Retention; | |||||
import java.lang.annotation.RetentionPolicy; | |||||
import java.lang.annotation.Target; | |||||
import static me.zhengjie.config.constant.Constants.FORM_SUB_SECOND; | |||||
/** | |||||
* <p> | |||||
* 表单提交 | |||||
* </p> | |||||
* | |||||
* @author: rch | |||||
* @date: 2022-08-30 | |||||
*/ | |||||
@Target(ElementType.METHOD) | |||||
@Retention(RetentionPolicy.RUNTIME) | |||||
public @interface FormSubmission { | |||||
/** 是否开启防止表单重复提交验证 */ | |||||
boolean isOpen() default true; | |||||
/** 表单重复提交时间间隔,单位;秒 */ | |||||
long second() default FORM_SUB_SECOND; | |||||
} |
@@ -0,0 +1,49 @@ | |||||
/* | |||||
* Copyright 2019-2020 Zheng Jie | |||||
* | |||||
* Licensed under the Apache License, Version 2.0 (the "License"); | |||||
* you may not use this file except in compliance with the License. | |||||
* You may obtain a copy of the License at | |||||
* | |||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* Unless required by applicable law or agreed to in writing, software | |||||
* distributed under the License is distributed on an "AS IS" BASIS, | |||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
* See the License for the specific language governing permissions and | |||||
* limitations under the License. | |||||
*/ | |||||
package me.zhengjie.annotation; | |||||
import me.zhengjie.aspect.LimitType; | |||||
import java.lang.annotation.ElementType; | |||||
import java.lang.annotation.Retention; | |||||
import java.lang.annotation.RetentionPolicy; | |||||
import java.lang.annotation.Target; | |||||
/** | |||||
* @author jacky | |||||
*/ | |||||
@Target(ElementType.METHOD) | |||||
@Retention(RetentionPolicy.RUNTIME) | |||||
public @interface Limit { | |||||
// 资源名称,用于描述接口功能 | |||||
String name() default ""; | |||||
// 资源 key | |||||
String key() default ""; | |||||
// key prefix | |||||
String prefix() default ""; | |||||
// 时间的,单位秒 | |||||
int period(); | |||||
// 限制访问次数 | |||||
int count(); | |||||
// 限制类型 | |||||
LimitType limitType() default LimitType.CUSTOMER; | |||||
} |
@@ -0,0 +1,90 @@ | |||||
/* | |||||
* Copyright 2019-2020 Zheng Jie | |||||
* | |||||
* Licensed under the Apache License, Version 2.0 (the "License"); | |||||
* you may not use this file except in compliance with the License. | |||||
* You may obtain a copy of the License at | |||||
* | |||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* Unless required by applicable law or agreed to in writing, software | |||||
* distributed under the License is distributed on an "AS IS" BASIS, | |||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
* See the License for the specific language governing permissions and | |||||
* limitations under the License. | |||||
*/ | |||||
package me.zhengjie.annotation; | |||||
import java.lang.annotation.ElementType; | |||||
import java.lang.annotation.Retention; | |||||
import java.lang.annotation.RetentionPolicy; | |||||
import java.lang.annotation.Target; | |||||
/** | |||||
* @author Zheng Jie | |||||
* @date 2019-6-4 13:52:30 | |||||
*/ | |||||
@Target(ElementType.FIELD) | |||||
@Retention(RetentionPolicy.RUNTIME) | |||||
public @interface Query { | |||||
// Dong ZhaoYang 2017/8/7 基本对象的属性名 | |||||
String propName() default ""; | |||||
// Dong ZhaoYang 2017/8/7 查询方式 | |||||
Type type() default Type.EQUAL; | |||||
/** | |||||
* 连接查询的属性名,如User类中的dept | |||||
*/ | |||||
String joinName() default ""; | |||||
/** | |||||
* 默认左连接 | |||||
*/ | |||||
Join join() default Join.LEFT; | |||||
/** | |||||
* 多字段模糊搜索,仅支持String类型字段,多个用逗号隔开, 如@Query(blurry = "email,username") | |||||
*/ | |||||
String blurry() default ""; | |||||
enum Type { | |||||
// jie 2019/6/4 相等 | |||||
EQUAL | |||||
// Dong ZhaoYang 2017/8/7 大于等于 | |||||
, GREATER_THAN | |||||
// Dong ZhaoYang 2017/8/7 小于等于 | |||||
, LESS_THAN | |||||
// Dong ZhaoYang 2017/8/7 中模糊查询 | |||||
, INNER_LIKE | |||||
// Dong ZhaoYang 2017/8/7 左模糊查询 | |||||
, LEFT_LIKE | |||||
// Dong ZhaoYang 2017/8/7 右模糊查询 | |||||
, RIGHT_LIKE | |||||
// Dong ZhaoYang 2017/8/7 小于 | |||||
, LESS_THAN_NQ | |||||
// jie 2019/6/4 包含 | |||||
, IN | |||||
// 不包含 | |||||
, NOT_IN | |||||
// 不等于 | |||||
,NOT_EQUAL | |||||
// between | |||||
,BETWEEN | |||||
// 不为空 | |||||
,NOT_NULL | |||||
// 为空 | |||||
,IS_NULL | |||||
} | |||||
/** | |||||
* @author Zheng Jie | |||||
* 适用于简单连接查询,复杂的请自定义该注解,或者使用sql查询 | |||||
*/ | |||||
enum Join { | |||||
/** jie 2019-6-4 13:18:30 */ | |||||
LEFT, RIGHT, INNER | |||||
} | |||||
} | |||||
@@ -0,0 +1,91 @@ | |||||
/* | |||||
* Copyright 2002-2016 the original author or authors. | |||||
* | |||||
* Licensed under the Apache License, Version 2.0 (the "License"); | |||||
* you may not use this file except in compliance with the License. | |||||
* You may obtain a copy of the License at | |||||
* | |||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* Unless required by applicable law or agreed to in writing, software | |||||
* distributed under the License is distributed on an "AS IS" BASIS, | |||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
* See the License for the specific language governing permissions and | |||||
* limitations under the License. | |||||
*/ | |||||
package me.zhengjie.annotation.rest; | |||||
import java.lang.annotation.Documented; | |||||
import java.lang.annotation.ElementType; | |||||
import java.lang.annotation.Retention; | |||||
import java.lang.annotation.RetentionPolicy; | |||||
import java.lang.annotation.Target; | |||||
import me.zhengjie.annotation.AnonymousAccess; | |||||
import org.springframework.core.annotation.AliasFor; | |||||
import org.springframework.web.bind.annotation.RequestMapping; | |||||
import org.springframework.web.bind.annotation.RequestMethod; | |||||
/** | |||||
* Annotation for mapping HTTP {@code DELETE} requests onto specific handler | |||||
* methods. | |||||
* 支持匿名访问 DeleteMapping | |||||
* | |||||
* @author liaojinlong | |||||
* @see AnonymousGetMapping | |||||
* @see AnonymousPostMapping | |||||
* @see AnonymousPutMapping | |||||
* @see AnonymousPatchMapping | |||||
* @see RequestMapping | |||||
*/ | |||||
@AnonymousAccess | |||||
@Target(ElementType.METHOD) | |||||
@Retention(RetentionPolicy.RUNTIME) | |||||
@Documented | |||||
@RequestMapping(method = RequestMethod.DELETE) | |||||
public @interface AnonymousDeleteMapping { | |||||
/** | |||||
* Alias for {@link RequestMapping#name}. | |||||
*/ | |||||
@AliasFor(annotation = RequestMapping.class) | |||||
String name() default ""; | |||||
/** | |||||
* Alias for {@link RequestMapping#value}. | |||||
*/ | |||||
@AliasFor(annotation = RequestMapping.class) | |||||
String[] value() default {}; | |||||
/** | |||||
* Alias for {@link RequestMapping#path}. | |||||
*/ | |||||
@AliasFor(annotation = RequestMapping.class) | |||||
String[] path() default {}; | |||||
/** | |||||
* Alias for {@link RequestMapping#params}. | |||||
*/ | |||||
@AliasFor(annotation = RequestMapping.class) | |||||
String[] params() default {}; | |||||
/** | |||||
* Alias for {@link RequestMapping#headers}. | |||||
*/ | |||||
@AliasFor(annotation = RequestMapping.class) | |||||
String[] headers() default {}; | |||||
/** | |||||
* Alias for {@link RequestMapping#consumes}. | |||||
*/ | |||||
@AliasFor(annotation = RequestMapping.class) | |||||
String[] consumes() default {}; | |||||
/** | |||||
* Alias for {@link RequestMapping#produces}. | |||||
*/ | |||||
@AliasFor(annotation = RequestMapping.class) | |||||
String[] produces() default {}; | |||||
} |
@@ -0,0 +1,90 @@ | |||||
/* | |||||
* Copyright 2002-2016 the original author or authors. | |||||
* | |||||
* Licensed under the Apache License, Version 2.0 (the "License"); | |||||
* you may not use this file except in compliance with the License. | |||||
* You may obtain a copy of the License at | |||||
* | |||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* Unless required by applicable law or agreed to in writing, software | |||||
* distributed under the License is distributed on an "AS IS" BASIS, | |||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
* See the License for the specific language governing permissions and | |||||
* limitations under the License. | |||||
*/ | |||||
package me.zhengjie.annotation.rest; | |||||
import java.lang.annotation.Documented; | |||||
import java.lang.annotation.ElementType; | |||||
import java.lang.annotation.Retention; | |||||
import java.lang.annotation.RetentionPolicy; | |||||
import java.lang.annotation.Target; | |||||
import me.zhengjie.annotation.AnonymousAccess; | |||||
import org.springframework.core.annotation.AliasFor; | |||||
import org.springframework.web.bind.annotation.RequestMapping; | |||||
import org.springframework.web.bind.annotation.RequestMethod; | |||||
/** | |||||
* Annotation for mapping HTTP {@code GET} requests onto specific handler | |||||
* methods. | |||||
* <p> | |||||
* 支持匿名访问 GetMapping | |||||
* | |||||
* @author liaojinlong | |||||
* @see RequestMapping | |||||
*/ | |||||
@AnonymousAccess | |||||
@Target(ElementType.METHOD) | |||||
@Retention(RetentionPolicy.RUNTIME) | |||||
@Documented | |||||
@RequestMapping(method = RequestMethod.GET) | |||||
public @interface AnonymousGetMapping { | |||||
/** | |||||
* Alias for {@link RequestMapping#name}. | |||||
*/ | |||||
@AliasFor(annotation = RequestMapping.class) | |||||
String name() default ""; | |||||
/** | |||||
* Alias for {@link RequestMapping#value}. | |||||
*/ | |||||
@AliasFor(annotation = RequestMapping.class) | |||||
String[] value() default {}; | |||||
/** | |||||
* Alias for {@link RequestMapping#path}. | |||||
*/ | |||||
@AliasFor(annotation = RequestMapping.class) | |||||
String[] path() default {}; | |||||
/** | |||||
* Alias for {@link RequestMapping#params}. | |||||
*/ | |||||
@AliasFor(annotation = RequestMapping.class) | |||||
String[] params() default {}; | |||||
/** | |||||
* Alias for {@link RequestMapping#headers}. | |||||
*/ | |||||
@AliasFor(annotation = RequestMapping.class) | |||||
String[] headers() default {}; | |||||
/** | |||||
* Alias for {@link RequestMapping#consumes}. | |||||
* | |||||
* @since 4.3.5 | |||||
*/ | |||||
@AliasFor(annotation = RequestMapping.class) | |||||
String[] consumes() default {}; | |||||
/** | |||||
* Alias for {@link RequestMapping#produces}. | |||||
*/ | |||||
@AliasFor(annotation = RequestMapping.class) | |||||
String[] produces() default {}; | |||||
} |
@@ -0,0 +1,91 @@ | |||||
/* | |||||
* Copyright 2002-2016 the original author or authors. | |||||
* | |||||
* Licensed under the Apache License, Version 2.0 (the "License"); | |||||
* you may not use this file except in compliance with the License. | |||||
* You may obtain a copy of the License at | |||||
* | |||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* Unless required by applicable law or agreed to in writing, software | |||||
* distributed under the License is distributed on an "AS IS" BASIS, | |||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
* See the License for the specific language governing permissions and | |||||
* limitations under the License. | |||||
*/ | |||||
package me.zhengjie.annotation.rest; | |||||
import java.lang.annotation.Documented; | |||||
import java.lang.annotation.ElementType; | |||||
import java.lang.annotation.Retention; | |||||
import java.lang.annotation.RetentionPolicy; | |||||
import java.lang.annotation.Target; | |||||
import me.zhengjie.annotation.AnonymousAccess; | |||||
import org.springframework.core.annotation.AliasFor; | |||||
import org.springframework.web.bind.annotation.RequestMapping; | |||||
import org.springframework.web.bind.annotation.RequestMethod; | |||||
/** | |||||
* Annotation for mapping HTTP {@code PATCH} requests onto specific handler | |||||
* methods. | |||||
* * 支持匿名访问 PatchMapping | |||||
* | |||||
* @author liaojinlong | |||||
* @see AnonymousGetMapping | |||||
* @see AnonymousPostMapping | |||||
* @see AnonymousPutMapping | |||||
* @see AnonymousDeleteMapping | |||||
* @see RequestMapping | |||||
*/ | |||||
@AnonymousAccess | |||||
@Target(ElementType.METHOD) | |||||
@Retention(RetentionPolicy.RUNTIME) | |||||
@Documented | |||||
@RequestMapping(method = RequestMethod.PATCH) | |||||
public @interface AnonymousPatchMapping { | |||||
/** | |||||
* Alias for {@link RequestMapping#name}. | |||||
*/ | |||||
@AliasFor(annotation = RequestMapping.class) | |||||
String name() default ""; | |||||
/** | |||||
* Alias for {@link RequestMapping#value}. | |||||
*/ | |||||
@AliasFor(annotation = RequestMapping.class) | |||||
String[] value() default {}; | |||||
/** | |||||
* Alias for {@link RequestMapping#path}. | |||||
*/ | |||||
@AliasFor(annotation = RequestMapping.class) | |||||
String[] path() default {}; | |||||
/** | |||||
* Alias for {@link RequestMapping#params}. | |||||
*/ | |||||
@AliasFor(annotation = RequestMapping.class) | |||||
String[] params() default {}; | |||||
/** | |||||
* Alias for {@link RequestMapping#headers}. | |||||
*/ | |||||
@AliasFor(annotation = RequestMapping.class) | |||||
String[] headers() default {}; | |||||
/** | |||||
* Alias for {@link RequestMapping#consumes}. | |||||
*/ | |||||
@AliasFor(annotation = RequestMapping.class) | |||||
String[] consumes() default {}; | |||||
/** | |||||
* Alias for {@link RequestMapping#produces}. | |||||
*/ | |||||
@AliasFor(annotation = RequestMapping.class) | |||||
String[] produces() default {}; | |||||
} |
@@ -0,0 +1,91 @@ | |||||
/* | |||||
* Copyright 2002-2016 the original author or authors. | |||||
* | |||||
* Licensed under the Apache License, Version 2.0 (the "License"); | |||||
* you may not use this file except in compliance with the License. | |||||
* You may obtain a copy of the License at | |||||
* | |||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* Unless required by applicable law or agreed to in writing, software | |||||
* distributed under the License is distributed on an "AS IS" BASIS, | |||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
* See the License for the specific language governing permissions and | |||||
* limitations under the License. | |||||
*/ | |||||
package me.zhengjie.annotation.rest; | |||||
import java.lang.annotation.Documented; | |||||
import java.lang.annotation.ElementType; | |||||
import java.lang.annotation.Retention; | |||||
import java.lang.annotation.RetentionPolicy; | |||||
import java.lang.annotation.Target; | |||||
import me.zhengjie.annotation.AnonymousAccess; | |||||
import org.springframework.core.annotation.AliasFor; | |||||
import org.springframework.web.bind.annotation.RequestMapping; | |||||
import org.springframework.web.bind.annotation.RequestMethod; | |||||
/** | |||||
* Annotation for mapping HTTP {@code POST} requests onto specific handler | |||||
* methods. | |||||
* 支持匿名访问 PostMapping | |||||
* | |||||
* @author liaojinlong | |||||
* @see AnonymousGetMapping | |||||
* @see AnonymousPostMapping | |||||
* @see AnonymousPutMapping | |||||
* @see AnonymousDeleteMapping | |||||
* @see RequestMapping | |||||
*/ | |||||
@AnonymousAccess | |||||
@Target(ElementType.METHOD) | |||||
@Retention(RetentionPolicy.RUNTIME) | |||||
@Documented | |||||
@RequestMapping(method = RequestMethod.POST) | |||||
public @interface AnonymousPostMapping { | |||||
/** | |||||
* Alias for {@link RequestMapping#name}. | |||||
*/ | |||||
@AliasFor(annotation = RequestMapping.class) | |||||
String name() default ""; | |||||
/** | |||||
* Alias for {@link RequestMapping#value}. | |||||
*/ | |||||
@AliasFor(annotation = RequestMapping.class) | |||||
String[] value() default {}; | |||||
/** | |||||
* Alias for {@link RequestMapping#path}. | |||||
*/ | |||||
@AliasFor(annotation = RequestMapping.class) | |||||
String[] path() default {}; | |||||
/** | |||||
* Alias for {@link RequestMapping#params}. | |||||
*/ | |||||
@AliasFor(annotation = RequestMapping.class) | |||||
String[] params() default {}; | |||||
/** | |||||
* Alias for {@link RequestMapping#headers}. | |||||
*/ | |||||
@AliasFor(annotation = RequestMapping.class) | |||||
String[] headers() default {}; | |||||
/** | |||||
* Alias for {@link RequestMapping#consumes}. | |||||
*/ | |||||
@AliasFor(annotation = RequestMapping.class) | |||||
String[] consumes() default {}; | |||||
/** | |||||
* Alias for {@link RequestMapping#produces}. | |||||
*/ | |||||
@AliasFor(annotation = RequestMapping.class) | |||||
String[] produces() default {}; | |||||
} |
@@ -0,0 +1,91 @@ | |||||
/* | |||||
* Copyright 2002-2016 the original author or authors. | |||||
* | |||||
* Licensed under the Apache License, Version 2.0 (the "License"); | |||||
* you may not use this file except in compliance with the License. | |||||
* You may obtain a copy of the License at | |||||
* | |||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* Unless required by applicable law or agreed to in writing, software | |||||
* distributed under the License is distributed on an "AS IS" BASIS, | |||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
* See the License for the specific language governing permissions and | |||||
* limitations under the License. | |||||
*/ | |||||
package me.zhengjie.annotation.rest; | |||||
import java.lang.annotation.Documented; | |||||
import java.lang.annotation.ElementType; | |||||
import java.lang.annotation.Retention; | |||||
import java.lang.annotation.RetentionPolicy; | |||||
import java.lang.annotation.Target; | |||||
import me.zhengjie.annotation.AnonymousAccess; | |||||
import org.springframework.core.annotation.AliasFor; | |||||
import org.springframework.web.bind.annotation.RequestMapping; | |||||
import org.springframework.web.bind.annotation.RequestMethod; | |||||
/** | |||||
* Annotation for mapping HTTP {@code PUT} requests onto specific handler | |||||
* methods. | |||||
* * 支持匿名访问 PutMapping | |||||
* | |||||
* @author liaojinlong | |||||
* @see AnonymousGetMapping | |||||
* @see AnonymousPostMapping | |||||
* @see AnonymousPutMapping | |||||
* @see AnonymousDeleteMapping | |||||
* @see RequestMapping | |||||
*/ | |||||
@AnonymousAccess | |||||
@Target(ElementType.METHOD) | |||||
@Retention(RetentionPolicy.RUNTIME) | |||||
@Documented | |||||
@RequestMapping(method = RequestMethod.PUT) | |||||
public @interface AnonymousPutMapping { | |||||
/** | |||||
* Alias for {@link RequestMapping#name}. | |||||
*/ | |||||
@AliasFor(annotation = RequestMapping.class) | |||||
String name() default ""; | |||||
/** | |||||
* Alias for {@link RequestMapping#value}. | |||||
*/ | |||||
@AliasFor(annotation = RequestMapping.class) | |||||
String[] value() default {}; | |||||
/** | |||||
* Alias for {@link RequestMapping#path}. | |||||
*/ | |||||
@AliasFor(annotation = RequestMapping.class) | |||||
String[] path() default {}; | |||||
/** | |||||
* Alias for {@link RequestMapping#params}. | |||||
*/ | |||||
@AliasFor(annotation = RequestMapping.class) | |||||
String[] params() default {}; | |||||
/** | |||||
* Alias for {@link RequestMapping#headers}. | |||||
*/ | |||||
@AliasFor(annotation = RequestMapping.class) | |||||
String[] headers() default {}; | |||||
/** | |||||
* Alias for {@link RequestMapping#consumes}. | |||||
*/ | |||||
@AliasFor(annotation = RequestMapping.class) | |||||
String[] consumes() default {}; | |||||
/** | |||||
* Alias for {@link RequestMapping#produces}. | |||||
*/ | |||||
@AliasFor(annotation = RequestMapping.class) | |||||
String[] produces() default {}; | |||||
} |
@@ -0,0 +1,99 @@ | |||||
/* | |||||
* Copyright 2019-2020 Zheng Jie | |||||
* | |||||
* Licensed under the Apache License, Version 2.0 (the "License"); | |||||
* you may not use this file except in compliance with the License. | |||||
* You may obtain a copy of the License at | |||||
* | |||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* Unless required by applicable law or agreed to in writing, software | |||||
* distributed under the License is distributed on an "AS IS" BASIS, | |||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
* See the License for the specific language governing permissions and | |||||
* limitations under the License. | |||||
*/ | |||||
package me.zhengjie.aspect; | |||||
import com.google.common.collect.ImmutableList; | |||||
import me.zhengjie.annotation.Limit; | |||||
import me.zhengjie.exception.BadRequestException; | |||||
import me.zhengjie.utils.RequestHolder; | |||||
import me.zhengjie.utils.StringUtils; | |||||
import org.aspectj.lang.ProceedingJoinPoint; | |||||
import org.aspectj.lang.annotation.Around; | |||||
import org.aspectj.lang.annotation.Aspect; | |||||
import org.aspectj.lang.annotation.Pointcut; | |||||
import org.aspectj.lang.reflect.MethodSignature; | |||||
import org.slf4j.Logger; | |||||
import org.slf4j.LoggerFactory; | |||||
import org.springframework.data.redis.core.RedisTemplate; | |||||
import org.springframework.data.redis.core.script.DefaultRedisScript; | |||||
import org.springframework.data.redis.core.script.RedisScript; | |||||
import org.springframework.stereotype.Component; | |||||
import javax.servlet.http.HttpServletRequest; | |||||
import java.lang.reflect.Method; | |||||
/** | |||||
* @author / | |||||
*/ | |||||
@Aspect | |||||
@Component | |||||
public class LimitAspect { | |||||
private final RedisTemplate<Object,Object> redisTemplate; | |||||
private static final Logger logger = LoggerFactory.getLogger(LimitAspect.class); | |||||
public LimitAspect(RedisTemplate<Object,Object> redisTemplate) { | |||||
this.redisTemplate = redisTemplate; | |||||
} | |||||
@Pointcut("@annotation(me.zhengjie.annotation.Limit)") | |||||
public void pointcut() { | |||||
} | |||||
@Around("pointcut()") | |||||
public Object around(ProceedingJoinPoint joinPoint) throws Throwable { | |||||
HttpServletRequest request = RequestHolder.getHttpServletRequest(); | |||||
MethodSignature signature = (MethodSignature) joinPoint.getSignature(); | |||||
Method signatureMethod = signature.getMethod(); | |||||
Limit limit = signatureMethod.getAnnotation(Limit.class); | |||||
LimitType limitType = limit.limitType(); | |||||
String key = limit.key(); | |||||
if (StringUtils.isEmpty(key)) { | |||||
if (limitType == LimitType.IP) { | |||||
key = StringUtils.getIp(request); | |||||
} else { | |||||
key = signatureMethod.getName(); | |||||
} | |||||
} | |||||
ImmutableList<Object> keys = ImmutableList.of(StringUtils.join(limit.prefix(), "_", key, "_", request.getRequestURI().replaceAll("/","_"))); | |||||
String luaScript = buildLuaScript(); | |||||
RedisScript<Number> redisScript = new DefaultRedisScript<>(luaScript, Number.class); | |||||
Number count = redisTemplate.execute(redisScript, keys, limit.count(), limit.period()); | |||||
if (null != count && count.intValue() <= limit.count()) { | |||||
logger.info("第{}次访问key为 {},描述为 [{}] 的接口", count, keys, limit.name()); | |||||
return joinPoint.proceed(); | |||||
} else { | |||||
throw new BadRequestException("访问次数受限制"); | |||||
} | |||||
} | |||||
/** | |||||
* 限流脚本 | |||||
*/ | |||||
private String buildLuaScript() { | |||||
return "local c" + | |||||
"\nc = redis.call('get',KEYS[1])" + | |||||
"\nif c and tonumber(c) > tonumber(ARGV[1]) then" + | |||||
"\nreturn c;" + | |||||
"\nend" + | |||||
"\nc = redis.call('incr',KEYS[1])" + | |||||
"\nif tonumber(c) == 1 then" + | |||||
"\nredis.call('expire',KEYS[1],ARGV[2])" + | |||||
"\nend" + | |||||
"\nreturn c;"; | |||||
} | |||||
} |
@@ -0,0 +1,27 @@ | |||||
/* | |||||
* Copyright 2019-2020 Zheng Jie | |||||
* | |||||
* Licensed under the Apache License, Version 2.0 (the "License"); | |||||
* you may not use this file except in compliance with the License. | |||||
* You may obtain a copy of the License at | |||||
* | |||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* Unless required by applicable law or agreed to in writing, software | |||||
* distributed under the License is distributed on an "AS IS" BASIS, | |||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
* See the License for the specific language governing permissions and | |||||
* limitations under the License. | |||||
*/ | |||||
package me.zhengjie.aspect; | |||||
/** | |||||
* 限流枚举 | |||||
* @author / | |||||
*/ | |||||
public enum LimitType { | |||||
// 默认 | |||||
CUSTOMER, | |||||
// by ip addr | |||||
IP | |||||
} |
@@ -0,0 +1,40 @@ | |||||
package me.zhengjie.base; | |||||
import lombok.Getter; | |||||
import lombok.Setter; | |||||
import org.apache.commons.lang3.builder.ToStringBuilder; | |||||
import java.io.Serializable; | |||||
import java.lang.reflect.Field; | |||||
import java.sql.Timestamp; | |||||
/** | |||||
* @author Zheng Jie | |||||
* @date 2019年10月24日20:48:53 | |||||
*/ | |||||
@Getter | |||||
@Setter | |||||
public class BaseDTO implements Serializable { | |||||
private String createBy; | |||||
private String updateBy; | |||||
private Timestamp createTime; | |||||
private Timestamp updateTime; | |||||
@Override | |||||
public String toString() { | |||||
ToStringBuilder builder = new ToStringBuilder(this); | |||||
Field[] fields = this.getClass().getDeclaredFields(); | |||||
try { | |||||
for (Field f : fields) { | |||||
f.setAccessible(true); | |||||
builder.append(f.getName(), f.get(this)).append("\n"); | |||||
} | |||||
} catch (Exception e) { | |||||
builder.append("toString builder encounter an error"); | |||||
} | |||||
return builder.toString(); | |||||
} | |||||
} |
@@ -0,0 +1,85 @@ | |||||
/* | |||||
* Copyright 2019-2020 Zheng Jie | |||||
* | |||||
* Licensed under the Apache License, Version 2.0 (the "License"); | |||||
* you may not use this file except in compliance with the License. | |||||
* You may obtain a copy of the License at | |||||
* | |||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* Unless required by applicable law or agreed to in writing, software | |||||
* distributed under the License is distributed on an "AS IS" BASIS, | |||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
* See the License for the specific language governing permissions and | |||||
* limitations under the License. | |||||
*/ | |||||
package me.zhengjie.base; | |||||
import io.swagger.annotations.ApiModelProperty; | |||||
import lombok.Getter; | |||||
import lombok.Setter; | |||||
import org.apache.commons.lang3.builder.ToStringBuilder; | |||||
import org.hibernate.annotations.CreationTimestamp; | |||||
import org.hibernate.annotations.UpdateTimestamp; | |||||
import org.springframework.data.annotation.CreatedBy; | |||||
import org.springframework.data.annotation.LastModifiedBy; | |||||
import org.springframework.data.jpa.domain.support.AuditingEntityListener; | |||||
import javax.persistence.Column; | |||||
import javax.persistence.EntityListeners; | |||||
import javax.persistence.MappedSuperclass; | |||||
import java.io.Serializable; | |||||
import java.lang.reflect.Field; | |||||
import java.sql.Timestamp; | |||||
/** | |||||
* 通用字段, is_del 根据需求自行添加 | |||||
* @author Zheng Jie | |||||
* @Date 2019年10月24日20:46:32 | |||||
*/ | |||||
@Getter | |||||
@Setter | |||||
@MappedSuperclass | |||||
@EntityListeners(AuditingEntityListener.class) | |||||
public class BaseEntity implements Serializable { | |||||
@CreatedBy | |||||
@Column(name = "create_by", updatable = false) | |||||
@ApiModelProperty(value = "创建人", hidden = true) | |||||
private String createBy; | |||||
@LastModifiedBy | |||||
@Column(name = "update_by") | |||||
@ApiModelProperty(value = "更新人", hidden = true) | |||||
private String updateBy; | |||||
@CreationTimestamp | |||||
@Column(name = "create_time", updatable = false) | |||||
@ApiModelProperty(value = "创建时间", hidden = true) | |||||
private Timestamp createTime; | |||||
@UpdateTimestamp | |||||
@Column(name = "update_time") | |||||
@ApiModelProperty(value = "更新时间", hidden = true) | |||||
private Timestamp updateTime; | |||||
/* 分组校验 */ | |||||
public @interface Create {} | |||||
/* 分组校验 */ | |||||
public @interface Update {} | |||||
@Override | |||||
public String toString() { | |||||
ToStringBuilder builder = new ToStringBuilder(this); | |||||
Field[] fields = this.getClass().getDeclaredFields(); | |||||
try { | |||||
for (Field f : fields) { | |||||
f.setAccessible(true); | |||||
builder.append(f.getName(), f.get(this)).append("\n"); | |||||
} | |||||
} catch (Exception e) { | |||||
builder.append("toString builder encounter an error"); | |||||
} | |||||
return builder.toString(); | |||||
} | |||||
} |
@@ -0,0 +1,53 @@ | |||||
/* | |||||
* Copyright 2019-2020 Zheng Jie | |||||
* | |||||
* Licensed under the Apache License, Version 2.0 (the "License"); | |||||
* you may not use this file except in compliance with the License. | |||||
* You may obtain a copy of the License at | |||||
* | |||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* Unless required by applicable law or agreed to in writing, software | |||||
* distributed under the License is distributed on an "AS IS" BASIS, | |||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
* See the License for the specific language governing permissions and | |||||
* limitations under the License. | |||||
*/ | |||||
package me.zhengjie.base; | |||||
import java.util.List; | |||||
/** | |||||
* @author Zheng Jie | |||||
* @date 2018-11-23 | |||||
*/ | |||||
public interface BaseMapper<D, E> { | |||||
/** | |||||
* DTO转Entity | |||||
* @param dto / | |||||
* @return / | |||||
*/ | |||||
E toEntity(D dto); | |||||
/** | |||||
* Entity转DTO | |||||
* @param entity / | |||||
* @return / | |||||
*/ | |||||
D toDto(E entity); | |||||
/** | |||||
* DTO集合转Entity集合 | |||||
* @param dtoList / | |||||
* @return / | |||||
*/ | |||||
List <E> toEntity(List<D> dtoList); | |||||
/** | |||||
* Entity集合转DTO集合 | |||||
* @param entityList / | |||||
* @return / | |||||
*/ | |||||
List <D> toDto(List<E> entityList); | |||||
} |
@@ -0,0 +1,45 @@ | |||||
/* | |||||
* Copyright 2019-2020 Zheng Jie | |||||
* | |||||
* Licensed under the Apache License, Version 2.0 (the "License"); | |||||
* you may not use this file except in compliance with the License. | |||||
* You may obtain a copy of the License at | |||||
* | |||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* Unless required by applicable law or agreed to in writing, software | |||||
* distributed under the License is distributed on an "AS IS" BASIS, | |||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
* See the License for the specific language governing permissions and | |||||
* limitations under the License. | |||||
*/ | |||||
package me.zhengjie.config; | |||||
import me.zhengjie.utils.SecurityUtils; | |||||
import org.springframework.data.domain.AuditorAware; | |||||
import org.springframework.stereotype.Component; | |||||
import java.util.Optional; | |||||
/** | |||||
* @description : 设置审计 | |||||
* @author : Dong ZhaoYang | |||||
* @date : 2019/10/28 | |||||
*/ | |||||
@Component("auditorAware") | |||||
public class AuditorConfig implements AuditorAware<String> { | |||||
/** | |||||
* 返回操作员标志信息 | |||||
* | |||||
* @return / | |||||
*/ | |||||
@Override | |||||
public Optional<String> getCurrentAuditor() { | |||||
try { | |||||
// 这里应根据实际业务情况获取具体信息 | |||||
return Optional.of(SecurityUtils.getCurrentUsername()); | |||||
}catch (Exception ignored){} | |||||
// 用户定时任务,或者无Token调用的情况 | |||||
return Optional.of("System"); | |||||
} | |||||
} |
@@ -0,0 +1,105 @@ | |||||
package me.zhengjie.config; | |||||
import org.springframework.context.ApplicationContext; | |||||
import org.springframework.context.ApplicationContextAware; | |||||
import org.springframework.context.annotation.Configuration; | |||||
import org.springframework.context.support.ClassPathXmlApplicationContext; | |||||
import java.util.Arrays; | |||||
import java.util.Collection; | |||||
import java.util.List; | |||||
import java.util.Map; | |||||
/** | |||||
* <p> | |||||
* bean 工厂, 通过spring容器获取容器中定义的bean | |||||
* </p> | |||||
* | |||||
* @Author xx | |||||
* @Date 2021/7/22 | |||||
**/ | |||||
@Configuration | |||||
public class BeanFactory implements ApplicationContextAware | |||||
{ | |||||
/** | |||||
* Spring应用上下文环境 | |||||
*/ | |||||
private static ApplicationContext context; | |||||
/** | |||||
* 实现ApplicationContextAware接口的回调方法,设置上下文环境 | |||||
* | |||||
* @param applicationContext | |||||
*/ | |||||
@Override | |||||
public void setApplicationContext(ApplicationContext applicationContext) | |||||
{ | |||||
context = applicationContext; | |||||
} | |||||
/** | |||||
* @return ApplicationContext | |||||
*/ | |||||
final public static ApplicationContext getApplicationContext() | |||||
{ | |||||
return context; | |||||
} | |||||
public static Object getBean(String name) | |||||
{ | |||||
return context.getBean(name); | |||||
} | |||||
public static <T> T getBean(String name, Class<T> requiredType) | |||||
{ | |||||
return context.getBean(name, requiredType); | |||||
} | |||||
public static <T> T getBean(Class<T> requiredType) | |||||
{ | |||||
return context.getBean(requiredType); | |||||
} | |||||
public static Object getBean(String name, Object... args) | |||||
{ | |||||
return context.getBean(name, args); | |||||
} | |||||
public static <T> Map<String, T> getBeansOfType(Class<T> type) | |||||
{ | |||||
return context.getBeansOfType(type); | |||||
} | |||||
public static <T> List<T> getBeans(Class<T> type) | |||||
{ | |||||
Collection<T> beans = context.getBeansOfType(type).values(); | |||||
@SuppressWarnings("unchecked") | |||||
List<T> result = (List<T>) Arrays.asList(beans.toArray()); | |||||
return result; | |||||
} | |||||
public static boolean containsBean(String name) | |||||
{ | |||||
return context.containsBean(name); | |||||
} | |||||
final public static ApplicationContext loadContext() | |||||
{ | |||||
context = new ClassPathXmlApplicationContext("spring_mysql.xml"); | |||||
return context; | |||||
} | |||||
public static void main(String[] args) | |||||
{ | |||||
// Map<String, LoginPlugin> plugins = getBeansOfType(LoginPlugin.class); | |||||
// | |||||
// for (Map.Entry<String, LoginPlugin> element: plugins.entrySet()) | |||||
// { | |||||
// System.out.println(element.getKey() + ": " + element.getValue()); | |||||
// } | |||||
} | |||||
} | |||||
@@ -0,0 +1,36 @@ | |||||
package me.zhengjie.config; | |||||
import org.springframework.http.HttpMethod; | |||||
import org.springframework.http.HttpStatus; | |||||
import org.springframework.stereotype.Component; | |||||
import org.springframework.web.servlet.HandlerInterceptor; | |||||
import javax.servlet.http.HttpServletRequest; | |||||
import javax.servlet.http.HttpServletResponse; | |||||
/** | |||||
* <p> | |||||
* | |||||
* </p> | |||||
* | |||||
* @Author xx | |||||
* @Date 2021/7/19 | |||||
**/ | |||||
@Component | |||||
public class CorsInterceptor implements HandlerInterceptor { | |||||
@Override | |||||
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { | |||||
response.setHeader("Access-Control-Allow-Origin", "*"); | |||||
response.setHeader("Access-Control-Allow-Credentials", "true"); | |||||
response.setHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS"); | |||||
response.setHeader("Access-Control-Max-Age", "86400"); | |||||
response.setHeader("Access-Control-Allow-Headers", "*"); | |||||
// 如果是OPTIONS则结束请求 | |||||
if (HttpMethod.OPTIONS.toString().equals(request.getMethod())) { | |||||
response.setStatus(HttpStatus.NO_CONTENT.value()); | |||||
return false; | |||||
} | |||||
return true; | |||||
} | |||||
} |
@@ -0,0 +1,39 @@ | |||||
package me.zhengjie.config; | |||||
import java.util.concurrent.atomic.AtomicLong; | |||||
import org.apache.ibatis.reflection.MetaObject; | |||||
import org.apache.ibatis.reflection.SystemMetaObject; | |||||
import org.springframework.stereotype.Component; | |||||
import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator; | |||||
import lombok.extern.slf4j.Slf4j; | |||||
/** | |||||
* <p> | |||||
* 自定义ID生成器 | |||||
* </p> | |||||
* | |||||
* @Author xx | |||||
* @Date 2021/7/12 | |||||
**/ | |||||
@Slf4j | |||||
@Component | |||||
public class CustomIdGenerator implements IdentifierGenerator { | |||||
private final AtomicLong al = new AtomicLong(1); | |||||
@Override | |||||
public Long nextId(Object entity) { | |||||
//可以将当前传入的class全类名来作为bizKey,或者提取参数来生成bizKey进行分布式Id调用生成. | |||||
String bizKey = entity.getClass().getName(); | |||||
log.info("bizKey:{}", bizKey); | |||||
MetaObject metaObject = SystemMetaObject.forObject(entity); | |||||
String name = (String) metaObject.getValue("name"); | |||||
final long id = al.getAndAdd(1); | |||||
log.info("为{}生成主键值->:{}", name, id); | |||||
return id; | |||||
} | |||||
} |
@@ -0,0 +1,58 @@ | |||||
package me.zhengjie.config; | |||||
import org.springframework.beans.factory.annotation.Value; | |||||
import org.springframework.context.annotation.Configuration; | |||||
import org.springframework.stereotype.Component; | |||||
/** | |||||
* 敦煌Api Properties | |||||
* @author rch | |||||
* @date 2022-06-27 | |||||
*/ | |||||
@Component | |||||
@Configuration | |||||
public class DhApiProperties { | |||||
public static String ACCESS_TOKEN; | |||||
public static String BUY_ORDER_URL; | |||||
public static String BUY_ORDER_METHOD; | |||||
public static String BUY_ORDER_V; | |||||
public static String PAY_ORDER_URL; | |||||
public static String PAY_ORDER_METHOD; | |||||
public static String PAY_ORDER_V; | |||||
@Value("${dh.access_token}") | |||||
public void setAccessToken(String accessToken) { | |||||
DhApiProperties.ACCESS_TOKEN = accessToken; | |||||
} | |||||
@Value("${dh.buy_order_url}") | |||||
public void setBuyOrderUrl(String buyOrderUrl) { | |||||
DhApiProperties.BUY_ORDER_URL = buyOrderUrl; | |||||
} | |||||
@Value("${dh.buy_order_method}") | |||||
public void setBuyOrderMethod(String buyOrderMethod) { | |||||
DhApiProperties.BUY_ORDER_METHOD = buyOrderMethod; | |||||
} | |||||
@Value("${dh.buy_order_v}") | |||||
public void setBuyOrderV(String buyOrderV) { | |||||
DhApiProperties.BUY_ORDER_V = buyOrderV; | |||||
} | |||||
@Value("${dh.pay_order_url}") | |||||
public void setPayOrderUrl(String payOrderUrl) { | |||||
DhApiProperties.PAY_ORDER_URL = payOrderUrl; | |||||
} | |||||
@Value("${dh.pay_order_method}") | |||||
public void setPayOrderMethod(String payOrderMethod) { | |||||
DhApiProperties.PAY_ORDER_METHOD = payOrderMethod; | |||||
} | |||||
@Value("${dh.pay_order_v}") | |||||
public void setPayOrderV(String payOrderV) { | |||||
DhApiProperties.PAY_ORDER_V = payOrderV; | |||||
} | |||||
} |
@@ -0,0 +1,37 @@ | |||||
/* | |||||
* Copyright 2019-2020 Zheng Jie | |||||
* | |||||
* Licensed under the Apache License, Version 2.0 (the "License"); | |||||
* you may not use this file except in compliance with the License. | |||||
* You may obtain a copy of the License at | |||||
* | |||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* Unless required by applicable law or agreed to in writing, software | |||||
* distributed under the License is distributed on an "AS IS" BASIS, | |||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
* See the License for the specific language governing permissions and | |||||
* limitations under the License. | |||||
*/ | |||||
package me.zhengjie.config; | |||||
import me.zhengjie.utils.SecurityUtils; | |||||
import org.springframework.security.core.GrantedAuthority; | |||||
import org.springframework.stereotype.Service; | |||||
import java.util.Arrays; | |||||
import java.util.List; | |||||
import java.util.stream.Collectors; | |||||
/** | |||||
* @author Zheng Jie | |||||
*/ | |||||
@Service(value = "el") | |||||
public class ElPermissionConfig { | |||||
public Boolean check(String ...permissions){ | |||||
// 获取当前用户的所有权限 | |||||
List<String> elPermissions = SecurityUtils.getCurrentUser().getAuthorities().stream().map(GrantedAuthority::getAuthority).collect(Collectors.toList()); | |||||
// 判断当前用户的所有权限是否包含接口上定义的权限 | |||||
return elPermissions.contains("admin") || Arrays.stream(permissions).anyMatch(elPermissions::contains); | |||||
} | |||||
} |
@@ -0,0 +1,60 @@ | |||||
/* | |||||
* Copyright 2019-2020 Zheng Jie | |||||
* | |||||
* Licensed under the Apache License, Version 2.0 (the "License"); | |||||
* you may not use this file except in compliance with the License. | |||||
* You may obtain a copy of the License at | |||||
* | |||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* Unless required by applicable law or agreed to in writing, software | |||||
* distributed under the License is distributed on an "AS IS" BASIS, | |||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
* See the License for the specific language governing permissions and | |||||
* limitations under the License. | |||||
*/ | |||||
package me.zhengjie.config; | |||||
import lombok.Data; | |||||
import me.zhengjie.utils.ElAdminConstant; | |||||
import org.springframework.boot.context.properties.ConfigurationProperties; | |||||
import org.springframework.context.annotation.Configuration; | |||||
/** | |||||
* @author Zheng Jie | |||||
*/ | |||||
@Data | |||||
@Configuration | |||||
@ConfigurationProperties(prefix = "file") | |||||
public class FileProperties { | |||||
/** 文件大小限制 */ | |||||
private Long maxSize; | |||||
/** 头像大小限制 */ | |||||
private Long avatarMaxSize; | |||||
private ElPath mac; | |||||
private ElPath linux; | |||||
private ElPath windows; | |||||
public ElPath getPath(){ | |||||
String os = System.getProperty("os.name"); | |||||
if(os.toLowerCase().startsWith(ElAdminConstant.WIN)) { | |||||
return windows; | |||||
} else if(os.toLowerCase().startsWith(ElAdminConstant.MAC)){ | |||||
return mac; | |||||
} | |||||
return linux; | |||||
} | |||||
@Data | |||||
public static class ElPath{ | |||||
private String path; | |||||
private String avatar; | |||||
} | |||||
} |
@@ -0,0 +1,31 @@ | |||||
package me.zhengjie.config; | |||||
import org.springframework.context.annotation.Configuration; | |||||
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; | |||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; | |||||
/** | |||||
* <p> | |||||
* 开放url访问上传到本地的图片 | |||||
* </p> | |||||
* | |||||
* @Author xx | |||||
* @Date 2021/8/11 | |||||
**/ | |||||
@Configuration | |||||
public class MvcConfig implements WebMvcConfigurer { | |||||
@Override | |||||
public void addResourceHandlers(ResourceHandlerRegistry registry) { | |||||
/* | |||||
* 说明:增加虚拟路径(经过本人测试:在此处配置的虚拟路径,用springboot内置的tomcat时有效, | |||||
* 用外部的tomcat也有效;所以用到外部的tomcat时不需在tomcat/config下的相应文件配置虚拟路径了,阿里云linux也没问题) | |||||
*/ | |||||
registry.addResourceHandler("/**").addResourceLocations("file:"+SystemConfig.IMG_PATH); | |||||
// 因为doc.html是在jar包里的,需要使用资源处理器注册静态资源。 | |||||
registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/"); | |||||
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/"); | |||||
} | |||||
} |
@@ -0,0 +1,82 @@ | |||||
package me.zhengjie.config; | |||||
import cn.hutool.core.util.ObjectUtil; | |||||
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; | |||||
import lombok.SneakyThrows; | |||||
import lombok.extern.slf4j.Slf4j; | |||||
import me.zhengjie.utils.DateUtil; | |||||
import me.zhengjie.utils.SecurityUtils; | |||||
import me.zhengjie.utils.StringUtils; | |||||
import me.zhengjie.utils.ValidationUtil; | |||||
import org.apache.ibatis.reflection.MetaObject; | |||||
import org.springframework.stereotype.Component; | |||||
import java.lang.reflect.Field; | |||||
import java.lang.reflect.Method; | |||||
/** | |||||
* <p> | |||||
* MyBatis Plus自动填充插入&更新时间 | |||||
* </p> | |||||
* | |||||
* @author: zeng | |||||
* @since: 2020-07-15 | |||||
*/ | |||||
@Slf4j | |||||
@Component | |||||
public class MyMetaObjectHandler implements MetaObjectHandler { | |||||
@Override | |||||
public void insertFill(MetaObject metaObject) { | |||||
log.info("start insert fill ...."); | |||||
Object object = metaObject.getOriginalObject(); | |||||
String gmName = getGmName(); | |||||
if (ObjectUtil.isNotEmpty(gmName)) { | |||||
setValue(object,"gmName",gmName); | |||||
} | |||||
if (ValidationUtil.isExistFieldName("createdAt", object)) { | |||||
setValue(object, "createdAt", DateUtil.getCurrentTime()); | |||||
} | |||||
if (ValidationUtil.isExistFieldName("updatedAt", object)) { | |||||
setValue(object, "updatedAt", DateUtil.getCurrentTime()); | |||||
} | |||||
} | |||||
@SneakyThrows | |||||
@Override | |||||
public void updateFill(MetaObject metaObject) { | |||||
Object object = metaObject.getOriginalObject(); | |||||
log.info("start update fill ...."); | |||||
String gmName = getGmName(); | |||||
if (ObjectUtil.isNotNull(gmName)) { | |||||
setValue(object,"gmName",gmName); | |||||
} | |||||
if (ValidationUtil.isExistFieldName("updatedAt", object)) { | |||||
setValue(object, "updatedAt", DateUtil.getCurrentTime()); | |||||
} | |||||
} | |||||
private void setValue( Object object, String fieldName, Object value) { | |||||
try { | |||||
if (ObjectUtil.isNotNull(value)) { | |||||
String str = "set" + StringUtils.toUpperCase4Index(fieldName); | |||||
Method method = object.getClass().getMethod(str, String.class); | |||||
method.invoke(object, value); | |||||
} | |||||
} catch (Exception e) { | |||||
e.printStackTrace(); | |||||
} | |||||
} | |||||
private String getGmName() { | |||||
try { | |||||
return SecurityUtils.getCurrentUsername(); | |||||
} catch (Exception e) { | |||||
return null; | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,32 @@ | |||||
package me.zhengjie.config; | |||||
import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor; | |||||
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; | |||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; | |||||
import org.springframework.context.annotation.Bean; | |||||
import org.springframework.context.annotation.Configuration; | |||||
import org.springframework.transaction.annotation.EnableTransactionManagement; | |||||
/** | |||||
* @author | |||||
* @date | |||||
*/ | |||||
@Configuration | |||||
@ConditionalOnClass(value = {PaginationInterceptor.class}) | |||||
@EnableTransactionManagement | |||||
public class MybatisPlusConfig { | |||||
@Bean | |||||
public PaginationInterceptor paginationInterceptor() { | |||||
PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); | |||||
return paginationInterceptor; | |||||
} | |||||
/** | |||||
* 乐观锁 :CAS方案解决 当要更新一条记录的时候,希望这条记录没有被别人更新 | |||||
* @return | |||||
*/ | |||||
@Bean | |||||
public OptimisticLockerInterceptor optimisticLockerInterceptor() { | |||||
return new OptimisticLockerInterceptor(); | |||||
} | |||||
} |
@@ -0,0 +1,44 @@ | |||||
/* | |||||
* Copyright 2019-2020 Zheng Jie | |||||
* | |||||
* Licensed under the Apache License, Version 2.0 (the "License"); | |||||
* you may not use this file except in compliance with the License. | |||||
* You may obtain a copy of the License at | |||||
* | |||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* Unless required by applicable law or agreed to in writing, software | |||||
* distributed under the License is distributed on an "AS IS" BASIS, | |||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
* See the License for the specific language governing permissions and | |||||
* limitations under the License. | |||||
*/ | |||||
package me.zhengjie.config; | |||||
import lombok.Data; | |||||
import me.zhengjie.utils.ElAdminConstant; | |||||
import org.springframework.boot.context.properties.ConfigurationProperties; | |||||
import org.springframework.context.annotation.Configuration; | |||||
/** | |||||
* @author rch | |||||
* @date 2022-07-06 | |||||
*/ | |||||
@Data | |||||
@Configuration | |||||
@ConfigurationProperties(prefix = "plats") | |||||
public class PlatsProperties { | |||||
private DhProperties dh; | |||||
@Data | |||||
public static class DhProperties{ | |||||
private String buyOrderUrl; | |||||
private String buyOrderMethod; | |||||
private String buyOrderv; | |||||
private String payOrder_url; | |||||
private String payOrderMethod; | |||||
private String payOrderv; | |||||
} | |||||
} |
@@ -0,0 +1,30 @@ | |||||
package me.zhengjie.config; | |||||
import lombok.Data; | |||||
import org.springframework.boot.context.properties.ConfigurationProperties; | |||||
import org.springframework.context.annotation.Configuration; | |||||
import org.springframework.stereotype.Component; | |||||
import java.util.List; | |||||
import java.util.Map; | |||||
/** | |||||
* <p> | |||||
* | |||||
* </p> | |||||
* | |||||
* @Author xx | |||||
* @Date 2021/7/26 | |||||
**/ | |||||
@Data | |||||
@Component | |||||
@Configuration | |||||
@ConfigurationProperties(prefix = "config") | |||||
public class PropertiesConfig { | |||||
private String uploadPrefix; | |||||
private Map<Integer,String> uploadImgPath; | |||||
private List<String> excludeUrlList; | |||||
private List<String> sustainImgFormat; | |||||
/** 放掉的api 校验token */ | |||||
private String apiToken; | |||||
} |
@@ -0,0 +1,223 @@ | |||||
/* | |||||
* Copyright 2019-2020 Zheng Jie | |||||
* | |||||
* Licensed under the Apache License, Version 2.0 (the "License"); | |||||
* you may not use this file except in compliance with the License. | |||||
* You may obtain a copy of the License at | |||||
* | |||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* Unless required by applicable law or agreed to in writing, software | |||||
* distributed under the License is distributed on an "AS IS" BASIS, | |||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
* See the License for the specific language governing permissions and | |||||
* limitations under the License. | |||||
*/ | |||||
package me.zhengjie.config; | |||||
import cn.hutool.core.lang.Assert; | |||||
import com.alibaba.fastjson.JSON; | |||||
import com.alibaba.fastjson.parser.ParserConfig; | |||||
import com.alibaba.fastjson.serializer.SerializerFeature; | |||||
import lombok.extern.slf4j.Slf4j; | |||||
import me.zhengjie.utils.StringUtils; | |||||
import org.apache.commons.codec.digest.DigestUtils; | |||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; | |||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; | |||||
import org.springframework.boot.autoconfigure.data.redis.RedisProperties; | |||||
import org.springframework.boot.context.properties.EnableConfigurationProperties; | |||||
import org.springframework.cache.Cache; | |||||
import org.springframework.cache.annotation.CachingConfigurerSupport; | |||||
import org.springframework.cache.annotation.EnableCaching; | |||||
import org.springframework.cache.interceptor.CacheErrorHandler; | |||||
import org.springframework.cache.interceptor.KeyGenerator; | |||||
import org.springframework.context.annotation.Bean; | |||||
import org.springframework.context.annotation.Configuration; | |||||
import org.springframework.data.redis.cache.RedisCacheConfiguration; | |||||
import org.springframework.data.redis.connection.RedisConnectionFactory; | |||||
import org.springframework.data.redis.core.RedisOperations; | |||||
import org.springframework.data.redis.core.RedisTemplate; | |||||
import org.springframework.data.redis.core.StringRedisTemplate; | |||||
import org.springframework.data.redis.serializer.RedisSerializationContext; | |||||
import org.springframework.data.redis.serializer.RedisSerializer; | |||||
import java.nio.charset.Charset; | |||||
import java.nio.charset.StandardCharsets; | |||||
import java.time.Duration; | |||||
import java.util.HashMap; | |||||
import java.util.Map; | |||||
/** | |||||
* @author Zheng Jie | |||||
* @date 2018-11-24 | |||||
*/ | |||||
@Slf4j | |||||
@Configuration | |||||
@EnableCaching | |||||
@ConditionalOnClass(RedisOperations.class) | |||||
@EnableConfigurationProperties(RedisProperties.class) | |||||
public class RedisConfig extends CachingConfigurerSupport { | |||||
/** | |||||
* 设置 redis 数据默认过期时间,默认2小时 | |||||
* 设置@cacheable 序列化方式 | |||||
*/ | |||||
@Bean | |||||
public RedisCacheConfiguration redisCacheConfiguration(){ | |||||
FastJsonRedisSerializer<Object> fastJsonRedisSerializer = new FastJsonRedisSerializer<>(Object.class); | |||||
RedisCacheConfiguration configuration = RedisCacheConfiguration.defaultCacheConfig(); | |||||
configuration = configuration.serializeValuesWith(RedisSerializationContext. | |||||
SerializationPair.fromSerializer(fastJsonRedisSerializer)).entryTtl(Duration.ofHours(6)); | |||||
return configuration; | |||||
} | |||||
@SuppressWarnings("all") | |||||
@Bean(name = "redisTemplate") | |||||
@ConditionalOnMissingBean(name = "redisTemplate") | |||||
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { | |||||
RedisTemplate<Object, Object> template = new RedisTemplate<>(); | |||||
//序列化 | |||||
FastJsonRedisSerializer<Object> fastJsonRedisSerializer = new FastJsonRedisSerializer<>(Object.class); | |||||
// value值的序列化采用fastJsonRedisSerializer | |||||
template.setValueSerializer(fastJsonRedisSerializer); | |||||
template.setHashValueSerializer(fastJsonRedisSerializer); | |||||
// 全局开启AutoType,这里方便开发,使用全局的方式 | |||||
ParserConfig.getGlobalInstance().setAutoTypeSupport(true); | |||||
// 建议使用这种方式,小范围指定白名单 | |||||
// ParserConfig.getGlobalInstance().addAccept("me.zhengjie.domain"); | |||||
// key的序列化采用StringRedisSerializer | |||||
template.setKeySerializer(new StringRedisSerializer()); | |||||
template.setHashKeySerializer(new StringRedisSerializer()); | |||||
template.setConnectionFactory(redisConnectionFactory); | |||||
return template; | |||||
} | |||||
@Bean | |||||
public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) { | |||||
StringRedisTemplate stringRedisTemplate = new StringRedisTemplate(); | |||||
stringRedisTemplate.setConnectionFactory(redisConnectionFactory); | |||||
return stringRedisTemplate; | |||||
} | |||||
/** | |||||
* 自定义缓存key生成策略,默认将使用该策略 | |||||
*/ | |||||
@Bean | |||||
@Override | |||||
public KeyGenerator keyGenerator() { | |||||
return (target, method, params) -> { | |||||
Map<String,Object> container = new HashMap<>(3); | |||||
Class<?> targetClassClass = target.getClass(); | |||||
// 类地址 | |||||
container.put("class",targetClassClass.toGenericString()); | |||||
// 方法名称 | |||||
container.put("methodName",method.getName()); | |||||
// 包名称 | |||||
container.put("package",targetClassClass.getPackage()); | |||||
// 参数列表 | |||||
for (int i = 0; i < params.length; i++) { | |||||
container.put(String.valueOf(i),params[i]); | |||||
} | |||||
// 转为JSON字符串 | |||||
String jsonString = JSON.toJSONString(container); | |||||
// 做SHA256 Hash计算,得到一个SHA256摘要作为Key | |||||
return DigestUtils.sha256Hex(jsonString); | |||||
}; | |||||
} | |||||
@Bean | |||||
@Override | |||||
public CacheErrorHandler errorHandler() { | |||||
// 异常处理,当Redis发生异常时,打印日志,但是程序正常走 | |||||
log.info("初始化 -> [{}]", "Redis CacheErrorHandler"); | |||||
return new CacheErrorHandler() { | |||||
@Override | |||||
public void handleCacheGetError(RuntimeException e, Cache cache, Object key) { | |||||
log.error("Redis occur handleCacheGetError:key -> [{}]", key, e); | |||||
} | |||||
@Override | |||||
public void handleCachePutError(RuntimeException e, Cache cache, Object key, Object value) { | |||||
log.error("Redis occur handleCachePutError:key -> [{}];value -> [{}]", key, value, e); | |||||
} | |||||
@Override | |||||
public void handleCacheEvictError(RuntimeException e, Cache cache, Object key) { | |||||
log.error("Redis occur handleCacheEvictError:key -> [{}]", key, e); | |||||
} | |||||
@Override | |||||
public void handleCacheClearError(RuntimeException e, Cache cache) { | |||||
log.error("Redis occur handleCacheClearError:", e); | |||||
} | |||||
}; | |||||
} | |||||
} | |||||
/** | |||||
* Value 序列化 | |||||
* | |||||
* @author / | |||||
* @param <T> | |||||
*/ | |||||
class FastJsonRedisSerializer<T> implements RedisSerializer<T> { | |||||
private final Class<T> clazz; | |||||
FastJsonRedisSerializer(Class<T> clazz) { | |||||
super(); | |||||
this.clazz = clazz; | |||||
} | |||||
@Override | |||||
public byte[] serialize(T t) { | |||||
if (t == null) { | |||||
return new byte[0]; | |||||
} | |||||
return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(StandardCharsets.UTF_8); | |||||
} | |||||
@Override | |||||
public T deserialize(byte[] bytes) { | |||||
if (bytes == null || bytes.length <= 0) { | |||||
return null; | |||||
} | |||||
String str = new String(bytes, StandardCharsets.UTF_8); | |||||
return JSON.parseObject(str, clazz); | |||||
} | |||||
} | |||||
/** | |||||
* 重写序列化器 | |||||
* | |||||
* @author / | |||||
*/ | |||||
class StringRedisSerializer implements RedisSerializer<Object> { | |||||
private final Charset charset; | |||||
StringRedisSerializer() { | |||||
this(StandardCharsets.UTF_8); | |||||
} | |||||
private StringRedisSerializer(Charset charset) { | |||||
Assert.notNull(charset, "Charset must not be null!"); | |||||
this.charset = charset; | |||||
} | |||||
@Override | |||||
public String deserialize(byte[] bytes) { | |||||
return (bytes == null ? null : new String(bytes, charset)); | |||||
} | |||||
@Override | |||||
public byte[] serialize(Object object) { | |||||
String string = JSON.toJSONString(object); | |||||
if (StringUtils.isBlank(string)) { | |||||
return null; | |||||
} | |||||
string = string.replace("\"", ""); | |||||
return string.getBytes(charset); | |||||
} | |||||
} |
@@ -0,0 +1,48 @@ | |||||
package me.zhengjie.config; | |||||
import cn.hutool.core.util.ObjectUtil; | |||||
import lombok.Data; | |||||
import org.redisson.Redisson; | |||||
import org.redisson.api.RedissonClient; | |||||
import org.redisson.config.Config; | |||||
import org.springframework.beans.factory.annotation.Value; | |||||
import org.springframework.context.annotation.Bean; | |||||
import org.springframework.context.annotation.Configuration; | |||||
/** | |||||
* <p> | |||||
*redisson 配置类 | |||||
* </p> | |||||
* | |||||
* @Author xx | |||||
* @Date 2021/8/11 | |||||
**/ | |||||
@Configuration | |||||
@Data | |||||
public class RedissonConfig { | |||||
@Value("${spring.redis.host}") | |||||
private String host; | |||||
@Value("${spring.redis.port}") | |||||
private String port; | |||||
@Value("${spring.redis.password}") | |||||
private String password; | |||||
@Value("${spring.redis.database}") | |||||
private Integer database; | |||||
@Bean | |||||
public RedissonClient getRedisson(){ | |||||
Config config = new Config(); | |||||
// 若redis为设置密码,将密码设置为null (防止password='' 运行报错) | |||||
if (ObjectUtil.isEmpty(password)) { | |||||
password = null; | |||||
} | |||||
config.useSingleServer().setAddress("redis://" + host + ":" + port).setDatabase(database).setPassword(password); | |||||
//添加主从配置 | |||||
// config.useMasterSlaveServers().setMasterAddress("").setPassword("").addSlaveAddress(new String[]{"",""}); | |||||
return Redisson.create(config); | |||||
} | |||||
} |
@@ -0,0 +1,38 @@ | |||||
/* | |||||
* Copyright 2019-2020 Zheng Jie | |||||
* | |||||
* Licensed under the Apache License, Version 2.0 (the "License"); | |||||
* you may not use this file except in compliance with the License. | |||||
* You may obtain a copy of the License at | |||||
* | |||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* Unless required by applicable law or agreed to in writing, software | |||||
* distributed under the License is distributed on an "AS IS" BASIS, | |||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
* See the License for the specific language governing permissions and | |||||
* limitations under the License. | |||||
*/ | |||||
package me.zhengjie.config; | |||||
import lombok.Data; | |||||
import org.springframework.beans.factory.annotation.Value; | |||||
import org.springframework.stereotype.Component; | |||||
/** | |||||
* @author Zheng Jie | |||||
* @website https://el-admin.vip | |||||
* @description | |||||
* @date 2020-05-18 | |||||
**/ | |||||
@Data | |||||
@Component | |||||
public class RsaProperties { | |||||
public static String privateKey; | |||||
@Value("${rsa.private_key}") | |||||
public void setPrivateKey(String privateKey) { | |||||
RsaProperties.privateKey = privateKey; | |||||
} | |||||
} |
@@ -0,0 +1,217 @@ | |||||
/* | |||||
* Copyright 2019-2020 Zheng Jie | |||||
* | |||||
* Licensed under the Apache License, Version 2.0 (the "License"); | |||||
* you may not use this file except in compliance with the License. | |||||
* You may obtain a copy of the License at | |||||
* | |||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* Unless required by applicable law or agreed to in writing, software | |||||
* distributed under the License is distributed on an "AS IS" BASIS, | |||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
* See the License for the specific language governing permissions and | |||||
* limitations under the License. | |||||
*/ | |||||
package me.zhengjie.config; | |||||
import org.springframework.context.annotation.Bean; | |||||
import org.springframework.context.annotation.Configuration; | |||||
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.ApiInfo; | |||||
import springfox.documentation.service.Contact; | |||||
import springfox.documentation.service.Parameter; | |||||
import springfox.documentation.spi.DocumentationType; | |||||
import springfox.documentation.spring.web.plugins.Docket; | |||||
import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc; | |||||
import java.util.ArrayList; | |||||
import java.util.List; | |||||
/** | |||||
* api页面 /doc.html | |||||
* @author Zheng Jie | |||||
* @date 2018-11-23 | |||||
*/ | |||||
@Configuration | |||||
@EnableSwagger2WebMvc//新版本 | |||||
public class SwaggerConfig { | |||||
@Bean(value = "buildBaseDocket") | |||||
public Docket buildBaseDocket() { | |||||
return new Docket(DocumentationType.SWAGGER_2) | |||||
.groupName("基础业务接口") | |||||
.apiInfo(buildApiInf()) | |||||
.select() | |||||
//controller包路径 | |||||
.apis(RequestHandlerSelectors.basePackage("me.zhengjie.modules.group.controller.base")) | |||||
.paths(PathSelectors.any()) | |||||
.build() | |||||
.globalOperationParameters(getParmeter()); | |||||
} | |||||
@Bean(value = "buildOtherDocket") | |||||
public Docket buildOtherDocket() { | |||||
return new Docket(DocumentationType.SWAGGER_2) | |||||
.groupName("其他业务接口") | |||||
.apiInfo(buildApiInf()) | |||||
.select() | |||||
//controller包路径 | |||||
.apis(RequestHandlerSelectors.basePackage("me.zhengjie.modules.capital.controller.base")) | |||||
.paths(PathSelectors.any()) | |||||
.build() | |||||
.globalOperationParameters(getParmeter()); | |||||
} | |||||
@Bean(value = "buildCallBackDocket") | |||||
public Docket buildCallBackDocket() { | |||||
return new Docket(DocumentationType.SWAGGER_2) | |||||
.groupName("回调业务接口") | |||||
.apiInfo(buildApiInf()) | |||||
.select() | |||||
//controller包路径 | |||||
.apis(RequestHandlerSelectors.basePackage("me.zhengjie.modules.group.controller.callbcak")) | |||||
.paths(PathSelectors.any()) | |||||
.build() | |||||
.globalOperationParameters(getParmeter()); | |||||
} | |||||
@Bean(value = "buildSystemDocket") | |||||
public Docket buildSystemDocket() { | |||||
return new Docket(DocumentationType.SWAGGER_2) | |||||
.groupName("系统业务接口") | |||||
.apiInfo(buildApiInf()) | |||||
.select() | |||||
//controller包路径 | |||||
.apis(RequestHandlerSelectors.basePackage("me.zhengjie.modules.system.rest")) | |||||
.paths(PathSelectors.any()) | |||||
.build() | |||||
.globalOperationParameters(getParmeter()); | |||||
} | |||||
/** | |||||
* 描述信息 | |||||
*/ | |||||
private ApiInfo buildApiInf() { | |||||
return new ApiInfoBuilder() | |||||
// 文档标题 | |||||
.title("旺嘉分销管理系统-接口文档") | |||||
// 版本信息 | |||||
.version("1.0") | |||||
// 文档描述 | |||||
.description("旺嘉分销管理系统管理文档") | |||||
// 版权地址 | |||||
.termsOfServiceUrl("http://www.wjcy.com") | |||||
// 版权 | |||||
.license("旺嘉创亿") | |||||
// 联系人信息 | |||||
.contact(new Contact("rch", "http://www.baidu.com", "baidu@qq.com")) | |||||
.build(); | |||||
} | |||||
public List<Parameter> getParmeter() { | |||||
ParameterBuilder tokenPar = new ParameterBuilder(); | |||||
List<Parameter> pars = new ArrayList<>(); | |||||
tokenPar.name("Authorization").description("令牌").defaultValue("设置token默认值").modelRef(new ModelRef("string")).parameterType("header").required(false).build(); | |||||
pars.add(tokenPar.build()); | |||||
return pars; | |||||
} | |||||
// @Bean | |||||
// @SuppressWarnings("all") | |||||
// public Docket createRestApi() { | |||||
// return new Docket(DocumentationType.SWAGGER_2) | |||||
// .enable(enabled) | |||||
// .pathMapping("/") | |||||
// .apiInfo(apiInfo()) | |||||
// .select() | |||||
// .paths(Predicates.not(PathSelectors.regex("/error.*"))) | |||||
// .paths(PathSelectors.any()) | |||||
// .build() | |||||
// //添加登陆认证 | |||||
// .securitySchemes(securitySchemes()) | |||||
// .securityContexts(securityContexts()); | |||||
// } | |||||
// | |||||
// private ApiInfo apiInfo() { | |||||
// return new ApiInfoBuilder() | |||||
// .description("一个简单且易上手的 Spring boot 后台管理框架") | |||||
// .title("EL-ADMIN 接口文档") | |||||
// .version("2.6") | |||||
// .build(); | |||||
// } | |||||
// | |||||
// private List<SecurityScheme> securitySchemes() { | |||||
// //设置请求头信息 | |||||
// List<SecurityScheme> securitySchemes = new ArrayList<>(); | |||||
// ApiKey apiKey = new ApiKey(tokenHeader, tokenHeader, "header"); | |||||
// securitySchemes.add(apiKey); | |||||
// return securitySchemes; | |||||
// } | |||||
// | |||||
// private List<SecurityContext> securityContexts() { | |||||
// //设置需要登录认证的路径 | |||||
// List<SecurityContext> securityContexts = new ArrayList<>(); | |||||
// // ^(?!auth).*$ 表示所有包含auth的接口不需要使用securitySchemes即不需要带token | |||||
// // ^标识开始 ()里是一子表达式 ?!/auth表示匹配不是/auth的位置,匹配上则添加请求头,注意路径已/开头 .表示任意字符 *表示前面的字符匹配多次 $标识结束 | |||||
// securityContexts.add(getContextByPath()); | |||||
// return securityContexts; | |||||
// } | |||||
// | |||||
// private SecurityContext getContextByPath() { | |||||
// return SecurityContext.builder() | |||||
// .securityReferences(defaultAuth()) | |||||
// .forPaths(PathSelectors.regex("^(?!/auth).*$")) | |||||
// .build(); | |||||
// } | |||||
// | |||||
// private List<SecurityReference> defaultAuth() { | |||||
// List<SecurityReference> securityReferences = new ArrayList<>(); | |||||
// AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything"); | |||||
// AuthorizationScope[] authorizationScopes = new AuthorizationScope[1]; | |||||
// authorizationScopes[0] = authorizationScope; | |||||
// securityReferences.add(new SecurityReference(tokenHeader, authorizationScopes)); | |||||
// return securityReferences; | |||||
// } | |||||
//} | |||||
// | |||||
///** | |||||
// * 将Pageable转换展示在swagger中 | |||||
// */ | |||||
//@Configuration | |||||
//class SwaggerDataConfig { | |||||
// | |||||
// @Bean | |||||
// public AlternateTypeRuleConvention pageableConvention(final TypeResolver resolver) { | |||||
// return new AlternateTypeRuleConvention() { | |||||
// @Override | |||||
// public int getOrder() { | |||||
// return Ordered.HIGHEST_PRECEDENCE; | |||||
// } | |||||
// | |||||
// @Override | |||||
// public List<AlternateTypeRule> rules() { | |||||
// return newArrayList(newRule(resolver.resolve(Pageable.class), resolver.resolve(Page.class))); | |||||
// } | |||||
// }; | |||||
// } | |||||
// | |||||
// @ApiModel | |||||
// @Data | |||||
// private static class Page { | |||||
// @ApiModelProperty("页码 (0..N)") | |||||
// private Integer page; | |||||
// | |||||
// @ApiModelProperty("每页显示的数目") | |||||
// private Integer size; | |||||
// | |||||
// @ApiModelProperty("以下列格式排序标准:property[,asc | desc]。 默认排序顺序为升序。 支持多种排序条件:如:id,asc") | |||||
// private List<String> sort; | |||||
// } | |||||
} |
@@ -0,0 +1,97 @@ | |||||
package me.zhengjie.config; | |||||
import cn.hutool.core.lang.Snowflake; | |||||
import org.springframework.beans.factory.annotation.Value; | |||||
import org.springframework.context.annotation.Bean; | |||||
import org.springframework.context.annotation.Configuration; | |||||
import org.springframework.stereotype.Component; | |||||
/** | |||||
* <p> | |||||
* 系统配置类,从配置文件中注入配置信息 | |||||
* </p> | |||||
* | |||||
* @Author xx | |||||
* @Date 2021/7/21 | |||||
**/ | |||||
@Component | |||||
@Configuration | |||||
public class SystemConfig { | |||||
/** 聊天室默认头像 */ | |||||
public static String DEFAULT_MEMBER_HEAD = "/capital/chat/head/default.jpg"; | |||||
/** | |||||
* 图片存放的绝对路径 | |||||
*/ | |||||
public static String IMG_PATH; | |||||
/** | |||||
* 静态资源访问路径(返回前端时添加) | |||||
*/ | |||||
public static String FILE_VISIT_ADDR; | |||||
/** | |||||
* 文件上传接口后缀,用来放行xss过滤 | |||||
*/ | |||||
public static String UPLOAD_SUFFIX; | |||||
/** | |||||
* 单文件上传大小限制,单位 :MB | |||||
*/ | |||||
public static Integer MAX_FILE_SIZE; | |||||
/** | |||||
* 视频单文件上传大小限制,单位 :MB | |||||
*/ | |||||
public static Integer VIDEO_MAX_FILE_SIZE; | |||||
/** 多语言文件路径 */ | |||||
public static String LANGUAGE_PATH; | |||||
public static final String publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCn4jGDcYFGhxNaIKO+oK6ALzHzXupk7+aYa7FYlnS6A/AM9cwgzdksGqfKi7//XDlrqp5jyfecciU7KW7xzs9g+8ZHGy8IEVBqhsOBOjPvi3twc9kdWPhtsRY5X1J2PfRilT/jIMDpBflLf0CrrrPXezKENwRMxlkmSOZqvg0sOwIDAQAB"; | |||||
public static final String privateKey = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAKfiMYNxgUaHE1ogo76groAvMfNe6mTv5phrsViWdLoD8Az1zCDN2Swap8qLv/9cOWuqnmPJ95xyJTspbvHOz2D7xkcbLwgRUGqGw4E6M++Le3Bz2R1Y+G2xFjlfUnY99GKVP+MgwOkF+Ut/QKuus9d7MoQ3BEzGWSZI5mq+DSw7AgMBAAECgYEAlnQ7JW5aicdSC4qG1LcRy+T/4filHXJ1+RFCbX7g+ze+MQ8zMg7o2wLEbtvRZFvVRe0xZ4K/+p+9SAj42ZIa/H7ktxhkaxNHVYHVafAuLu2/VFCc7vNPUVu5Fx1xLEg0q2q5TJ2OPlzh9aARh4PW1IetLPBeQSi1qUHVrhPQvskCQQDSxIYv3dpFw9ljqtSriNtIfHSqYAATGtp5SvFfw63fRtvxK6X5Zkdy9ExYe9SOm9u3Q7P4QEKbd4Rbf22Zp2O3AkEAy+mjDGtUP7unrfpuEpe/b+uMPB5+jcmTDDsu3ReZcTzH6BFCqeyR3FBsApLSVWLXuJNKfdKGmH/SwXv2nFUjnQJBAMUE7CKmkbkRYI7oS7ClV8YkgLIa1zcErSEgyw0nz8qdZE/G63l9AGEWuJ8l8gX076gaY4s2Fo1ZZaJaNcuiS3UCQCXFxbpLN3QG4uzLcxBmo8OrsnKAg5joOiEN5YR3FqlvROisKdkoRWy2SQvA/s1qXeOHBUmBcgVVyEinGeujqdECQAeBvDraddWeGuqTEtOXJhQiPxmahUWE2h5htpFdK3+cVt5HiRM89SLM64kHAx7m/RxiGscnhbbXUvSx0H/36R0="; | |||||
/** websocket服务器连接地址 */ | |||||
public static String WS_URL; | |||||
/** 百度翻译 APPID */ | |||||
public static String BAIDU_APPID; | |||||
/** 百度翻译privateKey */ | |||||
public static String BAIDU_PRIVATEKEY; | |||||
/** 百度翻译URL */ | |||||
public static final String BAIDU_URL = "https://fanyi-api.baidu.com/api/trans/vip/translate"; | |||||
public static String IP2REGION_DB_PATH; | |||||
@Value("${system.imgPath}") | |||||
public void setImgPath(String imgPath) { | |||||
IMG_PATH = imgPath; | |||||
} | |||||
@Value("${system.fileVisitAddr}") | |||||
public void setFileVisitAddr(String fileVisitAddr) { | |||||
FILE_VISIT_ADDR = fileVisitAddr; | |||||
} | |||||
@Value("${system.uploadSuffix}") | |||||
public void setUploadSuffix(String uploadSuffix) { | |||||
UPLOAD_SUFFIX = uploadSuffix; | |||||
} | |||||
@Value("${system.maxFileSize}") | |||||
public void setMaxFileSize(Integer maxFileSize) { | |||||
MAX_FILE_SIZE = maxFileSize; | |||||
} | |||||
@Value("${system.maxVideoFileSize}") | |||||
public void setVideoMaxFileSize(Integer maxVideoFileSize) { | |||||
VIDEO_MAX_FILE_SIZE = maxVideoFileSize; | |||||
} | |||||
@Value("${system.ip2regionDbPath}") | |||||
public void setIp2regionDbPath(String ip2regionDbPath) { | |||||
IP2REGION_DB_PATH = ip2regionDbPath; | |||||
} | |||||
@Value("${system.languagePath}") | |||||
public void setLanguagePath(String languagePath) { | |||||
LANGUAGE_PATH = languagePath; | |||||
} | |||||
@Bean | |||||
public Snowflake snowFlakeInit() { | |||||
return new Snowflake(2, 3); | |||||
} | |||||
} |
@@ -0,0 +1,34 @@ | |||||
package me.zhengjie.config; | |||||
import org.springframework.beans.factory.annotation.Value; | |||||
import org.springframework.context.annotation.Configuration; | |||||
import org.springframework.stereotype.Component; | |||||
/** | |||||
* 影刀Api Properties | |||||
* @author rch | |||||
* @date 2022-07-27 | |||||
*/ | |||||
@Component | |||||
@Configuration | |||||
public class YdApiProperties { | |||||
public static String ACCESS_KEY_ID; | |||||
public static String ACCESS_KEY_SECRET; | |||||
public static String CALLBACK; | |||||
@Value("${yd.accessKeyId}") | |||||
public void setAccessKeyId(String accessKeyId) { | |||||
ACCESS_KEY_ID = accessKeyId; | |||||
} | |||||
@Value("${yd.accessKeySecret}") | |||||
public void setAccessKeySecret(String accessKeySecret) { | |||||
ACCESS_KEY_SECRET = accessKeySecret; | |||||
} | |||||
@Value("${yd.callback}") | |||||
public void setCALLBACK(String CALLBACK) { | |||||
YdApiProperties.CALLBACK = CALLBACK; | |||||
} | |||||
} |
@@ -0,0 +1,30 @@ | |||||
package me.zhengjie.config.constant; | |||||
/** | |||||
* <p> | |||||
* 常量实体类 | |||||
* </p> | |||||
* | |||||
* @author: rch | |||||
* @date: 2021-11-23 | |||||
*/ | |||||
public class Constants { | |||||
/** redis token前缀*/ | |||||
public static final String TOKEN_PREFIX = "sessions:"; | |||||
/** 前端token请求头名称*/ | |||||
public static final String TOKEN_HEAD_NAME = "token"; | |||||
/** redis 手机验证码前缀*/ | |||||
public static final String PHONE_VERIFY_CODE = "phone:"; | |||||
/** 表单重复提交时间间隔,单位;秒 */ | |||||
public static final long FORM_SUB_SECOND = 1L; | |||||
/** 表单重复提交验证的token前缀*/ | |||||
public static final String FORM_SUB_TOKEN = "formSubToken:"; | |||||
/** 用户默认头像地址 */ | |||||
public static final String USER_DEFAULT_HEAD = "/sports/file/userHead/default.jpg"; | |||||
/** 代理后台用户token redis key前缀 */ | |||||
public static final String PROXY_ADMIN_TOKEN_PREFIX = "proxy:sessions:"; | |||||
/** 代理后台 访问量统计 "pageviews:"+invite_code*/ | |||||
public final static String PAGE_VIEWS_REDIS_PREFIX = "pageviews:"; | |||||
} |
@@ -0,0 +1,16 @@ | |||||
package me.zhengjie.constant; | |||||
/** | |||||
* 通用常量信息 | |||||
* | |||||
* @author rch | |||||
* @create 2022-08-01 | |||||
*/ | |||||
public class Constants { | |||||
public final static String REBOT_STATU = "https://api.winrobot360.com/oapi/dispatch/v2/client/query"; | |||||
public final static String GET_SECRET = "https://api.winrobot360.com/oapi/token/v2/token/create"; | |||||
public final static String STAT_JOB_URL = "https://api.winrobot360.com/oapi/dispatch/v2/job/start"; | |||||
public final static String QUERY_JOB_URL = "https://api.winrobot360.com/oapi/dispatch/v2/job/query"; | |||||
public final static String ERP_AUTH_TOKEN = "ErpAuthToken ddabd37130f86a8ee5f03887552c0b69"; | |||||
} |
@@ -0,0 +1,56 @@ | |||||
package me.zhengjie.constant; | |||||
/** | |||||
* | |||||
* @Description 通用常量 | |||||
* @Date 2022/1/20 | |||||
* @Author zeng | |||||
*/ | |||||
public interface PublicConstant { | |||||
/** 缓存失效时间 */ | |||||
Integer CACHE_OVER_TIME = 1800; | |||||
/** 设备使用缓存前缀 */ | |||||
String REBOT_PREFIX = "rebot:%s"; | |||||
/** 全局系统设置 */ | |||||
String SETTING_SITE_PREFIX = "setting_site:%s"; | |||||
/** 更新会员信息 */ | |||||
String MEMBER_PROFIT_LOCK_KEY = "member_update_key:%s"; | |||||
String DH_REQUEST_SUCCESS_STATUS_CODE = "00000000"; | |||||
String RESPONSE_SUCCESS = "SUCCESS"; | |||||
Integer EXPORT_EXCEL_FILE_TYPE = 11; | |||||
/** 刷单信息对应执行过的买家信息 */ | |||||
String CLICK_FARMING_EXEC_ID_SET = "click_farming_exec:id:%s"; | |||||
/** 执行任务前缀 */ | |||||
String JOB_UUID_KEY_PREFIX = "JOB_UUID_KEY:%s"; | |||||
static String getMemberUpdateKeyPrefix(Long memberId) { | |||||
return String.format(MEMBER_PROFIT_LOCK_KEY, memberId); | |||||
} | |||||
static String getJobUuidKeyPrefix(String jobUuid) { | |||||
return String.format(JOB_UUID_KEY_PREFIX, jobUuid); | |||||
} | |||||
/** | |||||
* 刷单信息对应执行过的买家Id集合拼接 | |||||
* @param clickFarmingId | |||||
* @return | |||||
*/ | |||||
static String getClickFarmingExecBuyerIdPrefix(Long clickFarmingId) { | |||||
return String.format(CLICK_FARMING_EXEC_ID_SET, clickFarmingId); | |||||
} | |||||
static String getRebotKeyPrefix(String accountName) { | |||||
return String.format(REBOT_PREFIX, accountName); | |||||
} | |||||
} |
@@ -0,0 +1,39 @@ | |||||
package me.zhengjie.dao; | |||||
import com.baomidou.mybatisplus.core.conditions.Wrapper; | |||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||||
import com.baomidou.mybatisplus.core.metadata.IPage; | |||||
import me.zhengjie.entity.CtApply; | |||||
import me.zhengjie.service.vo.CtApplyListVO; | |||||
import me.zhengjie.service.vo.CtBuyerListVO; | |||||
import org.apache.ibatis.annotations.Mapper; | |||||
import org.apache.ibatis.annotations.Select; | |||||
import java.util.List; | |||||
/** | |||||
* 影刀应用信息(CtApply)表数据库访问层 | |||||
* | |||||
* @author rch | |||||
* @since 2022-07-23 | |||||
*/ | |||||
@Mapper | |||||
public interface CtApplyDao extends BaseMapper<CtApply> { | |||||
@Select("select * from ct_apply ${ew.customSqlSegment}") | |||||
IPage<CtApplyListVO> searchPageList(IPage<CtApplyListVO> page, Wrapper ew); | |||||
/** | |||||
* 获取所有应用名称 | |||||
* @return List | |||||
*/ | |||||
@Select("select id,name, platform_id from ct_apply") | |||||
List<CtApplyListVO> getAllApplyName(); | |||||
@Select("select * from ct_apply where task_name = #{taskName} and method_name = #{method}") | |||||
CtApply getApplyByTaskAndMethod(String taskName, String method); | |||||
} | |||||
@@ -0,0 +1,61 @@ | |||||
package me.zhengjie.dao; | |||||
import com.baomidou.mybatisplus.core.conditions.Wrapper; | |||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||||
import com.baomidou.mybatisplus.core.metadata.IPage; | |||||
import me.zhengjie.entity.CtBrowse; | |||||
import me.zhengjie.service.vo.CtBrowseDetailVO; | |||||
import me.zhengjie.service.vo.CtBrowseListVO; | |||||
import me.zhengjie.service.vo.CtBuyerListVO; | |||||
import org.apache.ibatis.annotations.Mapper; | |||||
import org.apache.ibatis.annotations.Select; | |||||
/** | |||||
* 刷单-订单信息(CtBrowse)表数据库访问层 | |||||
* | |||||
* @author rch | |||||
* @since 2022-11-04 | |||||
*/ | |||||
@Mapper | |||||
public interface CtBrowseDao extends BaseMapper<CtBrowse> { | |||||
/** | |||||
* 分页查询 | |||||
* @param page | |||||
* @param ew | |||||
*/ | |||||
// @Select("select * from ct_browse ${ew.customSqlSegment} ") | |||||
@Select("SELECT\n" + | |||||
"\tctBrowse.id,\n" + | |||||
"\tctBrowse.buyer_id,\n" + | |||||
"\tctBrowse.link_url,\n" + | |||||
"\tctBrowse.created_at,\n" + | |||||
"\tctBrowse.updated_at,\n" + | |||||
"\tctBrowse.payment_results,\n" + | |||||
"\tctBrowse.status,\n" + | |||||
"\tctBrowse.gm_name,\n" + | |||||
"\tctBuyer.contntry_short as country,\n" + | |||||
"\tctBuyer.account\n" + | |||||
"FROM\n" + | |||||
"\tct_browse ctBrowse\n" + | |||||
"LEFT JOIN \n" + | |||||
"\tct_buyer ctBuyer \n" + | |||||
"ON \n" + | |||||
"\tctBrowse.buyer_id = ctBuyer.id ${ ew.customSqlSegment}") | |||||
IPage<CtBrowseListVO> searchPageList(IPage<CtBrowseListVO> page, Wrapper ew); | |||||
@Select("select * from ct_browse where id = #{id} for update") | |||||
CtBrowse getByIdLock(Long id); | |||||
@Select("SELECT\n" + | |||||
"\tctBrowse.*,\n" + | |||||
"\tctBuyer.account,\n" + | |||||
"\tctBuyer.contntry_short as country\n" + | |||||
"FROM\n" + | |||||
"\tct_browse ctBrowse\n" + | |||||
"\tLEFT JOIN ct_buyer ctBuyer ON ctBrowse.buyer_id = ctBuyer.id \n" + | |||||
"WHERE\n" + | |||||
"\tctBrowse.id = #{id}") | |||||
CtBrowseDetailVO getBrowseDetailById(Long id); | |||||
} | |||||
@@ -0,0 +1,56 @@ | |||||
package me.zhengjie.dao; | |||||
import com.baomidou.mybatisplus.core.conditions.Wrapper; | |||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||||
import com.baomidou.mybatisplus.core.metadata.IPage; | |||||
import me.zhengjie.entity.CtBuyer; | |||||
import me.zhengjie.service.vo.CtBuyerDetailVO; | |||||
import me.zhengjie.service.vo.CtBuyerListVO; | |||||
import org.apache.ibatis.annotations.Mapper; | |||||
import org.apache.ibatis.annotations.Select; | |||||
import java.util.List; | |||||
/** | |||||
* 买家信息表(CtBuyer)表数据库访问层 | |||||
* | |||||
* @author rch | |||||
* @since 2022-06-22 | |||||
*/ | |||||
@Mapper | |||||
public interface CtBuyerDao extends BaseMapper<CtBuyer> { | |||||
// @Select("select t1.*, t2.name as companyName, t3.id as cardId, t3.number as number, t3.pwd as cardPwd, t3.holder_surname as holderSurname, t3.holder_name as holderName, t4.id as vpnId, t4.ip_address as ipAddress, t4.link as vpn from ct_buyer t1 left join ct_company t2 on t1.company_id = t2.id left join ct_card t3 on t1.card_id = t3.id left join ct_vpn t4 on t1.vpn_id = t4.id ${ew.customSqlSegment} ") | |||||
@Select("SELECT\n" + | |||||
"\tt1.*,\n" + | |||||
"\tt2.NAME AS companyName,\n" + | |||||
"\tt5.NAME AS platformName,\n" + | |||||
"\tt3.id AS cardId,\n" + | |||||
"\tt3.number AS number,\n" + | |||||
"\tt3.pwd AS cardPwd,\n" + | |||||
"\tt3.holder_surname AS holderSurname,\n" + | |||||
"\tt3.holder_name AS holderName,\n" + | |||||
"\tt4.id AS vpnId,\n" + | |||||
"\tt4.ip_address AS ipAddress,\n" + | |||||
"\tt4.link AS vpn \n" + | |||||
"FROM\n" + | |||||
"\tct_buyer t1\n" + | |||||
"\tLEFT JOIN ct_company t2 ON t1.company_id = t2.id\n" + | |||||
"\tLEFT JOIN ct_platform t5 ON t1.platform_id = t5.id\n" + | |||||
"\tLEFT JOIN ct_card t3 ON t1.card_id = t3.id\n" + | |||||
"\tLEFT JOIN ct_vpn t4 ON t1.vpn_id = t4.id ${ ew.customSqlSegment }") | |||||
IPage<CtBuyerListVO> searchPageList(IPage<CtBuyerListVO> page, Wrapper ew); | |||||
@Select("select t1.*, t2.name as companyName, t3.ip_address as ipAddress, t3.link as vpn, t4.number, t4.pwd as cardPwd, t4.holder_surname as holderSurname, t4.holder_name as holderName from ct_buyer t1 left join ct_company t2 on t1.company_id = t2.id left join ct_vpn t3 on t1.vpn_id = t3.id left join ct_card t4 on t1.card_id = t4.id where t1.id = ${id}") | |||||
CtBuyerDetailVO getDetailById(Long id); | |||||
@Select("select account from ct_buyer") | |||||
List<String> getAllAccount(); | |||||
@Select("select pwd from ct_buyer where account = #{name}") | |||||
String getPwdByName(String name); | |||||
@Select("select id, occupy_status, company_id, platform_id from ct_buyer where account = #{buyerName} for update") | |||||
CtBuyer getBuyerOccupyStatusLock(String buyerName); | |||||
} | |||||
@@ -0,0 +1,34 @@ | |||||
package me.zhengjie.dao; | |||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||||
import me.zhengjie.entity.CtCard; | |||||
import me.zhengjie.entity.CtCardInfo; | |||||
import org.apache.ibatis.annotations.Mapper; | |||||
import org.apache.ibatis.annotations.Select; | |||||
import java.util.List; | |||||
/** | |||||
* 信用卡信息(CtCard)表数据库访问层 | |||||
* | |||||
* @author rch | |||||
* @since 2022-07-07 | |||||
*/ | |||||
@Mapper | |||||
public interface CtCardDao extends BaseMapper<CtCard> { | |||||
@Select("select number from ct_card") | |||||
List<String> getNumberList(); | |||||
//@Select("select id,number from ct_card where number in ${number}") | |||||
@Select({ | |||||
"<script>", | |||||
"SELECT id, number FROM ct_card where number in", | |||||
"<foreach collection='list' item='item' open='(' separator=',' close=')'>", | |||||
"#{item}", | |||||
"</foreach>", | |||||
"</script>" | |||||
}) | |||||
List<CtCardInfo> getCardInfoByNumber(List<String> number); | |||||
} | |||||
@@ -0,0 +1,90 @@ | |||||
package me.zhengjie.dao; | |||||
import com.baomidou.mybatisplus.core.conditions.Wrapper; | |||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||||
import com.baomidou.mybatisplus.core.metadata.IPage; | |||||
import me.zhengjie.entity.CtBuyerClickSuccess; | |||||
import me.zhengjie.entity.CtClickFarmYdParams; | |||||
import me.zhengjie.entity.CtClickFarming; | |||||
import me.zhengjie.service.vo.CtClickFarmEditDetailVO; | |||||
import me.zhengjie.service.vo.CtClickFarmingDetailVO; | |||||
import me.zhengjie.service.vo.CtClickFarmingVO; | |||||
import org.apache.ibatis.annotations.Mapper; | |||||
import org.apache.ibatis.annotations.Select; | |||||
import java.util.List; | |||||
/** | |||||
* 刷单Excel信息(CtClickFarming)表数据库访问层 | |||||
* | |||||
* @author rch | |||||
* @since 2022-08-16 | |||||
*/ | |||||
@Mapper | |||||
public interface CtClickFarmingDao extends BaseMapper<CtClickFarming> { | |||||
// @Select("select farming.* from ct_click_farming farming left join ct_click_order clickOrder on farming.ct_click_order_id = clickOrder.id ${ew.customSqlSegment} ") | |||||
@Select("SELECT\n" + | |||||
"\tfarming.*,\n" + | |||||
"\tbuyer.contntry_short as country,\n" + | |||||
"\tbuyer.account\n" + | |||||
"FROM\n" + | |||||
"\tct_click_farming farming\n" + | |||||
"\tLEFT JOIN ct_click_order clickOrder ON farming.ct_click_order_id = clickOrder.id\n" + | |||||
"\tLEFT JOIN ct_buyer buyer ON buyer.id = farming.buyer_id\n" + | |||||
"${ew.customSqlSegment}") | |||||
IPage<CtClickFarmingVO> searchPageList(IPage<CtClickFarmingVO> page, Wrapper ew); | |||||
@Select("select * from ct_click_farming where id = #{id} for update") | |||||
CtClickFarming getByIdLock(Long id); | |||||
@Select("SELECT t1.*, t2.account AS buyer_name FROM ct_click_farming t1 LEFT JOIN ct_buyer t2 ON t1.buyer_id = t2.id where t1.id = #{id}") | |||||
CtClickFarmEditDetailVO getEditDetailById(Long id); | |||||
@Select("SELECT t1.*, t2.account AS buyer_name FROM ct_click_farming t1 LEFT JOIN ct_buyer t2 ON t1.buyer_id = t2.id where t1.id = #{id}") | |||||
CtClickFarmingDetailVO getDetailById(Long id); | |||||
// @Select("select buyer_id, count(1) as successCount from ct_click_farming where account != #{buyerAccount} and `status` = 3 GROUP BY buyer_id;") | |||||
// @Select("SELECT\n" + | |||||
// "\tclick.buyer_id,\n" + | |||||
// "\tcount( 1 ) AS successCount \n" + | |||||
// "FROM\n" + | |||||
// "\tct_click_farming AS click \t\n" + | |||||
// "\tLEFT JOIN ct_buyer AS buyer ON buyer.id = click.buyer_id and click.account != #{buyerAccount} AND click.status = 3\n" + | |||||
// "\tAND buyer.occupy_status = 2 AND buyer.country = #{country} and click.shopName != #{shopName} And ct\n" + | |||||
// "GROUP BY\n" + | |||||
// "\tbuyer_id;") | |||||
// @Select("SELECT click.buyer_id, count( 1 ) AS successCount, click.created_at FROM ct_click_farming AS click LEFT JOIN ct_buyer AS buyer ON buyer.id = click.buyer_id AND click.account != #{buyerAccount} AND click.STATUS = 3 AND buyer.occupy_status = 2 AND buyer.country = #{country} AND click.shop_name != #{shopName} GROUP BY buyer_id HAVING created_at < DATE_SUB(CURDATE(), INTERVAL 1 MONTH)") | |||||
@Select("SELECT click.buyer_id, count(1) AS successCount, click.status, click.created_at FROM ct_click_farming AS click LEFT JOIN ct_buyer AS buyer ON buyer.id = click.buyer_id AND click.account != #{buyerAccount} AND buyer.occupy_status = 2 AND buyer.country = #{country} AND click.shop_name != #{shopName} GROUP BY buyer_id HAVING created_at < DATE_SUB(CURDATE(), INTERVAL 1 MONTH) AND STATUS = 3") | |||||
List<CtBuyerClickSuccess> ruleGetCtBuyer(String buyerAccount, String country, String shopName); | |||||
@Select("SELECT\n" + | |||||
"\tfarming.id,\n" + | |||||
"\tfarming.key_word as keyWord,\n" + | |||||
"\tfarming.number,\n" + | |||||
"\tfarming.params_type,\n" + | |||||
"\tfarming.specification,\n" + | |||||
"\tfarming.color,\n" + | |||||
"\tfarming.item,\n" + | |||||
"\tfarming.exchange,\n" + | |||||
"\tfarming.link,\n" + | |||||
"\tfarming.section_min as sectionMin,\n" + | |||||
"\tfarming.section_max as sectionMax,\n" + | |||||
"\tfarming.amessage,\n" + | |||||
"\tbuyer.contntry_short as country,\n" + | |||||
"\tbuyer.account,\n" + | |||||
"\tbuyer.pwd,\n" + | |||||
"\tctVpn.link as vpnShare,\n" + | |||||
"\tctCard.term_of_validity as termOfValidity,\n" + | |||||
"\tCONCAT(ctCard.holder_surname, \" \",ctCard.holder_name) AS cardName,\n" + | |||||
"\tctCard.number as cardNumber,\n" + | |||||
"\tctCard.pwd as cardPwd\n" + | |||||
"FROM\n" + | |||||
"\tct_click_farming farming\n" + | |||||
"\tLEFT JOIN ct_click_order clickOrder ON farming.ct_click_order_id = clickOrder.id\n" + | |||||
"\tLEFT JOIN ct_buyer buyer ON buyer.id = farming.buyer_id\n" + | |||||
"\tLEFT JOIN ct_vpn ctVpn ON buyer.vpn_id = ctVpn.id\n" + | |||||
"\tLEFT JOIN ct_card ctCard ON buyer.card_id = ctCard.id where farming.id = #{id}") | |||||
CtClickFarmYdParams getCtClickFarmYdParams(Long id); | |||||
} | |||||
@@ -0,0 +1,100 @@ | |||||
package me.zhengjie.dao; | |||||
import com.baomidou.mybatisplus.core.conditions.Wrapper; | |||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||||
import com.baomidou.mybatisplus.core.metadata.IPage; | |||||
import me.zhengjie.entity.CtClickFarmingOrderInfo; | |||||
import me.zhengjie.entity.CtClickOrder; | |||||
import me.zhengjie.service.vo.CtClickOrderDetailVO; | |||||
import me.zhengjie.service.vo.CtClickOrderListVO; | |||||
import org.apache.ibatis.annotations.Mapper; | |||||
import org.apache.ibatis.annotations.Select; | |||||
/** | |||||
* 刷单-订单信息(CtClickOrder)表数据库访问层 | |||||
* | |||||
* @author rch | |||||
* @since 2022-09-14 | |||||
*/ | |||||
@Mapper | |||||
public interface CtClickOrderDao extends BaseMapper<CtClickOrder> { | |||||
/** | |||||
* 分页查询 | |||||
* @param page | |||||
* @param ew | |||||
*/ | |||||
//TODO sql 修改 | |||||
// @Select("SELECT\n" + | |||||
// "\t`order`.platform_id, \n" + | |||||
// "\t`order`.company_id, \n" + | |||||
// "\t`order`.id, \n" + | |||||
// "\t`order`.created_at, \n" + | |||||
// "\t`order`.updated_at, \n" + | |||||
// "\t`order`.amount, \n" + | |||||
// "\t`order`.shop, \n" + | |||||
// "\t`order`.order_id, \n" + | |||||
// "\t`order`.comment, \n" + | |||||
// "\t`order`.account, \n" + | |||||
// "\t`order`.pwd, \n" + | |||||
// "\tcompany.`name` AS companyName, \n" + | |||||
// "\tplatform.`name` AS platformName\n" + | |||||
// "FROM\n" + | |||||
// "\tct_click_order AS `order`\n" + | |||||
// "\tLEFT JOIN\n" + | |||||
// "\tct_platform AS platform\n" + | |||||
// "\tON \n" + | |||||
// "\t\t`order`.platform_id = platform.id\n" + | |||||
// "\tLEFT JOIN\n" + | |||||
// "\tct_company AS company\n" + | |||||
// "\tON \n" + | |||||
// "\t\t`order`.company_id = company.id ${ew.customSqlSegment} ") | |||||
@Select("SELECT clickOrder.company_id, clickOrder.type, clickOrder.status, clickOrder.id, clickOrder.created_at, clickOrder.updated_at, clickOrder.amount, clickOrder.shop, clickOrder.order_id, clickOrder.comment, company.name AS companyName FROM ct_click_order AS clickOrder LEFT JOIN ct_company AS company ON clickOrder.company_id = company.id ${ew.customSqlSegment}") | |||||
IPage<CtClickOrderListVO> searchPageList(IPage<CtClickOrderListVO> page, Wrapper ew); | |||||
@Select("SELECT\n" + | |||||
"\tclickOrder.id,\n" + | |||||
"\tclickOrder.order_id,\n" + | |||||
"\tclickOrder.COMMENT,\n" + | |||||
"\tclickOrder.STATUS,\n" + | |||||
"\tclickOrder.paths,\n" + | |||||
"\tbuyer.country,\n" + | |||||
"\tbuyer.account,\n" + | |||||
"\tbuyer.pwd,\n" + | |||||
"\tctVpn.link as vpnShare\n" + | |||||
"FROM\n" + | |||||
"\tct_click_order clickOrder\n" + | |||||
"\tLEFT JOIN ct_click_farming clickFarming ON clickOrder.id = clickFarming.ct_click_order_id \n" + | |||||
"\tLEFT JOIN ct_buyer buyer ON buyer.id = clickFarming.buyer_id\n" + | |||||
"\tLEFT JOIN ct_vpn ctVpn ON buyer.vpn_id = ctVpn.id\n" + | |||||
"WHERE \n" + | |||||
"\tclickOrder.id = #{orderId}") | |||||
CtClickFarmingOrderInfo getClickFarmOrderById(Long orderId); | |||||
@Select("select * from ct_click_order where id = #{id} for update") | |||||
CtClickOrder getByIdLock(Long id); | |||||
@Select("SELECT\n" + | |||||
"\tclickOrder.id,\n" + | |||||
"\tclickOrder.created_at,\n" + | |||||
"\tclickOrder.updated_at,\n" + | |||||
"\tclickOrder.prices_number,\n" + | |||||
"\tclickOrder.payment_results,\n" + | |||||
"\tclickOrder.order_id,\n" + | |||||
"\tclickOrder.COMMENT,\n" + | |||||
// "\tclickOrder.status,\n" + | |||||
// "\tclickOrder.platform_id,\n" + | |||||
"\tclickOrder.company_id,\n" + | |||||
"\tclickOrder.amount,\n" + | |||||
"\tclickOrder.shop,\n" + | |||||
"\tclickOrder.shop_name,\n" + | |||||
"\tclickOrder.order_date,\n" + | |||||
"\tclickOrder.paths\n" + | |||||
"FROM\n" + | |||||
"\tct_click_order clickOrder\n" + | |||||
"\tLEFT JOIN ct_click_farming clickFarming ON clickOrder.id = clickFarming.ct_click_order_id \n" + | |||||
"WHERE\n" + | |||||
"\tclickOrder.id = #{orderId}") | |||||
CtClickOrderDetailVO getClickOrderDetailById(Long id); | |||||
} | |||||
@@ -0,0 +1,34 @@ | |||||
package me.zhengjie.dao; | |||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||||
import me.zhengjie.entity.CtCompany; | |||||
import me.zhengjie.entity.CtCompanyInfo; | |||||
import org.apache.ibatis.annotations.Mapper; | |||||
import org.apache.ibatis.annotations.Param; | |||||
import org.apache.ibatis.annotations.Select; | |||||
import java.util.List; | |||||
/** | |||||
* 公司信息(CtCompany)表数据库访问层 | |||||
* | |||||
* @author zhw | |||||
* @since 2022-07-14 | |||||
*/ | |||||
@Mapper | |||||
public interface CtCompanyDao extends BaseMapper<CtCompany> { | |||||
@Select({ | |||||
"<script>", | |||||
"select id, name from ct_company where name in ", | |||||
"<foreach collection='names' item='name' open='(' separator=',' close=')'>", | |||||
"#{name}", | |||||
"</foreach>", | |||||
"</script>" | |||||
}) | |||||
List<CtCompanyInfo> getByName(@Param("names") List<String> names); | |||||
@Select("select id,name from ct_company") | |||||
List<CtCompanyInfo> getCompanyList(); | |||||
} | |||||
@@ -0,0 +1,24 @@ | |||||
package me.zhengjie.dao; | |||||
import com.baomidou.mybatisplus.core.conditions.Wrapper; | |||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||||
import com.baomidou.mybatisplus.core.metadata.IPage; | |||||
import me.zhengjie.entity.CtDhPay; | |||||
import me.zhengjie.service.vo.CtBuyerListVO; | |||||
import me.zhengjie.service.vo.CtDhPayListVO; | |||||
import org.apache.ibatis.annotations.Mapper; | |||||
import org.apache.ibatis.annotations.Select; | |||||
/** | |||||
* 平台信息(CtDyPay)表数据库访问层 | |||||
* | |||||
* @author rch | |||||
* @since 2022-07-28 | |||||
*/ | |||||
@Mapper | |||||
public interface CtDhPayDao extends BaseMapper<CtDhPay> { | |||||
@Select("select * from ct_dh_pay ${ew.customSqlSegment}") | |||||
IPage<CtDhPayListVO> searchPageList(IPage<CtDhPayListVO> page, Wrapper ew); | |||||
} | |||||
@@ -0,0 +1,17 @@ | |||||
package me.zhengjie.dao; | |||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||||
import me.zhengjie.entity.CtExcel; | |||||
import org.apache.ibatis.annotations.Mapper; | |||||
/** | |||||
* Excel 导入信息(CtExcel)表数据库访问层 | |||||
* | |||||
* @author makejava | |||||
* @since 2022-06-23 10:37:44 | |||||
*/ | |||||
@Mapper | |||||
public interface CtExcelDao extends BaseMapper<CtExcel> { | |||||
} | |||||
@@ -0,0 +1,17 @@ | |||||
package me.zhengjie.dao; | |||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||||
import me.zhengjie.entity.CtExcelImportInfo; | |||||
import org.apache.ibatis.annotations.Mapper; | |||||
/** | |||||
* Excel导入信息(CtExcelImportInfo)表数据库访问层 | |||||
* | |||||
* @author rch | |||||
* @since 2022-06-23 | |||||
*/ | |||||
@Mapper | |||||
public interface CtExcelImportInfoDao extends BaseMapper<CtExcelImportInfo> { | |||||
} | |||||
@@ -0,0 +1,17 @@ | |||||
package me.zhengjie.dao; | |||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||||
import me.zhengjie.entity.CtOrder; | |||||
import org.apache.ibatis.annotations.Mapper; | |||||
/** | |||||
* (CtOrder)表数据库访问层 | |||||
* | |||||
* @author rch | |||||
* @since 2022-07-01 | |||||
*/ | |||||
@Mapper | |||||
public interface CtOrderDao extends BaseMapper<CtOrder> { | |||||
} | |||||
@@ -0,0 +1,17 @@ | |||||
package me.zhengjie.dao; | |||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||||
import me.zhengjie.entity.CtPlatform; | |||||
import org.apache.ibatis.annotations.Mapper; | |||||
/** | |||||
* 平台信息(CtPlatform)表数据库访问层 | |||||
* | |||||
* @author rch | |||||
* @since 2022-06-23 10:37:44 | |||||
*/ | |||||
@Mapper | |||||
public interface CtPlatformDao extends BaseMapper<CtPlatform> { | |||||
} | |||||
@@ -0,0 +1,41 @@ | |||||
package me.zhengjie.dao; | |||||
import com.baomidou.mybatisplus.core.conditions.Wrapper; | |||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||||
import com.baomidou.mybatisplus.core.metadata.IPage; | |||||
import me.zhengjie.base.BaseEntity; | |||||
import me.zhengjie.entity.CtRebot; | |||||
import me.zhengjie.service.vo.CtRebotListVO; | |||||
import me.zhengjie.utils.PageUtils; | |||||
import org.apache.ibatis.annotations.Mapper; | |||||
import org.apache.ibatis.annotations.Select; | |||||
import org.apache.ibatis.annotations.Update; | |||||
import java.util.List; | |||||
/** | |||||
* 影刀设备-机器人信息(CtRebot)表数据库访问层 | |||||
* | |||||
* @author rch | |||||
* @since 2022-07-23 | |||||
*/ | |||||
@Mapper | |||||
public interface CtRebotDao extends BaseMapper<CtRebot> { | |||||
@Select("select * from ct_rebot where account_name = #{accountName} for update") | |||||
CtRebot getByAccountNameLock(String accountName); | |||||
@Select("select * from ct_rebot ${ew.customSqlSegment}") | |||||
IPage<CtRebotListVO> searchRebotList(IPage<CtRebotListVO> page, Wrapper ew); | |||||
@Select("select account_name from ct_rebot") | |||||
List<String> getAccountNameList(); | |||||
@Select("select robot_client_uuid from ct_rebot") | |||||
List<String> getClientUuidList(); | |||||
@Update("update ct_rebot set status = #{newStatus} where id = #{id} and status = #{oldStatus}") | |||||
Boolean updateNewStatusByOldStatus(Long id, Integer newStatus, Integer oldStatus); | |||||
} | |||||
@@ -0,0 +1,17 @@ | |||||
package me.zhengjie.dao; | |||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||||
import me.zhengjie.entity.CtResponseOrderAddress; | |||||
import org.apache.ibatis.annotations.Mapper; | |||||
/** | |||||
* 下注成功订单响应收货地址信息(CtResponseOrderAddress)表数据库访问层 | |||||
* | |||||
* @author rch | |||||
* @since 2022-07-01 | |||||
*/ | |||||
@Mapper | |||||
public interface CtResponseOrderAddressDao extends BaseMapper<CtResponseOrderAddress> { | |||||
} | |||||
@@ -0,0 +1,17 @@ | |||||
package me.zhengjie.dao; | |||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||||
import me.zhengjie.entity.CtResponseOrder; | |||||
import org.apache.ibatis.annotations.Mapper; | |||||
/** | |||||
* 下单成功响应订单商品信息(CtResponseOrder)表数据库访问层 | |||||
* | |||||
* @author rch | |||||
* @since 2022-07-01 | |||||
*/ | |||||
@Mapper | |||||
public interface CtResponseOrderDao extends BaseMapper<CtResponseOrder> { | |||||
} | |||||
@@ -0,0 +1,17 @@ | |||||
package me.zhengjie.dao; | |||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||||
import me.zhengjie.entity.CtResponseOrderProduct; | |||||
import org.apache.ibatis.annotations.Mapper; | |||||
/** | |||||
* 下单订单响应产品信息(CtResponseOrderProduct)表数据库访问层 | |||||
* | |||||
* @author rch | |||||
* @since 2022-07-01 | |||||
*/ | |||||
@Mapper | |||||
public interface CtResponseOrderProductDao extends BaseMapper<CtResponseOrderProduct> { | |||||
} | |||||
@@ -0,0 +1,35 @@ | |||||
package me.zhengjie.dao; | |||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||||
import me.zhengjie.entity.CtVpn; | |||||
import me.zhengjie.entity.CtVpnInfo; | |||||
import org.apache.ibatis.annotations.Mapper; | |||||
import org.apache.ibatis.annotations.Select; | |||||
import java.util.List; | |||||
/** | |||||
* VPN信息表(CtVpn)表数据库访问层 | |||||
* | |||||
* @author rch | |||||
* @since 2022-07-07 | |||||
*/ | |||||
@Mapper | |||||
public interface CtVpnDao extends BaseMapper<CtVpn> { | |||||
@Select("select ip_address from ct_vpn") | |||||
List<String> getIpList(); | |||||
//@Select("select id,ip_address from ct_vpn where ip_address in ${ipAddress}") | |||||
@Select({ | |||||
"<script>", | |||||
"SELECT id, ip_address FROM ct_vpn where ip_address in", | |||||
"<foreach collection='list' item='item' open='(' separator=',' close=')'>", | |||||
"#{item}", | |||||
"</foreach>", | |||||
"</script>" | |||||
}) | |||||
List<CtVpnInfo> getVpnInfoByIp(List<String> ipAddress); | |||||
} | |||||
@@ -0,0 +1,61 @@ | |||||
package me.zhengjie.dao; | |||||
import com.baomidou.mybatisplus.core.conditions.Wrapper; | |||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||||
import com.baomidou.mybatisplus.core.metadata.IPage; | |||||
import me.zhengjie.entity.DhAddCar; | |||||
import me.zhengjie.service.vo.dhaddcar.DhAddCarVO; | |||||
import me.zhengjie.service.vo.dhaddcar.DhAddCarListVO; | |||||
import org.apache.ibatis.annotations.Mapper; | |||||
import org.apache.ibatis.annotations.Select; | |||||
/** | |||||
* 敦煌加入购物车(DhAddCar)表数据库访问层 | |||||
* | |||||
* @author rch | |||||
* @since 2022-11-17 09:11:53 | |||||
*/ | |||||
@Mapper | |||||
public interface DhAddCarDao extends BaseMapper<DhAddCar> { | |||||
@Select("SELECT\n" + | |||||
"\tdhAddCar.*,\n" + | |||||
"\tbuyer.id AS buyerId,\n" + | |||||
"\tbuyer.account,\n" + | |||||
"\tbuyer.contntry_short AS country,\n" + | |||||
"\tcompany.NAME AS companyName\n" + | |||||
"\t\n" + | |||||
"FROM\n" + | |||||
"\tdh_add_car AS dhAddCar\n" + | |||||
"LEFT JOIN\n" + | |||||
"\tct_buyer buyer ON dhAddCar.buyer_id = buyer.id\n" + | |||||
"LEFT JOIN\n" + | |||||
"\tct_company company ON buyer.company_id = company.id\n" + | |||||
"\t${ew.customSqlSegment}") | |||||
IPage<DhAddCarListVO> searchPageList(IPage<DhAddCarListVO> page, Wrapper ew); | |||||
@Select("SELECT\n" + | |||||
" dhAddCar.id,\n" + | |||||
"\tdhAddCar.params_type,\n" + | |||||
"\tdhAddCar.car_good_ids AS carGoodIds,\n" + | |||||
"\tbuyer.id AS buyerId,\n" + | |||||
"\tbuyer.account,\n" + | |||||
"\tbuyer.contntry_short as country,\n" + | |||||
"\tbuyer.pwd,\n" + | |||||
"\tvpn.link as vpnShare,\n" + | |||||
"\tdhAddCar.status,\n" + | |||||
"\tcompany.NAME AS companyName\n" + | |||||
"FROM\n" + | |||||
"\tdh_add_car AS dhAddCar\n" + | |||||
"\tLEFT JOIN ct_buyer buyer ON dhAddCar.buyer_id = buyer.id\n" + | |||||
"\tLEFT JOIN ct_vpn vpn ON buyer.vpn_id = vpn.id\n" + | |||||
"\tLEFT JOIN\n" + | |||||
"\tct_company company ON buyer.company_id = company.id\n" + | |||||
"\tWHERE dhAddCar.id = #{id}") | |||||
DhAddCarVO getDetailById(Long id); | |||||
@Select("select * from dh_add_car where id = #{id}") | |||||
DhAddCar getByIdLock(Long id); | |||||
} | |||||
@@ -0,0 +1,48 @@ | |||||
package me.zhengjie.dao; | |||||
import com.baomidou.mybatisplus.core.conditions.Wrapper; | |||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||||
import com.baomidou.mybatisplus.core.metadata.IPage; | |||||
import me.zhengjie.entity.DhAddCarOrder; | |||||
import me.zhengjie.service.vo.dhaddcar.DhAddCarListVO; | |||||
import me.zhengjie.service.vo.dhcarorder.DhAddCarOrderListVO; | |||||
import me.zhengjie.service.vo.dhcarorder.DhCarOrderParamsVO; | |||||
import org.apache.ibatis.annotations.Mapper; | |||||
import org.apache.ibatis.annotations.Select; | |||||
/** | |||||
* 敦煌-加购物车-订单(DhAddCarOrder)表数据库访问层 | |||||
* | |||||
* @author rch | |||||
* @since 2022-11-17 09:11:57 | |||||
*/ | |||||
@Mapper | |||||
public interface DhAddCarOrderDao extends BaseMapper<DhAddCarOrder> { | |||||
@Select("select * from dh_add_car_order where id = #{id} for update") | |||||
DhAddCarOrder getByIdLock(Long id); | |||||
@Select("select * from dh_add_car_order ${ew.customSqlSegment}") | |||||
IPage<DhAddCarOrderListVO> searchPageList(IPage page, Wrapper ew); | |||||
@Select("SELECT\n" + | |||||
"\tdhAddCarOrder.id,\n" + | |||||
"\tdhAddCarOrder.order_id,\n" + | |||||
"\tdhAddCar.params_type,\n" + | |||||
"\tdhAddCar.car_good_ids AS carGoodIds,\n" + | |||||
"\tbuyer.id AS buyerId,\n" + | |||||
"\tbuyer.account,\n" + | |||||
"\tbuyer.contntry_short AS country,\n" + | |||||
"\tbuyer.pwd,\n" + | |||||
"\tvpn.link AS vpnShare\n" + | |||||
"FROM\n" + | |||||
"\tdh_add_car_order as dhAddCarOrder\n" + | |||||
"\tLEFT JOIN dh_add_car dhAddCar ON dhAddCar.id = dhAddCarOrder.add_car_id\n" + | |||||
"\tLEFT JOIN ct_buyer buyer ON dhAddCar.buyer_id = buyer.id\n" + | |||||
"\tLEFT JOIN ct_vpn vpn ON buyer.vpn_id = vpn.id\n" + | |||||
"\tLEFT JOIN ct_company company ON buyer.company_id = company.id \n" + | |||||
"WHERE\n" + | |||||
"\tdhAddCarOrder.id = #{id}") | |||||
DhCarOrderParamsVO getYdParams(Long id); | |||||
} | |||||
@@ -0,0 +1,17 @@ | |||||
package me.zhengjie.dao; | |||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||||
import me.zhengjie.entity.DhCarGoods; | |||||
import org.apache.ibatis.annotations.Mapper; | |||||
/** | |||||
* 敦煌-加入购物车商品信息(DhCarGoods)表数据库访问层 | |||||
* | |||||
* @author makejava | |||||
* @since 2022-11-17 09:12:01 | |||||
*/ | |||||
@Mapper | |||||
public interface DhCarGoodsDao extends BaseMapper<DhCarGoods> { | |||||
} | |||||
@@ -0,0 +1,17 @@ | |||||
package me.zhengjie.dao; | |||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||||
import me.zhengjie.entity.LoginIp; | |||||
import org.apache.ibatis.annotations.Mapper; | |||||
/** | |||||
* (LoginIp)表数据库访问层 | |||||
* | |||||
* @author zeng | |||||
* @since 2022-03-21 14:07:01 | |||||
*/ | |||||
@Mapper | |||||
public interface LoginIpDao extends BaseMapper<LoginIp> { | |||||
} | |||||
@@ -0,0 +1,17 @@ | |||||
package me.zhengjie.dao; | |||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||||
import me.zhengjie.entity.CtSettingSite; | |||||
import org.apache.ibatis.annotations.Mapper; | |||||
/** | |||||
* 站点配置(CtSettingSite)表数据库访问层 | |||||
* | |||||
* @author rch | |||||
* @since 2021-11-23 | |||||
*/ | |||||
@Mapper | |||||
public interface SettingSiteDao extends BaseMapper<CtSettingSite> { | |||||
String getValueByKey(String key); | |||||
} | |||||
@@ -0,0 +1,26 @@ | |||||
package me.zhengjie.dao; | |||||
import com.baomidou.mybatisplus.core.conditions.Wrapper; | |||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||||
import com.baomidou.mybatisplus.core.metadata.IPage; | |||||
import me.zhengjie.entity.SysQuartzJob; | |||||
import me.zhengjie.service.vo.SysQuartzJobListVO; | |||||
import org.apache.ibatis.annotations.Mapper; | |||||
import org.apache.ibatis.annotations.Select; | |||||
/** | |||||
* 定时任务(SysQuartzJob)表数据库访问层 | |||||
* | |||||
* @author zhw | |||||
* @since 2022-07-21 | |||||
*/ | |||||
@Mapper | |||||
public interface SysQuartzJobDao extends BaseMapper<SysQuartzJob> { | |||||
@Select("select * from sys_quartz_job ${ew.customSqlSegment}") | |||||
IPage<SysQuartzJobListVO> searchPageList(IPage<SysQuartzJobListVO> page, Wrapper ew); | |||||
@Select("select * from sys_quartz_job where task_num = #{taskNum}") | |||||
SysQuartzJob getByTaskNum(String taskNum); | |||||
} | |||||
@@ -0,0 +1,23 @@ | |||||
package me.zhengjie.dao; | |||||
import com.baomidou.mybatisplus.core.conditions.Wrapper; | |||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||||
import com.baomidou.mybatisplus.core.metadata.IPage; | |||||
import me.zhengjie.entity.SysQuartzLog; | |||||
import me.zhengjie.service.vo.SysQuartzLogListVO; | |||||
import org.apache.ibatis.annotations.Mapper; | |||||
import org.apache.ibatis.annotations.Select; | |||||
/** | |||||
* 定时任务(SysQuartzLog)表数据库访问层 | |||||
* | |||||
* @author rch | |||||
* @since 2022-07-20 | |||||
*/ | |||||
@Mapper | |||||
public interface SysQuartzLogDao extends BaseMapper<SysQuartzLog> { | |||||
@Select("select * from sys_quartz_log ${ew.customSqlSegment} ") | |||||
IPage<SysQuartzLogListVO> searchPageList(IPage<SysQuartzLogListVO> page, Wrapper ew); | |||||
} | |||||
@@ -0,0 +1,12 @@ | |||||
<?xml version="1.0" encoding="UTF-8" ?> | |||||
<!DOCTYPE mapper | |||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | |||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |||||
<mapper namespace="me.zhengjie.dao.SettingSiteDao"> | |||||
<select id="getValueByKey" resultType="java.lang.String"> | |||||
select setting_value from ct_setting_site | |||||
where setting_key = #{key} | |||||
</select> | |||||
</mapper> |
@@ -0,0 +1,73 @@ | |||||
package me.zhengjie.dto; | |||||
import lombok.AllArgsConstructor; | |||||
import lombok.Data; | |||||
import lombok.NoArgsConstructor; | |||||
import lombok.extern.slf4j.Slf4j; | |||||
import me.zhengjie.error.ErrorCodeEnum; | |||||
import java.io.Serializable; | |||||
import java.util.HashMap; | |||||
import java.util.Map; | |||||
/** | |||||
* <p> | |||||
* 请求结果通用数据结构 | |||||
* </p> | |||||
* | |||||
* @author: zeng | |||||
* @since: 2020-07-01 | |||||
*/ | |||||
@Data | |||||
@NoArgsConstructor | |||||
@AllArgsConstructor | |||||
@Slf4j | |||||
public class Dto<T> implements Serializable { | |||||
private int code; | |||||
private String message; | |||||
private T data; | |||||
private Dto(Object data) { | |||||
this.code = 200; | |||||
this.message = "请求成功"; | |||||
this.data =(T) data; | |||||
} | |||||
private Dto(int code, String message) { | |||||
this.code = code; | |||||
this.message = message; | |||||
} | |||||
public Dto setData(String key, Object value) { | |||||
if (this.data == null) { | |||||
data = (T)new HashMap(16); | |||||
} | |||||
((Map) data).put(key, value); | |||||
return this; | |||||
} | |||||
public static Dto returnResult(Object data) { | |||||
return new Dto(data); | |||||
} | |||||
public static Dto returnErrorResult(String message) { | |||||
return new Dto(-1, message); | |||||
} | |||||
public static Dto getInstance(ErrorCodeEnum errorCodeEnum) { | |||||
log.error("---枚举类返回错误信息:--return error:" + errorCodeEnum.getDesc()); | |||||
return new Dto(errorCodeEnum.getCode(), errorCodeEnum.getDesc()); | |||||
} | |||||
public boolean success(Dto dto){ | |||||
if (dto.getCode() == 200) { | |||||
return true; | |||||
} else { | |||||
return false; | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,49 @@ | |||||
package me.zhengjie.dto; | |||||
import com.baomidou.mybatisplus.core.metadata.IPage; | |||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | |||||
import lombok.Data; | |||||
import javax.validation.constraints.Min; | |||||
import javax.validation.constraints.NotNull; | |||||
import java.io.Serializable; | |||||
/** | |||||
* @Description 分页查询参数 | |||||
* @Date 2022-06-22 | |||||
* @Author rch | |||||
*/ | |||||
@Data | |||||
public class PageDTO<T> implements Serializable { | |||||
private static final long serialVersionUID = 1L; | |||||
/** 当前页码 */ | |||||
@Min(value = 1) | |||||
@NotNull | |||||
private Integer page; | |||||
/** 页面大小 */ | |||||
@Min(value = 1) | |||||
@NotNull | |||||
private Integer pageSize; | |||||
/** 排序字段 */ | |||||
private String sort; | |||||
/** 排序方式 asc/desc */ | |||||
private String order; | |||||
/** 获取mysql limit 分页的起始位置 */ | |||||
public Integer getLimitStart() { | |||||
int i = (page-1)*pageSize; | |||||
return i > 0 ? i : 0; | |||||
} | |||||
public IPage<T> getiPage(){ | |||||
return new Page(page, pageSize); | |||||
} | |||||
public boolean isAsc() { | |||||
return "asc".equalsIgnoreCase(order); | |||||
} | |||||
} |
@@ -0,0 +1,38 @@ | |||||
package me.zhengjie.dto; | |||||
import lombok.AllArgsConstructor; | |||||
import lombok.Data; | |||||
import lombok.NoArgsConstructor; | |||||
import me.zhengjie.utils.PageUtils; | |||||
import java.util.List; | |||||
/** | |||||
* 本页合计、总计DTO | |||||
* @author zeng | |||||
* @since 2021/10/11 19:37 | |||||
*/ | |||||
@Data | |||||
@NoArgsConstructor | |||||
@AllArgsConstructor | |||||
public class StatementAggregateDTO<T> { | |||||
/** 列表 */ | |||||
private List<T> list; | |||||
/** 本页小计 */ | |||||
private T pageTotal; | |||||
/** 总计 */ | |||||
private T aggregate; | |||||
/** 总记录数 */ | |||||
private Long total; | |||||
public StatementAggregateDTO(PageUtils<T> pageUtils, T pageTotal, T aggregate) { | |||||
this.list = pageUtils.getList(); | |||||
this.pageTotal = pageTotal; | |||||
this.aggregate = aggregate; | |||||
this.total = pageUtils.getTotal(); | |||||
} | |||||
} |
@@ -0,0 +1,73 @@ | |||||
package me.zhengjie.entity; | |||||
import com.baomidou.mybatisplus.annotation.FieldFill; | |||||
import com.baomidou.mybatisplus.annotation.IdType; | |||||
import com.baomidou.mybatisplus.annotation.TableField; | |||||
import com.baomidou.mybatisplus.annotation.TableId; | |||||
import com.baomidou.mybatisplus.extension.activerecord.Model; | |||||
import io.swagger.annotations.ApiModel; | |||||
import io.swagger.annotations.ApiModelProperty; | |||||
import lombok.AllArgsConstructor; | |||||
import lombok.Data; | |||||
import lombok.NoArgsConstructor; | |||||
import java.util.Date; | |||||
/** | |||||
* 影刀应用信息(CtApply)表实体类 | |||||
* | |||||
* @author rch | |||||
* @since 2022-07-23 | |||||
*/ | |||||
@Data | |||||
@AllArgsConstructor | |||||
@NoArgsConstructor | |||||
@ApiModel | |||||
public class CtApply extends Model<CtApply> { | |||||
@TableId(value = "id", type = IdType.AUTO) | |||||
@ApiModelProperty(value = "id") | |||||
private Long id; | |||||
@TableField(fill = FieldFill.INSERT) | |||||
@ApiModelProperty(value = "创建时间") | |||||
private String createdAt; | |||||
@TableField(fill = FieldFill.INSERT_UPDATE) | |||||
@ApiModelProperty(value = "修改时间") | |||||
private String updatedAt; | |||||
/** 操作人账号*/ | |||||
@TableField(fill = FieldFill.INSERT_UPDATE) | |||||
@ApiModelProperty(value = "操作人账号") | |||||
private String gmName; | |||||
/** 应用名称 */ | |||||
@ApiModelProperty(value = "应用名称") | |||||
private String name; | |||||
/** 任务名称 */ | |||||
@ApiModelProperty(value = "任务名称") | |||||
private String taskName; | |||||
/** 方法名称 */ | |||||
@ApiModelProperty(value = "方法名称") | |||||
private String methodName; | |||||
/** accessKeyId */ | |||||
@ApiModelProperty(value = "accessKeyId") | |||||
private String accessKeyId; | |||||
/** accessKeySecret */ | |||||
@ApiModelProperty(value = "accessKeySecret") | |||||
private String accessKeySecret; | |||||
/** 应用id */ | |||||
@ApiModelProperty(value = "应用id") | |||||
private String robotUuid; | |||||
/** 备注 */ | |||||
@ApiModelProperty(value = "备注") | |||||
private String remark; | |||||
} | |||||
@@ -0,0 +1,45 @@ | |||||
package me.zhengjie.entity; | |||||
import com.baomidou.mybatisplus.annotation.FieldFill; | |||||
import com.baomidou.mybatisplus.annotation.IdType; | |||||
import com.baomidou.mybatisplus.annotation.TableField; | |||||
import com.baomidou.mybatisplus.annotation.TableId; | |||||
import com.baomidou.mybatisplus.extension.activerecord.Model; | |||||
import lombok.AllArgsConstructor; | |||||
import lombok.Data; | |||||
import lombok.NoArgsConstructor; | |||||
/** | |||||
* 浏览收藏(CtBrowse)表实体类 | |||||
* | |||||
* @author rch | |||||
* @since 2022-11-04 09:45:31 | |||||
*/ | |||||
@Data | |||||
@AllArgsConstructor | |||||
@NoArgsConstructor | |||||
public class CtBrowse extends Model<CtBrowse> { | |||||
@TableId(value = "id", type = IdType.AUTO) | |||||
private Long id; | |||||
@TableField(fill = FieldFill.INSERT) | |||||
private String createdAt; | |||||
@TableField(fill = FieldFill.INSERT_UPDATE) | |||||
private String updatedAt; | |||||
/** 操作人账号*/ | |||||
@TableField(fill = FieldFill.INSERT_UPDATE) | |||||
private String gmName; | |||||
/** 买家ID */ | |||||
private Long buyerId; | |||||
/** 收藏链接 */ | |||||
private String linkUrl; | |||||
/** 状态描述 */ | |||||
private String paymentResults; | |||||
/** 状态 1.待执行 2.执行中 3.执行成功 4.执行失败 */ | |||||
private Integer status; | |||||
} | |||||
@@ -0,0 +1,33 @@ | |||||
package me.zhengjie.entity; | |||||
import lombok.AllArgsConstructor; | |||||
import lombok.Data; | |||||
import lombok.NoArgsConstructor; | |||||
/** | |||||
* 浏览好评订单影刀参数 | |||||
* | |||||
* @author rch | |||||
* @since 2022-11-07 | |||||
*/ | |||||
@Data | |||||
@AllArgsConstructor | |||||
@NoArgsConstructor | |||||
public class CtBrowseYdParams { | |||||
private Long id; | |||||
/** 国家 */ | |||||
private String country; | |||||
/** 账号 */ | |||||
private String account; | |||||
/** 密码 */ | |||||
private String pwd; | |||||
/** vpn分享链接 */ | |||||
private String vpnShare; | |||||
/** 收藏链接 */ | |||||
private String linkUrl; | |||||
} |
@@ -0,0 +1,103 @@ | |||||
package me.zhengjie.entity; | |||||
import com.baomidou.mybatisplus.annotation.FieldFill; | |||||
import com.baomidou.mybatisplus.annotation.IdType; | |||||
import com.baomidou.mybatisplus.annotation.TableField; | |||||
import com.baomidou.mybatisplus.annotation.TableId; | |||||
import com.baomidou.mybatisplus.extension.activerecord.Model; | |||||
import lombok.AllArgsConstructor; | |||||
import lombok.Data; | |||||
import lombok.NoArgsConstructor; | |||||
import java.math.BigDecimal; | |||||
/** | |||||
* 买家信息表(CtBuyer)表实体类 | |||||
* | |||||
* @author rch | |||||
* @since 2022-06-22 | |||||
*/ | |||||
@Data | |||||
@AllArgsConstructor | |||||
@NoArgsConstructor | |||||
public class CtBuyer extends Model<CtBuyer> { | |||||
@TableId(value = "id", type = IdType.AUTO) | |||||
private Long id; | |||||
@TableField(fill = FieldFill.INSERT) | |||||
private String createdAt; | |||||
@TableField(fill = FieldFill.INSERT_UPDATE) | |||||
private String updatedAt; | |||||
/** 操作人账号*/ | |||||
@TableField(fill = FieldFill.INSERT_UPDATE) | |||||
private String gmName; | |||||
/** 昵称*/ | |||||
private String nickName; | |||||
/** 账号*/ | |||||
private String account; | |||||
/** 密码*/ | |||||
private String pwd; | |||||
/** 公司id */ | |||||
private Long companyId; | |||||
/** 平台id */ | |||||
private Integer platformId; | |||||
/** 平台名称 */ | |||||
// private String platformName; | |||||
// TODO 导入需要的字段接着往下添加 | |||||
/** 国家 */ | |||||
private String contntryShort; | |||||
/** 邮件 */ | |||||
private String email; | |||||
/** Email密码 */ | |||||
private String emailPwd; | |||||
/** VPN_ID(导入excel里包含) */ | |||||
private Long vpnId; | |||||
/** 信用卡ID */ | |||||
private Long cardId; | |||||
/** 用户等级(导入默认内部账号) 1.普通 2.精品 3.压力 4.内部账号 */ | |||||
private Integer level; | |||||
/** 占用状态 1.已占用 2.未占用 */ | |||||
private Integer occupyStatus; | |||||
/** 占用账户 */ | |||||
private String occupyAccount; | |||||
/** 账户余额 */ | |||||
private BigDecimal balance; | |||||
/** 账户购买总金额 */ | |||||
private BigDecimal buyTotalMoney; | |||||
/** mac */ | |||||
private String mac; | |||||
/** route_mac*/ | |||||
private String routeMac; | |||||
/** Cookies值 */ | |||||
private String cookies; | |||||
/** 过期时间 */ | |||||
private String expireDate; | |||||
/** 状态(导入默认正常) 1.待注册 2待验证 3.待完善 4.正常 5.异常 6.可用但已用 7.删除 */ | |||||
private Integer status; | |||||
// ==================地址信息相关========================================begin | |||||
/** 地址1 */ | |||||
private String addressline1; | |||||
/** 国家 */ | |||||
private String country; | |||||
/** 州 */ | |||||
private String state; | |||||
/** 电话 */ | |||||
private String tel; | |||||
/** lastname */ | |||||
private String lastname; | |||||
/** 税号 */ | |||||
private String vatNumber; | |||||
/** 城市 */ | |||||
private String city; | |||||
/** 地址2 */ | |||||
private String addressline2; | |||||
/** firstname */ | |||||
private String firstname; | |||||
/** 邮政编码 */ | |||||
private String postalcode; | |||||
// ==================地址信息相关========================================end | |||||
} | |||||
@@ -0,0 +1,19 @@ | |||||
package me.zhengjie.entity; | |||||
import lombok.AllArgsConstructor; | |||||
import lombok.Data; | |||||
import lombok.NoArgsConstructor; | |||||
/** | |||||
* 统计买家刷单成功个数信息 | |||||
* | |||||
* @author rch | |||||
* @create 2022-10-10 | |||||
*/ | |||||
@Data | |||||
@AllArgsConstructor | |||||
@NoArgsConstructor | |||||
public class CtBuyerClickSuccess { | |||||
private Long buyerId; | |||||
private Integer successCount; | |||||
} |
@@ -0,0 +1,45 @@ | |||||
package me.zhengjie.entity; | |||||
import com.baomidou.mybatisplus.annotation.FieldFill; | |||||
import com.baomidou.mybatisplus.annotation.IdType; | |||||
import com.baomidou.mybatisplus.annotation.TableField; | |||||
import com.baomidou.mybatisplus.annotation.TableId; | |||||
import com.baomidou.mybatisplus.extension.activerecord.Model; | |||||
import lombok.AllArgsConstructor; | |||||
import lombok.Data; | |||||
import lombok.NoArgsConstructor; | |||||
import java.math.BigDecimal; | |||||
/** | |||||
* 买家收款地址信息 | |||||
* | |||||
* @author rch | |||||
* @since 2022-07-18 | |||||
*/ | |||||
@Data | |||||
@AllArgsConstructor | |||||
@NoArgsConstructor | |||||
public class CtBuyerContactInfo { | |||||
/** 地址1 */ | |||||
private String addressline1; | |||||
/** 国家 */ | |||||
private String country; | |||||
/** 州 */ | |||||
private String state; | |||||
/** 电话 */ | |||||
private String tel; | |||||
/** lastname */ | |||||
private String lastname; | |||||
/** 税号 */ | |||||
private String vatNumber; | |||||
/** 城市 */ | |||||
private String city; | |||||
/** 地址2 */ | |||||
private String addressline2; | |||||
/** firstname */ | |||||
private String firstname; | |||||
/** 邮政编码 */ | |||||
private String postalcode; | |||||
} | |||||
@@ -0,0 +1,71 @@ | |||||
package me.zhengjie.entity; | |||||
import lombok.AllArgsConstructor; | |||||
import lombok.Data; | |||||
import lombok.NoArgsConstructor; | |||||
import me.zhengjie.utils.excel.ExcelExport; | |||||
/** | |||||
* 买家信息(CtBuyer)表实体类 导出对象信息 | |||||
* @author zhw | |||||
* @since 2022-07-14 | |||||
*/ | |||||
@Data | |||||
@AllArgsConstructor | |||||
@NoArgsConstructor | |||||
public class CtBuyerExport { | |||||
@ExcelExport(value = "昵称") | |||||
/** 昵称*/ | |||||
private String nickName; | |||||
/** 账号*/ | |||||
@ExcelExport(value = "账号") | |||||
private String account; | |||||
/** 密码*/ | |||||
@ExcelExport(value = "密码") | |||||
private String pwd; | |||||
/** 公司名称 */ | |||||
@ExcelExport(value = "公司名称") | |||||
private String companyName; | |||||
/** 平台名称 */ | |||||
@ExcelExport(value = "平台名称") | |||||
private String platformName; | |||||
/** 国家 */ | |||||
@ExcelExport(value = "所属国家") | |||||
private String contntryShort; | |||||
/** VPN_IP地址*/ | |||||
@ExcelExport(value = "VPN_IP地址") | |||||
private String vpnIp; | |||||
/** 信用卡卡号 */ | |||||
@ExcelExport(value = "信用卡卡号") | |||||
private String cardNumber; | |||||
/** 地址1 */ | |||||
@ExcelExport(value = "地址1") | |||||
private String addressline1; | |||||
/** 国家 */ | |||||
@ExcelExport(value = "国家") | |||||
private String country; | |||||
/** 州 */ | |||||
@ExcelExport(value = "州") | |||||
private String state; | |||||
/** 电话 */ | |||||
@ExcelExport(value = "电话") | |||||
private String tel; | |||||
/** lastname */ | |||||
@ExcelExport(value = "lastname") | |||||
private String lastname; | |||||
/** 城市 */ | |||||
@ExcelExport(value = "城市") | |||||
private String city; | |||||
/** firstname */ | |||||
@ExcelExport(value = "firstname") | |||||
private String firstname; | |||||
/** 邮政编码 */ | |||||
@ExcelExport(value = "邮政编码") | |||||
private String postalcode; | |||||
/** 异常信息 */ | |||||
@ExcelExport(value = "异常信息") | |||||
private String error; | |||||
} |
@@ -0,0 +1,67 @@ | |||||
package me.zhengjie.entity; | |||||
import lombok.AllArgsConstructor; | |||||
import lombok.Data; | |||||
import lombok.NoArgsConstructor; | |||||
import me.zhengjie.utils.excel.ExcelExport; | |||||
/** | |||||
* 买家信息(CtBuyer)表实体类 导出excel模板 | |||||
* @author zhw | |||||
* @since 2022-07-18 | |||||
*/ | |||||
@Data | |||||
@AllArgsConstructor | |||||
@NoArgsConstructor | |||||
public class CtBuyerExportTemple { | |||||
@ExcelExport(value = "昵称") | |||||
/** 昵称*/ | |||||
private String nickName; | |||||
/** 账号*/ | |||||
@ExcelExport(value = "账号") | |||||
private String account; | |||||
/** 密码*/ | |||||
@ExcelExport(value = "密码") | |||||
private String pwd; | |||||
/** 公司名称 */ | |||||
@ExcelExport(value = "公司名称") | |||||
private String companyName; | |||||
/** 平台名称 */ | |||||
@ExcelExport(value = "平台名称") | |||||
private String platformName; | |||||
/** 国家 */ | |||||
@ExcelExport(value = "所属国家") | |||||
private String contntryShort; | |||||
/** VPN_IP地址*/ | |||||
@ExcelExport(value = "VPN_IP地址") | |||||
private String vpnIp; | |||||
/** 信用卡卡号 */ | |||||
@ExcelExport(value = "信用卡卡号") | |||||
private String cardNumber; | |||||
/** 地址1 */ | |||||
@ExcelExport(value = "地址1") | |||||
private String addressline1; | |||||
/** 国家 */ | |||||
@ExcelExport(value = "国家") | |||||
private String country; | |||||
/** 州 */ | |||||
@ExcelExport(value = "州") | |||||
private String state; | |||||
/** 电话 */ | |||||
@ExcelExport(value = "电话") | |||||
private String tel; | |||||
/** lastname */ | |||||
@ExcelExport(value = "lastname") | |||||
private String lastname; | |||||
/** 城市 */ | |||||
@ExcelExport(value = "城市") | |||||
private String city; | |||||
/** firstname */ | |||||
@ExcelExport(value = "firstname") | |||||
private String firstname; | |||||
/** 邮政编码 */ | |||||
@ExcelExport(value = "邮政编码") | |||||
private String postalcode; | |||||
} |
@@ -0,0 +1,84 @@ | |||||
package me.zhengjie.entity; | |||||
import com.baomidou.mybatisplus.annotation.FieldFill; | |||||
import com.baomidou.mybatisplus.annotation.IdType; | |||||
import com.baomidou.mybatisplus.annotation.TableField; | |||||
import com.baomidou.mybatisplus.annotation.TableId; | |||||
import lombok.AllArgsConstructor; | |||||
import lombok.Data; | |||||
import lombok.NoArgsConstructor; | |||||
import me.zhengjie.utils.excel.ExcelImport; | |||||
/** | |||||
* Buyer信息(CtBuyer)表实体类 Import | |||||
* | |||||
* @author zhw | |||||
* @since 2022-07-14 | |||||
*/ | |||||
@Data | |||||
@AllArgsConstructor | |||||
@NoArgsConstructor | |||||
public class CtBuyerImport { | |||||
private int rowNum; | |||||
private String rowTips; | |||||
@TableId(value = "id", type = IdType.AUTO) | |||||
private Long id; | |||||
@TableField(fill = FieldFill.INSERT) | |||||
private String createdAt; | |||||
@TableField(fill = FieldFill.INSERT_UPDATE) | |||||
private String updatedAt; | |||||
/** 操作人账号*/ | |||||
@TableField(fill = FieldFill.INSERT_UPDATE) | |||||
private String gmName; | |||||
@ExcelImport(value = "昵称", required = true) | |||||
/** 昵称*/ | |||||
private String nickName; | |||||
/** 账号*/ | |||||
@ExcelImport(value = "账号", required = true, unique = true) | |||||
private String account; | |||||
/** 密码*/ | |||||
@ExcelImport(value = "密码", required = true) | |||||
private String pwd; | |||||
/** 公司名称 */ | |||||
@ExcelImport(value = "公司名称", required = true) | |||||
private String companyName; | |||||
/** 平台名称 */ | |||||
@ExcelImport(value = "平台名称", required = true) | |||||
private String platformName; | |||||
/** 国家 */ | |||||
@ExcelImport(value = "所属国家", required = true) | |||||
private String contntryShort; | |||||
/** VPN_IP地址*/ | |||||
@ExcelImport(value = "VPN_IP地址", required = true) | |||||
private String vpnIp; | |||||
/** 信用卡卡号 */ | |||||
@ExcelImport(value = "信用卡卡号") | |||||
private String cardNumber; | |||||
/** 地址1 */ | |||||
@ExcelImport(value = "地址1", required = true) | |||||
private String addressline1; | |||||
/** 国家 */ | |||||
@ExcelImport(value = "国家", required = true) | |||||
private String country; | |||||
/** 州 */ | |||||
@ExcelImport(value = "州", required = true) | |||||
private String state; | |||||
/** 电话 */ | |||||
@ExcelImport(value = "电话", required = true) | |||||
private String tel; | |||||
/** lastname */ | |||||
@ExcelImport(value = "lastname", required = true) | |||||
private String lastname; | |||||
/** 城市 */ | |||||
@ExcelImport(value = "城市", required = true) | |||||
private String city; | |||||
/** firstname */ | |||||
@ExcelImport(value = "firstname", required = true) | |||||
private String firstname; | |||||
/** 邮政编码 */ | |||||
@ExcelImport(value = "邮政编码", required = true) | |||||
private String postalcode; | |||||
} |
@@ -0,0 +1,80 @@ | |||||
package me.zhengjie.entity; | |||||
import com.baomidou.mybatisplus.annotation.FieldFill; | |||||
import com.baomidou.mybatisplus.annotation.IdType; | |||||
import com.baomidou.mybatisplus.annotation.TableField; | |||||
import com.baomidou.mybatisplus.annotation.TableId; | |||||
import com.baomidou.mybatisplus.extension.activerecord.Model; | |||||
import lombok.AllArgsConstructor; | |||||
import lombok.Data; | |||||
import lombok.NoArgsConstructor; | |||||
import java.math.BigDecimal; | |||||
import java.util.Date; | |||||
/** | |||||
* 信用卡信息(CtCard)表实体类 | |||||
* | |||||
* @author rch | |||||
* @since 2022-07-07 | |||||
*/ | |||||
@Data | |||||
@AllArgsConstructor | |||||
@NoArgsConstructor | |||||
public class CtCard extends Model<CtCard> { | |||||
@TableId(value = "id", type = IdType.AUTO) | |||||
private Long id; | |||||
@TableField(fill = FieldFill.INSERT) | |||||
private String createdAt; | |||||
@TableField(fill = FieldFill.INSERT_UPDATE) | |||||
private String updatedAt; | |||||
/** 操作人账号*/ | |||||
@TableField(fill = FieldFill.INSERT_UPDATE) | |||||
private String gmName; | |||||
/** 父ID */ | |||||
private Long parentId; | |||||
/** 卡号 */ | |||||
private String number; | |||||
// /** PIN码 */ | |||||
// private String pinNumber; | |||||
/** 持卡人姓氏 */ | |||||
private String holderSurname; | |||||
/** 持卡人名称 */ | |||||
private String holderName; | |||||
/** 有效期 */ | |||||
private String termOfValidity; | |||||
/** 余额 */ | |||||
private BigDecimal balance; | |||||
/** 累计消费 */ | |||||
private BigDecimal sumConsume; | |||||
/** 开卡日期 */ | |||||
private Date openDate; | |||||
/** 所属国家 */ | |||||
private String contntryShort; | |||||
/** 信用卡类型 1.Payoneer 2.万事达虚拟卡 3.Visa信用卡 */ | |||||
private Integer type; | |||||
/** 所属厂商:1.AmzKeys 2.Airwallex */ | |||||
private Integer cardDealer; | |||||
/** 身份证号 */ | |||||
private String idNumber; | |||||
/** 省份 */ | |||||
private String province; | |||||
/** 城市 */ | |||||
private String country; | |||||
/** 地址 */ | |||||
private String address; | |||||
/** 手机号 */ | |||||
private String phone; | |||||
/** 邮箱 */ | |||||
private String email; | |||||
/** 登陆账号 */ | |||||
private String account; | |||||
/** 密码 */ | |||||
private String pwd; | |||||
/** 状态:1.正常、2.异常、3.已删除 */ | |||||
private Integer status; | |||||
/** 备注 */ | |||||
private String remarks; | |||||
} |
@@ -0,0 +1,40 @@ | |||||
package me.zhengjie.entity; | |||||
import com.baomidou.mybatisplus.extension.activerecord.Model; | |||||
import lombok.AllArgsConstructor; | |||||
import lombok.Data; | |||||
import lombok.NoArgsConstructor; | |||||
import me.zhengjie.utils.excel.ExcelExport; | |||||
/** | |||||
* 信用卡信息(CtCard)表实体类 导出对象信息 | |||||
* | |||||
* @author rch | |||||
* @since 2022-07-07 | |||||
*/ | |||||
@Data | |||||
@AllArgsConstructor | |||||
@NoArgsConstructor | |||||
public class CtCardExport extends Model<CtCardExport> { | |||||
/** 卡号 */ | |||||
@ExcelExport(value = "卡号") | |||||
private String number; | |||||
// /** PIN码 */ | |||||
// @ExcelExport(value = "PIN码") | |||||
// private String pinNumber; | |||||
/** 有效期 */ | |||||
@ExcelExport(value = "有效期") | |||||
private String termOfValidity; | |||||
/** 信用卡类型 1.Payoneer 2.万事达虚拟卡 3.Visa信用卡 */ | |||||
@ExcelExport(value = "信用卡类型", kv = "1-Payoneer;2-万事达虚拟卡;3-Visa信用卡") | |||||
private Integer type; | |||||
/** 所属厂商:1.AmzKeys 2.Airwallex */ | |||||
@ExcelExport(value = "所属厂商", kv = "1-AmzKeys;2-Airwallex") | |||||
private Integer cardDealer; | |||||
/** 状态:1.正常、2.异常、3.已删除 */ | |||||
@ExcelExport(value = "状态", kv = "1-正常;2-异常;3-已删除") | |||||
private Integer status; | |||||
/** 异常信息 */ | |||||
@ExcelExport(value = "异常信息") | |||||
private String error; | |||||
} |
@@ -0,0 +1,46 @@ | |||||
package me.zhengjie.entity; | |||||
import com.baomidou.mybatisplus.extension.activerecord.Model; | |||||
import lombok.AllArgsConstructor; | |||||
import lombok.Data; | |||||
import lombok.NoArgsConstructor; | |||||
import me.zhengjie.utils.excel.ExcelExport; | |||||
/** | |||||
* 信用卡信息(CtCard)表实体类 导出模版对象信息 | |||||
* | |||||
* @author rch | |||||
* @since 2022-07-07 | |||||
*/ | |||||
@Data | |||||
@AllArgsConstructor | |||||
@NoArgsConstructor | |||||
public class CtCardExportTemple extends Model<CtCardExportTemple> { | |||||
/** 卡号 */ | |||||
@ExcelExport(value = "卡号") | |||||
private String number; | |||||
/** PIN码 */ | |||||
// @ExcelExport(value = "PIN码") | |||||
// private String pinNumber; | |||||
/** 密码 */ | |||||
@ExcelExport(value = "密码") | |||||
private String pwd; | |||||
/** 有效期 */ | |||||
@ExcelExport(value = "有效期(文本:yyyy-MM-dd)") | |||||
private String termOfValidity; | |||||
/** 信用卡类型 1.Payoneer 2.万事达虚拟卡 3.Visa信用卡 */ | |||||
@ExcelExport(value = "信用卡类型", kv = "1-Payoneer;2-万事达虚拟卡;3-Visa信用卡") | |||||
private Integer type; | |||||
/** 所属厂商:1.AmzKeys 2.Airwallex */ | |||||
@ExcelExport(value = "所属厂商", kv = "1-AmzKeys;2-Airwallex") | |||||
private Integer cardDealer; | |||||
/** 状态:1.正常、2.异常、3.已删除 */ | |||||
@ExcelExport(value = "状态", kv = "1-正常;2-异常;3-已删除") | |||||
private Integer status; | |||||
/** 持卡人姓氏 */ | |||||
@ExcelExport(value = "持卡人姓氏") | |||||
private String holderSurname; | |||||
/** 持卡人名称 */ | |||||
@ExcelExport(value = "持卡人名称") | |||||
private String holderName; | |||||
} |
@@ -0,0 +1,96 @@ | |||||
package me.zhengjie.entity; | |||||
import com.baomidou.mybatisplus.annotation.FieldFill; | |||||
import com.baomidou.mybatisplus.annotation.IdType; | |||||
import com.baomidou.mybatisplus.annotation.TableField; | |||||
import com.baomidou.mybatisplus.annotation.TableId; | |||||
import com.baomidou.mybatisplus.extension.activerecord.Model; | |||||
import lombok.AllArgsConstructor; | |||||
import lombok.Data; | |||||
import lombok.NoArgsConstructor; | |||||
import me.zhengjie.utils.excel.ExcelImport; | |||||
import java.math.BigDecimal; | |||||
import java.util.Date; | |||||
/** | |||||
* 信用卡信息(CtCard)表实体类 Import | |||||
* | |||||
* @author rch | |||||
* @since 2022-07-07 | |||||
*/ | |||||
@Data | |||||
@AllArgsConstructor | |||||
@NoArgsConstructor | |||||
public class CtCardImport extends Model<CtCardImport> { | |||||
/** Excel 行号 */ | |||||
private int rowNum; | |||||
/** Excel 错误提示 */ | |||||
private String rowTips; | |||||
@TableId(value = "id", type = IdType.AUTO) | |||||
private Long id; | |||||
@TableField(fill = FieldFill.INSERT) | |||||
private String createdAt; | |||||
@TableField(fill = FieldFill.INSERT_UPDATE) | |||||
private String updatedAt; | |||||
/** 操作人账号*/ | |||||
@TableField(fill = FieldFill.INSERT_UPDATE) | |||||
private String gmName; | |||||
/** 父ID */ | |||||
private Long parentId; | |||||
/** 卡号 */ | |||||
@ExcelImport(value = "卡号", required = true, unique = true) | |||||
private String number; | |||||
// /** PIN码 */ | |||||
// @ExcelImport(value = "PIN码", required = true, unique = true) | |||||
// private String pinNumber; | |||||
/** 持卡人姓氏 */ | |||||
@ExcelImport(value = "持卡人姓氏") | |||||
private String holderSurname; | |||||
/** 持卡人名称 */ | |||||
@ExcelImport(value = "持卡人名称") | |||||
private String holderName; | |||||
/** 有效期 */ | |||||
@ExcelImport(value = "有效期(文本:yyyy-MM-dd)", required = true) | |||||
private String termOfValidity; | |||||
/** 余额 */ | |||||
private BigDecimal balance; | |||||
/** 累计消费 */ | |||||
private BigDecimal sumConsume; | |||||
/** 开卡日期 */ | |||||
private Date openDate; | |||||
/** 所属国家 */ | |||||
private String contntryShort; | |||||
/** 信用卡类型 1.Payoneer 2.万事达虚拟卡 3.Visa信用卡 */ | |||||
@ExcelImport(value = "信用卡类型", kv = "1-Payoneer;2-万事达虚拟卡;3-Visa信用卡", required = true) | |||||
private Integer type; | |||||
/** 所属厂商:1.AmzKeys 2.Airwallex */ | |||||
@ExcelImport(value = "所属厂商", kv = "1-AmzKeys;2-Airwallex", required = true) | |||||
private Integer cardDealer; | |||||
/** 身份证号 */ | |||||
private String idNumber; | |||||
/** 省份 */ | |||||
private String province; | |||||
/** 城市 */ | |||||
private String country; | |||||
/** 地址 */ | |||||
private String address; | |||||
/** 手机号 */ | |||||
private String phone; | |||||
/** 邮箱 */ | |||||
private String email; | |||||
/** 登陆账号 */ | |||||
private String account; | |||||
/** 密码 */ | |||||
@ExcelImport(value = "密码") | |||||
private String pwd; | |||||
/** 状态:1.正常、2.异常、3.已删除 */ | |||||
@ExcelImport(value = "状态", kv = "1-正常;2-异常;3-已删除", required = true) | |||||
private Integer status; | |||||
/** 备注 */ | |||||
private String remarks; | |||||
} |
@@ -0,0 +1,22 @@ | |||||
package me.zhengjie.entity; | |||||
import lombok.AllArgsConstructor; | |||||
import lombok.Data; | |||||
import lombok.NoArgsConstructor; | |||||
/** | |||||
* Card(CtCard)表实体类 | |||||
* | |||||
* @author zhw | |||||
* @since 2022-07-14 | |||||
*/ | |||||
@Data | |||||
@AllArgsConstructor | |||||
@NoArgsConstructor | |||||
public class CtCardInfo { | |||||
/** id */ | |||||
private Long id; | |||||
/** 信用卡卡号 */ | |||||
private String number; | |||||
} |
@@ -0,0 +1,41 @@ | |||||
package me.zhengjie.entity; | |||||
import lombok.AllArgsConstructor; | |||||
import lombok.Data; | |||||
import lombok.NoArgsConstructor; | |||||
/** | |||||
* 刷单补录 | |||||
* | |||||
* @author rch | |||||
* @since 2022-08-16 | |||||
*/ | |||||
@Data | |||||
@AllArgsConstructor | |||||
@NoArgsConstructor | |||||
public class CtClickFarmSupplyMentYdParams { | |||||
private Long id; | |||||
/** 刷单类型 */ | |||||
private Integer paramsType; | |||||
/** 国家 */ | |||||
private String country; | |||||
/** 账号 */ | |||||
private String account; | |||||
/** 密码 */ | |||||
private String pwd; | |||||
/** vpn分享链接 */ | |||||
private String vpnShare; | |||||
/** item */ | |||||
private String item; | |||||
/** 有效期 */ | |||||
private String termOfValidity; | |||||
/** 信用卡持卡人名称 */ | |||||
private String cardName; | |||||
/** 信用卡卡号 */ | |||||
private String cardNumber; | |||||
/** 信用卡密码 */ | |||||
private String cardPwd; | |||||
} | |||||
@@ -0,0 +1,59 @@ | |||||
package me.zhengjie.entity; | |||||
import lombok.AllArgsConstructor; | |||||
import lombok.Data; | |||||
import lombok.NoArgsConstructor; | |||||
import javax.validation.constraints.NotBlank; | |||||
/** | |||||
* 刷单信息 影刀参数 | |||||
* | |||||
* @author rch | |||||
* @since 2022-08-16 | |||||
*/ | |||||
@Data | |||||
@AllArgsConstructor | |||||
@NoArgsConstructor | |||||
public class CtClickFarmYdParams { | |||||
private Long id; | |||||
/** 刷单类型 */ | |||||
private Integer paramsType; | |||||
/** 国家 */ | |||||
private String country; | |||||
/** 账号 */ | |||||
private String account; | |||||
/** 密码 */ | |||||
private String pwd; | |||||
/** 关键词 */ | |||||
private String keyWord; | |||||
/** 数量 */ | |||||
private Integer number; | |||||
/** 规格 */ | |||||
private String specification; | |||||
/** 颜色 */ | |||||
private String color; | |||||
/** item */ | |||||
private String item; | |||||
private String exchange; | |||||
/** 最小价格区间 */ | |||||
private String sectionMin; | |||||
/** 最大价格区间 */ | |||||
private String sectionMax; | |||||
/** vpn分享链接 */ | |||||
private String vpnShare; | |||||
/** 链接 */ | |||||
private String link; | |||||
/** 留言 */ | |||||
private String amessage; | |||||
/** 有效期 */ | |||||
private String termOfValidity; | |||||
/** 信用卡持卡人名称 */ | |||||
private String cardName; | |||||
/** 信用卡卡号 */ | |||||
private String cardNumber; | |||||
/** 信用卡密码 */ | |||||
private String cardPwd; | |||||
} | |||||
@@ -0,0 +1,70 @@ | |||||
package me.zhengjie.entity; | |||||
import com.baomidou.mybatisplus.annotation.FieldFill; | |||||
import com.baomidou.mybatisplus.annotation.IdType; | |||||
import com.baomidou.mybatisplus.annotation.TableField; | |||||
import com.baomidou.mybatisplus.annotation.TableId; | |||||
import com.baomidou.mybatisplus.extension.activerecord.Model; | |||||
import lombok.AllArgsConstructor; | |||||
import lombok.Data; | |||||
import lombok.NoArgsConstructor; | |||||
/** | |||||
* 刷单Excel信息(CtClickFarming)表实体类 | |||||
* | |||||
* @author rch | |||||
* @since 2022-08-16 | |||||
*/ | |||||
@Data | |||||
@AllArgsConstructor | |||||
@NoArgsConstructor | |||||
public class CtClickFarming extends Model<CtClickFarming> { | |||||
@TableId(value = "id", type = IdType.AUTO) | |||||
private Long id; | |||||
@TableField(fill = FieldFill.INSERT) | |||||
private String createdAt; | |||||
@TableField(fill = FieldFill.INSERT_UPDATE) | |||||
private String updatedAt; | |||||
/** 操作人账号*/ | |||||
@TableField(fill = FieldFill.INSERT_UPDATE) | |||||
private String gmName; | |||||
/** 关联刷单订单ID */ | |||||
private Long ctClickOrderId; | |||||
/** 买家id */ | |||||
private Long buyerId; | |||||
/** 刷单类型 */ | |||||
private Integer paramsType; | |||||
/** 店铺名称 */ | |||||
private String shopName; | |||||
/** 关键词 */ | |||||
private String keyWord; | |||||
/** 标题 */ | |||||
private String title; | |||||
/** 链接 */ | |||||
private String link; | |||||
/** 数量 */ | |||||
private Integer number; | |||||
/** 规格 */ | |||||
private String specification; | |||||
/** 颜色 */ | |||||
private String color; | |||||
/** item */ | |||||
private String item; | |||||
/** 优惠劵 */ | |||||
private String exchange; | |||||
/** 最小价格区间 */ | |||||
private String sectionMin; | |||||
/** 最大价格区间 */ | |||||
private String sectionMax; | |||||
/** 执行结果 */ | |||||
private String response; | |||||
/** 支付订单ID */ | |||||
private String payOrderId; | |||||
/** 状态 1.待执行 2.执行中 3.执行成功 4.执行失败 */ | |||||
private Integer status; | |||||
/** 留言 */ | |||||
private String amessage; | |||||
} | |||||
@@ -0,0 +1,59 @@ | |||||
package me.zhengjie.entity; | |||||
import com.baomidou.mybatisplus.extension.activerecord.Model; | |||||
import lombok.AllArgsConstructor; | |||||
import lombok.Data; | |||||
import lombok.NoArgsConstructor; | |||||
import me.zhengjie.utils.excel.ExcelExport; | |||||
import me.zhengjie.utils.excel.ExcelImport; | |||||
/** | |||||
* 刷单信息信息(CtCard)表实体类 Import | |||||
* | |||||
* @author rch | |||||
* @since 2022-08-16 | |||||
*/ | |||||
@Data | |||||
@AllArgsConstructor | |||||
@NoArgsConstructor | |||||
public class CtClickFarmingExport { | |||||
/** 国家 */ | |||||
@ExcelExport(value = "国家") | |||||
private String country; | |||||
/** 账号 */ | |||||
@ExcelExport(value = "账号") | |||||
private String account; | |||||
/** 密码 */ | |||||
@ExcelExport(value = "密码") | |||||
private String pwd; | |||||
/** 店铺名称 */ | |||||
@ExcelExport(value = "店铺名称") | |||||
private String shopName; | |||||
/** 关键词 */ | |||||
@ExcelExport(value = "关键词") | |||||
private String keyWord; | |||||
/** 标题 */ | |||||
@ExcelExport(value = "标题") | |||||
private String title; | |||||
/** 链接 */ | |||||
@ExcelExport(value = "链接") | |||||
private String link; | |||||
/** 数量 */ | |||||
@ExcelExport(value = "数量") | |||||
private Integer number; | |||||
/** 规格 */ | |||||
@ExcelExport(value = "规格") | |||||
private String specification; | |||||
/** 颜色 */ | |||||
@ExcelExport(value = "颜色") | |||||
private String color; | |||||
/** item */ | |||||
@ExcelExport(value = "item") | |||||
private String item; | |||||
/** vpn分享链接 */ | |||||
@ExcelExport(value = "vpn分享链接") | |||||
private String vpnShare; | |||||
/** 异常信息 */ | |||||
@ExcelExport(value = "异常信息") | |||||
private String error; | |||||
} |
@@ -0,0 +1,53 @@ | |||||
package me.zhengjie.entity; | |||||
import lombok.AllArgsConstructor; | |||||
import lombok.Data; | |||||
import lombok.NoArgsConstructor; | |||||
import me.zhengjie.utils.excel.ExcelExport; | |||||
/** | |||||
* 刷单信息信息(CtCard)表实体类 Import | |||||
* | |||||
* @author rch | |||||
* @since 2022-08-16 | |||||
*/ | |||||
@Data | |||||
@AllArgsConstructor | |||||
@NoArgsConstructor | |||||
public class CtClickFarmingExportTemp { | |||||
/** 账号 */ | |||||
@ExcelExport(value = "账号") | |||||
private String account; | |||||
/** 商品属性类型:1.关键词 2.链接 */ | |||||
@ExcelExport(value = "商品属性类型", kv = "1-关键词;2-链接") | |||||
private Integer paramsType; | |||||
/** 店铺名称 */ | |||||
@ExcelExport(value = "店铺名称") | |||||
private String shopName; | |||||
/** 关键词 */ | |||||
@ExcelExport(value = "关键词") | |||||
private String keyWord; | |||||
/** 标题 */ | |||||
@ExcelExport(value = "标题") | |||||
private String title; | |||||
/** 链接 */ | |||||
@ExcelExport(value = "链接") | |||||
private String link; | |||||
/** 数量 */ | |||||
@ExcelExport(value = "数量") | |||||
private Integer number; | |||||
/** 规格 */ | |||||
@ExcelExport(value = "规格") | |||||
private String specification; | |||||
/** 颜色 */ | |||||
@ExcelExport(value = "颜色") | |||||
private String color; | |||||
@ExcelExport(value = "优惠卷") | |||||
private String exchange; | |||||
/** 商品item */ | |||||
@ExcelExport(value = "商品item") | |||||
private String item; | |||||
/** 留言 */ | |||||
@ExcelExport(value = "留言") | |||||
private String amessage; | |||||
} |
@@ -0,0 +1,64 @@ | |||||
package me.zhengjie.entity; | |||||
import lombok.AllArgsConstructor; | |||||
import lombok.Data; | |||||
import lombok.NoArgsConstructor; | |||||
import me.zhengjie.utils.excel.ExcelImport; | |||||
/** | |||||
* 刷单信息信息(CtCard)表实体类 Import | |||||
* | |||||
* @author rch | |||||
* @since 2022-08-16 | |||||
*/ | |||||
@Data | |||||
@AllArgsConstructor | |||||
@NoArgsConstructor | |||||
public class CtClickFarmingImport { | |||||
/** Excel 行号 */ | |||||
private int rowNum; | |||||
/** Excel 错误提示 */ | |||||
private String rowTips; | |||||
/** 买家id */ | |||||
private Long buyerId; | |||||
/** 账号 */ | |||||
@ExcelImport(value = "账号", required = true, unique = true) | |||||
private String account; | |||||
/** 商品属性类型:1.关键词 2.链接 */ | |||||
@ExcelImport(value = "商品属性类型", kv = "1-关键词; 2-链接") | |||||
private Integer paramsType; | |||||
/** 店铺名称 */ | |||||
@ExcelImport(value = "店铺名称") | |||||
private String shopName; | |||||
/** 关键词 */ | |||||
@ExcelImport(value = "关键词") | |||||
private String keyWord; | |||||
/** 标题 */ | |||||
@ExcelImport(value = "标题") | |||||
private String title; | |||||
/** 链接 */ | |||||
@ExcelImport(value = "链接") | |||||
private String link; | |||||
/** 数量 */ | |||||
@ExcelImport(value = "数量") | |||||
private Integer number; | |||||
/** 规格 */ | |||||
@ExcelImport(value = "规格") | |||||
private String specification; | |||||
/** 颜色 */ | |||||
@ExcelImport(value = "颜色") | |||||
private String color; | |||||
/** item */ | |||||
@ExcelImport(value = "商品item") | |||||
private String item; | |||||
/** 优惠劵 */ | |||||
@ExcelImport(value = "优惠卷") | |||||
private String exchange; | |||||
/** 留言 */ | |||||
@ExcelImport(value = "留言", required = true) | |||||
private String amessage; | |||||
} |
@@ -0,0 +1,37 @@ | |||||
package me.zhengjie.entity; | |||||
import lombok.AllArgsConstructor; | |||||
import lombok.Data; | |||||
import lombok.NoArgsConstructor; | |||||
/** | |||||
* 刷单订单信息详情(刷单信息+订单信息) | |||||
* | |||||
* @author rch | |||||
* @since 2022-08-16 | |||||
*/ | |||||
@Data | |||||
@AllArgsConstructor | |||||
@NoArgsConstructor | |||||
public class CtClickFarmingOrderInfo { | |||||
private Long id; | |||||
/** 国家 */ | |||||
private String country; | |||||
/** 账号 */ | |||||
private String account; | |||||
/** 密码 */ | |||||
private String pwd; | |||||
/** vpn分享链接 */ | |||||
private String vpnShare; | |||||
/** 订单id */ | |||||
private String orderId; | |||||
/** 评论 */ | |||||
private String comment; | |||||
/** 状态 1.待执行 2.执行中 3.执行成功 4.执行失败 */ | |||||
private Integer status; | |||||
/** 图片地址 */ | |||||
private String paths; | |||||
} | |||||
@@ -0,0 +1,55 @@ | |||||
package me.zhengjie.entity; | |||||
import com.baomidou.mybatisplus.annotation.FieldFill; | |||||
import com.baomidou.mybatisplus.annotation.IdType; | |||||
import com.baomidou.mybatisplus.annotation.TableField; | |||||
import com.baomidou.mybatisplus.annotation.TableId; | |||||
import com.baomidou.mybatisplus.extension.activerecord.Model; | |||||
import lombok.AllArgsConstructor; | |||||
import lombok.Data; | |||||
import lombok.NoArgsConstructor; | |||||
/** | |||||
* 刷单-订单信息(CtClickOrder)表实体类 | |||||
* | |||||
* @author rch | |||||
* @since 2022-09-14 | |||||
*/ | |||||
@Data | |||||
@AllArgsConstructor | |||||
@NoArgsConstructor | |||||
public class CtClickOrder extends Model<CtClickOrder> { | |||||
@TableId(value = "id", type = IdType.AUTO) | |||||
private Long id; | |||||
@TableField(fill = FieldFill.INSERT) | |||||
private String createdAt; | |||||
@TableField(fill = FieldFill.INSERT_UPDATE) | |||||
private String updatedAt; | |||||
/** 操作人账号*/ | |||||
@TableField(fill = FieldFill.INSERT_UPDATE) | |||||
private String gmName; | |||||
/** 公司ID */ | |||||
private Long companyId; | |||||
/** 类型 1.导入 2.刷单*/ | |||||
private Integer type; | |||||
/** 总金额 */ | |||||
private String amount; | |||||
/** 状态描述 */ | |||||
private String paymentResults; | |||||
/** 店铺名称 */ | |||||
private String shop; | |||||
/** 购买数量 */ | |||||
private String pricesNumber; | |||||
/** 订单id */ | |||||
private String orderId; | |||||
/** 商品名称 */ | |||||
private String shopName; | |||||
/** 时间 */ | |||||
private String orderDate; | |||||
/** 评论 */ | |||||
private String comment; | |||||
/** 图片地址 */ | |||||
private String paths; | |||||
/** 状态 1.待执行 2.执行中 3.执行成功 4.执行失败 */ | |||||
private Integer status; | |||||
} |
@@ -0,0 +1,37 @@ | |||||
package me.zhengjie.entity; | |||||
import lombok.AllArgsConstructor; | |||||
import lombok.Data; | |||||
import lombok.NoArgsConstructor; | |||||
import me.zhengjie.utils.excel.ExcelExport; | |||||
/** | |||||
* 刷单订单实体类 导出模版对象信息 | |||||
* | |||||
* @author rch | |||||
* @since 2022-09-27 | |||||
*/ | |||||
@Data | |||||
@AllArgsConstructor | |||||
@NoArgsConstructor | |||||
public class CtClickOrderExport { | |||||
/** 公司名称 */ | |||||
@ExcelExport(value = "公司名称") | |||||
private String companyName; | |||||
/** 总金额 */ | |||||
@ExcelExport(value = "总金额") | |||||
private String amount; | |||||
/** 店铺名称 */ | |||||
@ExcelExport(value = "店铺名称") | |||||
private String shop; | |||||
/** 订单id */ | |||||
@ExcelExport(value = "订单id") | |||||
private String orderId; | |||||
/** 评论 */ | |||||
@ExcelExport(value = "评论") | |||||
private String comment; | |||||
@ExcelExport(value = "异常信息") | |||||
private String error; | |||||
} |
@@ -0,0 +1,39 @@ | |||||
package me.zhengjie.entity; | |||||
import lombok.AllArgsConstructor; | |||||
import lombok.Data; | |||||
import lombok.NoArgsConstructor; | |||||
import me.zhengjie.utils.excel.ExcelExport; | |||||
import me.zhengjie.utils.excel.ExcelImport; | |||||
/** | |||||
* 刷单订单实体类 导出模版对象信息 | |||||
* | |||||
* @author rch | |||||
* @since 2022-09-27 | |||||
*/ | |||||
@Data | |||||
@AllArgsConstructor | |||||
@NoArgsConstructor | |||||
public class CtClickOrderExportTemple { | |||||
/** 平台名称 */ | |||||
@ExcelExport(value = "平台名称") | |||||
private Integer platformId; | |||||
/** 公司名称 */ | |||||
@ExcelExport(value = "公司名称") | |||||
private Long companyId; | |||||
/** 总金额 */ | |||||
@ExcelExport(value = "总金额") | |||||
private String amount; | |||||
/** 店铺名称 */ | |||||
@ExcelExport(value = "店铺名称") | |||||
private String shop; | |||||
/** 订单id */ | |||||
@ExcelExport(value = "订单id") | |||||
private String orderId; | |||||
/** 评论 */ | |||||
@ExcelExport(value = "评论") | |||||
private String comment; | |||||
} |
@@ -0,0 +1,40 @@ | |||||
package me.zhengjie.entity; | |||||
import lombok.AllArgsConstructor; | |||||
import lombok.Data; | |||||
import lombok.NoArgsConstructor; | |||||
import me.zhengjie.utils.excel.ExcelExport; | |||||
import me.zhengjie.utils.excel.ExcelImport; | |||||
/** | |||||
* Vpn信息(CtVpn)表实体类 Import | |||||
* | |||||
* @author rch | |||||
* @since 2022-09-27 | |||||
*/ | |||||
@Data | |||||
@AllArgsConstructor | |||||
@NoArgsConstructor | |||||
public class CtClickOrderImport { | |||||
private int rowNum; | |||||
private String rowTips; | |||||
/** 公司ID */ | |||||
private Long companyId; | |||||
/** 公司名称 */ | |||||
@ExcelImport(value = "公司名称", required = true) | |||||
private String companyName; | |||||
/** 总金额 */ | |||||
@ExcelImport(value = "总金额", required = true) | |||||
private String amount; | |||||
/** 店铺名称 */ | |||||
@ExcelImport(value = "店铺名称", required = true) | |||||
private String shop; | |||||
/** 订单id */ | |||||
@ExcelImport(value = "订单id", required = true) | |||||
private String orderId; | |||||
/** 评论 */ | |||||
@ExcelImport(value = "评论") | |||||
private String comment; | |||||
} |
@@ -0,0 +1,33 @@ | |||||
package me.zhengjie.entity; | |||||
import lombok.AllArgsConstructor; | |||||
import lombok.Data; | |||||
import lombok.NoArgsConstructor; | |||||
/** | |||||
* 刷单订单影刀参数 | |||||
* | |||||
* @author rch | |||||
* @since 2022-10-21 | |||||
*/ | |||||
@Data | |||||
@AllArgsConstructor | |||||
@NoArgsConstructor | |||||
public class CtClickOrderYdParams { | |||||
private Long id; | |||||
/** 国家 */ | |||||
private String country; | |||||
/** 账号 */ | |||||
private String account; | |||||
/** 密码 */ | |||||
private String pwd; | |||||
/** vpn分享链接 */ | |||||
private String vpnShare; | |||||
/** 订单id */ | |||||
private String orderId; | |||||
/** 评论 */ | |||||
private String comment; | |||||
/** 图片 */ | |||||
private String paths; | |||||
} |
@@ -0,0 +1,43 @@ | |||||
package me.zhengjie.entity; | |||||
import com.baomidou.mybatisplus.annotation.FieldFill; | |||||
import com.baomidou.mybatisplus.annotation.IdType; | |||||
import com.baomidou.mybatisplus.annotation.TableField; | |||||
import com.baomidou.mybatisplus.annotation.TableId; | |||||
import com.baomidou.mybatisplus.extension.activerecord.Model; | |||||
import lombok.AllArgsConstructor; | |||||
import lombok.Data; | |||||
import lombok.NoArgsConstructor; | |||||
/** | |||||
* 公司信息(CtCompany)表实体类 | |||||
* | |||||
* @author rch | |||||
* @since 2022-06-23 | |||||
*/ | |||||
@Data | |||||
@AllArgsConstructor | |||||
@NoArgsConstructor | |||||
public class CtCompany extends Model<CtCompany> { | |||||
@TableId(value = "id", type = IdType.AUTO) | |||||
private Long id; | |||||
@TableField(fill = FieldFill.INSERT) | |||||
private String createdAt; | |||||
@TableField(fill = FieldFill.INSERT_UPDATE) | |||||
private String updatedAt; | |||||
/** 操作人账号*/ | |||||
@TableField(fill = FieldFill.INSERT_UPDATE) | |||||
private String gmName; | |||||
/** 名称 */ | |||||
private String name; | |||||
/** 地址 */ | |||||
private String address; | |||||
/** 电话 */ | |||||
private String phone; | |||||
/** 商户码(公司调用api公司唯一标识) */ | |||||
private String number; | |||||
/** 商户token(公司调用api公司token身份标识) */ | |||||
private String token; | |||||
} | |||||
@@ -0,0 +1,23 @@ | |||||
package me.zhengjie.entity; | |||||
import lombok.AllArgsConstructor; | |||||
import lombok.Data; | |||||
import lombok.NoArgsConstructor; | |||||
/** | |||||
* 公司信息(CtCompany)表实体类 | |||||
* | |||||
* @author zhw | |||||
* @since 2022-07-14 | |||||
*/ | |||||
@Data | |||||
@AllArgsConstructor | |||||
@NoArgsConstructor | |||||
public class CtCompanyInfo { | |||||
/** id */ | |||||
private Long id; | |||||
/** 名称 */ | |||||
private String name; | |||||
} |
@@ -0,0 +1,44 @@ | |||||
package me.zhengjie.entity; | |||||
import com.baomidou.mybatisplus.annotation.FieldFill; | |||||
import com.baomidou.mybatisplus.annotation.IdType; | |||||
import com.baomidou.mybatisplus.annotation.TableField; | |||||
import com.baomidou.mybatisplus.annotation.TableId; | |||||
import com.baomidou.mybatisplus.extension.activerecord.Model; | |||||
import lombok.AllArgsConstructor; | |||||
import lombok.Data; | |||||
import lombok.NoArgsConstructor; | |||||
import java.util.Date; | |||||
/** | |||||
* 平台信息(CtDyPay)表实体类 | |||||
* | |||||
* @author rch | |||||
* @since 2022-07-28 | |||||
*/ | |||||
@Data | |||||
@AllArgsConstructor | |||||
@NoArgsConstructor | |||||
public class CtDhPay extends Model<CtDhPay> { | |||||
@TableId(value = "id", type = IdType.AUTO) | |||||
private Long id; | |||||
@TableField(fill = FieldFill.INSERT) | |||||
private String createdAt; | |||||
@TableField(fill = FieldFill.INSERT_UPDATE) | |||||
private String updatedAt; | |||||
/** 操作人账号*/ | |||||
@TableField(fill = FieldFill.INSERT_UPDATE) | |||||
private String gmName; | |||||
/** 买家名称 */ | |||||
private String buyerName; | |||||
/** 支付订单ID(敦煌的) */ | |||||
private String orderId; | |||||
/** 请求响应详情 */ | |||||
private String response; | |||||
/** 状态 0.待处理 1.支付成功 2.支付失败 */ | |||||
private Integer status; | |||||
} | |||||