Commit 13c5ed71c73a4ad94606f81b8b124723b3240fb3

Authored by shiyang
1 parent 949e7818b5
Exists in master and in 1 other branch dev

获取医院患者信息。添加到问诊平台患者信息,10分钟执行一次

Showing 3 changed files with 406 additions and 0 deletions

talkonlineweb/src/main/java/com/lyms/talkonlineweb/task/GetPatientInfoTask.java View file @ 13c5ed7
  1 +package com.lyms.talkonlineweb.task;
  2 +
  3 +import com.alibaba.fastjson.JSON;
  4 +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5 +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
  6 +import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  7 +import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  8 +import com.lyms.talkonlineweb.controller.PatientController;
  9 +import com.lyms.talkonlineweb.domain.*;
  10 +import com.lyms.talkonlineweb.result.BaseResponse;
  11 +import com.lyms.talkonlineweb.service.*;
  12 +import com.lyms.talkonlineweb.util.*;
  13 +import com.sun.deploy.util.StringUtils;
  14 +import lombok.extern.log4j.Log4j2;
  15 +import org.springframework.beans.factory.annotation.Autowired;
  16 +import org.springframework.beans.factory.annotation.Value;
  17 +import org.springframework.stereotype.Component;
  18 +import org.springframework.validation.BindingResult;
  19 +import org.springframework.validation.MapBindingResult;
  20 +import org.w3c.dom.ls.LSInput;
  21 +
  22 +import java.util.*;
  23 +
  24 +import static com.lyms.talkonlineweb.util.DateUtil.YYYY_MM_DD;
  25 +
  26 +/**
  27 + * 获取医院患者信息任务
  28 + */
  29 +
  30 +@Component
  31 +@Log4j2
  32 +public class GetPatientInfoTask {
  33 +
  34 + @Autowired
  35 + private PatientInfoService patientInfoService;
  36 + @Autowired
  37 + private LymsDictService lymsDictService;
  38 + @Value("${patient.url}")
  39 + public String url;//配置yml 获取患者接口地址
  40 + @Value("${patient.hospitalName}")//配置yml 医院名称
  41 + public String hospitalName;
  42 + @Value("${patient.hospital}")//配置yml 医院id
  43 + public Integer hospital;
  44 + @Autowired
  45 + private LymsPatientService lymsPatientService;//患者
  46 + @Autowired
  47 + private LymsHdepartService lymsHdepartService;//科室
  48 + @Autowired
  49 + private LymsDoctorService lymsDoctorService;//医生
  50 + @Autowired
  51 + private LymsPcaseService lymsPcaseService;//病例
  52 + @Autowired
  53 + private LymsIllnessService lymsIllnessService;//疾病
  54 + @Autowired
  55 + private LymsTcardService lymsTcardService;//问诊卡信息
  56 +
  57 +
  58 + /**
  59 + * 获取医院患者信息。添加到问诊平台患者信息
  60 + * 10分钟执行一次
  61 + */
  62 +// @Scheduled(cron = "0 */10 * * * ?")
  63 + public void getPatientInfo(){
  64 + //每次执行时间范围是上一个小时
  65 + String param = collateTime();
  66 + if (StringUtil.isNotEmpty(param)) {
  67 + //返回数据
  68 + String result = HttpUtil.getData(url + "?" + param);
  69 + if (StringUtil.isNotEmpty(result)) {
  70 + Map<String, Object> resultMap = JsonUtil.str2Map(result, HashMap.class);
  71 + if (CollectionUtils.isNotEmpty(resultMap)) {
  72 + List<Map<String, Object>> listMap = (List<Map<String, Object>>) resultMap.get("patients");
  73 + if (CollectionUtils.isNotEmpty(listMap)) {
  74 + for (Map<String, Object> map : listMap) {
  75 + //处理数据
  76 + collateData(map);
  77 + }
  78 + }
  79 + }
  80 + }
  81 + }
  82 + }
  83 +
  84 + /**
  85 + * //处理数据,执行
  86 + * @param map
  87 + */
  88 + private void collateData(Map<String,Object> map){
  89 + String deptName="",doctorName="";//科室名称,医生名称
  90 + String[] diagnoses=null;//疾病名称
  91 + String name="",sex="",birthday="",phone="",idCard="";//姓名,性别,生日、电话、身份证
  92 + List<String> diagnoseIds=new ArrayList<>();//疾病ids
  93 + Integer deptId=null;//科室id
  94 + Integer doctorId=null;//医生id
  95 + //姓名
  96 + name=null!=map.get("name")?map.get("name").toString():null;
  97 + //性别
  98 + sex=null!=map.get("sex")?map.get("sex").toString():null;
  99 + if("男".equals(sex)){
  100 + sex="1";
  101 + }else if("女".equals(sex)){
  102 + sex="2";
  103 + }
  104 + //生日
  105 + birthday=null!=map.get("birthday")?map.get("birthday").toString():null;
  106 + birthday=StringUtil.leftTruncate(birthday, ' ');
  107 + //电话
  108 + phone=null!=map.get("phone")?map.get("phone").toString():null;
  109 + //科室
  110 + deptName=null!=map.get("dept")?map.get("dept").toString():null;
  111 + if(StringUtil.isNotEmpty(deptName)){
  112 + LymsHdepart depart=new LymsHdepart();
  113 + depart.setDname(deptName);
  114 + List<LymsHdepart> list=lymsHdepartService.list(Wrappers.query(depart));
  115 + if(CollectionUtils.isNotEmpty(list)){
  116 + deptId=list.get(0).getDid();
  117 + }
  118 + }
  119 + //医生
  120 + doctorName=null!=map.get("doctor")?map.get("doctor").toString():null;
  121 + LymsDoctor doctor=new LymsDoctor();
  122 + if(StringUtil.isNotEmpty(doctorName)){
  123 + doctor.setDname(doctorName);
  124 + List<LymsDoctor> list = lymsDoctorService.list(Wrappers.query(doctor));
  125 + if(CollectionUtils.isNotEmpty(list)){
  126 + doctorId=list.get(0).getDid();
  127 + }
  128 + }
  129 +
  130 + //疾病
  131 + diagnoses=null!=map.get("diagnose")?map.get("diagnose").toString().split(","):null;
  132 + if(null!=diagnoses){
  133 + for (String diagnose : diagnoses) {
  134 + LymsDict dict=new LymsDict();
  135 + dict.setVtype(3);
  136 + dict.setValue(diagnose);
  137 + List<LymsDict> dictList=lymsDictService.list(Wrappers.query(dict));
  138 + if(CollectionUtils.isNotEmpty(dictList)){
  139 + for (LymsDict lymsDict : dictList) {
  140 + diagnoseIds.add(lymsDict.getCode().toString());
  141 + }
  142 + }
  143 + }
  144 + }
  145 +
  146 + //患者(身份证)
  147 + idCard=null!=map.get("idCard")?map.get("idCard").toString():null;
  148 + if(StringUtil.isNotEmpty(idCard)){
  149 + LymsPatient patientQuery=new LymsPatient();
  150 + patientQuery.setIdno(idCard.toLowerCase());
  151 + LymsPatient patient = lymsPatientService.getOne(Wrappers.query(patientQuery));
  152 + //整理添加修改接口@PostMapping("savePatient")需要的数据
  153 + LymsPatient patient2=new LymsPatient();
  154 + LymsPcase pcase=new LymsPcase();
  155 + patient2.setPname(name);
  156 + patient2.setIdno(idCard);
  157 + patient2.setBirth(birthday);
  158 + patient2.setSex(Integer.parseInt(sex));
  159 + patient2.setCcnt(0);
  160 + patient2.setCreatedby(1);
  161 + pcase.setMobile(phone);
  162 + pcase.setHid(hospital);
  163 + pcase.setHname(hospitalName);
  164 + pcase.setDid(deptId);
  165 + pcase.setDname(deptName);
  166 + pcase.setDtid(doctorId);
  167 + pcase.setDtname(doctorName);
  168 + pcase.setCreatedby(1);
  169 + if(null==patient){//没有该患者需要添加
  170 + if(StringUtil.isNotEmpty(name) && StringUtil.isNotEmpty(sex) &&
  171 + StringUtil.isNotEmpty(birthday) && StringUtil.isNotEmpty(phone) &&
  172 + StringUtil.isNotEmpty(idCard) && CollectionUtils.isNotEmpty(diagnoseIds) &&
  173 + null!=deptId && null!=doctorId){
  174 + String illness= StringUtils.join(Arrays.asList(diagnoseIds.toArray()), ",");//疾病ids
  175 + BaseResponse baseResponse = saveOrUpdatePatient(patient2, pcase, illness);
  176 + if(null!=baseResponse && 0== baseResponse.getErrorcode()){
  177 + log.info(">>>>>>>>>>>>>>>患者添加成功!");
  178 + }
  179 + }
  180 + }else {
  181 + QueryWrapper<LymsPcase> queryWrapper=new QueryWrapper<>();
  182 + queryWrapper.eq("pid", patient.getId());
  183 + queryWrapper.in("pid", patient.getId());
  184 + Calendar calendar = Calendar.getInstance();
  185 + calendar.setTime(new Date());
  186 + calendar.set(Calendar.HOUR_OF_DAY, 00);//时
  187 + calendar.set(Calendar.MINUTE, 00);//分
  188 + calendar.set(Calendar.SECOND, 00);//秒
  189 + queryWrapper.gt("createdtime", calendar.getTime());
  190 + int count = lymsPcaseService.count(queryWrapper);
  191 + //如果今天没有这个患者病例需要添加
  192 + if(count==0){
  193 + if(StringUtil.isNotEmpty(name) && StringUtil.isNotEmpty(sex) &&
  194 + StringUtil.isNotEmpty(birthday) && StringUtil.isNotEmpty(phone) &&
  195 + StringUtil.isNotEmpty(idCard) && CollectionUtils.isNotEmpty(diagnoseIds) &&
  196 + null!=deptId && null!=doctorId){
  197 + String illness= StringUtils.join(Arrays.asList(diagnoseIds.toArray()), ",");//疾病ids
  198 + BaseResponse baseResponse = saveOrUpdatePatient(patient2, pcase, illness);
  199 + if(null!=baseResponse && 0== baseResponse.getErrorcode()){
  200 + log.info(">>>>>>>>>>>>>>>患者添加成功!");
  201 + }
  202 + }
  203 + }else {
  204 + return;
  205 + }
  206 + }
  207 + }
  208 + }
  209 + /**
  210 + * //整理GET请求时间
  211 + * //每次执行时间范围是上一个小时
  212 + * @return string param:GET请求时间参数
  213 + */
  214 + private String collateTime(){
  215 + String param=null;
  216 + String startDate=null;
  217 + String endDate=null;
  218 + Calendar calendar = Calendar.getInstance();
  219 + calendar.setTime(new Date());
  220 + calendar.set(Calendar.MINUTE, 00);//分
  221 + calendar.set(Calendar.SECOND, 00);//秒
  222 + calendar.set(Calendar.MILLISECOND, 000);//毫秒
  223 + int hour = calendar.get(Calendar.HOUR_OF_DAY);//当前小时
  224 + if(0==hour){
  225 + calendar.add(Calendar.DATE, -1);
  226 + calendar.set(Calendar.HOUR_OF_DAY,23);
  227 + startDate=DateUtil.getYyyyMmDdHhMmSs(calendar.getTime());
  228 + calendar.add(Calendar.DATE, 1);
  229 + calendar.set(Calendar.HOUR_OF_DAY,00);
  230 + endDate=DateUtil.getYyyyMmDdHhMmSs(calendar.getTime());
  231 + }else {
  232 + endDate=DateUtil.getYyyyMmDdHhMmSs(calendar.getTime());
  233 + calendar.add(Calendar.HOUR_OF_DAY,-1);
  234 + startDate=DateUtil.getYyyyMmDdHhMmSs(calendar.getTime());
  235 + }
  236 + if(StringUtil.isNotEmpty(startDate)&&StringUtil.isNotEmpty(endDate)){
  237 + //字符串日期和时间中间的空格需要用+连接(GET请求参数特定),date转为string格式:xxxx-xx-xx xx-xx-xxx,中间得空格需要转换连接符
  238 + param=("start="+startDate+"&end="+endDate).replace(" ", "+");
  239 + }
  240 + param="start=2022-02-20+13:25:59&end=2022-02-20+14:25:59";//测试用
  241 + return param;
  242 + }
  243 + //添加修改患者方法
  244 + public BaseResponse saveOrUpdatePatient(LymsPatient patient, LymsPcase pcase, String illness) {
  245 + BaseResponse baseResponse = new BaseResponse();
  246 + log.info(">>>>>>>>>>>>>>>登记病例");
  247 + baseResponse.setErrormsg("");
  248 + patient.setIdno(patient.getIdno().toLowerCase());
  249 + LymsPatient tmpP=new LymsPatient();
  250 + tmpP.setIdno(patient.getIdno().toLowerCase());
  251 + LymsPatient patient2 = lymsPatientService.getOne(Wrappers.query(tmpP).eq("idno", patient.getIdno()));
  252 + if (patient2 == null) {
  253 + patient.setCreatedtime(new Date());
  254 + patient.setPpasswd(Constant.COMMON_PASSWD);
  255 + } else {
  256 + patient.setId(patient2.getId());
  257 + patient.setUpdatedtime(new Date());
  258 + patient.setCcnt(patient2.getCcnt()+ (null== patient.getCcnt()?0:patient.getCcnt()));
  259 + }
  260 +
  261 +
  262 + if (!StringUtil.isEmpty(patient.getCode())) {
  263 + patient.setOpenid(WeiXinUtil.getWxOpenId(patient.getCode()));
  264 + }
  265 +
  266 + boolean f = lymsPatientService.saveOrUpdate(patient);
  267 +
  268 +// 添加病例
  269 + pcase.setCreatedby(patient.getCreatedby());
  270 + pcase.setPid(patient.getId());
  271 + pcase.setCreatedtime(new Date());
  272 + f = lymsPcaseService.saveOrUpdate(pcase);
  273 + String[] iArr = illness.split(",");
  274 +
  275 + log.info(patient);
  276 + log.info(pcase);
  277 +
  278 + Map param = new HashMap();
  279 + param.put("vtype",3);
  280 + List<LymsDict> dLst=lymsDictService.listByMap(param);
  281 + for (int i = 0; i < iArr.length; i++) {
  282 + LymsIllness ness = new LymsIllness();
  283 + ness.setCreatedby(patient.getCreatedby());
  284 + ness.setPcid(pcase.getPcid());
  285 + ness.setIid(Integer.parseInt(iArr[i]));
  286 + ness.setCreatedtime(new Date());
  287 +
  288 + dLst.forEach(e->{
  289 + if(e.getCode().intValue()==ness.getIid().intValue()){
  290 + ness.setIname(e.getValue());
  291 + }
  292 + });
  293 +
  294 + param.clear();
  295 + param.put("pcid", pcase.getPcid());
  296 + param.put("iid", iArr[i]);
  297 + List<LymsIllness> iLst = lymsIllnessService.listByMap(param);
  298 + if (iLst.size() > 0) {
  299 + ness.setId(iLst.get(0).getId());
  300 + }
  301 + f = lymsIllnessService.saveOrUpdate(ness);
  302 + log.info(ness.toString());
  303 + }
  304 +
  305 + Date instDate = new Date();
  306 + //需要添加医院购买卡记录
  307 + for (int i = 0; i < patient.getCcnt() && Objects.nonNull(patient.getCcnt()); i++) {
  308 + LymsTcard tcard = new LymsTcard();
  309 + tcard.setCnt(1);
  310 + tcard.setPcid(pcase.getPcid());
  311 + tcard.setPid(patient.getId());
  312 + tcard.setFid(2);
  313 + tcard.setCreatedby(patient.getCreatedby());
  314 + tcard.setCreatedtime(instDate);
  315 +
  316 + lymsTcardService.saveOrUpdate(tcard);
  317 + }
  318 + baseResponse.setObject(patient);
  319 + baseResponse.setErrorcode(f == true ? 0 : 1);
  320 + return baseResponse;
  321 + }
  322 +}
talkonlineweb/src/main/java/com/lyms/talkonlineweb/util/StringUtil.java View file @ 13c5ed7
1 1 package com.lyms.talkonlineweb.util;
2 2  
  3 +import java.util.Arrays;
  4 +import java.util.List;
  5 +
3 6 /**
4 7 * @ProjectName: talkonline
5 8 * @Package: com.lyms.talkonlineweb.util
... ... @@ -53,6 +56,76 @@
53 56  
54 57 }
55 58 return "";
  59 + }
  60 + /**
  61 + * 字符串截取(向左截取)
  62 + * @param str 原字符串
  63 + * @param chr 需要从哪个字符截取
  64 + * @return String 截取后字符串
  65 + */
  66 + public static String leftTruncate(String str,char chr) {
  67 + String result="";
  68 + if('\0'!=chr && isNotEmpty(str.trim())){
  69 + char [] a = str.toCharArray();
  70 + for (int i = 0; i < a.length; i++) {
  71 + if (a[i] == chr) {
  72 + result=str.substring(0,i+1);
  73 + break;
  74 + }
  75 + }
  76 + }
  77 + return result;
  78 + }
  79 + /**
  80 + * 字符串截取(向右截取)
  81 + * @param str 原字符串
  82 + * @param chr 需要从哪个字符截取
  83 + * @return String 截取后字符串
  84 + */
  85 + public static String rightTruncate(String str,char chr) {
  86 + String result="";
  87 + if('\0'!=chr && isNotEmpty(str.trim())){
  88 + char [] a = str.toCharArray();
  89 + for (int i = 0; i < a.length; i++) {
  90 + if (a[i] == chr) {
  91 + result=str.substring(i,a.length);
  92 + break;
  93 + }
  94 + }
  95 + }
  96 + return result;
  97 + }
  98 + /**
  99 + * 字符串截取(从1个字符到另一个字符)
  100 + * @param str 原字符串
  101 + * @param strat 开始字符截取
  102 + * @param end 结束字符截取
  103 + * @return String 截取后字符串
  104 + */
  105 + public static String strTruncate(String str,char strat,char end) {
  106 + String result="";
  107 + if('\0'!=strat &&'\0'!=end && isNotEmpty(str) && isNotEmpty(str.trim()) ){
  108 + char [] a = str.toCharArray();
  109 + int s=-1;
  110 + int e=-1;
  111 + for (int i = 0; i < a.length; i++) {
  112 + if(s==-1) {
  113 + if (a[i] == strat) {
  114 + s = i;
  115 + continue;
  116 + }
  117 + }else {
  118 + if (a[i] == end) {
  119 + e=i;
  120 + break;
  121 + }
  122 + }
  123 + }
  124 + if(s!=-1&&e!=-1){
  125 + result=str.substring(s,e+1);
  126 + }
  127 + }
  128 + return result;
56 129 }
57 130 }
talkonlineweb/src/main/resources/application.yml View file @ 13c5ed7
... ... @@ -16,4 +16,13 @@
16 16 config: classpath:logback-spring.xml
17 17  
18 18 excludePath: login,test1,test2
  19 +
  20 +#获取医院患者信息配置
  21 +patient:
  22 + #医院接口地址(String)
  23 + url: https://rp-zk-api.healthbaby.com.cn:8094/his/zkfy/getZkfyPatientList
  24 + #需要预建医院获得医院名称(String)
  25 + hospitalName: 石家庄第一医院
  26 + #需要预建医院获得id(Integer)
  27 + hospital: 11