项目初始化

This commit is contained in:
Elliott
2024-04-07 11:28:44 +08:00
commit a2879e8b64
65 changed files with 2747 additions and 0 deletions

33
.gitignore vendored Normal file
View File

@@ -0,0 +1,33 @@
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/

30
Elliott/dataManager.log Normal file

File diff suppressed because one or more lines are too long

View File

BIN
libs/ojdbc6.jar Normal file

Binary file not shown.

158
pom.xml Normal file
View File

@@ -0,0 +1,158 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.joju</groupId>
<artifactId>datamanager</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>datamanager</name>
<description>datamanager</description>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.6.13</spring-boot.version>
<failOnMissingWebXml>false</failOnMissingWebXml>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-tomcat</artifactId>-->
<!-- <scope>provided</scope>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>javax.servlet</groupId>-->
<!-- <artifactId>javax.servlet-api</artifactId>-->
<!-- <version>3.1.0</version>-->
<!-- <scope>provided</scope>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.mybatis.spring.boot</groupId>-->
<!-- <artifactId>mybatis-spring-boot-starter</artifactId>-->
<!-- <version>2.2.2</version>-->
<!-- </dependency>-->
<!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.20</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.swagger/swagger-annotations -->
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.5.22</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.validation/validation-api -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.8</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-aop -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc -->
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>9.4.1.jre8</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-dbutils/commons-dbutils -->
<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>1.7</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>3.0.0</version>
<!-- <configuration>-->
<!-- <mainClass>com.joju.datamanager.DatamanagerApplication</mainClass>-->
<!-- <skip>true</skip>-->
<!-- </configuration>-->
</plugin>
</plugins>
</build>
</project>

View File

@@ -0,0 +1,17 @@
package com.joju.datamanager;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication()
//@ServletComponentScan
public class DatamanagerApplication {
public static void main(String[] args) {
SpringApplication.run(DatamanagerApplication.class, args);
}
}

View File

@@ -0,0 +1,13 @@
package com.joju.datamanager;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
public class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(DatamanagerApplication.class);
}
}

View File

@@ -0,0 +1,25 @@
package com.joju.datamanager.common.annotation;
import java.lang.annotation.*;
/**
* Created with IntelliJ IDEA.
*
* @author Mr.zs
* @date 2023/12/27
* @description
* @modifiedBy
* @version: 1.0
*/
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
@Documented
public @interface EleganceLog {
/**
* 日志描述信息
*
* @return
*/
String description() default "";
}

View File

@@ -0,0 +1,23 @@
package com.joju.datamanager.common.annotation;
/**
* Created with IntelliJ IDEA.
*
* @author Mr.zs
* @date 2023/12/25
* @description
* @modifiedBy
* @version: 1.0
*/
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface ResultAnnotation {
boolean required() default true;
}

View File

@@ -0,0 +1,152 @@
package com.joju.datamanager.common.elegancelog;
import cn.hutool.json.JSONUtil;
import com.joju.datamanager.common.annotation.EleganceLog;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Method;
/**
* Created with IntelliJ IDEA.
*
* @author Mr.zs
* @date 2023/12/27
* @description
* @modifiedBy
* @version: 1.0
*/
@Aspect
@Component
public class EleganceLogAspect {
private final static Logger logger = LoggerFactory.getLogger(EleganceLogAspect.class);
/**
* 换行符
*/
private static final String LINE_SEPARATOR = System.lineSeparator();
/**
* 以自定义 @WebLog 注解为切点
*/
@Pointcut("@annotation(com.joju.datamanager.common.annotation.EleganceLog)")
public void EleganceLog() {
}
/**
* 在切点之前织入
*
* @param joinPoint
* @throws Throwable
*/
@Before("EleganceLog()")
public void doBefore(JoinPoint joinPoint) throws Throwable {
// 开始打印请求日志
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
// 获取 @WebLog 注解的描述信息
String methodDescription = getAspectLogDescription(joinPoint);
// 打印请求相关参数
logger.info("========================================== Start ==========================================");
// 打印请求 url
logger.info("URL : {}", request.getRequestURL().toString());
// 打印描述信息
logger.info("Description : {}", methodDescription);
// 打印 Http method
logger.info("HTTP Method : {}", request.getMethod());
// 打印调用 controller 的全路径以及执行方法
logger.info("Class Method : {}.{}", joinPoint.getSignature().getDeclaringTypeName(), joinPoint.getSignature().getName());
// 打印请求的 IP
logger.info("IP : {}", request.getRemoteAddr());
// 打印请求入参
if (methodDescription.equals("loginUserInfo") || methodDescription.equals("quitUserInfo")) {
} else {
logger.info("Request Args : {}", JSONUtil.toJsonStr(joinPoint.getArgs()));
}
}
/**
* 环绕
*
* @param proceedingJoinPoint
* @return
* @throws Throwable
*/
@Around("EleganceLog()")
public Object doAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
long startTime = System.currentTimeMillis();
Object result = proceedingJoinPoint.proceed();
// 打印出参
logger.info("Response Args : {}", JSONUtil.toJsonStr(result));
// 执行耗时
logger.info("Time-Consuming : {} ms", System.currentTimeMillis() - startTime);
logger.info("=========================================== End ===========================================" + LINE_SEPARATOR);
return result;
}
/**
* 在切点之后织入
*
* @throws Throwable
*/
// @After("EleganceLog()")
// public void doAfter() throws Throwable {
// // 接口结束后换行,方便分割查看
// logger.info("=========================================== End ===========================================" + LINE_SEPARATOR);
// }
// @AfterReturning("EleganceLog()")
// public void afterRunning() throws Throwable {
// // 接口结束后换行,方便分割查看
// logger.info("=========================================== End ===========================================" + LINE_SEPARATOR);
// }
@AfterThrowing("EleganceLog()")
public void afterThrowing() {
// System.out.println("异常出现之后...afterThrowing");
logger.info("=========================================== Exception Start===========================================" + LINE_SEPARATOR);
}
/**
* 获取切面注解的描述
*
* @param joinPoint 切点
* @return 描述信息
* @throws Exception
*/
public String getAspectLogDescription(JoinPoint joinPoint)
throws Exception {
String targetName = joinPoint.getTarget().getClass().getName();
String methodName = joinPoint.getSignature().getName();
Object[] arguments = joinPoint.getArgs();
Class targetClass = Class.forName(targetName);
Method[] methods = targetClass.getMethods();
StringBuilder description = new StringBuilder("");
for (Method method : methods) {
if (method.getName().equals(methodName)) {
Class[] clazzs = method.getParameterTypes();
if (clazzs.length == arguments.length) {
description.append(method.getAnnotation(EleganceLog.class).description());
break;
}
}
}
return description.toString();
}
}

View File

@@ -0,0 +1,27 @@
package com.joju.datamanager.common.exception;
/**
* Created with IntelliJ IDEA.
*
* @author Mr.zs
* @date 2023/12/27
* @description
* @modifiedBy
* @version: 1.0
*/
public interface BaseErrorInfoInterface {
/**
* 错误码
*
* @return
*/
String getResultCode();
/**
* 错误描述
*
* @return
*/
String getResultMsg();
}

View File

@@ -0,0 +1,45 @@
package com.joju.datamanager.common.exception;
/**
* Created with IntelliJ IDEA.
*
* @author Mr.zs
* @date 2023/12/27
* @description
* @modifiedBy
* @version: 1.0
*/
public enum ExceptionEnum implements BaseErrorInfoInterface {
// 数据操作错误定义
SUCCESS("2000", "成功!"),
BODY_NOT_MATCH("4000", "请求的数据格式不符!"),
SIGNATURE_NOT_MATCH("4001", "请求的数字签名不匹配!"),
NOT_FOUND("4004", "未找到该资源!"),
INTERNAL_SERVER_ERROR("5000", "服务器内部错误!"),
SERVER_BUSY("5003", "服务器正忙,请稍后再试!");
/**
* 错误码
*/
private final String resultCode;
/**
* 错误描述
*/
private final String resultMsg;
ExceptionEnum(String resultCode, String resultMsg) {
this.resultCode = resultCode;
this.resultMsg = resultMsg;
}
@Override
public String getResultCode() {
return resultCode;
}
@Override
public String getResultMsg() {
return resultMsg;
}
}

View File

