diff --git a/pom.xml b/pom.xml index f3f44d9..bfd690f 100644 --- a/pom.xml +++ b/pom.xml @@ -11,6 +11,10 @@ docus-mzzy-collector + + com.docus + docus-knife4j-starter + diff --git a/src/main/java/com/docus/server/collection/controller/MzZyHisController.java b/src/main/java/com/docus/server/collection/controller/MzZyHisController.java new file mode 100644 index 0000000..047c047 --- /dev/null +++ b/src/main/java/com/docus/server/collection/controller/MzZyHisController.java @@ -0,0 +1,48 @@ +package com.docus.server.collection.controller; + +import com.docus.core.util.Func; +import com.docus.infrastructure.web.api.CommonResult; +import com.docus.infrastructure.web.api.ResultCode; +import com.docus.server.collection.converter.FirstPageCheckoutConverter; +import com.docus.server.collection.dto.FirstPageCheckoutInDTO; +import com.docus.server.collection.dto.FirstPageCheckoutRequest; +import com.docus.server.collection.service.MzZyHisService; +import com.docus.server.collection.validator.RequestValidator; +import com.docus.server.collection.validator.ValidateResult; +import com.docus.server.collection.validator.impl.FirstPageCheckoutRequestValidator; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +@Api("梅州中西HIS相关接口") +@Slf4j +@RestController +@RequestMapping("/his") +public class MzZyHisController { + @Resource + private MzZyHisService mzZyHisService; + + @ApiOperation("首页签出") + @PostMapping("/firstPageCheckout") + public CommonResult firstPageCheckout(@RequestBody FirstPageCheckoutRequest firstPageCheckoutRequest) { + log.info("首页签出接口参数:{}", Func.toJson(firstPageCheckoutRequest)); + // 验证数据 + RequestValidator validator = new FirstPageCheckoutRequestValidator(firstPageCheckoutRequest); + ValidateResult validateResult = validator.validate(); + if (validateResult.getResultCode() == ResultCode.FAILED) { + return CommonResult.failed(validateResult.getMsg()); + } + // 转换数据,业务处理 + FirstPageCheckoutConverter converter = new FirstPageCheckoutConverter(firstPageCheckoutRequest); + FirstPageCheckoutInDTO checkoutInDTO = converter.req2dto(); + mzZyHisService.firstPageCheckout(checkoutInDTO); + return CommonResult.success("操作成功!"); + } + +} diff --git a/src/main/java/com/docus/server/collection/converter/FirstPageCheckoutConverter.java b/src/main/java/com/docus/server/collection/converter/FirstPageCheckoutConverter.java new file mode 100644 index 0000000..7b48961 --- /dev/null +++ b/src/main/java/com/docus/server/collection/converter/FirstPageCheckoutConverter.java @@ -0,0 +1,40 @@ +package com.docus.server.collection.converter; + +import com.docus.server.collection.dto.FirstPageCheckoutInDTO; +import com.docus.server.collection.dto.FirstPageCheckoutRequest; + +import java.util.Objects; + +/** + * 首页签出转换 + * + * @author WYBDEV + */ +public class FirstPageCheckoutConverter { + private FirstPageCheckoutRequest firstPageCheckoutRequest; + + public FirstPageCheckoutConverter(FirstPageCheckoutRequest firstPageCheckoutRequest) { + this.firstPageCheckoutRequest = firstPageCheckoutRequest; + } + + public FirstPageCheckoutConverter() { + + } + + /** + * 请求参数转service处理参数 + * + * @return service处理参数 + */ + public FirstPageCheckoutInDTO req2dto() { + FirstPageCheckoutRequest firstPageCheckoutRequest = this.firstPageCheckoutRequest; + if (Objects.isNull(firstPageCheckoutRequest)) { + return null; + } + FirstPageCheckoutInDTO dto = new FirstPageCheckoutInDTO(); + dto.setSyncType(firstPageCheckoutRequest.getSyncType()); + dto.setPatientInfo(firstPageCheckoutRequest.getPatientInfo()); + dto.setSysId(firstPageCheckoutRequest.getSysId()); + return dto; + } +} diff --git a/src/main/java/com/docus/server/collection/dto/FirstPageCheckoutInDTO.java b/src/main/java/com/docus/server/collection/dto/FirstPageCheckoutInDTO.java new file mode 100644 index 0000000..75ccad1 --- /dev/null +++ b/src/main/java/com/docus/server/collection/dto/FirstPageCheckoutInDTO.java @@ -0,0 +1,23 @@ +package com.docus.server.collection.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author wyb + */ +@Data +@ApiModel("首页签出业务处理参数") +public class FirstPageCheckoutInDTO { + @ApiModelProperty("患者基础信息") + private PatientInfoDTO patientInfo; + + @ApiModelProperty("同步类型:ALL 或者 BY_SYS_ID") + private FirstPageCheckoutRequest.SyncType syncType; + + @ApiModelProperty("系统id") + private List sysId; +} diff --git a/src/main/java/com/docus/server/collection/dto/FirstPageCheckoutRequest.java b/src/main/java/com/docus/server/collection/dto/FirstPageCheckoutRequest.java new file mode 100644 index 0000000..1c5fc5a --- /dev/null +++ b/src/main/java/com/docus/server/collection/dto/FirstPageCheckoutRequest.java @@ -0,0 +1,35 @@ +package com.docus.server.collection.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author wyb + */ +@Data +@ApiModel("首页签出请求参数") +public class FirstPageCheckoutRequest { + + @ApiModelProperty("患者基础信息") + private PatientInfoDTO patientInfo; + + @ApiModelProperty("同步类型:ALL 或者 BY_SYS_ID") + private SyncType syncType; + + @ApiModelProperty("系统id") + private List sysId; + + public enum SyncType{ + /** + * 全部同步 + */ + ALL, + /** + * 根据系统id同步 + */ + BY_SYS_ID + } +} diff --git a/src/main/java/com/docus/server/collection/dto/PatientInfoDTO.java b/src/main/java/com/docus/server/collection/dto/PatientInfoDTO.java new file mode 100644 index 0000000..c59dba7 --- /dev/null +++ b/src/main/java/com/docus/server/collection/dto/PatientInfoDTO.java @@ -0,0 +1,32 @@ +package com.docus.server.collection.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * + * @author 患者信息 + */ +@ApiModel("患者信息") +@Data +public class PatientInfoDTO { + + @ApiModelProperty("院方住院流水号,无纸化归档系统记账号") + private String inpatientNo; + + @ApiModelProperty("住院号") + private String patientNo; + + @ApiModelProperty("住院次数") + private Integer inTimes; + + @ApiModelProperty("患者姓名") + private String name; + + @ApiModelProperty("入院时间,格式:yyyy-MM-dd HH:mm:ss") + private String inDate; + + @ApiModelProperty("出院时间,格式:yyyy-MM-dd HH:mm:ss") + private String outDate; +} diff --git a/src/main/java/com/docus/server/collection/service/MzZyHisService.java b/src/main/java/com/docus/server/collection/service/MzZyHisService.java new file mode 100644 index 0000000..28398c1 --- /dev/null +++ b/src/main/java/com/docus/server/collection/service/MzZyHisService.java @@ -0,0 +1,15 @@ +package com.docus.server.collection.service; + +import com.docus.server.collection.dto.FirstPageCheckoutInDTO; + +/** + * @author wyb + */ +public interface MzZyHisService { + /** + * 首页签出 + * + * @param checkoutInDTO 首页签出参数 + */ + void firstPageCheckout(FirstPageCheckoutInDTO checkoutInDTO); +} diff --git a/src/main/java/com/docus/server/collection/service/impl/MzZyHisServiceImpl.java b/src/main/java/com/docus/server/collection/service/impl/MzZyHisServiceImpl.java new file mode 100644 index 0000000..d61b7ee --- /dev/null +++ b/src/main/java/com/docus/server/collection/service/impl/MzZyHisServiceImpl.java @@ -0,0 +1,19 @@ +package com.docus.server.collection.service.impl; + +import com.docus.server.collection.dto.FirstPageCheckoutInDTO; +import com.docus.server.collection.service.MzZyHisService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * @author wyb + */ +@Slf4j +@Service +public class MzZyHisServiceImpl implements MzZyHisService { + @Override + public void firstPageCheckout(FirstPageCheckoutInDTO dto) { + System.out.println(dto); + // todo 首页签出处理逻辑 + } +} diff --git a/src/main/java/com/docus/server/collection/util/DateTimeUtil.java b/src/main/java/com/docus/server/collection/util/DateTimeUtil.java new file mode 100644 index 0000000..7b91b9d --- /dev/null +++ b/src/main/java/com/docus/server/collection/util/DateTimeUtil.java @@ -0,0 +1,27 @@ +package com.docus.server.collection.util; + + +import cn.hutool.core.date.DatePattern; +import com.docus.core.util.Func; + +/** + * 日期时间的工具类 + * @author wyb + */ +public class DateTimeUtil { + + /** + * 是否是一个标准的时间格式,yyyy-MM-dd HH:mm:ss" 字符串 + * @param dateTimeStr 时间格式字符串 + * @return 能否解析成标准的时间格式 + */ + public static boolean isNormDateTime(String dateTimeStr) { + try { + Func.parseDate(dateTimeStr, DatePattern.NORM_DATETIME_PATTERN); + return true; + } catch (Exception ex) { + return false; + } + } + +} diff --git a/src/main/java/com/docus/server/collection/validator/RequestValidator.java b/src/main/java/com/docus/server/collection/validator/RequestValidator.java new file mode 100644 index 0000000..21ed861 --- /dev/null +++ b/src/main/java/com/docus/server/collection/validator/RequestValidator.java @@ -0,0 +1,13 @@ +package com.docus.server.collection.validator; + +/** + * 请求参数验证 + * @author WYBDEV + */ +public interface RequestValidator { + /** + * 验证 + * @return 返回验证结果 + */ + ValidateResult validate(); +} diff --git a/src/main/java/com/docus/server/collection/validator/ValidateResult.java b/src/main/java/com/docus/server/collection/validator/ValidateResult.java new file mode 100644 index 0000000..3141e00 --- /dev/null +++ b/src/main/java/com/docus/server/collection/validator/ValidateResult.java @@ -0,0 +1,30 @@ +package com.docus.server.collection.validator; + +import com.docus.infrastructure.web.api.ResultCode; +import lombok.Data; + +/** + * @author WYBDEV + */ +@Data +public class ValidateResult { + /** + * 验证结果代码 + */ + private ResultCode resultCode; + /** + * 验证结果信息 + */ + private String msg; + public ValidateResult(ResultCode resultCode,String msg){ + this.resultCode=resultCode; + this.msg=msg; + } + public static ValidateResult success(String msg){ + return new ValidateResult(ResultCode.SUCCESS,msg); + } + + public static ValidateResult failed(String msg){ + return new ValidateResult(ResultCode.FAILED,msg); + } +} diff --git a/src/main/java/com/docus/server/collection/validator/impl/FirstPageCheckoutRequestValidator.java b/src/main/java/com/docus/server/collection/validator/impl/FirstPageCheckoutRequestValidator.java new file mode 100644 index 0000000..af54cd6 --- /dev/null +++ b/src/main/java/com/docus/server/collection/validator/impl/FirstPageCheckoutRequestValidator.java @@ -0,0 +1,64 @@ +package com.docus.server.collection.validator.impl; + +import com.docus.core.util.Func; +import com.docus.server.collection.dto.FirstPageCheckoutRequest; +import com.docus.server.collection.dto.PatientInfoDTO; +import com.docus.server.collection.util.DateTimeUtil; +import com.docus.server.collection.validator.RequestValidator; +import com.docus.server.collection.validator.ValidateResult; + +import java.util.Objects; + +/** + * 首页签出请求验证者 + * + * @author wyb + */ +public class FirstPageCheckoutRequestValidator implements RequestValidator { + private final FirstPageCheckoutRequest request; + + public FirstPageCheckoutRequestValidator(FirstPageCheckoutRequest request) { + this.request = request; + } + + @Override + public ValidateResult validate() { + FirstPageCheckoutRequest request = this.request; + FirstPageCheckoutRequest.SyncType syncType = request.getSyncType(); + if (Objects.isNull(syncType)) { + return ValidateResult.failed("同步类型不能为空!"); + } + if (syncType == FirstPageCheckoutRequest.SyncType.BY_SYS_ID && Func.isEmpty(request.getSysId())) { + return ValidateResult.failed("同步类型为BY_SYS_ID,系统id不能为空!"); + } + PatientInfoDTO patientInfo = request.getPatientInfo(); + if (Objects.isNull(patientInfo)) { + return ValidateResult.failed("患者基础数据不能为空!"); + } + String jzh = patientInfo.getInpatientNo(); + String inPatientNo = patientInfo.getPatientNo(); + String name = patientInfo.getName(); + Integer inTimes = patientInfo.getInTimes(); + String inDate = patientInfo.getInDate(); + String outDate = patientInfo.getOutDate(); + if (Objects.isNull(inTimes) || inTimes <= 0) { + return ValidateResult.failed("患者基础数据住院次数不能为空,且大于0!"); + } + if (Func.isBlank(jzh)) { + return ValidateResult.failed("患者基础数据住院流水号不能为空!"); + } + if (Func.isBlank(inPatientNo)) { + return ValidateResult.failed("患者基础数据住院号不能为空!"); + } + if (Func.isBlank(name)) { + return ValidateResult.failed("患者基础数据姓名不能为空!"); + } + if (Func.isBlank(inDate) || !DateTimeUtil.isNormDateTime(inDate)) { + return ValidateResult.failed("患者基础数据入院日期不能为空且按照格式:yyyy-MM-dd HH:mm:ss"); + } + if (Func.isBlank(outDate) || !DateTimeUtil.isNormDateTime(outDate)) { + return ValidateResult.failed("患者基础数据出院日期不能为空且按照格式:yyyy-MM-dd HH:mm:ss"); + } + return ValidateResult.success("验证通过"); + } +} diff --git a/src/main/resources/bootstrap.yml b/src/main/resources/bootstrap.yml index 006f376..fd918f8 100644 --- a/src/main/resources/bootstrap.yml +++ b/src/main/resources/bootstrap.yml @@ -30,7 +30,7 @@ spring: redis: host: redis.docus.cn -# password: 123456 + password: JSdocus@702 cloud: nacos: discovery: