package com.ltkj.web.controller.dongfanghis;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSON;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.ltkj.common.core.domain.AjaxResult;
import com.ltkj.hosp.dfDto.CheXiaoMzFyDto;
import com.ltkj.hosp.dfDto.CreateMenZhenFyDto;
import com.ltkj.hosp.domain.TjCustomer;
import com.ltkj.system.service.ISysConfigService;
import com.ltkj.web.wxUtils.HttpClientUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.io.FileInputStream;
import java.io.IOException;
import java.time.Instant;
import java.util.*;
import java.util.concurrent.TimeUnit;
/**
* ClassName: DfHisApiMethodService
* Description:
* date: 2024/12/10 09:24
*
* @author zjh
*/
@Component
@Slf4j
public class DfHisApiMethodService {
@Autowired
private ISysConfigService configService;
// @Autowired
private RedisTemplate redisTemplate;
private static String HIS_URL = "http://oapi.pbkwyy.com/OAPI";
private static String CONFIG_PATH;
private static String GRANT_TYPE = "client_credentials";
private static String CLIENT_ID = "XFZZQEfXTZ7exhhi";
private static String CLIENT_SECRET = "05a192176c21edfcc9cf5fa26fc5a9e0c5b131ad";
// private static String SCOP = "";
// http://oapi.pbkwyy.com/OAPI/oauth/token
// grant_type:client_credentials
// client_id:XFZZQEfXTZ7exhhi
// client_secret:05a192176c21edfcc9cf5fa26fc5a9e0c5b131ad
@Value("${config.properties}")
public void setConfigPath(String configPath) {
CONFIG_PATH = configPath;
try {
FileInputStream inputStream = new FileInputStream(CONFIG_PATH);
Properties props = new Properties();
props.load(inputStream);
String url = props.getProperty("df_his_api_url");
String port = props.getProperty("df_his_api_port");
GRANT_TYPE = props.getProperty("grant_type");
CLIENT_ID= props.getProperty("client_id");
CLIENT_SECRET = props.getProperty("client_secret");
// SCOP = props.getProperty("scope");
HIS_URL=url+":"+port+"/OAPI/";
} catch (IOException throwables) {
throwables.printStackTrace();
}
}
//获取token
private JSONObject getToken () {
Map map = new HashMap<>();
map.put("grant_type",GRANT_TYPE);
map.put("client_id",CLIENT_ID);
map.put("client_secret",CLIENT_SECRET);
// map.put("scope",SCOP);
String post = sendPost (HIS_URL+"/oauth/token", map);
if (StrUtil.isBlank(post)) return null;
JSONObject parseObj = JSONUtil.parseObj(post);
// Integer expiresIn = parseObj.getInt("expires_in");
// if (expiresIn != null){
// parseObj.putOpt("time",Instant.now().getEpochSecond());
// redisTemplate.opsForHash().putAll("token:his:df",parseObj);
// redisTemplate.expire("token:his:df",expiresIn - 10, TimeUnit.SECONDS);
// }
return parseObj;
}
//建档
public JSON jianDang (TjCustomer customer) {
String czy = configService.selectConfigByKey("dfhisczybm");
Map map = new HashMap<> ();
map.put ("jiuZhenKh", customer.getPationId ());
map.put ("kaiLeiXing","4");
map.put ("xingMing", customer.getCusName ());
Long cusSex = customer.getCusSex();
if(cusSex==0L){
map.put ("xingBie","男");
}else if(cusSex==1L){
map.put ("xingBie","女");
}else {
map.put ("xingBie","未知");
}
map.put ("shenFenZh", customer.getCusIdcard ());
map.put ("danWeiBh","");
map.put ("chuShengRq", DateUtil.format(customer.getCusBrithday(),"yyyy-MM-dd"));
map.put ("lianXiDz", customer.getCusAddr());
map.put ("lianXiDh", customer.getCusPhone ());
map.put ("feiYongLb","");
map.put ("feiYongXz","");
map.put ("jiLuLy","3");
map.put ("caoZuoYuan",czy);
map.put ("chongZhiJe","");
map.put ("yiBaoKh","");
map.put ("geRenBh","");
map.put ("yiBaoBrXx","");
map.put ("gongZuoDw",customer.getCompName());
map.put ("canBaoXzMc","");
map.put ("muLuBlLb","");
map.put ("kunNanJzDj","");
map.put ("yiLiaoLb","");
map.put ("minZuDm","");
map.put ("minZuMc","");
//职业编码
String post = sendPost (HIS_URL+"/menZhenJz/jianDang", map);
return JSONUtil.parseObj(post);
}
//验证身份证是否建过档
public JSON getBingRenXxByShengFenZheng (TjCustomer customer) {
String czy = configService.selectConfigByKey("dfhisczybm");
Map map = new HashMap<> ();
map.put ("caoZuoYuan",czy);
map.put ("shenFenZh", customer.getCusIdcard ());
map.put ("danWeiBh","");
//职业编码
String post = sendPost (HIS_URL+"/menZhenJz/getBingRenXxByShengFenZheng", map);
return JSONUtil.parseObj(post);
}
//病人基本信息变更
public JSON saveBingRenXx (TjCustomer customer) {
String czy = configService.selectConfigByKey("dfhisczybm");
Map map = new HashMap<> ();
map.put ("jiuZhenKh", customer.getPationId ());
map.put ("kaiLeiXing","4");
map.put ("xingMing", customer.getCusName ());
Long cusSex = customer.getCusSex();
if(cusSex==0L){
map.put ("xingBie","男");
}else if(cusSex==1L){
map.put ("xingBie","女");
}else {
map.put ("xingBie","未知");
}
map.put ("shenFenZh", customer.getCusIdcard ());
map.put ("danWeiBh","");
map.put ("chuShengRq", DateUtil.format(customer.getCusBrithday(),"yyyy-MM-dd"));
map.put ("lianXiDz", customer.getCusAddr());
map.put ("lianXiDh", customer.getCusPhone ());
map.put ("feiYongLb","");
map.put ("feiYongXz","");
map.put ("jiLuLy","3");
map.put ("caoZuoYuan",czy);
//职业编码
String post = sendPost (HIS_URL+"/menZhenJz/saveBingRenXx", map);
return JSONUtil.parseObj(post);
}
//待收费费用查询
public JSON getListDaiShouFei (String bingRenId,String jiuZhenKh,String yuanQuId) {
Map map = new HashMap<> ();
map.put ("bingRenId",bingRenId);
map.put ("jiuZhenKh",jiuZhenKh);
map.put ("yuanQuId",yuanQuId);
//职业编码
String post = sendPost (HIS_URL+"/shouFei/getListDaiShouFei", map);
return JSONUtil.parseObj(post);
}
//生成待收费/待退费 费用
public JSON createMenZhenFy (CreateMenZhenFyDto dto) {
String czy = configService.selectConfigByKey("dfhisczybm");
Map map = new HashMap<> ();
map.put ("bingRenId",dto.getBingRenId());
map.put ("jiuZhenKh",dto.getJiuZhenKh());
map.put ("caoZuoYuan",czy);
map.put ("yuanQuId",dto.getYuanQuId());
map.put ("yingYongId",dto.getYingYongId());
map.put ("kaiDanKs",dto.getKaiDanKs());
map.put ("dengJiLsh",dto.getDengJiLsh());
map.put ("shouTuiBz",dto.getShouTuiBz());
map.put ("feiYongMxList",dto.getFeiYongMxList());
//职业编码
String post = sendPost (HIS_URL+"/shouFei/createMenZhenFy", map);
return JSONUtil.parseObj(post);
}
//门诊未收费费用撤销
public JSON cheXiaoMzFy (CheXiaoMzFyDto dto) {
Map map = new HashMap<> ();
map.put ("bingRenId",dto.getBingRenId());
map.put ("jiuZhenKh",dto.getJiuZhenKh());
map.put ("feiYongIdList",dto.getFeiYongIdList());
//职业编码
String post = sendPost (HIS_URL+"/shouFei/cheXiaoMzFy", map);
return JSONUtil.parseObj(post);
}
//收费/退费完成通知第三方
public JSON pushZhiFuMsg (String feiYongId,int yeWuLx ) {
Map map = new HashMap<> ();
map.put ("feiYongId",feiYongId);
map.put ("yeWuLx",yeWuLx);
//职业编码
String post = sendPost (HIS_URL+"/shouFei/pushZhiFuMsg", map);
return JSONUtil.parseObj(post);
}
//科室信息查询
public JSON getKeShi (String yuanQuId,String keShiMc,int pageIndex,int pageSize ) {
Map map = new HashMap<> ();
map.put ("yuanQuId",yuanQuId);
map.put ("keShiMc",keShiMc);
map.put ("pageIndex",pageIndex);
map.put ("pageSize",pageSize);
//职业编码
String post = sendPost (HIS_URL+"/zhuShuJu/getKeShi", map);
return JSONUtil.parseObj(post);
}
//医生信息查询
public JSON getListYiShengZd (String yuanQuId,String keShiMc,int pageIndex,int pageSize ) {
Map map = new HashMap<> ();
map.put ("yuanQuId",yuanQuId);
map.put ("keShiMc",keShiMc);
map.put ("bianGengSj","");
map.put ("pageIndex",pageIndex);
map.put ("pageSize",pageSize);
//职业编码
String post = sendPost (HIS_URL+"/zhuShuJu/getListYiShengZd", map);
return JSONUtil.parseObj(post);
}
//获取收费项目分页
public JSON getShouFeiXm (String queryString,String bianGengSj,int pageIndex,int pageSize ) {
Map map = new HashMap<> ();
map.put ("queryString",queryString);
map.put ("bianGengSj",bianGengSj);
map.put ("pageIndex",pageIndex);
map.put ("pageSize",pageSize);
//职业编码
String post = sendPost (HIS_URL+"/zhuShuJu/getShouFeiXm", map);
return JSONUtil.parseObj(post);
}
/**
*科室信息推送
* @param xingZhiSx 组织属性 第一位1 表示 挂号
* 第二位 1表示临床
* 第三位 1表示检查
* 第四位 1 表示手术
* 第五位 1 表示治疗
* 第六位 1 表示护理
* @param queryString 模糊匹配输⼊码1、科室名称
* @param zuoFeiBz 作废标志:0 正常;1 作废
* @param yuanQuId 院区id
* @param keShiIds 科室ID集合
* @param ifPlus 是否查询plus属性
* @return
*/
public JSON getKeShiByConditions (int xingZhiSx, String queryString, int zuoFeiBz, String yuanQuId, ListkeShiIds,int ifPlus) {
Map map = new HashMap<> ();
map.put ("xingZhiSx",xingZhiSx);
map.put ("queryString",queryString);
map.put ("zuoFeiBz",zuoFeiBz);
map.put ("yuanQuId",yuanQuId);
map.put ("keShiIds",keShiIds);
map.put ("ifPlus",ifPlus);
//职业编码
String post = sendPost (HIS_URL+"/zhuShuJu/getKeShiByConditions", map);
return JSONUtil.parseObj(post);
}
/**
* 取样本字典
* @param queryString 样本类型名称(样本名称/样本类型id)
* @param pageIndex
* @param pageSize 每⻚条数(最⼤不能超过100)
* @return
*/
public JSON getYangBen (String queryString,int pageIndex,int pageSize ) {
Map map = new HashMap<> ();
map.put ("queryString",queryString);
map.put ("pageIndex",pageIndex);
map.put ("pageSize",pageSize);
//职业编码
String post = sendPost (HIS_URL+"/zhuShuJu/getYangBen", map);
return JSONUtil.parseObj(post);
}
/**
* 病区信息推送
* @param yuanQuId 院区Id
* @param keShiId 科室Id
* @param pageIndex 当前⻚
* @param pageSize 每⻚条数(最⼤不能超过100)
* @return
*/
public JSON getListBingQuZd (String yuanQuId,String keShiId,int pageIndex,int pageSize ) {
Map map = new HashMap<> ();
map.put ("yuanQuId",yuanQuId);
map.put ("keShiId",keShiId);
map.put ("pageIndex",pageIndex);
map.put ("pageSize",pageSize);
//职业编码
String post = sendPost (HIS_URL+"/zhuShuJu/getListBingQuZd", map);
return JSONUtil.parseObj(post);
}
/**
* 职⼯信息
* @param bianGengSj 变更时间
* @param pageIndex 当前⻚
* @param pageSize 每⻚条数(最⼤不能超过100)
* @return
*/
public JSON getZhiGongPage (String bianGengSj,int pageIndex,int pageSize ) {
Map map = new HashMap<> ();
map.put ("bianGengSj",bianGengSj);
map.put ("pageIndex",pageIndex);
map.put ("pageSize",pageSize);
//职业编码
String post = sendPost (HIS_URL+"/zhuShuJu/getZhiGongPage", map);
return JSONUtil.parseObj(post);
}
/**
* 检查项目
* @param queryString
* @param bianGengSj
* @param pageIndex
* @param pageSize
* @return
*/
public JSON getJianChaXm (String queryString,String bianGengSj,int pageIndex,int pageSize ) {
Map map = new HashMap<> ();
map.put ("queryString",queryString);
map.put ("bianGengSj",bianGengSj);
map.put ("pageIndex",pageIndex);
map.put ("pageSize",pageSize);
//职业编码
String post = sendPost (HIS_URL+"/zhuShuJu/getJianChaXm", map);
return JSONUtil.parseObj(post);
}
/**
* 检验项⽬推送
* @param queryCode 查询码(项⽬编码/拼⾳码
* @param page 当前⻚
* @param size 每⻚条数(最⼤不能超过100
* @return
*/
public JSON getJianYanXm(String queryCode,Integer page,Integer size){
HashMap hashMap = new HashMap<>();
hashMap.put("queryCode",queryCode);
hashMap.put("page",page);
hashMap.put("size",size);
String post = sendPost (HIS_URL+"/zhuShuJu/getJianYanXm", hashMap);
return JSONUtil.parse(post);
}
/**
* 检验项⽬收费推送
* @param shouFeiXmId 收费项⽬id
* @param jiaGeTx 价格体系
* @return
*/
public JSON getShouFeiXmJg(String shouFeiXmId,String jiaGeTx){
HashMap hashMap = new HashMap<>();
hashMap.put("shouFeiXmId",shouFeiXmId);
hashMap.put("jiaGeTx",jiaGeTx);
String post = sendPost (HIS_URL+"/zhuShuJu/getShouFeiXmJg", hashMap);
return JSONUtil.parse(post);
}
/**
* 检验容器
* @param queryString 容器名称(容器名称/输⼊码1)
* @param pageIndex 当前⻚
* @param pageSize 每⻚条数(最⼤不能超过100)
* @return
*/
public JSON getRongQi(String queryString,Integer pageIndex,Integer pageSize){
HashMap hashMap = new HashMap<>();
hashMap.put("queryString",queryString);
hashMap.put("pageIndex",pageIndex);
hashMap.put("pageSize",pageSize);
String post = sendPost (HIS_URL+"/zhuShuJu/getRongQi", hashMap);
return JSONUtil.parse(post);
}
/**
* 检验样本
* @param queryString 样本类型名称(样本名称/样本类型id)
* @param pageIndex 当前⻚
* @param pageSize 每⻚条数(最⼤不能超过100)
* @return
*/
public JSON getYangBen(String queryString,Integer pageIndex,Integer pageSize){
HashMap hashMap = new HashMap<>();
hashMap.put("queryString",queryString);
hashMap.put("pageIndex",pageIndex);
hashMap.put("pageSize",pageSize);
String post = sendPost (HIS_URL+"/zhuShuJu/getYangBen", hashMap);
return JSONUtil.parse(post);
}
private String sendPost(String url,Map hashMap){
Map