@@ -0,0 +1,72 @@
package com.joju.datamanager.common.exception;
import com.joju.datamanager.common.result.Result;
import com.joju.datamanager.common.result.ResultEnum;
import com.joju.datamanager.common.result.ResultUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
/**
* Created with IntelliJ IDEA.
*
* @author Mr.zs
* @date 2023/12/27
* @description
* @modifiedBy
* @version: 1.0
*/
@ControllerAdvice
public class GlobalExceptionHandler {
private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
/**
* 处理自定义的业务异常
*
* @param req
* @param e
* @return
*/
@ExceptionHandler(value = SeMException.class)
@ResponseBody
public Result bizExceptionHandler(HttpServletRequest req, SeMException e) {
logger.error("发生业务异常!原因是:{}", e.getErrorMsg());
// return ResultUtil.error(e.getErrorCode(), e.getErrorMsg());
return ResultUtil.failure(e.getErrorMsg(), null);
}
/**
* 处理空指针的异常
*
* @param req
* @param e
* @return
*/
@ExceptionHandler(value = NullPointerException.class)
@ResponseBody
public Result exceptionHandler(HttpServletRequest req, NullPointerException e) {
logger.error("发生空指针异常!原因是:", e);
// return ResultResponse.error(ExceptionEnum.BODY_NOT_MATCH);
return ResultUtil.failure(ResultEnum.NULL_POINT);
}
/**
* 处理其他异常
*
* @param req
* @param e
* @return
*/
@ExceptionHandler(value = Exception.class)
@ResponseBody
public Result exceptionHandler(HttpServletRequest req, Exception e) {
logger.error("未知异常!原因是:", e);
return ResultUtil.failure(ResultEnum.SERVICE_FAILURE);
}
}

View File

@@ -0,0 +1,78 @@
package com.joju.datamanager.common.exception;
/**
* Created with IntelliJ IDEA.
*
* @author Mr.zs
* @date 2023/12/27
* @description
* @modifiedBy
* @version: 1.0
*/
public class SeMException extends RuntimeException {
private static final long serialVersionUID = 1L;
/**
* 错误码
*/
protected String errorCode;
/**
* 错误信息
*/
protected String errorMsg;
public SeMException() {
super();
}
public SeMException(BaseErrorInfoInterface errorInfoInterface) {
super(errorInfoInterface.getResultCode());
this.errorCode = errorInfoInterface.getResultCode();
this.errorMsg = errorInfoInterface.getResultMsg();
}
public SeMException(BaseErrorInfoInterface errorInfoInterface, Throwable cause) {
super(errorInfoInterface.getResultCode(), cause);
this.errorCode = errorInfoInterface.getResultCode();
this.errorMsg = errorInfoInterface.getResultMsg();
}
public SeMException(String errorMsg) {
super(errorMsg);
this.errorMsg = errorMsg;
}
public SeMException(String errorCode, String errorMsg) {
super(errorCode);
this.errorCode = errorCode;
this.errorMsg = errorMsg;
}
public SeMException(String errorCode, String errorMsg, Throwable cause) {
super(errorCode, cause);
this.errorCode = errorCode;
this.errorMsg = errorMsg;
}
public String getErrorCode() {
return errorCode;
}
public void setErrorCode(String errorCode) {
this.errorCode = errorCode;
}
public String getErrorMsg() {
return errorMsg;
}
public void setErrorMsg(String errorMsg) {
this.errorMsg = errorMsg;
}
@Override
public Throwable fillInStackTrace() {
return this;
}
}

View File

@@ -0,0 +1,43 @@
package com.joju.datamanager.common.result;
/**
* Created with IntelliJ IDEA.
*
* @author Mr.zs
* @date 2023/12/25
* @description
* @modifiedBy
* @version: 1.0
*/
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* 描述:
*
* @author panxg
* @date 2020年11月28日 11:56
*/
@Data
@Accessors(chain = true)
@ApiModel(value = "Result对象", description = "Result对象")
public class Result<T> implements Serializable {
@ApiModelProperty(value = "返回状态")
private Integer status;
@ApiModelProperty(value = "返回状态码")
private Integer code;
@ApiModelProperty(value = "返回描述")
private String msg;
@ApiModelProperty(value = "返回数据")
private T data;
}

View File

@@ -0,0 +1,24 @@
package com.joju.datamanager.common.result;
/**
* Created with IntelliJ IDEA.
*
* @author Mr.zs
* @date 2023/12/25
* @description
* @modifiedBy
* @version: 1.0
*/
public class ResultConstant {
public static final Integer RESULT_STATUS_SUCCESS = 1;
public static final Integer RESULT_STATUS_FAILURE = -1;
public static final Integer RESULT_CODE_DEFAULT = 200;
public static final Integer RESULT_CODE_FAILURE = -200;
public static final String RESULT_MSG_SUCCESS = "操作成功";
public static final String RESULT_MSG_FAILURE = "操作失败";
}

View File

@@ -0,0 +1,102 @@
package com.joju.datamanager.common.result;
/**
* Created with IntelliJ IDEA.
*
* @author Mr.zs
* @date 2023/12/25
* @description
* @modifiedBy
* @version: 1.0
*/
public enum ResultEnum {
LOGIN_OUT_SUCCESS(1, 200, "退出成功!"),
LOGIN_IN_SUCCESS(1, 200, "登录成功!"),
AUTHORITY_FAILURE(-1, 200, "权限不足!"),
LOGIN_FAILURE_200401(-1, 200401, "登录失败!"),
LOGIN_FAILURE_200402(-1, 200402, "登录信息已过期!"),
LOGIN_FAILURE_200403(-1, 200403, "未登录,请先登录!"),
OPERATE_SUCCESS(1, 200, "操作成功!"),
OPERATE_FAILURE(-1, 200, "操作失败!"),
QUERY_SUCCESS(1, 200, "查询成功!"),
QUERY_FAILURE(-1, 200, "查询失败!"),
DELETE_SUCCESS(1, 200, "删除成功!"),
DELETE_FAILURE(-1, 200, "删除失败!"),
INSERT_SUCCESS(1, 200, "新增成功!"),
INSERT_FAILURE(-1, 200, "新增失败!"),
UPDATE_SUCCESS(1, 200, "修改成功!"),
UPDATE_FAILURE(-1, 200, "修改失败!"),
SQL_FAILURE(-1, 200, "数据库异常!"),
HTTP_FAILURE(-1, 200, "请求异常!"),
SERVICE_FAILURE(-1, 200, "服务器异常!"),
NULL_POINT(-1, 200, "服务器内部空指针!"),
PARAM_ERROR(-1,200,"请求参数有误"),
WX_PAY_EXCEPTION(-1,200,"微信异常"),
;
private Integer status;
private Integer code;
private String msg;
ResultEnum(Integer status, Integer code, String msg) {
this.status = status;
this.code = code;
this.msg = msg;
}
ResultEnum( Integer code, String msg) {
this.status = 0;
this.code = code;
this.msg = msg;
}
public ResultEnum setStatus(Integer status) {
this.status = status;
return this;
}
public ResultEnum setCode(Integer code) {
this.code = code;
return this;
}
public ResultEnum setMsg(String msg) {
this.msg = msg;
return this;
}
public Integer getStatus() {
return status;
}
public Integer getCode() {
return code;
}
public String getMsg() {
return msg;
}
}

View File

@@ -0,0 +1,63 @@
package com.joju.datamanager.common.result;
/**
* Created with IntelliJ IDEA.
*
* @author Mr.zs
* @date 2023/12/25
* @description
* @modifiedBy
* @version: 1.0
*/
import com.joju.datamanager.common.annotation.ResultAnnotation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
import javax.validation.constraints.NotNull;
/**
* 描述:
* 使用 @ControllerAdvice & ResponseBodyAdvice
* 拦截Controller方法默认返回参数统一处理返回值/响应体
*/
@Slf4j
@ControllerAdvice
public class ResultResponseBodyAdviceImpl implements ResponseBodyAdvice<Object> {
@Override
public boolean supports(@NotNull MethodParameter returnType, @NotNull Class<? extends HttpMessageConverter<?>> converterType) {
/*支持所有方法*/
ResultAnnotation methodAnnotation = returnType.getMethodAnnotation(ResultAnnotation.class);
if (methodAnnotation != null) {
return methodAnnotation.required();
}
return false;
}
@Override
public Object beforeBodyWrite(Object body,
@NotNull MethodParameter returnType,
@NotNull MediaType selectedContentType,
@NotNull Class<? extends HttpMessageConverter<?>> selectedConverterType,
@NotNull ServerHttpRequest request,
@NotNull ServerHttpResponse response) {
if (log.isDebugEnabled()) {
log.debug("ResultResponseBodyAdviceImpl.beforeBodyWrite:{}", body);
}
if (body instanceof Result) {
return body;
}
return ResultUtil.successData(body);
}
}

View File

