回滚手机签约接口
diff --git a/backend/build.gradle b/backend/build.gradle
index 684619c..468595c 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-1-g7415df3'
+    compile group: 'com.supwisdom', name: 'payapi-sdk', version: '1.0.28'
     
     implementation 'org.hamcrest:hamcrest:2.1'
 }
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
index ad1fecc..4ada05d 100644
--- a/backend/src/main/java/com/supwisdom/dlpay/medicine/domain/TBMedicalDtl.java
+++ b/backend/src/main/java/com/supwisdom/dlpay/medicine/domain/TBMedicalDtl.java
@@ -3,7 +3,7 @@
 import javax.persistence.*;
 
 @Entity
-@Table(name = "tb_medicaldtl",indexes = {@Index(name = "medicaldtl_idx",columnList = "admnumber,organizationid,feeno")})
+@Table(name = "tb_medicaldtl",indexes = {@Index(name = "medicaldtl_idx",columnList = "admnumber,feeno,organizationid")})
 public class TBMedicalDtl {
   @Id
   @Column(name = "billno", length = 32)
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 d0ad509..86bcd24 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
@@ -33,12 +33,13 @@
   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 DTL_STATUS_FAIL = "fail";
   /**
    * 子系统代码
    */
   public final static String DTLTYPE_MEDICAL = "medical";
   /**
-   * payapi成功响应代码
+   * payapi响应代码
    */
   public final static Integer PAYAPI_SUCCESS_RETCODE = 0;
 
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 c56a6e9..166c520 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/MedicineApi.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/MedicineApi.kt
@@ -200,7 +200,9 @@
             return checkResult
         }
         val cardNo = checkResult["data"] as String
-        medicineService.medicalPayInit(user.uid, bean,cardNo)
+        medicineService.medicalPayPreInit(user.uid, bean,cardNo)
+//        medicineService.medicalPayInit()
+//        medicineService.medicalPayConfirm()
         return JsonResult.ok()
     }
 
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
index 95f0acb..a641ace 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/dao/MedicalDtlDao.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/medicine/dao/MedicalDtlDao.kt
@@ -16,5 +16,5 @@
     @QueryHints(QueryHint(name = "javax.persistence.lock.timeout", value = "0"))
     fun findByBillnoForUpdate(billno: String?): TBMedicalDtl
 
-    fun findByAdmnumberAndOrganizationidAndFeeno(admNumber: String, organizationId: String, feeNo: String): TBMedicalDtl?
+    fun findByAdmnumberAndFeenoAndOrganizationidAndPaystatusNot(admNumber: String, organizationId: String, feeNo: String, payStatus: 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 5cf9537..c592c93 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
@@ -38,8 +38,14 @@
     fun getPayedList(uid: String, organizationId: String, cardId: String): ArrayList<PayedDTO>
 
     @Transactional
-    fun medicalPayInit(uid: String, bean: PaymentRequestBean, cardNo: String): JsonResult?
+    fun medicalPayPreInit(uid: String, bean: PaymentRequestBean, cardNo: String): JsonResult?
 
     @Transactional
-    fun medicalPayConfirm(billno: String): JsonResult?
+    fun medicalPayInit(billNo: String): JsonResult?
+
+    @Transactional
+    fun medicalPayConfirm(billNo: String): JsonResult?
+
+    @Transactional
+    fun notifyHISPayed()
 }
\ 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 8ca738c..baeddcf 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
@@ -223,7 +223,7 @@
         return payedDTOList
     }
 
-    override fun medicalPayInit(uid: String, bean: PaymentRequestBean, cardNo: String): JsonResult? {
+    override fun medicalPayPreInit(uid: String, bean: PaymentRequestBean, cardNo: String): JsonResult? {
         val medicalCard = medicalCardDao.findByCardidAndUid(bean.cardid, uid)
                 ?: throw MedicineException("未找到该就诊卡")
         //1.从HIS中找到待支付流水
@@ -257,14 +257,22 @@
         }
         val preFeeResponse = medicalClient.getPreCalculatedFee(preFeeRequest)
         //查看本地是否有该条流水记录
-        val localMedicalDtl = medicalDtlDao.findByAdmnumberAndOrganizationidAndFeeno(bean.admnumber, bean.organizationid, mergingItems!!.feeNo)
+        val localMedicalDtl = medicalDtlDao.findByAdmnumberAndFeenoAndOrganizationidAndPaystatusNot(
+                bean.admnumber, bean.organizationid, mergingItems!!.feeNo, MedicalConstant.DTL_STATUS_FAIL)
         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) {
-
+            when (localMedicalDtl.paystatus) {
+                MedicalConstant.DTL_STATUS_SUCCESS -> {
+                    return JsonResult.ok("该缴费已成功支付")
+                }
+                MedicalConstant.DTL_STATUS_WIP -> {
+                    return JsonResult.ok("请求正在处理中,请稍后查询处理结果")
+                }
+                MedicalConstant.DTL_STATUS_INIT -> {
+                    //流水已生成,跳过生成本地流水步骤
+                    return JsonResult.ok("continue")
+                }
             }
         }
         //3.本地新建一条支付流水
@@ -286,10 +294,10 @@
         return JsonResult.ok()
     }
 
-    override fun medicalPayConfirm(billno: String): JsonResult? {
+    override fun medicalPayInit(billNo: String): JsonResult? {
         //4.本地向payapi扣费
         //4.1 payapi扣费初始化
-        val medicalDtl = medicalDtlDao.findByBillnoForUpdate(billno)
+        val medicalDtl = medicalDtlDao.findByBillnoForUpdate(billNo)
         val initParam = CitizenCardPayinitParam().apply {
             this.billno = medicalDtl.billno
             this.cardNo = medicalDtl.citizencardno
@@ -306,7 +314,12 @@
         medicalDtl.refno = payInit.refno
         medicalDtl.paystatus = MedicalConstant.DTL_STATUS_WIP
         medicalDtlDao.save(medicalDtl)
+        return JsonResult.ok()
+    }
+
+    override fun medicalPayConfirm(billNo: String): JsonResult? {
         //4.2 paypai扣费确认
+        val medicalDtl = medicalDtlDao.findByBillnoForUpdate(billNo)
         val confirmParam = CitizenCardPayfinishParam().apply {
             this.refno = medicalDtl.refno
         }
@@ -316,14 +329,12 @@
         }
 
         //6.修改本地流水状态
-
         medicalDtl.paystatus = MedicalConstant.DTL_STATUS_SUCCESS
         medicalDtlDao.save(medicalDtl)
         return JsonResult.ok()
     }
 
-    fun notifyHIS() {
-
+    override fun notifyHISPayed() {
         //5.向HIS支付确认
         val notifyPayedRequest = NotifyPayedRequest().apply {
 
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 e29742f..3c3e0fc 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt
@@ -722,15 +722,7 @@
             return JsonResult.error("用户不存在,请注册")
         }
         if (!user.userid.isNullOrEmpty()) {
-            val response = userProxy.signbxy(SignBxyParam().apply {
-                this.userid = user.userid
-                this.code = agree
-                this.phone = user.phone
-                this.uid = user.uid
-                this.rsaprivate = user.rsaprivate
-                this.rsapublic = user.rsapublic
-                this.secertkey = user.secertkey
-            })
+            val response = userProxy.signbxy(user.userid, agree, user.phone)
             if (response.retcode != 0) {
                 logger.error { "用户签约失败:${response.retmsg}" }
                 return JsonResult.error("签约失败,${response.retmsg}")