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