@@ -0,0 +1,154 @@
package com.joju.datamanager.common.result;
/**
* Created with IntelliJ IDEA.
*
* @author Mr.zs
* @date 2023/12/25
* @description
* @modifiedBy
* @version: 1.0
*/
import cn.hutool.core.util.ArrayUtil;
public class ResultUtil {
/**
* @Description 成功
* @Param @return @exception
* @Author panxg
* @Date 2020/11/28 12:28
**/
public static <T> Result<T> success() {
return ResultUtil.getResultSuccess();
}
public static <T> Result<T> success(ResultEnum resultEnum) {
return ResultUtil.getResult(resultEnum);
}
public static <T> Result<T> success(ResultEnum resultEnum,T data) {
Result<T> result = ResultUtil.getResult(resultEnum);
result.setData(data);
return result;
}
public static <T> Result<T> successMsg(String msg) {
Result<T> resultSuccess = ResultUtil.getResultSuccess();
resultSuccess.setMsg(msg);
return resultSuccess;
}
public static <T> Result<T> successData(T data) {
Result<T> resultSuccess = ResultUtil.getResultSuccess();
resultSuccess.setData(data);
return resultSuccess;
}
public static <T> Result<T> success(String msg, T data) {
Result<T> resultSuccess = ResultUtil.getResultSuccess();
resultSuccess.setData(data);
resultSuccess.setMsg(msg);
return resultSuccess;
}
/**
* @Description 失败
* @Param @return @exception
* @Author panxg
* @Date 2020/11/28 12:27
**/
public static <T> Result<T> failure() {
return ResultUtil.getResultFailure();
}
public static <T> Result<T> failure(ResultEnum resultEnum) {
return ResultUtil.getResult(resultEnum);
}
public static <T> Result<T> failure(ResultEnum resultEnum,T data) {
Result<T> result = ResultUtil.getResult(resultEnum);
result.setData(data);
return result;
}
public static <T> Result<T> failureMsg(String msg) {
return ResultUtil.getResultFailure(msg);
}
public static <T> Result<T> failureData(T data) {
Result<T> resultFailure = ResultUtil.getResultFailure();
resultFailure.setData(data);
return resultFailure;
}
public static <T> Result<T> failure(String msg, T data) {
Result<T> resultFailure = ResultUtil.getResultFailure();
resultFailure.setData(data);
resultFailure.setMsg(msg);
return resultFailure;
}
/**
* @Description 获取成功默认返回实体
* @Param @return @exception
* @Author panxg
* @Date 2020/11/28 12:27
**/
public static <T> Result<T> getResultSuccess() {
Result<T> result = new Result<>();
result.setStatus(ResultConstant.RESULT_STATUS_SUCCESS);
result.setMsg(ResultConstant.RESULT_MSG_SUCCESS);
result.setCode(ResultConstant.RESULT_CODE_DEFAULT);
return result;
}
/**
* @Description 获取失败默认返回实体
* @Param @return @exception
* @Author panxg
* @Date 2020/11/28 12:27
**/
public static <T> Result<T> getResultFailure(String... msg) {
Result<T> result = new Result<>();
result.setStatus(ResultConstant.RESULT_STATUS_FAILURE);
if (ArrayUtil.isEmpty(msg)) {
result.setMsg(ResultConstant.RESULT_MSG_FAILURE);
}else{
result.setMsg(msg[0]);
}
result.setCode(ResultConstant.RESULT_CODE_DEFAULT);
return result;
}
/**
* @Description 获取默认返回实体
* @Param @return @exception
* @Author panxg
* @Date 2020/11/28 12:27
**/
public static <T> Result<T> getResult() {
Result<T> result = new Result<>();
result.setStatus(ResultConstant.RESULT_STATUS_SUCCESS);
result.setMsg(ResultConstant.RESULT_MSG_SUCCESS);
result.setCode(ResultConstant.RESULT_CODE_DEFAULT);
return result;
}
/**
* @Description 获取枚举入参返回实体
* @Param @return @exception
* @Author panxg
* @Date 2020/11/28 12:27
**/
public static <T> Result<T> getResult(ResultEnum resultEnum) {
Result<T> result = new Result<>();
result.setStatus(resultEnum.getStatus());
result.setMsg(resultEnum.getMsg());
result.setCode(resultEnum.getCode());
return result;
}
}

View File

@@ -0,0 +1,78 @@
package com.joju.datamanager.controller;
import cn.hutool.core.collection.CollUtil;
import com.joju.datamanager.common.annotation.EleganceLog;
import com.joju.datamanager.common.result.Result;
import com.joju.datamanager.common.result.ResultUtil;
import com.joju.datamanager.model.medicalprescription.MedicalPrescription;
import com.joju.datamanager.model.viewmodel.PatientList;
import com.joju.datamanager.service.HisViewSearchService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
/**
* @description: his视图获取
* @author: Mr.zs
* @create: 2024-03-15 17:44
**/
@RestController
@RequestMapping("/hisViewSearch")
public class HisViewSearchController {
@Autowired
HisViewSearchService hisViewSearchService;
/**
* his手术管理视图
*
* @param hzxm
* @param blh
* @return
*/
@GetMapping("/getSurgicalViewData")
@EleganceLog(description = "his手术管理视图")
public Result getSurgicalViewData(String hzxm, String blh) {
List<Map<String, Object>> maps = hisViewSearchService.getSurgicalView(hzxm, blh);
if (!CollUtil.isEmpty(maps)) {//有数据
return ResultUtil.successData(maps);
}
return ResultUtil.failureMsg("未获取到数据");
}
/**
* his历史就诊记录查询
*
* @param patient_name
* @param idcard
* @return
*/
@GetMapping("/getHistoricalVisits")
@EleganceLog(description = "his历史就诊记录查询")
public Result getHistoricalVisits(String patient_name, String idcard) {
List<PatientList> historicalVisits = hisViewSearchService.getHistoricalVisits(patient_name, idcard);
if (!CollUtil.isEmpty(historicalVisits)) {//有数据
return ResultUtil.successData(historicalVisits);
}
return ResultUtil.failureMsg("未获取到数据");
}
@GetMapping("/getMedicalPrescription")
@EleganceLog(description = "获取今天的遗嘱开单信息!")
public Result getMedicalPrescription() {
List<MedicalPrescription> medicalPrescriptions = hisViewSearchService.getMedicalPrescription();
if (!CollUtil.isEmpty(medicalPrescriptions)) {
return ResultUtil.successData(medicalPrescriptions);
}
return ResultUtil.failureMsg("获取失败!");
}
}

View File

@@ -0,0 +1,75 @@
package com.joju.datamanager.controller;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.joju.datamanager.common.annotation.EleganceLog;
import com.joju.datamanager.common.result.Result;
import com.joju.datamanager.common.result.ResultUtil;
import com.joju.datamanager.model.guidance.IntelligentGuidanceCategory;
import com.joju.datamanager.model.guidance.IntelligentGuidanceQuestions;
import com.joju.datamanager.service.IntelligentGuidanceCategoryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/**
* @description: 智能导诊
* @author: Mr.zs
* @create: 2024-03-21 14:00
**/
@RestController
@RequestMapping("/IntelligentGuidance")
public class IntelligentGuidanceController {
@Autowired
IntelligentGuidanceCategoryService intelligentGuidanceCategoryService;
@GetMapping("/testGuidance")
public Result testInterface() {
return ResultUtil.successData("ok");
}
@GetMapping("/getSymptom")
@EleganceLog(description = "导诊根据身体部位获取症状")
public Result getSymptomByBodyAreaType(String bodyAreaType) {
List<IntelligentGuidanceCategory> intelligentGuidanceCategoryList = intelligentGuidanceCategoryService.getSymptomByBodyAreaType(bodyAreaType);
Map<String, List<IntelligentGuidanceCategory>> listMap = intelligentGuidanceCategoryList.stream().collect(Collectors.groupingBy(IntelligentGuidanceCategory::getBodyArea));
String bodyArea = listMap.keySet().iterator().next();
JSONObject result = JSONUtil.createObj().put("bodyArea", bodyArea).put("categoryList", intelligentGuidanceCategoryList);
JSONUtil.toJsonStr(result);
return ResultUtil.successData(JSONUtil.toJsonStr(result));
}
@GetMapping("/getQuestions")
@EleganceLog(description = "导诊获取症状对应的子问题")
public Result getQuestionsByChildId(String childId) {
List<IntelligentGuidanceQuestions> intelligentGuidanceQuestionsList = intelligentGuidanceCategoryService.getQuestionsByChildId(childId);
List<IntelligentGuidanceQuestions> intelligentGuidanceQuestions = intelligentGuidanceQuestionsList.stream().sorted(Comparator.comparing(IntelligentGuidanceQuestions::getSortId)).collect(Collectors.toList());
return ResultUtil.successData(intelligentGuidanceQuestions);
}
@GetMapping("/getAllBodyArea")
@EleganceLog(description = "导诊获取身体区域划分")
public Result getAllBodyArea() {
List<IntelligentGuidanceCategory> list = intelligentGuidanceCategoryService.getAllBodyArea();
return ResultUtil.successData(list);
}
}

View File

