package com.example.service.shanxiqin.xian; 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.example.config.ConfigValue; import com.example.constant.ApiParamsConstants; import com.example.service.HisService; import com.example.service.ISysConfigService; import com.example.utils.FieldNameConverter; import com.example.utils.HttpClientUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import java.time.Instant; import java.time.LocalDateTime; import java.util.*; import java.util.concurrent.TimeUnit; /** * @Company: 西安路泰科技有限公司 * @Author: zhaowenxuan * @Date: 2024/12/17 17:17 */ @Service("ShanXiQinXiAnMeiJi") public class MeiJiHisService implements HisService { // http://oapi.pbkwyy.com/OAPI/oauth/token // grant_type:client_credentials // client_id:XFZZQEfXTZ7exhhi // client_secret:05a192176c21edfcc9cf5fa26fc5a9e0c5b131ad // http://oapi.pbkwyy.com/OAPI @Autowired public MeiJiHisService(ApplicationContext applicationContext, ConfigValue configValue) { this.applicationContext = applicationContext; this.configValue = configValue; HIS_URL = configValue.getConfigValue("his_api_url") + ":" + configValue.getConfigValue("his_api_port") +"/OAPI/"; } @Autowired private ISysConfigService configService; @Autowired private RedisTemplate redisTemplate; private ConfigValue configValue; private final ApplicationContext applicationContext; private final String HIS_URL; //获取token private JSONObject getToken () { String GRANT_TYPE = "client_credentials"; String CLIENT_ID = "XFZZQEfXTZ7exhhi"; String CLIENT_SECRET = "05a192176c21edfcc9cf5fa26fc5a9e0c5b131ad"; 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 = sendPostTokenFormUrlencoded (HIS_URL+"/oauth/token", map); if (StrUtil.isBlank(post)) return null; return JSONUtil.parseObj(post); } @Override public String jianDang(Map params) { String czy = configService.selectConfigByKey("dfhisczybm"); Map map = new HashMap<> (); map.put ("jiuZhenKh", params.get(ApiParamsConstants.CARD_ID)); map.put ("kaiLeiXing","4"); map.put ("xingMing", params.get(ApiParamsConstants.CUS_NAME)); long cusSex = Long.parseLong(map.get(ApiParamsConstants.CUS_SEX).toString()); if(cusSex==0L){ map.put ("xingBie","男"); }else if(cusSex==1L){ map.put ("xingBie","女"); }else { map.put ("xingBie","未知"); } map.put ("shenFenZh", ApiParamsConstants.CUS_ID_CARD); map.put ("danWeiBh",""); map.put ("chuShengRq", DateUtil.format((LocalDateTime) map.get(ApiParamsConstants.CUS_BRITHDAY),"yyyy-MM-dd")); map.put ("lianXiDz", map.get(ApiParamsConstants.CUS_ADDR)); map.put ("lianXiDh", map.get(ApiParamsConstants.CUS_PHONE)); 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",params.get(ApiParamsConstants.COMP_NAME)); map.put ("canBaoXzMc",""); map.put ("muLuBlLb",""); map.put ("kunNanJzDj",""); map.put ("yiLiaoLb",""); map.put ("minZuDm",""); map.put ("minZuMc",""); // 职业编码 return sendPostTokenFormData(HIS_URL+"/menZhenJz/jianDang", map); } @Override public String getBingRenXxByShengFenZheng(Map params) { String czy = configService.selectConfigByKey("dfhisczybm"); Map map = new HashMap<> (); map.put ("caoZuoYuan",czy); map.put ("shenFenZh", params.get(ApiParamsConstants.CUS_ID_CARD)); map.put ("danWeiBh",""); //职业编码 return sendPostTokenFormData(HIS_URL+"/menZhenJz/getBingRenXxByShengFenZheng", map); } @Override public String saveBingRenXx(Map params) { String czy = configService.selectConfigByKey("dfhisczybm"); Map map = new HashMap<> (); map.put ("jiuZhenKh", params.get(ApiParamsConstants.PATIONID)); map.put ("kaiLeiXing","4"); map.put ("xingMing", params.get(ApiParamsConstants.CUS_NAME)); long cusSex = Long.parseLong(map.get(ApiParamsConstants.CUS_SEX).toString()); if(cusSex==0L){ map.put ("xingBie","男"); }else if(cusSex==1L){ map.put ("xingBie","女"); }else { map.put ("xingBie","未知"); } map.put ("shenFenZh", params.get(ApiParamsConstants.CUS_ID_CARD)); map.put ("danWeiBh",""); map.put ("chuShengRq", DateUtil.format((LocalDateTime) params.get(ApiParamsConstants.CUS_BRITHDAY),"yyyy-MM-dd")); map.put ("lianXiDz", params.get(ApiParamsConstants.CUS_ADDR)); map.put ("lianXiDh", params.get(ApiParamsConstants.CUS_PHONE)); map.put ("feiYongLb",""); map.put ("feiYongXz",""); map.put ("jiLuLy","3"); map.put ("caoZuoYuan",czy); //职业编码 return sendPostTokenFormData(HIS_URL+"/menZhenJz/saveBingRenXx", map); } @Override public String getListDaiShouFei(Map params) { Map map = new HashMap<> (); map.put ("bingRenId",params.get(ApiParamsConstants.PATIONID)); map.put ("jiuZhenKh",params.get(ApiParamsConstants.CARD_ID)); map.put ("yuanQuId",params.get(ApiParamsConstants.YUANQU_ID)); //职业编码 return sendPostTokenFormData(HIS_URL+"/shouFei/getListDaiShouFei", map); } @Override public String createMenZhenFy(Map params) { String czy = configService.selectConfigByKey("dfhisczybm"); Map map = new HashMap<> (); map.put ("bingRenId",params.get(ApiParamsConstants.PATIONID)); map.put ("jiuZhenKh",params.get(ApiParamsConstants.CARD_ID)); map.put ("caoZuoYuan",czy); map.put ("yuanQuId",params.get(ApiParamsConstants.YUANQU_ID)); map.put ("yingYongId","870101"); map.put ("kaiDanKs",params.get(ApiParamsConstants.kaiDanKeShi)); map.put ("dengJiLsh",params.get(ApiParamsConstants.CARD_ID)); map.put ("shouTuiBz",params.get(ApiParamsConstants.SHOU_TUI_STATUS)); map.put ("feiYongMxList",params.get(ApiParamsConstants.FEI_YONG_INFO_LIST)); //职业编码 return sendPostTokenFormData(HIS_URL+"/shouFei/createMenZhenFy", map); } @Override public String cheXiaoMzFy(Map params) { Map map = new HashMap<> (); map.put ("bingRenId",params.get(ApiParamsConstants.PATIONID)); map.put ("jiuZhenKh",params.get(ApiParamsConstants.CARD_ID)); ArrayList ids = new ArrayList<>(); String string = params.get(ApiParamsConstants.FEI_YONG_ID_LIST).toString(); String[] split = string.split(","); Arrays.stream(split).forEach(i -> { JSONObject object = JSONUtil.createObj(); object.putOpt("feiYongId",i); ids.add(object); }); map.put ("feiYongIdList",ids); //职业编码 return sendPostTokenFormData(HIS_URL+"/shouFei/cheXiaoMzFy", map); } @Override public String pushZhiFuMsg(Map params) { Map map = new HashMap<> (); map.put ("feiYongId",params.get(ApiParamsConstants.FEI_YONG_ID)); map.put ("yeWuLx",params.get(ApiParamsConstants.FEI_YONG_STATUS)); //职业编码 return sendPostTokenFormData(HIS_URL+"/shouFei/pushZhiFuMsg", map); } @Override public String getKeShi(Map params) { Map map = new HashMap<> (); map.put ("yuanQuId",params.get(ApiParamsConstants.YUANQU_ID)); map.put ("keShiMc",params.get(ApiParamsConstants.DEPT_NAME)); map.put ("pageIndex",params.get(ApiParamsConstants.PAGE_INDEX)); map.put ("pageSize",params.get(ApiParamsConstants.PAGE_SIZE)); //职业编码 return sendPostTokenFormData(HIS_URL+"/zhuShuJu/getKeShi", map); } @Override public String getListYiShengZd(Map params) { Map map = new HashMap<> (); map.put ("yuanQuId",params.get(ApiParamsConstants.YUANQU_ID)); map.put ("keShiMc",params.get(ApiParamsConstants.DEPT_NAME)); map.put ("bianGengSj",""); map.put ("pageIndex",params.get(ApiParamsConstants.PAGE_INDEX)); map.put ("pageSize",params.get(ApiParamsConstants.PAGE_SIZE)); //职业编码 return sendPostTokenFormData(HIS_URL+"/zhuShuJu/getListYiShengZd", map); } @Override public String getShouFeiXm(Map params) { Map map = new HashMap<> (); map.put ("queryString",params.get(ApiParamsConstants.COMMON_QUERY_KEY)); map.put ("bianGengSj",""); map.put ("pageIndex",params.get(ApiParamsConstants.PAGE_INDEX)); map.put ("pageSize",params.get(ApiParamsConstants.PAGE_SIZE)); //职业编码 return sendPostTokenFormData(HIS_URL+"/zhuShuJu/getShouFeiXm", map); } @Override public String getKeShiByConditions(Map params) { Map map = new HashMap<> (); map.put ("xingZhiSx",""); map.put ("queryString",params.get(ApiParamsConstants.COMMON_QUERY_KEY)); map.put ("zuoFeiBz",params.get(ApiParamsConstants.DEPT_ZUOFEI_STATUS)); map.put ("yuanQuId",params.get(ApiParamsConstants.YUANQU_ID)); map.put ("keShiIds",params.get(ApiParamsConstants.DEPT_IDS)); map.put ("ifPlus",""); //职业编码 return sendPostTokenFormData(HIS_URL+"/zhuShuJu/getKeShiByConditions", map); } @Override public String getYangBen(Map params) { Map map = new HashMap<> (); map.put ("queryString",params.get(ApiParamsConstants.COMMON_QUERY_KEY)); map.put ("pageIndex",params.get(ApiParamsConstants.PAGE_INDEX)); map.put ("pageSize",params.get(ApiParamsConstants.PAGE_SIZE)); //职业编码 return sendPostTokenFormData(HIS_URL+"/zhuShuJu/getYangBen", map); } @Override public String getListBingQuZd(Map params) { Map map = new HashMap<> (); map.put ("yuanQuId",params.get(ApiParamsConstants.YUANQU_ID)); map.put ("keShiId",params.get(ApiParamsConstants.DEPT_ID)); map.put ("pageIndex",params.get(ApiParamsConstants.PAGE_INDEX)); map.put ("pageSize",params.get(ApiParamsConstants.PAGE_SIZE)); //职业编码 return sendPostTokenFormData(HIS_URL+"/zhuShuJu/getListBingQuZd", map); } @Override public String getZhiGongPage(Map params) { Map map = new HashMap<> (); map.put ("bianGengSj",""); map.put ("pageIndex",params.get(ApiParamsConstants.PAGE_INDEX)); map.put ("pageSize",params.get(ApiParamsConstants.PAGE_SIZE)); //职业编码 return sendPostTokenFormData(HIS_URL+"/zhuShuJu/getZhiGongPage", map); } @Override public String getJianChaXm(Map params) { Map map = new HashMap<> (); map.put ("queryString",params.get(ApiParamsConstants.COMMON_QUERY_KEY)); map.put ("bianGengSj",""); map.put ("pageIndex",params.get(ApiParamsConstants.PAGE_INDEX)); map.put ("pageSize",params.get(ApiParamsConstants.PAGE_SIZE)); //职业编码 return sendPostTokenFormData(HIS_URL+"/zhuShuJu/getJianChaXm", map); } @Override public String getJianYanXm(Map map) { HashMap hashMap = new HashMap<>(); hashMap.put("queryCode",map.get(ApiParamsConstants.COMMON_QUERY_KEY)); hashMap.put("page",map.get(ApiParamsConstants.PAGE_INDEX)); hashMap.put("size",map.get(ApiParamsConstants.PAGE_SIZE)); return sendPostTokenFormData(HIS_URL+"/zhuShuJu/getJianYanXm", hashMap); } @Override public String getShouFeiXmJg(Map map) { HashMap hashMap = new HashMap<>(); hashMap.put("shouFeiXmId",map.get(ApiParamsConstants.COMMON_QUERY_KEY)); hashMap.put("jiaGeTx",map.get(ApiParamsConstants.COMMON_QUERY_KEY2)); return sendPostTokenFormData(HIS_URL+"/zhuShuJu/getShouFeiXmJg", hashMap); } @Override public String getRongQi(Map map) { HashMap hashMap = new HashMap<>(); hashMap.put("queryString",map.get(ApiParamsConstants.COMMON_QUERY_KEY)); hashMap.put("pageIndex",map.get(ApiParamsConstants.PAGE_INDEX)); hashMap.put("pageSize",map.get(ApiParamsConstants.PAGE_SIZE)); return sendPostTokenFormData(HIS_URL+"/zhuShuJu/getRongQi", hashMap); } @Override public String getJyYangBen(Map map) { HashMap hashMap = new HashMap<>(); hashMap.put("queryString",map.get(ApiParamsConstants.COMMON_QUERY_KEY)); hashMap.put("pageIndex",map.get(ApiParamsConstants.PAGE_INDEX)); hashMap.put("pageSize",map.get(ApiParamsConstants.PAGE_SIZE)); return sendPostTokenFormData(HIS_URL+"/zhuShuJu/getYangBen", hashMap); } private String sendPost(String url, Map hashMap){ Map 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 sendPostTokenFormUrlencoded(String url, Map hashMap){ Map 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.sendPostTokenFormUrlencoded(url, hashMap, tokenType + " " + accessToken); return StrUtil.isNotBlank(string) ? string : JSONUtil.createObj().toString(); } }else { return refreshToken(url, hashMap); } } private String sendPostTokenFormData(String url, Map hashMap){ Map 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.sendPostTokenFormData(url, hashMap, tokenType + " " + accessToken); if(StrUtil.isNotBlank(string)){ JSON json = FieldNameConverter.convertFieldNames(JSONUtil.parse(string)); return JSONUtil.toJsonStr(json); }else return JSONUtil.createObj().toString(); } }else { return refreshToken(url, hashMap); } } private String refreshToken(String url, Map 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.sendPostTokenFormData(url, hashMap, tokenType + " " + accessToken); if(StrUtil.isNotBlank(string)){ JSON json = FieldNameConverter.convertFieldNames(JSONUtil.parse(string)); return JSONUtil.toJsonStr(json); } else return JSONUtil.createObj().toString(); } } return JSONUtil.createObj().toString(); } }