陈昶聿
5 小时以前 6e397c664037b898b5e9d9955da1d953089e679e
ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/CollectHISServiceImpl.java
@@ -9,6 +9,7 @@
import com.ruoyi.quartz.service.ICollectHISService;
import com.smartor.domain.*;
import com.smartor.mapper.*;
import com.smartor.service.IPatMedOuthospService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ArrayUtils;
@@ -35,7 +36,7 @@
    private SysUser2Mapper sysUser2Mapper;
    @Autowired
    private SysUserRole2Mapper sysUserRoleMapper;
    private IPatMedOuthospService patMedOuthospService;
    @Autowired
    private SysDept2Mapper sysDept2Mapper;
@@ -73,7 +74,11 @@
    @Value("${spring.profiles.active}")
    private String active;
    @Autowired
    private PatMedOperationMapper patMedOperationMapper;
    @Autowired
    private PatMedOperationItemMapper patMedOperationItemMapper;
    @Override
    public List<PatArchive> selectPatArchiveList(PatArchive patArchive) {
@@ -114,6 +119,7 @@
            //同步住院病人信息
            List<Map<String, Object>> syncTemp = syncList.stream().filter(row -> row.get("syncName").equals("pat_med_inhosp")).collect(Collectors.toList());
            if (syncTemp.size() > 0) {
                log.info("startTime:" + syncTemp.get(0).get("startTime") + ", endTime: ", endTime);
                count += syncMedInhosp(syncTemp.get(0).get("startTime") + "", endTime);
                utilsMapper.updateSql("update sys_sync_time set startTime='" + endTime + "' where syncName='pat_med_inhosp' ");
            }
@@ -125,6 +131,12 @@
                utilsMapper.updateSql("update sys_sync_time set startTime='" + endTime + "' where syncName='pat_med_outhosp' ");
            }
            //同步手术信息
            syncTemp = syncList.stream().filter(row -> row.get("syncName").equals("pat_med_operation")).collect(Collectors.toList());
            if (syncTemp.size() > 0) {
                count += syncOper(syncTemp.get(0).get("startTime") + "", endTime);
                utilsMapper.updateSql("update sys_sync_time set startTime='" + endTime + "' where syncName='pat_med_operation' ");
            }
        } else {
            log.info("同步任务时间sys_sync_time表中没有需要同步的任务");
@@ -173,7 +185,8 @@
     * @param
     * @return
     */
    private Integer syncMedInhosp(String startTime, String endTime) {
    @Override
    public Integer syncMedInhosp(String startTime, String endTime) {
        Integer count = 0;
        PatMedInhosp patMedInhosp = new PatMedInhosp();
        patMedInhosp.setLastStartTime(startTime);
@@ -291,7 +304,7 @@
                        patMedOuthosp1.setCampusid(patMedOuthosp1.getOrgid());
                        patMedOuthosp1.setOrgid("1");
                    }
                    count += patMedOuthospMapper.updatePatMedOuthosp(patMedOuthosp1);
                    count += patMedOuthospService.updatePatMedOuthosp(patMedOuthosp1);
                } else {
                    patMedOuthosp1.setCreateTime(new Date());
                    //市一 院区id对应orgid,机构id为默认的1
@@ -299,13 +312,156 @@
                        patMedOuthosp1.setCampusid(patMedOuthosp1.getOrgid());
                        patMedOuthosp1.setOrgid("1");
                    }
                    count += patMedOuthospMapper.insertPatMedOuthosp(patMedOuthosp1);
                    count += patMedOuthospService.insertPatMedOuthosp(patMedOuthosp1);
                }
            } catch (Exception ex) {
                log.info("同步出入院:" + ex.getMessage());
            }
        }
        return count;
    }
    /**
     * 同步手术信息
     *
     * @param
     * @return
     */
    @Override
    public Integer syncOper(String startTime, String endTime) {
        Integer count = 0;
        PatMedOperation patMedOperation = new PatMedOperation();
        patMedOperation.setLastStartTime(startTime);
        patMedOperation.setLastEndTime(endTime);
        List<PatMedOperation> patMedOperations = chMapper.selectOperList(patMedOperation);
        Map<String, Long> patIdHisMap = buildOperationPatIdHisMap(patMedOperations);
        log.info("同步手术信息数量" + patMedOperations.size());
        for (PatMedOperation operation : patMedOperations) {
            try {
                Long patId = patIdHisMap.get(operation.getPatidHis());
                if (patId == null) {
                    patId = syncSinglePatient(operation.getPatidHis());
                    if (patId != null) {
                        patIdHisMap.put(operation.getPatidHis(), patId);
                    }
                }
                if (patId != null) {
                    operation.setPatid(patId);
                }
                PatMedOperation oper = new PatMedOperation();
                oper.setOpid(operation.getOpid());
                List<PatMedOperation> patMedOperations1 = patMedOperationMapper.selectPatMedOperationList(oper);
                if (CollectionUtils.isNotEmpty(patMedOperations1)) {
                    operation.setId(patMedOperations1.get(0).getId());
                    operation.setUpdateTime(new Date());
                    count += patMedOperationMapper.updatePatMedOperation(patMedOperations1.get(0));
                    syncOperItem(operation);
                } else {
                    operation.setCreateTime(new Date());
                    count += patMedOperationMapper.insertPatMedOperation(operation);
                    syncOperItem(operation);
                }
            } catch (Exception ex) {
                log.info("同步手术信息:" + ex.getMessage());
            }
        }
        return count;
    }
    /**
     * 同步手术信息
     *
     * @param
     * @return
     */
    private Integer syncOperItem(PatMedOperation operation) {
        Integer count = 0;
        PatMedOperationItem patMedOperationItem = new PatMedOperationItem();
        patMedOperationItem.setOrgid(operation.getOrgid());
        if(StringUtils.isNotEmpty(operation.getOpid())){
            patMedOperationItem.setOpid(Long.valueOf(operation.getOpid()));
            List<PatMedOperationItem> patMedOperationItems = chMapper.selectOperItemList(patMedOperationItem);
            log.info("同步手术详情信息数量" + patMedOperationItems.size());
            for (PatMedOperationItem operationItem : patMedOperationItems) {
                try {
                    PatMedOperationItem operItem = new PatMedOperationItem();
                    operItem.setOpid(operationItem.getOpid());
                    operItem.setOperationid(operationItem.getOperationid());
                    List<PatMedOperationItem> patMedOperationItems1 = patMedOperationItemMapper.selectPatMedOperationItemList(operItem);
                    if (CollectionUtils.isNotEmpty(patMedOperationItems1)) {
                        operationItem.setId(patMedOperationItems1.get(0).getId());
                        operationItem.setUpdateTime(new Date());
                        count += patMedOperationItemMapper.updatePatMedOperationItem(operationItem);
                    } else {
                        operation.setCreateTime(new Date());
                        count += patMedOperationItemMapper.insertPatMedOperationItem(operationItem);
                    }
                } catch (Exception ex) {
                    log.info("同步手术详情信息:" + ex.getMessage());
                }
            }
//            try {
//                patMedOperationItemMapper.deleteHardPatMedOperationItemByOpId(operation.getOpid());
//                count += patMedOperationItemMapper.insertPatMedOperationItems(patMedOperationItems);
//            }catch (Exception ex) {
//                log.info("同步手术详情信息:" + ex.getMessage());
//            }
        }
        return count;
    }
    private Map<String, Long> buildOperationPatIdHisMap(List<PatMedOperation> operations) {
        List<String> patidHiss = operations.stream()
                .map(PatMedOperation::getPatidHis)
                .filter(StringUtils::isNotEmpty)
                .distinct()
                .collect(Collectors.toList());
        if (CollectionUtils.isEmpty(patidHiss)) {
            return new HashMap<>();
        }
        return patArchiveMapper.selectPatArchiveByPatidHiss(patidHiss).stream()
                .filter(item -> StringUtils.isNotEmpty(item.getPatidHis()) && item.getId() !=
                        null)
                .collect(Collectors.toMap(
                        PatArchive::getPatidHis,
                        PatArchive::getId,
                        (a, b) -> a
                ));
    }
    private Long syncSinglePatient(String patidHis) {
        if (StringUtils.isEmpty(patidHis)) {
            return null;
        }
        PatArchive hisQuery = new PatArchive();
        hisQuery.setPatidHis(patidHis);
        hisQuery.setPageSize(5);
        List<PatArchive> hisArchives = chMapper.selectPatArchiveList(hisQuery);
        if (CollectionUtils.isEmpty(hisArchives)) {
            return null;
        }
        PatArchive localQuery = new PatArchive();
        localQuery.setPatidHis(patidHis);
        List<PatArchive> localArchives = patArchiveMapper.selectPatArchiveList(localQuery);
        PatArchive hisArchive = hisArchives.get(0);
        if (CollectionUtils.isNotEmpty(localArchives)) {
            hisArchive.setId(localArchives.get(0).getId());
            hisArchive.setUpdateTime(new Date());
            patArchiveMapper.updatePatArchive(hisArchive);
            return localArchives.get(0).getId();
        } else {
            hisArchive.setCreateTime(new Date());
            patArchiveMapper.insertPatArchiveSingle(hisArchive);
            return hisArchive.getId();
        }
    }
    @Override
