commit f281bc64b20c6b58de35fec059802256b0aa26aa
Author: 做个有用的人 <819389547@qq.com>
Date: Wed Jun 12 14:01:31 2024 +0800
first commit
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..549e00a
--- /dev/null
+++ b/.gitignore
@@ -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/
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..ca38718
--- /dev/null
+++ b/LICENSE
@@ -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.
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..484acf5
--- /dev/null
+++ b/README.md
@@ -0,0 +1,83 @@
+
+#### 项目简介
+一个基于 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 系统代码生成模块
+```
+
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..313c8bc
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,321 @@
+
+
+ 4.0.0
+
+ me.zhengjie
+ wjcy
+ pom
+ 1.0
+
+
+ wjcy-common
+ wjcy-logging
+ wjcy-system
+ wjcy-tools
+ wjcy-generator
+
+
+ EL-ADMIN 后台管理
+ http://auauz.net
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.2.10.RELEASE
+
+
+
+ UTF-8
+ UTF-8
+ 1.8
+ 1.16
+ 1.2.70
+ 1.1.24
+ 2.5.0
+ 1.3.1.Final
+ 2.1.1
+ 2.15.0
+ 2.0.7
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-logging
+
+
+ *
+ *
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-security
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-cache
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-redis
+
+
+
+
+ org.apache.commons
+ commons-pool2
+ ${commons-pool2.version}
+
+
+ org.apache.commons
+ commons-lang3
+
+
+ org.springframework.boot
+ spring-boot-configuration-processor
+ true
+
+
+
+ org.bgee.log4jdbc-log4j2
+ log4jdbc-log4j2-jdbc4.1
+ ${log4jdbc.version}
+
+
+
+
+ com.github.xiaoymin
+ knife4j-spring-boot-starter
+ ${knife4j.version}
+
+
+
+
+ mysql
+ mysql-connector-java
+ runtime
+
+
+
+
+ com.alibaba
+ druid-spring-boot-starter
+ ${druid.version}
+
+
+ org.lionsoul
+ ip2region
+ 1.7.2
+
+
+
+
+ org.projectlombok
+ lombok
+ true
+
+
+
+
+
+
+ com.alibaba
+ fastjson
+ ${fastjson.version}
+
+
+
+
+ org.mapstruct
+ mapstruct
+ ${mapstruct.version}
+
+
+ org.mapstruct
+ mapstruct-processor
+ ${mapstruct.version}
+ provided
+
+
+ javax.inject
+ javax.inject
+ 1
+
+
+
+
+ com.github.whvcse
+ easy-captcha
+ 1.6.2
+
+
+
+
+ nl.basjes.parse.useragent
+ yauaa
+ 5.23
+
+
+
+
+ com.baomidou
+ mybatis-plus-boot-starter
+ 3.3.2
+
+
+ com.h2database
+ h2
+ runtime
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-log4j2
+
+
+
+
+ org.apache.poi
+ poi
+ 4.0.1
+
+
+
+
+ org.apache.poi
+ poi-ooxml
+ 4.0.1
+
+
+
+ net.sourceforge.jexcelapi
+ jxl
+ 2.6.10
+
+
+
+ org.redisson
+ redisson
+ 3.5.7
+
+
+
+
+ org.apache.rocketmq
+ rocketmq-client
+ 4.4.0
+
+
+
+
+ com.google.guava
+ guava
+ 24.1-jre
+
+
+ com.madgag.spongycastle
+ core
+ 1.58.0.0
+
+
+
+ org.springframework.boot
+ spring-boot-starter-thymeleaf
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-openfeign
+ 2.2.5.RELEASE
+
+
+ com.netflix.feign
+ feign-jackson
+ 8.18.0
+
+
+
+ org.telegram
+ telegrambots
+ 5.5.0
+
+
+
+
+
+
+
+ src/main/java
+
+ **/*.xml
+
+ true
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+ true
+
+
+
+
+
+
+
+ public
+ aliyun nexus
+ http://maven.aliyun.com/nexus/content/groups/public/
+
+ true
+
+
+
+
+
+
+ public
+ aliyun nexus
+ http://maven.aliyun.com/nexus/content/groups/public/
+
+ true
+
+
+ false
+
+
+
+
\ No newline at end of file
diff --git a/wjcy-common/pom.xml b/wjcy-common/pom.xml
new file mode 100644
index 0000000..12e75a5
--- /dev/null
+++ b/wjcy-common/pom.xml
@@ -0,0 +1,37 @@
+
+
+
+ wjcy
+ me.zhengjie
+ 1.0
+
+ 4.0.0
+
+ 5.3.4
+
+
+ wjcy-common
+ 公共模块
+
+
+
+
+ cn.hutool
+ hutool-all
+ ${hutool.version}
+
+
+
+ org.apache.httpcomponents
+ httpclient
+ 4.5.12
+
+
+ org.jodd
+ jodd-core
+ 3.7.1
+
+
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/annotation/AnonymousAccess.java b/wjcy-common/src/main/java/me/zhengjie/annotation/AnonymousAccess.java
new file mode 100644
index 0000000..b2c168f
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/annotation/AnonymousAccess.java
@@ -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 {
+
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/annotation/CheckPwd.java b/wjcy-common/src/main/java/me/zhengjie/annotation/CheckPwd.java
new file mode 100644
index 0000000..459425b
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/annotation/CheckPwd.java
@@ -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 {};
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/annotation/DataPermission.java b/wjcy-common/src/main/java/me/zhengjie/annotation/DataPermission.java
new file mode 100644
index 0000000..b73c1a2
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/annotation/DataPermission.java
@@ -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;
+
+/**
+ *
+ * 用于判断是否过滤数据权限
+ * 1、如果没有用到 @OneToOne 这种关联关系,只需要填写 fieldName [参考:DeptQueryCriteria.class]
+ * 2、如果用到了 @OneToOne ,fieldName 和 joinName 都需要填写,拿UserQueryCriteria.class举例:
+ * 应该是 @DataPermission(joinName = "dept", fieldName = "id")
+ *
+ * @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 "";
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/annotation/DateTime.java b/wjcy-common/src/main/java/me/zhengjie/annotation/DateTime.java
new file mode 100644
index 0000000..385ddd9
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/annotation/DateTime.java
@@ -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;
+/**
+ *
+ * 日期格式效验
+ *
+ *
+ * @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 {};
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/annotation/FormSubmission.java b/wjcy-common/src/main/java/me/zhengjie/annotation/FormSubmission.java
new file mode 100644
index 0000000..d3e7f2d
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/annotation/FormSubmission.java
@@ -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;
+
+/**
+ *
+ * 表单提交
+ *
+ *
+ * @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;
+
+
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/annotation/Limit.java b/wjcy-common/src/main/java/me/zhengjie/annotation/Limit.java
new file mode 100644
index 0000000..58b41cf
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/annotation/Limit.java
@@ -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;
+
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/annotation/Query.java b/wjcy-common/src/main/java/me/zhengjie/annotation/Query.java
new file mode 100644
index 0000000..e1758c9
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/annotation/Query.java
@@ -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
+ }
+
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/annotation/rest/AnonymousDeleteMapping.java b/wjcy-common/src/main/java/me/zhengjie/annotation/rest/AnonymousDeleteMapping.java
new file mode 100644
index 0000000..6a81c2e
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/annotation/rest/AnonymousDeleteMapping.java
@@ -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 {};
+
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/annotation/rest/AnonymousGetMapping.java b/wjcy-common/src/main/java/me/zhengjie/annotation/rest/AnonymousGetMapping.java
new file mode 100644
index 0000000..c260a71
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/annotation/rest/AnonymousGetMapping.java
@@ -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.
+ *
+ * 支持匿名访问 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 {};
+
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/annotation/rest/AnonymousPatchMapping.java b/wjcy-common/src/main/java/me/zhengjie/annotation/rest/AnonymousPatchMapping.java
new file mode 100644
index 0000000..6686617
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/annotation/rest/AnonymousPatchMapping.java
@@ -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 {};
+
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/annotation/rest/AnonymousPostMapping.java b/wjcy-common/src/main/java/me/zhengjie/annotation/rest/AnonymousPostMapping.java
new file mode 100644
index 0000000..8f1cdcd
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/annotation/rest/AnonymousPostMapping.java
@@ -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 {};
+
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/annotation/rest/AnonymousPutMapping.java b/wjcy-common/src/main/java/me/zhengjie/annotation/rest/AnonymousPutMapping.java
new file mode 100644
index 0000000..7c417da
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/annotation/rest/AnonymousPutMapping.java
@@ -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 {};
+
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/aspect/LimitAspect.java b/wjcy-common/src/main/java/me/zhengjie/aspect/LimitAspect.java
new file mode 100644
index 0000000..908e022
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/aspect/LimitAspect.java
@@ -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 redisTemplate;
+ private static final Logger logger = LoggerFactory.getLogger(LimitAspect.class);
+
+ public LimitAspect(RedisTemplate 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 keys = ImmutableList.of(StringUtils.join(limit.prefix(), "_", key, "_", request.getRequestURI().replaceAll("/","_")));
+
+ String luaScript = buildLuaScript();
+ RedisScript 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;";
+ }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/aspect/LimitType.java b/wjcy-common/src/main/java/me/zhengjie/aspect/LimitType.java
new file mode 100644
index 0000000..bf3f09e
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/aspect/LimitType.java
@@ -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
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/base/BaseDTO.java b/wjcy-common/src/main/java/me/zhengjie/base/BaseDTO.java
new file mode 100644
index 0000000..e9e7cc2
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/base/BaseDTO.java
@@ -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();
+ }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/base/BaseEntity.java b/wjcy-common/src/main/java/me/zhengjie/base/BaseEntity.java
new file mode 100644
index 0000000..618e100
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/base/BaseEntity.java
@@ -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();
+ }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/base/BaseMapper.java b/wjcy-common/src/main/java/me/zhengjie/base/BaseMapper.java
new file mode 100644
index 0000000..e8bb825
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/base/BaseMapper.java
@@ -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 {
+
+ /**
+ * DTO转Entity
+ * @param dto /
+ * @return /
+ */
+ E toEntity(D dto);
+
+ /**
+ * Entity转DTO
+ * @param entity /
+ * @return /
+ */
+ D toDto(E entity);
+
+ /**
+ * DTO集合转Entity集合
+ * @param dtoList /
+ * @return /
+ */
+ List toEntity(List dtoList);
+
+ /**
+ * Entity集合转DTO集合
+ * @param entityList /
+ * @return /
+ */
+ List toDto(List entityList);
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/config/AuditorConfig.java b/wjcy-common/src/main/java/me/zhengjie/config/AuditorConfig.java
new file mode 100644
index 0000000..006ef6b
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/config/AuditorConfig.java
@@ -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 {
+
+ /**
+ * 返回操作员标志信息
+ *
+ * @return /
+ */
+ @Override
+ public Optional getCurrentAuditor() {
+ try {
+ // 这里应根据实际业务情况获取具体信息
+ return Optional.of(SecurityUtils.getCurrentUsername());
+ }catch (Exception ignored){}
+ // 用户定时任务,或者无Token调用的情况
+ return Optional.of("System");
+ }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/config/BeanFactory.java b/wjcy-common/src/main/java/me/zhengjie/config/BeanFactory.java
new file mode 100644
index 0000000..a293074
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/config/BeanFactory.java
@@ -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;
+/**
+ *
+ * bean 工厂, 通过spring容器获取容器中定义的bean
+ *
+ *
+ * @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 getBean(String name, Class requiredType)
+ {
+ return context.getBean(name, requiredType);
+ }
+
+ public static T getBean(Class requiredType)
+ {
+ return context.getBean(requiredType);
+ }
+
+ public static Object getBean(String name, Object... args)
+ {
+ return context.getBean(name, args);
+ }
+
+ public static Map getBeansOfType(Class type)
+ {
+ return context.getBeansOfType(type);
+ }
+
+ public static List getBeans(Class type)
+ {
+ Collection beans = context.getBeansOfType(type).values();
+
+ @SuppressWarnings("unchecked")
+ List result = (List) 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 plugins = getBeansOfType(LoginPlugin.class);
+//
+// for (Map.Entry element: plugins.entrySet())
+// {
+// System.out.println(element.getKey() + ": " + element.getValue());
+// }
+ }
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/config/CorsInterceptor.java b/wjcy-common/src/main/java/me/zhengjie/config/CorsInterceptor.java
new file mode 100644
index 0000000..dd44563
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/config/CorsInterceptor.java
@@ -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;
+/**
+ *
+ *
+ *
+ *
+ * @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;
+ }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/config/CustomIdGenerator.java b/wjcy-common/src/main/java/me/zhengjie/config/CustomIdGenerator.java
new file mode 100644
index 0000000..206c77c
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/config/CustomIdGenerator.java
@@ -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;
+
+/**
+ *
+ * 自定义ID生成器
+ *
+ *
+ * @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;
+ }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/config/DhApiProperties.java b/wjcy-common/src/main/java/me/zhengjie/config/DhApiProperties.java
new file mode 100644
index 0000000..0c086a3
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/config/DhApiProperties.java
@@ -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;
+ }
+}
\ No newline at end of file
diff --git a/wjcy-common/src/main/java/me/zhengjie/config/ElPermissionConfig.java b/wjcy-common/src/main/java/me/zhengjie/config/ElPermissionConfig.java
new file mode 100644
index 0000000..9ae1fd5
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/config/ElPermissionConfig.java
@@ -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 elPermissions = SecurityUtils.getCurrentUser().getAuthorities().stream().map(GrantedAuthority::getAuthority).collect(Collectors.toList());
+ // 判断当前用户的所有权限是否包含接口上定义的权限
+ return elPermissions.contains("admin") || Arrays.stream(permissions).anyMatch(elPermissions::contains);
+ }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/config/FileProperties.java b/wjcy-common/src/main/java/me/zhengjie/config/FileProperties.java
new file mode 100644
index 0000000..bf0ebf6
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/config/FileProperties.java
@@ -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;
+ }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/config/MvcConfig.java b/wjcy-common/src/main/java/me/zhengjie/config/MvcConfig.java
new file mode 100644
index 0000000..8a2da20
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/config/MvcConfig.java
@@ -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;
+
+/**
+ *
+ * 开放url访问上传到本地的图片
+ *
+ *
+ * @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/");
+ }
+
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/config/MyMetaObjectHandler.java b/wjcy-common/src/main/java/me/zhengjie/config/MyMetaObjectHandler.java
new file mode 100644
index 0000000..1c9a7a6
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/config/MyMetaObjectHandler.java
@@ -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;
+
+/**
+ *
+ * MyBatis Plus自动填充插入&更新时间
+ *
+ *
+ * @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;
+ }
+ }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/config/MybatisPlusConfig.java b/wjcy-common/src/main/java/me/zhengjie/config/MybatisPlusConfig.java
new file mode 100644
index 0000000..56e1883
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/config/MybatisPlusConfig.java
@@ -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();
+ }
+}
\ No newline at end of file
diff --git a/wjcy-common/src/main/java/me/zhengjie/config/PlatsProperties.java b/wjcy-common/src/main/java/me/zhengjie/config/PlatsProperties.java
new file mode 100644
index 0000000..64e5da2
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/config/PlatsProperties.java
@@ -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;
+ }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/config/PropertiesConfig.java b/wjcy-common/src/main/java/me/zhengjie/config/PropertiesConfig.java
new file mode 100644
index 0000000..c0f9b9f
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/config/PropertiesConfig.java
@@ -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;
+/**
+ *
+ *
+ *
+ *
+ * @Author xx
+ * @Date 2021/7/26
+ **/
+@Data
+@Component
+@Configuration
+@ConfigurationProperties(prefix = "config")
+public class PropertiesConfig {
+
+ private String uploadPrefix;
+ private Map uploadImgPath;
+ private List excludeUrlList;
+ private List sustainImgFormat;
+ /** 放掉的api 校验token */
+ private String apiToken;
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/config/RedisConfig.java b/wjcy-common/src/main/java/me/zhengjie/config/RedisConfig.java
new file mode 100644
index 0000000..5366b99
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/config/RedisConfig.java
@@ -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 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 redisTemplate(RedisConnectionFactory redisConnectionFactory) {
+ RedisTemplate template = new RedisTemplate<>();
+ //序列化
+ FastJsonRedisSerializer 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 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
+ */
+ class FastJsonRedisSerializer implements RedisSerializer {
+
+ private final Class clazz;
+
+ FastJsonRedisSerializer(Class 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 {
+
+ 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);
+ }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/config/RedissonConfig.java b/wjcy-common/src/main/java/me/zhengjie/config/RedissonConfig.java
new file mode 100644
index 0000000..192fc03
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/config/RedissonConfig.java
@@ -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;
+/**
+ *
+ *redisson 配置类
+ *
+ *
+ * @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);
+ }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/config/RsaProperties.java b/wjcy-common/src/main/java/me/zhengjie/config/RsaProperties.java
new file mode 100644
index 0000000..a3594cd
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/config/RsaProperties.java
@@ -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;
+ }
+}
\ No newline at end of file
diff --git a/wjcy-common/src/main/java/me/zhengjie/config/SwaggerConfig.java b/wjcy-common/src/main/java/me/zhengjie/config/SwaggerConfig.java
new file mode 100644
index 0000000..1c354b3
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/config/SwaggerConfig.java
@@ -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 getParmeter() {
+ ParameterBuilder tokenPar = new ParameterBuilder();
+ List 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 securitySchemes() {
+// //设置请求头信息
+// List securitySchemes = new ArrayList<>();
+// ApiKey apiKey = new ApiKey(tokenHeader, tokenHeader, "header");
+// securitySchemes.add(apiKey);
+// return securitySchemes;
+// }
+//
+// private List securityContexts() {
+// //设置需要登录认证的路径
+// List 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 defaultAuth() {
+// List 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 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 sort;
+// }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/config/SystemConfig.java b/wjcy-common/src/main/java/me/zhengjie/config/SystemConfig.java
new file mode 100644
index 0000000..264554a
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/config/SystemConfig.java
@@ -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;
+/**
+ *
+ * 系统配置类,从配置文件中注入配置信息
+ *
+ *
+ * @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);
+ }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/config/YdApiProperties.java b/wjcy-common/src/main/java/me/zhengjie/config/YdApiProperties.java
new file mode 100644
index 0000000..d0eb788
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/config/YdApiProperties.java
@@ -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;
+ }
+}
\ No newline at end of file
diff --git a/wjcy-common/src/main/java/me/zhengjie/config/constant/Constants.java b/wjcy-common/src/main/java/me/zhengjie/config/constant/Constants.java
new file mode 100644
index 0000000..df0364a
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/config/constant/Constants.java
@@ -0,0 +1,30 @@
+package me.zhengjie.config.constant;
+
+/**
+ *
+ * 常量实体类
+ *
+ *
+ * @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:";
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/constant/Constants.java b/wjcy-common/src/main/java/me/zhengjie/constant/Constants.java
new file mode 100644
index 0000000..7a05f0c
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/constant/Constants.java
@@ -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";
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/constant/PublicConstant.java b/wjcy-common/src/main/java/me/zhengjie/constant/PublicConstant.java
new file mode 100644
index 0000000..985b053
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/constant/PublicConstant.java
@@ -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);
+ }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/dao/CtApplyDao.java b/wjcy-common/src/main/java/me/zhengjie/dao/CtApplyDao.java
new file mode 100644
index 0000000..a4abe36
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/dao/CtApplyDao.java
@@ -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 {
+
+
+ @Select("select * from ct_apply ${ew.customSqlSegment}")
+ IPage searchPageList(IPage page, Wrapper ew);
+
+ /**
+ * 获取所有应用名称
+ * @return List
+ */
+ @Select("select id,name, platform_id from ct_apply")
+ List getAllApplyName();
+
+ @Select("select * from ct_apply where task_name = #{taskName} and method_name = #{method}")
+ CtApply getApplyByTaskAndMethod(String taskName, String method);
+}
+
+
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/dao/CtBrowseDao.java b/wjcy-common/src/main/java/me/zhengjie/dao/CtBrowseDao.java
new file mode 100644
index 0000000..4054b15
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/dao/CtBrowseDao.java
@@ -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 {
+
+ /**
+ * 分页查询
+ * @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 searchPageList(IPage 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);
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/dao/CtBuyerDao.java b/wjcy-common/src/main/java/me/zhengjie/dao/CtBuyerDao.java
new file mode 100644
index 0000000..358dcb1
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/dao/CtBuyerDao.java
@@ -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 {
+
+ // @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 searchPageList(IPage 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 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);
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/dao/CtCardDao.java b/wjcy-common/src/main/java/me/zhengjie/dao/CtCardDao.java
new file mode 100644
index 0000000..c43dc2d
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/dao/CtCardDao.java
@@ -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 {
+
+ @Select("select number from ct_card")
+ List getNumberList();
+
+ //@Select("select id,number from ct_card where number in ${number}")
+ @Select({
+ ""
+ })
+ List getCardInfoByNumber(List number);
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/dao/CtClickFarmingDao.java b/wjcy-common/src/main/java/me/zhengjie/dao/CtClickFarmingDao.java
new file mode 100644
index 0000000..1669d9e
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/dao/CtClickFarmingDao.java
@@ -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 {
+
+ // @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 searchPageList(IPage 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 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);
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/dao/CtClickOrderDao.java b/wjcy-common/src/main/java/me/zhengjie/dao/CtClickOrderDao.java
new file mode 100644
index 0000000..b90cfa3
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/dao/CtClickOrderDao.java
@@ -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 {
+
+ /**
+ * 分页查询
+ * @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 searchPageList(IPage 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);
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/dao/CtCompanyDao.java b/wjcy-common/src/main/java/me/zhengjie/dao/CtCompanyDao.java
new file mode 100644
index 0000000..a5ff0de
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/dao/CtCompanyDao.java
@@ -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 {
+
+ @Select({
+ ""
+ })
+ List getByName(@Param("names") List names);
+
+ @Select("select id,name from ct_company")
+ List getCompanyList();
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/dao/CtDhPayDao.java b/wjcy-common/src/main/java/me/zhengjie/dao/CtDhPayDao.java
new file mode 100644
index 0000000..3bc6536
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/dao/CtDhPayDao.java
@@ -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 {
+
+ @Select("select * from ct_dh_pay ${ew.customSqlSegment}")
+ IPage searchPageList(IPage page, Wrapper ew);
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/dao/CtExcelDao.java b/wjcy-common/src/main/java/me/zhengjie/dao/CtExcelDao.java
new file mode 100644
index 0000000..1291b82
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/dao/CtExcelDao.java
@@ -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 {
+
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/dao/CtExcelImportInfoDao.java b/wjcy-common/src/main/java/me/zhengjie/dao/CtExcelImportInfoDao.java
new file mode 100644
index 0000000..94f2f76
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/dao/CtExcelImportInfoDao.java
@@ -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 {
+
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/dao/CtOrderDao.java b/wjcy-common/src/main/java/me/zhengjie/dao/CtOrderDao.java
new file mode 100644
index 0000000..c20f9da
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/dao/CtOrderDao.java
@@ -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 {
+
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/dao/CtPlatformDao.java b/wjcy-common/src/main/java/me/zhengjie/dao/CtPlatformDao.java
new file mode 100644
index 0000000..486b02c
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/dao/CtPlatformDao.java
@@ -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 {
+
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/dao/CtRebotDao.java b/wjcy-common/src/main/java/me/zhengjie/dao/CtRebotDao.java
new file mode 100644
index 0000000..589314c
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/dao/CtRebotDao.java
@@ -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 {
+
+ @Select("select * from ct_rebot where account_name = #{accountName} for update")
+ CtRebot getByAccountNameLock(String accountName);
+
+
+ @Select("select * from ct_rebot ${ew.customSqlSegment}")
+ IPage searchRebotList(IPage page, Wrapper ew);
+
+ @Select("select account_name from ct_rebot")
+ List getAccountNameList();
+
+ @Select("select robot_client_uuid from ct_rebot")
+ List getClientUuidList();
+
+ @Update("update ct_rebot set status = #{newStatus} where id = #{id} and status = #{oldStatus}")
+ Boolean updateNewStatusByOldStatus(Long id, Integer newStatus, Integer oldStatus);
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/dao/CtResponseOrderAddressDao.java b/wjcy-common/src/main/java/me/zhengjie/dao/CtResponseOrderAddressDao.java
new file mode 100644
index 0000000..e2195fb
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/dao/CtResponseOrderAddressDao.java
@@ -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 {
+
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/dao/CtResponseOrderDao.java b/wjcy-common/src/main/java/me/zhengjie/dao/CtResponseOrderDao.java
new file mode 100644
index 0000000..5824efb
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/dao/CtResponseOrderDao.java
@@ -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 {
+
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/dao/CtResponseOrderProductDao.java b/wjcy-common/src/main/java/me/zhengjie/dao/CtResponseOrderProductDao.java
new file mode 100644
index 0000000..0ff58c8
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/dao/CtResponseOrderProductDao.java
@@ -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 {
+
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/dao/CtVpnDao.java b/wjcy-common/src/main/java/me/zhengjie/dao/CtVpnDao.java
new file mode 100644
index 0000000..7d0aa3e
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/dao/CtVpnDao.java
@@ -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 {
+
+ @Select("select ip_address from ct_vpn")
+ List getIpList();
+
+ //@Select("select id,ip_address from ct_vpn where ip_address in ${ipAddress}")
+ @Select({
+ ""
+ })
+ List getVpnInfoByIp(List ipAddress);
+
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/dao/DhAddCarDao.java b/wjcy-common/src/main/java/me/zhengjie/dao/DhAddCarDao.java
new file mode 100644
index 0000000..89e96ba
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/dao/DhAddCarDao.java
@@ -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 {
+
+ @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 searchPageList(IPage 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);
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/dao/DhAddCarOrderDao.java b/wjcy-common/src/main/java/me/zhengjie/dao/DhAddCarOrderDao.java
new file mode 100644
index 0000000..c103c95
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/dao/DhAddCarOrderDao.java
@@ -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 {
+
+ @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 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);
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/dao/DhCarGoodsDao.java b/wjcy-common/src/main/java/me/zhengjie/dao/DhCarGoodsDao.java
new file mode 100644
index 0000000..8aa8743
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/dao/DhCarGoodsDao.java
@@ -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 {
+
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/dao/LoginIpDao.java b/wjcy-common/src/main/java/me/zhengjie/dao/LoginIpDao.java
new file mode 100644
index 0000000..0acee04
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/dao/LoginIpDao.java
@@ -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 {
+
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/dao/SettingSiteDao.java b/wjcy-common/src/main/java/me/zhengjie/dao/SettingSiteDao.java
new file mode 100644
index 0000000..b4f548f
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/dao/SettingSiteDao.java
@@ -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 {
+ String getValueByKey(String key);
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/dao/SysQuartzJobDao.java b/wjcy-common/src/main/java/me/zhengjie/dao/SysQuartzJobDao.java
new file mode 100644
index 0000000..ca96b7c
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/dao/SysQuartzJobDao.java
@@ -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 {
+
+ @Select("select * from sys_quartz_job ${ew.customSqlSegment}")
+ IPage searchPageList(IPage page, Wrapper ew);
+
+ @Select("select * from sys_quartz_job where task_num = #{taskNum}")
+ SysQuartzJob getByTaskNum(String taskNum);
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/dao/SysQuartzLogDao.java b/wjcy-common/src/main/java/me/zhengjie/dao/SysQuartzLogDao.java
new file mode 100644
index 0000000..64b4ba5
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/dao/SysQuartzLogDao.java
@@ -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 {
+
+ @Select("select * from sys_quartz_log ${ew.customSqlSegment} ")
+ IPage searchPageList(IPage page, Wrapper ew);
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/dao/mapper/CtDhPayService.xml b/wjcy-common/src/main/java/me/zhengjie/dao/mapper/CtDhPayService.xml
new file mode 100644
index 0000000..25a0430
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/dao/mapper/CtDhPayService.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+ select setting_value from ct_setting_site
+ where setting_key = #{key}
+
+
+
\ No newline at end of file
diff --git a/wjcy-common/src/main/java/me/zhengjie/dto/Dto.java b/wjcy-common/src/main/java/me/zhengjie/dto/Dto.java
new file mode 100644
index 0000000..159b385
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/dto/Dto.java
@@ -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;
+
+/**
+ *
+ * 请求结果通用数据结构
+ *
+ *
+ * @author: zeng
+ * @since: 2020-07-01
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Slf4j
+public class Dto 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;
+ }
+ }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/dto/PageDTO.java b/wjcy-common/src/main/java/me/zhengjie/dto/PageDTO.java
new file mode 100644
index 0000000..ed0fa84
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/dto/PageDTO.java
@@ -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 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 getiPage(){
+ return new Page(page, pageSize);
+ }
+
+
+ public boolean isAsc() {
+ return "asc".equalsIgnoreCase(order);
+ }
+
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/dto/StatementAggregateDTO.java b/wjcy-common/src/main/java/me/zhengjie/dto/StatementAggregateDTO.java
new file mode 100644
index 0000000..ba9bf10
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/dto/StatementAggregateDTO.java
@@ -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 {
+
+ /** 列表 */
+ private List list;
+
+ /** 本页小计 */
+ private T pageTotal;
+
+ /** 总计 */
+ private T aggregate;
+
+ /** 总记录数 */
+ private Long total;
+
+ public StatementAggregateDTO(PageUtils pageUtils, T pageTotal, T aggregate) {
+ this.list = pageUtils.getList();
+ this.pageTotal = pageTotal;
+ this.aggregate = aggregate;
+ this.total = pageUtils.getTotal();
+ }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtApply.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtApply.java
new file mode 100644
index 0000000..f09b9de
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtApply.java
@@ -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 {
+
+ @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;
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtBrowse.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtBrowse.java
new file mode 100644
index 0000000..2a64547
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtBrowse.java
@@ -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 {
+
+ @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;
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtBrowseYdParams.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtBrowseYdParams.java
new file mode 100644
index 0000000..89f99a6
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtBrowseYdParams.java
@@ -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;
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtBuyer.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtBuyer.java
new file mode 100644
index 0000000..49ab741
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtBuyer.java
@@ -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 {
+
+ @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
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtBuyerClickSuccess.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtBuyerClickSuccess.java
new file mode 100644
index 0000000..13f46d8
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtBuyerClickSuccess.java
@@ -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;
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtBuyerContactInfo.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtBuyerContactInfo.java
new file mode 100644
index 0000000..a680207
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtBuyerContactInfo.java
@@ -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;
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtBuyerExport.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtBuyerExport.java
new file mode 100644
index 0000000..92efaa9
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtBuyerExport.java
@@ -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;
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtBuyerExportTemple.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtBuyerExportTemple.java
new file mode 100644
index 0000000..c92d084
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtBuyerExportTemple.java
@@ -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;
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtBuyerImport.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtBuyerImport.java
new file mode 100644
index 0000000..742bbdb
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtBuyerImport.java
@@ -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;
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtCard.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtCard.java
new file mode 100644
index 0000000..777745f
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtCard.java
@@ -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 {
+
+ @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;
+}
\ No newline at end of file
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtCardExport.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtCardExport.java
new file mode 100644
index 0000000..7ed9aae
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtCardExport.java
@@ -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 {
+ /** 卡号 */
+ @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;
+}
\ No newline at end of file
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtCardExportTemple.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtCardExportTemple.java
new file mode 100644
index 0000000..45d23c8
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtCardExportTemple.java
@@ -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 {
+ /** 卡号 */
+ @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;
+}
\ No newline at end of file
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtCardImport.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtCardImport.java
new file mode 100644
index 0000000..16f2235
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtCardImport.java
@@ -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 {
+
+ /** 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;
+}
\ No newline at end of file
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtCardInfo.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtCardInfo.java
new file mode 100644
index 0000000..70d4443
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtCardInfo.java
@@ -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;
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtClickFarmSupplyMentYdParams.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtClickFarmSupplyMentYdParams.java
new file mode 100644
index 0000000..e700dee
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtClickFarmSupplyMentYdParams.java
@@ -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;
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtClickFarmYdParams.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtClickFarmYdParams.java
new file mode 100644
index 0000000..489e5b1
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtClickFarmYdParams.java
@@ -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;
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtClickFarming.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtClickFarming.java
new file mode 100644
index 0000000..e46c75a
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtClickFarming.java
@@ -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 {
+
+ @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;
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtClickFarmingExport.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtClickFarmingExport.java
new file mode 100644
index 0000000..d26f1cf
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtClickFarmingExport.java
@@ -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;
+}
\ No newline at end of file
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtClickFarmingExportTemp.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtClickFarmingExportTemp.java
new file mode 100644
index 0000000..2f3d623
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtClickFarmingExportTemp.java
@@ -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;
+}
\ No newline at end of file
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtClickFarmingImport.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtClickFarmingImport.java
new file mode 100644
index 0000000..2144533
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtClickFarmingImport.java
@@ -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;
+}
\ No newline at end of file
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtClickFarmingOrderInfo.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtClickFarmingOrderInfo.java
new file mode 100644
index 0000000..280ca9c
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtClickFarmingOrderInfo.java
@@ -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;
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtClickOrder.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtClickOrder.java
new file mode 100644
index 0000000..9e1ed52
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtClickOrder.java
@@ -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 {
+ @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;
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtClickOrderExport.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtClickOrderExport.java
new file mode 100644
index 0000000..3e2935e
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtClickOrderExport.java
@@ -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;
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtClickOrderExportTemple.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtClickOrderExportTemple.java
new file mode 100644
index 0000000..49e25f7
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtClickOrderExportTemple.java
@@ -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;
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtClickOrderImport.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtClickOrderImport.java
new file mode 100644
index 0000000..a4695dc
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtClickOrderImport.java
@@ -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;
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtClickOrderYdParams.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtClickOrderYdParams.java
new file mode 100644
index 0000000..9a1b5e6
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtClickOrderYdParams.java
@@ -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;
+
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtCompany.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtCompany.java
new file mode 100644
index 0000000..eff48bf
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtCompany.java
@@ -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 {
+
+ @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;
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtCompanyInfo.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtCompanyInfo.java
new file mode 100644
index 0000000..de0f007
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtCompanyInfo.java
@@ -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;
+
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtDhPay.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtDhPay.java
new file mode 100644
index 0000000..222896e
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtDhPay.java
@@ -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 {
+
+ @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;
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtDhPayExport.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtDhPayExport.java
new file mode 100644
index 0000000..3586977
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtDhPayExport.java
@@ -0,0 +1,29 @@
+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;
+
+/**
+ * 敦煌支付信息(CtDhPay)表实体类 Export
+ *
+ * @author rch
+ * @since 2022-07-28
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CtDhPayExport extends Model {
+ /** 买家名称 */
+ @ExcelExport(value = "买家账号")
+ private String buyerName;
+ /** 支付订单ID(敦煌的) */
+ @ExcelExport(value = "支付订单")
+ private String orderId;
+
+ /** 异常信息 */
+ @ExcelExport(value = "异常信息")
+ private String error;
+}
\ No newline at end of file
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtDhPayExportTemple.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtDhPayExportTemple.java
new file mode 100644
index 0000000..4f5614e
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtDhPayExportTemple.java
@@ -0,0 +1,25 @@
+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;
+
+/**
+ * 敦煌支付信息(CtDhPay)表实体类 导出模版对象信息
+ *
+ * @author rch
+ * @since 2022-07-28
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CtDhPayExportTemple extends Model {
+ /** 买家名称 */
+ @ExcelExport(value = "买家账号")
+ private String buyerName;
+ /** 支付订单ID(敦煌的) */
+ @ExcelExport(value = "支付订单")
+ private String orderId;
+}
\ No newline at end of file
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtDhPayImport.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtDhPayImport.java
new file mode 100644
index 0000000..863019c
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtDhPayImport.java
@@ -0,0 +1,40 @@
+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;
+
+/**
+ * 敦煌支付信息(CtDhPay)表实体类 Import
+ *
+ * @author rch
+ * @since 2022-07-28
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CtDhPayImport{
+
+ /** Excel 行号 */
+ private int rowNum;
+
+ /** Excel 错误提示 */
+ private String rowTips;
+
+ /** 买家名称 */
+ @ExcelImport(value = "买家账号", required = true, unique = true)
+ private String buyerName;
+
+ /** 支付订单ID(敦煌的) */
+ @ExcelImport(value = "支付订单", required = true, unique = true)
+ private String orderId;
+}
\ No newline at end of file
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtExcel.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtExcel.java
new file mode 100644
index 0000000..4c9bef7
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtExcel.java
@@ -0,0 +1,41 @@
+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 导入信息(CtExcel)表实体类
+ *
+ * @author rch
+ * @since 2022-06-23
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CtExcel extends Model {
+
+ @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 remarks;
+ /** excel路径 */
+
+ private String path;
+ private String errorPath;
+ /** 状态 1.待导入 2.导入成功 3.导入失败 */
+ private Integer status;
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtExcelExportInfo.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtExcelExportInfo.java
new file mode 100644
index 0000000..f9954c3
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtExcelExportInfo.java
@@ -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;
+
+/**
+ * Excel 导出信息(CtExcelImportInfo)表实体类
+ *
+ * @author rch
+ * @since 2022-07-18
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CtExcelExportInfo extends Model {
+
+ /** 公司主键 */
+ @ExcelExport("公司主键")
+ private Long companyId;
+
+ /** 鉴权枚举 */
+ @ExcelExport("鉴权枚举")
+ private Long tokenEnum;
+
+ /** 订单来源 */
+ @ExcelExport("订单来源")
+ private String fromDetailInfo;
+
+ /** 产品信息-JSON */
+ @ExcelExport("产品信息")
+ private String cartList;
+
+ /** 异常信息 */
+ @ExcelExport(value = "异常信息")
+ private String error;
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtExcelExportTemple.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtExcelExportTemple.java
new file mode 100644
index 0000000..cd9499b
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtExcelExportTemple.java
@@ -0,0 +1,33 @@
+package me.zhengjie.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import me.zhengjie.utils.excel.ExcelExport;
+
+/**
+ * EXCEL(CtExcel)表实体类 导出excel模板
+ * @author zhw
+ * @since 2022-07-18
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CtExcelExportTemple {
+
+ /** 公司主键 */
+ @ExcelExport("公司主键")
+ private Long companyId;
+
+ /** 鉴权枚举 */
+ @ExcelExport("鉴权枚举")
+ private Long tokenEnum;
+
+ /** 订单来源 */
+ @ExcelExport("订单来源")
+ private String fromDetailInfo;
+
+ /** 产品信息-JSON */
+ @ExcelExport("产品信息")
+ private String cartList;
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtExcelImportInfo.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtExcelImportInfo.java
new file mode 100644
index 0000000..153b8ca
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtExcelImportInfo.java
@@ -0,0 +1,59 @@
+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;
+
+/**
+ * Excel导入信息(CtExcelImportInfo)表实体类
+ *
+ * @author rch
+ * @since 2022-06-23
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CtExcelImportInfo extends Model {
+
+ @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("公司主键")
+ private Long companyId;
+
+ /** 鉴权枚举 */
+ @ExcelImport("鉴权枚举")
+ private Long tokenEnum;
+
+ /** 订单来源 */
+ @ExcelImport("订单来源")
+ private String fromDetailInfo;
+
+ /** 产品信息-JSON */
+ @ExcelImport("产品信息")
+ private String cartList;
+
+ /** 订单收货地址-JSON */
+ private String contactInfo;
+
+ /** 我们平台订单编号 */
+ private String orderNo;
+
+ /** 状态 1.待处理 2.处理成功 3.处理失败 */
+ private Integer status;
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtOrder.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtOrder.java
new file mode 100644
index 0000000..8117c8b
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtOrder.java
@@ -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;
+
+/**
+ * (CtOrder)表实体类
+ *
+ * @author rch
+ * @since 2022-06-30
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CtOrder extends Model {
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+ @TableField(fill = FieldFill.INSERT)
+ private String createdAt;
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private String updatedAt;
+
+ /** 公司Id */
+ private Long companyId;
+ /** ExcelId 信息 */
+ private Long excelInfoId;
+ /** 买家ID */
+ private Long buyerId;
+ /** 买家buy_access_token */
+ private String buyAccessToken;
+ /** 我们平台订单编号 */
+ private String ctOrderNo;
+ /** 订单号,下单成功响应的订单号(冗余字段 下单成功响应订单信息里有) */
+ private Long orderNo;
+ /** 下单成功响应的产品id( a,b,c 格式) (响应字段很多,先少些几个) */
+ private Long responseProductId;
+ /** 下单成功响应的订单地址id(响应字段很多,先少些几个) */
+ private Long responseOrderAddressId;
+ /** 下单成功响应的订单信息 (响应字段很多,先少些几个) */
+ private Long responseOrderId;
+ /** 响应码信息 */
+ private String orderResponseStatus;
+ /** 响应码信息 */
+ private String payResponseStatus;
+ /** 状态 1.待支付(下单成功) 2.支付成功 3.支付失败*/
+ private Integer status;
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtParamContactInfo.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtParamContactInfo.java
new file mode 100644
index 0000000..2feb27c
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtParamContactInfo.java
@@ -0,0 +1,39 @@
+package me.zhengjie.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 下单API请求参数订单收货地址信息
+ *
+ * @author rch
+ * @since 2022-06-23
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CtParamContactInfo {
+ /** 必须 所在国家; 示例值:US 所在国家 */
+ private String country;
+ /** 必须 收货人lastname ;示例值:zhao 收货人firstname */
+ private String firstname;
+ /** 必须 收货人联系电话,固定电话或者移动电话 ;示例值:1311111111 收货人联系电话,固定电话或者移动电话 */
+ private String tel;
+ /** 否 收货人地址1 ;示例值:chengfulu road, hawio 收货人地址2 */
+ private String addressline2;
+ /** 必须 所在州 ;示例值:California 所在州 */
+ private String state;
+ /** 必须 所在城市; 示例值:Chicago 所在城市 */
+ private String city;
+ /** 必须 收货人地址1 ;示例值:chengfulu road, hawio 收货人地址1 */
+ private String addressline1;
+ /** 必须 地址邮编 ;示例值:12345 地址邮编 */
+ private String postalcode;
+ /** 必须 收货人lastname ;示例值:yiyi 收货人lastname */
+ private String lastname;
+ /** 否 税号:BR,AR,EC,AO,LB,TR,KR必填 税号 */
+ private String vatNumber;
+ /** 否 Email地址 ;示例值:zhaoyiyi@163.com Email地址 */
+ private String email;
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtParamProduct.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtParamProduct.java
new file mode 100644
index 0000000..0a8a937
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtParamProduct.java
@@ -0,0 +1,29 @@
+package me.zhengjie.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 下单Api请求产品信息参数实体类
+ *
+ * @author rch
+ * @since 2022-06-23
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CtParamProduct {
+ /** 必须 产品购买数量 示例值:2 产品数量 */
+ private Integer quantity;
+ /** 否 可以从获取商品运费详情API获取expressType字段(分销API>物流API>dh.dropshipping.ship.get$1.0);示例值:ePacket 物流方式 */
+ private String shipType;
+ /** 否 可根据国家字典查询国家详情(dh.base.countrys.get$1.0); 示例值:CN;默认值:CN 备货国家ID */
+ private String stockin;
+ /** 否 站点 站点 */
+ private String siteId;
+ /** 必须 产品itemcode ;示例值:634706114 产品编码 */
+ private Long itemcode;
+ /** 必须 产品skuMd5,可以从商品详情API获取(分析API>商品API>dh.dropshipping.item.get$1.0) ;示例值:562e86410bd37a7bb4170cfe6e03203f 产品skuMd5 */
+ private String skuMd5;
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtPlatform.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtPlatform.java
new file mode 100644
index 0000000..81ba872
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtPlatform.java
@@ -0,0 +1,40 @@
+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;
+
+/**
+ * 平台信息(CtPlatform)表实体类
+ *
+ * @author rch
+ * @since 2022-06-23
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CtPlatform extends Model {
+
+ @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;
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtRebot.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtRebot.java
new file mode 100644
index 0000000..9c6371d
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtRebot.java
@@ -0,0 +1,41 @@
+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;
+
+/**
+ * 影刀设备-机器人信息(CtRebot)表实体类
+ *
+ * @author rch
+ * @since 2022-07-23
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CtRebot extends Model {
+
+ @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 accountName;
+ /** 机器人Uuid信息 */
+ private String robotClientUuid;
+ /** 状态 0.未占用 1.占用 */
+ private Integer status;
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtRebotExport.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtRebotExport.java
new file mode 100644
index 0000000..c486f3b
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtRebotExport.java
@@ -0,0 +1,31 @@
+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.ExcelExport;
+import me.zhengjie.utils.excel.ExcelImport;
+
+/**
+ * 影刀机器人信息(ct_rebot) 导出
+ *
+ * @Author zhw
+ * @Date 2022-07-25
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CtRebotExport {
+ /** 机器人账号 */
+ @ExcelExport(value = "机器人账号")
+ private String accountName;
+ /** 机器人Uuid信息 */
+ @ExcelExport(value = "Uuid信息")
+ private String robotClientUuid;
+ @ExcelExport(value = "异常信息")
+ private String error;
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtRebotExportTemple.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtRebotExportTemple.java
new file mode 100644
index 0000000..d7c80f7
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtRebotExportTemple.java
@@ -0,0 +1,24 @@
+package me.zhengjie.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import me.zhengjie.utils.excel.ExcelExport;
+
+/**
+ * 机器人模板EXCEL导出(ct_rebot)
+ *
+ * @Author zhw
+ * @Date 2022-07-23
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CtRebotExportTemple {
+ /** 机器人账号 */
+ @ExcelExport(value = "机器人账号")
+ private String accountName;
+ /** 机器人Uuid信息 */
+ @ExcelExport(value = "Uuid信息")
+ private String robotClientUuid;
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtRebotImport.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtRebotImport.java
new file mode 100644
index 0000000..54fe190
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtRebotImport.java
@@ -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 lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import me.zhengjie.utils.excel.ExcelImport;
+
+/**
+ * 影刀机器人信息(ct_rebot) import
+ *
+ * @Author zhw
+ * @Date 2022-07-25
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CtRebotImport {
+
+ private int romNum;
+ 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 accountName;
+ /** 机器人Uuid信息 */
+ @ExcelImport(value = "Uuid信息", required = true)
+ private String robotClientUuid;
+
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtResponseOrder.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtResponseOrder.java
new file mode 100644
index 0000000..9d2e35f
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtResponseOrder.java
@@ -0,0 +1,67 @@
+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;
+
+/**
+ * 下单成功响应订单商品信息(CtResponseOrder)表实体类
+ *
+ * @author rch
+ * @since 2022-06-30
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CtResponseOrder extends Model {
+
+ @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 Double shipCost;
+ /** 产品总价 */
+ private Double totalPriceOfProduct;
+ /** 备货期 */
+ private Double leadingTime;
+ /** 订单总价 */
+ private Double orderTotal;
+ /** 卖家Id */
+ private String supplierId;
+ /** 卖家店铺coupon */
+ private Double couponOfSeller;
+ /** 运输方式 */
+ private String shipType;
+ /** 订单优惠 */
+ private Double orderSave;
+ /** 税费手续费 */
+ private Double taxCharge;
+ /** 买家Id */
+ private String buyerId;
+ /** 税费 */
+ private Double tax;
+ /** 促销折扣 */
+ private Double promoDiscount;
+ /** 订单号--这个要特殊处理这个是对应响应的id字段 */
+ private Long orderId;
+ /** DHcoupon */
+ private Double couponDiscount;
+ /** 下单站点 */
+ private String siteId;
+ /** 创建时间 */
+ private Date createTime;
+}
\ No newline at end of file
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtResponseOrderAddress.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtResponseOrderAddress.java
new file mode 100644
index 0000000..cfecf60
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtResponseOrderAddress.java
@@ -0,0 +1,53 @@
+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;
+
+/**
+ * 下注成功订单响应收货地址信息(CtResponseOrderAddress)表实体类
+ *
+ * @author rch
+ * @since 2022-06-30
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CtResponseOrderAddress extends Model {
+
+ @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;
+
+ /** 地址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;
+}
\ No newline at end of file
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtResponseOrderProduct.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtResponseOrderProduct.java
new file mode 100644
index 0000000..9682b76
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtResponseOrderProduct.java
@@ -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 java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 下单订单响应产品信息(CtResponseOrderProduct)表实体类
+ *
+ * @author rch
+ * @since 2022-06-30
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CtResponseOrderProduct extends Model {
+
+ @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 flashDeals;
+ /** 卖家设置价格 */
+ private Double prodPriceOrg;
+ /** 产品skuId */
+ private String skuId;
+ /** 购买数量 */
+ private Integer cateDispId;
+ /** 商品总金额 */
+ private Double amount;
+ /** 发布类目id */
+ private String catePubId;
+ /** 促销折扣 */
+ private Double promDis;
+ /** 产品单位名称 */
+ private String measureName;
+ /** 短描 */
+ private String shortDescription;
+ /** 卖家承诺运达天数 */
+ private Integer promiseDays;
+ /** 备货国家 */
+ private String stockin;
+ /** 产品图片(小图) */
+ private String thumbnailImage;
+ /** 是否为样品 */
+ private String isSample;
+ /** 最终运费 */
+ private Double shipCost;
+ /** 卖家Id */
+ private String supplierId;
+ /** 跨店满减金额 */
+ private BigDecimal crossReduceAmount;
+ /** 产品itemcode */
+ private Integer itemcode;
+ /** buyer选择的运输方式 */
+ private String shipType;
+ /** 销售价格 */
+ private Double originPrice;
+ /** 产品长描地址 */
+ private String htmlUrl;
+ /** 产品图片(大图) */
+ private String imageUrl;
+ /** 最终价格 */
+ private Double price;
+ /** 产品URL */
+ private String productUrl;
+ /** 备注 */
+ private String remark;
+ /** lots */
+ private Integer lots;
+ /** 产品名称 */
+ private String productName;
+ /** 产品Id */
+ private String productId;
+ /** 产品skumd5 */
+ private String skuMd5;
+ /** 创建时间 */
+ private Date createTime;
+ /** 产品单位Id */
+ private String measureId;
+}
\ No newline at end of file
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtSettingSite.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtSettingSite.java
new file mode 100644
index 0000000..a2209ea
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtSettingSite.java
@@ -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;
+
+/**
+ * 站点配置(CtSettingSite)表实体类
+ *
+ * @author rch
+ * @since 2022-06-23
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CtSettingSite extends Model {
+
+ @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;
+
+ /** 设置KEY */
+ private String settingKey;
+ /** 设置value */
+ private String settingValue;
+ /** 中文描述 */
+ private String content;
+ /** 单位 */
+ private String unit;
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtVpn.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtVpn.java
new file mode 100644
index 0000000..7e613ab
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtVpn.java
@@ -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;
+
+/**
+ * VPN信息表(CtVpn)表实体类
+ *
+ * @author rch
+ * @since 2022-07-07
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CtVpn extends Model {
+
+ @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 contntryShort;
+ /** IP地址 */
+ private String ipAddress;
+ /** 父ip地址 */
+ private String parentIpAddress;
+ /** 端口 */
+ private Integer port;
+ /** 名称 */
+ private String name;
+ /** 密码 */
+ private String pwd;
+ /** VPS类型 1.传统 */
+ private Integer vpsType;
+ /** 经销商 1.V2 */
+ private Integer dealer;
+ /** mac地址 */
+ private String mac;
+ /** 链接 */
+ private String link;
+ /** 经销商 1.可用 2.禁用 */
+ private Integer status;
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtVpnExport.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtVpnExport.java
new file mode 100644
index 0000000..cff274d
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtVpnExport.java
@@ -0,0 +1,45 @@
+package me.zhengjie.entity;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import me.zhengjie.utils.excel.ExcelExport;
+
+/**
+ * Vpn信息(CtCard)表实体类 export
+ *
+ * @author zhw
+ * @since 2022-07-13
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CtVpnExport {
+
+ /** 所属国家简称 */
+ @ExcelExport(value = "所属国家简称")
+ private String contntryShort;
+ /** IP地址 */
+ @ExcelExport(value = "IP地址")
+ private String ipAddress;
+ @ExcelExport(value = "端口")
+ private Integer port;
+ /** 名称 */
+ @ExcelExport(value = "名称")
+ private String name;
+ /** 密码 */
+ @ExcelExport(value = "密码")
+ private String pwd;
+ /** VPS类型 1.传统 */
+ @ExcelExport(value = "VPS类型", kv = "1-传统")
+ private Integer vpsType;
+ /** 经销商 1.V2 */
+ @ExcelExport(value = "经销商", kv = "1-V2")
+ private Integer dealer;
+ @ExcelExport(value = "链接")
+ private String link;
+ @ExcelExport(value = "异常信息")
+ private String error;
+
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtVpnExportTemple.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtVpnExportTemple.java
new file mode 100644
index 0000000..1e3bca1
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtVpnExportTemple.java
@@ -0,0 +1,43 @@
+package me.zhengjie.entity;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import me.zhengjie.utils.excel.ExcelExport;
+
+/**
+ * Vpn信息(CtVpn)表实体类 导出模版对象信息
+ *
+ * @author zhw
+ * @since 2022-07-13
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CtVpnExportTemple {
+
+ /** 所属国家简称 */
+ @ExcelExport(value = "所属国家简称", example = "中国")
+ private String contntryShort;
+ /** IP地址 */
+ @ExcelExport(value = "IP地址", example = "192.0.0.1")
+ private String ipAddress;
+ @ExcelExport(value = "端口", example = "8088")
+ private Integer port;
+ /** 名称 */
+ @ExcelExport(value = "名称", example = "示例")
+ private String name;
+ /** 密码 */
+ @ExcelExport(value = "密码", example = "123123")
+ private String pwd;
+ /** VPS类型 1.传统 */
+ @ExcelExport(value = "VPS类型", kv = "1-传统", example = "传统")
+ private Integer vpsType;
+ @ExcelExport(value = "链接", example = "vmess://ew0KICAidiI6ICIyIiwNCiAgInBzIjogIjEwNC4yMjEuMTk5LjgyIiwNCiAgImFkZCI6ICJ1cy1lczM0LmZvYmhlbHAuY29tIiwNCiAgInBvcnQiOiAiMzAwNDMiLA0KICAiaWQiOiAiYzA4NDk5ODQtZWNjNC01MzY3LTlmOTctYTI2ODljNTQ5N2QyIiwNCiAgImFpZCI6ICI2NCIsDQogICJzY3kiOiAiYXV0byIsDQogICJuZXQiOiAidGNwIiwNCiAgInR5cGUiOiAibm9uZSIsDQogICJob3N0IjogIiIsDQogICJwYXRoIjogIiIsDQogICJ0bHMiOiAiIiwNCiAgInNuaSI6ICIiDQp9")
+ private String link;
+ /** 经销商 1.V2 */
+ @ExcelExport(value = "经销商", kv = "1-V2", example = "V2")
+ private Integer dealer;
+
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtVpnImport.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtVpnImport.java
new file mode 100644
index 0000000..e1cb352
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtVpnImport.java
@@ -0,0 +1,66 @@
+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;
+
+/**
+ * Vpn信息(CtVpn)表实体类 Import
+ *
+ * @author zhw
+ * @since 2022-07-13
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CtVpnImport {
+ 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 contntryShort;
+ /** IP地址 */
+ @ExcelImport(value = "IP地址", required = true, unique = true)
+ private String ipAddress;
+ /** 父ip地址 */
+ private String parentIpAddress;
+ /** 端口 */
+ @ExcelImport(value = "端口", required = true)
+ private Integer port;
+ /** 名称 */
+ @ExcelImport(value = "名称", required = true)
+ private String name;
+ /** 密码 */
+ @ExcelImport(value = "密码", required = true)
+ private String pwd;
+ /** VPS类型 1.传统 */
+ @ExcelImport(value = "VPS类型", kv = "1-传统", required = true)
+ private Integer vpsType;
+ /** 经销商 1.V2 */
+ @ExcelImport(value = "经销商", kv = "1-V2", required = true)
+ private Integer dealer;
+ /** mac地址 */
+ private String mac;
+ /** 链接 */
+ @ExcelImport(value = "链接", required = true, maxLength = 2000)
+ private String link;
+ /** 状态 1.可用 2.禁用 */
+ private Integer status;
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/CtVpnInfo.java b/wjcy-common/src/main/java/me/zhengjie/entity/CtVpnInfo.java
new file mode 100644
index 0000000..2fd174b
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/CtVpnInfo.java
@@ -0,0 +1,23 @@
+package me.zhengjie.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+
+/**
+ * Vpn(CtVpn)表实体类
+ *
+ * @author zhw
+ * @since 2022-07-14
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CtVpnInfo {
+
+ /** id */
+ private Long id;
+ /** Ip地址 */
+ private String ipAddress;
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/DhAddCar.java b/wjcy-common/src/main/java/me/zhengjie/entity/DhAddCar.java
new file mode 100644
index 0000000..a0e2c3c
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/DhAddCar.java
@@ -0,0 +1,48 @@
+package me.zhengjie.entity;
+
+import java.util.Date;
+
+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.io.Serializable;
+
+/**
+ * 敦煌加入购物车(DhAddCar)表实体类
+ *
+ * @author rch
+ * @since 2022-11-17 09:11:54
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class DhAddCar extends Model {
+
+ @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;
+ /** 商品属性类型:1.关键词 2.链接 */
+ private Integer paramsType;
+ /** 加购物车商品ids */
+ private String carGoodIds;
+ /** 执行结果 */
+ private String response;
+ /** 状态 1.待执行 2.执行中 3.加购成功 4.加购失败 5.下单成功 6.支付成功 7.抓单成功 8.抓单失败 */
+ private Integer status;
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/DhAddCarOrder.java b/wjcy-common/src/main/java/me/zhengjie/entity/DhAddCarOrder.java
new file mode 100644
index 0000000..6c656d4
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/DhAddCarOrder.java
@@ -0,0 +1,55 @@
+package me.zhengjie.entity;
+
+import java.util.Date;
+
+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.io.Serializable;
+
+/**
+ * 敦煌-加购物车-订单(DhAddCarOrder)表实体类
+ *
+ * @author rch
+ * @since 2022-11-17 09:11:58
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class DhAddCarOrder extends Model {
+ @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;
+
+ /** 1.导入 2.刷单 */
+ private Integer type;
+ /** 关联敦煌加购的id */
+ private Long addCarId;
+// /** 关联敦煌加购的ids */
+// private Long addCarIds;
+ /** 总金额 */
+ private String amount;
+ /** 状态描述 */
+ private String paymentResults;
+ /** 店铺名称 */
+ private String shop;
+ /** 订单id */
+ private String orderId;
+ /** 时间 */
+ private String orderDate;
+ /** 状态 1.待执行 2.执行中 3.执行成功 4.执行失败 */
+ private Integer status;
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/DhCarGoods.java b/wjcy-common/src/main/java/me/zhengjie/entity/DhCarGoods.java
new file mode 100644
index 0000000..e19bc32
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/DhCarGoods.java
@@ -0,0 +1,62 @@
+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;
+
+/**
+ * 敦煌-加入购物车商品信息(DhCarGoods)表实体类
+ *
+ * @author makejava
+ * @since 2022-11-17 09:12:02
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class DhCarGoods extends Model {
+
+ @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;
+
+ /** 商品属性类型:1.关键词 2.链接 */
+ 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 sectionMin;
+ /** 最大价格区间 */
+ private String sectionMax;
+ /** 评论 */
+ private String comment;
+ /** 图片url */
+ private String paths;
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/ExcelImportInfo.java b/wjcy-common/src/main/java/me/zhengjie/entity/ExcelImportInfo.java
new file mode 100644
index 0000000..4090e67
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/ExcelImportInfo.java
@@ -0,0 +1,38 @@
+//package me.zhengjie.entity;
+//
+//import lombok.AllArgsConstructor;
+//import lombok.Data;
+//import lombok.NoArgsConstructor;
+//import me.zhengjie.utils.excel.ExcelImport;
+//
+///**
+// * Excel导入信息实体类
+// *
+// * @author rch
+// * @create 2022-06-23
+// */
+//@Data
+//@AllArgsConstructor
+//@NoArgsConstructor
+//public class ExcelImportInfo {
+// /** 公司主键 */
+// @ExcelImport("公司主键")
+// private Long companyId;
+//
+// /** 鉴权枚举 */
+// @ExcelImport("鉴权枚举")
+// private Integer tokenEnum;
+//
+// /** 订单来源 */
+// @ExcelImport("订单来源")
+// private String fromDetailInfo;
+//
+// /** 产品信息-JSON */
+// @ExcelImport("产品信息")
+// private String cartList;
+//
+// /** 订单收货地址-JSON */
+// @ExcelImport("订单收货地址")
+// private String contactInfo;
+//
+//}
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/LoginIp.java b/wjcy-common/src/main/java/me/zhengjie/entity/LoginIp.java
new file mode 100644
index 0000000..8a20668
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/LoginIp.java
@@ -0,0 +1,39 @@
+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.Data;
+
+/**
+ * (LoginIp)表实体类
+ *
+ * @author rch
+ * @since 2022-06-23
+ */
+@Data
+public class LoginIp extends Model {
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+ @TableField(fill = FieldFill.INSERT)
+ private String createdAt;
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private String updatedAt;
+
+ /** 开始IP */
+ private String ipStart;
+ /** 结束IP */
+ private String ipEnd;
+ /** 备注 */
+ private String remark;
+ /** 有效截至时间 */
+ private String vaildTime;
+ /** 操作账号 */
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private String gmName;
+
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/QueryWrapperAndPage.java b/wjcy-common/src/main/java/me/zhengjie/entity/QueryWrapperAndPage.java
new file mode 100644
index 0000000..48d8f52
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/QueryWrapperAndPage.java
@@ -0,0 +1,15 @@
+package me.zhengjie.entity;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class QueryWrapperAndPage {
+ QueryWrapper queryWrapper;
+ Page page;
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/ResultObj.java b/wjcy-common/src/main/java/me/zhengjie/entity/ResultObj.java
new file mode 100644
index 0000000..21e6c83
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/ResultObj.java
@@ -0,0 +1,20 @@
+package me.zhengjie.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 影刀回调响应-resultObj
+ *
+ * @author rch
+ * @create 2022-08-23
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ResultObj {
+ private String name;
+ private String type;
+ private String value;
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/ReturnObje.java b/wjcy-common/src/main/java/me/zhengjie/entity/ReturnObje.java
new file mode 100644
index 0000000..46d863c
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/ReturnObje.java
@@ -0,0 +1,28 @@
+package me.zhengjie.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+/**
+ * 影刀回调返回值-ReturnObj
+ *
+ * @author rch
+ * @create 2022-08-23
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ReturnObje {
+ private String msg;
+ private List result;
+ private String jobUuid;
+ private String robotClientName;
+ private String robotName;
+ private String robotClientUuid;
+ private String startTime;
+ private String endTime;
+ private String status;
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/SysQuartzJob.java b/wjcy-common/src/main/java/me/zhengjie/entity/SysQuartzJob.java
new file mode 100644
index 0000000..cdab873
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/SysQuartzJob.java
@@ -0,0 +1,70 @@
+package me.zhengjie.entity;
+
+import java.util.Date;
+
+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 javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * 定时任务(SysQuartzJob)表实体类
+ *
+ * @author rch
+ * @since 2022-07-20
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class SysQuartzJob extends Model {
+
+ public static final String JOB_KEY = "JOB_KEY";
+
+ @TableId(value = "job_id", type = IdType.AUTO)
+ private Long jobId;
+
+ private String createTime;
+ private String updateTime;
+ /** 操作人账号*/
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private String gmName;
+
+ private Long taskNum;
+ /** 类型 1.普通 2.影刀 */
+ private Integer type;
+ /** Spring Bean名称 */
+ private String beanName;
+ /** cron 表达式 */
+ private String cronExpression;
+ /** 状态:1暂停、0启用 */
+ private Integer isPause;
+ /** 任务名称 */
+ private String jobName;
+ /** 方法名称 */
+ private String methodName;
+ /** 参数 */
+ private String params;
+ /** 参数类型 */
+ private Integer paramsType;
+ /** 备注 */
+ private String description;
+ /** 负责人 */
+ private String personInCharge;
+ /** 报警邮箱 */
+ private String email;
+ /** 子任务ID */
+ private String subTask;
+ /** 任务失败后是否暂停 */
+ private Integer pauseAfterFailure;
+ /** 创建者 */
+ private String createBy;
+ /** 更新者 */
+ private String updateBy;
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/SysQuartzLog.java b/wjcy-common/src/main/java/me/zhengjie/entity/SysQuartzLog.java
new file mode 100644
index 0000000..3ed54bf
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/SysQuartzLog.java
@@ -0,0 +1,58 @@
+/*
+ * 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.entity;
+
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.sql.Timestamp;
+
+/**
+ * @author rch
+ * @date 2022-07-20
+ */
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class SysQuartzLog extends Model {
+
+ private Long logId;
+ /** bean名称 */
+ private String beanName;
+ /** 方法名称 */
+ private String methodName;
+
+ /** 参数 */
+ private String params;
+
+ /** cron表达式 */
+ private String cronExpression;
+
+ /** 状态 */
+ private Boolean isSuccess;
+
+ /** 异常详情 */
+ private String exceptionDetail;
+
+ /** 执行耗时 */
+ private Long time;
+
+ /** 创建时间 */
+ private Timestamp createTime;
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/YdSign.java b/wjcy-common/src/main/java/me/zhengjie/entity/YdSign.java
new file mode 100644
index 0000000..7e69897
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/YdSign.java
@@ -0,0 +1,32 @@
+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;
+
+/**
+ * 影刀 鉴权
+ *
+ * @author rch
+ * @since 2022-07-26
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class YdSign extends Model {
+
+ /** 时间戳 */
+ private Long timestamp;
+ /** accessKeyId */
+ private String accessKeyId;
+ /** accessKeySecret */
+ private String accessKeySecret;
+ /** bodyMd5 */
+ private String bodyMd5;
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/YdStartReturn.java b/wjcy-common/src/main/java/me/zhengjie/entity/YdStartReturn.java
new file mode 100644
index 0000000..abf9b72
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/YdStartReturn.java
@@ -0,0 +1,24 @@
+package me.zhengjie.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 调用影刀启动任务响应信息
+ *
+ * @author rch
+ * @create 2022-08-24
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class YdStartReturn {
+ private String code;
+ private Boolean success;
+ private TaskUuid data;
+}
+
+class TaskUuid {
+ private String taskUuid;
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/quartz/Boss.java b/wjcy-common/src/main/java/me/zhengjie/entity/quartz/Boss.java
new file mode 100644
index 0000000..b6cd0db
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/quartz/Boss.java
@@ -0,0 +1,23 @@
+package me.zhengjie.entity.quartz;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+/**
+ * 调用影刀json信息
+ *
+ * @author rch
+ * @create 2022-08-01
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class Boss {
+ private String accountName;
+ private String robotUuid;
+ private Long applyId;
+ private List params;
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/quartz/DataInfo.java b/wjcy-common/src/main/java/me/zhengjie/entity/quartz/DataInfo.java
new file mode 100644
index 0000000..97d9a32
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/quartz/DataInfo.java
@@ -0,0 +1,19 @@
+package me.zhengjie.entity.quartz;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 调用影刀响应子集信息
+ *
+ * @author rch
+ * @create 2022-08-01
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class DataInfo {
+ private String accessToken;
+ private String expiresIn;
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/quartz/JobQueryByUuid.java b/wjcy-common/src/main/java/me/zhengjie/entity/quartz/JobQueryByUuid.java
new file mode 100644
index 0000000..f80e95d
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/quartz/JobQueryByUuid.java
@@ -0,0 +1,18 @@
+package me.zhengjie.entity.quartz;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 根据影刀任务ID查询影刀任务执行信息
+ *
+ * @author rch
+ * @create 2022-08-01
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class JobQueryByUuid {
+ private String jobUuid;
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/quartz/JobQueryByUuidData.java b/wjcy-common/src/main/java/me/zhengjie/entity/quartz/JobQueryByUuidData.java
new file mode 100644
index 0000000..54bc9f6
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/quartz/JobQueryByUuidData.java
@@ -0,0 +1,28 @@
+package me.zhengjie.entity.quartz;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 根据影刀任务id 查询影刀任务详情信息
+ *
+ * @author rch
+ * @create 2022-08-01
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class JobQueryByUuidData {
+ private JobQueryByUuidRobotParams robotParams;
+ private String jobUuid;
+ private String status;
+ private String statusName;
+ private String robotUuid;
+ private String robotName;
+ private String startTime;
+ private String endTime;
+ private String remark;
+ private String robotClientUuid;
+ private String robotClientName;
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/quartz/JobQueryByUuidReturn.java b/wjcy-common/src/main/java/me/zhengjie/entity/quartz/JobQueryByUuidReturn.java
new file mode 100644
index 0000000..3217b49
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/quartz/JobQueryByUuidReturn.java
@@ -0,0 +1,93 @@
+package me.zhengjie.entity.quartz;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 根据影刀任务id 查询影刀任务详情信息
+ *
+ * @author rch
+ * @create 2022-08-01
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class JobQueryByUuidReturn {
+ private String code;
+ private Boolean success;
+ private JobQueryByUuidData data;
+
+ /**
+ * {
+ * "data": {
+ * "jobUuid": "e925cd35-6857-48ae-a4ef-40ceea975e50",
+ * "status": "error",
+ * "statusName": "异常",
+ * "robotUuid": "9107fa36-a6d0-4ac6-932f-8fcbb7deb89b",
+ * "robotName": "刷单系统",
+ * "startTime": "2022-09-09 15:14:32",
+ * "endTime": "2022-09-09 15:15:52",
+ * "remark": "【e925cd35-6857-48ae-a4ef-40ceea975e50】任务失败,在【1-2清空浏览器数据】中第1行:出错:The tab was closed.",
+ * "robotParams": {
+ * "inputs": [
+ * {
+ * "name": "id",
+ * "value": "4",
+ * "type": "str"
+ * },
+ * {
+ * "name": "country",
+ * "value": "Korea",
+ * "type": "str"
+ * },
+ * {
+ * "name": "account",
+ * "value": "borislanphere553@gmail.com",
+ * "type": "str"
+ * },
+ * {
+ * "name": "pwd",
+ * "value": "sdwjcy2021",
+ * "type": "str"
+ * },
+ * {
+ * "name": "keyWord",
+ * "value": "neck electric massage",
+ * "type": "str"
+ * },
+ * {
+ * "name": "number",
+ * "value": "10",
+ * "type": "str"
+ * },
+ * {
+ * "name": "specification",
+ * "value": "type-c",
+ * "type": "str"
+ * },
+ * {
+ * "name": "color",
+ * "value": "Full Function",
+ * "type": "str"
+ * },
+ * {
+ * "name": "item",
+ * "value": "1005001346919788",
+ * "type": "str"
+ * },
+ * {
+ * "name": "vpnShare",
+ * "value": "ew0KICAidiI6ICIyIiwNCiAgInBzIjogIjEwNC4yMjEuMTk5LjgyIiwNCiAgImFkZCI6ICJ1cy1lczM0LmZvYmhlbHAuY29tIiwNCiAgInBvcnQiOiAiMzAwNDMiLA0KICAiaWQiOiAiYzA4NDk5ODQtZWNjNC01MzY3LTlmOTctYTI2ODljNTQ5N2QyIiwNCiAgImFpZCI6ICI2NCIsDQogICJzY3kiOiAiYXV0byIsDQogICJuZXQiOiAidGNwIiwNCiAgInR5cGUiOiAibm9uZSIsDQogICJob3N0IjogIiIsDQogICJwYXRoIjogIiIsDQogICJ0bHMiOiAiIiwNCiAgInNuaSI6ICIiDQp9",
+ * "type": "str"
+ * }
+ * ]
+ * },
+ * "robotClientUuid": "13d29cc7-3feb-46b5-a02c-66dced9dfeca",
+ * "robotClientName": "linbiaoyuan@vogocm"
+ * },
+ * "code": 200,
+ * "success": true
+ * }
+ */
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/quartz/JobQueryByUuidRobotParams.java b/wjcy-common/src/main/java/me/zhengjie/entity/quartz/JobQueryByUuidRobotParams.java
new file mode 100644
index 0000000..64c3501
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/quartz/JobQueryByUuidRobotParams.java
@@ -0,0 +1,22 @@
+package me.zhengjie.entity.quartz;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import me.zhengjie.entity.ResultObj;
+
+import java.util.List;
+
+/**
+ * 根据影刀任务id查询影刀
+ *
+ * @author rch
+ * @create 2022-09-09
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class JobQueryByUuidRobotParams {
+ private List inputs;
+ private List outputs;
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/quartz/JobQueryReturnResult.java b/wjcy-common/src/main/java/me/zhengjie/entity/quartz/JobQueryReturnResult.java
new file mode 100644
index 0000000..5958ca9
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/quartz/JobQueryReturnResult.java
@@ -0,0 +1,22 @@
+package me.zhengjie.entity.quartz;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 根据影刀任务id 查询影刀任务详情信息
+ *
+ * @author rch
+ * @create 2022-08-01
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class JobQueryReturnResult {
+ private String id;
+ private String status;
+ private String statusName;
+ private String code;
+ private Boolean success;
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/quartz/Param.java b/wjcy-common/src/main/java/me/zhengjie/entity/quartz/Param.java
new file mode 100644
index 0000000..921efcd
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/quartz/Param.java
@@ -0,0 +1,20 @@
+package me.zhengjie.entity.quartz;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 调用影刀真正入参信息
+ *
+ * @author rch
+ * @create 2022-08-01
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class Param {
+ private String name;
+ private String value;
+ private String type = "str";
+}
\ No newline at end of file
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/quartz/Params.java b/wjcy-common/src/main/java/me/zhengjie/entity/quartz/Params.java
new file mode 100644
index 0000000..a5782be
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/quartz/Params.java
@@ -0,0 +1,22 @@
+package me.zhengjie.entity.quartz;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+/**
+ * 调用影刀json信息 params里的 params是一个跟业务相关的主建
+ *
+ * @author rch
+ * @create 2022-08-01
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class Params {
+ private String accountName;
+ private Long applyId;
+ private String params;
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/quartz/RebotStatu.java b/wjcy-common/src/main/java/me/zhengjie/entity/quartz/RebotStatu.java
new file mode 100644
index 0000000..415baad
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/quartz/RebotStatu.java
@@ -0,0 +1,19 @@
+package me.zhengjie.entity.quartz;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 机器人相应信息子集
+ *
+ * @author rch
+ * @create 2022-08-01
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class RebotStatu {
+ private String robotClientUuid;
+ private String accountName;
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/quartz/RebotStatuInfo.java b/wjcy-common/src/main/java/me/zhengjie/entity/quartz/RebotStatuInfo.java
new file mode 100644
index 0000000..33f5e40
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/quartz/RebotStatuInfo.java
@@ -0,0 +1,29 @@
+package me.zhengjie.entity.quartz;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 影刀机器人状态信息
+ *
+ * @author rch
+ * @create 2022-08-01
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class RebotStatuInfo {
+ /** 状态 connected:已连接 idle:空闲 running:运行中 allocated:已分配 abnormal:异常 offline:离线 */
+ private String status;
+ /** 机器人客户端ip */
+ private String clientIp;
+ /** 机器人uuid */
+ private String robotClientUuid;
+ /** 机器人名称 */
+ private String robotClientName;
+ /** 机器人备注 */
+ private String description;
+ /** 运行备注 */
+ private String remark;
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/quartz/RebotStatuReturn.java b/wjcy-common/src/main/java/me/zhengjie/entity/quartz/RebotStatuReturn.java
new file mode 100644
index 0000000..20b7669
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/quartz/RebotStatuReturn.java
@@ -0,0 +1,20 @@
+package me.zhengjie.entity.quartz;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 机器人相应信息
+ *
+ * @author rch
+ * @create 2022-08-01
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class RebotStatuReturn {
+ private String code;
+ private Boolean success;
+ private RebotStatuInfo data;
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/quartz/SecreInfo.java b/wjcy-common/src/main/java/me/zhengjie/entity/quartz/SecreInfo.java
new file mode 100644
index 0000000..c835970
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/quartz/SecreInfo.java
@@ -0,0 +1,21 @@
+package me.zhengjie.entity.quartz;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 调用影刀相应信息
+ *
+ * @author rch
+ * @create 2022-08-01
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class SecreInfo {
+ private String code;
+ private Boolean success;
+ private String requestId;
+ private DataInfo data;
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/entity/quartz/StartYdReturnInfo.java b/wjcy-common/src/main/java/me/zhengjie/entity/quartz/StartYdReturnInfo.java
new file mode 100644
index 0000000..fffefe0
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/entity/quartz/StartYdReturnInfo.java
@@ -0,0 +1,22 @@
+package me.zhengjie.entity.quartz;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 启动影刀任务响应信息
+ *
+ * @author rch
+ * @create 2022-10-27
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class StartYdReturnInfo {
+ private String code;
+ private Boolean success;
+ private String requestId;
+ private String serverInstName;
+ private String msg;
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/enums/BuyerLevelEnum.java b/wjcy-common/src/main/java/me/zhengjie/enums/BuyerLevelEnum.java
new file mode 100644
index 0000000..cb93bf3
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/enums/BuyerLevelEnum.java
@@ -0,0 +1,77 @@
+package me.zhengjie.enums;
+
+import me.zhengjie.enums.interfaces.IntegerEnum;
+import org.apache.commons.lang3.EnumUtils;
+
+/**
+ *
+ * 用户等级 1.普通 2.精品 3.压力 4.内部账号
+ *
+ *
+ * @Author rch
+ * @Date 2022-07-18
+ **/
+public enum BuyerLevelEnum implements IntegerEnum {
+ /**
+ * 用户等级 1.普通 2.精品 3.压力 4.内部账号
+ */
+
+ GENERAL(1),
+ BOUTIQUR(2),
+ PRESSURE(3),
+ INNER_ACCOUNT(4);
+
+ private final Integer value;
+
+ private BuyerLevelEnum(Integer value) {
+ this.value = value;
+ }
+
+
+ @Override
+ public Integer value() {
+ return this.value;
+ }
+
+ /**
+ * 判断是否存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean hasValue(Integer value) {
+ boolean hasVal = false;
+ if (getEnum(value) != null) {
+ hasVal = true;
+ }
+ return hasVal;
+ }
+
+ /**
+ * 判断是否不存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean notHasValue(Integer value) {
+ return !hasValue(value);
+ }
+
+ /**
+ * 获取指定值对应的枚举
+ *
+ * @param value
+ * @return
+ */
+ public static BuyerLevelEnum getEnum(Integer value) {
+ if (value == null) {
+ return null;
+ }
+ for (BuyerLevelEnum obj : EnumUtils.getEnumList(BuyerLevelEnum.class)) {
+ if (obj.eqValue(value)) {
+ return obj;
+ }
+ }
+ return null;
+ }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/enums/BuyerOccupyStatusEnum.java b/wjcy-common/src/main/java/me/zhengjie/enums/BuyerOccupyStatusEnum.java
new file mode 100644
index 0000000..3c09adb
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/enums/BuyerOccupyStatusEnum.java
@@ -0,0 +1,75 @@
+package me.zhengjie.enums;
+
+import me.zhengjie.enums.interfaces.IntegerEnum;
+import org.apache.commons.lang3.EnumUtils;
+
+/**
+ *
+ * 占用状态 1.已占用 2.未占用
+ *
+ *
+ * @Author rch
+ * @Date 2022-07-18
+ **/
+public enum BuyerOccupyStatusEnum implements IntegerEnum {
+ /**
+ * 占用状态 1.已占用 2.未占用
+ */
+
+ OCCUPIED(1),
+ UN_OCCUPIED(2);
+
+ private final Integer value;
+
+ private BuyerOccupyStatusEnum(Integer value) {
+ this.value = value;
+ }
+
+
+ @Override
+ public Integer value() {
+ return this.value;
+ }
+
+ /**
+ * 判断是否存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean hasValue(Integer value) {
+ boolean hasVal = false;
+ if (getEnum(value) != null) {
+ hasVal = true;
+ }
+ return hasVal;
+ }
+
+ /**
+ * 判断是否不存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean notHasValue(Integer value) {
+ return !hasValue(value);
+ }
+
+ /**
+ * 获取指定值对应的枚举
+ *
+ * @param value
+ * @return
+ */
+ public static BuyerOccupyStatusEnum getEnum(Integer value) {
+ if (value == null) {
+ return null;
+ }
+ for (BuyerOccupyStatusEnum obj : EnumUtils.getEnumList(BuyerOccupyStatusEnum.class)) {
+ if (obj.eqValue(value)) {
+ return obj;
+ }
+ }
+ return null;
+ }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/enums/BuyerStatusEnum.java b/wjcy-common/src/main/java/me/zhengjie/enums/BuyerStatusEnum.java
new file mode 100644
index 0000000..eb64052
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/enums/BuyerStatusEnum.java
@@ -0,0 +1,80 @@
+package me.zhengjie.enums;
+
+import me.zhengjie.enums.interfaces.IntegerEnum;
+import org.apache.commons.lang3.EnumUtils;
+
+/**
+ *
+ * 状态(导入默认正常) 1.待注册 2待验证 3.待完善 4.正常 5.异常 6.可用但已用 7.删除
+ *
+ *
+ * @Author rch
+ * @Date 2022-06-23
+ **/
+public enum BuyerStatusEnum implements IntegerEnum {
+ /**
+ * 状态(导入默认正常) 1.待注册 2待验证 3.待完善 4.正常 5.异常 6.可用但已用 7.删除',
+ */
+
+ TOBE_REGISTER(1),
+ TOBE_CHECKING(2),
+ TOBE_PERFECT(3),
+ NORMAL(4),
+ AB_NORMAL(5),
+ AVAILABLE_BUT_USED(6),
+ DEL(7);
+
+ private final Integer value;
+
+ private BuyerStatusEnum(Integer value) {
+ this.value = value;
+ }
+
+
+ @Override
+ public Integer value() {
+ return this.value;
+ }
+
+ /**
+ * 判断是否存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean hasValue(Integer value) {
+ boolean hasVal = false;
+ if (getEnum(value) != null) {
+ hasVal = true;
+ }
+ return hasVal;
+ }
+
+ /**
+ * 判断是否不存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean notHasValue(Integer value) {
+ return !hasValue(value);
+ }
+
+ /**
+ * 获取指定值对应的枚举
+ *
+ * @param value
+ * @return
+ */
+ public static BuyerStatusEnum getEnum(Integer value) {
+ if (value == null) {
+ return null;
+ }
+ for (BuyerStatusEnum obj : EnumUtils.getEnumList(BuyerStatusEnum.class)) {
+ if (obj.eqValue(value)) {
+ return obj;
+ }
+ }
+ return null;
+ }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/enums/CardDealerTypeEnum.java b/wjcy-common/src/main/java/me/zhengjie/enums/CardDealerTypeEnum.java
new file mode 100644
index 0000000..de8c646
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/enums/CardDealerTypeEnum.java
@@ -0,0 +1,75 @@
+package me.zhengjie.enums;
+
+import me.zhengjie.enums.interfaces.IntegerEnum;
+import org.apache.commons.lang3.EnumUtils;
+
+/**
+ *
+ * 信用卡所属厂商类型 枚举
+ *
+ *
+ * @Author rch
+ * @Date 2022-07-09
+ **/
+public enum CardDealerTypeEnum implements IntegerEnum {
+ /**
+ * 所属厂商:1.AmzKeys 2.Airwallex
+ */
+
+ AMZKEYS(1),
+ AIRWALLEX(2);
+
+ private final Integer value;
+
+ private CardDealerTypeEnum(Integer value) {
+ this.value = value;
+ }
+
+
+ @Override
+ public Integer value() {
+ return this.value;
+ }
+
+ /**
+ * 判断是否存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean hasValue(Integer value) {
+ boolean hasVal = false;
+ if (getEnum(value) != null) {
+ hasVal = true;
+ }
+ return hasVal;
+ }
+
+ /**
+ * 判断是否不存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean notHasValue(Integer value) {
+ return !hasValue(value);
+ }
+
+ /**
+ * 获取指定值对应的枚举
+ *
+ * @param value
+ * @return
+ */
+ public static CardDealerTypeEnum getEnum(Integer value) {
+ if (value == null) {
+ return null;
+ }
+ for (CardDealerTypeEnum obj : EnumUtils.getEnumList(CardDealerTypeEnum.class)) {
+ if (obj.eqValue(value)) {
+ return obj;
+ }
+ }
+ return null;
+ }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/enums/CardStatusEnum.java b/wjcy-common/src/main/java/me/zhengjie/enums/CardStatusEnum.java
new file mode 100644
index 0000000..7c2966e
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/enums/CardStatusEnum.java
@@ -0,0 +1,76 @@
+package me.zhengjie.enums;
+
+import me.zhengjie.enums.interfaces.IntegerEnum;
+import org.apache.commons.lang3.EnumUtils;
+
+/**
+ *
+ * 信用卡类状态枚举
+ *
+ *
+ * @Author rch
+ * @Date 2022-07-11
+ **/
+public enum CardStatusEnum implements IntegerEnum {
+ /**
+ * 状态:1.正常、2.异常、3.已删除
+ */
+
+ NORMAL(1),
+ AB_NORMAL(2),
+ DEL(3);
+
+ private final Integer value;
+
+ private CardStatusEnum(Integer value) {
+ this.value = value;
+ }
+
+
+ @Override
+ public Integer value() {
+ return this.value;
+ }
+
+ /**
+ * 判断是否存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean hasValue(Integer value) {
+ boolean hasVal = false;
+ if (getEnum(value) != null) {
+ hasVal = true;
+ }
+ return hasVal;
+ }
+
+ /**
+ * 判断是否不存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean notHasValue(Integer value) {
+ return !hasValue(value);
+ }
+
+ /**
+ * 获取指定值对应的枚举
+ *
+ * @param value
+ * @return
+ */
+ public static CardStatusEnum getEnum(Integer value) {
+ if (value == null) {
+ return null;
+ }
+ for (CardStatusEnum obj : EnumUtils.getEnumList(CardStatusEnum.class)) {
+ if (obj.eqValue(value)) {
+ return obj;
+ }
+ }
+ return null;
+ }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/enums/CardTypeEnum.java b/wjcy-common/src/main/java/me/zhengjie/enums/CardTypeEnum.java
new file mode 100644
index 0000000..24db1b5
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/enums/CardTypeEnum.java
@@ -0,0 +1,76 @@
+package me.zhengjie.enums;
+
+import me.zhengjie.enums.interfaces.IntegerEnum;
+import org.apache.commons.lang3.EnumUtils;
+
+/**
+ *
+ * 信用卡类型 枚举
+ *
+ *
+ * @Author rch
+ * @Date 2022-07-09
+ **/
+public enum CardTypeEnum implements IntegerEnum {
+ /**
+ * 信用卡类型 1.Payoneer 2.万事达虚拟卡 3.Visa信用卡
+ */
+
+ PAYONEER(1),
+ WSD_INVENTED(2),
+ VISA(3);
+
+ private final Integer value;
+
+ private CardTypeEnum(Integer value) {
+ this.value = value;
+ }
+
+
+ @Override
+ public Integer value() {
+ return this.value;
+ }
+
+ /**
+ * 判断是否存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean hasValue(Integer value) {
+ boolean hasVal = false;
+ if (getEnum(value) != null) {
+ hasVal = true;
+ }
+ return hasVal;
+ }
+
+ /**
+ * 判断是否不存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean notHasValue(Integer value) {
+ return !hasValue(value);
+ }
+
+ /**
+ * 获取指定值对应的枚举
+ *
+ * @param value
+ * @return
+ */
+ public static CardTypeEnum getEnum(Integer value) {
+ if (value == null) {
+ return null;
+ }
+ for (CardTypeEnum obj : EnumUtils.getEnumList(CardTypeEnum.class)) {
+ if (obj.eqValue(value)) {
+ return obj;
+ }
+ }
+ return null;
+ }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/enums/ClickBrowseStatusEnum.java b/wjcy-common/src/main/java/me/zhengjie/enums/ClickBrowseStatusEnum.java
new file mode 100644
index 0000000..650fd7d
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/enums/ClickBrowseStatusEnum.java
@@ -0,0 +1,77 @@
+package me.zhengjie.enums;
+
+import me.zhengjie.enums.interfaces.IntegerEnum;
+import org.apache.commons.lang3.EnumUtils;
+
+/**
+ *
+ * 浏览好评状态枚举
+ *
+ *
+ * @Author rch
+ * @Date 2022-11-07
+ **/
+public enum ClickBrowseStatusEnum implements IntegerEnum {
+ /**
+ * 状态 1.待执行 2.执行中 3.执行成功 4.执行失败
+ */
+
+ TOBE_EXECUTION(1),
+ IN_EXECUTION(2),
+ EXECUTION_SUCCESS(3),
+ EXECUTION_FAILE(4);
+
+ private final Integer value;
+
+ private ClickBrowseStatusEnum(Integer value) {
+ this.value = value;
+ }
+
+
+ @Override
+ public Integer value() {
+ return this.value;
+ }
+
+ /**
+ * 判断是否存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean hasValue(Integer value) {
+ boolean hasVal = false;
+ if (getEnum(value) != null) {
+ hasVal = true;
+ }
+ return hasVal;
+ }
+
+ /**
+ * 判断是否不存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean notHasValue(Integer value) {
+ return !hasValue(value);
+ }
+
+ /**
+ * 获取指定值对应的枚举
+ *
+ * @param value
+ * @return
+ */
+ public static ClickBrowseStatusEnum getEnum(Integer value) {
+ if (value == null) {
+ return null;
+ }
+ for (ClickBrowseStatusEnum obj : EnumUtils.getEnumList(ClickBrowseStatusEnum.class)) {
+ if (obj.eqValue(value)) {
+ return obj;
+ }
+ }
+ return null;
+ }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/enums/ClickFarmingStatusEnum.java b/wjcy-common/src/main/java/me/zhengjie/enums/ClickFarmingStatusEnum.java
new file mode 100644
index 0000000..2f0ae99
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/enums/ClickFarmingStatusEnum.java
@@ -0,0 +1,79 @@
+package me.zhengjie.enums;
+
+import me.zhengjie.enums.interfaces.IntegerEnum;
+import org.apache.commons.lang3.EnumUtils;
+
+/**
+ *
+ * 刷单状态枚举
+ *
+ *
+ * @Author rch
+ * @Date 2022-07-11
+ **/
+public enum ClickFarmingStatusEnum implements IntegerEnum {
+ /**
+ * 状态 1.待执行 2.执行中 3.执行成功 4.执行失败 5.待支付 6.支付成功异常 (加购比较特殊 判断是否有订单号, 执行成功没有订单号是加购物车成功,区分抓单成功)
+ */
+
+ TOBE_EXECUTION(1),
+ IN_EXECUTION(2),
+ EXECUTION_SUCCESS(3),
+ EXECUTION_FAILE(4),
+ AWAITING_PAYMENT(5),
+ PAY_OK_ERROR(6);
+
+ private final Integer value;
+
+ private ClickFarmingStatusEnum(Integer value) {
+ this.value = value;
+ }
+
+
+ @Override
+ public Integer value() {
+ return this.value;
+ }
+
+ /**
+ * 判断是否存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean hasValue(Integer value) {
+ boolean hasVal = false;
+ if (getEnum(value) != null) {
+ hasVal = true;
+ }
+ return hasVal;
+ }
+
+ /**
+ * 判断是否不存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean notHasValue(Integer value) {
+ return !hasValue(value);
+ }
+
+ /**
+ * 获取指定值对应的枚举
+ *
+ * @param value
+ * @return
+ */
+ public static ClickFarmingStatusEnum getEnum(Integer value) {
+ if (value == null) {
+ return null;
+ }
+ for (ClickFarmingStatusEnum obj : EnumUtils.getEnumList(ClickFarmingStatusEnum.class)) {
+ if (obj.eqValue(value)) {
+ return obj;
+ }
+ }
+ return null;
+ }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/enums/ClickOrderStatusEnum.java b/wjcy-common/src/main/java/me/zhengjie/enums/ClickOrderStatusEnum.java
new file mode 100644
index 0000000..5530634
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/enums/ClickOrderStatusEnum.java
@@ -0,0 +1,77 @@
+package me.zhengjie.enums;
+
+import me.zhengjie.enums.interfaces.IntegerEnum;
+import org.apache.commons.lang3.EnumUtils;
+
+/**
+ *
+ * 刷单订单状态枚举
+ *
+ *
+ * @Author rch
+ * @Date 2022-07-11
+ **/
+public enum ClickOrderStatusEnum implements IntegerEnum {
+ /**
+ * 状态 1.待执行 2.执行中 3.执行成功 4.执行失败
+ */
+
+ TOBE_EXECUTION(1),
+ IN_EXECUTION(2),
+ EXECUTION_SUCCESS(3),
+ EXECUTION_FAILE(4);
+
+ private final Integer value;
+
+ private ClickOrderStatusEnum(Integer value) {
+ this.value = value;
+ }
+
+
+ @Override
+ public Integer value() {
+ return this.value;
+ }
+
+ /**
+ * 判断是否存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean hasValue(Integer value) {
+ boolean hasVal = false;
+ if (getEnum(value) != null) {
+ hasVal = true;
+ }
+ return hasVal;
+ }
+
+ /**
+ * 判断是否不存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean notHasValue(Integer value) {
+ return !hasValue(value);
+ }
+
+ /**
+ * 获取指定值对应的枚举
+ *
+ * @param value
+ * @return
+ */
+ public static ClickOrderStatusEnum getEnum(Integer value) {
+ if (value == null) {
+ return null;
+ }
+ for (ClickOrderStatusEnum obj : EnumUtils.getEnumList(ClickOrderStatusEnum.class)) {
+ if (obj.eqValue(value)) {
+ return obj;
+ }
+ }
+ return null;
+ }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/enums/CtReboteStatusEnum.java b/wjcy-common/src/main/java/me/zhengjie/enums/CtReboteStatusEnum.java
new file mode 100644
index 0000000..a4e828b
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/enums/CtReboteStatusEnum.java
@@ -0,0 +1,75 @@
+package me.zhengjie.enums;
+
+import me.zhengjie.enums.interfaces.IntegerEnum;
+import org.apache.commons.lang3.EnumUtils;
+
+/**
+ *
+ * 机器人 状态0.未占用 1.占用
+ *
+ *
+ * @Author xxs
+ * @Date 2021/9/26
+ **/
+public enum CtReboteStatusEnum implements IntegerEnum {
+ /**
+ * 状态0.未占用 1.占用
+ */
+
+ UNOCCUPIED(0),
+ OCCUPY(1);
+
+ private final Integer value;
+
+ private CtReboteStatusEnum(Integer value) {
+ this.value = value;
+ }
+
+
+ @Override
+ public Integer value() {
+ return this.value;
+ }
+
+ /**
+ * 判断是否存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean hasValue(Integer value) {
+ boolean hasVal = false;
+ if (getEnum(value) != null) {
+ hasVal = true;
+ }
+ return hasVal;
+ }
+
+ /**
+ * 判断是否不存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean notHasValue(Integer value) {
+ return !hasValue(value);
+ }
+
+ /**
+ * 获取指定值对应的枚举
+ *
+ * @param value
+ * @return
+ */
+ public static CtReboteStatusEnum getEnum(Integer value) {
+ if (value == null) {
+ return null;
+ }
+ for (CtReboteStatusEnum obj : EnumUtils.getEnumList(CtReboteStatusEnum.class)) {
+ if (obj.eqValue(value)) {
+ return obj;
+ }
+ }
+ return null;
+ }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/enums/DhAddCarStatusEnum.java b/wjcy-common/src/main/java/me/zhengjie/enums/DhAddCarStatusEnum.java
new file mode 100644
index 0000000..9c7ed42
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/enums/DhAddCarStatusEnum.java
@@ -0,0 +1,82 @@
+package me.zhengjie.enums;
+
+import me.zhengjie.enums.interfaces.IntegerEnum;
+import org.apache.commons.lang3.EnumUtils;
+
+/**
+ *
+ * 敦煌加购状态枚举
+ *
+ *
+ * @Author rch
+ * @Date 2022-07-11
+ **/
+public enum DhAddCarStatusEnum implements IntegerEnum {
+ /**
+ * 状态 1.待执行 2.执行中 3.加购成功 4.加购失败 5.下单成功 6.待抓单 7.抓单中 8.抓单成功 9.抓单失败
+ */
+
+ TOBE_EXECUTION(1),
+ IN_EXECUTION(2),
+ Add_CARD_SUCCESS(3),
+ ADD_CARD_FAILE(4),
+ ORDER_SUCCESS(5),
+ TO_BE_CATCH_ORDER(6),
+ CATCH_ORDER_ING(7),
+ CATCH_ORDER_SUCCESS(8),
+ CATCH_ORDER_FAILE(9);
+
+ private final Integer value;
+
+ private DhAddCarStatusEnum(Integer value) {
+ this.value = value;
+ }
+
+
+ @Override
+ public Integer value() {
+ return this.value;
+ }
+
+ /**
+ * 判断是否存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean hasValue(Integer value) {
+ boolean hasVal = false;
+ if (getEnum(value) != null) {
+ hasVal = true;
+ }
+ return hasVal;
+ }
+
+ /**
+ * 判断是否不存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean notHasValue(Integer value) {
+ return !hasValue(value);
+ }
+
+ /**
+ * 获取指定值对应的枚举
+ *
+ * @param value
+ * @return
+ */
+ public static DhAddCarStatusEnum getEnum(Integer value) {
+ if (value == null) {
+ return null;
+ }
+ for (DhAddCarStatusEnum obj : EnumUtils.getEnumList(DhAddCarStatusEnum.class)) {
+ if (obj.eqValue(value)) {
+ return obj;
+ }
+ }
+ return null;
+ }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/enums/DhPayStatusEnum.java b/wjcy-common/src/main/java/me/zhengjie/enums/DhPayStatusEnum.java
new file mode 100644
index 0000000..a232181
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/enums/DhPayStatusEnum.java
@@ -0,0 +1,77 @@
+package me.zhengjie.enums;
+
+import me.zhengjie.enums.interfaces.IntegerEnum;
+import org.apache.commons.lang3.EnumUtils;
+
+/**
+ *
+ * 敦煌支付状态枚举
+ *
+ *
+ * @Author rch
+ * @Date 2022-07-28
+ **/
+public enum DhPayStatusEnum implements IntegerEnum {
+ /**
+ * 状态 0.待处理 1.支付成功 2.支付失败
+ */
+
+ TO_BE(0),
+ PAY_SUCCESS(1),
+ PAY_FAIL(2),
+ DEL(3);
+
+ private final Integer value;
+
+ private DhPayStatusEnum(Integer value) {
+ this.value = value;
+ }
+
+
+ @Override
+ public Integer value() {
+ return this.value;
+ }
+
+ /**
+ * 判断是否存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean hasValue(Integer value) {
+ boolean hasVal = false;
+ if (getEnum(value) != null) {
+ hasVal = true;
+ }
+ return hasVal;
+ }
+
+ /**
+ * 判断是否不存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean notHasValue(Integer value) {
+ return !hasValue(value);
+ }
+
+ /**
+ * 获取指定值对应的枚举
+ *
+ * @param value
+ * @return
+ */
+ public static DhPayStatusEnum getEnum(Integer value) {
+ if (value == null) {
+ return null;
+ }
+ for (DhPayStatusEnum obj : EnumUtils.getEnumList(DhPayStatusEnum.class)) {
+ if (obj.eqValue(value)) {
+ return obj;
+ }
+ }
+ return null;
+ }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/enums/ExcelInfoRequestTypeEnum.java b/wjcy-common/src/main/java/me/zhengjie/enums/ExcelInfoRequestTypeEnum.java
new file mode 100644
index 0000000..65a14d2
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/enums/ExcelInfoRequestTypeEnum.java
@@ -0,0 +1,75 @@
+package me.zhengjie.enums;
+
+import me.zhengjie.enums.interfaces.IntegerEnum;
+import org.apache.commons.lang3.EnumUtils;
+
+/**
+ *
+ * 请求类型:1.下单请求 2.支付请求
+ *
+ *
+ * @Author rch
+ * @Date 2022-06-23
+ **/
+public enum ExcelInfoRequestTypeEnum implements IntegerEnum {
+ /**
+ * 请求类型:1.下单请求 2.支付请求
+ */
+
+ BUY_ORDER(1),
+ PAY_ORDER(2);
+
+ private final Integer value;
+
+ private ExcelInfoRequestTypeEnum(Integer value) {
+ this.value = value;
+ }
+
+
+ @Override
+ public Integer value() {
+ return this.value;
+ }
+
+ /**
+ * 判断是否存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean hasValue(Integer value) {
+ boolean hasVal = false;
+ if (getEnum(value) != null) {
+ hasVal = true;
+ }
+ return hasVal;
+ }
+
+ /**
+ * 判断是否不存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean notHasValue(Integer value) {
+ return !hasValue(value);
+ }
+
+ /**
+ * 获取指定值对应的枚举
+ *
+ * @param value
+ * @return
+ */
+ public static ExcelInfoRequestTypeEnum getEnum(Integer value) {
+ if (value == null) {
+ return null;
+ }
+ for (ExcelInfoRequestTypeEnum obj : EnumUtils.getEnumList(ExcelInfoRequestTypeEnum.class)) {
+ if (obj.eqValue(value)) {
+ return obj;
+ }
+ }
+ return null;
+ }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/enums/ExcelStatusEnum.java b/wjcy-common/src/main/java/me/zhengjie/enums/ExcelStatusEnum.java
new file mode 100644
index 0000000..9cdce5e
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/enums/ExcelStatusEnum.java
@@ -0,0 +1,76 @@
+package me.zhengjie.enums;
+
+import me.zhengjie.enums.interfaces.IntegerEnum;
+import org.apache.commons.lang3.EnumUtils;
+
+/**
+ *
+ * 状态1.待导入 2.导入成功 3.导入失败
+ *
+ *
+ * @Author rch
+ * @Date 2022-06-23
+ **/
+public enum ExcelStatusEnum implements IntegerEnum {
+ /**
+ * 状态1.待导入 2.导入成功 3.导入失败
+ */
+
+ TOBE(1),
+ SUCCESS(2),
+ FAILE(3);
+
+ private final Integer value;
+
+ private ExcelStatusEnum(Integer value) {
+ this.value = value;
+ }
+
+
+ @Override
+ public Integer value() {
+ return this.value;
+ }
+
+ /**
+ * 判断是否存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean hasValue(Integer value) {
+ boolean hasVal = false;
+ if (getEnum(value) != null) {
+ hasVal = true;
+ }
+ return hasVal;
+ }
+
+ /**
+ * 判断是否不存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean notHasValue(Integer value) {
+ return !hasValue(value);
+ }
+
+ /**
+ * 获取指定值对应的枚举
+ *
+ * @param value
+ * @return
+ */
+ public static ExcelStatusEnum getEnum(Integer value) {
+ if (value == null) {
+ return null;
+ }
+ for (ExcelStatusEnum obj : EnumUtils.getEnumList(ExcelStatusEnum.class)) {
+ if (obj.eqValue(value)) {
+ return obj;
+ }
+ }
+ return null;
+ }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/enums/LanguageEnum.java b/wjcy-common/src/main/java/me/zhengjie/enums/LanguageEnum.java
new file mode 100644
index 0000000..79ce4d8
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/enums/LanguageEnum.java
@@ -0,0 +1,38 @@
+package me.zhengjie.enums;
+
+/**
+ * 多语言枚举类
+ *
+ * @author zeng
+ * @since 2021/08/24 10:08
+ */
+
+public enum LanguageEnum {
+
+ ZH("简体中文"),
+
+ EN("英文"),
+
+ CW("繁体中文"),
+ ;
+
+ private final String des;
+
+ LanguageEnum(String des) {
+ this.des = des;
+ }
+
+ public String getValue() {
+ return this.name().toLowerCase();
+ }
+
+ public static boolean isInclude(String language) {
+ for (LanguageEnum value : LanguageEnum.values()) {
+ if (value.getValue().equals(language)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/enums/OrderTypeEnum.java b/wjcy-common/src/main/java/me/zhengjie/enums/OrderTypeEnum.java
new file mode 100644
index 0000000..238cda8
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/enums/OrderTypeEnum.java
@@ -0,0 +1,75 @@
+package me.zhengjie.enums;
+
+import me.zhengjie.enums.interfaces.IntegerEnum;
+import org.apache.commons.lang3.EnumUtils;
+
+/**
+ *
+ * 刷单订单类型枚举
+ *
+ *
+ * @Author rch
+ * @Date 2022-10-24
+ **/
+public enum OrderTypeEnum implements IntegerEnum {
+ /**
+ * 状态 1.导入 2.刷单
+ */
+
+ IMPORT(1),
+ CLICK_FARMING(2);
+
+ private final Integer value;
+
+ private OrderTypeEnum(Integer value) {
+ this.value = value;
+ }
+
+
+ @Override
+ public Integer value() {
+ return this.value;
+ }
+
+ /**
+ * 判断是否存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean hasValue(Integer value) {
+ boolean hasVal = false;
+ if (getEnum(value) != null) {
+ hasVal = true;
+ }
+ return hasVal;
+ }
+
+ /**
+ * 判断是否不存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean notHasValue(Integer value) {
+ return !hasValue(value);
+ }
+
+ /**
+ * 获取指定值对应的枚举
+ *
+ * @param value
+ * @return
+ */
+ public static OrderTypeEnum getEnum(Integer value) {
+ if (value == null) {
+ return null;
+ }
+ for (OrderTypeEnum obj : EnumUtils.getEnumList(OrderTypeEnum.class)) {
+ if (obj.eqValue(value)) {
+ return obj;
+ }
+ }
+ return null;
+ }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/enums/ParamsTypeEnum.java b/wjcy-common/src/main/java/me/zhengjie/enums/ParamsTypeEnum.java
new file mode 100644
index 0000000..59a9f18
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/enums/ParamsTypeEnum.java
@@ -0,0 +1,75 @@
+package me.zhengjie.enums;
+
+import me.zhengjie.enums.interfaces.IntegerEnum;
+import org.apache.commons.lang3.EnumUtils;
+
+/**
+ *
+ * 参数类型类型 枚举
+ *
+ *
+ * @Author rch
+ * @Date 2022-07-09
+ **/
+public enum ParamsTypeEnum implements IntegerEnum {
+ /**
+ * 商品属性类型:1.关键词 2.链接
+ */
+
+ KEY_WORD(1),
+ LINK(2);
+
+ private final Integer value;
+
+ private ParamsTypeEnum(Integer value) {
+ this.value = value;
+ }
+
+
+ @Override
+ public Integer value() {
+ return this.value;
+ }
+
+ /**
+ * 判断是否存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean hasValue(Integer value) {
+ boolean hasVal = false;
+ if (getEnum(value) != null) {
+ hasVal = true;
+ }
+ return hasVal;
+ }
+
+ /**
+ * 判断是否不存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean notHasValue(Integer value) {
+ return !hasValue(value);
+ }
+
+ /**
+ * 获取指定值对应的枚举
+ *
+ * @param value
+ * @return
+ */
+ public static ParamsTypeEnum getEnum(Integer value) {
+ if (value == null) {
+ return null;
+ }
+ for (ParamsTypeEnum obj : EnumUtils.getEnumList(ParamsTypeEnum.class)) {
+ if (obj.eqValue(value)) {
+ return obj;
+ }
+ }
+ return null;
+ }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/enums/PlatTypeEnum.java b/wjcy-common/src/main/java/me/zhengjie/enums/PlatTypeEnum.java
new file mode 100644
index 0000000..3b96ba6
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/enums/PlatTypeEnum.java
@@ -0,0 +1,92 @@
+package me.zhengjie.enums;
+
+import org.apache.commons.lang3.EnumUtils;
+
+import java.util.Arrays;
+
+/**
+ *
+ * 平台类型 1.敦煌
+ *
+ *
+ * @Author rch
+ * @Date 2022-07-06
+ **/
+public enum PlatTypeEnum {
+
+ //平台类型 1.敦煌
+ DH(1, "敦煌"),
+ SMT(2, "速卖通"),
+ MB(3, "马帮");
+
+
+ private final Integer type;
+ private final String desc;
+
+ private PlatTypeEnum(Integer type, String desc) {
+ this.type = type;
+ this.desc = desc;
+ }
+
+ public static String getDescByType(Integer type) {
+ if (type == null) {
+ return "";
+ }
+ PlatTypeEnum[] enumAry = PlatTypeEnum.values();
+ for(int i = 0; i < Arrays.asList(enumAry).size(); i++){
+ if (enumAry[i].getType().equals(type)) {
+ return enumAry[i].getDesc();
+ }
+ }
+ return "";
+ }
+
+ public static Integer getValueByDesc(String desc) {
+ PlatTypeEnum[] enumAry = PlatTypeEnum.values();
+ for (PlatTypeEnum currencyTypeEnum : enumAry) {
+ if (currencyTypeEnum.getDesc().equals(desc)) {
+ return currencyTypeEnum.getType();
+ }
+ }
+ return null;
+ }
+
+ /**
+ * 获取指定值对应的枚举
+ *
+ * @param value
+ * @return
+ */
+ public static PlatTypeEnum getEnum(Integer value) {
+ if (value == null) {
+ return null;
+ }
+ for (PlatTypeEnum obj : EnumUtils.getEnumList(PlatTypeEnum.class)) {
+ if (obj.eqValue(value)) {
+ return obj;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * 值相等
+ *
+ * @param value
+ * @return
+ */
+ public boolean eqValue(Integer value) {
+ if (value != null && type.equals(value)) {
+ return true;
+ }
+ return false;
+ }
+
+ public Integer getType() {
+ return type;
+ }
+
+ public String getDesc() {
+ return desc;
+ }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/enums/RobotStatusEnum.java b/wjcy-common/src/main/java/me/zhengjie/enums/RobotStatusEnum.java
new file mode 100644
index 0000000..adcaa1c
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/enums/RobotStatusEnum.java
@@ -0,0 +1,77 @@
+package me.zhengjie.enums;
+
+import org.apache.commons.lang3.EnumUtils;
+
+/**
+ *
+ * 机器人状态 枚举
+ *
+ *
+ * @Author rch
+ * @Date 2022-07-09
+ **/
+public enum RobotStatusEnum{
+ /**
+ * 状态 connected:已连接 idle:空闲 running:运行中 allocated:已分配 abnormal:异常 offline:离线
+ */
+
+ CONNECTED("connected"),
+ IDLE("idle"),
+ RUNNING("running"),
+ ALLOCATED("allocated"),
+ ABNORMAL("abnormal"),
+ OFFLINE("offline");
+
+ private final String value;
+
+ private RobotStatusEnum(String value) {
+ this.value = value;
+ }
+
+
+ public String value() {
+ return this.value;
+ }
+
+ /**
+ * 判断是否存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean hasValue(String value) {
+ boolean hasVal = false;
+ if (getEnum(value) != null) {
+ hasVal = true;
+ }
+ return hasVal;
+ }
+
+ /**
+ * 判断是否不存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean notHasValue(String value) {
+ return !hasValue(value);
+ }
+
+ /**
+ * 获取指定值对应的枚举
+ *
+ * @param value
+ * @return
+ */
+ public static RobotStatusEnum getEnum(String value) {
+ if (value == null) {
+ return null;
+ }
+ for (RobotStatusEnum obj : EnumUtils.getEnumList(RobotStatusEnum.class)) {
+ if (obj.value().equals(value)) {
+ return obj;
+ }
+ }
+ return null;
+ }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/enums/TaskInfoEnum.java b/wjcy-common/src/main/java/me/zhengjie/enums/TaskInfoEnum.java
new file mode 100644
index 0000000..421bff1
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/enums/TaskInfoEnum.java
@@ -0,0 +1,54 @@
+package me.zhengjie.enums;
+
+import java.util.Arrays;
+
+/**
+ *
+ * Task 信息枚举 包含task基本信息
+ *
+ *
+ * @Author rch
+ * @Date 2022-08-01
+ **/
+public enum TaskInfoEnum {
+
+ // 1.Demo-Task
+ BOSS_TASK("bossTask", "run"),
+ CLICK_FARMING("clickFarmTask", "run"),
+ CLICK_FARMING_SUPPLE_MENY("clickFarmSuppleMentTask", "run"),
+ WELL_RECEIVED("wellReceivedTask", "run"),
+ BROWSE("browseTask", "run"),
+ DH_ADD_CAR_FARMING("dhAddCarTask", "run"),
+ DH_ADD_CAR_CATCH_ORDER("dhCatchOrderTask", "run"),
+ DH_WELL_RECEIVED("dhWellReceivedTask", "run");
+
+
+ private final String taskName;
+ private final String methodName;
+
+ private TaskInfoEnum(String taskName, String methodName) {
+ this.taskName = taskName;
+ this.methodName = methodName;
+ }
+
+ public static String getMethodNameByTaskName(String taskName) {
+ if (taskName == null) {
+ return "";
+ }
+ TaskInfoEnum[] enumAry = TaskInfoEnum.values();
+ for(int i = 0; i < Arrays.asList(enumAry).size(); i++){
+ if (enumAry[i].getTaskName().equals(taskName)) {
+ return enumAry[i].getMethodName();
+ }
+ }
+ return "";
+ }
+
+ public String getTaskName() {
+ return taskName;
+ }
+
+ public String getMethodName() {
+ return methodName;
+ }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/enums/TaskIsPauseEnum.java b/wjcy-common/src/main/java/me/zhengjie/enums/TaskIsPauseEnum.java
new file mode 100644
index 0000000..440f9f0
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/enums/TaskIsPauseEnum.java
@@ -0,0 +1,75 @@
+package me.zhengjie.enums;
+
+import me.zhengjie.enums.interfaces.IntegerEnum;
+import org.apache.commons.lang3.EnumUtils;
+
+/**
+ *
+ * 状态 1.暂停 2.启用
+ *
+ *
+ * @Author rch
+ * @Date 2022-10-06
+ **/
+public enum TaskIsPauseEnum implements IntegerEnum {
+ /**
+ * 类型 1.暂停 0.启用
+ */
+
+ IS_PAUSE(1),
+ NOT_PAUSE(0);
+
+ private final Integer value;
+
+ private TaskIsPauseEnum(Integer value) {
+ this.value = value;
+ }
+
+
+ @Override
+ public Integer value() {
+ return this.value;
+ }
+
+ /**
+ * 判断是否存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean hasValue(Integer value) {
+ boolean hasVal = false;
+ if (getEnum(value) != null) {
+ hasVal = true;
+ }
+ return hasVal;
+ }
+
+ /**
+ * 判断是否不存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean notHasValue(Integer value) {
+ return !hasValue(value);
+ }
+
+ /**
+ * 获取指定值对应的枚举
+ *
+ * @param value
+ * @return
+ */
+ public static TaskIsPauseEnum getEnum(Integer value) {
+ if (value == null) {
+ return null;
+ }
+ for (TaskIsPauseEnum obj : EnumUtils.getEnumList(TaskIsPauseEnum.class)) {
+ if (obj.eqValue(value)) {
+ return obj;
+ }
+ }
+ return null;
+ }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/enums/TaskTypeEnum.java b/wjcy-common/src/main/java/me/zhengjie/enums/TaskTypeEnum.java
new file mode 100644
index 0000000..6f25196
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/enums/TaskTypeEnum.java
@@ -0,0 +1,75 @@
+package me.zhengjie.enums;
+
+import me.zhengjie.enums.interfaces.IntegerEnum;
+import org.apache.commons.lang3.EnumUtils;
+
+/**
+ *
+ * 类型 1.普通 2.影刀
+ *
+ *
+ * @Author rch
+ * @Date 2022-07-20
+ **/
+public enum TaskTypeEnum implements IntegerEnum {
+ /**
+ * 类型 1.普通 2.影刀
+ */
+
+ ORDINARY(1),
+ SHADOW_KNIFE(2);
+
+ private final Integer value;
+
+ private TaskTypeEnum(Integer value) {
+ this.value = value;
+ }
+
+
+ @Override
+ public Integer value() {
+ return this.value;
+ }
+
+ /**
+ * 判断是否存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean hasValue(Integer value) {
+ boolean hasVal = false;
+ if (getEnum(value) != null) {
+ hasVal = true;
+ }
+ return hasVal;
+ }
+
+ /**
+ * 判断是否不存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean notHasValue(Integer value) {
+ return !hasValue(value);
+ }
+
+ /**
+ * 获取指定值对应的枚举
+ *
+ * @param value
+ * @return
+ */
+ public static TaskTypeEnum getEnum(Integer value) {
+ if (value == null) {
+ return null;
+ }
+ for (TaskTypeEnum obj : EnumUtils.getEnumList(TaskTypeEnum.class)) {
+ if (obj.eqValue(value)) {
+ return obj;
+ }
+ }
+ return null;
+ }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/enums/VpnDealerEnum.java b/wjcy-common/src/main/java/me/zhengjie/enums/VpnDealerEnum.java
new file mode 100644
index 0000000..b08953e
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/enums/VpnDealerEnum.java
@@ -0,0 +1,74 @@
+package me.zhengjie.enums;
+
+import me.zhengjie.enums.interfaces.IntegerEnum;
+import org.apache.commons.lang3.EnumUtils;
+
+/**
+ *
+ * VPN经销商枚举
+ *
+ *
+ * @Author zhw
+ * @Date 2022-07-18
+ **/
+public enum VpnDealerEnum implements IntegerEnum {
+ /**
+ * 状态:1.V2
+ */
+
+ V2(1);
+
+ private final Integer value;
+
+ private VpnDealerEnum(Integer value) {
+ this.value = value;
+ }
+
+
+ @Override
+ public Integer value() {
+ return this.value;
+ }
+
+ /**
+ * 判断是否存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean hasValue(Integer value) {
+ boolean hasVal = false;
+ if (getEnum(value) != null) {
+ hasVal = true;
+ }
+ return hasVal;
+ }
+
+ /**
+ * 判断是否不存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean notHasValue(Integer value) {
+ return !hasValue(value);
+ }
+
+ /**
+ * 获取指定值对应的枚举
+ *
+ * @param value
+ * @return
+ */
+ public static VpnDealerEnum getEnum(Integer value) {
+ if (value == null) {
+ return null;
+ }
+ for (VpnDealerEnum obj : EnumUtils.getEnumList(VpnDealerEnum.class)) {
+ if (obj.eqValue(value)) {
+ return obj;
+ }
+ }
+ return null;
+ }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/enums/VpnStatusEnum.java b/wjcy-common/src/main/java/me/zhengjie/enums/VpnStatusEnum.java
new file mode 100644
index 0000000..b246388
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/enums/VpnStatusEnum.java
@@ -0,0 +1,75 @@
+package me.zhengjie.enums;
+
+import me.zhengjie.enums.interfaces.IntegerEnum;
+import org.apache.commons.lang3.EnumUtils;
+
+/**
+ *
+ * VPN类状态枚举
+ *
+ *
+ * @Author zhw
+ * @Date 2022-07-18
+ **/
+public enum VpnStatusEnum implements IntegerEnum {
+ /**
+ * 状态:1.可用、2.禁用
+ */
+
+ AVAILABLE(1),
+ DISABLED(2);
+
+ private final Integer value;
+
+ private VpnStatusEnum(Integer value) {
+ this.value = value;
+ }
+
+
+ @Override
+ public Integer value() {
+ return this.value;
+ }
+
+ /**
+ * 判断是否存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean hasValue(Integer value) {
+ boolean hasVal = false;
+ if (getEnum(value) != null) {
+ hasVal = true;
+ }
+ return hasVal;
+ }
+
+ /**
+ * 判断是否不存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean notHasValue(Integer value) {
+ return !hasValue(value);
+ }
+
+ /**
+ * 获取指定值对应的枚举
+ *
+ * @param value
+ * @return
+ */
+ public static VpnStatusEnum getEnum(Integer value) {
+ if (value == null) {
+ return null;
+ }
+ for (VpnStatusEnum obj : EnumUtils.getEnumList(VpnStatusEnum.class)) {
+ if (obj.eqValue(value)) {
+ return obj;
+ }
+ }
+ return null;
+ }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/enums/VpnTypeEnum.java b/wjcy-common/src/main/java/me/zhengjie/enums/VpnTypeEnum.java
new file mode 100644
index 0000000..b52d540
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/enums/VpnTypeEnum.java
@@ -0,0 +1,74 @@
+package me.zhengjie.enums;
+
+import me.zhengjie.enums.interfaces.IntegerEnum;
+import org.apache.commons.lang3.EnumUtils;
+
+/**
+ *
+ * VPN类型枚举
+ *
+ *
+ * @Author zhw
+ * @Date 2022-07-18
+ **/
+public enum VpnTypeEnum implements IntegerEnum {
+ /**
+ * 状态:1.传统
+ */
+
+ TRADITION(1);
+
+ private final Integer value;
+
+ private VpnTypeEnum(Integer value) {
+ this.value = value;
+ }
+
+
+ @Override
+ public Integer value() {
+ return this.value;
+ }
+
+ /**
+ * 判断是否存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean hasValue(Integer value) {
+ boolean hasVal = false;
+ if (getEnum(value) != null) {
+ hasVal = true;
+ }
+ return hasVal;
+ }
+
+ /**
+ * 判断是否不存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean notHasValue(Integer value) {
+ return !hasValue(value);
+ }
+
+ /**
+ * 获取指定值对应的枚举
+ *
+ * @param value
+ * @return
+ */
+ public static VpnTypeEnum getEnum(Integer value) {
+ if (value == null) {
+ return null;
+ }
+ for (VpnTypeEnum obj : EnumUtils.getEnumList(VpnTypeEnum.class)) {
+ if (obj.eqValue(value)) {
+ return obj;
+ }
+ }
+ return null;
+ }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/enums/YesOrNoEnum.java b/wjcy-common/src/main/java/me/zhengjie/enums/YesOrNoEnum.java
new file mode 100644
index 0000000..5b58315
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/enums/YesOrNoEnum.java
@@ -0,0 +1,75 @@
+package me.zhengjie.enums;
+
+import me.zhengjie.enums.interfaces.IntegerEnum;
+import org.apache.commons.lang3.EnumUtils;
+
+/**
+ *
+ * Yes or No
+ *
+ *
+ * @Author xxs
+ * @Date 2021/9/26
+ **/
+public enum YesOrNoEnum implements IntegerEnum {
+ /**
+ * 类型型(1.YES 0.NO )
+ */
+
+ YES(1),
+ NO(0);
+
+ private final Integer value;
+
+ private YesOrNoEnum(Integer value) {
+ this.value = value;
+ }
+
+
+ @Override
+ public Integer value() {
+ return this.value;
+ }
+
+ /**
+ * 判断是否存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean hasValue(Integer value) {
+ boolean hasVal = false;
+ if (getEnum(value) != null) {
+ hasVal = true;
+ }
+ return hasVal;
+ }
+
+ /**
+ * 判断是否不存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean notHasValue(Integer value) {
+ return !hasValue(value);
+ }
+
+ /**
+ * 获取指定值对应的枚举
+ *
+ * @param value
+ * @return
+ */
+ public static YesOrNoEnum getEnum(Integer value) {
+ if (value == null) {
+ return null;
+ }
+ for (YesOrNoEnum obj : EnumUtils.getEnumList(YesOrNoEnum.class)) {
+ if (obj.eqValue(value)) {
+ return obj;
+ }
+ }
+ return null;
+ }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/enums/interfaces/IntegerEnum.java b/wjcy-common/src/main/java/me/zhengjie/enums/interfaces/IntegerEnum.java
new file mode 100644
index 0000000..f944411
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/enums/interfaces/IntegerEnum.java
@@ -0,0 +1,40 @@
+package me.zhengjie.enums.interfaces;
+
+/**
+ *
+ * Integer类型枚举
+ *
+ *
+ * @Author xx
+ * @Date 2021/7/22
+ **/
+public interface IntegerEnum {
+
+ /**值
+ * @return
+ */
+ Integer value();
+
+ /**
+ * 值相等
+ *
+ * @param value
+ * @return
+ */
+ default boolean eqValue(Integer value) {
+ if (value != null && value().equals(value)) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * 值不相等
+ *
+ * @param value
+ * @return
+ */
+ default boolean neValue(Integer value) {
+ return !eqValue(value);
+ }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/enums/interfaces/LongEnum.java b/wjcy-common/src/main/java/me/zhengjie/enums/interfaces/LongEnum.java
new file mode 100644
index 0000000..8b210fa
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/enums/interfaces/LongEnum.java
@@ -0,0 +1,40 @@
+package me.zhengjie.enums.interfaces;
+
+/**
+ *
+ * Long类型枚举
+ *
+ *
+ * @Author xx
+ * @Date 2021/7/22
+ **/
+public interface LongEnum {
+
+ /**值
+ * @return
+ */
+ Long value();
+
+ /**
+ * 值相等
+ *
+ * @param value
+ * @return
+ */
+ default boolean eqValue(Long value) {
+ if (value != null && value().equals(value)) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * 值不相等
+ *
+ * @param value
+ * @return
+ */
+ default boolean neValue(Long value) {
+ return !eqValue(value);
+ }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/enums/interfaces/MemberIsUsedEnum.java b/wjcy-common/src/main/java/me/zhengjie/enums/interfaces/MemberIsUsedEnum.java
new file mode 100644
index 0000000..e5992be
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/enums/interfaces/MemberIsUsedEnum.java
@@ -0,0 +1,71 @@
+package me.zhengjie.enums.interfaces;
+
+import org.apache.commons.lang3.EnumUtils;
+/**
+ *
+ * 用户是否使用过
+ *
+ *
+ * @Author xx
+ * @Date 2021/8/11
+ **/
+public enum MemberIsUsedEnum implements IntegerEnum {
+ /** 未使用 */
+ UN_USED(0),
+ /** 已使用*/
+ IS_USED(1);
+
+ private final Integer value;
+
+ private MemberIsUsedEnum(Integer value) {
+ this.value = value;
+ }
+
+ @Override
+ public Integer value() {
+ return this.value;
+ }
+
+ /**
+ * 判断是否存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean hasValue(Integer value) {
+ boolean hasVal = false;
+ if (getEnum(value) != null) {
+ hasVal = true;
+ }
+ return hasVal;
+ }
+
+ /**
+ * 判断是否不存在指定值
+ *
+ * @param value
+ * @return
+ */
+ public static boolean notHasValue(Integer value) {
+ return !hasValue(value);
+ }
+
+ /**
+ * 获取指定值对应的枚举
+ *
+ * @param value
+ * @return
+ */
+ public static MemberIsUsedEnum getEnum(Integer value) {
+ if (value == null) {
+ return null;
+ }
+ for (MemberIsUsedEnum obj : EnumUtils.getEnumList(MemberIsUsedEnum.class)) {
+ if (obj.eqValue(value)) {
+ return obj;
+ }
+ }
+ return null;
+ }
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/error/ErrorCodeEnum.java b/wjcy-common/src/main/java/me/zhengjie/error/ErrorCodeEnum.java
new file mode 100644
index 0000000..834a36e
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/error/ErrorCodeEnum.java
@@ -0,0 +1,143 @@
+package me.zhengjie.error;
+
+import cn.hutool.core.convert.Convert;
+import me.zhengjie.utils.PropertiesUtil;
+import me.zhengjie.utils.RequestHolder;
+
+/**
+ *
+ * 返回错误枚举类型
+ *
+ *
+ * @Author xx
+ * @Date 2021/7/19
+ **/
+public enum ErrorCodeEnum {
+ RETURN_SUCCESS(200, "响应成功"),
+ UNKNOWN_ERROR(2000,"服务器开小差了....,请稍后再试!"),
+ BAD_CREDENTIALS(2001,"坏的凭证"),
+ ENTITY_EXIST(2003,"信息重复添加"),
+ ENTITY_NOT_FOUND(2004,"数据不存在"),
+ METHOD_ARGUMENT_NOT_VALID(2005,"数据验证失败异常"),
+ VALIDATION_ERROR(2006,"参数验证失败"),
+ HANDLE_BIND_ERROR(2007,"参数绑定失败"),
+ MESSAGE_NOT_READABLE(2008,"参数解析失败"),
+ MISSING_REQUEST_HEADER(2009,"缺少请求头参数"),
+ NO_HANDLER_FOUND(2010,"Not Found"),
+ METHOD_NOT_SUPPORTED(2011,"不支持当前请求方法"),
+ MEDIA_TYPE_NOT_SUPPORTED(2012,"不支持当前媒体类型"),
+ MAX_UPLOAD_SIZE_EXCEEDED(2013,"文件上传-文件大小超过限制"),
+ NO_PERMISSION_FOR_THIS_OPERATION(1328, "暂无权限"),
+ UPLOAD_IMG_FORMAT_ERROR(2015,"上传图片格式错误"),
+ REQUEST_PARAMS_NULL_ERROR(2016,"请求参数空值异常,请检查后重试!"),
+ SERVER_DESERTION_ERROR(2017,"服务器开小差了....,请稍后再试!"),
+ FORM_SUBMISSION_REPETITION_ERROR(1360, "操作过于频繁,请稍后再试"),
+ LOGIN_PWD_ERROR(2218, "密码错误!"),
+ BLOCKED_ACCOUNT_ERROR(2219, "多次输人错误的密码,账户已被冻结!"),
+ LOGIN_IP_FORMAT_ERROR(2220, "IP地址格式错误!"),
+ BLOCKED_LOGIN_IP_ERROR(2221, "非法IP!"),
+ ERROR_2222(2222, "验证码错误!"),
+ ERROR_2223(2223, "验证码不存在或已过期!"),
+
+ // 业务
+ // 买家
+ ERROR_NOT_FIND_BUYER_USER(3000, "买家信息不存在!"),
+ ERROR_EXIST_FIND_BUYER_USER(3001, "买家信息已存在!"),
+ ERROR_NOT_UPDATE_EXIST_ORDER_BUYER_USER(3002, "买家存在订单信息,不允许修改token和平台信息"),
+ ERROR_NOT_DEL_EXIST_ORDER_BUYER_USER(3003, "买家存在订单信息,不允许删除"),
+
+
+ // EXCEL
+ ERROR_NOT_FIND_EXCEL_USER(3100, "卖家信息不存在!"),
+
+
+ // 平台
+ ERROR_NOT_FIND_PLAT_USER(3200, "平台信息不存在!"),
+ ERROR_EXITS_COMPANY_INFO(3201,"该平台下存在公司,不允许删除!"),
+
+ // 公司
+ ERROR_NOT_FIND_COMPANY(3300, "公司信息不存在!"),
+ ERROR_EXITS_CT_ORDER_INFO(3201,"该公司下存在订单信息,不允许删除!"),
+
+ // 信用卡
+ ERROR_NOT_FIND_CARD_INFO(3300, "信用卡信息不存在,或者已删除或异常!"),
+ ERROR_NOT_FIND_CARD(3301, "信用卡信息不存在!"),
+
+ //VPN
+ ERROR_NOT_FIND_VPN(3300, "VPN信息不存在,或者已删除!"),
+
+ //影刀任务信息
+ ERROR_NOT_FIND_JOB(3400,"影刀任务信息不存在,或者已删除"),
+ ERROR_NOT_FIND_TASK(3401,"影刀应用信息异常, 请检查后重试!"),
+
+ //应用信息Apply
+ ERROR_NOT_FIND_APPLY(3500,"应用信息不存在,或者已删除"),
+
+ //影刀机器人信息 rebot
+ ERROR_NOT_FIND_REBOT(3600,"机器人信息不存在,或者已删除"),
+ ERROR_NOT_FIND_OR_OCCUPY(3601, "机器人不存在,或者已占用"),
+
+ // 影刀回调
+ ERROR_PARAM_NULL(3700, "影刀回调参数空值异常!"),
+ ERROR_CALLBACK_SIGN_NULL(3701, "影刀回调鉴权异常!"),
+
+
+ // 敦煌支付
+ ERROR_DH_PAY_NOT_FIND_OR_SUCCESS(3800,"敦煌支付信息不存在,或已删除!"),
+
+ // 刷单流程
+ ERROR_NOT_FIND_CLICKFARMING_INFO(3900, "刷单信息不存在!"),
+ ERROR_DEL_CLICKFARMING_INFO(3901, "只有待执行的刷单信息才允许删除!"),
+ ERROR_CLICKFARMING_NOT_TOBE(3902, "刷单信息非待执行状态,请检查后重新操作!"),
+ ERROR_CLICKFARMING_NOT_SUPPLEMENT(3903, "仅支付成功失败状态才允许补录!"),
+ ERROR_CLICK_ORDER_NOT_COMMENT(3904, "仅刷单成功状态,才拥有订单信息!"),
+
+ // 订单信息
+ ERROR_NOT_FIND_CLICK_ORDER_INFO(4100, "订单信息不存在"),
+ ERROR_NOT_NULL_ERP_AUTH_TOKEN(4101, "鉴权信息不能为空!"),
+ ERROR_ERP_AUTH_TOKEN(4102, "鉴权信息错误,请检查后重试!"),
+
+ // 应用
+ ERROR_NOT_REPEAT_ID(4200, "应用ID存在重复!"),
+ ERROR_NOT_FIND_METHOD_NAME(4201, "不存在对应方法名称!"),
+
+ // 浏览信息不存在
+ ERROR_NOT_FIND_BROWSE(4300, "浏览信息不存在!"),
+
+ // 敦煌加购
+ ERROR_ADD_CAR_KEY_NULL(4400, "关键词类型-商品关键词属性不能为空"),
+ ERROR_ADD_CAR_LINK_NULL(4401, "链接类型-商品关键词属性不能为空"),
+ ERROR_ADD_CAR_GOODS_NULL(4403, "商品属性不能为空"),
+ ERROR_NOT_FIND_ADD_CAR_INFO(4404, "敦煌加购信息不存在,或者已删除或异常!"),
+ ERROR_DEL_ADD_CAR_INFO(4405, "只有待执行的刷单信息才允许删除!"),
+ ERROR_NOT_EDIT_ADD_CAR_INFO(4406, "敦煌加购信息仅带执行才允许修改!"),
+ ERROR_NOT_WELL_RECEIVED_ADD_CAR_INFO(4407, "敦煌加购信息仅抓单成功才允许评论!");
+
+ private int code;
+
+ private String desc;
+ /** 初始化 */
+ ErrorCodeEnum(int code, String desc) {
+ this.code = code;
+ this.desc = desc;
+ }
+ /** 获取错误状态码 */
+ public int getCode() {
+ return code;
+ }
+ /** 设置错误状态码 */
+ public void setCode(int code) {
+ this.code = code;
+ }
+ /** 获取错误描述 */
+ public String getDesc() {
+// String language = RequestHolder.getLanguage();
+// String message = Convert.toStr(PropertiesUtil.getByCode(code, language), desc);
+ return desc;
+ }
+ /** 设置错误描述 */
+ public void setDesc(String desc) {
+ this.desc = desc;
+ }
+
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/exception/BadConfigurationException.java b/wjcy-common/src/main/java/me/zhengjie/exception/BadConfigurationException.java
new file mode 100644
index 0000000..ede3691
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/exception/BadConfigurationException.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright 2019-2020 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.exception;
+
+/**
+ * 统一关于错误配置信息 异常
+ *
+ * @author: liaojinlong
+ * @date: 2020/6/10 18:06
+ */
+public class BadConfigurationException extends RuntimeException {
+ /**
+ * Constructs a new runtime exception with {@code null} as its
+ * detail message. The cause is not initialized, and may subsequently be
+ * initialized by a call to {@link #initCause}.
+ */
+ public BadConfigurationException() {
+ super();
+ }
+
+ /**
+ * Constructs a new runtime exception with the specified detail message.
+ * The cause is not initialized, and may subsequently be initialized by a
+ * call to {@link #initCause}.
+ *
+ * @param message the detail message. The detail message is saved for
+ * later retrieval by the {@link #getMessage()} method.
+ */
+ public BadConfigurationException(String message) {
+ super(message);
+ }
+
+ /**
+ * Constructs a new runtime exception with the specified detail message and
+ * cause. Note that the detail message associated with
+ * {@code cause} is not automatically incorporated in
+ * this runtime exception's detail message.
+ *
+ * @param message the detail message (which is saved for later retrieval
+ * by the {@link #getMessage()} method).
+ * @param cause the cause (which is saved for later retrieval by the
+ * {@link #getCause()} method). (A {@code null} value is
+ * permitted, and indicates that the cause is nonexistent or
+ * unknown.)
+ * @since 1.4
+ */
+ public BadConfigurationException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ /**
+ * Constructs a new runtime exception with the specified cause and a
+ * detail message of {@code (cause==null ? null : cause.toString())}
+ * (which typically contains the class and detail message of
+ * {@code cause}). This constructor is useful for runtime exceptions
+ * that are little more than wrappers for other throwables.
+ *
+ * @param cause the cause (which is saved for later retrieval by the
+ * {@link #getCause()} method). (A {@code null} value is
+ * permitted, and indicates that the cause is nonexistent or
+ * unknown.)
+ * @since 1.4
+ */
+ public BadConfigurationException(Throwable cause) {
+ super(cause);
+ }
+
+ /**
+ * Constructs a new runtime exception with the specified detail
+ * message, cause, suppression enabled or disabled, and writable
+ * stack trace enabled or disabled.
+ *
+ * @param message the detail message.
+ * @param cause the cause. (A {@code null} value is permitted,
+ * and indicates that the cause is nonexistent or unknown.)
+ * @param enableSuppression whether or not suppression is enabled
+ * or disabled
+ * @param writableStackTrace whether or not the stack trace should
+ * be writable
+ * @since 1.7
+ */
+ protected BadConfigurationException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
+ super(message, cause, enableSuppression, writableStackTrace);
+ }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/exception/BadRequestException.java b/wjcy-common/src/main/java/me/zhengjie/exception/BadRequestException.java
new file mode 100644
index 0000000..3501adc
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/exception/BadRequestException.java
@@ -0,0 +1,50 @@
+/*
+ * 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.exception;
+
+import lombok.Getter;
+import me.zhengjie.error.ErrorCodeEnum;
+import org.springframework.http.HttpStatus;
+import static org.springframework.http.HttpStatus.BAD_REQUEST;
+
+/**
+ * @author Zheng Jie
+ * @date 2018-11-23
+ * 统一异常处理
+ */
+@Getter
+public class BadRequestException extends RuntimeException{
+
+
+ private Integer status = BAD_REQUEST.value();
+
+ public BadRequestException(String msg){
+ super(msg);
+ }
+
+ public BadRequestException(HttpStatus status,String msg){
+ super(msg);
+ this.status = status.value();
+ }
+ public BadRequestException(Integer status,String msg){
+ super(msg);
+ this.status = status;
+ }
+ public BadRequestException(ErrorCodeEnum errorCodeEnum){
+ super(errorCodeEnum.getDesc());
+ this.status = errorCodeEnum.getCode();
+ }
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/exception/EntityExistException.java b/wjcy-common/src/main/java/me/zhengjie/exception/EntityExistException.java
new file mode 100644
index 0000000..03f9bf2
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/exception/EntityExistException.java
@@ -0,0 +1,34 @@
+/*
+ * 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.exception;
+
+import org.springframework.util.StringUtils;
+
+/**
+ * @author Zheng Jie
+ * @date 2018-11-23
+ */
+public class EntityExistException extends RuntimeException {
+
+ public EntityExistException(Class clazz, String field, String val) {
+ super(EntityExistException.generateMessage(clazz.getSimpleName(), field, val));
+ }
+
+ private static String generateMessage(String entity, String field, String val) {
+ return StringUtils.capitalize(entity)
+ + " with " + field + " "+ val + " existed";
+ }
+}
\ No newline at end of file
diff --git a/wjcy-common/src/main/java/me/zhengjie/exception/EntityNotFoundException.java b/wjcy-common/src/main/java/me/zhengjie/exception/EntityNotFoundException.java
new file mode 100644
index 0000000..bcdc956
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/exception/EntityNotFoundException.java
@@ -0,0 +1,34 @@
+/*
+ * 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.exception;
+
+import org.springframework.util.StringUtils;
+
+/**
+ * @author Zheng Jie
+ * @date 2018-11-23
+ */
+public class EntityNotFoundException extends RuntimeException {
+
+ public EntityNotFoundException(Class clazz, String field, String val) {
+ super(EntityNotFoundException.generateMessage(clazz.getSimpleName(), field, val));
+ }
+
+ private static String generateMessage(String entity, String field, String val) {
+ return StringUtils.capitalize(entity)
+ + " with " + field + " "+ val + " does not exist";
+ }
+}
\ No newline at end of file
diff --git a/wjcy-common/src/main/java/me/zhengjie/exception/handler/ApiError.java b/wjcy-common/src/main/java/me/zhengjie/exception/handler/ApiError.java
new file mode 100644
index 0000000..5112730
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/exception/handler/ApiError.java
@@ -0,0 +1,52 @@
+/*
+ * 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.exception.handler;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import java.time.LocalDateTime;
+
+/**
+ * @author Zheng Jie
+ * @date 2018-11-23
+ */
+@Data
+class ApiError {
+
+ private Integer status = 400;
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime timestamp;
+ private String message;
+
+ private ApiError() {
+ timestamp = LocalDateTime.now();
+ }
+
+ public static ApiError error(String message){
+ ApiError apiError = new ApiError();
+ apiError.setMessage(message);
+ return apiError;
+ }
+
+ public static ApiError error(Integer status, String message){
+ ApiError apiError = new ApiError();
+ apiError.setStatus(status);
+ apiError.setMessage(message);
+ return apiError;
+ }
+}
+
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/exception/handler/GlobalExceptionHandler.java b/wjcy-common/src/main/java/me/zhengjie/exception/handler/GlobalExceptionHandler.java
new file mode 100644
index 0000000..4561bae
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/exception/handler/GlobalExceptionHandler.java
@@ -0,0 +1,197 @@
+/*
+ * 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.exception.handler;
+
+import cn.hutool.core.util.ObjectUtil;
+import lombok.extern.slf4j.Slf4j;
+import me.zhengjie.dto.Dto;
+import me.zhengjie.exception.BadRequestException;
+import me.zhengjie.exception.EntityExistException;
+import me.zhengjie.exception.EntityNotFoundException;
+import me.zhengjie.utils.ThrowableUtil;
+import org.springframework.http.converter.HttpMessageNotReadableException;
+import org.springframework.security.access.AccessDeniedException;
+import org.springframework.security.authentication.BadCredentialsException;
+import org.springframework.validation.BindException;
+import org.springframework.validation.FieldError;
+import org.springframework.validation.ObjectError;
+import org.springframework.web.HttpMediaTypeNotSupportedException;
+import org.springframework.web.HttpRequestMethodNotSupportedException;
+import org.springframework.web.bind.MethodArgumentNotValidException;
+import org.springframework.web.bind.MissingRequestHeaderException;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+import org.springframework.web.multipart.MaxUploadSizeExceededException;
+import org.springframework.web.servlet.NoHandlerFoundException;
+
+import javax.annotation.Resource;
+import javax.validation.ValidationException;
+import java.util.List;
+
+import static me.zhengjie.error.ErrorCodeEnum.*;
+import static me.zhengjie.error.ErrorCodeEnum.MAX_UPLOAD_SIZE_EXCEEDED;
+
+/**
+ * @author Zheng Jie
+ * @date 2018-11-23
+ */
+@Slf4j
+@RestControllerAdvice
+public class GlobalExceptionHandler {
+
+ /**
+ * 不允许访问的异常
+ */
+ @ExceptionHandler(AccessDeniedException.class)
+ public Dto accessDeniedException(Throwable e) {
+ // 打印堆栈信息
+ log.error(NO_PERMISSION_FOR_THIS_OPERATION.getCode()+ThrowableUtil.getStackTrace(e));
+ return Dto.getInstance(NO_PERMISSION_FOR_THIS_OPERATION);
+ }
+
+ /**
+ * 处理所有不可知的异常
+ */
+ @ExceptionHandler(Throwable.class)
+ public Dto handleException(Throwable e) {
+ // 打印堆栈信息
+ log.error(UNKNOWN_ERROR.getCode()+ThrowableUtil.getStackTrace(e));
+ return Dto.getInstance(UNKNOWN_ERROR);
+ }
+
+ /**
+ * BadCredentialsException
+ */
+ @ExceptionHandler(BadCredentialsException.class)
+ public Dto badCredentialsException(BadCredentialsException e) {
+ // 打印堆栈信息
+ log.error(BAD_CREDENTIALS.getCode()+ThrowableUtil.getStackTrace(e));
+ return Dto.getInstance(BAD_CREDENTIALS);
+ }
+
+ /**
+ * 处理自定义异常
+ */
+ @ExceptionHandler(value = BadRequestException.class)
+ public Dto badRequestException(BadRequestException e) {
+ // 打印堆栈信息
+ log.error(e.getStatus()+ThrowableUtil.getStackTrace(e));
+ Dto dto = Dto.returnResult(false);
+ dto.setCode(e.getStatus());
+ dto.setMessage(e.getMessage());
+ return dto;
+ }
+
+ /**
+ * 处理 EntityExist
+ */
+ @ExceptionHandler(value = EntityExistException.class)
+ public Dto entityExistException(EntityExistException e) {
+ // 打印堆栈信息
+ log.error(ENTITY_EXIST.getCode()+ThrowableUtil.getStackTrace(e));
+ return Dto.getInstance(ENTITY_EXIST);
+ }
+
+ /**
+ * 处理 EntityNotFound
+ */
+ @ExceptionHandler(value = EntityNotFoundException.class)
+ public Dto entityNotFoundException(EntityNotFoundException e) {
+ // 打印堆栈信息
+ log.error(ENTITY_NOT_FOUND.getCode()+ThrowableUtil.getStackTrace(e));
+ return Dto.getInstance(ENTITY_NOT_FOUND);
+ }
+
+ /**
+ * 处理所有接口数据验证异常
+ */
+ @ExceptionHandler(MethodArgumentNotValidException.class)
+ public Dto handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
+ // 打印堆栈信息
+ log.error(ThrowableUtil.getStackTrace(e));
+ StringBuffer sbf = new StringBuffer();
+ List allErrors = e.getBindingResult().getAllErrors();
+ for (ObjectError allError : allErrors) {
+ if (allError instanceof FieldError) {
+ FieldError fieldError = (FieldError)allError;
+ sbf.append("["+fieldError.getField() + ":" + fieldError.getDefaultMessage() + "] ");
+ }
+ }
+ Dto dto = Dto.getInstance(METHOD_ARGUMENT_NOT_VALID);
+ if (ObjectUtil.isNotEmpty(sbf)) {
+ dto.setMessage(sbf.toString());
+ }
+ return dto;
+ }
+
+ @ExceptionHandler(ValidationException.class)
+ @ResponseBody
+ public Dto handleValidationException(ValidationException e) {
+ log.error(VALIDATION_ERROR.getCode()+ThrowableUtil.getStackTrace(e));
+ return Dto.getInstance(VALIDATION_ERROR);
+ }
+
+ @ExceptionHandler(BindException.class)
+ @ResponseBody
+ public Dto handleBindException(BindException e) {
+ log.error(HANDLE_BIND_ERROR.getCode()+ThrowableUtil.getStackTrace(e));
+ return Dto.getInstance(HANDLE_BIND_ERROR);
+ }
+
+ @ExceptionHandler(HttpMessageNotReadableException.class)
+ @ResponseBody
+ public Dto handleHttpMessageNotReadableException(HttpMessageNotReadableException e) {
+ log.error(MESSAGE_NOT_READABLE.getCode()+ThrowableUtil.getStackTrace(e));
+ return Dto.getInstance(MESSAGE_NOT_READABLE);
+ }
+
+ @ExceptionHandler(MissingRequestHeaderException.class)
+ @ResponseBody
+ public Dto missingRequestHeaderException(MissingRequestHeaderException e) {
+ log.error(MISSING_REQUEST_HEADER.getCode()+ThrowableUtil.getStackTrace(e));
+ return Dto.getInstance(MISSING_REQUEST_HEADER);
+ }
+
+ @ExceptionHandler(NoHandlerFoundException.class)
+ @ResponseBody
+ public Dto noHandlerFoundException(NoHandlerFoundException e) {
+ log.error(NO_HANDLER_FOUND.getCode()+ThrowableUtil.getStackTrace(e));
+ return Dto.getInstance(NO_HANDLER_FOUND);
+ }
+
+ @ExceptionHandler(HttpRequestMethodNotSupportedException.class)
+ @ResponseBody
+ public Dto handleHttpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException e) {
+ log.error(METHOD_NOT_SUPPORTED.getCode()+ThrowableUtil.getStackTrace(e));
+ return Dto.getInstance(METHOD_NOT_SUPPORTED);
+ }
+
+ @ExceptionHandler(HttpMediaTypeNotSupportedException.class)
+ @ResponseBody
+ public Dto handleHttpMediaTypeNotSupportedException(HttpMediaTypeNotSupportedException e) {
+ log.error(MEDIA_TYPE_NOT_SUPPORTED.getCode()+ThrowableUtil.getStackTrace(e));
+ return Dto.getInstance(MEDIA_TYPE_NOT_SUPPORTED);
+ }
+
+ @ExceptionHandler(value = MaxUploadSizeExceededException.class)
+ @ResponseBody
+ public Dto maxUploadSizeExceededException(MaxUploadSizeExceededException e) {
+ log.error(MAX_UPLOAD_SIZE_EXCEEDED.getCode()+ThrowableUtil.getStackTrace(e));
+ return Dto.getInstance(MAX_UPLOAD_SIZE_EXCEEDED);
+ }
+
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/mybatis/LambdaQueryWrapperImpl.java b/wjcy-common/src/main/java/me/zhengjie/mybatis/LambdaQueryWrapperImpl.java
new file mode 100644
index 0000000..d1911cb
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/mybatis/LambdaQueryWrapperImpl.java
@@ -0,0 +1,29 @@
+package me.zhengjie.mybatis;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+
+/*
+ *
+ * @Description
+ * @Date 2021/12/6
+ * @Author zeng
+ */
+public class LambdaQueryWrapperImpl extends LambdaQueryWrapper {
+
+ private String name;
+
+ @Override
+ public String getCustomSqlSegment() {
+ String customSqlSegment = super.getCustomSqlSegment();
+ if (ObjectUtil.isNotEmpty(name)) {
+ customSqlSegment = customSqlSegment.replaceAll("ew.", name + ".");
+ }
+ return customSqlSegment;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/service/CtApplyService.java b/wjcy-common/src/main/java/me/zhengjie/service/CtApplyService.java
new file mode 100644
index 0000000..c67a12d
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/service/CtApplyService.java
@@ -0,0 +1,42 @@
+package me.zhengjie.service;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import me.zhengjie.entity.CtApply;
+import me.zhengjie.service.vo.CtApplyListVO;
+import me.zhengjie.utils.PageUtils;
+
+import java.util.List;
+
+/**
+ * 影刀应用信息(CtApply)表服务接口
+ *
+ * @author rch
+ * @since 2022-07-23
+ */
+public interface CtApplyService extends IService {
+
+ /**
+ * 分页查询
+ * @param page
+ * @param ew
+ * @return PageUtils
+ */
+ PageUtils searchPageList(IPage page, Wrapper ew);
+
+ /**
+ * 查询所有应用信息
+ * @return LIST
+ */
+ List getAllApplyName();
+
+ /**
+ * 根据方法应用对应的TaskName和Method查询应用信息
+ * @param taskName
+ * @param method
+ * @return
+ */
+ CtApply getApplyByTaskAndMethod(String taskName, String method);
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/service/CtBrowseService.java b/wjcy-common/src/main/java/me/zhengjie/service/CtBrowseService.java
new file mode 100644
index 0000000..b0b8401
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/service/CtBrowseService.java
@@ -0,0 +1,41 @@
+package me.zhengjie.service;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import me.zhengjie.entity.CtBrowse;
+import me.zhengjie.service.vo.CtBrowseDetailVO;
+import me.zhengjie.service.vo.CtBrowseListVO;
+import me.zhengjie.utils.PageUtils;
+
+/**
+ * 浏览收藏(CtBrowse)表服务接口
+ *
+ * @author rch
+ * @since 2022-11-04 09:45:32
+ */
+public interface CtBrowseService extends IService {
+
+ /**
+ * 分页查询
+ * @param page
+ * @param ew
+ * @return
+ */
+ PageUtils searchPageList(IPage page, Wrapper ew);
+
+ /**
+ * 获取好评刷单信息-加锁
+ * @param id
+ * @return
+ */
+ CtBrowse getByIdLock(Long id);
+
+ /**
+ * 根据id获取详情
+ * @param id
+ * @return
+ */
+ CtBrowseDetailVO getBrowseDetailById(Long id);
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/service/CtBuyerService.java b/wjcy-common/src/main/java/me/zhengjie/service/CtBuyerService.java
new file mode 100644
index 0000000..b6c71d9
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/service/CtBuyerService.java
@@ -0,0 +1,50 @@
+package me.zhengjie.service;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import me.zhengjie.entity.CtBuyer;
+import me.zhengjie.service.vo.CtBuyerDetailVO;
+import me.zhengjie.service.vo.CtBuyerListVO;
+import me.zhengjie.utils.PageUtils;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 买家表(CtBuyer)表服务接口
+ *
+ * @author rch
+ * @since 2022-06-22
+ */
+public interface CtBuyerService extends IService {
+
+ /**
+ * 分页查询买家信息
+ * @param page
+ * @param ew
+ * @return
+ */
+ PageUtils searchPageList(IPage page, Wrapper ew);
+
+ /**
+ * 根据Id获取详情信息
+ * @param id
+ * @return
+ */
+ CtBuyerDetailVO getDetailById(Long id);
+
+ List getAllAccount();
+
+ String getPwdByName(String name);
+
+ CtBuyer getBuyerOccupyStatusLock(String buyerName);
+
+ /**
+ * 根据买家账号 返回存在的买家信息
+ * @param buyerAccountList
+ * @return
+ */
+ Map getBuyerList(List buyerAccountList);
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/service/CtCardService.java b/wjcy-common/src/main/java/me/zhengjie/service/CtCardService.java
new file mode 100644
index 0000000..6727e2e
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/service/CtCardService.java
@@ -0,0 +1,26 @@
+package me.zhengjie.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import me.zhengjie.entity.CtCard;
+import me.zhengjie.entity.CtCardInfo;
+
+import java.util.List;
+
+/**
+ * 信用卡信息(CtCard)表服务接口
+ *
+ * @author rch
+ * @since 2022-07-07
+ */
+public interface CtCardService extends IService {
+
+ List getNumberList();
+
+ /**
+ * 根据信用卡号查询信用卡信息
+ * @param number
+ * @return ctCardInfo(id,number)
+ */
+ List getCardInfoByNumber(List number);
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/service/CtClickFarmingService.java b/wjcy-common/src/main/java/me/zhengjie/service/CtClickFarmingService.java
new file mode 100644
index 0000000..f88d31f
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/service/CtClickFarmingService.java
@@ -0,0 +1,36 @@
+package me.zhengjie.service;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+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 me.zhengjie.utils.PageUtils;
+
+import java.util.List;
+
+/**
+ * 刷单Excel信息(CtClickFarming)表服务接口
+ *
+ * @author rch
+ * @since 2022-08-16
+ */
+public interface CtClickFarmingService extends IService {
+
+ PageUtils searchPageList(IPage page, Wrapper ew);
+
+ CtClickFarming getByIdLock(Long id);
+
+ CtClickFarmEditDetailVO getEditDetailById(Long id);
+
+ CtClickFarmingDetailVO getDetailById(Long id);
+
+ List ruleGetCtBuyer(String buyerAccount, String country, String shopName);
+
+ CtClickFarmYdParams getCtClickFarmYdParams(Long valueOf);
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/service/CtClickOrderService.java b/wjcy-common/src/main/java/me/zhengjie/service/CtClickOrderService.java
new file mode 100644
index 0000000..30b471c
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/service/CtClickOrderService.java
@@ -0,0 +1,65 @@
+package me.zhengjie.service;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import me.zhengjie.entity.CtClickFarmingOrderInfo;
+import me.zhengjie.entity.CtClickOrder;
+import me.zhengjie.service.vo.CtClickOrderDetailVO;
+import me.zhengjie.service.vo.CtClickOrderListVO;
+import me.zhengjie.utils.PageUtils;
+
+import java.util.List;
+
+/**
+ * 刷单-订单信息(CtClickOrder)表服务接口
+ *
+ * @author rch
+ * @since 2022-09-14
+ */
+public interface CtClickOrderService extends IService {
+
+ /**
+ * 返回实际存在的订单id
+ * @param importOrderIdList
+ * @return
+ */
+ List getOrderId(List importOrderIdList);
+
+ /**
+ * 分页查询
+ * @param page
+ * @param ew
+ * @return
+ */
+ PageUtils searchPageList(IPage page, Wrapper ew);
+
+ /**
+ * 手动补录刷单信息对应的订单信息
+ * @param clickFarmingId
+ * @param ctClickOrder
+ */
+ Boolean supplement(Long clickFarmingId, CtClickOrder ctClickOrder);
+
+ /**
+ * 根据订单id 获取刷单订单详情信息
+ * @param orderId
+ * @return
+ */
+ CtClickFarmingOrderInfo getClickFarmOrderById(Long orderId);
+
+ /**
+ * 悲观锁根据id获取刷单订单信息
+ * @param valueOf
+ * @return
+ */
+ CtClickOrder getByIdLock(Long valueOf);
+
+ /**
+ * 根据订单Id获取订单详情
+ * @param id
+ * @return
+ */
+ CtClickOrderDetailVO getClickOrderDetailById(Long id);
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/service/CtCompanyService.java b/wjcy-common/src/main/java/me/zhengjie/service/CtCompanyService.java
new file mode 100644
index 0000000..10d4c04
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/service/CtCompanyService.java
@@ -0,0 +1,34 @@
+package me.zhengjie.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import me.zhengjie.entity.CtCompany;
+import me.zhengjie.entity.CtCompanyInfo;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 公司信息(CtCompany)表服务接口
+ *
+ * @author makejava
+ * @since 2022-06-23 10:37:44
+ */
+public interface CtCompanyService extends IService {
+
+ /**
+ * 根据公司名字 获取公司信息
+ * @param name
+ * @return
+ */
+ List getByNmae(List name);
+
+ List getCompanyList();
+
+ /**
+ * 根据名称返回存在的公司信息 Map形式 key:id value:公司名称
+ * @param platNameList
+ * @return
+ */
+ Map getNameList(List platNameList);
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/service/CtDhPayService.java b/wjcy-common/src/main/java/me/zhengjie/service/CtDhPayService.java
new file mode 100644
index 0000000..22612f4
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/service/CtDhPayService.java
@@ -0,0 +1,29 @@
+package me.zhengjie.service;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import me.zhengjie.entity.CtDhPay;
+import me.zhengjie.service.vo.CtDhPayListVO;
+import me.zhengjie.utils.PageUtils;
+
+/**
+ * 平台信息(CtDyPay)表服务接口
+ *
+ * @author rch
+ * @since 2022-07-28
+ */
+public interface CtDhPayService extends IService {
+
+ PageUtils searchPageList(IPage page, Wrapper ew);
+
+ void toPay();
+
+ /**
+ * 调用支付接口
+ * @param ctDhPay
+ * @return
+ */
+ public Boolean payOrderApi(CtDhPay ctDhPay);
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/service/CtExcelImportInfoService.java b/wjcy-common/src/main/java/me/zhengjie/service/CtExcelImportInfoService.java
new file mode 100644
index 0000000..9f2ba5a
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/service/CtExcelImportInfoService.java
@@ -0,0 +1,23 @@
+package me.zhengjie.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import me.zhengjie.entity.CtExcelImportInfo;
+
+import java.io.IOException;
+
+/**
+ * Excel导入信息(CtExcelImportInfo)表服务接口
+ *
+ * @author rch
+ * @since 2022-06-23
+ */
+public interface CtExcelImportInfoService extends IService {
+
+ /**
+ * Excel 数据导入Mysql
+ *
+ * TODO 先做一版批量导入的,如果导入过程错误先不考虑
+ */
+ void importExcel() throws IOException;
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/service/CtExcelService.java b/wjcy-common/src/main/java/me/zhengjie/service/CtExcelService.java
new file mode 100644
index 0000000..a3d470b
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/service/CtExcelService.java
@@ -0,0 +1,15 @@
+package me.zhengjie.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import me.zhengjie.entity.CtExcel;
+
+/**
+ * Excel 导入信息(CtExcel)表服务接口
+ *
+ * @author makejava
+ * @since 2022-06-23 10:37:44
+ */
+public interface CtExcelService extends IService {
+
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/service/CtOrderService.java b/wjcy-common/src/main/java/me/zhengjie/service/CtOrderService.java
new file mode 100644
index 0000000..0bba1ec
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/service/CtOrderService.java
@@ -0,0 +1,31 @@
+package me.zhengjie.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import me.zhengjie.entity.CtExcelImportInfo;
+import me.zhengjie.entity.CtOrder;
+import org.springframework.stereotype.Service;
+
+/**
+ * (CtOrder)表服务接口
+ *
+ * @author rch
+ * @since 2022-07-01
+ */
+@Service
+public interface CtOrderService extends IService {
+
+ /**
+ * Excel 数据转换存储到订单表里 Order 一对多
+ */
+ void excelToOrder();
+
+ Boolean buyOrderApi(CtExcelImportInfo ctExcelImportInfo);
+
+ /**
+ * 订单支付
+ */
+ void toPay();
+
+ Boolean payOrderApi(CtOrder ctOrder);
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/service/CtPlatformService.java b/wjcy-common/src/main/java/me/zhengjie/service/CtPlatformService.java
new file mode 100644
index 0000000..37611dd
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/service/CtPlatformService.java
@@ -0,0 +1,24 @@
+package me.zhengjie.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import me.zhengjie.entity.CtPlatform;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 平台信息(CtPlatform)表服务接口
+ *
+ * @author makejava
+ * @since 2022-06-23 10:37:44
+ */
+public interface CtPlatformService extends IService {
+
+ /**
+ * 返回存在的对应名称的平台信息名称
+ * @param platNameList
+ * @return
+ */
+ Map getNameList(List platNameList);
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/service/CtRebotService.java b/wjcy-common/src/main/java/me/zhengjie/service/CtRebotService.java
new file mode 100644
index 0000000..b784caf
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/service/CtRebotService.java
@@ -0,0 +1,63 @@
+package me.zhengjie.service;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import me.zhengjie.dto.Dto;
+import me.zhengjie.entity.CtRebot;
+import me.zhengjie.service.vo.CtRebotListVO;
+import me.zhengjie.utils.PageUtils;
+import org.springframework.data.convert.JodaTimeConverters;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 影刀设备-机器人信息(CtRebot)表服务接口
+ *
+ * @author rch
+ * @since 2022-07-23
+ */
+public interface CtRebotService extends IService {
+
+ CtRebot getByAccountNameLock(String accountName);
+
+ /**
+ * 分页查询 影刀机器人信息
+ * @param page
+ * @param wr
+ * @return PageUtils
+ */
+ PageUtils searchPageList(IPage page, Wrapper wr);
+
+ /**
+ * excel导入机器人信息
+ * @param file
+ * @param response
+ * @return Dto
+ */
+ Dto importRebot(MultipartFile file, HttpServletResponse response) throws Exception;
+
+ /**
+ * 获取所有机器人名称
+ * @return LIST
+ */
+ List getAccountNameList();
+
+ /**
+ * 获取所有uuid信息
+ * @return LIST
+ */
+ List getClientUuidList();
+
+ /**
+ * 根据id和老状态 修改新状态
+ * @param id
+ * @param newStatus
+ * @param oldStatus
+ * @return
+ */
+ Boolean updateNewStatusByOldStatus(Long id, Integer newStatus, Integer oldStatus);
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/service/CtResponseOrderAddressService.java b/wjcy-common/src/main/java/me/zhengjie/service/CtResponseOrderAddressService.java
new file mode 100644
index 0000000..c639064
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/service/CtResponseOrderAddressService.java
@@ -0,0 +1,17 @@
+package me.zhengjie.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import me.zhengjie.entity.CtResponseOrderAddress;
+import org.springframework.stereotype.Service;
+
+/**
+ * 下注成功订单响应收货地址信息(CtResponseOrderAddress)表服务接口
+ *
+ * @author rch
+ * @since 2022-07-01
+ */
+@Service
+public interface CtResponseOrderAddressService extends IService {
+
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/service/CtResponseOrderProductService.java b/wjcy-common/src/main/java/me/zhengjie/service/CtResponseOrderProductService.java
new file mode 100644
index 0000000..956fb20
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/service/CtResponseOrderProductService.java
@@ -0,0 +1,17 @@
+package me.zhengjie.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import me.zhengjie.entity.CtResponseOrderProduct;
+import org.springframework.stereotype.Service;
+
+/**
+ * 下单订单响应产品信息(CtResponseOrderProduct)表服务接口
+ *
+ * @author rch
+ * @since 2022-07-01
+ */
+@Service
+public interface CtResponseOrderProductService extends IService {
+
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/service/CtResponseOrderService.java b/wjcy-common/src/main/java/me/zhengjie/service/CtResponseOrderService.java
new file mode 100644
index 0000000..99d8a84
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/service/CtResponseOrderService.java
@@ -0,0 +1,17 @@
+package me.zhengjie.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import me.zhengjie.entity.CtResponseOrder;
+import org.springframework.stereotype.Service;
+
+/**
+ * 下单成功响应订单商品信息(CtResponseOrder)表服务接口
+ *
+ * @author rch
+ * @since 2022-07-01
+ */
+@Service
+public interface CtResponseOrderService extends IService {
+
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/service/CtVpnService.java b/wjcy-common/src/main/java/me/zhengjie/service/CtVpnService.java
new file mode 100644
index 0000000..d4327c2
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/service/CtVpnService.java
@@ -0,0 +1,24 @@
+package me.zhengjie.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import me.zhengjie.entity.CtVpn;
+import me.zhengjie.entity.CtVpnInfo;
+
+import java.util.List;
+
+/**
+ * VPN信息表(CtVpn)表服务接口
+ *
+ * @author rch
+ * @since 2022-07-07
+ */
+public interface CtVpnService extends IService {
+
+ List getIpList();
+
+ /**
+ * 根据ip地址查询vpn信息(id、ip地址)
+ */
+ List getVpnInfoByIp(List ipAddress);
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/service/DhAddCarOrderService.java b/wjcy-common/src/main/java/me/zhengjie/service/DhAddCarOrderService.java
new file mode 100644
index 0000000..861fc33
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/service/DhAddCarOrderService.java
@@ -0,0 +1,41 @@
+package me.zhengjie.service;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import me.zhengjie.entity.DhAddCarOrder;
+import me.zhengjie.service.vo.dhcarorder.DhAddCarOrderListVO;
+import me.zhengjie.service.vo.dhcarorder.DhCarOrderParamsVO;
+import me.zhengjie.utils.PageUtils;
+
+/**
+ * 敦煌-加购物车-订单(DhAddCarOrder)表服务接口
+ *
+ * @author rch
+ * @since 2022-11-17 09:11:59
+ */
+public interface DhAddCarOrderService extends IService {
+
+ /**
+ * 加锁获取敦煌购物车抓单信息
+ * @param valueOf
+ * @return
+ */
+ DhAddCarOrder getByIdLock(Long valueOf);
+
+ /**
+ * 分页查询
+ * @param page
+ * @param ew
+ * @return
+ */
+ PageUtils searchPageList(IPage page, Wrapper ew);
+
+ /**
+ * 获取敦煌加购-好评影刀参数
+ * @param valueOf
+ * @return
+ */
+ DhCarOrderParamsVO getYdParams(Long valueOf);
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/service/DhAddCarService.java b/wjcy-common/src/main/java/me/zhengjie/service/DhAddCarService.java
new file mode 100644
index 0000000..59c02b5
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/service/DhAddCarService.java
@@ -0,0 +1,49 @@
+package me.zhengjie.service;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import me.zhengjie.entity.DhAddCar;
+import me.zhengjie.service.vo.dhaddcar.DhAddCarVO;
+import me.zhengjie.service.vo.dhaddcar.DhAddCarListVO;
+import me.zhengjie.service.vo.dhaddcar.DhAddCarYdParamsVO;
+import me.zhengjie.utils.PageUtils;
+
+/**
+ * 敦煌加入购物车(DhAddCar)表服务接口
+ *
+ * @author makejava
+ * @since 2022-11-17 09:11:55
+ */
+public interface DhAddCarService extends IService {
+
+ /**
+ * 分页查询
+ * @param page
+ * @param ew
+ * @return
+ */
+ PageUtils searchPageList(IPage page, Wrapper ew);
+
+ /**
+ * 根据id获取加购信息
+ * @param id
+ * @return
+ */
+ DhAddCarVO getDetailById(Long id);
+
+ /**
+ * 根据id加悲观锁查询
+ * @param id
+ * @return
+ */
+ DhAddCar getByIdLock(Long id);
+
+ /**
+ * 拼接影刀参数
+ * @param id
+ * @return
+ */
+ DhAddCarYdParamsVO getAddCarYdParams(Long id);
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/service/DhCarGoodsService.java b/wjcy-common/src/main/java/me/zhengjie/service/DhCarGoodsService.java
new file mode 100644
index 0000000..7546ef4
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/service/DhCarGoodsService.java
@@ -0,0 +1,15 @@
+package me.zhengjie.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import me.zhengjie.entity.DhCarGoods;
+
+/**
+ * 敦煌-加入购物车商品信息(DhCarGoods)表服务接口
+ *
+ * @author makejava
+ * @since 2022-11-17 09:12:03
+ */
+public interface DhCarGoodsService extends IService {
+
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/service/FileUploadService.java b/wjcy-common/src/main/java/me/zhengjie/service/FileUploadService.java
new file mode 100644
index 0000000..e7af6ee
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/service/FileUploadService.java
@@ -0,0 +1,20 @@
+package me.zhengjie.service;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.List;
+
+/**
+ *
+ * 图片上传服务
+ *
+ *
+ * @Author xx
+ * @Date 2021/7/26
+ **/
+public interface FileUploadService {
+
+ List uploadify(HttpServletRequest request, HttpServletResponse response)
+ throws IOException;
+}
diff --git a/wjcy-common/src/main/java/me/zhengjie/service/LoginIpService.java b/wjcy-common/src/main/java/me/zhengjie/service/LoginIpService.java
new file mode 100644
index 0000000..a0bfcad
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/service/LoginIpService.java
@@ -0,0 +1,58 @@
+package me.zhengjie.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import me.zhengjie.entity.LoginIp;
+import me.zhengjie.utils.PageUtils;
+
+import java.util.List;
+
+/**
+ * (LoginIp)表服务接口
+ *
+ * @author zeng
+ * @since 2022-03-21 14:07:01
+ */
+public interface LoginIpService extends IService {
+
+ String LOGIN_IP_LIST = "LOGIN_IP_LIST";
+
+ /**
+ * 获取IP列表
+ * @author: zeng
+ * @param iPage
+ */
+ PageUtils getList(IPage iPage);
+
+ /**
+ * 新增
+ * @author: zeng
+ */
+ boolean addIp(LoginIp ip);
+
+ /**
+ * 查询所有有效白名单IP段
+ * @return
+ */
+ List getAll();
+
+ /**
+ * 编辑
+ * @author: zeng
+ */
+ boolean updateIp(LoginIp ip);
+
+ /**
+ * 删除
+ * @author: zeng
+ */
+ boolean deleteIp(Integer id);
+
+ /**
+ * 是否是白名单
+ * @author: zeng
+ */
+ boolean whiteListFlag(String ip);
+
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/service/SettingSiteService.java b/wjcy-common/src/main/java/me/zhengjie/service/SettingSiteService.java
new file mode 100644
index 0000000..a3a2097
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/service/SettingSiteService.java
@@ -0,0 +1,25 @@
+package me.zhengjie.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import me.zhengjie.entity.CtSettingSite;
+
+/**
+ * 站点配置(CtSettingSite)表服务接口
+ *
+ * @author xxs
+ * @since 2021-11-17
+ */
+public interface SettingSiteService extends IService {
+
+ String getValue(String key);
+
+ boolean saveOrUpdateByKey(String key, String value);
+
+ /**
+ * Google认证器开关
+ * @auth xxs
+ * @return
+ */
+ Boolean getGooleAuthSwitch();
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/service/SysQuartzLogService.java b/wjcy-common/src/main/java/me/zhengjie/service/SysQuartzLogService.java
new file mode 100644
index 0000000..0b56c21
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/service/SysQuartzLogService.java
@@ -0,0 +1,21 @@
+package me.zhengjie.service;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import me.zhengjie.entity.SysQuartzJob;
+import me.zhengjie.entity.SysQuartzLog;
+import me.zhengjie.service.vo.SysQuartzLogListVO;
+import me.zhengjie.utils.PageUtils;
+
+/**
+ * 定时任务(SysQuartzJob)表服务接口
+ *
+ * @author rch
+ * @since 2022-07-20
+ */
+public interface SysQuartzLogService extends IService {
+
+ PageUtils searchPageList(IPage page, Wrapper wrapper);
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/service/YdQuartzService.java b/wjcy-common/src/main/java/me/zhengjie/service/YdQuartzService.java
new file mode 100644
index 0000000..619bdf5
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/service/YdQuartzService.java
@@ -0,0 +1,74 @@
+package me.zhengjie.service;
+
+import me.zhengjie.entity.quartz.JobQueryByUuidReturn;
+import me.zhengjie.service.redission.LockCallBack;
+
+/**
+ * 影刀定时任务Service
+ *
+ * @author rch
+ * @since 2022-08-01
+ */
+public interface YdQuartzService{
+
+ Object executeOnLock(String lockKey, long time, long timeout, LockCallBack callBack) throws Exception;
+
+ public String exec(String str) throws Exception;
+
+
+ /**
+ * 刷单 任务执行逻辑
+ * @param str
+ * @return
+ * @throws Exception
+ */
+ public Boolean clickFarmExec(String str) throws Exception;
+
+ /**
+ * 敦煌加购 任务执行逻辑
+ * @param str
+ * @return
+ * @throws Exception
+ */
+ public Boolean addCarExec(String str) throws Exception;
+
+
+ /**
+ * 敦煌-加购-抓单
+ * @param str
+ * @return
+ * @throws Exception
+ */
+ public Boolean catchOrderExec(String str) throws Exception;
+
+ public JobQueryByUuidReturn queryJobUuid(String uuid, String accessKeyId, String accessKeySecret);
+
+ /**
+ * 刷单任务-补录(有订单信息-支付失败)
+ * @param str
+ * @return
+ */
+ Boolean clickFarmSuppleMentExec(String str) throws Exception;
+
+ /**
+ * 敦煌
+ * @param str
+ * @return
+ * @throws Exception
+ */
+ public Object dhWellReceivedExec(String str) throws Exception;
+ /**
+ * 好评
+ * @param str
+ * @return
+ */
+ Object wellReceivedExec(String str) throws Exception;
+
+ /**
+ * 浏览收藏
+ * @param str
+ * @return
+ */
+ Object browseTaskExec(String str) throws Exception;
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/service/impl/CtApplyServiceImpl.java b/wjcy-common/src/main/java/me/zhengjie/service/impl/CtApplyServiceImpl.java
new file mode 100644
index 0000000..c0b0190
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/service/impl/CtApplyServiceImpl.java
@@ -0,0 +1,44 @@
+package me.zhengjie.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import me.zhengjie.dao.CtApplyDao;
+import me.zhengjie.entity.CtApply;
+import me.zhengjie.service.CtApplyService;
+import me.zhengjie.service.vo.CtApplyListVO;
+import me.zhengjie.utils.PageUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 影刀应用信息(CtApply)表服务实现类
+ *
+ * @author rch
+ * @since 2022-07-23
+ */
+@Service
+public class CtApplyServiceImpl extends ServiceImpl implements CtApplyService {
+
+ @Resource
+ private CtApplyDao ctApplyDao;
+
+ @Override
+ public PageUtils searchPageList(IPage page, Wrapper ew) {
+ ctApplyDao.searchPageList(page, ew);
+ return new PageUtils<>(page.getTotal(),page.getRecords());
+ }
+
+ @Override
+ public List getAllApplyName() {
+ return ctApplyDao.getAllApplyName();
+ }
+
+ @Override
+ public CtApply getApplyByTaskAndMethod(String taskName, String method) {
+ return ctApplyDao.getApplyByTaskAndMethod(taskName, method);
+ }
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/service/impl/CtBrowseServiceImpl.java b/wjcy-common/src/main/java/me/zhengjie/service/impl/CtBrowseServiceImpl.java
new file mode 100644
index 0000000..2b7896d
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/service/impl/CtBrowseServiceImpl.java
@@ -0,0 +1,44 @@
+package me.zhengjie.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import me.zhengjie.dao.CtBrowseDao;
+import me.zhengjie.entity.CtBrowse;
+import me.zhengjie.service.CtBrowseService;
+import me.zhengjie.service.vo.CtBrowseDetailVO;
+import me.zhengjie.service.vo.CtBrowseListVO;
+import me.zhengjie.utils.PageUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+/**
+ * 浏览收藏(CtBrowse)表服务实现类
+ *
+ * @author rch
+ * @since 2022-11-04 09:45:33
+ */
+@Service
+public class CtBrowseServiceImpl extends ServiceImpl implements CtBrowseService {
+
+ @Resource
+ private CtBrowseDao ctBrowseDao;
+
+ @Override
+ public PageUtils searchPageList(IPage page, Wrapper ew) {
+ ctBrowseDao.searchPageList(page, ew);
+ return new PageUtils(page.getTotal(), page.getRecords());
+ }
+
+ @Override
+ public CtBrowse getByIdLock(Long id) {
+ return ctBrowseDao.getByIdLock(id);
+ }
+
+ @Override
+ public CtBrowseDetailVO getBrowseDetailById(Long id) {
+ return ctBrowseDao.getBrowseDetailById(id);
+ }
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/service/impl/CtBuyerServiceImpl.java b/wjcy-common/src/main/java/me/zhengjie/service/impl/CtBuyerServiceImpl.java
new file mode 100644
index 0000000..889a0ca
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/service/impl/CtBuyerServiceImpl.java
@@ -0,0 +1,69 @@
+package me.zhengjie.service.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import me.zhengjie.dao.CtBuyerDao;
+import me.zhengjie.entity.CtBuyer;
+import me.zhengjie.service.CtBuyerService;
+import me.zhengjie.service.vo.CtBuyerDetailVO;
+import me.zhengjie.service.vo.CtBuyerListVO;
+import me.zhengjie.utils.PageUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 买家表(CtBuyer)表服务实现类
+ *
+ * @author rch
+ * @since 2022-06-22
+ */
+@Service
+public class CtBuyerServiceImpl extends ServiceImpl implements CtBuyerService {
+
+ @Resource
+ private CtBuyerDao ctBuyerDao;
+
+ @Override
+ public PageUtils searchPageList(IPage page, Wrapper ew) {
+ ctBuyerDao.searchPageList(page, ew);
+ return new PageUtils(page.getTotal(), page.getRecords());
+ }
+
+ @Override
+ public CtBuyerDetailVO getDetailById(Long id) {
+ return ctBuyerDao.getDetailById(id);
+ }
+
+ @Override
+ public List getAllAccount(){ return ctBuyerDao.getAllAccount();}
+
+ @Override
+ public String getPwdByName(String name) {
+ return ctBuyerDao.getPwdByName(name);
+ }
+
+ @Override
+ public CtBuyer getBuyerOccupyStatusLock(String buyerName) {
+ return ctBuyerDao.getBuyerOccupyStatusLock(buyerName);
+ }
+
+ @Override
+ public Map getBuyerList(List buyerAccountList) {
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ queryWrapper.in("account", buyerAccountList);
+
+ List ctBuyerList = list(queryWrapper);
+ if (ObjectUtil.isNotEmpty(ctBuyerList)) {
+ return ctBuyerList.stream().collect(Collectors.toMap(CtBuyer::getAccount, CtBuyer->CtBuyer));
+ }
+ return null;
+ }
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/service/impl/CtCardServiceImpl.java b/wjcy-common/src/main/java/me/zhengjie/service/impl/CtCardServiceImpl.java
new file mode 100644
index 0000000..e36521c
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/service/impl/CtCardServiceImpl.java
@@ -0,0 +1,33 @@
+package me.zhengjie.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import me.zhengjie.dao.CtCardDao;
+import me.zhengjie.entity.CtCard;
+import me.zhengjie.entity.CtCardInfo;
+import me.zhengjie.service.CtCardService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 信用卡信息(CtCard)表服务实现类
+ *
+ * @author rch
+ * @since 2022-07-07
+ */
+@Service
+public class CtCardServiceImpl extends ServiceImpl implements CtCardService {
+
+ @Resource
+ private CtCardDao ctCardDao;
+
+ @Override
+ public List getNumberList() {
+ return ctCardDao.getNumberList();
+ }
+
+ @Override
+ public List getCardInfoByNumber(List number){ return ctCardDao.getCardInfoByNumber(number);}
+}
+
diff --git a/wjcy-common/src/main/java/me/zhengjie/service/impl/CtClickFarmingServiceImpl.java b/wjcy-common/src/main/java/me/zhengjie/service/impl/CtClickFarmingServiceImpl.java
new file mode 100644
index 0000000..ea01a9d
--- /dev/null
+++ b/wjcy-common/src/main/java/me/zhengjie/service/impl/CtClickFarmingServiceImpl.java
@@ -0,0 +1,62 @@
+package me.zhengjie.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import me.zhengjie.dao.CtClickFarmingDao;
+import me.zhengjie.entity.CtBuyerClickSuccess;
+import me.zhengjie.entity.CtClickFarmYdParams;
+import me.zhengjie.entity.CtClickFarming;
+import me.zhengjie.service.CtClickFarmingService;
+import me.zhengjie.service.vo.CtClickFarmEditDetailVO;
+import me.zhengjie.service.vo.CtClickFarmingDetailVO;
+import me.zhengjie.service.vo.CtClickFarmingVO;
+import me.zhengjie.utils.PageUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 刷单Excel信息(CtClickFarming)表服务实现类
+ *
+ * @author rch
+ * @since 2022-08-16
+ */
+@Service
+public class CtClickFarmingServiceImpl extends ServiceImpl implements CtClickFarmingService {
+
+ @Resource
+ private CtClickFarmingDao ctClickFarmingDao;
+ @Override
+ public PageUtils