1、预问诊调整并完成上线

2、处方开立接口测试,字典查询接口返回数据和监管的数据进行匹配,调整返回的字段值
master
王绍全 4 weeks ago
parent 6a0ea773bd
commit 63df648c9c
  1. 11
      src/main/java/com/ynxbd/common/TestA.java
  2. 8
      src/main/java/com/ynxbd/common/action/TreatAction.java
  3. 4
      src/main/java/com/ynxbd/common/action/healthcard/HCPreConsultAction.java
  4. 113
      src/main/java/com/ynxbd/common/action/xk/XKAction.java
  5. 44
      src/main/java/com/ynxbd/common/action/xk/XK_WMFrequencyEnum.java
  6. 89
      src/main/java/com/ynxbd/common/action/xk/XK_WMUseWayEnum.java
  7. 8
      src/main/java/com/ynxbd/common/bean/his/HisTreat.java
  8. 5
      src/main/java/com/ynxbd/common/bean/xk/HisRxDict.java
  9. 82
      src/main/java/com/ynxbd/common/bean/xk/HisRxItem.java
  10. 7
      src/main/java/com/ynxbd/common/bean/xk/HisRxUseCount.java
  11. 34
      src/main/java/com/ynxbd/common/bean/xk/HisTCMRxItem.java
  12. 56
      src/main/java/com/ynxbd/common/bean/xk/HisWMRxItem.java
  13. 7
      src/main/java/com/ynxbd/common/config/interceptor/AesDecode.java
  14. 2
      src/main/java/com/ynxbd/common/config/interceptor/MethodInterceptor.java
  15. 6
      src/main/java/com/ynxbd/common/dao/his/HisTreatDao.java
  16. 112
      src/main/java/com/ynxbd/common/dao/his/HisXKDao.java
  17. 20
      src/main/java/com/ynxbd/common/healthcard/HCPreConsultHelper.java
  18. 4
      src/main/java/com/ynxbd/common/helper/common/AesHelper.java
  19. 10
      src/main/java/com/ynxbd/common/service/CasebookService.java
  20. 2
      src/main/java/com/ynxbd/wx/config/MessagePushConfig.java
  21. 4
      src/main/java/com/ynxbd/wx/wxfactory/AesWxHelper.java

File diff suppressed because one or more lines are too long

