first commit
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
package cn.wepact.dfm.training;
|
||||
|
||||
import org.mybatis.spring.annotation.MapperScan;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.boot.builder.SpringApplicationBuilder;
|
||||
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
|
||||
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
|
||||
import org.springframework.context.annotation.ComponentScan;
|
||||
import org.springframework.scheduling.annotation.EnableAsync;
|
||||
import org.springframework.scheduling.annotation.EnableScheduling;
|
||||
|
||||
@SpringBootApplication
|
||||
@ComponentScan("cn.wepact")
|
||||
@EnableAsync
|
||||
@EnableScheduling
|
||||
@MapperScan({"cn.wepact.dfm.training.mapper"})
|
||||
//@EnableDiscoveryClient
|
||||
|
||||
public class TrainingApplication extends SpringBootServletInitializer {
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(TrainingApplication.class, args);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
|
||||
// 注意这里要指向原先用main方法执行的Application启动类
|
||||
return builder.sources(TrainingApplication.class);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package cn.wepact.dfm.training.config;
|
||||
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.web.servlet.config.annotation.CorsRegistry;
|
||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||
|
||||
@Configuration
|
||||
public class InterceptorConfigure implements WebMvcConfigurer {
|
||||
@Override
|
||||
public void addCorsMappings(CorsRegistry corsRegistry){
|
||||
/**
|
||||
* 所有请求都允许跨域,使用这种配置就不需要
|
||||
* 在interceptor中配置header了
|
||||
*/
|
||||
// corsRegistry.addMapping("/**") //接口匹配
|
||||
// .allowCredentials(true)
|
||||
// .allowedOrigins("*")
|
||||
// .allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE")
|
||||
// .allowedHeaders("*")
|
||||
// .maxAge(3600);
|
||||
// 设置允许跨域的路径
|
||||
corsRegistry.addMapping("/**")
|
||||
// 设置允许跨域请求的域名
|
||||
.allowedOrigins("*")
|
||||
// 是否允许cookie
|
||||
.allowCredentials(true)
|
||||
// 设置允许的请求方式
|
||||
.allowedMethods("GET", "POST", "DELETE", "PUT")
|
||||
// 设置允许的header属性
|
||||
.allowedHeaders("*")
|
||||
// 跨域允许时间
|
||||
.maxAge(3600);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package cn.wepact.dfm.training.config;
|
||||
|
||||
import com.github.pagehelper.PageInterceptor;
|
||||
import org.apache.ibatis.session.SqlSessionFactory;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import javax.annotation.PostConstruct;
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
import java.util.Properties;
|
||||
|
||||
/**
|
||||
* @author pcc
|
||||
* 这是分页插件PageHelper的配置信息
|
||||
* 使用PageHelper的原因是MP的分页对于多表分页查询和自定义查询的分页支持不够优秀
|
||||
*/
|
||||
@Configuration
|
||||
public class PageHelperConfig {
|
||||
|
||||
/**
|
||||
* 可能存在多个连接工厂,是允许这么注入的
|
||||
*/
|
||||
@Resource
|
||||
private List<SqlSessionFactory> sqlSessionFactoryList;
|
||||
|
||||
@PostConstruct
|
||||
public void initConfig(){
|
||||
PageInterceptor pageInterceptor = new PageInterceptor();
|
||||
Properties properties = new Properties();
|
||||
// 设置数据源方言,使用mysql
|
||||
properties.setProperty("helperDialect","mysql");
|
||||
|
||||
pageInterceptor.setProperties(properties);
|
||||
sqlSessionFactoryList.forEach(factory ->factory.getConfiguration().addInterceptor(pageInterceptor));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package cn.wepact.dfm.training.config;
|
||||
|
||||
import cn.wepact.dfm.training.utils.TokenUtil;
|
||||
import com.auth0.jwt.interfaces.Claim;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.servlet.HandlerInterceptor;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.Map;
|
||||
|
||||
@Component
|
||||
public class TokenInterceptor implements HandlerInterceptor {
|
||||
|
||||
@Override
|
||||
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
||||
String token = request.getHeader("Authorization");
|
||||
if (token != null && !token.isEmpty()) {
|
||||
Map<String, Claim> claims = TokenUtil.verifyToken(token);
|
||||
if (claims != null) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
|
||||
response.getWriter().write("Unauthorized");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
21
src/main/java/cn/wepact/dfm/training/config/WebConfig.java
Normal file
21
src/main/java/cn/wepact/dfm/training/config/WebConfig.java
Normal file
@@ -0,0 +1,21 @@
|
||||
package cn.wepact.dfm.training.config;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
|
||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||
|
||||
//@Configuration
|
||||
public class WebConfig implements WebMvcConfigurer {
|
||||
|
||||
@Autowired
|
||||
private TokenInterceptor tokenInterceptor;
|
||||
|
||||
@Override
|
||||
public void addInterceptors(InterceptorRegistry registry) {
|
||||
registry.addInterceptor(tokenInterceptor).addPathPatterns("/**")
|
||||
.excludePathPatterns("/users/login",
|
||||
"/users/getDeptList",
|
||||
"/public/**");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
package cn.wepact.dfm.training.controller;
|
||||
|
||||
import cn.wepact.dfm.training.dto.entity.TUser;
|
||||
import cn.wepact.dfm.training.utils.TokenUtil;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
|
||||
public class BaseController {
|
||||
@Resource
|
||||
HttpServletRequest request;
|
||||
|
||||
/**
|
||||
* 获取用户信息
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public TUser getUserInfo() {
|
||||
String token = request.getHeader("Authorization");
|
||||
TUser userInfo = TokenUtil.getUserInfo(token);
|
||||
return userInfo;
|
||||
}
|
||||
|
||||
public void downloadFile(String filePath, HttpServletResponse response) throws IOException {
|
||||
File file = new File(filePath);
|
||||
// 将文件转为文件输入流
|
||||
FileInputStream fileInputStream = new FileInputStream(file);
|
||||
// 获取响应的输出流
|
||||
OutputStream outputStream = response.getOutputStream();
|
||||
// 将文件转成字节数组,再将数组写入响应的输出流
|
||||
byte[] buffer = new byte[1024];
|
||||
int bytesRead = -1;
|
||||
while ((bytesRead = fileInputStream.read(buffer)) != -1) {
|
||||
outputStream.write(buffer, 0, bytesRead);
|
||||
}
|
||||
// 刷新输出流
|
||||
outputStream.flush();
|
||||
// 关闭流
|
||||
fileInputStream.close();
|
||||
outputStream.close();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,95 @@
|
||||
package cn.wepact.dfm.training.controller;
|
||||
|
||||
|
||||
import cn.wepact.dfm.common.util.GeneralRespBean;
|
||||
import cn.wepact.dfm.common.util.StringUtils;
|
||||
import cn.wepact.dfm.training.dto.PageParam;
|
||||
import cn.wepact.dfm.training.dto.UserBaseInfo;
|
||||
import cn.wepact.dfm.training.dto.entity.TEvidenceSubmission;
|
||||
import cn.wepact.dfm.training.dto.entity.TProfessionalFeedback;
|
||||
import cn.wepact.dfm.training.dto.entity.TQualificationStandards;
|
||||
import cn.wepact.dfm.training.dto.entity.TUser;
|
||||
import cn.wepact.dfm.training.service.BehaviorEvidenceService;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("behavior-evidences")
|
||||
public class BehaviorEvidenceController extends BaseController {
|
||||
@Autowired
|
||||
private BehaviorEvidenceService behaviorEvidenceService;
|
||||
|
||||
// 获取个人行为举证列表
|
||||
@RequestMapping("/getPersonalBehaviorEvidenceList")
|
||||
public GeneralRespBean<PageInfo<TEvidenceSubmission>> getPersonalBehaviorEvidenceList(@RequestBody PageParam<TEvidenceSubmission> tEvidenceSubmissionPageParam) {
|
||||
GeneralRespBean<PageInfo<TEvidenceSubmission>> respBean = new GeneralRespBean<>();
|
||||
TUser userInfo = getUserInfo();
|
||||
tEvidenceSubmissionPageParam.getCondition().setUserId(userInfo.getId());
|
||||
tEvidenceSubmissionPageParam.getCondition().setOrgCode(userInfo.getOrgCode());
|
||||
PageInfo<TEvidenceSubmission> personalBehaviorEvidenceList = behaviorEvidenceService.getPersonalBehaviorEvidenceList(tEvidenceSubmissionPageParam);
|
||||
respBean.setData(personalBehaviorEvidenceList);
|
||||
respBean.setMsg("获取个人行为举证列表成功!");
|
||||
respBean.setCode("200");
|
||||
return respBean;
|
||||
}
|
||||
|
||||
// 新增个人行为举证
|
||||
@RequestMapping("/addPersonalBehaviorEvidence")
|
||||
public GeneralRespBean<Boolean> addPersonalBehaviorEvidence(@RequestBody TEvidenceSubmission evidence) {
|
||||
GeneralRespBean<Boolean> respBean = new GeneralRespBean<>();
|
||||
TUser userInfo = getUserInfo();
|
||||
evidence.setUserId(userInfo.getId());
|
||||
evidence.setCreatedBy(userInfo.getUserNo());
|
||||
evidence.setCreatedAt(new Date());
|
||||
evidence.setUpdatedBy(userInfo.getUserNo());
|
||||
evidence.setUpdatedAt(new Date());
|
||||
Boolean result = behaviorEvidenceService.addPersonalBehaviorEvidence(evidence);
|
||||
if (result){
|
||||
respBean.setMsg("新增个人行为举证成功!");
|
||||
respBean.setCode("200");
|
||||
}else {
|
||||
respBean.setMsg("新增个人行为举证失败!");
|
||||
respBean.setCode("500");
|
||||
}
|
||||
return respBean;
|
||||
}
|
||||
|
||||
// 上传个人行为举证附件材料
|
||||
@RequestMapping("/uploadPersonalBehaviorEvidenceAttachment")
|
||||
public GeneralRespBean<String> uploadPersonalBehaviorEvidenceAttachment(@RequestParam("file") MultipartFile file) {
|
||||
GeneralRespBean<String> respBean = new GeneralRespBean<>();
|
||||
TUser userInfo = getUserInfo();
|
||||
String uploadUrl = behaviorEvidenceService.uploadPersonalBehaviorEvidenceAttachment(userInfo, file);
|
||||
if(StringUtils.isNotEmpty(uploadUrl)){
|
||||
respBean.setData(uploadUrl);
|
||||
respBean.setMsg("上传专业回馈附件材料成功!");
|
||||
respBean.setCode("200");
|
||||
}else {
|
||||
respBean.setMsg("上传专业回馈附件材料失败!");
|
||||
respBean.setCode("500");
|
||||
}
|
||||
return respBean;
|
||||
}
|
||||
// 下载个人行为举证材料
|
||||
@RequestMapping("/downloadPersonalBehaviorEvidenceAttachment")
|
||||
public void downloadProfessionalFeedbackAttachment(@RequestBody TEvidenceSubmission tEvidenceSubmission,
|
||||
HttpServletResponse response) throws IOException {
|
||||
TUser userInfo = getUserInfo();
|
||||
String filePath = tEvidenceSubmission.getEvidenceAttachment();
|
||||
if (StringUtils.isNotEmpty(filePath)) {
|
||||
downloadFile(filePath, response);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
package cn.wepact.dfm.training.controller;
|
||||
|
||||
|
||||
import cn.wepact.dfm.common.util.GeneralRespBean;
|
||||
import cn.wepact.dfm.training.dto.entity.TDictionary;
|
||||
import cn.wepact.dfm.training.dto.entity.TEvidenceSubmission;
|
||||
import cn.wepact.dfm.training.dto.entity.TUser;
|
||||
import cn.wepact.dfm.training.service.BehaviorEvidenceService;
|
||||
import cn.wepact.dfm.training.service.DictionaryService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("dictionary")
|
||||
public class DictionaryController extends BaseController {
|
||||
@Autowired
|
||||
private DictionaryService dictionaryService;
|
||||
|
||||
// 获取个人行为举证列表
|
||||
@RequestMapping("/getDictionary")
|
||||
public GeneralRespBean<List<TDictionary>> getDictionary(@RequestBody TDictionary tDictionary) {
|
||||
GeneralRespBean<List<TDictionary>> respBean = new GeneralRespBean<>();
|
||||
TUser userInfo = getUserInfo();
|
||||
tDictionary.setOrgCode(userInfo.getOrgCode());
|
||||
List<TDictionary> result = dictionaryService.getDictionaryList(tDictionary);
|
||||
if(!CollectionUtils.isEmpty(result)){
|
||||
respBean.setData(result);
|
||||
respBean.setMsg("获取字典列表成功!");
|
||||
respBean.setCode("200");
|
||||
}else{
|
||||
respBean.setMsg("获取字典列表失败!");
|
||||
respBean.setCode("500");
|
||||
}
|
||||
return respBean;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,153 @@
|
||||
package cn.wepact.dfm.training.controller;
|
||||
|
||||
|
||||
import cn.wepact.dfm.common.util.GeneralRespBean;
|
||||
import cn.wepact.dfm.common.util.StringUtils;
|
||||
import cn.wepact.dfm.training.dto.InternalInfoParam;
|
||||
import cn.wepact.dfm.training.dto.PageParam;
|
||||
import cn.wepact.dfm.training.dto.entity.TDictionary;
|
||||
import cn.wepact.dfm.training.dto.entity.TQualificationStandards;
|
||||
import cn.wepact.dfm.training.dto.entity.TUser;
|
||||
import cn.wepact.dfm.training.service.InternalInformationService;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("internal-informations")
|
||||
public class InternalInformationController extends BaseController {
|
||||
@Autowired
|
||||
private InternalInformationService internalInformationService;
|
||||
|
||||
// 获取信息内置列表
|
||||
@PostMapping("/getInternalInformationList")
|
||||
public GeneralRespBean<PageInfo<TQualificationStandards>> getInternalInformationList(@RequestBody PageParam<InternalInfoParam> internalInfoParam) {
|
||||
GeneralRespBean<PageInfo<TQualificationStandards>> respBean = new GeneralRespBean<>();
|
||||
PageInfo<TQualificationStandards> internalInformationList = internalInformationService.getInternalInformationList(internalInfoParam);
|
||||
respBean.setData(internalInformationList);
|
||||
respBean.setMsg("获取信息内置列表成功!");
|
||||
respBean.setCode("200");
|
||||
return respBean;
|
||||
}
|
||||
|
||||
// 获取信息内置情况(废弃)
|
||||
// @RequestMapping("/getInternalInformationSituation")
|
||||
// public void getInternalInformationSituation() {
|
||||
// internalInformationService.getInternalInformationSituation();
|
||||
// }
|
||||
|
||||
// 岗位序列等级新增
|
||||
@RequestMapping("/addPositionSequenceLevel")
|
||||
public GeneralRespBean<Boolean> addPositionSequenceLevel(@RequestBody TQualificationStandards tQualificationStandards) {
|
||||
GeneralRespBean<Boolean> respBean = new GeneralRespBean<>();
|
||||
TUser userInfo = getUserInfo();
|
||||
Boolean result = internalInformationService.addPositionSequenceLevel(tQualificationStandards, userInfo);
|
||||
if (result){
|
||||
respBean.setMsg("岗位序列等级新增成功!");
|
||||
respBean.setCode("200");
|
||||
}else {
|
||||
respBean.setMsg("岗位序列等级新增失败!");
|
||||
respBean.setCode("500");
|
||||
}
|
||||
return respBean;
|
||||
}
|
||||
|
||||
// 岗位序列等级修改
|
||||
@RequestMapping("/modifyPositionSequenceLevel")
|
||||
public GeneralRespBean<Boolean> modifyPositionSequenceLevel(@RequestBody TQualificationStandards tQualificationStandards) {
|
||||
GeneralRespBean<Boolean> respBean = new GeneralRespBean<>();
|
||||
TUser userInfo = getUserInfo();
|
||||
Boolean result = internalInformationService.modifyPositionSequenceLevel(tQualificationStandards, userInfo);
|
||||
if (result){
|
||||
respBean.setMsg("岗位序列等级修改成功!");
|
||||
respBean.setCode("200");
|
||||
}else {
|
||||
respBean.setMsg("岗位序列等级修改失败!");
|
||||
respBean.setCode("500");
|
||||
}
|
||||
return respBean;
|
||||
}
|
||||
|
||||
// 岗位序列等级删除
|
||||
@RequestMapping("/deletePositionSequenceLevel")
|
||||
public GeneralRespBean<Boolean> deletePositionSequenceLevel(@RequestBody TQualificationStandards tQualificationStandards) {
|
||||
GeneralRespBean<Boolean> respBean = new GeneralRespBean<>();
|
||||
TUser userInfo = getUserInfo();
|
||||
Boolean result = internalInformationService.deletePositionSequenceLevel(tQualificationStandards, userInfo);
|
||||
if (result){
|
||||
respBean.setMsg("岗位序列等级删除成功!");
|
||||
respBean.setCode("200");
|
||||
}else {
|
||||
respBean.setMsg("岗位序列等级删除失败!");
|
||||
respBean.setCode("500");
|
||||
}
|
||||
return respBean;
|
||||
}
|
||||
|
||||
// 上传任职资格管理办法
|
||||
@RequestMapping("/uploadQualificationManagementMeasures")
|
||||
public GeneralRespBean<Boolean> uploadQualificationManagementMeasures(@RequestParam("file") MultipartFile file) {
|
||||
GeneralRespBean<Boolean> respBean = new GeneralRespBean<>();
|
||||
TUser userInfo = getUserInfo();
|
||||
internalInformationService.uploadQualificationManagementMeasures(userInfo, file);
|
||||
respBean.setMsg("上传任职资格管理办法成功!");
|
||||
respBean.setCode("200");
|
||||
return respBean;
|
||||
}
|
||||
|
||||
// 上传任职资格标准
|
||||
@RequestMapping("/uploadQualificationStandard/{path}")
|
||||
public GeneralRespBean<String> uploadQualificationStandard(@RequestParam("file") MultipartFile file,
|
||||
@PathVariable("path") String path) {
|
||||
GeneralRespBean<String> respBean = new GeneralRespBean<>();
|
||||
TUser userInfo = getUserInfo();
|
||||
String filePath = internalInformationService.uploadQualificationStandard(userInfo, file, path);
|
||||
respBean.setData(filePath);
|
||||
respBean.setMsg("上传任职资格标准成功!");
|
||||
respBean.setCode("200");
|
||||
return respBean;
|
||||
}
|
||||
|
||||
// 获取任职资格管理办法
|
||||
@RequestMapping("/getQualificationManagementMeasures")
|
||||
public GeneralRespBean<TDictionary> getQualificationManagementMeasures() {
|
||||
GeneralRespBean<TDictionary> respBean = new GeneralRespBean<>();
|
||||
TUser userInfo = getUserInfo();
|
||||
TDictionary qualificationManagementMeasures = internalInformationService.getQualificationManagementMeasures(userInfo);
|
||||
if (qualificationManagementMeasures != null) {
|
||||
respBean.setData(qualificationManagementMeasures);
|
||||
respBean.setMsg("获取任职资格管理办法成功!");
|
||||
respBean.setCode("200");
|
||||
}else {
|
||||
respBean.setMsg("获取任职资格管理办法失败!");
|
||||
respBean.setCode("500");
|
||||
}
|
||||
return respBean;
|
||||
}
|
||||
|
||||
// 下载任职资格管理办法
|
||||
@RequestMapping("/downloadQualificationManagementMeasures")
|
||||
public void downloadQualificationManagementMeasures(HttpServletResponse response) throws IOException {
|
||||
TUser userInfo = getUserInfo();
|
||||
TDictionary qualificationManagementMeasures = internalInformationService.getQualificationManagementMeasures(userInfo);
|
||||
if (qualificationManagementMeasures != null) {
|
||||
downloadFile(qualificationManagementMeasures.getValue(), response);
|
||||
}
|
||||
}
|
||||
|
||||
// 下载任职资格标准
|
||||
@RequestMapping("/downloadQualificationStandard")
|
||||
public void downloadQualificationStandard(@RequestBody TQualificationStandards tQualificationStandard,
|
||||
HttpServletResponse response) throws IOException {
|
||||
TUser userInfo = getUserInfo();
|
||||
String filePath = tQualificationStandard.getQualificationCriteria();
|
||||
if (StringUtils.isNotEmpty(filePath)) {
|
||||
downloadFile(filePath, response);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,415 @@
|
||||
package cn.wepact.dfm.training.controller;
|
||||
|
||||
|
||||
import cn.wepact.dfm.common.util.GeneralRespBean;
|
||||
import cn.wepact.dfm.training.dto.*;
|
||||
import cn.wepact.dfm.training.dto.entity.*;
|
||||
import cn.wepact.dfm.training.service.JobApplicationService;
|
||||
import cn.wepact.dfm.training.service.ProjectJoinService;
|
||||
import cn.wepact.dfm.training.util.HttpApiUtils;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParser;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.jboss.logging.Logger;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.text.DateFormat;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.LocalDate;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.*;
|
||||
|
||||
|
||||
@RestController
|
||||
@RequestMapping("job-applications")
|
||||
public class JobApplicationController extends BaseController{
|
||||
@Autowired
|
||||
private JobApplicationService jobApplicationService;
|
||||
|
||||
@Value("${api.employeeResume.url}")
|
||||
private String apiEmployeeResumeUrl;
|
||||
@Resource
|
||||
private HttpApiUtils httpApiUtils;
|
||||
@Autowired
|
||||
private ProjectJoinService projectJoinService;
|
||||
Logger logger = Logger.getLogger(JobApplicationController.class);
|
||||
@ApiOperation(value = "员工个人信息查询", notes = "")
|
||||
@RequestMapping(value = "/getFullEmployeeResumeInformation/{employeeNo}", method = RequestMethod.GET)
|
||||
public Map getFullEmployeeResumeInformation(@PathVariable("employeeNo") String employeeNo) {
|
||||
Map map = new HashMap<>();
|
||||
try {
|
||||
logger.info("获取员工个人信息开始");
|
||||
String url = apiEmployeeResumeUrl;
|
||||
if (httpApiUtils == null) {
|
||||
logger.error("httpApiUtils is null");
|
||||
}
|
||||
logger.info("httpApiUtils: " + httpApiUtils);
|
||||
logger.info("apiEmployeeResumeUrl: " + apiEmployeeResumeUrl);
|
||||
logger.info("employeeNo: " + employeeNo);
|
||||
String response = httpApiUtils.getRequestApi(url, employeeNo, 3);
|
||||
System.out.println("Response: " + response);
|
||||
// 解析 JSON
|
||||
JsonObject jsonObject = JsonParser.parseString(response).getAsJsonObject();
|
||||
|
||||
// 提取 token
|
||||
jsonObject = jsonObject.getAsJsonObject("data");
|
||||
|
||||
// 创建 Map
|
||||
|
||||
|
||||
// 将 JsonObject 转换为 Map
|
||||
for (Map.Entry<String, JsonElement> entry : jsonObject.entrySet()) {
|
||||
String key = entry.getKey();
|
||||
JsonElement valueElement = entry.getValue();
|
||||
// 将 JsonElement 转换为 Object
|
||||
Object value = valueElement.isJsonPrimitive() ? valueElement.getAsString() : valueElement;
|
||||
map.put(key, value);
|
||||
}
|
||||
|
||||
// 打印结果
|
||||
System.out.println("转换后的 Map: " + map);
|
||||
logger.info("获取员工个人信息结束");
|
||||
// respBean.setCode(Constant.SUCCESS_CODE);
|
||||
// respBean.setMsg(Constant.SUCCESS_MSG);
|
||||
// respBean.setData(map);
|
||||
// 解析 JSON
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
// 任职申请基本信息查询
|
||||
@RequestMapping("/queryBasicInformation")
|
||||
public GeneralRespBean<UserBaseInfo> queryBasicInformation() {
|
||||
GeneralRespBean<UserBaseInfo> respBean = new GeneralRespBean<>();
|
||||
TUser userInfo = getUserInfo();
|
||||
// //TODO 从ehr中拿到的数据转化为UserBaseInfo, userInfo.getUserNo() 为员工编号
|
||||
// //获取到ehr信息
|
||||
Map fullEmployeeResumeInformationMap = this.getFullEmployeeResumeInformation(userInfo.getUserNo());
|
||||
// //TODO 将ehr信息转化为UserBaseInfo, map -> UserBaseInfo实体
|
||||
Object name = fullEmployeeResumeInformationMap.get("name");
|
||||
String nameStr = (name != null) ? name.toString() : null; // 转换为字符串,如果为null则返回null
|
||||
Object departName = fullEmployeeResumeInformationMap.get("departName");
|
||||
String departNameStr = (departName != null) ? departName.toString() : null; // 转换为字符串,如果为null则返回null
|
||||
Object duty = fullEmployeeResumeInformationMap.get("duty");
|
||||
String dutyStr = (duty!= null) ? duty.toString() : null; // 转换为字符串,如果为null则返回null
|
||||
Object highEduName = fullEmployeeResumeInformationMap.get("highEduName");
|
||||
String highEduNameStr = (highEduName!= null) ? highEduName.toString() : null; // 转换为字符串,如果为null则返回null
|
||||
Object major = fullEmployeeResumeInformationMap.get("major");
|
||||
String majorStr = (major!= null) ? major.toString() : null; // 转换为字符串,如果为null则返回null
|
||||
Object workDate = fullEmployeeResumeInformationMap.get("workDate");
|
||||
String workDateStr = (workDate!= null) ? workDate.toString() : null; // 转换为字符串,如果为null则返回null
|
||||
Object orgDate = fullEmployeeResumeInformationMap.get("orgDate");
|
||||
String orgDateStr = (orgDate!= null) ? orgDate.toString() : null; // 转换为字符串,如果为null则返回null
|
||||
Object performanceInRecentTwoYears = fullEmployeeResumeInformationMap.get("performanceInRecentTwoYears");
|
||||
String performanceInRecentTwoYearsStr = (performanceInRecentTwoYears!= null) ? performanceInRecentTwoYears.toString() : null; // 转换为字符串,如果为null则返回null
|
||||
|
||||
UserBaseInfo userBaseInfo = UserBaseInfo.builder().userName(nameStr)
|
||||
.curDepartment(departNameStr).curPosition(dutyStr)
|
||||
// .curDeptTime("ehr找不到")
|
||||
.highestDegree(highEduNameStr).major(majorStr).startWorkTime(workDateStr)
|
||||
.joinTime(orgDateStr).performance(performanceInRecentTwoYearsStr).build();
|
||||
|
||||
//获取近两年的任职资格情况
|
||||
AppliedParam appliedParam = new AppliedParam();
|
||||
appliedParam.setUserId(userInfo.getId());
|
||||
appliedParam.setOrgCode(userInfo.getOrgCode());
|
||||
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
|
||||
List<TQualificationReview> passedQualificationList = jobApplicationService.getPassedQualificationList(appliedParam);
|
||||
for (TQualificationReview tQualificationReview : passedQualificationList) {
|
||||
userBaseInfo.getSequenceLevel().add(SequenceLevel.builder()
|
||||
.sequence(tQualificationReview.getPositionName())
|
||||
.level(tQualificationReview.getQualificationLevel())
|
||||
.startTime(df.format(tQualificationReview.getReviewTime()))
|
||||
.endTime(df.format(tQualificationReview.getReviewEndTime()))
|
||||
.status(tQualificationReview.getStatus())
|
||||
.validTime(tQualificationReview.getValidTime()).build());
|
||||
}
|
||||
// 动态插入工作经历
|
||||
for (int i = 0; i <Integer.parseInt(fullEmployeeResumeInformationMap.get("employeeExperiencesListNumber").toString()); i++) { // 假设你知道最多有10条经历
|
||||
String startDate = fullEmployeeResumeInformationMap.get("Estart" + i).toString();
|
||||
String endDate = fullEmployeeResumeInformationMap.get("Eend" + i).toString();
|
||||
String orgName = fullEmployeeResumeInformationMap.get("unit" + i).toString();
|
||||
String positionName = fullEmployeeResumeInformationMap.get("Epos" + i).toString();
|
||||
|
||||
// 检查是否有对应的工作经历信息
|
||||
if (startDate != null || endDate != null || orgName != null || positionName != null) {
|
||||
userBaseInfo.getExperience().add(
|
||||
Experience.builder()
|
||||
.startDate(startDate != null ? startDate : "-") // 可以根据需求处理null情况
|
||||
.endDate(endDate != null ? endDate : "-")
|
||||
.orgName(orgName != null ? orgName : "-")
|
||||
.positionName(positionName != null ? positionName : "-")
|
||||
.build()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (fullEmployeeResumeInformationMap != null) {
|
||||
// 确保 PerformanceList 被初始化
|
||||
if (userBaseInfo.getPerformanceList() == null) {
|
||||
userBaseInfo.setPerformanceList(new ArrayList<>());
|
||||
}
|
||||
|
||||
for (int i = 0; i < 2; i++) {
|
||||
// 获取绩效信息,如果为 null 则设置为空值
|
||||
String performanceYear = null;
|
||||
String performanceSelf = null;
|
||||
|
||||
if (fullEmployeeResumeInformationMap.get("performanceYear" + i) != null) {
|
||||
performanceYear = fullEmployeeResumeInformationMap.get("performanceYear" + i).toString();
|
||||
}
|
||||
|
||||
if (fullEmployeeResumeInformationMap.get("performanceSelf" + i) != null) {
|
||||
performanceSelf = fullEmployeeResumeInformationMap.get("performanceSelf" + i).toString();
|
||||
}
|
||||
|
||||
// 检查是否有对应的绩效信息
|
||||
if (performanceYear != null || performanceSelf != null) {
|
||||
userBaseInfo.getPerformanceList().add(
|
||||
Performance.builder()
|
||||
.performanceYear(performanceYear != null ? performanceYear : "-") // 如果为空,使用默认值 "-"
|
||||
.performanceSelf(performanceSelf != null ? performanceSelf : "-")
|
||||
.build()
|
||||
);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// 处理 fullEmployeeResumeInformationMap 为 null 的情况
|
||||
// log.error("fullEmployeeResumeInformationMap is null");
|
||||
}
|
||||
|
||||
respBean.setData(userBaseInfo);
|
||||
respBean.setMsg("获取任职申请基本信息成功!");
|
||||
respBean.setCode("200");
|
||||
return respBean;
|
||||
}
|
||||
|
||||
// 任职资格序列列表
|
||||
@GetMapping("/getQualificationSequenceList")
|
||||
public GeneralRespBean<List<TQualificationStandards>> getQualificationSequenceList(String orgCode) {
|
||||
GeneralRespBean<List<TQualificationStandards>> respBean = new GeneralRespBean();
|
||||
List<TQualificationStandards> tQualificationStandardsList = jobApplicationService.getQualificationSequenceList(orgCode);
|
||||
respBean.setData(tQualificationStandardsList);
|
||||
respBean.setMsg("获取任职资格序列列表成功!");
|
||||
respBean.setCode("200");
|
||||
return respBean;
|
||||
}
|
||||
|
||||
// 任职资格等级列表(废弃)
|
||||
// @RequestMapping("/getQualificationLevelList")
|
||||
// public void getQualificationLevelList() {
|
||||
// jobApplicationService.getQualificationLevelList();
|
||||
// }
|
||||
|
||||
// 任职资格课程清单列表
|
||||
// @RequestMapping("/getQualificationCourseList")
|
||||
// public void getQualificationCourseList() {
|
||||
// jobApplicationService.getQualificationCourseList();
|
||||
// }
|
||||
|
||||
// 申请规则校验情况查询,废弃
|
||||
// @RequestMapping("/queryRuleValidationStatus")
|
||||
// public void queryRuleValidationStatus() {
|
||||
// jobApplicationService.queryRuleValidationStatus();
|
||||
// }
|
||||
@RequestMapping(value = "/courseList", method = RequestMethod.POST)
|
||||
public GeneralRespBean<CourseListResponse> getCourseList(@RequestBody CourseListRequest request) {
|
||||
GeneralRespBean<CourseListResponse> respBean = new GeneralRespBean<>();
|
||||
TUser userInfo = getUserInfo();
|
||||
// 获取单位简称
|
||||
TOrg tOrg = jobApplicationService.getOrgByCode(userInfo.getOrgCode());
|
||||
String shortName = tOrg != null ? tOrg.getShortName() : "";
|
||||
|
||||
// 拼接项目名称:单位简称-项目名称
|
||||
String projectName = request.getProjectName();
|
||||
request.setProjectName(shortName + "-" + projectName);
|
||||
CourseListResponse response = projectJoinService.getCourseList(request);
|
||||
if (response != null) {
|
||||
respBean.setData(response);
|
||||
respBean.setMsg("获取课程列表成功!");
|
||||
respBean.setCode("200");
|
||||
} else {
|
||||
respBean.setMsg("获取课程列表失败!");
|
||||
respBean.setCode("500");
|
||||
}
|
||||
return respBean;
|
||||
}
|
||||
// 提交任职申请
|
||||
@RequestMapping("/submitQualificationApplication")
|
||||
public GeneralRespBean<Boolean> submitQualificationApplication(@RequestBody QualificationApplicationParam param) {
|
||||
TUser userInfo = getUserInfo();
|
||||
GeneralRespBean<Boolean> respBean = new GeneralRespBean<>();
|
||||
String result = jobApplicationService.submitQualificationApplication(param, userInfo);
|
||||
if (result.equals("申请成功")) {
|
||||
respBean.setData(true);
|
||||
respBean.setMsg("提交任职申请成功!");
|
||||
respBean.setCode("200");
|
||||
|
||||
}else {
|
||||
respBean.setData(false);
|
||||
respBean.setMsg(result);
|
||||
respBean.setCode("500");
|
||||
}
|
||||
return respBean;
|
||||
}
|
||||
|
||||
// 获取是否有学习考试进行中
|
||||
@RequestMapping("/isLearningExamInProgress")
|
||||
public GeneralRespBean<Map<String, CourseListResponse>> isLearningExamInProgress() {
|
||||
GeneralRespBean<Map<String, CourseListResponse>> respBean = new GeneralRespBean<>();
|
||||
TUser userInfo = getUserInfo();
|
||||
Map<String, CourseListResponse> learningExamInProgress = jobApplicationService.isLearningExamInProgress(userInfo);
|
||||
if (learningExamInProgress !=null){
|
||||
respBean.setData(learningExamInProgress);
|
||||
respBean.setMsg("有学习考试进行中!");
|
||||
respBean.setCode("200");
|
||||
}else {
|
||||
respBean.setData(null);
|
||||
respBean.setMsg("没有学习考试进行中!");
|
||||
respBean.setCode("500");
|
||||
}
|
||||
return respBean;
|
||||
}
|
||||
|
||||
// 获取已申报任职资格列表
|
||||
@RequestMapping("/getDeclaredQualificationList")
|
||||
public GeneralRespBean<PageInfo<TQualificationReview>> getDeclaredQualificationList(@RequestBody PageParam<AppliedParam> appliedParam ) {
|
||||
GeneralRespBean<PageInfo<TQualificationReview>> respBean = new GeneralRespBean<>();
|
||||
TUser userInfo = getUserInfo();
|
||||
if (appliedParam.getCondition() == null) {
|
||||
appliedParam.setCondition(new AppliedParam());
|
||||
}
|
||||
appliedParam.getCondition().setUserId(userInfo.getId());
|
||||
appliedParam.getCondition().setOrgCode(userInfo.getOrgCode());
|
||||
try {
|
||||
PageInfo<TQualificationReview> pageInfo = jobApplicationService.getDeclaredQualificationList(appliedParam);
|
||||
respBean.setData(pageInfo);
|
||||
respBean.setMsg("获取已申报任职资格列表成功!");
|
||||
respBean.setCode("200");
|
||||
}catch (Exception e) {
|
||||
respBean.setMsg("获取已申报任职资格列表失败!");
|
||||
respBean.setCode("500");
|
||||
}
|
||||
return respBean;
|
||||
}
|
||||
|
||||
// 获取资格审核列表
|
||||
@RequestMapping("/getQualificationAuditList")
|
||||
public GeneralRespBean<PageInfo<TQualificationReview>> getQualificationAuditList(@RequestBody PageParam<AppliedParam> appliedParam) {
|
||||
GeneralRespBean<PageInfo<TQualificationReview>> respBean = new GeneralRespBean<>();
|
||||
TUser userInfo = getUserInfo();
|
||||
if (appliedParam.getCondition() == null) {
|
||||
appliedParam.setCondition(new AppliedParam());
|
||||
}
|
||||
appliedParam.getCondition().setOrgCode(userInfo.getOrgCode());
|
||||
try {
|
||||
PageInfo<TQualificationReview> pageInfo = jobApplicationService.getQualificationAuditList(appliedParam, userInfo);
|
||||
respBean.setData(pageInfo);
|
||||
respBean.setMsg("获取已申报任职资格列表成功!");
|
||||
respBean.setCode("200");
|
||||
}catch (Exception e) {
|
||||
respBean.setMsg("获取已申报任职资格列表失败!");
|
||||
respBean.setCode("500");
|
||||
}
|
||||
return respBean;
|
||||
|
||||
}
|
||||
|
||||
// 获取资格审核详情信息(废弃)
|
||||
// @RequestMapping("/getQualificationAuditDetailInfo")
|
||||
// public void getQualificationAuditDetailInfo() {
|
||||
// jobApplicationService.getQualificationAuditDetailInfo();
|
||||
// }
|
||||
|
||||
// 资格审核通过/驳回
|
||||
@RequestMapping("/qualificationAuditStatus")
|
||||
public GeneralRespBean<Boolean> qualificationAuditStatus(@RequestBody TQualificationReview param) {
|
||||
GeneralRespBean<Boolean> respBean = new GeneralRespBean<>();
|
||||
TUser userInfo = getUserInfo();
|
||||
TQualificationReview tQualificationReview = new TQualificationReview();
|
||||
tQualificationReview.setId(param.getId());
|
||||
tQualificationReview.setStatus(param.getStatus());
|
||||
tQualificationReview.setReviewTime(new Date());
|
||||
tQualificationReview.setUpdatedBy(userInfo.getUserNo());
|
||||
tQualificationReview.setUpdatedAt(new Date());
|
||||
tQualificationReview.setOfflineScore(param.getOfflineScore());
|
||||
Boolean result = jobApplicationService.qualificationAuditStatus(tQualificationReview);
|
||||
if (result) {
|
||||
respBean.setData(true);
|
||||
respBean.setMsg("资格审核成功!");
|
||||
respBean.setCode("200");
|
||||
}else {
|
||||
respBean.setData(false);
|
||||
respBean.setMsg("资格审核失败!");
|
||||
respBean.setCode("500");
|
||||
}
|
||||
return respBean;
|
||||
}
|
||||
|
||||
|
||||
// 手动同步学习积分
|
||||
@RequestMapping("/manualSyncLearningPoints")
|
||||
public void manualSyncLearningPoints() {
|
||||
jobApplicationService.manualSyncLearningPoints();
|
||||
}
|
||||
|
||||
// private static Map<String, Object> jsonToMap(JSONObject jsonObject) {
|
||||
// Map<String, Object> map = new HashMap<>();
|
||||
// Iterator<String> keys = jsonObject.keys();
|
||||
//
|
||||
// while (keys.hasNext()) {
|
||||
// String key = keys.next();
|
||||
// Object value = jsonObject.get(key);
|
||||
// map.put(key, value);
|
||||
// }
|
||||
//
|
||||
// return map;
|
||||
// }
|
||||
|
||||
//获取绩点计算规则
|
||||
@RequestMapping("/getPerformanceRuleList")
|
||||
public GeneralRespBean<List<TPerformanceRule>> getPerformanceRuleList() {
|
||||
GeneralRespBean<List<TPerformanceRule>> respBean = new GeneralRespBean<>();
|
||||
TUser userInfo = getUserInfo();
|
||||
List<TPerformanceRule> tPerformanceRuleList = jobApplicationService.getPerformanceRuleList(userInfo.getOrgCode());
|
||||
if (CollectionUtils.isEmpty(tPerformanceRuleList)) {
|
||||
respBean.setMsg("获取绩点计算规则失败!");
|
||||
respBean.setCode("500");
|
||||
}else {
|
||||
respBean.setData(tPerformanceRuleList);
|
||||
respBean.setMsg("获取绩点计算规则成功!");
|
||||
respBean.setCode("200");
|
||||
}
|
||||
return respBean;
|
||||
}
|
||||
//获取任职申请校验规则
|
||||
@RequestMapping("/getAppCheck")
|
||||
public GeneralRespBean<TAppCheck> getAppCheck(@RequestBody TAppCheck param) {
|
||||
GeneralRespBean<TAppCheck> respBean = new GeneralRespBean<>();
|
||||
TUser tUser = getUserInfo();
|
||||
param.setOrgCode(tUser.getOrgCode());
|
||||
TAppCheck tAppCheck = jobApplicationService.getAppCheck(param);
|
||||
if (tAppCheck == null) {
|
||||
respBean.setMsg("获取任职申请校验规则失败!");
|
||||
respBean.setCode("500");
|
||||
}else {
|
||||
respBean.setData(tAppCheck);
|
||||
respBean.setMsg("获取任职申请校验规则成功!");
|
||||
respBean.setCode("200");
|
||||
}
|
||||
return respBean;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,223 @@
|
||||
package cn.wepact.dfm.training.controller;
|
||||
|
||||
|
||||
import cn.wepact.dfm.common.util.GeneralRespBean;
|
||||
import cn.wepact.dfm.common.util.StringUtils;
|
||||
import cn.wepact.dfm.training.dto.PageParam;
|
||||
import cn.wepact.dfm.training.dto.entity.TDictionary;
|
||||
import cn.wepact.dfm.training.dto.entity.TProfessionalFeedback;
|
||||
import cn.wepact.dfm.training.dto.entity.TProfessionalStdRule;
|
||||
import cn.wepact.dfm.training.dto.entity.TUser;
|
||||
import cn.wepact.dfm.training.service.ProfessionalFeedbackService;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("professional-feedbacks")
|
||||
public class ProfessionalFeedbackController extends BaseController{
|
||||
@Autowired
|
||||
private ProfessionalFeedbackService professionalFeedbackService;
|
||||
|
||||
// 获取专业回馈列表
|
||||
@PostMapping("/getProfessionalFeedbackList")
|
||||
public GeneralRespBean<PageInfo<TProfessionalFeedback>> getProfessionalFeedbackList(@RequestBody PageParam<TProfessionalFeedback> tProfessionalFeedback) {
|
||||
GeneralRespBean<PageInfo<TProfessionalFeedback>> respBean = new GeneralRespBean<>();
|
||||
TUser userInfo = getUserInfo();
|
||||
tProfessionalFeedback.getCondition().setOrgCode(userInfo.getOrgCode());
|
||||
tProfessionalFeedback.getCondition().setUserId(userInfo.getId());
|
||||
PageInfo<TProfessionalFeedback> professionalFeedbackList = professionalFeedbackService.getProfessionalFeedbackList(tProfessionalFeedback);
|
||||
respBean.setData(professionalFeedbackList);
|
||||
respBean.setMsg("获取专业回馈列表成功!");
|
||||
respBean.setCode("200");
|
||||
return respBean;
|
||||
}
|
||||
// 获取专业回馈列表,管理员
|
||||
@PostMapping("/getProfessionalFeedbackByRoleList")
|
||||
public GeneralRespBean<PageInfo<TProfessionalFeedback>> getProfessionalFeedbackByRoleList(@RequestBody PageParam<TProfessionalFeedback> tProfessionalFeedback) {
|
||||
GeneralRespBean<PageInfo<TProfessionalFeedback>> respBean = new GeneralRespBean<>();
|
||||
TUser tUser = getUserInfo();
|
||||
PageInfo<TProfessionalFeedback> professionalFeedbackList = professionalFeedbackService.getProfessionalFeedbackByRoleList(tProfessionalFeedback, tUser);
|
||||
respBean.setData(professionalFeedbackList);
|
||||
respBean.setMsg("获取专业回馈列表成功!");
|
||||
respBean.setCode("200");
|
||||
return respBean;
|
||||
}
|
||||
|
||||
// 新增专业回馈信息
|
||||
@PostMapping("/addProfessionalFeedbackInfo")
|
||||
public GeneralRespBean<Boolean> addProfessionalFeedbackInfo(@RequestBody TProfessionalFeedback tProfessionalFeedback) {
|
||||
GeneralRespBean<Boolean> respBean = new GeneralRespBean<>();
|
||||
TUser userInfo = getUserInfo();
|
||||
tProfessionalFeedback.setUserId(userInfo.getId());
|
||||
tProfessionalFeedback.setOrgCode(userInfo.getOrgCode());
|
||||
tProfessionalFeedback.setCreatedBy(userInfo.getUserNo());
|
||||
tProfessionalFeedback.setUpdatedBy(userInfo.getUserNo());
|
||||
// 专业回馈数量不让员工自行填报,默认为1
|
||||
tProfessionalFeedback.setNumber(1);
|
||||
Boolean result = professionalFeedbackService.addProfessionalFeedbackInfo(tProfessionalFeedback);
|
||||
if (result){
|
||||
respBean.setMsg("新增专业回馈信息成功!");
|
||||
respBean.setCode("200");
|
||||
}else {
|
||||
respBean.setMsg("新增专业回馈信息失败!");
|
||||
respBean.setCode("500");
|
||||
}
|
||||
return respBean;
|
||||
}
|
||||
|
||||
// 上传专业回馈附件材料
|
||||
@PostMapping("/uploadProfessionalFeedbackAttachment")
|
||||
public GeneralRespBean<String> uploadProfessionalFeedbackAttachment(@RequestParam("file") MultipartFile file) {
|
||||
GeneralRespBean<String> respBean = new GeneralRespBean<>();
|
||||
TUser userInfo = getUserInfo();
|
||||
String uploadUrl = professionalFeedbackService.uploadProfessionalFeedbackAttachment(userInfo, file);
|
||||
if(StringUtils.isNotEmpty(uploadUrl)){
|
||||
respBean.setData(uploadUrl);
|
||||
respBean.setMsg("上传专业回馈附件材料成功!");
|
||||
respBean.setCode("200");
|
||||
}else {
|
||||
respBean.setMsg("上传专业回馈附件材料失败!");
|
||||
respBean.setCode("500");
|
||||
}
|
||||
return respBean;
|
||||
}
|
||||
|
||||
// 下载任职资格管理办法
|
||||
@RequestMapping("/downloadProfessionalFeedbackAttachment")
|
||||
public void downloadProfessionalFeedbackAttachment(@RequestBody TProfessionalFeedback tProfessionalFeedback,
|
||||
HttpServletResponse response) throws IOException {
|
||||
TUser userInfo = getUserInfo();
|
||||
String filePath = tProfessionalFeedback.getProofMaterial();
|
||||
if (StringUtils.isNotEmpty(filePath)) {
|
||||
downloadFile(filePath, response);
|
||||
}
|
||||
}
|
||||
|
||||
// 获取专业回馈类别列表
|
||||
@PostMapping("/getProfessionalFeedbackCategoryList")
|
||||
public GeneralRespBean<List<TDictionary>> getProfessionalFeedbackCategoryList() {
|
||||
GeneralRespBean<List<TDictionary>> respBean = new GeneralRespBean<>();
|
||||
TUser userInfo = getUserInfo();
|
||||
List<TDictionary> professionalFeedbackCategoryList = professionalFeedbackService.getProfessionalFeedbackCategoryList(userInfo);
|
||||
respBean.setData(professionalFeedbackCategoryList);
|
||||
respBean.setMsg("获取专业回馈类别列表成功!");
|
||||
respBean.setCode("200");
|
||||
return respBean;
|
||||
}
|
||||
|
||||
// 获取专业回馈类别结构
|
||||
@PostMapping("/getProfessionalFeedbackCategoryStruct")
|
||||
public GeneralRespBean<List<TProfessionalStdRule>> getProfessionalFeedbackCategoryStruct() {
|
||||
GeneralRespBean<List<TProfessionalStdRule>> respBean = new GeneralRespBean<>();
|
||||
TUser userInfo = getUserInfo();
|
||||
List<TProfessionalStdRule> professionalFeedbackCategoryList = professionalFeedbackService.getProfessionalFeedbackCategoryStruct(userInfo);
|
||||
respBean.setData(professionalFeedbackCategoryList);
|
||||
respBean.setMsg("获取专业回馈类别列表成功!");
|
||||
respBean.setCode("200");
|
||||
return respBean;
|
||||
}
|
||||
|
||||
@PostMapping("/getProfessionalFeedbackDefineList")
|
||||
public GeneralRespBean<List<TDictionary>> getProfessionalFeedbackDefineList() {
|
||||
GeneralRespBean<List<TDictionary>> respBean = new GeneralRespBean<>();
|
||||
TUser userInfo = getUserInfo();
|
||||
List<TDictionary> data = professionalFeedbackService.getProfessionalFeedbackDefineList(userInfo);
|
||||
respBean.setData(data);
|
||||
respBean.setMsg("获取专业回馈定义列表成功!");
|
||||
respBean.setCode("200");
|
||||
return respBean;
|
||||
}
|
||||
|
||||
// 获取专业回馈单位列表
|
||||
@PostMapping("/getProfessionalFeedbackUnitList")
|
||||
public GeneralRespBean<List<TDictionary>> getProfessionalFeedbackUnitList() {
|
||||
GeneralRespBean<List<TDictionary>> respBean = new GeneralRespBean<>();
|
||||
TUser userInfo = getUserInfo();
|
||||
List<TDictionary> professionalFeedbackUnitList = professionalFeedbackService.getProfessionalFeedbackUnitList(userInfo);
|
||||
respBean.setData(professionalFeedbackUnitList);
|
||||
respBean.setMsg("获取专业回馈单位列表成功!");
|
||||
respBean.setCode("200");
|
||||
return respBean;
|
||||
}
|
||||
|
||||
// 获取专业回馈角色列表
|
||||
@PostMapping("/getProfessionalFeedbackRoleList")
|
||||
public GeneralRespBean<List<TDictionary>> getProfessionalFeedbackRoleList() {
|
||||
GeneralRespBean<List<TDictionary>> respBean = new GeneralRespBean<>();
|
||||
TUser userInfo = getUserInfo();
|
||||
List<TDictionary> professionalFeedbackRoleList = professionalFeedbackService.getProfessionalFeedbackRoleList(userInfo);
|
||||
respBean.setData(professionalFeedbackRoleList);
|
||||
respBean.setMsg("获取专业回馈角色列表成功!");
|
||||
respBean.setCode("200");
|
||||
return respBean;
|
||||
}
|
||||
|
||||
// 获取专业回馈层级列表
|
||||
@PostMapping("/getProfessionalFeedbackHierarchyList")
|
||||
public GeneralRespBean<List<TDictionary>> getProfessionalFeedbackHierarchyList() {
|
||||
GeneralRespBean<List<TDictionary>> respBean = new GeneralRespBean<>();
|
||||
TUser userInfo = getUserInfo();
|
||||
List<TDictionary> professionalFeedbackHierarchyList = professionalFeedbackService.getProfessionalFeedbackHierarchyList(userInfo);
|
||||
respBean.setData(professionalFeedbackHierarchyList);
|
||||
respBean.setMsg("获取专业回馈层级列表成功!");
|
||||
respBean.setCode("200");
|
||||
return respBean;
|
||||
}
|
||||
|
||||
// 专业回馈附件查看(废弃)
|
||||
// @PostMapping("/viewProfessionalFeedbackAttachment")
|
||||
// public void viewProfessionalFeedbackAttachment() {
|
||||
// professionalFeedbackService.viewProfessionalFeedbackAttachment();
|
||||
// }
|
||||
|
||||
// 专业回馈审核通过
|
||||
@PostMapping("/professionalFeedbackAuditApproval")
|
||||
public GeneralRespBean<Boolean> professionalFeedbackAuditApproval(@RequestBody TProfessionalFeedback tProfessionalFeedback) {
|
||||
GeneralRespBean<Boolean> respBean = new GeneralRespBean<>();
|
||||
TUser userInfo = getUserInfo();
|
||||
tProfessionalFeedback.setUpdatedBy(userInfo.getUserNo());
|
||||
tProfessionalFeedback.setAuditor(userInfo.getUsername());
|
||||
Boolean result = professionalFeedbackService.professionalFeedbackAuditApproval(tProfessionalFeedback);
|
||||
if (result){
|
||||
respBean.setMsg("专业回馈审核通过成功!");
|
||||
respBean.setCode("200");
|
||||
}else {
|
||||
respBean.setMsg("专业回馈审核通过失败!");
|
||||
respBean.setCode("500");
|
||||
}
|
||||
return respBean;
|
||||
}
|
||||
|
||||
// 专业回馈审核驳回
|
||||
@PostMapping("/professionalFeedbackAuditRejection")
|
||||
public GeneralRespBean<Boolean> professionalFeedbackAuditRejection(@RequestBody TProfessionalFeedback tProfessionalFeedback) {
|
||||
GeneralRespBean<Boolean> respBean = new GeneralRespBean<>();
|
||||
TUser userInfo = getUserInfo();
|
||||
tProfessionalFeedback.setUpdatedBy(userInfo.getUserNo());
|
||||
tProfessionalFeedback.setAuditor(userInfo.getUsername());
|
||||
Boolean result = professionalFeedbackService.professionalFeedbackAuditRejection(tProfessionalFeedback);
|
||||
if (result){
|
||||
respBean.setMsg("专业回馈审核驳回成功!");
|
||||
respBean.setCode("200");
|
||||
}else {
|
||||
respBean.setMsg("专业回馈审核驳回失败!");
|
||||
respBean.setCode("500");
|
||||
}
|
||||
return respBean;
|
||||
|
||||
}
|
||||
|
||||
|
||||
// 查看专业回馈信息(废弃)
|
||||
// @PostMapping("/viewProfessionalFeedbackInfo")
|
||||
// public void viewProfessionalFeedbackInfo() {
|
||||
// professionalFeedbackService.viewProfessionalFeedbackInfo();
|
||||
// }
|
||||
|
||||
}
|
||||
@@ -0,0 +1,132 @@
|
||||
package cn.wepact.dfm.training.controller;
|
||||
|
||||
import cn.wepact.dfm.training.dto.SyncRequest;
|
||||
import cn.wepact.dfm.training.dto.TaskScoreSummary;
|
||||
import cn.wepact.dfm.training.service.SyncTaskService;
|
||||
import cn.wepact.dfm.training.service.SyncUserInfoService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.transaction.Transactional;
|
||||
import java.util.List;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("sync")
|
||||
public class SyncController {
|
||||
|
||||
@Autowired
|
||||
private SyncTaskService taskSyncService;
|
||||
@Autowired
|
||||
private SyncUserInfoService syncUserInfoService;
|
||||
|
||||
@PostMapping("/syncTasks")
|
||||
public ResponseEntity<String> syncTasks(@RequestBody SyncRequest syncRequest) {
|
||||
|
||||
// 调用 syncTasks 方法并传入请求数据
|
||||
taskSyncService.syncTasks(syncRequest);
|
||||
|
||||
// 返回成功响应
|
||||
return ResponseEntity.ok("同步任务完成");
|
||||
}
|
||||
@PostMapping("/syncUsers")
|
||||
public ResponseEntity<String> syncUsers(@RequestBody SyncRequest syncRequest) {
|
||||
|
||||
// 调用 syncTasks 方法并传入请求数据
|
||||
syncUserInfoService.syncUserInfos(syncRequest);
|
||||
|
||||
// 返回成功响应
|
||||
return ResponseEntity.ok("同步任务完成");
|
||||
}
|
||||
|
||||
// /**
|
||||
// * 获取每个学生每个项目下必修和选修的任务汇总分数
|
||||
// * @return 汇总任务分数的响应
|
||||
// */
|
||||
// @GetMapping("/task-scores")
|
||||
// public ResponseEntity<List<TaskScoreSummary>> getTaskScores() {
|
||||
// List<TaskScoreSummary> taskScoreSummaries = taskSyncService.getTaskScoreSummary();
|
||||
// return ResponseEntity.ok(taskScoreSummaries);
|
||||
// }
|
||||
/**
|
||||
* 处理任务分数,插入或更新任职资格审核记录
|
||||
* @param taskScoreSummaries 学生任务汇总分数
|
||||
* @return 操作结果
|
||||
*/
|
||||
@PostMapping("/process-scores")
|
||||
public ResponseEntity<String> processTaskScores() {
|
||||
try {
|
||||
List<TaskScoreSummary> taskScoreSummaries = taskSyncService.getTaskScoreSummary();
|
||||
taskSyncService.processTaskScores(taskScoreSummaries);
|
||||
return ResponseEntity.ok("任务分数处理成功");
|
||||
} catch (Exception e) {
|
||||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("任务分数处理失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
// 定时任务方法:每天某个时间点执行任务
|
||||
// @Scheduled(cron = "0 0 0 * * ?") // 每天0点执行,可以根据需求修改 cron 表达式
|
||||
@Scheduled(cron = "0 */10 * * * ?") // 每5分钟执行一次
|
||||
@PostMapping("/executeTasks")
|
||||
@Transactional(rollbackOn = Exception.class)
|
||||
public void executeTasks() {
|
||||
|
||||
try {
|
||||
// 第一个任务:同步用户
|
||||
syncUsers();
|
||||
|
||||
// 第二个任务:同步任务
|
||||
syncTasks();
|
||||
|
||||
// 第三个任务:处理任务分数
|
||||
processTaskScores();
|
||||
|
||||
} catch (Exception e) {
|
||||
// 任务执行失败时的异常处理
|
||||
System.err.println("定时任务执行失败:" + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
// 同步用户信息
|
||||
|
||||
private void syncUsers() throws Exception {
|
||||
try {
|
||||
SyncRequest syncRequest = new SyncRequest();
|
||||
syncRequest.setDuration(0);
|
||||
syncRequest.setSyncType("incremental");
|
||||
syncRequest.setOffset(0);
|
||||
syncRequest.setLimit(20);
|
||||
|
||||
ResponseEntity<String> response = syncUserInfoService.syncUserInfos(syncRequest);
|
||||
if (!response.getStatusCode().equals(HttpStatus.OK)) {
|
||||
throw new Exception("同步用户失败: " + response.getBody());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
System.err.println("同步用户失败: " + e.getMessage());
|
||||
throw new Exception("同步用户执行异常: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
// 同步任务
|
||||
private void syncTasks() throws Exception {
|
||||
try {
|
||||
SyncRequest syncRequest = new SyncRequest();
|
||||
syncRequest.setDuration(0);
|
||||
syncRequest.setSyncType("incremental");
|
||||
syncRequest.setOffset(0);
|
||||
syncRequest.setLimit(20);
|
||||
ResponseEntity<String> response = taskSyncService.syncTasks(syncRequest);
|
||||
|
||||
if (!response.getStatusCode().equals(HttpStatus.OK)) {
|
||||
throw new Exception("同步任务失败: " + response.getBody());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
System.err.println("同步任务失败: " + e.getMessage());
|
||||
throw new Exception("同步任务执行异常: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,136 @@
|
||||
package cn.wepact.dfm.training.controller;
|
||||
|
||||
|
||||
import cn.hutool.captcha.CaptchaUtil;
|
||||
import cn.wepact.dfm.common.util.Constant;
|
||||
import cn.wepact.dfm.common.util.GeneralRespBean;
|
||||
import cn.wepact.dfm.common.util.StringUtils;
|
||||
import cn.wepact.dfm.training.dto.entity.TOrg;
|
||||
import cn.wepact.dfm.training.dto.entity.TUser;
|
||||
import cn.wepact.dfm.training.service.UserService;
|
||||
import cn.wepact.dfm.training.utils.EmailUtil;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.servlet.http.HttpSession;
|
||||
import java.util.List;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("users")
|
||||
public class UserController extends BaseController{
|
||||
@Autowired
|
||||
private UserService userService;
|
||||
|
||||
// 登录
|
||||
@PostMapping("/login")
|
||||
public GeneralRespBean<TUser> login(@RequestBody TUser loginRequest) {
|
||||
GeneralRespBean<TUser> respBean = new GeneralRespBean();
|
||||
TUser user = userService.loginAndGetUser(loginRequest);
|
||||
String jsonString=null;
|
||||
if (user != null) {
|
||||
respBean.setData(user);
|
||||
respBean.setMsg(Constant.SUCCESS_MSG);
|
||||
respBean.setCode(Constant.SUCCESS_CODE);
|
||||
} else {
|
||||
respBean.setData(null);
|
||||
respBean.setMsg("登录失败,账号密码错误,或单位选择有误!");
|
||||
respBean.setCode(Constant.ERROR_CODE);
|
||||
}
|
||||
|
||||
return respBean;
|
||||
}
|
||||
|
||||
// 注册
|
||||
@PostMapping("/register")
|
||||
public GeneralRespBean<String> register(@RequestBody TUser registerRequest) {
|
||||
GeneralRespBean<String> respBean = new GeneralRespBean();
|
||||
Boolean result = userService.register(registerRequest);
|
||||
|
||||
if (result) {
|
||||
respBean.setMsg(Constant.SUCCESS_MSG);
|
||||
respBean.setCode(Constant.SUCCESS_CODE);
|
||||
} else {
|
||||
respBean.setMsg("注册失败,账号已经存在!");
|
||||
respBean.setCode(Constant.ERROR_CODE);
|
||||
}
|
||||
return respBean;
|
||||
}
|
||||
|
||||
@GetMapping("/getDeptList")
|
||||
public GeneralRespBean<List<TOrg>> getDeptList() {
|
||||
GeneralRespBean<List<TOrg>> respBean = new GeneralRespBean();
|
||||
List<TOrg> tOrgList = userService.getDeptList();
|
||||
respBean.setData(tOrgList);
|
||||
respBean.setMsg(Constant.SUCCESS_MSG);
|
||||
respBean.setCode(Constant.SUCCESS_CODE);
|
||||
return respBean;
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于生成带六位数字验证码并发送邮件
|
||||
*/
|
||||
@PostMapping(value = "/captcha")
|
||||
public GeneralRespBean<Boolean> captchacode(HttpSession session) throws Exception {
|
||||
GeneralRespBean<Boolean> respBean = new GeneralRespBean<>();
|
||||
TUser user = getUserInfo();
|
||||
String randomCode = userService.generateRandomCode();
|
||||
session.setAttribute("randomCode", randomCode);
|
||||
session.setAttribute("codeTime",System.currentTimeMillis());
|
||||
//发送邮件
|
||||
EmailUtil.Email email = new EmailUtil.Email();
|
||||
email.setTo(user.getEmail());
|
||||
email.setSubject("任职资格管理系统验证码");
|
||||
email.setContent("您的验证码为:"+randomCode);
|
||||
EmailUtil.sendMail(email);
|
||||
respBean.setMsg("验证码发送成功!");
|
||||
respBean.setCode("200");
|
||||
|
||||
return respBean;
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新密码
|
||||
*/
|
||||
@PostMapping(value = "/updatePwd")
|
||||
public GeneralRespBean<Boolean> updatePwd(HttpSession session,
|
||||
@RequestBody TUser tUser) throws Exception {
|
||||
GeneralRespBean<Boolean> respBean = new GeneralRespBean<>();
|
||||
TUser user = getUserInfo();
|
||||
tUser.setUserNo(user.getUserNo());
|
||||
// 获得验证码对象
|
||||
Object cko = session.getAttribute("randomCode");
|
||||
if (cko == null) {
|
||||
return respBean.processErrorMsg("验证码已失效,请重新获取!");
|
||||
}
|
||||
String captcha = cko.toString();
|
||||
// 判断验证码输入是否正确
|
||||
if (StringUtils.isEmpty(tUser.getRandomCode()) || captcha == null || !(tUser.getRandomCode().equalsIgnoreCase(captcha))) {
|
||||
return respBean.processErrorMsg("验证码错误,请重新输入!");
|
||||
} else {
|
||||
Long codeTime = Long.valueOf(session.getAttribute("codeTime") + "");
|
||||
if ((System.currentTimeMillis() - codeTime) / 1000 / 60 > 4) {
|
||||
return respBean.processErrorMsg("验证码已失效,请重新获取!");
|
||||
}
|
||||
return userService.updatePwd(tUser);
|
||||
}
|
||||
}
|
||||
|
||||
// 取消预览
|
||||
@PostMapping("/cancelPreview")
|
||||
public GeneralRespBean<Boolean> cancelPreview() {
|
||||
GeneralRespBean<Boolean> respBean = new GeneralRespBean();
|
||||
TUser user = getUserInfo();
|
||||
Boolean result = userService.cancelPreview(user);
|
||||
respBean.setData(result);
|
||||
if (result) {
|
||||
respBean.setMsg(Constant.SUCCESS_MSG);
|
||||
respBean.setCode(Constant.SUCCESS_CODE);
|
||||
} else {
|
||||
respBean.setMsg("取消预览失败");
|
||||
respBean.setCode(Constant.ERROR_CODE);
|
||||
}
|
||||
|
||||
return respBean;
|
||||
}
|
||||
}
|
||||
23
src/main/java/cn/wepact/dfm/training/dto/AppliedParam.java
Normal file
23
src/main/java/cn/wepact/dfm/training/dto/AppliedParam.java
Normal file
@@ -0,0 +1,23 @@
|
||||
package cn.wepact.dfm.training.dto;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class AppliedParam {
|
||||
private String orgCode;
|
||||
private String positionName;
|
||||
private String level;
|
||||
private String status;
|
||||
private List<String> statusList;
|
||||
private Long userId;
|
||||
private Date reviewTime;
|
||||
private Date startTime;
|
||||
private String username;
|
||||
private String userNo;
|
||||
|
||||
private List<String> positionNameList;
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package cn.wepact.dfm.training.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class CourseListRequest {
|
||||
private String projectName; // 项目名称
|
||||
|
||||
// Getter and Setter methods
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
package cn.wepact.dfm.training.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
@Data
|
||||
public class CourseListResponse {
|
||||
private String subCode;
|
||||
private String subMsg;
|
||||
private String code;
|
||||
private String msg;
|
||||
private String requestId;
|
||||
private String projectId;
|
||||
private String projectName;
|
||||
private String projectStatusName;
|
||||
private List<Task> tasks;
|
||||
|
||||
@Data
|
||||
public static class Task {
|
||||
private String targetId;
|
||||
private String taskId;
|
||||
private String name;
|
||||
private List<Kng> kngs;
|
||||
// 新增字段
|
||||
private Integer type;
|
||||
private Integer required;
|
||||
}
|
||||
|
||||
@Data
|
||||
public static class Kng {
|
||||
private String kngTitle;
|
||||
private String kngId;
|
||||
// 新增字段
|
||||
private String kngType;
|
||||
}
|
||||
}
|
||||
59
src/main/java/cn/wepact/dfm/training/dto/Experience.java
Normal file
59
src/main/java/cn/wepact/dfm/training/dto/Experience.java
Normal file
@@ -0,0 +1,59 @@
|
||||
package cn.wepact.dfm.training.dto;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class Experience {
|
||||
private String startDate;
|
||||
private String endDate;
|
||||
private String orgName;
|
||||
private String positionName;
|
||||
|
||||
public Experience() {
|
||||
|
||||
}
|
||||
|
||||
// 使用Builder模式
|
||||
public static ExperienceBuilder builder() {
|
||||
return new ExperienceBuilder();
|
||||
}
|
||||
|
||||
public static class ExperienceBuilder {
|
||||
private String startDate;
|
||||
private String endDate;
|
||||
private String orgName;
|
||||
private String positionName;
|
||||
|
||||
public ExperienceBuilder startDate(String startDate) {
|
||||
this.startDate = startDate;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ExperienceBuilder endDate(String endDate) {
|
||||
this.endDate = endDate;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ExperienceBuilder orgName(String orgName) {
|
||||
this.orgName = orgName;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ExperienceBuilder positionName(String positionName) {
|
||||
this.positionName = positionName;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Experience build() {
|
||||
Experience experience = new Experience();
|
||||
experience.startDate = this.startDate;
|
||||
experience.endDate = this.endDate;
|
||||
experience.orgName = this.orgName;
|
||||
experience.positionName = this.positionName;
|
||||
return experience;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
package cn.wepact.dfm.training.dto;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
@Data
|
||||
public class InternalInfoParam {
|
||||
private String orgCode;
|
||||
private String positionName;
|
||||
}
|
||||
11
src/main/java/cn/wepact/dfm/training/dto/PageParam.java
Normal file
11
src/main/java/cn/wepact/dfm/training/dto/PageParam.java
Normal file
@@ -0,0 +1,11 @@
|
||||
package cn.wepact.dfm.training.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class PageParam<T> {
|
||||
private Integer pageNo;
|
||||
private Integer pageSize;
|
||||
private Integer totalCount;
|
||||
private T condition;
|
||||
}
|
||||
40
src/main/java/cn/wepact/dfm/training/dto/Performance.java
Normal file
40
src/main/java/cn/wepact/dfm/training/dto/Performance.java
Normal file
@@ -0,0 +1,40 @@
|
||||
package cn.wepact.dfm.training.dto;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class Performance {
|
||||
private String performanceYear;
|
||||
private String performanceSelf;
|
||||
public Performance() {
|
||||
// 默认构造函数
|
||||
}
|
||||
|
||||
// 使用Builder模式
|
||||
public static PerformanceBuilder builder() {
|
||||
return new PerformanceBuilder();
|
||||
}
|
||||
|
||||
public static class PerformanceBuilder {
|
||||
private String performanceYear;
|
||||
private String performanceSelf;
|
||||
|
||||
public PerformanceBuilder performanceYear(String performanceYear) {
|
||||
this.performanceYear = performanceYear;
|
||||
return this;
|
||||
}
|
||||
|
||||
public PerformanceBuilder performanceSelf(String performanceSelf) {
|
||||
this.performanceSelf = performanceSelf;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Performance build() {
|
||||
Performance performance = new Performance();
|
||||
performance.performanceYear = this.performanceYear;
|
||||
performance.performanceSelf = this.performanceSelf;
|
||||
return performance;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package cn.wepact.dfm.training.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class ProjectJoinRequest {
|
||||
private String projectId; // 项目id
|
||||
private String userInfo; // 用户名称
|
||||
private String dateStr; // 日期(YYYY-MM-DD)
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package cn.wepact.dfm.training.dto;
|
||||
|
||||
public class ProjectJoinResponse {
|
||||
private String code;
|
||||
private String msg;
|
||||
private String subCode;
|
||||
private String subMsg;
|
||||
|
||||
public ProjectJoinResponse() {}
|
||||
|
||||
public ProjectJoinResponse(String code, String msg, String subCode, String subMsg) {
|
||||
this.code = code;
|
||||
this.msg = msg;
|
||||
this.subCode = subCode;
|
||||
this.subMsg = subMsg;
|
||||
}
|
||||
|
||||
public String getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
public void setCode(String code) {
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
public String getMsg() {
|
||||
return msg;
|
||||
}
|
||||
|
||||
public void setMsg(String msg) {
|
||||
this.msg = msg;
|
||||
}
|
||||
|
||||
public String getSubCode() {
|
||||
return subCode;
|
||||
}
|
||||
|
||||
public void setSubCode(String subCode) {
|
||||
this.subCode = subCode;
|
||||
}
|
||||
|
||||
public String getSubMsg() {
|
||||
return subMsg;
|
||||
}
|
||||
|
||||
public void setSubMsg(String subMsg) {
|
||||
this.subMsg = subMsg;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package cn.wepact.dfm.training.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class QualificationApplicationParam {
|
||||
/**
|
||||
* 任职资格标准ID
|
||||
*/
|
||||
private Long qualificationStandardsId;
|
||||
|
||||
/**
|
||||
* 组织机构代码
|
||||
*/
|
||||
private String orgCode;
|
||||
|
||||
/**
|
||||
* 当前部门
|
||||
*/
|
||||
private String currentDepartment;
|
||||
|
||||
/**
|
||||
* 用户工号
|
||||
*/
|
||||
private String userNo;
|
||||
|
||||
/**
|
||||
* 项目ID
|
||||
*/
|
||||
private Long projectId;
|
||||
}
|
||||
18
src/main/java/cn/wepact/dfm/training/dto/SequenceLevel.java
Normal file
18
src/main/java/cn/wepact/dfm/training/dto/SequenceLevel.java
Normal file
@@ -0,0 +1,18 @@
|
||||
package cn.wepact.dfm.training.dto;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
public class SequenceLevel {
|
||||
private String sequence;
|
||||
private String level;
|
||||
private String startTime;
|
||||
private String endTime;
|
||||
private String status;
|
||||
private Float validTime;
|
||||
|
||||
}
|
||||
27
src/main/java/cn/wepact/dfm/training/dto/SyncRequest.java
Normal file
27
src/main/java/cn/wepact/dfm/training/dto/SyncRequest.java
Normal file
@@ -0,0 +1,27 @@
|
||||
package cn.wepact.dfm.training.dto;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
public class SyncRequest {
|
||||
private int offset;
|
||||
private int limit;
|
||||
private int duration;
|
||||
private String searchStartTime;
|
||||
private String searchEndTime;
|
||||
private String syncType; // 新增字段:同步类型(full 或 incremental)
|
||||
public SyncRequest(int offset, int limit, int duration, String searchStartTime, String searchEndTime, String syncType) {
|
||||
this.offset = offset;
|
||||
this.limit = limit;
|
||||
this.duration = duration;
|
||||
this.searchStartTime = searchStartTime;
|
||||
this.searchEndTime = searchEndTime;
|
||||
this.syncType = syncType;
|
||||
}
|
||||
|
||||
public SyncRequest() {
|
||||
|
||||
}
|
||||
}
|
||||
11
src/main/java/cn/wepact/dfm/training/dto/TaskInfo.java
Normal file
11
src/main/java/cn/wepact/dfm/training/dto/TaskInfo.java
Normal file
@@ -0,0 +1,11 @@
|
||||
package cn.wepact.dfm.training.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class TaskInfo {
|
||||
private String taskName;
|
||||
private String taskType;
|
||||
|
||||
// Getter and Setter methods
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
package cn.wepact.dfm.training.dto;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
public class TaskScoreSummary {
|
||||
|
||||
private String stuUserId; // 学生用户 ID
|
||||
private Long projectId; // 项目 ID
|
||||
private BigDecimal requiredTotalScores; // 必修任务总分
|
||||
private BigDecimal electiveTotalScores; // 选修任务总分
|
||||
|
||||
// Getters and Setters
|
||||
|
||||
public String getStuUserId() {
|
||||
return stuUserId;
|
||||
}
|
||||
|
||||
public void setStuUserId(String stuUserId) {
|
||||
this.stuUserId = stuUserId;
|
||||
}
|
||||
|
||||
public Long getProjectId() {
|
||||
return projectId;
|
||||
}
|
||||
|
||||
public void setProjectId(Long projectId) {
|
||||
this.projectId = projectId;
|
||||
}
|
||||
|
||||
public BigDecimal getRequiredTotalScores() {
|
||||
return requiredTotalScores;
|
||||
}
|
||||
|
||||
public void setRequiredTotalScores(BigDecimal requiredTotalScores) {
|
||||
this.requiredTotalScores = requiredTotalScores;
|
||||
}
|
||||
|
||||
public BigDecimal getElectiveTotalScores() {
|
||||
return electiveTotalScores;
|
||||
}
|
||||
|
||||
public void setElectiveTotalScores(BigDecimal electiveTotalScores) {
|
||||
this.electiveTotalScores = electiveTotalScores;
|
||||
}
|
||||
}
|
||||
49
src/main/java/cn/wepact/dfm/training/dto/UserBaseInfo.java
Normal file
49
src/main/java/cn/wepact/dfm/training/dto/UserBaseInfo.java
Normal file
@@ -0,0 +1,49 @@
|
||||
package cn.wepact.dfm.training.dto;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
public class UserBaseInfo {
|
||||
private String userName;
|
||||
private String curDepartment;
|
||||
private String curPosition;
|
||||
private String curDeptTime;
|
||||
private String highestDegree;
|
||||
private String major;
|
||||
private String startWorkTime;
|
||||
private String joinTime;
|
||||
private String performance;
|
||||
private String qualification;
|
||||
private List<SequenceLevel> sequenceLevel;
|
||||
private List<Experience> experience;
|
||||
private List<Performance> performanceList;
|
||||
public UserBaseInfo() {
|
||||
sequenceLevel = new ArrayList<>();
|
||||
experience = new ArrayList<>();
|
||||
performanceList = new ArrayList<>();
|
||||
}
|
||||
|
||||
public UserBaseInfo(String userName, String curDepartment, String curPosition, String curDeptTime,
|
||||
String highestDegree, String major, String startWorkTime, String joinTime,
|
||||
String performance, String qualification, List<SequenceLevel> sequenceLevel,
|
||||
List<Experience> experience, List<Performance> performanceList) {
|
||||
this.userName = userName;
|
||||
this.curDepartment = curDepartment;
|
||||
this.curPosition = curPosition;
|
||||
this.curDeptTime = curDeptTime;
|
||||
this.highestDegree = highestDegree;
|
||||
this.major = major;
|
||||
this.startWorkTime = startWorkTime;
|
||||
this.joinTime = joinTime;
|
||||
this.performance = performance;
|
||||
this.qualification = qualification;
|
||||
this.sequenceLevel = (sequenceLevel != null) ? sequenceLevel : new ArrayList<>();
|
||||
this.experience = (experience != null) ? experience : new ArrayList<>();
|
||||
this.performanceList = (performanceList != null) ? performanceList : new ArrayList<>();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
package cn.wepact.dfm.training.dto.entity;
|
||||
|
||||
public class LevelScores {
|
||||
private Long id;
|
||||
private String level;
|
||||
private int requiredScore;
|
||||
private int electiveScore;
|
||||
private String orgCode;
|
||||
|
||||
// Getters and Setters
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getLevel() {
|
||||
return level;
|
||||
}
|
||||
|
||||
public void setLevel(String level) {
|
||||
this.level = level;
|
||||
}
|
||||
|
||||
public int getRequiredScore() {
|
||||
return requiredScore;
|
||||
}
|
||||
|
||||
public void setRequiredScore(int requiredScore) {
|
||||
this.requiredScore = requiredScore;
|
||||
}
|
||||
|
||||
public int getElectiveScore() {
|
||||
return electiveScore;
|
||||
}
|
||||
|
||||
public void setElectiveScore(int electiveScore) {
|
||||
this.electiveScore = electiveScore;
|
||||
}
|
||||
|
||||
public String getUnitCode() {
|
||||
return orgCode;
|
||||
}
|
||||
|
||||
public void setUnitCode(String unitCode) {
|
||||
this.orgCode = orgCode;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
package cn.wepact.dfm.training.dto.entity;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import javax.persistence.*;
|
||||
import java.sql.Timestamp;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Entity
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Table(name = "sync_task_log")
|
||||
public class SyncTaskLog {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private Long id;
|
||||
|
||||
private Timestamp syncTime;
|
||||
private int offset;
|
||||
private int limit;
|
||||
private Timestamp searchStartTime;
|
||||
private Timestamp searchEndTime;
|
||||
private int status;
|
||||
|
||||
private Long taskId;
|
||||
private String orgId;
|
||||
private Long projectId;
|
||||
private Long mainProjectId;
|
||||
private String stuUserId;
|
||||
private String thirdUserId;
|
||||
private int formal;
|
||||
private Long periodId;
|
||||
private int resultRepeatFlag;
|
||||
private Long subResultId;
|
||||
private Long subTaskId;
|
||||
private int repeatCount;
|
||||
private Long subTaskResultId;
|
||||
private int orderIndex;
|
||||
private int taskStatus;
|
||||
private int taskRequired;
|
||||
private BigDecimal taskSchedule;
|
||||
private int taskManualCompleted;
|
||||
private Timestamp taskStartTime;
|
||||
private Timestamp taskCompletedTime;
|
||||
private int taskDuration;
|
||||
private int isRated;
|
||||
private BigDecimal taskTargetScores;
|
||||
private int taskPassed;
|
||||
private int taskIsExcellent;
|
||||
private int taskDelay;
|
||||
private int taskSignStatus;
|
||||
private int taskSignoutStatus;
|
||||
private Timestamp taskSignTime;
|
||||
private Timestamp taskSignoutTime;
|
||||
private String taskSignAddress;
|
||||
private String taskSignoutAddress;
|
||||
private String taskAnswer;
|
||||
private BigDecimal taskGetScores;
|
||||
private int taskGetPoints;
|
||||
private int taskGetStudyHours;
|
||||
private int stuDeleted;
|
||||
private int taskResultDeleted;
|
||||
private int taskHasTutor;
|
||||
private String ojtTeacherId;
|
||||
private String ojtTeacherFullname;
|
||||
private int ojtStudyStatus;
|
||||
private Timestamp ojtOutTime;
|
||||
private Timestamp ojtInTime;
|
||||
private String trCreateUserId;
|
||||
private String trUpdateUserId;
|
||||
private Timestamp trUpdateTime;
|
||||
private int taskType;
|
||||
private Timestamp trCreateTime;
|
||||
private Timestamp updateTime;
|
||||
private Timestamp dbCreateTime;
|
||||
private Timestamp dbUpdateTime;
|
||||
|
||||
@Lob
|
||||
private String responseData;
|
||||
|
||||
private String errorMessage;
|
||||
private Timestamp createdAt;
|
||||
private Timestamp updatedAt;
|
||||
|
||||
// getters and setters
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
package cn.wepact.dfm.training.dto.entity;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import javax.persistence.Lob;
|
||||
import java.util.Date;
|
||||
|
||||
@Data
|
||||
public class SyncUserInfoLog {
|
||||
private String id; // 用户ID
|
||||
private Date syncTime; // 同步时间
|
||||
private Integer offset; // 偏移量
|
||||
private Integer syncLimit; // 同步限制
|
||||
private Date searchStartTime; // 搜索开始时间
|
||||
private Date searchEndTime; // 搜索结束时间
|
||||
private Integer status; // 状态
|
||||
private String userId; // 用户唯一标识
|
||||
private String username; // 用户名
|
||||
private String fullname; // 全名
|
||||
private Integer gender; // 性别 (1: 男, 2: 女)
|
||||
private String idNo; // 身份证号
|
||||
private Date birthday; // 生日
|
||||
private String deptId; // 部门ID
|
||||
private String deptName; // 部门名称
|
||||
private String positionId; // 职位ID
|
||||
private String positionName; // 职位名称
|
||||
private String gradeId; // 等级ID
|
||||
private String gradeName; // 等级名称
|
||||
private String managerId; // 经理ID
|
||||
private String managerFullname; // 经理全名
|
||||
private String deptManagerId; // 部门经理ID
|
||||
private String deptManagerFullname; // 部门经理全名
|
||||
private String mobile; // 手机号
|
||||
private String email; // 邮箱
|
||||
private String userNo; // 用户工号
|
||||
private Date hireDate; // 入职时间
|
||||
private Date expiredTime; // 到期时间
|
||||
private String areaCode; // 区号
|
||||
private Integer userStatus; // 用户状态
|
||||
private String avatarUrl; // 头像URL
|
||||
private Integer admin; // 是否是管理员
|
||||
private Integer deleted; // 是否删除
|
||||
private String thirdUserId; // 第三方用户ID
|
||||
private Date createTime; // 创建时间
|
||||
private Date updateTime; // 更新时间
|
||||
private Integer userType; // 用户类型
|
||||
@Lob
|
||||
private String responseData;
|
||||
|
||||
private String errorMessage;
|
||||
}
|
||||
236
src/main/java/cn/wepact/dfm/training/dto/entity/TAppCheck.java
Normal file
236
src/main/java/cn/wepact/dfm/training/dto/entity/TAppCheck.java
Normal file
@@ -0,0 +1,236 @@
|
||||
package cn.wepact.dfm.training.dto.entity;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* t_app_check
|
||||
* @author
|
||||
*/
|
||||
public class TAppCheck implements Serializable {
|
||||
/**
|
||||
* 主键
|
||||
*/
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 单位编码
|
||||
*/
|
||||
private String orgCode;
|
||||
|
||||
/**
|
||||
* 学位
|
||||
*/
|
||||
private String degree;
|
||||
|
||||
/**
|
||||
* 序列等级
|
||||
*/
|
||||
private String level;
|
||||
|
||||
/**
|
||||
* 专业年限
|
||||
*/
|
||||
private Integer sYear;
|
||||
|
||||
/**
|
||||
* 上一级序列停留时间
|
||||
*/
|
||||
private Integer pYear;
|
||||
|
||||
/**
|
||||
* 绩效点数
|
||||
*/
|
||||
private Integer jx;
|
||||
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
private Date updatedAt;
|
||||
|
||||
/**
|
||||
* 更新者
|
||||
*/
|
||||
private String updatedBy;
|
||||
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
private Date createdAt;
|
||||
|
||||
/**
|
||||
* 创建者
|
||||
*/
|
||||
private String createdBy;
|
||||
|
||||
/**
|
||||
* 删除标识(0显示 1删除)
|
||||
*/
|
||||
private String delFlag;
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getOrgCode() {
|
||||
return orgCode;
|
||||
}
|
||||
|
||||
public void setOrgCode(String orgCode) {
|
||||
this.orgCode = orgCode;
|
||||
}
|
||||
|
||||
public String getDegree() {
|
||||
return degree;
|
||||
}
|
||||
|
||||
public void setDegree(String degree) {
|
||||
this.degree = degree;
|
||||
}
|
||||
|
||||
public String getLevel() {
|
||||
return level;
|
||||
}
|
||||
|
||||
public void setLevel(String level) {
|
||||
this.level = level;
|
||||
}
|
||||
|
||||
public Integer getsYear() {
|
||||
return sYear;
|
||||
}
|
||||
|
||||
public void setsYear(Integer sYear) {
|
||||
this.sYear = sYear;
|
||||
}
|
||||
|
||||
public Integer getpYear() {
|
||||
return pYear;
|
||||
}
|
||||
|
||||
public void setpYear(Integer pYear) {
|
||||
this.pYear = pYear;
|
||||
}
|
||||
|
||||
public Integer getJx() {
|
||||
return jx;
|
||||
}
|
||||
|
||||
public void setJx(Integer jx) {
|
||||
this.jx = jx;
|
||||
}
|
||||
|
||||
public Date getUpdatedAt() {
|
||||
return updatedAt;
|
||||
}
|
||||
|
||||
public void setUpdatedAt(Date updatedAt) {
|
||||
this.updatedAt = updatedAt;
|
||||
}
|
||||
|
||||
public String getUpdatedBy() {
|
||||
return updatedBy;
|
||||
}
|
||||
|
||||
public void setUpdatedBy(String updatedBy) {
|
||||
this.updatedBy = updatedBy;
|
||||
}
|
||||
|
||||
public Date getCreatedAt() {
|
||||
return createdAt;
|
||||
}
|
||||
|
||||
public void setCreatedAt(Date createdAt) {
|
||||
this.createdAt = createdAt;
|
||||
}
|
||||
|
||||
public String getCreatedBy() {
|
||||
return createdBy;
|
||||
}
|
||||
|
||||
public void setCreatedBy(String createdBy) {
|
||||
this.createdBy = createdBy;
|
||||
}
|
||||
|
||||
public String getDelFlag() {
|
||||
return delFlag;
|
||||
}
|
||||
|
||||
public void setDelFlag(String delFlag) {
|
||||
this.delFlag = delFlag;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object that) {
|
||||
if (this == that) {
|
||||
return true;
|
||||
}
|
||||
if (that == null) {
|
||||
return false;
|
||||
}
|
||||
if (getClass() != that.getClass()) {
|
||||
return false;
|
||||
}
|
||||
TAppCheck other = (TAppCheck) that;
|
||||
return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
|
||||
&& (this.getOrgCode() == null ? other.getOrgCode() == null : this.getOrgCode().equals(other.getOrgCode()))
|
||||
&& (this.getDegree() == null ? other.getDegree() == null : this.getDegree().equals(other.getDegree()))
|
||||
&& (this.getLevel() == null ? other.getLevel() == null : this.getLevel().equals(other.getLevel()))
|
||||
&& (this.getsYear() == null ? other.getsYear() == null : this.getsYear().equals(other.getsYear()))
|
||||
&& (this.getpYear() == null ? other.getpYear() == null : this.getpYear().equals(other.getpYear()))
|
||||
&& (this.getJx() == null ? other.getJx() == null : this.getJx().equals(other.getJx()))
|
||||
&& (this.getUpdatedAt() == null ? other.getUpdatedAt() == null : this.getUpdatedAt().equals(other.getUpdatedAt()))
|
||||
&& (this.getUpdatedBy() == null ? other.getUpdatedBy() == null : this.getUpdatedBy().equals(other.getUpdatedBy()))
|
||||
&& (this.getCreatedAt() == null ? other.getCreatedAt() == null : this.getCreatedAt().equals(other.getCreatedAt()))
|
||||
&& (this.getCreatedBy() == null ? other.getCreatedBy() == null : this.getCreatedBy().equals(other.getCreatedBy()))
|
||||
&& (this.getDelFlag() == null ? other.getDelFlag() == null : this.getDelFlag().equals(other.getDelFlag()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final int prime = 31;
|
||||
int result = 1;
|
||||
result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
|
||||
result = prime * result + ((getOrgCode() == null) ? 0 : getOrgCode().hashCode());
|
||||
result = prime * result + ((getDegree() == null) ? 0 : getDegree().hashCode());
|
||||
result = prime * result + ((getLevel() == null) ? 0 : getLevel().hashCode());
|
||||
result = prime * result + ((getsYear() == null) ? 0 : getsYear().hashCode());
|
||||
result = prime * result + ((getpYear() == null) ? 0 : getpYear().hashCode());
|
||||
result = prime * result + ((getJx() == null) ? 0 : getJx().hashCode());
|
||||
result = prime * result + ((getUpdatedAt() == null) ? 0 : getUpdatedAt().hashCode());
|
||||
result = prime * result + ((getUpdatedBy() == null) ? 0 : getUpdatedBy().hashCode());
|
||||
result = prime * result + ((getCreatedAt() == null) ? 0 : getCreatedAt().hashCode());
|
||||
result = prime * result + ((getCreatedBy() == null) ? 0 : getCreatedBy().hashCode());
|
||||
result = prime * result + ((getDelFlag() == null) ? 0 : getDelFlag().hashCode());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append(getClass().getSimpleName());
|
||||
sb.append(" [");
|
||||
sb.append("Hash = ").append(hashCode());
|
||||
sb.append(", id=").append(id);
|
||||
sb.append(", orgCode=").append(orgCode);
|
||||
sb.append(", degree=").append(degree);
|
||||
sb.append(", level=").append(level);
|
||||
sb.append(", sYear=").append(sYear);
|
||||
sb.append(", pYear=").append(pYear);
|
||||
sb.append(", jx=").append(jx);
|
||||
sb.append(", updatedAt=").append(updatedAt);
|
||||
sb.append(", updatedBy=").append(updatedBy);
|
||||
sb.append(", createdAt=").append(createdAt);
|
||||
sb.append(", createdBy=").append(createdBy);
|
||||
sb.append(", delFlag=").append(delFlag);
|
||||
sb.append(", serialVersionUID=").append(serialVersionUID);
|
||||
sb.append("]");
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
package cn.wepact.dfm.training.dto.entity;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* t_dictionary
|
||||
* @author
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class TDictionary{
|
||||
/**
|
||||
* 主键
|
||||
*/
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 单位id
|
||||
*/
|
||||
private String orgCode;
|
||||
|
||||
/**
|
||||
* 类型
|
||||
*/
|
||||
private String type;
|
||||
|
||||
/**
|
||||
* 代码
|
||||
*/
|
||||
private String code;
|
||||
|
||||
/**
|
||||
* 值
|
||||
*/
|
||||
private String value;
|
||||
|
||||
/**
|
||||
* 版本号
|
||||
*/
|
||||
private Integer version;
|
||||
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
private Date updatedAt;
|
||||
|
||||
/**
|
||||
* 更新者
|
||||
*/
|
||||
private String updatedBy;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
private Date createdAt;
|
||||
|
||||
/**
|
||||
* 创建者
|
||||
*/
|
||||
private String createdBy;
|
||||
|
||||
/**
|
||||
* 删除标识(0显示 1删除)
|
||||
*/
|
||||
private String delFlag;
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
package cn.wepact.dfm.training.dto.entity;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* t_evidence_submission
|
||||
* @author
|
||||
*/
|
||||
@Data
|
||||
public class TEvidenceSubmission {
|
||||
/**
|
||||
* 证据唯一标识符
|
||||
*/
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 用户id
|
||||
*/
|
||||
private Long userId;
|
||||
|
||||
/**
|
||||
* 单位id
|
||||
*/
|
||||
private String orgCode;
|
||||
|
||||
/**
|
||||
* 证据编码
|
||||
*/
|
||||
private String evidenceNo;
|
||||
|
||||
/**
|
||||
* 证据名称
|
||||
*/
|
||||
private String evidenceName;
|
||||
|
||||
/**
|
||||
* 证据证明人
|
||||
*/
|
||||
private String evidenceWitness;
|
||||
|
||||
/**
|
||||
* 证据附件路径,文件存储路径或URL
|
||||
*/
|
||||
private String evidenceAttachment;
|
||||
|
||||
/**
|
||||
* 上传日期
|
||||
*/
|
||||
private Date uploadDate;
|
||||
|
||||
/**
|
||||
* 记录创建时间
|
||||
*/
|
||||
private Date createdAt;
|
||||
|
||||
/**
|
||||
* 记录创建人姓名
|
||||
*/
|
||||
private String createdBy;
|
||||
|
||||
/**
|
||||
* 记录最后更新时间
|
||||
*/
|
||||
private Date updatedAt;
|
||||
|
||||
/**
|
||||
* 记录最后更新人姓名
|
||||
*/
|
||||
private String updatedBy;
|
||||
|
||||
/**
|
||||
* 删除标识(0显示 1删除)
|
||||
*/
|
||||
private String delFlag;
|
||||
|
||||
/**
|
||||
* 证据内容简介
|
||||
*/
|
||||
private String evidenceDescription;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remarks;
|
||||
}
|
||||
56
src/main/java/cn/wepact/dfm/training/dto/entity/TOrg.java
Normal file
56
src/main/java/cn/wepact/dfm/training/dto/entity/TOrg.java
Normal file
@@ -0,0 +1,56 @@
|
||||
package cn.wepact.dfm.training.dto.entity;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* t_org
|
||||
* @author
|
||||
*/
|
||||
@Data
|
||||
public class TOrg {
|
||||
/**
|
||||
* 主键
|
||||
*/
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 单位名
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 单位编码
|
||||
*/
|
||||
private String code;
|
||||
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
private Date updatedAt;
|
||||
|
||||
/**
|
||||
* 更新者
|
||||
*/
|
||||
private String updatedBy;
|
||||
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
private Date createdAt;
|
||||
|
||||
/**
|
||||
* 创建者
|
||||
*/
|
||||
private String createdBy;
|
||||
|
||||
/**
|
||||
* 删除标识(0显示 1删除)
|
||||
*/
|
||||
private String delFlag;
|
||||
|
||||
// 单位简称
|
||||
private String shortName;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,188 @@
|
||||
package cn.wepact.dfm.training.dto.entity;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* t_performance_rule
|
||||
* @author
|
||||
*/
|
||||
public class TPerformanceRule implements Serializable {
|
||||
/**
|
||||
* 主键
|
||||
*/
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 单位编码
|
||||
*/
|
||||
private String orgCode;
|
||||
|
||||
/**
|
||||
* 绩效
|
||||
*/
|
||||
private String jxName;
|
||||
|
||||
/**
|
||||
* 分值
|
||||
*/
|
||||
private Integer score;
|
||||
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
private Date updatedAt;
|
||||
|
||||
/**
|
||||
* 更新者
|
||||
*/
|
||||
private String updatedBy;
|
||||
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
private Date createdAt;
|
||||
|
||||
/**
|
||||
* 创建者
|
||||
*/
|
||||
private String createdBy;
|
||||
|
||||
/**
|
||||
* 删除标识(0显示 1删除)
|
||||
*/
|
||||
private String delFlag;
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getOrgCode() {
|
||||
return orgCode;
|
||||
}
|
||||
|
||||
public void setOrgCode(String orgCode) {
|
||||
this.orgCode = orgCode;
|
||||
}
|
||||
|
||||
public String getJxName() {
|
||||
return jxName;
|
||||
}
|
||||
|
||||
public void setJxName(String jxName) {
|
||||
this.jxName = jxName;
|
||||
}
|
||||
|
||||
public Integer getScore() {
|
||||
return score;
|
||||
}
|
||||
|
||||
public void setScore(Integer score) {
|
||||
this.score = score;
|
||||
}
|
||||
|
||||
public Date getUpdatedAt() {
|
||||
return updatedAt;
|
||||
}
|
||||
|
||||
public void setUpdatedAt(Date updatedAt) {
|
||||
this.updatedAt = updatedAt;
|
||||
}
|
||||
|
||||
public String getUpdatedBy() {
|
||||
return updatedBy;
|
||||
}
|
||||
|
||||
public void setUpdatedBy(String updatedBy) {
|
||||
this.updatedBy = updatedBy;
|
||||
}
|
||||
|
||||
public Date getCreatedAt() {
|
||||
return createdAt;
|
||||
}
|
||||
|
||||
public void setCreatedAt(Date createdAt) {
|
||||
this.createdAt = createdAt;
|
||||
}
|
||||
|
||||
public String getCreatedBy() {
|
||||
return createdBy;
|
||||
}
|
||||
|
||||
public void setCreatedBy(String createdBy) {
|
||||
this.createdBy = createdBy;
|
||||
}
|
||||
|
||||
public String getDelFlag() {
|
||||
return delFlag;
|
||||
}
|
||||
|
||||
public void setDelFlag(String delFlag) {
|
||||
this.delFlag = delFlag;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object that) {
|
||||
if (this == that) {
|
||||
return true;
|
||||
}
|
||||
if (that == null) {
|
||||
return false;
|
||||
}
|
||||
if (getClass() != that.getClass()) {
|
||||
return false;
|
||||
}
|
||||
TPerformanceRule other = (TPerformanceRule) that;
|
||||
return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
|
||||
&& (this.getOrgCode() == null ? other.getOrgCode() == null : this.getOrgCode().equals(other.getOrgCode()))
|
||||
&& (this.getJxName() == null ? other.getJxName() == null : this.getJxName().equals(other.getJxName()))
|
||||
&& (this.getScore() == null ? other.getScore() == null : this.getScore().equals(other.getScore()))
|
||||
&& (this.getUpdatedAt() == null ? other.getUpdatedAt() == null : this.getUpdatedAt().equals(other.getUpdatedAt()))
|
||||
&& (this.getUpdatedBy() == null ? other.getUpdatedBy() == null : this.getUpdatedBy().equals(other.getUpdatedBy()))
|
||||
&& (this.getCreatedAt() == null ? other.getCreatedAt() == null : this.getCreatedAt().equals(other.getCreatedAt()))
|
||||
&& (this.getCreatedBy() == null ? other.getCreatedBy() == null : this.getCreatedBy().equals(other.getCreatedBy()))
|
||||
&& (this.getDelFlag() == null ? other.getDelFlag() == null : this.getDelFlag().equals(other.getDelFlag()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final int prime = 31;
|
||||
int result = 1;
|
||||
result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
|
||||
result = prime * result + ((getOrgCode() == null) ? 0 : getOrgCode().hashCode());
|
||||
result = prime * result + ((getJxName() == null) ? 0 : getJxName().hashCode());
|
||||
result = prime * result + ((getScore() == null) ? 0 : getScore().hashCode());
|
||||
result = prime * result + ((getUpdatedAt() == null) ? 0 : getUpdatedAt().hashCode());
|
||||
result = prime * result + ((getUpdatedBy() == null) ? 0 : getUpdatedBy().hashCode());
|
||||
result = prime * result + ((getCreatedAt() == null) ? 0 : getCreatedAt().hashCode());
|
||||
result = prime * result + ((getCreatedBy() == null) ? 0 : getCreatedBy().hashCode());
|
||||
result = prime * result + ((getDelFlag() == null) ? 0 : getDelFlag().hashCode());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append(getClass().getSimpleName());
|
||||
sb.append(" [");
|
||||
sb.append("Hash = ").append(hashCode());
|
||||
sb.append(", id=").append(id);
|
||||
sb.append(", orgCode=").append(orgCode);
|
||||
sb.append(", jxName=").append(jxName);
|
||||
sb.append(", score=").append(score);
|
||||
sb.append(", updatedAt=").append(updatedAt);
|
||||
sb.append(", updatedBy=").append(updatedBy);
|
||||
sb.append(", createdAt=").append(createdAt);
|
||||
sb.append(", createdBy=").append(createdBy);
|
||||
sb.append(", delFlag=").append(delFlag);
|
||||
sb.append(", serialVersionUID=").append(serialVersionUID);
|
||||
sb.append("]");
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,141 @@
|
||||
package cn.wepact.dfm.training.dto.entity;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* t_professional_feedback
|
||||
* @author
|
||||
*/
|
||||
@Data
|
||||
public class TProfessionalFeedback{
|
||||
/**
|
||||
* 回馈记录唯一标识符
|
||||
*/
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 用户id
|
||||
*/
|
||||
private Long userId;
|
||||
|
||||
/**
|
||||
* 单位id
|
||||
*/
|
||||
private String orgCode;
|
||||
|
||||
/**
|
||||
* 回馈类别
|
||||
*/
|
||||
private String categoryCode;
|
||||
|
||||
/**
|
||||
* 定义
|
||||
*/
|
||||
private String defineCode;
|
||||
|
||||
|
||||
/**
|
||||
* 具体任务
|
||||
*/
|
||||
private String specificTask;
|
||||
|
||||
/**
|
||||
* 开始时间
|
||||
*/
|
||||
private Date startTime;
|
||||
|
||||
/**
|
||||
* 结束时间
|
||||
*/
|
||||
private Date endTime;
|
||||
|
||||
/**
|
||||
* 数量
|
||||
*/
|
||||
private Integer number;
|
||||
|
||||
/**
|
||||
* 单位
|
||||
*/
|
||||
private String unitCode;
|
||||
|
||||
/**
|
||||
* 任务发起单位
|
||||
*/
|
||||
private String initiatingDepartment;
|
||||
|
||||
/**
|
||||
* 角色
|
||||
*/
|
||||
private String roleCode;
|
||||
|
||||
/**
|
||||
* 层级
|
||||
*/
|
||||
private String levelCode;
|
||||
|
||||
/**
|
||||
* 证明材料路径,文件存储路径或URL
|
||||
*/
|
||||
private String proofMaterial;
|
||||
|
||||
/**
|
||||
* 审核状态,如:待审核、已审核、未通过
|
||||
*/
|
||||
private String auditStatus;
|
||||
|
||||
/**
|
||||
* 审核人
|
||||
*/
|
||||
private String auditor;
|
||||
|
||||
/**
|
||||
* 审核日期
|
||||
*/
|
||||
private Date auditDate;
|
||||
|
||||
/**
|
||||
* 记录创建时间
|
||||
*/
|
||||
private Date createdAt;
|
||||
|
||||
/**
|
||||
* 记录创建人姓名
|
||||
*/
|
||||
private String createdBy;
|
||||
|
||||
/**
|
||||
* 记录最后更新时间
|
||||
*/
|
||||
private Date updatedAt;
|
||||
|
||||
/**
|
||||
* 记录最后更新人姓名
|
||||
*/
|
||||
private String updatedBy;
|
||||
|
||||
/**
|
||||
* 删除标识(0显示 1删除)
|
||||
*/
|
||||
private String delFlag;
|
||||
|
||||
private Float score;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remarks;
|
||||
|
||||
private String username;
|
||||
|
||||
private String userNo;
|
||||
|
||||
private List<String> defineCodeList;
|
||||
|
||||
private Date selectStartTime;
|
||||
|
||||
private Date selectEndTime;
|
||||
}
|
||||
@@ -0,0 +1,131 @@
|
||||
package cn.wepact.dfm.training.dto.entity;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* t_professional_std_rule
|
||||
* @author
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
public class TProfessionalStdRule {
|
||||
/**
|
||||
* 回馈记录唯一标识符
|
||||
*/
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 单位code
|
||||
*/
|
||||
private String orgCode;
|
||||
|
||||
/**
|
||||
* 等级
|
||||
*/
|
||||
private String qualificationLevel;
|
||||
|
||||
/**
|
||||
* 回馈类别
|
||||
*/
|
||||
private String categoryCode;
|
||||
|
||||
/**
|
||||
* 定义
|
||||
*/
|
||||
private String defineCode;
|
||||
|
||||
/**
|
||||
* 角色
|
||||
*/
|
||||
private String roleCode;
|
||||
|
||||
/**
|
||||
* 层级
|
||||
*/
|
||||
private String levelCode;
|
||||
|
||||
/**
|
||||
* 分值
|
||||
*/
|
||||
private Float score;
|
||||
|
||||
/**
|
||||
* 必选的任职资格等级,以逗号间隔
|
||||
*/
|
||||
private String requiredQlevel;
|
||||
|
||||
|
||||
/**
|
||||
* 上层id
|
||||
*/
|
||||
private Long parentId;
|
||||
|
||||
/**
|
||||
* 类型(1类别,2部门层级,3角色)
|
||||
*/
|
||||
private String type;
|
||||
|
||||
/**
|
||||
* 记录创建时间
|
||||
*/
|
||||
private Date createdAt;
|
||||
|
||||
/**
|
||||
* 记录创建人姓名
|
||||
*/
|
||||
private String createdBy;
|
||||
|
||||
/**
|
||||
* 记录最后更新时间
|
||||
*/
|
||||
private Date updatedAt;
|
||||
|
||||
/**
|
||||
* 记录最后更新人姓名
|
||||
*/
|
||||
private String updatedBy;
|
||||
|
||||
/**
|
||||
* 删除标识(0显示 1删除)
|
||||
*/
|
||||
private String delFlag;
|
||||
|
||||
/**
|
||||
* 回馈类别
|
||||
*/
|
||||
private String categoryName;
|
||||
|
||||
/**
|
||||
* 定义
|
||||
*/
|
||||
private String defineName;
|
||||
|
||||
/**
|
||||
* 角色
|
||||
*/
|
||||
private String roleName;
|
||||
|
||||
/**
|
||||
* 层级
|
||||
*/
|
||||
private String levelName;
|
||||
|
||||
private List<TProfessionalStdRule> roleList;
|
||||
private List<TProfessionalStdRule> levelList;
|
||||
|
||||
public TProfessionalStdRule() {
|
||||
this.roleList = new ArrayList<>();
|
||||
this.levelList = new ArrayList<>();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,112 @@
|
||||
package cn.wepact.dfm.training.dto.entity;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* t_qualification_review
|
||||
* @author
|
||||
*/
|
||||
@Data
|
||||
public class TQualificationReview{
|
||||
/**
|
||||
* 记录唯一标识符
|
||||
*/
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 员工id
|
||||
*/
|
||||
private Long userId;
|
||||
|
||||
/**
|
||||
* 现部门
|
||||
*/
|
||||
private String currentDepartment;
|
||||
|
||||
/**
|
||||
* 申请任职资格id
|
||||
*/
|
||||
private Long qualificationStandardsId;
|
||||
|
||||
/**
|
||||
* 状态(如待审核、审核通过、审核不通过)
|
||||
*/
|
||||
private String status;
|
||||
|
||||
/**
|
||||
* 审核时间
|
||||
*/
|
||||
private Date reviewTime;
|
||||
|
||||
/**
|
||||
* 专业回馈得分
|
||||
*/
|
||||
private BigDecimal professionalScore;
|
||||
|
||||
/**
|
||||
* 专业回馈提示(必选项的控制)
|
||||
*/
|
||||
private String professionalTip;
|
||||
|
||||
/**
|
||||
* 选修课得分
|
||||
*/
|
||||
private BigDecimal electiveCourseScore;
|
||||
|
||||
/**
|
||||
* 必修课得分
|
||||
*/
|
||||
private BigDecimal compulsoryCourseScore;
|
||||
|
||||
/**
|
||||
* 线下评审分数
|
||||
*/
|
||||
private BigDecimal offlineScore;
|
||||
|
||||
/**
|
||||
* 单位id
|
||||
*/
|
||||
private String orgCode;
|
||||
|
||||
/**
|
||||
* 记录创建时间
|
||||
*/
|
||||
private Date createdAt;
|
||||
|
||||
/**
|
||||
* 记录创建人姓名
|
||||
*/
|
||||
private String createdBy;
|
||||
|
||||
/**
|
||||
* 记录最后更新时间
|
||||
*/
|
||||
private Date updatedAt;
|
||||
|
||||
/**
|
||||
* 记录最后更新人姓名
|
||||
*/
|
||||
private String updatedBy;
|
||||
|
||||
/**
|
||||
* 删除标识(0显示 1删除)
|
||||
*/
|
||||
private String delFlag;
|
||||
// 新添加的字段
|
||||
private Long projectId; // 项目ID
|
||||
private String positionName;
|
||||
|
||||
private String qualificationLevel;
|
||||
|
||||
private String username;
|
||||
private String userNo;
|
||||
|
||||
/**
|
||||
* 审核结束时间
|
||||
*/
|
||||
private Date reviewEndTime;
|
||||
private Float validTime;
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
package cn.wepact.dfm.training.dto.entity;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* t_qualification_standards
|
||||
* @author
|
||||
*/
|
||||
@Data
|
||||
public class TQualificationStandards{
|
||||
/**
|
||||
* 记录唯一标识符
|
||||
*/
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 职位的名称
|
||||
*/
|
||||
private String positionName;
|
||||
|
||||
/**
|
||||
* 资格等级(如1, 2, 3等)
|
||||
*/
|
||||
private String qualificationLevel;
|
||||
|
||||
/**
|
||||
* 单位id
|
||||
*/
|
||||
private String orgCode;
|
||||
|
||||
/**
|
||||
* 记录创建时间
|
||||
*/
|
||||
private Date createdAt;
|
||||
|
||||
/**
|
||||
* 记录创建人姓名
|
||||
*/
|
||||
private String createdBy;
|
||||
|
||||
/**
|
||||
* 记录最后更新时间
|
||||
*/
|
||||
private Date updatedAt;
|
||||
|
||||
/**
|
||||
* 记录最后更新人姓名
|
||||
*/
|
||||
private String updatedBy;
|
||||
|
||||
/**
|
||||
* 删除标识(0显示 1删除)
|
||||
*/
|
||||
private String delFlag;
|
||||
|
||||
/**
|
||||
* 对应资格的标准描述
|
||||
*/
|
||||
private String qualificationCriteria;
|
||||
}
|
||||
60
src/main/java/cn/wepact/dfm/training/dto/entity/TUser.java
Normal file
60
src/main/java/cn/wepact/dfm/training/dto/entity/TUser.java
Normal file
@@ -0,0 +1,60 @@
|
||||
package cn.wepact.dfm.training.dto.entity;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* t_user
|
||||
* @author
|
||||
*/
|
||||
@Data
|
||||
public class TUser {
|
||||
private Long id;
|
||||
|
||||
private String username;
|
||||
|
||||
private String password;
|
||||
|
||||
private String userAvatar;
|
||||
|
||||
private String userNo;
|
||||
|
||||
private String showTip;
|
||||
|
||||
private Date updatedAt;
|
||||
|
||||
private String updatedBy;
|
||||
|
||||
private Date createdAt;
|
||||
|
||||
private String createdBy;
|
||||
|
||||
private String delFlag;
|
||||
|
||||
private String departmentName;
|
||||
|
||||
private String orgCode;
|
||||
private List<TUserPermission> roles;
|
||||
|
||||
private String token;
|
||||
|
||||
/**
|
||||
* 用户类型(1普通用户,2专业回馈管理员,3归口管理员)
|
||||
*/
|
||||
private String userType;
|
||||
|
||||
|
||||
/**
|
||||
* 专业回馈类别,当user_type为2时生效
|
||||
*/
|
||||
private String preType;
|
||||
|
||||
private String email;
|
||||
|
||||
private String randomCode;
|
||||
|
||||
private String newPwd;
|
||||
private String confirmPwd;
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
package cn.wepact.dfm.training.dto.entity;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* t_user_permission
|
||||
* @author
|
||||
*/
|
||||
|
||||
@Data
|
||||
public class TUserPermission {
|
||||
/**
|
||||
* 主键
|
||||
*/
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 用户名
|
||||
*/
|
||||
private Long userId;
|
||||
|
||||
/**
|
||||
* 用户类型(1普通用户,2专业回馈管理员,3归口管理员)
|
||||
*/
|
||||
private String userType;
|
||||
|
||||
/**
|
||||
* 部门code
|
||||
*/
|
||||
private String orgCode;
|
||||
|
||||
/**
|
||||
* 专业回馈类别,当user_type为2时生效
|
||||
*/
|
||||
private String preType;
|
||||
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
private Date updatedAt;
|
||||
|
||||
/**
|
||||
* 更新者
|
||||
*/
|
||||
private String updatedBy;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
private Date createdAt;
|
||||
|
||||
/**
|
||||
* 创建者
|
||||
*/
|
||||
private String createdBy;
|
||||
|
||||
/**
|
||||
* 删除标识(0显示 1删除)
|
||||
*/
|
||||
private String delFlag;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package cn.wepact.dfm.training.mapper;
|
||||
|
||||
|
||||
import cn.wepact.dfm.training.dto.entity.LevelScores;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
|
||||
public interface LevelScoresMapper {
|
||||
/**
|
||||
* 根据层级查找对应的记录
|
||||
*
|
||||
* @param level 层级
|
||||
* @return LevelScores 对象
|
||||
*/
|
||||
|
||||
LevelScores findByLevel(String level);
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
|
||||
<mapper namespace="cn.wepact.dfm.training.mapper.LevelScoresMapper">
|
||||
<!-- 公共的列清单 -->
|
||||
<sql id="Base_Column_List">
|
||||
id, level, required_score, elective_score, org_code
|
||||
</sql>
|
||||
|
||||
<!-- 基本的结果映射 -->
|
||||
<resultMap id="BaseResultMap" type="cn.wepact.dfm.training.dto.entity.LevelScores">
|
||||
<id column="id" property="id" />
|
||||
<result column="level" property="level" />
|
||||
<result column="required_score" property="requiredScore" />
|
||||
<result column="elective_score" property="electiveScore" />
|
||||
<result column="org_code" property="orgCode" />
|
||||
</resultMap>
|
||||
<!-- 根据层级查找对应的记录 -->
|
||||
<select id="findByLevel" parameterType="string" resultMap="BaseResultMap">
|
||||
SELECT
|
||||
<include refid="Base_Column_List" />
|
||||
FROM LevelScores
|
||||
WHERE level = #{level}
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
@@ -0,0 +1,24 @@
|
||||
package cn.wepact.dfm.training.mapper;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
/**
|
||||
* DAO公共基类,由MybatisGenerator自动生成请勿修改
|
||||
* @param <Model> The Model Class 这里是泛型不是Model类
|
||||
* @param <PK> The Primary Key Class 如果是无主键,则可以用Model来跳过,如果是多主键则是Key类
|
||||
*/
|
||||
public interface MyBatisBaseDao<Model, PK extends Serializable> {
|
||||
int deleteByPrimaryKey(PK id);
|
||||
|
||||
int insert(Model record);
|
||||
|
||||
int insertSelective(Model record);
|
||||
|
||||
Model selectByPrimaryKey(PK id);
|
||||
|
||||
int updateByPrimaryKeySelective(Model record);
|
||||
|
||||
int updateByPrimaryKey(Model record);
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package cn.wepact.dfm.training.mapper;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* DAO公共基类,由MybatisGenerator自动生成请勿修改
|
||||
* @param <Model> The Model Class 这里是泛型不是Model类
|
||||
* @param <PK> The Primary Key Class 如果是无主键,则可以用Model来跳过,如果是多主键则是Key类
|
||||
*/
|
||||
public interface MyBatisBaseMapper<Model, PK extends Serializable> {
|
||||
int deleteByPrimaryKey(PK id);
|
||||
|
||||
int insert(Model record);
|
||||
|
||||
int insertSelective(Model record);
|
||||
|
||||
Model selectByPrimaryKey(PK id);
|
||||
|
||||
int updateByPrimaryKeySelective(Model record);
|
||||
|
||||
int updateByPrimaryKey(Model record);
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package cn.wepact.dfm.training.mapper;
|
||||
|
||||
import cn.wepact.dfm.training.dto.TaskScoreSummary;
|
||||
import cn.wepact.dfm.training.dto.entity.SyncTaskLog;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* TProfessionalFeedbackMapper继承基类
|
||||
*/
|
||||
@Mapper
|
||||
public interface SyncTaskLogMapper extends MyBatisBaseMapper<SyncTaskLog, Long> {
|
||||
int insert(SyncTaskLog log);
|
||||
|
||||
SyncTaskLog findByTaskId(Long taskId);
|
||||
|
||||
Date getLastSyncTime();
|
||||
|
||||
void updateLastSyncTime(Date lastSyncTime);
|
||||
|
||||
void update(SyncTaskLog existingLog);
|
||||
|
||||
List<TaskScoreSummary> getTaskScoreSummary();
|
||||
}
|
||||
@@ -0,0 +1,382 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="cn.wepact.dfm.training.mapper.SyncTaskLogMapper">
|
||||
<!-- 结果映射:字段到Java对象属性的映射 -->
|
||||
<resultMap id="BaseResultMap" type="cn.wepact.dfm.training.dto.entity.SyncTaskLog">
|
||||
<id column="id" jdbcType="BIGINT" property="id"/>
|
||||
<result column="sync_time" jdbcType="TIMESTAMP" property="syncTime"/>
|
||||
<result column="offset" jdbcType="INTEGER" property="offset"/>
|
||||
<result column="sync_limit" jdbcType="INTEGER" property="limit"/>
|
||||
<result column="search_start_time" jdbcType="TIMESTAMP" property="searchStartTime"/>
|
||||
<result column="search_end_time" jdbcType="TIMESTAMP" property="searchEndTime"/>
|
||||
<result column="status" jdbcType="VARCHAR" property="status"/>
|
||||
<result column="task_id" jdbcType="BIGINT" property="taskId"/>
|
||||
<result column="org_id" jdbcType="BIGINT" property="orgId"/>
|
||||
<result column="project_id" jdbcType="BIGINT" property="projectId"/>
|
||||
<result column="main_project_id" jdbcType="BIGINT" property="mainProjectId"/>
|
||||
<result column="stu_user_id" jdbcType="BIGINT" property="stuUserId"/>
|
||||
<result column="third_user_id" jdbcType="BIGINT" property="thirdUserId"/>
|
||||
<result column="formal" jdbcType="BOOLEAN" property="formal"/>
|
||||
<result column="period_id" jdbcType="BIGINT" property="periodId"/>
|
||||
<result column="result_repeat_flag" jdbcType="BOOLEAN" property="resultRepeatFlag"/>
|
||||
<result column="sub_result_id" jdbcType="BIGINT" property="subResultId"/>
|
||||
<result column="sub_task_id" jdbcType="BIGINT" property="subTaskId"/>
|
||||
<result column="repeat_count" jdbcType="INTEGER" property="repeatCount"/>
|
||||
<result column="sub_task_result_id" jdbcType="BIGINT" property="subTaskResultId"/>
|
||||
<result column="order_index" jdbcType="INTEGER" property="orderIndex"/>
|
||||
<result column="task_status" jdbcType="VARCHAR" property="taskStatus"/>
|
||||
<result column="task_required" jdbcType="BOOLEAN" property="taskRequired"/>
|
||||
<result column="task_schedule" jdbcType="INTEGER" property="taskSchedule"/>
|
||||
<result column="task_manual_completed" jdbcType="BOOLEAN" property="taskManualCompleted"/>
|
||||
<result column="task_start_time" jdbcType="TIMESTAMP" property="taskStartTime"/>
|
||||
<result column="task_completed_time" jdbcType="TIMESTAMP" property="taskCompletedTime"/>
|
||||
<result column="task_duration" jdbcType="INTEGER" property="taskDuration"/>
|
||||
<result column="is_rated" jdbcType="BOOLEAN" property="isRated"/>
|
||||
<result column="task_target_scores" jdbcType="INTEGER" property="taskTargetScores"/>
|
||||
<result column="task_passed" jdbcType="BOOLEAN" property="taskPassed"/>
|
||||
<result column="task_is_excellent" jdbcType="BOOLEAN" property="taskIsExcellent"/>
|
||||
<result column="task_delay" jdbcType="INTEGER" property="taskDelay"/>
|
||||
<result column="task_sign_status" jdbcType="BOOLEAN" property="taskSignStatus"/>
|
||||
<result column="task_signout_status" jdbcType="BOOLEAN" property="taskSignoutStatus"/>
|
||||
<result column="task_sign_time" jdbcType="TIMESTAMP" property="taskSignTime"/>
|
||||
<result column="task_signout_time" jdbcType="TIMESTAMP" property="taskSignoutTime"/>
|
||||
<result column="task_sign_address" jdbcType="VARCHAR" property="taskSignAddress"/>
|
||||
<result column="task_signout_address" jdbcType="VARCHAR" property="taskSignoutAddress"/>
|
||||
<result column="task_answer" jdbcType="VARCHAR" property="taskAnswer"/>
|
||||
<result column="task_get_scores" jdbcType="INTEGER" property="taskGetScores"/>
|
||||
<result column="task_get_points" jdbcType="INTEGER" property="taskGetPoints"/>
|
||||
<result column="task_get_study_hours" jdbcType="INTEGER" property="taskGetStudyHours"/>
|
||||
<result column="stu_deleted" jdbcType="BOOLEAN" property="stuDeleted"/>
|
||||
<result column="task_result_deleted" jdbcType="BOOLEAN" property="taskResultDeleted"/>
|
||||
<result column="task_has_tutor" jdbcType="BOOLEAN" property="taskHasTutor"/>
|
||||
<result column="ojt_teacher_id" jdbcType="BIGINT" property="ojtTeacherId"/>
|
||||
<result column="ojt_teacher_fullname" jdbcType="VARCHAR" property="ojtTeacherFullname"/>
|
||||
<result column="ojt_study_status" jdbcType="VARCHAR" property="ojtStudyStatus"/>
|
||||
<result column="ojt_out_time" jdbcType="TIMESTAMP" property="ojtOutTime"/>
|
||||
<result column="ojt_in_time" jdbcType="TIMESTAMP" property="ojtInTime"/>
|
||||
<result column="created_at" jdbcType="TIMESTAMP" property="createdAt"/>
|
||||
<result column="updated_at" jdbcType="TIMESTAMP" property="updatedAt"/>
|
||||
<!-- New mappings -->
|
||||
<result column="tr_create_user_id" jdbcType="VARCHAR" property="trCreateUserId"/>
|
||||
<result column="tr_update_user_id" jdbcType="VARCHAR" property="trUpdateUserId"/>
|
||||
<result column="tr_update_time" jdbcType="TIMESTAMP" property="trUpdateTime"/>
|
||||
<result column="task_type" jdbcType="INTEGER" property="taskType"/>
|
||||
<result column="tr_create_time" jdbcType="TIMESTAMP" property="trCreateTime"/>
|
||||
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
|
||||
<result column="db_create_time" jdbcType="TIMESTAMP" property="dbCreateTime"/>
|
||||
<result column="db_update_time" jdbcType="TIMESTAMP" property="dbUpdateTime"/>
|
||||
</resultMap>
|
||||
|
||||
<!-- 基础列清单 -->
|
||||
<sql id="Base_Column_List">
|
||||
id, sync_time, offset, sync_limit, search_start_time, search_end_time, status, task_id,
|
||||
org_id, project_id, main_project_id, stu_user_id, third_user_id, formal, period_id, result_repeat_flag,
|
||||
sub_result_id, sub_task_id, repeat_count, sub_task_result_id, order_index, task_status, task_required,
|
||||
task_schedule, task_manual_completed, task_start_time, task_completed_time, task_duration, is_rated,
|
||||
task_target_scores, task_passed, task_is_excellent, task_delay, task_sign_status, task_signout_status,
|
||||
task_sign_time, task_signout_time, task_sign_address, task_signout_address, task_answer, task_get_scores,
|
||||
task_get_points, task_get_study_hours, stu_deleted, task_result_deleted, task_has_tutor, ojt_teacher_id,
|
||||
ojt_teacher_fullname, ojt_study_status, ojt_out_time, ojt_in_time, created_at, updated_at,
|
||||
tr_create_user_id, tr_update_user_id, tr_update_time, task_type, tr_create_time, update_time, db_create_time, db_update_time
|
||||
</sql>
|
||||
|
||||
<!-- 插入同步任务日志 -->
|
||||
<insert id="insert" parameterType="cn.wepact.dfm.training.dto.entity.SyncTaskLog">
|
||||
INSERT INTO sync_task_log (
|
||||
sync_time,
|
||||
offset,
|
||||
sync_limit,
|
||||
search_start_time,
|
||||
search_end_time,
|
||||
status,
|
||||
task_id,
|
||||
org_id,
|
||||
project_id,
|
||||
main_project_id,
|
||||
stu_user_id,
|
||||
third_user_id,
|
||||
formal,
|
||||
period_id,
|
||||
result_repeat_flag,
|
||||
sub_result_id,
|
||||
sub_task_id,
|
||||
repeat_count,
|
||||
sub_task_result_id,
|
||||
order_index,
|
||||
task_status,
|
||||
task_required,
|
||||
task_schedule,
|
||||
task_manual_completed,
|
||||
task_start_time,
|
||||
task_completed_time,
|
||||
task_duration,
|
||||
is_rated,
|
||||
task_target_scores,
|
||||
task_passed,
|
||||
task_is_excellent,
|
||||
task_delay,
|
||||
task_sign_status,
|
||||
task_signout_status,
|
||||
task_sign_time,
|
||||
task_signout_time,
|
||||
task_sign_address,
|
||||
task_signout_address,
|
||||
task_answer,
|
||||
task_get_scores,
|
||||
task_get_points,
|
||||
task_get_study_hours,
|
||||
stu_deleted,
|
||||
task_result_deleted,
|
||||
task_has_tutor,
|
||||
ojt_teacher_id,
|
||||
ojt_teacher_fullname,
|
||||
ojt_study_status,
|
||||
ojt_out_time,
|
||||
ojt_in_time,
|
||||
created_at,
|
||||
updated_at,
|
||||
tr_create_user_id,
|
||||
tr_update_user_id,
|
||||
tr_update_time,
|
||||
task_type,
|
||||
tr_create_time,
|
||||
update_time,
|
||||
db_create_time,
|
||||
db_update_time
|
||||
)
|
||||
VALUES (
|
||||
#{syncTime},
|
||||
#{offset},
|
||||
#{limit},
|
||||
#{searchStartTime},
|
||||
#{searchEndTime},
|
||||
#{status},
|
||||
#{taskId},
|
||||
#{orgId},
|
||||
#{projectId},
|
||||
#{mainProjectId},
|
||||
#{stuUserId},
|
||||
#{thirdUserId},
|
||||
#{formal},
|
||||
#{periodId},
|
||||
#{resultRepeatFlag},
|
||||
#{subResultId},
|
||||
#{subTaskId},
|
||||
#{repeatCount},
|
||||
#{subTaskResultId},
|
||||
#{orderIndex},
|
||||
#{taskStatus},
|
||||
#{taskRequired},
|
||||
#{taskSchedule},
|
||||
#{taskManualCompleted},
|
||||
#{taskStartTime},
|
||||
#{taskCompletedTime},
|
||||
#{taskDuration},
|
||||
#{isRated},
|
||||
#{taskTargetScores},
|
||||
#{taskPassed},
|
||||
#{taskIsExcellent},
|
||||
#{taskDelay},
|
||||
#{taskSignStatus},
|
||||
#{taskSignoutStatus},
|
||||
#{taskSignTime},
|
||||
#{taskSignoutTime},
|
||||
#{taskSignAddress},
|
||||
#{taskSignoutAddress},
|
||||
#{taskAnswer},
|
||||
#{taskGetScores},
|
||||
#{taskGetPoints},
|
||||
#{taskGetStudyHours},
|
||||
#{stuDeleted},
|
||||
#{taskResultDeleted},
|
||||
#{taskHasTutor},
|
||||
#{ojtTeacherId},
|
||||
#{ojtTeacherFullname},
|
||||
#{ojtStudyStatus},
|
||||
#{ojtOutTime},
|
||||
#{ojtInTime},
|
||||
#{createdAt},
|
||||
#{updatedAt},
|
||||
#{trCreateUserId},
|
||||
#{trUpdateUserId},
|
||||
#{trUpdateTime},
|
||||
#{taskType},
|
||||
#{trCreateTime},
|
||||
#{updateTime},
|
||||
#{dbCreateTime},
|
||||
#{dbUpdateTime}
|
||||
)
|
||||
</insert>
|
||||
|
||||
|
||||
<!-- 根据任务ID查找同步任务日志 -->
|
||||
<select id="findByTaskId" resultMap="BaseResultMap">
|
||||
SELECT
|
||||
<include refid="Base_Column_List" />
|
||||
FROM sync_task_log
|
||||
WHERE task_id = #{taskId}
|
||||
LIMIT 1
|
||||
</select>
|
||||
|
||||
<!-- 获取最后一次同步时间 -->
|
||||
<select id="getLastSyncTime" resultType="java.util.Date">
|
||||
SELECT sync_time
|
||||
FROM sync_task_log
|
||||
ORDER BY sync_time DESC
|
||||
LIMIT 1
|
||||
</select>
|
||||
|
||||
<!-- 更新最后同步时间 -->
|
||||
<update id="updateLastSyncTime" parameterType="java.util.Date">
|
||||
UPDATE sync_task_log
|
||||
SET sync_time = #{syncTime}
|
||||
</update>
|
||||
|
||||
<update id="update" parameterType="cn.wepact.dfm.training.dto.entity.SyncTaskLog">
|
||||
UPDATE sync_task_log
|
||||
SET
|
||||
sync_time = #{syncTime},
|
||||
offset = #{offset},
|
||||
sync_limit = #{limit},
|
||||
search_start_time = #{searchStartTime},
|
||||
search_end_time = #{searchEndTime},
|
||||
status = #{status},
|
||||
task_id = #{taskId},
|
||||
org_id = #{orgId},
|
||||
project_id = #{projectId},
|
||||
main_project_id = #{mainProjectId},
|
||||
stu_user_id = #{stuUserId},
|
||||
third_user_id = #{thirdUserId},
|
||||
formal = #{formal},
|
||||
period_id = #{periodId},
|
||||
result_repeat_flag = #{resultRepeatFlag},
|
||||
sub_result_id = #{subResultId},
|
||||
sub_task_id = #{subTaskId},
|
||||
repeat_count = #{repeatCount},
|
||||
sub_task_result_id = #{subTaskResultId},
|
||||
order_index = #{orderIndex},
|
||||
task_status = #{taskStatus},
|
||||
task_required = #{taskRequired},
|
||||
task_manual_completed = #{taskManualCompleted},
|
||||
task_start_time = #{taskStartTime},
|
||||
task_completed_time = #{taskCompletedTime},
|
||||
task_duration = #{taskDuration},
|
||||
is_rated = #{isRated},
|
||||
task_target_scores = #{taskTargetScores},
|
||||
task_passed = #{taskPassed},
|
||||
task_is_excellent = #{taskIsExcellent},
|
||||
task_delay = #{taskDelay},
|
||||
task_sign_status = #{taskSignStatus},
|
||||
task_signout_status = #{taskSignoutStatus},
|
||||
task_sign_time = #{taskSignTime},
|
||||
task_signout_time = #{taskSignoutTime},
|
||||
task_sign_address = #{taskSignAddress},
|
||||
task_signout_address = #{taskSignoutAddress},
|
||||
task_answer = #{taskAnswer},
|
||||
task_get_scores = #{taskGetScores},
|
||||
task_get_points = #{taskGetPoints},
|
||||
task_get_study_hours = #{taskGetStudyHours},
|
||||
stu_deleted = #{stuDeleted},
|
||||
task_result_deleted = #{taskResultDeleted},
|
||||
task_has_tutor = #{taskHasTutor},
|
||||
ojt_teacher_id = #{ojtTeacherId},
|
||||
ojt_teacher_fullname = #{ojtTeacherFullname},
|
||||
ojt_study_status = #{ojtStudyStatus},
|
||||
ojt_out_time = #{ojtOutTime},
|
||||
ojt_in_time = #{ojtInTime},
|
||||
created_at = #{createdAt},
|
||||
updated_at = #{updatedAt},
|
||||
tr_create_user_id = #{trCreateUserId},
|
||||
tr_update_user_id = #{trUpdateUserId},
|
||||
tr_update_time = #{trUpdateTime},
|
||||
task_type = #{taskType},
|
||||
tr_create_time = #{trCreateTime},
|
||||
update_time = #{updateTime},
|
||||
db_create_time = #{dbCreateTime},
|
||||
db_update_time = #{dbUpdateTime}
|
||||
WHERE task_id = #{taskId}
|
||||
</update>
|
||||
|
||||
<select id="getTaskScoreSummary" resultType="cn.wepact.dfm.training.dto.TaskScoreSummary">
|
||||
<!-- SELECT-->
|
||||
<!-- s.stu_user_id AS stuUserId,-->
|
||||
<!-- s.project_id AS projectId,-->
|
||||
<!-- SUM(CASE WHEN s.task_required = 1 THEN s.task_get_scores ELSE 0 END) AS requiredTotalScores,-->
|
||||
<!-- SUM(CASE WHEN s.task_required = 0 THEN s.task_get_scores ELSE 0 END) AS electiveTotalScores-->
|
||||
<!-- FROM-->
|
||||
<!-- (SELECT -->
|
||||
<!-- stu_user_id,-->
|
||||
<!-- project_id,-->
|
||||
<!-- task_id,-->
|
||||
<!-- task_required,-->
|
||||
<!-- task_get_scores,-->
|
||||
<!-- task_status,-->
|
||||
<!-- task_completed_time-->
|
||||
<!-- FROM sync_task_log s1-->
|
||||
<!-- WHERE s1.id = (-->
|
||||
<!-- SELECT id -->
|
||||
<!-- FROM sync_task_log s2 -->
|
||||
<!-- WHERE s2.task_id = s1.task_id -->
|
||||
<!-- ORDER BY created_at DESC -->
|
||||
<!-- LIMIT 1-->
|
||||
<!-- )-->
|
||||
<!-- AND s1.task_status = 2-->
|
||||
<!-- ) s-->
|
||||
<!-- JOIN -->
|
||||
<!-- sync_user_info_log u ON s.stu_user_id = u.user_id-->
|
||||
<!-- JOIN -->
|
||||
<!-- t_user tu ON u.username = tu.user_no-->
|
||||
<!-- JOIN -->
|
||||
<!-- t_qualification_review q ON tu.id = q.user_id -->
|
||||
<!-- AND s.project_id = q.project_id-->
|
||||
<!-- WHERE-->
|
||||
<!-- s.task_completed_time > q.created_at-->
|
||||
<!-- AND q.del_flag = '0'-->
|
||||
<!-- AND q.status IN ('0', '1', '2', '3')-->
|
||||
<!-- GROUP BY-->
|
||||
<!-- s.stu_user_id,-->
|
||||
<!-- s.project_id;-->
|
||||
SELECT
|
||||
s.stu_user_id AS stuUserId,
|
||||
s.project_id AS projectId,
|
||||
SUM(CASE WHEN s.task_required = 1 THEN s.task_get_scores ELSE 0 END) AS requiredTotalScores,
|
||||
SUM(CASE WHEN s.task_required = 0 THEN s.task_get_scores ELSE 0 END) AS electiveTotalScores
|
||||
FROM
|
||||
(SELECT
|
||||
s1.stu_user_id,
|
||||
s1.project_id,
|
||||
s1.task_id,
|
||||
s1.task_required,
|
||||
s1.task_get_scores,
|
||||
s1.task_status,
|
||||
s1.task_completed_time
|
||||
FROM sync_task_log s1
|
||||
INNER JOIN (
|
||||
SELECT task_id, stu_user_id, MAX(created_at) as latest_created_at
|
||||
FROM sync_task_log
|
||||
WHERE task_status = 2
|
||||
GROUP BY task_id, stu_user_id
|
||||
) latest ON s1.task_id = latest.task_id
|
||||
AND s1.stu_user_id = latest.stu_user_id
|
||||
AND s1.created_at = latest.latest_created_at
|
||||
) s
|
||||
LEFT JOIN
|
||||
sync_user_info_log u ON s.stu_user_id = u.user_id
|
||||
LEFT JOIN
|
||||
t_user tu ON u.username = tu.user_no
|
||||
LEFT JOIN
|
||||
t_qualification_review q ON tu.id = q.user_id
|
||||
AND s.project_id = q.project_id
|
||||
AND q.del_flag = '0'
|
||||
AND q.status IN ('0', '1', '2', '3')
|
||||
WHERE
|
||||
s.task_completed_time > q.created_at
|
||||
GROUP BY
|
||||
s.stu_user_id,
|
||||
s.project_id;
|
||||
</select>
|
||||
|
||||
|
||||
</mapper>
|
||||
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
package cn.wepact.dfm.training.mapper;
|
||||
|
||||
import cn.wepact.dfm.training.dto.entity.SyncTaskLog;
|
||||
import cn.wepact.dfm.training.dto.entity.SyncUserInfoLog;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.Date;
|
||||
@Mapper
|
||||
public interface SyncUserInfoLogMapper extends MyBatisBaseMapper<SyncUserInfoLog, Long> {
|
||||
|
||||
|
||||
SyncUserInfoLog getUserInfoByUserId(@Param("userId") String userId);
|
||||
|
||||
|
||||
void insertUserInfo(SyncUserInfoLog userInfo);
|
||||
|
||||
|
||||
void updateUserInfo(SyncUserInfoLog userInfo);
|
||||
|
||||
Date getLastSyncTime();
|
||||
|
||||
void updateLastSyncTime(Date date);
|
||||
SyncUserInfoLog findUserInfoByStuUserId(@Param("stuUserId") String stuUserId);
|
||||
}
|
||||
@@ -0,0 +1,153 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="cn.wepact.dfm.training.mapper.SyncUserInfoLogMapper">
|
||||
<resultMap id="UserResultMap" type="cn.wepact.dfm.training.dto.entity.SyncUserInfoLog">
|
||||
<result property="id" column="id"/> <!-- 用户ID -->
|
||||
<result property="syncTime" column="sync_time"/> <!-- 同步时间 -->
|
||||
<result property="offset" column="offset"/> <!-- 偏移量 -->
|
||||
<result property="syncLimit" column="sync_limit"/> <!-- 同步限制 -->
|
||||
<result property="searchStartTime" column="search_start_time"/> <!-- 搜索开始时间 -->
|
||||
<result property="searchEndTime" column="search_end_time"/> <!-- 搜索结束时间 -->
|
||||
<result property="status" column="status"/> <!-- 状态 -->
|
||||
<result property="userId" column="user_id"/> <!-- 用户唯一标识 -->
|
||||
<result property="username" column="username"/> <!-- 用户名 -->
|
||||
<result property="fullname" column="fullname"/> <!-- 全名 -->
|
||||
<result property="gender" column="gender"/> <!-- 性别 (1: 男, 2: 女) -->
|
||||
<result property="idNo" column="id_no"/> <!-- 身份证号 -->
|
||||
<result property="birthday" column="birthday"/> <!-- 生日 -->
|
||||
<result property="deptId" column="dept_id"/> <!-- 部门ID -->
|
||||
<result property="deptName" column="dept_name"/> <!-- 部门名称 -->
|
||||
<result property="positionId" column="position_id"/> <!-- 职位ID -->
|
||||
<result property="positionName" column="position_name"/> <!-- 职位名称 -->
|
||||
<result property="gradeId" column="grade_id"/> <!-- 等级ID -->
|
||||
<result property="gradeName" column="grade_name"/> <!-- 等级名称 -->
|
||||
<result property="managerId" column="manager_id"/> <!-- 经理ID -->
|
||||
<result property="managerFullname" column="manager_fullname"/> <!-- 经理全名 -->
|
||||
<result property="deptManagerId" column="dept_manager_id"/> <!-- 部门经理ID -->
|
||||
<result property="deptManagerFullname" column="dept_manager_fullname"/> <!-- 部门经理全名 -->
|
||||
<result property="mobile" column="mobile"/> <!-- 手机号 -->
|
||||
<result property="email" column="email"/> <!-- 邮箱 -->
|
||||
<result property="userNo" column="user_no"/> <!-- 用户工号 -->
|
||||
<result property="hireDate" column="hire_date"/> <!-- 入职时间 -->
|
||||
<result property="expiredTime" column="expired_time"/> <!-- 到期时间 -->
|
||||
<result property="areaCode" column="area_code"/> <!-- 区号 -->
|
||||
<result property="userStatus" column="user_status"/> <!-- 用户状态 -->
|
||||
<result property="avatarUrl" column="avatar_url"/> <!-- 头像URL -->
|
||||
<result property="admin" column="admin"/> <!-- 是否是管理员 -->
|
||||
<result property="deleted" column="deleted"/> <!-- 是否删除 -->
|
||||
<result property="thirdUserId" column="third_user_id"/> <!-- 第三方用户ID -->
|
||||
<result property="createTime" column="create_time"/> <!-- 创建时间 -->
|
||||
<result property="updateTime" column="update_time"/> <!-- 更新时间 -->
|
||||
<result property="userType" column="user_type"/> <!-- 用户类型 -->
|
||||
</resultMap>
|
||||
<sql id="Base_Column_List">
|
||||
id,
|
||||
user_id,
|
||||
username,
|
||||
fullname,
|
||||
gender,
|
||||
id_no,
|
||||
birthday,
|
||||
dept_id,
|
||||
dept_name,
|
||||
position_id,
|
||||
position_name,
|
||||
grade_id,
|
||||
grade_name,
|
||||
manager_id,
|
||||
manager_fullname,
|
||||
dept_manager_id,
|
||||
dept_manager_fullname,
|
||||
mobile,
|
||||
email,
|
||||
user_no,
|
||||
hire_date,
|
||||
expired_time,
|
||||
area_code,
|
||||
user_status,
|
||||
avatar_url,
|
||||
admin,
|
||||
deleted,
|
||||
third_user_id,
|
||||
create_time,
|
||||
update_time,
|
||||
user_type,
|
||||
sync_time,
|
||||
offset,
|
||||
sync_limit,
|
||||
search_start_time,
|
||||
search_end_time,
|
||||
status
|
||||
</sql>
|
||||
<insert id="insertUserInfo">
|
||||
INSERT INTO sync_user_info_log (<include refid="Base_Column_List"/>)
|
||||
VALUES (#{id}, #{userId}, #{username}, #{fullname}, #{gender}, #{idNo}, #{birthday}, #{deptId}, #{deptName},
|
||||
#{positionId}, #{positionName}, #{gradeId}, #{gradeName}, #{managerId}, #{managerFullname}, #{deptManagerId}, #{deptManagerFullname},
|
||||
#{mobile}, #{email}, #{userNo}, #{hireDate}, #{expiredTime}, #{areaCode}, #{userStatus}, #{avatarUrl}, #{admin}, #{deleted}, #{thirdUserId},
|
||||
#{createTime}, #{updateTime}, #{userType}, #{syncTime}, #{offset}, #{syncLimit}, #{searchStartTime}, #{searchEndTime}, #{status})
|
||||
</insert>
|
||||
|
||||
<update id="updateUserInfo">
|
||||
UPDATE sync_user_info_log
|
||||
SET
|
||||
id = #{id},
|
||||
user_id = #{userId},
|
||||
username = #{username},
|
||||
fullname = #{fullname},
|
||||
gender = #{gender},
|
||||
id_no = #{idNo},
|
||||
birthday = #{birthday},
|
||||
dept_id = #{deptId},
|
||||
dept_name = #{deptName},
|
||||
position_id = #{positionId},
|
||||
position_name = #{positionName},
|
||||
grade_id = #{gradeId},
|
||||
grade_name = #{gradeName},
|
||||
manager_id = #{managerId},
|
||||
manager_fullname = #{managerFullname},
|
||||
dept_manager_id = #{deptManagerId},
|
||||
dept_manager_fullname = #{deptManagerFullname},
|
||||
mobile = #{mobile},
|
||||
email = #{email},
|
||||
user_no = #{userNo},
|
||||
hire_date = #{hireDate},
|
||||
expired_time = #{expiredTime},
|
||||
area_code = #{areaCode},
|
||||
user_status = #{userStatus},
|
||||
avatar_url = #{avatarUrl},
|
||||
admin = #{admin},
|
||||
deleted = #{deleted},
|
||||
third_user_id = #{thirdUserId},
|
||||
create_time = #{createTime},
|
||||
update_time = #{updateTime},
|
||||
user_type = #{userType},
|
||||
sync_time = #{syncTime},
|
||||
offset = #{offset},
|
||||
sync_limit = #{syncLimit},
|
||||
search_start_time = #{searchStartTime},
|
||||
search_end_time = #{searchEndTime},
|
||||
status = #{status}
|
||||
WHERE user_id = #{userId}
|
||||
</update>
|
||||
|
||||
|
||||
<select id="getUserInfoByUserId" resultMap="UserResultMap">
|
||||
SELECT <include refid="Base_Column_List"/> FROM sync_user_info_log WHERE user_id = #{userId}
|
||||
</select>
|
||||
<!-- 获取最后一次同步时间 -->
|
||||
<select id="getLastSyncTime" resultType="java.util.Date">
|
||||
SELECT sync_time
|
||||
FROM sync_user_info_log
|
||||
ORDER BY sync_time DESC
|
||||
LIMIT 1
|
||||
</select>
|
||||
<!-- 更新最后同步时间 -->
|
||||
<update id="updateLastSyncTime" parameterType="java.util.Date">
|
||||
UPDATE sync_user_info_log
|
||||
SET sync_time = #{syncTime}
|
||||
</update>
|
||||
|
||||
<select id="findUserInfoByStuUserId" resultMap="UserResultMap">
|
||||
SELECT user_id, username FROM sync_user_info_log WHERE user_id = #{stuUserId}
|
||||
</select>
|
||||
</mapper>
|
||||
@@ -0,0 +1,15 @@
|
||||
package cn.wepact.dfm.training.mapper;
|
||||
|
||||
import cn.wepact.dfm.training.dto.entity.TAppCheck;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* TAppCheckMapper继承基类
|
||||
*/
|
||||
@Repository
|
||||
public interface TAppCheckMapper extends MyBatisBaseDao<TAppCheck, Long> {
|
||||
List<TAppCheck> selectByConditions(@Param("param") TAppCheck param);
|
||||
}
|
||||
186
src/main/java/cn/wepact/dfm/training/mapper/TAppCheckMapper.xml
Normal file
186
src/main/java/cn/wepact/dfm/training/mapper/TAppCheckMapper.xml
Normal file
@@ -0,0 +1,186 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="cn.wepact.dfm.training.mapper.TAppCheckMapper">
|
||||
<resultMap id="BaseResultMap" type="cn.wepact.dfm.training.dto.entity.TAppCheck">
|
||||
<id column="id" jdbcType="BIGINT" property="id" />
|
||||
<result column="org_code" jdbcType="VARCHAR" property="orgCode" />
|
||||
<result column="degree" jdbcType="VARCHAR" property="degree" />
|
||||
<result column="level" jdbcType="VARCHAR" property="level" />
|
||||
<result column="s_year" jdbcType="INTEGER" property="sYear" />
|
||||
<result column="p_year" jdbcType="INTEGER" property="pYear" />
|
||||
<result column="jx" jdbcType="INTEGER" property="jx" />
|
||||
<result column="updated_at" jdbcType="TIMESTAMP" property="updatedAt" />
|
||||
<result column="updated_by" jdbcType="VARCHAR" property="updatedBy" />
|
||||
<result column="created_at" jdbcType="TIMESTAMP" property="createdAt" />
|
||||
<result column="created_by" jdbcType="VARCHAR" property="createdBy" />
|
||||
<result column="del_flag" jdbcType="VARCHAR" property="delFlag" />
|
||||
</resultMap>
|
||||
<sql id="Base_Column_List">
|
||||
id, org_code, `degree`, `level`, s_year, p_year, jx, updated_at, updated_by, created_at,
|
||||
created_by, del_flag
|
||||
</sql>
|
||||
<select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
|
||||
select
|
||||
<include refid="Base_Column_List" />
|
||||
from t_app_check
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</select>
|
||||
<select id="selectByConditions" resultMap="BaseResultMap"
|
||||
parameterType="cn.wepact.dfm.training.dto.entity.TAppCheck">
|
||||
select
|
||||
<include refid="Base_Column_List" />
|
||||
from t_app_check
|
||||
where
|
||||
del_flag='0'
|
||||
<if test="param.orgCode != null">
|
||||
and org_code = #{param.orgCode,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="param.degree != null">
|
||||
and `degree` = #{param.degree,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="param.level != null">
|
||||
and `level` = #{param.level,jdbcType=VARCHAR}
|
||||
</if>
|
||||
</select>
|
||||
<delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
|
||||
delete from t_app_check
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</delete>
|
||||
<insert id="insert" keyColumn="id" keyProperty="id" parameterType="cn.wepact.dfm.training.dto.entity.TAppCheck" useGeneratedKeys="true">
|
||||
insert into t_app_check (org_code, `degree`, `level`,
|
||||
s_year, p_year, jx, updated_at,
|
||||
updated_by, created_at, created_by,
|
||||
del_flag)
|
||||
values (#{orgCode,jdbcType=VARCHAR}, #{degree,jdbcType=VARCHAR}, #{level,jdbcType=VARCHAR},
|
||||
#{sYear,jdbcType=INTEGER}, #{pYear,jdbcType=INTEGER}, #{jx,jdbcType=INTEGER}, #{updatedAt,jdbcType=TIMESTAMP},
|
||||
#{updatedBy,jdbcType=VARCHAR}, #{createdAt,jdbcType=TIMESTAMP}, #{createdBy,jdbcType=VARCHAR},
|
||||
#{delFlag,jdbcType=VARCHAR})
|
||||
</insert>
|
||||
<insert id="insertSelective" keyColumn="id" keyProperty="id" parameterType="cn.wepact.dfm.training.dto.entity.TAppCheck" useGeneratedKeys="true">
|
||||
insert into t_app_check
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
<if test="orgCode != null">
|
||||
org_code,
|
||||
</if>
|
||||
<if test="degree != null">
|
||||
`degree`,
|
||||
</if>
|
||||
<if test="level != null">
|
||||
`level`,
|
||||
</if>
|
||||
<if test="sYear != null">
|
||||
s_year,
|
||||
</if>
|
||||
<if test="pYear != null">
|
||||
p_year,
|
||||
</if>
|
||||
<if test="jx != null">
|
||||
jx,
|
||||
</if>
|
||||
<if test="updatedAt != null">
|
||||
updated_at,
|
||||
</if>
|
||||
<if test="updatedBy != null">
|
||||
updated_by,
|
||||
</if>
|
||||
<if test="createdAt != null">
|
||||
created_at,
|
||||
</if>
|
||||
<if test="createdBy != null">
|
||||
created_by,
|
||||
</if>
|
||||
<if test="delFlag != null">
|
||||
del_flag,
|
||||
</if>
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="orgCode != null">
|
||||
#{orgCode,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="degree != null">
|
||||
#{degree,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="level != null">
|
||||
#{level,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="sYear != null">
|
||||
#{sYear,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="pYear != null">
|
||||
#{pYear,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="jx != null">
|
||||
#{jx,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="updatedAt != null">
|
||||
#{updatedAt,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="updatedBy != null">
|
||||
#{updatedBy,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="createdAt != null">
|
||||
#{createdAt,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="createdBy != null">
|
||||
#{createdBy,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="delFlag != null">
|
||||
#{delFlag,jdbcType=VARCHAR},
|
||||
</if>
|
||||
</trim>
|
||||
</insert>
|
||||
<update id="updateByPrimaryKeySelective" parameterType="cn.wepact.dfm.training.dto.entity.TAppCheck">
|
||||
update t_app_check
|
||||
<set>
|
||||
<if test="orgCode != null">
|
||||
org_code = #{orgCode,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="degree != null">
|
||||
`degree` = #{degree,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="level != null">
|
||||
`level` = #{level,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="sYear != null">
|
||||
s_year = #{sYear,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="pYear != null">
|
||||
p_year = #{pYear,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="jx != null">
|
||||
jx = #{jx,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="updatedAt != null">
|
||||
updated_at = #{updatedAt,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="updatedBy != null">
|
||||
updated_by = #{updatedBy,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="createdAt != null">
|
||||
created_at = #{createdAt,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="createdBy != null">
|
||||
created_by = #{createdBy,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="delFlag != null">
|
||||
del_flag = #{delFlag,jdbcType=VARCHAR},
|
||||
</if>
|
||||
</set>
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</update>
|
||||
<update id="updateByPrimaryKey" parameterType="cn.wepact.dfm.training.dto.entity.TAppCheck">
|
||||
update t_app_check
|
||||
set org_code = #{orgCode,jdbcType=VARCHAR},
|
||||
`degree` = #{degree,jdbcType=VARCHAR},
|
||||
`level` = #{level,jdbcType=VARCHAR},
|
||||
s_year = #{sYear,jdbcType=INTEGER},
|
||||
p_year = #{pYear,jdbcType=INTEGER},
|
||||
jx = #{jx,jdbcType=INTEGER},
|
||||
updated_at = #{updatedAt,jdbcType=TIMESTAMP},
|
||||
updated_by = #{updatedBy,jdbcType=VARCHAR},
|
||||
created_at = #{createdAt,jdbcType=TIMESTAMP},
|
||||
created_by = #{createdBy,jdbcType=VARCHAR},
|
||||
del_flag = #{delFlag,jdbcType=VARCHAR}
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</update>
|
||||
</mapper>
|
||||
@@ -0,0 +1,15 @@
|
||||
package cn.wepact.dfm.training.mapper;
|
||||
|
||||
import cn.wepact.dfm.training.dto.entity.TDictionary;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* TDictionaryMapper继承基类
|
||||
*/
|
||||
@Mapper
|
||||
public interface TDictionaryMapper extends MyBatisBaseMapper<TDictionary, Long> {
|
||||
List<TDictionary> selectByCondition(TDictionary tDictionary);
|
||||
}
|
||||
@@ -0,0 +1,178 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="cn.wepact.dfm.training.mapper.TDictionaryMapper">
|
||||
<resultMap id="BaseResultMap" type="cn.wepact.dfm.training.dto.entity.TDictionary">
|
||||
<id column="id" jdbcType="BIGINT" property="id" />
|
||||
<result column="org_code" jdbcType="VARCHAR" property="orgCode" />
|
||||
<result column="type" jdbcType="VARCHAR" property="type" />
|
||||
<result column="code" jdbcType="VARCHAR" property="code" />
|
||||
<result column="value" jdbcType="VARCHAR" property="value" />
|
||||
<result column="version" jdbcType="INTEGER" property="version" />
|
||||
<result column="updated_at" jdbcType="TIMESTAMP" property="updatedAt" />
|
||||
<result column="updated_by" jdbcType="VARCHAR" property="updatedBy" />
|
||||
<result column="created_at" jdbcType="TIMESTAMP" property="createdAt" />
|
||||
<result column="created_by" jdbcType="VARCHAR" property="createdBy" />
|
||||
<result column="del_flag" jdbcType="VARCHAR" property="delFlag" />
|
||||
</resultMap>
|
||||
<sql id="Base_Column_List">
|
||||
id, org_code, `type`, code, `value`, version, updated_at, updated_by, created_at,
|
||||
created_by, del_flag
|
||||
</sql>
|
||||
<select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
|
||||
select
|
||||
<include refid="Base_Column_List" />
|
||||
from t_dictionary
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</select>
|
||||
<select id="selectByCondition" resultMap="BaseResultMap">
|
||||
select
|
||||
<include refid="Base_Column_List" />
|
||||
from
|
||||
t_dictionary
|
||||
where
|
||||
del_flag=0
|
||||
<if test="orgCode != null">
|
||||
and org_code = #{orgCode}
|
||||
</if>
|
||||
<if test="type != null">
|
||||
and `type` = #{type}
|
||||
</if>
|
||||
<if test="code != null">
|
||||
and code = #{code}
|
||||
</if>
|
||||
<if test="version != null">
|
||||
and version = #{version}
|
||||
</if>
|
||||
</select>
|
||||
<delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
|
||||
delete from t_dictionary
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</delete>
|
||||
<insert id="insert" keyColumn="id" keyProperty="id" parameterType="cn.wepact.dfm.training.dto.entity.TDictionary" useGeneratedKeys="true">
|
||||
insert into t_dictionary (org_code, `type`, code,
|
||||
`value`, version, updated_at,
|
||||
updated_by, created_at, created_by,
|
||||
del_flag)
|
||||
values (#{orgCode,jdbcType=VARCHAR}, #{type,jdbcType=VARCHAR}, #{code,jdbcType=VARCHAR},
|
||||
#{value,jdbcType=VARCHAR}, #{version,jdbcType=INTEGER}, #{updatedAt,jdbcType=TIMESTAMP},
|
||||
#{updatedBy,jdbcType=VARCHAR}, #{createdAt,jdbcType=TIMESTAMP}, #{createdBy,jdbcType=VARCHAR},
|
||||
#{delFlag,jdbcType=VARCHAR})
|
||||
</insert>
|
||||
<insert id="insertSelective" keyColumn="id" keyProperty="id" parameterType="cn.wepact.dfm.training.dto.entity.TDictionary" useGeneratedKeys="true">
|
||||
insert into t_dictionary
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
<if test="orgCode != null">
|
||||
org_code,
|
||||
</if>
|
||||
<if test="type != null">
|
||||
`type`,
|
||||
</if>
|
||||
<if test="code != null">
|
||||
code,
|
||||
</if>
|
||||
<if test="value != null">
|
||||
`value`,
|
||||
</if>
|
||||
<if test="version != null">
|
||||
version,
|
||||
</if>
|
||||
<if test="updatedAt != null">
|
||||
updated_at,
|
||||
</if>
|
||||
<if test="updatedBy != null">
|
||||
updated_by,
|
||||
</if>
|
||||
<if test="createdAt != null">
|
||||
created_at,
|
||||
</if>
|
||||
<if test="createdBy != null">
|
||||
created_by,
|
||||
</if>
|
||||
<if test="delFlag != null">
|
||||
del_flag,
|
||||
</if>
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="orgCode != null">
|
||||
#{orgCode,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="type != null">
|
||||
#{type,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="code != null">
|
||||
#{code,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="value != null">
|
||||
#{value,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="version != null">
|
||||
#{version,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="updatedAt != null">
|
||||
#{updatedAt,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="updatedBy != null">
|
||||
#{updatedBy,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="createdAt != null">
|
||||
#{createdAt,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="createdBy != null">
|
||||
#{createdBy,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="delFlag != null">
|
||||
#{delFlag,jdbcType=VARCHAR},
|
||||
</if>
|
||||
</trim>
|
||||
</insert>
|
||||
<update id="updateByPrimaryKeySelective" parameterType="cn.wepact.dfm.training.dto.entity.TDictionary">
|
||||
update t_dictionary
|
||||
<set>
|
||||
<if test="orgCode != null">
|
||||
org_code = #{orgCode,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="type != null">
|
||||
`type` = #{type,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="code != null">
|
||||
code = #{code,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="value != null">
|
||||
`value` = #{value,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="version != null">
|
||||
version = #{version,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="updatedAt != null">
|
||||
updated_at = #{updatedAt,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="updatedBy != null">
|
||||
updated_by = #{updatedBy,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="createdAt != null">
|
||||
created_at = #{createdAt,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="createdBy != null">
|
||||
created_by = #{createdBy,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="delFlag != null">
|
||||
del_flag = #{delFlag,jdbcType=VARCHAR},
|
||||
</if>
|
||||
</set>
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</update>
|
||||
<update id="updateByPrimaryKey" parameterType="cn.wepact.dfm.training.dto.entity.TDictionary">
|
||||
update t_dictionary
|
||||
set org_code = #{orgCode,jdbcType=VARCHAR},
|
||||
`type` = #{type,jdbcType=VARCHAR},
|
||||
code = #{code,jdbcType=VARCHAR},
|
||||
`value` = #{value,jdbcType=VARCHAR},
|
||||
version = #{version,jdbcType=INTEGER},
|
||||
updated_at = #{updatedAt,jdbcType=TIMESTAMP},
|
||||
updated_by = #{updatedBy,jdbcType=VARCHAR},
|
||||
created_at = #{createdAt,jdbcType=TIMESTAMP},
|
||||
created_by = #{createdBy,jdbcType=VARCHAR},
|
||||
del_flag = #{delFlag,jdbcType=VARCHAR}
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</update>
|
||||
</mapper>
|
||||
@@ -0,0 +1,17 @@
|
||||
package cn.wepact.dfm.training.mapper;
|
||||
|
||||
import cn.wepact.dfm.training.dto.entity.TEvidenceSubmission;
|
||||
import cn.wepact.dfm.training.dto.entity.TProfessionalFeedback;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* TEvidenceSubmissionMapper继承基类
|
||||
*/
|
||||
@Mapper
|
||||
public interface TEvidenceSubmissionMapper extends MyBatisBaseMapper<TEvidenceSubmission, Long> {
|
||||
|
||||
List<TEvidenceSubmission> selectByCondition(TEvidenceSubmission condition);
|
||||
}
|
||||
@@ -0,0 +1,252 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="cn.wepact.dfm.training.mapper.TEvidenceSubmissionMapper">
|
||||
<resultMap id="BaseResultMap" type="cn.wepact.dfm.training.dto.entity.TEvidenceSubmission">
|
||||
<id column="id" jdbcType="BIGINT" property="id" />
|
||||
<result column="user_id" jdbcType="BIGINT" property="userId" />
|
||||
<result column="org_code" jdbcType="BIGINT" property="orgCode" />
|
||||
<result column="evidence_no" jdbcType="VARCHAR" property="evidenceNo" />
|
||||
<result column="evidence_name" jdbcType="VARCHAR" property="evidenceName" />
|
||||
<result column="evidence_witness" jdbcType="VARCHAR" property="evidenceWitness" />
|
||||
<result column="evidence_attachment" jdbcType="VARCHAR" property="evidenceAttachment" />
|
||||
<result column="upload_date" jdbcType="TIMESTAMP" property="uploadDate" />
|
||||
<result column="created_at" jdbcType="TIMESTAMP" property="createdAt" />
|
||||
<result column="created_by" jdbcType="VARCHAR" property="createdBy" />
|
||||
<result column="updated_at" jdbcType="TIMESTAMP" property="updatedAt" />
|
||||
<result column="updated_by" jdbcType="VARCHAR" property="updatedBy" />
|
||||
<result column="del_flag" jdbcType="VARCHAR" property="delFlag" />
|
||||
<result column="evidence_description" jdbcType="LONGVARCHAR" property="evidenceDescription" />
|
||||
<result column="remarks" jdbcType="LONGVARCHAR" property="remarks" />
|
||||
</resultMap>
|
||||
<sql id="Base_Column_List">
|
||||
id, user_id, org_code, evidence_no, evidence_name, evidence_witness, evidence_attachment,
|
||||
upload_date, created_at, created_by, updated_at, updated_by, del_flag, evidence_description, remarks
|
||||
</sql>
|
||||
<select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
|
||||
select
|
||||
<include refid="Base_Column_List" />
|
||||
from t_evidence_submission
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</select>
|
||||
<delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
|
||||
delete from t_evidence_submission
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</delete>
|
||||
<insert id="insert" keyColumn="id" keyProperty="id" parameterType="cn.wepact.dfm.training.dto.entity.TEvidenceSubmission" useGeneratedKeys="true">
|
||||
insert into t_evidence_submission (user_id, org_code, evidence_no,
|
||||
evidence_name, evidence_witness, evidence_attachment,
|
||||
upload_date, created_at, created_by,
|
||||
updated_at, updated_by, del_flag,
|
||||
evidence_description, remarks)
|
||||
values (#{userId,jdbcType=BIGINT}, #{orgCode,jdbcType=VARCHAR}, #{evidenceNo,jdbcType=VARCHAR},
|
||||
#{evidenceName,jdbcType=VARCHAR}, #{evidenceWitness,jdbcType=VARCHAR}, #{evidenceAttachment,jdbcType=VARCHAR},
|
||||
#{uploadDate,jdbcType=TIMESTAMP}, #{createdAt,jdbcType=TIMESTAMP}, #{createdBy,jdbcType=VARCHAR},
|
||||
#{updatedAt,jdbcType=TIMESTAMP}, #{updatedBy,jdbcType=VARCHAR}, #{delFlag,jdbcType=VARCHAR},
|
||||
#{evidenceDescription,jdbcType=LONGVARCHAR}, #{remarks,jdbcType=LONGVARCHAR})
|
||||
</insert>
|
||||
<insert id="insertSelective" keyColumn="id" keyProperty="id" parameterType="cn.wepact.dfm.training.dto.entity.TEvidenceSubmission" useGeneratedKeys="true">
|
||||
insert into t_evidence_submission
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
<if test="userId != null">
|
||||
user_id,
|
||||
</if>
|
||||
<if test="orgCode != null">
|
||||
org_code,
|
||||
</if>
|
||||
<if test="evidenceNo != null">
|
||||
evidence_no,
|
||||
</if>
|
||||
<if test="evidenceName != null">
|
||||
evidence_name,
|
||||
</if>
|
||||
<if test="evidenceWitness != null">
|
||||
evidence_witness,
|
||||
</if>
|
||||
<if test="evidenceAttachment != null">
|
||||
evidence_attachment,
|
||||
</if>
|
||||
<if test="uploadDate != null">
|
||||
upload_date,
|
||||
</if>
|
||||
<if test="createdAt != null">
|
||||
created_at,
|
||||
</if>
|
||||
<if test="createdBy != null">
|
||||
created_by,
|
||||
</if>
|
||||
<if test="updatedAt != null">
|
||||
updated_at,
|
||||
</if>
|
||||
<if test="updatedBy != null">
|
||||
updated_by,
|
||||
</if>
|
||||
<if test="delFlag != null">
|
||||
del_flag,
|
||||
</if>
|
||||
<if test="evidenceDescription != null">
|
||||
evidence_description,
|
||||
</if>
|
||||
<if test="remarks != null">
|
||||
remarks,
|
||||
</if>
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="userId != null">
|
||||
#{userId,jdbcType=BIGINT},
|
||||
</if>
|
||||
<if test="orgCode != null">
|
||||
#{orgCode,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="evidenceNo != null">
|
||||
#{evidenceNo,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="evidenceName != null">
|
||||
#{evidenceName,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="evidenceWitness != null">
|
||||
#{evidenceWitness,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="evidenceAttachment != null">
|
||||
#{evidenceAttachment,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="uploadDate != null">
|
||||
#{uploadDate,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="createdAt != null">
|
||||
#{createdAt,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="createdBy != null">
|
||||
#{createdBy,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="updatedAt != null">
|
||||
#{updatedAt,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="updatedBy != null">
|
||||
#{updatedBy,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="delFlag != null">
|
||||
#{delFlag,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="evidenceDescription != null">
|
||||
#{evidenceDescription,jdbcType=LONGVARCHAR},
|
||||
</if>
|
||||
<if test="remarks != null">
|
||||
#{remarks,jdbcType=LONGVARCHAR},
|
||||
</if>
|
||||
</trim>
|
||||
</insert>
|
||||
<update id="updateByPrimaryKeySelective" parameterType="cn.wepact.dfm.training.dto.entity.TEvidenceSubmission">
|
||||
update t_evidence_submission
|
||||
<set>
|
||||
<if test="userId != null">
|
||||
user_id = #{userId,jdbcType=BIGINT},
|
||||
</if>
|
||||
<if test="orgCode != null">
|
||||
org_code = #{orgCode,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="evidenceNo != null">
|
||||
evidence_no = #{evidenceNo,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="evidenceName != null">
|
||||
evidence_name = #{evidenceName,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="evidenceWitness != null">
|
||||
evidence_witness = #{evidenceWitness,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="evidenceAttachment != null">
|
||||
evidence_attachment = #{evidenceAttachment,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="uploadDate != null">
|
||||
upload_date = #{uploadDate,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="createdAt != null">
|
||||
created_at = #{createdAt,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="createdBy != null">
|
||||
created_by = #{createdBy,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="updatedAt != null">
|
||||
updated_at = #{updatedAt,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="updatedBy != null">
|
||||
updated_by = #{updatedBy,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="delFlag != null">
|
||||
del_flag = #{delFlag,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="evidenceDescription != null">
|
||||
evidence_description = #{evidenceDescription,jdbcType=LONGVARCHAR},
|
||||
</if>
|
||||
<if test="remarks != null">
|
||||
remarks = #{remarks,jdbcType=LONGVARCHAR},
|
||||
</if>
|
||||
</set>
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</update>
|
||||
<!-- <update id="updateByPrimaryKey" parameterType="cn.wepact.dfm.training.dto.entity.TEvidenceSubmission">-->
|
||||
<!-- update t_evidence_submission-->
|
||||
<!-- set user_id = #{userId,jdbcType=BIGINT},-->
|
||||
<!-- org_code = #{orgCode,jdbcType=VARCHAR},-->
|
||||
<!-- evidence_no = #{evidenceNo,jdbcType=VARCHAR},-->
|
||||
<!-- evidence_name = #{evidenceName,jdbcType=VARCHAR},-->
|
||||
<!-- evidence_witness = #{evidenceWitness,jdbcType=VARCHAR},-->
|
||||
<!-- evidence_attachment = #{evidenceAttachment,jdbcType=VARCHAR},-->
|
||||
<!-- upload_date = #{uploadDate,jdbcType=TIMESTAMP},-->
|
||||
<!-- created_at = #{createdAt,jdbcType=TIMESTAMP},-->
|
||||
<!-- created_by = #{createdBy,jdbcType=VARCHAR},-->
|
||||
<!-- updated_at = #{updatedAt,jdbcType=TIMESTAMP},-->
|
||||
<!-- updated_by = #{updatedBy,jdbcType=VARCHAR},-->
|
||||
<!-- del_flag = #{delFlag,jdbcType=VARCHAR},-->
|
||||
<!-- evidence_description = #{evidenceDescription,jdbcType=LONGVARCHAR},-->
|
||||
<!-- remarks = #{remarks,jdbcType=LONGVARCHAR}-->
|
||||
<!-- where id = #{id,jdbcType=BIGINT}-->
|
||||
<!-- </update>-->
|
||||
<update id="updateByPrimaryKey" parameterType="cn.wepact.dfm.training.dto.entity.TEvidenceSubmission">
|
||||
update t_evidence_submission
|
||||
set user_id = #{userId,jdbcType=BIGINT},
|
||||
org_code = #{orgCode,jdbcType=VARCHAR},
|
||||
evidence_no = #{evidenceNo,jdbcType=VARCHAR},
|
||||
evidence_name = #{evidenceName,jdbcType=VARCHAR},
|
||||
evidence_witness = #{evidenceWitness,jdbcType=VARCHAR},
|
||||
evidence_attachment = #{evidenceAttachment,jdbcType=VARCHAR},
|
||||
upload_date = #{uploadDate,jdbcType=TIMESTAMP},
|
||||
created_at = #{createdAt,jdbcType=TIMESTAMP},
|
||||
created_by = #{createdBy,jdbcType=VARCHAR},
|
||||
updated_at = #{updatedAt,jdbcType=TIMESTAMP},
|
||||
updated_by = #{updatedBy,jdbcType=VARCHAR},
|
||||
del_flag = #{delFlag,jdbcType=VARCHAR}
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</update>
|
||||
|
||||
<select id="selectByCondition" resultType="cn.wepact.dfm.training.dto.entity.TEvidenceSubmission">
|
||||
SELECT
|
||||
id,
|
||||
user_id AS userId,
|
||||
org_code AS orgCode,
|
||||
evidence_no AS evidenceNo,
|
||||
evidence_name AS evidenceName,
|
||||
evidence_witness AS evidenceWitness,
|
||||
evidence_attachment AS evidenceAttachment,
|
||||
created_at AS createdAt,
|
||||
created_by AS createdBy,
|
||||
updated_at AS updatedAt,
|
||||
updated_by AS updatedBy,
|
||||
remarks
|
||||
FROM
|
||||
t_evidence_submission
|
||||
WHERE
|
||||
del_flag =0
|
||||
<if test="orgCode != null">
|
||||
and org_code = #{orgCode,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="userId != null">
|
||||
and user_id = #{userId,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="evidenceNo != null and evidenceNo !=''">
|
||||
and evidence_no = #{evidenceNo,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="evidenceName != null and evidenceName !=''">
|
||||
and evidence_name like CONCAT("%", #{evidenceName,jdbcType=VARCHAR}, "%")
|
||||
</if>
|
||||
</select>
|
||||
</mapper>
|
||||
17
src/main/java/cn/wepact/dfm/training/mapper/TOrgMapper.java
Normal file
17
src/main/java/cn/wepact/dfm/training/mapper/TOrgMapper.java
Normal file
@@ -0,0 +1,17 @@
|
||||
package cn.wepact.dfm.training.mapper;
|
||||
|
||||
import cn.wepact.dfm.training.dto.entity.TOrg;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* TOrgMapper继承基类
|
||||
*/
|
||||
@Mapper
|
||||
public interface TOrgMapper extends MyBatisBaseMapper<TOrg, Long> {
|
||||
TOrg selectByCode(@Param("code") String code);
|
||||
|
||||
List<TOrg> selectAll();
|
||||
}
|
||||
144
src/main/java/cn/wepact/dfm/training/mapper/TOrgMapper.xml
Normal file
144
src/main/java/cn/wepact/dfm/training/mapper/TOrgMapper.xml
Normal file
@@ -0,0 +1,144 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="cn.wepact.dfm.training.mapper.TOrgMapper">
|
||||
<resultMap id="BaseResultMap" type="cn.wepact.dfm.training.dto.entity.TOrg">
|
||||
<id column="id" jdbcType="BIGINT" property="id" />
|
||||
<result column="name" jdbcType="VARCHAR" property="name" />
|
||||
<result column="code" jdbcType="VARCHAR" property="code" />
|
||||
<result column="short_name" jdbcType="VARCHAR" property="shortName" />
|
||||
<result column="updated_at" jdbcType="TIMESTAMP" property="updatedAt" />
|
||||
<result column="updated_by" jdbcType="VARCHAR" property="updatedBy" />
|
||||
<result column="created_at" jdbcType="TIMESTAMP" property="createdAt" />
|
||||
<result column="created_by" jdbcType="VARCHAR" property="createdBy" />
|
||||
<result column="del_flag" jdbcType="VARCHAR" property="delFlag" />
|
||||
</resultMap>
|
||||
<sql id="Base_Column_List">
|
||||
id, `name`, code, short_name, updated_at, updated_by, created_at, created_by, del_flag
|
||||
</sql>
|
||||
<select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
|
||||
select
|
||||
<include refid="Base_Column_List" />
|
||||
from t_org
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</select>
|
||||
<select id="selectByCode" resultMap="BaseResultMap"
|
||||
parameterType="java.lang.String">
|
||||
select
|
||||
<include refid="Base_Column_List" />
|
||||
from t_org
|
||||
where code = #{code}
|
||||
</select>
|
||||
<select id="selectAll" resultMap="BaseResultMap">
|
||||
select
|
||||
<include refid="Base_Column_List" />
|
||||
from t_org
|
||||
where del_flag = '0'
|
||||
</select>
|
||||
<delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
|
||||
delete from t_org
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</delete>
|
||||
<insert id="insert" keyColumn="id" keyProperty="id" parameterType="cn.wepact.dfm.training.dto.entity.TOrg" useGeneratedKeys="true">
|
||||
insert into t_org (`name`, code, short_name, updated_at,
|
||||
updated_by, created_at, created_by, del_flag)
|
||||
values (#{name,jdbcType=VARCHAR}, #{code,jdbcType=VARCHAR}, #{shortName,jdbcType=VARCHAR}, #{updatedAt,jdbcType=TIMESTAMP},
|
||||
#{updatedBy,jdbcType=VARCHAR}, #{createdAt,jdbcType=TIMESTAMP}, #{createdBy,jdbcType=VARCHAR}, #{delFlag,jdbcType=VARCHAR})
|
||||
</insert>
|
||||
<insert id="insertSelective" keyColumn="id" keyProperty="id" parameterType="cn.wepact.dfm.training.dto.entity.TOrg" useGeneratedKeys="true">
|
||||
insert into t_org
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
<if test="name != null">
|
||||
`name`,
|
||||
</if>
|
||||
<if test="code != null">
|
||||
code,
|
||||
</if>
|
||||
<if test="shortName != null">
|
||||
short_name,
|
||||
</if>
|
||||
<if test="updatedAt != null">
|
||||
updated_at,
|
||||
</if>
|
||||
<if test="updatedBy != null">
|
||||
updated_by,
|
||||
</if>
|
||||
<if test="createdAt != null">
|
||||
created_at,
|
||||
</if>
|
||||
<if test="createdBy != null">
|
||||
created_by,
|
||||
</if>
|
||||
<if test="delFlag != null">
|
||||
del_flag,
|
||||
</if>
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="name != null">
|
||||
#{name,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="code != null">
|
||||
#{code,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="shortName != null">
|
||||
#{shortName,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="updatedAt != null">
|
||||
#{updatedAt,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="updatedBy != null">
|
||||
#{updatedBy,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="createdAt != null">
|
||||
#{createdAt,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="createdBy != null">
|
||||
#{createdBy,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="delFlag != null">
|
||||
#{delFlag,jdbcType=VARCHAR},
|
||||
</if>
|
||||
</trim>
|
||||
</insert>
|
||||
<update id="updateByPrimaryKeySelective" parameterType="cn.wepact.dfm.training.dto.entity.TOrg">
|
||||
update t_org
|
||||
<set>
|
||||
<if test="name != null">
|
||||
`name` = #{name,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="code != null">
|
||||
code = #{code,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="shortName != null">
|
||||
short_name = #{shortName,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="updatedAt != null">
|
||||
updated_at = #{updatedAt,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="updatedBy != null">
|
||||
updated_by = #{updatedBy,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="createdAt != null">
|
||||
created_at = #{createdAt,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="createdBy != null">
|
||||
created_by = #{createdBy,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="delFlag != null">
|
||||
del_flag = #{delFlag,jdbcType=VARCHAR},
|
||||
</if>
|
||||
</set>
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</update>
|
||||
<update id="updateByPrimaryKey" parameterType="cn.wepact.dfm.training.dto.entity.TOrg">
|
||||
update t_org
|
||||
set `name` = #{name,jdbcType=VARCHAR},
|
||||
code = #{code,jdbcType=VARCHAR},
|
||||
short_name = #{shortName,jdbcType=VARCHAR},
|
||||
updated_at = #{updatedAt,jdbcType=TIMESTAMP},
|
||||
updated_by = #{updatedBy,jdbcType=VARCHAR},
|
||||
created_at = #{createdAt,jdbcType=TIMESTAMP},
|
||||
created_by = #{createdBy,jdbcType=VARCHAR},
|
||||
del_flag = #{delFlag,jdbcType=VARCHAR}
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</update>
|
||||
</mapper>
|
||||
@@ -0,0 +1,15 @@
|
||||
package cn.wepact.dfm.training.mapper;
|
||||
|
||||
import cn.wepact.dfm.training.dto.entity.TPerformanceRule;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* TPerformanceRuleMapper继承基类
|
||||
*/
|
||||
@Repository
|
||||
public interface TPerformanceRuleMapper extends MyBatisBaseDao<TPerformanceRule, Long> {
|
||||
List<TPerformanceRule> selectByConditions(@Param("param") TPerformanceRule param);
|
||||
}
|
||||
@@ -0,0 +1,144 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="cn.wepact.dfm.training.mapper.TPerformanceRuleMapper">
|
||||
<resultMap id="BaseResultMap" type="cn.wepact.dfm.training.dto.entity.TPerformanceRule">
|
||||
<id column="id" jdbcType="BIGINT" property="id" />
|
||||
<result column="org_code" jdbcType="VARCHAR" property="orgCode" />
|
||||
<result column="jx_name" jdbcType="VARCHAR" property="jxName" />
|
||||
<result column="score" jdbcType="INTEGER" property="score" />
|
||||
<result column="updated_at" jdbcType="TIMESTAMP" property="updatedAt" />
|
||||
<result column="updated_by" jdbcType="VARCHAR" property="updatedBy" />
|
||||
<result column="created_at" jdbcType="TIMESTAMP" property="createdAt" />
|
||||
<result column="created_by" jdbcType="VARCHAR" property="createdBy" />
|
||||
<result column="del_flag" jdbcType="VARCHAR" property="delFlag" />
|
||||
</resultMap>
|
||||
<sql id="Base_Column_List">
|
||||
id, org_code, jx_name, score, updated_at, updated_by, created_at, created_by, del_flag
|
||||
</sql>
|
||||
<select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
|
||||
select
|
||||
<include refid="Base_Column_List" />
|
||||
from t_performance_rule
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</select>
|
||||
<select id="selectByConditions" resultMap="BaseResultMap"
|
||||
parameterType="cn.wepact.dfm.training.dto.entity.TPerformanceRule">
|
||||
select
|
||||
<include refid="Base_Column_List" />
|
||||
from t_performance_rule
|
||||
where
|
||||
del_flag='0'
|
||||
<if test="param.orgCode != null">
|
||||
and org_code = #{param.orgCode,jdbcType=VARCHAR}
|
||||
</if>
|
||||
</select>
|
||||
<delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
|
||||
delete from t_performance_rule
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</delete>
|
||||
<insert id="insert" keyColumn="id" keyProperty="id" parameterType="cn.wepact.dfm.training.dto.entity.TPerformanceRule" useGeneratedKeys="true">
|
||||
insert into t_performance_rule (org_code, jx_name, score,
|
||||
updated_at, updated_by, created_at,
|
||||
created_by, del_flag)
|
||||
values (#{orgCode,jdbcType=VARCHAR}, #{jxName,jdbcType=VARCHAR}, #{score,jdbcType=INTEGER},
|
||||
#{updatedAt,jdbcType=TIMESTAMP}, #{updatedBy,jdbcType=VARCHAR}, #{createdAt,jdbcType=TIMESTAMP},
|
||||
#{createdBy,jdbcType=VARCHAR}, #{delFlag,jdbcType=VARCHAR})
|
||||
</insert>
|
||||
<insert id="insertSelective" keyColumn="id" keyProperty="id" parameterType="cn.wepact.dfm.training.dto.entity.TPerformanceRule" useGeneratedKeys="true">
|
||||
insert into t_performance_rule
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
<if test="orgCode != null">
|
||||
org_code,
|
||||
</if>
|
||||
<if test="jxName != null">
|
||||
jx_name,
|
||||
</if>
|
||||
<if test="score != null">
|
||||
score,
|
||||
</if>
|
||||
<if test="updatedAt != null">
|
||||
updated_at,
|
||||
</if>
|
||||
<if test="updatedBy != null">
|
||||
updated_by,
|
||||
</if>
|
||||
<if test="createdAt != null">
|
||||
created_at,
|
||||
</if>
|
||||
<if test="createdBy != null">
|
||||
created_by,
|
||||
</if>
|
||||
<if test="delFlag != null">
|
||||
del_flag,
|
||||
</if>
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="orgCode != null">
|
||||
#{orgCode,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="jxName != null">
|
||||
#{jxName,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="score != null">
|
||||
#{score,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="updatedAt != null">
|
||||
#{updatedAt,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="updatedBy != null">
|
||||
#{updatedBy,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="createdAt != null">
|
||||
#{createdAt,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="createdBy != null">
|
||||
#{createdBy,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="delFlag != null">
|
||||
#{delFlag,jdbcType=VARCHAR},
|
||||
</if>
|
||||
</trim>
|
||||
</insert>
|
||||
<update id="updateByPrimaryKeySelective" parameterType="cn.wepact.dfm.training.dto.entity.TPerformanceRule">
|
||||
update t_performance_rule
|
||||
<set>
|
||||
<if test="orgCode != null">
|
||||
org_code = #{orgCode,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="jxName != null">
|
||||
jx_name = #{jxName,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="score != null">
|
||||
score = #{score,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="updatedAt != null">
|
||||
updated_at = #{updatedAt,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="updatedBy != null">
|
||||
updated_by = #{updatedBy,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="createdAt != null">
|
||||
created_at = #{createdAt,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="createdBy != null">
|
||||
created_by = #{createdBy,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="delFlag != null">
|
||||
del_flag = #{delFlag,jdbcType=VARCHAR},
|
||||
</if>
|
||||
</set>
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</update>
|
||||
<update id="updateByPrimaryKey" parameterType="cn.wepact.dfm.training.dto.entity.TPerformanceRule">
|
||||
update t_performance_rule
|
||||
set org_code = #{orgCode,jdbcType=VARCHAR},
|
||||
jx_name = #{jxName,jdbcType=VARCHAR},
|
||||
score = #{score,jdbcType=INTEGER},
|
||||
updated_at = #{updatedAt,jdbcType=TIMESTAMP},
|
||||
updated_by = #{updatedBy,jdbcType=VARCHAR},
|
||||
created_at = #{createdAt,jdbcType=TIMESTAMP},
|
||||
created_by = #{createdBy,jdbcType=VARCHAR},
|
||||
del_flag = #{delFlag,jdbcType=VARCHAR}
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</update>
|
||||
</mapper>
|
||||
@@ -0,0 +1,16 @@
|
||||
package cn.wepact.dfm.training.mapper;
|
||||
|
||||
import cn.wepact.dfm.training.dto.entity.TProfessionalFeedback;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* TProfessionalFeedbackMapper继承基类
|
||||
*/
|
||||
@Mapper
|
||||
public interface TProfessionalFeedbackMapper extends MyBatisBaseMapper<TProfessionalFeedback, Long> {
|
||||
List<TProfessionalFeedback> selectByCondition(TProfessionalFeedback tProfessionalFeedback);
|
||||
|
||||
List<TProfessionalFeedback> selectWithUserInfoByCondition(TProfessionalFeedback condition);
|
||||
}
|
||||
@@ -0,0 +1,457 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="cn.wepact.dfm.training.mapper.TProfessionalFeedbackMapper">
|
||||
<resultMap id="BaseResultMap" type="cn.wepact.dfm.training.dto.entity.TProfessionalFeedback">
|
||||
<id column="id" jdbcType="BIGINT" property="id" />
|
||||
<result column="user_id" jdbcType="BIGINT" property="userId" />
|
||||
<result column="org_code" jdbcType="VARCHAR" property="orgCode" />
|
||||
<result column="category_code" jdbcType="VARCHAR" property="categoryCode" />
|
||||
<result column="define_code" jdbcType="VARCHAR" property="defineCode" />
|
||||
<result column="specific_task" jdbcType="VARCHAR" property="specificTask" />
|
||||
<result column="start_time" jdbcType="TIMESTAMP" property="startTime" />
|
||||
<result column="end_time" jdbcType="TIMESTAMP" property="endTime" />
|
||||
<result column="number" jdbcType="INTEGER" property="number" />
|
||||
<result column="unit_code" jdbcType="VARCHAR" property="unitCode" />
|
||||
<result column="initiating_department" jdbcType="VARCHAR" property="initiatingDepartment" />
|
||||
<result column="role_code" jdbcType="VARCHAR" property="roleCode" />
|
||||
<result column="level_code" jdbcType="VARCHAR" property="levelCode" />
|
||||
<result column="proof_material" jdbcType="VARCHAR" property="proofMaterial" />
|
||||
<result column="audit_status" jdbcType="VARCHAR" property="auditStatus" />
|
||||
<result column="auditor" jdbcType="VARCHAR" property="auditor" />
|
||||
<result column="audit_date" jdbcType="TIMESTAMP" property="auditDate" />
|
||||
<result column="created_at" jdbcType="TIMESTAMP" property="createdAt" />
|
||||
<result column="created_by" jdbcType="VARCHAR" property="createdBy" />
|
||||
<result column="updated_at" jdbcType="TIMESTAMP" property="updatedAt" />
|
||||
<result column="updated_by" jdbcType="VARCHAR" property="updatedBy" />
|
||||
<result column="del_flag" jdbcType="VARCHAR" property="delFlag" />
|
||||
<result column="remarks" jdbcType="LONGVARCHAR" property="remarks" />
|
||||
<result column="score" jdbcType="REAL" property="score" />
|
||||
</resultMap>
|
||||
<sql id="Base_Column_List">
|
||||
id, user_id, org_code, category_code, define_code, specific_task, start_time, end_time, `number`,
|
||||
unit_code, initiating_department, role_code, level_code, proof_material, audit_status,
|
||||
auditor, audit_date, created_at, created_by, updated_at, updated_by, del_flag,remarks,score
|
||||
</sql>
|
||||
<select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
|
||||
select
|
||||
<include refid="Base_Column_List" />
|
||||
from t_professional_feedback
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</select>
|
||||
<select id="selectByCondition" resultMap="BaseResultMap">
|
||||
SELECT
|
||||
<include refid="Base_Column_List" />
|
||||
FROM
|
||||
t_professional_feedback
|
||||
WHERE
|
||||
del_flag = 0
|
||||
<if test="orgCode != null">
|
||||
and org_code = #{orgCode,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="userId != null">
|
||||
and user_id = #{userId,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="categoryCode != null">
|
||||
and category_code = #{categoryCode,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="defineCode != null">
|
||||
and define_code = #{defineCode, jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="specificTask != null and specificTask !=''">
|
||||
and specific_task like CONCAT("%", #{specificTask,jdbcType=VARCHAR}, "%")
|
||||
</if>
|
||||
<if test="startTime != null">
|
||||
and start_time = #{startTime,jdbcType=TIMESTAMP}
|
||||
</if>
|
||||
<if test="endTime != null">
|
||||
and end_time = #{endTime,jdbcType=TIMESTAMP}
|
||||
</if>
|
||||
<if test="selectStartTime != null and selectEndTime != null">
|
||||
and end_time > #{selectStartTime,jdbcType=TIMESTAMP}
|
||||
and start_time <![CDATA[<]]> #{selectEndTime,jdbcType=TIMESTAMP}
|
||||
</if>
|
||||
<if test="number != null">
|
||||
and `number` = #{number,jdbcType=INTEGER}
|
||||
</if>
|
||||
<if test="unitCode != null">
|
||||
and unit_code = #{unitCode,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="initiatingDepartment != null">
|
||||
and initiating_department = #{initiatingDepartment,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="roleCode != null">
|
||||
and role_code = #{roleCode,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="levelCode != null">
|
||||
and level_code = #{levelCode,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="auditStatus != null">
|
||||
and audit_status = #{auditStatus,jdbcType=VARCHAR}
|
||||
</if>
|
||||
</select>
|
||||
<select id="selectWithUserInfoByCondition" resultType="cn.wepact.dfm.training.dto.entity.TProfessionalFeedback">
|
||||
SELECT
|
||||
a.id,
|
||||
a.user_id as userId,
|
||||
a.org_code as orgCode,
|
||||
a.category_code as categoryCode,
|
||||
a.define_code as defineCode,
|
||||
a.score,
|
||||
a.specific_task as specificTask,
|
||||
a.start_time as startTime,
|
||||
a.end_time as endTime,
|
||||
a.`number`,
|
||||
a.unit_code as unitCode,
|
||||
a.initiating_department as initiatingDepartment,
|
||||
a.role_code as roleCode,
|
||||
a.level_code as levelCode,
|
||||
a.proof_material as proofMaterial,
|
||||
a.audit_status as auditStatus,
|
||||
a.auditor,
|
||||
a.audit_date as auditDate,
|
||||
a.created_at as createdAt,
|
||||
a.created_by as createdBy,
|
||||
a.updated_at as updatedAt,
|
||||
a.updated_by as updatedBy,
|
||||
a.del_flag as delFlag,
|
||||
a.remarks,
|
||||
b.username,
|
||||
b.user_no as userNo
|
||||
FROM
|
||||
t_professional_feedback a left join
|
||||
t_user b on a.user_id = b.id
|
||||
WHERE
|
||||
a.del_flag = 0
|
||||
<if test="orgCode != null">
|
||||
and a.org_code = #{orgCode,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="categoryCode != null">
|
||||
and a.category_code = #{categoryCode,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test= "defineCode != null">
|
||||
and a.define_code = #{defineCode, jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="defineCodeList != null">
|
||||
<foreach collection="defineCodeList" item="item" open="and a.define_code in (" close=")" separator=",">
|
||||
#{item,jdbcType=VARCHAR}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test="specificTask != null">
|
||||
and specific_task like CONCAT("%", #{specificTask,jdbcType=VARCHAR}, "%")
|
||||
</if>
|
||||
<if test="startTime != null">
|
||||
and a.start_time = #{startTime,jdbcType=TIMESTAMP}
|
||||
</if>
|
||||
<if test="endTime != null">
|
||||
and a.end_time = #{endTime,jdbcType=TIMESTAMP}
|
||||
</if>
|
||||
<if test="number != null">
|
||||
and a.`number` = #{number,jdbcType=INTEGER}
|
||||
</if>
|
||||
<if test="unitCode != null">
|
||||
and a.unit_code = #{unitCode,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="initiatingDepartment != null">
|
||||
and a.initiating_department = #{initiatingDepartment,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="roleCode != null">
|
||||
and a.role_code = #{roleCode,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="levelCode != null">
|
||||
and a.level_code = #{levelCode,jdbcType=VARCHAR}
|
||||
</if>
|
||||
</select>
|
||||
<delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
|
||||
delete from t_professional_feedback
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</delete>
|
||||
<insert id="insert" keyColumn="id" keyProperty="id" parameterType="cn.wepact.dfm.training.dto.entity.TProfessionalFeedback" useGeneratedKeys="true">
|
||||
insert into t_professional_feedback (user_id, org_code, category_code, define_code,
|
||||
specific_task, start_time, end_time,
|
||||
`number`, unit_code, initiating_department,
|
||||
role_code, level_code, proof_material,
|
||||
audit_status, auditor, audit_date,
|
||||
created_at, created_by, updated_at,
|
||||
updated_by, del_flag, remarks,score
|
||||
)
|
||||
values (#{userId,jdbcType=BIGINT}, #{orgCode,jdbcType=VARCHAR}, #{categoryCode,jdbcType=VARCHAR}, #{defineCode, jdbcType=VARCHAR},
|
||||
#{specificTask,jdbcType=VARCHAR}, #{startTime,jdbcType=TIMESTAMP}, #{endTime,jdbcType=TIMESTAMP},
|
||||
#{number,jdbcType=INTEGER}, #{unitCode,jdbcType=VARCHAR}, #{initiatingDepartment,jdbcType=VARCHAR},
|
||||
#{roleCode,jdbcType=VARCHAR}, #{levelCode,jdbcType=VARCHAR}, #{proofMaterial,jdbcType=VARCHAR},
|
||||
#{auditStatus,jdbcType=VARCHAR}, #{auditor,jdbcType=VARCHAR}, #{auditDate,jdbcType=TIMESTAMP},
|
||||
#{createdAt,jdbcType=TIMESTAMP}, #{createdBy,jdbcType=VARCHAR}, #{updatedAt,jdbcType=TIMESTAMP},
|
||||
#{updatedBy,jdbcType=VARCHAR}, #{delFlag,jdbcType=VARCHAR}, #{remarks,jdbcType=LONGVARCHAR},#{score, jdbcType=REAL}
|
||||
)
|
||||
</insert>
|
||||
<insert id="insertSelective" keyColumn="id" keyProperty="id" parameterType="cn.wepact.dfm.training.dto.entity.TProfessionalFeedback" useGeneratedKeys="true">
|
||||
insert into t_professional_feedback
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
<if test="userId != null">
|
||||
user_id,
|
||||
</if>
|
||||
<if test="orgCode != null">
|
||||
org_code,
|
||||
</if>
|
||||
<if test="categoryCode != null">
|
||||
category_code,
|
||||
</if>
|
||||
<if test="defineCode != null">
|
||||
define_code,
|
||||
</if>
|
||||
<if test="score != null">
|
||||
score,
|
||||
</if>
|
||||
<if test="specificTask != null">
|
||||
specific_task,
|
||||
</if>
|
||||
<if test="startTime != null">
|
||||
start_time,
|
||||
</if>
|
||||
<if test="endTime != null">
|
||||
end_time,
|
||||
</if>
|
||||
<if test="number != null">
|
||||
`number`,
|
||||
</if>
|
||||
<if test="unitCode != null">
|
||||
unit_code,
|
||||
</if>
|
||||
<if test="initiatingDepartment != null">
|
||||
initiating_department,
|
||||
</if>
|
||||
<if test="roleCode != null">
|
||||
role_code,
|
||||
</if>
|
||||
<if test="levelCode != null">
|
||||
level_code,
|
||||
</if>
|
||||
<if test="proofMaterial != null">
|
||||
proof_material,
|
||||
</if>
|
||||
<if test="auditStatus != null">
|
||||
audit_status,
|
||||
</if>
|
||||
<if test="auditor != null">
|
||||
auditor,
|
||||
</if>
|
||||
<if test="auditDate != null">
|
||||
audit_date,
|
||||
</if>
|
||||
<if test="createdAt != null">
|
||||
created_at,
|
||||
</if>
|
||||
<if test="createdBy != null">
|
||||
created_by,
|
||||
</if>
|
||||
<if test="updatedAt != null">
|
||||
updated_at,
|
||||
</if>
|
||||
<if test="updatedBy != null">
|
||||
updated_by,
|
||||
</if>
|
||||
<if test="delFlag != null">
|
||||
del_flag,
|
||||
</if>
|
||||
<if test="remarks != null">
|
||||
remarks,
|
||||
</if>
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="userId != null">
|
||||
#{userId,jdbcType=BIGINT},
|
||||
</if>
|
||||
<if test="orgCode != null">
|
||||
#{orgCode,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="categoryCode != null">
|
||||
#{categoryCode,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="defineCode != null">
|
||||
#{defineCode,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="score != null">
|
||||
#{score,jdbcType=REAL},
|
||||
</if>
|
||||
<if test="specificTask != null">
|
||||
#{specificTask,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="startTime != null">
|
||||
#{startTime,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="endTime != null">
|
||||
#{endTime,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="number != null">
|
||||
#{number,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="unitCode != null">
|
||||
#{unitCode,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="initiatingDepartment != null">
|
||||
#{initiatingDepartment,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="roleCode != null">
|
||||
#{roleCode,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="levelCode != null">
|
||||
#{levelCode,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="proofMaterial != null">
|
||||
#{proofMaterial,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="auditStatus != null">
|
||||
#{auditStatus,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="auditor != null">
|
||||
#{auditor,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="auditDate != null">
|
||||
#{auditDate,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="createdAt != null">
|
||||
#{createdAt,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="createdBy != null">
|
||||
#{createdBy,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="updatedAt != null">
|
||||
#{updatedAt,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="updatedBy != null">
|
||||
#{updatedBy,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="delFlag != null">
|
||||
#{delFlag,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="remarks != null">
|
||||
#{remarks,jdbcType=LONGVARCHAR},
|
||||
</if>
|
||||
</trim>
|
||||
</insert>
|
||||
<update id="updateByPrimaryKeySelective" parameterType="cn.wepact.dfm.training.dto.entity.TProfessionalFeedback">
|
||||
update t_professional_feedback
|
||||
<set>
|
||||
<if test="userId != null">
|
||||
user_id = #{userId,jdbcType=BIGINT},
|
||||
</if>
|
||||
<if test="orgCode != null">
|
||||
org_code = #{orgCode,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="categoryCode != null">
|
||||
category_code = #{categoryCode,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="defineCode != null">
|
||||
define_code = #{defineCode,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="score != null">
|
||||
score = #{score,jdbcType=REAL},
|
||||
</if>
|
||||
<if test="specificTask != null">
|
||||
specific_task = #{specificTask,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="startTime != null">
|
||||
start_time = #{startTime,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="endTime != null">
|
||||
end_time = #{endTime,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="number != null">
|
||||
`number` = #{number,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="unitCode != null">
|
||||
unit_code = #{unitCode,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="initiatingDepartment != null">
|
||||
initiating_department = #{initiatingDepartment,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="roleCode != null">
|
||||
role_code = #{roleCode,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="levelCode != null">
|
||||
level_code = #{levelCode,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="proofMaterial != null">
|
||||
proof_material = #{proofMaterial,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="auditStatus != null">
|
||||
audit_status = #{auditStatus,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="auditor != null">
|
||||
auditor = #{auditor,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="auditDate != null">
|
||||
audit_date = #{auditDate,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="createdAt != null">
|
||||
created_at = #{createdAt,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="createdBy != null">
|
||||
created_by = #{createdBy,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="updatedAt != null">
|
||||
updated_at = #{updatedAt,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="updatedBy != null">
|
||||
updated_by = #{updatedBy,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="delFlag != null">
|
||||
del_flag = #{delFlag,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="remarks != null">
|
||||
remarks = #{remarks,jdbcType=LONGVARCHAR},
|
||||
</if>
|
||||
</set>
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</update>
|
||||
<!-- <update id="updateByPrimaryKey" parameterType="cn.wepact.dfm.training.dto.entity.TProfessionalFeedback">-->
|
||||
<!-- update t_professional_feedback-->
|
||||
<!-- set user_id = #{userId,jdbcType=BIGINT},-->
|
||||
<!-- org_code = #{orgCode,jdbcType=VARCHAR},-->
|
||||
<!-- category_code = #{categoryCode,jdbcType=VARCHAR},-->
|
||||
<!-- specific_task = #{specificTask,jdbcType=VARCHAR},-->
|
||||
<!-- start_time = #{startTime,jdbcType=TIMESTAMP},-->
|
||||
<!-- end_time = #{endTime,jdbcType=TIMESTAMP},-->
|
||||
<!-- `number` = #{number,jdbcType=INTEGER},-->
|
||||
<!-- unit_code = #{unitCode,jdbcType=VARCHAR},-->
|
||||
<!-- initiating_department = #{initiatingDepartment,jdbcType=VARCHAR},-->
|
||||
<!-- role_code = #{roleCode,jdbcType=VARCHAR},-->
|
||||
<!-- level_code = #{levelCode,jdbcType=VARCHAR},-->
|
||||
<!-- proof_material = #{proofMaterial,jdbcType=VARCHAR},-->
|
||||
<!-- audit_status = #{auditStatus,jdbcType=VARCHAR},-->
|
||||
<!-- auditor = #{auditor,jdbcType=VARCHAR},-->
|
||||
<!-- audit_date = #{auditDate,jdbcType=TIMESTAMP},-->
|
||||
<!-- created_at = #{createdAt,jdbcType=TIMESTAMP},-->
|
||||
<!-- created_by = #{createdBy,jdbcType=VARCHAR},-->
|
||||
<!-- updated_at = #{updatedAt,jdbcType=TIMESTAMP},-->
|
||||
<!-- updated_by = #{updatedBy,jdbcType=VARCHAR},-->
|
||||
<!-- del_flag = #{delFlag,jdbcType=VARCHAR},-->
|
||||
<!-- remarks = #{remarks,jdbcType=LONGVARCHAR}-->
|
||||
<!-- where id = #{id,jdbcType=BIGINT}-->
|
||||
<!-- </update>-->
|
||||
<update id="updateByPrimaryKey" parameterType="cn.wepact.dfm.training.dto.entity.TProfessionalFeedback">
|
||||
update t_professional_feedback
|
||||
set user_id = #{userId,jdbcType=BIGINT},
|
||||
org_code = #{orgCode,jdbcType=VARCHAR},
|
||||
category_code = #{categoryCode,jdbcType=VARCHAR},
|
||||
define_code = #{defineCode,jdbcType=VARCHAR},
|
||||
score = #{score,jdbcType=REAL},
|
||||
specific_task = #{specificTask,jdbcType=VARCHAR},
|
||||
start_time = #{startTime,jdbcType=TIMESTAMP},
|
||||
end_time = #{endTime,jdbcType=TIMESTAMP},
|
||||
`number` = #{number,jdbcType=INTEGER},
|
||||
unit_code = #{unitCode,jdbcType=VARCHAR},
|
||||
initiating_department = #{initiatingDepartment,jdbcType=VARCHAR},
|
||||
role_code = #{roleCode,jdbcType=VARCHAR},
|
||||
level_code = #{levelCode,jdbcType=VARCHAR},
|
||||
proof_material = #{proofMaterial,jdbcType=VARCHAR},
|
||||
audit_status = #{auditStatus,jdbcType=VARCHAR},
|
||||
auditor = #{auditor,jdbcType=VARCHAR},
|
||||
audit_date = #{auditDate,jdbcType=TIMESTAMP},
|
||||
created_at = #{createdAt,jdbcType=TIMESTAMP},
|
||||
created_by = #{createdBy,jdbcType=VARCHAR},
|
||||
updated_at = #{updatedAt,jdbcType=TIMESTAMP},
|
||||
updated_by = #{updatedBy,jdbcType=VARCHAR},
|
||||
del_flag = #{delFlag,jdbcType=VARCHAR}
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</update>
|
||||
</mapper>
|
||||
@@ -0,0 +1,16 @@
|
||||
package cn.wepact.dfm.training.mapper;
|
||||
|
||||
import cn.wepact.dfm.training.dto.entity.TProfessionalStdRule;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* TProfessionalStdRuleMapper继承基类
|
||||
*/
|
||||
@Repository
|
||||
public interface TProfessionalStdRuleMapper extends MyBatisBaseDao<TProfessionalStdRule, Long> {
|
||||
|
||||
List<TProfessionalStdRule> selectByCondition(TProfessionalStdRule tProfessionalStdRule);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,246 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="cn.wepact.dfm.training.mapper.TProfessionalStdRuleMapper">
|
||||
<resultMap id="BaseResultMap" type="cn.wepact.dfm.training.dto.entity.TProfessionalStdRule">
|
||||
<id column="id" jdbcType="BIGINT" property="id" />
|
||||
<result column="org_code" jdbcType="VARCHAR" property="orgCode" />
|
||||
<result column="qualification_level" jdbcType="VARCHAR" property="qualificationLevel" />
|
||||
<result column="category_code" jdbcType="VARCHAR" property="categoryCode" />
|
||||
<result column="define_code" jdbcType="VARCHAR" property="defineCode" />
|
||||
<result column="role_code" jdbcType="VARCHAR" property="roleCode" />
|
||||
<result column="level_code" jdbcType="VARCHAR" property="levelCode" />
|
||||
<result column="score" jdbcType="REAL" property="score" />
|
||||
<result column="required_qlevel" jdbcType="VARCHAR" property="requiredQlevel" />
|
||||
<result column="parent_id" jdbcType="BIGINT" property="parentId" />
|
||||
<result column="type" jdbcType="VARCHAR" property="type" />
|
||||
<result column="created_at" jdbcType="TIMESTAMP" property="createdAt" />
|
||||
<result column="created_by" jdbcType="VARCHAR" property="createdBy" />
|
||||
<result column="updated_at" jdbcType="TIMESTAMP" property="updatedAt" />
|
||||
<result column="updated_by" jdbcType="VARCHAR" property="updatedBy" />
|
||||
<result column="del_flag" jdbcType="VARCHAR" property="delFlag" />
|
||||
</resultMap>
|
||||
<sql id="Base_Column_List">
|
||||
id, org_code, qualification_level, category_code, define_code, role_code, level_code, score, required_qlevel,
|
||||
parent_id, `type`, created_at, created_by, updated_at, updated_by, del_flag
|
||||
</sql>
|
||||
<select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
|
||||
select
|
||||
<include refid="Base_Column_List" />
|
||||
from t_professional_std_rule
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</select>
|
||||
<select id="selectByCondition" resultMap="BaseResultMap"
|
||||
parameterType="cn.wepact.dfm.training.dto.entity.TProfessionalStdRule">
|
||||
SELECT
|
||||
<include refid="Base_Column_List" />
|
||||
FROM
|
||||
t_professional_std_rule
|
||||
WHERE
|
||||
del_flag = 0
|
||||
<if test="orgCode != null and orgCode != ''">
|
||||
and org_code = #{orgCode,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="parentId != null">
|
||||
and parent_id = #{parentId,jdbcType=BIGINT}
|
||||
</if>
|
||||
<if test="type != null">
|
||||
and type = #{type,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="categoryCode != null">
|
||||
and category_code = #{categoryCode,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="defineCode != null">
|
||||
and define_code = #{defineCode,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="roleCode != null">
|
||||
and role_code = #{roleCode,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="levelCode != null">
|
||||
and level_code = #{levelCode,jdbcType=VARCHAR}
|
||||
</if>
|
||||
order by type
|
||||
</select>
|
||||
<delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
|
||||
delete from t_professional_std_rule
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</delete>
|
||||
<insert id="insert" keyColumn="id" keyProperty="id" parameterType="cn.wepact.dfm.training.dto.entity.TProfessionalStdRule" useGeneratedKeys="true">
|
||||
insert into t_professional_std_rule (org_code,qualification_level, category_code, define_code,
|
||||
role_code, level_code, score,
|
||||
required_qlevel, parent_id, `type`,
|
||||
created_at, created_by, updated_at,
|
||||
updated_by, del_flag)
|
||||
values (#{orgCode,jdbcType=VARCHAR},#{qualificationLevel, jdbcType=VARCHAR}, #{categoryCode,jdbcType=VARCHAR}, #{defineCode,jdbcType=VARCHAR},
|
||||
#{roleCode,jdbcType=VARCHAR}, #{levelCode,jdbcType=VARCHAR}, #{score,jdbcType=REAL},
|
||||
#{requiredQlevel,jdbcType=VARCHAR}, #{parentId,jdbcType=BIGINT}, #{type,jdbcType=VARCHAR},
|
||||
#{createdAt,jdbcType=TIMESTAMP}, #{createdBy,jdbcType=VARCHAR}, #{updatedAt,jdbcType=TIMESTAMP},
|
||||
#{updatedBy,jdbcType=VARCHAR}, #{delFlag,jdbcType=VARCHAR})
|
||||
</insert>
|
||||
<insert id="insertSelective" keyColumn="id" keyProperty="id" parameterType="cn.wepact.dfm.training.dto.entity.TProfessionalStdRule" useGeneratedKeys="true">
|
||||
insert into t_professional_std_rule
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
<if test="orgCode != null">
|
||||
org_code,
|
||||
</if>
|
||||
<if test="qualificationLevel != null">
|
||||
qualification_level,
|
||||
</if>
|
||||
<if test="categoryCode != null">
|
||||
category_code,
|
||||
</if>
|
||||
<if test="defineCode != null">
|
||||
define_code,
|
||||
</if>
|
||||
<if test="roleCode != null">
|
||||
role_code,
|
||||
</if>
|
||||
<if test="levelCode != null">
|
||||
level_code,
|
||||
</if>
|
||||
<if test="score != null">
|
||||
score,
|
||||
</if>
|
||||
<if test="requiredQlevel != null">
|
||||
required_qlevel,
|
||||
</if>
|
||||
<if test="parentId != null">
|
||||
parent_id,
|
||||
</if>
|
||||
<if test="type != null">
|
||||
`type`,
|
||||
</if>
|
||||
<if test="createdAt != null">
|
||||
created_at,
|
||||
</if>
|
||||
<if test="createdBy != null">
|
||||
created_by,
|
||||
</if>
|
||||
<if test="updatedAt != null">
|
||||
updated_at,
|
||||
</if>
|
||||
<if test="updatedBy != null">
|
||||
updated_by,
|
||||
</if>
|
||||
<if test="delFlag != null">
|
||||
del_flag,
|
||||
</if>
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="orgCode != null">
|
||||
#{orgCode,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="qualificationLevel != null">
|
||||
#{qualificationLevel, jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="categoryCode != null">
|
||||
#{categoryCode,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="defineCode != null">
|
||||
#{defineCode,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="roleCode != null">
|
||||
#{roleCode,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="levelCode != null">
|
||||
#{levelCode,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="score != null">
|
||||
#{score,jdbcType=REAL},
|
||||
</if>
|
||||
<if test="requiredQlevel != null">
|
||||
#{requiredQlevel,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="parentId != null">
|
||||
#{parentId,jdbcType=BIGINT},
|
||||
</if>
|
||||
<if test="type != null">
|
||||
#{type,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="createdAt != null">
|
||||
#{createdAt,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="createdBy != null">
|
||||
#{createdBy,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="updatedAt != null">
|
||||
#{updatedAt,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="updatedBy != null">
|
||||
#{updatedBy,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="delFlag != null">
|
||||
#{delFlag,jdbcType=VARCHAR},
|
||||
</if>
|
||||
</trim>
|
||||
</insert>
|
||||
<update id="updateByPrimaryKeySelective" parameterType="cn.wepact.dfm.training.dto.entity.TProfessionalStdRule">
|
||||
update t_professional_std_rule
|
||||
<set>
|
||||
<if test="orgCode != null">
|
||||
org_code = #{orgCode,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="qualificationLevel != null">
|
||||
qualification_level = #{qualificationLevel, jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="categoryCode != null">
|
||||
category_code = #{categoryCode,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="defineCode != null">
|
||||
define_code = #{defineCode,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="roleCode != null">
|
||||
role_code = #{roleCode,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="levelCode != null">
|
||||
level_code = #{levelCode,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="score != null">
|
||||
score = #{score,jdbcType=REAL},
|
||||
</if>
|
||||
<if test="requiredQlevel != null">
|
||||
required_qlevel = #{requiredQlevel,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="parentId != null">
|
||||
parent_id = #{parentId,jdbcType=BIGINT},
|
||||
</if>
|
||||
<if test="type != null">
|
||||
`type` = #{type,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="createdAt != null">
|
||||
created_at = #{createdAt,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="createdBy != null">
|
||||
created_by = #{createdBy,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="updatedAt != null">
|
||||
updated_at = #{updatedAt,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="updatedBy != null">
|
||||
updated_by = #{updatedBy,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="delFlag != null">
|
||||
del_flag = #{delFlag,jdbcType=VARCHAR},
|
||||
</if>
|
||||
</set>
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</update>
|
||||
<update id="updateByPrimaryKey" parameterType="cn.wepact.dfm.training.dto.entity.TProfessionalStdRule">
|
||||
update t_professional_std_rule
|
||||
set org_code = #{orgCode,jdbcType=VARCHAR},
|
||||
qualification_level = #{qualificationLevel, jdbcType=VARCHAR},
|
||||
category_code = #{categoryCode,jdbcType=VARCHAR},
|
||||
define_code = #{defineCode,jdbcType=VARCHAR},
|
||||
role_code = #{roleCode,jdbcType=VARCHAR},
|
||||
level_code = #{levelCode,jdbcType=VARCHAR},
|
||||
score = #{score,jdbcType=REAL},
|
||||
required_qlevel = #{requiredQlevel,jdbcType=VARCHAR},
|
||||
parent_id = #{parentId,jdbcType=BIGINT},
|
||||
`type` = #{type,jdbcType=VARCHAR},
|
||||
created_at = #{createdAt,jdbcType=TIMESTAMP},
|
||||
created_by = #{createdBy,jdbcType=VARCHAR},
|
||||
updated_at = #{updatedAt,jdbcType=TIMESTAMP},
|
||||
updated_by = #{updatedBy,jdbcType=VARCHAR},
|
||||
del_flag = #{delFlag,jdbcType=VARCHAR}
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</update>
|
||||
</mapper>
|
||||
@@ -0,0 +1,34 @@
|
||||
package cn.wepact.dfm.training.mapper;
|
||||
|
||||
import cn.wepact.dfm.training.dto.AppliedParam;
|
||||
import cn.wepact.dfm.training.dto.entity.TQualificationReview;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* TQualificationReviewMapper继承基类
|
||||
*/
|
||||
@Mapper
|
||||
public interface TQualificationReviewMapper extends MyBatisBaseMapper<TQualificationReview, Long> {
|
||||
List<TQualificationReview> selectByCondition(AppliedParam appliedParam);
|
||||
|
||||
List<TQualificationReview> selectWithUserInfoByCondition(AppliedParam condition);
|
||||
/**
|
||||
* 根据 user_id 和 project_id 查找唯一记录
|
||||
* @param userId 用户 ID
|
||||
* @param projectId 项目 ID
|
||||
* @return 任职资格审核记录
|
||||
*/
|
||||
TQualificationReview findByUserIdAndProjectId(@Param("userId") Long userId, @Param("projectId") Long projectId);
|
||||
|
||||
/**
|
||||
* 插入新的资格审核记录
|
||||
* @param qualificationReview 资格审核记录
|
||||
* @return 插入结果
|
||||
*/
|
||||
int insertQualificationReview(TQualificationReview qualificationReview);
|
||||
|
||||
int updateQualificationReview(TQualificationReview existingReview);
|
||||
}
|
||||
@@ -0,0 +1,414 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="cn.wepact.dfm.training.mapper.TQualificationReviewMapper">
|
||||
<resultMap id="BaseResultMap" type="cn.wepact.dfm.training.dto.entity.TQualificationReview">
|
||||
<id column="id" jdbcType="BIGINT" property="id" />
|
||||
<result column="user_id" jdbcType="BIGINT" property="userId" />
|
||||
<result column="current_department" jdbcType="VARCHAR" property="currentDepartment" />
|
||||
<result column="qualification_standards_id" jdbcType="BIGINT" property="qualificationStandardsId" />
|
||||
<result column="status" jdbcType="VARCHAR" property="status" />
|
||||
<result column="review_time" jdbcType="TIMESTAMP" property="reviewTime" />
|
||||
<result column="professional_score" jdbcType="DECIMAL" property="professionalScore" />
|
||||
<result column="professional_tip" jdbcType="VARCHAR" property="professionalTip" />
|
||||
<result column="elective_course_score" jdbcType="DECIMAL" property="electiveCourseScore" />
|
||||
<result column="compulsory_course_score" jdbcType="DECIMAL" property="compulsoryCourseScore" />
|
||||
<result column="offline_score" jdbcType="DECIMAL" property="offlineScore" />
|
||||
<result column="org_code" jdbcType="VARCHAR" property="orgCode" />
|
||||
<result column="created_at" jdbcType="TIMESTAMP" property="createdAt" />
|
||||
<result column="created_by" jdbcType="VARCHAR" property="createdBy" />
|
||||
<result column="updated_at" jdbcType="TIMESTAMP" property="updatedAt" />
|
||||
<result column="updated_by" jdbcType="VARCHAR" property="updatedBy" />
|
||||
<result column="del_flag" jdbcType="VARCHAR" property="delFlag" />
|
||||
<result column="project_id" jdbcType="BIGINT" property="projectId" /> <!-- 新增的项目ID字段 -->
|
||||
</resultMap>
|
||||
<sql id="Base_Column_List">
|
||||
id, user_id, current_department, qualification_standards_id, `status`, review_time,professional_score,professional_tip, elective_course_score,
|
||||
compulsory_course_score, offline_score, org_code, created_at, created_by, updated_at, updated_by,
|
||||
del_flag,project_id <!-- 新增的项目ID字段 -->
|
||||
</sql>
|
||||
<select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
|
||||
select
|
||||
<include refid="Base_Column_List" />
|
||||
from t_qualification_review
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</select>
|
||||
<select id="selectByCondition" resultType="cn.wepact.dfm.training.dto.entity.TQualificationReview"
|
||||
parameterType="cn.wepact.dfm.training.dto.AppliedParam">
|
||||
SELECT
|
||||
a.id,
|
||||
a.user_id as userId,
|
||||
a.current_department as currentDepartment,
|
||||
a.`status`,
|
||||
a.review_time as reviewTime,
|
||||
b.position_name as positionName,
|
||||
b.qualification_level as qualificationLevel,
|
||||
a.compulsory_course_score as compulsoryCourseScore,
|
||||
a.offline_score as offlineScore,
|
||||
a.elective_course_score as electiveCourseScore,
|
||||
a.professional_score as professionalScore,
|
||||
a.professional_tip as professionalTip,
|
||||
a.created_at as createdAt,
|
||||
a.qualification_standards_id as qualificationStandardsId
|
||||
FROM
|
||||
t_qualification_review a,
|
||||
t_qualification_standards b
|
||||
WHERE
|
||||
a.qualification_standards_id = b.id
|
||||
and a.del_flag = 0
|
||||
<if test="userId != null">
|
||||
and a.user_id = #{userId}
|
||||
</if>
|
||||
<if test="orgCode != null">
|
||||
and a.org_code = #{orgCode}
|
||||
</if>
|
||||
<if test="level != null and level!=''">
|
||||
and b.qualification_level = #{level}
|
||||
</if>
|
||||
<if test="positionName != null and positionName != ''">
|
||||
and b.position_name = #{positionName}
|
||||
</if>
|
||||
<if test="status != null">
|
||||
and a.`status` = #{status}
|
||||
</if>
|
||||
<if test="statusList != null">
|
||||
<foreach collection="statusList" item="item" open="and a.status in (" separator="," close=")">
|
||||
#{item}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test="reviewTime != null">
|
||||
and a.`review_time` = #{reviewTime}
|
||||
</if>
|
||||
<if test="startTime != null">
|
||||
and a.`review_time` >= #{startTime}
|
||||
</if>
|
||||
ORDER BY a.created_at desc
|
||||
</select>
|
||||
<select id="selectWithUserInfoByCondition" resultType="cn.wepact.dfm.training.dto.entity.TQualificationReview"
|
||||
parameterType="cn.wepact.dfm.training.dto.AppliedParam">
|
||||
SELECT
|
||||
a.id,
|
||||
a.current_department as currentDepartment,
|
||||
a.`status`,
|
||||
a.review_time as reviewTime,
|
||||
b.position_name as positionName,
|
||||
b.qualification_level as qualificationLevel,
|
||||
a.compulsory_course_score as compulsoryCourseScore,
|
||||
a.offline_score as offlineScore,
|
||||
a.elective_course_score as electiveCourseScore,
|
||||
a.professional_score as professionalScore,
|
||||
a.professional_tip as professionalTip,
|
||||
a.created_at as createdAt,
|
||||
c.username,
|
||||
c.user_no as userNo
|
||||
FROM
|
||||
t_qualification_review a,
|
||||
t_qualification_standards b,
|
||||
t_user c
|
||||
WHERE
|
||||
a.qualification_standards_id = b.id
|
||||
and a.user_id = c.id
|
||||
and a.del_flag = 0
|
||||
<if test="userId != null">
|
||||
and a.user_id = #{userId}
|
||||
</if>
|
||||
<if test="orgCode != null">
|
||||
and a.org_code = #{orgCode}
|
||||
</if>
|
||||
<if test="level != null and level!=''">
|
||||
and b.qualification_level = #{level}
|
||||
</if>
|
||||
<if test="positionName != null and positionName != ''">
|
||||
and b.position_name = #{positionName}
|
||||
</if>
|
||||
<if test="positionNameList != null">
|
||||
<foreach collection="positionNameList" item="item" open="and b.position_name in (" close=")" separator=",">
|
||||
#{item,jdbcType=VARCHAR}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test="status != null and status !=''">
|
||||
and a.`status` = #{status}
|
||||
</if>
|
||||
<if test="username != null and username != ''">
|
||||
and c.`username` = #{username}
|
||||
</if>
|
||||
<if test="userNo != null and userNo != ''">
|
||||
and c.`user_no` = #{userNo}
|
||||
</if>
|
||||
<if test="statusList != null">
|
||||
<foreach collection="statusList" item="item" open="and a.status in (" separator="," close=")">
|
||||
#{item}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test="reviewTime != null">
|
||||
and a.`review_time` = #{reviewTime}
|
||||
</if>
|
||||
<if test="startTime != null">
|
||||
and a.`review_time` >= #{startTime}
|
||||
</if>
|
||||
ORDER BY a.created_at desc
|
||||
</select>
|
||||
<delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
|
||||
delete from t_qualification_review
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</delete>
|
||||
<insert id="insert" keyColumn="id" keyProperty="id" parameterType="cn.wepact.dfm.training.dto.entity.TQualificationReview" useGeneratedKeys="true">
|
||||
insert into t_qualification_review (user_id, current_department, qualification_standards_id,
|
||||
`status`,review_time, professional_score,professional_tip, elective_course_score, compulsory_course_score,
|
||||
offline_score, org_code, created_at, created_by,
|
||||
updated_at, updated_by, del_flag,project_id
|
||||
)
|
||||
values (#{userId,jdbcType=BIGINT}, #{currentDepartment,jdbcType=VARCHAR}, #{qualificationStandardsId,jdbcType=BIGINT},
|
||||
#{status,jdbcType=VARCHAR}, #{reviewTime,jdbcType=TIMESTAMP}, #{professionalScore, jdbcType=DECIMAL},#{professionalTip, jdbcType=VARCHAR}, #{electiveCourseScore,jdbcType=DECIMAL}, #{compulsoryCourseScore,jdbcType=DECIMAL},
|
||||
#{offlineScore,jdbcType=DECIMAL}, #{orgCode,jdbcType=VARCHAR}, #{createdAt,jdbcType=TIMESTAMP}, #{createdBy,jdbcType=VARCHAR},
|
||||
#{updatedAt,jdbcType=TIMESTAMP}, #{updatedBy,jdbcType=VARCHAR}, #{delFlag,jdbcType=VARCHAR}, #{projectId,jdbcType=BIGINT}) <!-- 新增的项目ID字段 -->
|
||||
)
|
||||
</insert>
|
||||
<insert id="insertSelective" keyColumn="id" keyProperty="id" parameterType="cn.wepact.dfm.training.dto.entity.TQualificationReview" useGeneratedKeys="true">
|
||||
insert into t_qualification_review
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
<if test="userId != null">
|
||||
user_id,
|
||||
</if>
|
||||
<if test="currentDepartment != null">
|
||||
current_department,
|
||||
</if>
|
||||
<if test="qualificationStandardsId != null">
|
||||
qualification_standards_id,
|
||||
</if>
|
||||
<if test="status != null">
|
||||
`status`,
|
||||
</if>
|
||||
<if test="reviewTime != null">
|
||||
`review_time`,
|
||||
</if>
|
||||
<if test="professionalScore !=null">
|
||||
professional_score,
|
||||
</if>
|
||||
<if test="professionalTip !=null">
|
||||
professional_tip,
|
||||
</if>
|
||||
<if test="electiveCourseScore != null">
|
||||
elective_course_score,
|
||||
</if>
|
||||
<if test="compulsoryCourseScore != null">
|
||||
compulsory_course_score,
|
||||
</if>
|
||||
<if test="offlineScore != null">
|
||||
offline_score,
|
||||
</if>
|
||||
<if test="orgCode != null">
|
||||
org_code,
|
||||
</if>
|
||||
<if test="createdAt != null">
|
||||
created_at,
|
||||
</if>
|
||||
<if test="createdBy != null">
|
||||
created_by,
|
||||
</if>
|
||||
<if test="updatedAt != null">
|
||||
updated_at,
|
||||
</if>
|
||||
<if test="updatedBy != null">
|
||||
updated_by,
|
||||
</if>
|
||||
<if test="delFlag != null">
|
||||
del_flag,
|
||||
</if>
|
||||
<if test="projectId != null">
|
||||
project_id,
|
||||
</if>
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="userId != null">
|
||||
#{userId,jdbcType=BIGINT},
|
||||
</if>
|
||||
<if test="currentDepartment != null">
|
||||
#{currentDepartment,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="qualificationStandardsId != null">
|
||||
#{qualificationStandardsId,jdbcType=BIGINT},
|
||||
</if>
|
||||
<if test="status != null">
|
||||
#{status,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="reviewTime != null">
|
||||
#{reviewTime,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="professionalScore !=null">
|
||||
#{professionalScore, jdbcType=DECIMAL},
|
||||
</if>
|
||||
<if test="professionalTip != null">
|
||||
#{professionalTip, jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="electiveCourseScore != null">
|
||||
#{electiveCourseScore,jdbcType=DECIMAL},
|
||||
</if>
|
||||
<if test="compulsoryCourseScore != null">
|
||||
#{compulsoryCourseScore,jdbcType=DECIMAL},
|
||||
</if>
|
||||
<if test="offlineScore!= null">
|
||||
#{offlineScore,jdbcType=DECIMAL},
|
||||
</if>
|
||||
<if test="orgCode != null">
|
||||
#{orgCode,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="createdAt != null">
|
||||
#{createdAt,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="createdBy != null">
|
||||
#{createdBy,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="updatedAt != null">
|
||||
#{updatedAt,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="updatedBy != null">
|
||||
#{updatedBy,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="delFlag != null">
|
||||
#{delFlag,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="projectId != null">
|
||||
#{projectId,jdbcType=VARCHAR},
|
||||
</if>
|
||||
</trim>
|
||||
</insert>
|
||||
<update id="updateByPrimaryKeySelective" parameterType="cn.wepact.dfm.training.dto.entity.TQualificationReview">
|
||||
update t_qualification_review
|
||||
<set>
|
||||
<if test="userId != null">
|
||||
user_id = #{userId,jdbcType=BIGINT},
|
||||
</if>
|
||||
<if test="currentDepartment != null">
|
||||
current_department = #{currentDepartment,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="qualificationStandardsId != null">
|
||||
qualification_standards_id = #{qualificationStandardsId,jdbcType=BIGINT},
|
||||
</if>
|
||||
<if test="status != null">
|
||||
`status` = #{status,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="reviewTime != null">
|
||||
review_time = #{reviewTime,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="professionalScore != null">
|
||||
professional_score = #{professionalScore, jdbcType=DECIMAL},
|
||||
</if>
|
||||
<if test="professionalTip != null">
|
||||
professional_tip = #{professionalTip, jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="professionalScore != null">
|
||||
professional_score = #{professionalScore, jdbcType=DECIMAL},
|
||||
</if>
|
||||
<if test="professionalTip != null">
|
||||
professional_tip = #{professionalTip, jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="electiveCourseScore != null">
|
||||
elective_course_score = #{electiveCourseScore,jdbcType=DECIMAL},
|
||||
</if>
|
||||
<if test="compulsoryCourseScore != null">
|
||||
compulsory_course_score = #{compulsoryCourseScore,jdbcType=DECIMAL},
|
||||
</if>
|
||||
<if test="offlineScore != null">
|
||||
offline_score = #{offlineScore,jdbcType=DECIMAL},
|
||||
</if>
|
||||
<if test="orgCode != null">
|
||||
org_code = #{orgCode,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="createdAt != null">
|
||||
created_at = #{createdAt,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="createdBy != null">
|
||||
created_by = #{createdBy,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="updatedAt != null">
|
||||
updated_at = #{updatedAt,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="updatedBy != null">
|
||||
updated_by = #{updatedBy,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="delFlag != null">
|
||||
del_flag = #{delFlag,jdbcType=VARCHAR},
|
||||
</if>
|
||||
</set>
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</update>
|
||||
<update id="updateByPrimaryKey" parameterType="cn.wepact.dfm.training.dto.entity.TQualificationReview">
|
||||
update t_qualification_review
|
||||
set user_id = #{userId,jdbcType=BIGINT},
|
||||
current_department = #{currentDepartment,jdbcType=VARCHAR},
|
||||
qualification_standards_id = #{qualificationStandardsId,jdbcType=BIGINT},
|
||||
`status` = #{status,jdbcType=VARCHAR},
|
||||
review_time = #{reviewTime,jdbcType=TIMESTAMP},
|
||||
professional_score = #{professionalScore, jdbcType=DECIMAL},
|
||||
professional_tip = #{professionalTip, jdbcType=VARCHAR},
|
||||
elective_course_score = #{electiveCourseScore,jdbcType=DECIMAL},
|
||||
compulsory_course_score = #{compulsoryCourseScore,jdbcType=DECIMAL},
|
||||
offline_score = #{offlineScore, jdbcType=DECIMAL},
|
||||
org_code = #{orgCode,jdbcType=VARCHAR},
|
||||
created_at = #{createdAt,jdbcType=TIMESTAMP},
|
||||
created_by = #{createdBy,jdbcType=VARCHAR},
|
||||
updated_at = #{updatedAt,jdbcType=TIMESTAMP},
|
||||
updated_by = #{updatedBy,jdbcType=VARCHAR},
|
||||
del_flag = #{delFlag,jdbcType=VARCHAR},
|
||||
project_id = #{projectId,jdbcType=BIGINT} <!-- 新增的项目ID字段 -->
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</update>
|
||||
|
||||
<select id="findByUserIdAndProjectId" resultMap="BaseResultMap">
|
||||
SELECT *
|
||||
FROM t_qualification_review
|
||||
WHERE user_id = #{userId}
|
||||
AND project_id = #{projectId}
|
||||
AND status IN ('0', '1', '2', '3')
|
||||
AND del_flag = '0' <!-- 假设 "del_flag" 表示删除标记 -->
|
||||
</select>
|
||||
|
||||
|
||||
<insert id="insertQualificationReview">
|
||||
INSERT INTO t_qualification_review (
|
||||
user_id,
|
||||
current_department,
|
||||
qualification_standards_id,
|
||||
status,
|
||||
review_time,
|
||||
professional_score,
|
||||
professional_tip,
|
||||
elective_course_score,
|
||||
compulsory_course_score,
|
||||
offline_score,
|
||||
org_code,
|
||||
project_id
|
||||
) VALUES (
|
||||
#{userId},
|
||||
#{currentDepartment},
|
||||
#{qualificationStandardsId},
|
||||
#{status},
|
||||
#{reviewTime},
|
||||
#{professionalScore},
|
||||
#{professionalTip},
|
||||
#{electiveCourseScore},
|
||||
#{compulsoryCourseScore},
|
||||
#{offlineScore},
|
||||
#{orgCode},
|
||||
#{projectId}
|
||||
)
|
||||
</insert>
|
||||
|
||||
|
||||
<!-- 更新资格审核记录 -->
|
||||
<update id="updateQualificationReview" parameterType="cn.wepact.dfm.training.dto.entity.TQualificationReview">
|
||||
UPDATE t_qualification_review
|
||||
SET
|
||||
professional_score = #{professionalScore},
|
||||
professional_tip = #{professionalTip},
|
||||
elective_course_score = #{electiveCourseScore},
|
||||
compulsory_course_score = #{compulsoryCourseScore},
|
||||
offline_score = #{offlineScore},
|
||||
status = #{status},
|
||||
updated_at = CURRENT_TIMESTAMP
|
||||
WHERE user_id = #{userId}
|
||||
AND project_id = #{projectId}
|
||||
AND del_flag = '0'
|
||||
AND status IN ('0', '1', '2')
|
||||
</update>
|
||||
</mapper>
|
||||
@@ -0,0 +1,36 @@
|
||||
package cn.wepact.dfm.training.mapper;
|
||||
|
||||
import cn.wepact.dfm.training.dto.InternalInfoParam;
|
||||
import cn.wepact.dfm.training.dto.entity.TQualificationStandards;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* TQualificationStandardsMapper继承基类
|
||||
*/
|
||||
@Mapper
|
||||
public interface TQualificationStandardsMapper extends MyBatisBaseMapper<TQualificationStandards, Long> {
|
||||
List<TQualificationStandards> selectAllByOrgCode(@Param("orgCode") String orgCode);
|
||||
|
||||
|
||||
List<TQualificationStandards> selectByCondition(InternalInfoParam internalInfoParam);
|
||||
|
||||
/**
|
||||
* 根据ID查找对应的记录
|
||||
*
|
||||
* @param id 记录唯一标识符
|
||||
* @return TQualificationStandards 对象
|
||||
*/
|
||||
TQualificationStandards findById(Long id);
|
||||
/**
|
||||
* 根据ID和单位编码查找对应的记录
|
||||
*
|
||||
* @param qualificationStandardsId 记录唯一标识符
|
||||
* @param orgCode 单位编码
|
||||
* @return TQualificationStandards 对象
|
||||
*/
|
||||
|
||||
TQualificationStandards findByIdAndOrgCode(@Param("qualificationStandardsId") Long qualificationStandardsId, @Param("orgCode") String orgCode);
|
||||
}
|
||||
@@ -0,0 +1,231 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="cn.wepact.dfm.training.mapper.TQualificationStandardsMapper">
|
||||
<resultMap id="BaseResultMap" type="cn.wepact.dfm.training.dto.entity.TQualificationStandards">
|
||||
<id column="id" jdbcType="BIGINT" property="id" />
|
||||
<result column="position_name" jdbcType="VARCHAR" property="positionName" />
|
||||
<result column="qualification_level" jdbcType="VARCHAR" property="qualificationLevel" />
|
||||
<result column="org_code" jdbcType="VARCHAR" property="orgCode" />
|
||||
<result column="created_at" jdbcType="TIMESTAMP" property="createdAt" />
|
||||
<result column="created_by" jdbcType="VARCHAR" property="createdBy" />
|
||||
<result column="updated_at" jdbcType="TIMESTAMP" property="updatedAt" />
|
||||
<result column="updated_by" jdbcType="VARCHAR" property="updatedBy" />
|
||||
<result column="del_flag" jdbcType="VARCHAR" property="delFlag" />
|
||||
<result column="qualification_criteria" jdbcType="LONGVARCHAR" property="qualificationCriteria" />
|
||||
</resultMap>
|
||||
<sql id="Base_Column_List">
|
||||
id, position_name, qualification_level, org_code, created_at,
|
||||
created_by, updated_at, updated_by, del_flag,qualification_criteria
|
||||
</sql>
|
||||
<select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
|
||||
select
|
||||
<include refid="Base_Column_List" />
|
||||
from t_qualification_standards
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</select>
|
||||
<select id="selectAllByOrgCode" resultType="cn.wepact.dfm.training.dto.entity.TQualificationStandards"
|
||||
parameterType="java.lang.String">
|
||||
SELECT
|
||||
id,
|
||||
position_name as positionName,
|
||||
qualification_level as qualificationLevel,
|
||||
qualification_criteria as qualificationCriteria
|
||||
FROM
|
||||
t_qualification_standards
|
||||
WHERE
|
||||
del_flag = '0'
|
||||
AND org_code = #{orgCode}
|
||||
</select>
|
||||
<select id="selectByCondition" resultType="cn.wepact.dfm.training.dto.entity.TQualificationStandards"
|
||||
parameterType="cn.wepact.dfm.training.dto.InternalInfoParam">
|
||||
SELECT
|
||||
id,
|
||||
position_name as positionName,
|
||||
qualification_level as qualificationLevel,
|
||||
qualification_criteria as qualificationCriteria
|
||||
FROM
|
||||
t_qualification_standards
|
||||
WHERE
|
||||
del_flag = '0'
|
||||
<if test="orgCode != null">
|
||||
AND org_code = #{orgCode}
|
||||
</if>
|
||||
<if test="positionName != null">
|
||||
AND position_name like CONCAT('%',#{positionName},'%')
|
||||
</if>
|
||||
</select>
|
||||
|
||||
<delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
|
||||
delete from t_qualification_standards
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</delete>
|
||||
<insert id="insert" keyColumn="id" keyProperty="id" parameterType="cn.wepact.dfm.training.dto.entity.TQualificationStandards" useGeneratedKeys="true">
|
||||
insert into t_qualification_standards (position_name, qualification_level,
|
||||
org_code, created_at,
|
||||
created_by, updated_at, updated_by,
|
||||
del_flag, qualification_criteria)
|
||||
values (#{positionName,jdbcType=VARCHAR}, #{qualificationLevel,jdbcType=VARCHAR},
|
||||
#{orgCode,jdbcType=VARCHAR}, #{createdAt,jdbcType=TIMESTAMP},
|
||||
#{createdBy,jdbcType=VARCHAR}, #{updatedAt,jdbcType=TIMESTAMP}, #{updatedBy,jdbcType=VARCHAR},
|
||||
#{delFlag,jdbcType=VARCHAR}, #{qualificationCriteria,jdbcType=LONGVARCHAR})
|
||||
</insert>
|
||||
<insert id="insertSelective" keyColumn="id" keyProperty="id" parameterType="cn.wepact.dfm.training.dto.entity.TQualificationStandards" useGeneratedKeys="true">
|
||||
insert into t_qualification_standards
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
<if test="positionName != null">
|
||||
position_name,
|
||||
</if>
|
||||
<if test="qualificationLevel != null">
|
||||
qualification_level,
|
||||
</if>
|
||||
<if test="orgCode != null">
|
||||
org_code,
|
||||
</if>
|
||||
<if test="createdAt != null">
|
||||
created_at,
|
||||
</if>
|
||||
<if test="createdBy != null">
|
||||
created_by,
|
||||
</if>
|
||||
<if test="updatedAt != null">
|
||||
updated_at,
|
||||
</if>
|
||||
<if test="updatedBy != null">
|
||||
updated_by,
|
||||
</if>
|
||||
<if test="delFlag != null">
|
||||
del_flag,
|
||||
</if>
|
||||
<if test="qualificationCriteria != null">
|
||||
qualification_criteria,
|
||||
</if>
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="positionName != null">
|
||||
#{positionName,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="qualificationLevel != null">
|
||||
#{qualificationLevel,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="orgCode != null">
|
||||
#{orgCode,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="createdAt != null">
|
||||
#{createdAt,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="createdBy != null">
|
||||
#{createdBy,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="updatedAt != null">
|
||||
#{updatedAt,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="updatedBy != null">
|
||||
#{updatedBy,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="delFlag != null">
|
||||
#{delFlag,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="qualificationCriteria != null">
|
||||
#{qualificationCriteria,jdbcType=LONGVARCHAR},
|
||||
</if>
|
||||
</trim>
|
||||
</insert>
|
||||
<update id="updateByPrimaryKeySelective" parameterType="cn.wepact.dfm.training.dto.entity.TQualificationStandards">
|
||||
update t_qualification_standards
|
||||
<set>
|
||||
<if test="positionName != null">
|
||||
position_name = #{positionName,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="qualificationLevel != null">
|
||||
qualification_level = #{qualificationLevel,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="orgCode != null">
|
||||
org_code = #{orgCode,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="createdAt != null">
|
||||
created_at = #{createdAt,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="createdBy != null">
|
||||
created_by = #{createdBy,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="updatedAt != null">
|
||||
updated_at = #{updatedAt,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="updatedBy != null">
|
||||
updated_by = #{updatedBy,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="delFlag != null">
|
||||
del_flag = #{delFlag,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="qualificationCriteria != null">
|
||||
qualification_criteria = #{qualificationCriteria,jdbcType=LONGVARCHAR},
|
||||
</if>
|
||||
</set>
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</update>
|
||||
<!-- <update id="updateByPrimaryKey" parameterType="cn.wepact.dfm.training.dto.entity.TQualificationStandards">-->
|
||||
<!-- update t_qualification_standards-->
|
||||
<!-- set position_name = #{positionName,jdbcType=VARCHAR},-->
|
||||
<!-- qualification_level = #{qualificationLevel,jdbcType=VARCHAR},-->
|
||||
<!-- org_code = #{orgCode,jdbcType=VARCHAR},-->
|
||||
<!-- created_at = #{createdAt,jdbcType=TIMESTAMP},-->
|
||||
<!-- created_by = #{createdBy,jdbcType=VARCHAR},-->
|
||||
<!-- updated_at = #{updatedAt,jdbcType=TIMESTAMP},-->
|
||||
<!-- updated_by = #{updatedBy,jdbcType=VARCHAR},-->
|
||||
<!-- del_flag = #{delFlag,jdbcType=VARCHAR},-->
|
||||
<!-- qualification_criteria = #{qualificationCriteria,jdbcType=LONGVARCHAR}-->
|
||||
<!-- where id = #{id,jdbcType=BIGINT}-->
|
||||
<!-- </update>-->
|
||||
<update id="updateByPrimaryKey" parameterType="cn.wepact.dfm.training.dto.entity.TQualificationStandards">
|
||||
update t_qualification_standards
|
||||
set position_name = #{positionName,jdbcType=VARCHAR},
|
||||
qualification_level = #{qualificationLevel,jdbcType=VARCHAR},
|
||||
org_code = #{orgCode,jdbcType=VARCHAR},
|
||||
created_at = #{createdAt,jdbcType=TIMESTAMP},
|
||||
created_by = #{createdBy,jdbcType=VARCHAR},
|
||||
updated_at = #{updatedAt,jdbcType=TIMESTAMP},
|
||||
updated_by = #{updatedBy,jdbcType=VARCHAR},
|
||||
del_flag = #{delFlag,jdbcType=VARCHAR}
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</update>
|
||||
|
||||
<select id="findById" resultMap="BaseResultMap">
|
||||
SELECT
|
||||
id,
|
||||
position_name,
|
||||
qualification_level,
|
||||
org_code,
|
||||
qualification_criteria,
|
||||
created_at,
|
||||
created_by,
|
||||
updated_at,
|
||||
updated_by,
|
||||
del_flag
|
||||
FROM
|
||||
t_qualification_standards
|
||||
WHERE
|
||||
id = #{id}
|
||||
AND
|
||||
del_flag = '0'
|
||||
</select>
|
||||
|
||||
<select id="findByIdAndOrgCode" resultMap="BaseResultMap">
|
||||
SELECT
|
||||
id,
|
||||
position_name,
|
||||
qualification_level,
|
||||
org_code,
|
||||
qualification_criteria,
|
||||
created_at,
|
||||
created_by,
|
||||
updated_at,
|
||||
updated_by,
|
||||
del_flag
|
||||
FROM
|
||||
t_qualification_standards
|
||||
WHERE
|
||||
id = #{qualificationStandardsId}
|
||||
AND org_code = #{orgCode}
|
||||
AND del_flag = '0'
|
||||
</select>
|
||||
</mapper>
|
||||
25
src/main/java/cn/wepact/dfm/training/mapper/TUserMapper.java
Normal file
25
src/main/java/cn/wepact/dfm/training/mapper/TUserMapper.java
Normal file
@@ -0,0 +1,25 @@
|
||||
package cn.wepact.dfm.training.mapper;
|
||||
|
||||
import cn.wepact.dfm.training.dto.entity.TUser;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* TUserMapper继承基类
|
||||
*/
|
||||
@Mapper
|
||||
public interface TUserMapper extends MyBatisBaseMapper<TUser, Long> {
|
||||
// 根据用户名查询用户信息
|
||||
List<TUser> selectByConditions(TUser tUser);
|
||||
TUser selectByUserNo(String userNo);
|
||||
|
||||
/**
|
||||
* 根据 username 查询用户的 id
|
||||
* @param username 用户名
|
||||
* @return 用户 ID
|
||||
*/
|
||||
|
||||
Long findUserIdByUsername(@Param("username") String username);
|
||||
}
|
||||
193
src/main/java/cn/wepact/dfm/training/mapper/TUserMapper.xml
Normal file
193
src/main/java/cn/wepact/dfm/training/mapper/TUserMapper.xml
Normal file
@@ -0,0 +1,193 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="cn.wepact.dfm.training.mapper.TUserMapper">
|
||||
<resultMap id="BaseResultMap" type="cn.wepact.dfm.training.dto.entity.TUser">
|
||||
<id column="id" jdbcType="BIGINT" property="id" />
|
||||
<result column="username" jdbcType="VARCHAR" property="username" />
|
||||
<result column="password" jdbcType="VARCHAR" property="password" />
|
||||
<result column="user_avatar" jdbcType="VARCHAR" property="userAvatar" />
|
||||
<result column="email" jdbcType="VARCHAR" property="email" />
|
||||
<result column="user_no" jdbcType="INTEGER" property="userNo" />
|
||||
<result column="show_tip" jdbcType="VARCHAR" property="showTip" />
|
||||
<result column="updated_at" jdbcType="TIMESTAMP" property="updatedAt" />
|
||||
<result column="updated_by" jdbcType="VARCHAR" property="updatedBy" />
|
||||
<result column="created_at" jdbcType="TIMESTAMP" property="createdAt" />
|
||||
<result column="created_by" jdbcType="VARCHAR" property="createdBy" />
|
||||
<result column="del_flag" jdbcType="VARCHAR" property="delFlag" />
|
||||
</resultMap>
|
||||
<sql id="Base_Column_List">
|
||||
id, username, `password`, user_avatar, user_no, show_tip, updated_at, updated_by, created_at,
|
||||
created_by, del_flag, email
|
||||
</sql>
|
||||
<select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
|
||||
select
|
||||
<include refid="Base_Column_List" />
|
||||
from t_user
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</select>
|
||||
<delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
|
||||
delete from t_user
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</delete>
|
||||
<insert id="insert" keyColumn="id" keyProperty="id" parameterType="cn.wepact.dfm.training.dto.entity.TUser" useGeneratedKeys="true">
|
||||
insert into t_user (username, `password`, user_avatar,
|
||||
user_no, updated_at, updated_by,
|
||||
created_at, created_by, del_flag
|
||||
)
|
||||
values (#{username,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}, #{userAvatar,jdbcType=VARCHAR},
|
||||
#{userNo,jdbcType=INTEGER}, #{updatedAt,jdbcType=TIMESTAMP}, #{updatedBy,jdbcType=VARCHAR},
|
||||
#{createdAt,jdbcType=TIMESTAMP}, #{createdBy,jdbcType=VARCHAR}, #{delFlag,jdbcType=VARCHAR}
|
||||
)
|
||||
</insert>
|
||||
<insert id="insertSelective" keyColumn="id" keyProperty="id" parameterType="cn.wepact.dfm.training.dto.entity.TUser" useGeneratedKeys="true">
|
||||
insert into t_user
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
<if test="username != null">
|
||||
username,
|
||||
</if>
|
||||
<if test="password != null">
|
||||
`password`,
|
||||
</if>
|
||||
<if test="userAvatar != null">
|
||||
user_avatar,
|
||||
</if>
|
||||
<if test="userNo != null">
|
||||
user_no,
|
||||
</if>
|
||||
<if test="email != null">
|
||||
email,
|
||||
</if>
|
||||
<if test="updatedAt != null">
|
||||
updated_at,
|
||||
</if>
|
||||
<if test="updatedBy != null">
|
||||
updated_by,
|
||||
</if>
|
||||
<if test="createdAt != null">
|
||||
created_at,
|
||||
</if>
|
||||
<if test="createdBy != null">
|
||||
created_by,
|
||||
</if>
|
||||
<if test="delFlag != null">
|
||||
del_flag,
|
||||
</if>
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="username != null">
|
||||
#{username,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="password != null">
|
||||
#{password,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="userAvatar != null">
|
||||
#{userAvatar,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="userNo != null">
|
||||
#{userNo,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="email != null">
|
||||
#{email,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="updatedAt != null">
|
||||
#{updatedAt,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="updatedBy != null">
|
||||
#{updatedBy,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="createdAt != null">
|
||||
#{createdAt,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="createdBy != null">
|
||||
#{createdBy,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="delFlag != null">
|
||||
#{delFlag,jdbcType=VARCHAR},
|
||||
</if>
|
||||
</trim>
|
||||
</insert>
|
||||
<update id="updateByPrimaryKeySelective" parameterType="cn.wepact.dfm.training.dto.entity.TUser">
|
||||
update t_user
|
||||
<set>
|
||||
<if test="username != null">
|
||||
username = #{username,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="password != null">
|
||||
`password` = #{password,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="userAvatar != null">
|
||||
user_avatar = #{userAvatar,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="email != null">
|
||||
email = #{email,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="userNo != null">
|
||||
user_no = #{userNo,jdbcType=INTEGER},
|
||||
</if>
|
||||
<if test="showTip != null">
|
||||
show_tip = #{showTip,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="updatedAt != null">
|
||||
updated_at = #{updatedAt,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="updatedBy != null">
|
||||
updated_by = #{updatedBy,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="createdAt != null">
|
||||
created_at = #{createdAt,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="createdBy != null">
|
||||
created_by = #{createdBy,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="delFlag != null">
|
||||
del_flag = #{delFlag,jdbcType=VARCHAR},
|
||||
</if>
|
||||
</set>
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</update>
|
||||
<update id="updateByPrimaryKey" parameterType="cn.wepact.dfm.training.dto.entity.TUser">
|
||||
update t_user
|
||||
set username = #{username,jdbcType=VARCHAR},
|
||||
`password` = #{password,jdbcType=VARCHAR},
|
||||
user_avatar = #{userAvatar,jdbcType=VARCHAR},
|
||||
user_no = #{userNo,jdbcType=INTEGER},
|
||||
updated_at = #{updatedAt,jdbcType=TIMESTAMP},
|
||||
updated_by = #{updatedBy,jdbcType=VARCHAR},
|
||||
created_at = #{createdAt,jdbcType=TIMESTAMP},
|
||||
created_by = #{createdBy,jdbcType=VARCHAR},
|
||||
del_flag = #{delFlag,jdbcType=VARCHAR}
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</update>
|
||||
|
||||
<!-- 根据用户名查询用户信息 -->
|
||||
<select id="selectByUserNo" parameterType="java.lang.String" resultMap="BaseResultMap">
|
||||
SELECT <include refid="Base_Column_List" />
|
||||
FROM t_user
|
||||
WHERE user_no = #{userNo}
|
||||
and del_flag='0'
|
||||
</select>
|
||||
<select id="selectByConditions" resultType="cn.wepact.dfm.training.dto.entity.TUser">
|
||||
SELECT
|
||||
a.user_no as userNo,
|
||||
a.show_tip as showTip,
|
||||
a.username,
|
||||
a.`password`,
|
||||
a.id,
|
||||
b.user_type as userType,
|
||||
b.pre_type as preType,
|
||||
b.org_code as `orgCode`,
|
||||
a.email
|
||||
FROM t_user a,
|
||||
t_user_permission b
|
||||
WHERE
|
||||
a.id = b.user_id
|
||||
and a.user_no = #{userNo}
|
||||
and b.org_code = #{orgCode}
|
||||
and a.del_flag = '0'
|
||||
and b.del_flag ='0'
|
||||
</select>
|
||||
|
||||
<select id="findUserIdByUsername" resultType="java.lang.Long">
|
||||
SELECT id FROM t_user WHERE user_no = #{username}
|
||||
</select>
|
||||
</mapper>
|
||||
@@ -0,0 +1,15 @@
|
||||
package cn.wepact.dfm.training.mapper;
|
||||
|
||||
import cn.wepact.dfm.training.dto.entity.TUserPermission;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* TUserPermissionMapper继承基类
|
||||
*/
|
||||
@Mapper
|
||||
public interface TUserPermissionMapper extends MyBatisBaseMapper<TUserPermission, Long> {
|
||||
List<TUserPermission> selectByUserId(@Param("userId") Long userId);
|
||||
}
|
||||
@@ -0,0 +1,154 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="cn.wepact.dfm.training.mapper.TUserPermissionMapper">
|
||||
<resultMap id="BaseResultMap" type="cn.wepact.dfm.training.dto.entity.TUserPermission">
|
||||
<id column="id" jdbcType="BIGINT" property="id" />
|
||||
<result column="user_id" jdbcType="BIGINT" property="userId" />
|
||||
<result column="user_type" jdbcType="VARCHAR" property="userType" />
|
||||
<result column="org_code" jdbcType="VARCHAR" property="orgCode" />
|
||||
<result column="pre_type" jdbcType="VARCHAR" property="preType" />
|
||||
<result column="updated_at" jdbcType="TIMESTAMP" property="updatedAt" />
|
||||
<result column="updated_by" jdbcType="VARCHAR" property="updatedBy" />
|
||||
<result column="created_at" jdbcType="TIMESTAMP" property="createdAt" />
|
||||
<result column="created_by" jdbcType="VARCHAR" property="createdBy" />
|
||||
<result column="del_flag" jdbcType="VARCHAR" property="delFlag" />
|
||||
</resultMap>
|
||||
<sql id="Base_Column_List">
|
||||
id, user_id, user_type, org_code, pre_type, updated_at, updated_by, created_at,
|
||||
created_by, del_flag
|
||||
</sql>
|
||||
<select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
|
||||
select
|
||||
<include refid="Base_Column_List" />
|
||||
from t_user_permission
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</select>
|
||||
<select id="selectByUserId" resultMap="BaseResultMap"
|
||||
parameterType="java.lang.Long">
|
||||
select
|
||||
<include refid="Base_Column_List" />
|
||||
from t_user_permission
|
||||
where user_id = #{userId,jdbcType=BIGINT}
|
||||
</select>
|
||||
<delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
|
||||
delete from t_user_permission
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</delete>
|
||||
<insert id="insert" keyColumn="id" keyProperty="id" parameterType="cn.wepact.dfm.training.dto.entity.TUserPermission" useGeneratedKeys="true">
|
||||
insert into t_user_permission (user_id, user_type, org_code,
|
||||
pre_type, updated_at, updated_by,
|
||||
created_at, created_by, del_flag
|
||||
)
|
||||
values (#{userId,jdbcType=BIGINT}, #{userType,jdbcType=VARCHAR}, #{orgCode,jdbcType=BIGINT},
|
||||
#{preType,jdbcType=VARCHAR}, #{updatedAt,jdbcType=TIMESTAMP}, #{updatedBy,jdbcType=VARCHAR},
|
||||
#{createdAt,jdbcType=TIMESTAMP}, #{createdBy,jdbcType=VARCHAR}, #{delFlag,jdbcType=VARCHAR}
|
||||
)
|
||||
</insert>
|
||||
<insert id="insertSelective" keyColumn="id" keyProperty="id" parameterType="cn.wepact.dfm.training.dto.entity.TUserPermission" useGeneratedKeys="true">
|
||||
insert into t_user_permission
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
<if test="userId != null">
|
||||
user_id,
|
||||
</if>
|
||||
<if test="userType != null">
|
||||
user_type,
|
||||
</if>
|
||||
<if test="orgCode != null">
|
||||
org_code,
|
||||
</if>
|
||||
<if test="preType != null">
|
||||
pre_type,
|
||||
</if>
|
||||
<if test="updatedAt != null">
|
||||
updated_at,
|
||||
</if>
|
||||
<if test="updatedBy != null">
|
||||
updated_by,
|
||||
</if>
|
||||
<if test="createdAt != null">
|
||||
created_at,
|
||||
</if>
|
||||
<if test="createdBy != null">
|
||||
created_by,
|
||||
</if>
|
||||
<if test="delFlag != null">
|
||||
del_flag,
|
||||
</if>
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="userId != null">
|
||||
#{userId,jdbcType=BIGINT},
|
||||
</if>
|
||||
<if test="userType != null">
|
||||
#{userType,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="orgCode != null">
|
||||
#{orgCode,jdbcType=BIGINT},
|
||||
</if>
|
||||
<if test="preType != null">
|
||||
#{preType,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="updatedAt != null">
|
||||
#{updatedAt,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="updatedBy != null">
|
||||
#{updatedBy,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="createdAt != null">
|
||||
#{createdAt,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="createdBy != null">
|
||||
#{createdBy,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="delFlag != null">
|
||||
#{delFlag,jdbcType=VARCHAR},
|
||||
</if>
|
||||
</trim>
|
||||
</insert>
|
||||
<update id="updateByPrimaryKeySelective" parameterType="cn.wepact.dfm.training.dto.entity.TUserPermission">
|
||||
update t_user_permission
|
||||
<set>
|
||||
<if test="userId != null">
|
||||
user_id = #{userId,jdbcType=BIGINT},
|
||||
</if>
|
||||
<if test="userType != null">
|
||||
user_type = #{userType,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="orgCode != null">
|
||||
org_code = #{orgCode,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="preType != null">
|
||||
pre_type = #{preType,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="updatedAt != null">
|
||||
updated_at = #{updatedAt,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="updatedBy != null">
|
||||
updated_by = #{updatedBy,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="createdAt != null">
|
||||
created_at = #{createdAt,jdbcType=TIMESTAMP},
|
||||
</if>
|
||||
<if test="createdBy != null">
|
||||
created_by = #{createdBy,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="delFlag != null">
|
||||
del_flag = #{delFlag,jdbcType=VARCHAR},
|
||||
</if>
|
||||
</set>
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</update>
|
||||
<update id="updateByPrimaryKey" parameterType="cn.wepact.dfm.training.dto.entity.TUserPermission">
|
||||
update t_user_permission
|
||||
set user_id = #{userId,jdbcType=BIGINT},
|
||||
user_type = #{userType,jdbcType=VARCHAR},
|
||||
org_code = #{orgCode,jdbcType=VARCHAR},
|
||||
pre_type = #{preType,jdbcType=VARCHAR},
|
||||
updated_at = #{updatedAt,jdbcType=TIMESTAMP},
|
||||
updated_by = #{updatedBy,jdbcType=VARCHAR},
|
||||
created_at = #{createdAt,jdbcType=TIMESTAMP},
|
||||
created_by = #{createdBy,jdbcType=VARCHAR},
|
||||
del_flag = #{delFlag,jdbcType=VARCHAR}
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</update>
|
||||
</mapper>
|
||||
@@ -0,0 +1,47 @@
|
||||
package cn.wepact.dfm.training.service;
|
||||
|
||||
|
||||
import cn.wepact.dfm.training.dto.PageParam;
|
||||
import cn.wepact.dfm.training.dto.entity.TEvidenceSubmission;
|
||||
import cn.wepact.dfm.training.dto.entity.TUser;
|
||||
import cn.wepact.dfm.training.mapper.TEvidenceSubmissionMapper;
|
||||
import cn.wepact.dfm.training.utils.FileUtil;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
@Slf4j
|
||||
public class BehaviorEvidenceService {
|
||||
@Value("${upload.basePath}")
|
||||
private String fileBasePath;
|
||||
@Resource
|
||||
private TEvidenceSubmissionMapper tEvidenceSubmissionMapper;
|
||||
|
||||
//获取个人行为举证列表
|
||||
public PageInfo<TEvidenceSubmission> getPersonalBehaviorEvidenceList(PageParam<TEvidenceSubmission> param){
|
||||
PageHelper.startPage(param.getPageNo(),param.getPageSize());
|
||||
List<TEvidenceSubmission> tProfessionalFeedbacks = tEvidenceSubmissionMapper.selectByCondition(param.getCondition());
|
||||
PageInfo<TEvidenceSubmission> pageInfo = new PageInfo<>(tProfessionalFeedbacks);
|
||||
return pageInfo;
|
||||
}
|
||||
//新增个人行为举证
|
||||
public Boolean addPersonalBehaviorEvidence(TEvidenceSubmission evidence){
|
||||
return tEvidenceSubmissionMapper.insertSelective(evidence) >0;
|
||||
}
|
||||
//上传个人行为举证附件材料
|
||||
public String uploadPersonalBehaviorEvidenceAttachment(TUser userInfo, MultipartFile filePath){
|
||||
//本地存储文件
|
||||
String filePathStr = fileBasePath + userInfo.getUserNo() + "\\behaviorEvidence\\" + new Date().getTime() + "_" + filePath.getOriginalFilename();
|
||||
return FileUtil.saveFile(filePath, filePathStr);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package cn.wepact.dfm.training.service;
|
||||
|
||||
|
||||
import cn.wepact.dfm.training.dto.entity.TDictionary;
|
||||
import cn.wepact.dfm.training.mapper.TDictionaryMapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
@Slf4j
|
||||
public class DictionaryService {
|
||||
@Resource
|
||||
private TDictionaryMapper tDictionaryMapper;
|
||||
|
||||
// 获取字典列表
|
||||
public List<TDictionary> getDictionaryList(TDictionary tDictionary) {
|
||||
return tDictionaryMapper.selectByCondition(tDictionary);
|
||||
}
|
||||
|
||||
// 新增字典
|
||||
public Integer addDictionary(TDictionary tDictionary) {
|
||||
return tDictionaryMapper.insertSelective(tDictionary);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,108 @@
|
||||
package cn.wepact.dfm.training.service;
|
||||
|
||||
import cn.wepact.dfm.training.dto.InternalInfoParam;
|
||||
import cn.wepact.dfm.training.dto.PageParam;
|
||||
import cn.wepact.dfm.training.dto.entity.TDictionary;
|
||||
import cn.wepact.dfm.training.dto.entity.TQualificationStandards;
|
||||
import cn.wepact.dfm.training.dto.entity.TUser;
|
||||
import cn.wepact.dfm.training.mapper.TQualificationStandardsMapper;
|
||||
import cn.wepact.dfm.training.utils.FileUtil;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
@Slf4j
|
||||
public class InternalInformationService {
|
||||
@Resource
|
||||
private DictionaryService dictionaryService;
|
||||
@Resource
|
||||
private TQualificationStandardsMapper tQualificationStandardsMapper;
|
||||
|
||||
@Value("${upload.basePath}")
|
||||
private String fileBasePath;
|
||||
|
||||
//获取信息内置列表
|
||||
public PageInfo<TQualificationStandards> getInternalInformationList(PageParam<InternalInfoParam> internalInfoParam){
|
||||
PageHelper.startPage(internalInfoParam.getPageNo(),internalInfoParam.getPageSize());
|
||||
List<TQualificationStandards> tQualificationStandards = tQualificationStandardsMapper.selectByCondition(internalInfoParam.getCondition());
|
||||
PageInfo<TQualificationStandards> pageInfo = new PageInfo<>(tQualificationStandards);
|
||||
return pageInfo;
|
||||
}
|
||||
//获取信息内置情况(废弃)
|
||||
// public void getInternalInformationSituation(){
|
||||
// return;
|
||||
// }
|
||||
//岗位序列等级新增
|
||||
public Boolean addPositionSequenceLevel(TQualificationStandards tQualificationStandards, TUser userInfo){
|
||||
tQualificationStandards.setCreatedBy(userInfo.getUserNo());
|
||||
tQualificationStandards.setCreatedAt(new Date());
|
||||
tQualificationStandards.setUpdatedBy(userInfo.getUserNo());
|
||||
tQualificationStandards.setUpdatedAt(new Date());
|
||||
tQualificationStandards.setDelFlag("0");
|
||||
return tQualificationStandardsMapper.insertSelective(tQualificationStandards) >0 ;
|
||||
}
|
||||
//岗位序列等级修改
|
||||
public Boolean modifyPositionSequenceLevel(TQualificationStandards tQualificationStandards, TUser userInfo){
|
||||
tQualificationStandards.setUpdatedBy(userInfo.getUserNo());
|
||||
tQualificationStandards.setUpdatedAt(new Date());
|
||||
return tQualificationStandardsMapper.updateByPrimaryKeySelective(tQualificationStandards) >0;
|
||||
}
|
||||
//岗位序列等级删除
|
||||
public Boolean deletePositionSequenceLevel(TQualificationStandards tQualificationStandards, TUser userInfo){
|
||||
TQualificationStandards data = new TQualificationStandards();
|
||||
data.setUpdatedBy(userInfo.getUserNo());
|
||||
data.setUpdatedAt(new Date());
|
||||
data.setDelFlag("1");
|
||||
data.setId(tQualificationStandards.getId());
|
||||
return tQualificationStandardsMapper.updateByPrimaryKeySelective(data) >0;
|
||||
}
|
||||
//上传任职资格管理办法
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean uploadQualificationManagementMeasures(TUser userInfo, MultipartFile filePath){
|
||||
//本地存储文件
|
||||
String filePathStr = fileBasePath + "\\internal\\" + new Date().getTime() + "_" + filePath.getOriginalFilename();
|
||||
String uploadUrl = FileUtil.saveFile(filePath, filePathStr);
|
||||
TDictionary tDictionary = TDictionary.builder().orgCode(userInfo.getOrgCode())
|
||||
.type("qualificationManagementMeasures").code("url").build();
|
||||
List<TDictionary> tDictionaries = dictionaryService.getDictionaryList(tDictionary);
|
||||
Integer version = 1;
|
||||
if(!CollectionUtils.isEmpty(tDictionaries)){
|
||||
Integer versionMax = tDictionaries.stream().max((o1, o2) -> o1.getVersion() - o2.getVersion()).get().getVersion();
|
||||
version = versionMax + 1;
|
||||
}
|
||||
TDictionary newDictionary =TDictionary.builder().orgCode(userInfo.getOrgCode()).type("qualificationManagementMeasures")
|
||||
.code("url").version(version).value(uploadUrl).createdBy(userInfo.getUserNo()).createdAt(new Date())
|
||||
.updatedBy(userInfo.getUserNo()).updatedAt(new Date()).delFlag("0").build();
|
||||
return dictionaryService.addDictionary(newDictionary) >0;
|
||||
}
|
||||
|
||||
//上传任职资格管理办法
|
||||
public String uploadQualificationStandard(TUser userInfo, MultipartFile filePath, String path){
|
||||
//本地存储文件
|
||||
String filePathStr = fileBasePath + "\\standard\\"+ path +"\\"+ new Date().getTime() + "_" + filePath.getOriginalFilename();
|
||||
return FileUtil.saveFile(filePath, filePathStr);
|
||||
}
|
||||
|
||||
|
||||
//获取任职资格管理办法
|
||||
public TDictionary getQualificationManagementMeasures(TUser userInfo) {
|
||||
TDictionary param = TDictionary.builder().orgCode(userInfo.getOrgCode()).type("qualificationManagementMeasures").code("url").build();
|
||||
List<TDictionary> tDictionaries = dictionaryService.getDictionaryList(param);
|
||||
if(!CollectionUtils.isEmpty(tDictionaries)){
|
||||
return tDictionaries.stream().max((o1, o2) -> o1.getVersion() - o2.getVersion()).get();
|
||||
}
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,391 @@
|
||||
package cn.wepact.dfm.training.service;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.wepact.dfm.common.util.StringUtils;
|
||||
import cn.wepact.dfm.training.dto.*;
|
||||
import cn.wepact.dfm.training.dto.entity.*;
|
||||
import cn.wepact.dfm.training.mapper.*;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDate;
|
||||
import java.time.ZoneId;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
|
||||
@Service
|
||||
@Slf4j
|
||||
public class JobApplicationService {
|
||||
@Resource
|
||||
private TDictionaryMapper tDictionaryMapper;
|
||||
@Resource
|
||||
private TQualificationStandardsMapper tQualificationStandardsMapper;
|
||||
@Resource
|
||||
private TQualificationReviewMapper tQualificationReviewMapper;
|
||||
@Resource
|
||||
private TPerformanceRuleMapper tPerformanceRuleMapper;
|
||||
@Resource
|
||||
private TAppCheckMapper tAppCheckMapper;
|
||||
@Resource
|
||||
private TProfessionalFeedbackMapper tProfessionalFeedbackMapper;
|
||||
|
||||
@Resource
|
||||
private TProfessionalStdRuleMapper tProfessionalStdRuleMapper;
|
||||
|
||||
@Resource
|
||||
private UserService userService;
|
||||
|
||||
@Resource
|
||||
private ProfessionalFeedbackService professionalFeedbackService;
|
||||
|
||||
@Autowired
|
||||
private ProjectJoinService projectJoinService;
|
||||
@Autowired
|
||||
private TOrgMapper tOrgMapper;
|
||||
// 获取任职资格等级列表(废弃)
|
||||
// public List<String> getQualificationLevelList() {
|
||||
// return tDictionaryMapper.selectAllByType("qualification_level");
|
||||
// }
|
||||
|
||||
//任职申请基本信息查询
|
||||
public void queryBasicInformation(){
|
||||
return;
|
||||
}
|
||||
//任职资格序列列表
|
||||
public List<TQualificationStandards> getQualificationSequenceList(String orgCode){
|
||||
return tQualificationStandardsMapper.selectAllByOrgCode(orgCode);
|
||||
}
|
||||
//任职资格等级列表(废弃)
|
||||
// public void getQualificationLevelList(){
|
||||
// return;
|
||||
// }
|
||||
// //任职资格课程清单列表
|
||||
// public void getQualificationCourseList(){
|
||||
// return;
|
||||
// }
|
||||
//申请规则校验情况查询 废弃
|
||||
// public void queryRuleValidationStatus(){
|
||||
// //UserBaseInfo
|
||||
//
|
||||
// return;
|
||||
// }
|
||||
//提交任职申请
|
||||
public String submitQualificationApplication(QualificationApplicationParam param, TUser user){
|
||||
TQualificationReview hasExit = tQualificationReviewMapper.findByUserIdAndProjectId(user.getId(), param.getProjectId());
|
||||
if(hasExit != null){
|
||||
return "存在未完成的相同等级的任职申请";
|
||||
}
|
||||
Long projectId = param.getProjectId();
|
||||
ProjectJoinRequest request = new ProjectJoinRequest();
|
||||
request.setProjectId(String.valueOf(projectId)); // 将 Long 转换为 String
|
||||
request.setUserInfo(param.getUserNo()); // 使用 setUserInfo 而不是 setStudentInfo
|
||||
// 获取当前年份的1月1号
|
||||
LocalDate firstDayOfYear = LocalDate.now().withMonth(1).withDayOfMonth(1);
|
||||
// 往前推2年
|
||||
LocalDate twoYearsAgo = firstDayOfYear.minus(2, ChronoUnit.YEARS);
|
||||
// 转换为Date类型
|
||||
Date from = Date.from(twoYearsAgo.atStartOfDay(ZoneId.systemDefault()).toInstant());
|
||||
// 将Date类型转换为字符串格式
|
||||
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd");
|
||||
request.setDateStr(sdf.format(from));
|
||||
// java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd");
|
||||
// request.setDateStr(sdf.format(new Date()));
|
||||
// 由于变量projectJoinResponse已在前面定义,这里直接使用赋值语句
|
||||
ProjectJoinResponse projectJoinResponse = projectJoinService.joinProject(request);
|
||||
// 判断接口返回状态,只有当 code=10000 时才进行插入操作
|
||||
if (!"10000".equals(projectJoinResponse.getCode())) {
|
||||
return "调用v学苑接口失败";
|
||||
}
|
||||
//获得专业回馈的必须项提示和积分(两年内)
|
||||
TQualificationStandards tQualificationStandards = tQualificationStandardsMapper.selectByPrimaryKey(param.getQualificationStandardsId());
|
||||
String appLevel = tQualificationStandards.getQualificationLevel();
|
||||
TQualificationReview totalScore = this.doProfessionalScore(param.getOrgCode(), appLevel, user.getId(), new Date());
|
||||
|
||||
TQualificationReview tQualificationReview = new TQualificationReview();
|
||||
TUser byUserNo = userService.findByUserNo(param.getUserNo());
|
||||
tQualificationReview.setUserId(byUserNo.getId());
|
||||
tQualificationReview.setOrgCode(param.getOrgCode());
|
||||
tQualificationReview.setQualificationStandardsId(param.getQualificationStandardsId());
|
||||
tQualificationReview.setCurrentDepartment(param.getCurrentDepartment());
|
||||
tQualificationReview.setProfessionalScore(totalScore.getProfessionalScore());
|
||||
tQualificationReview.setProfessionalTip(totalScore.getProfessionalTip());
|
||||
tQualificationReview.setStatus("0");
|
||||
tQualificationReview.setReviewTime(new Date());
|
||||
tQualificationReview.setCreatedBy(user.getUserNo());
|
||||
tQualificationReview.setUpdatedBy(user.getUserNo());
|
||||
tQualificationReview.setProjectId(projectId);
|
||||
if(tQualificationReviewMapper.insertSelective(tQualificationReview) > 0){
|
||||
return "申请成功";
|
||||
}else{
|
||||
return "申请失败";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得专业回馈的必须项提示和积分(两年内)
|
||||
*/
|
||||
public TQualificationReview doProfessionalScore(String orgCode, String appLevel, Long userId, Date date){
|
||||
if(date == null){
|
||||
date = new Date();
|
||||
}
|
||||
Instant instant = date.toInstant();
|
||||
ZoneId zone = ZoneId.systemDefault();
|
||||
LocalDate reviewTime = instant.atZone(zone).toLocalDate();
|
||||
// 获取当前年份的1月1号
|
||||
LocalDate firstDayOfYear = reviewTime.withMonth(1).withDayOfMonth(1);
|
||||
// 往前推2年
|
||||
LocalDate twoYearsAgo = firstDayOfYear.minus(2, ChronoUnit.YEARS);
|
||||
// 转换为Date类型
|
||||
Date from = Date.from(twoYearsAgo.atStartOfDay(ZoneId.systemDefault()).toInstant());
|
||||
|
||||
TProfessionalStdRule tProfessionalStdRule = new TProfessionalStdRule();
|
||||
tProfessionalStdRule.setOrgCode(orgCode);
|
||||
tProfessionalStdRule.setType("1");
|
||||
TUser user = new TUser();
|
||||
user.setId(userId);
|
||||
user.setOrgCode(orgCode);
|
||||
List<TProfessionalStdRule> tProfessionalStdRules = tProfessionalStdRuleMapper.selectByCondition(tProfessionalStdRule);
|
||||
List<TProfessionalStdRule> professionalFeedbackCategoryList = professionalFeedbackService.getProfessionalFeedbackCategoryStruct(user);
|
||||
Map<String, String> professionalFeedbackCategoryMap = new HashMap<>();
|
||||
for(TProfessionalStdRule item:professionalFeedbackCategoryList){
|
||||
professionalFeedbackCategoryMap.put(item.getCategoryCode(), item.getCategoryName());
|
||||
professionalFeedbackCategoryMap.put(item.getCategoryCode()+"-"+item.getDefineCode(), item.getCategoryName()+"-"+item.getDefineName());
|
||||
}
|
||||
String tip="";
|
||||
TProfessionalFeedback tProfessionalFeedback = new TProfessionalFeedback();
|
||||
tProfessionalFeedback.setOrgCode(orgCode);
|
||||
tProfessionalFeedback.setUserId(userId);
|
||||
tProfessionalFeedback.setSelectStartTime(from);
|
||||
tProfessionalFeedback.setSelectEndTime(new Date());
|
||||
tProfessionalFeedback.setAuditStatus("1");
|
||||
List<TProfessionalFeedback> scores = tProfessionalFeedbackMapper.selectByCondition(tProfessionalFeedback);
|
||||
Float totalScore = 0f;
|
||||
Map<String,Float> scoreMap = new HashMap<>();
|
||||
for(TProfessionalFeedback item:scores){
|
||||
totalScore += item.getScore() == null ? 0 : item.getScore();
|
||||
scoreMap.put(item.getCategoryCode(), item.getScore());
|
||||
scoreMap.put(item.getCategoryCode()+"-"+item.getDefineCode(), item.getScore());
|
||||
}
|
||||
for(TProfessionalStdRule item:tProfessionalStdRules){
|
||||
if(StringUtils.isNotEmpty(item.getRequiredQlevel())){
|
||||
JSONObject jsonObject = JSON.parseObject(item.getRequiredQlevel());
|
||||
String flag = jsonObject.getString("flag");
|
||||
String levels = jsonObject.getString("levels");
|
||||
if(flag.equals("1")){
|
||||
if(levels.contains(appLevel) &&
|
||||
!scoreMap.containsKey(item.getCategoryCode()) &&
|
||||
!tip.contains(professionalFeedbackCategoryMap.get(item.getCategoryCode()))){
|
||||
tip += professionalFeedbackCategoryMap.get(item.getCategoryCode())+";";
|
||||
}
|
||||
}
|
||||
if(flag.equals("2")){
|
||||
if(levels.contains(appLevel) &&
|
||||
!scoreMap.containsKey(item.getCategoryCode()+"-"+item.getDefineCode()) &&
|
||||
!tip.contains(professionalFeedbackCategoryMap.get(item.getCategoryCode()+"-"+item.getDefineCode()))){
|
||||
tip += professionalFeedbackCategoryMap.get(item.getCategoryCode()+"-"+item.getDefineCode())+";";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
TQualificationReview tQualificationReview = new TQualificationReview();
|
||||
tQualificationReview.setProfessionalScore(new BigDecimal(totalScore));
|
||||
tQualificationReview.setProfessionalTip(tip);
|
||||
return tQualificationReview;
|
||||
}
|
||||
|
||||
public TQualificationReview dealProfessionalFeedbackScore(TQualificationReview tQualificationReview){
|
||||
//先去处理下当前专业回馈积分
|
||||
TQualificationStandards tQualificationStandards = tQualificationStandardsMapper.selectByPrimaryKey(tQualificationReview.getQualificationStandardsId());
|
||||
String appLevel = tQualificationStandards.getQualificationLevel();
|
||||
TQualificationReview totalScore = this.doProfessionalScore(tQualificationReview.getOrgCode(),
|
||||
appLevel, tQualificationReview.getUserId(), tQualificationReview.getCreatedAt());
|
||||
tQualificationReview.setProfessionalScore(totalScore.getProfessionalScore());
|
||||
tQualificationReview.setProfessionalTip(totalScore.getProfessionalTip());
|
||||
|
||||
TProfessionalStdRule tProfessionalStdRule = new TProfessionalStdRule();
|
||||
tProfessionalStdRule.setOrgCode(tQualificationReview.getOrgCode());
|
||||
tProfessionalStdRule.setType("0");
|
||||
List<TProfessionalStdRule> tProfessionalStdRules = tProfessionalStdRuleMapper.selectByCondition(tProfessionalStdRule);
|
||||
for(TProfessionalStdRule item: tProfessionalStdRules){
|
||||
if(tQualificationReview.getProfessionalScore() == null){
|
||||
tQualificationReview.setProfessionalScore(new BigDecimal(0));
|
||||
}
|
||||
if(item.getQualificationLevel().equals(appLevel) &&
|
||||
tQualificationReview.getProfessionalScore().compareTo(BigDecimal.valueOf(item.getScore())) >= 0 &&
|
||||
org.springframework.util.StringUtils.isEmpty(tQualificationReview.getProfessionalTip())){
|
||||
if(tQualificationReview.getStatus().equals("1")){
|
||||
tQualificationReview.setStatus("2");
|
||||
}
|
||||
return tQualificationReview;
|
||||
}
|
||||
}
|
||||
return tQualificationReview;
|
||||
}
|
||||
|
||||
//获取是否有学习考试进行中
|
||||
public Map<String, CourseListResponse> isLearningExamInProgress(TUser userInfo){
|
||||
AppliedParam param = new AppliedParam();
|
||||
param.setUserId(userInfo.getId());
|
||||
List<String> statusList = new ArrayList<>();
|
||||
statusList.add("0");
|
||||
statusList.add("1");
|
||||
statusList.add("2");
|
||||
param.setStatusList(statusList);
|
||||
param.setOrgCode(userInfo.getOrgCode());
|
||||
|
||||
// 获取单位简称
|
||||
TOrg tOrg = this.getOrgByCode(userInfo.getOrgCode());
|
||||
String shortName = tOrg != null ? tOrg.getShortName() : "";
|
||||
|
||||
List<TQualificationReview> tQualificationReviews = tQualificationReviewMapper.selectByCondition(param);
|
||||
if(CollectionUtil.isEmpty(tQualificationReviews)){
|
||||
return null;
|
||||
}
|
||||
Map<String, CourseListResponse> result = new HashMap<>();
|
||||
for(TQualificationReview item:tQualificationReviews){
|
||||
CourseListRequest request = new CourseListRequest();
|
||||
// 拼接项目名称:职位名称-资格等级-单位简称
|
||||
request.setProjectName(shortName+"-"+item.getPositionName()+"-"+item.getQualificationLevel());
|
||||
CourseListResponse response = projectJoinService.getCourseList(request);
|
||||
if(response != null && response.getCode().equals("10000")){
|
||||
result.put(item.getPositionName()+"-"+item.getQualificationLevel(), response);
|
||||
}else{
|
||||
result.put(item.getPositionName()+"-"+item.getQualificationLevel(), null);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
//获取已申报任职资格列表
|
||||
public PageInfo<TQualificationReview> getDeclaredQualificationList(PageParam<AppliedParam> appliedParam){
|
||||
PageHelper.startPage(appliedParam.getPageNo(), appliedParam.getPageSize());
|
||||
List<TQualificationReview> tQualificationReviews = tQualificationReviewMapper.selectByCondition(appliedParam.getCondition());
|
||||
PageInfo<TQualificationReview> pageInfo = new PageInfo<>(tQualificationReviews);
|
||||
return pageInfo;
|
||||
}
|
||||
|
||||
//获取两年内的通过的任职资格列表
|
||||
public List<TQualificationReview> getPassedQualificationList(AppliedParam param){
|
||||
LocalDate today = LocalDate.now();
|
||||
// // 获取两年前的日期
|
||||
// LocalDate twoYearsAgo = today.minus(2, ChronoUnit.YEARS);
|
||||
// Date from = Date.from(twoYearsAgo.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
|
||||
// param.setStartTime(from);
|
||||
List<String> statusList = new ArrayList<>();
|
||||
statusList.add("5");
|
||||
statusList.add("7");
|
||||
param.setStatusList(statusList);
|
||||
List<TQualificationReview> data = tQualificationReviewMapper.selectByCondition(param);
|
||||
AtomicReference<Boolean> flag = new AtomicReference<>(false);
|
||||
data.forEach(item->{
|
||||
if(item.getStatus().equals("5")) {
|
||||
Instant instant = item.getReviewTime().toInstant();
|
||||
ZoneId zone = ZoneId.systemDefault();
|
||||
LocalDate reviewTime = instant.atZone(zone).toLocalDate();
|
||||
LocalDate twoYearsAfter = reviewTime.plus(2, ChronoUnit.YEARS);
|
||||
Date after = Date.from(twoYearsAfter.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
|
||||
item.setReviewEndTime(after);
|
||||
Long epochDay = today.toEpochDay() - reviewTime.toEpochDay();
|
||||
item.setValidTime((float) (epochDay.intValue()/365.0));
|
||||
flag.set(true);
|
||||
}else {
|
||||
item.setReviewTime(new Date(0));
|
||||
item.setReviewEndTime(new Date(0));
|
||||
}
|
||||
});
|
||||
if(flag.get()){
|
||||
data.removeIf(item->item.getStatus().equals("7"));
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
//获取资格审核列表
|
||||
public PageInfo<TQualificationReview> getQualificationAuditList(PageParam<AppliedParam> appliedParam, TUser tUser){
|
||||
PageHelper.startPage(appliedParam.getPageNo(), appliedParam.getPageSize());
|
||||
List<TUserPermission> roles = tUser.getRoles();
|
||||
if(!CollectionUtils.isEmpty(roles)){
|
||||
for (TUserPermission role : roles) {
|
||||
if(role.getUserType().equals("3")){
|
||||
if(appliedParam.getCondition() == null){
|
||||
appliedParam.setCondition(new AppliedParam());
|
||||
}
|
||||
if(CollectionUtils.isEmpty(appliedParam.getCondition().getPositionNameList())){
|
||||
appliedParam.getCondition().setPositionNameList(new ArrayList<>());
|
||||
}
|
||||
if(!org.springframework.util.StringUtils.isEmpty(role.getPreType()) && role.getPreType().contains(",")){
|
||||
String[] split = role.getPreType().split(",");
|
||||
for (String item : split) {
|
||||
appliedParam.getCondition().getPositionNameList().add(item);
|
||||
}
|
||||
}else {
|
||||
appliedParam.getCondition().getPositionNameList().add(role.getPreType());
|
||||
}
|
||||
}
|
||||
}
|
||||
if(appliedParam.getCondition() !=null &&
|
||||
!CollectionUtils.isEmpty(appliedParam.getCondition().getPositionNameList()) &&
|
||||
appliedParam.getCondition().getPositionNameList().contains("0")){
|
||||
appliedParam.getCondition().setPositionNameList(null);
|
||||
}
|
||||
}
|
||||
List<TQualificationReview> tQualificationReviews = tQualificationReviewMapper.selectWithUserInfoByCondition(appliedParam.getCondition());
|
||||
PageInfo<TQualificationReview> pageInfo = new PageInfo<>(tQualificationReviews);
|
||||
return pageInfo;
|
||||
}
|
||||
//获取资格审核详情信息(废弃)
|
||||
// public void getQualificationAuditDetailInfo(){
|
||||
// return;
|
||||
// }
|
||||
|
||||
//资格审核通过、不通过
|
||||
public Boolean qualificationAuditStatus(TQualificationReview tQualificationReview){
|
||||
if(tQualificationReview.getOfflineScore() != null){
|
||||
if(tQualificationReview.getOfflineScore().floatValue()<65){
|
||||
tQualificationReview.setStatus("6");
|
||||
}else{
|
||||
tQualificationReview.setStatus("5");
|
||||
}
|
||||
}
|
||||
return tQualificationReviewMapper.updateByPrimaryKeySelective(tQualificationReview) >0;
|
||||
}
|
||||
|
||||
//手动同步学习积分
|
||||
public void manualSyncLearningPoints(){
|
||||
return;
|
||||
}
|
||||
|
||||
public List<TPerformanceRule> getPerformanceRuleList(String orgCode) {
|
||||
TPerformanceRule param = new TPerformanceRule();
|
||||
param.setOrgCode(orgCode);
|
||||
return tPerformanceRuleMapper.selectByConditions(param);
|
||||
}
|
||||
|
||||
public TAppCheck getAppCheck(TAppCheck param) {
|
||||
List<TAppCheck> tAppChecks = tAppCheckMapper.selectByConditions(param);
|
||||
if (CollectionUtil.isNotEmpty(tAppChecks)) {
|
||||
return tAppChecks.get(0);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public TOrg getOrgByCode(String orgCode) {
|
||||
if (StringUtils.isEmpty(orgCode)) {
|
||||
return null;
|
||||
}
|
||||
return tOrgMapper.selectByCode(orgCode);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,231 @@
|
||||
package cn.wepact.dfm.training.service;
|
||||
|
||||
|
||||
import cn.wepact.dfm.training.dto.AppliedParam;
|
||||
import cn.wepact.dfm.training.dto.PageParam;
|
||||
import cn.wepact.dfm.training.dto.entity.*;
|
||||
import cn.wepact.dfm.training.mapper.TProfessionalFeedbackMapper;
|
||||
import cn.wepact.dfm.training.mapper.TProfessionalStdRuleMapper;
|
||||
import cn.wepact.dfm.training.mapper.TQualificationReviewMapper;
|
||||
import cn.wepact.dfm.training.mapper.TQualificationStandardsMapper;
|
||||
import cn.wepact.dfm.training.utils.FileUtil;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
@Slf4j
|
||||
public class ProfessionalFeedbackService {
|
||||
@Resource
|
||||
private TProfessionalFeedbackMapper tProfessionalFeedbackMapper;
|
||||
|
||||
@Resource
|
||||
private DictionaryService dictionaryService;
|
||||
|
||||
@Resource
|
||||
private TProfessionalStdRuleMapper tProfessionalStdRuleMapper;
|
||||
|
||||
@Resource
|
||||
private JobApplicationService jobApplicationService;
|
||||
@Resource
|
||||
private TQualificationReviewMapper tQualificationReviewMapper;
|
||||
|
||||
@Resource
|
||||
private TQualificationStandardsMapper tQualificationStandardsMapper;
|
||||
|
||||
|
||||
@Value("${upload.basePath}")
|
||||
private String fileBasePath;
|
||||
|
||||
//获取专业回馈列表
|
||||
public PageInfo<TProfessionalFeedback> getProfessionalFeedbackList(PageParam<TProfessionalFeedback> tProfessionalFeedback){
|
||||
PageHelper.startPage(tProfessionalFeedback.getPageNo(),tProfessionalFeedback.getPageSize());
|
||||
List<TProfessionalFeedback> tProfessionalFeedbacks = tProfessionalFeedbackMapper.selectByCondition(tProfessionalFeedback.getCondition());
|
||||
PageInfo<TProfessionalFeedback> pageInfo = new PageInfo<>(tProfessionalFeedbacks);
|
||||
return pageInfo;
|
||||
}
|
||||
public PageInfo<TProfessionalFeedback> getProfessionalFeedbackByRoleList(PageParam<TProfessionalFeedback> tProfessionalFeedback, TUser tUser){
|
||||
PageHelper.startPage(tProfessionalFeedback.getPageNo(),tProfessionalFeedback.getPageSize());
|
||||
List<TUserPermission> roles = tUser.getRoles();
|
||||
if(!CollectionUtils.isEmpty(roles)){
|
||||
for (TUserPermission role : roles) {
|
||||
if(role.getUserType().equals("2")){
|
||||
if(tProfessionalFeedback.getCondition() == null){
|
||||
tProfessionalFeedback.setCondition(new TProfessionalFeedback());
|
||||
}
|
||||
if(CollectionUtils.isEmpty(tProfessionalFeedback.getCondition().getDefineCodeList())){
|
||||
tProfessionalFeedback.getCondition().setDefineCodeList(new ArrayList<>());
|
||||
}
|
||||
if(!StringUtils.isEmpty(role.getPreType()) && role.getPreType().contains(",")){
|
||||
String[] split = role.getPreType().split(",");
|
||||
for (String item : split) {
|
||||
tProfessionalFeedback.getCondition().getDefineCodeList().add(item);
|
||||
}
|
||||
}else {
|
||||
tProfessionalFeedback.getCondition().getDefineCodeList().add(role.getPreType());
|
||||
}
|
||||
}
|
||||
}
|
||||
if(tProfessionalFeedback.getCondition() !=null &&
|
||||
!CollectionUtils.isEmpty(tProfessionalFeedback.getCondition().getDefineCodeList()) &&
|
||||
tProfessionalFeedback.getCondition().getDefineCodeList().contains("0")){
|
||||
tProfessionalFeedback.getCondition().setDefineCodeList(null);
|
||||
}
|
||||
}
|
||||
List<TProfessionalFeedback> tProfessionalFeedbacks = tProfessionalFeedbackMapper.selectWithUserInfoByCondition(tProfessionalFeedback.getCondition());
|
||||
PageInfo<TProfessionalFeedback> pageInfo = new PageInfo<>(tProfessionalFeedbacks);
|
||||
return pageInfo;
|
||||
}
|
||||
//新增专业回馈信息
|
||||
public Boolean addProfessionalFeedbackInfo(TProfessionalFeedback tProfessionalFeedback){
|
||||
//专业回馈积分计算
|
||||
TProfessionalStdRule parentParam = TProfessionalStdRule.builder()
|
||||
.orgCode(tProfessionalFeedback.getOrgCode())
|
||||
.categoryCode(tProfessionalFeedback.getCategoryCode())
|
||||
.defineCode(tProfessionalFeedback.getDefineCode())
|
||||
.type("1").build();
|
||||
TProfessionalStdRule parent = tProfessionalStdRuleMapper.selectByCondition(parentParam).get(0);
|
||||
TProfessionalStdRule roleParam = TProfessionalStdRule.builder()
|
||||
.orgCode(tProfessionalFeedback.getOrgCode())
|
||||
.parentId(parent.getId())
|
||||
.roleCode(tProfessionalFeedback.getRoleCode())
|
||||
.type("3").build();
|
||||
TProfessionalStdRule role = tProfessionalStdRuleMapper.selectByCondition(roleParam).get(0);
|
||||
TProfessionalStdRule levelParam = TProfessionalStdRule.builder()
|
||||
.orgCode(tProfessionalFeedback.getOrgCode())
|
||||
.parentId(parent.getId())
|
||||
.levelCode(tProfessionalFeedback.getLevelCode())
|
||||
.type("2").build();
|
||||
TProfessionalStdRule level = tProfessionalStdRuleMapper.selectByCondition(levelParam).get(0);
|
||||
tProfessionalFeedback.setScore(tProfessionalFeedback.getNumber() * role.getScore()*level.getScore());
|
||||
|
||||
return tProfessionalFeedbackMapper.insertSelective(tProfessionalFeedback) >0;
|
||||
}
|
||||
//上传专业回馈附件材料
|
||||
public String uploadProfessionalFeedbackAttachment(TUser userInfo, MultipartFile filePath){
|
||||
//本地存储文件
|
||||
String filePathStr = fileBasePath + userInfo.getUserNo() + "\\professionalFeedback\\" + new Date().getTime() + "_" + filePath.getOriginalFilename();
|
||||
return FileUtil.saveFile(filePath, filePathStr);
|
||||
}
|
||||
//获取专业回馈类别列表
|
||||
public List<TDictionary> getProfessionalFeedbackCategoryList(TUser userInfo){
|
||||
TDictionary tDictionary = TDictionary.builder().type("professional_type")
|
||||
.orgCode(userInfo.getOrgCode()).build();
|
||||
return dictionaryService.getDictionaryList(tDictionary);
|
||||
}
|
||||
public List<TProfessionalStdRule> getProfessionalFeedbackCategoryStruct(TUser userInfo){
|
||||
TDictionary tDictionary = TDictionary.builder().orgCode(userInfo.getOrgCode()).build();
|
||||
List<TDictionary> dicts = dictionaryService.getDictionaryList(tDictionary);
|
||||
Map<String, TDictionary> typeDictMap = new HashMap<>();
|
||||
Map<String, TDictionary> defineDictMap = new HashMap<>();
|
||||
Map<String, TDictionary> roleDictMap = new HashMap<>();
|
||||
Map<String, TDictionary> levelDictMap = new HashMap<>();
|
||||
|
||||
for (TDictionary dictionary : dicts) {
|
||||
if(dictionary.getType().equals("professional_type")){
|
||||
typeDictMap.put(dictionary.getCode(), dictionary);
|
||||
}
|
||||
if(dictionary.getType().equals("professional_define")){
|
||||
defineDictMap.put(dictionary.getCode(), dictionary);
|
||||
}
|
||||
if(dictionary.getType().equals("professional_role")){
|
||||
roleDictMap.put(dictionary.getCode(), dictionary);
|
||||
}
|
||||
if(dictionary.getType().equals("professional_level")){
|
||||
levelDictMap.put(dictionary.getCode(), dictionary);
|
||||
}
|
||||
}
|
||||
|
||||
TProfessionalStdRule param = TProfessionalStdRule.builder()
|
||||
.orgCode(userInfo.getOrgCode()).build();
|
||||
List<TProfessionalStdRule> tProfessionalStdRules = tProfessionalStdRuleMapper.selectByCondition(param);
|
||||
Map<Long, TProfessionalStdRule> data = new HashMap<>();
|
||||
for (TProfessionalStdRule item : tProfessionalStdRules) {
|
||||
if(item.getType().equals("1")){
|
||||
item.setCategoryName(typeDictMap.get(item.getCategoryCode()).getValue());
|
||||
item.setDefineName(defineDictMap.get(item.getDefineCode()).getValue());
|
||||
data.put(item.getId(), item);
|
||||
}else if(item.getType().equals("2")){
|
||||
item.setLevelName(levelDictMap.get(item.getLevelCode()).getValue());
|
||||
data.get(item.getParentId()).getLevelList().add(item);
|
||||
}else if(item.getType().equals("3")){
|
||||
item.setRoleName(roleDictMap.get(item.getRoleCode()).getValue());
|
||||
data.get(item.getParentId()).getRoleList().add(item);
|
||||
}
|
||||
}
|
||||
return new ArrayList<>(data.values());
|
||||
|
||||
}
|
||||
//获取专业回馈单位列表
|
||||
public List<TDictionary> getProfessionalFeedbackUnitList(TUser userInfo){
|
||||
TDictionary tDictionary = TDictionary.builder().type("professional_unit")
|
||||
.orgCode(userInfo.getOrgCode()).build();
|
||||
return dictionaryService.getDictionaryList(tDictionary);
|
||||
}
|
||||
//获取专业回馈角色列表
|
||||
public List<TDictionary> getProfessionalFeedbackRoleList(TUser userInfo){
|
||||
TDictionary tDictionary = TDictionary.builder().type("professional_role")
|
||||
.orgCode(userInfo.getOrgCode()).build();
|
||||
return dictionaryService.getDictionaryList(tDictionary);
|
||||
}
|
||||
//获取专业回馈层级列表
|
||||
public List<TDictionary> getProfessionalFeedbackHierarchyList(TUser userInfo){
|
||||
TDictionary tDictionary = TDictionary.builder().type("professional_level")
|
||||
.orgCode(userInfo.getOrgCode()).build();
|
||||
return dictionaryService.getDictionaryList(tDictionary);
|
||||
}
|
||||
|
||||
//专业回馈附件查看
|
||||
public void viewProfessionalFeedbackAttachment(){
|
||||
return;
|
||||
}
|
||||
//专业回馈审核通过
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean professionalFeedbackAuditApproval(TProfessionalFeedback tProfessionalFeedback){
|
||||
tProfessionalFeedback.setAuditStatus("1");
|
||||
tProfessionalFeedback.setAuditDate(new Date());
|
||||
if(tProfessionalFeedbackMapper.updateByPrimaryKeySelective(tProfessionalFeedback) >0){
|
||||
//处理此用户的所有任职资格申请
|
||||
TProfessionalFeedback userInfo = tProfessionalFeedbackMapper.selectByPrimaryKey(tProfessionalFeedback.getId());
|
||||
AppliedParam appliedParam = new AppliedParam();
|
||||
appliedParam.setUserId(userInfo.getUserId());
|
||||
appliedParam.setOrgCode(userInfo.getOrgCode());
|
||||
List<TQualificationReview> tQualificationReviews = tQualificationReviewMapper.selectByCondition(appliedParam);
|
||||
for(TQualificationReview tQualificationReview : tQualificationReviews){
|
||||
tQualificationReview = jobApplicationService.dealProfessionalFeedbackScore(tQualificationReview);
|
||||
tQualificationReviewMapper.updateByPrimaryKeySelective(tQualificationReview);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
//专业回馈审核驳回
|
||||
public Boolean professionalFeedbackAuditRejection(TProfessionalFeedback tProfessionalFeedback){
|
||||
tProfessionalFeedback.setAuditStatus("2");
|
||||
tProfessionalFeedback.setAuditDate(new Date());
|
||||
return tProfessionalFeedbackMapper.updateByPrimaryKeySelective(tProfessionalFeedback) >0;
|
||||
}
|
||||
|
||||
public List<TDictionary> getProfessionalFeedbackDefineList(TUser userInfo){
|
||||
TDictionary tDictionary = TDictionary.builder().type("professional_define")
|
||||
.orgCode(userInfo.getOrgCode()).build();
|
||||
return dictionaryService.getDictionaryList(tDictionary);
|
||||
}
|
||||
|
||||
//查看专业回馈信息(废弃)
|
||||
// public void viewProfessionalFeedbackInfo(){
|
||||
// return;
|
||||
// }
|
||||
}
|
||||
@@ -0,0 +1,148 @@
|
||||
package cn.wepact.dfm.training.service;
|
||||
|
||||
import cn.wepact.dfm.training.dto.CourseListRequest;
|
||||
import cn.wepact.dfm.training.dto.CourseListResponse;
|
||||
import cn.wepact.dfm.training.dto.ProjectJoinRequest;
|
||||
import cn.wepact.dfm.training.dto.ProjectJoinResponse;
|
||||
import cn.wepact.dfm.training.util.HttpClientUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
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.HttpClients;
|
||||
import org.apache.http.util.EntityUtils;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
public class ProjectJoinService {
|
||||
@Value("${api.dongfeng_project_url}")
|
||||
private String dongfengProjectUrl;
|
||||
|
||||
@Value("${api.project_add_member_url}")
|
||||
private String projectAddMemberUrl;
|
||||
|
||||
@Value("${api.getAPITokenUrl}")
|
||||
private String getApiTokenUrl;
|
||||
public ProjectJoinResponse joinProject(ProjectJoinRequest request) {
|
||||
Map<String, Object> dataMap = new HashMap<>();
|
||||
dataMap.put("dateStr", request.getDateStr());
|
||||
dataMap.put("userInfo", request.getUserInfo());
|
||||
dataMap.put("projectId", request.getProjectId());
|
||||
String responseStr = callApi(projectAddMemberUrl, dataMap);
|
||||
|
||||
if (responseStr != null) {
|
||||
return handleJoinResponse(responseStr);
|
||||
} else {
|
||||
return new ProjectJoinResponse("500", "第三方接口调用失败", "500", "接口调用异常");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private ProjectJoinResponse handleJoinResponse(String responseStr) {
|
||||
JSONObject json = JSONObject.parseObject(responseStr);
|
||||
String code = json.getString("code");
|
||||
String msg = json.getString("msg");
|
||||
String subCode = json.getString("subCode");
|
||||
String subMsg = json.getString("subMsg");
|
||||
|
||||
return new ProjectJoinResponse(code, msg, subCode, subMsg);
|
||||
}
|
||||
public CourseListResponse getCourseList(CourseListRequest request) {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("projectName", request.getProjectName());
|
||||
String responseStr = callGetApi(dongfengProjectUrl, params);
|
||||
if (responseStr != null) {
|
||||
// 根据第三方接口的响应,解析并返回结果
|
||||
return handleCourseListResponse(responseStr);
|
||||
} else {
|
||||
return null; // 返回null或者一些默认响应,具体视业务逻辑而定
|
||||
}
|
||||
}
|
||||
private CourseListResponse handleCourseListResponse(String responseStr) {
|
||||
JSONObject json = JSONObject.parseObject(responseStr);
|
||||
CourseListResponse response = new CourseListResponse();
|
||||
|
||||
response.setSubCode(json.getString("subCode"));
|
||||
response.setSubMsg(json.getString("subMsg"));
|
||||
response.setCode(json.getString("code"));
|
||||
response.setMsg(json.getString("msg"));
|
||||
response.setRequestId(json.getString("requestId"));
|
||||
|
||||
// 处理 data 对象
|
||||
JSONObject data = json.getJSONObject("data");
|
||||
if (data != null) {
|
||||
response.setProjectId(data.getString("projectId"));
|
||||
response.setProjectName(data.getString("projectName"));
|
||||
response.setProjectStatusName(data.getString("projectStatusName"));
|
||||
|
||||
// 处理 tasks 数组
|
||||
response.setTasks(data.getJSONArray("tasks").toJavaList(CourseListResponse.Task.class));
|
||||
}
|
||||
|
||||
return response;
|
||||
}
|
||||
private String callApi(String apiUrl, Map<String, Object> params) {
|
||||
// 假设 accessToken 是从某个地方获取的,比如从配置文件、Session 或者前端传递
|
||||
String accessToken = getAccessToken(); // 你可以根据自己的需求获取 token
|
||||
|
||||
// 调用 HttpClientUtil 的 doPost 方法
|
||||
String response = HttpClientUtil.doPost(apiUrl, params, accessToken);
|
||||
|
||||
// 如果需要,你可以进一步处理响应结果
|
||||
if (response != null && !response.isEmpty()) {
|
||||
// 处理响应数据,比如解析 JSON 或者记录日志
|
||||
return response;
|
||||
} else {
|
||||
// 错误处理
|
||||
System.out.println("API 请求失败,未收到响应");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
private String callGetApi(String apiUrl, Map<String, Object> params) {
|
||||
// 假设 accessToken 是从某个地方获取的,比如从配置文件、Session 或者前端传递
|
||||
String accessToken = getAccessToken(); // 你可以根据自己的需求获取 token
|
||||
|
||||
// 调用 HttpClientUtil 的 doPost 方法
|
||||
String response = HttpClientUtil.doGet(apiUrl, params, accessToken);
|
||||
|
||||
// 如果需要,你可以进一步处理响应结果
|
||||
if (response != null && !response.isEmpty()) {
|
||||
// 处理响应数据,比如解析 JSON 或者记录日志
|
||||
return response;
|
||||
} else {
|
||||
// 错误处理
|
||||
System.out.println("API 请求失败,未收到响应");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
// 假设这是获取 accessToken 的方法,根据需要修改
|
||||
private String getAccessToken() {
|
||||
String apiUrl = getApiTokenUrl;
|
||||
String accessToken = null;
|
||||
|
||||
try (CloseableHttpClient client = HttpClients.createDefault()) {
|
||||
HttpGet getRequest = new HttpGet(apiUrl);
|
||||
|
||||
// 执行请求
|
||||
HttpResponse response = client.execute(getRequest);
|
||||
|
||||
// 获取响应内容
|
||||
String responseString = EntityUtils.toString(response.getEntity());
|
||||
|
||||
// 解析响应 JSON
|
||||
com.alibaba.fastjson.JSONObject responseObject = com.alibaba.fastjson.JSON.parseObject(responseString);
|
||||
accessToken = responseObject.getString("accessToken"); // 假设返回的是 {"accessToken": "your-token"}
|
||||
} catch (Exception e) {
|
||||
System.out.println("获取 accessToken 失败: " + e.getMessage());
|
||||
}
|
||||
|
||||
return accessToken;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,635 @@
|
||||
package cn.wepact.dfm.training.service;
|
||||
|
||||
import cn.hutool.json.JSONArray;
|
||||
import cn.hutool.json.JSONException;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import cn.wepact.dfm.training.dto.SyncRequest;
|
||||
import cn.wepact.dfm.training.dto.TaskScoreSummary;
|
||||
import cn.wepact.dfm.training.dto.entity.*;
|
||||
import cn.wepact.dfm.training.mapper.*;
|
||||
import cn.wepact.dfm.training.util.HttpClientUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.itextpdf.text.log.Logger;
|
||||
import com.itextpdf.text.log.LoggerFactory;
|
||||
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.HttpClients;
|
||||
import org.apache.http.util.EntityUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.dao.DataAccessException;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.transaction.Transactional;
|
||||
import java.math.BigDecimal;
|
||||
import java.sql.Timestamp;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.*;
|
||||
|
||||
@Service
|
||||
public class SyncTaskService {
|
||||
private static final Logger logger = LoggerFactory.getLogger(SyncTaskService.class);
|
||||
// 其他方法省略...
|
||||
// private static final String All_API_URL = "https://openapi.yunxuetang.cn/v1/rpt2open/public/o2o/task/student/sync/all";
|
||||
// private static final String Incr_API_URL = "https://openapi.yunxuetang.cn/v1/rpt2open/public/o2o/task/student/sync/incr";
|
||||
@Value("${api.All_API_URL}")
|
||||
private String All_API_URL;
|
||||
@Value("${api.Incr_API_URL}")
|
||||
private String Incr_API_URL;
|
||||
@Value("${api.getAPITokenUrl}")
|
||||
private String getAPITokenUrl;
|
||||
@Autowired
|
||||
private SyncTaskLogMapper syncTaskLogMapper;
|
||||
|
||||
@Autowired
|
||||
private SyncUserInfoLogMapper syncUserInfoLogMapper;
|
||||
@Autowired
|
||||
private TUserMapper userMapper;
|
||||
@Autowired
|
||||
private TQualificationReviewMapper tQualificationReviewMapper;
|
||||
@Autowired
|
||||
private TQualificationStandardsMapper tQualificationStandardsMapper;
|
||||
|
||||
@Resource
|
||||
private JobApplicationService jobApplicationService;
|
||||
|
||||
@Autowired
|
||||
private LevelScoresMapper levelScoresMapper;
|
||||
@Transactional(rollbackOn = Exception.class)
|
||||
public ResponseEntity<String> syncTasks(SyncRequest syncRequest) {
|
||||
try {
|
||||
int offset =syncRequest.getOffset();
|
||||
int limit = syncRequest.getLimit();
|
||||
String searchStartTime = syncRequest.getSearchStartTime();
|
||||
String searchEndTime = syncRequest.getSearchEndTime();
|
||||
String syncType = syncRequest.getSyncType();
|
||||
int duration = syncRequest.getDuration();
|
||||
|
||||
if ("full".equalsIgnoreCase(syncType)) {
|
||||
// 全量同步,使用请求中传入的时间区间
|
||||
fullSync(offset, limit, searchStartTime, searchEndTime);
|
||||
} else if ("incremental".equalsIgnoreCase(syncType)) {
|
||||
// 增量同步,通常使用最后一次同步的时间戳
|
||||
incrementalSync(offset, limit,duration);
|
||||
} else {
|
||||
throw new IllegalArgumentException("Invalid syncType: " + syncType);
|
||||
}
|
||||
return ResponseEntity.ok("同步任务成功");
|
||||
} catch (Exception e) {
|
||||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("同步任务失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
private void fullSync(int offset, int limit, String searchStartTime, String searchEndTime) {
|
||||
while (true) {
|
||||
// 请求数据
|
||||
Map<String, Object> requestParams = new HashMap<>();
|
||||
requestParams.put("offset", offset);
|
||||
requestParams.put("limit", limit);
|
||||
requestParams.put("searchStartTime", searchStartTime);
|
||||
requestParams.put("searchEndTime", searchEndTime);
|
||||
|
||||
// 调用API获取数据
|
||||
String response = callApi(All_API_URL, requestParams);
|
||||
|
||||
// 如果返回数据为空,则结束同步
|
||||
if (response == null || response.isEmpty()) {
|
||||
break;
|
||||
}
|
||||
|
||||
try {
|
||||
// 将返回的数据解析为 JSONObject
|
||||
JSONObject responseJson = new JSONObject(response);
|
||||
|
||||
// 检查返回的 "data" 是否为空
|
||||
if (responseJson.containsKey("data") && responseJson.getJSONArray("data").size() == 0) {
|
||||
System.out.println("Data is empty, exiting the loop.");
|
||||
break; // 如果 "data" 为空,跳出循环
|
||||
}
|
||||
|
||||
// 在这里处理 "data" 非空的情况
|
||||
// 你可以继续进行数据处理
|
||||
// ...
|
||||
|
||||
} catch (JSONException e) {
|
||||
// 如果 JSON 解析出错,打印异常并跳出循环
|
||||
System.err.println("Error parsing JSON response: " + e.getMessage());
|
||||
break;
|
||||
}
|
||||
// 解析返回数据并保存到数据库
|
||||
saveSyncData(offset, limit, requestParams, response);
|
||||
|
||||
// 更新offset值,进行下一次同步
|
||||
offset += limit;
|
||||
}
|
||||
}
|
||||
private void incrementalSync(int offset, int limit, int duration) {
|
||||
// 获取上次同步的时间点
|
||||
String lastSyncTime = getLastSyncTimeFromDatabase();
|
||||
String searchStartTime;
|
||||
String searchEndTime = getCurrentTime();
|
||||
|
||||
if ("No sync time recorded.".equals(lastSyncTime) || "Error retrieving last sync time.".equals(lastSyncTime)) {
|
||||
// 如果没有同步记录,默认同步最近24小时的数据
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.add(Calendar.HOUR, -24);
|
||||
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
searchStartTime = dateFormat.format(calendar.getTime());
|
||||
} else {
|
||||
searchStartTime = lastSyncTime;
|
||||
}
|
||||
|
||||
// 请求数据
|
||||
while (true) {
|
||||
Map<String, Object> requestParams = new HashMap<>();
|
||||
requestParams.put("offset", offset);
|
||||
requestParams.put("limit", limit);
|
||||
requestParams.put("searchStartTime", searchStartTime);
|
||||
requestParams.put("searchEndTime", searchEndTime);
|
||||
requestParams.put("duration", duration);
|
||||
// 调用API获取数据
|
||||
String response = callApi(Incr_API_URL, requestParams);
|
||||
|
||||
// 如果返回数据为空,则结束同步
|
||||
if (response == null || response.isEmpty()) {
|
||||
break;
|
||||
}
|
||||
|
||||
try {
|
||||
// 将返回的数据解析为 JSONObject
|
||||
JSONObject responseJson = new JSONObject(response);
|
||||
|
||||
// 检查返回的 "data" 是否为空
|
||||
if (responseJson.containsKey("data") && responseJson.getJSONArray("data").size() == 0) {
|
||||
System.out.println("Data is empty, exiting the loop.");
|
||||
break; // 如果 "data" 为空,跳出循环
|
||||
}
|
||||
|
||||
// 在这里处理 "data" 非空的情况
|
||||
// 你可以继续进行数据处理
|
||||
// ...
|
||||
|
||||
} catch (JSONException e) {
|
||||
// 如果 JSON 解析出错,打印异常并跳出循环
|
||||
System.err.println("Error parsing JSON response: " + e.getMessage());
|
||||
break;
|
||||
}
|
||||
// 解析返回数据并保存到数据库
|
||||
saveSyncData(offset, limit, requestParams, response);
|
||||
|
||||
// 更新offset值,进行下一次同步
|
||||
offset += limit;
|
||||
}
|
||||
|
||||
// 增量同步后,更新最后同步时间
|
||||
updateLastSyncTimeToDatabase(getCurrentTime());
|
||||
}
|
||||
/**
|
||||
* 获取每个学生每个项目下必修和选修的任务汇总分数
|
||||
* @return 汇总的任务分数集合
|
||||
*/
|
||||
public List<TaskScoreSummary> getTaskScoreSummary() {
|
||||
return syncTaskLogMapper.getTaskScoreSummary();
|
||||
}
|
||||
public String getLastSyncTimeFromDatabase() {
|
||||
String formattedLastSyncTime = null;
|
||||
try {
|
||||
// 调用Mapper方法获取时间
|
||||
Date lastSyncTime = syncTaskLogMapper.getLastSyncTime();
|
||||
// Check if lastSyncTime is not null
|
||||
if (lastSyncTime != null) {
|
||||
// Format the date to a readable string (e.g., "yyyy-MM-dd HH:mm:ss")
|
||||
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
formattedLastSyncTime = dateFormat.format(lastSyncTime);
|
||||
} else {
|
||||
formattedLastSyncTime = "No sync time recorded.";
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
formattedLastSyncTime = "Error retrieving last sync time.";
|
||||
}
|
||||
return formattedLastSyncTime;
|
||||
}
|
||||
|
||||
private String getCurrentTime() {
|
||||
// 获取当前时间,用作增量同步结束的时间
|
||||
// 创建日期格式化对象
|
||||
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
|
||||
// 获取当前系统时间
|
||||
Date now = new Date();
|
||||
|
||||
// 格式化当前时间并返回字符串
|
||||
return dateFormat.format(now);
|
||||
}
|
||||
|
||||
private void updateLastSyncTimeToDatabase(String lastSyncTime) {
|
||||
// 更新最后同步时间到数据库
|
||||
try {
|
||||
// 将字符串转换为 Date 对象
|
||||
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
Date date = dateFormat.parse(lastSyncTime);
|
||||
|
||||
// 调用 Mapper 方法更新最后同步时间
|
||||
syncTaskLogMapper.updateLastSyncTime(date);
|
||||
|
||||
System.out.println("最后同步时间已更新: " + lastSyncTime);
|
||||
} catch (ParseException e) {
|
||||
e.printStackTrace();
|
||||
System.err.println("时间格式错误: " + lastSyncTime);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
System.err.println("更新数据库时发生错误");
|
||||
}
|
||||
}
|
||||
// 调用接口
|
||||
private String callApi(String apiUrl, Map<String, Object> params) {
|
||||
// 假设 accessToken 是从某个地方获取的,比如从配置文件、Session 或者前端传递
|
||||
String accessToken = getAccessToken(); // 你可以根据自己的需求获取 token
|
||||
|
||||
// 调用 HttpClientUtil 的 doPost 方法
|
||||
String response = HttpClientUtil.doPost(apiUrl, params, accessToken);
|
||||
|
||||
// 如果需要,你可以进一步处理响应结果
|
||||
if (response != null && !response.isEmpty()) {
|
||||
// 处理响应数据,比如解析 JSON 或者记录日志
|
||||
return response;
|
||||
} else {
|
||||
// 错误处理
|
||||
System.out.println("API 请求失败,未收到响应");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
// 假设这是获取 accessToken 的方法,根据需要修改
|
||||
private String getAccessToken() {
|
||||
String apiUrl = getAPITokenUrl;
|
||||
String accessToken = null;
|
||||
|
||||
try (CloseableHttpClient client = HttpClients.createDefault()) {
|
||||
HttpGet getRequest = new HttpGet(apiUrl);
|
||||
|
||||
// 执行请求
|
||||
HttpResponse response = client.execute(getRequest);
|
||||
|
||||
// 获取响应内容
|
||||
String responseString = EntityUtils.toString(response.getEntity());
|
||||
|
||||
// 解析响应 JSON
|
||||
com.alibaba.fastjson.JSONObject responseObject = JSON.parseObject(responseString);
|
||||
accessToken = responseObject.getString("accessToken"); // 假设返回的是 {"accessToken": "your-token"}
|
||||
} catch (Exception e) {
|
||||
System.out.println("获取 accessToken 失败: " + e.getMessage());
|
||||
}
|
||||
|
||||
return accessToken;
|
||||
}
|
||||
public static void main(String[] args) {
|
||||
|
||||
// String token = getAccessToken();
|
||||
// System.out.println("Access Token: " + token);
|
||||
}
|
||||
// 保存同步数据并展开字段
|
||||
private void saveSyncData(int offset, int limit, Map<String, Object> params, String responseData) {
|
||||
|
||||
// 假设你已经解析了API的响应数据到Java对象中
|
||||
JSONObject responseJson = null;
|
||||
JSONArray dataArray = null;
|
||||
try {
|
||||
responseJson = new JSONObject(responseData);
|
||||
dataArray = responseJson.getJSONArray("data");
|
||||
|
||||
for (int i = 0; i < dataArray.size(); i++) {
|
||||
JSONObject taskData = dataArray.getJSONObject(i);
|
||||
// 从任务数据中获取学生用户ID
|
||||
String stuUserId = getStringValue(taskData, "stuUserId");
|
||||
|
||||
|
||||
|
||||
// 1. 获取用户信息:根据云学堂的学生用户ID查询本地用户信息
|
||||
SyncUserInfoLog userInfo = syncUserInfoLogMapper.findUserInfoByStuUserId(stuUserId);
|
||||
if (userInfo == null) {
|
||||
continue; // 如果在本地数据库中找不到对应的用户信息,跳过当前记录的处理
|
||||
}
|
||||
|
||||
// 2. 获取系统内部的user_id:通过用户名查找对应的用户ID
|
||||
Long userId = userMapper.findUserIdByUsername(userInfo.getUsername());
|
||||
if (userId == null) {
|
||||
continue; // 如果找不到对应的用户ID,跳过当前记录的处理
|
||||
}
|
||||
|
||||
SyncTaskLog log = new SyncTaskLog();
|
||||
// 填充 SyncTaskLog 对象的字段
|
||||
log.setSyncTime(new Timestamp(System.currentTimeMillis()));
|
||||
log.setOffset(offset);
|
||||
log.setLimit(limit);
|
||||
log.setSearchStartTime(parseTimestamp((String) params.get("searchStartTime")));
|
||||
log.setSearchEndTime(parseTimestamp((String) params.get("searchEndTime")));
|
||||
log.setStatus(1); // 假设同步成功
|
||||
|
||||
log.setTaskId(getLongValue(taskData, "taskId"));
|
||||
log.setOrgId(getStringValue(taskData, "orgId"));
|
||||
log.setProjectId(getLongValue(taskData, "projectId"));
|
||||
log.setMainProjectId(getLongValue(taskData, "mainProjectId"));
|
||||
log.setStuUserId(getStringValue(taskData, "stuUserId"));
|
||||
log.setThirdUserId(getStringValue(taskData, "thirdUserId"));
|
||||
log.setFormal(getIntValue(taskData, "formal"));
|
||||
log.setPeriodId(getLongValue(taskData, "periodId"));
|
||||
log.setResultRepeatFlag(getIntValue(taskData, "resultRepeatFlag"));
|
||||
log.setSubResultId(getLongValue(taskData, "subResultId"));
|
||||
log.setSubTaskId(getLongValue(taskData, "subTaskId"));
|
||||
log.setRepeatCount(getIntValue(taskData, "repeatCount"));
|
||||
log.setSubTaskResultId(getLongValue(taskData, "subTaskResultId"));
|
||||
log.setOrderIndex(getIntValue(taskData, "orderIndex"));
|
||||
log.setTaskStatus(getIntValue(taskData, "taskStatus"));
|
||||
log.setTaskRequired(getIntValue(taskData, "taskRequired"));
|
||||
log.setTaskSchedule(getBigDecimalValue(taskData, "taskSchedule"));
|
||||
log.setTaskManualCompleted(getIntValue(taskData, "taskManualCompleted"));
|
||||
log.setTaskStartTime(parseTimestamp(getStringValue(taskData, "taskStartTime")));
|
||||
log.setTaskCompletedTime(parseTimestamp(getStringValue(taskData, "taskCompletedTime")));
|
||||
log.setTaskDuration(getIntValue(taskData, "taskDuration"));
|
||||
log.setIsRated(getIntValue(taskData, "isRated"));
|
||||
log.setTaskTargetScores(getBigDecimalValue(taskData, "taskTargetScores"));
|
||||
log.setTaskPassed(getIntValue(taskData, "taskPassed"));
|
||||
log.setTaskIsExcellent(getIntValue(taskData, "taskIsExcellent"));
|
||||
log.setTaskDelay(getIntValue(taskData, "taskDelay"));
|
||||
log.setTaskSignStatus(getIntValue(taskData, "taskSignStatus"));
|
||||
log.setTaskSignoutStatus(getIntValue(taskData, "taskSignoutStatus"));
|
||||
log.setTaskSignTime(parseTimestamp(getStringValue(taskData, "taskSignTime")));
|
||||
log.setTaskSignoutTime(parseTimestamp(getStringValue(taskData, "taskSignoutTime")));
|
||||
log.setTaskSignAddress(getStringValue(taskData, "taskSignAddress"));
|
||||
log.setTaskSignoutAddress(getStringValue(taskData, "taskSignoutAddress"));
|
||||
log.setTaskAnswer(getStringValue(taskData, "taskAnswer"));
|
||||
log.setTaskGetScores(getBigDecimalValue(taskData, "taskGetScores"));
|
||||
log.setTaskGetPoints(getIntValue(taskData, "taskGetPoints"));
|
||||
log.setTaskGetStudyHours(getIntValue(taskData, "taskGetStudyHours"));
|
||||
log.setStuDeleted(getIntValue(taskData, "stuDeleted"));
|
||||
log.setTaskResultDeleted(getIntValue(taskData, "taskResultDeleted"));
|
||||
log.setTaskHasTutor(getIntValue(taskData, "taskHasTutor"));
|
||||
log.setOjtTeacherId(getStringValue(taskData, "ojtTeacherId"));
|
||||
log.setOjtTeacherFullname(getStringValue(taskData, "ojtTeacherFullname"));
|
||||
log.setOjtStudyStatus(getIntValue(taskData, "ojtStudyStatus"));
|
||||
log.setOjtOutTime(parseTimestamp(getStringValue(taskData, "ojtOutTime")));
|
||||
log.setOjtInTime(parseTimestamp(getStringValue(taskData, "ojtInTime")));
|
||||
log.setTrCreateUserId(getStringValue(taskData, "trCreateUserId"));
|
||||
log.setTrUpdateUserId(getStringValue(taskData, "trUpdateUserId"));
|
||||
log.setTrUpdateTime(parseTimestamp(getStringValue(taskData, "trUpdateTime")));
|
||||
log.setTaskType(getIntValue(taskData, "taskType"));
|
||||
log.setTrCreateTime(parseTimestamp(getStringValue(taskData, "trCreateTime")));
|
||||
log.setUpdateTime(parseTimestamp(getStringValue(taskData, "updateTime")));
|
||||
log.setDbCreateTime(parseTimestamp(getStringValue(taskData, "dbCreateTime")));
|
||||
log.setDbUpdateTime(parseTimestamp(getStringValue(taskData, "dbUpdateTime")));
|
||||
|
||||
// 额外存储API响应的原始数据和错误信息
|
||||
log.setResponseData(responseData);
|
||||
log.setErrorMessage(optString(taskData, "errorMessage", ""));
|
||||
// 保存日志记录到数据库
|
||||
try {
|
||||
syncTaskLogMapper.insert(log);
|
||||
} catch (DataAccessException e) {
|
||||
logger.error("数据库保存失败:");
|
||||
throw e; // 抛出异常,跳出循环
|
||||
}
|
||||
// 去重逻辑:检查是否已经存在此taskId
|
||||
// SyncTaskLog existingLog = syncTaskLogMapper.findByTaskId(log.getTaskId());
|
||||
// if (existingLog != null) { // 如果存在,进行更新操作
|
||||
// existingLog.setStatus(log.getStatus());
|
||||
// existingLog.setTaskSchedule(log.getTaskSchedule());
|
||||
// existingLog.setTaskDuration(log.getTaskDuration());
|
||||
// existingLog.setSyncTime(log.getSyncTime());
|
||||
// existingLog.setOffset(log.getOffset());
|
||||
// existingLog.setLimit(log.getLimit());
|
||||
// existingLog.setSearchStartTime(log.getSearchStartTime());
|
||||
// existingLog.setSearchEndTime(log.getSearchEndTime());
|
||||
// existingLog.setTaskId(log.getTaskId());
|
||||
// existingLog.setOrgId(log.getOrgId());
|
||||
// existingLog.setProjectId(log.getProjectId());
|
||||
// existingLog.setMainProjectId(log.getMainProjectId());
|
||||
// existingLog.setStuUserId(log.getStuUserId());
|
||||
// existingLog.setThirdUserId(log.getThirdUserId());
|
||||
// existingLog.setFormal(log.getFormal());
|
||||
// existingLog.setPeriodId(log.getPeriodId());
|
||||
// existingLog.setResultRepeatFlag(log.getResultRepeatFlag());
|
||||
// existingLog.setSubResultId(log.getSubResultId());
|
||||
// existingLog.setSubTaskId(log.getSubTaskId());
|
||||
// existingLog.setRepeatCount(log.getRepeatCount());
|
||||
// existingLog.setSubTaskResultId(log.getSubTaskResultId());
|
||||
// existingLog.setOrderIndex(log.getOrderIndex());
|
||||
// existingLog.setTaskStatus(log.getTaskStatus());
|
||||
// existingLog.setTaskRequired(log.getTaskRequired());
|
||||
// existingLog.setTaskManualCompleted(log.getTaskManualCompleted());
|
||||
// existingLog.setTaskStartTime(log.getTaskStartTime());
|
||||
// existingLog.setTaskCompletedTime(log.getTaskCompletedTime());
|
||||
// existingLog.setIsRated(log.getIsRated());
|
||||
// existingLog.setTaskTargetScores(log.getTaskTargetScores());
|
||||
// existingLog.setTaskPassed(log.getTaskPassed());
|
||||
// existingLog.setTaskIsExcellent(log.getTaskIsExcellent());
|
||||
// existingLog.setTaskDelay(log.getTaskDelay());
|
||||
// existingLog.setTaskSignStatus(log.getTaskSignStatus());
|
||||
// existingLog.setTaskSignoutStatus(log.getTaskSignoutStatus());
|
||||
// existingLog.setTaskSignTime(log.getTaskSignTime());
|
||||
// existingLog.setTaskSignoutTime(log.getTaskSignoutTime());
|
||||
// existingLog.setTaskSignAddress(log.getTaskSignAddress());
|
||||
// existingLog.setTaskSignoutAddress(log.getTaskSignoutAddress());
|
||||
// existingLog.setTaskAnswer(log.getTaskAnswer());
|
||||
// existingLog.setTaskGetScores(log.getTaskGetScores());
|
||||
// existingLog.setTaskGetPoints(log.getTaskGetPoints());
|
||||
// existingLog.setTaskGetStudyHours(log.getTaskGetStudyHours());
|
||||
// existingLog.setStuDeleted(log.getStuDeleted());
|
||||
// existingLog.setTaskResultDeleted(log.getTaskResultDeleted());
|
||||
// existingLog.setTaskHasTutor(log.getTaskHasTutor());
|
||||
// existingLog.setOjtTeacherId(log.getOjtTeacherId());
|
||||
// existingLog.setOjtTeacherFullname(log.getOjtTeacherFullname());
|
||||
// existingLog.setOjtStudyStatus(log.getOjtStudyStatus());
|
||||
// existingLog.setOjtOutTime(log.getOjtOutTime());
|
||||
// existingLog.setCreatedAt(log.getCreatedAt());
|
||||
// existingLog.setUpdatedAt(log.getUpdatedAt());
|
||||
// // 新增字段更新
|
||||
// existingLog.setTrCreateUserId(log.getTrCreateUserId());
|
||||
// existingLog.setTrUpdateUserId(log.getTrUpdateUserId());
|
||||
// existingLog.setTrUpdateTime(log.getTrUpdateTime());
|
||||
// existingLog.setTaskType(log.getTaskType());
|
||||
// existingLog.setTrCreateTime(log.getTrCreateTime());
|
||||
// existingLog.setUpdateTime(log.getUpdateTime());
|
||||
// existingLog.setDbCreateTime(log.getDbCreateTime());
|
||||
// existingLog.setDbUpdateTime(log.getDbUpdateTime());
|
||||
// // 额外存储API响应的原始数据和错误信息
|
||||
// existingLog.setResponseData(log.getResponseData());
|
||||
// existingLog.setErrorMessage(log.getErrorMessage());
|
||||
//
|
||||
// // 执行更新操作
|
||||
// try {
|
||||
// syncTaskLogMapper.update(existingLog); // 更新数据库中的记录
|
||||
// } catch (DataAccessException e) {
|
||||
// logger.error("更新同步记录失败:", e);
|
||||
// throw e; // 抛出异常,跳出循环
|
||||
// }
|
||||
// }
|
||||
// else {
|
||||
// // 保存日志记录到数据库
|
||||
// try {
|
||||
// syncTaskLogMapper.insert(log);
|
||||
// } catch (DataAccessException e) {
|
||||
// logger.error("数据库保存失败:");
|
||||
// throw e; // 抛出异常,跳出循环
|
||||
// }
|
||||
// }
|
||||
}
|
||||
} catch (Exception e) {
|
||||
logger.error("同步数据处理失败:", e);
|
||||
throw e; // 抛出异常,跳出循环
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
// 辅助方法:转换字符串为时间戳
|
||||
private Timestamp parseTimestamp(String value) {
|
||||
try {
|
||||
return value != null && !value.isEmpty() ? Timestamp.valueOf(value) : null;
|
||||
} catch (IllegalArgumentException e) {
|
||||
// logger.error("时间转换失败: " + value, e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// 获取 Long 值,若为空则返回 null
|
||||
private Long getLongValue(JSONObject json, String key) {
|
||||
return json.containsKey(key) && json.get(key) != null ? json.getLong(key) : null;
|
||||
}
|
||||
|
||||
// 获取 String 值,若为空则返回空字符串
|
||||
private String getStringValue(JSONObject json, String key) {
|
||||
return json.containsKey(key) && json.get(key) != null ? json.getStr(key) : "";
|
||||
}
|
||||
|
||||
// 获取 Integer 值,若为空则返回 0
|
||||
private Integer getIntValue(JSONObject json, String key) {
|
||||
if (json != null && json.containsKey(key) && json.get(key) != null) {
|
||||
Object value = json.get(key);
|
||||
if (value instanceof Integer) {
|
||||
return (Integer) value; // 如果值是 Integer,直接返回
|
||||
} else {
|
||||
try {
|
||||
return Integer.parseInt(value.toString()); // 如果是其他类型,转换为 Integer
|
||||
} catch (NumberFormatException e) {
|
||||
return 0; // 转换失败,返回 0
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0; // 如果 json 为 null,或者 key 不存在,或者值是 JSONObject.NULL,返回 0
|
||||
}
|
||||
|
||||
// 获取 BigDecimal 值,若为空则返回 null
|
||||
private BigDecimal getBigDecimalValue(JSONObject json, String key) {
|
||||
return json.containsKey(key) && json.get(key) != null ? json.getBigDecimal(key) : null;
|
||||
}
|
||||
// 实现类似于 org.json.JSONObject 的 optString 方法
|
||||
public String optString(JSONObject json, String key, String defaultValue) {
|
||||
return json.containsKey(key) && json.get(key) != null ? json.getStr(key) : defaultValue;
|
||||
}
|
||||
|
||||
public void processTaskScores(List<TaskScoreSummary> taskScoreSummaries) {
|
||||
for (TaskScoreSummary summary : taskScoreSummaries) {
|
||||
// 1. 获取用户信息
|
||||
SyncUserInfoLog userInfo = syncUserInfoLogMapper.findUserInfoByStuUserId(summary.getStuUserId());
|
||||
if (userInfo == null) {
|
||||
continue; // 如果没有找到用户信息,跳过
|
||||
}
|
||||
|
||||
// 2. 获取 user_id
|
||||
Long userId = userMapper.findUserIdByUsername(userInfo.getUsername());
|
||||
if (userId == null) {
|
||||
continue; // 如果没有找到用户 ID,跳过
|
||||
}
|
||||
|
||||
// 3. 查找 qualification_review 记录
|
||||
TQualificationReview existingReview = tQualificationReviewMapper.findByUserIdAndProjectId(userId, summary.getProjectId());
|
||||
|
||||
// 4. 如果记录存在,则更新;如果记录不存在,则插入
|
||||
if (existingReview != null) {
|
||||
try {
|
||||
Long qualificationStandardsId = existingReview.getQualificationStandardsId();
|
||||
String orgCode = existingReview.getOrgCode();
|
||||
|
||||
// 检查资格标准ID和机构代码
|
||||
if (qualificationStandardsId == null) {
|
||||
logger.error("资格标准ID为空,userId: " + existingReview.getUserId() +
|
||||
", projectId: " + existingReview.getProjectId());
|
||||
continue;
|
||||
}
|
||||
|
||||
if (orgCode == null || orgCode.trim().isEmpty()) {
|
||||
logger.error("机构代码为空,userId: " + existingReview.getUserId() +
|
||||
", projectId: " + existingReview.getProjectId());
|
||||
continue;
|
||||
}
|
||||
|
||||
TQualificationStandards byId = tQualificationStandardsMapper.findByIdAndOrgCode(qualificationStandardsId, orgCode);
|
||||
if (byId == null) {
|
||||
logger.error("未找到对应的资格标准记录,standardsId: " + qualificationStandardsId +
|
||||
", orgCode: " + orgCode + ", userId: " + existingReview.getUserId());
|
||||
continue;
|
||||
}
|
||||
|
||||
String qualificationLevel = byId.getQualificationLevel();
|
||||
if (qualificationLevel == null || qualificationLevel.length() < 2) {
|
||||
logger.error("资格等级为空或格式不正确: " + qualificationLevel);
|
||||
return;
|
||||
}
|
||||
|
||||
String firstTwoChars = qualificationLevel.substring(0, 2);
|
||||
LevelScores byLevel = levelScoresMapper.findByLevel(firstTwoChars);
|
||||
if (byLevel == null) {
|
||||
logger.error("未找到对应的等级分数要求: " + firstTwoChars);
|
||||
return;
|
||||
}
|
||||
|
||||
if (summary.getRequiredTotalScores().compareTo(BigDecimal.valueOf(byLevel.getRequiredScore())) >= 0
|
||||
&& summary.getElectiveTotalScores().compareTo(BigDecimal.valueOf(byLevel.getElectiveScore())) >= 0) {
|
||||
existingReview.setStatus("1");
|
||||
//处理专业回馈达标
|
||||
existingReview = jobApplicationService.dealProfessionalFeedbackScore(existingReview);
|
||||
updateQualificationReview(existingReview, summary);
|
||||
}else{
|
||||
updateQualificationReview(existingReview, summary);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
logger.error("处理资格审核记录时发生错误", e);
|
||||
}
|
||||
}
|
||||
|
||||
//todo 暂时先不更新s: 这里的逻辑需要根据实际需求进行调整
|
||||
// else {
|
||||
// insertQualificationReview(userId, summary);
|
||||
// }
|
||||
}
|
||||
}
|
||||
private void updateQualificationReview(TQualificationReview existingReview, TaskScoreSummary summary) {
|
||||
// 假设这里是更新逻辑,按需要设置相关字段
|
||||
// 更新分数记录
|
||||
existingReview.setCompulsoryCourseScore(BigDecimal.valueOf(summary.getRequiredTotalScores().doubleValue()));
|
||||
existingReview.setElectiveCourseScore(BigDecimal.valueOf(summary.getElectiveTotalScores().doubleValue()));
|
||||
|
||||
|
||||
|
||||
// 执行更新操作
|
||||
tQualificationReviewMapper.updateQualificationReview(existingReview); // 更新操作,或者使用 UPDATE SQL 语句
|
||||
}
|
||||
|
||||
private void insertQualificationReview(Long userId, TaskScoreSummary summary) {
|
||||
TQualificationReview newReview = new TQualificationReview();
|
||||
newReview.setUserId(userId);
|
||||
newReview.setProjectId(summary.getProjectId());
|
||||
newReview.setCompulsoryCourseScore(BigDecimal.valueOf(summary.getRequiredTotalScores().doubleValue()));
|
||||
newReview.setElectiveCourseScore(BigDecimal.valueOf(summary.getElectiveTotalScores().doubleValue()));
|
||||
// 其他需要填充的字段,如 department, org_code 等
|
||||
tQualificationReviewMapper.insertQualificationReview(newReview);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,457 @@
|
||||
package cn.wepact.dfm.training.service;
|
||||
|
||||
import cn.hutool.json.JSONArray;
|
||||
import cn.hutool.json.JSONException;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import cn.wepact.dfm.training.dto.SyncRequest;
|
||||
import cn.wepact.dfm.training.dto.entity.SyncTaskLog;
|
||||
import cn.wepact.dfm.training.dto.entity.SyncUserInfoLog;
|
||||
import cn.wepact.dfm.training.mapper.SyncUserInfoLogMapper;
|
||||
import cn.wepact.dfm.training.mapper.TUserMapper;
|
||||
import cn.wepact.dfm.training.util.HttpClientUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
// 修改 import 语句
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
// 删除这两行
|
||||
// import com.itextpdf.text.log.Logger;
|
||||
// import com.itextpdf.text.log.LoggerFactory;
|
||||
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.HttpClients;
|
||||
import org.apache.http.util.EntityUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.dao.DataAccessException;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.transaction.Transactional;
|
||||
import java.math.BigDecimal;
|
||||
import java.sql.Timestamp;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@Service
|
||||
public class SyncUserInfoService {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(SyncUserInfoService.class);
|
||||
@Autowired
|
||||
private SyncUserInfoLogMapper syncUserInfoMapper;
|
||||
@Autowired
|
||||
private TUserMapper userMapper;
|
||||
@Value("${api.All_API_USER_URL}")
|
||||
private String All_API_USER_URL;
|
||||
@Value("${api.Incr_API_USER_URL}")
|
||||
private String Incr_API_USER_URL;
|
||||
@Value("${api.getAPITokenUrl}")
|
||||
private String getAPITokenUrl;
|
||||
|
||||
@Transactional(rollbackOn = Exception.class)
|
||||
public ResponseEntity<String> syncUserInfos(SyncRequest syncRequest) {
|
||||
try {
|
||||
// 执行同步逻辑
|
||||
// 如果成功
|
||||
int offset =syncRequest.getOffset();
|
||||
int limit = syncRequest.getLimit();
|
||||
String searchStartTime = syncRequest.getSearchStartTime();
|
||||
String searchEndTime = syncRequest.getSearchEndTime();
|
||||
String syncType = syncRequest.getSyncType();
|
||||
int duration = syncRequest.getDuration();
|
||||
if ("full".equalsIgnoreCase(syncType)) {
|
||||
// 全量同步,使用请求中传入的时间区间
|
||||
fullSync(offset, limit, searchStartTime, searchEndTime);
|
||||
} else if ("incremental".equalsIgnoreCase(syncType)) {
|
||||
// 增量同步,通常使用最后一次同步的时间戳
|
||||
incrementalSync(offset, limit,duration);
|
||||
}else {
|
||||
throw new IllegalArgumentException("Invalid syncType: " + syncType);
|
||||
}
|
||||
return ResponseEntity.ok("同步用户成功");
|
||||
} catch (Exception e) {
|
||||
// 如果发生异常
|
||||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("同步用户失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
private void fullSync(int offset, int limit, String searchStartTime, String searchEndTime) {
|
||||
while (true) {
|
||||
// 请求数据
|
||||
Map<String, Object> requestParams = new HashMap<>();
|
||||
requestParams.put("offset", offset);
|
||||
requestParams.put("limit", limit);
|
||||
requestParams.put("searchStartTime", searchStartTime);
|
||||
requestParams.put("searchEndTime", searchEndTime);
|
||||
|
||||
// 调用API获取数据
|
||||
String response = callApi(All_API_USER_URL, requestParams);
|
||||
|
||||
// 如果返回数据为空,则结束同步
|
||||
if (response == null || response.isEmpty()) {
|
||||
break;
|
||||
}
|
||||
|
||||
try {
|
||||
// 将返回的数据解析为 JSONObject
|
||||
JSONObject responseJson = new JSONObject(response);
|
||||
|
||||
// 检查返回的 "data" 是否为空
|
||||
if (responseJson.containsKey("data") && responseJson.getJSONArray("data").size() == 0) {
|
||||
System.out.println("Data is empty, exiting the loop.");
|
||||
break; // 如果 "data" 为空,跳出循环
|
||||
}
|
||||
|
||||
// 在这里处理 "data" 非空的情况
|
||||
// 你可以继续进行数据处理
|
||||
// ...
|
||||
|
||||
} catch (JSONException e) {
|
||||
// 如果 JSON 解析出错,打印异常并跳出循环
|
||||
System.err.println("Error parsing JSON response: " + e.getMessage());
|
||||
break;
|
||||
}
|
||||
// 解析返回数据并保存到数据库
|
||||
saveSyncUserData(offset, limit, requestParams, response);
|
||||
|
||||
// 更新offset值,进行下一次同步
|
||||
offset += limit;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void incrementalSync(int offset, int limit,int duration) {
|
||||
// 获取上次同步的时间点,通常从数据库中获取
|
||||
String lastSyncTime = getLastSyncTimeFromDatabase();
|
||||
|
||||
// 增量同步,使用上次同步的时间点作为查询的起始时间
|
||||
String searchStartTime = lastSyncTime;
|
||||
String searchEndTime = getCurrentTime();
|
||||
|
||||
// 请求数据
|
||||
while (true) {
|
||||
Map<String, Object> requestParams = new HashMap<>();
|
||||
requestParams.put("offset", offset);
|
||||
requestParams.put("limit", limit);
|
||||
requestParams.put("searchStartTime", searchStartTime);
|
||||
requestParams.put("searchEndTime", searchEndTime);
|
||||
requestParams.put("duration", duration);
|
||||
// 调用API获取数据
|
||||
String response = callApi(Incr_API_USER_URL, requestParams);
|
||||
// 如果返回数据为空,则结束同步
|
||||
if (response == null || response.isEmpty()) {
|
||||
break;
|
||||
}
|
||||
|
||||
try {
|
||||
// 将返回的数据解析为 JSONObject
|
||||
JSONObject responseJson = new JSONObject(response);
|
||||
|
||||
// 检查返回的 "data" 是否为空
|
||||
if (responseJson.containsKey("data") && responseJson.getJSONArray("data").size() == 0) {
|
||||
System.out.println("Data is empty, exiting the loop.");
|
||||
break; // 如果 "data" 为空,跳出循环
|
||||
}
|
||||
|
||||
// 在这里处理 "data" 非空的情况
|
||||
// 你可以继续进行数据处理
|
||||
// ...
|
||||
|
||||
} catch (JSONException e) {
|
||||
// 如果 JSON 解析出错,打印异常并跳出循环
|
||||
System.err.println("Error parsing JSON response: " + e.getMessage());
|
||||
break;
|
||||
}
|
||||
// 解析返回数据并保存到数据库
|
||||
saveSyncUserData(offset, limit, requestParams, response);
|
||||
|
||||
// 更新offset值,进行下一次同步
|
||||
offset += limit;
|
||||
}
|
||||
|
||||
// 增量同步后,更新最后同步时间
|
||||
updateLastSyncTimeToDatabase(getCurrentTime());
|
||||
}
|
||||
private void saveSyncUserData(int offset, int limit, Map<String, Object> params, String responseData) {
|
||||
// 检查入参
|
||||
if (responseData == null || responseData.isEmpty()) {
|
||||
logger.error("响应数据为空");
|
||||
return;
|
||||
}
|
||||
|
||||
JSONObject responseJson = null;
|
||||
JSONArray dataArray = null;
|
||||
try {
|
||||
responseJson = new JSONObject(responseData);
|
||||
// 检查data字段是否存在且不为空
|
||||
if (!responseJson.containsKey("data")) {
|
||||
logger.error("响应数据中没有data字段");
|
||||
return;
|
||||
}
|
||||
|
||||
dataArray = responseJson.getJSONArray("data");
|
||||
if (dataArray == null || dataArray.size() == 0) {
|
||||
logger.info("没有需要同步的数据");
|
||||
return;
|
||||
}
|
||||
|
||||
for (int i = 0; i < dataArray.size(); i++) {
|
||||
JSONObject dataObject = dataArray.getJSONObject(i);
|
||||
if (dataObject == null) {
|
||||
logger.warn("第{}条数据为空,跳过处理", i);
|
||||
continue;
|
||||
}
|
||||
|
||||
// 获取用户名,进行空值检查
|
||||
String username = getStringValue(dataObject, "username");
|
||||
if (username == null || username.trim().isEmpty()) {
|
||||
logger.warn("用户名为空,跳过处理第{}条数据", i);
|
||||
continue;
|
||||
}
|
||||
|
||||
// 获取系统内部的user_id
|
||||
Long userId = userMapper.findUserIdByUsername(username);
|
||||
if (userId == null) {
|
||||
logger.warn("未找到用户: {}", username);
|
||||
continue;
|
||||
}
|
||||
|
||||
// 后续代码保持不变
|
||||
SyncUserInfoLog userInfo = new SyncUserInfoLog();
|
||||
// 填充 SyncTaskLog 对象的字段
|
||||
userInfo.setSyncTime(new Timestamp(System.currentTimeMillis()));
|
||||
userInfo.setOffset(offset);
|
||||
userInfo.setSyncLimit(limit);
|
||||
userInfo.setSearchStartTime(parseTimestamp((String) params.get("searchStartTime")));
|
||||
userInfo.setSearchEndTime(parseTimestamp((String) params.get("searchEndTime")));
|
||||
userInfo.setStatus(1); // 假设同步成功
|
||||
|
||||
userInfo.setId(getStringValue(dataObject, "id"));
|
||||
userInfo.setUserId(getStringValue(dataObject, "userId"));
|
||||
userInfo.setUsername(getStringValue(dataObject, "username"));
|
||||
userInfo.setFullname(getStringValue(dataObject, "fullname"));
|
||||
userInfo.setGender(getIntValue(dataObject, "gender"));
|
||||
userInfo.setIdNo(getStringValue(dataObject, "idNo"));
|
||||
userInfo.setBirthday(getDateValue(dataObject, "birthday"));
|
||||
userInfo.setDeptId(getStringValue(dataObject, "deptId"));
|
||||
userInfo.setDeptName(getStringValue(dataObject, "deptName"));
|
||||
userInfo.setPositionId(getStringValue(dataObject, "positionId"));
|
||||
userInfo.setPositionName(getStringValue(dataObject, "positionName"));
|
||||
userInfo.setGradeId(getStringValue(dataObject, "gradeId"));
|
||||
userInfo.setGradeName(getStringValue(dataObject, "gradeName"));
|
||||
userInfo.setManagerId(getStringValue(dataObject, "managerId"));
|
||||
userInfo.setManagerFullname(getStringValue(dataObject, "managerFullname"));
|
||||
userInfo.setDeptManagerId(getStringValue(dataObject, "deptManagerId"));
|
||||
userInfo.setDeptManagerFullname(getStringValue(dataObject, "deptManagerFullname"));
|
||||
userInfo.setMobile(getStringValue(dataObject, "mobile"));
|
||||
userInfo.setEmail(getStringValue(dataObject, "email"));
|
||||
userInfo.setUserNo(getStringValue(dataObject, "userNo"));
|
||||
userInfo.setHireDate(getDateValue(dataObject, "hireDate"));
|
||||
userInfo.setExpiredTime(getDateValue(dataObject, "expiredTime"));
|
||||
userInfo.setAreaCode(getStringValue(dataObject, "areaCode"));
|
||||
userInfo.setUserStatus(getIntValue(dataObject, "userStatus"));
|
||||
userInfo.setAvatarUrl(getStringValue(dataObject, "avatarUrl"));
|
||||
userInfo.setAdmin(getIntValue(dataObject, "admin"));
|
||||
userInfo.setDeleted(getIntValue(dataObject, "deleted"));
|
||||
userInfo.setThirdUserId(getStringValue(dataObject, "thirdUserId"));
|
||||
userInfo.setCreateTime(getDateValue(dataObject, "createTime"));
|
||||
userInfo.setUpdateTime(getDateValue(dataObject, "updateTime"));
|
||||
userInfo.setUserType(getIntValue(dataObject, "userType"));
|
||||
// 额外存储API响应的原始数据和错误信息
|
||||
userInfo.setResponseData(responseData);
|
||||
userInfo.setErrorMessage(optString(dataObject, "errorMessage", ""));
|
||||
// Check if the user already exists in the database
|
||||
try {
|
||||
SyncUserInfoLog existingUser = syncUserInfoMapper.getUserInfoByUserId(userInfo.getUserId());
|
||||
if (existingUser == null) {
|
||||
// New user, insert into database
|
||||
try {
|
||||
syncUserInfoMapper.insertUserInfo(userInfo);
|
||||
logger.info("Successfully inserted new user: {}", userInfo.getUserId());
|
||||
} catch (DataAccessException e) {
|
||||
logger.error("Failed to insert new user: {}, error: {}", userInfo.getUserId(), e.getMessage());
|
||||
userInfo.setStatus(0); // 设置同步状态为失败
|
||||
userInfo.setErrorMessage(e.getMessage());
|
||||
syncUserInfoMapper.insertUserInfo(userInfo); // 保存失败记录
|
||||
continue; // 继续处理下一条记录
|
||||
}
|
||||
} else {
|
||||
// Existing user, update the user info
|
||||
try {
|
||||
syncUserInfoMapper.updateUserInfo(userInfo);
|
||||
logger.info("Successfully updated user: {}", userInfo.getUserId());
|
||||
} catch (DataAccessException e) {
|
||||
logger.error("Failed to update user: {}, error: {}", userInfo.getUserId(), e.getMessage());
|
||||
userInfo.setStatus(0); // 设置同步状态为失败
|
||||
userInfo.setErrorMessage(e.getMessage());
|
||||
syncUserInfoMapper.updateUserInfo(userInfo); // 保存失败记录
|
||||
continue; // 继续处理下一条记录
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
logger.error("Error processing user: {}, error: {}", userInfo.getUserId(), e.getMessage());
|
||||
continue; // 继续处理下一条记录
|
||||
}
|
||||
|
||||
}
|
||||
} catch (Exception e) {
|
||||
logger.error("同步数据处理失败:", e);
|
||||
throw e; // 抛出异常,跳出循环
|
||||
}
|
||||
|
||||
}
|
||||
public String getLastSyncTimeFromDatabase() {
|
||||
String formattedLastSyncTime = null;
|
||||
try {
|
||||
// 调用Mapper方法获取时间
|
||||
Date lastSyncTime = syncUserInfoMapper.getLastSyncTime();
|
||||
// Check if lastSyncTime is not null
|
||||
if (lastSyncTime != null) {
|
||||
// Format the date to a readable string (e.g., "yyyy-MM-dd HH:mm:ss")
|
||||
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
formattedLastSyncTime = dateFormat.format(lastSyncTime);
|
||||
} else {
|
||||
formattedLastSyncTime = "No sync time recorded.";
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
formattedLastSyncTime = "Error retrieving last sync time.";
|
||||
}
|
||||
return formattedLastSyncTime;
|
||||
}
|
||||
|
||||
private String getCurrentTime() {
|
||||
// 获取当前时间,用作增量同步结束的时间
|
||||
// 创建日期格式化对象
|
||||
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
|
||||
// 获取当前系统时间
|
||||
Date now = new Date();
|
||||
|
||||
// 格式化当前时间并返回字符串
|
||||
return dateFormat.format(now);
|
||||
}
|
||||
|
||||
private void updateLastSyncTimeToDatabase(String lastSyncTime) {
|
||||
// 更新最后同步时间到数据库
|
||||
try {
|
||||
// 将字符串转换为 Date 对象
|
||||
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
Date date = dateFormat.parse(lastSyncTime);
|
||||
|
||||
// 调用 Mapper 方法更新最后同步时间
|
||||
syncUserInfoMapper.updateLastSyncTime(date);
|
||||
|
||||
System.out.println("最后同步时间已更新: " + lastSyncTime);
|
||||
} catch (ParseException e) {
|
||||
e.printStackTrace();
|
||||
System.err.println("时间格式错误: " + lastSyncTime);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
System.err.println("更新数据库时发生错误");
|
||||
}
|
||||
}
|
||||
// 调用接口
|
||||
private String callApi(String apiUrl, Map<String, Object> params) {
|
||||
// 假设 accessToken 是从某个地方获取的,比如从配置文件、Session 或者前端传递
|
||||
String accessToken = getAccessToken(); // 你可以根据自己的需求获取 token
|
||||
|
||||
// 调用 HttpClientUtil 的 doPost 方法
|
||||
String response = HttpClientUtil.doPost(apiUrl, params, accessToken);
|
||||
|
||||
// 如果需要,你可以进一步处理响应结果
|
||||
if (response != null && !response.isEmpty()) {
|
||||
// 处理响应数据,比如解析 JSON 或者记录日志
|
||||
return response;
|
||||
} else {
|
||||
// 错误处理
|
||||
System.out.println("API 请求失败,未收到响应");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
// 假设这是获取 accessToken 的方法,根据需要修改
|
||||
private String getAccessToken() {
|
||||
String apiUrl =getAPITokenUrl;
|
||||
String accessToken = null;
|
||||
|
||||
try (CloseableHttpClient client = HttpClients.createDefault()) {
|
||||
HttpGet getRequest = new HttpGet(apiUrl);
|
||||
|
||||
// 执行请求
|
||||
HttpResponse response = client.execute(getRequest);
|
||||
|
||||
// 获取响应内容
|
||||
String responseString = EntityUtils.toString(response.getEntity());
|
||||
|
||||
// 解析响应 JSON
|
||||
com.alibaba.fastjson.JSONObject responseObject = JSON.parseObject(responseString);
|
||||
accessToken = responseObject.getString("accessToken"); // 假设返回的是 {"accessToken": "your-token"}
|
||||
} catch (Exception e) {
|
||||
System.out.println("获取 accessToken 失败: " + e.getMessage());
|
||||
}
|
||||
|
||||
return accessToken;
|
||||
}
|
||||
public static void main(String[] args) {
|
||||
|
||||
// String token = getAccessToken();
|
||||
// System.out.println("Access Token: " + token);
|
||||
}
|
||||
|
||||
// 辅助方法:转换字符串为时间戳
|
||||
private Timestamp parseTimestamp(String value) {
|
||||
try {
|
||||
return value != null && !value.isEmpty() ? Timestamp.valueOf(value) : null;
|
||||
} catch (IllegalArgumentException e) {
|
||||
// logger.error("时间转换失败: " + value, e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
private Date getDateValue(JSONObject json, String key) {
|
||||
String value = getStringValue(json, key);
|
||||
try {
|
||||
return value != null && !value.isEmpty() ? Timestamp.valueOf(value) : null;
|
||||
} catch (IllegalArgumentException e) {
|
||||
return null; // Invalid date format, return null
|
||||
}
|
||||
}
|
||||
// 获取 Long 值,若为空则返回 null
|
||||
private Long getLongValue(JSONObject json, String key) {
|
||||
return json.containsKey(key) && json.get(key) != null ? json.getLong(key) : null;
|
||||
}
|
||||
|
||||
// 获取 String 值,若为空则返回空字符串
|
||||
private String getStringValue(JSONObject json, String key) {
|
||||
return json.containsKey(key) && json.get(key) != null ? json.getStr(key) : "";
|
||||
}
|
||||
|
||||
// 获取 Integer 值,若为空则返回 0
|
||||
private Integer getIntValue(JSONObject json, String key) {
|
||||
if (json != null && json.containsKey(key) && json.get(key) != null) {
|
||||
Object value = json.get(key);
|
||||
if (value instanceof Integer) {
|
||||
return (Integer) value; // 如果值是 Integer,直接返回
|
||||
} else {
|
||||
try {
|
||||
return Integer.parseInt(value.toString()); // 如果是其他类型,转换为 Integer
|
||||
} catch (NumberFormatException e) {
|
||||
return 0; // 转换失败,返回 0
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0; // 如果 json 为 null,或者 key 不存在,或者值是 JSONObject.NULL,返回 0
|
||||
}
|
||||
|
||||
// 获取 BigDecimal 值,若为空则返回 null
|
||||
private BigDecimal getBigDecimalValue(JSONObject json, String key) {
|
||||
return json.containsKey(key) && json.get(key) != null ? json.getBigDecimal(key) : null;
|
||||
}
|
||||
// 实现类似于 org.json.JSONObject 的 optString 方法
|
||||
public String optString(JSONObject json, String key, String defaultValue) {
|
||||
return json.containsKey(key) && json.get(key) != null ? json.getStr(key) : defaultValue;
|
||||
}
|
||||
}
|
||||
144
src/main/java/cn/wepact/dfm/training/service/UserService.java
Normal file
144
src/main/java/cn/wepact/dfm/training/service/UserService.java
Normal file
@@ -0,0 +1,144 @@
|
||||
package cn.wepact.dfm.training.service;
|
||||
|
||||
|
||||
import cn.wepact.dfm.common.util.Constant;
|
||||
import cn.wepact.dfm.common.util.GeneralRespBean;
|
||||
import cn.wepact.dfm.training.dto.entity.TOrg;
|
||||
import cn.wepact.dfm.training.dto.entity.TUser;
|
||||
import cn.wepact.dfm.training.dto.entity.TUserPermission;
|
||||
import cn.wepact.dfm.training.mapper.TOrgMapper;
|
||||
import cn.wepact.dfm.training.mapper.TUserMapper;
|
||||
import cn.wepact.dfm.training.mapper.TUserPermissionMapper;
|
||||
import cn.wepact.dfm.training.utils.Md5Util;
|
||||
import cn.wepact.dfm.training.utils.TokenUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.transaction.Transactional;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
@Service
|
||||
@Slf4j
|
||||
public class UserService {
|
||||
@Resource
|
||||
private TUserMapper tUserMapper;
|
||||
@Resource
|
||||
private TUserPermissionMapper tUserPermissionMapper;
|
||||
@Resource
|
||||
private TOrgMapper tOrgMapper;
|
||||
|
||||
//登录验证
|
||||
public TUser loginAndGetUser(TUser tUser) {
|
||||
TUser result = new TUser();
|
||||
List<TUser> user = tUserMapper.selectByConditions(tUser);
|
||||
// 判断用户名和密码是否正确
|
||||
//密码用md5加密
|
||||
String password = Md5Util.getMD5(tUser.getPassword());
|
||||
|
||||
if (!CollectionUtils.isEmpty(user) && user.get(0).getPassword().equals(password)) {
|
||||
result = user.get(0);
|
||||
//获得权限
|
||||
List<TUserPermission> roles = new ArrayList<>();
|
||||
user.forEach(item-> {
|
||||
TUserPermission roleTemp = new TUserPermission();
|
||||
roleTemp.setUserType(item.getUserType());
|
||||
roleTemp.setOrgCode(item.getOrgCode());
|
||||
roleTemp.setPreType(item.getPreType());
|
||||
roles.add(roleTemp);
|
||||
});
|
||||
result.setRoles(roles);
|
||||
|
||||
String token = TokenUtil.createToken(result);
|
||||
// Map<String, String> tokenMap = new HashMap<>();
|
||||
// tokenMap.put("token", token);
|
||||
// tokenMap.put("tokenHead", tokenHead);//返回头部信息
|
||||
// https://blog.51cto.com/u_13317/9447469
|
||||
result.setToken(token);
|
||||
return result;
|
||||
}
|
||||
return null; // 登录失败返回null
|
||||
}
|
||||
|
||||
//注册账号密码
|
||||
@Transactional(rollbackOn = Exception.class)
|
||||
public Boolean register(TUser user) {
|
||||
// 判断用户名是否已经存在
|
||||
List<TUser> tUsers = tUserMapper.selectByConditions(user);
|
||||
if (!CollectionUtils.isEmpty(tUsers)) {
|
||||
log.info("用户名已经存在");
|
||||
return false;
|
||||
}
|
||||
// 密码用md5加密
|
||||
user.setPassword(Md5Util.getMD5(user.getPassword()));
|
||||
tUserMapper.insertSelective(user);
|
||||
TUserPermission tUserPermission = new TUserPermission();
|
||||
tUserPermission.setOrgCode(user.getOrgCode());
|
||||
tUserPermission.setUserType("1");
|
||||
tUserPermission.setUserId(user.getId());
|
||||
tUserPermissionMapper.insertSelective(tUserPermission);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
public List<TOrg> getDeptList() {
|
||||
return tOrgMapper.selectAll();
|
||||
}
|
||||
|
||||
public TUser findByUserNo(String userNo) {
|
||||
TUser user = tUserMapper.selectByUserNo(userNo);
|
||||
return user;
|
||||
}
|
||||
|
||||
// 生成六位随机数字验证码
|
||||
public String generateRandomCode() {
|
||||
Random random = new Random();
|
||||
StringBuilder smsCode = new StringBuilder();
|
||||
|
||||
// 随机生成6位数验证码
|
||||
for (int i = 0; i < 6; i++) {
|
||||
smsCode.append(random.nextInt(10)); // 生成0-9之间的随机数字
|
||||
}
|
||||
|
||||
return smsCode.toString();
|
||||
}
|
||||
|
||||
public GeneralRespBean<Boolean> updatePwd(TUser tUser) {
|
||||
GeneralRespBean<Boolean> respBean = new GeneralRespBean<>();
|
||||
TUser user = tUserMapper.selectByUserNo(tUser.getUserNo());
|
||||
String password = Md5Util.getMD5(tUser.getPassword());
|
||||
|
||||
if (user != null && user.getPassword().equals(password)) {
|
||||
if (tUser.getNewPwd().equals(tUser.getConfirmPwd())) {
|
||||
TUser updateUser = new TUser();
|
||||
updateUser.setId(user.getId());
|
||||
updateUser.setPassword(Md5Util.getMD5(tUser.getNewPwd()));
|
||||
updateUser.setUpdatedAt(new Date());
|
||||
updateUser.setUpdatedBy(tUser.getUserNo());
|
||||
if(tUserMapper.updateByPrimaryKeySelective(updateUser)>0) {
|
||||
respBean.setMsg(Constant.SUCCESS_MSG);
|
||||
respBean.setCode(Constant.SUCCESS_CODE);
|
||||
}else {
|
||||
respBean.setMsg("修改密码失败!");
|
||||
respBean.setCode(Constant.ERROR_CODE);
|
||||
}
|
||||
}else {
|
||||
respBean.setMsg("两次密码输入不一致!");
|
||||
respBean.setCode(Constant.ERROR_CODE);
|
||||
}
|
||||
}else {
|
||||
respBean.setMsg("原密码错误!");
|
||||
respBean.setCode(Constant.ERROR_CODE);
|
||||
}
|
||||
return respBean;
|
||||
}
|
||||
|
||||
public Boolean cancelPreview(TUser user) {
|
||||
user.setShowTip("1");
|
||||
return tUserMapper.updateByPrimaryKeySelective(user)>1;
|
||||
}
|
||||
}
|
||||
194
src/main/java/cn/wepact/dfm/training/util/AuthorizationUtil.java
Normal file
194
src/main/java/cn/wepact/dfm/training/util/AuthorizationUtil.java
Normal file
@@ -0,0 +1,194 @@
|
||||
//package cn.wepact.dfm.training.util;
|
||||
//
|
||||
//import cn.wepact.dfm.account.client.OrgFeignClient;
|
||||
//import cn.wepact.dfm.account.entity.MoreUser;
|
||||
//import cn.wepact.dfm.common.util.GeneralRespBean;
|
||||
//import cn.wepact.dfm.common.util.JsonUtil;
|
||||
//import cn.wepact.dfm.org.entity.ProfileEmp;
|
||||
//import cn.wepact.dfm.org.feign.ArchivesClient;
|
||||
//import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
//import lombok.extern.slf4j.Slf4j;
|
||||
//import org.apache.commons.lang.StringUtils;
|
||||
//import org.springframework.beans.factory.annotation.Autowired;
|
||||
//import org.springframework.stereotype.Component;
|
||||
//import org.springframework.util.ObjectUtils;
|
||||
//import org.springframework.web.context.request.RequestContextHolder;
|
||||
//import org.springframework.web.context.request.ServletRequestAttributes;
|
||||
//
|
||||
//import javax.annotation.Resource;
|
||||
//import javax.servlet.http.HttpServletRequest;
|
||||
//import java.util.ArrayList;
|
||||
//import java.util.HashMap;
|
||||
//import java.util.List;
|
||||
//import java.util.Map;
|
||||
//import java.util.stream.Collectors;
|
||||
//
|
||||
//@Component
|
||||
//@Slf4j
|
||||
//public class AuthorizationUtil {
|
||||
//
|
||||
//
|
||||
// private static final String REDIS_KEY_USER_INFOR = "user.%s.information";
|
||||
// private static final String REDIS_KEY_USERID_INFOR = "userid.%s.information";
|
||||
// private static final long REDIS_EXPRIE_SECONDS_USER_INFOR = 60*60;
|
||||
//
|
||||
// @Autowired
|
||||
// private OrgFeignClient orgFeignClient;
|
||||
// @Resource
|
||||
// private RedisUtils redisUtils;
|
||||
//
|
||||
// @Resource
|
||||
// private ArchivesClient archivesClient;
|
||||
//
|
||||
// private ServletRequestAttributes servletRequestAttributes() {
|
||||
// return (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
|
||||
// }
|
||||
//
|
||||
// public HttpServletRequest getRequest() {
|
||||
// return servletRequestAttributes().getRequest();
|
||||
// }
|
||||
//
|
||||
// public String getToken() {
|
||||
// return getRequest().getHeader("token");
|
||||
// }
|
||||
//
|
||||
// public String getMenuCode() {
|
||||
// return getRequest().getHeader("menuCode");
|
||||
// }
|
||||
//
|
||||
// public MoreUser getUser() throws Exception {
|
||||
// MoreUser user = orgFeignClient.getUserByToken(getToken()).getData();
|
||||
// if (ObjectUtils.isEmpty(user)) {
|
||||
// throw new Exception();
|
||||
// }
|
||||
// return user;
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * 获取登录用户角色
|
||||
// * @return
|
||||
// */
|
||||
// public List<String> getUserRoleList() {
|
||||
//
|
||||
// List<String> roleList = new ArrayList<>();
|
||||
//
|
||||
// List<MoreUser> moreUsers = orgFeignClient.getOrgRoleUserByToken(getToken()).getData();
|
||||
//
|
||||
// if (moreUsers != null && moreUsers.size() > 0) {
|
||||
// for (MoreUser mo : moreUsers) {
|
||||
// roleList.add(mo.getRoleCode());
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// return roleList;
|
||||
// }
|
||||
//
|
||||
// public String getUserNo() throws Exception {
|
||||
// MoreUser user = getUser();
|
||||
// if (ObjectUtils.isEmpty(user)) {
|
||||
// throw new Exception();
|
||||
// }
|
||||
// return user.getUserAccount();
|
||||
// }
|
||||
//
|
||||
// public MoreUser getUserByNo(String userNo){
|
||||
// String redisKey = String.format(REDIS_KEY_USER_INFOR, userNo);
|
||||
// MoreUser user;
|
||||
// if(redisUtils.exists(redisKey)){
|
||||
// user = (MoreUser) redisUtils.getObject(redisKey);
|
||||
// }else{
|
||||
// user = orgFeignClient.getOrgRoleUserInfo(userNo).getData();
|
||||
// if(user==null) return null;
|
||||
// redisUtils.setExpire(redisKey,user,REDIS_EXPRIE_SECONDS_USER_INFOR);
|
||||
// }
|
||||
// return user;
|
||||
// }
|
||||
//
|
||||
// public MoreUser getUserByEmployeeNumber(String employeeNumber) {
|
||||
// log.info("根据员工编号获取员工信息-getUserByEmployeeNumber-start");
|
||||
// log.info(" 调用[{}]的[{}]方法,参数:{}", "orgFeignClient", "getOrgRoleUserInfo", employeeNumber);
|
||||
// try {
|
||||
// MoreUser user = orgFeignClient.getOrgRoleUserInfo(employeeNumber).getData();
|
||||
// log.info(" 返回结果:{}", user);
|
||||
// return user;
|
||||
// } catch (Exception e) {
|
||||
// log.error(" 调用报错:{}", e.fillInStackTrace());
|
||||
// }
|
||||
// return null;
|
||||
// }
|
||||
//
|
||||
// public ProfileEmp getProfileEmp(String employeeNumber) {
|
||||
// log.info("根据员工编号获取员工信息-getProfileEmp-start");
|
||||
// log.info(" 调用[{}]的[{}]方法,参数:{}", "archivesClient", "getProfileEmp", employeeNumber);
|
||||
// try {
|
||||
// ProfileEmp user = archivesClient.getProfileEmp(employeeNumber).getData();
|
||||
// log.info(" 返回结果:{}", user);
|
||||
// return user;
|
||||
// } catch (Exception e) {
|
||||
// log.error(" 调用报错:{}", e.fillInStackTrace());
|
||||
// }
|
||||
// return null;
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * 根据员工ID获取员工信息
|
||||
// * @param userId
|
||||
// * @return
|
||||
// */
|
||||
// public MoreUser getUserByUserId(Integer userId) {
|
||||
// return orgFeignClient.getOrgRoleUserInfoById(userId).getData();
|
||||
// }
|
||||
//
|
||||
// public MoreUser getUserByUserIdFormRedis(Integer userId){
|
||||
// String redisKey = String.format(REDIS_KEY_USERID_INFOR, userId);
|
||||
// MoreUser user;
|
||||
// if(redisUtils.exists(redisKey)){
|
||||
// user = (MoreUser) redisUtils.getObject(redisKey);
|
||||
// }else{
|
||||
// user = orgFeignClient.getOrgRoleUserInfoById(userId).getData();
|
||||
// if(user==null) return null;
|
||||
// redisUtils.setExpire(redisKey,user,REDIS_EXPRIE_SECONDS_USER_INFOR);
|
||||
// }
|
||||
// return user;
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * Get user name by userNo, null-safety.
|
||||
// * @param userNo
|
||||
// * @return
|
||||
// */
|
||||
// public String getUserNameByNo(String userNo){
|
||||
// if(StringUtils.isBlank(userNo)) return "";
|
||||
// MoreUser user = this.getUserByNo(userNo);
|
||||
// if(user==null || user.getUserName()==null) return "";
|
||||
// return user.getUserName();
|
||||
// }
|
||||
//
|
||||
// public List<Integer> getUserDataRangeAll(String userAccount) {
|
||||
// log.info("获取登录人有哪些组织的权限");
|
||||
// String menuCode = getRequest().getHeader("menuCode");
|
||||
// Map<String,Object> paramMap = new HashMap<>();
|
||||
// paramMap.put("menuCode",menuCode);
|
||||
// paramMap.put("userAccount",userAccount);
|
||||
// GeneralRespBean<List<Map>> respBean = orgFeignClient.getOrgAuthorityByMenuCodeTwo(paramMap);
|
||||
// if (respBean.getCode().equals("200")){
|
||||
// if (respBean.getData()!=null){
|
||||
// List<Integer> orgIdList = respBean.getData()
|
||||
// .stream().filter(item->item.containsKey("orgId") && item.get("orgId")!=null)
|
||||
// .map(item->Integer.parseInt(item.get("orgId").toString())).collect(Collectors.toList());
|
||||
// if (orgIdList.size()==0){
|
||||
// return new ArrayList<>();
|
||||
// }else{
|
||||
// return orgIdList;
|
||||
// }
|
||||
// }
|
||||
// }else{
|
||||
// try {
|
||||
// log.error("获取权限数据异常:msg{}", JsonUtil.toJson(respBean));
|
||||
// } catch (JsonProcessingException e) {
|
||||
// log.error(e.getMessage(),e);
|
||||
// }
|
||||
// }
|
||||
// return new ArrayList<>();
|
||||
// }
|
||||
//}
|
||||
20
src/main/java/cn/wepact/dfm/training/util/CodeUtils.java
Normal file
20
src/main/java/cn/wepact/dfm/training/util/CodeUtils.java
Normal file
@@ -0,0 +1,20 @@
|
||||
package cn.wepact.dfm.training.util;
|
||||
|
||||
public class CodeUtils {
|
||||
|
||||
/**
|
||||
* @Description: 处理 like sql参数
|
||||
* @param
|
||||
* @return String 返回类型
|
||||
* @author gaod
|
||||
* @date 2017年11月23日 下午1:51:40
|
||||
*/
|
||||
public static String getLikeQueryStr(String param){
|
||||
param = param.replaceAll("~", "~~");
|
||||
param = param.replaceAll("_", "~_");
|
||||
param = param.replaceAll("%", "~%");
|
||||
return "%" +param.trim()+"%";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
138
src/main/java/cn/wepact/dfm/training/util/Constant.java
Normal file
138
src/main/java/cn/wepact/dfm/training/util/Constant.java
Normal file
@@ -0,0 +1,138 @@
|
||||
package cn.wepact.dfm.training.util;
|
||||
|
||||
public class Constant {
|
||||
|
||||
public static final String USER_FLAG_UIM = "uim";
|
||||
|
||||
public static final String USER_DEL_FLAG0 = "0";//未删除
|
||||
public static final String USER_DEL_FLAG1 = "1";//删除
|
||||
|
||||
public static final String USER_STATUS0 = "0";//未启用
|
||||
public static final String USER_STATUS1 = "1";//启用
|
||||
|
||||
//组织层级
|
||||
public static final String ORG_LEVEL1 = "1";
|
||||
public static final String ORG_LEVEL2 = "2";
|
||||
public static final String ORG_LEVEL3 = "3";
|
||||
public static final String ORG_LEVEL4 = "4";
|
||||
public static final String ORG_LEVEL5 = "5";
|
||||
public static final String ORG_LEVEL6 = "6";
|
||||
|
||||
// org_type
|
||||
public static final String ORG_TYPE0 = "0";
|
||||
public static final String ORG_TYPE1 = "1";
|
||||
|
||||
public static final String PERSON_TYPE = "PERSON_TYPE";
|
||||
public static final String HIGH_EDU_LEVEL = "DFL_HIGH_EDU_LEVEL";
|
||||
public static final String DFL_TECH_NAME = "DFL_TECH_NAME";
|
||||
public static final String NATIONALITY = "NATIONALITY";
|
||||
public static final String CN_HUKOU_TYPE = "CN_HUKOU_TYPE";
|
||||
// 在岗状态
|
||||
public static final String EMP_CAT = "EMP_CAT";
|
||||
|
||||
public static final String PERSON_TYPE_1144 = "1144";
|
||||
public static final String PERSON_TYPE_1148 = "1148";
|
||||
|
||||
public static final String OPERATION_LOG_TYPE_CREATE = "EMP_CREATE";
|
||||
public static final String OPERATION_LOG_TYPE_UPDATE = "EMP_UPDATE";
|
||||
public static final String OPERATION_LOG_STATUS_1 = "1";//成功
|
||||
public static final String OPERATION_LOG_STATUS_0 = "0";//失败
|
||||
public static final String OPERATION_LOG_STATUS_2 = "2";//队列中
|
||||
|
||||
|
||||
//start 20200404223535
|
||||
//测试环境标记url
|
||||
public static final String isLocation="isLocation";
|
||||
//生产环境标记url
|
||||
public static final String isProduce="isProduce";
|
||||
|
||||
public static final String USER_STATUS_0 = "0";
|
||||
public static final String USER_STATUS_1 = "1";
|
||||
|
||||
//首次登陆
|
||||
public static final String isFirstLogin="1";
|
||||
public static final String isFirstLoginNo="no";
|
||||
//end
|
||||
|
||||
//用户redis
|
||||
public static final String USER_KEY="dfmc_login*";
|
||||
|
||||
//生产环境配置文件标志
|
||||
public static final String PROFILE_ENVIRONMENT="prod_new";
|
||||
|
||||
|
||||
// 招聘接口通用状态码
|
||||
public static String dFMc(int status){
|
||||
String result="";
|
||||
switch (status) {
|
||||
case 0:
|
||||
result = "成功";
|
||||
break;
|
||||
case -1:
|
||||
result = "系统繁忙";
|
||||
break;
|
||||
case 40001:
|
||||
result = "企业CODE必须";
|
||||
break;
|
||||
case 40002:
|
||||
result = "授权失败";
|
||||
break;
|
||||
case 800001:
|
||||
result = "参数不能为空";
|
||||
break;
|
||||
case 800002:
|
||||
result = "企业不存在或已失效";
|
||||
break;
|
||||
case 800003:
|
||||
result = "用户名或密码错误";
|
||||
break;
|
||||
case 800004:
|
||||
result = "无对应Id或相关信息";
|
||||
break;
|
||||
case 800005:
|
||||
result = "参数个数超过限制";
|
||||
break;
|
||||
case 800006:
|
||||
result = "无权限IP";
|
||||
break;
|
||||
case 800007:
|
||||
result = "Token不存在或已失效";
|
||||
break;
|
||||
default:
|
||||
result = "无对应错误码";
|
||||
}
|
||||
return result;
|
||||
}
|
||||
public static final String PER_1 = "1";//人事口径
|
||||
public static final String PER_2 = "2";//薪酬口径
|
||||
public static final String PER_3 = "3";//通用口径
|
||||
public static final String PER_4 = "4";//其他口径
|
||||
public static final String PER_5 = "5";//招聘口径
|
||||
public static final String PER_6 = "6";//电子签口径
|
||||
public static final String PER_7 = "7";//档案口径
|
||||
public static final String PER_8 = "8";//一体机口径
|
||||
public static final String PER_OMP = "omp";//运营口径
|
||||
|
||||
/**
|
||||
* 薪资归类
|
||||
*/
|
||||
public static final String SELF_ELE_TYPE_1010 = "1010";//应发明细
|
||||
public static final String SELF_ELE_TYPE_1030 = "1030";//个人扣缴
|
||||
public static final String SELF_ELE_TYPE_1100 = "1100";//月工资纳税
|
||||
public static final String SELF_ELE_TYPE_1060 = "1060";//其他加扣
|
||||
public static final String SELF_ELE_TYPE_1050 = "1050";//实发额度
|
||||
public static final String SELF_ELE_TYPE_1070 = "1070";//企业缴纳
|
||||
public static final String SELF_ELE_TYPE_1020 = "1020";//相关说明
|
||||
|
||||
public static final String SALARY_TYPE_8 = "shouldGiveList";//饼图 应发
|
||||
public static final String SALARY_TYPE_9 = "shouldGiveListData";//饼图 应发
|
||||
public static final String SALARY_TYPE_10 = "withholdList";//饼图 个扣
|
||||
public static final String SALARY_TYPE_11 = "withholdListData";//饼图 个扣
|
||||
|
||||
public static final String SELF_ELE_TYPE_1040 = "1040";//应发额度
|
||||
public static final String SELF_ELE_TYPE_1080 = "1080";//任期业绩工资
|
||||
public static final String SELF_ELE_TYPE_1090 = "1090";//企业缴纳年金应扣税
|
||||
public static final String SELF_ELE_TYPE_1110 = "1110";//年度工资清算
|
||||
public static final String SELF_ELE_TYPE_1120 = "1120";//专项附加扣除项
|
||||
|
||||
}
|
||||
129
src/main/java/cn/wepact/dfm/training/util/CryptoUtil.java
Normal file
129
src/main/java/cn/wepact/dfm/training/util/CryptoUtil.java
Normal file
@@ -0,0 +1,129 @@
|
||||
package cn.wepact.dfm.training.util;
|
||||
|
||||
import java.security.MessageDigest;
|
||||
|
||||
/**
|
||||
* description 加密解密工具类
|
||||
* @author Bright
|
||||
* */
|
||||
public class CryptoUtil {
|
||||
|
||||
/**
|
||||
* MD5加密(32位大写)
|
||||
*
|
||||
* @param src
|
||||
* @return
|
||||
*/
|
||||
public static String md5ByHex(String src) {
|
||||
try {
|
||||
MessageDigest md = MessageDigest.getInstance("MD5");
|
||||
byte[] b = src.getBytes();
|
||||
md.reset();
|
||||
md.update(b);
|
||||
byte[] hash = md.digest();
|
||||
String hs = "";
|
||||
String stmp = "";
|
||||
for (int i = 0; i < hash.length; i++) {
|
||||
stmp = Integer.toHexString(hash[i] & 0xFF);
|
||||
if (stmp.length() == 1)
|
||||
hs = hs + "0" + stmp;
|
||||
else {
|
||||
hs = hs + stmp;
|
||||
}
|
||||
}
|
||||
return hs.toUpperCase();
|
||||
} catch (Exception e) {
|
||||
return "";
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 密码强度
|
||||
*
|
||||
* @return Z = 字母 S = 数字 T = 特殊字符
|
||||
*/
|
||||
public static String checkPassword(String passwordStr) {
|
||||
String regexZ = "\\d*";
|
||||
String regexS = "[a-zA-Z]+";
|
||||
String regexT = "\\W+$";
|
||||
String regexZT = "\\D*";
|
||||
String regexST = "[\\d\\W]*";
|
||||
String regexZS = "\\w*";
|
||||
String regexZST = "[\\w\\W]*";
|
||||
|
||||
if (passwordStr.matches(regexZ)) {
|
||||
return "1";//弱
|
||||
}
|
||||
if (passwordStr.matches(regexS)) {
|
||||
return "1";//弱
|
||||
}
|
||||
if (passwordStr.matches(regexT)) {
|
||||
return "1";//弱
|
||||
}
|
||||
if (passwordStr.matches(regexZT)) {
|
||||
return "2";//中
|
||||
}
|
||||
if (passwordStr.matches(regexST)) {
|
||||
return "2";//中
|
||||
}
|
||||
if (passwordStr.matches(regexZS)) {
|
||||
return "2";//中
|
||||
}
|
||||
if (passwordStr.matches(regexZST)) {
|
||||
return "3";//强
|
||||
}
|
||||
return passwordStr;
|
||||
}
|
||||
|
||||
/**
|
||||
* @author lcp
|
||||
*
|
||||
* 强密码202203241721
|
||||
*/
|
||||
public static String strongPassword(){
|
||||
String[] pswdStr = {"qwertyuiopasdfghjklzxcvbnm", "QWERTYUIOPASDFGHJKLZXCVBNM", "0123456789","!@#$%*+"};
|
||||
|
||||
int pswdLen = 8;
|
||||
String pswd = " ";
|
||||
char[] chs = new char[pswdLen];
|
||||
for (int i = 0; i < pswdStr.length; i++) {
|
||||
|
||||
int idx = (int) (Math.random() * pswdStr[i].length());
|
||||
chs[i] = pswdStr[i].charAt(idx);
|
||||
|
||||
}
|
||||
|
||||
for (int i = pswdStr.length; i < pswdLen; i++) {
|
||||
|
||||
int arrIdx = (int) (Math.random() * pswdStr.length);
|
||||
int strIdx = (int) (Math.random() * pswdStr[arrIdx].length());
|
||||
|
||||
chs[i] = pswdStr[arrIdx].charAt(strIdx);
|
||||
}
|
||||
|
||||
for (int i = 0; i < 1000; i++) {
|
||||
int idx1 = (int) (Math.random() * chs.length);
|
||||
int idx2 = (int) (Math.random() * chs.length);
|
||||
|
||||
if (idx1 == idx2) {
|
||||
continue;
|
||||
}
|
||||
|
||||
char tempChar = chs[idx1];
|
||||
chs[idx1] = chs[idx2];
|
||||
chs[idx2] = tempChar;
|
||||
}
|
||||
|
||||
pswd = new String(chs);
|
||||
return pswd;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// public static void main(String[] args) {
|
||||
// String passd = "a2E5@fd%@";
|
||||
// System.out.println(CryptoUtil.checkPassword(passd));
|
||||
// String strongPassword =CryptoUtil.strongPassword();
|
||||
// System.out.println("生成的强密码......................"+strongPassword);
|
||||
//
|
||||
// }
|
||||
}
|
||||
451
src/main/java/cn/wepact/dfm/training/util/DESUtils.java
Normal file
451
src/main/java/cn/wepact/dfm/training/util/DESUtils.java
Normal file
@@ -0,0 +1,451 @@
|
||||
package cn.wepact.dfm.training.util;
|
||||
|
||||
import org.apache.commons.codec.binary.Base64;
|
||||
import org.apache.commons.codec.digest.DigestUtils;
|
||||
|
||||
import javax.crypto.BadPaddingException;
|
||||
import javax.crypto.Cipher;
|
||||
import javax.crypto.SecretKey;
|
||||
import javax.crypto.spec.SecretKeySpec;
|
||||
import java.security.MessageDigest;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.security.SecureRandom;
|
||||
import java.security.Security;
|
||||
import java.util.Arrays;
|
||||
|
||||
|
||||
public class DESUtils {
|
||||
/**
|
||||
* 编码加密工具类
|
||||
*/
|
||||
|
||||
|
||||
public DESUtils() {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Base64 编码
|
||||
*/
|
||||
public static final Base64 B64 = new Base64();
|
||||
/**
|
||||
* 安全的随机数源
|
||||
*/
|
||||
public static final SecureRandom RANDOM = new SecureRandom();
|
||||
/**
|
||||
* SHA-1加密
|
||||
*/
|
||||
public static MessageDigest SHA_1 = null;
|
||||
|
||||
|
||||
static {
|
||||
init();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 初始化
|
||||
*/
|
||||
public static void init() {
|
||||
try {
|
||||
SHA_1 = MessageDigest.getInstance("SHA-1");
|
||||
} catch (NoSuchAlgorithmException e) {
|
||||
throw new IllegalStateException(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* SHA-1加密
|
||||
*
|
||||
* @param str 明文
|
||||
* @return 密文
|
||||
*/
|
||||
public static String sha1(String str) {
|
||||
return new String(B64.encode(SHA_1.digest(str.getBytes())));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* SHA-1加密(Url安全)
|
||||
*
|
||||
* @param str 明文
|
||||
* @return 密文
|
||||
*/
|
||||
public static String sha1Url(String str) {
|
||||
return new String(Base64.encodeBase64URLSafeString(SHA_1.digest(str.getBytes())));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Base64编码
|
||||
*
|
||||
* @param bs byte数组
|
||||
* @return 编码后的byte数组
|
||||
*/
|
||||
public static byte[] b64Encode(byte[] bs) {
|
||||
return B64.encode(bs);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Base64编码字符串
|
||||
*
|
||||
* @param str 需要编码的字符串
|
||||
* @return 编码后的字符串
|
||||
*/
|
||||
public static String b64Encode(String str) {
|
||||
if (null != str) {
|
||||
return new String(B64.encode(str.getBytes()));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Base64编码字符串(Url安全)
|
||||
*
|
||||
* @param str 需要编码的字符串
|
||||
* @return 编码后的字符串
|
||||
*/
|
||||
public static String b64Url(String str) {
|
||||
if (null != str) {
|
||||
return Base64.encodeBase64URLSafeString(str.getBytes());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Base64解码
|
||||
*
|
||||
* @param bs byte数组
|
||||
* @return 解码后的byte数组
|
||||
*/
|
||||
public static byte[] b64Decode(byte[] bs) {
|
||||
return B64.decode(bs);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Base64解码字符串
|
||||
*
|
||||
* @param str 需要解码的字符串
|
||||
* @return 解码后的字符串
|
||||
*/
|
||||
public static String b64Decode(String str) {
|
||||
if (null != str) {
|
||||
byte[] bs = B64.decode(str.getBytes());
|
||||
if (null != bs) {
|
||||
return new String(bs);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 生成32位MD5密文
|
||||
*
|
||||
* <pre>
|
||||
* org.apache.commons.codec.digest.DigestUtils
|
||||
* </pre>
|
||||
*
|
||||
* @param str 明文
|
||||
* @return 密文
|
||||
*/
|
||||
public static String md5(String str) {
|
||||
if (null != str) {
|
||||
return DigestUtils.md5Hex(str);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* DES加密算法
|
||||
*/
|
||||
public static final String DES_ALGORITHM = "DESede"; // 可用 DES,DESede,Blowfish
|
||||
/**
|
||||
* DES默认加密
|
||||
*/
|
||||
public static Cipher DES_CIPHER_ENC = null;
|
||||
/**
|
||||
* DES默认解密
|
||||
*/
|
||||
public static Cipher DES_CIPHER_DEC = null;
|
||||
/**
|
||||
* 密钥
|
||||
*/
|
||||
public static String privateKey ="abcdsxyzhkj12345";
|
||||
|
||||
|
||||
static {
|
||||
// 添加JCE算法
|
||||
Security.addProvider(new com.sun.crypto.provider.SunJCE());
|
||||
// 初始化默认DES加密
|
||||
try {
|
||||
// 密钥
|
||||
SecretKey desKey = new SecretKeySpec(new byte[]{0x11, 0x22, 0x4F, 0x58, (byte) 0x88, 0x10, 0x40, 0x38,
|
||||
0x28, 0x25, 0x79, 0x51, (byte) 0xCB, (byte) 0xDD, 0x55, 0x66, 0x77, 0x29, 0x74, (byte) 0x98, 0x30,
|
||||
0x40, 0x36, (byte) 0xE2}, DES_ALGORITHM);
|
||||
// 初始化默认加密
|
||||
DES_CIPHER_ENC = Cipher.getInstance(DES_ALGORITHM);
|
||||
DES_CIPHER_ENC.init(Cipher.ENCRYPT_MODE, desKey, RANDOM);
|
||||
// 初始化默认解密
|
||||
DES_CIPHER_DEC = Cipher.getInstance(DES_ALGORITHM);
|
||||
DES_CIPHER_DEC.init(Cipher.DECRYPT_MODE, desKey, RANDOM);
|
||||
} catch (Exception e) {
|
||||
System.err.println("DES默认加密解密初始化失败:" + e.getMessage());
|
||||
throw new RuntimeException("DES默认加密解密初始化失败:" + e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* DES加密(默认密钥)
|
||||
*
|
||||
* @param str 需要加密的明文
|
||||
* @return 加密后的密文(base64编码字符串)
|
||||
*/
|
||||
public static String desEncryp(String str) {
|
||||
return desEncryp(str, false);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* DES加密(默认密钥)
|
||||
*
|
||||
* @param str 需要加密的明文
|
||||
* @return 加密后的密文(base64编码字符串, Url安全)
|
||||
*/
|
||||
public static String desEncrypUrl(String str) {
|
||||
return desEncryp(str, true);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* DES加密(默认密钥)
|
||||
*
|
||||
* @param str 需要加密的明文
|
||||
* @param urlSafety 密文是否需要Url安全
|
||||
* @return 加密后的密文(str为null返回null)
|
||||
*/
|
||||
public static String desEncryp(String str, boolean urlSafety) {
|
||||
if (null != str) {
|
||||
try {
|
||||
byte[] bytes = DES_CIPHER_ENC.doFinal(str.getBytes("UTF-8"));// 加密
|
||||
if (urlSafety) {
|
||||
return Base64.encodeBase64URLSafeString(bytes);
|
||||
} else {
|
||||
return new String(B64.encode(bytes));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
System.err.println("DES加密失败, 密文:" + str + ", 错误:" + e.getMessage());
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* DES解密(默认密钥)
|
||||
*
|
||||
* @param str 需要解密的密文(base64编码字符串)
|
||||
* @return 解密后的明文
|
||||
*/
|
||||
public static String desDecrypt(String str) {
|
||||
if (null != str) {
|
||||
try {
|
||||
byte[] bytes = DES_CIPHER_DEC.doFinal(B64.decode(str));// 解密
|
||||
return new String(bytes, "UTF-8");
|
||||
} catch (Exception e) {
|
||||
System.err.println("DES解密失败, 密文:" + str + ", 错误:" + e.getMessage());
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* DES加密
|
||||
*
|
||||
* @param str 需要加密的明文
|
||||
* @param key 密钥(长度小于24字节自动补足,大于24取前24字节)
|
||||
* @return 加密后的密文(base64编码字符串)
|
||||
*/
|
||||
public static String desEncryp(String str, String key) {
|
||||
return desEncryp(str, key, false);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* DES加密
|
||||
*
|
||||
* @param str 需要加密的明文
|
||||
* @param key 密钥(长度小于24字节自动补足,大于24取前24字节)
|
||||
* @return 加密后的密文(base64编码字符串, Url安全)
|
||||
*/
|
||||
public static String desEncrypUrl(String str, String key) {
|
||||
return desEncryp(str, key, true);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* DES加密
|
||||
*
|
||||
* @param str 需要加密的明文
|
||||
* @param key 密钥(长度小于24字节自动补足,大于24取前24字节)
|
||||
* @param urlSafety 密文是否需要Url安全
|
||||
* @return 加密后的密文(str / key为null返回null)
|
||||
*/
|
||||
public static String desEncryp(String str, String key, boolean urlSafety) {
|
||||
if (null != str && null != key) {
|
||||
try {
|
||||
Cipher c = Cipher.getInstance(DES_ALGORITHM);
|
||||
c.init(Cipher.ENCRYPT_MODE, desKey(key), RANDOM);
|
||||
// 加密
|
||||
byte[] bytes = c.doFinal(str.getBytes("UTF-8"));// 加密
|
||||
// 返回b64处理后的字符串
|
||||
if (urlSafety) {
|
||||
return Base64.encodeBase64URLSafeString(bytes);
|
||||
} else {
|
||||
return new String(B64.encode(bytes));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
System.err.println("DES加密失败, 密文:" + str + ", key:" + key + ", 错误:" + e.getMessage());
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* DES解密
|
||||
*
|
||||
* @param str 需要解密的密文(base64编码字符串)
|
||||
* @param key 密钥(长度小于24字节自动补足,大于24取前24字节)
|
||||
* @return 解密后的明文
|
||||
*/
|
||||
public static String desDecrypt(String str, String key) {
|
||||
if (null != str && null != key) {
|
||||
try {
|
||||
Cipher c = Cipher.getInstance(DES_ALGORITHM);
|
||||
c.init(Cipher.DECRYPT_MODE, desKey(key), RANDOM);
|
||||
byte[] bytes = c.doFinal(B64.decode(str));
|
||||
return new String(bytes, "UTF-8");
|
||||
} catch (BadPaddingException e) {
|
||||
System.err.println("DES解密失败, 密文:" + str + ", key:" + key + ", 错误:" + e.getMessage());
|
||||
} catch (Exception e) {
|
||||
System.err.println("DES解密失败, 密文:" + str + ", key:" + key + ", 错误:" + e.getMessage());
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* DES密钥
|
||||
*/
|
||||
public static SecretKey desKey(String key) {
|
||||
byte[] bs = key.getBytes();
|
||||
if (bs.length != 24) {
|
||||
bs = Arrays.copyOf(bs, 24);// 处理数组长度为24
|
||||
}
|
||||
return new SecretKeySpec(bs, DES_ALGORITHM);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* AES加密算法
|
||||
*/
|
||||
public static final String AES_ALGORITHM = "AES";
|
||||
|
||||
|
||||
/**
|
||||
* AES加密
|
||||
*
|
||||
* @param str 需要加密的明文
|
||||
* @param key 密钥
|
||||
* @return 加密后的密文(str / key为null返回null)
|
||||
*/
|
||||
public static String aesEncryp(String str, String key) {
|
||||
return aesEncryp(str, key, false);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* AES加密
|
||||
*
|
||||
* @param str 需要加密的明文
|
||||
* @param key 密钥
|
||||
* @param urlSafety 密文是否需要Url安全
|
||||
* @return 加密后的密文(str / key为null返回null)
|
||||
*/
|
||||
public static String aesEncryp(String str, String key, boolean urlSafety) {
|
||||
if (null != str && null != key) {
|
||||
try {
|
||||
Cipher c = Cipher.getInstance("AES/ECB/PKCS5Padding");
|
||||
c.init(Cipher.ENCRYPT_MODE, aesKey(key), RANDOM);
|
||||
byte[] bytes = c.doFinal(str.getBytes("UTF-8"));// 加密
|
||||
if (urlSafety) {
|
||||
return Base64.encodeBase64URLSafeString(bytes);
|
||||
} else {
|
||||
return new String(B64.encode(bytes));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
System.err.println("AES加密失败, 密文:" + str + ", key:" + key + ", 错误:" + e.getMessage());
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* AES解密
|
||||
*
|
||||
* @param str 需要解密的密文(base64编码字符串)
|
||||
* @param key 密钥
|
||||
* @return 解密后的明文
|
||||
*/
|
||||
public static String aesDecrypt(String str, String key) {
|
||||
if (null != str && null != key) {
|
||||
try {
|
||||
Cipher c = Cipher.getInstance("AES/ECB/PKCS5Padding");
|
||||
c.init(Cipher.DECRYPT_MODE, aesKey(key), RANDOM);
|
||||
return new String(c.doFinal(B64.decode(str)), "UTF-8");// 解密
|
||||
} catch (BadPaddingException e) {
|
||||
System.err.println("AES解密失败, 密文:" + str + ", key:" + key + ", 错误:" + e.getMessage());
|
||||
} catch (Exception e) {
|
||||
System.err.println("AES解密失败, 密文:" + str + ", key:" + key + ", 错误:" + e.getMessage());
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* AES密钥
|
||||
*/
|
||||
public static SecretKeySpec aesKey(String key) {
|
||||
byte[] bs = key.getBytes();
|
||||
if (bs.length != 16) {
|
||||
bs = Arrays.copyOf(bs, 16);// 处理数组长度为16
|
||||
}
|
||||
return new SecretKeySpec(bs, AES_ALGORITHM);
|
||||
}
|
||||
|
||||
|
||||
public static void main(String[] args) {
|
||||
/** AES */
|
||||
System.out.println(aesKey("123").getAlgorithm());
|
||||
System.out.println(aesEncryp("8007508", privateKey));
|
||||
System.out.println(aesEncryp("8007508", privateKey, true));
|
||||
|
||||
|
||||
System.err.println(aesDecrypt("g5QD2gS3jPc3bdyXQCJcKQ==", privateKey));
|
||||
System.err.println(aesDecrypt("g5QD2gS3jPc3bdyXQCJcKQ", privateKey));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
608
src/main/java/cn/wepact/dfm/training/util/DateHelper.java
Normal file
608
src/main/java/cn/wepact/dfm/training/util/DateHelper.java
Normal file
@@ -0,0 +1,608 @@
|
||||
package cn.wepact.dfm.training.util;
|
||||
|
||||
import java.text.DateFormat;
|
||||
import java.text.DecimalFormat;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
|
||||
public class DateHelper {
|
||||
|
||||
public static final String HH_MM_SS_BEGIN = " 00:00:00";
|
||||
public static final String HH_MM_SS_END = " 23:59:59";
|
||||
// 年-月-日
|
||||
public static final String YYYY_MM_DD = "yyyy-MM-dd";
|
||||
|
||||
// 年-月-日
|
||||
public static final String YYYYMMDD = "yyyyMMdd";
|
||||
|
||||
public static final String YYYYMM = "yyyyMM";
|
||||
// 年-月-日 时:分:秒
|
||||
public static final String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
|
||||
// 年月日 时分秒
|
||||
public static final String YYYYMMDDHHMMSS = "yyyyMMddHHmmss";
|
||||
// 年月日 时分
|
||||
public static final String YYYYMMDDHHMM = "yyyyMMddHHmm";
|
||||
// 年月日 时分秒毫秒
|
||||
public static final String YYYYMMDDHHMMSSSSS = "yyyyMMddHHmmsssss";
|
||||
// 年
|
||||
public static final String YYYY = "yyyy";
|
||||
// 月
|
||||
public static final String MM = "MM";
|
||||
|
||||
public static final String SIEBEL_CPBHEC = "MM/dd/yyyy HH:mm:ss";
|
||||
public static final String US_FORMAT = "EEE MMM dd HH:mm:ss z yyyy";
|
||||
|
||||
public static final String YYYYMMDD_FORMAT = "yyyy年MM月dd日";
|
||||
|
||||
/**
|
||||
* Example: getSystemDate();
|
||||
* <p>
|
||||
* return Date
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public static Date getSystemDate() {
|
||||
|
||||
return new Date();
|
||||
}
|
||||
|
||||
/**
|
||||
* Example: getSystemDate("yyyyMMdd");
|
||||
* <p>
|
||||
* return 20110820
|
||||
*
|
||||
* @param format
|
||||
* @return
|
||||
*/
|
||||
public static String getSystemDateString(String format) {
|
||||
|
||||
return formatDate(new Date(), format);
|
||||
}
|
||||
|
||||
/**
|
||||
* Example: getCurrentTime();
|
||||
* <p>
|
||||
* return 20110820101010222
|
||||
*
|
||||
* @param
|
||||
* @return
|
||||
*/
|
||||
public static String getCurrentTime() {
|
||||
|
||||
return getSystemDateString(YYYYMMDDHHMMSSSSS);
|
||||
}
|
||||
|
||||
/**
|
||||
* Example: formatDate(date, "yyyyMMdd");
|
||||
* <p>
|
||||
* date = 2011/01/02, return 20110102
|
||||
*
|
||||
* @param date
|
||||
* @param format
|
||||
* @return
|
||||
*/
|
||||
public static String formatDate(Date date, String format) {
|
||||
|
||||
final SimpleDateFormat sdf = new SimpleDateFormat(format);
|
||||
|
||||
if (date == null)
|
||||
return null;
|
||||
|
||||
return sdf.format(date);
|
||||
}
|
||||
|
||||
/**
|
||||
* Example: format("2011/01/10", "yyyy/MM/dd", "yyyy.MM.dd");
|
||||
* <p>
|
||||
* return 2011.01.10
|
||||
*
|
||||
* @param dateString
|
||||
* @param srcFormat
|
||||
* @param targetFormat
|
||||
* @return
|
||||
*/
|
||||
public static String formatDate(String dateString, String srcFormat, String targetFormat) {
|
||||
|
||||
final SimpleDateFormat sdf = new SimpleDateFormat(srcFormat);
|
||||
|
||||
Date date = null;
|
||||
try {
|
||||
if (dateString != null && !"".equals(dateString.trim()))
|
||||
date = sdf.parse(dateString);
|
||||
} catch (ParseException e) {
|
||||
}
|
||||
|
||||
return formatDate(date, targetFormat);
|
||||
}
|
||||
|
||||
public static Date getDateFromStr(String dateString, String srcFormat) {
|
||||
|
||||
final SimpleDateFormat sdf = new SimpleDateFormat(srcFormat);
|
||||
|
||||
Date date = null;
|
||||
try {
|
||||
if (dateString != null && !"".equals(dateString.trim()))
|
||||
date = sdf.parse(dateString);
|
||||
} catch (ParseException e) {
|
||||
}
|
||||
|
||||
return date;
|
||||
}
|
||||
|
||||
public static boolean isBetweenDate(String beginDateString, String endDateString, String middleDateString,
|
||||
String srcFormat) {
|
||||
Date begin = getDateFromStr(beginDateString, srcFormat);
|
||||
Date end = getDateFromStr(endDateString, srcFormat);
|
||||
Date middle = getDateFromStr(middleDateString, srcFormat);
|
||||
long btime = begin.getTime();
|
||||
long etime = end.getTime();
|
||||
long mtime = middle.getTime();
|
||||
|
||||
if (mtime >= btime && mtime <= etime) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
;
|
||||
|
||||
/**
|
||||
* Name: Description: 通过时间的毫秒数据计算 对应的时:分:秒
|
||||
*
|
||||
* @param lms
|
||||
* @return
|
||||
* @author gaodan
|
||||
* @date 2015年12月1日 下午3:22:27
|
||||
*/
|
||||
@SuppressWarnings("deprecation")
|
||||
public static String getTimeFormat(long time) {
|
||||
StringBuffer dateStr = new StringBuffer("");
|
||||
Date date = new Date(time);
|
||||
dateStr.append(date.getHours()).append(":").append(date.getMinutes()).append(":").append(date.getSeconds());
|
||||
return dateStr.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Name: Description:
|
||||
*
|
||||
* @param y
|
||||
* @param z
|
||||
* @return
|
||||
* @author gaodan
|
||||
* @date 2015年12月2日 上午8:51:52
|
||||
*/
|
||||
public static float getTimeCompletePercent(long y, long z) {
|
||||
String baifenbi = "";// 接受百分比的值
|
||||
double baiy = y * 1.0;
|
||||
double baiz = z * 1.0;
|
||||
double fen = (baiy / baiz);
|
||||
DecimalFormat df1 = new DecimalFormat("0.00");
|
||||
baifenbi = df1.format(fen);
|
||||
float percent = Float.parseFloat(baifenbi) * 100;
|
||||
return percent >= 100 ? 100 : percent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Name: Description: 将 0:3:12.56 时间格式转成毫秒
|
||||
*
|
||||
* @param time
|
||||
* @return
|
||||
* @author gaodan
|
||||
* @date 2015年12月2日 上午8:55:48
|
||||
*/
|
||||
public static long getTimeMS(String time) {
|
||||
String[] timeArray = time.split(":");
|
||||
long totalTime = 0;
|
||||
for (int i = 0; i < timeArray.length; i++) {
|
||||
String str = timeArray[i];
|
||||
if (i == 0) {
|
||||
// 处理小时转毫秒
|
||||
long hour = Long.parseLong(str);
|
||||
totalTime += hour * 60 * 60 * 1000;
|
||||
} else if (i == 1) {
|
||||
// 处理分钟转毫秒
|
||||
long minute = Long.parseLong(str);
|
||||
totalTime += minute * 60 * 1000;
|
||||
} else if (i == 2) {
|
||||
// 处理秒转毫秒
|
||||
double second = Double.parseDouble(str);
|
||||
totalTime += second * 1000;
|
||||
}
|
||||
|
||||
}
|
||||
return totalTime;
|
||||
}
|
||||
|
||||
/**
|
||||
* Name: Description: 将 0:3:12.56 时间格式转成秒
|
||||
*
|
||||
* @param time
|
||||
* @return
|
||||
* @author gaodan
|
||||
* @date 2015年12月2日 下午1:34:59
|
||||
*/
|
||||
public static long getTimeSecond(String time) {
|
||||
String[] timeArray = time.split(":");
|
||||
long totalTime = 0;
|
||||
for (int i = 0; i < timeArray.length; i++) {
|
||||
String str = timeArray[i];
|
||||
if (i == 0) {
|
||||
// 处理小时转毫秒
|
||||
long hour = Long.parseLong(str);
|
||||
totalTime += hour * 60 * 60;
|
||||
} else if (i == 1) {
|
||||
// 处理分钟转毫秒
|
||||
long minute = Long.parseLong(str);
|
||||
totalTime += minute * 60;
|
||||
} else if (i == 2) {
|
||||
// 处理秒转毫秒
|
||||
double second = Double.parseDouble(str);
|
||||
totalTime += second;
|
||||
}
|
||||
|
||||
}
|
||||
return totalTime;
|
||||
}
|
||||
|
||||
/**
|
||||
* Name: Description: 将分钟数转换成毫秒数
|
||||
*
|
||||
* @param minute
|
||||
* @return
|
||||
* @author gaodan
|
||||
* @date 2015年12月2日 上午9:08:33
|
||||
*/
|
||||
public static long getMSFromMinute(int minute) {
|
||||
return minute * 60 * 1000;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Name: Description: 计算两个时间相差的毫秒数
|
||||
*
|
||||
* @param beginTime
|
||||
* @param endTime
|
||||
* @return
|
||||
* @author gaodan
|
||||
* @date 2015年12月3日 上午10:09:07
|
||||
*/
|
||||
public static long geTimeDifference(Date beginTime, Date endTime) {
|
||||
return (endTime.getTime() - beginTime.getTime());
|
||||
}
|
||||
|
||||
/**
|
||||
* Name: Description: 将毫秒转换成 0000:00:00格式字符串
|
||||
*
|
||||
* @param time
|
||||
* @return
|
||||
* @author gaodan
|
||||
* @date 2015年12月3日 上午10:13:36
|
||||
*/
|
||||
public static String getMSTimeFormat(long ms) {
|
||||
StringBuffer timeStr = new StringBuffer();
|
||||
int ss = 1000;
|
||||
int mi = ss * 60;
|
||||
int hh = mi * 60;
|
||||
int dd = hh * 24;
|
||||
long day = ms / dd;
|
||||
long hour = (ms - day * dd) / hh;
|
||||
long minute = (ms - day * dd - hour * hh) / mi;
|
||||
long second = (ms - day * dd - hour * hh - minute * mi) / ss;
|
||||
long milliSecond = ms - day * dd - hour * hh - minute * mi - second * ss;
|
||||
// String strDay = day < 10 ? "0" + day : "" + day; //天
|
||||
hour += (day * 24);
|
||||
String strHour = hour < 10 ? "000" + hour : "00" + hour;// 小时
|
||||
String strMinute = minute < 10 ? "0" + minute : "" + minute;// 分钟
|
||||
String strSecond = second < 10 ? "0" + second : "" + second;// 秒
|
||||
String strMilliSecond = milliSecond < 10 ? "0" + milliSecond : "" + milliSecond;// 毫秒
|
||||
strMilliSecond = milliSecond < 100 ? "0" + strMilliSecond : "" + strMilliSecond;
|
||||
timeStr.append(strHour).append(":").append(strMinute).append(":").append(strSecond);
|
||||
return timeStr.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Name: Description: 将字符串"Thu Aug 27 11:16:20 CST 2015" 格式日期转换成Date类型
|
||||
*
|
||||
* @param dateTime
|
||||
* @return
|
||||
* @throws Exception
|
||||
* @author gaodan
|
||||
* @date 2015年12月15日 下午3:08:37
|
||||
*/
|
||||
public static Date parseDateFromUS(String dateTime) throws Exception {
|
||||
SimpleDateFormat sdf = new SimpleDateFormat(US_FORMAT, Locale.US);
|
||||
Date date = sdf.parse(dateTime);
|
||||
return date;
|
||||
}
|
||||
// public static void main(String[] args) {
|
||||
// System.out.println(getMSTimeFormat(25*60*60*1000+20*60*1000+5*1000));
|
||||
// }
|
||||
|
||||
/**
|
||||
* Name: Description: 判断当前时间是否在指定的时间范围内
|
||||
*
|
||||
* @param startTime
|
||||
* @param endTime
|
||||
* @return
|
||||
* @author gaodan
|
||||
* @date 2015年12月16日 上午11:24:05
|
||||
*/
|
||||
public static boolean isTimeAvailable(Date startTime, Date endTime) {
|
||||
Date current = new Date();
|
||||
if (startTime.getTime() <= current.getTime() && current.getTime() <= endTime.getTime()) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Name: Description: 获取指定日期的第二天
|
||||
*
|
||||
* @param currentDay
|
||||
* @return
|
||||
* @author gaodan
|
||||
* @date 2015年12月31日 上午10:06:31
|
||||
*/
|
||||
@SuppressWarnings("static-access")
|
||||
public static Date getNextDay(Date currentDay, int days) {
|
||||
Calendar calendar = new GregorianCalendar();
|
||||
calendar.setTime(currentDay);
|
||||
calendar.add(calendar.DATE, days);
|
||||
Date nextDate = calendar.getTime();
|
||||
return nextDate;
|
||||
}
|
||||
|
||||
public static String transferLongToDate(String dateFormat, Long millSec) {
|
||||
|
||||
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
|
||||
|
||||
Date date = new Date(millSec);
|
||||
|
||||
return sdf.format(date);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @Description: 获取指定格式的当前日期
|
||||
* @param
|
||||
* @return Date 返回类型
|
||||
* @author gaod
|
||||
* @throws Exception
|
||||
* @date 2017年11月23日 下午2:01:56
|
||||
*/
|
||||
public static Date getFormatDate(Date dateTime,String format) throws Exception {
|
||||
SimpleDateFormat formatter = new SimpleDateFormat(format);
|
||||
Date dateFormat = formatter.parse(formatter.format(dateTime));
|
||||
return dateFormat;
|
||||
}
|
||||
/**
|
||||
* @Description: 判断两个日期是否是同一天
|
||||
* @param
|
||||
* @return boolean 返回类型
|
||||
* @author gaod
|
||||
* @date 2017年11月29日 上午10:39:14
|
||||
*/
|
||||
public static boolean isTheSameDay(Date date1,Date date2){
|
||||
if(date1 != null && date2 != null) {
|
||||
Calendar cal1 = Calendar.getInstance();
|
||||
cal1.setTime(date1);
|
||||
Calendar cal2 = Calendar.getInstance();
|
||||
cal2.setTime(date2);
|
||||
return isSameDay(cal1, cal2);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
public static boolean isSameDay(Calendar cal1, Calendar cal2) {
|
||||
if(cal1 != null && cal2 != null) {
|
||||
return cal1.get(0) == cal2.get(0) && cal1.get(1) == cal2.get(1) && cal1.get(6) == cal2.get(6);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* @Description: 获取当前时间前N个月
|
||||
* @param
|
||||
* @return List<String> 返回类型
|
||||
* @author gaod
|
||||
* @date 2017年12月8日 上午11:07:50
|
||||
*/
|
||||
public static List<String> getBeforeMonth(int n){
|
||||
List<String> monthList=new ArrayList<String>();
|
||||
//获取当前时间的前6个月
|
||||
for(int i=n;i>0;i--){
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.add(Calendar.MONTH,-i);
|
||||
Date date02 = calendar.getTime();
|
||||
monthList.add(formatDate(date02,YYYYMMDD).substring(0,6));
|
||||
}
|
||||
return monthList;
|
||||
}
|
||||
public static boolean isValidDate(String dateStr,String format) {
|
||||
//String str = "2007-01-02";
|
||||
DateFormat formatter = new SimpleDateFormat(format);
|
||||
try{
|
||||
Date date = (Date)formatter.parse(dateStr);
|
||||
return dateStr.equals(formatter.format(date));
|
||||
}catch(Exception e){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static int differentDaysByMillisecond(Date date1,Date date2){
|
||||
int days = (int) ((date2.getTime() - date1.getTime()) / (1000*3600*24));
|
||||
return days;
|
||||
}
|
||||
public static Date getDateFromTimeStr(String timeStr){
|
||||
DateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
|
||||
Date date = null;
|
||||
try {
|
||||
date = format1.parse(timeStr);
|
||||
} catch (ParseException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return date;
|
||||
}
|
||||
/**
|
||||
* 每个月1号统计的上个月一号到上个月最后一天日期集合 上个月,
|
||||
* 不是1号(从2号开始)统计当月1号到昨天的日期集合 这个月
|
||||
* @return
|
||||
*/
|
||||
public static String getCycleDate(){
|
||||
Date now=new Date();
|
||||
String cycleDateStr="";
|
||||
//判断当前日期是否是每月的1号
|
||||
if(judgeDate(now,"01")){
|
||||
//获取上个月的年月格式
|
||||
cycleDateStr=formatDate(getLastMonthFirstDay(),YYYY_MM_DD);
|
||||
}else{
|
||||
//不是一号 获取这个月的年月格式
|
||||
cycleDateStr=formatDate(getCurrentMonthFirstDay(),YYYY_MM_DD);
|
||||
|
||||
}
|
||||
return cycleDateStr.substring(0, 7);
|
||||
}
|
||||
/**
|
||||
* @param date要判断的日期
|
||||
* @param day 指定的日 01 02 10 ...31
|
||||
* @return
|
||||
*/
|
||||
public static boolean judgeDate(Date date,String day){
|
||||
String dateStr=formatDate(date,YYYYMMDD);
|
||||
String dayInDate=dateStr.substring(6);
|
||||
if(dayInDate.equals(day)){
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
/**
|
||||
* @param date要判断的日期
|
||||
* @param moth 指定的月份 01 02 10 ...31
|
||||
* @return
|
||||
*/
|
||||
public static boolean judgeMonth(Date date,String month){
|
||||
String dateStr=formatDate(date,YYYYMMDD);
|
||||
String dayInDate=dateStr.substring(4,6);
|
||||
if(dayInDate.equals(month)){
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
/**
|
||||
* 获取当月第一天
|
||||
* @return
|
||||
*/
|
||||
public static Date getCurrentMonthFirstDay(){
|
||||
Calendar c = Calendar.getInstance();
|
||||
c.add(Calendar.MONTH, 0);
|
||||
c.set(Calendar.DAY_OF_MONTH,1);//设置为1号,当前日期既为本月第一天
|
||||
return c.getTime();
|
||||
}
|
||||
public static String getCurrentMonthStr(){
|
||||
Date date= getCurrentMonthFirstDay();
|
||||
return formatDate(date,YYYY_MM_DD).substring(0, 7);
|
||||
}
|
||||
public static String getLastMonthStr(){
|
||||
Date date= getLastMonthFirstDay();
|
||||
return formatDate(date,YYYY_MM_DD).substring(0, 7);
|
||||
}
|
||||
/**
|
||||
* 获取当月最后一天
|
||||
* @return
|
||||
*/
|
||||
public static Date getCurrentMonthLastDay(){
|
||||
Calendar ca = Calendar.getInstance();
|
||||
ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH));
|
||||
return ca.getTime();
|
||||
}
|
||||
/**
|
||||
* 获取上个月月第一天
|
||||
* @return
|
||||
*/
|
||||
public static Date getLastMonthFirstDay(){
|
||||
Calendar c = Calendar.getInstance();
|
||||
c.add(Calendar.MONTH, -1);
|
||||
c.set(Calendar.DAY_OF_MONTH,1);//设置为1号,当前日期既为本月第一天
|
||||
return c.getTime();
|
||||
}
|
||||
/**
|
||||
* 获取上个月最后一天
|
||||
* @return
|
||||
*/
|
||||
public static Date getLastMonthLastDay(){
|
||||
Calendar c = Calendar.getInstance();
|
||||
c.set(Calendar.DAY_OF_MONTH, 0);
|
||||
return c.getTime();
|
||||
}
|
||||
/**
|
||||
* 获取两个日期之间所有的日期集合
|
||||
* @param d1 开始日期
|
||||
* @param d2 结束日期
|
||||
* @return
|
||||
*/
|
||||
public static List<String> getDates(Date d1,Date d2){
|
||||
List<String> dates = new ArrayList<String>();
|
||||
Calendar dd = Calendar.getInstance();//定义日期实例
|
||||
dd.setTime(d1);//设置日期起始时间
|
||||
while(dd.getTime().getTime()<=d2.getTime()){//判断是否到结束日期
|
||||
SimpleDateFormat sdf = new SimpleDateFormat(YYYY_MM_DD);
|
||||
String str = sdf.format(dd.getTime());
|
||||
dates.add(str);
|
||||
dd.add(Calendar.DAY_OF_MONTH, 1);//进行当前日期月份加1
|
||||
}
|
||||
return dates;
|
||||
}
|
||||
public static Date getYesterday(){
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.add(Calendar.DATE,-1);
|
||||
return calendar.getTime();
|
||||
}
|
||||
|
||||
public static Date getThisWeekMonday(Date date) {
|
||||
Calendar cal = Calendar.getInstance();
|
||||
cal.setTime(date);
|
||||
// 获得当前日期是一个星期的第几天
|
||||
int dayWeek = cal.get(Calendar.DAY_OF_WEEK);
|
||||
if (1 == dayWeek) {
|
||||
cal.add(Calendar.DAY_OF_MONTH, -1);
|
||||
}
|
||||
// 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一
|
||||
cal.setFirstDayOfWeek(Calendar.MONDAY);
|
||||
// 获得当前日期是一个星期的第几天
|
||||
int day = cal.get(Calendar.DAY_OF_WEEK);
|
||||
// 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值
|
||||
cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);
|
||||
return cal.getTime();
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
public static Date geLastWeekMonday(Date date) {
|
||||
Calendar cal = Calendar.getInstance();
|
||||
cal.setTime(getThisWeekMonday(date));
|
||||
cal.add(Calendar.DATE, -7);
|
||||
return cal.getTime();
|
||||
}
|
||||
/**
|
||||
*
|
||||
* 根据日期 找到对应日期的 星期
|
||||
*/
|
||||
public static int getDayOfWeekByDate(String date) {
|
||||
int dayOfweek = 0;
|
||||
try {
|
||||
SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
|
||||
Calendar cal = Calendar.getInstance(); // 获得一个日历
|
||||
Date datet = null;
|
||||
datet = myFormatter.parse(date);
|
||||
cal.setTime(datet);
|
||||
int w = cal.get(Calendar.DAY_OF_WEEK) -1; // 指示一个星期中的某天。
|
||||
dayOfweek = w;
|
||||
return dayOfweek;
|
||||
} catch (Exception e) {
|
||||
System.out.println(e.getMessage());
|
||||
}
|
||||
return dayOfweek;
|
||||
}
|
||||
}
|
||||
164
src/main/java/cn/wepact/dfm/training/util/HttpApiUtils.java
Normal file
164
src/main/java/cn/wepact/dfm/training/util/HttpApiUtils.java
Normal file
@@ -0,0 +1,164 @@
|
||||
package cn.wepact.dfm.training.util;
|
||||
|
||||
//import cn.wepact.dfm.log.api.client.LogServiceApiClient;
|
||||
//import cn.wepact.dfm.log.api.model.InterfaceLog;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParser;
|
||||
import org.apache.http.*;
|
||||
|
||||
import org.apache.http.client.methods.*;
|
||||
|
||||
import org.apache.http.entity.StringEntity;
|
||||
import org.apache.http.impl.client.CloseableHttpClient;
|
||||
import org.apache.http.impl.client.HttpClients;
|
||||
|
||||
import org.apache.http.util.EntityUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
|
||||
|
||||
|
||||
@Component
|
||||
public class HttpApiUtils {
|
||||
|
||||
|
||||
private static Logger logger = LoggerFactory.getLogger(HttpApiUtils.class);
|
||||
|
||||
@Value("${api.getPcToken.url}")
|
||||
private String getPcTokenUrl;
|
||||
@Value("${api.user}")
|
||||
private String userAccount;
|
||||
@Value("${api.password}")
|
||||
private String password;
|
||||
public String postRequestApi(String url, String data,int retryTimes) {
|
||||
if(retryTimes==0){
|
||||
retryTimes=3;
|
||||
}
|
||||
int retryCount = 10;
|
||||
String jsonStr=null;
|
||||
CloseableHttpResponse response =null;
|
||||
CloseableHttpClient httpclient = HttpClients.custom().build();
|
||||
while (true) {
|
||||
try {
|
||||
HttpPost httpost = new HttpPost(url);
|
||||
httpost.setHeader("Content-Type", "application/json");
|
||||
if(url.indexOf("image_url")>0){
|
||||
httpost.setHeader("Content-Type", "application/x-www-form-urlencoded");
|
||||
System.out.println("image========");
|
||||
}
|
||||
httpost.setEntity(new StringEntity(data, "UTF-8"));
|
||||
response = httpclient.execute(httpost);
|
||||
HttpEntity entity = response.getEntity();
|
||||
jsonStr= EntityUtils.toString(entity);
|
||||
EntityUtils.consume(entity);
|
||||
break;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
if (retryCount >= retryTimes) {
|
||||
logger.error("url="+url+"调用发生异常:"+e.getMessage()+"重试次数达到上限");
|
||||
break;
|
||||
}
|
||||
retryCount++;
|
||||
try {
|
||||
Thread.sleep(100);
|
||||
} catch (Exception e1) {
|
||||
e1.printStackTrace();
|
||||
}
|
||||
logger.error("url="+url+"调用发生异常:"+e.getMessage()+" 正在进行第"+retryCount+"次重试");
|
||||
continue;
|
||||
}finally{
|
||||
|
||||
if(response!=null){
|
||||
try {
|
||||
response.close();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
logger.info("此次调用HTTP结果:"+jsonStr);
|
||||
return jsonStr;
|
||||
}
|
||||
|
||||
|
||||
public String getRequestApi(String url, String employeeNo, int retryTimes) throws Exception {
|
||||
if (retryTimes == 0) {
|
||||
retryTimes = 3; // 默认重试次数
|
||||
}
|
||||
|
||||
int retryCount = 0;
|
||||
String jsonStr = null;
|
||||
CloseableHttpResponse response = null;
|
||||
CloseableHttpClient httpclient = HttpClients.custom().build();
|
||||
|
||||
// 构建带有路径参数的 URL
|
||||
String fullUrl = url.replace("{employeeNo}", employeeNo);
|
||||
// 确保 URL 是有效的
|
||||
try {
|
||||
new java.net.URI(fullUrl); // 检查 URI 格式
|
||||
} catch (java.net.URISyntaxException e) {
|
||||
throw new IllegalArgumentException("Invalid URL: " + fullUrl, e);
|
||||
}
|
||||
while (true) {
|
||||
try {
|
||||
HttpGet httpget = new HttpGet(fullUrl);
|
||||
url=getPcTokenUrl;
|
||||
|
||||
// 创建请求数据
|
||||
String jsonData = "{\n" +
|
||||
" \"userAccount\": \"" + userAccount + "\",\n" +
|
||||
" \"password\": \"" + password + "\"\n" +
|
||||
"}";
|
||||
|
||||
// 调用 postRequest 方法
|
||||
String postResponse = this.postRequestApi(url, jsonData, 3);
|
||||
|
||||
// 打印响应
|
||||
System.out.println("postResponse: " + postResponse);
|
||||
// 解析 JSO
|
||||
// 解析 JSON
|
||||
JsonObject jsonObject = JsonParser.parseString(postResponse).getAsJsonObject();
|
||||
|
||||
// 提取 token
|
||||
String token = jsonObject.getAsJsonObject("data").get("token").getAsString();
|
||||
// String authorization = SignUtil.makeBasicAuth(); // 假设这是一个生成授权头的方法
|
||||
httpget.addHeader("Content-Type", "application/json");
|
||||
httpget.addHeader("token", token);
|
||||
|
||||
response = httpclient.execute(httpget);
|
||||
HttpEntity entity = response.getEntity();
|
||||
jsonStr = EntityUtils.toString(entity, "utf-8");
|
||||
EntityUtils.consume(entity);
|
||||
break; // 如果成功,退出循环
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
if (retryCount >= retryTimes) {
|
||||
break; // 超过重试次数,退出
|
||||
}
|
||||
retryCount++;
|
||||
try {
|
||||
Thread.sleep(100); // 等待后重试
|
||||
} catch (InterruptedException e1) {
|
||||
e1.printStackTrace();
|
||||
}
|
||||
continue; // 继续重试
|
||||
} finally {
|
||||
if (response != null) {
|
||||
try {
|
||||
response.close(); // 关闭响应
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return jsonStr; // 返回 JSON 字符串
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
package cn.wepact.dfm.training.util;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.http.HttpResponse;
|
||||
import org.apache.http.client.methods.CloseableHttpResponse;
|
||||
import org.apache.http.client.methods.HttpPost;
|
||||
import org.apache.http.client.methods.HttpGet;
|
||||
import org.apache.http.entity.StringEntity;
|
||||
import org.apache.http.impl.client.CloseableHttpClient;
|
||||
import org.apache.http.impl.client.HttpClients;
|
||||
import org.apache.http.util.EntityUtils;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@Slf4j
|
||||
public class HttpClientUtil {
|
||||
|
||||
public static String doPost(String pathUrl, Map<String, Object> dataMap, String accessToken) {
|
||||
String result = null;
|
||||
try (CloseableHttpClient client = HttpClients.createDefault()) {
|
||||
HttpPost post = new HttpPost(pathUrl);
|
||||
post.setHeader("Content-Type", "application/json;charset=utf-8");
|
||||
|
||||
if (accessToken != null && !accessToken.isEmpty()) {
|
||||
post.setHeader("Authorization", accessToken);
|
||||
}
|
||||
|
||||
String dataStr = JSON.toJSONString(dataMap);
|
||||
StringEntity entity = new StringEntity(dataStr, "UTF-8");
|
||||
post.setEntity(entity);
|
||||
|
||||
try (CloseableHttpResponse response = client.execute(post)) {
|
||||
result = EntityUtils.toString(response.getEntity(), "UTF-8");
|
||||
// Log response for debugging
|
||||
log.debug("POST Response from {}: {}", pathUrl, result);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
log.error("POST request failed - URL: {}, Data: {}, Error: {}", pathUrl, dataMap, e.getMessage(), e);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public static String doGet(String pathUrl, Map<String, Object> dataMap, String accessToken) {
|
||||
String result = null;
|
||||
try (CloseableHttpClient client = HttpClients.createDefault()) {
|
||||
StringBuilder urlBuilder = new StringBuilder(pathUrl);
|
||||
if (dataMap != null && !dataMap.isEmpty()) {
|
||||
urlBuilder.append(pathUrl.contains("?") ? "&" : "?");
|
||||
dataMap.forEach((key, value) -> {
|
||||
if (value != null) {
|
||||
urlBuilder.append(key).append("=").append(value).append("&");
|
||||
}
|
||||
});
|
||||
urlBuilder.deleteCharAt(urlBuilder.length() - 1);
|
||||
}
|
||||
|
||||
HttpGet get = new HttpGet(urlBuilder.toString());
|
||||
get.setHeader("Content-Type", "application/json;charset=utf-8");
|
||||
|
||||
if (accessToken != null && !accessToken.isEmpty()) {
|
||||
get.setHeader("Authorization", accessToken);
|
||||
}
|
||||
|
||||
try (CloseableHttpResponse response = client.execute(get)) {
|
||||
result = EntityUtils.toString(response.getEntity(), "UTF-8");
|
||||
// Log response for debugging
|
||||
log.debug("GET Response from {}: {}", pathUrl, result);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
log.error("GET request failed - URL: {}, Parameters: {}, Error: {}", pathUrl, dataMap, e.getMessage(), e);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
33
src/main/java/cn/wepact/dfm/training/util/IpUtil.java
Normal file
33
src/main/java/cn/wepact/dfm/training/util/IpUtil.java
Normal file
@@ -0,0 +1,33 @@
|
||||
package cn.wepact.dfm.training.util;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
import static org.apache.http.util.TextUtils.isEmpty;
|
||||
|
||||
public class IpUtil {
|
||||
public static String getIp(HttpServletRequest request) {
|
||||
String ip = request.getHeader("x-forwarded-for");
|
||||
if (isEmpty(ip)) {
|
||||
ip = request.getHeader("Proxy-Client-IP");
|
||||
}
|
||||
if (isEmpty(ip)) {
|
||||
ip = request.getHeader("WL-Proxy-Client-IP");
|
||||
}
|
||||
if (isEmpty(ip)) {
|
||||
ip = request.getHeader("HTTP_CLIENT_IP");
|
||||
}
|
||||
if (isEmpty(ip)) {
|
||||
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
|
||||
}
|
||||
if (isEmpty(ip)) {
|
||||
ip = request.getHeader("X-Real-IP");
|
||||
}
|
||||
if (isEmpty(ip)) {
|
||||
ip = request.getRemoteAddr();
|
||||
}
|
||||
if (!isEmpty(ip) && ip.contains(",")) {
|
||||
ip = ip.substring(0, ip.indexOf(","));
|
||||
}
|
||||
return ip;
|
||||
}
|
||||
}
|
||||
33
src/main/java/cn/wepact/dfm/training/util/ListUtil.java
Normal file
33
src/main/java/cn/wepact/dfm/training/util/ListUtil.java
Normal file
@@ -0,0 +1,33 @@
|
||||
package cn.wepact.dfm.training.util;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author chenglin.shi@jgdt.com
|
||||
* @version 1.0 2023/8/3
|
||||
*/
|
||||
public class ListUtil<T> {
|
||||
|
||||
/**
|
||||
* 将集合按len数量分成若干个list
|
||||
* @param list
|
||||
* @param len 每个集合的数量
|
||||
* @return
|
||||
*/
|
||||
public List<List<T>> splitList(List<T> list, int len) {
|
||||
if (list == null || list.size() == 0 || len < 1) {
|
||||
return null;
|
||||
}
|
||||
List<List<T>> result = new ArrayList<>();
|
||||
|
||||
int size = list.size();
|
||||
int count = (size + len - 1) / len;
|
||||
|
||||
for (int i = 0; i < count; i++) {
|
||||
List<T> subList = list.subList(i * len, ((i + 1) * len > size ? size : len * (i + 1)));
|
||||
result.add(subList);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
50
src/main/java/cn/wepact/dfm/training/util/PageUtil.java
Normal file
50
src/main/java/cn/wepact/dfm/training/util/PageUtil.java
Normal file
@@ -0,0 +1,50 @@
|
||||
package cn.wepact.dfm.training.util;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 自定义List分页工具
|
||||
* @author hanwl
|
||||
*/
|
||||
public class PageUtil {
|
||||
|
||||
/**
|
||||
* 开始分页
|
||||
* @param list
|
||||
* @param pageNum 页码
|
||||
* @param pageSize 每页多少条数据
|
||||
* @return
|
||||
*/
|
||||
public static List startPage(List list, Integer pageNum,
|
||||
Integer pageSize) {
|
||||
if (list == null) {
|
||||
return null;
|
||||
}
|
||||
if (list.size() == 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Integer count = list.size(); // 记录总数
|
||||
Integer pageCount = 0; // 页数
|
||||
if (count % pageSize == 0) {
|
||||
pageCount = count / pageSize;
|
||||
} else {
|
||||
pageCount = count / pageSize + 1;
|
||||
}
|
||||
|
||||
int fromIndex = 0; // 开始索引
|
||||
int toIndex = 0; // 结束索引
|
||||
|
||||
if (pageNum != pageCount) {
|
||||
fromIndex = (pageNum - 1) * pageSize;
|
||||
toIndex = fromIndex + pageSize;
|
||||
} else {
|
||||
fromIndex = (pageNum - 1) * pageSize;
|
||||
toIndex = count;
|
||||
}
|
||||
|
||||
List pageList = list.subList(fromIndex, toIndex);
|
||||
|
||||
return pageList;
|
||||
}
|
||||
}
|
||||
97
src/main/java/cn/wepact/dfm/training/util/PinYinUtil.java
Normal file
97
src/main/java/cn/wepact/dfm/training/util/PinYinUtil.java
Normal file
@@ -0,0 +1,97 @@
|
||||
package cn.wepact.dfm.training.util;
|
||||
|
||||
import net.sourceforge.pinyin4j.PinyinHelper;
|
||||
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
|
||||
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
|
||||
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
|
||||
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
|
||||
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* 拼音工具类
|
||||
*
|
||||
* @author lsf
|
||||
*/
|
||||
@Component
|
||||
public class PinYinUtil {
|
||||
/**
|
||||
* 将字符串中的中文转化为拼音,其他字符不变
|
||||
*
|
||||
* @param inputString
|
||||
* @return
|
||||
*/
|
||||
public static String getPingYin(String inputString) {
|
||||
HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
|
||||
format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
|
||||
format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
|
||||
format.setVCharType(HanyuPinyinVCharType.WITH_V);
|
||||
|
||||
char[] input = inputString.trim().toCharArray();
|
||||
String output = "";
|
||||
|
||||
try {
|
||||
for (int i = 0; i < input.length; i++) {
|
||||
if (Character.toString(input[i]).matches("[\\u4E00-\\u9FA5]+")) {
|
||||
String[] temp = PinyinHelper.toHanyuPinyinStringArray(input[i], format);
|
||||
output += temp[0];
|
||||
} else
|
||||
output += Character.toString(input[i]);
|
||||
}
|
||||
} catch (BadHanyuPinyinOutputFormatCombination e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return output;
|
||||
}
|
||||
/**
|
||||
* 获取汉字串拼音首字母,英文字符不变
|
||||
* @param chinese 汉字串
|
||||
* @return 汉语拼音首字母
|
||||
*/
|
||||
public static String getFirstSpell(String chinese) {
|
||||
StringBuffer pybf = new StringBuffer();
|
||||
char[] arr = chinese.toCharArray();
|
||||
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
|
||||
defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
|
||||
defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
|
||||
for (int i = 0; i < arr.length; i++) {
|
||||
if (arr[i] > 128) {
|
||||
try {
|
||||
String[] temp = PinyinHelper.toHanyuPinyinStringArray(arr[i], defaultFormat);
|
||||
if (temp != null) {
|
||||
pybf.append(temp[0].charAt(0));
|
||||
}
|
||||
} catch (BadHanyuPinyinOutputFormatCombination e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
} else {
|
||||
pybf.append(arr[i]);
|
||||
}
|
||||
}
|
||||
return pybf.toString().replaceAll("\\W", "").trim();
|
||||
}
|
||||
/**
|
||||
* 获取汉字串拼音,英文字符不变
|
||||
* @param chinese 汉字串
|
||||
* @return 汉语拼音
|
||||
*/
|
||||
public static String getFullSpell(String chinese) {
|
||||
StringBuffer pybf = new StringBuffer();
|
||||
char[] arr = chinese.toCharArray();
|
||||
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
|
||||
defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
|
||||
defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
|
||||
for (int i = 0; i < arr.length; i++) {
|
||||
if (arr[i] > 128) {
|
||||
try {
|
||||
pybf.append(PinyinHelper.toHanyuPinyinStringArray(arr[i], defaultFormat)[0]);
|
||||
} catch (BadHanyuPinyinOutputFormatCombination e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
} else {
|
||||
pybf.append(arr[i]);
|
||||
}
|
||||
}
|
||||
return pybf.toString();
|
||||
}
|
||||
}
|
||||
703
src/main/java/cn/wepact/dfm/training/util/RedisUtils.java
Normal file
703
src/main/java/cn/wepact/dfm/training/util/RedisUtils.java
Normal file
@@ -0,0 +1,703 @@
|
||||
package cn.wepact.dfm.training.util;
|
||||
|
||||
import org.springframework.data.geo.*;
|
||||
import org.springframework.data.redis.connection.RedisGeoCommands;
|
||||
import org.springframework.data.redis.core.RedisTemplate;
|
||||
import org.springframework.data.redis.core.StringRedisTemplate;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
@Component
|
||||
public class RedisUtils {
|
||||
|
||||
|
||||
@Resource
|
||||
private RedisTemplate<String, Object> redisTemplate;
|
||||
|
||||
@Resource
|
||||
private StringRedisTemplate stringRedisTemplate;
|
||||
|
||||
/**
|
||||
* 清空 redis 缓存 (慎用)
|
||||
*
|
||||
* @return 结果
|
||||
*/
|
||||
public String flushDB() {
|
||||
stringRedisTemplate.getConnectionFactory().getConnection().flushDb();
|
||||
return "ok";
|
||||
}
|
||||
|
||||
|
||||
/* Key(键) */
|
||||
|
||||
/**
|
||||
* 单个删除
|
||||
*
|
||||
* @param key 键
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
public Boolean delete(String key) {
|
||||
return stringRedisTemplate.delete(key);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除
|
||||
*
|
||||
* @param keys 键集合
|
||||
* @return 删除成功的个数
|
||||
*/
|
||||
public Long deleteMulti(Set<String> keys) {
|
||||
return stringRedisTemplate.delete(keys);
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查是否存在改key值
|
||||
*
|
||||
* @param key 键
|
||||
* @return 结果
|
||||
*/
|
||||
public Boolean exists(final String key) {
|
||||
return stringRedisTemplate.hasKey(key);
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改键名
|
||||
*
|
||||
* @param oldKey 旧键
|
||||
* @param newKey 新键
|
||||
*/
|
||||
public void rename(String oldKey, String newKey) {
|
||||
stringRedisTemplate.rename(oldKey, newKey);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取所有key
|
||||
*
|
||||
* @param patternKey 模糊key
|
||||
* @return 结果
|
||||
*/
|
||||
public Collection<String> keys(String patternKey) {
|
||||
return stringRedisTemplate.keys(patternKey);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取指定key的有效时间,秒
|
||||
*
|
||||
* @param key 键
|
||||
* @return 有效时间
|
||||
*/
|
||||
public Long getExpireSeconds(String key) {
|
||||
return stringRedisTemplate.getExpire(key);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取指定key的有效时间,分
|
||||
*
|
||||
* @param key 键
|
||||
* @return 有效时间
|
||||
*/
|
||||
public Long getExpireMinutes(String key) {
|
||||
return stringRedisTemplate.getExpire(key, TimeUnit.MINUTES);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取指定key的有效时间,小时
|
||||
*
|
||||
* @param key 键
|
||||
* @return 有效时间
|
||||
*/
|
||||
public Long getExpireHours(String key) {
|
||||
return stringRedisTemplate.getExpire(key, TimeUnit.HOURS);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取指定key的有效时间,天
|
||||
*
|
||||
* @param key 键
|
||||
* @return 有效时间
|
||||
*/
|
||||
public Long getExpireDays(String key) {
|
||||
return stringRedisTemplate.getExpire(key, TimeUnit.DAYS);
|
||||
}
|
||||
|
||||
|
||||
/* string(字符串) */
|
||||
|
||||
|
||||
/**
|
||||
* 添加key和value
|
||||
*
|
||||
* @param key 键
|
||||
* @param value 值
|
||||
*/
|
||||
public void setString(String key, String value) {
|
||||
stringRedisTemplate.opsForValue().set(key, value);
|
||||
}
|
||||
|
||||
public void setObject(String key, Object value) {
|
||||
redisTemplate.opsForValue().set(key, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据key值,查询value值
|
||||
*
|
||||
* @param key 键
|
||||
* @return 值
|
||||
*/
|
||||
public String getString(final String key) {
|
||||
return stringRedisTemplate.opsForValue().get(key);
|
||||
}
|
||||
|
||||
public Object getObject(final String key) {
|
||||
return redisTemplate.opsForValue().get(key);
|
||||
}
|
||||
|
||||
/**
|
||||
* 如果key值不存在,则存储
|
||||
*
|
||||
* @param key 键
|
||||
* @param value 值
|
||||
*/
|
||||
public void setIfAbsent(String key, String value) {
|
||||
stringRedisTemplate.opsForValue().setIfAbsent(key, value);
|
||||
}
|
||||
|
||||
public void setIfAbsent(String key, Object value) {
|
||||
redisTemplate.opsForValue().setIfAbsent(key, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* 在原有value值后面追加value
|
||||
*
|
||||
* @param key 键
|
||||
* @param value 值
|
||||
* @return 追加后value的长度
|
||||
*/
|
||||
public Integer append(String key, String value) {
|
||||
return stringRedisTemplate.opsForValue().append(key, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加key和value时候,设定失效时长,单位秒
|
||||
*
|
||||
* @param key 键
|
||||
* @param value 值
|
||||
* @param expireSeconds 失效时长,秒
|
||||
*/
|
||||
public void setExpire(String key, String value, Long expireSeconds) {
|
||||
stringRedisTemplate.opsForValue().set(key, value, expireSeconds, TimeUnit.SECONDS);
|
||||
}
|
||||
|
||||
public void setExpire(String key, Object value, Long expireSeconds) {
|
||||
redisTemplate.opsForValue().set(key, value, expireSeconds, TimeUnit.SECONDS);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量添加key和value
|
||||
*
|
||||
* @param map 键值集合
|
||||
*/
|
||||
public void multiSetString(Map<String, String> map) {
|
||||
stringRedisTemplate.opsForValue().multiSet(map);
|
||||
}
|
||||
|
||||
public void multiSetObject(Map<String, Object> map) {
|
||||
redisTemplate.opsForValue().multiSet(map);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量查询value
|
||||
*
|
||||
* @param keys 键集合
|
||||
* @return 值集合
|
||||
*/
|
||||
public List<String> multiGetString(Set<String> keys) {
|
||||
return stringRedisTemplate.opsForValue().multiGet(keys);
|
||||
}
|
||||
|
||||
public List<Object> multiGetObject(Set<String> keys) {
|
||||
return redisTemplate.opsForValue().multiGet(keys);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取value同时,更新value值
|
||||
*
|
||||
* @param key 键
|
||||
* @param value 新值
|
||||
* @return 旧值
|
||||
*/
|
||||
public String getAndSet(String key, String value) {
|
||||
return stringRedisTemplate.opsForValue().getAndSet(key, value);
|
||||
}
|
||||
|
||||
public Object getAndSet(String key, Object value) {
|
||||
return redisTemplate.opsForValue().getAndSet(key, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据strIndex和endIndex,截取value值
|
||||
*
|
||||
* @param key 键
|
||||
* @param strIndex 开始角标
|
||||
* @param endIndex 结束角标,-1为获取所有的value值
|
||||
* @return 结果
|
||||
*/
|
||||
public String rangeOfString(String key, long strIndex, long endIndex) {
|
||||
return stringRedisTemplate.opsForValue().get(key, strIndex, endIndex);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取所有符合patternKey键的值
|
||||
*
|
||||
* @param patternKey 模糊键
|
||||
* @return 所有值
|
||||
*/
|
||||
public List<String> getStringValues(String patternKey) {
|
||||
return multiGetString((Set<String>) keys(patternKey));
|
||||
}
|
||||
|
||||
public List<Object> getObjectValues(String patternKey) {
|
||||
return multiGetObject((Set<String>) keys(patternKey));
|
||||
}
|
||||
|
||||
|
||||
/* List(列表) */
|
||||
|
||||
/**
|
||||
* 写入list,入栈
|
||||
*
|
||||
* @param key 键
|
||||
* @param value 值
|
||||
* @return 入栈之后list的长度
|
||||
*/
|
||||
public Long pushElementOfList(final String key, Object... value) {
|
||||
|
||||
return redisTemplate.opsForList().rightPushAll(key, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* 左侧写入list,入栈
|
||||
*
|
||||
* @param key 键
|
||||
* @param value 值
|
||||
* @return 入栈之后list的长度
|
||||
*/
|
||||
public Long leftPushElementOfList(final String key, Object value) {
|
||||
return redisTemplate.opsForList().leftPush(key, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* 右侧写入list,入栈
|
||||
*
|
||||
* @param key 键
|
||||
* @param value 值
|
||||
* @return 入栈之后list的长度
|
||||
*/
|
||||
public Long rightPushElementOfList(final String key, Object value) {
|
||||
return redisTemplate.opsForList().rightPush(key, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* 左侧获取list一条数据,出栈
|
||||
*
|
||||
* @param key 键
|
||||
* @return 值
|
||||
*/
|
||||
public Object leftPopElementOfList(final String key) {
|
||||
return redisTemplate.opsForList().leftPop(key);
|
||||
}
|
||||
|
||||
/**
|
||||
* 右侧获取list一条数据,出栈
|
||||
*
|
||||
* @param key 键
|
||||
* @return 值
|
||||
*/
|
||||
public Object rightPopElementOfList(final String key) {
|
||||
return redisTemplate.opsForList().rightPop(key);
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改list中指定element值
|
||||
*
|
||||
* @param key 键
|
||||
* @param index list角标
|
||||
* @param value 值
|
||||
*/
|
||||
public void setElementOfList(final String key, long index, Object value) {
|
||||
redisTemplate.opsForList().set(key, index, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取list中指定element值
|
||||
*
|
||||
* @param key 键
|
||||
* @param index list角标
|
||||
* @return 值
|
||||
*/
|
||||
public Object indexElementOfList(final String key, long index) {
|
||||
return redisTemplate.opsForList().index(key, index);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取指定key的list
|
||||
*
|
||||
* @param key 键
|
||||
* @return 列表
|
||||
*/
|
||||
public List<Object> allElementsOfList(final String key) {
|
||||
return rangeElementsOfList(key, 0L, -1L);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取指定key的,指定范围的list
|
||||
*
|
||||
* @param key 键
|
||||
* @param strIndex 开始角标
|
||||
* @param endIndex 结束角标
|
||||
* @return 指定范围的list
|
||||
*/
|
||||
public List<Object> rangeElementsOfList(final String key, long strIndex, long endIndex) {
|
||||
return redisTemplate.opsForList().range(key, strIndex, endIndex);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除list中指定element值
|
||||
*
|
||||
* @param key 键
|
||||
* @param index list角标
|
||||
* @param value 值
|
||||
* @return 删除成功的个数
|
||||
*/
|
||||
public Long removeElementOfList(final String key, long index, Object value) {
|
||||
return redisTemplate.opsForList().remove(key, index, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取list的大小
|
||||
*
|
||||
* @param key 键
|
||||
* @return list的大小
|
||||
*/
|
||||
public Long sizeOfList(final String key) {
|
||||
return redisTemplate.opsForList().size(key);
|
||||
}
|
||||
|
||||
|
||||
/* Hash(哈希表) */
|
||||
|
||||
/**
|
||||
* 写入一条hash数据
|
||||
*
|
||||
* @param key 键
|
||||
* @param hashKey hash键
|
||||
* @param hashValue hash值
|
||||
*/
|
||||
public void putEelementOfHash(final String key, Object hashKey, Object hashValue) {
|
||||
stringRedisTemplate.opsForHash().put(key, hashKey, hashValue);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取一条hash数据
|
||||
*
|
||||
* @param key 键
|
||||
* @param hashKey hash键
|
||||
* @return hash值
|
||||
*/
|
||||
public Object getElementOfHash(final String key, Object hashKey) {
|
||||
return stringRedisTemplate.opsForHash().get(key, hashKey);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除hash数据
|
||||
*
|
||||
* @param key 键
|
||||
* @param hashKey hash键
|
||||
* @return 删除数据的数量
|
||||
*/
|
||||
public Long deleteEelementOfHash(final String key, Object... hashKey) {
|
||||
return stringRedisTemplate.opsForHash().delete(key, hashKey);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取hash的大小
|
||||
*
|
||||
* @param key 键
|
||||
* @return hash大小
|
||||
*/
|
||||
public Long sizeOfHash(final String key) {
|
||||
return stringRedisTemplate.opsForHash().size(key);
|
||||
}
|
||||
|
||||
|
||||
/* Set(集合) */
|
||||
|
||||
/**
|
||||
* 添加元素到set
|
||||
*
|
||||
* @param key 键
|
||||
* @param value set中的值
|
||||
* @return 添加成功的条数
|
||||
*/
|
||||
public Long addElementOfSet(final String key, Object... value) {
|
||||
return redisTemplate.opsForSet().add(key, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* 从set中获取所有元素
|
||||
*
|
||||
* @param key 键
|
||||
* @return 所有set值
|
||||
*/
|
||||
public Set<Object> allElementsOfSet(final String key) {
|
||||
return redisTemplate.opsForSet().members(key);
|
||||
}
|
||||
|
||||
/**
|
||||
* 从set中获取一条 (出栈)
|
||||
*
|
||||
* @param key 键
|
||||
* @return 获取一条
|
||||
*/
|
||||
public Object popElementOfSet(final String key) {
|
||||
return redisTemplate.opsForSet().pop(key);
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断元素是否为set中的元素
|
||||
*
|
||||
* @param key 键
|
||||
* @param value 元素值
|
||||
* @return 结果
|
||||
*/
|
||||
public Boolean isElementOfSet(final String key, Object value) {
|
||||
return redisTemplate.opsForSet().isMember(key, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* 从set中移除某元素
|
||||
*
|
||||
* @param key 键
|
||||
* @param value list中的值
|
||||
* @return 成功移除元素的个数
|
||||
*/
|
||||
public Long removeElementOfSet(final String key, Object... value) {
|
||||
return redisTemplate.opsForSet().remove(key, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取set的元素个数
|
||||
*
|
||||
* @param key 键
|
||||
* @return set的元素个数
|
||||
*/
|
||||
public Long sizeOfSet(final String key) {
|
||||
return redisTemplate.opsForSet().size(key);
|
||||
}
|
||||
|
||||
/* SortedSet(有序集合) */
|
||||
|
||||
/**
|
||||
* 添加元素到sortedSet
|
||||
*
|
||||
* @param key 键
|
||||
* @param value 元素
|
||||
* @param score 排序值
|
||||
* @return 是否添加成功
|
||||
*/
|
||||
public Boolean addElementOfZSet(final String key, Object value, double score) {
|
||||
return redisTemplate.opsForZSet().add(key, value, score);
|
||||
}
|
||||
|
||||
/**
|
||||
* 从sortedSet中移除元素
|
||||
*
|
||||
* @param key 键
|
||||
* @param value 被移除的元素
|
||||
* @return 成功移除元素的个数
|
||||
*/
|
||||
public Long removeElementOfZSet(final String key, Object... value) {
|
||||
return redisTemplate.opsForZSet().remove(key, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* 截取sortedSet中的元素 (按照score正序排序)
|
||||
*
|
||||
* @param key 键
|
||||
* @param strIndex 开始的角标
|
||||
* @param endIndex 结束的角标
|
||||
* @return 截取的元素
|
||||
*/
|
||||
public Set<Object> rangeElementOfZSet(final String key, long strIndex, long endIndex) {
|
||||
return redisTemplate.opsForZSet().range(key, strIndex, endIndex);
|
||||
}
|
||||
|
||||
/**
|
||||
* 截取sortedSet中的元素 (按照score倒叙排序)
|
||||
*
|
||||
* @param key 键
|
||||
* @param strIndex 开始的角标
|
||||
* @param endIndex 结束的角标
|
||||
* @return 截取的元素
|
||||
*/
|
||||
public Set<Object> reverseRangeElementOfZSet(final String key, long strIndex, long endIndex) {
|
||||
return redisTemplate.opsForZSet().reverseRange(key, strIndex, endIndex);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* GEO(地理位置) */
|
||||
|
||||
/**
|
||||
* 将给定的空间元素(纬度、经度、名字)添加到指定的键里面
|
||||
*
|
||||
* @param key 键
|
||||
* @param x 经度
|
||||
* @param y 纬度
|
||||
* @param member 名字
|
||||
* @return 成功添加的个数
|
||||
*/
|
||||
public Long geoAdd(final String key, double x, double y, String member) {
|
||||
Point point = new Point(x, y);
|
||||
return geoAdd(key, point, member);
|
||||
}
|
||||
|
||||
/**
|
||||
* 将给定的空间元素(纬度、经度、名字)添加到指定的键里面
|
||||
*
|
||||
* @param key 键
|
||||
* @param point 经度,纬度封装对象
|
||||
* @param member 名字
|
||||
* @return 成功添加的个数
|
||||
*/
|
||||
public Long geoAdd(final String key, Point point, String member) {
|
||||
return redisTemplate.opsForGeo().add(key, point, member);
|
||||
}
|
||||
|
||||
/**
|
||||
* 将给定的空间元素(纬度、经度、名字)添加到指定的键里面
|
||||
*
|
||||
* @param key 键
|
||||
* @param geoLocation 经纬度,名字的封装对象
|
||||
* @return 成功添加的个数
|
||||
*/
|
||||
public Long geoAdd(final String key, RedisGeoCommands.GeoLocation<String> geoLocation) {
|
||||
return stringRedisTemplate.opsForGeo().add(key, geoLocation);
|
||||
}
|
||||
|
||||
/**
|
||||
* 从键里面返回所有给定位置元素的位置(经度和纬度)
|
||||
*
|
||||
* @param key 键
|
||||
* @param members 名称
|
||||
* @return 经纬度封装对象列表
|
||||
*/
|
||||
public List<Point> geoPos(final String key, String... members) {
|
||||
return stringRedisTemplate.opsForGeo().position(key, members);
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回两个给定位置之间的距离。
|
||||
*
|
||||
* @param key 键
|
||||
* @param member1 给定位置1
|
||||
* @param member2 给定位置2
|
||||
* @return 距离
|
||||
*/
|
||||
public Distance geoDist(final String key, String member1, String member2) {
|
||||
return stringRedisTemplate.opsForGeo().distance(key, member1, member2);
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回两个给定位置之间的距离。
|
||||
*
|
||||
* @param key 键
|
||||
* @param member1 给定位置1
|
||||
* @param member2 给定位置2
|
||||
* @param metric 长度单位
|
||||
* @return 单位
|
||||
*/
|
||||
public Distance geoDist(final String key, String member1, String member2, Metric metric) {
|
||||
return stringRedisTemplate.opsForGeo().distance(key, member1, member2, metric);
|
||||
}
|
||||
|
||||
/**
|
||||
* 以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。
|
||||
*
|
||||
* @param key 键
|
||||
* @param circle 给定的经纬度,以及半径
|
||||
* @return 所有符合距离的位置元素
|
||||
*/
|
||||
public GeoResults<RedisGeoCommands.GeoLocation<String>> geoRadius(final String key, Circle circle) {
|
||||
return stringRedisTemplate.opsForGeo().radius(key, circle);
|
||||
}
|
||||
|
||||
/**
|
||||
* 以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。
|
||||
*
|
||||
* @param key 键
|
||||
* @param circle 给定的经纬度,以及半径
|
||||
* @param geoRadiusCommandArgs 额外命令
|
||||
* @return 所有符合距离的位置元素
|
||||
*/
|
||||
public GeoResults<RedisGeoCommands.GeoLocation<String>> geoRadius(final String key,
|
||||
Circle circle,
|
||||
RedisGeoCommands.GeoRadiusCommandArgs geoRadiusCommandArgs) {
|
||||
return stringRedisTemplate.opsForGeo().radius(key, circle, geoRadiusCommandArgs);
|
||||
}
|
||||
|
||||
/**
|
||||
* 以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。
|
||||
*
|
||||
* @param key 键
|
||||
* @param member 存储的位置名称
|
||||
* @param radius 半径,单位默认米
|
||||
* @return 所有符合距离的位置元素
|
||||
*/
|
||||
public GeoResults<RedisGeoCommands.GeoLocation<String>> geoRadius(final String key, String member, double radius) {
|
||||
return stringRedisTemplate.opsForGeo().radius(key, member, radius);
|
||||
}
|
||||
|
||||
/**
|
||||
* 以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。
|
||||
*
|
||||
* @param key 键
|
||||
* @param member 存储的位置名称
|
||||
* @param distance 半径
|
||||
* @return 所有符合距离的位置元素
|
||||
*/
|
||||
public GeoResults<RedisGeoCommands.GeoLocation<String>> geoRadius(final String key, String member, Distance distance) {
|
||||
return stringRedisTemplate.opsForGeo().radius(key, member, distance);
|
||||
}
|
||||
|
||||
/**
|
||||
* 以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。
|
||||
*
|
||||
* @param key 键
|
||||
* @param member 存储的位置名称
|
||||
* @param distance 半径
|
||||
* @return 所有符合距离的位置元素
|
||||
*/
|
||||
public GeoResults<RedisGeoCommands.GeoLocation<String>> geoRadius(final String key, String member,
|
||||
Distance distance,
|
||||
RedisGeoCommands.GeoRadiusCommandArgs geoRadiusCommandArgs) {
|
||||
return stringRedisTemplate.opsForGeo().radius(key, member, distance, geoRadiusCommandArgs);
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回一个或多个位置元素的 Geohash 表示。
|
||||
*
|
||||
* @param key 键
|
||||
* @param members 存储的位置名称
|
||||
* @return geohash 值
|
||||
*/
|
||||
public List<String> geoHash(final String key, String... members) {
|
||||
return stringRedisTemplate.opsForGeo().hash(key, members);
|
||||
}
|
||||
}
|
||||
50
src/main/java/cn/wepact/dfm/training/util/SHA256.java
Normal file
50
src/main/java/cn/wepact/dfm/training/util/SHA256.java
Normal file
@@ -0,0 +1,50 @@
|
||||
package cn.wepact.dfm.training.util;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.security.MessageDigest;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
|
||||
/**
|
||||
* Created by liuye on 2019/7/30.
|
||||
*/
|
||||
public class SHA256 {
|
||||
/**
|
||||
* 利用java原生的摘要实现SHA256加密
|
||||
* @param str 加密后的报文
|
||||
* @return
|
||||
*/
|
||||
public static String getSHA256StrJava(String str){
|
||||
MessageDigest messageDigest;
|
||||
String encodeStr = "";
|
||||
try {
|
||||
messageDigest = MessageDigest.getInstance("SHA-256");
|
||||
messageDigest.update(str.getBytes("UTF-8"));
|
||||
encodeStr = byte2Hex(messageDigest.digest());
|
||||
} catch (NoSuchAlgorithmException e) {
|
||||
e.printStackTrace();
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return encodeStr;
|
||||
}
|
||||
|
||||
/**
|
||||
* 将byte转为16进制
|
||||
* @param bytes
|
||||
* @return
|
||||
*/
|
||||
private static String byte2Hex(byte[] bytes){
|
||||
StringBuffer stringBuffer = new StringBuffer();
|
||||
String temp = null;
|
||||
for (int i=0;i<bytes.length;i++){
|
||||
temp = Integer.toHexString(bytes[i] & 0xFF);
|
||||
if (temp.length()==1){
|
||||
//1得到一位的进行补0操作
|
||||
stringBuffer.append("0");
|
||||
}
|
||||
stringBuffer.append(temp);
|
||||
}
|
||||
return stringBuffer.toString();
|
||||
}
|
||||
}
|
||||
|
||||
57
src/main/java/cn/wepact/dfm/training/util/SignUtil.java
Normal file
57
src/main/java/cn/wepact/dfm/training/util/SignUtil.java
Normal file
@@ -0,0 +1,57 @@
|
||||
package cn.wepact.dfm.training.util;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.cloud.context.config.annotation.RefreshScope;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.util.Base64;
|
||||
|
||||
/**
|
||||
* Created by liuye on 2019/7/24.
|
||||
*/
|
||||
@Component
|
||||
@RefreshScope
|
||||
public class SignUtil {
|
||||
private static Logger logger = LoggerFactory.getLogger(SignUtil.class);
|
||||
|
||||
private static String apiUser;
|
||||
private static String apiPassword;
|
||||
|
||||
@Value("${api.user}")
|
||||
public void setApiUser(String val) {
|
||||
apiUser = val;
|
||||
}
|
||||
@Value("${api.password}")
|
||||
public void setApiPassword(String val) {
|
||||
apiPassword = val;
|
||||
}
|
||||
|
||||
public static String makeBasicAuth() {
|
||||
final Base64.Encoder encoder = Base64.getEncoder();
|
||||
String text = apiUser + ':' + apiPassword;
|
||||
String encodedText = null;
|
||||
try {
|
||||
final byte[] textByte = text.getBytes("UTF-8");
|
||||
encodedText = encoder.encodeToString(textByte);
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
logger.error("", e);
|
||||
}
|
||||
return "Basic " + encodedText;
|
||||
}
|
||||
public static String getPcToken() {
|
||||
final Base64.Encoder encoder = Base64.getEncoder();
|
||||
String text = apiUser + ':' + apiPassword;
|
||||
String encodedText = null;
|
||||
try {
|
||||
final byte[] textByte = text.getBytes("UTF-8");
|
||||
encodedText = encoder.encodeToString(textByte);
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
logger.error("", e);
|
||||
}
|
||||
return "Basic " + encodedText;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
package cn.wepact.dfm.training.util;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class StringSplitsUtil {
|
||||
|
||||
/**
|
||||
* 把原始字符串分割成指定长度的字符串列表
|
||||
*
|
||||
* @param inputString
|
||||
* 原始字符串
|
||||
* @param length
|
||||
* 指定长度
|
||||
* @return
|
||||
*/
|
||||
public static List<String> getStrList(String inputString, int length) {
|
||||
int size = inputString.length() / length;
|
||||
if (inputString.length() % length != 0) {
|
||||
size += 1;
|
||||
}
|
||||
return getStrList(inputString, length, size);
|
||||
}
|
||||
|
||||
/**
|
||||
* 把原始字符串分割成指定长度的字符串列表
|
||||
*
|
||||
* @param inputString
|
||||
* 原始字符串
|
||||
* @param length
|
||||
* 指定长度
|
||||
* @param size
|
||||
* 指定列表大小
|
||||
* @return
|
||||
*/
|
||||
public static List<String> getStrList(String inputString, int length,
|
||||
int size) {
|
||||
List<String> list = new ArrayList<String>();
|
||||
int count = 0;
|
||||
for (int index = 0; index < size; index++) {
|
||||
String childStr;
|
||||
int f = index * length;
|
||||
int t = (index + 1) * length;
|
||||
childStr = substring(inputString , f+ count , t);
|
||||
if(null != childStr && childStr.length()>0){
|
||||
count = count + check(childStr," ");
|
||||
if(index>0) f = f + count;
|
||||
t = t + count;
|
||||
childStr = substring(inputString , f , t);
|
||||
list.add(childStr);
|
||||
}
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 分割字符串,如果开始位置大于字符串长度,返回空
|
||||
*
|
||||
* @param str
|
||||
* 原始字符串
|
||||
* @param f
|
||||
* 开始位置
|
||||
* @param t
|
||||
* 结束位置
|
||||
* @return
|
||||
*/
|
||||
public static String substring(String str, int f, int t) {
|
||||
if (f > str.length())
|
||||
return null;
|
||||
if (t > str.length()) {
|
||||
return str.substring(f, str.length());
|
||||
} else {
|
||||
return str.substring(f, t);
|
||||
}
|
||||
}
|
||||
|
||||
private static int check(String str, String word) {
|
||||
int count = 0;
|
||||
for (int i = 0; i < str.length(); i++) {
|
||||
if(str.charAt(i) == word.charAt(0)){
|
||||
count++;
|
||||
}
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
34
src/main/java/cn/wepact/dfm/training/util/UUID16.java
Normal file
34
src/main/java/cn/wepact/dfm/training/util/UUID16.java
Normal file
@@ -0,0 +1,34 @@
|
||||
package cn.wepact.dfm.training.util;
|
||||
|
||||
import org.springframework.cloud.context.config.annotation.RefreshScope;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* Created by daiYu
|
||||
*/
|
||||
@Component
|
||||
@RefreshScope
|
||||
public class UUID16 {
|
||||
|
||||
public static String get16UUID(){
|
||||
// 1.开头两位,标识业务代码或机器代码(可变参数)
|
||||
String machineId = "50";
|
||||
// 2.中间四位整数,标识日期
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("MMdd");
|
||||
String dayTime = sdf.format(new Date());
|
||||
// 3.生成uuid的hashCode值
|
||||
int hashCode = UUID.randomUUID().toString().hashCode();
|
||||
// 4.可能为负数
|
||||
if(hashCode < 0){
|
||||
hashCode = -hashCode;
|
||||
}
|
||||
// 5.算法处理: 0-代表前面补充0; 10-代表长度为10; d-代表参数为正数型
|
||||
String value = machineId + dayTime + String.format("%010d", hashCode);
|
||||
return value;
|
||||
}
|
||||
|
||||
}
|
||||
170
src/main/java/cn/wepact/dfm/training/util/WorkingDayUtil.java
Normal file
170
src/main/java/cn/wepact/dfm/training/util/WorkingDayUtil.java
Normal file
@@ -0,0 +1,170 @@
|
||||
package cn.wepact.dfm.training.util;
|
||||
|
||||
import java.text.DateFormat;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class WorkingDayUtil {
|
||||
/**
|
||||
* 获取指定日期到现在一共经过了几个工作日
|
||||
*
|
||||
* @param date 指定日期
|
||||
* @param days 工作日数组
|
||||
* @return 中间的工作日天数
|
||||
*/
|
||||
public static long getWorkingDays(Date date, String[] days) {
|
||||
long days1 = getDays(date);
|
||||
return getWorkingDays(days1, days);
|
||||
}
|
||||
|
||||
public static long getWorkingDays(Date date, List<String> days) {
|
||||
long days1 = getDays(date);
|
||||
return getWorkingDays(days1, days);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取经过了几个工作日
|
||||
*
|
||||
* @param dayCount 天数
|
||||
* @param days 工作日数组
|
||||
* @return 工作日
|
||||
*/
|
||||
private static long getWorkingDays(long dayCount, String[] days) {
|
||||
List<String> strings = Arrays.asList(days);
|
||||
return getWorkingDays(dayCount, strings);
|
||||
}
|
||||
|
||||
private static long getWorkingDays(long dayCount, List<String> days) {
|
||||
Date date = new Date();
|
||||
List<String> dateList = new ArrayList<>();
|
||||
for (int i = 0; i < dayCount; i++) {
|
||||
Calendar instance = Calendar.getInstance();
|
||||
instance.setTime(date);
|
||||
instance.add(Calendar.DAY_OF_MONTH, -i - 1);
|
||||
Date time = instance.getTime();
|
||||
dateList.add(new SimpleDateFormat("yyyy-MM-dd").format(time));
|
||||
}
|
||||
dateList = dateList.stream().filter(days::contains).collect(Collectors.toList());
|
||||
return dateList.size();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取指定日期距今几天,不足一天舍去
|
||||
*
|
||||
* @param startDate 指定日期
|
||||
* @return 天数
|
||||
*/
|
||||
private static long getDays(Date startDate) {
|
||||
return (System.currentTimeMillis() + 10000 - startDate.getTime()) / 1000 / 60 / 60 / 24;
|
||||
}
|
||||
|
||||
/**
|
||||
* 自定义日期
|
||||
*
|
||||
* @param year 年
|
||||
* @param month 月
|
||||
* @param day 日
|
||||
* @return 日期
|
||||
*/
|
||||
private static Date getCustomDate(int year, int month, int day) {
|
||||
return getCustomDate(year, month, day, 0, 0, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* 自定义日期
|
||||
*
|
||||
* @param year 年
|
||||
* @param month 月
|
||||
* @param day 日
|
||||
* @param hour 时
|
||||
* @param minute 分
|
||||
* @param second 秒
|
||||
* @return 日期
|
||||
*/
|
||||
private static Date getCustomDate(int year, int month, int day, int hour, int minute, int second) {
|
||||
Calendar instance = Calendar.getInstance();
|
||||
instance.set(year, month - 1, day, hour, minute, second);
|
||||
return instance.getTime();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取几个工作日之前的时间点
|
||||
*
|
||||
* @param days 相隔天数
|
||||
* @param day 工作日列表
|
||||
* @return 时间点
|
||||
*/
|
||||
public static Date getWorkingDayAfterNow(List<String> days, int day,String today) throws ParseException {
|
||||
if (days.size() < day + 1) {
|
||||
return null;
|
||||
}
|
||||
Date current = new Date();
|
||||
List<String> newList = new ArrayList<>();
|
||||
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
|
||||
current = dateFormat.parse(today);
|
||||
for (String s : days) {
|
||||
if (newList.size() > day) {
|
||||
break;
|
||||
}
|
||||
Date parse = dateFormat.parse(s);
|
||||
if (parse.getTime() < current.getTime()) {
|
||||
continue;
|
||||
}
|
||||
newList.add(s);
|
||||
}
|
||||
if (newList.size() < day + 1) {
|
||||
return null;
|
||||
}
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
String s = newList.get(day);
|
||||
|
||||
Calendar instance = Calendar.getInstance();
|
||||
instance.setTime(new Date());
|
||||
int hour = instance.get(Calendar.HOUR_OF_DAY);
|
||||
int minute = instance.get(Calendar.MINUTE);
|
||||
int second = instance.get(Calendar.SECOND);
|
||||
s += " " + hour + ":" + minute + ":" + second;
|
||||
return sdf.parse(s);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取几个工作日之前的时间点
|
||||
*
|
||||
* @param days 相隔天数
|
||||
* @param day 工作日列表
|
||||
* @return 时间点
|
||||
*/
|
||||
public static Date getWorkingDayBeforeNow(List<String> days, int day) throws ParseException {
|
||||
if (days.size() < day + 1) {
|
||||
return null;
|
||||
}
|
||||
Date current = new Date();
|
||||
List<String> newList = new ArrayList<>();
|
||||
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
|
||||
for (String s : days) {
|
||||
if (newList.size() > day) {
|
||||
break;
|
||||
}
|
||||
Date parse = dateFormat.parse(s);
|
||||
if (parse.getTime() > current.getTime()) {
|
||||
continue;
|
||||
}
|
||||
newList.add(s);
|
||||
}
|
||||
if (newList.size() < day + 1) {
|
||||
return null;
|
||||
}
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
String s = newList.get(day);
|
||||
|
||||
Calendar instance = Calendar.getInstance();
|
||||
instance.setTime(current);
|
||||
int hour = instance.get(Calendar.HOUR_OF_DAY);
|
||||
int minute = instance.get(Calendar.MINUTE);
|
||||
int second = instance.get(Calendar.SECOND);
|
||||
s += " " + hour + ":" + minute + ":" + second;
|
||||
return sdf.parse(s);
|
||||
}
|
||||
}
|
||||
74
src/main/java/cn/wepact/dfm/training/utils/EmailUtil.java
Normal file
74
src/main/java/cn/wepact/dfm/training/utils/EmailUtil.java
Normal file
@@ -0,0 +1,74 @@
|
||||
package cn.wepact.dfm.training.utils;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import javax.mail.*;
|
||||
import javax.mail.internet.InternetAddress;
|
||||
import javax.mail.internet.MimeMessage;
|
||||
import java.util.Properties;
|
||||
|
||||
public class EmailUtil {
|
||||
private static final String SMTP_SERVER = "mails.dfmc.com.cn";
|
||||
private static final String SMTP_PORT = "25";
|
||||
private static final String FROM_ADDRESS = "dfmc-hrssc@dfmc.com.cn";
|
||||
private static final String TO_ADDRESS = "zhangsc@dfmc.com.cn";
|
||||
private static final String PASSWORD = "Kw4a9zpXHnrUag2d";
|
||||
|
||||
@Data
|
||||
public static class Email{
|
||||
private String to;
|
||||
private String subject;
|
||||
private String content;
|
||||
}
|
||||
|
||||
public static void sendMail(Email email) {
|
||||
// 发件人的邮箱账号
|
||||
String from = FROM_ADDRESS;
|
||||
// 发件人的邮箱密码
|
||||
String password = PASSWORD;
|
||||
// 收件人的邮箱账号
|
||||
String to = email.getTo();
|
||||
// 获取系统属性
|
||||
Properties properties = System.getProperties();
|
||||
// 设置邮件服务器
|
||||
properties.put("mail.debug", "true");
|
||||
properties.put("mail.smtp.host", SMTP_SERVER);
|
||||
properties.put("mail.smtp.port", SMTP_PORT);
|
||||
properties.put("mail.smtp.auth", "true");
|
||||
// 创建验证器对象
|
||||
Authenticator authenticator = new Authenticator() {
|
||||
protected PasswordAuthentication getPasswordAuthentication() {
|
||||
return new PasswordAuthentication(from, password);
|
||||
}
|
||||
};
|
||||
// 创建会话对象
|
||||
Session session = Session.getDefaultInstance(properties, authenticator);
|
||||
try {
|
||||
// 创建默认的MimeMessage对象
|
||||
Message message = new MimeMessage(session);
|
||||
// 设置发件人
|
||||
message.setFrom(new InternetAddress(from));
|
||||
// 设置收件人
|
||||
message.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
|
||||
// 设置邮件主题
|
||||
message.setSubject(email.getSubject());
|
||||
// 设置邮件内容
|
||||
message.setText(email.getContent());
|
||||
// 发送邮件
|
||||
Transport.send(message);
|
||||
System.out.println("邮件发送成功");
|
||||
} catch (MessagingException mex) {
|
||||
mex.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
Email email = new Email();
|
||||
email.setTo(TO_ADDRESS);
|
||||
email.setSubject("测试邮件");
|
||||
email.setContent("测试邮件内容");
|
||||
sendMail(email);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user