zhaowenxuan
2 天以前 dedacd79c93f8ef95e0cb986f5e7fbd27ddbd907
ltkj-admin/src/main/java/com/ltkj/web/controller/dongfanghis/DfHisApiMethodService.java
@@ -1,8 +1,15 @@
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;
@@ -12,9 +19,9 @@
import java.io.FileInputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.time.Instant;
import java.util.*;
import java.util.concurrent.TimeUnit;
/**
 * ClassName: DfHisApiMethodService <br/>
@@ -28,17 +35,24 @@
@Slf4j
public class DfHisApiMethodService {
    private static  String HIS_URL = "";
    @Autowired
    private ISysConfigService configService;
//    @Autowired
    private RedisTemplate<String ,Object> redisTemplate;
    private static  String HIS_URL = "http://oapi.pbkwyy.com/OAPI";
    private static String CONFIG_PATH;
    private static  String GRANT_TYPE = "";
    private static  String CLIENT_ID = "";
    private static  String CLIENT_SECRET = "";
    private static  String SCOP = "";
    private static  String GRANT_TYPE = "client_credentials";
    private static  String CLIENT_ID = "XFZZQEfXTZ7exhhi";
    private static  String CLIENT_SECRET = "05a192176c21edfcc9cf5fa26fc5a9e0c5b131ad";
//    private static  String SCOP = "";
//    @Autowired
//    private RedisTemplate<String,Object> redisTemplate;
//    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) {
@@ -52,7 +66,7 @@
            GRANT_TYPE = props.getProperty("grant_type");
            CLIENT_ID= props.getProperty("client_id");
            CLIENT_SECRET = props.getProperty("client_secret");
            SCOP = props.getProperty("scope");
//            SCOP = props.getProperty("scope");
            HIS_URL=url+":"+port+"/OAPI/";
        } catch (IOException throwables) {
            throwables.printStackTrace();
@@ -61,29 +75,39 @@
    //获取token
    public AjaxResult getToken () {
    private JSONObject getToken () {
        Map<String, Object> 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 = HttpClientUtils.sendPost (HIS_URL+"/oauth/token", map);
        return AjaxResult.success ().put ("data", post);
//        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 AjaxResult jianDang (TjCustomer customer) {
    public JSON jianDang (TjCustomer customer) {
        String czy = configService.selectConfigByKey("dfhisczybm");
        Map<String, Object> 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",1);
            map.put ("xingBie","男");
        }else if(cusSex==1L){
            map.put ("xingBie",2);
            map.put ("xingBie","女");
        }else {
            map.put ("xingBie",9);
            map.put ("xingBie","未知");
        }
        map.put ("shenFenZh", customer.getCusIdcard ());
        map.put ("danWeiBh","");
@@ -93,7 +117,7 @@
        map.put ("feiYongLb","");
        map.put ("feiYongXz","");
        map.put ("jiLuLy","3");
        map.put ("caoZuoYuan","1088");
        map.put ("caoZuoYuan",czy);
        map.put ("chongZhiJe","");
        map.put ("yiBaoKh","");
        map.put ("geRenBh","");
@@ -106,34 +130,36 @@
        map.put ("minZuDm","");
        map.put ("minZuMc","");
        //职业编码
        String post = HttpClientUtils.sendPost (HIS_URL+"/menZhenJz/jianDang", map);
        return AjaxResult.success ().put ("data", post);
        String post = sendPost (HIS_URL+"/menZhenJz/jianDang", map);
        return JSONUtil.parseObj(post);
    }
    //验证身份证是否建过档
    public AjaxResult getBingRenXxByShengFenZheng (TjCustomer customer) {
    public JSON getBingRenXxByShengFenZheng (TjCustomer customer) {
        String czy = configService.selectConfigByKey("dfhisczybm");
        Map<String, Object> map = new HashMap<> ();
        map.put ("caoZuoYuan","1088");
        map.put ("caoZuoYuan",czy);
        map.put ("shenFenZh", customer.getCusIdcard ());
        map.put ("danWeiBh","");
        //职业编码
        String post = HttpClientUtils.sendPost (HIS_URL+"/menZhenJz/getBingRenXxByShengFenZheng", map);
        return AjaxResult.success ().put ("data", post);
        String post = sendPost (HIS_URL+"/menZhenJz/getBingRenXxByShengFenZheng", map);
        return JSONUtil.parseObj(post);
    }
    //病人基本信息变更
    public AjaxResult saveBingRenXx (TjCustomer customer) {
    public JSON saveBingRenXx (TjCustomer customer) {
        String czy = configService.selectConfigByKey("dfhisczybm");
        Map<String, Object> 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",1);
            map.put ("xingBie","男");
        }else if(cusSex==1L){
            map.put ("xingBie",2);
            map.put ("xingBie","女");
        }else {
            map.put ("xingBie",9);
            map.put ("xingBie","未知");
        }
        map.put ("shenFenZh", customer.getCusIdcard ());
        map.put ("danWeiBh","");
@@ -143,33 +169,310 @@
        map.put ("feiYongLb","");
        map.put ("feiYongXz","");
        map.put ("jiLuLy","3");
        map.put ("caoZuoYuan","1088");
        map.put ("caoZuoYuan",czy);
        //职业编码
        String post = HttpClientUtils.sendPost (HIS_URL+"/menZhenJz/saveBingRenXx", map);
        return AjaxResult.success ().put ("data", post);
        String post = sendPost (HIS_URL+"/menZhenJz/saveBingRenXx", map);
        return JSONUtil.parseObj(post);
    }
    //待收费费用查询
    public AjaxResult getListDaiShouFei (String bingRenId,String jiuZhenKh,String yuanQuId) {
    public JSON getListDaiShouFei (String bingRenId,String jiuZhenKh,String yuanQuId) {
        Map<String, Object> map = new HashMap<> ();
        map.put ("bingRenId",bingRenId);
        map.put ("jiuZhenKh",jiuZhenKh);
        map.put ("yuanQuId",yuanQuId);
        //职业编码
        String post = HttpClientUtils.sendPost (HIS_URL+"/shouFei/getListDaiShouFei", map);
        return AjaxResult.success ().put ("data", post);
        String post = sendPost (HIS_URL+"/shouFei/getListDaiShouFei", map);
        return JSONUtil.parseObj(post);
    }
    //待收费费用查询
    public AjaxResult createMenZhenFy (String bingRenId,String jiuZhenKh,String yuanQuId) {
    //生成待收费/待退费 费用
    public JSON createMenZhenFy (CreateMenZhenFyDto dto) {
        String czy = configService.selectConfigByKey("dfhisczybm");
        Map<String, Object> map = new HashMap<> ();
        map.put ("bingRenId",bingRenId);
        map.put ("jiuZhenKh",jiuZhenKh);
        map.put ("yuanQuId",yuanQuId);
        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 = HttpClientUtils.sendPost (HIS_URL+"/shouFei/createMenZhenFy", map);
        return AjaxResult.success ().put ("data", post);
        String post = sendPost (HIS_URL+"/shouFei/createMenZhenFy", map);
        return JSONUtil.parseObj(post);
    }
    //门诊未收费费用撤销
    public JSON cheXiaoMzFy (CheXiaoMzFyDto dto) {
        Map<String, Object> 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<String, Object> 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<String, Object> 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<String, Object> 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<String, Object> 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, List<String>keShiIds,int ifPlus) {
        Map<String, Object> 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<String, Object> 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<String, Object> 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<String, Object> 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<String, Object> 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<String, Object> 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<String, Object> 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<String, Object> 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<String, Object> 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<String, Object> hashMap){
        Map<Object, Object> entries = redisTemplate.opsForHash().entries("token:his:df");
        if (entries != null && !entries.isEmpty()) {
            String timeStr = entries.get("time").toString();
            String expiresInStr = entries.get("expires_in").toString();
            long time = Long.parseLong(timeStr);
            long expiresIn = Long.parseLong(expiresInStr);
            Instant tokenExpirationTime = Instant.ofEpochSecond(time).plusSeconds(expiresIn);
            Instant now = Instant.now();
            if (now.isAfter(tokenExpirationTime)){
                return refreshToken(url,hashMap);
            }else {
                String accessToken = entries.get("access_token").toString();
                String tokenType = entries.get("token_type").toString();
                String string = HttpClientUtils.sendPostToken(url, hashMap, tokenType + " " + accessToken);
                return StrUtil.isNotBlank(string) ? string : JSONUtil.createObj().toString();
            }
        }else {
            return refreshToken(url, hashMap);
        }
    }
    private String refreshToken(String url, Map<String, Object> hashMap) {
        JSONObject parseObj = getToken();
        if (parseObj != null) {
            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);
                String accessToken = parseObj.getStr("access_token");
                String tokenType = parseObj.getStr("token_type");
                String string = HttpClientUtils.sendPostToken(url, hashMap, tokenType + " " + accessToken);
                return StrUtil.isNotBlank(string) ? string : JSONUtil.createObj().toString();
            }
        }
        return JSONUtil.createObj().toString();
    }