package com.docus.bgts.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.docus.bgts.entity.*;
import com.docus.bgts.facade.IAfCollectTaskService;
import com.docus.bgts.mapper.dbmysql.AfCollectTaskMapper;
import com.docus.bgts.mapper.dbmysql.AfInterfaceCollectMapper;
import com.docus.bgts.mapper.dbmysql.AfInterfaceCollectSubMapper;
import com.docus.bgts.mapper.dboracle.TestMapper;
import com.google.common.collect.Lists;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.*;
/**
*
* 病案采集任务 服务实现类
*
*
* @author 曾文和
* @since 2021-05-07
*/
@Service
public class AfCollectTaskServiceImpl extends ServiceImpl implements IAfCollectTaskService {
public static int MAX_SIZE_PER_TIME = 10;
@Autowired
TestMapper testMapper;
@Autowired
AfCollectTaskMapper afCollectTaskMapper;
@Autowired
AfInterfaceCollectMapper afInterfaceCollectMapper;
@Autowired
AfInterfaceCollectSubMapper afInterfaceCollectSubMapper;
@Override
public String getpatientIdByEmpId(String empId) {
String patientId = afCollectTaskMapper.getpatientIdByEmpId(empId);
return patientId;
}
@Override
public void insert(ReportDownDto reportDownDto) {
AfCollectTask afCollectTask;
String patientId = getpatientIdByEmpId(reportDownDto.getPatient().getJzh());
if (StringUtils.isBlank(patientId)) {
throw new RuntimeException("操作的病案信息不存在");
}
Date date = new Date();
Integer save = null;
List scanfiles = reportDownDto.getScanfiles();
for (ReportDownScanFileDto scanfile : scanfiles) {
// 判断任务是否已存在
afCollectTask = afCollectTaskMapper.selectOne(new QueryWrapper().eq("C1", scanfile.getSerialnum()).eq("sysflag", reportDownDto.getCollectorid()));
if (afCollectTask == null) {
//不存在 新增
afCollectTask = new AfCollectTask();
afCollectTask.setPatientId(patientId);
afCollectTask.setSysflag(reportDownDto.getCollectorid());
afCollectTask.setState("0");
afCollectTask.setSyncTime(date);
afCollectTask.setC1(scanfile.getSerialnum());
afCollectTask.setC2(scanfile.getFiletitle());
afCollectTask.setC3(reportDownDto.getPatient().getJzh());
save = afCollectTaskMapper.insert(afCollectTask);
if (save <= 0) {
throw new RuntimeException("插入病案任务表数据出错");
}else {
log.warn("插入病案成功");
}
} else {
//存在就修改
afCollectTask.setPatientId(patientId);
afCollectTask.setSysflag(reportDownDto.getCollectorid());
afCollectTask.setState("0");
afCollectTask.setSyncTime(date);
afCollectTask.setC1(scanfile.getSerialnum());
afCollectTask.setC2(scanfile.getFiletitle());
save = afCollectTaskMapper.updateById(afCollectTask);
log.warn("修改病案成功");
}
scanfile.setTaskid(afCollectTask.getId());
}
reportDownDto.setScanfiles(scanfiles);
}
@Override
public void updateInterfaceCollect(String collectSubId, int state) {
log.warn("开始记录采集");
AfInterfaceCollectSub afInterfaceCollectSub = afInterfaceCollectSubMapper.selectById(collectSubId);
log.warn("操作记录:"+afInterfaceCollectSub);
if (afInterfaceCollectSub == null) {
throw new RuntimeException("afInterfaceCollectSub表数据为空");
}
int i;
afInterfaceCollectSub.setState(state);
i = afInterfaceCollectSubMapper.updateById(afInterfaceCollectSub);
if (i <= 0) {
throw new RuntimeException("记录任务数时出错");
}
if (state == 1) {
AfInterfaceCollect afInterfaceCollect = afInterfaceCollectMapper.selectById(afInterfaceCollectSub.getAfInterfaceCollectId());
afInterfaceCollect.setCompleteCount(afInterfaceCollect.getCompleteCount() + 1);
i = afInterfaceCollectMapper.updateById(afInterfaceCollect);
if (i <= 0) {
throw new RuntimeException("记录任务数时出错");
}
}
}
@Override
public List getjzhByDate(String startDate, String endDate) {
List patientIds = afCollectTaskMapper.getjzhByDate(startDate, endDate);
return patientIds;
}
@Override
public List getC1ByPatientId(List patientIds, String collectorId) {
List> batchPatientIds = Lists.partition(patientIds, MAX_SIZE_PER_TIME);
List c1s = new ArrayList<>();
for (List batchPatientId : batchPatientIds) {
List c1 = afCollectTaskMapper.getC1ByPatientId(batchPatientId, collectorId);
if (c1 != null && c1.size() != 0 ) {
for (String s : c1) {
c1s.add(s);
}
}
}
return c1s;
}
@Override
public List getPatientIdByC1(List C1s) {
List> batchPatientIds = Lists.partition(C1s, MAX_SIZE_PER_TIME);
List patientIds = new ArrayList<>();
for (List batchC1s : batchPatientIds) {
List patientId = afCollectTaskMapper.getPatientIdByC1(batchC1s);
if (patientId != null && patientId.size() != 0 ) {
for (String s : patientId) {
patientIds.add(s);
}
}
}
return patientIds;
}
@Override
public List getJzhByPatientId(List patientIds) {
List jzhs = new ArrayList<>();
List> batchPatientIds = Lists.partition(patientIds, MAX_SIZE_PER_TIME);
for (List batchPatientId : batchPatientIds) {
List jzh = afCollectTaskMapper.getJzhByPatientId(batchPatientId);
if (jzh != null && jzh.size() !=0 ) {
for (String s : jzh) {
jzhs.add(s);
}
}
}
return jzhs;
}
/**
* 根据jzh查询文件采集任务情况
* @param jzhs
* @return
*/
@Override
public List