@@ -0,0 +1,52 @@
package com.joju.datamanager.controller;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.joju.datamanager.common.annotation.EleganceLog;
import com.joju.datamanager.common.result.Result;
import com.joju.datamanager.common.result.ResultUtil;
import com.joju.datamanager.model.callnumber.CallNumbers;
import com.joju.datamanager.service.CallNumbersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @description: 排队叫号接口
* @author: Mr.zs
* @create: 2024-03-27 19:00
**/
@RestController
@RequestMapping("/callNumbers")
public class LineUpToCallNumbersController {
@Autowired
CallNumbersService callNumbersService;
@GetMapping("/getCallNumberByIdentity")
@EleganceLog(description = "排队叫号获取线上数据")
public Result getCallNumberByIdentity(String identity) {
List<CallNumbers> callNumbersList = callNumbersService.getCallNumberByIdentity(identity);
if (!CollUtil.isEmpty(callNumbersList)) {
return ResultUtil.successData(callNumbersList);
}
return ResultUtil.failureMsg("获取失败");
}
@GetMapping("/getCallNumber")
@EleganceLog(description = "排队叫号获取本地测试数据")
public Result getCallNumber(String identity) {
List<CallNumbers> list = callNumbersService.list(new QueryWrapper<CallNumbers>().eq("Card_no", identity).ne("adiagnostic_status", "已就诊"));
if (!CollUtil.isEmpty(list)) {
return ResultUtil.successData(list);
}
return ResultUtil.failureMsg("获取失败");
}
}

View File

@@ -0,0 +1,50 @@
package com.joju.datamanager.controller;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.joju.datamanager.common.annotation.EleganceLog;
import com.joju.datamanager.common.result.Result;
import com.joju.datamanager.common.result.ResultUtil;
import com.joju.datamanager.model.medicalprescription.MedicalPrescription;
import com.joju.datamanager.service.MedicalPrescriptionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @description: 医嘱开单接口
* @author: Mr.zs
* @create: 2024-04-02 19:11
**/
@RestController
@RequestMapping("/MedicalPrescription")
public class MedicalPrescriptionController {
@Autowired
MedicalPrescriptionService medicalPrescriptionService;
@GetMapping("/getLocalMedicalPrescription")
@EleganceLog(description = "获取本地的医嘱开单信息")
public Result getLocalMedicalPrescription() {
String today = DateUtil.today();
String todayString = today + "00:00:00";
DateTime tomorrow = DateUtil.tomorrow();
String s = DateUtil.formatDate(tomorrow);
String tomorrowString = s + "00:00:00";
List<MedicalPrescription> medicalPrescriptions = medicalPrescriptionService.list(new QueryWrapper<MedicalPrescription>().between("lrrq", todayString, tomorrowString));
if (!CollUtil.isEmpty(medicalPrescriptions)) {
return ResultUtil.successData(medicalPrescriptions);
}
return ResultUtil.failureMsg("获取失败!!");
}
}

View File

@@ -0,0 +1,69 @@
package com.joju.datamanager.controller;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.joju.datamanager.common.annotation.EleganceLog;
import com.joju.datamanager.common.result.Result;
import com.joju.datamanager.common.result.ResultUtil;
import com.joju.datamanager.model.order.Order;
import com.joju.datamanager.model.order.OrderVo;
import com.joju.datamanager.service.OrderService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @description: 患者预约记录接口
* @author: Mr.zs
* @create: 2024-03-27 18:52
**/
@RestController
@RequestMapping(value = "/order")
@Slf4j
public class OrderController {
@Autowired
OrderService orderService;
/**
* 获取预约到今天的挂号订单信息
*
* @param yyrq
* @return
*/
@GetMapping("/getOrderByDate")
@EleganceLog(description = "根据日期获取预约订单")
public Result getOrderByDate(String yyrq) {
List<Order> orders = orderService.list(new QueryWrapper<Order>().eq("yyrq", yyrq).eq("status", "0"));
if (!CollUtil.isEmpty(orders)) {
return ResultUtil.successData(orders);
}
return ResultUtil.failureMsg("获取失败");
}
@GetMapping("/getOrderByDateAndDist")
@EleganceLog(description = "根据日期获取预约订单以及关联的人员信息")
public Result getOrderByDateAndDist(String yyrq) {
//查到当日就诊的所有订单以及患者信息,根据真实姓名去重
List<OrderVo> orderVos = orderService.getOrderByDateAndDist(yyrq);
if (!CollUtil.isEmpty(orderVos)) {
return ResultUtil.successData(orderVos);
}
return ResultUtil.failureMsg("获取失败");
}
@PostMapping("/insertMissedAppoints")
@EleganceLog(description = "批量插入爽约记录")
public Result insertMissedApponits(@RequestBody List<OrderVo> orderVos) {
Integer i = orderService.insertMissedAppoints(orderVos);
if (i > 0) {
return ResultUtil.success();
}
return ResultUtil.failureMsg("插入失败!");
}
}

View File

@@ -0,0 +1,45 @@
package com.joju.datamanager.controller;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.joju.datamanager.common.annotation.EleganceLog;
import com.joju.datamanager.common.result.Result;
import com.joju.datamanager.common.result.ResultUtil;
import com.joju.datamanager.model.viewmodel.PatientList;
import com.joju.datamanager.service.PatientListService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @description: 历史就诊测试用接口
* @author: Mr.zs
* @create: 2024-03-28 17:14
**/
@RestController
@RequestMapping("/patientList")
public class PatientListController {
@Autowired
PatientListService patientListService;
@GetMapping("/getPatientListByNameAndIdCard")
@EleganceLog(description = "获取历史就诊记录的本地测试数据")
public Result getPatientListByNameAndIdCard(String patientName, String idCard) {
List<PatientList> list = patientListService.list(new QueryWrapper<PatientList>().eq("patient_name", patientName).eq("idcard", idCard).orderBy(true, false, "register_date"));
if (!CollUtil.isEmpty(list)) {
return ResultUtil.successData(list);
}
return ResultUtil.failureMsg("获取失败");
}
}

View File

@@ -0,0 +1,40 @@
package com.joju.datamanager.controller;
import cn.hutool.core.collection.CollUtil;
import com.joju.datamanager.common.annotation.EleganceLog;
import com.joju.datamanager.common.result.Result;
import com.joju.datamanager.common.result.ResultUtil;
import com.joju.datamanager.service.TriageCallingService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @description: 分诊叫号接口
* @author: Mr.zs
* @create: 2024-03-29 16:15
**/
@RestController
@RequestMapping("/triageCalling")
public class TriageCallingController {
@Autowired
TriageCallingService triageCallingService;
@GetMapping("/getTriageCallingByDate")
@EleganceLog(description = "分诊叫号获取患者叫号记录")
public Result getTriageCallingByDate() {
List<String> triageCallings = triageCallingService.getTriageCallingByDate();
if (!CollUtil.isEmpty(triageCallings)) {
return ResultUtil.successData(triageCallings);
}
return ResultUtil.failureMsg("获取失败");
}
}

View File

@@ -0,0 +1,53 @@
package com.joju.datamanager.controller;
import cn.hutool.core.collection.CollUtil;
import com.joju.datamanager.common.annotation.EleganceLog;
import com.joju.datamanager.common.result.Result;
import com.joju.datamanager.common.result.ResultUtil;
import com.joju.datamanager.model.user.User;
import com.joju.datamanager.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @description: 微信用户信息管理
* @author: Mr.zs
* @create: 2024-03-06 18:09
**/
@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/getUserData")
@EleganceLog(description = "测试接口")
public Result getData() {
return ResultUtil.successData("ok");
}
@GetMapping("/getOpenidByUserCard")
@EleganceLog(description = "获取用户卡号绑定的openid")
public Result getOpenidByUserCard(String card) {
List<User> userCardAndRelateList = userService.getOpenidByUserCard(card);
if (!CollUtil.isEmpty(userCardAndRelateList)) {
return ResultUtil.successData(userCardAndRelateList);
}
return ResultUtil.failureMsg("获取失败");
}
}

View File

@@ -0,0 +1,14 @@
package com.joju.datamanager.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.joju.datamanager.model.callnumber.CallNumbers;
import org.apache.ibatis.annotations.Mapper;
/**
* @description: 排队叫号Mapper
* @author: Mr.zs
* @create: 2024-03-29 10:33
**/
@Mapper
public interface CallNumbersMapper extends BaseMapper<CallNumbers> {
}

View File

@@ -0,0 +1,14 @@
package com.joju.datamanager.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.joju.datamanager.model.guidance.IntelligentGuidanceCategory;
import org.apache.ibatis.annotations.Mapper;
/**
* @description: 身体部位mapper
* @author: Mr.zs
* @create: 2024-03-21 18:14
**/
@Mapper
public interface IntelligentGuidanceCategoryMapper extends BaseMapper<IntelligentGuidanceCategory> {
}

