package com.lyms.talkonlineweb.task;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.lyms.talkonlineweb.controller.PatientController;
import com.lyms.talkonlineweb.domain.*;
import com.lyms.talkonlineweb.result.BaseResponse;
import com.lyms.talkonlineweb.service.*;
import com.lyms.talkonlineweb.util.*;
import lombok.extern.log4j.Log4j2;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.validation.BindingResult;
import org.springframework.validation.MapBindingResult;
import org.springframework.scheduling.annotation.Scheduled;
import org.w3c.dom.ls.LSInput;
import javax.swing.event.ListDataEvent;
import java.util.*;
import static com.lyms.talkonlineweb.util.DateUtil.YYYY_MM_DD;
/**
* 获取医院患者信息任务
*/
@Component
@Log4j2
public class GetPatientInfoTask {
@Autowired
private PatientInfoService patientInfoService;
@Autowired
private LymsDictService lymsDictService;
@Value("${patient.url}")
public String url;//配置yml 获取患者接口地址
@Value("${patient.hospitalName}")//配置yml 医院名称
public String hospitalName;
@Value("${patient.hospital}")//配置yml 医院id
public Integer hospital;
@Autowired
private LymsPatientService lymsPatientService;//患者
@Autowired
private LymsHdepartService lymsHdepartService;//科室
@Autowired
private LymsDoctorService lymsDoctorService;//医生
@Autowired
private LymsPcaseService lymsPcaseService;//病例
@Autowired
private LymsIllnessService lymsIllnessService;//疾病
@Autowired
private LymsTcardService lymsTcardService;//问诊卡信息
@Autowired
private LymsHisInfoService lymsHisInfoService;//问诊卡信息
/**
* 获取医院患者信息。添加到问诊平台患者信息
* 10分钟执行一次
*/
// @Scheduled(cron = "0 */10 * * * ?")
@Scheduled(cron = "0 */5 * * * ?")
public void getPatientInfo() throws Exception {
//每次执行时间范围是上一个小时
String param = collateTime();
if (StringUtil.isNotEmpty(param)) {
//返回数据
String result = HttpUtil.getData(url + "?" + param);
if (StringUtil.isNotEmpty(result)) {
Map<String, Object> resultMap = JsonUtil.str2Map(result, HashMap.class);
if (CollectionUtils.isNotEmpty(resultMap)) {
List<Map<String, Object>> listMap = (List<Map<String, Object>>) resultMap.get("patients");
if (CollectionUtils.isNotEmpty(listMap)) {
for (Map<String, Object> map : listMap) {
//添加到数据后续页面处理
LymsHisInfo hisInfoMap = (LymsHisInfo) BeanUtils.mapToObject(map, LymsHisInfo.class);//map转对象
if (null != hisInfoMap) {
//今天添加过不需要重复添加
QueryWrapper qurey = new QueryWrapper();
qurey.eq("idCard", hisInfoMap.getIdcard());
qurey.eq("diagnose", hisInfoMap.getDiagnose());
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.set(Calendar.HOUR_OF_DAY, 00);//时
calendar.set(Calendar.MINUTE, 00);//分
calendar.set(Calendar.SECOND, 00);//秒
qurey.gt("createdtime", calendar.getTime());
List<LymsHisInfo> list = lymsHisInfoService.list(qurey);
if (CollectionUtils.isEmpty(list)) {
hisInfoMap.setBirthday(StringUtil.isNotEmpty(hisInfoMap.getBirthday()) ? StringUtil.leftTruncate(hisInfoMap.getBirthday(), ' ') : null);
hisInfoMap.setUpType(0);//默认未上传
lymsHisInfoService.save(hisInfoMap);
}
}
}
}
}
}
}
}
/**
* //整理GET请求时间
* //每次执行时间范围是上一个小时
* @return string param:GET请求时间参数
*/
private String collateTime(){
String param=null;
String startDate=null;
String endDate=null;
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.set(Calendar.MINUTE, 00);//分
calendar.set(Calendar.SECOND, 00);//秒
calendar.set(Calendar.MILLISECOND, 000);//毫秒
int hour = calendar.get(Calendar.HOUR_OF_DAY);//当前小时
if(0==hour){
calendar.add(Calendar.DATE, -1);
calendar.set(Calendar.HOUR_OF_DAY,23);
startDate=DateUtil.getYyyyMmDdHhMmSs(calendar.getTime());
calendar.add(Calendar.DATE, 1);
calendar.set(Calendar.HOUR_OF_DAY,00);
endDate=DateUtil.getYyyyMmDdHhMmSs(calendar.getTime());
}else {
// endDate=DateUtil.getYyyyMmDdHhMmSs(calendar.getTime());
calendar.add(Calendar.HOUR_OF_DAY,-1);
startDate=DateUtil.getYyyyMmDdHhMmSs(calendar.getTime());
//测试用
calendar.add(Calendar.HOUR_OF_DAY,2);
endDate=DateUtil.getYyyyMmDdHhMmSs(calendar.getTime());
}
if(StringUtil.isNotEmpty(startDate)&&StringUtil.isNotEmpty(endDate)){
//字符串日期和时间中间的空格需要用+连接(GET请求参数特定),date转为string格式:xxxx-xx-xx xx-xx-xxx,中间得空格需要转换连接符
param=("start="+startDate+"&end="+endDate).replace(" ", "+");
}
return param;
}
}