@ -110,16 +110,12 @@ public class TreatAction extends BaseAction {
}
@Action("getInfoByTreatNum")
public Result getInfoByTreatNum(@AesDecode String treatNum) {
public Result getInfoByTreatNum(@AesDecode(AesClass = AesMicroHelper.class) String treatNum) {
try {
if (treatNum == null) {
return Result.error(ResultEnum.PARAM_IS_BLANK);
}
treatNum = AesMicroHelper.decode(treatNum);
log.info("[就诊记录]查询信息 treatNum={}", treatNum);
if (ObjectUtils.isEmpty(treatNum)) {
return Result.error(ResultEnum.PARAM_IS_INVALID);
}
log.info("[就诊记录]查询信息 treatNum={}", treatNum);
List<HisTreat> daatList = new HisTreatDao().getInfoByTreatNum(treatNum);
return Result.success(daatList);
} catch (ServiceException e) {

@ -182,7 +182,7 @@ public class HCPreConsultAction extends BaseAction {
item.setUpdateTime(register.getUpdateTime());
item.setRegDate(register.getRegDate());
item.setOutTradeNo(register.getOutTradeNo());
item.setUrl(HCPreConsultHelper.getH5Online(register.getOutTradeNo()));
item.setUrl(HCPreConsultHelper.getH5Online(register.getOutTradeNo(), isHttpsWithProxy()));
dataList.add(register);
}
@ -198,7 +198,7 @@ public class HCPreConsultAction extends BaseAction {
if (ObjectUtils.isEmpty(openId) || ObjectUtils.isEmpty(registerId)) {
return Result.error(ResultEnum.PARAM_IS_DEFECT);
}
String url = HCPreConsultHelper.getH5Online(registerId);
String url = HCPreConsultHelper.getH5Online(registerId, isHttpsWithProxy());
if (ObjectUtils.isEmpty(url)) {
return Result.error();
}

@ -3,20 +3,21 @@ package com.ynxbd.common.action.xk;
import com.alibaba.fastjson.JSONObject;
import com.ynxbd.common.action.base.BaseAction;
import com.ynxbd.common.bean.his.HisTreat;
import com.ynxbd.common.bean.xk.HisRxItem;
import com.ynxbd.common.config.interceptor.AesDecode;
import com.ynxbd.common.dao.his.HisTreatDao;
import com.ynxbd.common.dao.his.HisXKDao;
import com.ynxbd.common.helper.common.JsonHelper;
import com.ynxbd.common.result.JsonResult;
import com.ynxbd.common.result.Result;
import com.ynxbd.common.result.ResultEnum;
import com.ynxbd.wx.wxfactory.AesWxHelper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Slf4j
@ -24,74 +25,104 @@ import java.util.List;
public class XKAction extends BaseAction {
@Action("getRxDict")
public Result getRxDict(String callNo, String type) {
public Result getRxDict(String callNo, String type, String key, String yfCode) {
if (!"xbd2026".equals(callNo)) {
return Result.error(ResultEnum.PARAM_IS_INVALID);
}
log.info("[开方]字典查询 type={}", type);
log.info("[开方]字典查询 type={}, yfCode={}", type, yfCode);
if (type == null) {
return Result.error(ResultEnum.PARAM_IS_DEFECT);
}
List<?> dataList = new HisXKDao().queryHisRxDict(type);
List<?> dataList = new HisXKDao().queryHisRxDict(type, key, yfCode);
return Result.success(dataList);
}
@Action("createHisRx")
public Result createHisRx() {
JSONObject body = getBody();
if (body == null) {
return Result.error(ResultEnum.PARAM_IS_DEFECT);
}
String doctCode = body.getString("doctCode");
String treatNum = body.getString("treatNum");
String rxType = body.getString("rxType");
String diagnose = body.getString("diagnose");
String weight = body.getString("weight");
String note = body.getString("note");
String ybAttrib = body.getString("ybAttrib");
String bzCode = body.getString("bzCode");
String bzName = body.getString("bzName");
String rxJson = body.getString("rxJsonArr");
log.info("[开方]doctCode={}, treatNum={}, rxType={}", doctCode, treatNum, rxType);
if (ObjectUtils.isEmpty(doctCode) || ObjectUtils.isEmpty(treatNum) || ObjectUtils.isEmpty(rxType)) {
return Result.error(ResultEnum.PARAM_IS_DEFECT);
}
List<HisRxItem> hisRxItems = JsonHelper.parseArray(rxJson, HisRxItem.class);
if (hisRxItems.isEmpty()) {
return Result.error(ResultEnum.PARAM_IS_DEFECT);
}
try {
JSONObject body = getBody();
if (body == null) {
return Result.error(ResultEnum.PARAM_IS_DEFECT);
}
String doctCode = body.getString("doctCode");
String treatNum = body.getString("treatNum");
String rxDrugType = body.getString("rxDrugType"); // 处方药品类型
String rxTypeCode = body.getString("rxTypeCode");
String rxDiagnose = body.getString("rxDiagnose");
String weight = body.getString("weight");
String note = body.getString("note");
String ybAttrib = body.getString("ybAttrib");
String bzCode = body.getString("bzCode");
String bzName = body.getString("bzName");
String items = body.getString("items");
// 中药=============================================
String tcmTtName = body.getString("tcmTtName");
String tcmUseName = body.getString("tcmUseName");
String tcmCFCount = body.getString("tcmCFCount");
String tcmCFUseCount = body.getString("tcmCFUseCount");
String tcmUseCountForDay = body.getString("tcmUseCountForDay");
log.info("[处方开立]doctCode={}, treatNum={}, rxDrugType={}, weight={}, items={}", doctCode, treatNum, rxDrugType, weight, items);
if (ObjectUtils.isEmpty(doctCode) || ObjectUtils.isEmpty(treatNum) || ObjectUtils.isEmpty(rxDrugType) || ObjectUtils.isEmpty(weight) || ObjectUtils.isEmpty(items)) {
return Result.error(ResultEnum.PARAM_IS_DEFECT);
}
JsonResult resp = new HisXKDao().createHisRx(doctCode, treatNum, rxType, diagnose, weight, note, ybAttrib, bzCode, bzName, hisRxItems);
if (!resp.success()) {
return Result.error(resp.getMessage());
JsonResult resp = new HisXKDao().createHisRx(items, doctCode, treatNum, rxDrugType, rxTypeCode, rxDiagnose, weight, note, ybAttrib, bzCode, bzName,
tcmTtName, tcmUseName, tcmCFCount, tcmCFUseCount, tcmUseCountForDay);
if (!resp.success()) {
return Result.error(resp.getMessage());
}
String rxCode = resp.getDataMapString("CFNum");
String amount = resp.getDataMapString("Amount");
if (ObjectUtils.isEmpty(rxCode) || ObjectUtils.isEmpty(amount)) {
return Result.error("处方开立未返回处方号或金额");
}
Map<String, Object> data = new HashMap<>();
data.put("rxCode", rxCode);
data.put("enRxCode", AesWxHelper.encode(rxCode));
data.put("enAmount", AesWxHelper.encode(amount));
return Result.success(data);
} catch (Exception e) {
return Result.error(e);
}
return Result.success();
}
@Action("updateHisTreat")
public Result updateHisTreat(@AesDecode String openId, @AesDecode String treatNum, String symptom, String subjComplaint, String disDescription, String treatMeas,
String tcmDdCode, String tcmDdName, String tcmSdCode, String tcmSdName, String mdDisCode, String mdDisName,
String pastHistory, String presentHistory, String alleHist, String disCode1, String disName1, String disCode2, String disName2) {
String pastHist, String presentHist, String alleHist, String disCode1, String disName1, String disCode2, String disName2) {
try {
log.info("[HIS更新就诊记录] treatNum={}, symptom={}, subjComplaint={}, disDescription={}, treatMeas={}, tcmDdCode={}, tcmDdName={}, tcmSdCode={}, tcmSdName={}, mdDisCode={}, mdDisName={}",
treatNum, symptom, subjComplaint, disDescription, treatMeas, tcmDdCode, tcmDdName, tcmSdCode, tcmSdName, mdDisCode, mdDisName);
log.info("[HIS更新就诊记录] openId={}, treatNum={}, symptom={}, subjComplaint={}, disDescription={}, treatMeas={}, tcmDdCode={}, tcmDdName={}, tcmSdCode={}, tcmSdName={}, mdDisCode={}, mdDisName={}",
openId, treatNum, symptom, subjComplaint, disDescription, treatMeas, tcmDdCode, tcmDdName, tcmSdCode, tcmSdName, mdDisCode, mdDisName);
if (ObjectUtils.isEmpty(openId) || ObjectUtils.isEmpty(treatNum)) {
return Result.error(ResultEnum.PARAM_IS_INVALID);
}
if (ObjectUtils.isEmpty(symptom) || ObjectUtils.isEmpty(subjComplaint) || ObjectUtils.isEmpty(disDescription) || ObjectUtils.isEmpty(treatMeas)
|| ObjectUtils.isEmpty(tcmDdCode) || ObjectUtils.isEmpty(tcmDdName) || ObjectUtils.isEmpty(tcmSdCode) || ObjectUtils.isEmpty(tcmSdName)
|| ObjectUtils.isEmpty(mdDisCode) || ObjectUtils.isEmpty(mdDisName)
) {
if (ObjectUtils.isEmpty(subjComplaint) || ObjectUtils.isEmpty(disDescription) || ObjectUtils.isEmpty(treatMeas)) {
return Result.error(ResultEnum.PARAM_IS_DEFECT);
}
if (ObjectUtils.isEmpty(tcmDdCode) && ObjectUtils.isEmpty(mdDisCode)) {
return Result.error("请选择中医或西医诊断");
}
if (!ObjectUtils.isEmpty(tcmDdCode)) {
if (ObjectUtils.isEmpty(tcmSdName)) {
return Result.error("中医诊断名称[tcmSdName]缺失");
}
if (ObjectUtils.isEmpty(tcmSdCode) || ObjectUtils.isEmpty(tcmSdName)) {
return Result.error("中医证侯诊断[tcmSdCode]缺失");
}
}
if (!ObjectUtils.isEmpty(mdDisCode) && ObjectUtils.isEmpty(mdDisName)) {
return Result.error("西医诊断名称[mdDisName]缺失");
}
HisTreat data = new HisTreatDao().updateHisTreat(treatNum, symptom, subjComplaint, disDescription, treatMeas, tcmDdCode, tcmDdName, tcmSdCode, tcmSdName, mdDisCode, mdDisName, pastHistory, presentHistory, alleHist, disCode1, disName1, disCode2, disName2);
HisTreat data = new HisTreatDao().updateHisTreat(treatNum, symptom, subjComplaint, disDescription, treatMeas, tcmDdCode, tcmDdName, tcmSdCode, tcmSdName, mdDisCode, mdDisName, pastHist, presentHist, alleHist, disCode1, disName1, disCode2, disName2);
if (data == null) {
return Result.error();
}

@ -0,0 +1,44 @@
package com.ynxbd.common.action.xk;
import org.apache.commons.lang3.ObjectUtils;
public enum XK_WMFrequencyEnum {
CODE_BID(1, "bid", "2 次/天"),
CODE_BIW(2, "biw", "2 次/周"),
CODE_HS(3, "Hs", "睡前服用"),
CODE_Q12H(4, "q12h", "1 次/12h"),
CODE_Q1H(5, "q1h", "1 次/h"),
CODE_Q3H(6, "q3h", "1 次/3h"),
CODE_Q6H(7, "q6h", "1 次/6h"),
CODE_Q8H(8, "q8h", "1 次/8h"),
CODE_QD(9, "qd", "1 次/d"),
CODE_QID(10, "qid", "4 次/d"),
CODE_QOD(11, "qod", "隔天 1 次"),
CODE_QW(12, "qw", "1 次/周"),
CODE_ST(13, "st", "立即服用"),
CODE_OTH(14, "oth", "其他");
public final int SEQ;
public final String CODE;
public final String NAME;
XK_WMFrequencyEnum(int SEQ, String CODE, String NAME) {
this.SEQ = SEQ;
this.CODE = CODE;
this.NAME = NAME;
}
public static XK_WMFrequencyEnum findEnum(String code) {
if (ObjectUtils.isEmpty(code)) {
return null;
}
for (XK_WMFrequencyEnum item : XK_WMFrequencyEnum.values()) {
if (item.CODE.equals(code)) {
return item;
}
}
return null;
}
}

@ -0,0 +1,89 @@
package com.ynxbd.common.action.xk;
import org.apache.commons.lang3.ObjectUtils;
import java.util.List;
// 用药途径
public enum XK_WMUseWayEnum {
_1("1", "口服", "经口吞服药物"),
_2("2", "直肠用药", "将药物经肛门塞入或注入直肠"),
_3("3", "舌下用药", "将药物置于舌下/颊部的给药方法"),
_4("4", "注射用药", "将药物经过表皮注入体内"),
_401("401", "皮下注射", "将药物注射入皮下组织"),
_402("402", "皮内注射", "将药物注射入皮内组织"),
_403("403", "肌肉注射", "将药物注射入肌肉组织内"),
_404("404", "静脉注射或静脉滴注", "将药物注入静脉血管内"),
_5("5", "吸入用药", "将药物化为气雾状而后由呼吸道吸入"),
_6("6", "局部用药", "主要发挥局部作用的给药方法"),
_601("601", "椎管内用药", "将药物注入椎管内"),
_602("602", "关节腔内用药", "将药物注入关节腔内"),
_603("603", "胸腔膜用药", "将药物注入胸膜腔内"),
_604("604", "腹腔用药", "将药物注入腹腔内"),
_605("605", "阴道用药", "将药物置于阴道中"),
_606("606", "气管内用药", "将药物注入气管内"),
_607("607", "滴眼", "将药物经眼滴入"),
_608("608", "滴鼻", "将药物经鼻滴入"),
_609("609", "喷喉", "将药物喷于喉部黏膜表面"),
_610("610", "含化", "将药物置于口腔内含化"),
_611("611", "敷伤口", "将药物直接敷于伤口表面"),
_612("612", "擦皮肤", "用药物擦拭皮肤"),
_699("699", "其他局部用药途径", "其他局部用药途径"),
_9("9", "其他用药途径", "其他用药途径");
public final String CODE;
public final String NAME;
public final String REMARK;
XK_WMUseWayEnum(String CODE, String NAME, String REMARK) {
this.CODE = CODE;
this.NAME = NAME;
this.REMARK = REMARK;
}
/**
* 根据code匹配枚举
*
* @param code 编码
* @return enum
*/
public static XK_WMUseWayEnum findEnum(String code) {
if (ObjectUtils.isEmpty(code)) {
return null;
}
for (XK_WMUseWayEnum item : XK_WMUseWayEnum.values()) {
if (item.CODE.equals(code)) {
return item;
}
}
return null;
}
/**
* 根据名称匹配枚举
*
* @param name 名称
* @return enum
*/
public static XK_WMUseWayEnum findEnumByName(String name) {
if (ObjectUtils.isEmpty(name)) {
return null;
}
for (XK_WMUseWayEnum item : XK_WMUseWayEnum.values()) {
if (item.NAME.equals(name)) {
return item;
}
}
for (XK_WMUseWayEnum item : XK_WMUseWayEnum.values()) {
if (item.NAME.contains(name)) {
return item;
}
if (name.contains(item.NAME)) {
return item;
}
}
return null;
}
}

@ -15,8 +15,16 @@ public class HisTreat {
private String treatNum;
private String registerDate;
private String patientId;
private String patientName;
// 患者就诊卡证号码
private String patientIdCardNo;
// 患者性别代码
private String patientGenderCode;
// 患者出生日期
private String patientBirthdate;
private String deptCode;
private String deptName;
// 挂号医生

@ -18,4 +18,9 @@ public class HisRxDict {
private String name;
// PYM 拼音码
private String pym;
// 监管平台显示名称
private String xkName;
private String xkCode;
private String xkSeq;
private String xkSeq2;
}

@ -1,82 +0,0 @@
package com.ynxbd.common.bean.xk;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import java.io.Serializable;
@Setter
@Getter
@ToString
@NoArgsConstructor
public class HisRxItem implements Serializable {
private static final long serialVersionUID = 2026082712724000001L;
// 项目编码
@JSONField(ordinal = 1)
private String xmCode;
// 项目名称
@JSONField(ordinal = 2)
private String xmName;
// 科目编码
@JSONField(ordinal = 3)
private String kmCode;
// 科目名称
@JSONField(ordinal = 4)
private String kmName;
// 项目单位
@JSONField(ordinal = 5)
private String xmUnit;
// 项目单价
@JSONField(ordinal = 6)
private String xmPrice;
// 项目数量
@JSONField(ordinal = 7)
private String xmCount;
// 项目金额
@JSONField(ordinal = 8)
private String xmMoney;
// 项目标识
@JSONField(ordinal = 9)
private Integer xmFlag;
// 药品剂量
@JSONField(ordinal = 10)
private String ypJl;
// 药品剂量单位
@JSONField(ordinal = 11)
private String ypJlUnit;
// 用法频次 qd/bid等
@JSONField(ordinal = 12)
private String yzUsedMethod;
// 每日次数
@JSONField(ordinal = 13)
private String yzCountForDay;
// 每周次数
@JSONField(ordinal = 14)
private String yzCountForWeek;
// 用药途径:口服
@JSONField(ordinal = 15)
private String ypPath;
// 药房编码
@JSONField(ordinal = 16)
private String yfCode;
// 药房名称
@JSONField(ordinal = 17)
private String yfName;
// 医保类别编码
@JSONField(ordinal = 18)
private String yblb;
// 医保类别名称
@JSONField(ordinal = 19)
private String yblbName;
// 总数量
@JSONField(ordinal = 20)
private String totCount;
// 备注
@JSONField(ordinal = 21)
private String note;
}

@ -20,4 +20,11 @@ public class HisRxUseCount {
private Integer countForWeek;
// PYM 拼音码
private String pym;
// 监管显示的名称
private String xkName;
private String xkCode;
private Integer xkSeq;
}

@ -0,0 +1,34 @@
package com.ynxbd.common.bean.xk;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import java.io.Serializable;
@Setter
@Getter
@ToString
@NoArgsConstructor
public class HisTCMRxItem implements Serializable {
private static final long serialVersionUID = 2026082712724000001L;
// 药品编码
@JSONField(ordinal = 1, name = "GOODSNO")
private String goodsNo;
// 药品数量
@JSONField(ordinal = 2, name = "YPCOUNT")
private String ypCount;
// 药房编码
@JSONField(ordinal = 3, name = "YFCODE")
private String yfCode;
// 药房名称
@JSONField(ordinal = 4, name = "YFNAME")
private String yfName;
// 备注
@JSONField(ordinal = 5, name = "NOTE")
private String note;
}

@ -0,0 +1,56 @@
package com.ynxbd.common.bean.xk;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import java.io.Serializable;
@Setter
@Getter
@ToString
@NoArgsConstructor
public class HisWMRxItem implements Serializable {
private static final long serialVersionUID = 2026082712724000001L;
// 项目编码
@JSONField(ordinal = 1, name = "XMCODE")
private String xmCode;
// 项目数量
@JSONField(ordinal = 2, name = "XMCOUNT")
private String xmCount;
// 项目标识
@JSONField(ordinal = 3, name = "XMFLAG")
private Integer xmFlag;
// 药品剂量
@JSONField(ordinal = 4, name = "YPJL")
private String ypJl;
// 用法频次 qd/bid等
@JSONField(ordinal = 5, name = "YZUSEDMETHOD")
private String yzUsedMethod;
// 每日次数
@JSONField(ordinal = 6, name = "YZCOUNTFORDAY")
private String yzCountForDay;
// 每周次数
@JSONField(ordinal = 7, name = "YZCOUNTFORWEEK")
private String yzCountForWeek;
// 用药途径:口服
@JSONField(ordinal = 8, name = "YPPATH")
private String ypPath;
// 药房编码
@JSONField(ordinal = 9, name = "YFCODE")
private String yfCode;
// 药房名称
@JSONField(ordinal = 10, name = "YFNAME")
private String yfName;
// 总数量
@JSONField(ordinal = 11, name = "TOTCOUNT")
private String totCount;
// 备注
@JSONField(ordinal = 12, name = "NOTE")
private String note;
}

@ -8,9 +8,12 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.PARAMETER})
@Target({
ElementType.PARAMETER,
ElementType.ANNOTATION_TYPE // 允许注解打在@interface上
})
@Retention(RetentionPolicy.RUNTIME)
public @interface AesDecode {
Class<? extends AesHelper> respAesClass() default AesWxHelper.class;
Class<? extends AesHelper> AesClass() default AesWxHelper.class;
}

@ -60,7 +60,7 @@ public class MethodInterceptor extends org.apache.struts2.interceptor.AbstractIn
}
try {
Class<? extends AesHelper> response = annoAesDecode.respAesClass();
Class<? extends AesHelper> response = annoAesDecode.AesClass();
if (response == null) {
value = null;
} else {

@ -188,7 +188,7 @@ public class HisTreatDao {
*/
public HisTreat updateHisTreat(String treatNum, String symptom, String subjComplaint, String disDescription, String treatMeas,
String tcmDdCode, String tcmDdName, String tcmSdCode, String tcmSdName, String mdDisCode, String mdDisName,
String pastHistory, String presentHistory, String alleHist, String disCode1, String disName1, String disCode2, String disName2) throws ServiceException {
String pastHist, String presentHist, String alleHist, String disCode1, String disName1, String disCode2, String disName2) throws ServiceException {
JsonResult jsonResult = HisFactory.His().getJsonResult(HisEnum.XK_UPDATE_TREAT, params -> {
params.put("MZNum", treatNum); // 门诊号
params.put("Symptom", symptom); // 症状和体征=[T:x℃]
@ -203,8 +203,8 @@ public class HisTreatDao {
params.put("MdDisCode", mdDisCode); // 西医诊断疾病代码
params.put("MdDisName", mdDisName); // 西医诊断疾病名称
//
params.put("PastHistory", pastHistory); // 既往病史
params.put("PresentHistory", presentHistory); // 现病史
params.put("PastHistory", pastHist); // 既往病史
params.put("PresentHistory", presentHist); // 现病史
params.put("AlleHist", alleHist); // 过敏史
//
params.put("DisCode1", disCode1); // 其他诊断①疾病代码

@ -1,28 +1,84 @@
package com.ynxbd.common.dao.his;
import com.ynxbd.common.action.xk.XK_WMFrequencyEnum;
import com.ynxbd.common.action.xk.XK_WMUseWayEnum;
import com.ynxbd.common.bean.xk.*;
import com.ynxbd.common.helper.common.JsonHelper;
import com.ynxbd.common.his.HisEnum;
import com.ynxbd.common.his.HisFactory;
import com.ynxbd.common.result.JsonResult;
import com.ynxbd.common.result.Result;
import com.ynxbd.common.result.ResultEnum;
import com.ynxbd.common.result.ServiceException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
@Slf4j
public class HisXKDao {
public List<?> queryHisRxDict(String type) {
public List<?> queryHisRxDict(String type, String key, String yfCode) {
JsonResult jsonResult = HisFactory.His().getJsonResult(HisEnum.HIS_XK_RX_DICT, params -> {
params.put("Flag", type); // 1:用药频次字典; 2:给要途径字典; 3:药房字典; 4:药品
params.put("Flag", type); // 1:用药频次字典; 2:给要途径字典; 3:药房字典; 4:药品
params.put("YFCode", yfCode); // 药房编码
});
if ("1".equals(type)) { // 用药频次字典
return jsonResult.getDataMapList(HisRxUseCount.class, "Items", "Item");
List<HisRxUseCount> dictList = jsonResult.getDataMapList(HisRxUseCount.class, "Items", "Item");
for (HisRxUseCount item : dictList) {
if (ObjectUtils.isEmpty(item.getCode())) {
continue;
}
XK_WMFrequencyEnum findEnum = XK_WMFrequencyEnum.findEnum(item.getCode());
if (findEnum != null) {
item.setXkCode(findEnum.CODE);
item.setXkName(findEnum.NAME);
item.setXkSeq(findEnum.SEQ);
} else {
item.setXkCode(XK_WMFrequencyEnum.CODE_OTH.CODE);
item.setXkName(XK_WMFrequencyEnum.CODE_OTH.NAME);
item.setXkSeq(XK_WMFrequencyEnum.CODE_OTH.SEQ);
}
}
return dictList.stream().sorted(Comparator.comparingInt(HisRxUseCount::getXkSeq)).collect(Collectors.toList());
}
if ("2".equals(type)) { // 给要途径字典
return jsonResult.getDataMapList(HisRxDict.class, "Items", "Item");
List<HisRxDict> dictList = jsonResult.getDataMapList(HisRxDict.class, "Items", "Item");
for (HisRxDict item : dictList) {
if (ObjectUtils.isEmpty(item.getCode())) {
continue;
}
XK_WMUseWayEnum findEnum = XK_WMUseWayEnum.findEnumByName(item.getName());
if (findEnum != null) {
item.setXkCode(findEnum.CODE);
item.setXkName(findEnum.NAME);
item.setXkSeq(findEnum.CODE.substring(0, 1));
item.setXkSeq2(findEnum.CODE.substring(0, 1));
} else {
item.setXkCode(XK_WMUseWayEnum._9.CODE);
item.setXkName(XK_WMUseWayEnum._9.NAME);
item.setXkSeq(XK_WMUseWayEnum._9.CODE);
item.setXkSeq2("0");
}
}
dictList.sort((o1, o2) -> {
// 第一条件:seq升序,null放末尾
int cmp = Comparator.nullsLast(String::compareTo).compare(o1.getXkSeq(), o2.getXkSeq());
if (cmp != 0) {
return cmp;
}
// seq相同,按seq2字典序,null放前面
return Comparator.nullsFirst(String::compareTo).compare(o1.getXkSeq2(), o2.getXkSeq2());
});
return dictList;
}
if ("3".equals(type)) { // 药房字典
return jsonResult.getDataMapList(HisRxDict.class, "Items", "Item");
@ -42,18 +98,46 @@ public class HisXKDao {
return new ArrayList<>();
}
public JsonResult createHisRx(String doctCode, String treatNum, String rxType, String diagnose, String weight, String note, String ybAttrib, String bzCode, String bzName, List<HisRxItem> hisRxItems) {
public JsonResult createHisRx(String items, String doctCode, String treatNum, String rxDrugType, String rxTypeCode, String rxDiagnose, String weight, String note, String ybAttrib, String bzCode, String bzName,
String tcmTtName, String tcmUseName, String tcmCFCount, String tcmCFUseCount, String tcmUseCountForDay) throws ServiceException {
Object rxList;
if ("1".equals(rxDrugType)) { // 西药
List<HisWMRxItem> hisWMRxItems = JsonHelper.parseArray(items, HisWMRxItem.class);
if (hisWMRxItems.isEmpty()) {
throw new ServiceException(ResultEnum.PARAM_IS_INVALID);
}
rxList = hisWMRxItems;
} else {
log.info("[中药-处方开立]tcmTtName={}, tcmUseName={}, tcmCFCount={}, tcmCFUseCount={}, tcmUseCountForDay={}", tcmTtName, tcmUseName, tcmCFCount, tcmCFUseCount, tcmUseCountForDay);
if (ObjectUtils.isEmpty(tcmTtName) || ObjectUtils.isEmpty(tcmUseName) || ObjectUtils.isEmpty(tcmCFCount) || ObjectUtils.isEmpty(tcmCFUseCount) || ObjectUtils.isEmpty(tcmUseCountForDay)) {
throw new ServiceException(ResultEnum.PARAM_IS_DEFECT);
}
List<HisTCMRxItem> hisTCMRxItems = JsonHelper.parseArray(items, HisTCMRxItem.class);
if (hisTCMRxItems.isEmpty()) {
throw new ServiceException(ResultEnum.PARAM_IS_INVALID);
}
rxList = hisTCMRxItems;
}
JsonResult jsonResult = HisFactory.His().getJsonResult(HisEnum.HIS_XK_RX_CREATE, params -> {
params.put("YSCode", doctCode); // 开单医生编码
params.put("MZNum", treatNum); // 门诊号
params.put("CFType", rxType); // 处方类型 [1:西药]
params.put("MZDiagnose", diagnose); // 处方诊断
params.put("Weight", weight); // 体重
params.put("MZNum", treatNum); // 门诊号
params.put("CFFlag", rxDrugType); // 处方药品类别[1:西药处方;2:中药处方]
params.put("CFType", ObjectUtils.isEmpty(rxTypeCode) ? "0" : rxTypeCode); // 处方类型[0:普通处方 (默认值) 1:急诊处方 2:儿科处方....]
params.put("MZDiagnose", ObjectUtils.isEmpty(rxDiagnose) ? "无" : rxDiagnose); // 处方诊断
params.put("Weight", weight); // 体重
params.put("Note", ObjectUtils.isEmpty(note) ? "" : note); // 备注
params.put("YBAttrib", ybAttrib); // 医保类别
params.put("BZCode", bzCode); // 病种编码
params.put("BZName", bzName); // 病种名称
params.put("Jarray", JsonHelper.toJsonStringEmpty(hisRxItems));
params.put("YBAttrib", ybAttrib); // 医保类别
params.put("BZCode", bzCode); // 病种编码
params.put("BZName", bzName); // 病种名称
params.put("YSCode", doctCode); // 开单医生编码
// 中药===========================================================
params.put("TT_Name", tcmTtName); // 汤头名称
params.put("UsedName", tcmUseName); // 用法
params.put("CFCount", tcmCFCount); // 处方付数
params.put("CFUseCount", tcmCFUseCount); // 处方单付使用次数
params.put("UseCountForDay", tcmUseCountForDay); // 每日使用次数
params.put("Jarray", JsonHelper.toJsonStringEmpty(rxList));
});
log.info("[开方]返回 resp={}", JsonHelper.toJsonString(jsonResult.getDataMap()));
return jsonResult;

@ -8,6 +8,7 @@ import com.ynxbd.common.healthcard.config.HCPreConsultConfig;
import com.ynxbd.common.healthcard.config.HCReportConfig;
import com.ynxbd.common.helper.common.CodeHelper;
import com.ynxbd.common.helper.common.JsonHelper;
import com.ynxbd.common.helper.common.URLHelper;
import com.ynxbd.common.helper.http.OkHttpHelper;
import com.ynxbd.common.result.ServiceException;
import com.ynxbd.common.service.PatientService;
@ -60,7 +61,7 @@ public class HCPreConsultHelper {
String deptCode = order.getDeptCode();
if (!ObjectUtils.isEmpty(HCPreConsultConfig.DEV_OPEN_IDS) && !HCPreConsultConfig.hasDevOpenId(openid)) {
System.out.println("[[预问诊]上传挂号数据-不是测试账号");
System.out.println("[预问诊]上传挂号数据-不是测试账号");
return;
}
@ -104,7 +105,7 @@ public class HCPreConsultHelper {
sceneData.put("encounterDate", regDate + " " + begTime); // yyyy-MM-dd HH:mm:ss
sceneData.put("partnerAppId", HCPreConsultConfig.APP_ID); // 开发者ID(AppID),在管理>开发商接入 下查询
sceneData.put("partnerId", HCPreConsultConfig.PARTNER_ID);
String uuid = CodeHelper.get32UUID();
// partnerId:注意这里使用的是报告配置的-PARTNER_ID
JSONObject respJson = post(url + HCReportConfig.PARTNER_ID, req -> {
req.put("reqHead", reqHead);
@ -121,7 +122,7 @@ public class HCPreConsultHelper {
req.put("department", deptCode); // 科室代码
req.put("scene", "0101015");
req.put("sceneData", JsonHelper.toJsonString(sceneData));
log.info("[预问诊]req={}", JsonHelper.toJsonString(req));
log.info("[预问诊][{}] req={}", uuid, JsonHelper.toJsonString(req));
}, headers -> {
headers.add("Content-Type", "application/json");
headers.add("god-portal-signature", config.getSignature());
@ -129,27 +130,28 @@ public class HCPreConsultHelper {
headers.add("god-portal-request-id", requestId);
});
log.warn("[预问诊]上传挂号数据 resp={}", JsonHelper.toJsonString(respJson));
log.warn("[预问诊][{}]上传挂号数据 resp={}", uuid, JsonHelper.toJsonString(respJson));
String code = respJson.getString("code");
String message = respJson.getString("msg");
if (!"0".equals(code)) {
log.error("[预问诊]上传挂号数据-失败:{}", message);
log.error("[预问诊][{}]上传挂号数据-失败:{}", uuid, message);
} else {
log.info("[预问诊]上传挂号数据-成功");
log.info("[预问诊][{}]上传挂号数据-成功", uuid);
}
}
// 5.1.1 线上挂号场景(微信h5页面)
public static String getH5Online(String registerId) {
public static String getH5Online(String registerId, boolean isHttps) {
try {
if (ObjectUtils.isEmpty(registerId)) {
return null;
}
String url = HCPreConsultConfig.IS_DEV
? "https://dev-prediagnosis.wecity.qq.com/guide-h5-prediagnosis/pages/prediagnosis?partnerId=${partnerId}&hospitalId=${hospitalId}&registerId=${registerId}&subHospitalId=${subHospitalId}&registerIdSign={registerIdSign}"
: "https://miying.qq.com/guide-h5-prediagnosis/pages/prediagnosis?partnerId=${partnerId}&hospitalId=${hospitalId}&registerId=${registerId}&subHospitalId=${subHospitalId}&registerIdSign={registerIdSign}";
? "https://dev-prediagnosis.wecity.qq.com/guide-h5-prediagnosis/pages/prediagnosis?partnerId=${partnerId}&hospitalId=${hospitalId}&registerId=${registerId}&subHospitalId=${subHospitalId}&registerIdSign={registerIdSign}&redirectPath="
: "https://miying.qq.com/guide-h5-prediagnosis/pages/prediagnosis?partnerId=${partnerId}&hospitalId=${hospitalId}&registerId=${registerId}&subHospitalId=${subHospitalId}&registerIdSign={registerIdSign}&redirectPath=";
url = url + URLHelper.encodeURL(WeChatConfig.getWebReqURL(isHttps) + "my-info.html");
String registerIdSign = HCPreConsultConfig.toHmacSha256Example(HCPreConsultConfig.SECRET_KEY, HCPreConsultConfig.HOSP_ID + registerId);
return url.replace("${partnerId}", HCPreConsultConfig.PARTNER_ID)
.replace("${hospitalId}", HCPreConsultConfig.HOSP_ID)

@ -31,7 +31,7 @@ public class AesHelper {
return new String(cipher.doFinal(Hex.decodeHex(data.toCharArray())));
} catch (Exception e) {
log.warn(e.getMessage());
log.warn("[AES-DE]{}", e.getMessage());
return null;
}
}
@ -54,7 +54,7 @@ public class AesHelper {
byte[] encrypted = cipher.doFinal(data.getBytes());
return Hex.encodeHexString(encrypted).toUpperCase();
} catch (Exception e) {
log.warn(e.getMessage());
log.warn("[AES-EN]{}", e.getMessage());
return null;
}
}

@ -194,26 +194,26 @@ public class CasebookService {
}
try {
log.info("[病历复印]调用HIS接口开始... borrowNo-{}", applyId);
log.info("[病历复印]调用接口开始... borrowNo-{}", applyId);
String respJson = XBDHttpHelper.ExecMethodPost(XBDEnum.BLSM_Appointment_SetISPay.NAME, params -> {
params.put("borrowNo", applyId);
params.put("payDateTime", DateHelper.getCurDateTime());
params.put("tradeNo", tradeNo);
});
log.info("[病历复印]HIS接口返回 resp={}", respJson);
log.info("[病历复印]接口返回 resp={}", respJson);
String code = JsonHelper.parseObject(respJson).getString("Code");
if (code == null) {
if (!casebookDao.updateNotifyOk(outTradeNo)) {
log.info("[病历复印]更新HIS订单信息失败 outTradeNo={}, bankTransNo={}, applyId={}", outTradeNo, bankTransNo, applyId);
log.info("[病历复印]更新订单信息失败 outTradeNo={}, bankTransNo={}, applyId={}", outTradeNo, bankTransNo, applyId);
}
return;
}
String message = JsonHelper.parseObject(respJson).getString("Msg");
log.error("[病历复印]HIS接口调用失败 code={}, message={}, outTradeNo={}, applyId={}", code, message, outTradeNo, applyId);
log.error("[病历复印]接口调用失败 code={}, message={}, outTradeNo={}, applyId={}", code, message, outTradeNo, applyId);
if (!casebookDao.updateNotifyErr(outTradeNo, message)) {
log.info("[病历复印]更新HIS订单错误信息失败 outTradeNo={}, code={}, message={}, outTradeNo={}, applyId={}", outTradeNo, code, message, outTradeNo, applyId);
log.info("[病历复印]更新订单错误信息失败 outTradeNo={}, code={}, message={}, outTradeNo={}, applyId={}", outTradeNo, code, message, outTradeNo, applyId);
}
} catch (Exception e) {
log.error(e.getMessage());

@ -245,7 +245,7 @@ public class MessagePushConfig {
log.warn("[推送]预问诊完成通知-失败:参数缺失 openId={}, patientName={}, outTradeNo={}", openId, patientName, outTradeNo);
return;
}
String url = HCPreConsultHelper.getH5Online(outTradeNo);
String url = HCPreConsultHelper.getH5Online(outTradeNo, false);
if (ObjectUtils.isEmpty(url)) {
log.warn("[推送]预问诊完成通知-失败:链接为空[outTradeNo:{}]", outTradeNo);
return;

@ -1,6 +1,7 @@
package com.ynxbd.wx.wxfactory;
import com.ynxbd.common.helper.common.AesHelper;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.ObjectUtils;
import java.math.BigDecimal;
@ -62,7 +63,8 @@ public class AesWxHelper extends AesHelper {
}
public static void main(String[] args) {
System.out.println(encode("162423"));
// System.out.println(encode("162423"));
System.out.println(DigestUtils.md5Hex("4500000488202609203820674636G001" + "xbd" + "0704" + "xbd" + "*").toUpperCase());
// System.out.println(decode("E6835E243069406F53EC8464898B37C0"));
}
}

Loading…
Cancel
Save