View File

@@ -0,0 +1,15 @@
package com.joju.datamanager.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.joju.datamanager.model.guidance.IntelligentGuidanceQuestions;
import org.apache.ibatis.annotations.Mapper;
/**
* @description: 智能导诊问题mapper
* @author: Mr.zs
* @create: 2024-03-25 11:07
**/
@Mapper
public interface IntelligentGuidanceQuestionsMapper extends BaseMapper<IntelligentGuidanceQuestions> {
}

View File

@@ -0,0 +1,15 @@
package com.joju.datamanager.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.joju.datamanager.model.medicalprescription.MedicalPrescription;
import org.apache.ibatis.annotations.Mapper;
/**
* @description: 医嘱开单Mapper
* @author: Mr.zs
* @create: 2024-04-02 19:14
**/
@Mapper
public interface MedicalPrescriptionMapper extends BaseMapper<MedicalPrescription> {
}

View File

@@ -0,0 +1,22 @@
package com.joju.datamanager.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.joju.datamanager.model.order.Order;
import com.joju.datamanager.model.order.OrderVo;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* @description: 患者预约记录mapper
* @author: Mr.zs
* @create: 2024-03-27 18:55
**/
@Mapper
public interface OrderMapper extends BaseMapper<Order> {
List<OrderVo> getOrderByDateAndDist(String yyrq);
Integer insertMissedAppoints(List<OrderVo> orderVos);
}

View File

@@ -0,0 +1,16 @@
package com.joju.datamanager.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.joju.datamanager.model.viewmodel.PatientList;
import org.apache.ibatis.annotations.Mapper;
/**
* @description: 历史记录测试业务mapper
* @author: Mr.zs
* @create: 2024-03-28 17:49
**/
@Mapper
public interface PatientListMapper extends BaseMapper<PatientList> {
}

View File

@@ -0,0 +1,15 @@
package com.joju.datamanager.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.joju.datamanager.model.user.User;
import org.apache.ibatis.annotations.Mapper;
/**
* @description: 用户表mapper
* @author: Mr.zs
* @create: 2024-03-07 10:34
**/
@Mapper
public interface UserMapper extends BaseMapper<User> {
}

View File

@@ -0,0 +1,63 @@
package com.joju.datamanager.model.callnumber;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import javax.lang.model.element.NestingKind;
/**
* @description: 排队叫号实体类
* @author: Mr.zs
* @create: 2024-03-27 19:07
**/
@Data
@TableName("call_numbers")
public class CallNumbers {
/**
* 叫号序号排队
*/
private String CallNo;
/**
* 排队号
*/
private String DiagnosticNO;
/**
* 科室名称
*/
private String KESHIMC;
/**
* 医生名称
*/
private String DoctorName;
/**
* 患者名称
*/
private String PatientName;
/**
* 就诊科室
*/
private String RoomNo;
/**
* 排队状态
*/
@TableField(value = "adiagnostic_status")
private String ADiagnosticStatus;
/**
* 当前叫号序号
*/
private String MinCallNo;
}

View File

@@ -0,0 +1,22 @@
package com.joju.datamanager.model.guidance;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
/**
* @description: 身体部位分类
* @author: Mr.zs
* @create: 2024-03-21 18:09
**/
@Data
@TableName("intelligent_guidance_category")
public class IntelligentGuidanceCategory {
private String bodyArea;
private String bodyAreaType;
private String symptom;
private String childId;
}

View File

@@ -0,0 +1,21 @@
package com.joju.datamanager.model.guidance;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
/**
* @description: 智能导诊问题实体类
* @author: Mr.zs
* @create: 2024-03-25 11:03
**/
@Data
@TableName("intelligent_guidance_questions")
public class IntelligentGuidanceQuestions {
private Integer sortId;
private String parentId;
private String question;
private String departmentName;
}

View File

@@ -0,0 +1,23 @@
package com.joju.datamanager.model.medicalprescription;
import lombok.Data;
/**
* @description: 遗嘱开单实体类
* @author: Mr.zs
* @create: 2024-04-02 16:52
**/
@Data
public class MedicalPrescription {
private String cfxh;
private String cardno;
private String hzxm;
private String ksmc;
private String ysmc;
private String fymx;
private String ypsl;
private String ypdj;
private String je;
private String lrrq;
}

View File

@@ -0,0 +1,27 @@
package com.joju.datamanager.model.order;
import lombok.Data;
/**
* @description: 病人预约记录表
* @author: Mr.zs
* @create: 2024-03-27 18:49
**/
@Data
public class Order {
private String order_id;
private String cardno;
private String patientId;
private String ksmc;
private String ksdm;
private String yyrq;
private String yyhx;
private String xh;
private String sjd;
private String status;
private String createTime;
private String createDate;
}

View File

@@ -0,0 +1,21 @@
package com.joju.datamanager.model.order;
import lombok.Data;
/**
* @description: 预约订单连表查询结果集
* @author: Mr.zs
* @create: 2024-04-01 18:06
**/
@Data
public class OrderVo {
private String cardno;
private String patientId;
private String ksmc;
private String yyrq;
private String trueName;
private String idCard;
}

View File

@@ -0,0 +1,46 @@
package com.joju.datamanager.model.triagecalling;
import lombok.Data;
import java.util.PriorityQueue;
/**
* @description: 分诊叫号实体类
* @author: Mr.zs
* @create: 2024-03-29 16:40
**/
@Data
public class TriageCalling {
// private String ID
private String CallNo;
private String DiagnosticNO;
private String CalDiagnosticDaylNo;
private String DiagnosticOrderTime;
private String KESHIMC;
private String KESHIDM;
private String DoctorName;
private String DoctorID;
private String PatientName;
private String CardNo;
private String OrderTime;
private String DiagnosticStatus;
private String DiagnosticType;
private String DiagnosticOrderType;
private String SkipNum;
private String RoomNo;
private String RoomName;
private String ZHENGJIANHM;
private String ZHENGJIANHM_QT;
private String GUAHAOBC;
private String FENYUANDM;
private String PriorityQueue;
private String PriorityQueueType;
private String BloodPressue;
private String Weight;
private String UrgentTeam;
private String CallTime;
private String ItemsInfo;
}

View File

@@ -0,0 +1,14 @@
package com.joju.datamanager.model.triagecalling;
import lombok.Data;
/**
* @description: 分诊叫号结果实体集
* @author: Mr.zs
* @create: 2024-03-29 17:26
**/
@Data
public class TriageCallingResultVo {
private String PatientName;
}

View File

@@ -0,0 +1,29 @@
package com.joju.datamanager.model.user;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @description: 用户实体类
* @author: Mr.zs
* @create: 2024-03-07 10:28
**/
@TableName("wx_user_patient")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private Integer id;
private String openid;
private String medical_card;
private String type;
private String relate;
private String create_time;
private String create_date;
}

View File

@@ -0,0 +1,11 @@
package com.joju.datamanager.model.user;
/**
* @description: 用户结果类
* @author: Mr.zs
* @create: 2024-03-07 10:27
**/
public class UserVo {
}

View File

@@ -0,0 +1,48 @@
package com.joju.datamanager.model.viewmodel;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
/**
* @description: 患者历史就诊记录
* @author: Mr.zs
* @create: 2024-03-27 12:49
**/
@Data
@TableName("v_patient_list")
public class PatientList {
private String patientNo;
private String type;
private String patientName;
private String idcard;
private String gender;
private String birthday;
private String registerDate;
private String OutpatientDate;
private String deptId;
private String deptName;
private String doctorCode;
private String doctorName;
private String mobile;
private String classNo;
private String icdCode;
private String icdName;
}

View File

@@ -0,0 +1,18 @@
package com.joju.datamanager.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.joju.datamanager.model.callnumber.CallNumbers;
import java.util.List;
/**
* @description: 排队叫号业务接口
* @author: Mr.zs
* @create: 2024-03-27 19:01
**/
public interface CallNumbersService extends IService<CallNumbers> {
List<CallNumbers> getCallNumberByIdentity(String identity);
}

View File

@@ -0,0 +1,21 @@
package com.joju.datamanager.service;
import com.joju.datamanager.model.medicalprescription.MedicalPrescription;
import com.joju.datamanager.model.viewmodel.PatientList;
import java.util.List;
import java.util.Map;
/**
* @description: 手术管理接口服务
* @author: Mr.zs
* @create: 2024-03-15 17:45
**/
public interface HisViewSearchService {
public List<Map<String, Object>> getSurgicalView(String hzxm, String blh);
List<PatientList> getHistoricalVisits(String patientName, String idcard);
List<MedicalPrescription> getMedicalPrescription();
}

View File

