提交 da2748df authored 作者: wangmenglong's avatar wangmenglong

首次提交

上级
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/
def git_url="https://gitlab.365jft.com/root/jy_jxjy.git"
def credentialsId_val="5a1987eb-5b29-4886-b6d5-fc8d7ba94bbe" //git凭据
def harbor_url="172.30.156.70:8081"
def harbor_pro_name="jy_jxjy" //harbor上的镜像仓库名
def harbor_auth="29244d80-2457-4753-9912-04bd9233569c" //harbor凭据
def project_version = "${project_version}".split(',') // 替换为要检查的属性名
def checkArray=new String[1]
def versionArray=new String[1]
def proStr = ''
def versionStr = ''
def tag= "latest" //版本
def operate = "${operate}"
def operateType= "service"
//k8s命名空间
def kube_space="odd-cloud"
//nacos命名空间
def nacos_space="jy-jxjy"
//nacos组
def nacos_group="jy-jxjy-group"
def part = "${part}"
def gray = "${gray}"
def proArray=["jxjy-system"]
echo '------------------------'+operate
if (operate == "release") {
node {
// 删除镜像版本 def response = sh returnStdout: true, script: 'curl -u admin:harbor12345 -X GET "http://192.168.0.247:8081/api/v2.0/projects/cm-crm-web/repositories/cm-crm-web/artifacts?page=1&page_size=1&with_tag=true&with_label=false&with_scan_overview=false&with_signature=false&with_immutable_status=false"'
// echo '-----------'+response
// def response = sh returnStdout: true, script: 'curl -u "admin:harbor12345" -X DELETE "http://192.168.0.247:8081/api/v2.0/projects/cm-crm/repositories/cm-crm-base"'
stage('pull code') {
checkout([$class: 'GitSCM', branches: [[name: '*/master']],
extensions: [], userRemoteConfigs: [[credentialsId: "${credentialsId_val}",
url: "${git_url}"]]])
def n=0
for(int i = 0;i < project_version.size(); i++){
if (i % 2 == 0){
checkArray[n] = project_version[i];
versionArray[n] = project_version[i+1];
n++
}
}
echo 'pull code over--------------------------------------------------------------------------------------------'+"${project_version}"
}
stage('build jar') {
// sh "mvn clean"
// sh "mvn install"
// sh "mvn install" //第一次要执行以下,要不找不到pom文件 这段代码一定不要删
sh "mvn -f jxjy-lib install"
for(int i = 0; i < checkArray.size(); i++){
if (checkArray[i]=="true"){
def pro = proArray[i]
def ver = versionArray[i]
sh "mvn -f ${pro} package"
proStr = proStr + pro
proStr = proStr + ','
versionStr = versionStr + ver
versionStr = versionStr + ','
}
}
proStr = proStr.substring(0 , proStr.size() -1 )
versionStr = versionStr.substring(0 , versionStr.size() - 1)
echo 'bulid jar over---------------------------------------------------------------------------------------------'
}
stage('build images') {
for(int i = 0; i < checkArray.size(); i++){
if (checkArray[i] == "true") {
def pro = proArray[i]
def version = versionArray[i]
sh "mvn -f ${pro} dockerfile:build"
def image_name="${pro}:${tag}"
sh "docker tag ${image_name} ${harbor_url}/${harbor_pro_name}/${pro}:${version}"
}
}
echo 'bulid images over-------------------------------------------------------------------------------------------------'
}
stage('push images') {
withCredentials([usernamePassword(credentialsId: "${harbor_auth}",
passwordVariable: 'pwd', usernameVariable: 'account')]) {
sh "docker login -u ${account} -p ${pwd} ${harbor_url}"
for(int i = 0;i < checkArray.size(); i++){
if (checkArray[i]=="true"){
def pro = proArray[i]
def version = versionArray[i]
sh "docker push ${harbor_url}/${harbor_pro_name}/${pro}:${version}"
}
}
}
echo 'push images over-------------------------------------------------------------------------------------------------'
}
stage('clean images') {
for(int i = 0;i < checkArray.size(); i++){
if (checkArray[i] == "true"){
def pro = proArray[i]
def version = versionArray[i]
sh "docker rmi ${pro}:${tag}"
sh "docker rmi ${harbor_url}/${harbor_pro_name}/${pro}:${version}"
}
}
echo 'clean images over-----------------------------------------------------------------------------------------------'
}
stage('remote deploy') {
echo 'proStr-----------------------------------------------------------------------------------------------'+"${proStr}"
echo 'versionStr-----------------------------------------------------------------------------------------------'+"${versionStr}"
echo 'operateType-----------------------------------------------------------------------------------------------'+"${operateType}"
sshPublisher(publishers: [sshPublisherDesc(configName: 'jft-m0',
transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "/opt/deploy/deploy.sh $proStr $versionStr $operateType $kube_space $harbor_pro_name $gray $part $nacos_space $nacos_group",
execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false,
patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')],
usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
echo 'deploy over--------------------------------------------------------------------------------------------------------'
}
}
}
if (operate == "delete") {
node{
stage('clean harbor'){
def n=0
for(int i = 0;i < project_version.size(); i++){
if (i % 2 == 0){
checkArray[n] = project_version[i];
versionArray[n] = project_version[i+1];
n++
}
}
for(int i = 0; i < checkArray.size(); i++){
if (checkArray[i]=="true"){
def pro = proArray[i]
def ver = versionArray[i]
echo '-------------------------------------------------------------pro===='+pro
def response = sh returnStdout: true, script: 'curl -u "admin:harbor12345" -X DELETE "http://172.30.156.70:8081/api/v2.0/projects/jy_jxjy/repositories/"'+"${pro}"
proStr = proStr + pro
proStr = proStr + ','
versionStr = versionStr + ver
versionStr = versionStr + ','
}
}
proStr = proStr.substring(0 , proStr.size() -1 )
versionStr = versionStr.substring(0 , versionStr.size() - 1)
echo 'clean kube--------------------------------------------------------------------------------------------------------'
}
stage('clean kube') {
sshPublisher(publishers: [sshPublisherDesc(configName: 'jft-m0',
transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "/opt/deploy/delete.sh $proStr $versionStr $operateType $kube_space $harbor_pro_name $gray $part $nacos_space $nacos_group",
execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false,
patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')],
usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
echo 'clean kube--------------------------------------------------------------------------------------------------------'
sleep(40)
}
stage('clean images jft-n0') {
sshPublisher(publishers: [sshPublisherDesc(configName: 'jft-n0',
transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "/opt/deploy/images-delete.sh $proStr $versionStr $harbor_pro_name",
execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false,
patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')],
usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
echo 'clean images jft-n0--------------------------------------------------------------------------------------------------------'
}
stage('clean images jft-n1') {
sshPublisher(publishers: [sshPublisherDesc(configName: 'jft-n1',
transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "/opt/deploy/images-delete.sh $proStr $versionStr $harbor_pro_name",
execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false,
patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')],
usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
echo 'clean images jft-n1--------------------------------------------------------------------------------------------------------'
}
stage('clean images jft-n2') {
sshPublisher(publishers: [sshPublisherDesc(configName: 'jft-n2',
transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "/opt/deploy/images-delete.sh $proStr $versionStr $harbor_pro_name",
execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false,
patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')],
usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
echo 'clean images jft-n2--------------------------------------------------------------------------------------------------------'
}
}
}
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/
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.jy.jxjy</groupId>
<artifactId>jxjy</artifactId>
<version>1.0</version>
</parent>
<groupId>com.jy.jxjy</groupId>
<artifactId>jxjy-lib</artifactId>
<version>1.0</version>
<name>jxjy-lib</name>
<description>lib</description>
<packaging>jar</packaging>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<scope>provided</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcpkix-jdk15on</artifactId>
<version>1.70</version>
</dependency>
</dependencies>
</project>
\ No newline at end of file
import java.util.ArrayList;
import java.util.List;
public class TestArrayList {
private static List<Integer> list = new ArrayList<>();
public static void main(String[] args) throws InterruptedException {
// for (int i = 0; i < 10; i++) {
testList();
// list.clear();
// }
}
private static void testList() throws InterruptedException {
Runnable runnable = () -> {
for (int i = 0; i < 10000; i++) {
list.add(i);
}
System.out.println(list.size());
};
Thread t1 = new Thread(runnable);
Thread t2 = new Thread(runnable);
Thread t3 = new Thread(runnable);
t1.start();
t2.start();
t3.start();
t1.join();
System.out.println("==========================1");
t2.join();
System.out.println("==========================2");
t3.join();
}
}
package base.controller;
import javax.servlet.http.HttpServletRequest;
/**
* web层通用数据处理
*
* @author ruoyi
*/
public class BaseController
{
public int pageNum ;
public int pageSize ;
public void PageInit(HttpServletRequest request) {
// 在这里处理请求参数
pageNum = request.getParameter("pageNum") != null ? Integer.parseInt(request.getParameter("pageNum")) : 1;
pageSize = request.getParameter("pageSize") != null ? Integer.parseInt(request.getParameter("pageSize")) : 10;
}
}
package base.result;
import enums.ExceptionCodeEnum;
public class BaseResult {
private Object data;
private boolean isSuccess = false;
private String status = "";
private String message = "";
private String code;
public BaseResult() {
}
public static BaseResult success(String code, Object data) {
BaseResult result = new BaseResult();
result.data = data;
result.code = code;
result.isSuccess = true;
result.status = "success";
return result;
}
public static BaseResult success(String code) {
BaseResult result = new BaseResult();
result.code = code;
result.isSuccess = true;
result.status = "success";
return result;
}
public static BaseResult success(Object data) {
BaseResult result = new BaseResult();
result.data = data;
result.code = "normal_001";
result.isSuccess = true;
result.status = "success";
return result;
}
public static BaseResult success() {
BaseResult result = new BaseResult();
result.code = "normal_001";
result.isSuccess = true;
result.status = "success";
return result;
}
public static BaseResult error(String code) {
BaseResult result = new BaseResult();
result.code = code;
result.isSuccess = false;
result.status = "error";
return result;
}
public static BaseResult error(String code,Object data) {
BaseResult result = new BaseResult();
result.code = code;
result.isSuccess = false;
result.status = "error";
result.data = data;
return result;
}
public static BaseResult error(ExceptionCodeEnum exceptionCodeEnum) {
BaseResult result = new BaseResult();
result.code = exceptionCodeEnum.getCode();
result.message = exceptionCodeEnum.getMessage();
result.isSuccess = false;
result.status = "error";
return result;
}
public Object getData() {
return this.data;
}
public boolean getIsSuccess() {
return this.isSuccess;
}
public String getStatus() {
return this.status;
}
public String getMessage() {
return this.message;
}
public String getCode() {
return this.code;
}
}
\ No newline at end of file
package data.parent;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import java.io.Serializable;
@Data
abstract public class IdentityObj implements Serializable {
private static final long serialVersionUID = 1L;
@TableId("id")
private String id;
@TableField(value = "del")
private Boolean del;
@TableField(value = "base_code")
private String baseCode;
@TableField(value = "create_time")
private String createTime;
@TableField(value = "update_time")
private String updateTime;
@TableField(value = "user_id")
private String userId;
@TableField(value = "user_name")
private String userName;
/**
* @description: 删除时间(如果数据使用过,执行删除操作时更新del=1和删除时间;如果未使用过,直接真删)
* @author: wangmenglong
* @date; 2023/12/8 10:20
**/
@TableField(value = "del_time")
private String delTime;
}
package data.parent;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import java.io.Serializable;
@Data
abstract public class NameObj extends IdentityObj implements Serializable {
private static final long serialVersionUID = 1L;
@TableField("name")
private String name;
}
package data.parent;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
@Data
abstract public class SimpleIdentityObj {
@TableId("id")
private String id;
@TableField(value = "base_code")
private String baseCode;
}
package data.parent;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
/**
* @author wangmenglong
* @description:
* @date 2023/12/28 14:22
*/
@Data
public class SimpleNameObj extends SimpleIdentityObj{
@TableField("name")
private String name;
}
package data.system;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import data.parent.IdentityObj;
import lombok.Data;
/**
* @author wangmenglong
* @description: 收藏记录
* @date 2023/12/11 10:50
*/
@Data
@TableName(value = "tb_collect")
public class Collect extends IdentityObj {
/**
* 人员id
**/
@TableField("person_id")
private String personId;
/**
* 招聘id
**/
@TableField("recruit_id")
private String recruitId;
}
package data.system;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import data.parent.IdentityObj;
import lombok.Data;
/**
* @author wangmenglong
* @description: 报名记录
* @date 2023/12/11 10:50
*/
@Data
@TableName(value = "tb_driver_school_record")
public class DriverSchoolRecord extends IdentityObj {
/**
* 人员id
**/
@TableField("person_id")
private String personId;
/**
* revisit已回访 new未回访
**/
@TableField("state")
private String state;
}
package data.system;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import data.parent.IdentityObj;
import lombok.Data;
/**
* @author wangmenglong
* @description: 经验描述
* @date 2023/12/11 10:50
*/
@Data
@TableName(value = "tb_experience")
public class Experience extends IdentityObj {
/**
* 经验描述
**/
@TableField("description")
private String description;
/**
* 经验描述
**/
@TableField("code")
private String code;
}
package data.system;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import data.parent.IdentityObj;
import lombok.Data;
/**
* @author wangmenglong
* @description: 报名记录
* @date 2023/12/11 10:50
*/
@Data
@TableName(value = "tb_higher_school_record")
public class HigherSchoolRecord extends IdentityObj {
/**
* 人员id
**/
@TableField("person_id")
private String personId;
/**
* revisit已回访 new未回访
**/
@TableField("state")
private String state;
}
package data.system;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import data.parent.NameObj;
import lombok.Data;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.List;
/**
* @author wangmenglong
* @description: 行业
* @date 2023/12/11 10:50
*/
@Data
@TableName(value = "tb_industry")
public class Industry extends NameObj implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 阿里行业编号
**/
@TableField("code")
private String code;
/**
* 阿里行业编号
**/
@TableField("parent_id")
private String parentId;
/**
* 阿里行业编号
**/
@TableField("`sort`")
private int sort;
/**
* 阿里行业编号
**/
@TableField(exist = false)
private List<Industry> chilList;
}
package data.system;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import data.parent.IdentityObj;
import data.parent.NameObj;
import lombok.Data;
/**
* @author wangmenglong
* @description: 消息内容
* @date 2023/12/11 10:50
*/
@Data
@TableName(value = "tb_message")
public class Message extends IdentityObj {
/**
* 标题
**/
@TableField("title")
private String title;
/**
* 内容
**/
@TableField("content")
private String content;
/**
* 内容
**/
@TableField("recruit_id")
private String recruitId;
/**
* start 开始发送 , end 发送结束不再定时任务
**/
@TableField("state")
private String state;
}
package data.system;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import data.parent.IdentityObj;
import lombok.Data;
/**
* @author wangmenglong
* @description: 消息内容
* @date 2023/12/11 10:50
*/
@Data
@TableName(value = "tb_message_record")
public class MessageRecord extends IdentityObj {
/**
* 标题
**/
@TableField("title")
private String title;
/**
* 内容
**/
@TableField("content")
private String content;
/**
* 内容
**/
@TableField("recruit_id")
private String recruitId;
/**
* 是否已读
**/
@TableField("is_read")
private Boolean isRead;
/**
* start 开始发送 , end 发送结束不再定时任务
**/
@TableField("personnel_id")
private String personnelId;
/**
* 岗位
**/
@TableField(exist = false)
private Recruit recruit;
}
package data.system;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import data.parent.IdentityObj;
import lombok.Data;
/**
* @author wangmenglong
* @description: 求职意向
* @date 2023/12/11 10:50
*/
@Data
@TableName(value = "tb_objective")
public class Objective extends IdentityObj {
/**
* 城市
**/
@TableField("city")
private String city;
/**
* 省
**/
@TableField("province")
private String province;
/**
* 区
**/
@TableField("region")
private String region;
/**
* 薪资要求-开始
**/
@TableField("salary_min")
private Integer salaryMin;
/**
* 薪资要求-结束
**/
@TableField("salary_max")
private Integer salaryMax;
/**
* 工作性质
**/
@TableField("work_type")
private String workType;
/**
* 人id
**/
@TableField("person_id")
private String personId;
/**
* 行业
**/
@TableField("industry_id")
private String industryId;
/**
* 行业
**/
@TableField("industry_name")
private String industryName;
/**
* 行业
**/
@TableField(exist = false)
private Person person;
}
package data.system;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import data.parent.IdentityObj;
import lombok.Data;
/**
* @author wangmenglong
* @description: 期望行业
* @date 2023/12/11 10:50
*/
@Data
@TableName(value = "tb_objective_industry")
public class ObjectiveIndustry extends IdentityObj {
/**
* 人员id
**/
@TableField("person_id")
private String personId;
/**
* 行业id
**/
@TableField("industry_id")
private String industryId;
/**
* 行业名
**/
@TableField(exist = false)
private String name;
}
package data.system;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import data.parent.NameObj;
import lombok.Data;
/**
* @author wangmenglong
* @description: 企业
* @date 2023/12/11 10:50
*/
@Data
@TableName(value = "tb_org")
public class Org extends NameObj {
/**
* logo
**/
@TableField("logo")
private String logo;
/**
* 邮政编号
**/
@TableField("region_code")
private String regionCode;
/**
* 地址
**/
@TableField("address")
private String address;
/**
* 详情
**/
@TableField("descr")
private String descr;
/**
* 省
**/
@TableField("province")
private String province;
/**
* 市
**/
@TableField("city")
private String city;
/**
* 区
**/
@TableField("region")
private String region;
}
package data.system;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import data.parent.NameObj;
import lombok.Data;
/**
* @author wangmenglong
* @description: 报名记录
* @date 2023/12/11 10:50
*/
@Data
@TableName(value = "tb_person")
public class Person extends NameObj {
/**
* 证件号码
**/
@TableField("id_no")
private String idNo;
/**
* 手机号
**/
@TableField("phone_number")
private String phoneNumber;
/**
* 报名时间
**/
@TableField("register_time")
private String registerTime;
/**
* 年龄
**/
@TableField("age")
private Integer age;
/**
* 性别
**/
@TableField("sex")
private Boolean sex;
/**
* 民族
**/
@TableField("nation")
private String nation;
/**
* 支付宝openid
**/
@TableField("open_id")
private String openId;
/**
* 招聘类型
**/
@TableField("recruit_type_id")
private String recruitTypeId;
/**
* 招聘类型
**/
@TableField("recruit_type")
private String recruitType;
/**
* 教育经历
**/
@TableField("educational_background")
private String educationalBackground;
/**
* 自我评价
**/
@TableField("self_evaluation")
private String selfEvaluation;
/**
* 工作经历
**/
@TableField("work_experience")
private String workExperience;
/**
* 报名状态
**/
@TableField(exist = false)
private String recordState;
/**
* 头像
**/
@TableField("header_url")
private String headerUrl;
}
package data.system;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import data.parent.IdentityObj;
import lombok.Data;
/**
* @author wangmenglong
* @description: 教育经历
* @date 2023/12/11 10:50
*/
@Data
@TableName(value = "tb_person_educational")
public class PersonEducational extends IdentityObj {
/**
* 学历id
**/
@TableField("qualification_id")
private String qualificationId;
/**
* 学历id
**/
@TableField("qualification")
private String qualification;
/**
* 学校
**/
@TableField("school")
private String school;
/**
* 学校id
**/
@TableField("school_id")
private String schoolId;
/**
* 专业
**/
@TableField("major")
private String major;
/**
* 开始时间
**/
@TableField("start_time")
private String startTime;
/**
* 结束时间
**/
@TableField("end_time")
private String endTime;
/**
* 人id
**/
@TableField("person_id")
private String personId;
}
package data.system;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import data.parent.IdentityObj;
import lombok.Data;
/**
* @author wangmenglong
* @description: 经验描述
* @date 2023/12/11 10:50
*/
@Data
@TableName(value = "tb_qualification")
public class Qualification extends IdentityObj {
/**
* 经验描述
**/
@TableField("name")
private String name;
/**
* 经验描述
**/
@TableField("code")
private String code;
}
package data.system;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import data.parent.NameObj;
import lombok.Data;
/**
* @author wangmenglong
* @description: 报名记录
* @date 2023/12/11 10:50
*/
@Data
@TableName(value = "tb_recruit")
public class Recruit extends NameObj {
/**
* 职位描述
**/
@TableField("details")
private String details;
/**
* 招聘类型
**/
@TableField("recruit_type_id")
private String recruitTypeId;
/**
* 招聘类型
**/
@TableField("recruit_type")
private String recruitType;
/**
* 经验要求
**/
@TableField("experience_id")
private String experienceId;
/**
* 经验要求
**/
@TableField("experience")
private String experience;
/**
* 学历要求
**/
@TableField("qualification_id")
private String qualificationId;
/**
* 学历要求
**/
@TableField("qualification")
private String qualification;
/**
* 学历要求
**/
@TableField("qualification_code")
private String qualificationCode;
/**
* 薪资范围开始
**/
@TableField("salary_min")
private Integer salaryMin;
/**
* 薪资范围结束
**/
@TableField("salary_max")
private Integer salaryMax;
/**
* 类型,day 日结 month 月
**/
@TableField("pay_times")
private String payTimes;
/**
* 关键词
**/
@TableField("tags")
private String tags;
/**
* 奖金绩效
**/
@TableField("bonus")
private String bonus;
/**
* 地址
**/
@TableField("address")
private String address;
/**
* 支付宝行业id
**/
@TableField("industry_id")
private String industryId;
/**
* 支付宝行业id
**/
@TableField("industry_name")
private String industryName;
/**
* 支付宝行业id
**/
@TableField("one_industry_name")
private String oneIndustryName;
/**
* 支付宝行业id
**/
@TableField("one_industry_id")
private String oneIndustryId;
/**
* 支付宝行业id
**/
@TableField("tow_industry_name")
private String towIndustryName;
/**
* 支付宝行业id
**/
@TableField("tow_industry_id")
private String towIndustryId;
/**
* 次数
**/
@TableField("times")
private Integer times;
/**
* 企业id
**/
@TableField("org_id")
private String orgId;
/**
* 企业名
**/
@TableField("org_name")
private String orgName;
/**
* 员工
**/
@TableField(exist = false)
private Person person;
/**
* 员工
**/
@TableField(exist = false)
private String personId;
/**
* 企业
**/
@TableField(exist = false)
private Org org;
/**
* 搜索的行业
**/
@TableField(exist = false)
private String selTitle;
/**
* 行业code
**/
@TableField("industry_code")
private String industryCode;
/**
* 开始时间
**/
@TableField("start_date")
private String startDate;
/**
* 结束时间
**/
@TableField("expired_date")
private String expiredDate;
/**
* 经验code
**/
@TableField("experience_code")
private String experienceCode;
/**
* up发布 down下架
**/
@TableField("status")
private String status;
/**
* 省
**/
@TableField("province")
private String province;
/**
* 市
**/
@TableField("city")
private String city;
/**
* 区
**/
@TableField("region")
private String region;
/**
* 员工证件号
**/
@TableField(exist = false)
private String personIdno;
/**
* 员工姓名
**/
@TableField(exist = false)
private String personName;
/**
* 报名时间
**/
@TableField(exist = false)
private String rtTime;
/**
* 状态
**/
@TableField(exist = false)
private String recordState;
/**
* id
**/
@TableField(exist = false)
private String recordId;
/**
* 是否上架过
**/
@TableField("launch")
private String launch;
}
package data.system;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import data.parent.NameObj;
import lombok.Data;
/**
* @author wangmenglong
* @description: 招聘类型
* @date 2023/12/11 10:50
*/
@Data
@TableName(value = "tb_recruit_type")
public class RecruitType extends NameObj {
/**
* 编号
**/
@TableField("code")
private String code;
}
package data.system;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import data.parent.NameObj;
import lombok.Data;
/**
* @author wangmenglong
* @description: 学校
* @date 2023/12/11 10:50
*/
@Data
@TableName(value = "tb_school")
public class School extends NameObj {
/**
* 地址
**/
@TableField("address")
private String address;
}
package data.system;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import data.parent.IdentityObj;
import lombok.Data;
/**
* @author wangmenglong
* @description: 报名记录
* @date 2023/12/11 10:50
*/
@Data
@TableName(value = "tb_sign_record")
public class SignRecord extends IdentityObj {
/**
* 人员id
**/
@TableField("person_id")
private String personId;
/**
* 招聘id
**/
@TableField("recruit_id")
private String recruitId;
/**
* state =
* 面试中: INTERVIEW
* 未录取: APPLY_FAILED
* 已录取: APPLY_SUCCESS
* 已入职: ON_BOARDING
* 邀请面试: INVITING_INTERVIEW
* 已投递:APPLYING
**/
@TableField("state")
private String state;
}
package data.system;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import data.parent.IdentityObj;
import lombok.Data;
/**
* @author wangmenglong
* @description: 工作经历
* @date 2023/12/11 10:50
*/
@Data
@TableName(value = "tb_work_experience")
public class WorkExperience extends IdentityObj {
/**
* 公司名
**/
@TableField("org_name")
private String orgName;
/**
* 职位
**/
@TableField("job")
private String job;
/**
* 开始时间
**/
@TableField("start_time")
private String startTime;
/**
* 结束时间
**/
@TableField("end_time")
private String endTime;
/**
* 支付宝行业id
**/
@TableField("industry_id")
private String industryId;
/**
* 支付宝行业
**/
@TableField("industry_name")
private String industryName;
/**
* 金额
**/
@TableField("money")
private String money;
/**
* 描述
**/
@TableField("descr")
private String descr;
/**
* 人id
**/
@TableField("person_id")
private String personId;
}
package data.user;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import data.parent.NameObj;
import lombok.Data;
import mongo.parent.MongoNameObj;
/**
* @author wangmenglong
* @description: 用户
* @date 2023/12/11 10:50
*/
@Data
@TableName(value = "tb_user")
public class User extends NameObj {
/**
* 用户名
**/
@TableField("account")
private String account;
/**
* 密码
**/
@TableField("password")
private String password;
/**
* 状态(normal 正常,disable停用)
**/
@TableField("state")
private String state;
/**
* 用户类型,普通(只能登录前端general),管理(前后端都可以登录admin),
**/
@TableField("type")
private String type;
}
package enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.HashMap;
import java.util.Map;
/**
* 异常码枚举
*/
@AllArgsConstructor
@Getter
public enum ExceptionCodeEnum {
NORMAL_001("normal_001", "保存成功"),
NORMAL_002("normal_002", "提交成功"),
ERROR_001("error_001", "保存失败"),
ERROR_002("error_002", "提交失败")
;
private static final Map<String, ExceptionCodeEnum> CACHE = new HashMap<>(ExceptionCodeEnum.values().length);
static {
for (ExceptionCodeEnum value : ExceptionCodeEnum.values()) {
CACHE.put(value.getCode(), value);
}
}
private final String code;
private final String message;
public static ExceptionCodeEnum getByCode(String code) {
return CACHE.get(code);
}
}
package mongo.collection;
/**
* 集合名称
*/
public class CollectionName {
/**
* 后台账号
*/
public static final String USER_ACCOUNT = "user";
/**
* 对话框
*/
public static final String DIALOGUE = "dialogue";
/**
* 内容
*/
public static final String CONTENT = "content";
/**
* 系统设置
*/
public static final String SYSTEM_CONFIG = "system_config";
/**
* 热词排行
*/
public static final String PROBLEM_TOP = "problem_top";
/**
* 热词排行
*/
public static final String PROBLEM_YEAR_TOP = "problem_year_top";
/**
* 热词排行
*/
public static final String PROBLEM_MONTH_TOP = "problem_month_top";
}
package mongo.parent;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.apache.commons.lang3.time.DateUtils;
import org.springframework.context.annotation.Primary;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
@Data
@Primary
abstract public class MongoIdentityObj {
private String id;
private Boolean del;
private String baseCode;
//@TableField(value = "createTime")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
private String userId;
private String userName;
/**
* @description: 删除时间(如果数据使用过,执行删除操作时更新del=1和删除时间;如果未使用过,直接真删)
* @author: wangmenglong
* @date; 2023/12/8 10:20
**/
private String delTime;
public MongoIdentityObj(){
this.del = false;
try {
//this.createTime = getMongoDate(new Date());
}catch (Exception e){
e.printStackTrace();
}
}
/**
* 计算得到MongoDB存储的日期,(默认情况下mongo中存储的是标准的时间,中国时间是东八区,存在mongo中少8小时,所以增加8小时)
* http://www.iteye.com/problems/88507
*
* @author: Gao Peng
* @date: 2016年5月4日 上午9:26:23
* @param: @param
* date
* @param: @return
* @return: Date
*/
public static Date getMongoDate(Date date) throws Exception{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar ca = Calendar.getInstance();
ca.setTime(date);
ca.add(Calendar.HOUR_OF_DAY, 8);
return DateUtils.parseDate(sdf.format(ca.getTime()));
}
}
package mongo.parent;
import lombok.Data;
@Data
abstract public class MongoNameObj extends MongoIdentityObj {
private String name;
}
package redis;
public class RedisKey {
/**
* 微信消息的token
*/
public static final String WX_MESSAGE_TOKEN = "jxjy:wx:message:token";
/**
* 订阅消息增加次数key
*/
public static final String TENCENT_MESSAGE_NUMBER = "jxjy:tencent:message:number";
/**
* @Author wangmenglong
* @Description 微信的token 微信官方7200秒失效 就服通系统保存6000秒
* @Date 2021/12/21
* @Param
* @return
**/
public static final String Wx_Token = "jxjy:token:weixin";
}
package util;
public class AppStartParam {
public static String getMqInstanceId(String[] args) {
String instanceId = "";
if (args.length >= 6) {
String param = args[6];
// String param = "--rocketmq.instance-id=MQ_INST_1776639105090731_BX4zKKfW%";
instanceId = param.substring(param.indexOf("=") + 1, param.length());
}
return instanceId;
}
// public static void main(String[] args) {
// System.setProperty("instanceId",getMqInstanceId());
// System.out.println(System.getProperty("instanceId"));
// }
}
package util;
import org.springframework.util.StringUtils;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @Author wangmenglong
* @Description 公共工具类
* @Date 2022/3/8 10:04
* @Version 1.0
*/
public class CommonUtils {
/**
* @Author wangmenglong
* @Description 去除字符串中的空格、回车、换行符、制表符
* @Date 2022/3/8 10:22
* @Param [str]
* @return java.lang.String
**/
public static String replaceBlank(String str) {
String dest = "";
if (!StringUtils.isEmpty(str)) {
Pattern p = Pattern.compile("\\s*|\t|\r|\n");
Matcher m = p.matcher(str);
dest = m.replaceAll("");
}
return dest;
}
/**
* @author: wangmenglong
* @date; 2024/1/9 15:26
* @description: 计算当前时间距离明天凌晨0时0分0秒的秒数
* @param: [currentDate]
* @return: java.lang.Integer
**/
public static Integer getRemainSecondsOneDay(Date currentDate) {
//使用plusDays加传入的时间加1天,将时分秒设置成0
LocalDateTime midnight = LocalDateTime.ofInstant(currentDate.toInstant(),
ZoneId.systemDefault()).plusDays(1).withHour(0).withMinute(0)
.withSecond(0).withNano(0);
LocalDateTime currentDateTime = LocalDateTime.ofInstant(currentDate.toInstant(),
ZoneId.systemDefault());
//使用ChronoUnit.SECONDS.between方法,传入两个LocalDateTime对象即可得到相差的秒数
long seconds = ChronoUnit.SECONDS.between(currentDateTime, midnight);
return (int) seconds;
}
/**
* @author: wangmenglong
* @date; 2024/3/8 14:42
* @description: 获取两个日期之间所有的日期yyyy-MM-dd
* @param: [startDate, endDate]
* @return: java.util.List<java.lang.String>
**/
public static List<String> getDateRange(String startDate, String endDate) {
List<String> dateRange = new ArrayList<>();
LocalDate startLocalDate = LocalDate.parse(startDate);
LocalDate endLocalDate = LocalDate.parse(endDate);
long daysBetween = ChronoUnit.DAYS.between(startLocalDate, endLocalDate);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
for (int i = 0; i <= daysBetween; i++) {
LocalDate currentDate = startLocalDate.plusDays(i);
String localDateNowStr = currentDate.format(formatter);
dateRange.add(localDateNowStr);
}
return dateRange;
}
/**
* @author: wangmenglong
* @date; 2024/3/8 14:42
* @description: 获取两个日期之间所有的月份yyyy-MM
* @param: [startDate, endDate]
* @return: java.util.List<java.lang.String>
**/
public static List<String> getMonthDateRange(String startDate, String endDate) {
List<String> dateRange = new ArrayList<>();
LocalDate startLocalDate = LocalDate.parse(startDate);
LocalDate endLocalDate = LocalDate.parse(endDate);
long monthsBetween = ChronoUnit.MONTHS.between(startLocalDate, endLocalDate);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
for (int i = 0; i <= monthsBetween; i++) {
LocalDate date = startLocalDate.plusMonths(i);
String localDateNowStr = date.format(formatter);
dateRange.add(localDateNowStr);
}
return dateRange;
}
/**
* @author: wangmenglong
* @date; 2024/5/15 18:13
* @description: 比较金额是否在区间范围内
* @param: [value, lower, upper]
* @return: boolean
**/
public static boolean isInRange(BigDecimal value, BigDecimal lower, BigDecimal upper) {
int lowerCompare = value.compareTo(lower);
int upperCompare = value.compareTo(upper);
return lowerCompare >= 0 && upperCompare <= 0;
}
}
package util;
import org.springframework.context.annotation.Configuration;
import java.util.HashMap;
import java.util.Map;
/**
* 常用配置
*/
public class ConfigCache {
/**
* 数值及状态名
*/
private static Map<Integer, String> valStateMap;
/**
* 状态名及数值
*/
private static Map<String, Integer> stateValMap;
private static ConfigCache instance;
private ConfigCache() {
valStateMap = new HashMap<>();
/**
* 招聘状态取值
* 报备report 1,状态:上车:bycar 2,到达:arrived 3,面试:interview 4,面试通过:interviewpass 5,入职:entry 6
*/
valStateMap.put(2, "bycar");
valStateMap.put(3, "arrived");
valStateMap.put(4, "interview");
valStateMap.put(5, "interviewpass");
valStateMap.put(6, "entry");
stateValMap = new HashMap<>();
stateValMap.put("bycar", 2);
stateValMap.put("arrived", 3);
stateValMap.put("interview", 4);
}
public static ConfigCache getInstance() {
if (instance == null) {
instance = new ConfigCache();
}
return instance;
}
public Map<Integer, String> getValStateMap() {
return valStateMap;
}
public Map<String, Integer> getstateValMap() {
return stateValMap;
}
}
package util;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Map;
import java.util.Objects;
import java.util.TreeMap;
/**
* @author yuetianwang
* @description 加密工具类
* @date 2021/8/4 18:38
*/
public class CryptoUtil {
public static final String SALT = "K2mQCycm";
/**
* 加盐签名
*
* @param map 签名的数据
* @return
*/
public static String SHA256(String slat, TreeMap<String, Object> map) {
StringBuilder sb = new StringBuilder();
map.forEach((k, v) -> {
sb.append(k).append("=").append("v");
sb.append("&");
});
if (sb.length() > 0) {
sb.deleteCharAt(sb.length() - 1);
}
sb.append(slat);
try {
MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
messageDigest.update(sb.toString().getBytes(StandardCharsets.UTF_8));
byte[] digest = messageDigest.digest();
return byte2Hex(digest);
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
}
/**
* 校验加盐签名
*
* @param map 签名的数据
* @param sign 比对的签名
* @return
*/
public static boolean SHA256Validate(String slat, TreeMap<String, Object> map, String sign) {
String otherSign = SHA256(slat, map);
return Objects.equals(sign, otherSign);
}
/**
* 将byte转为16进制
*
* @param bytes
* @return
*/
private static String byte2Hex(byte[] bytes) {
StringBuilder sb = new StringBuilder();
String temp = null;
for (int i = 0; i < bytes.length; i++) {
temp = Integer.toHexString(bytes[i] & 0xFF);
if (temp.length() == 1) {
//1得到一位的进行补0操作
sb.append("0");
}
sb.append(temp);
}
return sb.toString();
}
}
This source diff could not be displayed because it is too large. You can view the blob instead.
package util;
import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;
/**
* @Author wangmenglong
* @Description MD5加密
* @Date 2021/9/15 14:32
* @Version 1.0
*/
public class MD5Utils {
private static final String SALT = "junying";
/**
* 字符换MD5
* @param password
* @return
*/
public static String strToMd5(String password) {
if(StringUtils.isEmpty(password)){
return password;
}
password = SALT + password + SALT;
String md5Prd = DigestUtils.md5DigestAsHex(password.getBytes());
return md5Prd;
}
}
package util;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.UUID;
/**
* @Author zhangziyuan
* @Description
* @Date 2021/6/17
**/
public class MultipartFileToFile {
/**
* MultipartFile 转 File
*
* @param file
* @throws Exception
*/
public static File multipartFileToFile(MultipartFile file) throws Exception {
File toFile = null;
if (file.equals("") || file.getSize() <= 0) {
file = null;
} else {
// InputStream ins = null;
// ins = file.getInputStream();
String originalFilename = file.getOriginalFilename();
String[] filename = originalFilename.split("\\.");
toFile=File.createTempFile(filename[0] + UUID.randomUUID(), filename[1]);
file.transferTo(toFile);
//inputStreamToFile(ins, toFile);
// ins.close();
}
return toFile;
}
//获取流文件
private static void inputStreamToFile(InputStream ins, File file) {
try {
OutputStream os = new FileOutputStream(file);
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
os.write(buffer, 0, bytesRead);
}
os.close();
ins.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 删除本地临时文件
*
* @param file
*/
public static void delteTempFile(File file) {
if (file != null) {
// File del = new File(file.toURI());
// del.delete();
file.delete();
}
}
}
package util;
import java.util.Collections;
import java.util.List;
/**
* 分页类
*/
public class Paging {
/**
* 当前页码
*/
private int page;
/**
* 页码总数
*/
//private int total;
/**
* 数据行总数
*/
private int total;
/**
* 数据
*/
private List list;
private String code;
private Paging() {
}
public Paging(int count, List data) {
// this.page = page;
this.total = count;
this.list = data;
this.code = "0";
}
public static Paging error(String code) {
Paging paging = new Paging();
paging.setTotal(0);
paging.setList(Collections.emptyList());
paging.setCode(code);
return paging;
}
/**
* 当前页码
*
* @return the page
*/
public int getPage() {
return page;
}
/**
* 当前页码
*
* @param page the page to set
*/
public void setPage(int page) {
this.page = page;
}
/**
* 数据行总数
*
* @return the count
*/
public int getTotal() {
return total;
}
/**
* 数据行总数
*
* @param total the count to set
*/
public void setTotal(int total) {
this.total = total;
}
/**
* 数据
*
* @return the data
*/
public List getList() {
return list;
}
/**
* 数据
*
* @param list the data to set
*/
public void setList(List list) {
this.list = list;
}
/**
* @return the code
*/
public String getCode() {
return code;
}
/**
* @param code the code to set
*/
public void setCode(String code) {
this.code = code;
}
}
package util.excel;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.ss.usermodel.BuiltinFormats;
import org.apache.poi.ss.usermodel.DataFormatter;
import org.apache.poi.xssf.eventusermodel.XSSFReader;
import org.apache.poi.xssf.model.SharedStringsTable;
import org.apache.poi.xssf.model.StylesTable;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFRichTextString;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.helpers.XMLReaderFactory;
import java.io.File;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ExcelXlsxReader extends DefaultHandler {
/**
* 单元格中的数据可能的数据类型
*/
enum CellDataType {
BOOL, ERROR, FORMULA, INLINESTR, SSTINDEX, NUMBER, DATE, NULL
}
/**
* 共享字符串表
*/
private SharedStringsTable sst;
/**
* 上一次的索引值
*/
private String lastIndex;
/**
* 文件的绝对路径
*/
private String filePath = "";
/**
* 工作表索引
*/
private int sheetIndex = 0;
/**
* sheet名
*/
private String sheetName = "";
/**
* 总行数
*/
private int totalRows = 0;
/**
* 一行内cell集合
*/
private List<String> cellList = new ArrayList<String>();
/**
* 判断整行是否为空行的标记
*/
private boolean flag = false;
/**
* 当前行
*/
private int curRow = 1;
/**
* 当前列
*/
private int curCol = 0;
/**
* T元素标识
*/
private boolean isTElement;
/**
* 判断是否有V值
*/
private boolean isSroRow;
private String systag="";
/**
* 判断上一单元格是否为文本空单元格
*/
private boolean startElementFlag = true;
private boolean endElementFlag = false;
private boolean charactersFlag = false;
/**
* 异常信息,如果为空则表示没有异常
*/
private String exceptionMessage;
/**
* 单元格数据类型,默认为字符串类型
*/
private CellDataType nextDataType = CellDataType.SSTINDEX;
private final DataFormatter formatter = new DataFormatter();
/**
* 单元格日期格式的索引
*/
private short formatIndex;
/**
* 日期格式字符串
*/
private String formatString;
//定义前一个元素和当前元素的位置,用来计算其中空的单元格数量,如A6和A8等
private String prePreRef = "A", preRef = null, ref = null;
//定义该文档一行最大的单元格数,用来补全一行最后可能缺失的单元格
private String maxRef = null;
/**
* 单元格
*/
private StylesTable stylesTable;
//解析结果保存
private List<List<String>> container = new ArrayList<>();
public ExcelXlsxReader(){ }
public ExcelXlsxReader(StylesTable stylesTable, SharedStringsTable sst, List<List<String>> container ){
this.stylesTable = stylesTable;
this.sst = sst;
this.container = container;
}
/**
* 遍历工作簿中所有的电子表格
* 并缓存在mySheetList中
*
* @param filename
* @throws Exception
*/
public Map<String, List> process(String filename) throws Exception {
Map<String, List> map = new HashMap<>();
filePath = filename;
OPCPackage pkg = OPCPackage.open(filename);
XSSFReader xssfReader = new XSSFReader(pkg);
stylesTable = xssfReader.getStylesTable();
SharedStringsTable sst = xssfReader.getSharedStringsTable();
XMLReader parser = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");
this.sst = sst;
parser.setContentHandler(this);
XSSFReader.SheetIterator sheets = (XSSFReader.SheetIterator) xssfReader.getSheetsData();
while (sheets.hasNext()) { //遍历sheet
curRow = 1; //标记初始行为第一行
sheetIndex++;
InputStream sheet = sheets.next(); //sheets.next()和sheets.getSheetName()不能换位置,否则sheetName报错
//InputStream sheet = xssfReader.getSheet("rId1");
//sheetName = sheets.getSheetName();
InputSource sheetSource = new InputSource(sheet);
parser.parse(sheetSource); //解析excel的每条记录,在这个过程中startElement()、characters()、endElement()这三个函数会依次执行
map.put(String.valueOf(sheetIndex), container);
container = new ArrayList<>();
sheet.close();
}
return map; //返回该excel文件的总行数,不包括首列和空行
}
public Map<String, List<List<String>>> process(File file) throws Exception {
Map<String, List<List<String>>> map = new HashMap<>();
OPCPackage pkg = OPCPackage.open(file);
XSSFReader xssfReader = new XSSFReader(pkg);
stylesTable = xssfReader.getStylesTable();
SharedStringsTable sst = xssfReader.getSharedStringsTable();
XMLReader parser = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");
this.sst = sst;
parser.setContentHandler(this);
XSSFReader.SheetIterator sheets = (XSSFReader.SheetIterator) xssfReader.getSheetsData();
while (sheets.hasNext()) { //遍历sheet
curRow = 1; //标记初始行为第一行
sheetIndex++;
InputStream sheet = sheets.next(); //sheets.next()和sheets.getSheetName()不能换位置,否则sheetName报错
//InputStream sheet = xssfReader.getSheet("rId1");
//sheetName = sheets.getSheetName();
InputSource sheetSource = new InputSource(sheet);
parser.parse(sheetSource); //解析excel的每条记录,在这个过程中startElement()、characters()、endElement()这三个函数会依次执行
map.put(String.valueOf(sheetIndex), container);
container = new ArrayList<>();
sheet.close();
}
return map; //返回该excel文件的总行数,不包括首列和空行
}
/**
* 第一个执行
*
* @param uri
* @param localName
* @param name
* @param attributes
* @throws SAXException
*/
@Override
public void startElement(String uri, String localName, String name, Attributes attributes) throws SAXException {
//c => 单元格
// if(systag.equals("")){
// systag=name;
// }
if ("c".equals(name)) {
//前一个单元格的位置
if (preRef == null) {
preRef = attributes.getValue("r");
} else {
//中部文本空单元格标识 ‘endElementFlag’ 判断前一次是否为文本空字符串,true则表明不是文本空字符串,false表明是文本空字符串跳过把空字符串的位置赋予preRef
if (endElementFlag) {
preRef = ref;
}
}
//当前单元格的位置
ref = attributes.getValue("r");
//首部文本空单元格标识 ‘startElementFlag’ 判断前一次,即首部是否为文本空字符串,true则表明不是文本空字符串,false表明是文本空字符串, 且已知当前格,即第二格带“B”标志,则ref赋予preRef
if (!startElementFlag && !flag) { //上一个单元格为文本空单元格,执行下面的,使ref=preRef;flag为true表明该单元格之前有数据值,即该单元格不是首部空单元格,则跳过
// 这里只有上一个单元格为文本空单元格,且之前的几个单元格都没有值才会执行
preRef = ref;
}
//设定单元格类型
this.setNextDataType(attributes);
endElementFlag = false;
charactersFlag = false;
startElementFlag = false;
// if(name.equals(systag)){ //当前节点和上一个节点相同
// isSroRow=true;
// }
}
//当元素为t时
if ("t".equals(name)) {
isTElement = true;
} else {
isTElement = false;
}
//置空
lastIndex = "";
// systag=name;
}
/**
* 第二个执行
* 得到单元格对应的索引值或是内容值
* 如果单元格类型是字符串、INLINESTR、数字、日期,lastIndex则是索引值
* 如果单元格类型是布尔值、错误、公式,lastIndex则是内容值
*
* @param ch
* @param start
* @param length
* @throws SAXException
*/
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
startElementFlag = true;
charactersFlag = true;
lastIndex += new String(ch, start, length);
}
/**
* 第三个执行
*
* @param uri
* @param localName
* @param name
* @throws SAXException
*/
@Override
public void endElement(String uri, String localName, String name) throws SAXException {
//t元素也包含字符串
// if(isSroRow){
// cellList.add(curCol, "");
// curCol++;
// endElementFlag = true;
// isSroRow=false;
// }
if (isTElement) {//这个程序没经过
//将单元格内容加入rowlist中,在这之前先去掉字符串前后的空白符
String value = lastIndex.trim();
cellList.add(curCol, value);
endElementFlag = true;
curCol++;
isTElement = false;
//如果里面某个单元格含有值,则标识该行不为空行
if (value != null && !"".equals(value)) {
flag = true;
}
}
if ("v".equals(name)) {
//v => 单元格的值,如果单元格是字符串,则v标签的值为该字符串在SST中的索引
String value = this.getDataValue(lastIndex.trim(), "");//根据索引值获取对应的单元格值
int len = -1;
//补全单元格之间的空单元格
if (!ref.equals(preRef)) {
len = countNullCell(ref, preRef);
for (int i = 0; i < len; i++) {
cellList.add(curCol, "");
curCol++;
}
} else if (ref.equals(preRef) && !ref.startsWith("A")) { //ref等于preRef,且以B或者C...开头,表明首部为空格271 int len = countNullCell(ref, "A");
for (int i = 0; i <= len; i++) {
cellList.add(curCol, "");
curCol++;
}
}
cellList.add(curCol, value);
curCol++;
endElementFlag = true;
//如果里面某个单元格含有值,则标识该行不为空行
if (value != null && !"".equals(value)) {
flag = true;
}
} else {
//如果标签名称为row,这说明已到行尾,调用optRows()方法
if ("row".equals(name)) {
//默认第一行为表头,以该行单元格数目为最大数目
if (curRow == 1) {
maxRef = ref;
}
//补全一行尾部可能缺失的单元格
if (maxRef != null) {
int len = -1;
//前一单元格,true则不是文本空字符串,false则是文本空字符串
if (charactersFlag) {
if(ref!=null){
len = countNullCell(maxRef, ref);
}
} else {
if(preRef!=null) {
len = countNullCell(maxRef, preRef);
}
}
// if (charactersFlag) {
// len = countNullCell(maxRef, ref);
// } else {
// len = countNullCell(maxRef, preRef);
// }
for (int i = 0; i <= len; i++) {
cellList.add(curCol, "");
curCol++;
}
}
if (flag && curRow != 1) { //该行不为空行且该行不是第一行,则发送(第一行为列名,不需要)
// ReadExcel.sendRows(filePath, sheetName, sheetIndex, curRow, cellList);
totalRows++;
}
if(cellList.size()!=0){
if(flag){
container.add(cellList);
curRow++;
}
}
// cellList.clear();
cellList = new ArrayList<String>();
curRow++;
curCol = 0;
preRef = null;
prePreRef = null;
ref = null;
flag = false;
}
}
}
/**
* 处理数据类型
*
* @param attributes
*/
public void setNextDataType(Attributes attributes) {
nextDataType = CellDataType.NUMBER; //cellType为空,则表示该单元格类型为数字
formatIndex = -1;
formatString = null;
String cellType = attributes.getValue("t"); //单元格类型
String cellStyleStr = attributes.getValue("s"); //
String columnData = attributes.getValue("r"); //获取单元格的位置,如A1,B1
if ("b".equals(cellType)) { //处理布尔值
nextDataType = CellDataType.BOOL;
} else if ("e".equals(cellType)) { //处理错误
nextDataType = CellDataType.ERROR;
} else if ("inlineStr".equals(cellType)) {
nextDataType = CellDataType.INLINESTR;
} else if ("s".equals(cellType)) { //处理字符串
nextDataType = CellDataType.SSTINDEX;
} else if ("str".equals(cellType)) {
nextDataType = CellDataType.FORMULA;
}
if (cellStyleStr != null) { //处理日期
int styleIndex = Integer.parseInt(cellStyleStr);
XSSFCellStyle style = stylesTable.getStyleAt(styleIndex);
formatIndex = style.getDataFormat();
formatString = style.getDataFormatString();
if (formatString == null) {
nextDataType = CellDataType.NULL;
formatString = BuiltinFormats.getBuiltinFormat(formatIndex);
}else{
if (formatString.contains("m/d/yyyy") || formatString.contains("yyyy/mm/dd") || formatString.contains("yyyy/m/d")) {
nextDataType = CellDataType.DATE;
formatString = "yyyy-MM-dd";
}
}
}
}
/**
* 对解析出来的数据进行类型处理
*
* @param value 单元格的值,
* value代表解析:BOOL的为0或1, ERROR的为内容值,FORMULA的为内容值,INLINESTR的为索引值需转换为内容值,
* SSTINDEX的为索引值需转换为内容值, NUMBER为内容值,DATE为内容值
* @param thisStr 一个空字符串
* @return
*/
@SuppressWarnings("deprecation")
public String getDataValue(String value, String thisStr) {
switch (nextDataType) {
// 这几个的顺序不能随便交换,交换了很可能会导致数据错误
case BOOL: //布尔值
char first = value.charAt(0);
thisStr = first == '0' ? "FALSE" : "TRUE";
break;
case ERROR: //错误
thisStr = "\"ERROR:" + value.toString() + '"';
break;
case FORMULA: //公式
thisStr = '"' + value.toString() + '"';
break;
case INLINESTR:
XSSFRichTextString rtsi = new XSSFRichTextString(value.toString());
thisStr = rtsi.toString();
rtsi = null;
break;
case SSTINDEX: //字符串
String sstIndex = value.toString();
try {
int idx = Integer.parseInt(sstIndex);
XSSFRichTextString rtss = new XSSFRichTextString(sst.getEntryAt(idx));//根据idx索引值获取内容值
thisStr = rtss.toString();
// System.out.println(thisStr);
//有些字符串是文本格式的,但内容却是日期
rtss = null;
} catch (NumberFormatException ex) {
thisStr = value.toString();
}
break;
case NUMBER: //数字
if (formatString != null) {
thisStr = formatter.formatRawCellContents(Double.parseDouble(value), formatIndex, formatString).trim();
} else {
thisStr = value;
}
thisStr = thisStr.replace("_", "").trim();
break;
case DATE: //日期
thisStr = formatter.formatRawCellContents(Double.parseDouble(value), formatIndex, formatString);
// 对日期字符串作特殊处理,去掉T
thisStr = thisStr.replace("T", " ");
break;
default:
thisStr = " ";
break;
}
return thisStr;
}
public int countNullCell(String ref, String preRef) {
//excel2007最大行数是1048576,最大列数是16384,最后一列列名是XFD
String xfd = ref.replaceAll("\\d+", "");
String xfd_1 = preRef.replaceAll("\\d+", "");
xfd = fillChar(xfd, 3, '@', true);
xfd_1 = fillChar(xfd_1, 3, '@', true);
char[] letter = xfd.toCharArray();
char[] letter_1 = xfd_1.toCharArray();
int res = (letter[0] - letter_1[0]) * 26 * 26 + (letter[1] - letter_1[1]) * 26 + (letter[2] - letter_1[2]);
return res - 1;
}
public String fillChar(String str, int len, char let, boolean isPre) {
int len_1 = str.length();
if (len_1 < len) {
if (isPre) {
for (int i = 0; i < (len - len_1); i++) {
str = let + str;
}
} else {
for (int i = 0; i < (len - len_1); i++) {
str = str + let;
}
}
}
return str;
}
/**
* @return the exceptionMessage
*/
public String getExceptionMessage() {
return exceptionMessage;
}
}
package util.excel;
import com.alibaba.fastjson.JSONObject;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.FormulaEvaluator;
import org.apache.poi.ss.util.CellReference;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 读取excel
*/
public interface ReadExcel {
/**
* 返回结果成功或失败
*/
public JSONObject execute();
/**
* 获取excel列名
*/
default String getColumnName(int columnIndex) {
return CellReference.convertNumToColString(columnIndex);
}
/**
* 获取excel单元格信息
* CellTypeEnum 类型值
* NUMERIC 数值型0
* STRING  字符串型1
* FORMULA 公式型 2
* BLANK   空值 3
* BOOLEAN  布尔型4
* ERROR   错误5
*/
default String[] getCellForm(Cell cell) {
if (cell == null) {
return null;
}
String[] form = new String[4];
String columnName = "";
String type = "";
String val = "";
String formula = "";
switch (cell.getCellTypeEnum()) {
case NUMERIC:
columnName = getColumnName(cell.getColumnIndex());
type = "NUMERIC";
if (HSSFDateUtil.isCellDateFormatted(cell)) {
Date d = cell.getDateCellValue();
DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
val = format.format(d);
} else {
val = String.valueOf(cell.getNumericCellValue());
}
break;
case STRING:
columnName = getColumnName(cell.getColumnIndex());
type = "STRING";
val = cell.getStringCellValue();
break;
case FORMULA:
columnName = getColumnName(cell.getColumnIndex());
type = "FORMULA";
val = String.valueOf(cell.getNumericCellValue());
formula = cell.getCellFormula();
break;
case BLANK:
columnName = getColumnName(cell.getColumnIndex());
type = "BLANK";
val = "";
break;
case BOOLEAN:
columnName = getColumnName(cell.getColumnIndex());
type = "BOOLEAN";
val = cell.getStringCellValue();
break;
case ERROR:
columnName = getColumnName(cell.getColumnIndex());
type = "ERROR";
val = "";
break;
default:
break;
}
form[0] = columnName;
form[1] = type;
form[2] = val;
form[3] = formula;
return form;
}
/**
* 获取excel单元格的值
* CellTypeEnum 类型值
* NUMERIC 数值型0
* STRING  字符串型1
* FORMULA 公式型 2
* BLANK   空值 3
* BOOLEAN  布尔型4
* ERROR   错误5
*/
default String getCellVal(Cell cell, FormulaEvaluator formulaEvaluator) {
if (cell == null) {
return null;
}
String val = "";
switch (cell.getCellTypeEnum()) {
case NUMERIC:
val = String.valueOf(cell.getNumericCellValue());
break;
case STRING:
val = cell.getStringCellValue();
break;
case FORMULA:
val = String.valueOf(formulaEvaluator.evaluate(cell).getNumberValue());
break;
case BLANK:
val = "";
break;
case BOOLEAN:
val = cell.getStringCellValue();
break;
case ERROR:
val = "";
break;
default:
break;
}
return val;
}
default String getCellVal(Cell cell) {
if (cell == null) {
return null;
}
String val = "";
switch (cell.getCellTypeEnum()) {
case NUMERIC:
val = String.valueOf(cell.getNumericCellValue());
break;
case STRING:
val = cell.getStringCellValue();
break;
case FORMULA:
val = String.valueOf(cell.getNumericCellValue());
break;
case BLANK:
val = "";
break;
case BOOLEAN:
val = cell.getStringCellValue();
break;
case ERROR:
val = "";
break;
default:
break;
}
return val;
}
}
package util.qrCode;
import java.awt.*;
class LogoConfig {
// logo默认边框颜色
public static final Color DEFAULT_BORDERCOLOR = Color.WHITE;
// logo默认边框宽度
public static final int DEFAULT_BORDER = 2;
// logo大小默认为照片的1/5
public static final int DEFAULT_LOGOPART = 5;
private final int border = DEFAULT_BORDER;
private final Color borderColor;
private final int logoPart;
public LogoConfig() {
this(DEFAULT_BORDERCOLOR, DEFAULT_LOGOPART);
}
public LogoConfig(Color borderColor, int logoPart) {
this.borderColor = borderColor;
this.logoPart = logoPart;
}
public Color getBorderColor() {
return borderColor;
}
public int getBorder() {
return border;
}
public int getLogoPart() {
return logoPart;
}
}
package web;
import enums.ExceptionCodeEnum;
import lombok.Getter;
/**
* @author yuetianwang
* @description 基础异常
* @date 2021/7/26 17:13
*/
@Getter
public abstract class BaseException extends RuntimeException {
private ExceptionCodeEnum exceptionCodeEnum;
public BaseException(ExceptionCodeEnum exceptionCodeEnum) {
super(exceptionCodeEnum.getMessage());
this.exceptionCodeEnum = exceptionCodeEnum;
}
}
package web;
import enums.ExceptionCodeEnum;
/**
* @author yuetianwang
* @description 业务异常
* @date 2021/7/26 17:17
*/
public class BusinessException extends BaseException {
public BusinessException(ExceptionCodeEnum exceptionCodeEnum) {
super(exceptionCodeEnum);
}
}
package web;
import base.result.BaseResult;
import enums.ExceptionCodeEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestControllerAdvice;
/**
* @author yuetianwang
* @description 异常捕捉controller
* @date 2021/7/26 17:19
*/
@Slf4j
@RestControllerAdvice
public class ExceptionCatchAdvice {
@ExceptionHandler(Exception.class)
@ResponseBody
public BaseResult exceptionHandler(Exception e) {
e.printStackTrace();
return BaseResult.error(ExceptionCodeEnum.ERROR_002.getCode());
}
@ExceptionHandler(BaseException.class)
@ResponseBody
public BaseResult exceptionHandler(BaseException e) {
e.printStackTrace();
return BaseResult.error(e.getExceptionCodeEnum());
}
@ExceptionHandler(IllegalArgumentException.class)
@ResponseBody
public BaseResult exceptionHandler(IllegalArgumentException e) {
e.printStackTrace();
ExceptionCodeEnum exceptionCodeEnum = ExceptionCodeEnum.getByCode(e.getMessage());
if (exceptionCodeEnum != null) {
return BaseResult.error(exceptionCodeEnum);
}
return BaseResult.error(e.getMessage());
}
}
package web;
import base.result.BaseResult;
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
import util.Paging;
/**
* @author yuetianwang
* @description 封装接口返回值
* @date 2021/7/29 9:53
*/
@RestControllerAdvice
public class ResponseJSONAdvice implements ResponseBodyAdvice {
@Override
public boolean supports(MethodParameter returnType, Class converterType) {
return true;
}
@Override
public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
if (returnType.getParameterType() == Paging.class) {
return BaseResult.success(body);
}
return body;
}
}
package web;
import enums.ExceptionCodeEnum;
/**
* @author yuetianwang
* @description 校验异常
* @date 2021/7/26 17:17
*/
public class ValidationException extends BaseException {
public ValidationException(ExceptionCodeEnum exceptionCodeEnum) {
super(exceptionCodeEnum);
}
}
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAlM0c1GgEIMNcL9O99mN9lV1oULcv8lZscSVJKVvfUglWYfHM
YpgoNQau4UdeoHiq5kVnl54e8vBNgQVD86hE5I+3tYH6/v0I+foCXYhN7ehty5V5
vJB3C0+GPD+xiHy0gJCQ8886aASTimiPIDE+JA3JzLUQe7H43n49+Nr3v4IW11vk
0BgGomj2d8msm94I1YXN3r1GzRcm/kyHMT82Pj9qf81kuMrlYcgHyv0ixPnMlp9I
WBh+6175Kzd6CcZ4RyuDamkVrR9vDbqAlFjs04iIqptd6Afs5enwguGBpNBk8RmK
hOQ3ATPXadk5vOPYNa5L4kfxNkmmJhN/NQBQzwIDAQABAoIBAFgf5awR8ifpK0aT
81PhdjWofSgYZYfzEQQtXdfltiuipgsZpb7aeC13SMjYeL022ZfIkOJlXdTo5i28
DZNXG331c4pGcXzkJJXPL+lu2SBF4AiK/O7k6+vB7DDwU9cOa+QcOgx6tQ93bl2x
MNqS70dw9wuKTDnFnCtAvrkMDV/X5wfh1n6sv4YPqIL/vmlkee8PzHXlaj7+yeL8
HGr6dBq10L0KY9/kDht0G3NU1kM9gAOzU30MmjxqyyBfQpnYD+qOs0A4+a1vdyjI
vX8qJpPdujvCPArEhvgrvVwiq9p2Z2r3apSW8HbeRPVTaX76zHZUlql08Ia+TXFT
iHsGZNkCgYEAy3VlEdIVeb/mMrPj3o8fyUVVVTIavt9yHwcrkwJ2ces3+vRfUkSZ
TUpYuJyThLSBQKtUXDnezx4qMPw0Z8OHWERCGYHYgRsfBN8eplH6fYCd8yCtWBm+
FglhLlHrrprw5+/ROMhk2CArs9yAk+gOHCWR6+mz4FZyKUO70bZOR+0CgYEAuzpU
z5J/fD0K5ZISZVkpeQ+uEFT6fZwguLnLiVg0zeuHh0U7FMECDwdpkKd5quLMCkq8
uUn2BO65uM0iq/RFP1ml677xuQ/Qbvtrhhkv/vw/GDQcE0tHw20D+6kgq5hg7HUJ
4xl7DoE3p9hnObs91QODPe4exIEpRFx4GoTDrCsCgYA4b7j4Z4EDg6KUH+gufR8B
EpVoC3z1wz+Bsdh5b+5xDSE7IHwsctDfaqcPlocpAXT0/lFpP7g5VZG4gsz6l3c8
mbqIHsdykJZbIJT857KHC51EqqTK0mEy9akaUykABwSaIaC0kom+lbXpr1mPLYh0
cEt42BvIN9J09c/sjRhLxQKBgQCONErQcdPUmESbg2vngGZIpgkuLG0pVJlh1PRr
+Av7T2Zb7tBl/gbDRXz/usRlb+dL9eIL1co/itaTL3OjKWAjMsMcIKZWSlWkxd+w
NZdH021Uw9eDLA1wuG9rCNVgn9cWIfsFe4gEx05vdKVKqxXWodlgA2lpFTUz0AwF
EEvSiwKBgDFNm1Oqgtevgcdg1klcRlj1AK3CxLjUnxxDHEml+d/UYZrSAUCY02cq
bcBLdyfo0Dkq0UbYaduVIoEWzxAzbgwV9LEeO9Hv4VnC7l/cKVBiz+breEnR6Yu2
EZOMRSAD/SK2FXfu4MGuGoNwUpnfa6E9m2WgYK5KxzsnlsuapyAU
-----END RSA PRIVATE KEY-----
\ No newline at end of file
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlM0c1GgEIMNcL9O99mN9
lV1oULcv8lZscSVJKVvfUglWYfHMYpgoNQau4UdeoHiq5kVnl54e8vBNgQVD86hE
5I+3tYH6/v0I+foCXYhN7ehty5V5vJB3C0+GPD+xiHy0gJCQ8886aASTimiPIDE+
JA3JzLUQe7H43n49+Nr3v4IW11vk0BgGomj2d8msm94I1YXN3r1GzRcm/kyHMT82
Pj9qf81kuMrlYcgHyv0ixPnMlp9IWBh+6175Kzd6CcZ4RyuDamkVrR9vDbqAlFjs
04iIqptd6Afs5enwguGBpNBk8RmKhOQ3ATPXadk5vOPYNa5L4kfxNkmmJhN/NQBQ
zwIDAQAB
-----END PUBLIC KEY-----
\ No newline at end of file
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/
/*
* Copyright 2007-present 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
*
* https://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.
*/
import java.net.*;
import java.io.*;
import java.nio.channels.*;
import java.util.Properties;
public class MavenWrapperDownloader {
private static final String WRAPPER_VERSION = "0.5.6";
/**
* Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.
*/
private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/"
+ WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar";
/**
* Path to the maven-wrapper.properties file, which might contain a downloadUrl property to
* use instead of the default one.
*/
private static final String MAVEN_WRAPPER_PROPERTIES_PATH =
".mvn/wrapper/maven-wrapper.properties";
/**
* Path where the maven-wrapper.jar will be saved to.
*/
private static final String MAVEN_WRAPPER_JAR_PATH =
".mvn/wrapper/maven-wrapper.jar";
/**
* Name of the property which should be used to override the default download url for the wrapper.
*/
private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl";
public static void main(String args[]) {
System.out.println("- Downloader started");
File baseDirectory = new File(args[0]);
System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath());
// If the maven-wrapper.properties exists, read it and check if it contains a custom
// wrapperUrl parameter.
File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH);
String url = DEFAULT_DOWNLOAD_URL;
if (mavenWrapperPropertyFile.exists()) {
FileInputStream mavenWrapperPropertyFileInputStream = null;
try {
mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile);
Properties mavenWrapperProperties = new Properties();
mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream);
url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url);
} catch (IOException e) {
System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'");
} finally {
try {
if (mavenWrapperPropertyFileInputStream != null) {
mavenWrapperPropertyFileInputStream.close();
}
} catch (IOException e) {
// Ignore ...
}
}
}
System.out.println("- Downloading from: " + url);
File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH);
if (!outputFile.getParentFile().exists()) {
if (!outputFile.getParentFile().mkdirs()) {
System.out.println(
"- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'");
}
}
System.out.println("- Downloading to: " + outputFile.getAbsolutePath());
try {
downloadFileFromURL(url, outputFile);
System.out.println("Done");
System.exit(0);
} catch (Throwable e) {
System.out.println("- Error downloading");
e.printStackTrace();
System.exit(1);
}
}
private static void downloadFileFromURL(String urlString, File destination) throws Exception {
if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) {
String username = System.getenv("MVNW_USERNAME");
char[] password = System.getenv("MVNW_PASSWORD").toCharArray();
Authenticator.setDefault(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
}
URL website = new URL(urlString);
ReadableByteChannel rbc;
rbc = Channels.newChannel(website.openStream());
FileOutputStream fos = new FileOutputStream(destination);
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
fos.close();
rbc.close();
}
}
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.1/apache-maven-3.8.1-bin.zip
wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar
FROM openjdk:8-jdk-oracle
ARG JAR_FILE
ADD ${JAR_FILE} app.jar
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
ENV LANG C.UTF-8
EXPOSE $PORT
ENTRYPOINT ["sh","-c","java $JAVA_OPTS -jar app.jar --spring.profiles.active=$ACTIVE --nacos.server-addr=$NACOS_HOST --nacos.namespace=$NACOS_NAMESPACE --nacos.group=$NACOS_GROUP --nacos.port=$PORT --rocketmq.namesrv=$MQ_HOST --rocketmq.instance-id=$MQ_INSTANCE_ID --aliyun.access-key=$ACCESS_KEY --aliyun.secret-key=$SECRET_KEY"]
\ No newline at end of file
#!/bin/sh
# ----------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you 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
#
# https://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.
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
# Maven Start Up Batch script
#
# Required ENV vars:
# ------------------
# JAVA_HOME - location of a JDK home dir
#
# Optional ENV vars
# -----------------
# M2_HOME - location of maven2's installed home dir
# MAVEN_OPTS - parameters passed to the Java VM when running Maven
# e.g. to debug Maven itself, use
# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
# ----------------------------------------------------------------------------
if [ -z "$MAVEN_SKIP_RC" ] ; then
if [ -f /etc/mavenrc ] ; then
. /etc/mavenrc
fi
if [ -f "$HOME/.mavenrc" ] ; then
. "$HOME/.mavenrc"
fi
fi
# OS specific support. $var _must_ be set to either true or false.
cygwin=false;
darwin=false;
mingw=false
case "`uname`" in
CYGWIN*) cygwin=true ;;
MINGW*) mingw=true;;
Darwin*) darwin=true
# Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
# See https://developer.apple.com/library/mac/qa/qa1170/_index.html
if [ -z "$JAVA_HOME" ]; then
if [ -x "/usr/libexec/java_home" ]; then
export JAVA_HOME="`/usr/libexec/java_home`"
else
export JAVA_HOME="/Library/Java/Home"
fi
fi
;;
esac
if [ -z "$JAVA_HOME" ] ; then
if [ -r /etc/gentoo-release ] ; then
JAVA_HOME=`java-config --jre-home`
fi
fi
if [ -z "$M2_HOME" ] ; then
## resolve links - $0 may be a link to maven's home
PRG="$0"
# need this for relative symlinks
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG="`dirname "$PRG"`/$link"
fi
done
saveddir=`pwd`
M2_HOME=`dirname "$PRG"`/..
# make it fully qualified
M2_HOME=`cd "$M2_HOME" && pwd`
cd "$saveddir"
# echo Using m2 at $M2_HOME
fi
# For Cygwin, ensure paths are in UNIX format before anything is touched
if $cygwin ; then
[ -n "$M2_HOME" ] &&
M2_HOME=`cygpath --unix "$M2_HOME"`
[ -n "$JAVA_HOME" ] &&
JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
[ -n "$CLASSPATH" ] &&
CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
fi
# For Mingw, ensure paths are in UNIX format before anything is touched
if $mingw ; then
[ -n "$M2_HOME" ] &&
M2_HOME="`(cd "$M2_HOME"; pwd)`"
[ -n "$JAVA_HOME" ] &&
JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
fi
if [ -z "$JAVA_HOME" ]; then
javaExecutable="`which javac`"
if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
# readlink(1) is not available as standard on Solaris 10.
readLink=`which readlink`
if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
if $darwin ; then
javaHome="`dirname \"$javaExecutable\"`"
javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
else
javaExecutable="`readlink -f \"$javaExecutable\"`"
fi
javaHome="`dirname \"$javaExecutable\"`"
javaHome=`expr "$javaHome" : '\(.*\)/bin'`
JAVA_HOME="$javaHome"
export JAVA_HOME
fi
fi
fi
if [ -z "$JAVACMD" ] ; then
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
else
JAVACMD="`which java`"
fi
fi
if [ ! -x "$JAVACMD" ] ; then
echo "Error: JAVA_HOME is not defined correctly." >&2
echo " We cannot execute $JAVACMD" >&2
exit 1
fi
if [ -z "$JAVA_HOME" ] ; then
echo "Warning: JAVA_HOME environment variable is not set."
fi
CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
# traverses directory structure from process work directory to filesystem root
# first directory with .mvn subdirectory is considered project base directory
find_maven_basedir() {
if [ -z "$1" ]
then
echo "Path not specified to find_maven_basedir"
return 1
fi
basedir="$1"
wdir="$1"
while [ "$wdir" != '/' ] ; do
if [ -d "$wdir"/.mvn ] ; then
basedir=$wdir
break
fi
# workaround for JBEAP-8937 (on Solaris 10/Sparc)
if [ -d "${wdir}" ]; then
wdir=`cd "$wdir/.."; pwd`
fi
# end of workaround
done
echo "${basedir}"
}
# concatenates all lines of a file
concat_lines() {
if [ -f "$1" ]; then
echo "$(tr -s '\n' ' ' < "$1")"
fi
}
BASE_DIR=`find_maven_basedir "$(pwd)"`
if [ -z "$BASE_DIR" ]; then
exit 1;
fi
##########################################################################################
# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
# This allows using the maven wrapper in projects that prohibit checking in binary data.
##########################################################################################
if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
if [ "$MVNW_VERBOSE" = true ]; then
echo "Found .mvn/wrapper/maven-wrapper.jar"
fi
else
if [ "$MVNW_VERBOSE" = true ]; then
echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
fi
if [ -n "$MVNW_REPOURL" ]; then
jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
else
jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
fi
while IFS="=" read key value; do
case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
esac
done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
if [ "$MVNW_VERBOSE" = true ]; then
echo "Downloading from: $jarUrl"
fi
wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
if $cygwin; then
wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
fi
if command -v wget > /dev/null; then
if [ "$MVNW_VERBOSE" = true ]; then
echo "Found wget ... using wget"
fi
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
wget "$jarUrl" -O "$wrapperJarPath"
else
wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath"
fi
elif command -v curl > /dev/null; then
if [ "$MVNW_VERBOSE" = true ]; then
echo "Found curl ... using curl"
fi
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
curl -o "$wrapperJarPath" "$jarUrl" -f
else
curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
fi
else
if [ "$MVNW_VERBOSE" = true ]; then
echo "Falling back to using Java to download"
fi
javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
# For Cygwin, switch paths to Windows format before running javac
if $cygwin; then
javaClass=`cygpath --path --windows "$javaClass"`
fi
if [ -e "$javaClass" ]; then
if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
if [ "$MVNW_VERBOSE" = true ]; then
echo " - Compiling MavenWrapperDownloader.java ..."
fi
# Compiling the Java class
("$JAVA_HOME/bin/javac" "$javaClass")
fi
if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
# Running the downloader
if [ "$MVNW_VERBOSE" = true ]; then
echo " - Running MavenWrapperDownloader.java ..."
fi
("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
fi
fi
fi
fi
##########################################################################################
# End of extension
##########################################################################################
export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
if [ "$MVNW_VERBOSE" = true ]; then
echo $MAVEN_PROJECTBASEDIR
fi
MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
# For Cygwin, switch paths to Windows format before running java
if $cygwin; then
[ -n "$M2_HOME" ] &&
M2_HOME=`cygpath --path --windows "$M2_HOME"`
[ -n "$JAVA_HOME" ] &&
JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
[ -n "$CLASSPATH" ] &&
CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
[ -n "$MAVEN_PROJECTBASEDIR" ] &&
MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
fi
# Provide a "standardized" way to retrieve the CLI args that will
# work with both Windows and non-Windows executions.
MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
export MAVEN_CMD_LINE_ARGS
WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
exec "$JAVACMD" \
$MAVEN_OPTS \
-classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
"-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
@REM ----------------------------------------------------------------------------
@REM Licensed to the Apache Software Foundation (ASF) under one
@REM or more contributor license agreements. See the NOTICE file
@REM distributed with this work for additional information
@REM regarding copyright ownership. The ASF licenses this file
@REM to you under the Apache License, Version 2.0 (the
@REM "License"); you may not use this file except in compliance
@REM with the License. You may obtain a copy of the License at
@REM
@REM https://www.apache.org/licenses/LICENSE-2.0
@REM
@REM Unless required by applicable law or agreed to in writing,
@REM software distributed under the License is distributed on an
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@REM KIND, either express or implied. See the License for the
@REM specific language governing permissions and limitations
@REM under the License.
@REM ----------------------------------------------------------------------------
@REM ----------------------------------------------------------------------------
@REM Maven Start Up Batch script
@REM
@REM Required ENV vars:
@REM JAVA_HOME - location of a JDK home dir
@REM
@REM Optional ENV vars
@REM M2_HOME - location of maven2's installed home dir
@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
@REM e.g. to debug Maven itself, use
@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
@REM ----------------------------------------------------------------------------
@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
@echo off
@REM set title of command window
title %0
@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
@REM set %HOME% to equivalent of $HOME
if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
@REM Execute a user defined script before this one
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
@REM check for pre script, once with legacy .bat ending and once with .cmd ending
if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
:skipRcPre
@setlocal
set ERROR_CODE=0
@REM To isolate internal variables from possible post scripts, we use another setlocal
@setlocal
@REM ==== START VALIDATION ====
if not "%JAVA_HOME%" == "" goto OkJHome
echo.
echo Error: JAVA_HOME not found in your environment. >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
:OkJHome
if exist "%JAVA_HOME%\bin\java.exe" goto init
echo.
echo Error: JAVA_HOME is set to an invalid directory. >&2
echo JAVA_HOME = "%JAVA_HOME%" >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
@REM ==== END VALIDATION ====
:init
@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
@REM Fallback to current working directory if not found.
set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
set EXEC_DIR=%CD%
set WDIR=%EXEC_DIR%
:findBaseDir
IF EXIST "%WDIR%"\.mvn goto baseDirFound
cd ..
IF "%WDIR%"=="%CD%" goto baseDirNotFound
set WDIR=%CD%
goto findBaseDir
:baseDirFound
set MAVEN_PROJECTBASEDIR=%WDIR%
cd "%EXEC_DIR%"
goto endDetectBaseDir
:baseDirNotFound
set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
cd "%EXEC_DIR%"
:endDetectBaseDir
IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
@setlocal EnableExtensions EnableDelayedExpansion
for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
:endReadAdditionalConfig
SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
)
@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
if exist %WRAPPER_JAR% (
if "%MVNW_VERBOSE%" == "true" (
echo Found %WRAPPER_JAR%
)
) else (
if not "%MVNW_REPOURL%" == "" (
SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
)
if "%MVNW_VERBOSE%" == "true" (
echo Couldn't find %WRAPPER_JAR%, downloading it ...
echo Downloading from: %DOWNLOAD_URL%
)
powershell -Command "&{"^
"$webclient = new-object System.Net.WebClient;"^
"if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
"$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
"}"^
"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
"}"
if "%MVNW_VERBOSE%" == "true" (
echo Finished downloading %WRAPPER_JAR%
)
)
@REM End of extension
@REM Provide a "standardized" way to retrieve the CLI args that will
@REM work with both Windows and non-Windows executions.
set MAVEN_CMD_LINE_ARGS=%*
%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
if ERRORLEVEL 1 goto error
goto end
:error
set ERROR_CODE=1
:end
@endlocal & set ERROR_CODE=%ERROR_CODE%
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
@REM check for post script, once with legacy .bat ending and once with .cmd ending
if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
:skipRcPost
@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
if "%MAVEN_BATCH_PAUSE%" == "on" pause
if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
exit /B %ERROR_CODE%
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.jy.jxjy</groupId>
<artifactId>jxjy</artifactId>
<version>1.0</version>
</parent>
<groupId>com.jy.jxjy</groupId>
<artifactId>jxjy-system</artifactId>
<version>1.0</version>
<name>jxjy-system</name>
<description>Demo project for Spring Boot</description>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<exclusions>
<exclusion>
<groupId>com.alibaba.cloud</groupId>
<artifactId>nacos-client</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<scope>provided</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</dependency>-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>com.jy.jxjy</groupId>
<artifactId>jxjy-lib</artifactId>
</dependency>
<!--<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<!--page helper-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<!--MongoDB-->
<!--<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>-->
<!--rocketmq-->
<!--<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rocketmq</artifactId>
</dependency>
&lt;!&ndash;binder的依赖&ndash;&gt;
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-rocketmq</artifactId>
</dependency>-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
</dependency>-->
<!--Security依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<!-- StringUtilS工具 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<!-- JSON工具 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
<!-- JWT依赖 -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-jwt</artifactId>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>com.jy.jxjy</groupId>
<artifactId>jxjy-lib</artifactId>
<version>1.0</version>
<scope>compile</scope>
</dependency>
<!--<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.38.0.ALL</version>
</dependency>-->
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.40.461.ALL</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.13</version>
<configuration>
<repository>${project.artifactId}</repository>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
</plugins>
</build>
</project>
package com.jxjy.system;
//import org.mybatis.spring.annotation.MapperScan;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.scheduling.annotation.EnableScheduling;
@RefreshScope
@EnableDiscoveryClient
@SpringBootApplication(scanBasePackages = {"com.jxjy.system"})
@MapperScan(basePackages = "com.jxjy.system.mapper")
@EnableCaching // 开启缓存
@EnableScheduling
public class jxjySystemApplication {
public static void main(String[] args) {
SpringApplication.run(jxjySystemApplication.class, args);
}
}
package com.jxjy.system.bean.auth;
import lombok.Data;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import java.util.Collection;
/**
* @Author wangmenglong
* @Description 用户登录用
* @Date 15:33 2021/7/2
* @Param
* @return
**/
@Data
public class SelfUserEntity implements UserDetails {
/**
* 用户ID
*/
private String userId;
/**
* 用户名
*/
private String username;
/**
* 密码
*/
private String password;
/**
* 派遣公司编号
*/
private String baseCode;
/**
* 状态:NORMAL正常 PROHIBIT禁用
*/
private String status;
/**
* 名称
*/
private String name;
private String grayLabel;
/**
* 用户角色
*/
private Collection<GrantedAuthority> authorities;
/**
* 账户是否过期
*/
private boolean isAccountNonExpired = false;
/**
* 账户是否被锁定
*/
private boolean isAccountNonLocked = false;
/**
* 证书是否过期
*/
private boolean isCredentialsNonExpired = false;
/**
* 账户是否有效
*/
private boolean isEnabled = true;
/**
* 账户类型,manage-管理端 person-员工端
*/
private String type;
/**
* 雇员证件号码
*/
private String idNo;
/**
* 角色id
*/
private String roleId;
/**
* 角色标签
*/
private String roleTag;
/**
* 微信openid
*/
private String openId;
/**
* 手机号
*/
private String phone;
/**
* 是否超级管理员
*/
private Boolean superAdmin;
}
package com.jxjy.system.bean.auth;
import lombok.Getter;
import lombok.Setter;
/**
* @Author yuetianwang
* @Description 登录用户上下文
* @Date 11:16 2021/7/19
*/
@Getter
@Setter
public class UserContext {
/**
* 用户id
*/
private String userId;
/**
* 用户名称
*/
private String username;
/**
* 账号
*/
private String account;
/**
* 派遣公司basecode
*/
private String baseCode;
/**
* 账户类型,dispatch-派遣公司 channel-渠道 personnel-雇员
*/
private String type;
/**
* 角色id
*/
private String roleId;
/**
* 角色tag
*/
private String roleTag;
/**
* 身份证号
*/
private String idNo;
/**
* 身份证号
*/
private String openId;
/**
* 手机号
*/
private String phone;
/**
* 是否超级管理员
*/
private Boolean superAdmin;
}
package com.jxjy.system.config.auth;
import org.springframework.stereotype.Component;
/**
* @Author wangmenglong
* @Description JWT配置类
* @Date 15:51 2021/7/2
* @Param
* @return
**/
@Component
public class JWTConfig {
/**
* 密钥KEY
*/
public static String secret="cm-crm@junying";
/**
* TokenKey
*/
public static String tokenHeader="Authorization";
/**
* Token前缀字符
*/
public static String tokenPrefix="Bearer ";
/**
* 过期时间 单位毫秒 1天后过期=86400000 7天后过期=604800000
*/
public static long expiration=2592000000l;
/**
* 不需要认证的接口
*/
public static String antMatchers="/index/**,/login/**,/favicon.ico,/isPermission,/actuator/**,/statewriter/**,/statereader/**,/hello/**,/public/**";
}
package com.jxjy.system.config.auth;
import com.jxjy.system.handler.auth.*;
import com.jxjy.system.filter.JWTAuthenticationTokenFilter;
import com.jxjy.system.service.auth.UserAuthenticationProvider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.web.access.expression.DefaultWebSecurityExpressionHandler;
/**
* @Author wangmenglong
* @Description SpringSecurity配置类
* @Date 15:35 2021/7/2
* @Param
* @return
**/
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true) //开启权限注解,默认是关闭的
public class SecurityConfig extends WebSecurityConfigurerAdapter {
/**
* 自定义登录成功处理器
*/
@Autowired
private UserLoginSuccessHandler userLoginSuccessHandler;
/**
* 自定义登录失败处理器
*/
@Autowired
private UserLoginFailureHandler userLoginFailureHandler;
/**
* 自定义注销成功处理器
*/
@Autowired
private UserLogoutSuccessHandler userLogoutSuccessHandler;
/**
* 自定义暂无权限处理器
*/
@Autowired
private UserAuthAccessDeniedHandler userAuthAccessDeniedHandler;
/**
* 自定义未登录的处理器
*/
@Autowired
private UserAuthenticationEntryPointHandler userAuthenticationEntryPointHandler;
/**
* 自定义登录逻辑验证器
*/
@Autowired
private UserAuthenticationProvider userAuthenticationProvider;
/**
* 加密方式
*
* @Author Sans
* @CreateTime 2019/10/1 14:00
*/
@Bean
public BCryptPasswordEncoder bCryptPasswordEncoder() {
return new BCryptPasswordEncoder();
}
/**
* 注入自定义PermissionEvaluator
*/
@Bean
public DefaultWebSecurityExpressionHandler userSecurityExpressionHandler() {
DefaultWebSecurityExpressionHandler handler = new DefaultWebSecurityExpressionHandler();
handler.setPermissionEvaluator(new UserPermissionEvaluator());
return handler;
}
/**
* 配置登录验证逻辑
*/
@Override
protected void configure(AuthenticationManagerBuilder auth) {
//这里可启用我们自己的登陆验证逻辑
auth.authenticationProvider(userAuthenticationProvider);
}
/**
* 配置security的控制逻辑
*
* @param http
* @return
* @author wml
* @date 2020/4/4
**/
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
// 不进行权限验证的请求或资源(从配置文件中读取)
.antMatchers(JWTConfig.antMatchers.split(",")).permitAll()
// 其他的需要登陆后才能访问 其他url都需要验证
.anyRequest().authenticated()
.and()
// 配置未登录自定义处理类
.httpBasic().authenticationEntryPoint(userAuthenticationEntryPointHandler)
.and()
// 配置登录地址
.formLogin()
//配置security表单登录页面地址 默认是login
//配置security提交form表单请求的接口地址 默认是/login/userLogin 必须使用post提交
.loginProcessingUrl("/loginform")
//设置security提交的用户名属性值是那个 默认是username
.usernameParameter("account")
//设置security提交的密码属性名是那个 默认是password
.passwordParameter("password")
// 配置登录成功自定义处理类
.successHandler(userLoginSuccessHandler)
// 配置登录失败自定义处理类
.failureHandler(userLoginFailureHandler)
.and()
// 配置登出地址
.logout()
.logoutUrl("/logoutapp")
// 配置用户登出自定义处理类
.logoutSuccessHandler(userLogoutSuccessHandler)
.and()
// 配置没有权限自定义处理类
.exceptionHandling().accessDeniedHandler(userAuthAccessDeniedHandler)
.and()
.exceptionHandling().authenticationEntryPoint(userAuthenticationEntryPointHandler)
.and()
// 开启跨域
.cors()
// 禁用frameOptions
.and().headers().frameOptions().disable()
.and()
// 取消跨站请求伪造防护
.csrf().disable();
// 基于Token不需要session
http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
// 禁用缓存
http.headers().cacheControl();
// 添加JWT过滤器
http.addFilter(new JWTAuthenticationTokenFilter(authenticationManager()));
}
}
package com.jxjy.system.config.auth;
import com.jxjy.system.bean.auth.SelfUserEntity;
import org.springframework.security.access.PermissionEvaluator;
import org.springframework.security.core.Authentication;
import org.springframework.stereotype.Component;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
/**
* @Author wangmenglong
* @Description 自定义权限注解验证
* @Date 15:35 2021/7/2
* @Param
* @return
**/
@Component
public class UserPermissionEvaluator implements PermissionEvaluator {
/**
* hasPermission鉴权方法
* 这里仅仅判断PreAuthorize注解中的权限表达式
* 实际中可以根据业务需求设计数据库通过targetUrl和permission做更复杂鉴权
* 当然targetUrl不一定是URL可以是数据Id还可以是管理员标识等,这里根据需求自行设计
* @author wml
* @date 2020/4/4
* @param authentication
* @param targetUrl
* @param permission
* @return
**/
@Override
public boolean hasPermission(Authentication authentication, Object targetUrl, Object permission) {
// 获取用户信息
SelfUserEntity selfUserEntity =(SelfUserEntity) authentication.getPrincipal();
// 查询用户权限(这里可以将权限放入缓存中提升效率)
Set<String> permissions = new HashSet<>();
// todo:从数据库获取数据 这个方法暂时没什么用,不管这层,这个类都是自定义注解的,
/*List<SysMenuEntity> sysMenuEntityList = sysUserService.selectSysMenuByUserId(selfUserEntity.getUserId());
for (SysMenuEntity sysMenuEntity:sysMenuEntityList) {
permissions.add(sysMenuEntity.getPermission());
}*/
// 权限对比
if (permissions.contains(permission.toString())){
return true;
}
return false;
}
@Override
public boolean hasPermission(Authentication authentication, Serializable targetId, String targetType, Object permission) {
return false;
}
}
package com.jxjy.system.config.cors;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
/**
* @Author wangmenglong
* @Description 处理跨域
* @Date 15:33 2021/7/2
* @Param
* @return
**/
@Configuration
public class CorsConfig {
public CorsConfig() {
}
@Bean
public CorsFilter corsFilter() {
// 1. 添加cors配置信息
CorsConfiguration config = new CorsConfiguration();
// config.addAllowedOrigin("http://localhost:8080");
config.addAllowedOrigin("*");
// 设置是否发送cookie信息
config.setAllowCredentials(true);
// 设置允许请求的方式
config.addAllowedMethod("*");
// 设置允许的header
config.addAllowedHeader("*");
// 2. 为url添加映射路径
UrlBasedCorsConfigurationSource corsSource = new UrlBasedCorsConfigurationSource();
corsSource.registerCorsConfiguration("/**", config);
// 3. 返回重新定义好的corsSource
return new CorsFilter(corsSource);
}
}
package com.jxjy.system.controller;
import base.controller.BaseController;
import base.result.BaseResult;
import com.github.pagehelper.PageInfo;
import com.jxjy.system.bean.auth.UserContext;
import com.jxjy.system.service.CollectService;
import com.jxjy.system.service.RecruitService;
import com.jxjy.system.util.auth.UserUtils;
import data.system.Collect;
import data.system.Recruit;
import data.system.SignRecord;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
* @author wangmenglong
* @description: 收藏管理
* @date 2023/12/11 11:35
*/
@RestController
@RequestMapping("/collect")
public class CollectController extends BaseController {
@Resource
CollectService collectService;
@Resource
RecruitService recruitService;
/**
* @description: 获取收藏列表
* @author: wangmenglong
* @date; 2023/12/7 10:07
* @param: [req]
* @return: com.github.pagehelper.PageInfo
**/
@GetMapping("/l")
public BaseResult list(HttpServletRequest req){
PageInit(req);
UserContext userContext = UserUtils.getUserContext();
List<Recruit> list = recruitService.listByCollect(pageNum,pageSize,userContext.getUserId());
PageInfo<Recruit> pageInfo = new PageInfo<Recruit>(list);
return BaseResult.success(pageInfo);
}
/**
* @description: 新增收藏
* @author: wangmenglong
* @param: [collect]
* @return: base.result.BaseResult
**/
@PostMapping("/c")
public BaseResult create(@RequestBody Collect collect){
UserContext userContext = UserUtils.getUserContext();
collect.setUserId(userContext.getUserId());
collect.setPersonId(userContext.getUserId());
//判断是否重复
if(collectService.isHave(collect.getRecruitId(),collect.getPersonId())){
collectService.del(collect.getRecruitId(),collect.getPersonId());
}else {
collectService.create(collect);
}
return BaseResult.success("normal_001");
}
/**
* @description: 是否收藏
* @author: wangmenglong
* @param: [signRecord]
* @return: base.result.BaseResult
**/
@PostMapping("/have")
public BaseResult have(@RequestBody SignRecord signRecord){
UserContext userContext = UserUtils.getUserContext();
signRecord.setUserId(userContext.getUserId());
signRecord.setPersonId(userContext.getUserId());
//判断是否重复
if(collectService.isHave(signRecord.getRecruitId(),signRecord.getPersonId())){
return BaseResult.success("normal_001","1");
}else {
return BaseResult.success("normal_001","0");
}
}
}
package com.jxjy.system.controller;
import base.controller.BaseController;
import base.result.BaseResult;
import com.github.pagehelper.PageInfo;
import com.jxjy.system.bean.auth.UserContext;
import com.jxjy.system.service.DriverSchoolRecordService;
import com.jxjy.system.service.PersonService;
import com.jxjy.system.service.RecruitService;
import com.jxjy.system.util.auth.UserUtils;
import data.system.DriverSchoolRecord;
import data.system.Person;
import data.system.Recruit;
import data.system.SignRecord;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
* @author wangmenglong
* @description: 报名管理
* @date 2023/12/11 11:35
*/
@RestController
@RequestMapping("/driverSchool/record")
public class DriverSchoolRecordController extends BaseController {
@Resource
DriverSchoolRecordService driverSchoolRecordService;
@Resource
PersonService personService;
/**
* @description: 获取报名列表
* @author: wangmenglong
* @date; 2023/12/7 10:07
* @param: [req]
* @return: com.github.pagehelper.PageInfo
**/
@GetMapping("/l")
public BaseResult list(HttpServletRequest req, Person person){
PageInit(req);
UserContext userContext = UserUtils.getUserContext();
List<Person> list = personService.listDriver(pageNum,pageSize,person);
PageInfo<Person> pageInfo = new PageInfo<Person>(list);
return BaseResult.success(pageInfo);
}
/**
* @description: 新增报名
* @author: wangmenglong
* @param: [driverSchoolRecord]
* @return: base.result.BaseResult
**/
@PostMapping("/c")
public BaseResult create(@RequestBody DriverSchoolRecord driverSchoolRecord){
UserContext userContext = UserUtils.getUserContext();
driverSchoolRecord.setUserId(userContext.getUserId());
driverSchoolRecord.setPersonId(userContext.getUserId());
driverSchoolRecord.setBaseCode(userContext.getBaseCode());
//判断是否重复
if(driverSchoolRecordService.isHave(driverSchoolRecord.getPersonId())){
driverSchoolRecordService.del(driverSchoolRecord.getPersonId());
}else {
driverSchoolRecordService.create(driverSchoolRecord);
}
return BaseResult.success("normal_001");
}
/**
* @description: 是否报名
* @author: wangmenglong
* @param: [driverSchoolRecord]
* @return: base.result.BaseResult
**/
@PostMapping("/have")
public BaseResult have(@RequestBody DriverSchoolRecord driverSchoolRecord){
UserContext userContext = UserUtils.getUserContext();
driverSchoolRecord.setUserId(userContext.getUserId());
driverSchoolRecord.setPersonId(userContext.getUserId());
//判断是否重复
if(driverSchoolRecordService.isHave(driverSchoolRecord.getPersonId())){
return BaseResult.success("normal_001","1");
}else {
return BaseResult.success("normal_001","0");
}
}
/**
* @description: 是否报名
* @author: wangmenglong
* @param: [signRecord]
* @return: base.result.BaseResult
**/
@PostMapping("/update/state")
public BaseResult updateState(@RequestBody SignRecord signRecord){
driverSchoolRecordService.updateState(signRecord.getId());
return BaseResult.success("normal_001");
}
}
package com.jxjy.system.controller;
import base.controller.BaseController;
import base.result.BaseResult;
import com.github.pagehelper.PageInfo;
import com.jxjy.system.service.ExperienceService;
import data.system.Experience;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
* @author wangmenglong
* @description: 招聘类型
* @date 2023/12/11 11:35
*/
@RestController
@RequestMapping("/experience")
public class ExperienceController extends BaseController {
@Resource
ExperienceService experienceService;
/**
* @description: 获取所有招聘类型列表
* @author: wangmenglong
* @date; 2023/12/7 10:07
* @param: [req]
* @return: com.github.pagehelper.PageInfo
**/
@GetMapping("/all")
public BaseResult all(HttpServletRequest req, Experience recrutiType){
PageInit(req);
List<Experience> list = experienceService.listAll(recrutiType);
PageInfo<Experience> pageInfo = new PageInfo<Experience>(list);
return BaseResult.success(pageInfo);
}
}
package com.jxjy.system.controller;
import base.controller.BaseController;
import base.result.BaseResult;
import com.github.pagehelper.PageInfo;
import com.jxjy.system.bean.auth.UserContext;
import com.jxjy.system.service.PersonService;
import com.jxjy.system.service.RecruitService;
import com.jxjy.system.service.HigherSchoolRecordService;
import com.jxjy.system.util.auth.UserUtils;
import data.system.Person;
import data.system.Recruit;
import data.system.HigherSchoolRecord;
import data.system.SignRecord;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
* @author wangmenglong
* @description: 报名管理
* @date 2023/12/11 11:35
*/
@RestController
@RequestMapping("/higherSchool/record")
public class HigherSchoolRecordController extends BaseController {
@Resource
HigherSchoolRecordService higherSchoolRecordService;
@Resource
PersonService personService;
/**
* @description: 获取报名列表
* @author: wangmenglong
* @date; 2023/12/7 10:07
* @param: [req]
* @return: com.github.pagehelper.PageInfo
**/
@GetMapping("/l")
public BaseResult list(HttpServletRequest req, Person person){
PageInit(req);
UserContext userContext = UserUtils.getUserContext();
List<Person> list = personService.listHigher(pageNum,pageSize,person);
PageInfo<Person> pageInfo = new PageInfo<Person>(list);
return BaseResult.success(pageInfo);
}
/**
* @description: 新增报名
* @author: wangmenglong
* @param: [higherSchoolRecord]
* @return: base.result.BaseResult
**/
@PostMapping("/c")
public BaseResult create(@RequestBody HigherSchoolRecord higherSchoolRecord){
UserContext userContext = UserUtils.getUserContext();
higherSchoolRecord.setUserId(userContext.getUserId());
higherSchoolRecord.setPersonId(userContext.getUserId());
higherSchoolRecord.setBaseCode(userContext.getBaseCode());
//判断是否重复
if(higherSchoolRecordService.isHave(higherSchoolRecord.getPersonId())){
higherSchoolRecordService.del(higherSchoolRecord.getPersonId());
}else {
higherSchoolRecordService.create(higherSchoolRecord);
}
return BaseResult.success("normal_001");
}
/**
* @description: 是否报名
* @author: wangmenglong
* @param: [higherSchoolRecord]
* @return: base.result.BaseResult
**/
@PostMapping("/have")
public BaseResult have(@RequestBody HigherSchoolRecord higherSchoolRecord){
UserContext userContext = UserUtils.getUserContext();
higherSchoolRecord.setUserId(userContext.getUserId());
higherSchoolRecord.setPersonId(userContext.getUserId());
//判断是否重复
if(higherSchoolRecordService.isHave(higherSchoolRecord.getPersonId())){
return BaseResult.success("normal_001","1");
}else {
return BaseResult.success("normal_001","0");
}
}
/**
* @description: 是否报名
* @author: wangmenglong
* @param: [signRecord]
* @return: base.result.BaseResult
**/
@PostMapping("/update/state")
public BaseResult updateState(@RequestBody SignRecord signRecord){
higherSchoolRecordService.updateState(signRecord.getId());
return BaseResult.success("normal_001");
}
}
package com.jxjy.system.controller;
import base.controller.BaseController;
import base.result.BaseResult;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageInfo;
import com.jxjy.system.bean.auth.UserContext;
import com.jxjy.system.service.IndustryService;
import com.jxjy.system.util.auth.UserUtils;
import data.system.Industry;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
* @author wangmenglong
* @description: 行业管理
* @date 2023/12/11 11:35
*/
@RestController
@RequestMapping("/industry")
public class IndustryController extends BaseController {
@Resource
IndustryService industryService;
/**
* @description: 获取行业列表
* @author: wangmenglong
* @date; 2023/12/7 10:07
* @param: [req]
* @return: com.github.pagehelper.PageInfo
**/
@GetMapping("/l")
public BaseResult list(HttpServletRequest req,Industry industry){
PageInit(req);
UserContext userContext = UserUtils.getUserContext();
industry.setBaseCode(userContext.getBaseCode());
List<Industry> list = industryService.list(pageNum,pageSize,industry);
PageInfo<Industry> pageInfo = new PageInfo<Industry>(list);
return BaseResult.success(pageInfo);
}
/**
* @description: 获取行业列表
* @author: wangmenglong
* @date; 2023/12/7 10:07
* @param: [req]
* @return: com.github.pagehelper.PageInfo
**/
@GetMapping("/l/all")
public BaseResult listAll(HttpServletRequest req,Industry industry){
UserContext userContext = UserUtils.getUserContext();
industry.setBaseCode(userContext.getBaseCode());
List<Industry> list = industryService.listAll(industry);
return BaseResult.success(list);
}
/**
* @description: 获取行业列表
* @author: wangmenglong
* @date; 2023/12/7 10:07
* @param: [req]
* @return: com.github.pagehelper.PageInfo
**/
@GetMapping("/l/all/evict")
public BaseResult listAllEvict(HttpServletRequest req,Industry industry){
industryService.cleanAllIndustryCache();
return BaseResult.success();
}
/**
* @description: 新增行业
* @author: wangmenglong
* @param: [industry]
* @return: base.result.BaseResult
**/
@PostMapping("/c")
public BaseResult create(@RequestBody Industry industry){
//判断是否重复
if(industryService.isHave(industry.getName(),industry.getId())){
return BaseResult.error("error_006");
}
return industryService.create(industry)?BaseResult.success("normal_001"):BaseResult.error("error_001");
}
/**
* @description: 编辑行业
* @author: wangmenglong
* @param: [industry]
* @return: base.result.BaseResult
**/
@PostMapping("/u")
public BaseResult update(@RequestBody Industry industry){
//判断是否重复
if(industryService.isHave(industry.getName(),industry.getId())){
return BaseResult.error("error_006");
}
return industryService.update(industry)?BaseResult.success("normal_002"):BaseResult.error("error_002");
}
/**
* @description: 删除行业
* @author: wangmenglong
* @date; 2023/12/7 11:08
* @param: [id]
* @return: base.result.BaseResult
**/
@PostMapping("/d")
public BaseResult del(@RequestBody JSONObject jsonObject){
String id = jsonObject.getString("id");
return industryService.del(id)?BaseResult.success("normal_002"):BaseResult.error("error_002");
}
/**
* @author: wangmenglong
* @date; 2024/3/24 17:18
* @description: 获取行业详情
* @param: [id]
* @return: base.result.BaseResult
**/
@GetMapping("/details")
public BaseResult details(@RequestParam("id")String id){
Industry industry = industryService.getDetails(id);
return BaseResult.success(industry);
}
/**
* @author: wangmenglong
* @date; 2024/3/24 17:18
* @description: 获取行业详情
* @param: [id]
* @return: base.result.BaseResult
**/
@GetMapping("/industry/details")
public BaseResult details(){
UserContext userContext = UserUtils.getUserContext();
Industry industry = industryService.getDetails(userContext.getUserId());
return BaseResult.success(industry);
}
}
package com.jxjy.system.controller;
import base.controller.BaseController;
import base.result.BaseResult;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageInfo;
import com.jxjy.system.bean.auth.UserContext;
import com.jxjy.system.service.MessageService;
import com.jxjy.system.util.auth.UserUtils;
import data.system.Message;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
* @author wangmenglong
* @description: 消息管理
* @date 2023/12/11 11:35
*/
@RestController
@RequestMapping("/message")
public class MessageController extends BaseController {
@Resource
MessageService messageService;
/**
* @description: 获取消息列表
* @author: wangmenglong
* @date; 2023/12/7 10:07
* @param: [req]
* @return: com.github.pagehelper.PageInfo
**/
@GetMapping("/l")
public BaseResult list(HttpServletRequest req,Message message){
PageInit(req);
UserContext userContext = UserUtils.getUserContext();
message.setBaseCode(userContext.getBaseCode());
List<Message> list = messageService.list(pageNum,pageSize,message);
PageInfo<Message> pageInfo = new PageInfo<Message>(list);
return BaseResult.success(pageInfo);
}
/**
* @description: 新增消息
* @author: wangmenglong
* @param: [message]
* @return: base.result.BaseResult
**/
@PostMapping("/c")
public BaseResult create(@RequestBody Message message){
return messageService.create(message)?BaseResult.success("normal_001"):BaseResult.error("error_001");
}
/**
* @description: 编辑消息
* @author: wangmenglong
* @param: [message]
* @return: base.result.BaseResult
**/
@PostMapping("/u")
public BaseResult update(@RequestBody Message message){
return messageService.update(message)?BaseResult.success("normal_002"):BaseResult.error("error_002");
}
/**
* @description: 删除消息
* @author: wangmenglong
* @date; 2023/12/7 11:08
* @param: [id]
* @return: base.result.BaseResult
**/
@PostMapping("/d")
public BaseResult del(@RequestBody JSONObject jsonObject){
String id = jsonObject.getString("id");
return messageService.del(id)?BaseResult.success("normal_002"):BaseResult.error("error_002");
}
/**
* @author: wangmenglong
* @date; 2024/3/24 17:18
* @description: 获取消息详情
* @param: [id]
* @return: base.result.BaseResult
**/
@GetMapping("/details")
public BaseResult details(@RequestParam("id")String id){
Message message = messageService.getDetails(id);
return BaseResult.success(message);
}
}
package com.jxjy.system.controller;
import base.controller.BaseController;
import base.result.BaseResult;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageInfo;
import com.jxjy.system.bean.auth.UserContext;
import com.jxjy.system.service.MessageRecordService;
import com.jxjy.system.util.auth.UserUtils;
import data.system.MessageRecord;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
* @author wangmenglong
* @description: 消息管理
* @date 2023/12/11 11:35
*/
@RestController
@RequestMapping("/message/record")
public class MessageRecordController extends BaseController {
@Resource
MessageRecordService messageRecordService;
/**
* @description: 获取消息列表
* @author: wangmenglong
* @date; 2023/12/7 10:07
* @param: [req]
* @return: com.github.pagehelper.PageInfo
**/
@GetMapping("/l")
public BaseResult list(HttpServletRequest req,MessageRecord messageRecord){
PageInit(req);
UserContext userContext = UserUtils.getUserContext();
messageRecord.setBaseCode(userContext.getBaseCode());
List<MessageRecord> list = messageRecordService.list(pageNum,pageSize,messageRecord);
PageInfo<MessageRecord> pageInfo = new PageInfo<MessageRecord>(list);
return BaseResult.success(pageInfo);
}
/**
* @author: wangmenglong
* @date; 2024/3/24 17:18
* @description: 获取消息详情
* @param: [id]
* @return: base.result.BaseResult
**/
@GetMapping("/details")
public BaseResult details(@RequestParam("id")String id){
MessageRecord messageRecord = messageRecordService.getDetails(id);
return BaseResult.success(messageRecord);
}
}
package com.jxjy.system.controller;
import base.controller.BaseController;
import base.result.BaseResult;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageInfo;
import com.jxjy.system.bean.auth.UserContext;
import com.jxjy.system.service.ObjectiveService;
import com.jxjy.system.util.auth.UserUtils;
import data.system.Objective;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
* @author wangmenglong
* @description: 求职意向管理
* @date 2023/12/11 11:35
*/
@RestController
@RequestMapping("/objective")
public class ObjectiveController extends BaseController {
@Resource
ObjectiveService objectiveService;
/**
* @description: 获取求职意向列表
* @author: wangmenglong
* @date; 2023/12/7 10:07
* @param: [req]
* @return: com.github.pagehelper.PageInfo
**/
@GetMapping("/l")
public BaseResult list(HttpServletRequest req,Objective objective){
PageInit(req);
UserContext userContext = UserUtils.getUserContext();
objective.setBaseCode(userContext.getBaseCode());
List<Objective> list = objectiveService.list(pageNum,pageSize,objective);
PageInfo<Objective> pageInfo = new PageInfo<Objective>(list);
return BaseResult.success(pageInfo);
}
/**
* @description: 新增求职意向
* @author: wangmenglong
* @param: [objective]
* @return: base.result.BaseResult
**/
@PostMapping("/c")
public BaseResult create(@RequestBody Objective objective){
//判断是否重复
if(objectiveService.isHave(objective.getUserId(),objective.getIndustryId(),objective.getId())){
return BaseResult.error("error_008");
}
return objectiveService.create(objective)?BaseResult.success("normal_001"):BaseResult.error("error_001");
}
/**
* @description: 编辑求职意向
* @author: wangmenglong
* @param: [objective]
* @return: base.result.BaseResult
**/
@PostMapping("/u")
public BaseResult update(@RequestBody Objective objective){
//判断是否重复
if(objectiveService.isHave(objective.getUserId(),objective.getIndustryId(),objective.getId())){
return BaseResult.error("error_008");
}
return objectiveService.update(objective)?BaseResult.success("normal_002"):BaseResult.error("error_002");
}
/**
* @description: 删除求职意向
* @author: wangmenglong
* @date; 2023/12/7 11:08
* @param: [id]
* @return: base.result.BaseResult
**/
@PostMapping("/d")
public BaseResult del(@RequestBody JSONObject jsonObject){
String id = jsonObject.getString("id");
return objectiveService.del(id)?BaseResult.success("normal_002"):BaseResult.error("error_002");
}
/**
* @author: wangmenglong
* @date; 2024/3/24 17:18
* @description: 获取求职意向详情
* @param: [id]
* @return: base.result.BaseResult
**/
@GetMapping("/details")
public BaseResult details(@RequestParam("id")String id){
Objective objective = objectiveService.getDetails(id);
return BaseResult.success(objective);
}
}
package com.jxjy.system.controller;
import base.controller.BaseController;
import base.result.BaseResult;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageInfo;
import com.jxjy.system.bean.auth.UserContext;
import com.jxjy.system.service.ObjectiveIndustryService;
import com.jxjy.system.util.auth.UserUtils;
import data.system.ObjectiveIndustry;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
* @author wangmenglong
* @description: 意向行业管理
* @date 2023/12/11 11:35
*/
@RestController
@RequestMapping("/objectiveIndustry")
public class ObjectiveIndustryController extends BaseController {
@Resource
ObjectiveIndustryService objectiveIndustryService;
/**
* @description: 获取意向行业列表
* @author: wangmenglong
* @date; 2023/12/7 10:07
* @param: [req]
* @return: com.github.pagehelper.PageInfo
**/
@GetMapping("/l/all")
public BaseResult listAll(HttpServletRequest req,ObjectiveIndustry objectiveIndustry){
PageInit(req);
UserContext userContext = UserUtils.getUserContext();
objectiveIndustry.setBaseCode(userContext.getBaseCode());
List<ObjectiveIndustry> list = objectiveIndustryService.listAll(objectiveIndustry);
PageInfo<ObjectiveIndustry> pageInfo = new PageInfo<ObjectiveIndustry>(list);
return BaseResult.success(pageInfo);
}
/**
* @description: 新增意向行业
* @author: wangmenglong
* @param: [objectiveIndustry]
* @return: base.result.BaseResult
**/
@PostMapping("/c")
public BaseResult create(@RequestBody ObjectiveIndustry objectiveIndustry){
//判断是否重复
if(objectiveIndustryService.isHave(objectiveIndustry.getPersonId(),objectiveIndustry.getIndustryId())){
return BaseResult.error("error_007");
}
return objectiveIndustryService.create(objectiveIndustry)?BaseResult.success("normal_001"):BaseResult.error("error_001");
}
/**
* @description: 删除意向行业
* @author: wangmenglong
* @date; 2023/12/7 11:08
* @param: [id]
* @return: base.result.BaseResult
**/
@PostMapping("/d")
public BaseResult del(@RequestBody JSONObject jsonObject){
String id = jsonObject.getString("id");
return objectiveIndustryService.del(id)?BaseResult.success("normal_002"):BaseResult.error("error_002");
}
}
package com.jxjy.system.controller;
import base.controller.BaseController;
import base.result.BaseResult;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageInfo;
import com.jxjy.system.bean.auth.UserContext;
import com.jxjy.system.service.OrgService;
import com.jxjy.system.util.auth.UserUtils;
import data.system.Org;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
* @author wangmenglong
* @description: 企业管理
* @date 2023/12/11 11:35
*/
@RestController
@RequestMapping("/org")
public class OrgController extends BaseController {
@Resource
OrgService orgService;
/**
* @description: 获取企业列表
* @author: wangmenglong
* @date; 2023/12/7 10:07
* @param: [req]
* @return: com.github.pagehelper.PageInfo
**/
@GetMapping("/l")
public BaseResult list(HttpServletRequest req,Org org){
PageInit(req);
UserContext userContext = UserUtils.getUserContext();
org.setBaseCode(userContext.getBaseCode());
List<Org> list = orgService.list(pageNum,pageSize,org);
PageInfo<Org> pageInfo = new PageInfo<Org>(list);
return BaseResult.success(pageInfo);
}
/**
* @description: 新增企业
* @author: wangmenglong
* @param: [org]
* @return: base.result.BaseResult
**/
@PostMapping("/c")
public BaseResult create(@RequestBody Org org){
//判断是否重复
if(orgService.isHave(org.getName(),org.getId())){
return BaseResult.error("error_004");
}
return orgService.create(org)?BaseResult.success("normal_001"):BaseResult.error("error_001");
}
/**
* @description: 编辑企业
* @author: wangmenglong
* @param: [org]
* @return: base.result.BaseResult
**/
@PostMapping("/u")
public BaseResult update(@RequestBody Org org){
//判断是否重复
if(orgService.isHave(org.getName(),org.getId())){
return BaseResult.error("error_004");
}
return orgService.update(org)?BaseResult.success("normal_002"):BaseResult.error("error_002");
}
/**
* @description: 删除企业
* @author: wangmenglong
* @date; 2023/12/7 11:08
* @param: [id]
* @return: base.result.BaseResult
**/
@PostMapping("/d")
public BaseResult del(@RequestBody JSONObject jsonObject){
String id = jsonObject.getString("id");
return orgService.del(id)?BaseResult.success("normal_002"):BaseResult.error("error_002");
}
/**
* @author: wangmenglong
* @date; 2024/3/24 17:18
* @description: 获取企业详情
* @param: [id]
* @return: base.result.BaseResult
**/
@GetMapping("/details")
public BaseResult details(@RequestParam("id")String id){
Org org = orgService.getDetails(id);
return BaseResult.success(org);
}
}
package com.jxjy.system.controller;
import base.controller.BaseController;
import base.result.BaseResult;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageInfo;
import com.jxjy.system.bean.auth.UserContext;
import com.jxjy.system.service.PersonService;
import com.jxjy.system.util.auth.UserUtils;
import data.system.Person;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
* @author wangmenglong
* @description: 人员管理
* @date 2023/12/11 11:35
*/
@RestController
@RequestMapping("/person")
public class PersonController extends BaseController {
@Resource
PersonService personService;
/**
* @description: 获取人员列表
* @author: wangmenglong
* @date; 2023/12/7 10:07
* @param: [req]
* @return: com.github.pagehelper.PageInfo
**/
@GetMapping("/l")
public BaseResult list(HttpServletRequest req,Person person){
PageInit(req);
UserContext userContext = UserUtils.getUserContext();
person.setBaseCode(userContext.getBaseCode());
List<Person> list = personService.list(pageNum,pageSize,person);
PageInfo<Person> pageInfo = new PageInfo<Person>(list);
return BaseResult.success(pageInfo);
}
/**
* @description: 新增人员
* @author: wangmenglong
* @param: [person]
* @return: base.result.BaseResult
**/
@PostMapping("/c")
public BaseResult create(@RequestBody Person person){
//判断是否重复
if(personService.isHave(person.getOpenId(),person.getId())){
return BaseResult.error("error_005");
}
return personService.create(person)?BaseResult.success("normal_001"):BaseResult.error("error_001");
}
/**
* @description: 编辑人员
* @author: wangmenglong
* @param: [person]
* @return: base.result.BaseResult
**/
@PostMapping("/u")
public BaseResult update(@RequestBody Person person){
//判断是否重复
if(personService.isHave(person.getOpenId(),person.getId())){
return BaseResult.error("error_005");
}
return personService.update(person)?BaseResult.success("normal_002"):BaseResult.error("error_002");
}
/**
* @description: 删除人员
* @author: wangmenglong
* @date; 2023/12/7 11:08
* @param: [id]
* @return: base.result.BaseResult
**/
@PostMapping("/d")
public BaseResult del(@RequestBody JSONObject jsonObject){
String id = jsonObject.getString("id");
return personService.del(id)?BaseResult.success("normal_002"):BaseResult.error("error_002");
}
/**
* @author: wangmenglong
* @date; 2024/3/24 17:18
* @description: 获取人员详情
* @param: [id]
* @return: base.result.BaseResult
**/
@GetMapping("/details")
public BaseResult details(@RequestParam("id")String id){
Person person = personService.getDetails(id);
return BaseResult.success(person);
}
/**
* @author: wangmenglong
* @date; 2024/3/24 17:18
* @description: 获取人员详情
* @param: [id]
* @return: base.result.BaseResult
**/
@GetMapping("/person/details")
public BaseResult details(){
UserContext userContext = UserUtils.getUserContext();
Person person = personService.getDetails(userContext.getUserId());
return BaseResult.success(person);
}
}
package com.jxjy.system.controller;
import base.controller.BaseController;
import base.result.BaseResult;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageInfo;
import com.jxjy.system.bean.auth.UserContext;
import com.jxjy.system.service.PersonEducationalService;
import com.jxjy.system.util.auth.UserUtils;
import data.system.PersonEducational;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
* @author wangmenglong
* @description: 教育经历管理
* @date 2023/12/11 11:35
*/
@RestController
@RequestMapping("/personEducational")
public class PersonEducationalController extends BaseController {
@Resource
PersonEducationalService personEducationalService;
/**
* @description: 获取教育经历列表
* @author: wangmenglong
* @date; 2023/12/7 10:07
* @param: [req]
* @return: com.github.pagehelper.PageInfo
**/
@GetMapping("/l")
public BaseResult list(HttpServletRequest req,PersonEducational personEducational){
PageInit(req);
UserContext userContext = UserUtils.getUserContext();
personEducational.setBaseCode(userContext.getBaseCode());
List<PersonEducational> list = personEducationalService.list(pageNum,pageSize,personEducational);
PageInfo<PersonEducational> pageInfo = new PageInfo<PersonEducational>(list);
return BaseResult.success(pageInfo);
}
/**
* @description: 新增教育经历
* @author: wangmenglong
* @param: [personEducational]
* @return: base.result.BaseResult
**/
@PostMapping("/c")
public BaseResult create(@RequestBody PersonEducational personEducational){
//判断是否重复
if(personEducationalService.isHave(personEducational.getSchool(),personEducational.getId())){
return BaseResult.error("error_004");
}
return personEducationalService.create(personEducational)?BaseResult.success("normal_001"):BaseResult.error("error_001");
}
/**
* @description: 编辑教育经历
* @author: wangmenglong
* @param: [personEducational]
* @return: base.result.BaseResult
**/
@PostMapping("/u")
public BaseResult update(@RequestBody PersonEducational personEducational){
//判断是否重复
if(personEducationalService.isHave(personEducational.getSchool(),personEducational.getId())){
return BaseResult.error("error_004");
}
return personEducationalService.update(personEducational)?BaseResult.success("normal_002"):BaseResult.error("error_002");
}
/**
* @description: 删除教育经历
* @author: wangmenglong
* @date; 2023/12/7 11:08
* @param: [id]
* @return: base.result.BaseResult
**/
@PostMapping("/d")
public BaseResult del(@RequestBody JSONObject jsonObject){
String id = jsonObject.getString("id");
return personEducationalService.del(id)?BaseResult.success("normal_002"):BaseResult.error("error_002");
}
/**
* @author: wangmenglong
* @date; 2024/3/24 17:18
* @description: 获取教育经历详情
* @param: [id]
* @return: base.result.BaseResult
**/
@GetMapping("/details")
public BaseResult details(@RequestParam("id")String id){
PersonEducational personEducational = personEducationalService.getDetails(id);
return BaseResult.success(personEducational);
}
}
package com.jxjy.system.controller;
import base.controller.BaseController;
import base.result.BaseResult;
import com.github.pagehelper.PageInfo;
import com.jxjy.system.service.QualificationService;
import data.system.Qualification;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
* @author wangmenglong
* @description: 学历
* @date 2023/12/11 11:35
*/
@RestController
@RequestMapping("/qualification")
public class QualificationController extends BaseController {
@Resource
QualificationService qualificationService;
/**
* @description: 获取所有招聘类型列表
* @author: wangmenglong
* @date; 2025/10/24 10:07
* @param: [req]
* @return: com.github.pagehelper.PageInfo
**/
@GetMapping("/all")
public BaseResult all(HttpServletRequest req, Qualification qualification){
PageInit(req);
List<Qualification> list = qualificationService.listAll(qualification);
PageInfo<Qualification> pageInfo = new PageInfo<Qualification>(list);
return BaseResult.success(pageInfo);
}
}
package com.jxjy.system.controller;
import base.controller.BaseController;
import base.result.BaseResult;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageInfo;
import com.jxjy.system.bean.auth.UserContext;
import com.jxjy.system.service.RecruitService;
import com.jxjy.system.util.auth.UserUtils;
import data.system.Recruit;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
* @author wangmenglong
* @description: 招聘管理
* @date 2023/12/11 11:35
*/
@RestController
@RequestMapping("/recruit")
public class RecruitController extends BaseController {
@Resource
RecruitService recruitService;
/**
* @description: 获取招聘列表
* @author: wangmenglong
* @date; 2023/12/7 10:07
* @param: [req]
* @return: com.github.pagehelper.PageInfo
**/
@GetMapping("/l")
public BaseResult list(HttpServletRequest req,Recruit recruit){
PageInit(req);
UserContext userContext = UserUtils.getUserContext();
recruit.setBaseCode(userContext.getBaseCode());
List<Recruit> list = recruitService.list(pageNum,pageSize,recruit);
PageInfo<Recruit> pageInfo = new PageInfo<Recruit>(list);
return BaseResult.success(pageInfo);
}
/**
* @description: 新增招聘
* @author: wangmenglong
* @date; 2023/12/11 16:50
* @param: [org]
* @return: base.result.BaseResult
**/
@PostMapping("/c")
public BaseResult create(@RequestBody Recruit recruit){
return recruitService.create(recruit)?BaseResult.success("normal_001"):BaseResult.error("error_001");
}
/**
* @description: 编辑招聘
* @author: wangmenglong
* @date; 2023/12/7 11:05
* @param: [org]
* @return: base.result.BaseResult
**/
@PostMapping("/u")
public BaseResult update(@RequestBody Recruit recruit){
return recruitService.update(recruit)?BaseResult.success("normal_002"):BaseResult.error("error_002");
}
/**
* @description: 删除招聘
* @author: wangmenglong
* @date; 2023/12/7 11:08
* @param: [id]
* @return: base.result.BaseResult
**/
@PostMapping("/d")
public BaseResult del(@RequestBody JSONObject jsonObject){
String id = jsonObject.getString("id");
return recruitService.del(id)?BaseResult.success("normal_002"):BaseResult.error("error_002");
}
/**
* @author: wangmenglong
* @date; 2024/3/24 17:18
* @description: 获取招聘详情
* @param: [id]
* @return: base.result.BaseResult
**/
@GetMapping("/details")
public BaseResult details(@RequestParam("id")String id){
Recruit recruit = recruitService.getDetails(id);
return BaseResult.success(recruit);
}
/**
* @description: 编辑招聘
* @author: wangmenglong
* @date; 2023/12/7 11:05
* @param: [org]
* @return: base.result.BaseResult
**/
@PostMapping("/u/status")
public BaseResult updateStatus(@RequestBody Recruit recruit){
return recruitService.updateStatus(recruit)?BaseResult.success("normal_002"):BaseResult.error("error_002");
}
}
package com.jxjy.system.controller;
import base.controller.BaseController;
import base.result.BaseResult;
import com.github.pagehelper.PageInfo;
import com.jxjy.system.service.RecruitTypeService;
import data.system.RecruitType;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
* @author wangmenglong
* @description: 招聘类型
* @date 2023/12/11 11:35
*/
@RestController
@RequestMapping("/recruit/type")
public class RecruitTypeController extends BaseController {
@Resource
RecruitTypeService recruitTypeService;
/**
* @description: 获取所有招聘类型列表
* @author: wangmenglong
* @date; 2023/12/7 10:07
* @param: [req]
* @return: com.github.pagehelper.PageInfo
**/
@GetMapping("/all")
public BaseResult all(HttpServletRequest req, RecruitType recrutiType){
PageInit(req);
List<RecruitType> list = recruitTypeService.listAll(recrutiType);
PageInfo<RecruitType> pageInfo = new PageInfo<RecruitType>(list);
return BaseResult.success(pageInfo);
}
}
package com.jxjy.system.controller;
import base.controller.BaseController;
import base.result.BaseResult;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageInfo;
import com.jxjy.system.bean.auth.UserContext;
import com.jxjy.system.service.SchoolService;
import com.jxjy.system.util.auth.UserUtils;
import data.system.School;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
* @author wangmenglong
* @description: 学校管理
* @date 2023/12/11 11:35
*/
@RestController
@RequestMapping("/school")
public class SchoolController extends BaseController {
@Resource
SchoolService schoolService;
/**
* @description: 获取学校列表
* @author: wangmenglong
* @date; 2023/12/7 10:07
* @param: [req]
* @return: com.github.pagehelper.PageInfo
**/
@GetMapping("/l")
public BaseResult list(HttpServletRequest req,School school){
PageInit(req);
UserContext userContext = UserUtils.getUserContext();
school.setBaseCode(userContext.getBaseCode());
List<School> list = schoolService.list(pageNum,pageSize,school);
PageInfo<School> pageInfo = new PageInfo<School>(list);
return BaseResult.success(pageInfo);
}
/**
* @description: 获取学校列表
* @author: wangmenglong
* @date; 2023/12/7 10:07
* @param: [req]
* @return: com.github.pagehelper.PageInfo
**/
@GetMapping("/l/all")
public BaseResult listAll(HttpServletRequest req,School school){
UserContext userContext = UserUtils.getUserContext();
school.setBaseCode(userContext.getBaseCode());
List<School> list = schoolService.list(pageNum,pageSize,school);
return BaseResult.success(list);
}
/**
* @description: 新增学校
* @author: wangmenglong
* @param: [school]
* @return: base.result.BaseResult
**/
@PostMapping("/c")
public BaseResult create(@RequestBody School school){
//判断是否重复
if(schoolService.isHave(school.getName(),school.getId())){
return BaseResult.error("error_009");
}
return schoolService.create(school)?BaseResult.success("normal_001"):BaseResult.error("error_001");
}
/**
* @description: 编辑学校
* @author: wangmenglong
* @param: [school]
* @return: base.result.BaseResult
**/
@PostMapping("/u")
public BaseResult update(@RequestBody School school){
//判断是否重复
if(schoolService.isHave(school.getName(),school.getId())){
return BaseResult.error("error_009");
}
return schoolService.update(school)?BaseResult.success("normal_002"):BaseResult.error("error_002");
}
/**
* @description: 删除学校
* @author: wangmenglong
* @date; 2023/12/7 11:08
* @param: [id]
* @return: base.result.BaseResult
**/
@PostMapping("/d")
public BaseResult del(@RequestBody JSONObject jsonObject){
String id = jsonObject.getString("id");
return schoolService.del(id)?BaseResult.success("normal_002"):BaseResult.error("error_002");
}
/**
* @author: wangmenglong
* @date; 2024/3/24 17:18
* @description: 获取学校详情
* @param: [id]
* @return: base.result.BaseResult
**/
@GetMapping("/details")
public BaseResult details(@RequestParam("id")String id){
School school = schoolService.getDetails(id);
return BaseResult.success(school);
}
}
package com.jxjy.system.controller;
import base.controller.BaseController;
import base.result.BaseResult;
import com.github.pagehelper.PageInfo;
import com.jxjy.system.bean.auth.UserContext;
import com.jxjy.system.service.SignRecordService;
import com.jxjy.system.service.RecruitService;
import com.jxjy.system.util.auth.UserUtils;
import data.system.SignRecord;
import data.system.Recruit;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
* @author wangmenglong
* @description: 报名管理
* @date 2023/12/11 11:35
*/
@RestController
@RequestMapping("/signRecord")
public class SignRecordController extends BaseController {
@Resource
SignRecordService signRecordService;
@Resource
RecruitService recruitService;
/**
* @description: 获取报名列表
* @author: wangmenglong
* @date; 2023/12/7 10:07
* @param: [req]
* @return: com.github.pagehelper.PageInfo
**/
@GetMapping("/l")
public BaseResult list(HttpServletRequest req){
PageInit(req);
UserContext userContext = UserUtils.getUserContext();
List<Recruit> list = recruitService.listBySignRecord(pageNum,pageSize,userContext.getUserId());
PageInfo<Recruit> pageInfo = new PageInfo<Recruit>(list);
return BaseResult.success(pageInfo);
}
/**
* @description: 获取报名列表
* @author: wangmenglong
* @date; 2023/12/7 10:07
* @param: [req]
* @return: com.github.pagehelper.PageInfo
**/
@GetMapping("/admin/list")
public BaseResult adminList(HttpServletRequest req){
PageInit(req);
String personIdno = req.getParameter("personIdno");
String personName = req.getParameter("personName");
String name = req.getParameter("name");
List<Recruit> list = recruitService.listBySignRecordAdmin(pageNum,pageSize,personIdno,personName,name);
PageInfo<Recruit> pageInfo = new PageInfo<Recruit>(list);
return BaseResult.success(pageInfo);
}
/**
* @description: 新增报名
* @author: wangmenglong
* @param: [signRecord]
* @return: base.result.BaseResult
**/
@PostMapping("/c")
public BaseResult create(@RequestBody SignRecord signRecord){
UserContext userContext = UserUtils.getUserContext();
signRecord.setUserId(userContext.getUserId());
signRecord.setPersonId(userContext.getUserId());
signRecord.setBaseCode(userContext.getBaseCode());
//判断是否重复
if(signRecordService.isHave(signRecord.getRecruitId(),signRecord.getPersonId())){
signRecordService.del(signRecord.getRecruitId(),signRecord.getPersonId());
}else {
signRecordService.create(signRecord);
}
return BaseResult.success("normal_001");
}
/**
* @description: 是否报名
* @author: wangmenglong
* @param: [signRecord]
* @return: base.result.BaseResult
**/
@PostMapping("/have")
public BaseResult have(@RequestBody SignRecord signRecord){
UserContext userContext = UserUtils.getUserContext();
signRecord.setUserId(userContext.getUserId());
signRecord.setPersonId(userContext.getUserId());
//判断是否重复
if(signRecordService.isHave(signRecord.getRecruitId(),signRecord.getPersonId())){
return BaseResult.success("normal_001","1");
}else {
return BaseResult.success("normal_001","0");
}
}
}
package com.jxjy.system.controller;
import base.controller.BaseController;
import base.result.BaseResult;
import com.alibaba.fastjson.JSONObject;
import com.jxjy.system.service.UserService;
import com.github.pagehelper.PageInfo;
import data.user.User;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
* @author wangmenglong
* @description: 用户管理
* @date 2023/12/11 11:35
*/
@RestController
@RequestMapping("/user")
public class UserController extends BaseController {
@Resource
UserService userService;
/**
* @description: 获取用户列表
* @author: wangmenglong
* @date; 2023/12/7 10:07
* @param: [req]
* @return: com.github.pagehelper.PageInfo
**/
@GetMapping("/l")
public BaseResult list(HttpServletRequest req,User user){
PageInit(req);
List<User> list = userService.list(pageNum,pageSize,user);
PageInfo<User> pageInfo = new PageInfo<User>(list);
return BaseResult.success(pageInfo);
}
/**
* @description: 新增用户
* @author: wangmenglong
* @date; 2023/12/11 16:50
* @param: [org]
* @return: base.result.BaseResult
**/
@PostMapping("/c")
public BaseResult create(@RequestBody User user){
//判断账号是否重复
if(userService.isHave(user.getAccount(),user.getId())){
return BaseResult.error("error_003");
}
return userService.create(user)?BaseResult.success("normal_001"):BaseResult.error("error_001");
}
/**
* @description: 编辑用户
* @author: wangmenglong
* @date; 2023/12/7 11:05
* @param: [org]
* @return: base.result.BaseResult
**/
@PostMapping("/u")
public BaseResult update(@RequestBody User user){
//判断账号重复
if(userService.isHave(user.getAccount(),user.getId())){
return BaseResult.error("error_003");
}
return userService.update(user)?BaseResult.success("normal_002"):BaseResult.error("error_002");
}
/**
* @description: 重置密码
* @author: wangmenglong
* @date; 2023/12/11 16:59
* @param: [id]
* @return: base.result.BaseResult
**/
@PostMapping("/reset")
public BaseResult reset(@RequestBody JSONObject jsonObject){
String id = jsonObject.getString("id");
return userService.reset(id)?BaseResult.success("normal_002"):BaseResult.error("error_002");
}
/**
* @description: 修改状态 停用/启用
* @author: wangmenglong
* @date; 2023/12/11 16:59
* @param: [id]
* @return: base.result.BaseResult
**/
@PostMapping("/ustate")
public BaseResult uState(@RequestBody JSONObject jsonObject){
String id = jsonObject.getString("id");
String state = jsonObject.getString("state");
return userService.uState(id,state)?BaseResult.success("normal_002"):BaseResult.error("error_002");
}
/**
* @description: 删除用户
* @author: wangmenglong
* @date; 2023/12/7 11:08
* @param: [id]
* @return: base.result.BaseResult
**/
@PostMapping("/d")
public BaseResult del(@RequestBody JSONObject jsonObject){
String id = jsonObject.getString("id");
return userService.del(id)?BaseResult.success("normal_002"):BaseResult.error("error_002");
}
/**
* @description: 修改密码
* @author: wangmenglong
* @date; 2023/12/12 10:55
* @param: [jsonObject]
* @return: base.result.BaseResult
**/
@PostMapping("/upassword")
public BaseResult uPassword(@RequestBody JSONObject jsonObject){
String oldPassword = jsonObject.getString("oldPassword");
String password = jsonObject.getString("password");
String id = jsonObject.getString("id");
return userService.uPassword(oldPassword,password,id)?BaseResult.success("normal_002"):BaseResult.error("error_002");
}
/**
* @author: wangmenglong
* @date; 2024/3/21 15:36
* @description: 修改当前用户的密码
* @param: [jsonObject]
* @return: base.result.BaseResult
**/
@PostMapping("/u/password")
public BaseResult updateUserPassword(@RequestBody JSONObject jsonObject){
String oldPassword = jsonObject.getString("oldPassword");
String password = jsonObject.getString("password");
return userService.updateUserPassword(oldPassword,password);
}
/**
* @author: wangmenglong
* @date; 2024/3/24 17:18
* @description: 获取用户详情
* @param: [id]
* @return: base.result.BaseResult
**/
@GetMapping("/details")
public BaseResult details(@RequestParam("id")String id){
User user = userService.getDetails(id);
return BaseResult.success(user);
}
}
package com.jxjy.system.controller;
import base.controller.BaseController;
import base.result.BaseResult;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageInfo;
import com.jxjy.system.bean.auth.UserContext;
import com.jxjy.system.service.WorkExperienceService;
import com.jxjy.system.util.auth.UserUtils;
import data.system.WorkExperience;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
* @author wangmenglong
* @description: 工作经历管理
* @date 2023/12/11 11:35
*/
@RestController
@RequestMapping("/workExperience")
public class WorkExperienceController extends BaseController {
@Resource
WorkExperienceService workExperienceService;
/**
* @description: 获取工作经历列表
* @author: wangmenglong
* @date; 2023/12/7 10:07
* @param: [req]
* @return: com.github.pagehelper.PageInfo
**/
@GetMapping("/l")
public BaseResult list(HttpServletRequest req,WorkExperience workExperience){
PageInit(req);
UserContext userContext = UserUtils.getUserContext();
workExperience.setBaseCode(userContext.getBaseCode());
List<WorkExperience> list = workExperienceService.list(pageNum,pageSize,workExperience);
PageInfo<WorkExperience> pageInfo = new PageInfo<WorkExperience>(list);
return BaseResult.success(pageInfo);
}
/**
* @description: 新增工作经历
* @author: wangmenglong
* @param: [workExperience]
* @return: base.result.BaseResult
**/
@PostMapping("/c")
public BaseResult create(@RequestBody WorkExperience workExperience){
//判断是否重复
if(workExperienceService.isHave(workExperience.getOrgName(),workExperience.getId())){
return BaseResult.error("error_004");
}
return workExperienceService.create(workExperience)?BaseResult.success("normal_001"):BaseResult.error("error_001");
}
/**
* @description: 编辑工作经历
* @author: wangmenglong
* @param: [workExperience]
* @return: base.result.BaseResult
**/
@PostMapping("/u")
public BaseResult update(@RequestBody WorkExperience workExperience){
//判断是否重复
if(workExperienceService.isHave(workExperience.getOrgName(),workExperience.getId())){
return BaseResult.error("error_004");
}
return workExperienceService.update(workExperience)?BaseResult.success("normal_002"):BaseResult.error("error_002");
}
/**
* @description: 删除工作经历
* @author: wangmenglong
* @date; 2023/12/7 11:08
* @param: [id]
* @return: base.result.BaseResult
**/
@PostMapping("/d")
public BaseResult del(@RequestBody JSONObject jsonObject){
String id = jsonObject.getString("id");
return workExperienceService.del(id)?BaseResult.success("normal_002"):BaseResult.error("error_002");
}
/**
* @author: wangmenglong
* @date; 2024/3/24 17:18
* @description: 获取工作经历详情
* @param: [id]
* @return: base.result.BaseResult
**/
@GetMapping("/details")
public BaseResult details(@RequestParam("id")String id){
WorkExperience workExperience = workExperienceService.getDetails(id);
return BaseResult.success(workExperience);
}
}
package com.jxjy.system.controller.api;
import base.controller.BaseController;
import base.result.BaseResult;
import com.jxjy.system.service.IndustryService;
import data.system.Industry;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
* @author wangmenglong
* @description: 行业管理
* @date 2023/12/11 11:35
*/
@RestController
@RequestMapping("/public/industry")
public class ApiIndustryController extends BaseController {
@Resource
IndustryService industryService;
/**
* @description: 获取行业列表
* @author: wangmenglong
* @date; 2023/12/7 10:07
* @param: [req]
* @return: com.github.pagehelper.PageInfo
**/
@GetMapping("/l/all")
public BaseResult listAll(HttpServletRequest req,Industry industry){
List<Industry> list = industryService.listAll(industry);
return BaseResult.success(list);
}
}
package com.jxjy.system.controller.api;
import base.controller.BaseController;
import base.result.BaseResult;
import com.jxjy.system.service.OrgService;
import data.system.Org;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* @author wangmenglong
* @description: 企业管理
* @date 2023/12/11 11:35
*/
@RestController
@RequestMapping("/public/org")
public class ApiOrgController extends BaseController {
@Resource
OrgService orgService;
/**
* @author: wangmenglong
* @date; 2024/3/24 17:18
* @description: 获取企业详情
* @param: [id]
* @return: base.result.BaseResult
**/
@GetMapping("/details")
public BaseResult details(@RequestParam("id")String id){
Org org = orgService.getDetails(id);
return BaseResult.success(org);
}
}
package com.jxjy.system.controller.api;
import base.controller.BaseController;
import base.result.BaseResult;
import com.jxjy.system.service.PersonService;
import data.system.Person;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
/**
* @author wangmenglong
* @description: 人员管理
* @date 2023/12/11 11:35
*/
@RestController
@RequestMapping("/public/person")
public class ApiPersonController extends BaseController {
@Resource
PersonService personService;
/**
* @description: 新增人员
* @author: wangmenglong
* @param: [person]
* @return: base.result.BaseResult
**/
@PostMapping("/c")
public BaseResult create(@RequestBody Person person){
//判断是否重复
if(personService.isHave(person.getOpenId(),person.getId())){
return BaseResult.success("normal_001");
}
return personService.create(person)?BaseResult.success("normal_001"):BaseResult.error("error_001");
}
/**
* @description: 编辑人员
* @author: wangmenglong
* @param: [person]
* @return: base.result.BaseResult
**/
@PostMapping("/u")
public BaseResult update(@RequestBody Person person){
//判断是否重复
if(personService.isHave(person.getOpenId(),person.getId())){
return BaseResult.success("normal_001");
}
return personService.update(person)?BaseResult.success("normal_002"):BaseResult.error("error_002");
}
}
package com.jxjy.system.controller.api;
import base.controller.BaseController;
import base.result.BaseResult;
import com.github.pagehelper.PageInfo;
import com.jxjy.system.service.RecruitService;
import data.system.Recruit;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
* @author wangmenglong
* @description: 招聘管理
* @date 2023/12/11 11:35
*/
@RestController
@RequestMapping("/public/recruit")
public class ApiRecruitController extends BaseController {
@Resource
RecruitService recruitService;
/**
* @description: 获取招聘列表
* @author: wangmenglong
* @date; 2023/12/7 10:07
* @param: [req]
* @return: com.github.pagehelper.PageInfo
**/
@GetMapping("/l")
public BaseResult list(HttpServletRequest req,Recruit recruit){
PageInit(req);
List<Recruit> list = recruitService.list(pageNum,pageSize,recruit);
PageInfo<Recruit> pageInfo = new PageInfo<Recruit>(list);
return BaseResult.success(pageInfo);
}
/**
* @author: wangmenglong
* @date; 2024/3/24 17:18
* @description: 获取招聘详情
* @param: [id]
* @return: base.result.BaseResult
**/
@GetMapping("/details")
public BaseResult details(@RequestParam("id")String id){
Recruit recruit = recruitService.getDetails(id);
return BaseResult.success(recruit);
}
}
package com.jxjy.system.controller.api;
import base.controller.BaseController;
import base.result.BaseResult;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONObject;
import com.jxjy.system.util.weixin.TencentMessageUtil;
import com.jxjy.system.util.weixin.WxApi;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.*;
import redis.RedisKey;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.HashMap;
/**
* @author wangmenglong
* @description: 微信登录管理
* @date 2025/09/23 11:35
*/
@RestController
@RequestMapping("/public/wx")
public class ApiWxController extends BaseController {
@Value("${weixin.appid}")
public String appId;
@Value("${weixin.secret}")
public String appSecret;
@Value("${weixin.openIdUrl}")
public String openIdUrl;
@Resource
StringRedisTemplate stringRedisTemplate;
/**
* @author: wangmenglong
* @date; 2024/1/25 11:04
* @description: 获取个人openid
* @param: [code]
* @return: com.mytrack.base.result.BaseResult
**/
@GetMapping("/get/openid")
public BaseResult getOpenId(@RequestParam("code")String code){
CloseableHttpClient httpClient = HttpClientBuilder.create().build();
HttpGet httpGet = new HttpGet(openIdUrl + "?appid=" + appId + "&secret=" + appSecret + "&js_code=" + code + "&grant_type=authorization_code");
try {
HttpResponse response = httpClient.execute(httpGet);
String responseBody = EntityUtils.toString(response.getEntity());
// 解析响应数据,获取用户的OpenID
JSONObject json = JSONObject.parseObject(responseBody);
System.out.println("=================================获取openid使用appid:"+appId);
System.out.println("=================================获取openid使用appSecret:"+appSecret);
System.out.println("=================================获取openid返回信息:"+responseBody);
String openid = json.getString("openid");
if(StringUtils.isEmpty(openid)){
return BaseResult.error("获取openid异常,openid="+openid);
}
return BaseResult.success("normal_002",openid);
} catch (IOException e) {
e.printStackTrace();
}
return BaseResult.error("error_002");
}
/**
* @author: wangmenglong
* @date; 2024/6/17 9:41
* @description: 获取手机号
* @param: [code]
* @return: util.BaseResult
**/
@GetMapping("/get/phoneNumber")
public BaseResult getPhoneNumber(@RequestParam("code")String code){
// 登录凭证不能为空
if (StringUtils.isEmpty(code)) {
return BaseResult.error("code 不能为空");
}
//获取 接口调用凭据
HashMap<String, Object> requestParam = new HashMap<>();
// appId
requestParam.put("appid", appId);
// 唯一凭证id appid:(换成自己的)
requestParam.put("secret", appSecret);
requestParam.put("grant_type", "client_credential");
// 发送GET请求读取调用微信接口获取openid用户唯一标识
String result = HttpUtil.get(WxApi.MESSAGE_ACCESS_TOKEN, requestParam);
JSONObject jsonObject = JSONObject.parseObject(result);
String accessToken = jsonObject.getString("access_token");
JSONObject paramMap = new JSONObject();
paramMap.put("code", code);
String post = HttpUtil.post(WxApi.PHONE_NUMBER + accessToken, paramMap.toJSONString());
// 解析响应数据
JSONObject json = JSONObject.parseObject(post);
if(!"0".equals(json.getString("errcode"))){
return BaseResult.error(json.getString("errmsg"));
}
JSONObject phoneInfoObj = JSONObject.parseObject(json.getString("phone_info"));
String phoneNumber = phoneInfoObj.getString("phoneNumber");
return BaseResult.success("normal_002",phoneNumber);
}
/**
* 发送微信消息
* @return:
* @Author: wml
* @Date 2024/5/22 9:39
*/
@GetMapping("/get/message/number")
public BaseResult getMessageNumber(HttpServletRequest req, String openId, String templateId)throws Exception{
if(!stringRedisTemplate.opsForHash().hasKey(RedisKey.TENCENT_MESSAGE_NUMBER,openId+"_"+templateId)){
return BaseResult.success(0);
}
return BaseResult.success(Integer.parseInt(stringRedisTemplate.opsForHash().get(RedisKey.TENCENT_MESSAGE_NUMBER,openId+"_"+templateId).toString()));
}
/**
* 发送微信消息
* @return:
* @Author: wml
* @Date 2024/5/22 9:39
*/
@PostMapping("/add/message/number")
public BaseResult addMessageNumber(HttpServletRequest req,@RequestBody JSONObject json)throws Exception{
String templateId=json.getString("templateId");
String openId=json.getString("openId");
TencentMessageUtil.addMessageNumber(stringRedisTemplate,templateId,openId,1);
return BaseResult.success();
}
}
package com.jxjy.system.controller.api;
import com.jxjy.system.service.IndustryService;
import com.jxjy.system.xsnowflake.SnowFlakeFactory;
import data.system.Industry;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import util.CommonUtils;
import util.MultipartFileToFile;
import util.excel.ExcelXlsxReader;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.util.List;
import java.util.Map;
/**
* 日结名单导入
* @author: wangmenglong
* @date: 2021/7/26
*/
@RestController
@RequestMapping(value = "/import/industry")
public class ImportIndustryController {
@Autowired
IndustryService industryService;
@Autowired
SnowFlakeFactory snowFlakeFactory;
/**
* 日结名单导入
* @param: [req]
* @return: util.BaseResult
* @author: wangmenglong
* @date: 2021/7/13
*/
@RequestMapping(value = "/upload", method = RequestMethod.POST)
public void uploadEntryFile(HttpServletRequest req, @RequestParam(value = "file", required = false) MultipartFile multipartFile) {
try {
File file = MultipartFileToFile.multipartFileToFile(multipartFile);
ExcelXlsxReader excelXlsxReader = new ExcelXlsxReader();
Map<String, List<List<String>>> map = excelXlsxReader.process(file);
List<List<String>> rowList = map.get("1");
rowList.remove(0);
for (List<String> colList : rowList) {
Thread.sleep(100);
//获取每行数据
Industry industry=new Industry();
String oneName = CommonUtils.replaceBlank(colList.get(0));
String oneSort = CommonUtils.replaceBlank(colList.get(1));
String twoName = CommonUtils.replaceBlank(colList.get(2));
String twoSort = CommonUtils.replaceBlank(colList.get(3));
String name = CommonUtils.replaceBlank(colList.get(4));
String code = CommonUtils.replaceBlank(colList.get(5));
Industry oneindustry = industryService.getDetailsByName(oneName,"0");
Industry twoindustry = industryService.getDetailsByName(twoName,"1");
if(oneindustry== null){
oneindustry = new Industry();
oneindustry.setId(snowFlakeFactory.nextId());
oneindustry.setParentId("0");
oneindustry.setSort(Integer.parseInt(oneSort));
oneindustry.setName(oneName);
industryService.create(oneindustry);
}
if(twoindustry== null){
twoindustry = new Industry();
twoindustry.setId(snowFlakeFactory.nextId());
twoindustry.setParentId("0");
twoindustry.setSort(Integer.parseInt(twoSort));
twoindustry.setParentId(oneindustry.getId());
twoindustry.setName(twoName);
industryService.create(twoindustry);
}
industry = new Industry();
industry.setId(snowFlakeFactory.nextId());
industry.setParentId("0");
industry.setCode(code);
industry.setName(name);
industry.setParentId(twoindustry.getId());
industryService.create(industry);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
package com.jxjy.system.exception;
/**
* @ClassName : NoUserException
* @Description :
* @Author : wml
* @Date: 2025-04-09 11:01
*/
public class HaveUserException extends RuntimeException{
}
package com.jxjy.system.exception;
/**
* @ClassName : NoUserException
* @Description :
* @Author : wml
* @Date: 2025-04-09 11:01
*/
public class NoUserException extends RuntimeException{
}
package com.jxjy.system.exception;
/**
* @ClassName : NoUserException
* @Description :
* @Author : wml
* @Date: 2025-04-09 11:01
*/
public class PasswordErrorException extends RuntimeException{
}
package com.jxjy.system.filter;
import com.alibaba.fastjson.JSONObject;
import com.jxjy.system.bean.auth.SelfUserEntity;
import com.jxjy.system.config.auth.JWTConfig;
import com.jxjy.system.util.auth.ExportPrivateKey;
import com.jxjy.system.util.auth.ResultUtil;
import com.jxjy.system.service.UserService;
import com.jxjy.system.util.auth.InjectUtil;
import data.user.User;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.ExpiredJwtException;
import io.jsonwebtoken.Jwts;
import org.apache.commons.lang3.StringUtils;
import org.springframework.core.io.ClassPathResource;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.LockedException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.web.authentication.www.BasicAuthenticationFilter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
public class JWTAuthenticationTokenFilter extends BasicAuthenticationFilter {
private UserService userService = InjectUtil.getInstance().getUserService();
public JWTAuthenticationTokenFilter(AuthenticationManager authenticationManager) {
super(authenticationManager);
}
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
StringBuffer requestURL = request.getRequestURL();
String provider = "";
try {
ClassPathResource classPathResource = new ClassPathResource("cm-crm-jwt.jks");
InputStream inputStream = classPathResource.getInputStream();
ExportPrivateKey export = new ExportPrivateKey();
export.keystoreFile = inputStream;
export.keyStoreType = "JKS";
export.password = JWTConfig.secret.toCharArray();
export.alias = "cm-crm-jwt";
//export.exportedFile=new File("luke");
provider = export.export();
} catch (Exception e) {
System.out.println("Token无效");
return;
}
// 获取请求头中JWT的Token
String tokenHeader = request.getHeader(JWTConfig.tokenHeader);
if (null != tokenHeader && tokenHeader.startsWith(JWTConfig.tokenPrefix)) {
try {
// 截取JWT前缀
String token = tokenHeader.replace(JWTConfig.tokenPrefix, "");
// 解析JWT
Claims claims = Jwts.parser()
.setSigningKey(provider)
.parseClaimsJws(token)
.getBody();
// 获取用户名
String username = claims.getSubject();
String userId = claims.getId();
String openId = (String) claims.get("openId");
//查询当前账号的状态,如果是禁用直接返回
if(StringUtils.isBlank(openId)){
User user = userService.getDetailsByLoginAccount(username);
if (user == null) {
ResultUtil.responseJson(response,ResultUtil.resultCode(102,"账号不存在"));
throw new UsernameNotFoundException("账号不存在");
}
Object state = user.getState();
if (!Objects.equals(state, "normal")) {
ResultUtil.responseJson(response,ResultUtil.resultCode(101,"账号被禁用"));
// 账号被禁用
throw new LockedException("账号被禁用");
}
}
if (!StringUtils.isEmpty(username) && !StringUtils.isEmpty(userId)) {
// 获取角色
List<GrantedAuthority> authorities = new ArrayList<>();
String baseCode = claims.get("baseCode").toString();
if (claims.get("authorities")!=null&&!StringUtils.isEmpty(claims.get("authorities").toString())&&!"null".equals(claims.get("authorities"))) {
String authority = claims.get("authorities").toString();
List<Map<String, String>> authorityMap = JSONObject.parseObject(authority, List.class);
for (Map<String, String> role : authorityMap) {
if (role != null) {
authorities.add(new SimpleGrantedAuthority(role.get("authority")));
}
}
}
//组装参数
SelfUserEntity selfUserEntity = new SelfUserEntity();
selfUserEntity.setUsername(claims.getSubject());
selfUserEntity.setUserId(claims.getId());
selfUserEntity.setAuthorities(authorities);
selfUserEntity.setBaseCode(baseCode);
selfUserEntity.setName(claims.getOrDefault("name", "").toString());
selfUserEntity.setType(claims.getOrDefault("type", "").toString());
selfUserEntity.setRoleId(claims.getOrDefault("roleId", "").toString());
selfUserEntity.setRoleTag(claims.getOrDefault("roleTag", "").toString());
selfUserEntity.setIdNo(claims.getOrDefault("idNo", "").toString());
selfUserEntity.setOpenId(claims.getOrDefault("openId","").toString());
selfUserEntity.setPhone(claims.getOrDefault("phone","").toString());
selfUserEntity.setSuperAdmin(Boolean.parseBoolean(claims.getOrDefault("superAdmin", "false").toString()));
UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(selfUserEntity, userId, authorities);
SecurityContextHolder.getContext().setAuthentication(authentication);
}
} catch (ExpiredJwtException e) {
System.out.println("Token过期");
} catch (LockedException e){
System.out.println("=============================账号被禁用======================");
}catch (UsernameNotFoundException e){
System.out.println("=============================账号不存在======================");
}catch (Exception e) {
//System.out.println("Token无效4");
}
}
filterChain.doFilter(request, response);
return;
}
}
\ No newline at end of file
package com.jxjy.system.handler.auth;
import com.jxjy.system.util.auth.ResultUtil;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.security.web.access.AccessDeniedHandler;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Component
public class UserAuthAccessDeniedHandler implements AccessDeniedHandler {
/**
* 暂无权限返回结果
* @author wml
* @date 2020/4/4
* @param request
* @param response
* @param exception
* @return
**/
@Override
public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException exception){
ResultUtil.responseJson(response,ResultUtil.resultCode(403,"未授权"));
}
}
\ No newline at end of file
package com.jxjy.system.handler.auth;
import com.jxjy.system.util.auth.ResultUtil;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.web.AuthenticationEntryPoint;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Component
public class UserAuthenticationEntryPointHandler implements AuthenticationEntryPoint {
/**
* 用户未登录返回结果
*
* @param request
* @param response
* @param exception
* @return
* @author wangmenglong
* @date 2020/4/4
**/
@Override
public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) {
ResultUtil.responseJson(response, ResultUtil.resultCode(401, "未登录"));
}
}
package com.jxjy.system.handler.auth;
import com.jxjy.system.util.auth.ResultUtil;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.authentication.LockedException;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.web.authentication.AuthenticationFailureHandler;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Component
public class UserLoginFailureHandler implements AuthenticationFailureHandler {
/**
* 登录失败返回结果
* @author wml
* @date 2020/4/4
* @param request
* @param response
* @param exception
* @return
**/
@Override
public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws IOException {
// 这些对于操作的处理类可以根据不同异常进行不同处理
if (exception instanceof UsernameNotFoundException){
ResultUtil.responseJson(response,ResultUtil.resultCode(500,"账号不存在"));
}
if (exception instanceof LockedException){
ResultUtil.responseJson(response,ResultUtil.resultCode(500,"账号被禁用"));
}
if (exception instanceof BadCredentialsException){
ResultUtil.responseJson(response,ResultUtil.resultCode(500,exception.getMessage()));
}
ResultUtil.responseJson(response,ResultUtil.resultCode(500,"登录失败"));
}
}
package com.jxjy.system.handler.auth;
import com.jxjy.system.bean.auth.SelfUserEntity;
import com.jxjy.system.util.auth.JWTTokenUtil;
import com.jxjy.system.util.auth.ResultUtil;
import org.springframework.security.core.Authentication;
import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
import org.springframework.stereotype.Component;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
@Component
public class UserLoginSuccessHandler implements AuthenticationSuccessHandler {
/**
* 登录成功返回结果
* @author wml
* @date 2020/4/4
* @param request
* @param response
* @param authentication
* @return
**/
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
// 组装JWT
SelfUserEntity selfUserEntity = (SelfUserEntity) authentication.getPrincipal();
String token = JWTTokenUtil.createAccessToken(selfUserEntity);
//token = JWTConfig.tokenPrefix + token;
// 封装返回参数
Map<String,Object> resultData = new HashMap<>();
resultData.put("code","200");
resultData.put("msg", "登录成功");
resultData.put("token",token);
resultData.put("name",selfUserEntity.getName());
resultData.put("phone", selfUserEntity.getPhone());
resultData.put("baseCode", selfUserEntity.getBaseCode());
resultData.put("superAdmin", selfUserEntity.getSuperAdmin());
ResultUtil.responseJson(response,resultData);
}
}
package com.jxjy.system.handler.auth;
import com.jxjy.system.util.auth.ResultUtil;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.web.authentication.logout.LogoutSuccessHandler;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;
@Component
public class UserLogoutSuccessHandler implements LogoutSuccessHandler {
/**
* 用户登出返回结果
* 这里应该让前端清除掉Token
* @author wml
* @date 2020/4/4
* @param request
* @param response
* @param authentication
* @return
**/
@Override
public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication){
Map<String,Object> resultData = new HashMap<>();
resultData.put("code","200");
resultData.put("msg", "登出成功");
SecurityContextHolder.clearContext();
ResultUtil.responseJson(response,ResultUtil.resultSuccess(resultData));
}
}
package com.jxjy.system.listener.auth;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.availability.AvailabilityChangeEvent;
import org.springframework.boot.availability.AvailabilityState;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
/**
* description: 监听系统事件的类 <br>
* date: 2020/6/4 下午12:57 <br>
* author: willzhao <br>
* email: zq2599@gmail.com <br>
* version: 1.0 <br>
*/
@Component
@Slf4j
public class AvailabilityListener {
/**
* 监听系统消息,
* AvailabilityChangeEvent类型的消息都从会触发此方法被回调
* @param event
*/
@EventListener
public void onStateChange(AvailabilityChangeEvent<? extends AvailabilityState> event) {
log.info(event.getState().getClass().getSimpleName() + " : " + event.getState());
}
}
\ No newline at end of file
package com.jxjy.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import data.system.Collect;
/**
* @Author: wml
* @Date 2025/5/9 10:21
*/
public interface CollectMapper extends BaseMapper<Collect> {
}
package com.jxjy.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import data.system.DriverSchoolRecord;
/**
* @Author: wml
* @Date 2025/5/9 10:21
*/
public interface DriverSchoolRecordMapper extends BaseMapper<DriverSchoolRecord> {
}
package com.jxjy.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import data.system.Experience;
/**
* @Author: wml
* @Date 2025/5/9 10:21
*/
public interface ExperienceMapper extends BaseMapper<Experience> {
}
package com.jxjy.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import data.system.HigherSchoolRecord;
/**
* @Author: wml
* @Date 2025/5/9 10:21
*/
public interface HigherSchoolRecordMapper extends BaseMapper<HigherSchoolRecord> {
}
package com.jxjy.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import data.system.Industry;
/**
* @Author: wml
* @Date 2025/5/9 10:21
*/
public interface IndustryMapper extends BaseMapper<Industry> {
}
package com.jxjy.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import data.system.Message;
import data.system.Org;
/**
* @Author: wml
* @Date 2025/5/9 10:21
*/
public interface MessageMapper extends BaseMapper<Message> {
}
package com.jxjy.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import data.system.MessageRecord;
/**
* @Author: wml
* @Date 2025/5/9 10:21
*/
public interface MessageRecordMapper extends BaseMapper<MessageRecord> {
}
package com.jxjy.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import data.system.ObjectiveIndustry;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
* @Author: wml
* @Date 2025/5/9 10:21
*/
public interface ObjectiveIndustryMapper extends BaseMapper<ObjectiveIndustry> {
/**
* 根据basecode查询员工意向行业列表
* @param baseCode 基础编码参数
* @return 员工意向行业列表
* @Author: wml
* @Date 2025/9/9 10:47
*/
@Select("<script>" +
"SELECT a.*,b.name from tb_objective_industry a " +
"left join tb_industry as b on b.id = a.industry_id where a.del = 0 "+
"<if test='baseCode != null and baseCode != \"\"'>" +
" and a.base_code = #{baseCode}" +
"</if>" +
"<if test='personId != null and personId != \"\"'>" +
" and a.person_id = #{personId}" +
"</if>" +
"<if test='industryId != null and industryId != \"\"'>" +
" and a.industry_id = #{industryId}" +
"</if>" +
"</script>")
List<ObjectiveIndustry> listAll(@Param("baseCode") String baseCode,@Param("personId") String personId,@Param("industryId") String industryId);
}
package com.jxjy.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import data.system.Objective;
/**
* @Author: wml
* @Date 2025/5/9 10:21
*/
public interface ObjectiveMapper extends BaseMapper<Objective> {
}
package com.jxjy.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import data.system.Org;
/**
* @Author: wml
* @Date 2025/5/9 10:21
*/
public interface OrgMapper extends BaseMapper<Org> {
}
package com.jxjy.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import data.system.PersonEducational;
/**
* @Author: wml
* @Date 2025/5/9 10:21
*/
public interface PersonEducationalMapper extends BaseMapper<PersonEducational> {
}
package com.jxjy.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import data.system.Person;
/**
* @Author: wml
* @Date 2025/5/9 10:21
*/
public interface PersonMapper extends BaseMapper<Person> {
}
package com.jxjy.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import data.system.Qualification;
/**
* @Author: wml
* @Date 2025/5/9 10:21
*/
public interface QualificationMapper extends BaseMapper<Qualification> {
}
package com.jxjy.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import data.system.Recruit;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
* @Author: wml
* @Date 2025/5/9 10:21
*/
public interface RecruitMapper extends BaseMapper<Recruit> {
@Select("<script>" +
"SELECT r.* " +
"FROM tb_recruit r " +
"RIGHT JOIN tb_collect rt ON r.id = rt.recruit_id " +
"WHERE r.del = 0 and rt.del = 0 " +
"<if test='personId != null and personId != \"\"'>" +
" AND rt.person_id = #{personId}" +
"</if>" +
"ORDER BY rt.create_time DESC" +
"</script>")
List<Recruit> listByCollect(@Param("personId") String personId);
@Select("<script>" +
"SELECT r.*,rt.person_id as personId,rt.create_time as rtTime,rt.state as recordState,rt.id as recordId " +
"FROM tb_recruit r " +
"RIGHT JOIN tb_sign_record rt ON r.id = rt.recruit_id " +
"WHERE r.del = 0 and rt.del = 0 " +
"<if test='name != null and name != \"\"'>" +
" AND r.name like CONCAT('%', #{name}, '%')" +
"</if>" +
"<if test='personId != null and personId != \"\"'>" +
" AND rt.person_id = #{personId}" +
"</if>" +
"<if test='personName != null and personName != \"\"'>" +
" and rt.person_id in (select id FROM tb_person where name = #{personName})" +
"</if>" +
"<if test='personIdno != null and personIdno != \"\"'>" +
" and rt.person_id in (select id FROM tb_person where id_no = #{personIdno})" +
"</if>" +
"<if test='adminType != null and adminType != \"admin\"'>" +
" and rt.recruit_id in (select id FROM tb_recruit where user_id = #{adminId})" +
"</if>" +
"ORDER BY rt.create_time DESC" +
"</script>")
List<Recruit> listBySignRecord(@Param("personId") String personId,@Param("personIdno") String personIdno,@Param("personName") String personName
,@Param("name") String name,@Param("adminType") String adminType,@Param("adminId") String adminId);
}
package com.jxjy.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import data.system.RecruitType;
/**
* @Author: wml
* @Date 2025/5/9 10:21
*/
public interface RecruitTypeMapper extends BaseMapper<RecruitType> {
}
package com.jxjy.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import data.system.Org;
import data.system.School;
/**
* @Author: wml
* @Date 2025/5/9 10:21
*/
public interface SchoolMapper extends BaseMapper<School> {
}
package com.jxjy.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import data.system.SignRecord;
/**
* @Author: wml
* @Date 2025/5/9 10:21
*/
public interface SignRecordMapper extends BaseMapper<SignRecord> {
}
package com.jxjy.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import data.user.User;
/**
*
* @Author: wml
* @Date 2025/5/9 10:21
*/
public interface UserMapper extends BaseMapper<User> {
}
package com.jxjy.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import data.system.WorkExperience;
/**
* @Author: wml
* @Date 2025/5/9 10:21
*/
public interface WorkExperienceMapper extends BaseMapper<WorkExperience> {
}
package com.jxjy.system.schedule;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
import com.jxjy.system.service.MessageRecordService;
import com.jxjy.system.service.MessageService;
import com.jxjy.system.service.PersonService;
import com.jxjy.system.util.weixin.TencentMessageUtil;
import data.system.Message;
import data.system.MessageRecord;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.List;
/**
* 定时任务
*/
@Component
public class MessageSchedule {
@Resource
private MessageService messageService;
@Resource
private MessageRecordService messageRecordService;
@Resource
private PersonService personService;
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Value("${weixin.appid}")
String AppId;
@Value("${weixin.secret}")
String Secret;
@Value("${wechat.messagePersonnelTemplateId}")
String MPTId;
@Value("${wechat.messageMiniprogram}")
String MMP;
/**
* 循环发送腾讯消息
* @author: wangmenglong
* @date: 2025/10/27
*/
@Scheduled(cron = "0/30 * * * * ?")
public void runner(){
System.out.println("校招定时任务");
Message message = messageService.getOneMessage();
if(message!=null){
List<data.system.Person> personList = personService.getRecruitMessageList(message.getRecruitId());
for (data.system.Person person : personList) {
//发送腾讯消息
MessageRecord messageRecord = new MessageRecord();
messageRecord.setBaseCode(person.getBaseCode());
messageRecord.setDel(false);
messageRecord.setTitle(message.getTitle());
messageRecord.setContent(message.getContent());
messageRecord.setUserId(person.getId());
messageRecord.setRecruitId(message.getRecruitId());
messageRecord.setIsRead(false);
messageRecord.setPersonnelId(person.getId());
messageRecordService.create(messageRecord);
//发送微信消息
JSONObject json = new JSONObject();
json.put("thing6", JSONObject.parseObject("{'value':'预支工资提醒'}"));
json.put("thing2", JSONObject.parseObject("{'value':'预支已发放'}"));
json.put("time9", JSONObject.parseObject("{'value':'" + DateUtil.now() + "'}"));
json.put("thing5", JSONObject.parseObject("{'value':'点击查看详情'}"));
//发送消息并减少数量
//TencentMessageUtil.send(stringRedisTemplate, AppId, Secret, MPTId, "/pages/home/advanceLog/index", MMP, person.getOpenId(), json);
}
if(personList.size()==0){
message.setState("end");
messageService.update(message);
}
}
}
}
package com.jxjy.system.service;
import data.system.Collect;
import java.util.List;
/**
*
* @return: 收藏管理
* @Author: wml
* @Date 2025/5/9 10:20
*/
public interface CollectService {
List<Collect> list(int pageNum, int pageSize, Collect collect);
boolean create(Collect collect);
boolean update(Collect collect);
boolean del(String recruitId,String personId);
Collect getDetails(String id);
boolean isHave(String openId, String id);
}
package com.jxjy.system.service;
import data.system.DriverSchoolRecord;
import data.system.HigherSchoolRecord;
/**
* @return: 报名记录
* @Author: wml
* @Date 2025/5/9 10:20
*/
public interface DriverSchoolRecordService {
String create(DriverSchoolRecord driverSchoolRecord);
boolean del(String personId);
boolean isHave(String id);
boolean updateState(String id);
DriverSchoolRecord detailsByPersonId(String personId);
}
package com.jxjy.system.service;
import data.system.Experience;
import java.util.List;
/**
*
* @return: 经验
* @Author: wml
* @Date 2025/5/9 10:20
*/
public interface ExperienceService {
List<Experience> listAll(Experience experience);
}
package com.jxjy.system.service;
import data.system.HigherSchoolRecord;
/**
* @return: 报名记录
* @Author: wml
* @Date 2025/5/9 10:20
*/
public interface HigherSchoolRecordService {
String create(HigherSchoolRecord higherSchoolRecord);
boolean del(String personId);
boolean isHave(String id);
boolean updateState(String id);
HigherSchoolRecord detailsByPersonId(String personId);
}
package com.jxjy.system.service;
import data.system.Industry;
import java.util.List;
/**
*
* @return: 行业管理
* @Author: wml
* @Date 2025/5/9 10:20
*/
public interface IndustryService {
List<Industry> list(int pageNum, int pageSize, Industry industry);
List<Industry> listAll(Industry industry);
void cleanAllIndustryCache();
boolean create(Industry industry);
boolean update(Industry industry);
boolean del(String id);
Industry getDetails(String id);
boolean isHave(String openId, String id);
Industry getDetailsByName(String name,String parentType);
Industry getDetailsByCode(String code,String parentType);
}
package com.jxjy.system.service;
import data.system.MessageRecord;
import java.util.List;
/**
*
* @return: 消息管理
* @Author: wml
* @Date 2025/5/9 10:20
*/
public interface MessageRecordService {
List<MessageRecord> list(int pageNum, int pageSize, MessageRecord messageRecord);
boolean create(MessageRecord messageRecord);
boolean update(MessageRecord messageRecord);
boolean del(String id);
MessageRecord getDetails(String id);
}
package com.jxjy.system.service;
import data.system.Message;
import java.util.List;
/**
*
* @return: 消息管理
* @Author: wml
* @Date 2025/5/9 10:20
*/
public interface MessageService {
List<Message> list(int pageNum, int pageSize, Message message);
boolean create(Message message);
boolean update(Message message);
boolean del(String id);
Message getDetails(String id);
Message getOneMessage();
}
package com.jxjy.system.service;
import data.system.ObjectiveIndustry;
import java.util.List;
/**
*
* @return: 意向行业管理
* @Author: wml
* @Date 2025/5/9 10:20
*/
public interface ObjectiveIndustryService {
List<ObjectiveIndustry> listAll(ObjectiveIndustry objectiveIndustry);
boolean create(ObjectiveIndustry objectiveIndustry);
boolean update(ObjectiveIndustry objectiveIndustry);
boolean del(String id);
ObjectiveIndustry getDetails(String id);
boolean isHave(String openId, String id);
}
package com.jxjy.system.service;
import data.system.Objective;
import java.util.List;
/**
*
* @return: 求职意向管理
* @Author: wml
* @Date 2025/5/9 10:20
*/
public interface ObjectiveService {
List<Objective> list(int pageNum, int pageSize, Objective objective);
boolean create(Objective objective);
boolean update(Objective objective);
boolean del(String id);
Objective getDetails(String id);
boolean isHave(String userId, String industryId,String id);
boolean createAli(List<Objective> objectives);
}
package com.jxjy.system.service;
import data.system.Org;
import java.util.List;
/**
*
* @return: 企业管理
* @Author: wml
* @Date 2025/5/9 10:20
*/
public interface OrgService {
List<Org> list(int pageNum, int pageSize, Org org);
boolean create(Org org);
boolean update(Org org);
boolean del(String id);
Org getDetails(String id);
boolean isHave(String name, String id);
}
package com.jxjy.system.service;
import data.system.PersonEducational;
import java.util.List;
/**
*
* @return: 教育经历管理
* @Author: wml
* @Date 2025/5/9 10:20
*/
public interface PersonEducationalService {
List<PersonEducational> list(int pageNum, int pageSize, PersonEducational personEducational);
boolean create(PersonEducational personEducational);
boolean update(PersonEducational personEducational);
boolean del(String id);
PersonEducational getDetails(String id);
boolean isHave(String school, String id);
boolean createAli(PersonEducational personEducational);
}
package com.jxjy.system.service;
import data.system.Person;
import java.util.List;
/**
*
* @return: 报名员工管理
* @Author: wml
* @Date 2025/5/9 10:20
*/
public interface PersonService {
List<Person> list(int pageNum, int pageSize, Person person);
boolean create(Person person);
boolean update(Person person);
boolean del(String id);
Person getDetails(String id);
boolean isHave(String openId, String id);
Person getDetailsByLoginOpenId(String openId);
List<Person> getRecruitMessageList(String recruitId);
List<Person> listHigher(int pageNum, int pageSize, Person person);
List<Person> listDriver(int pageNum, int pageSize, Person person);
}
package com.jxjy.system.service;
import data.system.Qualification;
import java.util.List;
/**
*
* @return: 学历
* @Author: wml
* @Date 2025/5/9 10:20
*/
public interface QualificationService {
List<Qualification> listAll(Qualification qualification);
Qualification queryByName(String name);
}
package com.jxjy.system.service;
import data.system.Recruit;
import java.util.List;
/**
*
* @return: 招聘管理
* @Author: wml
* @Date 2025/5/9 10:20
*/
public interface RecruitService {
List<Recruit> listByCollect(int pageNum, int pageSize, String personId);
List<Recruit> listBySignRecord(int pageNum, int pageSize, String personId);
List<Recruit> listBySignRecordAdmin(int pageNum, int pageSize,String personIdno,String personName,String name);
List<Recruit> list(int pageNum, int pageSize, Recruit recruit);
boolean create(Recruit recruit);
boolean update(Recruit recruit);
boolean del(String id);
Recruit getDetails(String id);
boolean updateStatus(Recruit recruit);
}
package com.jxjy.system.service;
import data.system.RecruitType;
import java.util.List;
/**
*
* @return: 招聘类型
* @Author: wml
* @Date 2025/5/9 10:20
*/
public interface RecruitTypeService {
List<RecruitType> listAll(RecruitType recruitType);
}
package com.jxjy.system.service;
import data.system.School;
import java.util.List;
/**
*
* @return: 学校管理
* @Author: wml
* @Date 2025/5/9 10:20
*/
public interface SchoolService {
List<School> list(int pageNum, int pageSize, School school);
List<School> listAll(School school);
boolean create(School school);
boolean update(School school);
boolean del(String id);
School getDetails(String id);
boolean isHave(String name, String id);
}
package com.jxjy.system.service;
import data.system.SignRecord;
/**
*
* @return: 报名记录
* @Author: wml
* @Date 2025/5/9 10:20
*/
public interface SignRecordService {
String create(SignRecord signRecord);
boolean del(String recruitId,String personId);
boolean isHave(String openId, String id);
boolean update(String recordId,String state);
}
package com.jxjy.system.service;
import base.result.BaseResult;
import data.user.User;
import java.util.List;
/**
*
* @return: 用户管理
* @Author: wml
* @Date 2025/5/9 10:20
*/
public interface UserService {
User getDetailsByLoginAccount(String account);
List<User> list(int pageNum, int pageSize, User user);
boolean create(User user);
boolean update(User user);
boolean reset(String id);
boolean uState(String id, String state);
boolean del(String id);
boolean uPassword(String oldPassword, String password, String id);
boolean isHave(String account, String id);
BaseResult updateUserPassword(String oldPassword, String password);
User getDetails(String id);
}
package com.jxjy.system.service;
import data.system.WorkExperience;
import java.util.List;
/**
*
* @return: 工作经历管理
* @Author: wml
* @Date 2025/5/9 10:20
*/
public interface WorkExperienceService {
List<WorkExperience> list(int pageNum, int pageSize, WorkExperience workExperience);
boolean create(WorkExperience workExperience);
boolean update(WorkExperience workExperience);
boolean del(String id);
WorkExperience getDetails(String id);
boolean isHave(String orgName, String id);
boolean createAli(List<WorkExperience> workExperiences);
}
package com.jxjy.system.service.auth;
import com.jxjy.system.bean.auth.SelfUserEntity;
import com.jxjy.system.service.PersonService;
import com.jxjy.system.service.UserService;
import data.system.Person;
import data.user.User;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.LockedException;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.Objects;
@Slf4j
@Component
public class SelfUserDetailsService implements UserDetailsService {
@Autowired
private UserService userService;
@Autowired
private PersonService personService;
/**
* 查询用户信息
* @param username
* @return
* @author wml
* @date 2020/4/4
**/
@Override
public SelfUserEntity loadUserByUsername(String username) throws UsernameNotFoundException {
HttpServletRequest req = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String wxType = req.getParameter("wxType");
SelfUserEntity sysUserEntity = new SelfUserEntity();
if(StringUtils.isNotBlank(wxType)&&wxType.equals("wx")){
Person user = personService.getDetailsByLoginOpenId(username);
if (user == null) {
throw new UsernameNotFoundException("账号不存在");
}
sysUserEntity.setUsername(user.getOpenId());
sysUserEntity.setPassword("");
sysUserEntity.setUserId(user.getId());
sysUserEntity.setBaseCode(user.getBaseCode()== null ? "" : user.getBaseCode());
sysUserEntity.setName(user.getName());
sysUserEntity.setOpenId(user.getOpenId());
}else {
User user = userService.getDetailsByLoginAccount(username);
if (user == null) {
throw new UsernameNotFoundException("账号不存在");
}
Object state = user.getState();
if (!Objects.equals(state, "normal")) {
// 账号被禁用
log.error("登录失败, 账号被禁用, jsonObject={}", user);
throw new LockedException("账号被禁用");
}
sysUserEntity.setUsername(user.getAccount());
sysUserEntity.setPassword(user.getPassword());
sysUserEntity.setUserId(user.getId());
sysUserEntity.setBaseCode(user.getBaseCode()== null ? "" : user.getBaseCode());
sysUserEntity.setName(user.getName());
sysUserEntity.setType(user.getType());
}
return sysUserEntity;
}
}
\ No newline at end of file
package com.jxjy.system.service.auth;
import com.jxjy.system.bean.auth.SelfUserEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.AuthenticationProvider;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.stereotype.Component;
import org.springframework.util.DigestUtils;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
@Component
public class UserAuthenticationProvider implements AuthenticationProvider {
@Autowired
private SelfUserDetailsService selfUserDetailsService;
private static final String SALT = "junying";
@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
HttpServletRequest req = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String wxType = req.getParameter("wxType");
SelfUserEntity sysUserEntity = new SelfUserEntity();
// 获取表单输入中返回的用户名
// String username = (String) authentication.getPrincipal();
String username = authentication.getName();
// 获取表单中输入的密码
String password = DigestUtils.md5DigestAsHex(authentication.getCredentials().toString().getBytes());
// 查询用户是否存在
SelfUserEntity userInfo = selfUserDetailsService.loadUserByUsername(username);
if(org.apache.commons.lang3.StringUtils.isNotBlank(wxType)&&wxType.equals("wx")){
}else{
//验证密码是否正确
if (!userInfo.getPassword().equals(password)) {
throw new BadCredentialsException("密码不正确");
}
}
return new UsernamePasswordAuthenticationToken(userInfo, password, userInfo.getAuthorities());
}
@Override
public boolean supports(Class<?> authentication) {
return true;
}
/**
* 字符换MD5
* @param password
* @return
*/
public static String strToMd5(String password) {
if(org.springframework.util.StringUtils.isEmpty(password)){
return password;
}
password = SALT + password + SALT;
String md5Prd = DigestUtils.md5DigestAsHex(password.getBytes());
return md5Prd;
}
}
package com.jxjy.system.service.impl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper;
import com.jxjy.system.bean.auth.UserContext;
import com.jxjy.system.mapper.CollectMapper;
import com.jxjy.system.service.CollectService;
import com.jxjy.system.util.auth.UserUtils;
import com.jxjy.system.xsnowflake.SnowFlakeFactory;
import data.system.Collect;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
*
* @return: 收藏管理
* @Author: wml
* @Date 2025/5/9 10:22
*/
@Service
@Transactional
public class CollectServiceImpl extends ServiceImpl<CollectMapper, Collect> implements CollectService {
@Autowired
SnowFlakeFactory snowFlakeFactory;
/**
* @description: 获取收藏列表
* @author: wangmenglong
* @date; 2023/12/11 16:46
* @param: [pageNum, pageSize]
* @return: java.util.List<data.collect.Collect>
**/
@Override
public List<Collect> list(int pageNum, int pageSize, Collect collect) {
//启动分页工具
PageHelper.startPage(pageNum, pageSize);
//创建查询条件
LambdaQueryWrapper<Collect> qw = new LambdaQueryWrapper<>();
qw.like(StringUtils.isNotBlank(collect.getPersonId()),Collect::getPersonId,collect.getPersonId())
.eq(Collect::getDel,false)
.eq(StringUtils.isNotBlank(collect.getBaseCode()),Collect::getBaseCode, collect.getBaseCode())
.orderByDesc(Collect::getCreateTime);
List<Collect> collectList = super.list(qw);
//返回查询结果
return collectList;
}
/**
* @description: 新增收藏
* @author: wangmenglong
* @date; 2023/12/11 16:51
* @param: [collect]
* @return: boolean
**/
@Override
public boolean create(Collect collect) {
UserContext userContext = UserUtils.getUserContext();
String baseCode = userContext.getBaseCode();
collect.setId(snowFlakeFactory.nextId());
collect.setBaseCode(baseCode);
collect.setDel(false);
collect.setCreateTime(DateUtil.now());
return super.save(collect);
}
/**
* @description: 编辑收藏
* @author: wangmenglong
* @date; 2023/12/11 16:55
* @param: [collect]
* @return: boolean
**/
@Override
public boolean update(Collect collect) {
collect.setUpdateTime(DateUtil.now());
//判断是否传入id
if(StringUtils.isBlank(collect.getId())){
return false;
}
return super.saveOrUpdate(collect);
}
/**
* @description: 删除收藏
* @author: wangmenglong
* @date; 2023/12/11 17:06
* @param: [id]
* @return: boolean
**/
@Override
public boolean del(String recruitId,String personId) {
if(StringUtils.isBlank(recruitId)||StringUtils.isBlank(personId)){
return false;
}
LambdaUpdateWrapper<Collect> qw = new LambdaUpdateWrapper<>();
qw.eq(Collect::getRecruitId,recruitId).eq(Collect::getPersonId,personId)
.set(Collect::getDel,true)
.set(Collect::getDelTime, DateUtil.now());
return super.update(qw);
}
/**
* @author: wangmenglong
* @date; 2024/3/24 17:19
* @description: 获取收藏详情
* @param: [id]
* @return: data.collect.Collect
**/
@Override
public Collect getDetails(String id) {
return super.getById(id);
}
/**
* @author: wangmenglong
* @date; 2024/1/2 14:30
* @description: 判断是否存在
* @param: [account, id]
* @return: boolean
**/
@Override
public boolean isHave(String recruitId, String personId) {
LambdaQueryWrapper<Collect> qw = new LambdaQueryWrapper<>();
qw.eq(Collect::getDel,false)
.eq(Collect::getRecruitId, recruitId)
.eq(Collect::getPersonId, personId);
return super.count(qw)>0;
}
}
package com.jxjy.system.service.impl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jxjy.system.mapper.DriverSchoolRecordMapper;
import com.jxjy.system.service.DriverSchoolRecordService;
import com.jxjy.system.xsnowflake.SnowFlakeFactory;
import data.system.DriverSchoolRecord;
import data.system.HigherSchoolRecord;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
*
* @return: 报名管理
* @Author: wml
* @Date 2025/5/9 10:22
*/
@Service
@Transactional
public class DriverSchoolRecordServiceImpl extends ServiceImpl<DriverSchoolRecordMapper, DriverSchoolRecord> implements DriverSchoolRecordService {
@Autowired
SnowFlakeFactory snowFlakeFactory;
/**
* @description: 新增报名
* @author: wangmenglong
* @date; 2023/12/11 16:51
* @param: [driverSchoolRecord]
* @return: boolean
**/
@Override
public String create(DriverSchoolRecord driverSchoolRecord) {
driverSchoolRecord.setId(snowFlakeFactory.nextId());
driverSchoolRecord.setDel(false);
driverSchoolRecord.setCreateTime(DateUtil.now());
driverSchoolRecord.setState("new");
super.save(driverSchoolRecord);
return driverSchoolRecord.getId();
}
/**
* @description: 删除报名
* @author: wangmenglong
* @date; 2023/12/11 17:06
* @param: [id]
* @return: boolean
**/
@Override
public boolean del(String personId) {
if(StringUtils.isBlank(personId)){
return false;
}
LambdaUpdateWrapper<DriverSchoolRecord> qw = new LambdaUpdateWrapper<>();
qw.eq(DriverSchoolRecord::getPersonId,personId)
.set(DriverSchoolRecord::getDel,true)
.set(DriverSchoolRecord::getDelTime, DateUtil.now());
return super.update(qw);
}
/**
* @author: wangmenglong
* @date; 2024/1/2 14:30
* @description: 判断是否存在
* @param: [account, id]
* @return: boolean
**/
@Override
public boolean isHave(String personId) {
LambdaQueryWrapper<DriverSchoolRecord> qw = new LambdaQueryWrapper<>();
qw.eq(DriverSchoolRecord::getDel,false)
.eq(DriverSchoolRecord::getPersonId, personId);
return super.count(qw)>0;
}
/**
* @author: wangmenglong
* @date; 2024/1/2 14:30
* @description: 修改状态
* @param: [account, id]
* @return: boolean
**/
@Override
public boolean updateState(String id) {
LambdaUpdateWrapper<DriverSchoolRecord> qw = new LambdaUpdateWrapper<>();
qw.eq(DriverSchoolRecord::getDel,false)
.eq(DriverSchoolRecord::getUserId, id)
.set(DriverSchoolRecord::getState, "revisit");
return super.update(qw);
}
/**
* @author: wangmenglong
* @date; 2024/1/2 14:30
* @description: 修改状态
* @param: [account, id]
* @return: boolean
**/
@Override
public DriverSchoolRecord detailsByPersonId(String personId) {
//根据人员id查出来最后一条数据
LambdaQueryWrapper<DriverSchoolRecord> qw = new LambdaQueryWrapper<>();
qw.eq(DriverSchoolRecord::getDel,false)
.eq(DriverSchoolRecord::getPersonId, personId)
.orderByDesc(DriverSchoolRecord::getCreateTime)
.last("limit 1");
return super.getOne(qw);
}
}
package com.jxjy.system.service.impl;
import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jxjy.system.mapper.ExperienceMapper;
import com.jxjy.system.service.ExperienceService;
import data.system.Experience;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
*
* @return: 招聘类型管理
* @Author: wml
* @Date 2025/5/9 10:22
*/
@Service
@Transactional
public class ExperienceServiceImpl extends ServiceImpl<ExperienceMapper, Experience> implements ExperienceService {
/**
* @description: 获取所有列表
* @author: wangmenglong
**/
@Override
public List<Experience> listAll(Experience experience) {
//创建查询条件
LambdaQueryWrapper<Experience> qw = new LambdaQueryWrapper<>();
qw.eq(Experience::getDel,false)
.eq(StringUtils.isNotBlank(experience.getBaseCode()),Experience::getBaseCode, experience.getBaseCode())
.orderByDesc(Experience::getCreateTime);
List<Experience> orgList = super.list(qw);
//返回查询结果
return orgList;
}
}
package com.jxjy.system.service.impl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jxjy.system.mapper.HigherSchoolRecordMapper;
import com.jxjy.system.service.HigherSchoolRecordService;
import com.jxjy.system.xsnowflake.SnowFlakeFactory;
import data.system.HigherSchoolRecord;
import data.system.SignRecord;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
*
* @return: 报名管理
* @Author: wml
* @Date 2025/5/9 10:22
*/
@Service
@Transactional
public class HigherSchoolRecordServiceImpl extends ServiceImpl<HigherSchoolRecordMapper, HigherSchoolRecord> implements HigherSchoolRecordService {
@Autowired
SnowFlakeFactory snowFlakeFactory;
/**
* @description: 新增报名
* @author: wangmenglong
* @date; 2023/12/11 16:51
* @param: [higherSchoolRecord]
* @return: boolean
**/
@Override
public String create(HigherSchoolRecord higherSchoolRecord) {
higherSchoolRecord.setId(snowFlakeFactory.nextId());
higherSchoolRecord.setDel(false);
higherSchoolRecord.setCreateTime(DateUtil.now());
higherSchoolRecord.setState("new");
super.save(higherSchoolRecord);
return higherSchoolRecord.getId();
}
/**
* @description: 删除报名
* @author: wangmenglong
* @date; 2023/12/11 17:06
* @param: [id]
* @return: boolean
**/
@Override
public boolean del(String personId) {
if(StringUtils.isBlank(personId)){
return false;
}
LambdaUpdateWrapper<HigherSchoolRecord> qw = new LambdaUpdateWrapper<>();
qw.eq(HigherSchoolRecord::getPersonId,personId)
.set(HigherSchoolRecord::getDel,true)
.set(HigherSchoolRecord::getDelTime, DateUtil.now());
return super.update(qw);
}
/**
* @author: wangmenglong
* @date; 2024/1/2 14:30
* @description: 判断是否存在
* @param: [account, id]
* @return: boolean
**/
@Override
public boolean isHave(String personId) {
LambdaQueryWrapper<HigherSchoolRecord> qw = new LambdaQueryWrapper<>();
qw.eq(HigherSchoolRecord::getDel,false)
.eq(HigherSchoolRecord::getPersonId, personId);
return super.count(qw)>0;
}
/**
* @author: wangmenglong
* @date; 2024/1/2 14:30
* @description: 修改状态
* @param: [account, id]
* @return: boolean
**/
@Override
public boolean updateState(String id) {
LambdaUpdateWrapper<HigherSchoolRecord> qw = new LambdaUpdateWrapper<>();
qw.eq(HigherSchoolRecord::getDel,false)
.eq(HigherSchoolRecord::getUserId, id)
.set(HigherSchoolRecord::getState, "revisit");
return super.update(qw);
}
/**
* @author: wangmenglong
* @date; 2024/1/2 14:30
* @description: 修改状态
* @param: [account, id]
* @return: boolean
**/
@Override
public HigherSchoolRecord detailsByPersonId(String personId) {
//根据人员id查出来最后一条数据
LambdaQueryWrapper<HigherSchoolRecord> qw = new LambdaQueryWrapper<>();
qw.eq(HigherSchoolRecord::getDel,false)
.eq(HigherSchoolRecord::getPersonId, personId)
.orderByDesc(HigherSchoolRecord::getCreateTime)
.last("limit 1");
return super.getOne(qw);
}
}
package com.jxjy.system.service.impl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper;
import com.jxjy.system.bean.auth.UserContext;
import com.jxjy.system.mapper.IndustryMapper;
import com.jxjy.system.service.IndustryService;
import com.jxjy.system.util.auth.UserUtils;
import com.jxjy.system.xsnowflake.SnowFlakeFactory;
import data.system.Industry;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
*
* @return: 行业管理
* @Author: wml
* @Date 2025/5/9 10:22
*/
@Service
@Transactional
public class IndustryServiceImpl extends ServiceImpl<IndustryMapper, Industry> implements IndustryService {
@Autowired
SnowFlakeFactory snowFlakeFactory;
/**
* @description: 获取行业列表
* @author: wangmenglong
* @date; 2023/12/11 16:46
* @param: [pageNum, pageSize]
* @return: java.util.List<data.industry.Industry>
**/
@Override
public List<Industry> list(int pageNum, int pageSize, Industry industry) {
//启动分页工具
PageHelper.startPage(pageNum, pageSize);
//创建查询条件
LambdaQueryWrapper<Industry> qw = new LambdaQueryWrapper<>();
qw.like(StringUtils.isNotBlank(industry.getName()),Industry::getName,industry.getName())
.eq(Industry::getDel,false)
.eq(StringUtils.isNotBlank(industry.getBaseCode()),Industry::getBaseCode, industry.getBaseCode())
.orderByDesc(Industry::getCreateTime);
List<Industry> industryList = super.list(qw);
//返回查询结果
return industryList;
}
/**
* @description: 获取行业列表
* @author: wangmenglong
* @date; 2023/12/11 16:46
* @param: [pageNum, pageSize]
* @return: java.util.List<data.industry.Industry>
**/
@Override
/**
* 首次调用时自动写入缓存,后续直接从缓存获取
* value:缓存名称(相当于前缀)
* key:缓存 key(使用 SpEL 表达式,这里为 ID)
* expire:过期时间(需配合缓存配置)
*/
@Cacheable(
value = "industryList",
key = "'all'" // 全量列表用固定 key
, unless = "#result == null"
)
public List<Industry> listAll(Industry industry) {
//创建查询条件
LambdaQueryWrapper<Industry> qw = new LambdaQueryWrapper<>();
qw.eq(Industry::getDel,false)
.eq(Industry::getParentId, "0")
.orderByAsc(Industry::getSort);
List<Industry> industryList = super.list(qw);
industryList.stream().forEach(industry1 -> {
//创建查询条件
LambdaQueryWrapper<Industry> qw1 = new LambdaQueryWrapper<>();
qw1.eq(Industry::getDel,false)
.eq(Industry::getParentId, industry1.getId())
.orderByAsc(Industry::getSort);
List<Industry> industryList1 = super.list(qw1);
/*industryList1.stream().forEach(industry2 -> {
//创建查询条件
LambdaQueryWrapper<Industry> qw2 = new LambdaQueryWrapper<>();
qw2.eq(Industry::getDel,false)
.eq(Industry::getParentId, industry2.getId())
.orderByAsc(Industry::getSort);
List<Industry> industryList2 = super.list(qw2);
industry2.setChilList(industryList2);
});*/
industry1.setChilList(industryList1);
});
//返回查询结果
return industryList;
}
// 清空全量列表的缓存(仅清理 key = 'all' 的缓存项)
@Override
@CacheEvict(value = "industryList", key = "'all'")
public void cleanAllIndustryCache() {
// 方法体可空,仅用于触发缓存清理
System.out.println("全量列表缓存已清理");
}
/**
* @description: 新增行业
* @author: wangmenglong
* @date; 2023/12/11 16:51
* @param: [industry]
* @return: boolean
**/
@Override
public boolean create(Industry industry) {
UserContext userContext = UserUtils.getUserContext();
String baseCode = userContext.getBaseCode();
industry.setId(snowFlakeFactory.nextId());
industry.setBaseCode(baseCode);
industry.setDel(false);
industry.setCreateTime(DateUtil.now());
return super.save(industry);
}
/**
* @description: 编辑行业
* @author: wangmenglong
* @date; 2023/12/11 16:55
* @param: [industry]
* @return: boolean
**/
@Override
public boolean update(Industry industry) {
industry.setUpdateTime(DateUtil.now());
//判断是否传入id
if(StringUtils.isBlank(industry.getId())){
return false;
}
return super.saveOrUpdate(industry);
}
/**
* @description: 删除行业
* @author: wangmenglong
* @date; 2023/12/11 17:06
* @param: [id]
* @return: boolean
**/
@Override
public boolean del(String id) {
if(StringUtils.isBlank(id)){
return false;
}
LambdaUpdateWrapper<Industry> qw = new LambdaUpdateWrapper<>();
qw.eq(Industry::getId,id)
.set(Industry::getDel,true)
.set(Industry::getDelTime, DateUtil.now());
return super.update(qw);
}
/**
* @author: wangmenglong
* @date; 2024/3/24 17:19
* @description: 获取行业详情
* @param: [id]
* @return: data.industry.Industry
**/
@Override
public Industry getDetails(String id) {
return super.getById(id);
}
/**
* @author: wangmenglong
* @date; 2024/3/24 17:19
* @description: 获取行业详情
* @param: [id]
* @return: data.industry.Industry
**/
@Override
public Industry getDetailsByName(String name,String parentType) {
LambdaQueryWrapper<Industry> qw = new LambdaQueryWrapper<>();
qw.eq(Industry::getDel,false)
.eq(Industry::getName, name);
if(parentType.equals("0")){
qw.eq(Industry::getParentId, "0");
}else if(parentType.equals("1")){
qw.ne(Industry::getParentId, "0");
qw.isNull(Industry::getCode);
}
return super.getOne(qw);
}
/**
* @author: wangmenglong
* @date; 2024/3/24 17:19
* @description: 获取行业详情
* @param: [id]
* @return: data.industry.Industry
**/
@Override
public Industry getDetailsByCode(String code,String parentType) {
LambdaQueryWrapper<Industry> qw = new LambdaQueryWrapper<>();
qw.eq(Industry::getDel,false)
.eq(Industry::getCode, code);
if(parentType.equals("0")){
qw.eq(Industry::getParentId, "0");
}else if(parentType.equals("1")){
qw.ne(Industry::getParentId, "0");
qw.isNull(Industry::getCode);
}
return super.getOne(qw);
}
/**
* @author: wangmenglong
* @date; 2024/1/2 14:30
* @description: 判断是否存在
* @param: [account, id]
* @return: boolean
**/
@Override
public boolean isHave(String name, String id) {
LambdaQueryWrapper<Industry> qw = new LambdaQueryWrapper<>();
qw.eq(Industry::getDel,false)
.eq(Industry::getName, name);
//如果传了id就是编辑,编辑的时候要加个条件,不能把名字跟别人重复
if(StringUtils.isNotBlank(id)){
qw.ne(Industry::getId,id);
}
return super.count(qw)>0;
}
}
package com.jxjy.system.service.impl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper;
import com.jxjy.system.bean.auth.UserContext;
import com.jxjy.system.mapper.MessageRecordMapper;
import com.jxjy.system.service.MessageRecordService;
import com.jxjy.system.service.RecruitService;
import com.jxjy.system.util.auth.UserUtils;
import com.jxjy.system.xsnowflake.SnowFlakeFactory;
import data.system.MessageRecord;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.stream.Collectors;
/**
*
* @return: 消息管理
* @Author: wml
* @Date 2025/5/9 10:22
*/
@Service
@Transactional
public class MessageRecordServiceImpl extends ServiceImpl<MessageRecordMapper, MessageRecord> implements MessageRecordService {
@Autowired
SnowFlakeFactory snowFlakeFactory;
@Autowired
RecruitService recruitService;
/**
* @description: 获取企业列表
* @author: wangmenglong
* @date; 2023/12/11 16:46
* @param: [pageNum, pageSize]
* @return: java.util.List<data.messageRecord.MessageRecord>
**/
@Override
public List<MessageRecord> list(int pageNum, int pageSize, MessageRecord messageRecord) {
//启动分页工具
PageHelper.startPage(pageNum, pageSize);
//创建查询条件
LambdaQueryWrapper<MessageRecord> qw = new LambdaQueryWrapper<>();
qw.eq(MessageRecord::getDel,false)
.eq(MessageRecord::getPersonnelId, UserUtils.getUserContext().getUserId())
.eq(StringUtils.isNotBlank(messageRecord.getBaseCode()),MessageRecord::getBaseCode, messageRecord.getBaseCode())
.orderByDesc(MessageRecord::getCreateTime);
List<MessageRecord> messageRecordList = super.list(qw);
List<String> ids = messageRecordList.stream().map(MessageRecord::getId).collect(Collectors.toList());
if(ids.size()>0){
//标记为已读
LambdaUpdateWrapper<MessageRecord> uw = new LambdaUpdateWrapper<>();
uw.in(MessageRecord::getId, ids);
uw.set(MessageRecord::getIsRead,true);
super.update(uw);
}
messageRecordList.stream().forEach(returnMessageRecord -> {
returnMessageRecord.setRecruit(recruitService.getDetails(returnMessageRecord.getRecruitId()));
});
//返回查询结果
return messageRecordList;
}
/**
* @description: 新增企业
* @author: wangmenglong
* @date; 2023/12/11 16:51
* @param: [messageRecord]
* @return: boolean
**/
@Override
public boolean create(MessageRecord messageRecord) {
messageRecord.setId(snowFlakeFactory.nextId());
messageRecord.setDel(false);
messageRecord.setCreateTime(DateUtil.now());
messageRecord.setIsRead(false);
return super.save(messageRecord);
}
/**
* @description: 编辑企业
* @author: wangmenglong
* @date; 2023/12/11 16:55
* @param: [messageRecord]
* @return: boolean
**/
@Override
public boolean update(MessageRecord messageRecord) {
messageRecord.setUpdateTime(DateUtil.now());
//判断是否传入id
if(StringUtils.isBlank(messageRecord.getId())){
return false;
}
return super.saveOrUpdate(messageRecord);
}
/**
* @description: 删除企业
* @author: wangmenglong
* @date; 2023/12/11 17:06
* @param: [id]
* @return: boolean
**/
@Override
public boolean del(String id) {
if(StringUtils.isBlank(id)){
return false;
}
LambdaUpdateWrapper<MessageRecord> qw = new LambdaUpdateWrapper<>();
qw.eq(MessageRecord::getId,id)
.set(MessageRecord::getDel,true)
.set(MessageRecord::getDelTime, DateUtil.now());
return super.update(qw);
}
/**
* @author: wangmenglong
* @date; 2024/3/24 17:19
* @description: 获取企业详情
* @param: [id]
* @return: data.messageRecord.MessageRecord
**/
@Override
public MessageRecord getDetails(String id) {
return super.getById(id);
}
}
package com.jxjy.system.service.impl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper;
import com.jxjy.system.bean.auth.UserContext;
import com.jxjy.system.mapper.MessageMapper;
import com.jxjy.system.service.MessageService;
import com.jxjy.system.util.auth.UserUtils;
import com.jxjy.system.xsnowflake.SnowFlakeFactory;
import data.system.Message;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
*
* @return: 消息管理
* @Author: wml
* @Date 2025/5/9 10:22
*/
@Service
@Transactional
public class MessageServiceImpl extends ServiceImpl<MessageMapper, Message> implements MessageService {
@Autowired
SnowFlakeFactory snowFlakeFactory;
/**
* @description: 获取消息列表
* @author: wangmenglong
* @date; 2023/12/11 16:46
* @param: [pageNum, pageSize]
* @return: java.util.List<data.message.Message>
**/
@Override
public List<Message> list(int pageNum, int pageSize, Message message) {
//启动分页工具
PageHelper.startPage(pageNum, pageSize);
//创建查询条件
LambdaQueryWrapper<Message> qw = new LambdaQueryWrapper<>();
qw.eq(StringUtils.isNotBlank(message.getTitle()),Message::getTitle,message.getTitle())
.eq(Message::getDel,false)
.eq(StringUtils.isNotBlank(message.getBaseCode()),Message::getBaseCode, message.getBaseCode())
.orderByDesc(Message::getCreateTime);
List<Message> messageList = super.list(qw);
//返回查询结果
return messageList;
}
/**
* @description: 新增消息
* @author: wangmenglong
* @date; 2023/12/11 16:51
* @param: [message]
* @return: boolean
**/
@Override
public boolean create(Message message) {
UserContext userContext = UserUtils.getUserContext();
String baseCode = userContext.getBaseCode();
message.setId(snowFlakeFactory.nextId());
message.setBaseCode(baseCode);
message.setDel(false);
message.setCreateTime(DateUtil.now());
message.setState("start");
return super.save(message);
}
/**
* @description: 编辑消息
* @author: wangmenglong
* @date; 2023/12/11 16:55
* @param: [message]
* @return: boolean
**/
@Override
public boolean update(Message message) {
message.setUpdateTime(DateUtil.now());
//判断是否传入id
if(StringUtils.isBlank(message.getId())){
return false;
}
return super.saveOrUpdate(message);
}
/**
* @description: 删除消息
* @author: wangmenglong
* @date; 2023/12/11 17:06
* @param: [id]
* @return: boolean
**/
@Override
public boolean del(String id) {
if(StringUtils.isBlank(id)){
return false;
}
LambdaUpdateWrapper<Message> qw = new LambdaUpdateWrapper<>();
qw.eq(Message::getId,id)
.set(Message::getDel,true)
.set(Message::getDelTime, DateUtil.now());
return super.update(qw);
}
/**
* @author: wangmenglong
* @date; 2024/3/24 17:19
* @description: 获取消息详情
* @param: [id]
* @return: data.message.Message
**/
@Override
public Message getDetails(String id) {
return super.getById(id);
}
/**
* @author: wangmenglong
* @date; 2024/3/24 17:19
* @description: 获取消息详情
* @param: [id]
* @return: data.message.Message
**/
@Override
public Message getOneMessage() {
LambdaQueryWrapper<Message> qw = new LambdaQueryWrapper<>();
qw.eq(Message::getDel,false)
.eq(Message::getState,"start")
.last("limit 1");
return super.getOne(qw);
}
}
package com.jxjy.system.service.impl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jxjy.system.bean.auth.UserContext;
import com.jxjy.system.mapper.ObjectiveIndustryMapper;
import com.jxjy.system.service.ObjectiveIndustryService;
import com.jxjy.system.util.auth.UserUtils;
import com.jxjy.system.xsnowflake.SnowFlakeFactory;
import data.system.ObjectiveIndustry;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
/**
*
* @return: 意向行业管理
* @Author: wml
* @Date 2025/5/9 10:22
*/
@Service
@Transactional
public class ObjectiveIndustryServiceImpl extends ServiceImpl<ObjectiveIndustryMapper, ObjectiveIndustry> implements ObjectiveIndustryService {
@Autowired
SnowFlakeFactory snowFlakeFactory;
@Resource
public ObjectiveIndustryMapper objectiveIndustryMapper;
/**
* @description: 获取意向行业列表
* @author: wangmenglong
* @date; 2023/12/11 16:46
* @param: [pageNum, pageSize]
* @return: java.util.List<data.objectiveIndustry.ObjectiveIndustry>
**/
@Override
public List<ObjectiveIndustry> listAll(ObjectiveIndustry objectiveIndustry) {
//返回查询结果
return objectiveIndustryMapper.listAll(objectiveIndustry.getBaseCode(),objectiveIndustry.getPersonId(),objectiveIndustry.getIndustryId());
}
/**
* @description: 新增意向行业
* @author: wangmenglong
* @date; 2023/12/11 16:51
* @param: [objectiveIndustry]
* @return: boolean
**/
@Override
public boolean create(ObjectiveIndustry objectiveIndustry) {
UserContext userContext = UserUtils.getUserContext();
String baseCode = userContext.getBaseCode();
objectiveIndustry.setId(snowFlakeFactory.nextId());
objectiveIndustry.setBaseCode(baseCode);
objectiveIndustry.setDel(false);
objectiveIndustry.setCreateTime(DateUtil.now());
return super.save(objectiveIndustry);
}
/**
* @description: 编辑意向行业
* @author: wangmenglong
* @date; 2023/12/11 16:55
* @param: [objectiveIndustry]
* @return: boolean
**/
@Override
public boolean update(ObjectiveIndustry objectiveIndustry) {
objectiveIndustry.setUpdateTime(DateUtil.now());
//判断是否传入id
if(StringUtils.isBlank(objectiveIndustry.getId())){
return false;
}
return super.saveOrUpdate(objectiveIndustry);
}
/**
* @description: 删除意向行业
* @author: wangmenglong
* @date; 2023/12/11 17:06
* @param: [id]
* @return: boolean
**/
@Override
public boolean del(String id) {
if(StringUtils.isBlank(id)){
return false;
}
LambdaUpdateWrapper<ObjectiveIndustry> qw = new LambdaUpdateWrapper<>();
qw.eq(ObjectiveIndustry::getId,id)
.set(ObjectiveIndustry::getDel,true)
.set(ObjectiveIndustry::getDelTime, DateUtil.now());
return super.update(qw);
}
/**
* @author: wangmenglong
* @date; 2024/3/24 17:19
* @description: 获取意向行业详情
* @param: [id]
* @return: data.objectiveIndustry.ObjectiveIndustry
**/
@Override
public ObjectiveIndustry getDetails(String id) {
return super.getById(id);
}
/**
* @author: wangmenglong
* @date; 2024/1/2 14:30
* @description: 判断是否存在
* @param: [account, id]
* @return: boolean
**/
@Override
public boolean isHave(String personId, String industryId) {
LambdaQueryWrapper<ObjectiveIndustry> qw = new LambdaQueryWrapper<>();
qw.eq(ObjectiveIndustry::getDel,false)
.eq(ObjectiveIndustry::getPersonId, personId)
.eq(ObjectiveIndustry::getIndustryId, industryId);
return super.count(qw)>0;
}
}
package com.jxjy.system.service.impl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper;
import com.jxjy.system.bean.auth.UserContext;
import com.jxjy.system.mapper.ObjectiveMapper;
import com.jxjy.system.service.ObjectiveService;
import com.jxjy.system.service.PersonService;
import com.jxjy.system.util.auth.UserUtils;
import com.jxjy.system.xsnowflake.SnowFlakeFactory;
import data.system.Objective;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
/**
*
* @return: 求职意向管理
* @Author: wml
* @Date 2025/5/9 10:22
*/
@Service
@Transactional
public class ObjectiveServiceImpl extends ServiceImpl<ObjectiveMapper, Objective> implements ObjectiveService {
@Autowired
SnowFlakeFactory snowFlakeFactory;
@Resource
private PersonService personService;
/**
* @description: 获取求职意向列表
* @author: wangmenglong
* @date; 2023/12/11 16:46
* @param: [pageNum, pageSize]
* @return: java.util.List<data.objective.Objective>
**/
@Override
public List<Objective> list(int pageNum, int pageSize, Objective objective) {
//启动分页工具
PageHelper.startPage(pageNum, pageSize);
//创建查询条件
LambdaQueryWrapper<Objective> qw = new LambdaQueryWrapper<>();
qw.eq(Objective::getDel,false)
.eq(StringUtils.isNotBlank(objective.getBaseCode()),Objective::getBaseCode, objective.getBaseCode())
.eq(StringUtils.isNotBlank(objective.getPersonId()),Objective::getPersonId, objective.getPersonId())
.eq(StringUtils.isNotBlank(objective.getIndustryId()), Objective::getIndustryId, objective.getIndustryId())
.like(StringUtils.isNotBlank(objective.getIndustryName()),Objective::getIndustryName, objective.getIndustryName())
.orderByDesc(Objective::getCreateTime);
List<Objective> objectiveList = super.list(qw);
objectiveList.stream().forEach(objective1 -> {
objective1.setPerson(personService.getDetails(objective1.getPersonId()));
});
//返回查询结果
return objectiveList;
}
/**
* @description: 新增求职意向
* @author: wangmenglong
* @date; 2023/12/11 16:51
* @param: [objective]
* @return: boolean
**/
@Override
public boolean create(Objective objective) {
UserContext userContext = UserUtils.getUserContext();
String baseCode = userContext.getBaseCode();
objective.setId(snowFlakeFactory.nextId());
objective.setBaseCode(baseCode);
objective.setDel(false);
objective.setCreateTime(DateUtil.now());
return super.save(objective);
}
/**
* @description: 编辑求职意向
* @author: wangmenglong
* @date; 2023/12/11 16:55
* @param: [objective]
* @return: boolean
**/
@Override
public boolean update(Objective objective) {
objective.setUpdateTime(DateUtil.now());
//判断是否传入id
if(StringUtils.isBlank(objective.getId())){
return false;
}
return super.saveOrUpdate(objective);
}
/**
* @description: 删除求职意向
* @author: wangmenglong
* @date; 2023/12/11 17:06
* @param: [id]
* @return: boolean
**/
@Override
public boolean del(String id) {
if(StringUtils.isBlank(id)){
return false;
}
LambdaUpdateWrapper<Objective> qw = new LambdaUpdateWrapper<>();
qw.eq(Objective::getId,id)
.set(Objective::getDel,true)
.set(Objective::getDelTime, DateUtil.now());
return super.update(qw);
}
/**
* @author: wangmenglong
* @date; 2024/3/24 17:19
* @description: 获取求职意向详情
* @param: [id]
* @return: data.objective.Objective
**/
@Override
public Objective getDetails(String id) {
return super.getById(id);
}
/**
* @author: wangmenglong
* @date; 2024/1/2 14:30
* @description: 判断是否存在
* @param: [account, id]
* @return: boolean
**/
@Override
public boolean isHave(String userId, String industryId,String id) {
LambdaQueryWrapper<Objective> qw = new LambdaQueryWrapper<>();
qw.eq(Objective::getDel,false)
.eq(Objective::getIndustryId, industryId)
.eq(Objective::getUserId, userId);
//如果传了id就是编辑,编辑的时候要加个条件,不能把名字跟别人重复
if(StringUtils.isNotBlank(id)){
qw.ne(Objective::getId,id);
}
return super.count(qw)>0;
}
/**
* @description: 新增求职意向
* @author: wangmenglong
* @date; 2023/12/11 16:51
* @param: [workExperience]
* @return: boolean
**/
@Override
public boolean createAli(List<Objective> objectives) {
LambdaUpdateWrapper<Objective> qw = new LambdaUpdateWrapper<>();
qw.eq(Objective::getDel,false)
.eq(Objective::getPersonId, objectives.get(0).getPersonId())
.set(Objective::getDel,true);
super.update(qw);
objectives.stream().forEach(objective -> {
objective.setId(snowFlakeFactory.nextId());
objective.setDel(false);
objective.setCreateTime(DateUtil.now());
});
return super.saveBatch(objectives);
}
}
package com.jxjy.system.service.impl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper;
import com.jxjy.system.bean.auth.UserContext;
import com.jxjy.system.mapper.OrgMapper;
import com.jxjy.system.service.OrgService;
import com.jxjy.system.util.auth.UserUtils;
import com.jxjy.system.xsnowflake.SnowFlakeFactory;
import data.system.Org;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
*
* @return: 企业管理
* @Author: wml
* @Date 2025/5/9 10:22
*/
@Service
@Transactional
public class OrgServiceImpl extends ServiceImpl<OrgMapper, Org> implements OrgService {
@Autowired
SnowFlakeFactory snowFlakeFactory;
/**
* @description: 获取企业列表
* @author: wangmenglong
* @date; 2023/12/11 16:46
* @param: [pageNum, pageSize]
* @return: java.util.List<data.org.Org>
**/
@Override
public List<Org> list(int pageNum, int pageSize, Org org) {
//启动分页工具
PageHelper.startPage(pageNum, pageSize);
//创建查询条件
LambdaQueryWrapper<Org> qw = new LambdaQueryWrapper<>();
qw.like(StringUtils.isNotBlank(org.getName()),Org::getName,org.getName())
.eq(Org::getDel,false)
.eq(StringUtils.isNotBlank(org.getBaseCode()),Org::getBaseCode, org.getBaseCode())
.orderByDesc(Org::getCreateTime);
List<Org> orgList = super.list(qw);
//返回查询结果
return orgList;
}
/**
* @description: 新增企业
* @author: wangmenglong
* @date; 2023/12/11 16:51
* @param: [org]
* @return: boolean
**/
@Override
public boolean create(Org org) {
UserContext userContext = UserUtils.getUserContext();
String baseCode = userContext.getBaseCode();
org.setId(snowFlakeFactory.nextId());
org.setBaseCode(baseCode);
org.setDel(false);
org.setCreateTime(DateUtil.now());
return super.save(org);
}
/**
* @description: 编辑企业
* @author: wangmenglong
* @date; 2023/12/11 16:55
* @param: [org]
* @return: boolean
**/
@Override
public boolean update(Org org) {
org.setUpdateTime(DateUtil.now());
//判断是否传入id
if(StringUtils.isBlank(org.getId())){
return false;
}
return super.saveOrUpdate(org);
}
/**
* @description: 删除企业
* @author: wangmenglong
* @date; 2023/12/11 17:06
* @param: [id]
* @return: boolean
**/
@Override
public boolean del(String id) {
if(StringUtils.isBlank(id)){
return false;
}
LambdaUpdateWrapper<Org> qw = new LambdaUpdateWrapper<>();
qw.eq(Org::getId,id)
.set(Org::getDel,true)
.set(Org::getDelTime, DateUtil.now());
return super.update(qw);
}
/**
* @author: wangmenglong
* @date; 2024/3/24 17:19
* @description: 获取企业详情
* @param: [id]
* @return: data.org.Org
**/
@Override
public Org getDetails(String id) {
return super.getById(id);
}
/**
* @author: wangmenglong
* @date; 2024/1/2 14:30
* @description: 判断是否存在
* @param: [account, id]
* @return: boolean
**/
@Override
public boolean isHave(String name, String id) {
LambdaQueryWrapper<Org> qw = new LambdaQueryWrapper<>();
qw.eq(Org::getDel,false)
.eq(Org::getName, name);
//如果传了id就是编辑,编辑的时候要加个条件,不能把名字跟别人重复
if(StringUtils.isNotBlank(id)){
qw.ne(Org::getId,id);
}
return super.count(qw)>0;
}
}
package com.jxjy.system.service.impl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper;
import com.jxjy.system.bean.auth.UserContext;
import com.jxjy.system.mapper.PersonEducationalMapper;
import com.jxjy.system.service.PersonEducationalService;
import com.jxjy.system.util.auth.UserUtils;
import com.jxjy.system.xsnowflake.SnowFlakeFactory;
import data.system.PersonEducational;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
*
* @return: 教育经历管理
* @Author: wml
* @Date 2025/5/9 10:22
*/
@Service
@Transactional
public class PersonEducationalServiceImpl extends ServiceImpl<PersonEducationalMapper, PersonEducational> implements PersonEducationalService {
@Autowired
SnowFlakeFactory snowFlakeFactory;
/**
* @description: 获取教育经历列表
* @author: wangmenglong
* @date; 2023/12/11 16:46
* @param: [pageNum, pageSize]
* @return: java.util.List<data.personEducational.PersonEducational>
**/
@Override
public List<PersonEducational> list(int pageNum, int pageSize, PersonEducational personEducational) {
//启动分页工具
PageHelper.startPage(pageNum, pageSize);
//创建查询条件
LambdaQueryWrapper<PersonEducational> qw = new LambdaQueryWrapper<>();
qw.eq(PersonEducational::getDel,false)
.eq(StringUtils.isNotBlank(personEducational.getBaseCode()),PersonEducational::getBaseCode, personEducational.getBaseCode())
.eq(StringUtils.isNotBlank(personEducational.getPersonId()),PersonEducational::getPersonId, personEducational.getPersonId())
.orderByDesc(PersonEducational::getCreateTime);
List<PersonEducational> personEducationalList = super.list(qw);
//返回查询结果
return personEducationalList;
}
/**
* @description: 新增教育经历
* @author: wangmenglong
* @date; 2023/12/11 16:51
* @param: [personEducational]
* @return: boolean
**/
@Override
public boolean create(PersonEducational personEducational) {
UserContext userContext = UserUtils.getUserContext();
String baseCode = userContext.getBaseCode();
personEducational.setId(snowFlakeFactory.nextId());
personEducational.setBaseCode(baseCode);
personEducational.setDel(false);
personEducational.setCreateTime(DateUtil.now());
personEducational.setPersonId(userContext.getUserId());
return super.save(personEducational);
}
/**
* @description: 编辑教育经历
* @author: wangmenglong
* @date; 2023/12/11 16:55
* @param: [personEducational]
* @return: boolean
**/
@Override
public boolean update(PersonEducational personEducational) {
personEducational.setUpdateTime(DateUtil.now());
//判断是否传入id
if(StringUtils.isBlank(personEducational.getId())){
return false;
}
return super.saveOrUpdate(personEducational);
}
/**
* @description: 删除教育经历
* @author: wangmenglong
* @date; 2023/12/11 17:06
* @param: [id]
* @return: boolean
**/
@Override
public boolean del(String id) {
if(StringUtils.isBlank(id)){
return false;
}
LambdaUpdateWrapper<PersonEducational> qw = new LambdaUpdateWrapper<>();
qw.eq(PersonEducational::getId,id)
.set(PersonEducational::getDel,true)
.set(PersonEducational::getDelTime, DateUtil.now());
return super.update(qw);
}
/**
* @author: wangmenglong
* @date; 2024/3/24 17:19
* @description: 获取教育经历详情
* @param: [id]
* @return: data.personEducational.PersonEducational
**/
@Override
public PersonEducational getDetails(String id) {
return super.getById(id);
}
/**
* @author: wangmenglong
* @date; 2024/1/2 14:30
* @description: 判断是否存在
* @param: [account, id]
* @return: boolean
**/
@Override
public boolean isHave(String school, String id) {
LambdaQueryWrapper<PersonEducational> qw = new LambdaQueryWrapper<>();
qw.eq(PersonEducational::getDel,false)
.eq(PersonEducational::getSchool, school);
//如果传了id就是编辑,编辑的时候要加个条件,不能把名字跟别人重复
if(StringUtils.isNotBlank(id)){
qw.ne(PersonEducational::getId,id);
}
return super.count(qw)>0;
}
/**
* @description: 新增教育经历
* @author: wangmenglong
* @date; 2023/12/11 16:51
* @param: [personEducational]
* @return: boolean
**/
@Override
public boolean createAli(PersonEducational personEducational) {
LambdaUpdateWrapper<PersonEducational> qw = new LambdaUpdateWrapper<>();
qw.eq(PersonEducational::getDel,false)
.eq(PersonEducational::getPersonId, personEducational.getPersonId())
.set(PersonEducational::getDel,true)
.set(PersonEducational::getDelTime, DateUtil.now());
super.update(qw);
personEducational.setId(snowFlakeFactory.nextId());
personEducational.setDel(false);
personEducational.setCreateTime(DateUtil.now());
return super.save(personEducational);
}
}
package com.jxjy.system.service.impl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper;
import com.jxjy.system.mapper.PersonMapper;
import com.jxjy.system.service.DriverSchoolRecordService;
import com.jxjy.system.service.HigherSchoolRecordService;
import com.jxjy.system.service.PersonService;
import com.jxjy.system.service.RecruitService;
import com.jxjy.system.xsnowflake.SnowFlakeFactory;
import data.system.Person;
import data.system.Recruit;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
/**
*
* @return: 报名员工管理
* @Author: wml
* @Date 2025/5/9 10:22
*/
@Service
@Transactional
public class PersonServiceImpl extends ServiceImpl<PersonMapper, Person> implements PersonService {
@Autowired
SnowFlakeFactory snowFlakeFactory;
@Resource
private RecruitService recruitService;
@Resource
private DriverSchoolRecordService driverSchoolRecordService;
@Resource
private HigherSchoolRecordService higherSchoolRecordService;
/**
* @description: 获取报名员工列表
* @author: wangmenglong
* @date; 2023/12/11 16:46
* @param: [pageNum, pageSize]
* @return: java.util.List<data.person.Person>
**/
@Override
public List<Person> list(int pageNum, int pageSize, Person person) {
//启动分页工具
PageHelper.startPage(pageNum, pageSize);
//创建查询条件
LambdaQueryWrapper<Person> qw = new LambdaQueryWrapper<>();
qw.like(StringUtils.isNotBlank(person.getName()),Person::getName,person.getName())
.eq(Person::getDel,false)
.eq(StringUtils.isNotBlank(person.getBaseCode()),Person::getBaseCode, person.getBaseCode())
.eq(StringUtils.isNotBlank(person.getRecruitTypeId()),Person::getRecruitTypeId, person.getRecruitTypeId())
.like(StringUtils.isNotBlank(person.getRecruitType()),Person::getRecruitType, person.getRecruitType())
.orderByDesc(Person::getCreateTime);
List<Person> personList = super.list(qw);
//返回查询结果
return personList;
}
/**
* @description: 新增报名员工
* @author: wangmenglong
* @date; 2023/12/11 16:51
* @param: [person]
* @return: boolean
**/
@Override
public boolean create(Person person) {
//UserContext userContext = UserUtils.getUserContext();
//String baseCode = userContext.getBaseCode();
person.setId(snowFlakeFactory.nextId());
person.setBaseCode("jyjxjy");
person.setDel(false);
person.setCreateTime(DateUtil.now());
return super.save(person);
}
/**
* @description: 编辑报名员工
* @author: wangmenglong
* @date; 2023/12/11 16:55
* @param: [person]
* @return: boolean
**/
@Override
public boolean update(Person person) {
person.setUpdateTime(DateUtil.now());
//判断是否传入id
if(StringUtils.isBlank(person.getId())){
return false;
}
return super.saveOrUpdate(person);
}
/**
* @description: 删除报名员工
* @author: wangmenglong
* @date; 2023/12/11 17:06
* @param: [id]
* @return: boolean
**/
@Override
public boolean del(String id) {
if(StringUtils.isBlank(id)){
return false;
}
LambdaUpdateWrapper<Person> qw = new LambdaUpdateWrapper<>();
qw.eq(Person::getId,id)
.set(Person::getDel,true)
.set(Person::getDelTime, DateUtil.now());
return super.update(qw);
}
/**
* @author: wangmenglong
* @date; 2024/3/24 17:19
* @description: 获取报名员工详情
* @param: [id]
* @return: data.person.Person
**/
@Override
public Person getDetails(String id) {
return super.getById(id);
}
/**
* @author: wangmenglong
* @date; 2024/1/2 14:30
* @description: 判断是否存在
* @param: [account, id]
* @return: boolean
**/
@Override
public boolean isHave(String openId, String id) {
LambdaQueryWrapper<Person> qw = new LambdaQueryWrapper<>();
qw.eq(Person::getDel,false)
.eq(Person::getOpenId, openId);
//如果传了id就是编辑,编辑的时候要加个条件,不能把名字跟别人重复
if(StringUtils.isNotBlank(id)){
qw.ne(Person::getId,id);
}
return super.count(qw)>0;
}
/**
* @author: wangmenglong
* @date; 2025/5/9 10:22
* @description: 获取用户详情,登陆用
* @param: [id]
* @return: data.user.User
**/
@Override
public Person getDetailsByLoginOpenId(String openId) {
//创建查询条件
LambdaQueryWrapper<Person> qw = new LambdaQueryWrapper<>();
qw.eq(Person::getOpenId,openId)
.eq(Person::getDel,false);
return super.getOne(qw);
}
/**
* @description: 获取报名员工列表
* @author: wangmenglong
* @date; 2023/12/11 16:46
* @param: [pageNum, pageSize]
* @return: java.util.List<data.person.Person>
**/
@Override
public List<Person> getRecruitMessageList(String recruitId) {
Recruit recruit = recruitService.getDetails(recruitId);
//创建查询条件
LambdaQueryWrapper<Person> qw = new LambdaQueryWrapper<>();
qw.eq(Person::getDel,false)
.notInSql(Person::getId,"SELECT mr.personnel_id FROM tb_message_record AS mr WHERE mr.recruit_id = \""+recruitId+"\"")
.inSql(Person::getId,"SELECT o.person_id from tb_objective as o where o.del = 0 and o.work_type like \""+recruit.getRecruitType()+"\"")
.last(" limit 100");
List<Person> personList = super.list(qw);
//返回查询结果
return personList;
}
@Override
public List<Person> listHigher(int pageNum, int pageSize, Person person) {
//启动分页工具
PageHelper.startPage(pageNum, pageSize);
//创建查询条件
LambdaQueryWrapper<Person> qw = new LambdaQueryWrapper<>();
qw.like(StringUtils.isNotBlank(person.getName()),Person::getName,person.getName())
.eq(Person::getDel,false)
.eq(StringUtils.isNotBlank(person.getBaseCode()),Person::getBaseCode, person.getBaseCode())
.eq(StringUtils.isNotBlank(person.getRecruitTypeId()),Person::getRecruitTypeId, person.getRecruitTypeId())
.like(StringUtils.isNotBlank(person.getRecruitType()),Person::getRecruitType, person.getRecruitType())
.inSql(Person::getId,"SELECT o.person_id from tb_higher_school_record as o where o.del = 0 ")
.orderByDesc(Person::getCreateTime);
List<Person> personList = super.list(qw);
personList.stream().forEach(person1 -> {
person1.setRecordState(higherSchoolRecordService.detailsByPersonId(person1.getId()).getState());
});
//返回查询结果
return personList;
}
@Override
public List<Person> listDriver(int pageNum, int pageSize, Person person) {
//启动分页工具
PageHelper.startPage(pageNum, pageSize);
//创建查询条件
LambdaQueryWrapper<Person> qw = new LambdaQueryWrapper<>();
qw.like(StringUtils.isNotBlank(person.getName()),Person::getName,person.getName())
.eq(Person::getDel,false)
.eq(StringUtils.isNotBlank(person.getBaseCode()),Person::getBaseCode, person.getBaseCode())
.eq(StringUtils.isNotBlank(person.getRecruitTypeId()),Person::getRecruitTypeId, person.getRecruitTypeId())
.like(StringUtils.isNotBlank(person.getRecruitType()),Person::getRecruitType, person.getRecruitType())
.inSql(Person::getId,"SELECT o.person_id from tb_driver_school_record as o where o.del = 0 ")
.orderByDesc(Person::getCreateTime);
List<Person> personList = super.list(qw);
personList.stream().forEach(person1 -> {
person1.setRecordState(driverSchoolRecordService.detailsByPersonId(person1.getId()).getState());
});
return personList;
}
}
package com.jxjy.system.service.impl;
import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jxjy.system.mapper.QualificationMapper;
import com.jxjy.system.service.QualificationService;
import data.system.Qualification;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
*
* @return: 学历
* @Author: wml
* @Date 2025/5/9 10:22
*/
@Service
@Transactional
public class QualificationServiceImpl extends ServiceImpl<QualificationMapper, Qualification> implements QualificationService {
/**
* @description: 获取所有列表
* @author: wangmenglong
**/
@Override
public List<Qualification> listAll(Qualification qualification) {
//创建查询条件
LambdaQueryWrapper<Qualification> qw = new LambdaQueryWrapper<>();
qw.eq(Qualification::getDel,false)
.eq(StringUtils.isNotBlank(qualification.getBaseCode()),Qualification::getBaseCode, qualification.getBaseCode())
.orderByDesc(Qualification::getCreateTime);
List<Qualification> orgList = super.list(qw);
//返回查询结果
return orgList;
}
/**
* @description: 根据名字获取
* @author: wangmenglong
**/
@Override
public Qualification queryByName(String name) {
//创建查询条件
LambdaQueryWrapper<Qualification> qw = new LambdaQueryWrapper<>();
qw.eq(Qualification::getDel,false)
.eq(Qualification::getName, name);
//返回查询结果
return super.getOne(qw);
}
}
package com.jxjy.system.service.impl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper;
import com.jxjy.system.bean.auth.UserContext;
import com.jxjy.system.mapper.RecruitMapper;
import com.jxjy.system.service.*;
import com.jxjy.system.util.auth.UserUtils;
import com.jxjy.system.xsnowflake.SnowFlakeFactory;
import data.system.Industry;
import data.system.Message;
import data.system.Org;
import data.system.Recruit;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayEbppIndustryJobSyncModel;
import com.alipay.api.request.AlipayEbppIndustryJobSyncRequest;
import com.alipay.api.domain.JobAddress;
import com.alipay.api.response.AlipayEbppIndustryJobSyncResponse;
import javax.annotation.Resource;
import java.util.List;
/**
*
* @return: 招聘管理
* @Author: wml
* @Date 2025/5/9 10:22
*/
@Service
@Transactional
public class RecruitServiceImpl extends ServiceImpl<RecruitMapper, Recruit> implements RecruitService {
@Autowired
SnowFlakeFactory snowFlakeFactory;
@Resource
private RecruitMapper recruitMapper;
@Resource
private PersonService personService;
@Resource
private OrgService orgService;
@Resource
private IndustryService industryService;
@Resource
private MessageService messageService;
/**
* @description: 获取招聘列表
* @author: wangmenglong
* @date; 2023/12/11 16:46
* @param: [pageNum, pageSize]
* @return: java.util.List<data.recruit.Recruit>
**/
@Override
public List<Recruit> listBySignRecordAdmin(int pageNum, int pageSize,String personIdno,String personName,String name) {
//启动分页工具
PageHelper.startPage(pageNum, pageSize);
String adminType = "admin";
UserContext userContext = UserUtils.getUserContext();
if(!userContext.getType().equals("admin")){
adminType = userContext.getType();
}
List<Recruit> orgList = recruitMapper.listBySignRecord(null,personIdno,personName,name,adminType,userContext.getUserId());
orgList.stream().forEach(recruit -> {
recruit.setPerson(personService.getDetails(recruit.getPersonId()));
recruit.setOrg(orgService.getDetails(recruit.getOrgId()));
});
//返回查询结果
return orgList;
}
/**
* @description: 获取招聘列表
* @author: wangmenglong
* @date; 2023/12/11 16:46
* @param: [pageNum, pageSize]
* @return: java.util.List<data.recruit.Recruit>
**/
@Override
public List<Recruit> listBySignRecord(int pageNum, int pageSize, String personId) {
//启动分页工具
PageHelper.startPage(pageNum, pageSize);
List<Recruit> orgList = recruitMapper.listBySignRecord(personId,null,null,null,null,null);
orgList.stream().forEach(returnRecruit -> {
returnRecruit.setOrg(orgService.getDetails(returnRecruit.getOrgId()));
});
//返回查询结果
return orgList;
}
/**
* @description: 获取招聘列表
* @author: wangmenglong
* @date; 2023/12/11 16:46
* @param: [pageNum, pageSize]
* @return: java.util.List<data.recruit.Recruit>
**/
@Override
public List<Recruit> listByCollect(int pageNum, int pageSize, String personId) {
//启动分页工具
PageHelper.startPage(pageNum, pageSize);
List<Recruit> orgList = recruitMapper.listByCollect(personId);
orgList.stream().forEach(returnRecruit -> {
returnRecruit.setOrg(orgService.getDetails(returnRecruit.getOrgId()));
});
//返回查询结果
return orgList;
}
/**
* @description: 获取招聘列表
* @author: wangmenglong
* @date; 2023/12/11 16:46
* @param: [pageNum, pageSize]
* @return: java.util.List<data.recruit.Recruit>
**/
@Override
public List<Recruit> list(int pageNum, int pageSize, Recruit recruit) {
//启动分页工具
PageHelper.startPage(pageNum, pageSize);
//创建查询条件
LambdaQueryWrapper<Recruit> qw = new LambdaQueryWrapper<>();
qw.like(StringUtils.isNotBlank(recruit.getName()),Recruit::getName,recruit.getName())
.eq(StringUtils.isNotBlank(recruit.getRecruitTypeId()),Recruit::getRecruitTypeId,recruit.getRecruitTypeId())
.eq(StringUtils.isNotBlank(recruit.getOrgId()),Recruit::getOrgId,recruit.getOrgId())
.eq(StringUtils.isNotBlank(recruit.getCity()),Recruit::getCity,recruit.getCity())
.eq(StringUtils.isNotBlank(recruit.getProvince()),Recruit::getProvince,recruit.getProvince())
.eq(StringUtils.isNotBlank(recruit.getExperienceId()),Recruit::getExperienceId,recruit.getExperienceId())
.eq(StringUtils.isNotBlank(recruit.getStatus()),Recruit::getStatus,recruit.getStatus())
.eq(StringUtils.isNotBlank(recruit.getQualificationId()),Recruit::getQualificationId,recruit.getQualificationId())
.eq(Recruit::getDel,false)
.eq(StringUtils.isNotBlank(recruit.getBaseCode()),Recruit::getBaseCode, recruit.getBaseCode())
.like(StringUtils.isNotBlank(recruit.getTowIndustryName()),Recruit::getTowIndustryName, recruit.getTowIndustryName())
.and(StringUtils.isNotBlank(recruit.getSelTitle()),
qw1 -> qw1.like(Recruit::getName,recruit.getSelTitle()).or().like(Recruit::getOrgName,recruit.getSelTitle()))
.orderByDesc(Recruit::getCreateTime);
List<Recruit> orgList = super.list(qw);
orgList.stream().forEach(returnRecruit -> {
returnRecruit.setOrg(orgService.getDetails(returnRecruit.getOrgId()));
});
//返回查询结果
return orgList;
}
/**
* @description: 新增招聘
* @author: wangmenglong
* @date; 2023/12/11 16:51
* @param: [recruit]
* @return: boolean
**/
@Override
public boolean create(Recruit recruit) {
UserContext userContext = UserUtils.getUserContext();
String baseCode = userContext.getBaseCode();
recruit.setId(snowFlakeFactory.nextId());
recruit.setBaseCode(baseCode);
recruit.setDel(false);
recruit.setCreateTime(DateUtil.now());
recruit.setStatus("down");
recruit.setLaunch("0");
recruit.setUserId(userContext.getUserId());
recruit.setUserName(userContext.getUsername());
try {
Industry industry = industryService.getDetails(recruit.getIndustryId());
recruit.setIndustryCode(industry.getCode());
Org org = orgService.getDetails(recruit.getOrgId());
recruit.setOrg(org);
}catch (Exception e){
e.printStackTrace();
}
return super.save(recruit);
}
/**
* @description: 编辑招聘
* @author: wangmenglong
* @date; 2023/12/11 16:55
* @param: [org]
* @return: boolean
**/
@Override
public boolean update(Recruit recruit) {
recruit.setUpdateTime(DateUtil.now());
//判断是否传入id
if(StringUtils.isBlank(recruit.getId())){
return false;
}
return super.saveOrUpdate(recruit);
}
/**
* @description: 删除招聘
* @author: wangmenglong
* @date; 2023/12/11 17:06
* @param: [id]
* @return: boolean
**/
@Override
public boolean del(String id) {
if(StringUtils.isBlank(id)){
return false;
}
LambdaUpdateWrapper<Recruit> qw = new LambdaUpdateWrapper<>();
qw.eq(Recruit::getId,id)
.set(Recruit::getDel,true)
.set(Recruit::getDelTime, DateUtil.now());
return super.update(qw);
}
/**
* @author: wangmenglong
* @date; 2024/3/24 17:19
* @description: 获取招聘详情
* @param: [id]
* @return: data.recruit.Recruit
**/
@Override
public Recruit getDetails(String id) {
Recruit recruit = super.getById(id);
recruit.setOrg(orgService.getDetails(recruit.getOrgId()));
return super.getById(id);
}
/**
* @description: 编辑招聘
* @author: wangmenglong
* @date; 2023/12/11 16:55
* @param: [org]
* @return: boolean
**/
@Override
public boolean updateStatus(Recruit recruit) {
//判断是否传入id
if(StringUtils.isBlank(recruit.getId())){
return false;
}
recruit = super.getById(recruit.getId());
recruit.setOrg(orgService.getDetails(recruit.getOrgId()));
switch (recruit.getStatus()){
case "up":
recruit.setStatus("down");
recruit.setLaunch("1");
break;
case "down":
recruit.setStatus("up");
break;
default:
recruit.setStatus("up");
return false;
}
//发送消息
if(recruit.getStatus().equals("up")){
Message message = new Message();
message.setTitle("新增岗位发布");
message.setContent("您关注的岗位类型有新的岗位发布,点击前往查看。");
message.setRecruitId(recruit.getId());
messageService.create(message);
}
return super.saveOrUpdate(recruit);
}
}
package com.jxjy.system.service.impl;
import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jxjy.system.mapper.RecruitTypeMapper;
import com.jxjy.system.service.RecruitTypeService;
import data.system.RecruitType;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
*
* @return: 招聘类型管理
* @Author: wml
* @Date 2025/5/9 10:22
*/
@Service
@Transactional
public class RecruitTypeServiceImpl extends ServiceImpl<RecruitTypeMapper, RecruitType> implements RecruitTypeService {
/**
* @description: 获取所有列表
* @author: wangmenglong
**/
@Override
public List<RecruitType> listAll(RecruitType recruitType) {
//创建查询条件
LambdaQueryWrapper<RecruitType> qw = new LambdaQueryWrapper<>();
qw.like(StringUtils.isNotBlank(recruitType.getName()),RecruitType::getName,recruitType.getName())
.eq(RecruitType::getDel,false)
.eq(StringUtils.isNotBlank(recruitType.getBaseCode()),RecruitType::getBaseCode, recruitType.getBaseCode())
.orderByDesc(RecruitType::getCreateTime);
List<RecruitType> orgList = super.list(qw);
//返回查询结果
return orgList;
}
}
package com.jxjy.system.service.impl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper;
import com.jxjy.system.bean.auth.UserContext;
import com.jxjy.system.mapper.SchoolMapper;
import com.jxjy.system.service.SchoolService;
import com.jxjy.system.util.auth.UserUtils;
import com.jxjy.system.xsnowflake.SnowFlakeFactory;
import data.system.School;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
*
* @return: 学校管理
* @Author: wml
* @Date 2025/5/9 10:22
*/
@Service
@Transactional
public class SchoolServiceImpl extends ServiceImpl<SchoolMapper, School> implements SchoolService {
@Autowired
SnowFlakeFactory snowFlakeFactory;
/**
* @description: 获取学校列表
* @author: wangmenglong
* @date; 2023/12/11 16:46
* @param: [pageNum, pageSize]
* @return: java.util.List<data.school.School>
**/
@Override
public List<School> list(int pageNum, int pageSize, School school) {
//启动分页工具
PageHelper.startPage(pageNum, pageSize);
//创建查询条件
LambdaQueryWrapper<School> qw = new LambdaQueryWrapper<>();
qw.like(StringUtils.isNotBlank(school.getName()),School::getName,school.getName())
.eq(School::getDel,false)
.eq(StringUtils.isNotBlank(school.getBaseCode()),School::getBaseCode, school.getBaseCode())
.orderByDesc(School::getCreateTime);
List<School> schoolList = super.list(qw);
//返回查询结果
return schoolList;
}
/**
* @description: 获取学校列表
* @author: wangmenglong
* @date; 2023/12/11 16:46
* @param: [pageNum, pageSize]
* @return: java.util.List<data.school.School>
**/
@Override
public List<School> listAll(School school) {
//创建查询条件
LambdaQueryWrapper<School> qw = new LambdaQueryWrapper<>();
qw.like(StringUtils.isNotBlank(school.getName()),School::getName,school.getName())
.eq(School::getDel,false)
.eq(StringUtils.isNotBlank(school.getBaseCode()),School::getBaseCode, school.getBaseCode())
.orderByDesc(School::getCreateTime);
List<School> schoolList = super.list(qw);
//返回查询结果
return schoolList;
}
/**
* @description: 新增学校
* @author: wangmenglong
* @date; 2023/12/11 16:51
* @param: [school]
* @return: boolean
**/
@Override
public boolean create(School school) {
UserContext userContext = UserUtils.getUserContext();
String baseCode = userContext.getBaseCode();
school.setId(snowFlakeFactory.nextId());
school.setBaseCode(baseCode);
school.setDel(false);
school.setCreateTime(DateUtil.now());
return super.save(school);
}
/**
* @description: 编辑学校
* @author: wangmenglong
* @date; 2023/12/11 16:55
* @param: [school]
* @return: boolean
**/
@Override
public boolean update(School school) {
school.setUpdateTime(DateUtil.now());
//判断是否传入id
if(StringUtils.isBlank(school.getId())){
return false;
}
return super.saveOrUpdate(school);
}
/**
* @description: 删除学校
* @author: wangmenglong
* @date; 2023/12/11 17:06
* @param: [id]
* @return: boolean
**/
@Override
public boolean del(String id) {
if(StringUtils.isBlank(id)){
return false;
}
LambdaUpdateWrapper<School> qw = new LambdaUpdateWrapper<>();
qw.eq(School::getId,id)
.set(School::getDel,true)
.set(School::getDelTime, DateUtil.now());
return super.update(qw);
}
/**
* @author: wangmenglong
* @date; 2024/3/24 17:19
* @description: 获取学校详情
* @param: [id]
* @return: data.school.School
**/
@Override
public School getDetails(String id) {
return super.getById(id);
}
/**
* @author: wangmenglong
* @date; 2024/1/2 14:30
* @description: 判断是否存在
* @param: [account, id]
* @return: boolean
**/
@Override
public boolean isHave(String name, String id) {
LambdaQueryWrapper<School> qw = new LambdaQueryWrapper<>();
qw.eq(School::getDel,false)
.eq(School::getName, name);
//如果传了id就是编辑,编辑的时候要加个条件,不能把名字跟别人重复
if(StringUtils.isNotBlank(id)){
qw.ne(School::getId,id);
}
return super.count(qw)>0;
}
}
package com.jxjy.system.service.impl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jxjy.system.mapper.SignRecordMapper;
import com.jxjy.system.service.SignRecordService;
import com.jxjy.system.xsnowflake.SnowFlakeFactory;
import data.system.SignRecord;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
*
* @return: 报名管理
* @Author: wml
* @Date 2025/5/9 10:22
*/
@Service
@Transactional
public class SignRecordServiceImpl extends ServiceImpl<SignRecordMapper, SignRecord> implements SignRecordService {
@Autowired
SnowFlakeFactory snowFlakeFactory;
/**
* @description: 新增报名
* @author: wangmenglong
* @date; 2023/12/11 16:51
* @param: [signRecord]
* @return: boolean
**/
@Override
public String create(SignRecord signRecord) {
signRecord.setId(snowFlakeFactory.nextId());
signRecord.setDel(false);
signRecord.setCreateTime(DateUtil.now());
signRecord.setState("APPLYING");
super.save(signRecord);
return signRecord.getId();
}
/**
* @description: 删除报名
* @author: wangmenglong
* @date; 2023/12/11 17:06
* @param: [id]
* @return: boolean
**/
@Override
public boolean del(String recruitId,String personId) {
if(StringUtils.isBlank(recruitId)||StringUtils.isBlank(personId)){
return false;
}
LambdaUpdateWrapper<SignRecord> qw = new LambdaUpdateWrapper<>();
qw.eq(SignRecord::getRecruitId,recruitId).eq(SignRecord::getPersonId,personId)
.set(SignRecord::getDel,true)
.set(SignRecord::getDelTime, DateUtil.now());
return super.update(qw);
}
/**
* @author: wangmenglong
* @date; 2024/1/2 14:30
* @description: 判断是否存在
* @param: [account, id]
* @return: boolean
**/
@Override
public boolean isHave(String recruitId, String personId) {
LambdaQueryWrapper<SignRecord> qw = new LambdaQueryWrapper<>();
qw.eq(SignRecord::getDel,false)
.eq(SignRecord::getRecruitId, recruitId)
.eq(SignRecord::getPersonId, personId);
return super.count(qw)>0;
}
/**
* @author: wangmenglong
* @date; 2024/1/2 14:30
* @description: 修改状态
* @param: [account, id]
* @return: boolean
**/
@Override
public boolean update(String recordId,String state) {
LambdaUpdateWrapper<SignRecord> qw = new LambdaUpdateWrapper<>();
qw.eq(SignRecord::getDel,false)
.eq(SignRecord::getId, recordId)
.set(SignRecord::getState, state);
return super.update(qw);
}
}
package com.jxjy.system.service.impl;
import base.result.BaseResult;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jxjy.system.bean.auth.UserContext;
import com.jxjy.system.mapper.UserMapper;
import com.jxjy.system.service.UserService;
import com.jxjy.system.util.auth.UserUtils;
import com.jxjy.system.xsnowflake.SnowFlakeFactory;
import com.github.pagehelper.PageHelper;
import data.user.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.DigestUtils;
import java.util.List;
/**
*
* @return: 用户管理
* @Author: wml
* @Date 2025/5/9 10:22
*/
@Service
@Transactional
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
@Autowired
SnowFlakeFactory snowFlakeFactory;
/**
* @author: wangmenglong
* @date; 2025/5/9 10:22
* @description: 获取用户详情,登陆用
* @param: [id]
* @return: data.user.User
**/
@Override
public User getDetailsByLoginAccount(String account) {
//创建查询条件
LambdaQueryWrapper<User> qw = new LambdaQueryWrapper<>();
qw.eq(User::getAccount,account)
.eq(User::getDel,false);
return super.getOne(qw);
}
/**
* @description: 获取用户列表
* @author: wangmenglong
* @date; 2023/12/11 16:46
* @param: [pageNum, pageSize]
* @return: java.util.List<data.user.User>
**/
@Override
public List<User> list(int pageNum, int pageSize, User user) {
UserContext userContext = UserUtils.getUserContext();
String baseCode = userContext.getBaseCode();
//启动分页工具
PageHelper.startPage(pageNum, pageSize);
//创建查询条件
LambdaQueryWrapper<User> qw = new LambdaQueryWrapper<>();
qw.like(StringUtils.isNotBlank(user.getName()),User::getName,user.getName())
.like(StringUtils.isNotBlank(user.getAccount()),User::getAccount,user.getAccount())
.eq(StringUtils.isNotBlank(user.getState()), User::getState,user.getState())
.eq(User::getDel,false)
.eq(User::getBaseCode, baseCode)
.orderByDesc(User::getCreateTime);
List<User> orgList = super.list(qw);
//返回查询结果
return orgList;
}
/**
* @description: 新增用户
* @author: wangmenglong
* @date; 2023/12/11 16:51
* @param: [user]
* @return: boolean
**/
@Override
public boolean create(User user) {
//校验用户名是否存在
User u = super.getOne(new LambdaQueryWrapper<User>().eq(User::getDel, false )
.eq(User::getState, "normal")
.eq(User::getAccount, user.getAccount()));
if(ObjectUtil.isNotNull(u)){
return false;
}
UserContext userContext = UserUtils.getUserContext();
String baseCode = userContext.getBaseCode();
user.setId(snowFlakeFactory.nextId());
user.setBaseCode(baseCode);
user.setUserId(userContext.getUserId());
user.setUserName(userContext.getUsername());
user.setPassword(DigestUtils.md5DigestAsHex("123456".getBytes()));
user.setState("normal");
user.setDel(false);
user.setCreateTime(DateUtil.now());
return super.save(user);
}
/**
* @description: 编辑用户
* @author: wangmenglong
* @date; 2023/12/11 16:55
* @param: [org]
* @return: boolean
**/
@Override
public boolean update(User user) {
user.setUpdateTime(DateUtil.now());
//判断是否传入id
if(StringUtils.isBlank(user.getId())){
return false;
}
return super.saveOrUpdate(user);
}
/**
* @description: 重置密码
* @author: wangmenglong
* @date; 2023/12/11 17:00
* @param: [id]
* @return: boolean
**/
@Override
public boolean reset(String id) {
if(StringUtils.isBlank(id)){
return false;
}
User user = super.getById(id);
user.setPassword(DigestUtils.md5DigestAsHex("123456".getBytes()));
user.setUpdateTime(DateUtil.now());
return super.saveOrUpdate(user);
}
/**
* @description: 修改状态
* @author: wangmenglong
* @date; 2023/12/11 17:04
* @param: [id, state]
* @return: boolean
**/
@Override
public boolean uState(String id, String state) {
if(StringUtils.isBlank(id)){
return false;
}
User user = super.getById(id);
user.setState(state);
user.setUpdateTime(DateUtil.now());
return super.saveOrUpdate(user);
}
/**
* @description: 删除用户
* @author: wangmenglong
* @date; 2023/12/11 17:06
* @param: [id]
* @return: boolean
**/
@Override
public boolean del(String id) {
if(StringUtils.isBlank(id)){
return false;
}
LambdaUpdateWrapper<User> qw = new LambdaUpdateWrapper<>();
qw.eq(User::getId,id)
.set(User::getDel,true)
.set(User::getDelTime, DateUtil.now());
User user = super.getById(id);
return super.update(qw);
}
/**
* @description: 修改密码
* @author: wangmenglong
* @date; 2023/12/12 11:05
* @param: [oldPassword, password, id]
* @return: boolean
**/
@Override
public boolean uPassword(String oldPassword, String password, String id) {
User user = super.getById(id);
oldPassword = DigestUtils.md5DigestAsHex(oldPassword.getBytes());
if(!oldPassword.equals(user.getPassword())){
return false;
}
password = DigestUtils.md5DigestAsHex(password.getBytes());
user.setPassword(password);
user.setUpdateTime(DateUtil.now());
return super.saveOrUpdate(user);
}
/**
* @author: wangmenglong
* @date; 2024/3/21 15:39
* @description: 修改当前用户的密码
* @param: [oldPassword, password]
* @return: base.result.BaseResult
**/
@Override
public BaseResult updateUserPassword(String oldPassword, String password) {
UserContext userContext = UserUtils.getUserContext();
String id = userContext.getUserId();
User user = super.getById(id);
oldPassword = DigestUtils.md5DigestAsHex(oldPassword.getBytes());
if(!oldPassword.equals(user.getPassword())){
return BaseResult.error("error_035");
}
LambdaUpdateWrapper<User> qw = new LambdaUpdateWrapper<>();
qw.eq(User::getId,id)
.set(User::getPassword,DigestUtils.md5DigestAsHex(password.getBytes()))
.set(User::getUpdateTime, DateUtil.now());
return super.update(qw) ? BaseResult.success("normal_002") : BaseResult.error("error_002");
}
/**
* @author: wangmenglong
* @date; 2024/1/2 14:30
* @description: 判断用户名是否存在
* @param: [account, id]
* @return: boolean
**/
@Override
public boolean isHave(String account, String id) {
LambdaQueryWrapper<User> qw = new LambdaQueryWrapper<>();
qw.eq(User::getDel,false)
.eq(User::getState, "normal")
.eq(User::getAccount,account);
//如果传了id就是编辑,编辑的时候要加个条件,不能把名字跟别人重复
if(StringUtils.isNotBlank(id)){
qw.ne(User::getId,id);
}
return super.count(qw)>0;
}
/**
* @author: wangmenglong
* @date; 2024/3/24 17:19
* @description: 获取用户详情
* @param: [id]
* @return: data.user.User
**/
@Override
public User getDetails(String id) {
return super.getById(id);
}
}
package com.jxjy.system.service.impl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper;
import com.jxjy.system.bean.auth.UserContext;
import com.jxjy.system.mapper.WorkExperienceMapper;
import com.jxjy.system.service.WorkExperienceService;
import com.jxjy.system.util.auth.UserUtils;
import com.jxjy.system.xsnowflake.SnowFlakeFactory;
import data.system.WorkExperience;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
*
* @return: 工作经历管理
* @Author: wml
* @Date 2025/5/9 10:22
*/
@Service
@Transactional
public class WorkExperienceServiceImpl extends ServiceImpl<WorkExperienceMapper, WorkExperience> implements WorkExperienceService {
@Autowired
SnowFlakeFactory snowFlakeFactory;
/**
* @description: 获取工作经历列表
* @author: wangmenglong
* @date; 2023/12/11 16:46
* @param: [pageNum, pageSize]
* @return: java.util.List<data.workExperience.WorkExperience>
**/
@Override
public List<WorkExperience> list(int pageNum, int pageSize, WorkExperience workExperience) {
//启动分页工具
PageHelper.startPage(pageNum, pageSize);
//创建查询条件
LambdaQueryWrapper<WorkExperience> qw = new LambdaQueryWrapper<>();
qw.eq(WorkExperience::getDel,false)
.eq(StringUtils.isNotBlank(workExperience.getBaseCode()),WorkExperience::getBaseCode, workExperience.getBaseCode())
.eq(StringUtils.isNotBlank(workExperience.getPersonId()),WorkExperience::getPersonId, workExperience.getPersonId())
.orderByDesc(WorkExperience::getCreateTime);
List<WorkExperience> workExperienceList = super.list(qw);
//返回查询结果
return workExperienceList;
}
/**
* @description: 新增工作经历
* @author: wangmenglong
* @date; 2023/12/11 16:51
* @param: [workExperience]
* @return: boolean
**/
@Override
public boolean create(WorkExperience workExperience) {
UserContext userContext = UserUtils.getUserContext();
String baseCode = userContext.getBaseCode();
workExperience.setId(snowFlakeFactory.nextId());
workExperience.setBaseCode(baseCode);
workExperience.setDel(false);
workExperience.setCreateTime(DateUtil.now());
workExperience.setPersonId(userContext.getUserId());
return super.save(workExperience);
}
/**
* @description: 编辑工作经历
* @author: wangmenglong
* @date; 2023/12/11 16:55
* @param: [workExperience]
* @return: boolean
**/
@Override
public boolean update(WorkExperience workExperience) {
workExperience.setUpdateTime(DateUtil.now());
//判断是否传入id
if(StringUtils.isBlank(workExperience.getId())){
return false;
}
return super.saveOrUpdate(workExperience);
}
/**
* @description: 删除工作经历
* @author: wangmenglong
* @date; 2023/12/11 17:06
* @param: [id]
* @return: boolean
**/
@Override
public boolean del(String id) {
if(StringUtils.isBlank(id)){
return false;
}
LambdaUpdateWrapper<WorkExperience> qw = new LambdaUpdateWrapper<>();
qw.eq(WorkExperience::getId,id)
.set(WorkExperience::getDel,true)
.set(WorkExperience::getDelTime, DateUtil.now());
return super.update(qw);
}
/**
* @author: wangmenglong
* @date; 2024/3/24 17:19
* @description: 获取工作经历详情
* @param: [id]
* @return: data.workExperience.WorkExperience
**/
@Override
public WorkExperience getDetails(String id) {
return super.getById(id);
}
/**
* @author: wangmenglong
* @date; 2024/1/2 14:30
* @description: 判断是否存在
* @param: [account, id]
* @return: boolean
**/
@Override
public boolean isHave(String getOrgName, String id) {
LambdaQueryWrapper<WorkExperience> qw = new LambdaQueryWrapper<>();
qw.eq(WorkExperience::getDel,false)
.eq(WorkExperience::getOrgName, getOrgName);
//如果传了id就是编辑,编辑的时候要加个条件,不能把名字跟别人重复
if(StringUtils.isNotBlank(id)){
qw.ne(WorkExperience::getId,id);
}
return super.count(qw)>0;
}
/**
* @description: 新增工作经历
* @author: wangmenglong
* @date; 2023/12/11 16:51
* @param: [workExperience]
* @return: boolean
**/
@Override
public boolean createAli(List<WorkExperience> workExperiences) {
LambdaUpdateWrapper<WorkExperience> qw = new LambdaUpdateWrapper<>();
qw.eq(WorkExperience::getDel,false)
.eq(WorkExperience::getPersonId, workExperiences.get(0).getPersonId())
.set(WorkExperience::getDel,true);
super.update(qw);
workExperiences.stream().forEach(workExperience -> {
workExperience.setId(snowFlakeFactory.nextId());
workExperience.setDel(false);
workExperience.setCreateTime(DateUtil.now());
});
return super.saveBatch(workExperiences);
}
}
This source diff could not be displayed because it is too large. You can view the blob instead.
package com.jxjy.system.util.auth;
import sun.misc.BASE64Encoder;
import java.io.File;
import java.io.InputStream;
import java.security.*;
import java.security.cert.Certificate;
public class ExportPrivateKey {
public InputStream keystoreFile;
public String keyStoreType;
public char[] password;
public String alias;
public File exportedFile;
public static KeyPair getPrivateKey(KeyStore keystore, String alias, char[] password) {
try {
Key key=keystore.getKey(alias,password);
if(key instanceof PrivateKey) {
Certificate cert=keystore.getCertificate(alias);
PublicKey publicKey=cert.getPublicKey();
return new KeyPair(publicKey,(PrivateKey)key);
}
} catch (UnrecoverableKeyException e) {
} catch (NoSuchAlgorithmException e) {
} catch (KeyStoreException e) {
}
return null;
}
public String export() throws Exception{
KeyStore keystore=KeyStore.getInstance(keyStoreType);
BASE64Encoder encoder=new BASE64Encoder();
keystore.load(keystoreFile,password);
KeyPair keyPair=getPrivateKey(keystore,alias,password);
PrivateKey privateKey=keyPair.getPrivate();
String encoded=encoder.encode(privateKey.getEncoded());
return encoded;
}
public static void main(String args[]) throws Exception{
ExportPrivateKey export=new ExportPrivateKey();
//export.keystoreFile=new File("/Users/Luke/Workspace/StringTest/src/com/lukejin/stringtest/keystore.jks");
export.keyStoreType="JKS";
export.password="changeit".toCharArray();
export.alias="tom_server";
//export.exportedFile=new File("luke");
export.export();
}
}
package com.jxjy.system.util.auth;
import com.jxjy.system.service.UserService;
import lombok.Getter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
/**
* @author wangmenglong
* @description: TODO
* @date 2024/1/31 16:51
*/
@Component
@Getter
public class InjectUtil {
@Autowired
private UserService userService;
@PostConstruct
public void init(){
InjectUtil.getInstance().userService = this.userService;
}
//实现单例 start
private static class SingletonHolder {
private static final InjectUtil INSTANCE = new InjectUtil();
}
private InjectUtil(){}
public static final InjectUtil getInstance() {
return SingletonHolder.INSTANCE;
}
//实现单例 end
}
package com.jxjy.system.util.auth;
import com.alibaba.fastjson.JSON;
import com.jxjy.system.bean.auth.SelfUserEntity;
import com.jxjy.system.config.auth.JWTConfig;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.core.io.ClassPathResource;
import java.io.InputStream;
import java.util.Date;
public class JWTTokenUtil {
/**
* 私有化构造器
*/
private JWTTokenUtil(){}
/**
* 生成Token
* @author wml
* @date 2020/4/4
* @param selfUserEntity
* @return
**/
public static String createAccessToken(SelfUserEntity selfUserEntity){
String provider="";
try {
ClassPathResource classPathResource = new ClassPathResource("cm-crm-jwt.jks");
InputStream inputStream =classPathResource.getInputStream();
ExportPrivateKey export=new ExportPrivateKey();
export.keystoreFile=inputStream;
export.keyStoreType="JKS";
export.password= JWTConfig.secret.toCharArray();
export.alias="cm-crm-jwt";
//export.exportedFile=new File("luke");
provider=export.export();
} catch (Exception e) {
System.out.println("Token无效1");
return null;
}
// 登陆成功生成JWT
String token = Jwts.builder()
// 放入用户名和用户ID
.setId(selfUserEntity.getUserId()+"")
// 主题
.setSubject(selfUserEntity.getUsername())
// 签发时间
.setIssuedAt(new Date())
// 签发者
.setIssuer("sans")
// 自定义属性 放入用户拥有权限/派遣公司
.claim("authorities", JSON.toJSONString(selfUserEntity.getAuthorities()))
.claim("baseCode",selfUserEntity.getBaseCode())
.claim("type",selfUserEntity.getType())
.claim("name",selfUserEntity.getName())
.claim("roleId",selfUserEntity.getRoleId())
.claim("roleTag",selfUserEntity.getRoleTag())
.claim("idNo",selfUserEntity.getIdNo())
.claim("openId",selfUserEntity.getOpenId())
.claim("phone", selfUserEntity.getPhone())
.claim("superAdmin", selfUserEntity.getSuperAdmin())
// 失效时间
.setExpiration(new Date(System.currentTimeMillis() + JWTConfig.expiration))
// 签名算法和密钥
.signWith(SignatureAlgorithm.HS512, provider)
.compact();
return token;
}
}
package com.jxjy.system.util.auth;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.x509.X509V3CertificateGenerator;
import javax.security.auth.x500.X500Principal;
import java.io.FileOutputStream;
import java.math.BigInteger;
import java.security.*;
import java.security.cert.Certificate;
import java.security.cert.CertificateEncodingException;
import java.security.cert.X509Certificate;
import java.util.Date;
/**
* @author wangmenglong
* @description: 生成jks文件
* @date 2024/1/3 18:43
*/
public class JksGenerator {
public static void main(String[] args) throws Exception {
Security.addProvider(new BouncyCastleProvider());
KeyStore keyStore = KeyStore.getInstance("JKS");
keyStore.load(null, null);
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
X509Certificate cert = generateCertificate(keyPair);
keyStore.setKeyEntry("cm-crm-jwt", keyPair.getPrivate(), "cm-crm@junying".toCharArray(), new Certificate[]{cert});
FileOutputStream fos = new FileOutputStream("cm-crm-jwt.jks");
keyStore.store(fos, "cm-crm@junying".toCharArray());
fos.close();
}
private static X509Certificate generateCertificate(KeyPair keyPair) throws CertificateEncodingException, NoSuchAlgorithmException, SignatureException, NoSuchProviderException, InvalidKeyException {
// 创建证书生成器
X509V3CertificateGenerator certGenerator = new X509V3CertificateGenerator();
// 设置证书的基本信息
certGenerator.setSerialNumber(BigInteger.valueOf(System.currentTimeMillis()));
certGenerator.setSubjectDN(new X500Principal("CN=Test Certificate"));
certGenerator.setIssuerDN(new X500Principal("CN=Test CA Certificate"));
certGenerator.setNotBefore(new Date(System.currentTimeMillis() - 1000L * 60 * 60 * 24));
certGenerator.setNotAfter(new Date(System.currentTimeMillis() + 1000L * 60 * 60 * 24 * 365));
certGenerator.setPublicKey(keyPair.getPublic());
certGenerator.setSignatureAlgorithm("SHA256WithRSAEncryption");
// 生成证书
return certGenerator.generate(keyPair.getPrivate(), "BC");
}
}
package com.jxjy.system.util.auth;
import com.alibaba.fastjson.JSON;
import javax.servlet.ServletResponse;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
public class ResultUtil {
/**
* 私有化构造器
*/
private ResultUtil(){}
/**
* 使用response输出JSON
* @author wml
* @date 2020-04-04
**/
public static void responseJson(ServletResponse response, Map<String, Object> resultMap){
PrintWriter out = null;
try {
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json");
out = response.getWriter();
out.println(JSON.toJSONString(resultMap));
} catch (Exception e) {
System.out.println("【JSON输出异常】"+e);
}finally{
if(out!=null){
out.flush();
out.close();
}
}
}
/**
* 返回成功示例
* @author wml
* @date 2020/4/4
* @param resultMap
* @return
**/
public static Map<String, Object> resultSuccess(Map<String, Object> resultMap){
resultMap.put("message","操作成功");
resultMap.put("code", 200);
return resultMap;
}
/**
* 返回失败示例
* @author wml
* @date 2020/4/4
* @param resultMap
* @return
**/
public static Map<String, Object> resultError(Map<String, Object> resultMap){
resultMap.put("message","操作失败");
resultMap.put("code",500);
return resultMap;
}
/**
* 通用示例
* @author wml
* @date 2020/4/4
* @param code
* @param msg
* @return
**/
public static Map<String, Object> resultCode(Integer code,String msg){
Map<String, Object> resultMap = new HashMap<>();
resultMap.put("message",msg);
resultMap.put("code",code);
return resultMap;
}
}
package com.jxjy.system.util.auth;
import com.alibaba.fastjson.JSONObject;
import com.jxjy.system.bean.auth.SelfUserEntity;
import com.jxjy.system.bean.auth.UserContext;
import org.springframework.security.core.context.SecurityContextHolder;
/**
* @Author zhangziyuan
* @Description
* @Date 2021/7/16
**/
public class UserUtils {
public static JSONObject getCurrentUser(){
SelfUserEntity principal = (SelfUserEntity) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
JSONObject jsonObject = new JSONObject();
jsonObject.put("username",principal.getUsername());
jsonObject.put("userid",principal.getUserId());
jsonObject.put("baseCode",principal.getBaseCode());
jsonObject.put("type",principal.getAuthorities().toArray()[0].toString().split("_")[1]);
return jsonObject;
}
/**
* 获取登录用户上下文
*
* @return
*/
public static UserContext getUserContext() {
SelfUserEntity principal = (SelfUserEntity) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
UserContext userContext = new UserContext();
userContext.setUserId(principal.getUserId());
userContext.setAccount(principal.getUsername());
userContext.setBaseCode(principal.getBaseCode());
userContext.setType(principal.getType());
userContext.setRoleId(principal.getRoleId());
userContext.setIdNo(principal.getIdNo());
userContext.setUsername(principal.getName());
userContext.setRoleTag(principal.getRoleTag());
userContext.setPhone(principal.getPhone());
userContext.setOpenId(principal.getOpenId());
userContext.setSuperAdmin(principal.getSuperAdmin());
return userContext;
}
/**
* 获取登录用户上下文
* @return
*/
public static SelfUserEntity getSelfUserEntity() {
SelfUserEntity principal = (SelfUserEntity) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
return principal;
}
}
package com.jxjy.system.util.httpUtil;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.Map;
/**
* @ClassName : HttpUtils
* @Description :
* @Author : wml
* @Date: 2025-05-06 12:52
*/
public class HttpUtils {
/**
* 发送 GET 请求
* @param url 请求地址
* @param headers 请求头 (key-value形式)
* @return 响应内容
* @throws IOException
*/
public static String get(String url, Map<String, String> headers) throws IOException {
HttpURLConnection connection = null;
BufferedReader reader = null;
try {
// 创建连接
URL requestUrl = new URL(url);
connection = (HttpURLConnection) requestUrl.openConnection();
connection.setRequestMethod("GET");
// 设置请求头
if (headers != null) {
for (Map.Entry<String, String> entry : headers.entrySet()) {
connection.setRequestProperty(entry.getKey(), entry.getValue());
}
}
// 获取响应
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
reader = new BufferedReader(
new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8));
StringBuilder response = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
response.append(line);
}
return response.toString();
} else {
throw new IOException("GET request failed with response code: " + responseCode);
}
} finally {
// 关闭资源
if (reader != null) {
reader.close();
}
if (connection != null) {
connection.disconnect();
}
}
}
/**
* 发送 POST 请求
* @param url 请求地址
* @param headers 请求头 (key-value形式)
* @param body 请求体内容
* @return 响应内容
* @throws IOException
*/
public static String post(String url, Map<String, String> headers, String body) throws IOException {
HttpURLConnection connection = null;
BufferedReader reader = null;
OutputStream outputStream = null;
try {
// 创建连接
URL requestUrl = new URL(url);
connection = (HttpURLConnection) requestUrl.openConnection();
connection.setRequestMethod("POST");
connection.setDoOutput(true);
// 设置请求头
if (headers != null) {
for (Map.Entry<String, String> entry : headers.entrySet()) {
connection.setRequestProperty(entry.getKey(), entry.getValue());
}
}
// 发送请求体
if (body != null && !body.isEmpty()) {
outputStream = connection.getOutputStream();
outputStream.write(body.getBytes(StandardCharsets.UTF_8));
outputStream.flush();
}
// 获取响应
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK ||
responseCode == HttpURLConnection.HTTP_CREATED) {
reader = new BufferedReader(
new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8));
StringBuilder response = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
response.append(line);
}
return response.toString();
} else {
throw new IOException("POST request failed with response code: " + responseCode);
}
} finally {
// 关闭资源
if (outputStream != null) {
outputStream.close();
}
if (reader != null) {
reader.close();
}
if (connection != null) {
connection.disconnect();
}
}
}
}
package com.jxjy.system.util.weixin;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONObject;
import org.springframework.data.redis.core.StringRedisTemplate;
import redis.RedisKey;
import java.util.HashMap;
import java.util.concurrent.TimeUnit;
/**
* 发送消息模块
* @Author : wml
* @Date: 2024-01-09 17:33
*/
public class TencentMessageUtil {
/**
* 获取微信token
* @return: base.result.BaseResult
* @Author: wml
* @Date 2023/12/13 16:05
*/
public static String getToken(StringRedisTemplate stringRedisTemplate,String appId,String appSecret){
if(stringRedisTemplate.hasKey(RedisKey.WX_MESSAGE_TOKEN+":"+appId)){
return stringRedisTemplate.opsForValue().get(RedisKey.WX_MESSAGE_TOKEN+":"+appId);
}
HashMap<String, Object> requestParam = new HashMap<>();
// appId
requestParam.put("appid", appId);
// 唯一凭证id appid:(换成自己的)
requestParam.put("secret", appSecret);
requestParam.put("grant_type", "client_credential");
// 发送GET请求读取调用微信接口获取openid用户唯一标识
String result = HttpUtil.get(WxApi.MESSAGE_ACCESS_TOKEN, requestParam);
cn.hutool.json.JSONObject jsonObject = JSONUtil.parseObj(result);
stringRedisTemplate.opsForValue().set(RedisKey.WX_MESSAGE_TOKEN+":"+appId,jsonObject.getStr("access_token"));
stringRedisTemplate.expire(RedisKey.WX_MESSAGE_TOKEN+":"+appId,6500, TimeUnit.SECONDS);
return jsonObject.getStr("access_token");
}
/**
* 发送微信消息
* @return:
* @Author: wml
* @Date 2024/5/22 9:39
*/
public static JSONObject send(StringRedisTemplate stringRedisTemplate,String appId,String appSecret,String templateId,String page,String messageMiniprogram,String openId,JSONObject json){
System.out.println("---------------------------微信消息发送--------------------------------");
JSONObject body=new JSONObject();
body.put("touser",openId);
body.put("template_id",templateId);
body.put("page",page);
body.put("miniprogram_state",messageMiniprogram);
body.put("lang","zh_CN");
/*JSONObject json=new JSONObject();
json.put("thing6",JSONObject.parseObject("{'value':'未读消息提醒'}"));
json.put("thing2",JSONObject.parseObject("{'value':'"+data.getString("content")+"'}"));
json.put("time9",JSONObject.parseObject("{'value':'"+data.getString("createTime")+"'}"));
json.put("thing5",JSONObject.parseObject("{'value':'点击查看详情'}"));*/
body.put("data",json);
//发送
String accessToken= getToken(stringRedisTemplate,appId,appSecret);
System.out.println(body.toJSONString());
String post = HttpUtil.post(WxApi.MESSAGE_SEND + accessToken, body.toJSONString());
JSONObject jsonObject = JSONObject.parseObject(post);
System.out.println(jsonObject.toJSONString());
return jsonObject;
}
public static void addMessageNumber(StringRedisTemplate stringRedisTemplate,String templateId, String openId,int number) {
//如果有key直接操作+-
if(!stringRedisTemplate.opsForHash().hasKey(RedisKey.TENCENT_MESSAGE_NUMBER,openId+"_"+templateId)){
stringRedisTemplate.opsForHash().increment(RedisKey.TENCENT_MESSAGE_NUMBER,openId+"_"+templateId,0);
}
//操作数量
stringRedisTemplate.opsForHash().increment(RedisKey.TENCENT_MESSAGE_NUMBER,openId+"_"+templateId,number);
//小于0就等于0
if(stringRedisTemplate.opsForHash().hasKey(RedisKey.TENCENT_MESSAGE_NUMBER,openId+"_"+templateId)&&
Integer.parseInt(
stringRedisTemplate.opsForHash().get(RedisKey.TENCENT_MESSAGE_NUMBER,openId+"_"+templateId
).toString())+number<0){
stringRedisTemplate.opsForHash().put(RedisKey.TENCENT_MESSAGE_NUMBER,openId+"_"+templateId,"0");
}
}
/**
* 发送客服消息
* @return: com.alibaba.fastjson.JSONObject
* @Author: wml
* @Date 2024/5/22 9:39
*/
public JSONObject sendkefu(){
JSONObject body=new JSONObject();
body.put("touser","o3PCm6_qFaQmZb13EujI9T5xLI7I");
body.put("msgtype","text");
body.put("miniprogram_state","trial");
body.put("lang","zh_CN");
JSONObject json=new JSONObject();
json.put("content","工资单有更新,请及时查询");
body.put("text",json);
//发送
String accessToken= getToken(null,"","");
System.out.println(body.toJSONString());
String post = HttpUtil.post("https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=" + accessToken, body.toJSONString());
JSONObject jsonObject = JSONObject.parseObject(post);
System.out.println(jsonObject.toJSONString());
return jsonObject;
}
}
package com.jxjy.system.util.weixin;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONObject;
import org.springframework.data.redis.core.StringRedisTemplate;
import redis.RedisKey;
import java.util.HashMap;
import java.util.concurrent.TimeUnit;
/**
* 发送消息模块
* @Author : wml
* @Date: 2024-01-09 17:33
*/
public class TencentUtil {
/**
* 获取微信token
* @return: base.result.BaseResult
* @Author: wml
* @Date 2023/12/13 16:05
*/
public static String getToken(StringRedisTemplate stringRedisTemplate,String appId,String appSecret){
if(stringRedisTemplate.hasKey(RedisKey.Wx_Token+":"+appId)){
return stringRedisTemplate.opsForValue().get(RedisKey.Wx_Token+":"+appId);
}
HashMap<String, Object> requestParam = new HashMap<>();
// appId
requestParam.put("appid", appId);
// 唯一凭证id appid:(换成自己的)
requestParam.put("secret", appSecret);
requestParam.put("grant_type", "client_credential");
// 发送GET请求读取调用微信接口获取openid用户唯一标识
String result = HttpUtil.get(WxApi.MESSAGE_ACCESS_TOKEN, requestParam);
cn.hutool.json.JSONObject jsonObject = JSONUtil.parseObj(result);
stringRedisTemplate.opsForValue().set(RedisKey.Wx_Token+":"+appId,jsonObject.getStr("access_token"));
stringRedisTemplate.expire(RedisKey.Wx_Token+":"+appId,6500, TimeUnit.SECONDS);
return jsonObject.getStr("access_token");
}
/**
* 获取微信短链
* @return:
* @Author: wml
* @Date 2024/5/22 9:39
*/
public static String queryUrlLink(StringRedisTemplate stringRedisTemplate,String appId,String appSecret){
System.out.println("---------------------------微信消息发送--------------------------------");
JSONObject body=new JSONObject();
body.put("path","/pages/login/index");
//发送
String accessToken= getToken(stringRedisTemplate,appId,appSecret);
System.out.println(body.toJSONString());
String post = HttpUtil.post(WxApi.GENERATE_URLLINK + accessToken, body.toJSONString());
JSONObject jsonObject = JSONObject.parseObject(post);
System.out.println(jsonObject.toJSONString());
return jsonObject.getString("url_link");
}
}
package com.jxjy.system.util.weixin;
/**
* @author zhangsufang
* @description: 微信小程序接口
* @date 2024/1/25 14:26
*/
public class WxApi {
/**
* 获取openid
*/
public static final String OPENID = "https://api.weixin.qq.com/sns/jscode2session";
/**
* 微信获取扫码登录二维码地址
*/
public static final String LOGIN_URL = "https://open.weixin.qq.com/connect/qrconnect";
/**
* 微信开放平台获取openid
*/
public static final String ACCESS_TOKEN = "https://api.weixin.qq.com/sns/oauth2/access_token";
/**
* 发送微信消息
*/
public static final String MESSAGE_ACCESS_TOKEN = "https://api.weixin.qq.com/cgi-bin/token";
/**
* 发送微信消息
*/
public static final String MESSAGE_SEND= "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=";
/**
* 获取手机号
*/
public static final String PHONE_NUMBER= "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=";
/**
* 获取小程序短链
*/
public static final String GENERATE_URLLINK= "https://api.weixin.qq.com/wxa/generate_urllink?access_token=";
}
package com.jxjy.system.xsnowflake;
public enum BRStyle {
CO("CO", "社区模块"),
;
private final String code;
private final String info;
BRStyle(String code, String info) {
this.code = code;
this.info = info;
}
public String getCode() {
return code;
}
public String getInfo() {
return info;
}
}
package com.jxjy.system.xsnowflake;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.LockSupport;
public class SnowFlakeFactory {
/**
* 起始的时间戳
* 2020-01-01 00:00:00 毫秒
*/
private final static long START_STMP = 1577808000000L;
/**
* 每一部分占用的位数
*/
private final static long SEQUENCE_BIT = 12; //序列号占用的位数
private final static long MACHINE_BIT = 5; //机器标识占用的位数
private final static long DATACENTER_BIT = 5;//数据中心占用的位数
/**
* 每一部分的最大值
* MAX_DATACENTER_NUM = 31
* MAX_MACHINE_NUM = 31
* MAX_SEQUENCE = 4095
*/
private final static long MAX_DATACENTER_NUM = -1L ^ (-1L << DATACENTER_BIT);
private final static long MAX_MACHINE_NUM = -1L ^ (-1L << MACHINE_BIT);
private final static long MAX_SEQUENCE = -1L ^ (-1L << SEQUENCE_BIT);
/**
* 每一部分向左的位移
*/
private final static long MACHINE_LEFT = SEQUENCE_BIT;
private final static long DATACENTER_LEFT = SEQUENCE_BIT + MACHINE_BIT;
private final static long TIMESTMP_LEFT = DATACENTER_LEFT + DATACENTER_BIT;
private long datacenterId = 0; //数据中心
private long machineId = 0; //机器标识
private long sequence = 0L; //序列号
private long lastStmp = -1L;//上一次时间戳
/**
* 最大容忍时间, 单位毫秒, 即如果时钟只是回拨了该变量指定的时间, 那么等待相应的时间即可;
* 考虑到sequence服务的高性能, 这个值不易过大
*/
private static final long MAX_BACKWARD_MS = 5;
//最大扩展字段
private long maxExtension = 2L;
/**
* 保留machineId和lastTimestamp, 以及备用machineId和其对应的lastTimestamp
*/
private static Map<Long, Long> machineIdLastTimeMap = new ConcurrentHashMap<Long, Long>();
/**
* 初始化数据中心位,和机器标识
* 0 < datacenterId < MAX_DATACENTER_NUM 31
* 0 < machineId < MAX_MACHINE_NUM 31
*
* @param datacenterId
* @param machineId
*/
public SnowFlakeFactory(long datacenterId, long machineId) {
if (datacenterId > MAX_DATACENTER_NUM || datacenterId < 0) {
throw new IllegalArgumentException(" datacenterId 必须介于[0,31] ");
}
if (machineId > MAX_MACHINE_NUM || machineId < 0) {
throw new IllegalArgumentException(" machineId 必须介于[0,31] ");
}
this.datacenterId = datacenterId;
this.machineId = machineId;
//初始化时间 machineIdLastTimeMap
machineIdLastTimeMap.put(machineId, getNewstmp());
}
/**
* 产生下一个ID
*
* @return
*/
public synchronized String nextId() {
// public synchronized String nextId(BRStyle brStyle) {
//现存的扩展字段
long extension = 0L;
//获取当前时间毫秒数
long currStmp = getNewstmp();
//lastStmp = currStmp + 100;
if (currStmp < lastStmp) {
//throw new RuntimeException("时钟向后移动,拒绝生成id");
// 如果时钟回拨在可接受范围内, 等待即可
long offset = lastStmp - currStmp;
//如果回拨时间不超过5毫秒,就等待相应的时间
if (offset <= MAX_BACKWARD_MS) {
try {
//睡(lastTimestamp - currentTimestamp)ms让其追上
LockSupport.parkNanos(TimeUnit.MILLISECONDS.toNanos(offset));
currStmp = getNewstmp();
//如果时间还小于当前时间,那么利用扩展字段加1
//或者是采用抛异常并上报
if (currStmp < lastStmp) {
//扩展字段
extension += 1;
if (extension > maxExtension) {
//服务器时钟被调整了,ID生成器停止服务.
throw new RuntimeException(String.format("时钟向后移动。拒绝生成的id %d 毫秒", lastStmp - currStmp));
}
}
} catch (Exception e) {
e.printStackTrace();
}
} else {
//扩展字段
extension += 1;
if (extension > maxExtension) {
//服务器时钟被调整了,ID生成器停止服务.
throw new RuntimeException(String.format("时钟向后移动,超出扩展位,拒绝生成的id %d 毫秒", lastStmp - currStmp));
}
//获取可以用的workid,对应的时间戳,必须大于当前时间戳
tryGenerateKeyOnBackup(currStmp);
}
}
if (currStmp == lastStmp) {
//相同毫秒内,序列号自增
sequence = (sequence + 1) & MAX_SEQUENCE;
//同一毫秒的序列数已经达到最大
if (sequence == 0L) {
currStmp = getNextMill();
}
} else {
//不同毫秒内,序列号置为0
sequence = 0L;
}
lastStmp = currStmp;
long id = (currStmp - START_STMP) << (TIMESTMP_LEFT - extension) //时间戳部分
| datacenterId << DATACENTER_LEFT //数据中心部分
| machineId << MACHINE_LEFT //机器标识部分
| sequence; //序列号部分
//如果时间戳回拨就让时间少移动一位
// return brStyle.getCode() + id;
return Long.toString(id);
}
/**
* 自旋锁获取当前时间戳
*
* @return
*/
private long getNextMill() {
long mill = getNewstmp();
while (mill <= lastStmp) {
mill = getNewstmp();
}
return mill;
}
/**
* 获取当前时间毫秒数
*
* @return
*/
private long getNewstmp() {
return System.currentTimeMillis();
//测试时间回拨
//return 53501026489350000l;
}
/**
* 尝试在machineId的备份machineId上生成
* 核心优化代码在方法tryGenerateKeyOnBackup()中,BACKUP_COUNT即备份machineId数越多,
* sequence服务避免时钟回拨影响的能力越强,但是可部署的sequence服务越少,
* 设置BACKUP_COUNT为3,最多可以部署1024/(3+1)即256个sequence服务,完全够用,
* 抗时钟回拨影响的能力也得到非常大的保障。
*
* @param currentMillis 当前时间
*/
private long tryGenerateKeyOnBackup(long currentMillis) {
// 遍历所有machineId(包括备用machineId, 查看哪些machineId可用)
for (Map.Entry<Long, Long> entry : machineIdLastTimeMap.entrySet()) {
this.machineId = entry.getKey();
// 取得备用machineId的lastTime
Long tempLastTime = entry.getValue();
lastStmp = tempLastTime == null ? 0L : tempLastTime;
// 如果找到了合适的machineId,返回合适的时间,
if (lastStmp <= currentMillis) {
return lastStmp;
}
}
// 如果所有machineId以及备用machineId都处于时钟回拨, 那么抛出异常
throw new IllegalStateException("时钟在向后移动,当前时间是 " + currentMillis + " 毫秒,machineId映射 = " + machineIdLastTimeMap);
}
}
package com.jxjy.system.xsnowflake;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@ConfigurationProperties(prefix = "snowflake")
public class SnowflakeConfig {
//数据中心[0,31] 配置文件中不配置就是0
private long datacenterId;
//机器标识[0,31] 配置文件中不配置就是0
private long machineId;
@Bean
public SnowFlakeFactory getSnowFlakeFactory() {
SnowFlakeFactory snowFlakeFactory = new SnowFlakeFactory(datacenterId, machineId);
return snowFlakeFactory;
}
public long getDatacenterId() {
return datacenterId;
}
public void setDatacenterId(long datacenterId) {
this.datacenterId = datacenterId;
}
public long getMachineId() {
return machineId;
}
public void setMachineId(long machineId) {
this.machineId = machineId;
}
}
nacos:
server-addr: 192.168.0.100:8848
namespace: jy-jxjy
group: jy-jxjy-group
port: 8000
profiles:
active:
#---------------------------------------------------
management:
endpoint:
health:
probes:
enabled: true
health:
livenessstate:
enabled: true
readinessstate:
enabled: true
server:
port: ${nacos.port}
snowflake:
machine-id: 1
data-center-id: 1
spring:
profiles:
active: #必须在application上面
application:
name: jxjy-system
#毕竟各个不同的组件都是独立开发的,集成到一起后总会遇到各种惊喜。spring.main.allow-bean-definition-overriding=true就是解决bean重复定义的。设置为true时,后定义的bean会覆盖之前定义的相同名称的bean。
# main:
# allow-bean-definition-overriding: true
cloud:
nacos:
bootstrap.enabled: true
discovery:
server-addr: ${nacos.server-addr}
namespace: ${nacos.namespace}
group: ${nacos.group} #服务分组
username: nacos
password: nacos
config:
username: nacos
password: nacos
server-addr: ${nacos.server-addr}
namespace: ${nacos.namespace}
group: ${nacos.group}
file-extension: yaml
shared-configs[0]:
namespace: ${nacos.namespace}
data-id: jxjy-system-datasource-config.yaml
group: ${nacos.group}
refresh: true
shared-configs[1]:
namespace: ${nacos.namespace}
data-id: jxjy-redis-config.yaml
group: ${nacos.group}
refresh: true
log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.2.RELEASE</version>
</parent>
<groupId>com.jy.jxjy</groupId>
<artifactId>jxjy</artifactId>
<version>1.0</version>
<packaging>pom</packaging>
<properties>
<hutool-all.version>5.4.3</hutool-all.version>
<lombok.version>1.18.8</lombok.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.3.2.RELEASE</spring-boot.version>
<spring-cloud.version>Hoxton.SR8</spring-cloud.version>
<spring-cloud-alibaba.version>2.2.9.RELEASE</spring-cloud-alibaba.version>
<sys-lib.version>1.0-SNAPSHOT</sys-lib.version>
<druid.version>1.2.21</druid.version>
<fastjson.version>1.2.75</fastjson.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<jy.jxjy.lib.version>1.0</jy.jxjy.lib.version>
<log4j.version>1.2.17</log4j.version>
<easyexcel.version>2.2.10</easyexcel.version>
<mybatisplus.version>3.5.5</mybatisplus.version>
<pagehelper.version>1.3.1</pagehelper.version>
<com.google.zxing.version>3.3.0</com.google.zxing.version>
<druid.starter.version>1.2.21</druid.starter.version>
<dockerfile.version>1.4.10</dockerfile.version>
<okhttp.version>3.12.0</okhttp.version>
<thumbnailator.version>0.4.8</thumbnailator.version>
<pagehelper.version>1.3.0</pagehelper.version>
<mysql-connector.version>8.3.0</mysql-connector.version>
<protobuf.version>3.18.1</protobuf.version>
<org.apache.lang3.version>3.9</org.apache.lang3.version>
<aliyun-sdk-oss.version>3.10.2</aliyun-sdk-oss.version>
<com.tencentcloudapi.ocr.version>3.1.931</com.tencentcloudapi.ocr.version>
<com.tencentcloudapi.sms.version>3.1.893</com.tencentcloudapi.sms.version>
<cos_api.version>5.6.155</cos_api.version>
<wechatpay-apiv3.version>0.2.12</wechatpay-apiv3.version>
<tencentcloud-sdk-java.version>3.1.213</tencentcloud-sdk-java.version>
<nacos-client.version>2.0.3</nacos-client.version>
<spring-cloud-stream-binder-rocketmq.version>0.9.0.RELEASE</spring-cloud-stream-binder-rocketmq.version>
<aliyun-ocr.version>2.0.3</aliyun-ocr.version>
<spring-security-jwt.version>1.0.9.RELEASE</spring-security-jwt.version>
<jjwt.version>0.9.0</jjwt.version>
<spring-cloud-starter-bootstrap.version>3.1.3</spring-cloud-starter-bootstrap.version>
<spring-test.version>5.3.9</spring-test.version>
<facebody20191230.version>5.1.0</facebody20191230.version>
<canal-spring-boot-starter.version>1.2.1-RELEASE</canal-spring-boot-starter.version>
<sharding.version>4.1.1</sharding.version>
<cm-crm-auth.version>1.0</cm-crm-auth.version>
</properties>
<modules>
<module>jxjy-lib</module>
<module>jxjy-system</module>
</modules>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.starter.version}</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>${pagehelper.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatisplus.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>${easyexcel.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool-all.version}</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>${com.google.zxing.version}</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>${com.google.zxing.version}</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>${okhttp.version}</version>
</dependency>
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>${thumbnailator.version}</version>
</dependency>
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>${aliyun-sdk-oss.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector.version}</version>
</dependency>
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>${protobuf.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${org.apache.lang3.version}</version>
</dependency>
<dependency>
<groupId>com.tencentcloudapi</groupId>
<artifactId>tencentcloud-sdk-java-ocr</artifactId>
<version>${com.tencentcloudapi.ocr.version}</version>
</dependency>
<dependency>
<groupId>com.tencentcloudapi</groupId>
<artifactId>tencentcloud-sdk-java-sms</artifactId>
<version>${com.tencentcloudapi.sms.version}</version>
</dependency>
<dependency>
<groupId>com.qcloud</groupId>
<artifactId>cos_api</artifactId>
<version>${cos_api.version}</version>
</dependency>
<dependency>
<groupId>com.github.wechatpay-apiv3</groupId>
<artifactId>wechatpay-java</artifactId>
<version>${wechatpay-apiv3.version}</version>
</dependency>
<dependency>
<groupId>com.tencentcloudapi</groupId>
<artifactId>tencentcloud-sdk-java</artifactId>
<version>${tencentcloud-sdk-java.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>${nacos-client.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-rocketmq</artifactId>
<version>${spring-cloud-stream-binder-rocketmq.version}</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>ocr_api20210707</artifactId>
<version>${aliyun-ocr.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-jwt</artifactId>
<version>${spring-security-jwt.version}</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>${jjwt.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>${spring-cloud-starter-bootstrap.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring-test.version}</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>facebody20191230</artifactId>
<version>${facebody20191230.version}</version>
</dependency>
<dependency>
<groupId>top.javatool</groupId>
<artifactId>canal-spring-boot-starter</artifactId>
<version>${canal-spring-boot-starter.version}</version>
</dependency>
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
<version>${sharding.version}</version>
</dependency>
<dependency>
<groupId>com.jy.jxjy</groupId>
<artifactId>jxjy-lib</artifactId>
<version>${jy.jxjy.lib.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论