diff --git a/src/main/java/com/docus/server/AppRunBootstrap.java b/src/main/java/com/docus/server/AppRunBootstrap.java index 819f01f..69e6003 100644 --- a/src/main/java/com/docus/server/AppRunBootstrap.java +++ b/src/main/java/com/docus/server/AppRunBootstrap.java @@ -6,12 +6,14 @@ import lombok.extern.slf4j.Slf4j; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.jms.annotation.EnableJms; @Slf4j @SpringBootApplication(scanBasePackages ={"com.docus","com.neusoft"}) @EnableJms +@EnableFeignClients @MapperScan("com.docus.server.**.mapper") public class AppRunBootstrap { public static void main(String[] args) { diff --git a/src/main/java/com/docus/server/collection/entity/CollectsysDictionary.java b/src/main/java/com/docus/server/collection/entity/CollectsysDictionary.java new file mode 100644 index 0000000..febeff2 --- /dev/null +++ b/src/main/java/com/docus/server/collection/entity/CollectsysDictionary.java @@ -0,0 +1,24 @@ +package com.docus.server.collection.entity; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + + +@Data + +public class CollectsysDictionary implements Serializable { + + @ApiModelProperty(value = "id 雪花算法") + private Long id; + + + @ApiModelProperty(value = "采集来源系统编号") + private String sysCode; + + @ApiModelProperty(value = "采集来源系统名称") + private String sysName; + +} diff --git a/src/main/java/com/docus/server/collection/feign/dto/CompensateTasRequest.java b/src/main/java/com/docus/server/collection/feign/dto/CompensateTasRequest.java new file mode 100644 index 0000000..b0abeed --- /dev/null +++ b/src/main/java/com/docus/server/collection/feign/dto/CompensateTasRequest.java @@ -0,0 +1,43 @@ +package com.docus.server.collection.feign.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.util.List; + +/** + * 任务补偿参数 + * + * @author wyb + */ +@Data +@ApiModel("任务补偿下发参数") +public class CompensateTasRequest { + /** + * 病案主键 + */ + @ApiModelProperty(value = "病案主键",required = true) + @NotNull(message = "病案主键不能为空") + @Size(min = 1,message = "病案主键不能为空") + private List patientIds; + /** + * 采集器类型标识 + */ + @ApiModelProperty(value = "采集器id",required = true) + @NotNull(message = "采集采集器id不能为空") + @Size(min = 1,message = "采集采集器id不能为空") + private List collectorIds; + /** + * 队列优先级 + */ + @NotNull(message = "队列优先级不能为空") + @Min(value = 1,message = "队列优先级不能小于1") + @Max(value = 10,message = "队列优先级不能大于10") + @ApiModelProperty(value = "队列优先级",required = true) + private Integer priority; +} diff --git a/src/main/java/com/docus/server/collection/feign/service/CollectTaskService.java b/src/main/java/com/docus/server/collection/feign/service/CollectTaskService.java new file mode 100644 index 0000000..94e969c --- /dev/null +++ b/src/main/java/com/docus/server/collection/feign/service/CollectTaskService.java @@ -0,0 +1,23 @@ +package com.docus.server.collection.feign.service; + +import com.docus.infrastructure.web.api.CommonResult; +import com.docus.server.collection.feign.dto.CompensateTasRequest; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +/** + * @author wyb + */ +@FeignClient(url = "${docus.url.compensate-task-url}",name = "view-collect-task") +public interface CollectTaskService { + + /** + *无视图采集,采集任务补偿 + * @param dto 参数 + * @return 结果 + */ + @RequestMapping(value = "api/NoViewCollect/compensateTask",method = RequestMethod.POST) + CommonResult compensateTask(@RequestBody CompensateTasRequest dto); +} 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 index 325cfda..a6b85cf 100644 --- a/src/main/java/com/docus/server/collection/service/impl/MzZyHisServiceImpl.java +++ b/src/main/java/com/docus/server/collection/service/impl/MzZyHisServiceImpl.java @@ -1,25 +1,117 @@ package com.docus.server.collection.service.impl; +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.config.SystemMappingConfig; import com.docus.server.collection.dto.FirstPageCheckoutInDTO; +import com.docus.server.collection.entity.CollectsysDictionary; +import com.docus.server.collection.enums.FileSyncMethod; +import com.docus.server.collection.feign.dto.CompensateTasRequest; +import com.docus.server.collection.feign.service.CollectTaskService; import com.docus.server.collection.service.MzZyHisService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + /** * @author wyb */ @Slf4j @Service public class MzZyHisServiceImpl implements MzZyHisService { + @Resource + private CollectTaskService collectTaskService; + @Override public void firstPageCheckout(FirstPageCheckoutInDTO dto) { System.out.println(dto); - throw new RuntimeException(""); + String patientId = null; +// throw new RuntimeException(""); //验证基础数据是否存在 // if(!false){ // throw new BaseException("系统未找到患者数据!"); // // } + // 取得映射结果后的无纸化系统id + List collectorIds = systemMappingCollectorIds(dto); + // 进行任务补偿 + CompensateTasRequest request = new CompensateTasRequest(); + request.setPriority(4); + request.setPatientIds(Collections.singletonList(patientId)); + request.setCollectorIds(collectorIds); + CommonResult commonResult = collectTaskService.compensateTask(request); + // 抛出异常,进行参数持久 + if (commonResult.getCode().equals(ResultCode.FAILED.getCode())) { + throw new RuntimeException(commonResult.getMsg()); + } // todo 首页签出处理逻辑 } + + private List systemMappingCollectorIds(FirstPageCheckoutInDTO dto) { + // 取得无纸化系统所有的采集系统配置 + List wzhAllCollectSys = getWzhAllCollectSys(); + if (Func.isEmpty(wzhAllCollectSys)) { + throw new RuntimeException("文件同步,未配置系统!"); + } + List wzhAllCollectSysCode = wzhAllCollectSys.stream() + .map(CollectsysDictionary::getSysCode) + .distinct().collect(Collectors.toList()); + // 文件同步方式,如果是按照系统,则匹配系统,否则取无纸化系统所有的采集系统配置 + if (dto.getSyncMethod() == FileSyncMethod.BY_SYS_ID) { + // 医院的系统id + List hospSysIds = dto.getSysId(); + // 映射之后的系统id + List collectorIds = new ArrayList<>(); + // 映射配置读取 + SystemMappingConfig instance = SystemMappingConfig.getInstance(); + List systemMappingList = instance.getSystemMappingList(); + validateSystemMappingConfig(systemMappingList); + // 按照医院的id分组 + Map> mappingGroupHosp = systemMappingList.stream().collect(Collectors.groupingBy(SystemMappingConfig.SystemMapping::getHospital)); + for (String hospSysId : hospSysIds) { + List mappingListByHospSysId = mappingGroupHosp.get(hospSysId); + if (Func.isEmpty(mappingListByHospSysId)) { + throw new RuntimeException("系统id:" + hospSysId + " 配置映射失败!"); + } + // 映射无纸化系统,验证是否都属于无纸化系统 + List mappingWzhSys = mappingListByHospSysId.stream().map(SystemMappingConfig.SystemMapping::getWzh).collect(Collectors.toList()); + if (wzhAllCollectSysCode.containsAll(mappingWzhSys)) { + collectorIds.addAll(mappingWzhSys); + continue; + } + throw new RuntimeException("系统id:" + hospSysId + " 配置映射错误!"); + } + // 去重 + return collectorIds.stream().distinct().collect(Collectors.toList()); + } + return wzhAllCollectSysCode; + } + + private List getWzhAllCollectSys() { + // todo 获取采集器id大全 + return new ArrayList<>(); + } + + /** + * 验证配置的映射 不为空,且每个映射对象不为空 + * + * @param mappings + */ + private void validateSystemMappingConfig(List mappings) { + if (Func.isEmpty(mappings)) { + throw new RuntimeException("系统映射配置错误!"); + } + for (SystemMappingConfig.SystemMapping mapping : mappings) { + if (Func.isBlank(mapping.getHospital()) || Func.isBlank(mapping.getWzh())) { + throw new RuntimeException("系统映射配置错误!"); + } + } + } } diff --git a/src/main/resources/bootstrap.yml b/src/main/resources/bootstrap.yml index fd918f8..69ffbe1 100644 --- a/src/main/resources/bootstrap.yml +++ b/src/main/resources/bootstrap.yml @@ -49,6 +49,9 @@ docus: user: # 用户默认密码 defpwd: fd29cd53ec12616e5f36b77d4afffbff + url: + # 采集任务补偿地址 + compensate-task-url: http://localhost:9295/ mybatis-plus: configuration: