diff --git a/src/main/java/com/docus/demo/entity/PowerDept.java b/src/main/java/com/docus/demo/entity/PowerDept.java new file mode 100644 index 0000000..fafa543 --- /dev/null +++ b/src/main/java/com/docus/demo/entity/PowerDept.java @@ -0,0 +1,56 @@ +package com.docus.demo.entity; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +/** + *

+ * 科室 + *

+ * + * @author jiashi + * @since 2021-04-15 + */ +@Data +@ApiModel(value = "PowerDept对象", description = "科室") +public class PowerDept { + + @ApiModelProperty(value = "科室id") + private Long deptId; + + @ApiModelProperty(value = "科室代码") + private String deptCode; + + @ApiModelProperty(value = "科室名称") + private String deptName; + + @ApiModelProperty(value = "字典id") + private Integer dictId; + + @ApiModelProperty(value = "是否有效") + private Integer effective; + + @ApiModelProperty(value = "创建时间") + private Date createDate; + + @ApiModelProperty(value = "创建人") + private String creater; + + @ApiModelProperty(value = "更新时间") + private Date updateDate; + + @ApiModelProperty(value = "更新人") + private String updater; + + @ApiModelProperty(value = "备注") + private String remark; + + @ApiModelProperty(value = "临床科室排序") + private Integer sort; + + @ApiModelProperty(value = "0:非临床科室,1:临床科室") + private Integer type; +} diff --git a/src/main/java/com/docus/demo/facade/BasicDeptService.java b/src/main/java/com/docus/demo/facade/BasicDeptService.java new file mode 100644 index 0000000..d9316ce --- /dev/null +++ b/src/main/java/com/docus/demo/facade/BasicDeptService.java @@ -0,0 +1,18 @@ +package com.docus.demo.facade; + +import com.docus.demo.entity.Tbasic; + +import java.util.List; + +/** + * @author YongBin Wen + * @date 2024/10/25 14:40 + */ +public interface BasicDeptService { + /** + * 处理基础数据的科室,根据科室名从科室表获取科室信息填入科室编码,如果没有则新增一个科室 + * @param tbasicList 基础数据 + */ + + void handleDept(List tbasicList); +} diff --git a/src/main/java/com/docus/demo/mapper/mysql/PowerDeptMapper.java b/src/main/java/com/docus/demo/mapper/mysql/PowerDeptMapper.java new file mode 100644 index 0000000..6619873 --- /dev/null +++ b/src/main/java/com/docus/demo/mapper/mysql/PowerDeptMapper.java @@ -0,0 +1,15 @@ +package com.docus.demo.mapper.mysql; + + +import com.docus.demo.entity.PowerDept; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface PowerDeptMapper { + + + List list(); + + int insert(@Param("list") List addPowerDeptList); +} diff --git a/src/main/java/com/docus/demo/service/BasicDeptServiceImpl.java b/src/main/java/com/docus/demo/service/BasicDeptServiceImpl.java new file mode 100644 index 0000000..fd33357 --- /dev/null +++ b/src/main/java/com/docus/demo/service/BasicDeptServiceImpl.java @@ -0,0 +1,88 @@ +package com.docus.demo.service; + +import com.docus.demo.entity.PowerDept; +import com.docus.demo.entity.Tbasic; +import com.docus.demo.facade.BasicDeptService; +import com.docus.demo.mapper.mysql.PowerDeptMapper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.*; +import java.util.concurrent.locks.ReentrantLock; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @author YongBin Wen + * @date 2024/10/25 14:40 + */ +@Slf4j +@Service +public class BasicDeptServiceImpl implements BasicDeptService { + @Resource + private PowerDeptMapper powerDeptMapper; + private final ReentrantLock HANDLE_DEPT_LOCK=new ReentrantLock(); + @Override + public void handleDept(List tbasicList) { + HANDLE_DEPT_LOCK.lock(); + try { + List powerDeptList= powerDeptMapper.list(); + Map powerDeptMap = powerDeptList.stream().collect(Collectors.toMap(PowerDept::getDeptName, Function.identity())); + long maxDeptId=0L; + Optional maxDeptIdOp = powerDeptList.stream().map(PowerDept::getDeptId).max(Comparator.naturalOrder()); + if (maxDeptIdOp.isPresent()) { + maxDeptId=maxDeptIdOp.get(); + } + List< PowerDept> addPowerDeptList = new ArrayList<>(); + for (Tbasic tbasic : tbasicList) { + if(tbasic.getAdmissDeptName() == null){ + tbasic.setAdmissDeptName(""); + } + if(tbasic.getDisDeptName() == null){ + tbasic.setDisDeptName(""); + } + + if (!powerDeptMap.containsKey(tbasic.getAdmissDeptName())) { + PowerDept powerDept = new PowerDept(); + maxDeptId=maxDeptId+1; + powerDept.setDeptId(maxDeptId); + powerDept.setDeptCode(String.valueOf(maxDeptId)); + powerDept.setDeptName(tbasic.getAdmissDeptName()); + + powerDeptMap.put(powerDept.getDeptName(),powerDept); + addPowerDeptList.add(powerDept); + } + + if (!powerDeptMap.containsKey(tbasic.getDisDeptName())) { + PowerDept powerDept = new PowerDept(); + maxDeptId=maxDeptId+1; + powerDept.setDeptId(maxDeptId); + powerDept.setDeptCode(String.valueOf(maxDeptId)); + powerDept.setDeptName(tbasic.getDisDeptName()); + + powerDeptMap.put(powerDept.getDeptName(),powerDept); + addPowerDeptList.add(powerDept); + } + + PowerDept powerDept1 = powerDeptMap.get(tbasic.getAdmissDeptName()); + tbasic.setAdmissDept(powerDept1.getDeptCode()); + PowerDept powerDept2 = powerDeptMap.get(tbasic.getDisDeptName()); + tbasic.setAdmissDept(powerDept2.getDeptCode()); + + } + + if(!addPowerDeptList.isEmpty()){ + powerDeptMapper.insert(addPowerDeptList); + } + + }catch (Exception ex){ + log.error("处理基础数据科室信息异常,"+ex.getMessage(),ex); + } finally { + HANDLE_DEPT_LOCK.unlock(); + } + + } + + +} diff --git a/src/main/java/com/docus/demo/service/SyncBasicDataImpl.java b/src/main/java/com/docus/demo/service/SyncBasicDataImpl.java index cb3b6a2..629c60c 100644 --- a/src/main/java/com/docus/demo/service/SyncBasicDataImpl.java +++ b/src/main/java/com/docus/demo/service/SyncBasicDataImpl.java @@ -13,6 +13,7 @@ import com.docus.demo.entity.sqlserver.CardInfo; import com.docus.demo.entity.sqlserver1.Tdiagnose; import com.docus.demo.entity.sqlserver1.Toperation; import com.docus.demo.entity.sqlserver1.Tpatientvisit; +import com.docus.demo.facade.BasicDeptService; import com.docus.demo.facade.ISyncBasicDataService; import com.docus.demo.mapper.mysql.BasicMapper; import com.docus.demo.mapper.mysql.ScanAssortMapper; @@ -40,6 +41,8 @@ public class SyncBasicDataImpl implements ISyncBasicDataService { private TcardMapper tcardMapper; @Autowired private ScanAssortMapper scanAssortMapper; + @Autowired + private BasicDeptService basicDeptService; private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); // private final ExecutorService executor = Executors.newFixedThreadPool(7); @@ -87,6 +90,7 @@ public class SyncBasicDataImpl implements ISyncBasicDataService { List tbasicSubList = this.getTbasicSubList(tbasicList); log.info("tbasicSubList"+tbasicSubList.size()); //数据入库 + basicDeptService.handleDept(tbasicList); basicMapper.insertOrUpdateByid(tbasicList); basicMapper.insertOrUpdateTbasicSub(tbasicSubList); log.info("数据库入库"+tbasicList.size() +"子表"+tbasicSubList.size()); @@ -285,6 +289,7 @@ public class SyncBasicDataImpl implements ISyncBasicDataService { for (int i = 0; i < tbasicList.size(); i += batchSize) { int endIndex = Math.min(i + batchSize, tbasicList.size()); List sublist = tbasicList.subList(i, endIndex); + basicDeptService.handleDept(tbasicList); //数据入库 basicMapper.insertOrUpdateByid(sublist); log.info("数据入库"+sublist.size()); @@ -298,6 +303,8 @@ public class SyncBasicDataImpl implements ISyncBasicDataService { return CommonResult.success("同步成功"); } + + private List getInsertTbasic(List oldBasicList, List cardInfoList) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); List cardInfos = cardInfoList.stream().filter(f -> { diff --git a/src/main/java/com/docus/demo/service/SyncBasicFileImpl.java b/src/main/java/com/docus/demo/service/SyncBasicFileImpl.java index b2088fa..4d268d8 100644 --- a/src/main/java/com/docus/demo/service/SyncBasicFileImpl.java +++ b/src/main/java/com/docus/demo/service/SyncBasicFileImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONArray; import com.docus.demo.dto.*; import com.docus.demo.entity.*; +import com.docus.demo.facade.BasicDeptService; import com.docus.demo.facade.ISyncBasicFileService; import com.docus.demo.mapper.mysql.BasicMapper; import com.docus.demo.mapper.mysql.ScanAssortMapper; @@ -37,6 +38,8 @@ public class SyncBasicFileImpl implements ISyncBasicFileService { private PictureMapper pictureMapper; @Resource private ScanAssortMapper scanAssortMapper; + @Resource + private BasicDeptService basicDeptService; private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); @Value("${savePath}") @@ -233,6 +236,7 @@ public class SyncBasicFileImpl implements ISyncBasicFileService { //组织基础数据 Tbasic addTbasic = this.getTbasic(fileUploadJpg); tbasics.add(addTbasic); + basicDeptService.handleDept(tbasics); tbasic = addTbasic; basicMapper.addBasic(tbasics); log.info("新增PatientId为:" + patientId + "的基础数据成功"); diff --git a/src/main/resources/mapper/mysql/PowerDeptMapper.xml b/src/main/resources/mapper/mysql/PowerDeptMapper.xml new file mode 100644 index 0000000..fb2456b --- /dev/null +++ b/src/main/resources/mapper/mysql/PowerDeptMapper.xml @@ -0,0 +1,18 @@ + + + + + + INSERT INTO docus_system.power_dept + (dept_id, dept_code, dept_name,effective) + VALUES + + (#{item.deptId},#{item.deptCode},#{item.deptName},1) + + + + \ No newline at end of file