@@ -0,0 +1,22 @@
package com.joju.datamanager.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.joju.datamanager.model.guidance.IntelligentGuidanceCategory;
import com.joju.datamanager.model.guidance.IntelligentGuidanceQuestions;
import java.util.List;
/**
* @description: 身体部位分类接口
* @author: Mr.zs
* @create: 2024-03-21 18:11
**/
public interface IntelligentGuidanceCategoryService extends IService<IntelligentGuidanceCategory> {
List<IntelligentGuidanceCategory> getSymptomByBodyAreaType(String bodyAreaType);
List<IntelligentGuidanceQuestions> getQuestionsByChildId(String childId);
List<IntelligentGuidanceCategory> getAllBodyArea();
}

View File

@@ -0,0 +1,14 @@
package com.joju.datamanager.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.joju.datamanager.model.medicalprescription.MedicalPrescription;
/**
* @description: 医嘱开单业务接口
* @author: Mr.zs
* @create: 2024-04-02 19:12
**/
public interface MedicalPrescriptionService extends IService<MedicalPrescription> {
}

View File

@@ -0,0 +1,22 @@
package com.joju.datamanager.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.joju.datamanager.model.order.Order;
import com.joju.datamanager.model.order.OrderVo;
import java.util.List;
/**
* @description: 患者预约记录业务接口
* @author: Mr.zs
* @create: 2024-03-27 18:53
**/
public interface OrderService extends IService<Order> {
List<OrderVo> getOrderByDateAndDist(String yyrq);
Integer insertMissedAppoints(List<OrderVo> orderVos);
}

View File

@@ -0,0 +1,14 @@
package com.joju.datamanager.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.joju.datamanager.model.viewmodel.PatientList;
/**
* @description: 历史记录测试业务
* @author: Mr.zs
* @create: 2024-03-28 17:47
**/
public interface PatientListService extends IService<PatientList> {
}

View File

@@ -0,0 +1,17 @@
package com.joju.datamanager.service;
import java.util.List;
/**
* @description: 分诊叫号接口业务
* @author: Mr.zs
* @create: 2024-03-29 16:22
**/
public interface TriageCallingService {
List<String> getTriageCallingByDate();
}

View File

@@ -0,0 +1,17 @@
package com.joju.datamanager.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.joju.datamanager.model.user.User;
import java.util.List;
/**
* @description: 用户业务接口
* @author: Mr.zs
* @create: 2024-03-07 10:31
**/
public interface UserService extends IService<User> {
List<User> getOpenidByUserCard(String card);
}

View File

@@ -0,0 +1,60 @@
package com.joju.datamanager.service.impl;
import cn.hutool.core.convert.Convert;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.joju.datamanager.mapper.CallNumbersMapper;
import com.joju.datamanager.model.callnumber.CallNumbers;
import com.joju.datamanager.service.CallNumbersService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @description: 排队叫号实现类
* @author: Mr.zs
* @create: 2024-03-27 19:02
**/
@Service
@Slf4j
public class CallNumbersServiceImpl extends ServiceImpl<CallNumbersMapper, CallNumbers> implements CallNumbersService {
private static final String DATA_GET_URL = "http://168.168.0.37:5053";
@Override
public List<CallNumbers> getCallNumberByIdentity(String identity) {
List<CallNumbers> callNumbers = null;
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("CardNo", identity);
String result = HttpUtil.get(DATA_GET_URL + "/HospitalCallApi/GetPatientWaitinfo", paramMap);
JSONObject resultJson = JSONUtil.parseObj(result);
if (Convert.toStr(resultJson.get("State")).equals("True")) {//响应成功
Object resData = resultJson.get("Result");
JSONObject ResultJson = JSONUtil.parseObj(resData);
Object ds = ResultJson.get("ds");
JSONArray resDataJsonArray = JSONUtil.parseArray(ds);
log.info("resDataJsonArray is :" + resDataJsonArray);
callNumbers = JSONUtil.toList(resDataJsonArray, CallNumbers.class);
callNumbers = callNumbers.stream().filter(c -> c.getADiagnosticStatus().equals("候诊")).collect(Collectors.toList());
}
return callNumbers;
}
}

View File

