作废验证

3.2.4.44
wyb 2 years ago
parent 25b1161928
commit f323a4ba5b

@ -1,5 +1,6 @@
package com.docus.server.report.api;
import com.docus.infrastructure.web.api.CommonResult;
import com.docus.server.report.api.dto.ReportDownTwoDto;
/**
@ -18,4 +19,6 @@ public interface TaskDistributeService {
* @return
*/
ReportDownTwoDto getNoViewTaskByCollectorId(String collectorId);
CommonResult<String> cancel(Long taskId);
}

@ -20,6 +20,8 @@ public class ReportHospitalTwoDto {
private String disDate;
@ApiModelProperty(value = "出院科室名称")
private String disDeptName;
@ApiModelProperty(value = "出院科室名称")
private String admissDeptName;
@ApiModelProperty(value = "卡号")
private String admissId;
}

@ -12,6 +12,8 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;
/**
*
@ -43,4 +45,19 @@ public class TaskDistributeServiceImpl implements TaskDistributeService {
return reportDownTwoDtoCommonResult.getData();
}
@Override
public CommonResult<String> cancel(Long taskId) {
String taskCancelUrl = applicationBusinessConfig.getGetTaskCancelUrl();
if (Func.isBlank(taskCancelUrl)) {
log.warn("任务作废地址未配置!");
return null;
}
Map<String, Object> param = new HashMap<>(1);
param.put("taskId", taskId);
log.info("任务作废 地址{},参数:{}",taskCancelUrl,param);
String resp = HttpUtil.post(taskCancelUrl, Func.toJson(param));
log.info("任务作废结果:{}",resp);
return Func.readJson(resp, new TypeReference<CommonResult<String>>() {
});
}
}

@ -17,4 +17,6 @@ public class ApplicationBusinessConfig {
private String downUrl;
@Value("${docus.task.getTaskUrl:}")
private String getTaskUrl;
@Value("${docus.task.taskCancelUrl:}")
private String getTaskCancelUrl;
}

@ -0,0 +1,58 @@
package com.docus.server.report.config;
import com.docus.core.util.Func;
import com.docus.server.report.util.TableJsonRead;
import lombok.Data;
import java.util.List;
public class TaskValidateConfig {
private final static String CONFIG_PATH = "data-config";
private final static String CONFIG_FILE_NAME = "task-validate-config.json";
public static void main(String[] args) {
CollectTaskConfig collectTaskConfig = getCollectTaskConfig("1");
System.out.println(collectTaskConfig);
}
public static CollectTaskConfig getCollectTaskConfig(String collectorId) {
TableJsonRead tableJsonRead = new TableJsonRead();
String configContent = tableJsonRead.ReadContent(CONFIG_PATH, CONFIG_FILE_NAME);
if (Func.isBlank(configContent)) {
return null;
}
List<CollectTaskConfig> configs = Func.parseJsonArray(configContent, CollectTaskConfig.class);
for (CollectTaskConfig config : configs) {
if (collectorId.equals(config.getCollectorId())) {
return config;
}
}
return null;
}
@Data
public static class CollectTaskConfig {
private String collectorId;
private List<CollectTaskFilterConfig> cancel;
}
@Data
public static class CollectTaskFilterConfig {
private ValidateConfig admissionDate;
private ValidateConfig dischargeDate;
private ValidateConfig admissionDepartment;
private ValidateConfig dischargeDepartment;
}
@Data
public static class ValidateConfig {
private String operator;
private String value;
private Integer dataType;
public boolean isEffective() {
return dataType != null && Func.isNotBlank(operator) && Func.isNotBlank(value);
}
}
}

@ -42,5 +42,11 @@ public class ApiTestController {
return CommonResult.success(taskDistributeService.getNoViewTaskByCollectorId(collectorId));
}
@ApiOperation(value = "作废任务测试")
@PostMapping("/cancelTaskTest")
public CommonResult<Object> getTaskTest(@RequestParam("taskId") Long taskId) {
return CommonResult.success(taskDistributeService.cancel(taskId));
}
}

@ -27,6 +27,12 @@ public class ReportDownController {
private ReportService reportService;
@Resource
ReportJob reportJob;
@ApiOperation(value = " 移动护理采集 job 测试")
@GetMapping("/sdRyNurseInsertSugarCollectJob")
public CommonResult<String> sdRyNurseInsertSugarCollectJob() {
reportJob.sdRyNurseInsertSugarCollectJob();
return CommonResult.success("成功");
}
@ApiOperation(value = " lis 检验 采集 job 测试")
@GetMapping("/sdRyLisCollectJob")

@ -0,0 +1,17 @@
package com.docus.server.report.enums;
import lombok.Getter;
@Getter
public enum DataTypeEnum {
NUMBER(1,"数字类型"),
STRING(2,"字符串"),
DATE_TIME(3,"时间 pattern=yyyy-MM-dd HH:mm:ss");
Integer code;
String desc;
DataTypeEnum(Integer code,String desc){
this.code=code;
this.desc=desc;
}
}

@ -0,0 +1,30 @@
package com.docus.server.report.enums;
import lombok.Getter;
/**
* @author wyb
*/
@Getter
public enum OperatorEnum {
EQ("=","eq","等于"),
NOT_EQ_1("!=","not","不等于"),
NOT_EQ_2("<>","not","不等于"),
GT(">","gt","大于"),
GE(">=","ge","大于等于"),
LT("<","lt","小于"),
LE("<=","le","小于等于");
String masterCode;
String slaveCode;
String desc;
OperatorEnum(String masterCode,String slaveCode,String desc){
this.masterCode=masterCode;
this.slaveCode=slaveCode;
this.desc=desc;
}
}

