增加医疗对接接口
diff --git a/backend/src/main/java/com/supwisdom/dlpay/medicine/domain/TBMedicalCard.java b/backend/src/main/java/com/supwisdom/dlpay/medicine/domain/TBMedicalCard.java
index cbc0f83..7c6466c 100644
--- a/backend/src/main/java/com/supwisdom/dlpay/medicine/domain/TBMedicalCard.java
+++ b/backend/src/main/java/com/supwisdom/dlpay/medicine/domain/TBMedicalCard.java
@@ -26,8 +26,8 @@
/**
* 证件类型
*/
- @Column(name = "cardtype", nullable = false, length = 2)
- private Integer cardtype;
+ @Column(name = "cardtype", nullable = false)
+ private String cardtype;
/**
* 患者id
*/
@@ -42,7 +42,7 @@
* 性别
*/
@Column(name = "patientsex", length = 2)
- private String patientsex;
+ private Integer patientsex;
/**
* 出生日期(yyyy-MM-dd HH:mm:ss)
*/
@@ -93,11 +93,11 @@
this.cardnumber = cardnumber;
}
- public Integer getCardtype() {
+ public String getCardtype() {
return cardtype;
}
- public void setCardtype(Integer cardtype) {
+ public void setCardtype(String cardtype) {
this.cardtype = cardtype;
}
@@ -117,11 +117,11 @@
this.patientname = patientname;
}
- public String getPatientsex() {
+ public Integer getPatientsex() {
return patientsex;
}
- public void setPatientsex(String patientsex) {
+ public void setPatientsex(Integer patientsex) {
this.patientsex = patientsex;
}
diff --git a/backend/src/main/java/com/supwisdom/dlpay/medicine/domain/TBMedicalDtl.java b/backend/src/main/java/com/supwisdom/dlpay/medicine/domain/TBMedicalDtl.java
new file mode 100644
index 0000000..ad1fecc
--- /dev/null
+++ b/backend/src/main/java/com/supwisdom/dlpay/medicine/domain/TBMedicalDtl.java
@@ -0,0 +1,183 @@
+package com.supwisdom.dlpay.medicine.domain;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "tb_medicaldtl",indexes = {@Index(name = "medicaldtl_idx",columnList = "admnumber,organizationid,feeno")})
+public class TBMedicalDtl {
+ @Id
+ @Column(name = "billno", length = 32)
+ private String billno;
+ @Column(name = "refno", length = 32)
+ private String refno;
+ @Column(name = "uid", length = 32)
+ private String uid;
+ /**
+ * 付款金额;付款金额 = 总金额 + 加收费用
+ */
+ @Column(name = "payamount", precision = 10, scale = 3)
+ private Double payamount;
+ /**
+ * 总金额
+ */
+ @Column(name = "totalfee", precision = 10, scale = 3)
+ private Double totalfee;
+ /**
+ * 加收费用描述
+ */
+ @Column(name = "extrafeedesc", length = 200)
+ private String extrafeedesc;
+ /**
+ * 医院收费单据标识
+ */
+ @Column(name = "feeno", length = 32)
+ private String feeno;
+ /**
+ * 患者就诊序号
+ */
+ @Column(name = "admnumber", length = 64)
+ private String admnumber;
+ /**
+ * 医院code
+ */
+ @Column(name = "organizationid", length = 30)
+ private String organizationid;
+ /**
+ * 医院发票号
+ */
+ @Column(name = "invoiceno", length = 30)
+ private String invoiceno;
+ @Column(name = "paystatus", length = 15)
+ private String paystatus;
+ @Column(name = "transdate", length = 14)
+ private String transdate;
+ @Column(name = "transtime", length = 6)
+ private String transtime;
+ @Column(name = "citizencardno", length = 32)
+ private String citizencardno;
+ /**
+ * HIS结算标识
+ */
+ @Column(name = "resultid", length = 64)
+ private String resultid;
+
+ public String getBillno() {
+ return billno;
+ }
+
+ public void setBillno(String billno) {
+ this.billno = billno;
+ }
+
+ public String getRefno() {
+ return refno;
+ }
+
+ public void setRefno(String refno) {
+ this.refno = refno;
+ }
+
+ public String getUid() {
+ return uid;
+ }
+
+ public void setUid(String uid) {
+ this.uid = uid;
+ }
+
+ public Double getPayamount() {
+ return payamount;
+ }
+
+ public void setPayamount(Double payamount) {
+ this.payamount = payamount;
+ }
+
+ public Double getTotalfee() {
+ return totalfee;
+ }
+
+ public void setTotalfee(Double totalfee) {
+ this.totalfee = totalfee;
+ }
+
+ public String getExtrafeedesc() {
+ return extrafeedesc;
+ }
+
+ public void setExtrafeedesc(String extrafeedesc) {
+ this.extrafeedesc = extrafeedesc;
+ }
+
+ public String getOrganizationid() {
+ return organizationid;
+ }
+
+ public void setOrganizationid(String organizationid) {
+ this.organizationid = organizationid;
+ }
+
+ public String getFeeno() {
+ return feeno;
+ }
+
+ public void setFeeno(String feeno) {
+ this.feeno = feeno;
+ }
+
+ public String getAdmnumber() {
+ return admnumber;
+ }
+
+ public void setAdmnumber(String admnumber) {
+ this.admnumber = admnumber;
+ }
+
+ public String getInvoiceno() {
+ return invoiceno;
+ }
+
+ public void setInvoiceno(String invoiceno) {
+ this.invoiceno = invoiceno;
+ }
+
+ public String getPaystatus() {
+ return paystatus;
+ }
+
+ public void setPaystatus(String paystatus) {
+ this.paystatus = paystatus;
+ }
+
+ public String getTransdate() {
+ return transdate;
+ }
+
+ public void setTransdate(String transdate) {
+ this.transdate = transdate;
+ }
+
+ public String getTranstime() {
+ return transtime;
+ }
+
+ public void setTranstime(String transtime) {
+ this.transtime = transtime;
+ }
+
+ public String getCitizencardno() {
+ return citizencardno;
+ }
+
+ public void setCitizencardno(String citizencardno) {
+ this.citizencardno = citizencardno;
+ }
+
+ public String getResultid() {
+ return resultid;
+ }
+
+ public void setResultid(String resultid) {
+ this.resultid = resultid;
+ }
+}
diff --git a/backend/src/main/java/com/supwisdom/dlpay/medicine/util/MedicalClient.java b/backend/src/main/java/com/supwisdom/dlpay/medicine/util/MedicalClient.java
index e6d8b7c..801fe76 100644
--- a/backend/src/main/java/com/supwisdom/dlpay/medicine/util/MedicalClient.java
+++ b/backend/src/main/java/com/supwisdom/dlpay/medicine/util/MedicalClient.java
@@ -6,6 +6,9 @@
import com.supwisdom.dlpay.framework.util.StringUtil;
import com.supwisdom.dlpay.medicine.bean.*;
import com.supwisdom.dlpay.medicine.exception.MedicineException;
+import com.supwisdom.dlpay.portal.util.PortalConstant;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.*;
import org.springframework.stereotype.Component;
@@ -21,8 +24,17 @@
private RestTemplate restTemplate;
@Autowired
private SystemUtilService systemUtilService;
+ private Logger logger = LoggerFactory.getLogger(MedicalClient.class);
public PatientInfoResponse getPatientMedicalCardList(AddPatientBean bean) {
+ return queryOrRegisterPatientInfo(bean, MedicalConstant.PATIENTINFO_TYPE_QUERY);
+ }
+
+ public PatientInfoResponse registerPatientInfo(AddPatientBean bean) {
+ return queryOrRegisterPatientInfo(bean, MedicalConstant.PATIENTINFO_TYPE_REGISTER);
+ }
+
+ private PatientInfoResponse queryOrRegisterPatientInfo(AddPatientBean bean, String operationType) {
String url = getMedicalUrl();
Map<String, Object> param = new HashMap<>(8);
param.put("organizationId", bean.getHospitalcode());
@@ -30,9 +42,20 @@
param.put("cardNumber", bean.getCardno());
param.put("patientName", bean.getName());
param.put("patientSex", bean.getSex());
+ param.put("operationType", operationType);
+ param.put("patientMobile", bean.getMobile());
String response = httpPost(url + "register/getPhoneAndCards", JSON.toJSONString(param));
- return JSON.parseObject(response, new TypeReference<MedicalResponse<PatientInfoResponse>>() {
- }).getData();
+ MedicalResponse<List<PatientInfoResponse>> result = JSON.parseObject(response, new TypeReference<MedicalResponse<List<PatientInfoResponse>>>() {
+ });
+ if (result.getCode() != MedicalConstant.MEDICAL_RESPONSE_SUCCESS) {
+ logger.error("调用医疗接口异常,code:" + result.getCode() + ";message:" + result.getMessage());
+ throw new MedicineException("请求医疗系统异常");
+ }
+ List<PatientInfoResponse> list = result.getData();
+ if (list != null && list.size() > 0) {
+ return list.get(0);
+ }
+ return null;
}
public MedicalCardInfoResponse getMedicalCardDetail(String organizationId, String patientId) {
@@ -41,17 +64,27 @@
param.put("organizationId", organizationId);
param.put("patientId", patientId);
String response = httpPost(url + "register/queryBusCards", JSON.toJSONString(param));
- return JSON.parseObject(response, new TypeReference<MedicalResponse<MedicalCardInfoResponse>>() {
- }).getData();
+ MedicalResponse<MedicalCardInfoResponse> result = JSON.parseObject(response, new TypeReference<MedicalResponse<MedicalCardInfoResponse>>() {
+ });
+ if (result.getCode() != MedicalConstant.MEDICAL_RESPONSE_SUCCESS) {
+ logger.error("调用医疗接口异常,code:" + result.getCode() + ";message:" + result.getMessage());
+ throw new MedicineException("请求医疗系统异常");
+ }
+ return result.getData();
}
public List<ArrangeInfoResponse> getArrangeInfo(String organizationId, String date) {
String url = getMedicalUrl();
Map<String, Object> param = new HashMap<>(2);
param.put("organizationId", organizationId);
- String response = httpPost(url + "appointment/listArrange", JSON.toJSONString(param));
- return JSON.parseObject(response, new TypeReference<MedicalResponse<List<ArrangeInfoResponse>>>() {
- }).getData();
+ String response = httpPost(url + "framework/appointment/listArrange", JSON.toJSONString(param));
+ MedicalResponse<List<ArrangeInfoResponse>> result = JSON.parseObject(response, new TypeReference<MedicalResponse<List<ArrangeInfoResponse>>>() {
+ });
+ if (result.getCode() != MedicalConstant.MEDICAL_RESPONSE_SUCCESS) {
+ logger.error("调用医疗接口异常,code:" + result.getCode() + ";message:" + result.getMessage());
+ throw new MedicineException("请求医疗系统异常");
+ }
+ return result.getData();
}
public AppointmentResponse confirmAppointment(ConfirmRequestBean bean) {
@@ -64,14 +97,93 @@
param.put("patientId", bean.getPatientid());
param.put("patientName", bean.getPatientname());
param.put("patientMobile", bean.getPatientmobile());
- String response = httpPost(url + "appointment/confirmAppointment", JSON.toJSONString(param));
- return JSON.parseObject(response, new TypeReference<MedicalResponse<AppointmentResponse>>() {
- }).getData();
+ String response = httpPost(url + "framework/appointment/confirmAppointment", JSON.toJSONString(param));
+ MedicalResponse<AppointmentResponse> result = JSON.parseObject(response, new TypeReference<MedicalResponse<AppointmentResponse>>() {
+ });
+ if (result.getCode() != MedicalConstant.MEDICAL_RESPONSE_SUCCESS) {
+ logger.error("调用医疗接口异常,code:" + result.getCode() + ";message:" + result.getMessage());
+ throw new MedicineException("请求医疗系统异常");
+ }
+ return result.getData();
}
+ public UnPayedResponse getUnPayedList(UnPayedRequest bean) {
+ String url = getMedicalUrl();
+ Map<String, Object> param = new HashMap<>(4);
+ param.put("organizationId", bean.getOrganizationId());
+ param.put("queryType", bean.getQueryType());
+ param.put("patientIdList", bean.getPatientIdList());
+ String response = httpPost(url + "getUnpayedList", JSON.toJSONString(param));
+ MedicalResponse<UnPayedResponse> result = JSON.parseObject(response, new TypeReference<MedicalResponse<UnPayedResponse>>() {
+ });
+ if (result.getCode() != MedicalConstant.MEDICAL_RESPONSE_SUCCESS) {
+ logger.error("调用医疗接口异常,code:" + result.getCode() + ";message:" + result.getMessage());
+ throw new MedicineException("请求医疗系统异常");
+ }
+ return result.getData();
+ }
+
+ public PayedResponse getPayedList(PayedRequest bean) {
+ String url = getMedicalUrl();
+ Map<String, Object> param = new HashMap<>(8);
+ param.put("organizationId", bean.getOrganizationId());
+ param.put("queryType", bean.getQueryType());
+ param.put("patientIdList", bean.getPatientIdList());
+ param.put("executeFlag", bean.getExecuteFlag());
+ param.put("outpatientType", bean.getOutpatientType());
+ String response = httpPost(url + "getPayedList", JSON.toJSONString(param));
+ MedicalResponse<PayedResponse> result = JSON.parseObject(response, new TypeReference<MedicalResponse<PayedResponse>>() {
+ });
+ if (result.getCode() != MedicalConstant.MEDICAL_RESPONSE_SUCCESS) {
+ logger.error("调用医疗接口异常,code:" + result.getCode() + ";message:" + result.getMessage());
+ throw new MedicineException("请求医疗系统异常");
+ }
+ return result.getData();
+ }
+
+ public PreFeeResponse getPreCalculatedFee(PreFeeRequest bean) {
+ String url = getMedicalUrl();
+ Map<String, Object> param = new HashMap<>(8);
+ param.put("organizationId", bean.getOrganizationId());
+ param.put("boilSign", bean.getBoilSign());
+ param.put("feeRecords", bean.getFeeRecords());
+ String response = httpPost(url + "getPrecalculatedFee", JSON.toJSONString(param));
+ MedicalResponse<PreFeeResponse> result = JSON.parseObject(response, new TypeReference<MedicalResponse<PreFeeResponse>>() {
+ });
+ if (result.getCode() != MedicalConstant.MEDICAL_RESPONSE_SUCCESS) {
+ logger.error("调用医疗接口异常,code:" + result.getCode() + ";message:" + result.getMessage());
+ throw new MedicineException("请求医疗系统异常");
+ }
+ return result.getData();
+ }
+
+ public NotifyPayedResponse notifyPayed(NotifyPayedRequest bean) {
+ String url = getMedicalUrl();
+ Map<String, Object> param = new HashMap<>(8);
+ param.put("organizationId", bean.getOrganizationId());
+ param.put("patientId", bean.getPatientId());
+ param.put("invoiceNumber", bean.getInvoiceNumber());
+ param.put("payMode", bean.getPayMode());
+ param.put("payState", bean.getPayState());
+ param.put("agtOrderNumber", bean.getAgtOrderNumber());
+ param.put("payAmount", bean.getPayAmount());
+ param.put("outOrderNumber", bean.getOutOrderNumber());
+ param.put("payer", bean.getPayer());
+ param.put("totalFee ", bean.getTotalFee());
+ param.put("brid ", bean.getBrid());
+ param.put("feeRecords ", bean.getFeeRecords());
+ String response = httpPost(url + "getPrecalculatedFee", JSON.toJSONString(param));
+ MedicalResponse<NotifyPayedResponse> result = JSON.parseObject(response, new TypeReference<MedicalResponse<NotifyPayedResponse>>() {
+ });
+ if (result.getCode() != MedicalConstant.MEDICAL_RESPONSE_SUCCESS) {
+ logger.error("调用医疗接口异常,code:" + result.getCode() + ";message:" + result.getMessage());
+ throw new MedicineException("请求医疗系统异常");
+ }
+ return result.getData();
+ }
private String getMedicalUrl() {
- String url = systemUtilService.getBusinessValue(MedicalConstant.SYSPARA_MEDICAL_URL);
+ String url = systemUtilService.getBusinessValue(PortalConstant.SYSPARA_MEDICAL_URL);
if (StringUtil.isEmpty(url)) {
throw new MedicineException("医疗系统地址未配置");
}
diff --git a/backend/src/main/java/com/supwisdom/dlpay/medicine/util/MedicalConstant.java b/backend/src/main/java/com/supwisdom/dlpay/medicine/util/MedicalConstant.java
index 1f5e7a8..d0ad509 100644
--- a/backend/src/main/java/com/supwisdom/dlpay/medicine/util/MedicalConstant.java
+++ b/backend/src/main/java/com/supwisdom/dlpay/medicine/util/MedicalConstant.java
@@ -4,12 +4,42 @@
/**
* 证件类型
*/
- public final static int CARD_TYPE_IDCAED = 1;//身份证
+ public final static String CARD_TYPE_IDCAED = "1";//身份证
/**
- *
+ * 患者信息认证模式
*/
- public final static int UNPAYED_QUERYTYPE_MEDICALCARD = 3;//按诊疗卡类型查询
+ public final static String PATIENTINFO_TYPE_QUERY = "1";//查询
+ public final static String PATIENTINFO_TYPE_REGISTER = "2";//建档
+ /**
+ * 订单查询模式
+ */
+ public final static int ORDER_QUERYTYPE_PATIENTID = 1;//按患者id查询
+ public final static int ORDER_QUERYTYPE_MEDICALCARD = 3;//按诊疗卡类型查询
+ /**
+ * 支付列表执行标志
+ */
+ public final static int PAYED_EXECUTEFLAG_INVALID = 0;//本参数无效
+ /**
+ * 支付列表门诊类型
+ */
+ public final static int PAYED_OUTPATIENTTYPE_NORMAL = 1;//普通
+ /**
+ * 医疗系统响应状态码
+ */
+ public final static int MEDICAL_RESPONSE_SUCCESS = 200;//成功
+ /**
+ * 本地流水状态
+ */
+ public final static String DTL_STATUS_INIT = "init";
+ public final static String DTL_STATUS_WIP = "wip";
+ public final static String DTL_STATUS_SUCCESS = "sucess";
+ /**
+ * 子系统代码
+ */
+ public final static String DTLTYPE_MEDICAL = "medical";
+ /**
+ * payapi成功响应代码
+ */
+ public final static Integer PAYAPI_SUCCESS_RETCODE = 0;
-
- public static final String SYSPARA_MEDICAL_URL = "medical.url";
}
diff --git a/backend/src/main/java/com/supwisdom/dlpay/portal/domain/TBOutlets.java b/backend/src/main/java/com/supwisdom/dlpay/portal/domain/TBOutlets.java
index 23467b1..3cb8524 100644
--- a/backend/src/main/java/com/supwisdom/dlpay/portal/domain/TBOutlets.java
+++ b/backend/src/main/java/com/supwisdom/dlpay/portal/domain/TBOutlets.java
@@ -16,10 +16,10 @@
@Column(name = "id", nullable = false, length = 32)
private String id;
- @Column(name = "outletsno")
+ @Column(name = "outletsno", length = 20)
private String outletsno;
- @Column(name = "name",length = 100)
+ @Column(name = "name", length = 100)
private String name;
@Column(name = "address", length = 200)
@@ -31,19 +31,19 @@
@Column(name = "endtime", length = 6)
private String endtime;
- @Column(name = "location",length = 30)
+ @Column(name = "location", length = 30)
private String location;
- @Column(name = "createtime",length = 14)
+ @Column(name = "createtime", length = 14)
private String createtime;
@Column(name = "businescope", length = 100)
private String businescope;
- @Column(name = "tel",length = 50)
+ @Column(name = "tel", length = 50)
private String tel;
- @Column(name = "isopen",length = 1)
+ @Column(name = "isopen", length = 1)
private String isopen;
@Transient
diff --git a/backend/src/main/java/com/supwisdom/dlpay/portal/util/PortalConstant.java b/backend/src/main/java/com/supwisdom/dlpay/portal/util/PortalConstant.java
index d738d2a..e0a12ca 100644
--- a/backend/src/main/java/com/supwisdom/dlpay/portal/util/PortalConstant.java
+++ b/backend/src/main/java/com/supwisdom/dlpay/portal/util/PortalConstant.java
@@ -18,6 +18,8 @@
public static final String SYSPARA_PORTAL_SECRET = "portal.secret";
public static final String SYSPARA_PORTAL_AMAPKEY = "portal.amapkey";
public static final String SYSPARA_PORTAL_AMAPURL = "portal.amapurl";
+ public static final String SYSPARA_MEDICAL_URL = "medical.url";
+ public static final String SYSPARA_MEDICAL_SHOPACCNO = "medical.shopaccno";
public static final String ARTICLE_STATUS_SAVE = "save";
public static final String ARTICLE_STATUS_PASS = "pass";
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/MedicineApi.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/MedicineApi.kt
index 5635ee4..c56a6e9 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/MedicineApi.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/MedicineApi.kt
@@ -1,11 +1,18 @@
package com.supwisdom.dlpay.medicine
import com.supwisdom.dlpay.api.bean.JsonResult
+import com.supwisdom.dlpay.api.bean.QueryCardParam
+import com.supwisdom.dlpay.api.bean.QueryUserParam
+import com.supwisdom.dlpay.framework.util.TradeDict
import com.supwisdom.dlpay.medicine.bean.AddPatientBean
import com.supwisdom.dlpay.medicine.bean.ConfirmRequestBean
+import com.supwisdom.dlpay.medicine.bean.PaymentRequestBean
import com.supwisdom.dlpay.medicine.exception.MedicineException
import com.supwisdom.dlpay.medicine.service.MedicineService
+import com.supwisdom.dlpay.mobile.domain.TBMobileUser
import com.supwisdom.dlpay.mobile.service.MobileApiService
+import com.supwisdom.dlpay.paysdk.proxy.UserProxy
+import com.supwisdom.dlpay.util.ConstantUtil
import mu.KotlinLogging
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.security.core.context.SecurityContextHolder
@@ -18,6 +25,8 @@
lateinit var medicineService: MedicineService
@Autowired
lateinit var mobileApiService: MobileApiService
+ @Autowired
+ lateinit var userProxy: UserProxy
val logger = KotlinLogging.logger { }
@@ -73,6 +82,7 @@
val p = SecurityContextHolder.getContext().authentication
val user = mobileApiService.findUserById(p.name)
?: return JsonResult.error("用户不存在,请注册")
+ bean.checkParam()
bean.uid = user.uid
medicineService.addPatient(bean)
return JsonResult.ok()
@@ -101,12 +111,17 @@
*/
@PostMapping("/appointment/confirm")
fun confirmAppointment(@RequestBody bean: ConfirmRequestBean): JsonResult? {
- val p = SecurityContextHolder.getContext().authentication
- val user = mobileApiService.findUserById(p.name)
- ?: return JsonResult.error("用户不存在,请注册")
- bean.uid = user.uid
- medicineService.confirmAppointment(bean)
- return JsonResult.ok()
+ try {
+ val p = SecurityContextHolder.getContext().authentication
+ val user = mobileApiService.findUserById(p.name)
+ ?: return JsonResult.error("用户不存在,请注册")
+ bean.uid = user.uid
+ medicineService.confirmAppointment(bean)
+ return JsonResult.ok()
+ } catch (e: Exception) {
+ logger.error(e.message)
+ return JsonResult.error("系统异常,请稍后重试")
+ }
}
/**
@@ -142,12 +157,81 @@
* 获取待支付列表
*/
@GetMapping("/unpayed/list")
- fun getUnpayedList(): JsonResult? {
+ fun getUnPayedList(organizationid: String, cardid: String): JsonResult? {
+ try {
+ val p = SecurityContextHolder.getContext().authentication
+ val user = mobileApiService.findUserById(p.name)
+ ?: return JsonResult.error("用户不存在,请注册")
+ val data = medicineService.getUnPayedList(user.uid, organizationid, cardid)
+ return JsonResult.ok().put("data", data)
+ } catch (e: Exception) {
+ logger.error(e.message)
+ return JsonResult.error("系统异常,请稍后重试")
+ }
+ }
+
+ /**
+ * 获取已支付列表
+ */
+ @GetMapping("/payed/list")
+ fun getPayedList(organizationid: String, cardid: String): JsonResult? {
+ try {
+ val p = SecurityContextHolder.getContext().authentication
+ val user = mobileApiService.findUserById(p.name)
+ ?: return JsonResult.error("用户不存在,请注册")
+ val data = medicineService.getPayedList(user.uid, organizationid, cardid)
+ return JsonResult.ok().put("data", data)
+ } catch (e: Exception) {
+ logger.error(e.message)
+ return JsonResult.error("系统异常,请稍后重试")
+ }
+ }
+
+ /**
+ * 支付接口
+ */
+ @PostMapping("/pay")
+ fun medicalPayment(@RequestBody bean: PaymentRequestBean): JsonResult? {
val p = SecurityContextHolder.getContext().authentication
val user = mobileApiService.findUserById(p.name)
?: return JsonResult.error("用户不存在,请注册")
- medicineService.getUnpayedList(user.uid)
+ val checkResult = checkUserConsume(user)
+ if (checkResult?.get("code") != 200) {
+ return checkResult
+ }
+ val cardNo = checkResult["data"] as String
+ medicineService.medicalPayInit(user.uid, bean,cardNo)
return JsonResult.ok()
}
+ fun checkUserConsume(user: TBMobileUser): JsonResult? {
+ if (TradeDict.STATUS_NORMAL != user.status) {
+ return JsonResult.error("用户状态异常")
+ }
+ if (user.userid.isNullOrEmpty()) {
+ return JsonResult.error("请绑定银行卡")
+ }
+ val userInfo = userProxy.querybycardno(QueryUserParam().apply {
+ this.userid = user.userid
+ })
+ if (userInfo.retcode != 0) {
+ logger.error { "获取userid为${user.userid}的用户信息失败,错误信息:${userInfo.retmsg}" }
+ return JsonResult.error("获取用户信息失败")
+ }
+ if (userInfo.cardstatus != TradeDict.STATUS_NORMAL || userInfo.transstatus != TradeDict.STATUS_NORMAL) {
+ return JsonResult.error("消费状态异常")
+ }
+ val cardResponse = userProxy.queryCard(QueryCardParam().apply {
+ this.cardno = userInfo.bankcardno
+ this.cardtype = ConstantUtil.CARDTYPE_BANKCARD
+ })
+ if (cardResponse.retcode != 0) {
+ logger.error { "查询卡片[${userInfo.bankcardno}]信息失败:${cardResponse.retmsg}" }
+ return JsonResult.error("银行卡信息异常")
+ }
+ if (!cardResponse.card.signed) {
+ return JsonResult.error("请签约银行卡")
+ }
+ return JsonResult.ok().put("data",userInfo.cardno)
+ }
}
\ No newline at end of file
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/bean/AddPatientBean.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/bean/AddPatientBean.kt
index 5891c12..a9c6670 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/bean/AddPatientBean.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/bean/AddPatientBean.kt
@@ -1,10 +1,26 @@
package com.supwisdom.dlpay.medicine.bean
-class AddPatientBean {
+import com.supwisdom.dlpay.api.APIRequestParam
+import com.supwisdom.dlpay.api.exception.RequestParamCheckException
+import com.supwisdom.dlpay.framework.util.StringUtil
+
+class AddPatientBean: APIRequestParam() {
var name = ""
- var sex = ""
+ var sex = 0
var cardno = ""
- var tel = ""
+ var mobile = ""
var hospitalcode = ""
var uid = ""
+ override fun checkParam(): Boolean {
+ if (StringUtil.isEmpty(name)) {
+ throw RequestParamCheckException("请求参数错误[name为空]")
+ }
+ if (StringUtil.isEmpty(cardno)) {
+ throw RequestParamCheckException("请求参数错误[cardno为空]")
+ }
+ if (StringUtil.isEmpty(cardno)) {
+ throw RequestParamCheckException("请求参数错误[hospitalcode为空]")
+ }
+ return true
+ }
}
\ No newline at end of file
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/bean/ConfirmRequestBean.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/bean/ConfirmRequestBean.kt
index b8ccbcc..ab28c78 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/bean/ConfirmRequestBean.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/bean/ConfirmRequestBean.kt
@@ -10,4 +10,5 @@
var patientname = ""
var patientmobile = ""
var uid = ""
+ var cardid = ""
}
\ No newline at end of file
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/bean/MedicalCardInfoResponse.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/bean/MedicalCardInfoResponse.kt
index 62a566f..48f84b1 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/bean/MedicalCardInfoResponse.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/bean/MedicalCardInfoResponse.kt
@@ -5,7 +5,7 @@
class MedicalCardInfoResponse {
var patientName = ""
var patientId = ""
- var patientSex = ""
+ var patientSex = 0
var patientBirthday = Date()
var patientMobile = ""
var patientMedicalCardType = 0
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/bean/NotifyPayedBean.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/bean/NotifyPayedBean.kt
new file mode 100644
index 0000000..6cf98ea
--- /dev/null
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/bean/NotifyPayedBean.kt
@@ -0,0 +1,24 @@
+package com.supwisdom.dlpay.medicine.bean
+
+class NotifyPayedRequest {
+ var organizationId = ""
+ var patientId = ""
+ var invoiceNumber = ""
+ var payMode = ""
+ var payState = ""
+ var agtOrderNumber = ""
+ var payAmount = 0.0
+ var outOrderNumber = ""
+ var payer = ""
+ var totalFee = 0.0
+ var brid = ""
+ var feeRecords = ArrayList<FeeRecordItem>()
+}
+
+class NotifyPayedResponse {
+ var agtOrderNumber = ""
+ var resultId = ""
+ var invoiceNumber = ""
+ var paymentBudgetNumber = ""
+ var feeRecords = ArrayList<FeeRecordItem>()
+}
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/bean/PayedBean.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/bean/PayedBean.kt
new file mode 100644
index 0000000..523b7ca
--- /dev/null
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/bean/PayedBean.kt
@@ -0,0 +1,42 @@
+package com.supwisdom.dlpay.medicine.bean
+
+class PayedRequest {
+ var organizationId = ""
+ var outpatientType = 0
+ var executeFlag = 0
+ var queryType = 0
+ var patientIdList = ArrayList<String>()
+}
+
+class PayedResponse {
+ var patientId = ""
+ var patientMedicalCardType = 0
+ var patientMedicalCardNumber = ""
+ var invoiceList = ArrayList<InvoiceItem>()
+}
+
+class InvoiceItem {
+ var invoiceNumber = ""
+ var medicalDate = ""
+ var admNumber = ""
+ var costList = ArrayList<costItem>()
+}
+
+class costItem {
+ var mergingCode = 0
+ var mergingName = ""
+ var executionStatus = 0 //执行判别: 0、已付款/未执行/待执行,1、表示已取药2、表示已执行3、标志已退费
+ var execute = "" //执行科室
+ var feeNo = ""
+ var feeTypeCode = ""
+ var totalFee = 0.0
+}
+
+class PayedDTO {
+ var medicalDate = ""
+ var mergingName = ""
+ var executionStatus = 0
+ var execute = ""
+ var totalFee = 0.0
+ var admNumber = ""
+}
\ No newline at end of file
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/bean/PaymentRequestBean.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/bean/PaymentRequestBean.kt
new file mode 100644
index 0000000..7371a5c
--- /dev/null
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/bean/PaymentRequestBean.kt
@@ -0,0 +1,8 @@
+package com.supwisdom.dlpay.medicine.bean
+
+class PaymentRequestBean {
+ var organizationid = ""
+ var cardid = ""
+ var feeno = ""
+ var admnumber = ""
+}
\ No newline at end of file
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/bean/PrecalculatedFeeBean.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/bean/PrecalculatedFeeBean.kt
new file mode 100644
index 0000000..360dc28
--- /dev/null
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/bean/PrecalculatedFeeBean.kt
@@ -0,0 +1,22 @@
+package com.supwisdom.dlpay.medicine.bean
+
+class PreFeeRequest {
+ var organizationId = ""
+ var boilSign = 0
+ var feeRecords = ArrayList<FeeRecordItem>()
+}
+
+class FeeRecordItem {
+ var feeNo = ""
+ var feeTypeCode = ""
+ var feeTypeName = ""
+ var totalFee = 0.0
+}
+
+class PreFeeResponse {
+ var payAmount = 0.0
+ var invoiceNumber = ""
+ var totalFee = 0.0
+ var paymentBudgetNumber = "" //预结算标识
+ var extraFeeDesc = "" //加收费费用描述
+}
\ No newline at end of file
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/bean/UnPayedBean.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/bean/UnPayedBean.kt
new file mode 100644
index 0000000..4db7c2f
--- /dev/null
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/bean/UnPayedBean.kt
@@ -0,0 +1,51 @@
+package com.supwisdom.dlpay.medicine.bean
+
+import kotlin.collections.ArrayList
+
+class UnPayedRequest {
+ var organizationId = ""
+ var queryType = 0
+ var patientIdList = ArrayList<String>()
+}
+
+class UnPayedResponse {
+ var patientId = ""
+ var patientMedicalCardType = 0
+ var patientMedicalCardNumber = ""
+ var patientName = ""
+ var patientSex = ""
+ var patientAge = ""
+ var medicalInformation = ArrayList<MedicalInformation>()
+}
+
+class MedicalInformation {
+ var medicalDate = ""
+ var doctorName = ""
+ var doctorCode = ""
+ var departmentName = ""
+ var departmentCode = ""
+ var totalFee = 0.0
+ var admNumber = "" //就诊序号
+ var mergingItems = ArrayList<MergingItems>()
+}
+
+class MergingItems {
+ var mergingCode = 0
+ var mergingName = ""
+ var mergingSubtotal = 0.0
+ var feeNo = ""
+ var feeTypeCode = ""
+ var feeTypeName = ""
+ var feeDate = ""
+ var boilSign = 0 //代煎标志,0-不代煎,1-代煎
+}
+
+class UnPayedDTO {
+ var medicalDate = ""
+ var doctorName = ""
+ var subjectName = ""
+ var admNumber = ""
+ var mergingSubtotal = 0.0
+ var feeNo = ""
+}
+
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/dao/MedicalCardDao.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/dao/MedicalCardDao.kt
index 5d43e44..e22d068 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/dao/MedicalCardDao.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/dao/MedicalCardDao.kt
@@ -8,5 +8,5 @@
interface MedicalCardDao : JpaRepository<TBMedicalCard, String> {
fun findByUidAndOrganizationid(uid: String, organizationid: String): List<TBMedicalCard>?
fun findByCardidAndUid(cardid: String, uid: String): TBMedicalCard?
- fun findByUidAndOrganizationidAndCardnumberAndCardtype(uid: String, organizationid: String, cardnumber: String, cardtype: Int): List<TBMedicalCard>?
+ fun findByUidAndOrganizationidAndCardnumberAndCardtype(uid: String, organizationid: String, cardnumber: String, cardtype: String): List<TBMedicalCard>?
}
\ No newline at end of file
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/dao/MedicalDtlDao.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/dao/MedicalDtlDao.kt
new file mode 100644
index 0000000..95f0acb
--- /dev/null
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/dao/MedicalDtlDao.kt
@@ -0,0 +1,20 @@
+package com.supwisdom.dlpay.medicine.dao
+
+import com.supwisdom.dlpay.medicine.domain.TBMedicalDtl
+import org.springframework.data.jpa.repository.JpaRepository
+import org.springframework.data.jpa.repository.Lock
+import org.springframework.data.jpa.repository.Query
+import org.springframework.data.jpa.repository.QueryHints
+import org.springframework.stereotype.Repository
+import javax.persistence.LockModeType
+import javax.persistence.QueryHint
+
+@Repository
+interface MedicalDtlDao : JpaRepository<TBMedicalDtl, String> {
+ @Lock(LockModeType.PESSIMISTIC_WRITE)
+ @Query("select t from TBMedicalDtl t where t.billno=?1")
+ @QueryHints(QueryHint(name = "javax.persistence.lock.timeout", value = "0"))
+ fun findByBillnoForUpdate(billno: String?): TBMedicalDtl
+
+ fun findByAdmnumberAndOrganizationidAndFeeno(admNumber: String, organizationId: String, feeNo: String): TBMedicalDtl?
+}
\ No newline at end of file
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/service/MedicineService.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/service/MedicineService.kt
index bdf627d..5cf9537 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/service/MedicineService.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/service/MedicineService.kt
@@ -1,9 +1,8 @@
package com.supwisdom.dlpay.medicine.service
+import com.supwisdom.dlpay.api.bean.JsonResult
import com.supwisdom.dlpay.framework.jpa.page.Pagination
-import com.supwisdom.dlpay.medicine.bean.AddPatientBean
-import com.supwisdom.dlpay.medicine.bean.ArrangeInfoResponse
-import com.supwisdom.dlpay.medicine.bean.ConfirmRequestBean
+import com.supwisdom.dlpay.medicine.bean.*
import com.supwisdom.dlpay.medicine.domain.TBMedicalCard
import org.springframework.transaction.annotation.Transactional
@@ -32,6 +31,15 @@
@Transactional
fun deleteAppointment(appointmentId: String, uid: String)
- @Transactional(readOnly = true)
- fun getUnpayedList(uid: String)
+ @Transactional
+ fun getUnPayedList(uid: String, organizationId: String, cardId: String): List<UnPayedDTO>
+
+ @Transactional
+ fun getPayedList(uid: String, organizationId: String, cardId: String): ArrayList<PayedDTO>
+
+ @Transactional
+ fun medicalPayInit(uid: String, bean: PaymentRequestBean, cardNo: String): JsonResult?
+
+ @Transactional
+ fun medicalPayConfirm(billno: String): JsonResult?
}
\ No newline at end of file
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/service/impl/MedicineServiceImpl.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/service/impl/MedicineServiceImpl.kt
index 488bc9c..da9370c 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/service/impl/MedicineServiceImpl.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/service/impl/MedicineServiceImpl.kt
@@ -1,18 +1,27 @@
package com.supwisdom.dlpay.medicine.service.impl
+import com.supwisdom.dlpay.api.bean.CitizenCardPayfinishParam
+import com.supwisdom.dlpay.api.bean.CitizenCardPayinitParam
+import com.supwisdom.dlpay.api.bean.JsonResult
import com.supwisdom.dlpay.framework.jpa.page.Pagination
import com.supwisdom.dlpay.framework.service.SystemUtilService
+import com.supwisdom.dlpay.framework.util.Constants
+import com.supwisdom.dlpay.framework.util.MoneyUtil
import com.supwisdom.dlpay.framework.util.StringUtil
import com.supwisdom.dlpay.medicine.bean.*
import com.supwisdom.dlpay.medicine.dao.AppointmentDtlDao
import com.supwisdom.dlpay.medicine.dao.HospitalDao
import com.supwisdom.dlpay.medicine.dao.MedicalCardDao
+import com.supwisdom.dlpay.medicine.dao.MedicalDtlDao
import com.supwisdom.dlpay.medicine.domain.TBAppointmentDtl
import com.supwisdom.dlpay.medicine.domain.TBMedicalCard
+import com.supwisdom.dlpay.medicine.domain.TBMedicalDtl
import com.supwisdom.dlpay.medicine.exception.MedicineException
import com.supwisdom.dlpay.medicine.service.MedicineService
import com.supwisdom.dlpay.medicine.util.MedicalClient
import com.supwisdom.dlpay.medicine.util.MedicalConstant
+import com.supwisdom.dlpay.paysdk.proxy.CitizenCardPayProxy
+import com.supwisdom.dlpay.portal.util.PortalConstant
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Service
@@ -28,6 +37,10 @@
lateinit var appointmentDtlDao: AppointmentDtlDao
@Autowired
lateinit var medicalClient: MedicalClient
+ @Autowired
+ lateinit var medicalDtlDao: MedicalDtlDao
+ @Autowired
+ lateinit var citizenCardPayProxy: CitizenCardPayProxy
override fun getHospitalList(pageno: Int, pageSize: Int, name: String?): Pagination {
return hospitalDao.getHospitalList(pageno, pageSize, name)
@@ -46,10 +59,10 @@
override fun addPatient(bean: AddPatientBean) {
// 查询当前就诊人在该医院的就诊卡列表
val response = medicalClient.getPatientMedicalCardList(bean)
- val list = response.listMedicalCard
- if (!list.isNullOrEmpty()) {
+ if (null != response && !response.listMedicalCard.isNullOrEmpty()) {
// 已有就诊卡:查询详情后本地保存
// 删除本地该患者原有就诊卡
+ val list = response.listMedicalCard
val localCard = medicalCardDao.findByUidAndOrganizationidAndCardnumberAndCardtype(
bean.uid, bean.hospitalcode, bean.cardno, MedicalConstant.CARD_TYPE_IDCAED)
if (!localCard.isNullOrEmpty()) {
@@ -78,10 +91,10 @@
}
} else {
// 无就诊卡,在HIS中新建,成功后本地保存
- val addResponse = medicalClient.getPatientMedicalCardList(bean)
- val addList = addResponse.listMedicalCard
- if (!addList.isNullOrEmpty()) {
+ val addResponse = medicalClient.registerPatientInfo(bean)
+ if (null != addResponse && !addResponse.listMedicalCard.isNullOrEmpty()) {
// 删除本地该患者原有就诊卡
+ val addList = addResponse.listMedicalCard
val localCard = medicalCardDao.findByUidAndOrganizationidAndCardnumberAndCardtype(
bean.uid, bean.hospitalcode, bean.cardno, MedicalConstant.CARD_TYPE_IDCAED)
if (!localCard.isNullOrEmpty()) {
@@ -111,6 +124,13 @@
}
override fun confirmAppointment(bean: ConfirmRequestBean) {
+ val medicalCard = medicalCardDao.findByCardidAndUid(bean.cardid, bean.uid)
+ ?: throw MedicineException("未找到该就诊卡")
+ bean.apply {
+ this.patientid = medicalCard.patientid
+ this.patientname = medicalCard.patientname
+ this.patientmobile = medicalCard.patientmobile
+ }
val appointmentResponse = medicalClient.confirmAppointment(bean)
val appointmentDtl = TBAppointmentDtl()
appointmentDtl.uid = bean.uid
@@ -139,7 +159,175 @@
appointmentDtlDao.save(appointmentDtl)
}
- override fun getUnpayedList(uid: String) {
- TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+ fun getUnPayedResponse(organizationId: String, petientId: String): UnPayedResponse {
+ val unPayedPatientIdList = ArrayList<String>()
+ unPayedPatientIdList.add(petientId)
+ val upPayedRequest = UnPayedRequest()
+ upPayedRequest.organizationId = organizationId
+ upPayedRequest.queryType = MedicalConstant.ORDER_QUERYTYPE_PATIENTID
+ upPayedRequest.patientIdList = unPayedPatientIdList
+ //根据患者id查询未支付账单
+ return medicalClient.getUnPayedList(upPayedRequest)
+ }
+
+ override fun getUnPayedList(uid: String, organizationId: String, cardId: String): List<UnPayedDTO> {
+ val medicalCard = medicalCardDao.findByCardidAndUid(cardId, uid)
+ ?: throw MedicineException("未找到该就诊卡")
+ //根据患者id查询未支付账单
+ val unPayedResponse = getUnPayedResponse(organizationId, medicalCard.patientid)
+ val unPayedDTOList = ArrayList<UnPayedDTO>()
+ //拆分每次就诊下的每个项目为一条展示数据
+ unPayedResponse.medicalInformation.forEach { medicalInformation ->
+ medicalInformation.mergingItems.forEach { mergingItems ->
+ val unPayedDTO = UnPayedDTO().apply {
+ this.medicalDate = medicalInformation.medicalDate
+ this.subjectName = medicalInformation.departmentName
+ this.doctorName = medicalInformation.doctorName
+ this.admNumber = medicalInformation.admNumber
+ this.feeNo = mergingItems.feeNo
+ this.mergingSubtotal = mergingItems.mergingSubtotal
+ }
+ unPayedDTOList.add(unPayedDTO)
+ }
+ }
+ return unPayedDTOList
+ }
+
+ override fun getPayedList(uid: String, organizationId: String, cardId: String): ArrayList<PayedDTO> {
+ val medicalCard = medicalCardDao.findByCardidAndUid(cardId, uid)
+ ?: throw MedicineException("未找到该就诊卡")
+ val payedPatientIdList = ArrayList<String>()
+ payedPatientIdList.add(medicalCard.patientid)
+ val payedRequest = PayedRequest()
+ payedRequest.organizationId = organizationId
+ payedRequest.queryType = MedicalConstant.ORDER_QUERYTYPE_PATIENTID
+ payedRequest.patientIdList = payedPatientIdList
+ payedRequest.executeFlag = MedicalConstant.PAYED_EXECUTEFLAG_INVALID
+ payedRequest.outpatientType = MedicalConstant.PAYED_OUTPATIENTTYPE_NORMAL
+ val payedResponse = medicalClient.getPayedList(payedRequest)
+ val payedDTOList = ArrayList<PayedDTO>()
+ //拆分每次就诊下的每个项目为一条展示数据
+ payedResponse.invoiceList.forEach { invoiceItem ->
+ invoiceItem.costList.forEach { costItem ->
+ val payedDTO = PayedDTO().apply {
+ this.totalFee = costItem.totalFee
+ this.medicalDate = invoiceItem.medicalDate
+ this.executionStatus = costItem.executionStatus
+ this.execute = costItem.execute
+ this.mergingName = costItem.mergingName
+ this.admNumber = invoiceItem.admNumber
+ }
+ payedDTOList.add(payedDTO)
+ }
+ }
+ return payedDTOList
+ }
+
+ override fun medicalPayInit(uid: String, bean: PaymentRequestBean, cardNo: String): JsonResult? {
+ val medicalCard = medicalCardDao.findByCardidAndUid(bean.cardid, uid)
+ ?: throw MedicineException("未找到该就诊卡")
+ //1.从HIS中找到待支付流水
+ //1.1 根据患者id查询未支付账单
+ val unPayedResponse = getUnPayedResponse(bean.organizationid, medicalCard.patientid)
+ var mergingItems: MergingItems? = null
+ unPayedResponse.medicalInformation.forEach { medicalInformation ->
+ if (medicalInformation.admNumber == bean.admnumber) {
+ medicalInformation.mergingItems.forEach { queryMergingItems ->
+ if (queryMergingItems.feeNo == bean.feeno) {
+ mergingItems = queryMergingItems
+ }
+ }
+ }
+ }
+ if (mergingItems == null) {
+ throw MedicineException("未找到该条待缴费记录")
+ }
+ //2.向HIS预结算
+ val feeRecords = ArrayList<FeeRecordItem>()
+ feeRecords.add(FeeRecordItem().apply {
+ this.feeNo = mergingItems!!.feeNo
+ this.feeTypeCode = mergingItems!!.feeTypeCode
+ this.feeTypeName = mergingItems!!.mergingName
+ })
+
+ val preFeeRequest = PreFeeRequest().apply {
+ this.boilSign = mergingItems!!.boilSign
+ this.organizationId = bean.organizationid
+ this.feeRecords = feeRecords
+ }
+ val preFeeResponse = medicalClient.getPreCalculatedFee(preFeeRequest)
+ //查看本地是否有该条流水记录
+ val localMedicalDtl = medicalDtlDao.findByAdmnumberAndOrganizationidAndFeeno(bean.admnumber, bean.organizationid, mergingItems!!.feeNo)
+ if (localMedicalDtl != null) {
+ //锁住该条流水
+ medicalDtlDao.findByBillnoForUpdate(localMedicalDtl.billno)
+ if (localMedicalDtl.paystatus == MedicalConstant.DTL_STATUS_SUCCESS) {
+ return JsonResult.ok("该缴费已成功支付")
+ } else if (localMedicalDtl.paystatus == MedicalConstant.DTL_STATUS_WIP) {
+
+ }
+ }
+ //3.本地新建一条支付流水
+ val medicalDtl = TBMedicalDtl().apply {
+ this.billno = systemUtilService.refno
+ this.admnumber = bean.admnumber
+ this.feeno = mergingItems!!.feeNo
+ this.uid = uid
+ this.paystatus = MedicalConstant.DTL_STATUS_INIT
+ this.transdate = systemUtilService.sysdatetime.hostdate
+ this.transtime = systemUtilService.sysdatetime.hosttime
+ this.citizencardno = cardNo
+ this.payamount = preFeeResponse.payAmount
+ this.totalfee = preFeeResponse.totalFee
+ this.extrafeedesc = preFeeResponse.extraFeeDesc
+ this.invoiceno = preFeeResponse.invoiceNumber
+ }
+ medicalDtlDao.save(medicalDtl)
+ return JsonResult.ok()
+ }
+
+ override fun medicalPayConfirm(billno: String): JsonResult? {
+ //4.本地向payapi扣费
+ //4.1 payapi扣费初始化
+ val medicalDtl = medicalDtlDao.findByBillnoForUpdate(billno)
+ val initParam = CitizenCardPayinitParam().apply {
+ this.billno = medicalDtl.billno
+ this.cardNo = medicalDtl.citizencardno
+ this.amount = MoneyUtil.YuanToFen(medicalDtl.payamount)
+ this.dtltype = MedicalConstant.DTLTYPE_MEDICAL
+ this.transdate = medicalDtl.transdate
+ this.transtime = medicalDtl.transtime
+ this.shopaccno = systemUtilService.getBusinessValue(PortalConstant.SYSPARA_MEDICAL_SHOPACCNOm)
+ }
+ val payInit = citizenCardPayProxy.citizencardPayinit(initParam)
+ if (payInit.retcode == 0) {
+ throw MedicineException("向payapi请求异常:${payInit.retcode}-${payInit.retmsg}")
+ }
+ medicalDtl.refno = payInit.refno
+ medicalDtl.paystatus = MedicalConstant.DTL_STATUS_WIP
+ medicalDtlDao.save(medicalDtl)
+ //4.2 paypai扣费确认
+ val confirmParam = CitizenCardPayfinishParam().apply {
+ this.refno = medicalDtl.refno
+ }
+ val payConfirm = citizenCardPayProxy.citizencardPayFinish(confirmParam)
+ if (payConfirm.retcode != MedicalConstant.PAYAPI_SUCCESS_RETCODE) {
+ throw MedicineException("向payapi请求异常:${payConfirm.retcode}-${payConfirm.retmsg}")
+ }
+
+ //6.修改本地流水状态
+
+ medicalDtl.paystatus = MedicalConstant.DTL_STATUS_SUCCESS
+ medicalDtlDao.save(medicalDtl)
+ return JsonResult.ok()
+ }
+
+ fun notifyHIS() {
+
+ //5.向HIS支付确认
+ val notifyPayedRequest = NotifyPayedRequest().apply {
+
+ }
+ val notifyPayedResponse = medicalClient.notifyPayed(notifyPayedRequest)
}
}
\ No newline at end of file
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt
index fba92f8..e29742f 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt
@@ -1032,7 +1032,7 @@
}
val card = cardResponse.card
if (card.transStatus != TradeDict.STATUS_NORMAL) {
- return JsonResult.error("卡状态非正常,不能挂失")
+ return JsonResult.error("您已挂失该卡,无须重复挂失")
}
card.transStatus = TradeDict.STATUS_LOST
val response = userProxy.updateCardTransStatus(card.cardno, TradeDict.STATUS_LOST)
diff --git a/backend/src/main/resources/data-postgresql.sql b/backend/src/main/resources/data-postgresql.sql
index 9880a3d..06cac44 100644
--- a/backend/src/main/resources/data-postgresql.sql
+++ b/backend/src/main/resources/data-postgresql.sql
@@ -22,6 +22,9 @@
INSERT INTO "tb_businesspara"("parakey", "paraval", "tenantid") VALUES ('aes.cfb.iv', '55b6f5b3287c535f8274b99354676d0e', '{tenantid}');
INSERT INTO "tb_businesspara"("parakey", "paraval", "tenantid") VALUES ('portal.amapkey', 'd69cdfdc1711fc7c318eb7e1a0664976', '{tenantid}');
INSERT INTO "tb_businesspara"("parakey", "paraval", "tenantid") VALUES ('portal.amapurl', 'https://webapi.amap.com/maps?v=1.4.15&key=', '{tenentid}');
+INSERT INTO "tb_businesspara"("parakey", "paraval", "tenantid") VALUES ('medical.url', 'http://1.10.10.252:8380/phis/', '{tenentid}');
+INSERT INTO "tb_businesspara"("parakey", "paraval", "tenantid") VALUES ('medical.shopaccno', '462078377', '{tenentid}');
+
INSERT INTO "tb_column"("columnid", "isleaf", "name", "needreview", "parentid", "code", "ispublic", "publishable", "ordernum") VALUES ('2c9cab947451988c017451a737b10000', '0', '线上活动', '0', '', 'OnlineActivities', '1', '1', 12);
diff --git a/frontend/src/utils/auth.js b/frontend/src/utils/auth.js
index 08a43d6..a851609 100644
--- a/frontend/src/utils/auth.js
+++ b/frontend/src/utils/auth.js
@@ -1,15 +1,14 @@
-import Cookies from 'js-cookie'
const TokenKey = 'Admin-Token'
export function getToken() {
- return Cookies.get(TokenKey)
+ return sessionStorage.getItem(TokenKey)
}
export function setToken(token) {
- return Cookies.set(TokenKey, token)
+ return sessionStorage.setItem(TokenKey, token)
}
export function removeToken() {
- return Cookies.remove(TokenKey)
+ return sessionStorage.removeItem(TokenKey)
}