修改payapi-sdk版本为1.0.29
diff --git a/backend/build.gradle b/backend/build.gradle
index 30774d0..b1e80f4 100644
--- a/backend/build.gradle
+++ b/backend/build.gradle
@@ -74,7 +74,7 @@
     compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.9.1'
     compile group: 'log4j', name: 'log4j', version: '1.2.17'
 
-    compile group: 'com.supwisdom', name: 'payapi-sdk', version: '1.0.28-10-g10b32b4'
+    compile group: 'com.supwisdom', name: 'payapi-sdk', version: '1.0.29'
     
     implementation 'org.hamcrest:hamcrest:2.1'
 }
diff --git a/backend/src/main/java/com/supwisdom/dlpay/medical/domain/TBExamReport.java b/backend/src/main/java/com/supwisdom/dlpay/medical/domain/TBExamReport.java
new file mode 100644
index 0000000..7285dc0
--- /dev/null
+++ b/backend/src/main/java/com/supwisdom/dlpay/medical/domain/TBExamReport.java
@@ -0,0 +1,91 @@
+package com.supwisdom.dlpay.medical.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Id;
+import java.sql.Date;
+
+public class TBExamReport {
+  @Id
+  @Column(name = "PATIENTID", length = 64)
+  private String patientId;
+  /**
+   * 检查流水号
+   */
+  @Column(name = "JCLSH", length = 32)
+  private String JCLSH;
+  /**
+   * 患者身份证号码
+   */
+  @Column(name = "HZSFZ", length = 20)
+  private String HZSFZ;
+  /**
+   * 就诊流水号
+   */
+  @Column(name = "JZLSH", length = 32)
+  private String JZLSH;
+  /**
+   * 患者姓名
+   */
+  @Column(name = "HZXM", length = 50)
+  private String HZXM;
+  /**
+   * 病床号
+   */
+  @Column(name = "BCH", length = 20)
+  private String BCH;
+  /**
+   * 病区名称
+   */
+  @Column(name = "BQMC", length = 50)
+  private String BQMC;
+  /**
+   * 标本样本采样时间
+   */
+  @Column(name = "BBCYRQ")
+  private Date BBCYRQ;
+  /**
+   * 检查项目名称
+   */
+  @Column(name = "JCXMMC")
+  private String JCXMMC;
+  /**
+   * 检查定量结果
+   */
+  @Column(name = "JCDLJG", precision = 14, scale = 4)
+  private Double JCDLJG;
+  /**
+   * 检查定量结果计量单位
+   */
+  @Column(name = "JCDLJGJLDW", length = 20)
+  private String JCDLJGJLDW;
+  /**
+   * 性别代码
+   */
+  @Column(name = "XB", length = 5)
+  private String XB;
+  /**
+   * 报告医生姓名
+   */
+  @Column(name = "BGYSXM", length = 50)
+  private String BGYSXM;
+  /**
+   * 检查报告日期
+   */
+  @Column(name = "BGSJ")
+  private Date BGSJ;
+  /**
+   * 审核医师姓名
+   */
+  @Column(name = "SHYSXM", length = 50)
+  private String SHYSXM;
+  /**
+   * 医疗机构代码
+   */
+  @Column(name = "YLJGDM", length = 30)
+  private String YLJGDM;
+  /**
+   * 医疗机构名称
+   */
+  @Column(name = "YLJGMC", length = 50)
+  private String YLJGMC;
+}
diff --git a/backend/src/main/java/com/supwisdom/dlpay/medical/domain/TBLabDetail.java b/backend/src/main/java/com/supwisdom/dlpay/medical/domain/TBLabDetail.java
new file mode 100644
index 0000000..b529ed4
--- /dev/null
+++ b/backend/src/main/java/com/supwisdom/dlpay/medical/domain/TBLabDetail.java
@@ -0,0 +1,58 @@
+package com.supwisdom.dlpay.medical.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Id;
+
+public class TBLabDetail {
+  /**
+   * 检验明细流水号
+   */
+  @Id
+  @Column(name = "JYMXLSH", length = 32)
+  private String JYMXLSH;
+  /**
+   * 就诊流水号
+   */
+  @Column(name = "JZLSH", length = 32)
+  private String JZLSH;
+  /**
+   * 检验报告单号
+   */
+  @Column(name = "JYBGDH", length = 32)
+  private String JYBGDH;
+  /**
+   * 检验结果
+   */
+  @Column(name = "JYJG", length = 100)
+  private String JYJG;
+  /**
+   * 检测定量结果:患者检验结果的测量值(定量)
+   */
+  @Column(name = "JYDLJG", length = 40)
+  private String JYDLJG;
+  /**
+   * 检查/检验计量单位
+   */
+  @Column(name = "JLDW", length = 20)
+  private String JLDW;
+  /**
+   * 参考值范围
+   */
+  @Column(name = "CKDX", length = 1000)
+  private String CKDX;
+  /**
+   * 检验项目名称
+   */
+  @Column(name = "JYXMMC", length = 80)
+  private String JYXMMC;
+  /**
+   * 检验项目英文简称
+   */
+  @Column(name = "JYXMYWMC", length = 100)
+  private String JYXMYWMC;
+  /**
+   * 显示顺序
+   */
+  @Column(name = "XSSX", length = 40)
+  private String XSSX;
+}
diff --git a/backend/src/main/java/com/supwisdom/dlpay/medical/domain/TBLabReport.java b/backend/src/main/java/com/supwisdom/dlpay/medical/domain/TBLabReport.java
new file mode 100644
index 0000000..c0d30c1
--- /dev/null
+++ b/backend/src/main/java/com/supwisdom/dlpay/medical/domain/TBLabReport.java
@@ -0,0 +1,266 @@
+package com.supwisdom.dlpay.medical.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Id;
+import java.sql.Date;
+
+public class TBLabReport {
+  @Id
+  @Column(name = "PATIENTID", length = 64)
+  private String patientId;
+  /**
+   * 检验报告单号
+   */
+  @Column(name = "JYBGDH", length = 32)
+  private String JYBGDH;
+  /**
+   * 患者身份证
+   */
+  @Column(name = "HZSFZ", length = 20)
+  private String HZSFZ;
+  /**
+   * 病床号
+   */
+  @Column(name = "BCH", length = 20)
+  private String BCH;
+  /**
+   * 病区名称
+   */
+  @Column(name = "BQMC", length = 50)
+  private String BQMC;
+  /**
+   * 患者姓名
+   */
+  @Column(name = "HZXM", length = 20)
+  private String HZXM;
+  /**
+   * 性别代码
+   */
+  @Column(name = "XB", length = 5)
+  private String XB;
+  /**
+   * 诊断日期
+   */
+  @Column(name = "ZDRQ")
+  private Date ZDRQ;
+  /**
+   * 标本类别(字典DE04.50.134.00)
+   */
+  @Column(name = "BZLB", length = 20)
+  private String BZLB;
+  /**
+   * 检验报告单机构(科室)
+   */
+  @Column(name = "JYBGDJG", length = 50)
+  private String JYBGDJG;
+  /**
+   * 检验报告机构名称
+   */
+  @Column(name = "JYBGJGMC", length = 50)
+  private String JYBGJGMC;
+  /**
+   * 检验报告结果
+   */
+  @Column(name = "JYBGJG", length = 200)
+  private String JYBGJG;
+  /**
+   * 检验报告备注
+   */
+  @Column(name = "BZ", length = 500)
+  private String BZ;
+  /**
+   * 检验报告日期
+   */
+  @Column(name = "JYBGRQ")
+  private Date JYBGRQ;
+  /**
+   * 审核医生姓名
+   */
+  @Column(name = "SHYSXM", length = 50)
+  private String SHYSXM;
+  /**
+   * 报告医生姓名
+   */
+  @Column(name = "BGYSXM", length = 50)
+  private String BGYSXM;
+  /**
+   * 检验日期(检验报告执行时间)
+   */
+  @Column(name = "JYRQ")
+  private Date JYRQ;
+  /**
+   * 诊断机构名称
+   */
+  @Column(name = "ZDJGMC", length = 50)
+  private String ZDJGMC;
+  /**
+   * 医疗机构代码
+   */
+  @Column(name = "YLJGDM", length = 30)
+  private String YLJGDM;
+  /**
+   * 医疗机构名称
+   */
+  @Column(name = "YLJGMC", length = 50)
+  private String YLJGMC;
+
+  public String getPatientId() {
+    return patientId;
+  }
+
+  public void setPatientId(String patientId) {
+    this.patientId = patientId;
+  }
+
+  public String getJYBGDH() {
+    return JYBGDH;
+  }
+
+  public void setJYBGDH(String JYBGDH) {
+    this.JYBGDH = JYBGDH;
+  }
+
+  public String getHZSFZ() {
+    return HZSFZ;
+  }
+
+  public void setHZSFZ(String HZSFZ) {
+    this.HZSFZ = HZSFZ;
+  }
+
+  public String getBCH() {
+    return BCH;
+  }
+
+  public void setBCH(String BCH) {
+    this.BCH = BCH;
+  }
+
+  public String getBQMC() {
+    return BQMC;
+  }
+
+  public void setBQMC(String BQMC) {
+    this.BQMC = BQMC;
+  }
+
+  public String getHZXM() {
+    return HZXM;
+  }
+
+  public void setHZXM(String HZXM) {
+    this.HZXM = HZXM;
+  }
+
+  public String getXB() {
+    return XB;
+  }
+
+  public void setXB(String XB) {
+    this.XB = XB;
+  }
+
+  public Date getZDRQ() {
+    return ZDRQ;
+  }
+
+  public void setZDRQ(Date ZDRQ) {
+    this.ZDRQ = ZDRQ;
+  }
+
+  public String getBZLB() {
+    return BZLB;
+  }
+
+  public void setBZLB(String BZLB) {
+    this.BZLB = BZLB;
+  }
+
+  public String getJYBGDJG() {
+    return JYBGDJG;
+  }
+
+  public void setJYBGDJG(String JYBGDJG) {
+    this.JYBGDJG = JYBGDJG;
+  }
+
+  public String getJYBGJGMC() {
+    return JYBGJGMC;
+  }
+
+  public void setJYBGJGMC(String JYBGJGMC) {
+    this.JYBGJGMC = JYBGJGMC;
+  }
+
+  public String getJYBGJG() {
+    return JYBGJG;
+  }
+
+  public void setJYBGJG(String JYBGJG) {
+    this.JYBGJG = JYBGJG;
+  }
+
+  public String getBZ() {
+    return BZ;
+  }
+
+  public void setBZ(String BZ) {
+    this.BZ = BZ;
+  }
+
+  public Date getJYBGRQ() {
+    return JYBGRQ;
+  }
+
+  public void setJYBGRQ(Date JYBGRQ) {
+    this.JYBGRQ = JYBGRQ;
+  }
+
+  public String getSHYSXM() {
+    return SHYSXM;
+  }
+
+  public void setSHYSXM(String SHYSXM) {
+    this.SHYSXM = SHYSXM;
+  }
+
+  public String getBGYSXM() {
+    return BGYSXM;
+  }
+
+  public void setBGYSXM(String BGYSXM) {
+    this.BGYSXM = BGYSXM;
+  }
+
+  public Date getJYRQ() {
+    return JYRQ;
+  }
+
+  public void setJYRQ(Date JYRQ) {
+    this.JYRQ = JYRQ;
+  }
+
+  public String getZDJGMC() {
+    return ZDJGMC;
+  }
+
+  public void setZDJGMC(String ZDJGMC) {
+    this.ZDJGMC = ZDJGMC;
+  }
+
+  public String getYLJGDM() {
+    return YLJGDM;
+  }
+
+  public void setYLJGDM(String YLJGDM) {
+    this.YLJGDM = YLJGDM;
+  }
+
+  public String getYLJGMC() {
+    return YLJGMC;
+  }
+
+  public void setYLJGMC(String YLJGMC) {
+    this.YLJGMC = YLJGMC;
+  }
+}
diff --git a/backend/src/main/java/com/supwisdom/dlpay/medical/domain/TBMedicalDtl.java b/backend/src/main/java/com/supwisdom/dlpay/medical/domain/TBMedicalDtl.java
index 98d6b25..8fc6d2e 100644
--- a/backend/src/main/java/com/supwisdom/dlpay/medical/domain/TBMedicalDtl.java
+++ b/backend/src/main/java/com/supwisdom/dlpay/medical/domain/TBMedicalDtl.java
@@ -241,4 +241,12 @@
   public void setMergingname(String mergingname) {
     this.mergingname = mergingname;
   }