@@ -0,0 +1,162 @@
package com.joju.datamanager.service.impl;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.db.handler.BeanListHandler;
import com.joju.datamanager.model.medicalprescription.MedicalPrescription;
import com.joju.datamanager.model.viewmodel.PatientList;
import com.joju.datamanager.service.HisViewSearchService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.sql.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @description: 手术管理服务接口实体类
* @author: Mr.zs
* @create: 2024-03-15 17:45
**/
@Service
@Slf4j
public class HisViewSearchServiceImpl implements HisViewSearchService {
//查看手术视图 HIS_SSXXCX
public List<Map<String, Object>> getSurgicalView(String hzxm, String blh) {
log.info("拼接数据");
// String URL = "jdbc:sqlserver:thin:@//168.168.0.10:1433/THIS4";
String URL = "jdbc:sqlserver://168.168.0.10:1433;databaseName=THIS4";
String USER = "joju";
String PASSWORD = "Joju@123";
List<Map<String, Object>> list = null;
// 1.加载驱动程序
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
// 2.获得数据库链接
log.info("开始链接数据库");
Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
log.info("打印链接状态:" + conn);
// 3.通过数据库的连接操作数据库实现增删改查使用Statement类
// String inHosnum = "811134";
String sql = "select * from HIS_SSXXCX where hzxm ='" + hzxm + "' and blh = '" + blh + "' ";
log.info("打印sql" + sql);
Statement statement = conn.createStatement();
ResultSet rs = statement.executeQuery(sql);
log.info("返回结果是:" + rs);
// 4.处理数据库的返回结果(使用ResultSet类)
while (rs.next()) {
log.info("开始处理数据");
Map<String, Object> map = new HashMap<String, Object>();
// log.info("打印itemType" + rs.getString("ItemType"));
map.put("blh", rs.getString("blh"));
map.put("hzxm", rs.getString("hzxm"));
map.put("ssmc", rs.getString("ssmc"));
map.put("sqrq", rs.getString("sqrq"));
map.put("aprq", rs.getString("aprq"));
map.put("kssj", rs.getString("kssj"));
map.put("jssj", rs.getString("jssj"));
map.put("zt", rs.getString("zt"));
list.add(map);
}
log.info("list is " + list);
// 关闭资源【多谢指正】
rs.close();
statement.close();
conn.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
//查看历史就诊视图 v_patient_list
public List<PatientList> getHistoricalVisits(String patient_name, String idcard) {
log.info("拼接数据");
// String URL = "jdbc:sqlserver:thin:@//168.168.0.10:1433/THIS4";
String URL = "jdbc:sqlserver://168.168.0.10:1433;databaseName=THIS4";
String USER = "joju";
String PASSWORD = "Joju@123";
List<PatientList> patientLists = null;
// 1.加载驱动程序
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
// 2.获得数据库链接
log.info("开始链接数据库");
Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
log.info("打印链接状态:" + conn);
// 3.通过数据库的连接操作数据库实现增删改查使用Statement类
// String inHosnum = "811134";
String sql = "select * from v_patient_list where patient_name ='" + patient_name + "' and idcard = '" + idcard + "' " + "order by register_date DESC";
log.info("打印sql" + sql);
Statement statement = conn.createStatement();
ResultSet rs = statement.executeQuery(sql);
log.info("返回结果是:" + rs);
BeanListHandler<PatientList> patientListBeanListHandler = new BeanListHandler<>(PatientList.class);
patientLists = patientListBeanListHandler.handle(rs);
log.info("list is " + patientLists);
// 关闭资源【多谢指正】
rs.close();
statement.close();
conn.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return patientLists;
}
@Override
public List<MedicalPrescription> getMedicalPrescription() {
log.info("拼接数据");
// String URL = "jdbc:sqlserver:thin:@//168.168.0.10:1433/THIS4";
String URL = "jdbc:sqlserver://168.168.0.10:1433;databaseName=THIS4";
String USER = "joju";
String PASSWORD = "Joju@123";
List<MedicalPrescription> medicalPrescriptions = null;
// 1.加载驱动程序
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
// 2.获得数据库链接
log.info("开始链接数据库");
Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
log.info("打印链接状态:" + conn);
// 3.通过数据库的连接操作数据库实现增删改查使用Statement类
String today = DateUtil.today();
String todayString = today + "00:00:00";
DateTime tomorrow = DateUtil.tomorrow();
String s = DateUtil.formatDate(tomorrow);
String tomorrowString = s + "00:00:00";
// SELECT * FROM HIS_WJFHZCFXX WHERE lrrq BETWEEN '2024-04-02 00:00:00' AND '2024-04-03 00:00:00 '
String sql = " SELECT * FROM HIS_WJFHZCFXX WHERE lrrq BETWEEN '" + todayString + "' AND '" + tomorrowString + "'";
log.info("打印sql" + sql);
Statement statement = conn.createStatement();
ResultSet rs = statement.executeQuery(sql);
log.info("返回结果是:" + rs);
BeanListHandler<MedicalPrescription> medicalPrescriptionBeanListHandler = new BeanListHandler<>(MedicalPrescription.class);
medicalPrescriptions = medicalPrescriptionBeanListHandler.handle(rs);
log.info("list is " + medicalPrescriptions);
// 关闭资源【多谢指正】
rs.close();
statement.close();
conn.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return medicalPrescriptions;
}
}

View File

@@ -0,0 +1,46 @@
package com.joju.datamanager.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.joju.datamanager.mapper.IntelligentGuidanceCategoryMapper;
import com.joju.datamanager.mapper.IntelligentGuidanceQuestionsMapper;
import com.joju.datamanager.model.guidance.IntelligentGuidanceCategory;
import com.joju.datamanager.model.guidance.IntelligentGuidanceQuestions;
import com.joju.datamanager.service.IntelligentGuidanceCategoryService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
* @description: 身体部位分类实现类
* @author: Mr.zs
* @create: 2024-03-21 18:11
**/
@Service
public class IntelligentGuidanceCategoryServiceImpl extends ServiceImpl<IntelligentGuidanceCategoryMapper, IntelligentGuidanceCategory> implements IntelligentGuidanceCategoryService {
@Resource
IntelligentGuidanceCategoryMapper intelligentGuidanceCategoryMapper;
@Resource
IntelligentGuidanceQuestionsMapper intelligentGuidanceQuestionsMapper;
@Override
public List<IntelligentGuidanceCategory> getSymptomByBodyAreaType(String bodyAreaType) {
return intelligentGuidanceCategoryMapper.selectList(new QueryWrapper<IntelligentGuidanceCategory>().eq("body_area_type", bodyAreaType));
}
@Override
public List<IntelligentGuidanceQuestions> getQuestionsByChildId(String childId) {
return intelligentGuidanceQuestionsMapper.selectList(new QueryWrapper<IntelligentGuidanceQuestions>().eq("parent_id", childId));
}
@Override
public List<IntelligentGuidanceCategory> getAllBodyArea() {
return intelligentGuidanceCategoryMapper.selectList(new QueryWrapper<IntelligentGuidanceCategory>().select("DISTINCT body_area,body_area_type"));
}
}

View File

@@ -0,0 +1,16 @@
package com.joju.datamanager.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.joju.datamanager.mapper.MedicalPrescriptionMapper;
import com.joju.datamanager.model.medicalprescription.MedicalPrescription;
import com.joju.datamanager.service.MedicalPrescriptionService;
import org.springframework.stereotype.Service;
/**
* @description: 医嘱开单业务实现类
* @author: Mr.zs
* @create: 2024-04-02 19:13
**/
@Service
public class MedicalPrescriptionServiceImpl extends ServiceImpl<MedicalPrescriptionMapper, MedicalPrescription> implements MedicalPrescriptionService {
}

View File

@@ -0,0 +1,34 @@
package com.joju.datamanager.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.joju.datamanager.mapper.OrderMapper;
import com.joju.datamanager.model.order.Order;
import com.joju.datamanager.model.order.OrderVo;
import com.joju.datamanager.service.OrderService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
* @description: 患者预约记录业务接口实现类
* @author: Mr.zs
* @create: 2024-03-27 18:54
**/
@Service
public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements OrderService {
@Resource
OrderMapper orderMapper;
@Override
public List<OrderVo> getOrderByDateAndDist(String yyrq) {
return orderMapper.getOrderByDateAndDist(yyrq);
}
@Override
public Integer insertMissedAppoints(List<OrderVo> orderVos) {
return orderMapper.insertMissedAppoints(orderVos);
}
}

View File

@@ -0,0 +1,18 @@
package com.joju.datamanager.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.joju.datamanager.mapper.PatientListMapper;
import com.joju.datamanager.model.viewmodel.PatientList;
import com.joju.datamanager.service.PatientListService;
import org.springframework.stereotype.Service;
/**
* @description: 历史记录测试业务
* @author: Mr.zs
* @create: 2024-03-28 17:48
**/
@Service
public class PatientListServiceImpl extends ServiceImpl<PatientListMapper, PatientList> implements PatientListService {
}

View File

@@ -0,0 +1,39 @@
package com.joju.datamanager.service.impl;
import cn.hutool.core.convert.Convert;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.joju.datamanager.service.TriageCallingService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.List;
/**
* @description: 分诊叫号业务实现类
* @author: Mr.zs
* @create: 2024-03-29 16:22
**/
@Service
@Slf4j
public class TriageCallingServiceImpl implements TriageCallingService {
private static final String DATA_GET_URL = "http://168.168.0.37:5053";
@Override
public List<String> getTriageCallingByDate() {
List<String> patients = null;
String result = HttpUtil.get(DATA_GET_URL + "/HospitalCallApi/GetDailyPatientName?a=n");
JSONObject resultJson = JSONUtil.parseObj(result);
if (Convert.toStr(resultJson.get("State")).equals("True")) {//响应成功
Object resData = resultJson.get("Result");//字符串
String str = Convert.toStr(resData);
String[] split = str.split(",");
patients = Arrays.asList(split);
}
return patients;
}
}

View File

@@ -0,0 +1,32 @@
package com.joju.datamanager.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.joju.datamanager.mapper.UserMapper;
import com.joju.datamanager.model.user.User;
import com.joju.datamanager.service.UserService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.stream.Collectors;
/**
* @description: 用户业务实现类
* @author: Mr.zs
* @create: 2024-03-07 10:32
**/
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
@Resource
private UserMapper userMapper;
@Override
public List<User> getOpenidByUserCard(String card) {
List<User> users = userMapper.selectList(new QueryWrapper<User>().eq("medical_card", card).select("openid","relate"));
return users;
}
}

View File

@@ -0,0 +1,51 @@
server:
port: 8083
servlet:
context-path: /dataManager
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/hrs?zeroDateTimeBehavior=convertToNull&serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: fybjy_1234
# password: 123456
druid:
db-type: com.alibaba.druid.pool.DruidDataSource
initial-size: 5
min-idle: 5
max-active: 20
max-wait: 60000
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 300000
validation-query: SELECT 1 FROM DUAL
test-while-idle: true
test-on-borrow: true
test-on-return: true
pool-prepared-statements: true
max-pool-prepared-statement-per-connection-size: 20
# mybatis-plus相关配置
mybatis-plus:
# xml扫描多个目录用逗号或者分号分隔告诉 Mapper 所对应的 XML 文件位置)
mapper-locations: classpath:mapper/*.xml
# 以下配置均有默认值,可以不设置
global-config:
db-config:
#主键类型 AUTO:"数据库ID自增" INPUT:"用户输入ID",ID_WORKER:"全局唯一ID (数字类型唯一ID)", UUID:"全局唯一ID UUID";
id-type: auto
#字段策略 IGNORED:"忽略判断" NOT_NULL:"非 NULL 判断") NOT_EMPTY:"非空判断"
field-strategy: NOT_EMPTY
#数据库类型
db-type: MYSQL
configuration:
# 是否开启自动驼峰命名规则映射:从数据库列名到Java属性驼峰命名的类似映射
map-underscore-to-camel-case: true
# 如果查询结果中包含空值的列,则 MyBatis 在映射的时候,不会映射这个字段
call-setters-on-nulls: true
# 这个配置会将执行的sql打印出来在开发或测试的时候可以用
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

View File

@@ -0,0 +1,133 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
<!-- appender是configuration的子节点是负责写日志的组件。 -->
<!-- ConsoleAppender把日志输出到控制台 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- 默认情况下,每个日志事件都会立即刷新到基础输出流。 这种默认方法更安全因为如果应用程序在没有正确关闭appender的情况下退出则日志事件不会丢失。
但是为了显着增加日志记录吞吐量您可能希望将immediateFlush属性设置为false -->
<!--<immediateFlush>true</immediateFlush>-->
<encoder>
<!-- %37():如果字符没有37个字符长度,则左侧用空格补齐 -->
<!-- %-37():如果字符没有37个字符长度,则右侧用空格补齐 -->
<!-- %15.15():如果记录的线程字符长度小于15(第一个)则用空格在左侧补齐,如果字符长度大于15(第二个),则从开头开始截断多余的字符 -->
<!-- %-40.40():如果记录的logger字符长度小于40(第一个)则用空格在右侧补齐,如果字符长度大于40(第二个),则从开头开始截断多余的字符 -->
<!-- %msg日志打印详情 -->
<!-- %n:换行符 -->
<!-- %highlight():转换说明符以粗体红色显示其级别为ERROR的事件红色为WARNBLUE为INFO以及其他级别的默认颜色。 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight(%-5level) --- [%15.15(%thread)] %cyan(%-40.40(%logger{40}))
: %msg%n
</pattern>
<!-- 控制台也要使用UTF-8不要使用GBK否则会中文乱码 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- info 日志-->
<!-- RollingFileAppender滚动记录文件先将日志记录到指定文件当符合某个条件时将日志记录到其他文件 -->
<!-- 以下的大概意思是1.先按日期存日志日期变了将前一天的日志文件名重命名为XXX%日期%索引新的日志仍然是project_info.log -->
<!-- 2.如果日期没有发生变化但是当前日志的文件大小超过10MB时对当前日志进行分割 重命名-->
<appender name="info_log" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--日志文件路径和名称-->
<File>Elliott/dataManager.log</File>
<!--是否追加到文件末尾,默认为true-->
<append>true</append>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>DENY</onMatch><!-- 如果命中ERROR就禁止这条日志 -->
<onMismatch>ACCEPT</onMismatch><!-- 如果没有命中就使用这条规则 -->
</filter>
<!--有两个与RollingFileAppender交互的重要子组件。 第一个RollingFileAppender子组件即RollingPolicy:负责执行翻转所需的操作。
RollingFileAppender的第二个子组件即TriggeringPolicy:将确定是否以及何时发生翻转。 因此RollingPolicy负责什么和TriggeringPolicy负责什么时候.
作为任何用途RollingFileAppender必须同时设置RollingPolicy和TriggeringPolicy,但是如果其RollingPolicy也实现了TriggeringPolicy接口则只需要显式指定前者。-->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 日志文件的名字会根据fileNamePattern的值每隔一段时间改变一次 -->
<!-- 文件名logs/project_info.2017-12-05.0.log -->
<!-- 注意SizeAndTimeBasedRollingPolicy中 i和d令牌都是强制性的必须存在要不会报错 -->
<fileNamePattern>Elliott/dataManager.%d.%i.log</fileNamePattern>
<!-- 每产生一个日志文件该日志文件的保存期限为30天, ps:maxHistory的单位是根据fileNamePattern中的翻转策略自动推算出来的,例如上面选用了yyyy-MM-dd,则单位为天
如果上面选用了yyyy-MM,则单位为月,另外上面的单位默认为yyyy-MM-dd-->
<maxHistory>30</maxHistory>
<!-- 每个日志文件到10mb的时候开始切分最多保留30天但最大到20GB哪怕没到30天也要删除多余的日志 -->
<totalSizeCap>20GB</totalSizeCap>
<!-- maxFileSize:这是活动文件的大小默认值是10MB测试时可改成5KB看效果 -->
<maxFileSize>10MB</maxFileSize>
</rollingPolicy>
<!--编码器-->
<encoder>
<!-- pattern节点用来设置日志的输入格式 ps:日志文件中没有设置颜色,否则颜色部分会有ESC[0:39em等乱码-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level --- [%15.15(%thread)] %-40.40(%logger{40}) : %msg%n</pattern>
<!-- 记录日志的编码:此处设置字符集 - -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- error 日志-->
<!-- RollingFileAppender滚动记录文件先将日志记录到指定文件当符合某个条件时将日志记录到其他文件 -->
<!-- 以下的大概意思是1.先按日期存日志日期变了将前一天的日志文件名重命名为XXX%日期%索引新的日志仍然是project_error.log -->
<!-- 2.如果日期没有发生变化但是当前日志的文件大小超过10MB时对当前日志进行分割 重命名-->
<appender name="error_log" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--日志文件路径和名称-->
<File>Elliott/dataManager_error.log</File>
<!--是否追加到文件末尾,默认为true-->
<append>true</append>
<!-- ThresholdFilter过滤低于指定阈值的事件。 对于等于或高于阈值的事件ThresholdFilter将在调用其decision方法时响应NEUTRAL。 但是,将拒绝级别低于阈值的事件 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level><!-- 低于ERROR级别的日志debug,info将被拒绝等于或者高于ERROR的级别将相应NEUTRAL -->
</filter>
<!--有两个与RollingFileAppender交互的重要子组件。 第一个RollingFileAppender子组件即RollingPolicy:负责执行翻转所需的操作。
RollingFileAppender的第二个子组件即TriggeringPolicy:将确定是否以及何时发生翻转。 因此RollingPolicy负责什么和TriggeringPolicy负责什么时候.
作为任何用途RollingFileAppender必须同时设置RollingPolicy和TriggeringPolicy,但是如果其RollingPolicy也实现了TriggeringPolicy接口则只需要显式指定前者。-->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 活动文件的名字会根据fileNamePattern的值每隔一段时间改变一次 -->
<!-- 文件名logs/project_error.2017-12-05.0.log -->
<!-- 注意SizeAndTimeBasedRollingPolicy中 i和d令牌都是强制性的必须存在要不会报错 -->
<fileNamePattern>Elliott/dataManager_error.%d.%i.log</fileNamePattern>
<!-- 每产生一个日志文件该日志文件的保存期限为30天, ps:maxHistory的单位是根据fileNamePattern中的翻转策略自动推算出来的,例如上面选用了yyyy-MM-dd,则单位为天
如果上面选用了yyyy-MM,则单位为月,另外上面的单位默认为yyyy-MM-dd-->
<maxHistory>30</maxHistory>
<!-- 每个日志文件到10mb的时候开始切分最多保留30天但最大到20GB哪怕没到30天也要删除多余的日志 -->
<totalSizeCap>20GB</totalSizeCap>
<!-- maxFileSize:这是活动文件的大小默认值是10MB测试时可改成5KB看效果 -->
<maxFileSize>10MB</maxFileSize>
</rollingPolicy>
<!--编码器-->
<encoder>
<!-- pattern节点用来设置日志的输入格式 ps:日志文件中没有设置颜色,否则颜色部分会有ESC[0:39em等乱码-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level --- [%15.15(%thread)] %-40.40(%logger{40}) : %msg%n</pattern>
<!-- 记录日志的编码:此处设置字符集 - -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!--给定记录器的每个启用的日志记录请求都将转发到该记录器中的所有appender以及层次结构中较高的appender不用在意level值
换句话说appender是从记录器层次结构中附加地继承的。
例如如果将控制台appender添加到根记录器则所有启用的日志记录请求将至少在控制台上打印。
如果另外将文件追加器添加到记录器例如L则对L和L'子项启用的记录请求将打印在文件和控制台上。
通过将记录器的additivity标志设置为false可以覆盖此默认行为以便不再添加appender累积-->
<!-- configuration中最多允许一个root别的logger如果没有设置级别则从父级别root继承 -->
<root level="INFO">
<appender-ref ref="STDOUT"/>
</root>
<!-- 指定项目中某个包,当有日志操作行为时的日志记录级别 -->
<!-- 级别依次为【从高到低】FATAL > ERROR > WARN > INFO > DEBUG > TRACE -->
<logger name="com.joju.datamanager" level="INFO">
<appender-ref ref="info_log"/>
<appender-ref ref="error_log"/>
</logger>
<!-- 利用logback输入mybatis的sql日志
注意:如果不加 additivity="false" 则此logger会将输出转发到自身以及祖先的logger中就会出现日志文件中sql重复打印-->
<logger name="com.joju.datamanager.mapper" level="DEBUG" additivity="false">
<appender-ref ref="info_log"/>
<appender-ref ref="error_log"/>
</logger>
<!-- additivity=false代表禁止默认累计的行为即com.atomikos中的日志只会记录到日志文件中不会输出层次级别更高的任何appender-->
<logger name="com.atomikos" level="INFO" additivity="false">
<appender-ref ref="info_log"/>
<appender-ref ref="error_log"/>
</logger>
</configuration>

View File

@@ -0,0 +1,41 @@
<?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">
<!--
namespace绑定了与之对应的接口,值是该接口的全限定名;这个参数有且只有一个
-->
<mapper namespace="com.joju.datamanager.mapper.OrderMapper">
<select id="getOrderByDateAndDist" resultType="com.joju.datamanager.model.order.OrderVo">
SELECT DISTINCT p.true_name,
o.cardno,
o.patient_id,
o.ksmc,
o.yyrq,
p.id_card
FROM `order` o
INNER JOIN patient p ON o.cardno = p.medical_card
WHERE o.`status` = '0'
AND o.yyrq = #{yyrq}
</select>
<insert id="insertMissedAppoints" parameterType="java.util.List">
insert into missed_appointment_record ( cardno
, patient_id
, ksmc
, yyrq
, true_name
, id_card
)
values
<foreach collection="list" item="item" index="index" separator=",">
(#{item.cardno},#{item.patientId},#{item.ksmc},#{item.yyrq},#{item.trueName},#{item.idCard})
</foreach>
</insert>
</mapper>

View File

@@ -0,0 +1,13 @@
package com.joju.datamanager;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class DatamanagerApplicationTests {
@Test
void contextLoads() {
}
}