@@ -413,7 +569,7 @@
                patArchiveMapper.insertPatArchiveSingle(patArchives.get(0));
                patMedOuthosp1.setPatid(patArchives.get(0).getId());
            }
            i = patMedOuthospMapper.insertPatMedOuthosp(patMedOuthosp1);
            i = patMedOuthospService.insertPatMedOuthosp(patMedOuthosp1);
        }
        return i;
@@ -463,23 +619,37 @@
            List<SysUser> usersTemp = sysUser2Mapper.selectUserList(suTemp);
            //新增用户与科室
            List<SysUserDept> sysUserDept = sysUserDeptAll.stream().filter((SysUserDept b) -> b.getUserCode().equals(sysUser1.getHisUserId())).collect(Collectors.toList());
            List<SysUserDept> sysUserDept = sysUserDeptAll.stream().filter((SysUserDept b) ->
                    b.getUserCode().equals(sysUser1.getHisUserId())).collect(Collectors.toList());
            //新增用户与病区
            List<SysUserDept> sysUserDeptBf = sysUserDeptBfAll.stream().filter((SysUserDept b) -> b.getUserCode().equals(sysUser1.getHisUserId())).collect(Collectors.toList());
            List<SysUserDept> sysUserDeptBf = sysUserDeptBfAll.stream().filter((SysUserDept b) ->
                    b.getUserCode().equals(sysUser1.getHisUserId())).collect(Collectors.toList());
            //新增用户与院区
            List<SysUserOrg> sysUserOrg = sysUserOrgAll.stream().filter((SysUserOrg o) -> o.getUserId().equals(sysUser1.getHisUserId())).collect(Collectors.toList());
            List<SysUserOrg> sysUserOrg = sysUserOrgAll.stream().filter((SysUserOrg o) ->
                    o.getUserId().equals(sysUser1.getHisUserId())).collect(Collectors.toList());
            List<String> userDepts = sysUserDept.stream().map(SysUserDept::getDeptCode).distinct().collect(Collectors.toList());
            List<String> userDeptBfs = sysUserDeptBf.stream().map(SysUserDept::getDeptCode).distinct().collect(Collectors.toList());
            List<String> userDepts = sysUserDept.stream().map(SysUserDept::getDeptCode).
                    distinct().collect(Collectors.toList());
            List<String> userDeptBfs = sysUserDeptBf.stream().map(SysUserDept::getDeptCode).
                    distinct().collect(Collectors.toList());
            //和queryHospUserInfoList采集的数据格式保持一致
            List<List<String>> userDeptsList = new ArrayList<>();
            if(!userDepts.isEmpty()){
                userDeptsList.add(userDepts);
                for(String userDept: userDepts){
                    List<String> uDept = new ArrayList<>();
                    uDept.add(userDept);
                    userDeptsList.add(uDept);
                }
            }
            List<List<String>> userDeptBfsList = new ArrayList<>();
            if(!userDeptBfs.isEmpty()){
                userDeptBfsList.add(userDeptBfs);
                for(String userBfDept: userDeptBfs){
                    List<String> uBfDept = new ArrayList<>();
                    uBfDept.add(userBfDept);
                    userDeptBfsList.add(uBfDept);
                }
            }
            if (usersTemp.size() > 0) {
@@ -492,16 +662,16 @@
                }
                //将部门我病区放到指定字段中
                Gson gson = new Gson();
                sysUser1.setDeptInfo(gson.toJson(userDeptsList));
                sysUser1.setHospInfo(gson.toJson(userDeptBfsList));
                sysUser1.setHospInfo(gson.toJson(userDeptsList));
                sysUser1.setDeptInfo(gson.toJson(userDeptBfsList));
                sysUser2Mapper.updateUser(sysUser1);
            } else {
                sysUser1.setUserName(sysUser1.getHisUserId());
                //将部门我病区放到指定字段中
                Gson gson = new Gson();
                sysUser1.setDeptInfo(gson.toJson(userDeptsList));
                sysUser1.setHospInfo(gson.toJson(userDeptBfsList));
                sysUser1.setHospInfo(gson.toJson(userDeptsList));
                sysUser1.setDeptInfo(gson.toJson(userDeptBfsList));
                sysUser2Mapper.insertUser(sysUser1);
                //对应 SysUserServiceImpl selectUserByUserName2 191行