| | |
| | | import com.ruoyi.common.core.domain.entity.SysDept; |
| | | import com.ruoyi.common.core.domain.entity.SysUser; |
| | | import com.ruoyi.common.core.domain.entity.SysUserDept; |
| | | import com.ruoyi.common.core.redis.RedisCache; |
| | | import com.ruoyi.common.utils.ArrayListUtils; |
| | | import com.ruoyi.common.utils.StringUtils; |
| | | import com.ruoyi.quartz.mapper.CollectHISMapper; |
| | | import com.ruoyi.quartz.service.ICollectHISService; |
| | | import com.smartor.domain.*; |
| | | import com.smartor.domain.entity.ServiceSubtaskEntity; |
| | | import com.smartor.mapper.*; |
| | | import com.smartor.service.IPatMedOuthospService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | |
| | | private PatArchiveMapper patArchiveMapper; |
| | | |
| | | @Autowired |
| | | private ServiceSubtaskMapper serviceSubtaskMapper; |
| | | |
| | | @Autowired |
| | | private ThreadPoolTaskExecutor taskExecutor; |
| | | |
| | | @Autowired |
| | |
| | | |
| | | @Autowired |
| | | private UtilsMapper utilsMapper; |
| | | |
| | | @Autowired |
| | | private RedisCache redisCache; |
| | | |
| | | private static final long SHARDING_THRESHOLD = 5_000_000L; |
| | | private static final String PAT_ARCHIVE_TABLE = "pat_archive"; |
| | |
| | | Integer count = 0; |
| | | List<Map<String, Object>> syncList = utilsMapper.getList("SELECT id,syncName,DATE_FORMAT(ADDDATE(startTime, INTERVAL -1 MINUTE), '%Y-%m-%d %H:%i:%s') startTime FROM sys_sync_time where state=0"); |
| | | if (syncList.size() > 0) { |
| | | String endTime = chMapper.getSqlString("select sysdate from healthy_inhosp where rownum=1"); |
| | | String endTime = chMapper.getSqlString("select (sysdate-1) as endtime from healthy_inhosp where rownum=1"); |
| | | //同步患者基本信息 |
| | | // List<Map<String, Object>> syncTemp = syncList.stream().filter(row -> row.get("syncName").equals("pat_archive")).collect(Collectors.toList()); |
| | | // if (syncTemp.size() > 0) { |
| | |
| | | log.info("同步手术信息数量" + patMedOperations.size()); |
| | | for (PatMedOperation operation : patMedOperations) { |
| | | try { |
| | | if(ObjectUtils.isNotEmpty(operation.getCanceltime())){ |
| | | //作废删除操作 |
| | | cancelOper(operation); |
| | | continue; |
| | | } |
| | | Long patId = patIdHisMap.get(operation.getPatidHis()); |
| | | if (patId == null) { |
| | | patId = syncSinglePatient(operation.getPatidHis()); |
| | |
| | | operation.setPatid(patId); |
| | | } |
| | | PatMedOperation oper = new PatMedOperation(); |
| | | oper.setOpid(operation.getOpid()); |
| | | oper.setOpreqid(operation.getOpreqid()); |
| | | 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)); |
| | | count += patMedOperationMapper.updatePatMedOperation(operation); |
| | | syncOperItem(operation); |
| | | } else { |
| | | operation.setCreateTime(new Date()); |
| | |
| | | return count; |
| | | } |
| | | |
| | | private Integer cancelOper(PatMedOperation oper){ |
| | | PatMedOperation operationVo = new PatMedOperation(); |
| | | operationVo.setOpreqid(oper.getOpreqid()); |
| | | List<PatMedOperation> operations = patMedOperationMapper.selectPatMedOperationList(operationVo); |
| | | PatMedOperation operation = new PatMedOperation(); |
| | | if(CollectionUtils.isEmpty(operations)){ |
| | | return 0; |
| | | }else { |
| | | operation = operations.get(0); |
| | | } |
| | | log.info("手术作废id=" + operation.getId()); |
| | | PatMedOperationItem pmoi = new PatMedOperationItem(); |
| | | //获取需要出院手术随访,未处理的数据 |
| | | pmoi.setOpid(operation.getId().toString()); |
| | | List<PatMedOperationItem> patMedOperationItems |
| | | = patMedOperationItemMapper.selectOperationItemList(pmoi); |
| | | List<Long> operationItemIds = patMedOperationItems.stream() |
| | | .map(PatMedOperationItem::getId) |
| | | .filter(Objects::nonNull) |
| | | .distinct() |
| | | .collect(Collectors.toList()); |
| | | |
| | | //不需要服务了,需要通过patid和sendstate=1,2,3,5,7去查询一下,service_subtask里是否有正在执行的任务, |
| | | //有的话,立即停了 |
| | | List<Long> sendstates = Arrays.asList(1L, 2L, 3L, 5L, 7L); |
| | | List<ServiceSubtask> serviceSubtaskList = new ArrayList<>(); |
| | | ServiceSubtaskEntity serviceSubtaskVO = new ServiceSubtaskEntity(); |
| | | serviceSubtaskVO.setOrgid(operation.getOrgid()); |
| | | serviceSubtaskVO.setPatid(operation.getPatid()); |
| | | serviceSubtaskVO.setSendstates(sendstates); |
| | | serviceSubtaskVO.setOperationItemIds(operationItemIds); |
| | | serviceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskVO); |
| | | //去redis中,查询是否有subid,有的话移除cache-exist |
| | | if (CollectionUtils.isNotEmpty(serviceSubtaskList)) { |
| | | for (ServiceSubtask serviceSubtask : serviceSubtaskList) { |
| | | log.info("需要移除的subId为:{}", serviceSubtask.getId().toString()); |
| | | serviceSubtask.setSendstate(4L); |
| | | serviceSubtask.setRemark("手术撤销"); |
| | | serviceSubtaskMapper.updateServiceSubtask(serviceSubtask); |
| | | redisCache.removeElementFromList("cache-exist", serviceSubtask.getId().toString()); |
| | | redisCache.removeElementFromList("cache-0", serviceSubtask.getId().toString()); |
| | | redisCache.removeElementFromList("cache-1", serviceSubtask.getId().toString()); |
| | | redisCache.removeElementFromList("cache-2", serviceSubtask.getId().toString()); |
| | | redisCache.removeElementFromList("cache-3", serviceSubtask.getId().toString()); |
| | | redisCache.removeElementFromList("cache-4", serviceSubtask.getId().toString()); |
| | | } |
| | | } |
| | | operation.setUpdateTime(new Date()); |
| | | patMedOperationMapper.updatePatMedOperation(operation); |
| | | patMedOperationItemMapper.deleteSoftPatMedOperationItemByOpId(operation.getOpid()); |
| | | return 1; |
| | | } |
| | | |
| | | /** |
| | | * 同步手术信息 |
| | | * |
| | |
| | | * @return |
| | | */ |
| | | private Integer syncOperItem(PatMedOperation operation) { |
| | | if(ObjectUtils.isNotEmpty(operation.getId())){ |
| | | operation.setOpid(operation.getId().toString()); |
| | | } |
| | | operation.setUpdateTime(new Date()); |
| | | patMedOperationMapper.updatePatMedOperation(operation); |
| | | |
| | | Integer count = 0; |
| | | PatMedOperationItem patMedOperationItem = new PatMedOperationItem(); |
| | | patMedOperationItem.setOrgid(operation.getOrgid()); |
| | | if(StringUtils.isNotEmpty(operation.getOpid())){ |
| | | patMedOperationItem.setOpid(Long.valueOf(operation.getOpid())); |
| | | PatMedOperationItem patMedOperationItem = new PatMedOperationItem(); |
| | | //patMedOperation.opReqid = patMedOperationItem.operationid |
| | | patMedOperationItem.setOperationid(operation.getOpreqid()); |
| | | List<PatMedOperationItem> patMedOperationItems = chMapper.selectOperItemList(patMedOperationItem); |
| | | |
| | | PatMedOperationItem operItem = new PatMedOperationItem(); |
| | | operItem.setOperationid(operation.getOpreqid()); |
| | | List<PatMedOperationItem> patMedOperationItems1 = patMedOperationItemMapper.selectPatMedOperationItemList(operItem); |
| | | |
| | | Map<String, List<PatMedOperationItem>> maps = ArrayListUtils.splitListsById(patMedOperationItems, |
| | | patMedOperationItems1, PatMedOperationItem::getOperationid); |
| | | //只在视图的数据不在本地的数据,执行新增操作 |
| | | List<PatMedOperationItem> addItems = maps.get("onlyIn1"); |
| | | //只在本地的数据不在视图的数据,执行删除操作 |
| | | List<PatMedOperationItem> delItems = maps.get("onlyIn2"); |
| | | //重叠的数据,执行更新操作 patMedOperationItems的数据 |
| | | List<PatMedOperationItem> editItems = maps.get("common"); |
| | | |
| | | 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{ |
| | | for (PatMedOperationItem operationItem : addItems) { |
| | | operationItem.setInhospstate(operation.getInhospstate()); |
| | | operationItem.setSerialnum(operation.getSerialnum()); |
| | | operationItem.setOpid(operation.getId().toString()); |
| | | operationItem.setOperationid(operation.getOpreqid()); |
| | | operationItem.setOpercheckFlag("0"); |
| | | operationItem.setCreateTime(new Date()); |
| | | count += patMedOperationItemMapper.insertPatMedOperationItem(operationItem); |
| | | } |
| | | |
| | | for (PatMedOperationItem operationItem : delItems) { |
| | | operationItem.setUpdateTime(new Date()); |
| | | count += patMedOperationItemMapper.deletePatMedOperationItemByOperationid(operationItem.getOperationid()); |
| | | } |
| | | |
| | | for (PatMedOperationItem operationItem : editItems) { |
| | | operationItem.setInhospstate(operation.getInhospstate()); |
| | | operationItem.setSerialnum(operation.getSerialnum()); |
| | | operationItem.setOpid(operation.getId().toString()); |
| | | operationItem.setOperationid(operation.getOpreqid()); |
| | | operationItem.setUpdateTime(new Date()); |
| | | count += patMedOperationItemMapper.updatePatMedOperationItemByOperationid(operationItem); |
| | | } |
| | | log.info("同步手术id={}详情信息数量, 新增{}条,删除{}条,修改{}条", operation.getId(), addItems.size(), delItems.size(), editItems.size()); |
| | | } catch (Exception ex) { |
| | | log.info("同步手术详情信息:" + ex.getMessage()); |
| | | } |
| | | |
| | | // try { |