+
+  public String getMedicaldate() {
+    return medicaldate;
+  }
+
+  public void setMedicaldate(String medicaldate) {
+    this.medicaldate = medicaldate;
+  }
 }
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/medical/MedicalApi.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/medical/MedicalApi.kt
index ee3e35e..81eaa06 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/medical/MedicalApi.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/medical/MedicalApi.kt
@@ -191,12 +191,12 @@
      * 获取已支付列表
      */
     @PostMapping("/payed/list")
-    fun getPayedList(hospitalcode: String, cardid: String): JsonResult? {
+    fun getPayedList(hospitalcode: String): JsonResult? {
         try {
             val p = SecurityContextHolder.getContext().authentication
             val user = mobileApiService.findUserById(p.name)
                     ?: return JsonResult.error("用户不存在,请注册")
-            val data = medicalService.getPayedList(user.uid, hospitalcode, cardid)
+            val data = medicalService.getPayedList(user.uid, hospitalcode)
             return JsonResult.ok().put("data", data)
         } catch (e: Exception) {
             logger.error("系统异常", e)
@@ -254,15 +254,17 @@
             val user = mobileApiService.findUserById(p.name)
                     ?: return JsonResult.error("用户不存在,请注册")
             val result = medicalService.queryMedicalPayResult(billno, user.uid)
-            return if (result!!["code"] == MedicalConstant.MEDICAL_RESPONSE_SUCCESS) {
-                if (result["msg"] == MedicalConstant.DTL_STATUS_SUCCESS) {
+            return when {
+                result!!["msg"] == MedicalConstant.DTL_STATUS_SUCCESS -> {
                     notifyHISAsyncTask.notifyHIS(billno)
                     JsonResult.ok().put("status", MedicalConstant.DTL_STATUS_SUCCESS)
-                } else {
+                }
+                result["msg"] == MedicalConstant.DTL_STATUS_FAIL -> {
+                    JsonResult.ok(result["error"] as String).put("status", MedicalConstant.DTL_STATUS_FAIL)
+                }
+                else -> {
                     JsonResult.ok().put("status", MedicalConstant.DTL_STATUS_WIP)
                 }
-            } else {
-                result
             }
         } catch (e: Exception) {
             logger.error("系统异常", e)
@@ -304,5 +306,13 @@
         bean.cardNo = userInfo.cardno
         bean.idno = userInfo.idno
         return JsonResult.ok()
+    }
+
+    /**
+     * 获取报告(检验、检查报告)
+     */
+    @PostMapping("/report")
+    fun getDiagnosticReport() {
+
     }*/
 }
\ No newline at end of file
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/medical/bean/PayedBean.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/medical/bean/PayedBean.kt
index 446980f..93e35ee 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/medical/bean/PayedBean.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/medical/bean/PayedBean.kt
@@ -33,10 +33,12 @@
 }
 
 class PayedDTO {
+    var billNo: String = ""
     var medicalDate: String? = ""
     var mergingName: String? = ""
     var executionStatus: Int? = 0
     var execute: String? = ""
     var totalFee: Double? = 0.0
     var admNumber: String? = ""
+    var notifyStatus: Boolean? = false
 }
\ No newline at end of file
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/medical/dao/MedicalDtlDao.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/medical/dao/MedicalDtlDao.kt
index f535820..065db64 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/medical/dao/MedicalDtlDao.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/medical/dao/MedicalDtlDao.kt
@@ -21,5 +21,5 @@
 
     fun findByUidAndEmergencyAndFeenoAndOrganizationidAndPaystatusNot(uid: String, emergency: String, feeNo: String, organizationId: String, payStatus: String): TBMedicalDtl?
 
-    fun findByUidAndOrganizationidAndPaystatus(uid: String, organizationId: String, payStatus: String, pageable: Pageable): List<TBMedicalDtl>?
+    fun findByUidAndOrganizationidAndPaystatusOrderByAccdateDesc(uid: String, organizationId: String, payStatus: String, pageable: Pageable): List<TBMedicalDtl>?
 }
\ No newline at end of file
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/medical/service/MedicalService.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/medical/service/MedicalService.kt
index 1e5683c..eb6419b 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/medical/service/MedicalService.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/medical/service/MedicalService.kt
@@ -57,4 +57,8 @@
 
     @Transactional
     fun queryMedicalPayResult(billNo: String, uid: String): JsonResult?
+
+    @Transactional
+    fun getDiagnosticReport(uid: String): JsonResult?
+
 }
