9 Commits
87 changed files with 706 additions and 2432 deletions
-18
View File
@@ -1,18 +0,0 @@
-------------------------
------------ xj_emergency
-------------------------
CREATE TABLE `large_screen_data`
(
`id` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_persian_ci NOT NULL COMMENT '主键',
`type` varchar(60) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '开关类型(参考entity)',
`center_id` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '应急中心id',
`status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '开启状态(0:未开启 1:开启)',
`name` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '名称(体检机构才有值)',
`value` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '值',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`create_by` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '创建人',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`update_by` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '更新人',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
@@ -38,6 +38,7 @@
<dependency>
<groupId>org.jeecgframework.boot</groupId>
<artifactId>jeecg-boot-base-core</artifactId>
<classifier>xj</classifier>
<scope>provided</scope>
</dependency>
</dependencies>
-1
View File
@@ -20,7 +20,6 @@
<module>font-resources</module>
<module>monitoring-sync</module>
<module>renkang-test</module>
<module>xj-anyan-api</module>
</modules>
<properties>
+1
View File
@@ -33,6 +33,7 @@
<dependency>
<groupId>org.jeecgframework.boot</groupId>
<artifactId>jeecg-boot-base-core</artifactId>
<classifier>xj</classifier>
<scope>provided</scope>
</dependency>
</dependencies>
-46
View File
@@ -1,46 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.renkang</groupId>
<artifactId>functional-modules</artifactId>
<version>2.0.0</version>
</parent>
<artifactId>xj-anyan-api</artifactId>
<description>xj安眼系统API</description>
<version>2.0.0</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
</dependency>
<dependency>
<groupId>org.jeecgframework.boot</groupId>
<artifactId>jeecg-boot-base-core</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
@@ -1,83 +0,0 @@
package com.renkang.anyan.client;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.renkang.anyan.model.dto.HealthRoomDTO;
import com.renkang.anyan.model.dto.HealthSignListParam;
import com.renkang.anyan.model.vo.*;
import java.util.Date;
import java.util.List;
/**
* @Description: AnYanClient xj安眼系统接口调用客户端
* @Author: feng
* @Date: 2025-8-1
* @Version: V1.0
*/
public interface AnYanClient {
/**
* 获取服务访问令牌
* @return
*/
String getAuthToken();
/**
* 刷新口令
*/
void refreshToken();
/**
* 体检人数统计查询
* @param medicalYear 体检年份
* @return
*/
List<MedicalPeopleNumStatisticsVO> examinationStatistics(Integer medicalYear);
/**
* 健康打卡数据统计查询(血压,减重,血糖)
* @param beginDate
* @param endDate
* @return
*/
HealthSignStatVO healthCheckStatistics(Date beginDate, Date endDate);
/**
*健康打卡异常数据详细查询(血压)
* @param healthSignListParam
* @return
*/
IPage<BloodPressureList> bloodPressureList(HealthSignListParam healthSignListParam);
/**
*健康打卡异常数据详细查询(减重)
* @param healthSignListParam
* @return
*/
IPage<WeightPressureList> weightPressureList(HealthSignListParam healthSignListParam);
/**
*健康打卡异常数据详细查询(血糖)
* @param healthSignListParam
* @return
*/
IPage<BloodSugarClockSList> bloodSugarClockSList(HealthSignListParam healthSignListParam);
/**
* 油田医院数据查询
* @return
*/
List<HospitalListVO> hospitalList();
/**
* 健康小屋基础数据查询
* @return
*/
List<HealthRoomVO> healthPlaceHomList();
/**
* 健康小屋详细数据查询
* @param healthRoomDTO
* @return
*/
IPage<HealthPlaceHomDetailsVO> bloodSugarClockSList(HealthRoomDTO healthRoomDTO);
}
@@ -1,150 +0,0 @@
package com.renkang.anyan.client;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.renkang.anyan.config.AnYanProperties;
import com.renkang.anyan.config.RestTemplateUtil;
import com.renkang.anyan.constants.AnYanConstants;
import com.renkang.anyan.enums.AnYanApiEnum;
import com.renkang.anyan.model.dto.AuthParam;
import com.renkang.anyan.model.dto.HealthRoomDTO;
import com.renkang.anyan.model.dto.HealthSignListParam;
import com.renkang.anyan.model.vo.*;
import com.renkang.anyan.utils.PageResultToBeanUtil;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.exception.ExceptionAssertsUtil;
import org.jeecg.util.RedisClientUtil;
import org.jeecg.util.RedisKeyPrefix;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.retry.annotation.EnableRetry;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Description: AnYanClientExecutor xj安眼系统接口调用执行器
* @Author: feng
* @Date: 2025-8-1
* @Version: V1.0
*/
@Service
@EnableRetry
@RequiredArgsConstructor
public class AnYanClientExecutor implements AnYanClient {
private final RedisClientUtil redisClientUtil;
private final AnYanProperties anYanProperties;
@Override
public String getAuthToken() {
String token = redisClientUtil.get(new RedisKeyPrefix(AnYanConstants.AN_YAN_API_TOKEN_PREFIX) ,"token",String.class);
if(StringUtils.isEmpty(token)){
AuthResult authResult = getAuthTokenExecutor();
if(ObjectUtil.isNotEmpty(authResult) && StrUtil.isNotEmpty(authResult.getAccess_token())){
token = authResult.getAccess_token();
int expireSeconds = ObjectUtil.isNotEmpty(authResult.getExpires_in())? authResult.getExpires_in() : 7200;
redisClientUtil.set(new RedisKeyPrefix(expireSeconds,AnYanConstants.AN_YAN_API_TOKEN_PREFIX),"token", token);
}
}
return token;
}
private AuthResult getAuthTokenExecutor(){
AuthParam authParam = new AuthParam();
authParam.setClient_id(anYanProperties.getClientId());
authParam.setClient_secret(anYanProperties.getClientSecret());
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
ResponseEntity<AuthResult> responseEntity = RestTemplateUtil.postExchange(AnYanApiEnum.QUERY_AUTH_TOKEN,headers,authParam,AuthResult.class);
if(HttpStatus.OK.equals(responseEntity.getStatusCode()) && ObjectUtils.isNotEmpty(responseEntity.getBody())){
return responseEntity.getBody();
}else {
ExceptionAssertsUtil.fail("------安眼系统获取token失败------" + responseEntity.getBody());
}
return new AuthResult();
}
@Override
public void refreshToken() {
AuthResult authResult = getAuthTokenExecutor();
if(ObjectUtil.isNotEmpty(authResult) && StrUtil.isNotEmpty(authResult.getAccess_token())){
int expireSeconds = ObjectUtil.isNotEmpty(authResult.getExpires_in())? authResult.getExpires_in() : 7200;
redisClientUtil.set(new RedisKeyPrefix(expireSeconds,AnYanConstants.AN_YAN_API_TOKEN_PREFIX),"token", authResult.getAccess_token());
}
}
private HttpHeaders buildTokenHeader(){
HttpHeaders headers = new HttpHeaders();
headers.add(AnYanConstants.AUTHORIZATION, AnYanConstants.TOKEN_TYPE + getAuthToken());
return headers;
}
@Override
public List<MedicalPeopleNumStatisticsVO> examinationStatistics(Integer medicalYear) {
if(null == medicalYear){ medicalYear = DateUtil.year(new Date()); }
JSONObject param = new JSONObject();
param.put("medicalYear",String.valueOf(medicalYear));
Result<Object> result = RestTemplateUtil.postExchange(AnYanApiEnum.HEALTH_EXAMINATION_STATISTICS, buildTokenHeader(), param);
List<Object> listMaps = (List<Object>) result.getResult();
return listMaps.stream().map(lMap -> BeanUtil.toBean(lMap, MedicalPeopleNumStatisticsVO.class)).collect(Collectors.toList());
}
@Override
public HealthSignStatVO healthCheckStatistics(Date beginDate, Date endDate) {
JSONObject param = new JSONObject();
param.put("inputDateBegin",ObjectUtil.isEmpty(beginDate)? DateUtil.today() : DateUtil.formatDate(beginDate));
param.put("inputDateEnd",ObjectUtil.isEmpty(endDate)? DateUtil.today() : DateUtil.formatDate(endDate));
Result<Object> result = RestTemplateUtil.postExchange(AnYanApiEnum.HEALTH_CHECK_STATISTICS, buildTokenHeader(), param);
return BeanUtil.toBean(result.getResult(),HealthSignStatVO.class);
}
@Override
public IPage<BloodPressureList> bloodPressureList(HealthSignListParam healthSignListParam) {
Result<Object> result = RestTemplateUtil.postExchange(AnYanApiEnum.BLOOD_PRESSURE_LIST, buildTokenHeader(), healthSignListParam);
return new PageResultToBeanUtil<BloodPressureList>().transform(result,BloodPressureList.class);
}
@Override
public IPage<WeightPressureList> weightPressureList(HealthSignListParam healthSignListParam) {
Result<Object> result = RestTemplateUtil.postExchange(AnYanApiEnum.WEIGHT_PRESSURE_LIST, buildTokenHeader(), healthSignListParam);
return new PageResultToBeanUtil<WeightPressureList>().transform(result,WeightPressureList.class);
}
@Override
public IPage<BloodSugarClockSList> bloodSugarClockSList(HealthSignListParam healthSignListParam) {
Result<Object> result = RestTemplateUtil.postExchange(AnYanApiEnum.BLOOD_SUGAR_CLOCKS_LIST, buildTokenHeader(), healthSignListParam);
return new PageResultToBeanUtil<BloodSugarClockSList>().transform(result,BloodSugarClockSList.class);
}
@Override
public List<HospitalListVO> hospitalList() {
Result<Object> result = RestTemplateUtil.postExchange(AnYanApiEnum.HOSPITAL_LIST, buildTokenHeader(), null);
List<Object> listMaps = (List<Object>) result.getResult();
return listMaps.stream().map(lMap -> BeanUtil.toBean(lMap, HospitalListVO.class)).collect(Collectors.toList());
}
@Override
public List<HealthRoomVO> healthPlaceHomList() {
Result<Object> result = RestTemplateUtil.postExchange(AnYanApiEnum.HEALTH_PLACE_ROOM_LIST, buildTokenHeader(),null);
List<Object> listMaps = (List<Object>) result.getResult();
return listMaps.stream().map(lMap -> BeanUtil.toBean(lMap, HealthRoomVO.class)).collect(Collectors.toList());
}
@Override
public IPage<HealthPlaceHomDetailsVO> bloodSugarClockSList(HealthRoomDTO healthRoomDTO) {
Result<Object> result = RestTemplateUtil.postExchange(AnYanApiEnum.HEALTH_PLACE_ROOM_INFO_LIST, buildTokenHeader(), healthRoomDTO);
return new PageResultToBeanUtil<HealthPlaceHomDetailsVO>().transform(result,HealthPlaceHomDetailsVO.class);
}
}
@@ -1,37 +0,0 @@
package com.renkang.anyan.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
/**
* @Description: AnYanProperties
* @Author: feng
* @Date: 2025-8-1
* @Version: V1.0
*/
@Data
@Configuration
@ConfigurationProperties(prefix = "variable.anyan")
public class AnYanProperties {
/**
*服务调用地址
*/
private String host = "";
/**
* clientId
*/
private String clientId = "";
/**
*clientSecret
*/
private String clientSecret = "";
/**
*链接超时时间
*/
private Long timeout = 3000L;
/**
*读取超时时间
*/
private Long readTimeout = 30000L;
}
@@ -1,67 +0,0 @@
package com.renkang.restaurant.config;
import com.renkang.anyan.client.AnYanClient;
import com.renkang.anyan.config.AnYanProperties;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.exception.ExceptionAssertsUtil;
import org.jeecg.common.util.SpringContextUtils;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpStatus;
import org.springframework.http.client.ClientHttpRequestInterceptor;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.client.RestTemplate;
import java.nio.charset.StandardCharsets;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
import java.util.Arrays;
/**
* @Description: AnYanClient xj安眼系统接口调用客户端
* @Author: feng
* @Date: 2025-8-1
* @Version: V1.0
*/
@Slf4j
@Configuration
@RequiredArgsConstructor
public class AnYanRestTemplateConfig {
private final AnYanProperties properties;
@Bean
public RestTemplate anYanTemplate() {
ClientHttpRequestInterceptor authInterceptor = authInterceptor();
return new RestTemplateBuilder()
.setConnectTimeout(Duration.of(properties.getTimeout(), ChronoUnit.MILLIS))
.setReadTimeout(Duration.of(properties.getReadTimeout(), ChronoUnit.MILLIS))
.additionalMessageConverters(new StringHttpMessageConverter(StandardCharsets.UTF_8), new MappingJackson2HttpMessageConverter())
.additionalInterceptors(authInterceptor)
.build();
}
/**
* 自定义拦截器处理接口鉴权失败, 配合spring retry使用从而避免因token失效导致的接口调用失败
*/
public ClientHttpRequestInterceptor authInterceptor(){
return (httpRequest, bytes, clientHttpRequestExecution) -> {
ClientHttpResponse execute;
try {
execute = clientHttpRequestExecution.execute(httpRequest, bytes);
HttpStatus httpStatus =execute.getStatusCode();
if (Arrays.asList(HttpStatus.UNAUTHORIZED,HttpStatus.FORBIDDEN).contains(httpStatus)) {
SpringContextUtils.getBean("anYanClientExecutor", AnYanClient.class).refreshToken();
}
} catch (Exception e) {
log.error("---------安眼平台API调用异常-------e{}",e.getMessage(),e);
ExceptionAssertsUtil.fail("安眼平台API调用失败");
throw e;
}
return execute;
};
}
}
@@ -1,79 +0,0 @@
package com.renkang.anyan.config;
import com.renkang.anyan.enums.AnYanApiEnum;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.util.SpringContextUtils;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;
import java.util.Objects;
/**
* @Description: RestTemplate 工具类 (更多请求方式自行封装)
* @Author: feng
* @Date: 2025-8-1
* @Version: V1.0
*/
@Slf4j
public class RestTemplateUtil {
private static RestTemplate restTemplate;
private static AnYanProperties properties;
public static RestTemplate getRestTemplate() {
if (Objects.isNull(restTemplate)) {
restTemplate = SpringContextUtils.getBean("anYanTemplate", RestTemplate.class);
}
return restTemplate;
}
public static AnYanProperties getProperties() {
if (Objects.isNull(properties)) {
properties = SpringContextUtils.getBean(AnYanProperties.class);
}
return properties;
}
/**
* 通用调用方法
* @param api 接口
* @param requestBody 参数
* @return ResponseEntity
*/
public static <T> ResponseEntity<T> postExchange(AnYanApiEnum api, HttpHeaders headers ,Object requestBody,Class<T> responseType) {
String url = getProperties().getHost() + api.getMethodPath() + api.getMethodParam();
HttpEntity<Object> requestEntity = new HttpEntity<>(requestBody);
return getRestTemplate().exchange(url, api.getHttpMethod(), requestEntity, responseType);
}
/**
* 通用调用方法
* @param api 请求接口
* @param headers 请求头
* @param requestBody body参数
* @return Result对象
*/
public static Result<Object> postExchange(AnYanApiEnum api, HttpHeaders headers,Object requestBody) {
String url = getProperties().getHost() + api.getMethodPath() +api.getMethodParam();
HttpEntity<Object> requestEntity = new HttpEntity<>(requestBody,headers);
return responseHandler(getRestTemplate().exchange(url, api.getHttpMethod(), requestEntity, Result.class));
}
/**
* ResponseEntity 转 Result
* @param entity
* @return
*/
private static <T extends Result<Object>> Result<Object> responseHandler(ResponseEntity<T> entity) {
if(HttpStatus.OK.equals(entity.getStatusCode()) && ObjectUtils.isNotEmpty(entity.getBody())){
return entity.getBody();
}else{
return Result.error("天眼系统API调用失败");
}
}
}
@@ -1,24 +0,0 @@
package com.renkang.anyan.constants;
import org.jeecg.util.RedisKeyPrefix;
/**
* @Description: AnYanConstants 常量
* @Author: feng
* @Date: 2025-8-01
* @Version: V1.0
*/
public interface AnYanConstants {
/**
* token传递请求头参数
*/
String AUTHORIZATION = "authorization";
/**
* token类型
*/
String TOKEN_TYPE = "bearer ";
/**
* 缓存调用安眼系统接口鉴权token缓存key
*/
String AN_YAN_API_TOKEN_PREFIX = "exterior:anyan:api:";
}
@@ -1,86 +0,0 @@
package com.renkang.anyan.enums;
import lombok.Getter;
import org.springframework.http.HttpMethod;
/**
* @Description: AnYanApiEnum xj安眼系统接口枚举类
* @Author: feng
* @Date: 2025-8-1
* @Version: V1.0
*/
@Getter
public enum AnYanApiEnum {
/**
* 1.获取token接口
*/
QUERY_AUTH_TOKEN("/oauth/oauth/token","", HttpMethod.POST),
/**
* 2.体检人数统计查询
*/
HEALTH_EXAMINATION_STATISTICS("/aygc-znhpt-sys/0/aystatistics/peopleHealthExaminationStatistics","", HttpMethod.POST),
/**
*3.健康打卡数据统计查询(血压,减重,血糖)
*/
HEALTH_CHECK_STATISTICS("/aygc-znhpt-sys/0/aystatistics/healthCheckStatistics","", HttpMethod.POST),
/**
*4.健康打卡异常数据详细查询(血压)
*/
BLOOD_PRESSURE_LIST("/aygc-znhpt-sys/0/aystatistics/bloodPressureList","", HttpMethod.POST),
/**
*5.健康打卡异常数据详细查询(减重)
*/
WEIGHT_PRESSURE_LIST("/aygc-znhpt-sys/0/aystatistics/weightPressureList","", HttpMethod.POST),
/**
*6.健康打卡异常数据详细查询(血糖)
*/
BLOOD_SUGAR_CLOCKS_LIST("/aygc-znhpt-sys/0/aystatistics/bloodSugarClockSList","", HttpMethod.POST),
/**
*7.体检异常数据统计查询(暂定)
*/
MEDICAL_ABNORMAL_STATISTICS("","", HttpMethod.POST),
/**
*8.体检异常数据清单(暂定)
*/
MEDICAL_ABNORMAL_LIST("","", HttpMethod.POST),
/**
*9.油田医院数据查询
*/
HOSPITAL_LIST("/aygc-znhpt-sys/0/aystatistics/HospitalList","", HttpMethod.POST),
/**
*10.健康小屋基础数据查询
*/
HEALTH_PLACE_ROOM_LIST("/aygc-znhpt-sys/0/aystatistics/HealthPlaceHomList","", HttpMethod.POST),
/**
*11.健康小屋详细数据查询
*/
HEALTH_PLACE_ROOM_INFO_LIST("/aygc-znhpt-sys/0/aystatistics/initEmpHealthRoomCheckinInfoPages","", HttpMethod.POST);
/**
* 接口路径
*/
private String methodPath;
/**
* 接口的路径参数
*/
private String methodParam;
/**
* 接口请求方式
*/
private HttpMethod httpMethod;
AnYanApiEnum(String methodPath, String methodParam, HttpMethod httpMethod) {
this.methodPath = methodPath;
this.methodParam = methodParam;
this.httpMethod = httpMethod;
}
}
@@ -1,19 +0,0 @@
package com.renkang.anyan.model.dto;
import lombok.Data;
@Data
public class AuthParam {
/**
*grant_type
*/
private String grant_type = "client_credentials";
/**
* client_id
*/
private String client_id;
/**
* client_secret
*/
private String client_secret;
}
@@ -1,74 +0,0 @@
package com.renkang.anyan.model.dto;
import cn.hutool.core.date.DateUtil;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.jeecg.common.aspect.annotation.Dict;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotNull;
import java.util.Date;
@Data
public class HealthRoomDTO {
/**
* 健康小屋ID
*/
@Schema(title = "健康小屋ID")
@NotNull
private String healthRoomId;
/**
* 检查类型 11:BMI/21:收缩压/22:舒张压/31:血糖/41:低密度脂蛋白/42:总胆固醇/43:甘油三酯/51:尿酸/61:同型半胱氨酸 等等,缺失的可以继续加
*/
@Schema(title = "检查类型 11:BMI/21:收缩压/22:舒张压/31:血糖/41:低密度脂蛋白/42:总胆固醇/43:甘油三酯/51:尿酸/61:同型半胱氨酸 等等,缺失的可以继续加")
@Dict(dicCode = "xj_check_type")
private String checkType;
/**
* 单位名称
*/
@Schema(title = "单位名称")
private String departName;
/**
* 员工姓名
*/
@Schema(title = "员工姓名")
private String name;
/**
* 检查日期起期 参数为空时,默认为今年第一天,如:2025-01-01
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd")
@Schema(title = "检查日期起期 参数为空时,默认为今年第一天,如:2025-01-01")
private Date checkInDateBegin;
/**
* 检查日期止期 参数为空时,默认为今天
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd")
@Schema(title = "检查日期止期 参数为空时,默认为今天")
private Date checkInDateEnd;
/**
* 是否成功控降 是否成功空降,1:是/0.否
*/
@Schema(title = "是否成功控降 是否成功空降,1:是/0.否")
private String successFlag;
/**
* 页码 从1开始
*/
@Schema(title = "页码 从1开始")
private Integer pageNo;
/**
* 每页数量
*/
@Schema(title = "每页数量")
private Integer pageSize;
public HealthRoomDTO() {
Date date = new Date();
this.checkInDateBegin = DateUtil.beginOfYear(date);
this.checkInDateEnd = DateUtil.endOfDay(date);
this.pageNo = 1;
this.pageSize = 10;
}
}
@@ -1,49 +0,0 @@
package com.renkang.anyan.model.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
/**
* 健康打卡异常数据详情查询参数
*/
@Data
public class HealthSignListParam {
/**
*单位
*/
@Schema(title = "单位")
private String departName;
/**
* 员工姓名
*/
@Schema(title = "员工姓名")
private String name;
/**
* 开始时间
*/
@Schema(title = "开始时间")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date inputDateBegin;
/**
*结束时间
*/
@Schema(title = "结束时间")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date inputDateEnd;
/**
* pageNo
*/
@Schema(title = "pageNo")
private Integer pageNo = 1;
/**
* pageSize
*/
@Schema(title = "pageSize")
private Integer pageSize = 10;
}
@@ -1,23 +0,0 @@
package com.renkang.anyan.model.vo;
import lombok.Data;
@Data
public class AuthResult {
/**
*范围
*/
private String scope;
/**
*有效期
*/
private Integer expires_in;
/**
* token_type
*/
private String token_type;
/**
* token
*/
private String access_token;
}
@@ -1,36 +0,0 @@
package com.renkang.anyan.model.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Data
@Schema(title="健康打卡血压异常数据详细", description="健康打卡血压异常数据详细")
public class BloodPressureList extends XjUserBaseInfo {
/**
*收缩压
*/
@Schema(title = "收缩压")
private String sbp;
/**
*收缩压是否异常
*/
@Schema(title = "收缩压是否异常")
private String sbpFlag;
/**
*舒张压
*/
@Schema(title = "舒张压")
private String dbp;
/**
*舒张压是否异常
*/
@Schema(title = "舒张压是否异常")
private String dbpFlag;
/**
*填报时间 YYYY-MM-DD
*/
@Schema(title = "填报时间")
private String inputDate;
}
@@ -1,26 +0,0 @@
package com.renkang.anyan.model.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Data
@Schema(title="健康打卡血糖异常数据详细", description="健康打卡血糖异常数据详细")
public class BloodSugarClockSList extends XjUserBaseInfo {
/**
*血糖值
*/
@Schema(title = "血糖值")
private String bsVal;
/**
*血糖是否异常
*/
@Schema(title = "血糖是否异常")
private String bsFlag;
/**
*填报时间 YYYY-MM-DD
*/
@Schema(title = "填报时间")
private String inputDate;
}
@@ -1,56 +0,0 @@
package com.renkang.anyan.model.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.jeecg.common.aspect.annotation.Dict;
@Data
@Schema(title="健康小屋数据详情列表", description="健康小屋数据详情列表")
public class HealthPlaceHomDetailsVO {
/**
* 单位
*/
@Schema(title = "单位")
private String departName;
/**
* 姓名
*/
@Schema(title = "姓名")
private String name;
/**
* 检查日期
*/
@Schema(title = "检查日期")
private String checkInDate;
/**
* 检查类型 11:BMI/21:收缩压/22:舒张压/31:血糖/41:低密度脂蛋白/42:总胆固醇/43:甘油三酯/51:尿酸/61:同型半胱氨酸 等等,缺失的可以继续加
*/
@Schema(title = "检查类型 11:BMI/21:收缩压/22:舒张压/31:血糖/41:低密度脂蛋白/42:总胆固醇/43:甘油三酯/51:尿酸/61:同型半胱氨酸 等等,缺失的可以继续加")
@Dict(dicCode = "xj_check_type")
private String checkType;
/**
* 去年体检值 前一年的体检值(初始值)
*/
@Schema(title = "去年体检值 前一年的体检值(初始值)")
private String lastVal;
/**
* 控降目标 一人一档(控降目标值)
*/
@Schema(title = "控降目标 一人一档(控降目标值")
private String goalVal;
/**
* 目前测量值 目前控降数值(可和健康打卡最新值一致)
*/
@Schema(title = "目前测量值 目前控降数值(可和健康打卡最新值一致)")
private String currentVal;
/**
* 控降差值 和控降目标对比
*/
@Schema(title = "控降差值 和控降目标对比")
private String compareVal;
/**
* 是否成功空降,1:是/0.否
*/
@Schema(title = "是否成功空降,1:是/0.否")
private String successFlag;
}
@@ -1,39 +0,0 @@
package com.renkang.anyan.model.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
@Schema(title="健康小屋数据VO", description="健康小屋数据VO")
public class HealthPlaceHomListVO {
/**
* id
*/
private String id;
/**
* 单位
*/
@Schema(title = "单位")
private String departName;
/**
* 地点
*/
@Schema(title = "地点")
private String address;
/**
* 经度
*/
@Schema(title = "经度")
private String lon;
/**
* 纬度
*/
@Schema(title = "纬度")
private String lat;
/**
* 建设时间 YYYY-MM-DD
*/
@Schema(title = "建设时间(YYYY-MM-DD)")
private String buildDate;
}
@@ -1,38 +0,0 @@
package com.renkang.anyan.model.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
@Schema(title="新疆健康小屋对象", description="新疆健康小屋对象")
public class HealthRoomVO {
/**
* id
*/
private String id;
/**
* 地址
*/
@Schema(title = "地址")
private String address;
/**
* 单位
*/
@Schema(title = "单位")
private String departName;
/**
* 经度
*/
@Schema(title = "经度")
private String lon;
/**
* 纬度
*/
@Schema(title = "纬度")
private String lat;
/**
* 建设时间 yyyy-MM-dd
*/
@Schema(title = "建设时间")
private String buildDate;
}
@@ -1,40 +0,0 @@
package com.renkang.anyan.model.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
@Schema(title="打卡人数统计", description="打卡人数统计")
public class HealthSignStatVO {
/**
* 减重打卡总人数
*/
@Schema(title = "减重打卡总人数")
private String weigtTotalCount;
/**
* 减重异常人数
*/
@Schema(title = "减重异常人数")
private String weigtAbCount;
/**
* 血压打卡总人数
*/
@Schema(title = "血压打卡总人数")
private String bpTotalCount;
/**
* 血压异常人数
*/
@Schema(title = "血压异常人数")
private String bpAbCount;
/**
* 血糖打卡总人数
*/
@Schema(title = "血糖打卡总人数")
private String bsTotalCount;
/**
* 血糖异常人数
*/
@Schema(title = "血糖异常人数")
private String bsAbCount;
}
@@ -1,40 +0,0 @@
package com.renkang.anyan.model.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
@Schema(title="油田医院VO", description="油田医院VO")
public class HospitalListVO {
/**
* 医院名称
*/
@Schema(title = "医院名称")
private String hospitalName;
/**
* 别名
*/
@Schema(title = "别名")
private String alias;
/**
* 地点
*/
@Schema(title = "地点")
private String address;
/**
* 经度
*/
@Schema(title = "经度")
private String lon;
/**
* 纬度
*/
@Schema(title = "纬度")
private String lat;
/**
* 签约时间 YYYY-MM-DD
*/
@Schema(title = "签约时间(YYYY-MM-DD)")
private String contractDate;
}
@@ -1,23 +0,0 @@
package com.renkang.anyan.model.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
public class MedicalPeopleNumStatisticsVO {
/**
* 医院名称
*/
@Schema(title = "医院名称")
private String hospitalName;
/**
* 别名 为了显示或别的目的,医院名称过长导致不好显示,最好增加短的别名,如果没有则和hospitalName保持一致
*/
@Schema(title = "别名")
private String alias;
/**
* 已参检人数
*/
@Schema(title = "已参检人数")
private Integer checkedCount;
}
@@ -1,41 +0,0 @@
package com.renkang.anyan.model.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Data
@Schema(title="健康打卡体重异常数据详细", description="健康打卡体重异常数据详细")
public class WeightPressureList extends XjUserBaseInfo {
/**
*腰围(CM
*/
@Schema(title = "腰围(CM")
private String waist;
/**
*身高(M
*/
@Schema(title = "身高(M")
private String height;
/**
*体重(KG
*/
@Schema(title = "体重(KG")
private String weight;
/**
*BMI
*/
@Schema(title = "BMI")
private String bmi;
/**
*BMI是否异常(1:是/0:否)
*/
@Schema(title = "BMI是否异常(1:是/0:否)")
private String bmiFlag;
/**
*填报时间 YYYY-MM-DD
*/
@Schema(title = "填报时间")
private String inputDate;
}
@@ -1,36 +0,0 @@
package com.renkang.anyan.model.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* 员工基本信息
*/
@Data
public class XjUserBaseInfo {
/**
*单位
*/
@Schema(title = "单位")
private String departName;
/**
*姓名
*/
@Schema(title = "姓名")
private String name;
/**
*身份证号
*/
@Schema(title = "身份证号")
private String idCard;
/**
*年龄
*/
@Schema(title = "年龄")
private String age;
/**
*性别
*/
@Schema(title = "性别")
private String sex;
}
@@ -1,25 +0,0 @@
package com.renkang.anyan.utils;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.jeecg.common.api.vo.Result;
import java.util.stream.Collectors;
/**
* IPage 类型装换
* @param <T>
*/
public class PageResultToBeanUtil<T> {
public IPage<T> transform(Result<Object> result,Class<T> tClass) {
IPage<?> page = BeanUtil.toBean(result.getResult(), Page.class);
IPage<T> iPage = new Page<>();
BeanUtil.copyProperties(page,iPage,"records");
if(page.getTotal() > 0){
iPage.setRecords(page.getRecords().stream().map(o ->BeanUtil.toBean(o, tClass)).collect(Collectors.toList()));
}
return iPage;
}
}
@@ -13,6 +13,7 @@
<dependency>
<groupId>org.jeecgframework.boot</groupId>
<artifactId>jeecg-boot-base-core</artifactId>
<classifier>xj</classifier>
</dependency>
<!-- feign -->
@@ -13,18 +13,22 @@
<dependency>
<groupId>com.renkang</groupId>
<artifactId>health-consultation-api</artifactId>
<classifier>xj</classifier>
</dependency>
<dependency>
<groupId>com.renkang</groupId>
<artifactId>health-emergency-api</artifactId>
<classifier>xj</classifier>
</dependency>
<dependency>
<groupId>com.renkang</groupId>
<artifactId>health-im-api</artifactId>
<classifier>xj</classifier>
</dependency>
<dependency>
<groupId>org.jeecgframework.boot</groupId>
<artifactId>jeecg-system-cloud-api</artifactId>
<classifier>xj</classifier>
</dependency>
<dependency>
@@ -50,4 +54,21 @@
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>biz-obf</id>
<build>
<plugins>
<plugin>
<groupId>com.github.wvengen</groupId>
<artifactId>proguard-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
@@ -0,0 +1,38 @@
-keepattributes *Annotation*, Signature, InnerClasses, EnclosingMethod, Exceptions, MethodParameters
-keep @org.springframework.stereotype.Service class *
-keep @org.springframework.web.bind.annotation.RestController class *
-keep @org.springframework.context.annotation.Configuration class * { *; }
-keep @org.springframework.stereotype.Component class *
-keep class lombok.** { *; }
-keepclassmembers enum * { # 保留枚举结构
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keepclassmembers class * implements java.io.Serializable { *; }
-keepclassmembers class * {
@org.springframework.web.bind.annotation.*Mapping *;
}
-keepclassmembers class * {
private static synthetic java.lang.Object $deserializeLambda$(java.lang.invoke.SerializedLambda);
}
-keepclassmembers class * {
@lombok.Getter *;
@lombok.Setter *;
}
# MyBatis 专用保留规则
-keep interface com.renkang.**.mapper.** { *; }
-keep class com.renkang.**.entity.** { *; }
-keep class com.renkang.**.bean.** { *; }
-keep class com.renkang.**.model.** { *; }
-keep class com.renkang.**.vo.** { *; }
-keepparameternames
# 关闭优化和压缩(避免框架兼容性问题)
-dontshrink # 不删除未使用代码
-dontoptimize # 不优化字节码[5,6](@ref)
-keepdirectories
-dontusemixedcaseclassnames
-adaptclassstrings
# 混淆选项
-useuniqueclassmembernames # 成员名称唯一化
-ignorewarnings
@@ -4,11 +4,11 @@ import com.renkang.consultation.api.storge.redis.ConHealthInfoRedisTunnel;
import com.renkang.consultation.entity.ConHealthInfo;
import com.renkang.consultation.mapper.ConHealthInfoMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Component;
import java.util.List;
@Repository
@Component
public class ComposeConHealthInfo {
@@ -5,9 +5,9 @@ import com.renkang.consultation.entity.ConKnowledge;
import com.renkang.consultation.mapper.ConKnowledgeMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Component;
@Repository
@Component
public class ComposeConKnowledge {
@@ -4,11 +4,11 @@ import com.renkang.consultation.api.storge.db.ConKnowledgeCategoryDbTunnel;
import com.renkang.consultation.api.storge.redis.ConKnowledgeCategoryRedisTunnel;
import com.renkang.consultation.entity.ConKnowledgeCategory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Component;
import java.util.List;
@Repository
@Component
public class ComposeConKnowledgeCategory {
@Autowired
@@ -5,11 +5,11 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.renkang.consultation.entity.ConKnowledgeCategory;
import com.renkang.consultation.mapper.ConKnowledgeCategoryMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Component;
import java.util.List;
@Repository
@Component
public class ConKnowledgeCategoryDbTunnel {
@@ -5,9 +5,9 @@ import com.renkang.consultation.entity.ConDoctorFollow;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Component;
@Repository
@Component
public class ConDoctorFollowReidsTunnel {
@Autowired
@@ -4,11 +4,11 @@ import com.renkang.consultation.api.RedisConstants;
import com.renkang.consultation.entity.ConHealthInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Component;
import java.util.List;
@Repository
@Component
public class ConHealthInfoRedisTunnel {
@Autowired
@@ -5,9 +5,9 @@ import com.renkang.consultation.entity.ConHospitalFollow;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Component;
@Repository
@Component
public class ConHospitalFollowReidsTunnel {
@Autowired
@@ -4,11 +4,11 @@ import com.renkang.consultation.api.RedisConstants;
import com.renkang.consultation.entity.ConKnowledgeCategory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Component;
import java.util.List;
@Repository
@Component
public class ConKnowledgeCategoryRedisTunnel {
@@ -1,15 +1,12 @@
FROM anapsix/alpine-java:8_server-jre_unlimited
MAINTAINER xxx@163.com
ENV PROFILE_NAME dev
ENV SERVER_PORT 7010
ENV NACOS_SERVER_ADDR nacos250:8848
ENV NACOS_USERNAME xjuser
ENV NACOS_PASSWORD Aa135790!123
ENV NACOS_NAMESPACE 3af98a54-4a44-4576-8e28-bf5781c0dccf
ENV NACOS_GROUP dev
ENV PROFILE_NAME=dev \
SERVER_PORT=7010 \
NACOS_SERVER_ADDR=nacos250:8848 \
NACOS_USERNAME=xjuser \
NACOS_PASSWORD=Aa135790!123 \
NACOS_NAMESPACE=3af98a54-4a44-4576-8e28-bf5781c0dccf \
NACOS_GROUP=dev
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
@@ -20,6 +17,6 @@ WORKDIR /health-consultation-start
EXPOSE 7010
ADD ./target/health-consultation-start.jar ./
COPY ./target/health-consultation-start-xj.jar ./
CMD sleep 1;java -Dfile.encoding=utf-8 -Djava.security.egd=file:/dev/./urandom -jar health-consultation-start.jar
CMD sleep 1;java -Dfile.encoding=utf-8 -Djava.security.egd=file:/dev/./urandom -jar health-consultation-start-xj.jar
@@ -9,6 +9,11 @@
<modelVersion>4.0.0</modelVersion>
<artifactId>health-consultation-start</artifactId>
<properties>
<maven.install.skip>true</maven.install.skip>
</properties>
<dependencies>
<!--微服务启动 starter-->
<dependency>
@@ -24,6 +29,7 @@
<dependency>
<groupId>com.renkang</groupId>
<artifactId>health-consultation-biz</artifactId>
<classifier>${biz-classifier}</classifier>
</dependency>
</dependencies>
-4
View File
@@ -13,10 +13,6 @@
<version>2.0.0</version>
<packaging>pom</packaging>
<properties>
<maven.install.skip>true</maven.install.skip>
</properties>
<!--项目子模块-->
<modules>
<module>health-consultation-api</module>
@@ -13,6 +13,7 @@
<dependency>
<groupId>org.jeecgframework.boot</groupId>
<artifactId>jeecg-boot-base-core</artifactId>
<classifier>xj</classifier>
</dependency>
<!-- feign -->
@@ -3,20 +3,15 @@ package com.renkang.emergency.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
@Data
@TableName("emergency_health_room")
@Schema(title="新疆健康小屋", description="新疆健康小屋表")
public class EmergencyHealthRoom {
/**
@@ -1,101 +0,0 @@
package com.renkang.emergency.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.renkang.emergency.entity.dto.LargeScreenDataValueDTO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
@Data
@TableName("large_screen_data")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@Schema(title = "large_screen_data对象", description = "large_screen_data")
public class LargeScreenData implements Serializable {
/**
* 主键
*/
@TableId(type = IdType.ASSIGN_ID)
@Schema(title = "主键")
private String id;
private String centerId;
/**
* 开关类型
* 最新呼入电话gross 最新受理电话alerdyreceive 突发重大伤病应急jqqz 重大伤病应急就医dbjy 累计受理totaldeal 累计处置totalacceptance
*
* 120oneTwenty 应急就医hospital
*
* 体检人数medical
*
* 减重今日打卡weightLossCountDay 减重本月打卡weightLossCountMonth 减重今日异常weightLossAbnormalCountDay 减重本月异常weightLossAbnormalCountMonth
* 血糖今日打卡bloodSugarCountDay 血糖本月打卡bloodSugarCountMonth 血糖今日异常bloodSugarAbnormalCountDay 血糖本月异常bloodSugarAbnormalCountMonth
* 血压今日打卡bloodPressureCountDay 血压本月打卡bloodPressureCountMonth 血压今日异常bloodPressureAbnormalCountDay 血压本月异常bloodPressureAbnormalCountMonth
*
* 体检总totalCount 心血管异常cardiovaAbCount 脑血管异常cerebrovAbCount 冠状CT异常cctaAbCount
*/
@Schema(title = "开关类型")
private String type;
/**
* 开启状态(0:未开启 1:开启)
*/
@Schema(title = "开启状态(0:未开启 1:开启)")
private String status;
@Schema(title = "名称(体检机构才有值)")
private String name;
@Schema(title = "")
private String value;
/**
* 创建人
*/
@Schema(title = "创建人")
private String createBy;
/**
* 创建时间
*/
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd")
@Schema(title = "创建时间")
private Date createTime;
/**
* 更新人
*/
@Schema(title = "更新人")
private String updateBy;
/**
* 更新时间
*/
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern = "yyyy-MM-dd")
@Schema(title = "更新时间")
private Date updateTime;
public LargeScreenData() {}
public LargeScreenData(LargeScreenDataValueDTO dto){
this.id = dto.getId();
this.centerId = dto.getCenterId();
this.type = dto.getType();
this.status = dto.getStatus();
this.name = dto.getName();
this.value = dto.getValue();
}
}
@@ -1,13 +0,0 @@
package com.renkang.emergency.entity.dto;
import lombok.Data;
@Data
public class LargeScreenDataValueDTO {
private String id;
private String centerId;
private String value;
private String name;
private String type;
private String status;
}
@@ -1,157 +0,0 @@
package com.renkang.emergency.entity.vo;
import lombok.Data;
@Data
public class DataDetailVO {
private String centerId;
private String module;
/**
* 服务详情
*/
/**
* 应急就医
*/
private String emergencyNum;
private String emergencyNumStatus;
/**
* 重大伤病
*/
private String illNum;
private String illNumStatus;
/**
* 受理电话
*/
private String latestAcceptCall;
private String latestAcceptCallStatus;
/**
* 呼入电话
*/
private String latestCall;
private String latestCallStatus;
/**
* 累计受理
*/
private String totalAccept;
private String totalAcceptStatus;
/**
* 累计处置
*/
private String totalDisposal;
private String totalDisposalStatus;
/**
* 主诉分类
*/
/**
* 应急就医
*/
private String emergencyCount;
private String emergencyCountStatus;
/**
* 120
*/
private String hospitalCount;
private String hospitalCountStatus;
/**
* 健康打卡人数
*/
/**
* 减重今日打卡人数
*/
private String weightLossCountDay;
private String weightLossCountDayStatus;
/**
* 减重本月打卡人数
*/
private String weightLossCountMonth;
private String weightLossCountMonthStatus;
/**
* 减重今日异常人数
*/
private String weightLossAbnormalCountDay;
private String weightLossAbnormalCountDayStatus;
/**
* 减重本月异常人数
*/
private String weightLossAbnormalCountMonth;
private String weightLossAbnormalCountMonthStatus;
/**
* 血糖今日打卡人数
*/
private String bloodSugarCountDay;
private String bloodSugarCountDayStatus;
/**
* 血糖本月打卡人数
*/
private String bloodSugarCountMonth;
private String bloodSugarCountMonthStatus;
/**
* 血糖今日异常人数
*/
private String bloodSugarAbnormalCountDay;
private String bloodSugarAbnormalCountDayStatus;
/**
* 血糖本月异常人数
*/
private String bloodSugarAbnormalCountMonth;
private String bloodSugarAbnormalCountMonthStatus;
/**
* 血压今日打卡人数
*/
private String bloodPressureCountDay;
private String bloodPressureCountDayStatus;
/**
* 血压本月打卡人数
*/
private String bloodPressureCountMonth;
private String bloodPressureCountMonthStatus;
/**
* 血压今日异常人数
*/
private String bloodPressureAbnormalCountDay;
private String bloodPressureAbnormalCountDayStatus;
/**
* 血压本月异常人数
*/
private String bloodPressureAbnormalCountMonth;
private String bloodPressureAbnormalCountMonthStatus;
/**
* 体检数据
*/
/**
* 体检总人数
*/
private String totalCount;
private String totalCountStatus;
/**
* 心血管异常人数
*/
private String cardiovaAbCount;
private String cardiovaAbCountStatus;
/**
* 脑血管异常人数
*/
private String cerebrovAbCount;
private String cerebrovAbCountStatus;
/**
* 冠状ct异常人数
*/
private String cctaAbCount;
private String cctaAbCountStatus;
}
@@ -1,22 +0,0 @@
package com.renkang.emergency.entity.vo;
import com.renkang.emergency.entity.LargeScreenData;
import lombok.Data;
@Data
public class MedicalDataVO {
private String id;
private String centerId;
private String name;
private String status;
private String count;
public MedicalDataVO() {}
public MedicalDataVO(LargeScreenData data) {
id = data.getId();
centerId = data.getCenterId();
name = data.getName();
count = data.getValue();
status = data.getStatus();
}
}
+22 -4
View File
@@ -9,6 +9,7 @@
<modelVersion>4.0.0</modelVersion>
<artifactId>health-emergency-biz</artifactId>
<dependencies>
<!--定时任务-->
<dependency>
@@ -18,20 +19,20 @@
<dependency>
<groupId>com.renkang</groupId>
<artifactId>health-emergency-api</artifactId>
<classifier>xj</classifier>
</dependency>
<dependency>
<groupId>org.jeecgframework.boot</groupId>
<artifactId>jeecg-system-cloud-api</artifactId>
<classifier>xj</classifier>
</dependency>
<dependency>
<groupId>com.renkang</groupId>
<artifactId>health-im-api</artifactId>
<classifier>xj</classifier>
</dependency>
<dependency>
<groupId>com.renkang</groupId>
<artifactId>xj-anyan-api</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
@@ -50,4 +51,21 @@
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>biz-obf</id>
<build>
<plugins>
<plugin>
<groupId>com.github.wvengen</groupId>
<artifactId>proguard-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
@@ -0,0 +1,38 @@
-keepattributes *Annotation*, Signature, InnerClasses, EnclosingMethod, Exceptions, MethodParameters
-keep @org.springframework.stereotype.Service class *
-keep @org.springframework.web.bind.annotation.RestController class *
-keep @org.springframework.context.annotation.Configuration class * { *; }
-keep @org.springframework.stereotype.Component class *
-keep class lombok.** { *; }
-keepclassmembers enum * { # 保留枚举结构
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keepclassmembers class * implements java.io.Serializable { *; }
-keepclassmembers class * {
@org.springframework.web.bind.annotation.*Mapping *;
}
-keepclassmembers class * {
private static synthetic java.lang.Object $deserializeLambda$(java.lang.invoke.SerializedLambda);
}
-keepclassmembers class * {
@lombok.Getter *;
@lombok.Setter *;
}
# MyBatis 专用保留规则
-keep interface com.renkang.**.mapper.** { *; }
-keep class com.renkang.**.entity.** { *; }
-keep class com.renkang.**.bean.** { *; }
-keep class com.renkang.**.model.** { *; }
-keep class com.renkang.**.vo.** { *; }
-keepparameternames
# 关闭优化和压缩(避免框架兼容性问题)
-dontshrink # 不删除未使用代码
-dontoptimize # 不优化字节码[5,6](@ref)
-keepdirectories
-dontusemixedcaseclassnames
-adaptclassstrings
# 混淆选项
-useuniqueclassmembernames # 成员名称唯一化
-ignorewarnings
@@ -3,7 +3,6 @@ package com.renkang.emergency.controller;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Validator;
import cn.hutool.core.util.ObjUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.renkang.emergency.api.service.impl.LargeScreenImpl;
import com.renkang.emergency.async.AsyncImportService;
@@ -94,9 +93,6 @@ public class TblQimoNoticeController {
if (!checkCallBackType(qimoVo)) {
return "200";
}
// if(!"8027,8028,8029,8030".contains(qimoVo.getAgentName()) || !"8027,8028,8029,8030".contains(qimoVo.getExten()) ){//新疆使用的工号排除
// return "200";
// }
GlobalUtils.setHttpFeignToken();
// 七陌重复推送处理,3分钟内同ID去重
if (redisUtil.get(qimoVo.getCallSheetID()) != null) {
@@ -104,9 +100,6 @@ public class TblQimoNoticeController {
}
redisUtil.set(qimoVo.getCallSheetID(), qimoVo.getCalledNo(), 60 * 3);
if(StrUtil.isNotBlank(qimoVo.getCallNo()) && qimoVo.getCallNo().startsWith("0086")){
qimoVo.setCallNo(qimoVo.getCallNo().substring(4));
}
TblQimoNotice notice = QimoVoUtil.copyToEntity(qimoVo);
if (!"1".equals(qimoNotice)) {
return "200"; // 不推送
@@ -1,13 +1,9 @@
package com.renkang.emergency.largeScreen.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.renkang.anyan.model.vo.MedicalPeopleNumStatisticsVO;
import com.renkang.emergency.entity.dto.*;
import com.renkang.emergency.entity.vo.DataDetailVO;
import com.renkang.emergency.entity.vo.MedicalDataVO;
import com.renkang.emergency.largeScreen.entity.dto.*;
import com.renkang.emergency.largeScreen.entity.vo.*;
import com.renkang.emergency.largeScreen.service.ILargeScreenDataService;
import com.renkang.emergency.largeScreen.service.ILargeScreenService;
import com.renkang.emergency.service.ITbUserHelpMacService;
import com.renkang.emergency.service.ITblAmbulanceGpsService;
@@ -34,7 +30,6 @@ public class LargeScreenNewController {
private final YcLargeScreenService ycLargeScreenService;
private final ITblAmbulanceGpsService tblAmbulanceGpsService;
private final ILargeScreenService largeScreenService;
private final ILargeScreenDataService largeScreenDataService;
/**
* 获取地图
@@ -47,7 +42,7 @@ public class LargeScreenNewController {
}
/**
* 服务详情数据-24.09.19 新版大屏接口 25-07-28 修改假数据逻辑
* 服务详情数据-24.09.19 新版大屏接口
*/
@PostMapping("/statisticsNew")
@Operation(summary = "服务详情数据", description = "服务详情数据")
@@ -152,68 +147,9 @@ public class LargeScreenNewController {
}
@GetMapping("runTest")
@Operation(summary = "初始化假数据", description = "初始化假数据")
@Operation(summary = "假数据", description = "假数据")
public void runTest(){
largeScreenDataService.runTest();
}
/**
* 编辑或新增
* @param dto
* @return
*/
@PostMapping("editValue")
public Result<Boolean> editValue(@RequestBody LargeScreenDataValueDTO dto){
return Result.ok(largeScreenDataService.editValue(dto));
}
/**
* 编辑整个tab
* @param dto
* @return
*/
@PostMapping("editData")
public Result<Boolean> editData(@RequestBody DataDetailVO dto){
return Result.ok(largeScreenDataService.editData(dto));
}
/**
* 删除
* @param dto
* @return
*/
@DeleteMapping("deleteValue")
public Result<Boolean> deleteValue(@RequestBody LargeScreenDataValueDTO dto){
return Result.ok(largeScreenDataService.deleteValue(dto));
}
/**
* 体检医院编辑新增删除
* @param dtoList
* @return
*/
@PostMapping("editMedicalValue")
public Result<Boolean> editMedicalValue(@RequestBody List<LargeScreenDataValueDTO> dtoList){
return Result.ok(largeScreenDataService.editMedicalValue(dtoList));
}
/**
* 假数据查询
*/
@GetMapping("dataDetail")
public Result<DataDetailVO> dataDetail(@RequestParam(name = "centerId") String centerId, @RequestParam(name = "module") String module){
return Result.ok(largeScreenDataService.dataDetail(centerId,module));
}
/**
* 假数据查询(体检人数)
*/
@GetMapping("medicalDataDetail")
public Result<List<MedicalDataVO>> medicalDataDetail(@RequestParam(name = "centerId") String centerId){
return Result.ok(largeScreenDataService.medicalDataDetail(centerId));
largeScreenService.runTest();
}
}
@@ -3,21 +3,21 @@ package com.renkang.emergency.largeScreen.entity.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
//@Data
//public class MedicalPeopleNumStatisticsVO {
// /**
// * 医院名称
// */
// @Schema(title = "医院名称")
// private String hospitalName;
// /**
// * 已参检人数
// */
// @Schema(title = "已参检人数")
// private Integer checkedCount;
// /**
// * 应检人数 (可能无法提供 先冗余)
// */
// @Schema(title = "应检人数 (可能无法提供 先冗余)")
// private Integer totalCount;
//}
@Data
public class MedicalPeopleNumStatisticsVO {
/**
* 医院名称
*/
@Schema(title = "医院名称")
private String hospitalName;
/**
* 已参检人数
*/
@Schema(title = "已参检人数")
private Integer checkedCount;
/**
* 应检人数 (可能无法提供 先冗余)
*/
@Schema(title = "应检人数 (可能无法提供 先冗余)")
private Integer totalCount;
}
@@ -1,14 +0,0 @@
package com.renkang.emergency.largeScreen.mapper;
import com.github.yulichang.base.MPJBaseMapper;
import com.renkang.emergency.entity.LargeScreenData;
/**
* @Description: large_screen
* @Author: wang hao
* @Date: 2025-07-04
* @Version: V1.0
*/
public interface LargeScreenDataMapper extends MPJBaseMapper<LargeScreenData> {
}
@@ -1,32 +0,0 @@
package com.renkang.emergency.largeScreen.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.renkang.emergency.entity.LargeScreenData;
import com.renkang.emergency.entity.dto.LargeScreenDataValueDTO;
import com.renkang.emergency.entity.vo.DataDetailVO;
import com.renkang.emergency.entity.vo.MedicalDataVO;
import java.util.List;
/**
* @Description: LargeScreenData
* @Author: wang hao
* @Date: 2025-07-25
* @Version: V1.0
*/
public interface ILargeScreenDataService extends IService<LargeScreenData> {
void runTest();
Boolean editValue(LargeScreenDataValueDTO dto);
Boolean editData(DataDetailVO dto);
Boolean deleteValue(LargeScreenDataValueDTO dto);
Boolean editMedicalValue(List<LargeScreenDataValueDTO> dtoList);
DataDetailVO dataDetail(String centerId, String module);
List<MedicalDataVO> medicalDataDetail(String centerId);
}
@@ -2,7 +2,6 @@ package com.renkang.emergency.largeScreen.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.renkang.anyan.model.vo.MedicalPeopleNumStatisticsVO;
import com.renkang.emergency.largeScreen.entity.dto.*;
import com.renkang.emergency.largeScreen.entity.vo.*;
@@ -39,4 +38,6 @@ public interface ILargeScreenService extends IService<LargeScreenMap> {
List<HospitalVO> hospital();
void runJob();
void runTest();
}
@@ -1,433 +0,0 @@
package com.renkang.emergency.largeScreen.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.renkang.emergency.entity.LargeScreenData;
import com.renkang.emergency.entity.dto.LargeScreenDataValueDTO;
import com.renkang.emergency.entity.vo.DataDetailVO;
import com.renkang.emergency.entity.vo.MedicalDataVO;
import com.renkang.emergency.largeScreen.mapper.LargeScreenDataMapper;
import com.renkang.emergency.largeScreen.service.ILargeScreenDataService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Description: large_screen_data
* @Author: wang hao
* @Date: 2025-07-25
* @Version: V1.0
*/
@Service
@RequiredArgsConstructor
public class LargeScreenDataServiceImpl extends ServiceImpl<LargeScreenDataMapper, LargeScreenData> implements ILargeScreenDataService {
@Transactional(rollbackFor = Exception.class)
public void runTest() {
if (CollUtil.isNotEmpty(list())) {
return;
}
List<LargeScreenData> list = new ArrayList<>();
// 服务详情
LargeScreenData service1 = new LargeScreenData();
service1.setType("gross");
list.add(service1);
LargeScreenData service2 = new LargeScreenData();
service2.setType("alerdyreceive");
list.add(service2);
LargeScreenData service3 = new LargeScreenData();
service3.setType("jqqz");
list.add(service3);
LargeScreenData service4 = new LargeScreenData();
service4.setType("dbjy");
list.add(service4);
LargeScreenData service5 = new LargeScreenData();
service5.setType("totaldeal");
list.add(service5);
LargeScreenData service6 = new LargeScreenData();
service6.setType("totalacceptance");
list.add(service6);
// 主诉分类
// 体检人数
LargeScreenData medical1 = new LargeScreenData();
medical1.setType("medical");
medical1.setName("克拉玛依医院");
list.add(medical1);
// 健康打卡人数
// 体检数据
saveBatch(list);
}
public Boolean editValue(LargeScreenDataValueDTO dto) {
if (StrUtil.isEmpty(dto.getCenterId())) {
return false;
}
LambdaQueryWrapper<LargeScreenData> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(LargeScreenData::getType, dto.getType());
queryWrapper.eq(LargeScreenData::getCenterId, dto.getCenterId());
queryWrapper.eq(ObjUtil.isNotEmpty(dto.getId()),LargeScreenData::getId, dto.getId());
if (CollUtil.isNotEmpty(list())) {
LambdaUpdateWrapper<LargeScreenData> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(LargeScreenData::getType, dto.getType());
updateWrapper.eq(ObjUtil.isNotEmpty(dto.getId()),LargeScreenData::getId, dto.getId());
updateWrapper.set(LargeScreenData::getValue, dto.getValue());
updateWrapper.set(LargeScreenData::getStatus, dto.getStatus());
return update(updateWrapper);
}
return save(new LargeScreenData(dto));
}
@Transactional()
public Boolean editData(DataDetailVO dto){
List<LargeScreenData> list = new ArrayList<>();
switch (dto.getModule()) {
case "9":
// 服务详情
remove(new LambdaQueryWrapper<LargeScreenData>().eq(LargeScreenData::getCenterId, dto.getCenterId()).in(LargeScreenData::getType,
Arrays.asList("gross", "alerdyreceive", "jqqz", "dbjy", "totaldeal", "totalacceptance")));
LargeScreenData service1 = new LargeScreenData();
service1.setType("gross");
service1.setStatus(dto.getLatestCallStatus());
service1.setValue(dto.getLatestCall());
service1.setCenterId(dto.getCenterId());
list.add(service1);
LargeScreenData service2 = new LargeScreenData();
service2.setType("alerdyreceive");
service2.setStatus(dto.getLatestAcceptCallStatus());
service2.setValue(dto.getLatestAcceptCall());
service2.setCenterId(dto.getCenterId());
list.add(service2);
LargeScreenData service3 = new LargeScreenData();
service3.setType("jqqz");
service3.setStatus(dto.getIllNumStatus());
service3.setValue(dto.getIllNum());
service3.setCenterId(dto.getCenterId());
list.add(service3);
LargeScreenData service4 = new LargeScreenData();
service4.setType("dbjy");
service4.setStatus(dto.getEmergencyNumStatus());
service4.setValue(dto.getEmergencyNum());
service4.setCenterId(dto.getCenterId());
list.add(service4);
LargeScreenData service5 = new LargeScreenData();
service5.setType("totaldeal");
service5.setStatus(dto.getTotalAcceptStatus());
service5.setValue(dto.getTotalAccept());
service5.setCenterId(dto.getCenterId());
list.add(service5);
LargeScreenData service6 = new LargeScreenData();
service6.setType("totalacceptance");
service6.setStatus(dto.getTotalDisposalStatus());
service6.setValue(dto.getTotalDisposal());
service6.setCenterId(dto.getCenterId());
list.add(service6);
break;
case "31":
// 主诉分类
remove(new LambdaQueryWrapper<LargeScreenData>().eq(LargeScreenData::getCenterId, dto.getCenterId()).in(LargeScreenData::getType,
Arrays.asList("oneTwenty", "hospital")));
LargeScreenData type1 = new LargeScreenData();
type1.setType("oneTwenty");
type1.setStatus(dto.getHospitalCountStatus());
type1.setValue(dto.getHospitalCount());
type1.setCenterId(dto.getCenterId());
list.add(type1);
LargeScreenData type2 = new LargeScreenData();
type2.setType("hospital");
type2.setStatus(dto.getEmergencyCountStatus());
type2.setValue(dto.getEmergencyCount());
type2.setCenterId(dto.getCenterId());
list.add(type2);
break;
case "33":
// 健康打卡
remove(new LambdaQueryWrapper<LargeScreenData>().eq(LargeScreenData::getCenterId, dto.getCenterId()).in(LargeScreenData::getType,
Arrays.asList("weightLossCountDay", "weightLossCountMonth", "weightLossAbnormalCountDay", "weightLossAbnormalCountMonth",
"bloodSugarCountDay", "bloodSugarCountMonth", "bloodSugarAbnormalCountDay", "bloodSugarAbnormalCountMonth",
"bloodPressureCountDay", "bloodPressureCountMonth", "bloodPressureAbnormalCountDay", "bloodPressureAbnormalCountMonth",
"totalCount", "cardiovaAbCount", "cerebrovAbCount", "cctaAbCount")));
LargeScreenData sign1 = new LargeScreenData();
sign1.setType("weightLossCountDay");
sign1.setStatus(dto.getWeightLossCountDayStatus());
sign1.setValue(dto.getWeightLossCountDay());
sign1.setCenterId(dto.getCenterId());
list.add(sign1);
LargeScreenData sign2 = new LargeScreenData();
sign2.setType("weightLossCountMonth");
sign2.setStatus(dto.getWeightLossCountMonthStatus());
sign2.setValue(dto.getWeightLossCountMonth());
sign2.setCenterId(dto.getCenterId());
list.add(sign2);
LargeScreenData sign3 = new LargeScreenData();
sign3.setType("weightLossAbnormalCountDay");
sign3.setStatus(dto.getWeightLossAbnormalCountDayStatus());
sign3.setValue(dto.getWeightLossAbnormalCountDay());
sign3.setCenterId(dto.getCenterId());
list.add(sign3);
LargeScreenData sign4 = new LargeScreenData();
sign4.setType("weightLossAbnormalCountMonth");
sign4.setStatus(dto.getWeightLossAbnormalCountMonthStatus());
sign4.setValue(dto.getWeightLossAbnormalCountMonth());
sign4.setCenterId(dto.getCenterId());
list.add(sign4);
LargeScreenData sign5 = new LargeScreenData();
sign5.setType("bloodSugarCountDay");
sign5.setStatus(dto.getBloodSugarCountDayStatus());
sign5.setValue(dto.getBloodSugarCountDay());
sign5.setCenterId(dto.getCenterId());
list.add(sign5);
LargeScreenData sign6 = new LargeScreenData();
sign6.setType("bloodSugarCountMonth");
sign6.setStatus(dto.getBloodSugarCountMonthStatus());
sign6.setValue(dto.getBloodSugarCountMonth());
sign6.setCenterId(dto.getCenterId());
list.add(sign6);
LargeScreenData sign7 = new LargeScreenData();
sign7.setType("bloodSugarAbnormalCountDay");
sign7.setStatus(dto.getBloodSugarAbnormalCountDayStatus());
sign7.setValue(dto.getBloodSugarAbnormalCountDay());
sign7.setCenterId(dto.getCenterId());
list.add(sign7);
LargeScreenData sign8 = new LargeScreenData();
sign8.setType("bloodSugarAbnormalCountMonth");
sign8.setStatus(dto.getBloodSugarAbnormalCountMonthStatus());
sign8.setValue(dto.getBloodSugarAbnormalCountMonth());
sign8.setCenterId(dto.getCenterId());
list.add(sign8);
LargeScreenData sign9 = new LargeScreenData();
sign9.setType("bloodPressureCountDay");
sign9.setStatus(dto.getBloodPressureCountDayStatus());
sign9.setValue(dto.getBloodPressureCountDay());
sign9.setCenterId(dto.getCenterId());
list.add(sign9);
LargeScreenData sign10 = new LargeScreenData();
sign10.setType("bloodPressureCountMonth");
sign10.setStatus(dto.getBloodPressureCountMonthStatus());
sign10.setValue(dto.getBloodPressureCountMonth());
sign10.setCenterId(dto.getCenterId());
list.add(sign10);
LargeScreenData sign11 = new LargeScreenData();
sign11.setType("bloodPressureAbnormalCountDay");
sign11.setStatus(dto.getBloodPressureAbnormalCountDayStatus());
sign11.setValue(dto.getBloodPressureAbnormalCountDay());
sign11.setCenterId(dto.getCenterId());
list.add(sign11);
LargeScreenData sign12 = new LargeScreenData();
sign12.setType("bloodPressureAbnormalCountMonth");
sign12.setStatus(dto.getBloodPressureAbnormalCountMonthStatus());
sign12.setValue(dto.getBloodPressureAbnormalCountMonth());
sign12.setCenterId(dto.getCenterId());
list.add(sign12);
break;
case "34":
// 体检数据
remove(new LambdaQueryWrapper<LargeScreenData>().eq(LargeScreenData::getCenterId, dto.getCenterId()).in(LargeScreenData::getType,
Arrays.asList("totalCount", "cardiovaAbCount", "cerebrovAbCount", "cctaAbCount")));
LargeScreenData medicalData1 = new LargeScreenData();
medicalData1.setType("totalCount");
medicalData1.setStatus(dto.getTotalCountStatus());
medicalData1.setValue(dto.getTotalCount());
medicalData1.setCenterId(dto.getCenterId());
list.add(medicalData1);
LargeScreenData medicalData2 = new LargeScreenData();
medicalData2.setType("cardiovaAbCount");
medicalData2.setStatus(dto.getCardiovaAbCountStatus());
medicalData2.setValue(dto.getCardiovaAbCount());
medicalData2.setCenterId(dto.getCenterId());
list.add(medicalData2);
LargeScreenData medicalData3 = new LargeScreenData();
medicalData3.setType("cerebrovAbCount");
medicalData3.setStatus(dto.getCerebrovAbCountStatus());
medicalData3.setValue(dto.getCerebrovAbCount());
medicalData3.setCenterId(dto.getCenterId());
list.add(medicalData3);
LargeScreenData medicalData4 = new LargeScreenData();
medicalData4.setType("cctaAbCount");
medicalData4.setStatus(dto.getCctaAbCountStatus());
medicalData4.setValue(dto.getCctaAbCount());
medicalData4.setCenterId(dto.getCenterId());
list.add(medicalData4);
break;
default:
break;
}
return saveBatch(list);
}
public Boolean deleteValue(LargeScreenDataValueDTO dto) {
return remove(new LambdaQueryWrapper<LargeScreenData>().eq(LargeScreenData::getId, dto.getId()));
}
@Transactional(rollbackFor = Exception.class)
public Boolean editMedicalValue(List<LargeScreenDataValueDTO> dtoList) {
remove(new LambdaQueryWrapper<LargeScreenData>().in(LargeScreenData::getType,"medical","32"));
if (CollUtil.isNotEmpty(dtoList)) {
saveBatch(dtoList.stream().map(LargeScreenData::new).collect(Collectors.toList()));
}
return true;
}
public DataDetailVO dataDetail(String centerId, String module) {
DataDetailVO vo = new DataDetailVO();
List<LargeScreenData> list = new ArrayList<>();
switch (module) {
case "9":
// 查询服务详情相关数据
list = list(new LambdaQueryWrapper<LargeScreenData>().eq(LargeScreenData::getCenterId, centerId).in(LargeScreenData::getType,
Arrays.asList("gross", "alerdyreceive", "jqqz", "dbjy", "totaldeal", "totalacceptance")));
break;
case "31":
// 查询主诉分类相关数据
list = list(new LambdaQueryWrapper<LargeScreenData>().eq(LargeScreenData::getCenterId, centerId).in(LargeScreenData::getType,
Arrays.asList("oneTwenty", "hospital")));
break;
case "33":
// 查询健康打卡相关数据
list = list(new LambdaQueryWrapper<LargeScreenData>().eq(LargeScreenData::getCenterId, centerId).in(LargeScreenData::getType,
Arrays.asList("weightLossCountDay", "weightLossCountMonth", "weightLossAbnormalCountDay", "weightLossAbnormalCountMonth",
"bloodSugarCountDay", "bloodSugarCountMonth", "bloodSugarAbnormalCountDay", "bloodSugarAbnormalCountMonth",
"bloodPressureCountDay", "bloodPressureCountMonth", "bloodPressureAbnormalCountDay", "bloodPressureAbnormalCountMonth",
"totalCount", "cardiovaAbCount", "cerebrovAbCount", "cctaAbCount")));
break;
case "34":
// 查询体检数据相关
list = list(new LambdaQueryWrapper<LargeScreenData>().eq(LargeScreenData::getCenterId, centerId).in(LargeScreenData::getType,
Arrays.asList("totalCount", "cardiovaAbCount", "cerebrovAbCount", "cctaAbCount")));
break;
default:
break;
}
if (CollUtil.isEmpty(list)) {
return vo;
}
for (LargeScreenData largeScreenData : list) {
switch (largeScreenData.getType()) {
case "gross":
vo.setLatestCall(String.valueOf(largeScreenData.getValue()));
vo.setLatestCallStatus(largeScreenData.getStatus());
break;
case "alerdyreceive":
vo.setLatestAcceptCall(String.valueOf(largeScreenData.getValue()));
vo.setLatestAcceptCallStatus(largeScreenData.getStatus());
break;
case "jqqz":
vo.setIllNum(String.valueOf(largeScreenData.getValue()));
vo.setIllNumStatus(largeScreenData.getStatus());
break;
case "dbjy":
vo.setEmergencyNum(String.valueOf(largeScreenData.getValue()));
vo.setEmergencyNumStatus(largeScreenData.getStatus());
break;
case "totaldeal":
vo.setTotalAccept(String.valueOf(largeScreenData.getValue()));
vo.setTotalAcceptStatus(largeScreenData.getStatus());
break;
case "totalacceptance":
vo.setTotalDisposal(String.valueOf(largeScreenData.getValue()));
vo.setTotalDisposalStatus(largeScreenData.getStatus());
break;
case "oneTwenty":
vo.setHospitalCount(String.valueOf(largeScreenData.getValue()));
vo.setHospitalCountStatus(largeScreenData.getStatus());
break;
case "hospital":
vo.setEmergencyCount(String.valueOf(largeScreenData.getValue()));
vo.setEmergencyCountStatus(largeScreenData.getStatus());
break;
case "weightLossCountDay":
vo.setWeightLossCountDay(String.valueOf(largeScreenData.getValue()));
vo.setWeightLossCountDayStatus(largeScreenData.getStatus());
break;
case "weightLossCountMonth":
vo.setWeightLossCountMonth(String.valueOf(largeScreenData.getValue()));
vo.setWeightLossCountMonthStatus(largeScreenData.getStatus());
break;
case "weightLossAbnormalCountDay":
vo.setWeightLossAbnormalCountDay(String.valueOf(largeScreenData.getValue()));
vo.setWeightLossAbnormalCountDayStatus(largeScreenData.getStatus());
break;
case "weightLossAbnormalCountMonth":
vo.setWeightLossAbnormalCountMonth(String.valueOf(largeScreenData.getValue()));
vo.setWeightLossAbnormalCountMonthStatus(largeScreenData.getStatus());
break;
case "bloodSugarCountDay":
vo.setBloodSugarCountDay(String.valueOf(largeScreenData.getValue()));
vo.setBloodSugarCountDayStatus(largeScreenData.getStatus());
break;
case "bloodSugarCountMonth":
vo.setBloodSugarCountMonth(String.valueOf(largeScreenData.getValue()));
vo.setBloodSugarCountMonthStatus(largeScreenData.getStatus());
break;
case "bloodSugarAbnormalCountDay":
vo.setBloodSugarAbnormalCountDay(String.valueOf(largeScreenData.getValue()));
vo.setBloodSugarAbnormalCountDayStatus(largeScreenData.getStatus());
break;
case "bloodSugarAbnormalCountMonth":
vo.setBloodSugarAbnormalCountMonth(String.valueOf(largeScreenData.getValue()));
vo.setBloodSugarAbnormalCountMonthStatus(largeScreenData.getStatus());
break;
case "bloodPressureCountDay":
vo.setBloodPressureCountDay(String.valueOf(largeScreenData.getValue()));
vo.setBloodPressureCountDayStatus(largeScreenData.getStatus());
break;
case "bloodPressureCountMonth":
vo.setBloodPressureCountMonth(String.valueOf(largeScreenData.getValue()));
vo.setBloodPressureCountMonthStatus(largeScreenData.getStatus());
break;
case "bloodPressureAbnormalCountDay":
vo.setBloodPressureAbnormalCountDay(String.valueOf(largeScreenData.getValue()));
vo.setBloodPressureAbnormalCountDayStatus(largeScreenData.getStatus());
break;
case "bloodPressureAbnormalCountMonth":
vo.setBloodPressureAbnormalCountMonth(String.valueOf(largeScreenData.getValue()));
vo.setBloodPressureAbnormalCountMonthStatus(largeScreenData.getStatus());
break;
case "totalCount":
vo.setTotalCount(String.valueOf(largeScreenData.getValue()));
vo.setTotalCountStatus(largeScreenData.getStatus());
break;
case "cardiovaAbCount":
vo.setCardiovaAbCount(String.valueOf(largeScreenData.getValue()));
vo.setCardiovaAbCountStatus(largeScreenData.getStatus());
break;
case "cerebrovAbCount":
vo.setCerebrovAbCount(String.valueOf(largeScreenData.getValue()));
vo.setCerebrovAbCountStatus(largeScreenData.getStatus());
break;
case "cctaAbCount":
vo.setCctaAbCount(String.valueOf(largeScreenData.getValue()));
vo.setCctaAbCountStatus(largeScreenData.getStatus());
break;
default:
break;
}
}
return vo;
}
public List<MedicalDataVO> medicalDataDetail(String centerId){
List<LargeScreenData> list = list(new LambdaQueryWrapper<LargeScreenData>()
.in(LargeScreenData::getType, "medical","32").eq(LargeScreenData::getCenterId, centerId));
if (CollUtil.isEmpty(list)){
return new ArrayList<>();
}
return list.stream().map(MedicalDataVO::new).collect(Collectors.toList());
}
}
@@ -8,23 +8,23 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.renkang.anyan.client.AnYanClient;
import com.renkang.anyan.model.vo.HealthSignStatVO;
import com.renkang.anyan.model.vo.MedicalPeopleNumStatisticsVO;
import com.renkang.emergency.bean.response.XjDemandTypeFakerData;
import com.renkang.emergency.bean.response.XjHealthSignFakerData;
import com.renkang.emergency.bean.response.XjMedicalCountFakerData;
import com.renkang.emergency.bean.response.XjMedicalDataFakerData;
import com.renkang.emergency.entity.*;
import com.renkang.emergency.entity.vo.DataDetailVO;
import com.renkang.emergency.entity.vo.MedicalDataVO;
import com.renkang.emergency.entity.EmergencyHealthRoom;
import com.renkang.emergency.entity.Resource;
import com.renkang.emergency.entity.TblHelpCentorVo;
import com.renkang.emergency.entity.TblUserHelpVo;
import com.renkang.emergency.largeScreen.entity.dto.*;
import com.renkang.emergency.largeScreen.entity.vo.*;
import com.renkang.emergency.largeScreen.mapper.LargeScreenMapper;
import com.renkang.emergency.largeScreen.service.ILargeScreenDataService;
import com.renkang.emergency.service.IEmergencyHealthRoomService;
import com.renkang.emergency.largeScreen.service.ILargeScreenService;
import com.renkang.emergency.service.IResourceService;
import lombok.RequiredArgsConstructor;
import org.jeecg.common.api.dto.ServiceFakerData;
import org.jeecg.common.api.dto.YcMedicalCenterFakerData;
import org.jeecg.common.constant.FakerDataConstant;
import org.jeecg.common.util.RedisUtil;
import org.jeecg.util.RedisClientUtil;
@@ -33,8 +33,6 @@ import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.function.Consumer;
import java.util.function.Supplier;
import java.util.stream.Collectors;
/**
@@ -54,8 +52,6 @@ public class LargeScreenServiceImpl extends ServiceImpl<LargeScreenMapper, Large
private final IEmergencyHealthRoomService roomService;
private final RedisClientUtil redisClientUtil;
private final RedisUtil redisUtil;
private final ILargeScreenDataService screenDataService;
private final AnYanClient anYanClient;
private static final double MIN_LONGITUDE = 80.0;
@@ -118,7 +114,6 @@ public class LargeScreenServiceImpl extends ServiceImpl<LargeScreenMapper, Large
baseVO.setBuildDate(new Date());
list.add(baseVO);
}
List<com.renkang.anyan.model.vo.HealthRoomVO> healthRoomVOS = anYanClient.healthPlaceHomList();
// 查询第三方接口返回 此接口返回对象跟原有可能不太一样 要注意
return list;
}
@@ -272,222 +267,141 @@ public class LargeScreenServiceImpl extends ServiceImpl<LargeScreenMapper, Large
@Override
public List<MedicalPeopleNumStatisticsVO> medicalPeopleNumStatistics (MedicalPeopleNumStatisticsDTO dto){
Boolean enable = (Boolean) redisUtil.get(StrUtil.isNotEmpty(dto.getCenterId()) ?
FakerDataConstant.XJ_MEDICAL_COUNT_ENABLE + ":" + dto.getCenterId() : FakerDataConstant.XJ_MEDICAL_COUNT_ENABLE);
if (enable != null && enable) {
List<MedicalPeopleNumStatisticsVO> vo = XjMedicalCountFakerData(dto.getCenterId());
if (vo != null) {
return vo;
}
}
List<MedicalPeopleNumStatisticsVO> list = redisClientUtil.getList(MEDICAL,MEDICAL_PEOPLE_NUM_STATISTICS,MedicalPeopleNumStatisticsVO.class);
// 获取假数据
List<MedicalDataVO> medicalDataList = screenDataService.medicalDataDetail(dto.getCenterId());
if (CollUtil.isEmpty(list)){
list = new ArrayList<>();
for (MedicalDataVO medicalData : medicalDataList) {
if ("1".equals(medicalData.getStatus())){
MedicalPeopleNumStatisticsVO vo = new MedicalPeopleNumStatisticsVO();
vo.setHospitalName(medicalData.getName());
vo.setCheckedCount(Integer.valueOf(medicalData.getCount()));
list.add(vo);
}
}
}else {
for (MedicalPeopleNumStatisticsVO statistics : list) {
MedicalDataVO medicalData = medicalDataList.stream().filter(item -> item.getName().equals(statistics.getHospitalName())).findFirst().orElse(null);
if (null != medicalData){
if ("1".equals(medicalData.getStatus())){
if (medicalData.getCount().contains("+")){
statistics.setCheckedCount(statistics.getCheckedCount()+Integer.parseInt(medicalData.getCount().replace("+", "").trim()));
}else {
statistics.setCheckedCount(Integer.parseInt(medicalData.getCount().replace("+", "").trim()));
}
}
}
}
return new ArrayList<>();
}
return list;
}
@Override
public MedicalAbnormalStatisticsVO medicalAbnormalStatistics (MedicalAbnormalStatisticsDTO dto){
MedicalAbnormalStatisticsVO statisticsVO = redisClientUtil.get(MEDICAL,MEDICAL_ABNORMAL_STATISTICS,MedicalAbnormalStatisticsVO.class);
// 获取假数据
DataDetailVO dataDetailVO = screenDataService.dataDetail(dto.getCenterId(), "34");
if (ObjUtil.isEmpty(statisticsVO)){
statisticsVO = new MedicalAbnormalStatisticsVO();
if (null != dataDetailVO){
if ("1".equals(dataDetailVO.getTotalCountStatus())){
statisticsVO.setTotalCount(Integer.valueOf(dataDetailVO.getTotalCount()));
}
if ("1".equals(dataDetailVO.getCardiovaAbCountStatus())){
statisticsVO.setCardiovaAbCount(Integer.valueOf(dataDetailVO.getCardiovaAbCount()));
}
if ("1".equals(dataDetailVO.getCerebrovAbCountStatus())){
statisticsVO.setCerebrovAbCount(Integer.valueOf(dataDetailVO.getCerebrovAbCount()));
}
if ("1".equals(dataDetailVO.getCctaAbCountStatus())){
statisticsVO.setCctaAbCount(Integer.valueOf(dataDetailVO.getCctaAbCount()));
}
}
}else {
if (null != dataDetailVO){
if ("1".equals(dataDetailVO.getTotalCountStatus())){
if (dataDetailVO.getTotalCount().contains("+")){
statisticsVO.setTotalCount(statisticsVO.getTotalCount() + Integer.parseInt(dataDetailVO.getTotalCount().replace("+", "").trim()));
}else {
statisticsVO.setTotalCount(Integer.valueOf(dataDetailVO.getTotalCount().replace("+", "").trim()));
}
}
if ("1".equals(dataDetailVO.getCardiovaAbCountStatus())){
if (dataDetailVO.getCardiovaAbCount().contains("+")){
statisticsVO.setCardiovaAbCount(statisticsVO.getCardiovaAbCount() + Integer.parseInt(dataDetailVO.getCardiovaAbCount().replace("+", "").trim()));
}else {
statisticsVO.setCardiovaAbCount(Integer.valueOf(dataDetailVO.getCardiovaAbCount().replace("+", "").trim()));
}
}
if ("1".equals(dataDetailVO.getCerebrovAbCountStatus())){
if (dataDetailVO.getCerebrovAbCount().contains("+")){
statisticsVO.setCerebrovAbCount(statisticsVO.getCerebrovAbCount() + Integer.parseInt(dataDetailVO.getCerebrovAbCount().replace("+", "").trim()));
}else {
statisticsVO.setCerebrovAbCount(Integer.valueOf(dataDetailVO.getCerebrovAbCount().replace("+", "").trim()));
}
}
if ("1".equals(dataDetailVO.getCctaAbCountStatus())){
if (dataDetailVO.getCctaAbCount().contains("+")){
statisticsVO.setCctaAbCount(statisticsVO.getCctaAbCount() + Integer.parseInt(dataDetailVO.getCctaAbCount().replace("+", "").trim()));
}else {
statisticsVO.setCctaAbCount(Integer.valueOf(dataDetailVO.getCctaAbCount().replace("+", "").trim()));
}
}
Boolean enable = (Boolean) redisUtil.get(StrUtil.isNotEmpty(dto.getCenterId())
? FakerDataConstant.XJ_MEDICAL_DATA_ENABLE + ":" + dto.getCenterId() : FakerDataConstant.XJ_MEDICAL_DATA_ENABLE);
if (enable != null && enable) {
MedicalAbnormalStatisticsVO vo = XjMedicalDataFakerDataNew(dto.getCenterId());
if (vo != null) {
return vo;
}
}
MedicalAbnormalStatisticsVO statisticsVO = redisClientUtil.get(MEDICAL,MEDICAL_ABNORMAL_STATISTICS,MedicalAbnormalStatisticsVO.class);
if (ObjUtil.isEmpty(statisticsVO)){
return new MedicalAbnormalStatisticsVO();
}
return statisticsVO;
}
@Override
public HealthSignVO healthSign(HealthSignDTO dto) {
// 健康打卡数据
HealthSignVO vo = redisClientUtil.get(MEDICAL, HEALTH_SIGN, HealthSignVO.class);
// 获取数据
DataDetailVO dataDetailVO = screenDataService.dataDetail(dto.getCenterId(), "33");
if (dataDetailVO == null) {
return vo != null ? vo : new HealthSignVO();
}
if (vo == null) {
vo = newHealthSignVO(dataDetailVO);
} else {
updateHealthSignVO(vo, dataDetailVO);
}
return vo;
}
private HealthSignVO newHealthSignVO(DataDetailVO dataDetailVO) {
HealthSignVO vo = new HealthSignVO();
// 减重
setIfActive(vo::setWeightLossCountDay, dataDetailVO.getWeightLossCountDayStatus(), dataDetailVO.getWeightLossCountDay());
setIfActive(vo::setWeightLossCountMonth, dataDetailVO.getWeightLossCountMonthStatus(), dataDetailVO.getWeightLossCountMonth());
setIfActive(vo::setWeightLossAbnormalCountDay, dataDetailVO.getWeightLossAbnormalCountDayStatus(), dataDetailVO.getWeightLossAbnormalCountDay());
setIfActive(vo::setWeightLossAbnormalCountMonth, dataDetailVO.getWeightLossAbnormalCountMonthStatus(), dataDetailVO.getWeightLossAbnormalCountMonth());
// 血糖
setIfActive(vo::setBloodSugarCountDay, dataDetailVO.getBloodSugarCountDayStatus(), dataDetailVO.getBloodSugarCountDay());
setIfActive(vo::setBloodSugarCountMonth, dataDetailVO.getBloodSugarCountMonthStatus(), dataDetailVO.getBloodSugarCountMonth());
setIfActive(vo::setBloodSugarAbnormalCountDay, dataDetailVO.getBloodSugarAbnormalCountDayStatus(), dataDetailVO.getBloodSugarAbnormalCountDay());
setIfActive(vo::setBloodSugarAbnormalCountMonth, dataDetailVO.getBloodSugarAbnormalCountMonthStatus(), dataDetailVO.getBloodSugarAbnormalCountMonth());
// 血压
setIfActive(vo::setBloodPressureCountDay, dataDetailVO.getBloodPressureCountDayStatus(), dataDetailVO.getBloodPressureCountDay());
setIfActive(vo::setBloodPressureCountMonth, dataDetailVO.getBloodPressureCountMonthStatus(), dataDetailVO.getBloodPressureCountMonth());
setIfActive(vo::setBloodPressureAbnormalCountDay, dataDetailVO.getBloodPressureAbnormalCountDayStatus(), dataDetailVO.getBloodPressureAbnormalCountDay());
setIfActive(vo::setBloodPressureAbnormalCountMonth, dataDetailVO.getBloodPressureAbnormalCountMonthStatus(), dataDetailVO.getBloodPressureAbnormalCountMonth());
return vo;
}
private void updateHealthSignVO(HealthSignVO vo, DataDetailVO dataDetailVO) {
// 减重
updateIfActive(vo::getWeightLossCountDay, vo::setWeightLossCountDay,
dataDetailVO.getWeightLossCountDayStatus(), dataDetailVO.getWeightLossCountDay());
updateIfActive(vo::getWeightLossCountMonth, vo::setWeightLossCountMonth,
dataDetailVO.getWeightLossCountMonthStatus(), dataDetailVO.getWeightLossCountMonth());
updateIfActive(vo::getWeightLossAbnormalCountDay, vo::setWeightLossAbnormalCountDay,
dataDetailVO.getWeightLossAbnormalCountDayStatus(), dataDetailVO.getWeightLossAbnormalCountDay());
updateIfActive(vo::getWeightLossAbnormalCountMonth, vo::setWeightLossAbnormalCountMonth,
dataDetailVO.getWeightLossAbnormalCountMonthStatus(), dataDetailVO.getWeightLossAbnormalCountMonth());
// 血糖
updateIfActive(vo::getBloodSugarCountDay, vo::setBloodSugarCountDay,
dataDetailVO.getBloodSugarCountDayStatus(), dataDetailVO.getBloodSugarCountDay());
updateIfActive(vo::getBloodSugarCountMonth, vo::setBloodSugarCountMonth,
dataDetailVO.getBloodSugarCountMonthStatus(), dataDetailVO.getBloodSugarCountMonth());
updateIfActive(vo::getBloodSugarAbnormalCountDay, vo::setBloodSugarAbnormalCountDay,
dataDetailVO.getBloodSugarAbnormalCountDayStatus(), dataDetailVO.getBloodSugarAbnormalCountDay());
updateIfActive(vo::getBloodSugarAbnormalCountMonth, vo::setBloodSugarAbnormalCountMonth,
dataDetailVO.getBloodSugarAbnormalCountMonthStatus(), dataDetailVO.getBloodSugarAbnormalCountMonth());
// 血压
updateIfActive(vo::getBloodPressureCountDay, vo::setBloodPressureCountDay,
dataDetailVO.getBloodPressureCountDayStatus(), dataDetailVO.getBloodPressureCountDay());
updateIfActive(vo::getBloodPressureCountMonth, vo::setBloodPressureCountMonth,
dataDetailVO.getBloodPressureCountMonthStatus(), dataDetailVO.getBloodPressureCountMonth());
updateIfActive(vo::getBloodPressureAbnormalCountDay, vo::setBloodPressureAbnormalCountDay,
dataDetailVO.getBloodPressureAbnormalCountDayStatus(), dataDetailVO.getBloodPressureAbnormalCountDay());
updateIfActive(vo::getBloodPressureAbnormalCountMonth, vo::setBloodPressureAbnormalCountMonth,
dataDetailVO.getBloodPressureAbnormalCountMonthStatus(), dataDetailVO.getBloodPressureAbnormalCountMonth());
}
private void setIfActive(Consumer<Integer> setter, String status, String value) {
if ("1".equals(status) && value != null) {
setter.accept(Integer.valueOf(value));
}
}
private void updateIfActive(Supplier<Integer> getter, Consumer<Integer> setter,
String status, String value) {
if ("1".equals(status) && value != null) {
int current = getter.get() != null ? getter.get() : 0;
if (value.contains("+")) {
setter.accept(current + Integer.parseInt(value.replace("+", "")));
} else {
setter.accept(Integer.parseInt(value));
public HealthSignVO healthSign (HealthSignDTO dto){
Boolean enable = (Boolean) redisUtil.get(StrUtil.isNotEmpty(dto.getCenterId())
? FakerDataConstant.XJ_HEALTH_SIGN_COUNT_ENABLE + ":" + dto.getCenterId() : FakerDataConstant.XJ_HEALTH_SIGN_COUNT_ENABLE);
if (enable != null && enable) {
HealthSignVO vo = XjHealthSignFakerDataNew(dto.getCenterId());
if (vo != null) {
return vo;
}
}
HealthSignVO vo = redisClientUtil.get(MEDICAL,HEALTH_SIGN,HealthSignVO.class);
if (null == vo){
return new HealthSignVO();
}
return vo;
}
@Override
public void runJob(){
Date today = new Date();
// 体检人数统计查询
List<MedicalPeopleNumStatisticsVO> medicalPeopleNumStatisticsVOS = anYanClient.examinationStatistics(DateUtil.thisYear());
redisClientUtil.set(MEDICAL,MEDICAL_PEOPLE_NUM_STATISTICS,medicalPeopleNumStatisticsVOS);
List<MedicalPeopleNumStatisticsVO> medicalPeopleNumStatisticsList = new ArrayList<>();
redisClientUtil.set(MEDICAL,MEDICAL_PEOPLE_NUM_STATISTICS,medicalPeopleNumStatisticsList);
// 体检异常数据查询
List<MedicalAbnormalStatisticsVO> medicalAbnormalStatisticsList = new ArrayList<>();
redisClientUtil.set(MEDICAL,MEDICAL_ABNORMAL_STATISTICS,medicalAbnormalStatisticsList);
// 减重 健康打卡数据今日查询
HealthSignDataVO weightLossDay = new HealthSignDataVO();
// 减重 健康打卡数据本月查询
HealthSignDataVO weightLossMonth = new HealthSignDataVO();
// 血压 健康打卡数据今日查询
HealthSignDataVO bloodPressureDay = new HealthSignDataVO();
// 血压 健康打卡数据本月查询
HealthSignDataVO bloodPressureMonth = new HealthSignDataVO();
// 血糖 健康打卡数据今日查询
HealthSignDataVO bloodSugarDay = new HealthSignDataVO();
// 血糖 健康打卡数据本月查询
HealthSignDataVO bloodSugarMonth = new HealthSignDataVO();
// 健康打卡今日数据查询
HealthSignStatVO healthSignToday = anYanClient.healthCheckStatistics(DateUtil.beginOfDay(today), DateUtil.endOfDay(today));
// 健康打卡本月数据查询
HealthSignStatVO healthSignMonth = anYanClient.healthCheckStatistics(DateUtil.beginOfMonth(today), DateUtil.endOfMonth(today));
// 减重 血压 血糖 三种数据整合存
HealthSignVO healthSign = new HealthSignVO();
redisClientUtil.set(MEDICAL,HEALTH_SIGN,healthSign);
}
healthSign.setWeightLossCountDay(Integer.valueOf(healthSignToday.getWeigtTotalCount()));
healthSign.setWeightLossAbnormalCountDay(Integer.valueOf(healthSignToday.getWeigtAbCount()));
healthSign.setBloodPressureCountDay(Integer.valueOf(healthSignToday.getBpTotalCount()));
healthSign.setBloodPressureAbnormalCountDay(Integer.valueOf(healthSignToday.getBpAbCount()));
healthSign.setBloodSugarCountDay(Integer.valueOf(healthSignToday.getBsTotalCount()));
healthSign.setBloodSugarAbnormalCountDay(Integer.valueOf(healthSignToday.getBsAbCount()));
healthSign.setWeightLossCountMonth(Integer.valueOf(healthSignMonth.getWeigtTotalCount()));
healthSign.setWeightLossAbnormalCountMonth(Integer.valueOf(healthSignMonth.getWeigtAbCount()));
healthSign.setBloodPressureCountMonth(Integer.valueOf(healthSignMonth.getBpTotalCount()));
healthSign.setBloodPressureAbnormalCountMonth(Integer.valueOf(healthSignMonth.getBpAbCount()));
healthSign.setBloodSugarCountMonth(Integer.valueOf(healthSignMonth.getBpTotalCount()));
healthSign.setBloodSugarAbnormalCountMonth(Integer.valueOf(healthSignMonth.getBpAbCount()));
public void runTest(){
// 体检人数统计
List<MedicalPeopleNumStatisticsVO> medicalPeopleNumStatisticsList = new ArrayList<>();
MedicalPeopleNumStatisticsVO statistics1 = new MedicalPeopleNumStatisticsVO();
statistics1.setHospitalName("克拉玛依市诚裕慈惠综合门诊部门有限公司");
statistics1.setCheckedCount(220);
statistics1.setTotalCount(550);
medicalPeopleNumStatisticsList.add(statistics1);
MedicalPeopleNumStatisticsVO statistics2 = new MedicalPeopleNumStatisticsVO();
statistics2.setHospitalName("昌吉州宝石花医院");
statistics2.setCheckedCount(156);
statistics2.setTotalCount(200);
medicalPeopleNumStatisticsList.add(statistics2);
MedicalPeopleNumStatisticsVO statistics3 = new MedicalPeopleNumStatisticsVO();
statistics3.setHospitalName("中心医院");
statistics3.setCheckedCount(86);
statistics3.setTotalCount(100);
medicalPeopleNumStatisticsList.add(statistics3);
MedicalPeopleNumStatisticsVO statistics4 = new MedicalPeopleNumStatisticsVO();
statistics4.setHospitalName("克拉玛依市中西医结合医院(市人民医院)");
statistics4.setCheckedCount(23);
statistics4.setTotalCount(30);
medicalPeopleNumStatisticsList.add(statistics4);
MedicalPeopleNumStatisticsVO statistics5 = new MedicalPeopleNumStatisticsVO();
statistics5.setHospitalName("新疆医院");
statistics5.setCheckedCount(15);
statistics5.setTotalCount(20);
medicalPeopleNumStatisticsList.add(statistics5);
redisClientUtil.set(MEDICAL,MEDICAL_PEOPLE_NUM_STATISTICS,medicalPeopleNumStatisticsList);
// 体检异常数据查询
MedicalAbnormalStatisticsVO abnormalStatistics = new MedicalAbnormalStatisticsVO();
abnormalStatistics.setTotalCount(18000);
abnormalStatistics.setCardiovaAbCount(2000);
abnormalStatistics.setCerebrovAbCount(1500);
abnormalStatistics.setCctaAbCount(200);
redisClientUtil.set(MEDICAL,MEDICAL_ABNORMAL_STATISTICS,abnormalStatistics);
// 减重 血压 血糖 三种数据整合存
HealthSignVO healthSign = new HealthSignVO();
healthSign.setWeightLossCountDay(86);
healthSign.setWeightLossAbnormalCountDay(6);
healthSign.setWeightLossCountMonth(956);
healthSign.setWeightLossAbnormalCountMonth(56);
healthSign.setBloodSugarCountDay(8);
healthSign.setBloodSugarAbnormalCountDay(5);
healthSign.setBloodSugarCountMonth(156);
healthSign.setBloodSugarAbnormalCountMonth(56);
healthSign.setBloodPressureCountDay(18);
healthSign.setBloodPressureAbnormalCountDay(3);
healthSign.setBloodPressureCountMonth(350);
healthSign.setBloodPressureAbnormalCountMonth(30);
redisClientUtil.set(MEDICAL,HEALTH_SIGN,healthSign);
}
@@ -7,8 +7,6 @@ import com.renkang.emergency.bean.response.XjDemandTypeFakerData;
import com.renkang.emergency.entity.TblHelpCenter;
import com.renkang.emergency.entity.TblHelpCentorVo;
import com.renkang.emergency.entity.TblUserHelpVo;
import com.renkang.emergency.entity.vo.DataDetailVO;
import com.renkang.emergency.largeScreen.service.ILargeScreenDataService;
import com.renkang.emergency.mapper.TblHelpCenterMapper;
import com.renkang.emergency.service.ITbHelpCenterService;
import lombok.extern.slf4j.Slf4j;
@@ -33,8 +31,6 @@ public class TblHelpCenterServiceImpl extends ServiceImpl<TblHelpCenterMapper, T
private EmergencyOrderApiService emergencyOrderApiService;
@Resource
private RedisUtil redisUtil;
@Resource
private ILargeScreenDataService screenDataService;
/**
* 主诉分类统计
@@ -44,38 +40,25 @@ public class TblHelpCenterServiceImpl extends ServiceImpl<TblHelpCenterMapper, T
*/
@Override
public List<TblHelpCentorVo> sicknessTypeStatistic(String sex, String depart,String centerId) {
Boolean enable = (Boolean) redisUtil.get(StrUtil.isNotEmpty(centerId) ? FakerDataConstant.XJ_DEMAND_TYPE_ENABLE + ":" + centerId : FakerDataConstant.XJ_DEMAND_TYPE_ENABLE);
if (enable != null && enable) {
List<TblHelpCentorVo> vo = XjDemandTypeFakerData(centerId);
if (vo != null) {
return vo;
}
}
List<TblHelpCentorVo> statistic = emergencyOrderApiService.getSicknessTypeStatistic(sex, depart);
for (TblHelpCentorVo tblHelpCentorVo : statistic) {
if (tblHelpCentorVo.getType().equals("0")) {
tblHelpCentorVo.setName("120");
} else if(tblHelpCentorVo.getType().equals("1")){
tblHelpCentorVo.setName("应急就医");
}else if (tblHelpCentorVo.getType().equals("2")){
tblHelpCentorVo.setName("急救联动");
}else {
tblHelpCentorVo.setName("其他");
}
}
// 获取假数据
DataDetailVO dataDetailVO = screenDataService.dataDetail(centerId, "31");
statistic.forEach(item->{
if (item.getType().equals("0")) {
if ("1".equals(dataDetailVO.getHospitalCountStatus())){
if (dataDetailVO.getHospitalCount().contains("+")){
item.setCount(item.getCount()+Integer.parseInt(dataDetailVO.getHospitalCount().replace("+", "").trim()));
}else {
item.setCount(Integer.parseInt(dataDetailVO.getHospitalCount().replace("+", "").trim()));
}
}
}
if (item.getType().equals("1")) {
if ("1".equals(dataDetailVO.getEmergencyCountStatus())){
if (dataDetailVO.getEmergencyCount().contains("+")){
item.setCount(item.getCount()+Integer.parseInt(dataDetailVO.getEmergencyCount().replace("+", "").trim()));
}else {
item.setCount(Integer.parseInt(dataDetailVO.getEmergencyCount().replace("+", "").trim()));
}
}
}
});
return statistic;
}
@@ -14,8 +14,6 @@ import com.renkang.emergency.entity.TblUserHelp;
import com.renkang.emergency.entity.TblUserHelpVo;
import com.renkang.emergency.entity.dto.PhoneListDTO;
import com.renkang.emergency.entity.dto.StatisticsDTO;
import com.renkang.emergency.entity.vo.DataDetailVO;
import com.renkang.emergency.largeScreen.service.ILargeScreenDataService;
import com.renkang.emergency.mapper.TblUserHelpMapper;
import com.renkang.emergency.service.ISysNotifySmsPhoneService;
import com.renkang.emergency.service.ITbUserHelpMacService;
@@ -72,8 +70,6 @@ public class TblUserHelpServiceImpl extends ServiceImpl<TblUserHelpMapper, TblUs
private ISysCache sysCache;
@Resource
private Validator validator;
@Resource
private ILargeScreenDataService screenDataService;
/**
* 服务详情数据
@@ -101,6 +97,13 @@ public class TblUserHelpServiceImpl extends ServiceImpl<TblUserHelpMapper, TblUs
*/
@Override
public TblUserHelpVo statisticsNew(StatisticsDTO dto) {
Boolean enable = (Boolean) redisUtil.get(StrUtil.isNotEmpty(dto.getCenterId()) ? FakerDataConstant.YC_SERVICE_ENABLE + ":" + dto.getCenterId() : FakerDataConstant.YC_SERVICE_ENABLE);
if (enable != null && enable) {
TblUserHelpVo vo = xianFakerDataNew(dto.getCenterId());
if (vo != null) {
return vo;
}
}
LambdaQueryWrapper<TblUserHelp> queryWrapper = new LambdaQueryWrapper<>();
if (StrUtil.isNotBlank(dto.getCondition()) && !"1".equals(dto.getCondition())) {
// 1:全部,2:年,3:月,4:周
@@ -119,70 +122,19 @@ public class TblUserHelpServiceImpl extends ServiceImpl<TblUserHelpMapper, TblUs
if (StrUtil.isNotBlank(dto.getCenterId())) {
queryWrapper.eq(TblUserHelp::getCenterId, dto.getCenterId());
}
TblUserHelpVo vo = new TblUserHelpVo();
// 获取云坐席数据
List<TblUserHelp> list = this.list(queryWrapper);
// 获取假数据
DataDetailVO dataDetailVO = screenDataService.dataDetail(dto.getCenterId(), "9");
// 呼入电话
if ("1".equals(dataDetailVO.getLatestCallStatus())) {
if (dataDetailVO.getLatestCall().contains("+")) {
vo.setGross(list.size() + Integer.parseInt(dataDetailVO.getLatestCall().replace("+", "").trim()));
} else {
vo.setGross(Integer.valueOf(dataDetailVO.getLatestCall().replace("+", "").trim()));
}
} else {
vo.setGross(list.size());
}
// 受理电话
if ("1".equals(dataDetailVO.getLatestAcceptCallStatus())) {
if (dataDetailVO.getLatestAcceptCall().contains("+")) {
int count = Math.toIntExact(list.stream().filter(a -> "1".equals(a.getStatus()) || "2".equals(a.getStatus())).count());
vo.setAlerdyreceive(count + Integer.parseInt(dataDetailVO.getLatestAcceptCall().replace("+", "").trim()));
} else {
vo.setAlerdyreceive(Integer.parseInt(dataDetailVO.getLatestAcceptCall().replace("+", "").trim()));
}
} else {
int count = Math.toIntExact(list.stream().filter(a -> "1".equals(a.getStatus()) || "2".equals(a.getStatus())).count());
vo.setAlerdyreceive(count);
}
// 突发重大伤病应急
if ("1".equals(dataDetailVO.getIllNumStatus())) {
if (dataDetailVO.getIllNum().contains("+")) {
int count = Math.toIntExact(list.stream().filter(a -> "2".equals(a.getType())).count());
vo.setJqqz(count + Integer.parseInt(dataDetailVO.getIllNum().replace("+", "").trim()));
} else {
vo.setJqqz(Integer.parseInt(dataDetailVO.getIllNum().replace("+", "").trim()));
}
} else {
int count = Math.toIntExact(list.stream().filter(a -> "2".equals(a.getType())).count());
vo.setJqqz(count);
}
// 重大伤病应急就医
if ("1".equals(dataDetailVO.getEmergencyNumStatus())) {
if (dataDetailVO.getEmergencyNum().contains("+")) {
int count = Math.toIntExact(list.stream().filter(a -> "1".equals(a.getType())).count());
vo.setDbjy(count + Integer.parseInt(dataDetailVO.getEmergencyNum().replace("+", "").trim()));
}else {
vo.setDbjy(Integer.parseInt(dataDetailVO.getEmergencyNum().replace("+", "").trim()));
}
}else {
int count = Math.toIntExact(list.stream().filter(a -> "1".equals(a.getType())).count());
vo.setDbjy(count);
}
// 呼入电话数量
vo.setGross(list.size());
// 受理电话数量
vo.setAlerdyreceive((int) list.stream().filter(a -> "1".equals(a.getStatus()) || "2".equals(a.getStatus())).count());
// 突发重大伤病应急数量
vo.setJqqz((int) list.stream().filter(a -> "2".equals(a.getType())).count());
// 重大伤病应急就医数量
vo.setDbjy((int) list.stream().filter(a -> "1".equals(a.getType())).count());
// 累计处置
Integer totalAcceptance = tblUserHelpMapper.getTotalAcceptance();
if ("1".equals(dataDetailVO.getTotalDisposalStatus())) {
if (dataDetailVO.getTotalDisposal().contains("+")) {
vo.setTotalacceptance(totalAcceptance + Integer.parseInt(dataDetailVO.getTotalDisposal().replace("+", "").trim()));
}else {
vo.setTotalacceptance(Integer.parseInt(dataDetailVO.getTotalDisposal().replace("+", "").trim()));
}
}else {
vo.setTotalacceptance(totalAcceptance);
}
vo.setTotalacceptance(tblUserHelpMapper.getTotalAcceptance());
return vo;
}
@@ -340,11 +292,7 @@ public class TblUserHelpServiceImpl extends ServiceImpl<TblUserHelpMapper, TblUs
vo.setDepartName("未知");
vo.setOrgName("未知");
vo.setTime(record.getHelpTime());
String phone = record.getOutMobile();
if (StrUtil.isNotBlank(phone) && phone.startsWith("0086")) { //新版网关去掉中国区号
phone = phone.substring(4);
}
vo.setPhone(phone);
vo.setPhone(record.getOutMobile());
LoginUserNew loginUserNew = userMap.get(record.getUserId());
if (loginUserNew != null) {
SysDepart thirdDepart = sysCache.getDepartByOrgCode(GlobalUtils.getThirdDepartOrgCode(loginUserNew.getOrgCode()));
@@ -1,15 +1,12 @@
FROM anapsix/alpine-java:8_server-jre_unlimited
MAINTAINER xxx@163.com
ENV PROFILE_NAME dev
ENV SERVER_PORT 7011
ENV NACOS_SERVER_ADDR nacos250:8848
ENV NACOS_USERNAME xjuser
ENV NACOS_PASSWORD Aa135790!123
ENV NACOS_NAMESPACE 3af98a54-4a44-4576-8e28-bf5781c0dccf
ENV NACOS_GROUP dev
ENV PROFILE_NAME=dev \
SERVER_PORT=7011 \
NACOS_SERVER_ADDR=nacos250:8848 \
NACOS_USERNAME=xjuser \
NACOS_PASSWORD=Aa135790!123 \
NACOS_NAMESPACE=3af98a54-4a44-4576-8e28-bf5781c0dccf \
NACOS_GROUP=dev
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
@@ -20,6 +17,6 @@ WORKDIR /health-emergency-start
EXPOSE 7011
ADD ./target/health-emergency-start.jar ./
COPY ./target/health-emergency-start-xj.jar ./
CMD sleep 1;java -Dfile.encoding=utf-8 -Djava.security.egd=file:/dev/./urandom -jar health-emergency-start.jar
CMD sleep 1;java -Dfile.encoding=utf-8 -Djava.security.egd=file:/dev/./urandom -jar health-emergency-start-xj.jar
@@ -9,6 +9,11 @@
<modelVersion>4.0.0</modelVersion>
<artifactId>health-emergency-start</artifactId>
<properties>
<maven.install.skip>true</maven.install.skip>
</properties>
<dependencies>
<!--微服务启动 starter-->
<dependency>
@@ -20,6 +25,7 @@
<dependency>
<groupId>com.renkang</groupId>
<artifactId>health-emergency-biz</artifactId>
<classifier>${biz-classifier}</classifier>
</dependency>
</dependencies>
-4
View File
@@ -13,10 +13,6 @@
<version>2.0.0</version>
<packaging>pom</packaging>
<properties>
<maven.install.skip>true</maven.install.skip>
</properties>
<!--项目子模块-->
<modules>
<module>health-emergency-api</module>
+1
View File
@@ -28,6 +28,7 @@
<dependency>
<groupId>org.jeecgframework.boot</groupId>
<artifactId>jeecg-boot-base-core</artifactId>
<classifier>xj</classifier>
</dependency>
</dependencies>
+21
View File
@@ -9,14 +9,17 @@
<modelVersion>4.0.0</modelVersion>
<artifactId>health-im-biz</artifactId>
<dependencies>
<dependency>
<groupId>com.renkang</groupId>
<artifactId>health-im-api</artifactId>
<classifier>xj</classifier>
</dependency>
<dependency>
<groupId>org.jeecgframework.boot</groupId>
<artifactId>jeecg-system-cloud-api</artifactId>
<classifier>xj</classifier>
</dependency>
<!--腾讯云即时对话pom-->
<dependency>
@@ -35,6 +38,7 @@
<dependency>
<groupId>com.renkang</groupId>
<artifactId>health-consultation-api</artifactId>
<classifier>xj</classifier>
</dependency>
</dependencies>
<build>
@@ -54,4 +58,21 @@
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>biz-obf</id>
<build>
<plugins>
<plugin>
<groupId>com.github.wvengen</groupId>
<artifactId>proguard-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
+38
View File
@@ -0,0 +1,38 @@
-keepattributes *Annotation*, Signature, InnerClasses, EnclosingMethod, Exceptions, MethodParameters
-keep @org.springframework.stereotype.Service class *
-keep @org.springframework.web.bind.annotation.RestController class *
-keep @org.springframework.context.annotation.Configuration class * { *; }
-keep @org.springframework.stereotype.Component class *
-keep class lombok.** { *; }
-keepclassmembers enum * { # 保留枚举结构
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keepclassmembers class * implements java.io.Serializable { *; }
-keepclassmembers class * {
@org.springframework.web.bind.annotation.*Mapping *;
}
-keepclassmembers class * {
private static synthetic java.lang.Object $deserializeLambda$(java.lang.invoke.SerializedLambda);
}
-keepclassmembers class * {
@lombok.Getter *;
@lombok.Setter *;
}
# MyBatis 专用保留规则
-keep interface com.renkang.**.mapper.** { *; }
-keep class com.renkang.**.entity.** { *; }
-keep class com.renkang.**.bean.** { *; }
-keep class com.renkang.**.model.** { *; }
-keep class com.renkang.**.vo.** { *; }
-keepparameternames
# 关闭优化和压缩(避免框架兼容性问题)
-dontshrink # 不删除未使用代码
-dontoptimize # 不优化字节码[5,6](@ref)
-keepdirectories
-dontusemixedcaseclassnames
-adaptclassstrings
# 混淆选项
-useuniqueclassmembernames # 成员名称唯一化
-ignorewarnings
+9 -12
View File
@@ -1,15 +1,12 @@
FROM anapsix/alpine-java:8_server-jre_unlimited
MAINTAINER xxx@163.com
ENV PROFILE_NAME dev
ENV SERVER_PORT 7012
ENV NACOS_SERVER_ADDR nacos250:8848
ENV NACOS_USERNAME xjuser
ENV NACOS_PASSWORD Aa135790!123
ENV NACOS_NAMESPACE 3af98a54-4a44-4576-8e28-bf5781c0dccf
ENV NACOS_GROUP dev
ENV PROFILE_NAME=dev \
SERVER_PORT=7012 \
NACOS_SERVER_ADDR=nacos250:8848 \
NACOS_USERNAME=xjuser \
NACOS_PASSWORD=Aa135790!123 \
NACOS_NAMESPACE=3af98a54-4a44-4576-8e28-bf5781c0dccf \
NACOS_GROUP=dev
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
@@ -20,6 +17,6 @@ WORKDIR /health-im-start
EXPOSE 7012
ADD ./target/health-im-start.jar ./
COPY ./target/health-im-start-xj.jar ./
CMD sleep 1;java -Dfile.encoding=utf-8 -Djava.security.egd=file:/dev/./urandom -jar health-im-start.jar
CMD sleep 1;java -Dfile.encoding=utf-8 -Djava.security.egd=file:/dev/./urandom -jar health-im-start-xj.jar
+6
View File
@@ -9,6 +9,11 @@
<modelVersion>4.0.0</modelVersion>
<artifactId>health-im-start</artifactId>
<properties>
<maven.install.skip>true</maven.install.skip>
</properties>
<dependencies>
<!--微服务启动 starter-->
<dependency>
@@ -20,6 +25,7 @@
<dependency>
<groupId>com.renkang</groupId>
<artifactId>health-im-biz</artifactId>
<classifier>${biz-classifier}</classifier>
</dependency>
</dependencies>
-4
View File
@@ -13,10 +13,6 @@
<version>2.0.0</version>
<packaging>pom</packaging>
<properties>
<maven.install.skip>true</maven.install.skip>
</properties>
<!--项目子模块-->
<modules>
<module>health-im-api</module>
+38 -5
View File
@@ -24,11 +24,19 @@
<groupId>com.renkang</groupId>
<artifactId>health-consultation-api</artifactId>
<version>${renkang.version}</version>
<classifier>xj</classifier>
</dependency>
<dependency>
<groupId>com.renkang</groupId>
<artifactId>health-consultation-biz</artifactId>
<version>${renkang.version}</version>
<classifier>xj</classifier>
</dependency>
<dependency>
<groupId>com.renkang</groupId>
<artifactId>health-consultation-biz</artifactId>
<version>${renkang.version}</version>
<classifier>obf</classifier>
</dependency>
<!-- emergency 应急模块-->
@@ -36,11 +44,19 @@
<groupId>com.renkang</groupId>
<artifactId>health-emergency-api</artifactId>
<version>${renkang.version}</version>
<classifier>xj</classifier>
</dependency>
<dependency>
<groupId>com.renkang</groupId>
<artifactId>health-emergency-biz</artifactId>
<version>${renkang.version}</version>
<classifier>xj</classifier>
</dependency>
<dependency>
<groupId>com.renkang</groupId>
<artifactId>health-emergency-biz</artifactId>
<version>${renkang.version}</version>
<classifier>obf</classifier>
</dependency>
<!-- IM IM通信模块-->
@@ -48,11 +64,19 @@
<groupId>com.renkang</groupId>
<artifactId>health-im-api</artifactId>
<version>${renkang.version}</version>
<classifier>xj</classifier>
</dependency>
<dependency>
<groupId>com.renkang</groupId>
<artifactId>health-im-biz</artifactId>
<version>${renkang.version}</version>
<classifier>xj</classifier>
</dependency>
<dependency>
<groupId>com.renkang</groupId>
<artifactId>health-im-biz</artifactId>
<version>${renkang.version}</version>
<classifier>obf</classifier>
</dependency>
<!-- watch 手表模块-->
@@ -60,27 +84,33 @@
<groupId>com.renkang</groupId>
<artifactId>health-watch-api</artifactId>
<version>${renkang.version}</version>
<classifier>xj</classifier>
</dependency>
<dependency>
<groupId>com.renkang</groupId>
<artifactId>health-watch-biz</artifactId>
<version>${renkang.version}</version>
<classifier>xj</classifier>
</dependency>
<dependency>
<groupId>com.renkang</groupId>
<artifactId>health-watch-biz</artifactId>
<version>${renkang.version}</version>
<classifier>obf</classifier>
</dependency>
<!-- modules 组件-->
<dependency>
<groupId>com.renkang</groupId>
<artifactId>data-center-api</artifactId>
<version>${renkang.version}</version>
<classifier>xj</classifier>
</dependency>
<dependency>
<groupId>com.renkang</groupId>
<artifactId>xj-anyan-api</artifactId>
<version>${renkang.version}</version>
</dependency>
<dependency>
<groupId>com.renkang</groupId>
<artifactId>font-resources</artifactId>
<version>${renkang.version}</version>
<classifier>xj</classifier>
</dependency>
<!-- starter -->
@@ -88,16 +118,19 @@
<groupId>com.renkang</groupId>
<artifactId>renkang-starter-batch</artifactId>
<version>${renkang.version}</version>
<classifier>xj</classifier>
</dependency>
<dependency>
<groupId>com.renkang</groupId>
<artifactId>renkang-starter-aspose-word</artifactId>
<version>${renkang.version}</version>
<classifier>xj</classifier>
</dependency>
<dependency>
<groupId>com.renkang</groupId>
<artifactId>renkang-test</artifactId>
<version>${renkang.version}</version>
<classifier>xj</classifier>
<scope>test</scope>
</dependency>
+1
View File
@@ -15,6 +15,7 @@
<dependency>
<groupId>org.jeecgframework.boot</groupId>
<artifactId>jeecg-boot-base-core</artifactId>
<classifier>xj</classifier>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
+25 -1
View File
@@ -10,26 +10,32 @@
</parent>
<artifactId>health-watch-biz</artifactId>
<dependencies>
<dependency>
<groupId>com.renkang</groupId>
<artifactId>health-watch-api</artifactId>
<classifier>xj</classifier>
</dependency>
<dependency>
<groupId>com.renkang</groupId>
<artifactId>health-emergency-api</artifactId>
<classifier>xj</classifier>
</dependency>
<dependency>
<groupId>org.jeecgframework.boot</groupId>
<artifactId>jeecg-system-cloud-api</artifactId>
<classifier>xj</classifier>
</dependency>
<dependency>
<groupId>com.renkang</groupId>
<artifactId>renkang-starter-batch</artifactId>
<classifier>xj</classifier>
</dependency>
<dependency>
<groupId>com.renkang</groupId>
<artifactId>data-center-api</artifactId>
<classifier>xj</classifier>
</dependency>
<dependency>
@@ -39,6 +45,7 @@
<dependency>
<groupId>com.renkang</groupId>
<artifactId>renkang-starter-aspose-word</artifactId>
<classifier>xj</classifier>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
@@ -55,6 +62,7 @@
<dependency>
<groupId>com.renkang</groupId>
<artifactId>font-resources</artifactId>
<classifier>xj</classifier>
</dependency>
</dependencies>
<build>
@@ -74,5 +82,21 @@
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>biz-obf</id>
<build>
<plugins>
<plugin>
<groupId>com.github.wvengen</groupId>
<artifactId>proguard-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
@@ -0,0 +1,41 @@
-keepattributes *Annotation*, Signature, InnerClasses, EnclosingMethod, Exceptions, MethodParameters
-keep @org.springframework.stereotype.Service class *
-keep @org.springframework.web.bind.annotation.RestController class *
-keep @org.springframework.context.annotation.Configuration class * { *; }
-keep @org.springframework.stereotype.Component class *
-keep class lombok.** { *; }
-keepclassmembers enum * { # 保留枚举结构
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keepclassmembers class * implements java.io.Serializable { *; }
-keepclassmembers class * {
@org.springframework.web.bind.annotation.*Mapping *;
}
-keepclassmembers class * {
private static synthetic java.lang.Object $deserializeLambda$(java.lang.invoke.SerializedLambda);
}
-keepclassmembers class * {
@lombok.Getter *;
@lombok.Setter *;
}
# MyBatis 专用保留规则
-keep interface com.renkang.**.mapper.** { *; }
-keep class com.renkang.**.mapper.provider** { *; }
-keep class com.renkang.**.entity.** { *; }
-keep class com.renkang.**.bean.** { *; }
-keep class com.renkang.**.model.** { *; }
-keep class com.renkang.**.vo.** { *; }
-keep class com.renkang.**.task.**
-keep class com.renkang.**.task.**Constants { *; }
-keepparameternames
# 关闭优化和压缩(避免框架兼容性问题)
-dontshrink # 不删除未使用代码
-dontoptimize # 不优化字节码[5,6](@ref)
-keepdirectories
-dontusemixedcaseclassnames
-adaptclassstrings
# 混淆选项
-useuniqueclassmembernames # 成员名称唯一化
-ignorewarnings
@@ -686,7 +686,7 @@ public class WatchMonitorDataServiceImpl extends ServiceImpl<WatchMonitorDataMap
WatchMonitorDataVo vo = new WatchMonitorDataVo();
BeanUtil.copyProperties(watchMonitorData, vo);
vo.setCreateTime(watchMonitorData.getCreateDate());
if (ObjUtil.isEmpty(watchMonitorData.getLonGd()) || ObjUtil.isEmpty(watchMonitorData.getLatGd())) {
if (StringUtils.hasLength(String.valueOf(watchMonitorData.getLon())) || StringUtils.hasLength(String.valueOf(watchMonitorData.getLat()))) {
String code = watchMonitorData.getOrgCode();
if (StringUtils.hasLength(code)) {
SysDepart sysDepart = orgMap.get(GlobalUtils.getThirdDepartOrgCode(code));
@@ -696,8 +696,8 @@ public class WatchMonitorDataServiceImpl extends ServiceImpl<WatchMonitorDataMap
}
}
} else {
vo.setLat(watchMonitorData.getLatGd());
vo.setLon(watchMonitorData.getLonGd());
vo.setLat(BigDecimal.valueOf(watchMonitorData.getLat()));
vo.setLon(BigDecimal.valueOf(watchMonitorData.getLon()));
}
LoginUserNew userNew = userMap.get(watchMonitorData.getBindUserId());
if (ObjectUtil.isNotNull(userNew)) {
@@ -358,7 +358,7 @@ public class WatchServiceImpl implements IWatchService {
//体温
WatchH5IndexItemVo tempVo = new WatchH5IndexItemVo();
tempVo.setWdType("temperature");
List<WatchH5IndexItemVo> list = Arrays.asList(sleepVo, stepsVo, hearRateVo, stressVo, spo2Vo, tempVo);
List<WatchH5IndexItemVo> list = Arrays.asList(sleepVo, stepsVo, hearRateVo, stepsVo, spo2Vo, tempVo);
return list.parallelStream()
.peek(itemVo -> {
itemVo.setWarnMin("0.0");
+9 -12
View File
@@ -1,15 +1,12 @@
FROM anapsix/alpine-java:8_server-jre_unlimited
MAINTAINER xxx@163.com
ENV PROFILE_NAME dev
ENV SERVER_PORT 7098
ENV NACOS_SERVER_ADDR nacos250:8848
ENV NACOS_USERNAME xjuser
ENV NACOS_PASSWORD Aa135790!123
ENV NACOS_NAMESPACE 3af98a54-4a44-4576-8e28-bf5781c0dccf
ENV NACOS_GROUP dev
ENV PROFILE_NAME=dev \
SERVER_PORT=7098 \
NACOS_SERVER_ADDR=nacos250:8848 \
NACOS_USERNAME=xjuser \
NACOS_PASSWORD=Aa135790!123 \
NACOS_NAMESPACE=3af98a54-4a44-4576-8e28-bf5781c0dccf \
NACOS_GROUP=dev
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
@@ -20,6 +17,6 @@ WORKDIR /health-watch-start
EXPOSE 7098
ADD ./target/health-watch-start.jar ./
COPY ./target/health-watch-start-xj.jar ./
CMD sleep 1;java -Dfile.encoding=utf-8 -Djava.security.egd=file:/dev/./urandom -jar health-watch-start.jar
CMD sleep 1;java -Dfile.encoding=utf-8 -Djava.security.egd=file:/dev/./urandom -jar health-watch-start-xj.jar
+6
View File
@@ -11,6 +11,10 @@
<artifactId>health-watch-start</artifactId>
<properties>
<maven.install.skip>true</maven.install.skip>
</properties>
<dependencies>
<!--微服务启动 starter-->
<dependency>
@@ -22,11 +26,13 @@
<dependency>
<groupId>com.renkang</groupId>
<artifactId>health-watch-biz</artifactId>
<classifier>${biz-classifier}</classifier>
</dependency>
<dependency>
<groupId>com.renkang</groupId>
<artifactId>renkang-test</artifactId>
<classifier>xj</classifier>
<scope>test</scope>
</dependency>
-4
View File
@@ -20,8 +20,4 @@
<version>2.0.0</version>
<packaging>pom</packaging>
<properties>
<maven.install.skip>true</maven.install.skip>
</properties>
</project>
@@ -4,6 +4,7 @@ import org.jeecg.modules.exports.entity.CommonExportsInfo;
import org.jeecg.modules.imports.entity.CommonImports;
import org.jeecg.modules.imports.entity.CommonImportsDetail;
import org.jeecg.modules.imports.entity.CommonImportsInfo;
import org.springframework.stereotype.Component;
import java.util.Collections;
import java.util.List;
@@ -11,6 +12,7 @@ import java.util.List;
/**
* @author Jiang Shunzhi
*/
@Component
public class ImportExportApiFallback implements ImportExportApi {
@@ -15,6 +15,7 @@
<dependency>
<groupId>org.jeecgframework.boot</groupId>
<artifactId>jeecg-system-cloud-api</artifactId>
<classifier>xj</classifier>
</dependency>
</dependencies>
+1
View File
@@ -20,6 +20,7 @@
<dependency>
<groupId>org.jeecgframework.boot</groupId>
<artifactId>jeecg-boot-base-core</artifactId>
<classifier>xj</classifier>
</dependency>
</dependencies>
</project>
+20 -1
View File
@@ -20,10 +20,12 @@
<dependency>
<groupId>com.renkang</groupId>
<artifactId>health-consultation-api</artifactId>
<classifier>xj</classifier>
</dependency>
<dependency>
<groupId>org.jeecgframework.boot</groupId>
<artifactId>jeecg-system-local-api</artifactId>
<classifier>xj</classifier>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
@@ -79,8 +81,25 @@
<dependency>
<groupId>com.renkang</groupId>
<artifactId>health-watch-api</artifactId>
<classifier>xj</classifier>
</dependency>
</dependencies>
<profiles>
<profile>
<id>biz-obf</id>
<build>
<plugins>
<plugin>
<groupId>com.github.wvengen</groupId>
<artifactId>proguard-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
@@ -0,0 +1,38 @@
-keepattributes *Annotation*, Signature, InnerClasses, EnclosingMethod, Exceptions, MethodParameters
-keep @org.springframework.stereotype.Service class *
-keep @org.springframework.web.bind.annotation.RestController class *
-keep @org.springframework.context.annotation.Configuration class * { *; }
-keep @org.springframework.stereotype.Component class *
-keep class lombok.** { *; }
-keepclassmembers enum * { # 保留枚举结构
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keepclassmembers class * implements java.io.Serializable { *; }
-keepclassmembers class * {
@org.springframework.web.bind.annotation.*Mapping *;
}
-keepclassmembers class * {
private static synthetic java.lang.Object $deserializeLambda$(java.lang.invoke.SerializedLambda);
}
-keepclassmembers class * {
@lombok.Getter *;
@lombok.Setter *;
}
# MyBatis 专用保留规则
-keep interface org.jeecg.**.mapper.** { *; }
-keep class org.jeecg.**.entity.** { *; }
-keep class org.jeecg.**.bean.** { *; }
-keep class org.jeecg.**.model.** { *; }
-keep class org.jeecg.**.vo.** { *; }
-keepparameternames
# 关闭优化和压缩(避免框架兼容性问题)
-dontshrink # 不删除未使用代码
-dontoptimize # 不优化字节码[5,6](@ref)
-keepdirectories
-dontusemixedcaseclassnames
-adaptclassstrings
# 混淆选项
-useuniqueclassmembernames # 成员名称唯一化
-ignorewarnings
@@ -30,12 +30,14 @@ public class WxConfig {
configImpl.setSecret(config.getSecret());
configMap.put(miniAppName, configImpl);
});
String defaultAppName = miniAppProperties.getDefaultAppName();
if (StrUtil.isBlank(defaultAppName) || !configMap.containsKey(defaultAppName)) {
defaultAppName = configMap.keySet().iterator().next();
}
WxMaService wxMaService = new WxMaServiceImpl();
wxMaService.setMultiConfigs(configMap, defaultAppName);
if (!configMap.isEmpty()) {
String defaultAppName = miniAppProperties.getDefaultAppName();
if (StrUtil.isBlank(defaultAppName) || !configMap.containsKey(defaultAppName)) {
defaultAppName = configMap.keySet().iterator().next();
}
wxMaService.setMultiConfigs(configMap, defaultAppName);
}
return wxMaService;
}
}
+9 -12
View File
@@ -1,15 +1,12 @@
FROM anapsix/alpine-java:8_server-jre_unlimited
MAINTAINER xxx@163.com
ENV PROFILE_NAME dev
ENV SERVER_PORT 7001
ENV NACOS_SERVER_ADDR nacos250:8848
ENV NACOS_USERNAME xjuser
ENV NACOS_PASSWORD Aa135790!123
ENV NACOS_NAMESPACE 3af98a54-4a44-4576-8e28-bf5781c0dccf
ENV NACOS_GROUP dev
ENV PROFILE_NAME=dev \
SERVER_PORT=7001 \
NACOS_SERVER_ADDR=nacos250:8848 \
NACOS_USERNAME=xjuser \
NACOS_PASSWORD=Aa135790!123 \
NACOS_NAMESPACE=3af98a54-4a44-4576-8e28-bf5781c0dccf \
NACOS_GROUP=dev
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
@@ -19,6 +16,6 @@ WORKDIR /jeecg-system-start
EXPOSE 7001
ADD ./target/jeecg-system-start.jar ./
COPY ./target/jeecg-system-start-xj.jar ./
CMD sleep 1;java -Dfile.encoding=utf-8 -Djava.security.egd=file:/dev/./urandom -jar jeecg-system-start.jar
CMD sleep 1;java -Dfile.encoding=utf-8 -Djava.security.egd=file:/dev/./urandom -jar jeecg-system-start-xj.jar
+5
View File
@@ -11,6 +11,10 @@
<artifactId>jeecg-system-start</artifactId>
<description>System项目微服务启动</description>
<properties>
<maven.install.skip>false</maven.install.skip>
</properties>
<dependencies>
<!-- 引入jeecg-boot-starter-cloud依赖 -->
<dependency>
@@ -21,6 +25,7 @@
<dependency>
<groupId>org.jeecgframework.boot</groupId>
<artifactId>jeecg-system-biz</artifactId>
<classifier>${biz-classifier}</classifier>
</dependency>
</dependencies>
-4
View File
@@ -12,10 +12,6 @@
<artifactId>jeecg-system</artifactId>
<packaging>pom</packaging>
<properties>
<maven.install.skip>true</maven.install.skip>
</properties>
<modules>
<module>jeecg-system-api</module>
<module>jeecg-system-biz</module>
+97
View File
@@ -15,6 +15,7 @@
</parent>
<properties>
<biz-classifier>xj</biz-classifier>
<!-- 基础配置 -->
<java.version>1.8</java.version>
<maven.compiler.source>8</maven.compiler.source>
@@ -257,6 +258,13 @@
<groupId>org.jeecgframework.boot</groupId>
<artifactId>jeecg-system-biz</artifactId>
<version>${renkang.version}</version>
<classifier>xj</classifier>
</dependency>
<dependency>
<groupId>org.jeecgframework.boot</groupId>
<artifactId>jeecg-system-biz</artifactId>
<version>${renkang.version}</version>
<classifier>obf</classifier>
</dependency>
<!-- jeecg tools -->
@@ -270,18 +278,21 @@
<groupId>org.jeecgframework.boot</groupId>
<artifactId>jeecg-boot-base-core</artifactId>
<version>${jeecgboot-renkang.version}</version>
<classifier>xj</classifier>
</dependency>
<!-- system 单体 api -->
<dependency>
<groupId>org.jeecgframework.boot</groupId>
<artifactId>jeecg-system-local-api</artifactId>
<version>${renkang.version}</version>
<classifier>xj</classifier>
</dependency>
<!-- system 微服务 api -->
<dependency>
<groupId>org.jeecgframework.boot</groupId>
<artifactId>jeecg-system-cloud-api</artifactId>
<version>${renkang.version}</version>
<classifier>xj</classifier>
</dependency>
<!--微服务启动依赖-->
@@ -646,6 +657,13 @@
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<classifier>xj</classifier> <!-- 设置classifier -->
</configuration>
</plugin>
<!-- 指定JDK编译版本 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
@@ -728,12 +746,90 @@
<configuration>
<!--设置为true,以便把本地的system的jar也包括进来-->
<includeSystemScope>true</includeSystemScope>
<!-- 可选:为可执行包设置新 classifier -->
<classifier>xj</classifier>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</profile>
<profile>
<id>biz-obf</id>
<properties>
<biz-classifier>obf</biz-classifier>
</properties>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>com.github.wvengen</groupId>
<artifactId>proguard-maven-plugin</artifactId>
<version>2.7.0</version>
<executions>
<execution>
<phase>package</phase> <!-- 在打包阶段执行混淆 -->
<goals>
<goal>proguard</goal>
</goals>
</execution>
</executions>
<configuration>
<putLibraryJarsInTempDir>true</putLibraryJarsInTempDir>
<injar>${project.build.finalName}-xj.jar</injar>
<outjar>${project.build.finalName}-obf.jar</outjar> <!-- 输出混淆后JAR -->
<obfuscate>true</obfuscate>
<libs>
<lib>${java.home}/lib/rt.jar</lib> <!-- JDK 核心库 -->
</libs>
<proguardInclude>proguard.cfg</proguardInclude> <!-- 模块独立规则 -->
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>3.6.1</version>
<executions>
<execution>
<id>attach-obf-jar</id>
<phase>package</phase>
<goals>
<goal>attach-artifact</goal>
</goals>
<configuration>
<artifacts>
<artifact>
<file>${project.build.directory}/${project.build.finalName}-obf.jar
</file>
<type>jar</type>
<classifier>obf</classifier> <!-- 关键:标识混淆JAR -->
</artifact>
</artifacts>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/dependency</outputDirectory>
<includeScope>provided</includeScope>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
</profile>
<profile>
<id>local</id>
<activation>
@@ -810,6 +906,7 @@
<artifactId>maven-jar-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<classifier>xj</classifier>
<archive>
<manifest>
<mainClass>${start-class}</mainClass>