@ -4,12 +4,14 @@ import com.alibaba.fastjson.JSONObject;
import com.docus.core.util.Func;
import com.docus.infrastructure.core.exception.BaseException;
import com.docus.infrastructure.redis.service.IdService;
import com.docus.infrastructure.web.api.ResultCode;
import com.docus.server.collection.entity.TBasic;
import com.docus.server.collection.mapper.TBasicMapper;
import com.docus.server.report.api.ShunDePeopleService;
import com.docus.server.report.api.TaskDistributeService;
import com.docus.server.report.api.dto.*;
import com.docus.server.report.config.SdRyReportQueryConfig;
import com.docus.server.report.config.TaskValidateConfig;
import com.docus.server.report.config.ZdAssortConfig;
import com.docus.server.report.entity.AfJobTime;
import com.docus.server.report.entity.AfReportRecord;
@ -18,6 +20,7 @@ import com.docus.server.report.mapper.AfReportRecordMapper;
import com.docus.server.report.service.ReportService;
import com.docus.server.report.util.TableJsonRead;
import com.docus.server.report.util.XmlUtil;
import com.docus.server.report.validate.CollectTaskValidation;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@ -29,6 +32,7 @@ import java.io.File;
import java.io.FileWriter;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.*;
import java.util.stream.Collectors;
@ -133,10 +137,15 @@ public class ReportJob {
*
*/
@XxlJob("SdRyNurseInsertSugarCollectJob")
public void sdRyNurseInsertSugarCollectJob(){
public void sdRyNurseInsertSugarCollectJob() {
String reportQueryNurseInsertSugarCollectorId = sdRyReportQueryConfig.getReportQueryNurseInsertSugarCollectorId();
ReportDownTwoDto reportDownTwoDto = taskDistributeService.getNoViewTaskByCollectorId(reportQueryNurseInsertSugarCollectorId);
if (reportDownTwoDto==null) {
if (reportDownTwoDto == null) {
return;
}
if (isCancelTask(reportDownTwoDto, reportQueryNurseInsertSugarCollectorId)) {
log.warn("作废任务,{}", reportDownTwoDto);
taskDistributeService.cancel(reportDownTwoDto.getTasks().get(0).getTaskId());
return;
}
String patientId = reportDownTwoDto.getPatient().getPatientId();
@ -146,7 +155,7 @@ public class ReportJob {
SdNurseInsertSugarRequest sdNurseInsertSugarRequest = new SdNurseInsertSugarRequest(inpatientNo, admissTimes.toString(), traceCode);
SdNurseInsertSugarResponse sdNurseInsertSugarResponse = shunDePeopleService.getNurseInsertSugarReport(sdNurseInsertSugarRequest);
List<SdNurseInsertSugarResponse.NisData> nurseInsertSugarReportList = sdNurseInsertSugarResponse.getData();
if(Func.isNotEmpty(nurseInsertSugarReportList)){
if (Func.isNotEmpty(nurseInsertSugarReportList)) {
ReportDto reportDto;
for (SdNurseInsertSugarResponse.NisData nisReport : nurseInsertSugarReportList) {
reportDto = new ReportDto();
@ -155,7 +164,7 @@ public class ReportJob {
reportDto.setDownUrl(nisReport.getUrl());
reportDto.setFileTitle(nisReport.getForm_name());
reportDto.setSerialnum(nisReport.getForm_id());
reportDto.setAssortId(ZdAssortConfig.getZdAssortId(nisReport.getForm_name(),sdRyReportQueryConfig.getReportQueryNurseInsertSugarDefaultAssortType()));
reportDto.setAssortId(ZdAssortConfig.getZdAssortId(nisReport.getForm_name(), sdRyReportQueryConfig.getReportQueryNurseInsertSugarDefaultAssortType()));
reportDto.setAdmisstimes(admissTimes);
reportDto.setInpatientNo(inpatientNo);
reportDto.setPatientId(patientId);
@ -167,6 +176,83 @@ public class ReportJob {
}
}
/**
*
*
* @param taskDTO
* @param collectorId
* @return
*/
private boolean isCancelTask(ReportDownTwoDto taskDTO, String collectorId) {
TaskValidateConfig.CollectTaskConfig collectTaskConfig = TaskValidateConfig.getCollectTaskConfig(collectorId);
if (collectTaskConfig != null && Func.isNotEmpty(collectTaskConfig.getCancel())) {
// 满足其中一个即可
for (TaskValidateConfig.CollectTaskFilterConfig cancelCollectTaskConfig : collectTaskConfig.getCancel()) {
if (isCancelTask(taskDTO, cancelCollectTaskConfig)) {
return true;
}
}
}
return false;
}
private boolean isCancelTask(ReportDownTwoDto taskDTO, TaskValidateConfig.CollectTaskFilterConfig cancelCollectTaskConfig) {
TaskValidateConfig.ValidateConfig admissionDateConfig = cancelCollectTaskConfig.getAdmissionDate();
TaskValidateConfig.ValidateConfig dischargeDateConfig = cancelCollectTaskConfig.getDischargeDate();
TaskValidateConfig.ValidateConfig amissionDepartmentConfig = cancelCollectTaskConfig.getAdmissionDepartment();
TaskValidateConfig.ValidateConfig dischargeDepartmenConfig = cancelCollectTaskConfig.getDischargeDepartment();
CollectTaskValidation validation;
// 是否验证了,每个验证不通过都会返回记录是否进入了验证进入了且验证未返回代表全部通过了改变标记为true返回。
boolean validated=false;
// 验证入院时间
if (admissionDateConfig != null && admissionDateConfig.isEffective()) {
validated=true;
validation = new CollectTaskValidation.CollectTaskAdmissionDateValidation();
CollectTaskValidation.ValidationResult validationResult = validation.validate(taskDTO.getHospitals().get(0).getAdmissDate(), admissionDateConfig);
if (validationResult.getCode() == ResultCode.FAILED) {
return false;
}
}
// 验证出院时间
if (dischargeDateConfig != null && dischargeDateConfig.isEffective()) {
validated=true;
validation = new CollectTaskValidation.CollectTaskDischargeDateValidation();
CollectTaskValidation.ValidationResult validationResult = validation.validate(taskDTO.getHospitals().get(0).getDisDate(), dischargeDateConfig);
if (validationResult.getCode() == ResultCode.FAILED) {
return false;
}
}
// 验证入院科室
if (amissionDepartmentConfig != null && amissionDepartmentConfig.isEffective()) {
validated=true;
validation = new CollectTaskValidation.CollectTaskAdmissionDepartmentValidation();
CollectTaskValidation.ValidationResult validationResult = validation.validate(taskDTO.getHospitals().get(0).getAdmissDeptName(), amissionDepartmentConfig);
if (validationResult.getCode() == ResultCode.FAILED) {
return false;
}
}
// 验证出院科室
if (dischargeDepartmenConfig != null && dischargeDepartmenConfig.isEffective()) {
validated=true;
validation = new CollectTaskValidation.CollectTaskDischargeDepartmentValidation();
CollectTaskValidation.ValidationResult validationResult = validation.validate(taskDTO.getHospitals().get(0).getDisDeptName(), dischargeDepartmenConfig);
if (validationResult.getCode() == ResultCode.FAILED) {
return false;
}
}
return validated;
}
private void validateAdmissionDate(String admissDate, String collectorId) {
if (Func.isBlank(admissDate)) {
throw new BaseException("任务患者出院时间为空!");
}
LocalDateTime admissDateTime = Func.parseDateTime(admissDate);
}
public List<ReportDto> collectLisReport(TBasic tBasic) {
List<ReportDto> reportDtoList = getLisReportList(tBasic);
@ -350,7 +436,8 @@ public class ReportJob {
public static void main(String[] args) {
System.out.println(createBase64SaveDir());
}
private List<ReportDto> parseQuerySdRyInspectReport(String respBody, TBasic tBasic) {
private List<ReportDto> parseQuerySdRyInspectReport(String respBody, TBasic tBasic) {
JSONObject jsonObject = Func.readJson(respBody, JSONObject.class);
Object resultCode = jsonObject.get("ResultCode");
String successCode = "0";
@ -388,13 +475,13 @@ public class ReportJob {
// 确定报告唯一 报告单号+申请单号
reportDto.setSerialnum(examReportSn + requestSn);
reportDto.setFileTitle(reportName);
if (config != null && Func.isNotBlank(config.getHandlerSystem())) {
if (config != null && Func.isNotBlank(config.getHandlerSystem())) {
String handlerSystem = config.getHandlerSystem().toLowerCase();
List<String> handlerSystems = Arrays.asList(handlerSystem.split(","));
if(!handlerSystems.contains(updateBy.toLowerCase())){
if (!handlerSystems.contains(updateBy.toLowerCase())) {
continue;
}
}else {
} else {
continue;
}
@ -426,9 +513,9 @@ public class ReportJob {
}
private String saveBase64(String base64){
String dir=createBase64SaveDir();
String base64File = dir + File.separator+idService.getDateSeq() + ".txt";
private String saveBase64(String base64) {
String dir = createBase64SaveDir();
String base64File = dir + File.separator + idService.getDateSeq() + ".txt";
try (FileWriter fileWriter = new FileWriter(base64File);
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter)) {
bufferedWriter.write(base64);
@ -440,18 +527,18 @@ public class ReportJob {
return base64File;
}
private static String createBase64SaveDir(){
private static String createBase64SaveDir() {
try {
File current = new File(".");
String canonicalPath = current.getCanonicalPath();
String dirPath = canonicalPath + File.separator + "base64"+File.separator+Func.formatDate(new Date());
String dirPath = canonicalPath + File.separator + "base64" + File.separator + Func.formatDate(new Date());
File dirFile = new File(dirPath);
if (!dirFile.exists()) {
dirFile.mkdirs();
}
return dirPath;
return dirPath;
} catch (Exception e) {
String temp = "C:\\docus\\base64\\"+Func.formatDate(new Date());
String temp = "C:\\docus\\base64\\" + Func.formatDate(new Date());
File file1 = new File(temp);
if (!file1.exists()) {
file1.mkdirs();
@ -459,6 +546,7 @@ public class ReportJob {
return temp;
}
}
private static String parsePacsGetBase64(String xml) {
try {
XmlUtil xmlUtil = XmlUtil.of(xml);

@ -0,0 +1,169 @@
package com.docus.server.report.validate;
import com.docus.infrastructure.web.api.ResultCode;
import com.docus.server.report.config.TaskValidateConfig;
import com.docus.server.report.enums.DataTypeEnum;
import com.docus.server.report.enums.OperatorEnum;
import lombok.Data;
import javax.validation.ValidationException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public abstract class CollectTaskValidation {
private final static DateTimeFormatter DATETIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
/**
*
*
* @param text
* @param validateConfig
*/
public abstract ValidationResult validate(String text, TaskValidateConfig.ValidateConfig validateConfig);
/**
*
*/
public static ValidationResult validateDate(String text, TaskValidateConfig.ValidateConfig validateConfig) {
String operator = validateConfig.getOperator().toLowerCase();
String message="日期验证,操作符号:" + operator + ",操作表达:" + text + ".compareTo(" + validateConfig.getValue() + ")";
LocalDateTime localDateTime1 = LocalDateTime.parse(text, DATETIME_FORMATTER);
LocalDateTime localDateTime2 = LocalDateTime.parse(validateConfig.getValue(), DATETIME_FORMATTER);
int compareToResult = localDateTime1.compareTo(localDateTime2);
return getValidationResultByCompareToResult(operator,compareToResult,message);
}
private static ValidationResult getValidationResultByCompareToResult(String operator,int compareToResult,String message){
if (OperatorEnum.EQ.getMasterCode().equals(operator) || OperatorEnum.EQ.getSlaveCode().equals(operator)) {
if (compareToResult == 0) {
return new ValidationResult(ResultCode.SUCCESS, message + " 通过");
}
return new ValidationResult(ResultCode.FAILED, message + " 不通过"); }
if (OperatorEnum.NOT_EQ_1.getMasterCode().equals(operator) || OperatorEnum.NOT_EQ_1.getSlaveCode().equals(operator)) {
if (compareToResult != 0) {
return new ValidationResult(ResultCode.SUCCESS, message + " 通过");
}
return new ValidationResult(ResultCode.FAILED, message + " 不通过"); }
if (OperatorEnum.NOT_EQ_2.getMasterCode().equals(operator) || OperatorEnum.NOT_EQ_2.getSlaveCode().equals(operator)) {
if (compareToResult != 0) {
return new ValidationResult(ResultCode.SUCCESS, message + " 通过");
}
return new ValidationResult(ResultCode.FAILED, message + " 不通过"); }
if (OperatorEnum.GT.getMasterCode().equals(operator) || OperatorEnum.GT.getSlaveCode().equals(operator)) {
if (compareToResult > 0) {
return new ValidationResult(ResultCode.SUCCESS, message + " 通过");
}
return new ValidationResult(ResultCode.FAILED, message + " 不通过"); }
if (OperatorEnum.GE.getMasterCode().equals(operator) || OperatorEnum.GE.getSlaveCode().equals(operator)) {
if (compareToResult >= 0) {
return new ValidationResult(ResultCode.SUCCESS, message + " 通过");
}
return new ValidationResult(ResultCode.FAILED, message + " 不通过"); }
if (OperatorEnum.LT.getMasterCode().equals(operator) || OperatorEnum.LT.getSlaveCode().equals(operator)) {
if (compareToResult < 0) {
return new ValidationResult(ResultCode.SUCCESS, message + " 通过");
}
return new ValidationResult(ResultCode.FAILED, message + " 不通过"); }
if (OperatorEnum.LE.getMasterCode().equals(operator) || OperatorEnum.LE.getSlaveCode().equals(operator)) {
if (compareToResult <= 0) {
return new ValidationResult(ResultCode.SUCCESS, message + " 通过");
}
return new ValidationResult(ResultCode.FAILED, message + " 不通过");
}
throw new ValidationException("未知的操作符号!");
}
/**
*
*/
public static ValidationResult validateString(String text, TaskValidateConfig.ValidateConfig validateConfig) {
String operator = validateConfig.getOperator().toLowerCase();
int compareToResult = text.compareTo(validateConfig.getValue());
String message = "字符串验证,操作符号:" + operator + ",操作表达:" + text + ".compareTo(" + validateConfig.getValue() + ")";
return getValidationResultByCompareToResult(operator,compareToResult,message);
}
/**
*
*/
public static ValidationResult validateNumber(String text, TaskValidateConfig.ValidateConfig validateConfig) {
throw new RuntimeException("任务验证数字类型待开发!");
}
@Data
public static class ValidationResult {
private ResultCode code;
private String message;
public ValidationResult() {
}
public ValidationResult(ResultCode code, String message) {
this.code = code;
this.message = message;
}
}
public static class CollectTaskAdmissionDateValidation extends CollectTaskValidation {
@Override
public ValidationResult validate(String text, TaskValidateConfig.ValidateConfig validateConfig) {
if (DataTypeEnum.DATE_TIME.getCode().equals(validateConfig.getDataType())) {
return validateDate(text, validateConfig);
}
return new ValidationResult(ResultCode.FAILED,"日期验证,数据类型不为"+DataTypeEnum.DATE_TIME.getCode());
}
}
public static class CollectTaskDischargeDateValidation extends CollectTaskValidation {
@Override
public ValidationResult validate(String text, TaskValidateConfig.ValidateConfig validateConfig) {
if (DataTypeEnum.DATE_TIME.getCode().equals(validateConfig.getDataType())) {
return validateDate(text, validateConfig);
}
return new ValidationResult(ResultCode.FAILED,"日期验证,数据类型不为"+DataTypeEnum.DATE_TIME.getCode());
}
}
public static class CollectTaskAdmissionDepartmentValidation extends CollectTaskValidation {
@Override
public ValidationResult validate(String text, TaskValidateConfig.ValidateConfig validateConfig) {
if (DataTypeEnum.STRING.getCode().equals(validateConfig.getDataType())) {
return validateString(text, validateConfig);
}
return new ValidationResult(ResultCode.FAILED,"字符串验证,数据类型不为"+DataTypeEnum.STRING.getCode());
}
}
public static class CollectTaskDischargeDepartmentValidation extends CollectTaskValidation {
@Override
public ValidationResult validate(String text, TaskValidateConfig.ValidateConfig validateConfig) {
if (DataTypeEnum.STRING.getCode().equals(validateConfig.getDataType())) {
return validateString(text, validateConfig);
}
return new ValidationResult(ResultCode.FAILED,"字符串验证,数据类型不为"+DataTypeEnum.STRING.getCode());
}
}
public static void main(String[] args) {
CollectTaskValidation admissionDepartmentValidation = new CollectTaskValidation.CollectTaskAdmissionDateValidation();
TaskValidateConfig.ValidateConfig validateConfig = new TaskValidateConfig.ValidateConfig();
validateConfig.setValue("2023-04-30 00:00:00");
validateConfig.setDataType(DataTypeEnum.DATE_TIME.getCode());
validateConfig.setOperator("=");
System.out.println(admissionDepartmentValidation.validate("2023-05-01 00:00:00", validateConfig));
validateConfig.setOperator("<=");
System.out.println(admissionDepartmentValidation.validate("2023-05-01 00:00:00", validateConfig));
validateConfig.setOperator(">=");
System.out.println(admissionDepartmentValidation.validate("2023-05-01 00:00:00", validateConfig));
validateConfig.setOperator("not");
System.out.println(admissionDepartmentValidation.validate("2023-05-01 00:00:00", validateConfig));
}
}

@ -73,7 +73,7 @@ sdry:
# 移动护理报告地址
nurseInsertSugar:
collectorId: -100
collectorId: 1
url: http://192.168.0.200:8688/crHesb/hospital/common
interval: 1000
defaultAssortType: hl-other
@ -90,6 +90,7 @@ docus:
downurl: http://localhost:9291/api/downplatform/report
task:
getTaskUrl: http://localhost:9296/api/noviewtask/GetTask
taskCancelUrl: http://localhost:9296/api/collector/task/cancel
mybatis-plus:
configuration:
map-underscore-to-camel-case: true

Loading…
Cancel
Save