\ No newline at end of file
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/medical/service/impl/MedicalServiceImpl.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/medical/service/impl/MedicalServiceImpl.kt
index f2e38ec..58d02cc 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/medical/service/impl/MedicalServiceImpl.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/medical/service/impl/MedicalServiceImpl.kt
@@ -9,10 +9,7 @@
 import com.supwisdom.dlpay.framework.util.MoneyUtil
 import com.supwisdom.dlpay.framework.util.StringUtil
 import com.supwisdom.dlpay.medical.bean.*
-import com.supwisdom.dlpay.medical.dao.AppointmentDtlDao
-import com.supwisdom.dlpay.medical.dao.HospitalDao
-import com.supwisdom.dlpay.medical.dao.MedicalCardDao
-import com.supwisdom.dlpay.medical.dao.MedicalDtlDao
+import com.supwisdom.dlpay.medical.dao.*
 import com.supwisdom.dlpay.medical.domain.TBAppointmentDtl
 import com.supwisdom.dlpay.medical.domain.TBMedicalCard
 import com.supwisdom.dlpay.medical.domain.TBMedicalDtl
@@ -215,6 +212,7 @@
                         this.organizationid = organizationId
                         this.patientid = unPayedResponse.patientId
                         this.totalfee = mergingItems.mergingSubtotal
+                        this.medicaldate = medicalInformation.medicalDate?.replace("-", "")
                     }
                     medicalDtlDao.save(medicalDtl)
                 } else {
@@ -267,13 +265,22 @@
         return payedDTOList
     }
 
-
     override fun getPayedList(uid: String, organizationId: String): ArrayList<PayedDTO> {
-        val medicalDtlList = medicalDtlDao.findByUidAndOrganizationidAndPaystatus(uid, organizationId, MedicalConstant.DTL_STATUS_SUCCESS, PageRequest.of(0, 10))
+        val medicalDtlList = medicalDtlDao.findByUidAndOrganizationidAndPaystatusOrderByAccdateDesc(
+                uid, organizationId, MedicalConstant.DTL_STATUS_SUCCESS, PageRequest.of(0, 10))
         val payedDTOList = ArrayList<PayedDTO>()
         if (!medicalDtlList.isNullOrEmpty()) {
             medicalDtlList.forEach {
-
+                val payedDTO = PayedDTO().apply {
+                    this.billNo = it.billno
+                    this.totalFee = it.totalfee
+                    this.medicalDate = it.medicaldate
+                    this.mergingName = it.mergingname
+                    if (!StringUtil.isEmpty(it.resultid)) {
+                        this.notifyStatus = true
+                    }
+                }
+                payedDTOList.add(payedDTO)
             }
         }
         return payedDTOList
@@ -449,12 +456,13 @@
                 MedicalConstant.DTL_STATUS_FAIL -> {
                     medicalDtl.paystatus = MedicalConstant.DTL_STATUS_FAIL
                     medicalDtlDao.save(medicalDtl)
-                    return JsonResult.error(queryResult.retmsg)
+                    return JsonResult.ok(MedicalConstant.DTL_STATUS_FAIL).put("error", queryResult.remark)
                 }
                 MedicalConstant.DTL_STATUS_INIT -> {
-                    medicalDtl.paystatus = MedicalConstant.DTL_STATUS_WIP
+                    //payapi流水已初始化,但未确认,可修改状态为init让用户重新发起支付
+                    medicalDtl.paystatus = MedicalConstant.DTL_STATUS_INIT
                     medicalDtlDao.save(medicalDtl)
-                    return JsonResult.ok(MedicalConstant.DTL_STATUS_WIP)
+                    return JsonResult.ok(MedicalConstant.DTL_STATUS_FAIL).put("error", "系统异常,支付失败")
                 }
             }
             logger.error("未知的查询状态码:${queryResult.status},${queryResult.retmsg}")
@@ -465,4 +473,8 @@
         medicalDtlDao.save(medicalDtl)
         return JsonResult.ok(MedicalConstant.DTL_STATUS_WIP)
     }
+
+    override fun getDiagnosticReport(uid: String): JsonResult? {
+        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+    }
 }
\ No newline at end of file