From 9923d2fee1010fe3e0dd7167c38107da16a7b2f2 Mon Sep 17 00:00:00 2001
From: k94314517 <8417338+k94314517@user.noreply.gitee.com>
Date: 星期五, 18 七月 2025 19:18:29 +0800
Subject: [PATCH] 111

---
 server/services/src/main/java/com/doumee/config/wx/WxMiniConfig.java                            |    9 
 server/services/src/main/java/com/doumee/dao/business/model/IdentityInfo.java                   |    4 
 server/services/src/main/java/com/doumee/config/wx/TransferDetailEntityNew.java                 |  213 ++++++++++++
 server/services/src/main/resources/application-dev.yml                                          |   22 
 server/services/src/main/java/com/doumee/config/wx/SendWxMessage.java                           |   34 +-
 server/web/src/main/java/com/doumee/api/web/OrdersApi.java                                      |   18 
 server/pom.xml                                                                                  |    2 
 server/services/src/main/java/com/doumee/config/wx/WxPayProperties.java                         |    4 
 server/services/src/main/java/com/doumee/core/constants/Constants.java                          |   22 +
 server/services/src/main/java/com/doumee/config/wx/TransferToUser.java                          |   27 +
 server/services/src/main/java/com/doumee/service/business/impl/IdentityInfoServiceImpl.java     |  112 ++++-
 server/services/src/main/java/com/doumee/dao/business/model/Orders.java                         |   38 ++
 server/services/src/main/java/com/doumee/dao/dto/ReusePayDTO.java                               |   27 +
 server/services/src/main/java/com/doumee/service/business/OrdersService.java                    |    9 
 server/admin/src/main/java/com/doumee/api/business/PaymentCallback.java                         |  110 ++++++
 server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java           |  329 +++++++++++++-----
 server/services/src/main/java/com/doumee/service/business/impl/WithdrawalOrdersServiceImpl.java |    3 
 17 files changed, 796 insertions(+), 187 deletions(-)

diff --git a/server/admin/src/main/java/com/doumee/api/business/PaymentCallback.java b/server/admin/src/main/java/com/doumee/api/business/PaymentCallback.java
index b7a6a64..33f43ee 100644
--- a/server/admin/src/main/java/com/doumee/api/business/PaymentCallback.java
+++ b/server/admin/src/main/java/com/doumee/api/business/PaymentCallback.java
@@ -1,9 +1,15 @@
 package com.doumee.api.business;
 
+import com.alibaba.fastjson.JSON;
+import com.doumee.config.wx.TransferDetailEntityNew;
 import com.doumee.config.wx.WxMiniConfig;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
 import com.doumee.core.model.ApiResponse;
 import com.doumee.service.business.OrdersService;
+import com.wechat.pay.java.core.Config;
 import com.wechat.pay.java.core.RSAAutoCertificateConfig;
+import com.wechat.pay.java.core.RSAPublicKeyConfig;
 import com.wechat.pay.java.core.notification.NotificationConfig;
 import com.wechat.pay.java.core.notification.NotificationParser;
 import com.wechat.pay.java.core.notification.RequestParam;
@@ -20,7 +26,11 @@
 import javax.servlet.ServletInputStream;
 import javax.servlet.http.HttpServletRequest;
 import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * Created by IntelliJ IDEA.
@@ -41,7 +51,7 @@
      *
      * @return
      */
-    @PostMapping("/api/wxPayNotify")
+    @PostMapping("/web/wxPayNotify")
     public ApiResponse wxPay_notify(HttpServletRequest request) {
         try {
             ServletInputStream inputStream = request.getInputStream();
@@ -76,6 +86,8 @@
 
 
             NotificationParser parser = new NotificationParser(config);
+
+
             Transaction result = parser.parse(requestParam, Transaction.class);
             //鑷畾涔夎鍗曞彿
             String outTradeNo = result.getOutTradeNo();
@@ -105,7 +117,7 @@
             return ApiResponse.failed("");
         }
     }
-    @PostMapping("/api/wxRefundNotify")
+    @PostMapping("/web/wxRefundNotify")
     public ApiResponse wxRefundNotify(HttpServletRequest request) {
         log.error("寰俊閫�娆惧洖璋冪粨鏋滃紑濮�===========" );
         try {
@@ -156,4 +168,98 @@
         }
     }
 
+
+
+
+    /**
+     * 寰俊鍟嗘埛闆剁嚎杞处 - 鍥炶皟閫氱煡
+     * @Context娉ㄨВ  鎶奌TTP璇锋眰涓婁笅鏂囧璞℃敞鍏ヨ繘鏉ワ紝HttpServletRequest銆丠ttpServletResponse銆乁riInfo 绛�
+     * @return
+     */
+    @PostMapping(value = "/web/wechat/transferNotify")
+    public ApiResponse wxPayCallback( HttpServletRequest request) {
+        Map<String,String> errMap = new HashMap<>();
+        try {
+            log.info("寰俊鍟嗘埛闆剁嚎杞处 - 鍥炶皟閫氱煡 /wxpay/callback");
+            TransferDetailEntityNew entity = wxPaySuccessCallback(request);
+            log.info("transfer ok.{}",entity);
+            //鍥炶皟鎴愬姛鍚庡鐞嗚嚜宸辩殑涓氬姟
+            if(entity != null){
+            }
+            return ApiResponse.success("澶勭悊鎴愬姛");
+        } catch (Exception e) {
+            log.error("寰俊鍟嗘埛闆剁嚎杞处 - 鍥炶皟閫氱煡 /wxpay/callback锛氬紓甯革紒", e);
+            errMap.put("code", "FAIL");
+            errMap.put("message", "鏈嶅姟鍣ㄥ唴閮ㄩ敊璇�");
+            return ApiResponse.failed("澶勭悊澶辫触");
+        }
+    }
+
+    public TransferDetailEntityNew wxPaySuccessCallback(HttpServletRequest request) throws IOException {
+        String requestBody = getBodyString(request, "UTF-8");
+        //璇佷功搴忓垪鍙凤紙寰俊骞冲彴锛�   楠岀鐨勨�滃井淇℃敮浠樺钩鍙拌瘉涔︹�濇墍瀵瑰簲鐨勫钩鍙拌瘉涔﹀簭鍒楀彿
+        String wechatPaySerial = request.getHeader("Wechatpay-Serial");
+        //寰俊浼犻�掕繃鏉ョ殑绛惧悕   楠岀鐨勭鍚嶅��
+        String wechatSignature = request.getHeader("Wechatpay-Signature");
+        //楠岀鐨勬椂闂存埑
+        String wechatTimestamp = request.getHeader("Wechatpay-Timestamp");
+        //楠岀鐨勯殢鏈哄瓧绗︿覆
+        String wechatpayNonce = request.getHeader("Wechatpay-Nonce");
+        // 1. 鏋勯�� RequestParam
+        RequestParam requestParam = new RequestParam.Builder()
+                .serialNumber(wechatPaySerial)
+                .nonce(wechatpayNonce)
+                .signature(wechatSignature)
+                .timestamp(wechatTimestamp)
+                .body(requestBody)
+                .build();
+        // 2. 鏋勫缓Config RSAPublicKeyConfig
+        Config config = new RSAPublicKeyConfig.Builder()
+                        .merchantId(WxMiniConfig.wxProperties.getMchId()) //寰俊鏀粯鐨勫晢鎴峰彿
+                        .privateKeyFromPath(WxMiniConfig.wxProperties.getPrivateKeyPath()) // 鍟嗘埛API璇佷功绉侀挜鐨勫瓨鏀捐矾寰�
+                        .publicKeyFromPath(WxMiniConfig.wxProperties.getWechatPubKeyPath()) //寰俊鏀粯鍏挜鐨勫瓨鏀捐矾寰�
+                        .publicKeyId(WxMiniConfig.wxProperties.getWechatPayPublicKeyId()) //寰俊鏀粯鍏挜ID
+                        .merchantSerialNumber(WxMiniConfig.wxProperties.getSerialNumer()) //鍟嗘埛API璇佷功搴忓垪鍙�
+                        .apiV3Key("") //APIv3瀵嗛挜
+                        .build();
+        log.info("WxPayService.wxPaySuccessCallback request : wechatPaySerial is [{}]  , wechatSignature is [{}] , wechatTimestamp is [{}] , wechatpayNonce  is [{}] , requestBody is [{}]",wechatPaySerial,wechatSignature,wechatTimestamp,wechatpayNonce,requestBody);
+        // 3. 鍒濆鍖� NotificationParser
+        NotificationParser parser = new NotificationParser((NotificationConfig) config);
+        try {
+            TransferDetailEntityNew entity = parser.parse(requestParam, TransferDetailEntityNew.class);
+            log.info("WxPayService.wxPaySuccessCallback responseBody: {}", entity != null ? JSON.toJSONString(entity) : null);
+            return entity;
+        } catch (Exception e) {
+            log.error("Exception occurred while processing", e);
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"绯荤粺鍐呴儴閿欒");
+        }
+    }
+
+    /**
+     * 鑾峰彇post璇锋眰涓殑Body
+     *
+     * @param request httpRequest
+     * @return body瀛楃涓�
+     */
+    public static String getBodyString(HttpServletRequest request, String charSet) throws IOException {
+        StringBuilder sb = new StringBuilder();
+        InputStream inputStream = null;
+        BufferedReader reader = null;
+        try {
+            inputStream = request.getInputStream();
+            //璇诲彇娴佸苟灏嗘祦鍐欏嚭鍘�,閬垮厤鏁版嵁娴佷腑鏂�;
+            reader = new BufferedReader(new InputStreamReader(inputStream, charSet));
+            String line;
+            while ((line = reader.readLine()) != null) {
+                sb.append(line);
+            }
+        } catch (IOException e) {
+            log.error("鑾峰彇requestBody寮傚父", e);
+        } finally {
+            inputStream.close();
+            reader.close();
+        }
+        return sb.toString();
+    }
+
 }
diff --git a/server/pom.xml b/server/pom.xml
index 3ba17e0..51da524 100644
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -260,7 +260,7 @@
     <dependency>
       <groupId>com.github.wechatpay-apiv3</groupId>
       <artifactId>wechatpay-java</artifactId>
-      <version>0.2.12</version>
+      <version>0.2.15</version>
     </dependency>
 
 
diff --git a/server/services/src/main/java/com/doumee/config/wx/SendWxMessage.java b/server/services/src/main/java/com/doumee/config/wx/SendWxMessage.java
index 6dd2bf3..0d47a1b 100644
--- a/server/services/src/main/java/com/doumee/config/wx/SendWxMessage.java
+++ b/server/services/src/main/java/com/doumee/config/wx/SendWxMessage.java
@@ -4,6 +4,7 @@
 import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.core.constants.Constants;
 import com.doumee.core.utils.DateUtil;
+import com.doumee.dao.business.model.IdentityInfo;
 import lombok.extern.slf4j.Slf4j;
 import me.chanjar.weixin.common.error.WxErrorException;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -27,33 +28,32 @@
 
     private static String goodsOrderUrl = "pages/settlementDetails/settlementDetails?goodsOrderId=";
 
+    private static String identityInfoUrl = "pages/mine/mine";
     @Autowired
     private SystemDictDataBiz systemDictDataBiz;
 
-    public  void  bookingsCancel(String openid, String goodsOrderId, String accessToken, String bikeCode, Date startTime, Date endTime) throws WxErrorException {
+    public  void  identityInfoMessage(String openid, IdentityInfo identityInfo) throws WxErrorException {
         RestTemplate restTemplate = new RestTemplate();
-        log.info("寰俊灏忕▼搴�->寰俊娑堟伅閫氱煡  -> accessToken锛歿}",accessToken);
+        String accessToken = WxMiniConfig.wxMaService.getAccessToken();
+        log.info("寰俊灏忕▼搴�->寰俊娑堟伅閫氱煡 - 璁よ瘉淇℃伅  -> accessToken锛歿}",accessToken);
         //杩欓噷绠�鍗曡捣瑙佹垜浠瘡娆¢兘鑾峰彇鏈�鏂扮殑access_token锛堟椂闂村紑鍙戜腑锛屽簲璇ュ湪access_token蹇繃鏈熸椂鍐嶉噸鏂拌幏鍙栵級
-        String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+WxMiniConfig.wxMaService.getAccessToken();
+        String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+accessToken;
         //鎷兼帴鎺ㄩ�佺殑妯$増
-        WxMsgVO wxMsgVo = new WxMsgVO();
+        WxMsgVO wxMsgVO = new WxMsgVO();
         //鐢ㄦ埛鐨刼penid锛堣鍙戦�佺粰閭d釜鐢ㄦ埛锛�
-        wxMsgVo.setTouser(openid);
+        wxMsgVO.setTouser(openid);
         //璁㈤槄娑堟伅妯℃澘id
-//        wxMsgVo.setTemplate_id(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.TIME_OUT_TEMPID).getCode());
+        wxMsgVO.setTemplate_id("4H9ztG4E9BxJLwMuYSZ6oiM7yb4KX7u7bYhkhYJP0-Y");
         Map<String, TemplateData> m = new HashMap<>(4);
-        m.put("character_string1", new TemplateData(bikeCode));
-        //瑙i攣鏃堕棿
-        m.put("date3", new TemplateData(DateUtil.getFomartDate(startTime,"yyyy/MM/dd HH:mm")));
-        //涓婇攣鏃堕棿
-        m.put("date4", new TemplateData(DateUtil.getFomartDate(endTime,"yyyy/MM/dd HH:mm")));
-        //娓╅Θ鎻愰啋
-        m.put("thing5", new TemplateData("涓存椂閿佽溅宸茶秴杩囨渶澶ф椂闀匡紝宸茶嚜鍔ㄨ繕杞�"));
-        wxMsgVo.setPage(goodsOrderUrl + goodsOrderId);
-        wxMsgVo.setData(m);
+        m.put("thing11", new TemplateData(Constants.equalsInteger(identityInfo.getType(),Constants.ZERO)?"鐢ㄥ伐璁よ瘉":Constants.equalsInteger(identityInfo.getType(),Constants.ONE)?"杩愯揣璁よ瘉":"渚涢璁よ瘉"));
+        m.put("phrase4", new TemplateData(Constants.equalsInteger(identityInfo.getAuditStatus(),Constants.TWO)?"璁よ瘉閫氳繃":"璁よ瘉鏈�氳繃"));
+        m.put("date3", new TemplateData(DateUtil.getFomartDate(identityInfo.getAuditTime(),"yyyy-MM-dd HH:mm:ss")));
+        m.put("thing5", new TemplateData(identityInfo.getAuditRemark()));
+        wxMsgVO.setPage(identityInfoUrl);
+        wxMsgVO.setData(m);
         ResponseEntity<String> responseEntity =
-                restTemplate.postForEntity(url, wxMsgVo, String.class);
-        log.info("寰俊灏忕▼搴�->寰俊娑堟伅閫氱煡 涓存椂閿佽溅瓒呮椂锛歿}", JSONObject.toJSONString(responseEntity));
+                restTemplate.postForEntity(url, wxMsgVO, String.class);
+        log.info("寰俊灏忕▼搴�->寰俊娑堟伅閫氱煡 璁よ瘉淇℃伅锛歿}", JSONObject.toJSONString(responseEntity));
     }
 
 
diff --git a/server/services/src/main/java/com/doumee/config/wx/TransferDetailEntityNew.java b/server/services/src/main/java/com/doumee/config/wx/TransferDetailEntityNew.java
new file mode 100644
index 0000000..c40e6df
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/config/wx/TransferDetailEntityNew.java
@@ -0,0 +1,213 @@
+package com.doumee.config.wx;
+
+
+import com.google.gson.annotations.SerializedName;
+import com.wechat.pay.java.core.cipher.PrivacyDecryptor;
+import lombok.Data;
+
+import java.util.Objects;
+
+/**
+ * 鍟嗘埛鍗曞彿鏌ヨ杞处鍗曞疄浣撶被淇℃伅
+ *
+ * @author: suhai
+ * @date: 2025/05/13  11:28
+ */
+@Data
+public class TransferDetailEntityNew {
+    /** 鍟嗘埛鍙� Y 璇存槑锛氬井淇℃敮浠樺垎閰嶇殑鍟嗘埛鍙� */
+    @SerializedName("mch_id")
+    private String mchId;
+
+    /** 鍟嗘埛鍗曞彿 Y 璇存槑锛氬晢鎴风郴缁熷唴閮ㄧ殑鍟嗗鍗曞彿锛岃姹傛鍙傛暟鍙兘鐢辨暟瀛椼�佸ぇ灏忓啓瀛楁瘝缁勬垚锛屽湪鍟嗘埛绯荤粺鍐呴儴鍞竴 */
+    @SerializedName("out_bill_no")
+    private String outBillNo;
+
+    /** 鍟嗗杞处璁㈠崟鍙� Y 璇存槑锛氬晢瀹惰浆璐﹁鍗曠殑涓婚敭锛屽敮涓�瀹氫箟姝よ祫婧愮殑鏍囪瘑 */
+    @SerializedName("transfer_bill_no")
+    private String transferBillNo;
+
+    /** 鍟嗘埛appid Y 璇存槑锛氱敵璇峰晢鎴峰彿鐨刟ppid鎴栧晢鎴峰彿缁戝畾鐨刟ppid锛堜紒涓氬彿corpid鍗充负姝ppid锛� */
+    @SerializedName("appid")
+    private String appid;
+
+    /** 鍗曟嵁鐘舵�� Y 璇存槑锛氬崟鎹姸鎬�  */
+    @SerializedName("state")
+    private String state;
+
+    /** 杞处閲戦 Y 璇存槑锛氳浆璐﹂噾棰濆崟浣嶄负鈥滃垎鈥濄��*/
+    @SerializedName("transfer_amount")
+    private Integer transferAmount;
+
+    /** 杞处澶囨敞 Y 璇存槑锛氳浆璐﹀娉紝鐢ㄦ埛鏀舵鏃跺彲瑙佽澶囨敞淇℃伅锛孶TF8缂栫爜锛屾渶澶氬厑璁�32涓瓧绗︺��*/
+    @SerializedName("transfer_remark")
+    private String transferRemark;
+
+    /** 澶辫触鍘熷洜 N 璇存槑锛氳鍗曞凡澶辫触鎴栬�呭凡閫�璧勯噾鏃讹紝杩斿洖澶辫触鍘熷洜銆� */
+    @SerializedName("fail_reason")
+    private String failReason;
+
+    /** 鏀舵鐢ㄦ埛OpenID Y 璇存槑锛氬晢鎴稟ppID涓嬶紝鏌愮敤鎴风殑OpenID  */
+    @SerializedName("openid")
+    private String openid;
+
+    /** 鏀舵鐢ㄦ埛濮撳悕 N 璇存槑锛氭敹娆炬柟鐪熷疄濮撳悕銆傞渶瑕佸姞瀵嗕紶鍏ワ紝鏀寔鏍囧噯RSA绠楁硶鍜屽浗瀵嗙畻娉曪紝鍏挜鐢卞井淇′晶鎻愪緵銆�
+     杞处閲戦 >= 2,000鍏冩椂锛岃绗旀槑缁嗗繀椤诲~鍐�
+     鑻ュ晢鎴蜂紶鍏ユ敹娆剧敤鎴峰鍚嶏紝寰俊鏀粯浼氭牎楠屾敹娆剧敤鎴蜂笌杈撳叆濮撳悕鏄惁涓�鑷达紝骞舵彁渚涚數瀛愬洖鍗� */
+    @SerializedName("user_name")
+    private String userName;
+
+    /** 鍗曟嵁鍒涘缓鏃堕棿 N 璇存槑锛氬崟鎹彈鐞嗘垚鍔熸椂杩斿洖锛屾寜鐓т娇鐢╮fc3339鎵�瀹氫箟鐨勬牸寮忥紝鏍煎紡涓簓yyy-MM-DDThh:mm:ss+TIMEZONE */
+    @SerializedName("create_time")
+    private String createTime;
+
+    /** 鏈�鍚庝竴娆$姸鎬佸彉鏇存椂闂� N 璇存槑锛氬崟鎹渶鍚庢洿鏂版椂闂达紝鎸夌収浣跨敤rfc3339鎵�瀹氫箟鐨勬牸寮忥紝鏍煎紡涓簓yyy-MM-DDThh:mm:ss+TIMEZONE */
+    @SerializedName("update_time")
+    private String updateTime;
+
+    public String getMchId() {
+        return mchId;
+    }
+
+    public void setMchId(String mchId) {
+        this.mchId = mchId;
+    }
+
+    public String getOutBillNo() {
+        return outBillNo;
+    }
+
+    public void setOutBillNo(String outBillNo) {
+        this.outBillNo = outBillNo;
+    }
+
+    public String getTransferBillNo() {
+        return transferBillNo;
+    }
+
+    public void setTransferBillNo(String transferBillNo) {
+        this.transferBillNo = transferBillNo;
+    }
+
+    public String getAppid() {
+        return appid;
+    }
+
+    public void setAppid(String appid) {
+        this.appid = appid;
+    }
+
+    public String getState() {
+        return state;
+    }
+
+    public void setState(String state) {
+        this.state = state;
+    }
+
+    public Integer getTransferAmount() {
+        return transferAmount;
+    }
+
+    public void setTransferAmount(Integer transferAmount) {
+        this.transferAmount = transferAmount;
+    }
+
+    public String getTransferRemark() {
+        return transferRemark;
+    }
+
+    public void setTransferRemark(String transferRemark) {
+        this.transferRemark = transferRemark;
+    }
+
+    public String getFailReason() {
+        return failReason;
+    }
+
+    public void setFailReason(String failReason) {
+        this.failReason = failReason;
+    }
+
+    public String getOpenid() {
+        return openid;
+    }
+
+    public void setOpenid(String openid) {
+        this.openid = openid;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(String createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(String updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (o == null || getClass() != o.getClass()) return false;
+        TransferDetailEntityNew that = (TransferDetailEntityNew) o;
+        return Objects.equals(mchId, that.mchId) && Objects.equals(outBillNo, that.outBillNo) && Objects.equals(transferBillNo, that.transferBillNo) && Objects.equals(appid, that.appid) && Objects.equals(state, that.state) && Objects.equals(transferAmount, that.transferAmount) && Objects.equals(transferRemark, that.transferRemark) && Objects.equals(failReason, that.failReason) && Objects.equals(openid, that.openid) && Objects.equals(userName, that.userName) && Objects.equals(createTime, that.createTime) && Objects.equals(updateTime, that.updateTime);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(mchId, outBillNo, transferBillNo, appid, state, transferAmount, transferRemark, failReason, openid, userName, createTime, updateTime);
+    }
+
+    @Override
+    public String toString() {
+        return "TransferDetailEntityNew{" +
+                "mchId='" + mchId + '\'' +
+                ", outBillNo='" + outBillNo + '\'' +
+                ", transferBillNo='" + transferBillNo + '\'' +
+                ", appid='" + appid + '\'' +
+                ", state='" + state + '\'' +
+                ", transferAmount=" + transferAmount +
+                ", transferRemark='" + transferRemark + '\'' +
+                ", failReason='" + failReason + '\'' +
+                ", openid='" + openid + '\'' +
+                ", userName='" + userName + '\'' +
+                ", createTime='" + createTime + '\'' +
+                ", updateTime='" + updateTime + '\'' +
+                '}';
+    }
+
+    public TransferDetailEntityNew cloneWithCipher(PrivacyDecryptor encryptor) {
+        TransferDetailEntityNew copy = new TransferDetailEntityNew();
+        copy.mchId = mchId;
+        copy.outBillNo = outBillNo;
+        copy.transferBillNo = transferBillNo;
+        copy.appid = appid;
+        copy.state = state;
+        copy.transferAmount = transferAmount;
+        copy.transferRemark = transferRemark;
+        copy.failReason = failReason;
+        copy.openid = openid;
+        if (userName != null && !userName.isEmpty()) {
+            copy.userName = encryptor.decrypt(userName);
+        }
+        copy.createTime = createTime;
+        copy.updateTime = updateTime;
+        return copy;
+    }
+}
+
diff --git a/server/services/src/main/java/com/doumee/config/wx/TransferToUser.java b/server/services/src/main/java/com/doumee/config/wx/TransferToUser.java
index af0b96e..15895e4 100644
--- a/server/services/src/main/java/com/doumee/config/wx/TransferToUser.java
+++ b/server/services/src/main/java/com/doumee/config/wx/TransferToUser.java
@@ -29,12 +29,20 @@
 
     public static void main(String[] args) {
         // TODO: 璇峰噯澶囧晢鎴峰紑鍙戝繀瑕佸弬鏁帮紝鍙傝�冿細https://pay.weixin.qq.com/doc/v3/merchant/4013070756
+//        TransferToUser client = new TransferToUser(
+//                "1229817002",                    // 鍟嗘埛鍙凤紝鏄敱寰俊鏀粯绯荤粺鐢熸垚骞跺垎閰嶇粰姣忎釜鍟嗘埛鐨勫敮涓�鏍囪瘑绗︼紝鍟嗘埛鍙疯幏鍙栨柟寮忓弬鑰� https://pay.weixin.qq.com/doc/v3/merchant/4013070756
+//                "3FE90C2F3D40A56E1C51926F31B8A8D22426CCE0",         // 鍟嗘埛API璇佷功搴忓垪鍙凤紝濡備綍鑾峰彇璇峰弬鑰� https://pay.weixin.qq.com/doc/v3/merchant/4013053053
+//                "d://wechatApiclient_key.pem",    // 鍟嗘埛API璇佷功绉侀挜鏂囦欢璺緞锛屾湰鍦版枃浠惰矾寰�
+//                "PUB_KEY_ID_0112298170022025071700291836000600",      // 寰俊鏀粯鍏挜ID锛屽浣曡幏鍙栬鍙傝�� https://pay.weixin.qq.com/doc/v3/merchant/4013038816
+//                "d://pub_key.pem"          // 寰俊鏀粯鍏挜鏂囦欢璺緞锛屾湰鍦版枃浠惰矾寰�
+//        );
+
         TransferToUser client = new TransferToUser(
-                "1229817002",                    // 鍟嗘埛鍙凤紝鏄敱寰俊鏀粯绯荤粺鐢熸垚骞跺垎閰嶇粰姣忎釜鍟嗘埛鐨勫敮涓�鏍囪瘑绗︼紝鍟嗘埛鍙疯幏鍙栨柟寮忓弬鑰� https://pay.weixin.qq.com/doc/v3/merchant/4013070756
-                "3FE90C2F3D40A56E1C51926F31B8A8D22426CCE0",         // 鍟嗘埛API璇佷功搴忓垪鍙凤紝濡備綍鑾峰彇璇峰弬鑰� https://pay.weixin.qq.com/doc/v3/merchant/4013053053
+                "1661772003",                    // 鍟嗘埛鍙凤紝鏄敱寰俊鏀粯绯荤粺鐢熸垚骞跺垎閰嶇粰姣忎釜鍟嗘埛鐨勫敮涓�鏍囪瘑绗︼紝鍟嗘埛鍙疯幏鍙栨柟寮忓弬鑰� https://pay.weixin.qq.com/doc/v3/merchant/4013070756
+                "3C9A32FB6CD453FAAAF97F9737ECAEA9D6625727",         // 鍟嗘埛API璇佷功搴忓垪鍙凤紝濡備綍鑾峰彇璇峰弬鑰� https://pay.weixin.qq.com/doc/v3/merchant/4013053053
                 "d://wechatApiclient_key.pem",    // 鍟嗘埛API璇佷功绉侀挜鏂囦欢璺緞锛屾湰鍦版枃浠惰矾寰�
-                "PUB_KEY_ID_0112298170022025071700291836000600",      // 寰俊鏀粯鍏挜ID锛屽浣曡幏鍙栬鍙傝�� https://pay.weixin.qq.com/doc/v3/merchant/4013038816
-                "d://pub_key.pem"          // 寰俊鏀粯鍏挜鏂囦欢璺緞锛屾湰鍦版枃浠惰矾寰�
+                "47E172124E73E8098A565E971064C20ACDE7C911",      // 寰俊鏀粯鍏挜ID锛屽浣曡幏鍙栬鍙傝�� https://pay.weixin.qq.com/doc/v3/merchant/4013038816
+                "d://wechatpay_47E172124E73E8098A565E971064C20ACDE7C911.pem"          // 寰俊鏀粯鍏挜鏂囦欢璺緞锛屾湰鍦版枃浠惰矾寰�
         );
 
         TransferToUserRequest request = new TransferToUserRequest();
@@ -42,10 +50,10 @@
         request.outBillNo = "plfk2020042016";
         request.transferSceneId = "1005";
         request.openid = "oKKHU5IFKpss_DIbFX1lqghFJOEg";
-        request.userName = client.encrypt("鏂芥棴杈�");
-        request.transferAmount = 91L;
+//        request.userName = client.encrypt("鏂芥棴杈�");
+        request.transferAmount = 10L;
         request.transferRemark = "~~~";
-        request.notifyUrl = "https://www.weixin.qq.com/wxpay/pay.php";
+//        request.notifyUrl = "https://www.weixin.qq.com/wxpay/pay.php";
         request.userRecvPerception = "鍔冲姟鎶ラ叕";
         request.transferSceneReportInfos = new ArrayList<>();
         {
@@ -118,6 +126,7 @@
     public TransferToUserResponse run(TransferToUserRequest request,String name) {
         String uri = PATH;
         request.appid = WxMiniConfig.wxProperties.getSubAppId();
+//        request.notifyUrl = WxMiniConfig.wxProperties.getWechatNotifyUrl();
         request.transferSceneId = "1005";
         request.userRecvPerception = "鍔冲姟鎶ラ叕";
         if(request.transferAmount >= 30){
@@ -140,7 +149,7 @@
         Request.Builder reqBuilder = new Request.Builder().url(HOST + uri);
         reqBuilder.addHeader("Accept", "application/json");
         reqBuilder.addHeader("Wechatpay-Serial", WxMiniConfig.wxProperties.getWechatPayPublicKeyId());
-        reqBuilder.addHeader("Authorization", WXPayUtility.buildAuthorization(WxMiniConfig.wxProperties.getMchId(),
+        reqBuilder.addHeader("Authorization", WXPayUtility.buildAuthorization(WxMiniConfig.wxProperties.getSubMchId(),
                 WxMiniConfig.wxProperties.getWechatSerialNumer(),
                 WXPayUtility.loadPrivateKeyFromPath(WxMiniConfig.wxProperties.getWechatPrivateKeyPath()),
                 METHOD, uri, reqBody));
@@ -178,7 +187,7 @@
         Request.Builder reqBuilder = new Request.Builder().url(HOST + uri);
         reqBuilder.addHeader("Accept", "application/json");
         reqBuilder.addHeader("Wechatpay-Serial", wechatPayPublicKeyId);
-        reqBuilder.addHeader("Authorization", WXPayUtility.buildAuthorization(WxMiniConfig.wxProperties.getMchId(),
+        reqBuilder.addHeader("Authorization", WXPayUtility.buildAuthorization(WxMiniConfig.wxProperties.getSubMchId(),
                 WxMiniConfig.wxProperties.getWechatSerialNumer(),
                 WXPayUtility.loadPrivateKeyFromPath(WxMiniConfig.wxProperties.getWechatPrivateKeyPath()),
                 METHOD, uri, null));
diff --git a/server/services/src/main/java/com/doumee/config/wx/WxMiniConfig.java b/server/services/src/main/java/com/doumee/config/wx/WxMiniConfig.java
index e0b82bb..08bf046 100644
--- a/server/services/src/main/java/com/doumee/config/wx/WxMiniConfig.java
+++ b/server/services/src/main/java/com/doumee/config/wx/WxMiniConfig.java
@@ -139,13 +139,20 @@
     public void load_transferToUser()
     {
         TransferToUser transferToUser = new TransferToUser(
-                StringUtils.trimToNull(wxPayProperties.getMchId()), //鍟嗘埛id
+                StringUtils.trimToNull(wxPayProperties.getSubMchId()), //鍟嗘埛id
                 StringUtils.trimToNull(wxPayProperties.getWechatSerialNumer()), //鍟嗘埛API璇佷功搴忓垪鍙凤紝濡備綍鑾峰彇璇峰弬鑰� https://pay.weixin.qq.com/doc/v3/merchant/4013053053
                 StringUtils.trimToNull(wxPayProperties.getWechatPrivateKeyPath()), // 鍟嗘埛API璇佷功绉侀挜鏂囦欢璺緞锛屾湰鍦版枃浠惰矾寰�
                 StringUtils.trimToNull(wxPayProperties.getWechatPayPublicKeyId()),   // 寰俊鏀粯鍏挜ID锛屽浣曡幏鍙栬鍙傝�� https://pay.weixin.qq.com/doc/v3/merchant/4013038816
                 StringUtils.trimToNull(wxPayProperties.getWechatPubKeyPath()) // 寰俊鏀粯鍏挜鏂囦欢璺緞锛屾湰鍦版枃浠惰矾寰�
         );
 
+//        TransferToUser client = new TransferToUser(
+//                "1229817002",                    // 鍟嗘埛鍙凤紝鏄敱寰俊鏀粯绯荤粺鐢熸垚骞跺垎閰嶇粰姣忎釜鍟嗘埛鐨勫敮涓�鏍囪瘑绗︼紝鍟嗘埛鍙疯幏鍙栨柟寮忓弬鑰� https://pay.weixin.qq.com/doc/v3/merchant/4013070756
+//                "3FE90C2F3D40A56E1C51926F31B8A8D22426CCE0",         // 鍟嗘埛API璇佷功搴忓垪鍙凤紝濡備綍鑾峰彇璇峰弬鑰� https://pay.weixin.qq.com/doc/v3/merchant/4013053053
+//                "d://wechatApiclient_key.pem",    // 鍟嗘埛API璇佷功绉侀挜鏂囦欢璺緞锛屾湰鍦版枃浠惰矾寰�
+//                "PUB_KEY_ID_0112298170022025071700291836000600",      // 寰俊鏀粯鍏挜ID锛屽浣曡幏鍙栬鍙傝�� https://pay.weixin.qq.com/doc/v3/merchant/4013038816
+//                "d://pub_key.pem"          // 寰俊鏀粯鍏挜鏂囦欢璺緞锛屾湰鍦版枃浠惰矾寰�
+//        );
         this.transferToUser = transferToUser;
     }
 
diff --git a/server/services/src/main/java/com/doumee/config/wx/WxPayProperties.java b/server/services/src/main/java/com/doumee/config/wx/WxPayProperties.java
index b9d5af5..08ba1cb 100644
--- a/server/services/src/main/java/com/doumee/config/wx/WxPayProperties.java
+++ b/server/services/src/main/java/com/doumee/config/wx/WxPayProperties.java
@@ -68,5 +68,9 @@
     private String wechatPayPublicKeyId; // 寰俊鏀粯鍏挜ID
     private String wechatPubKeyPath; //寰俊鏀粯鍏挜鏂囦欢璺緞
     private String wechatPrivateKeyPath;
+    private String wechatNotifyUrl;
+//    private String wechatApiV3Key;
+//    private String wechatPlatformPubKeyPath;
+
 
 }
diff --git a/server/services/src/main/java/com/doumee/core/constants/Constants.java b/server/services/src/main/java/com/doumee/core/constants/Constants.java
index 7e8743b..c2f64ee 100644
--- a/server/services/src/main/java/com/doumee/core/constants/Constants.java
+++ b/server/services/src/main/java/com/doumee/core/constants/Constants.java
@@ -359,9 +359,9 @@
     @Getter
     public enum RevenueType {
 
-        YGD_INCOME(  0, "鐢ㄥ伐鍗曟敹鍏�","鐢ㄥ伐鍗曟敹鍏�" ,0),
-        HYD_INCOME(  1, "璐ц繍鍗曟敹鍏�","璐ц繍鍗曟敹鍏�" ,0),
-        GCD_INCOME(2, "渚涢鍗曟敹鍏�","渚涢鍗曟敹鍏�" ,0),
+        YGD_INCOME(  0, "鐢ㄥ伐鍗曟敹鍏�","鐢ㄥ伐鍗�" ,0),
+        HYD_INCOME(  1, "璐ц繍鍗曟敹鍏�","璐ц繍鍗�" ,0),
+        GCD_INCOME(2, "渚涢鍗曟敹鍏�","渚涢鍗�" ,0),
         WITHDRAW_APPLY(3, "鎻愮幇鐢宠","鎻愮幇鐢宠" ,0),
         REFUND(  4, "鎻愮幇鐢宠閫�鍥�","鎻愮幇鐢宠閫�鍥�" ,0)
         ;
@@ -385,6 +385,22 @@
             }
             return null;
         }
+        public static String getName(int index) {
+            for (RevenueType c : RevenueType.values()) {
+                if (c.getKey() == index) {
+                    return c.getName();
+                }
+            }
+            return null;
+        }
+        public static String getInfo(int index) {
+            for (RevenueType c : RevenueType.values()) {
+                if (c.getKey() == index) {
+                    return c.getInfo();
+                }
+            }
+            return null;
+        }
         public static String getObjName(int index) {
             for (RevenueType c : RevenueType.values()) {
                 if (c.getKey() == index) {
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/IdentityInfo.java b/server/services/src/main/java/com/doumee/dao/business/model/IdentityInfo.java
index 82fda4b..9e29c9d 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/IdentityInfo.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/IdentityInfo.java
@@ -116,9 +116,7 @@
     @ExcelColumn(name="璁よ瘉瀹℃壒澶囨敞")
     private String auditRemark;
 
-    @ApiModelProperty(value = "鍥剧墖鍓嶇紑")
-    @TableField(exist = false)
-    private String prefix;
+
     @ApiModelProperty(value = "瀹℃牳浜哄鍚�")
     @TableField(exist = false)
     private String editorName;
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/Orders.java b/server/services/src/main/java/com/doumee/dao/business/model/Orders.java
index a3f0a7b..cd3435a 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/Orders.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/Orders.java
@@ -220,6 +220,9 @@
     @ApiModelProperty(value = "杞﹁締瑙勬牸", example = "1")
     private String carUnit;
 
+    @ApiModelProperty(value = "涓夋柟鏀粯璁㈠崟鍙�", example = "1")
+    private String outTradeNo;
+
     @ApiModelProperty(value = "鍥剧墖")
     @TableField(exist = false)
     private List<Multifile> multifileList;
@@ -242,7 +245,7 @@
     @TableField(exist = false)
     private List<CateringDTO> cateringDTOList;
 
-    @ApiModelProperty(value = "绉诲姩绔敤鎴�", hidden = true)
+    @ApiModelProperty(value = "绉诲姩绔敤鎴�")
     @TableField(exist = false)
     private Member member;
 
@@ -329,5 +332,38 @@
     @TableField(exist = false)
     private Date doneTimeEnd;
 
+    @ApiModelProperty(value = "鎺掑簭鏂瑰紡锛�0=鏈�鏂板彂甯�;1=璺濈浼樺厛;2=浠锋牸鍊掑簭", example = "1")
+    @TableField(exist = false)
+    private Integer sortType;
+
+    @ApiModelProperty(value = "鎺ュ崟鏂硅瘎鍒�")
+    @TableField(exist = false)
+    private double score;
+
+    @ApiModelProperty(value = "鎺ュ崟閲�")
+    @TableField(exist = false)
+    private Long receiveNum;
+
+    @ApiModelProperty(value = "鍙戝崟閲�")
+    @TableField(exist = false)
+    private Long publishNum;
+
+    @ApiModelProperty(value = "鍙戝崟鏂瑰ご鍍�")
+    @TableField(exist = false)
+    private String releaseCoverImage;
+
+    @ApiModelProperty(value = "鎺ュ崟鏂瑰ご鍍�")
+    @TableField(exist = false)
+    private String acceptCoverImage;
+
+    @ApiModelProperty(value = "缁忓害", example = "1")
+    @TableField(exist = false)
+    private BigDecimal queryLat;
+
+    @ApiModelProperty(value = "绾害", example = "1")
+    @TableField(exist = false)
+    private BigDecimal queryLgt;
+
+
 }
 
diff --git a/server/services/src/main/java/com/doumee/dao/dto/ReusePayDTO.java b/server/services/src/main/java/com/doumee/dao/dto/ReusePayDTO.java
new file mode 100644
index 0000000..7c35ffb
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/ReusePayDTO.java
@@ -0,0 +1,27 @@
+package com.doumee.dao.dto;
+
+import com.doumee.dao.business.model.Member;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/3/23 9:50
+ */
+@Data
+@ApiModel("閲嶆柊鏀粯")
+public class ReusePayDTO {
+
+    @ApiModelProperty(value = "璁㈠崟涓婚敭")
+    private Integer orderId;
+
+    @ApiModelProperty(value = "鏀粯閲戦 鍗曚綅锛氬垎")
+    private Long amount;
+
+    @ApiModelProperty(hidden = true)
+    private Member member;
+
+}
diff --git a/server/services/src/main/java/com/doumee/service/business/OrdersService.java b/server/services/src/main/java/com/doumee/service/business/OrdersService.java
index 283b40f..0da39ec 100644
--- a/server/services/src/main/java/com/doumee/service/business/OrdersService.java
+++ b/server/services/src/main/java/com/doumee/service/business/OrdersService.java
@@ -5,10 +5,7 @@
 import com.doumee.core.model.PageWrap;
 import com.doumee.dao.business.model.Member;
 import com.doumee.dao.business.model.Orders;
-import com.doumee.dao.dto.CommentDTO;
-import com.doumee.dao.dto.ConfirmUpdOrderDTO;
-import com.doumee.dao.dto.DoneOrderDTO;
-import com.doumee.dao.dto.UpdOrderDataDTO;
+import com.doumee.dao.dto.*;
 import com.doumee.dao.vo.OrderReleaseVO;
 import com.wechat.pay.java.service.refund.model.RefundNotification;
 
@@ -116,7 +113,7 @@
 
     void receiveCancelOrder(Integer orderId,Member member);
 
-    Object doneOrder(DoneOrderDTO doneOrderDTO);
+    OrderReleaseVO doneOrder(DoneOrderDTO doneOrderDTO);
 
     void comment(CommentDTO commentDTO);
 
@@ -144,4 +141,6 @@
     void autoGrabOrders();
 
     void initializeCode();
+
+    OrderReleaseVO reusePay(ReusePayDTO reusePayDTO);
 }
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/IdentityInfoServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/IdentityInfoServiceImpl.java
index 34ae3da..fb5d5b4 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/IdentityInfoServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/IdentityInfoServiceImpl.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.config.wx.SendWxMessage;
 import com.doumee.core.annotation.excel.ExcelColumn;
 import com.doumee.core.constants.Constants;
 import com.doumee.core.constants.ResponseStatus;
@@ -23,6 +24,7 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import io.swagger.annotations.ApiModelProperty;
+import me.chanjar.weixin.common.error.WxErrorException;
 import nonapi.io.github.classgraph.json.Id;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.SecurityUtils;
@@ -55,9 +57,9 @@
     @Transactional(rollbackFor = {BusinessException.class,Exception.class})
     public Integer create(IdentityInfo identityInfo) {
         if(Objects.isNull(identityInfo)
-        || Objects.isNull(identityInfo.getType())
-        || Objects.isNull(identityInfo.getMemberId())
-        || Objects.isNull(identityInfo.getAuthType())
+            || Objects.isNull(identityInfo.getType())
+            || Objects.isNull(identityInfo.getMemberId())
+            || Objects.isNull(identityInfo.getAuthType())
                 || StringUtils.isEmpty(identityInfo.getLinkName())
                 || StringUtils.isEmpty(identityInfo.getTelephone())
                 || StringUtils.isEmpty(identityInfo.getLocation())
@@ -71,23 +73,28 @@
         ){
             throw new BusinessException(ResponseStatus.BAD_REQUEST);
         }
-        //鏌ヨ鐢ㄦ埛鏄惁宸插瓨鍦ㄥ綋鍓嶈韩浠�
-        if(identityInfoMapper.selectCount(new QueryWrapper<IdentityInfo>().lambda().eq(IdentityInfo::getDeleted,Constants.ZERO).eq(IdentityInfo::getMemberId,identityInfo.getMemberId())
-                .eq(IdentityInfo::getType,identityInfo.getType()))>Constants.ZERO){
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"宸插瓨鍦ㄨ韬唤璇峰埛鏂版煡鐪嬶紒");
-        };
-        identityInfo.setDeleted(Constants.ZERO);
-        identityInfo.setCreateTime(new Date());
-        identityInfo.setUpdateTime(identityInfo.getCreateTime());
-        identityInfo.setAuditStatus(Constants.ONE);
-        identityInfoMapper.insert(identityInfo);
+        if(Objects.nonNull(identityInfo.getId())){
+            this.updateById(identityInfo);
+        }else{
+            //鏌ヨ鐢ㄦ埛鏄惁宸插瓨鍦ㄥ綋鍓嶈韩浠�
+            if(identityInfoMapper.selectCount(new QueryWrapper<IdentityInfo>().lambda()
+                    .eq(IdentityInfo::getDeleted,Constants.ZERO)
+                    .eq(IdentityInfo::getMemberId,identityInfo.getMemberId())
+                    .eq(IdentityInfo::getType,identityInfo.getType()))>Constants.ZERO){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"宸插瓨鍦ㄨ韬唤璇峰埛鏂版煡鐪嬶紒");
+            };
+            identityInfo.setDeleted(Constants.ZERO);
+            identityInfo.setCreateTime(new Date());
+            identityInfo.setUpdateTime(identityInfo.getCreateTime());
+            identityInfo.setAuditStatus(Constants.ONE);
+            identityInfoMapper.insert(identityInfo);
 
-        memberMapper.update(new UpdateWrapper<Member>().lambda()
-                .set(Constants.equalsInteger(identityInfo.getType(),Constants.ZERO),Member::getWorkerIdentity,Constants.ONE)
-                .set(Constants.equalsInteger(identityInfo.getType(),Constants.ONE),Member::getDriverIdentity,Constants.ONE)
-                .set(Constants.equalsInteger(identityInfo.getType(),Constants.TWO),Member::getChefIdentity,Constants.ONE)
-                .eq(Member::getId,identityInfo.getMemberId()));
-
+            memberMapper.update(new UpdateWrapper<Member>().lambda()
+                    .set(Constants.equalsInteger(identityInfo.getType(),Constants.ZERO),Member::getWorkerIdentity,Constants.ONE)
+                    .set(Constants.equalsInteger(identityInfo.getType(),Constants.ONE),Member::getDriverIdentity,Constants.ONE)
+                    .set(Constants.equalsInteger(identityInfo.getType(),Constants.TWO),Member::getChefIdentity,Constants.ONE)
+                    .eq(Member::getId,identityInfo.getMemberId()));
+        }
         return identityInfo.getId();
     }
 
@@ -193,24 +200,50 @@
 
     @Override
     public IdentityInfo findById(Integer id) {
-        IdentityInfo identityInfo = identityInfoMapper.selectById(id);
-        //缂哄け鍓嶇紑
-        identityInfo.setPrefix("");
-        return identityInfo;
+        IdentityInfo model = identityInfoMapper.selectById(id);
+        String path  = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RESOURCE_PATH).getCode()
+                +systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.INENTITY_FILES).getCode();
+        model.setImgList(new ArrayList<>());
+        if(StringUtils.isNotBlank(model.getImg1())){
+            model.getImgList().add(path + model.getImg1());
+        }
+        if(StringUtils.isNotBlank(model.getImg2())){
+            model.getImgList().add(path + model.getImg2());
+        }
+        if(StringUtils.isNotBlank(model.getImg3())) {
+            model.getImgList().add(path + model.getImg3());
+        }
+        if(StringUtils.isNotBlank(model.getImg4())){
+            model.getImgList().add(path + model.getImg4());
+        }
+        return model;
     }
 
 
     @Override
     public IdentityInfo findByMemberType(Integer type,Integer memberId){
-        IdentityInfo identityInfo = identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda()
+        IdentityInfo model = identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda()
                 .eq(IdentityInfo::getMemberId,memberId).eq(IdentityInfo::getType,type));
-        if(Objects.nonNull(identityInfo)){
-            //缂哄け鍓嶇紑
-            identityInfo.setPrefix("");
+        if(Objects.nonNull(model)){
+            String path  = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RESOURCE_PATH).getCode()
+                    +systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.INENTITY_FILES).getCode();
+            model.setImgList(new ArrayList<>());
+            if(StringUtils.isNotBlank(model.getImg1())){
+                model.getImgList().add(path + model.getImg1());
+            }
+            if(StringUtils.isNotBlank(model.getImg2())){
+                model.getImgList().add(path + model.getImg2());
+            }
+            if(StringUtils.isNotBlank(model.getImg3())) {
+                model.getImgList().add(path + model.getImg3());
+            }
+            if(StringUtils.isNotBlank(model.getImg4())){
+                model.getImgList().add(path + model.getImg4());
+            }
         }else{
-            identityInfo = new IdentityInfo();
+            model = new IdentityInfo();
         }
-        return identityInfo;
+        return model;
     }
 
 
@@ -385,6 +418,9 @@
     }
 
 
+    @Autowired
+    private SendWxMessage sendWxMessage;
+
     @Override
     @Transactional(rollbackFor = {BusinessException.class,Exception.class})
     public void audit(AuditDTO auditDTO){
@@ -403,6 +439,13 @@
         if(!Constants.equalsInteger(identityInfo.getAuditStatus(),Constants.ONE)){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"宸插鎵癸紝璇峰嬁閲嶅鎿嶄綔");
         }
+        Member member = memberMapper.selectById(identityInfo.getMemberId());
+        if(Objects.isNull(member)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        identityInfo.setAuditStatus(auditDTO.getAuditStatus());
+        identityInfo.setAuditRemark(auditDTO.getAuditRemark());
+        identityInfo.setAuditTime(new Date());
         Date date = new Date();
         identityInfoMapper.update(new UpdateWrapper<IdentityInfo>().lambda()
                 .set(IdentityInfo::getAuditStatus, auditDTO.getAuditStatus() )
@@ -422,5 +465,16 @@
                 .eq(Member::getId,identityInfo.getMemberId())
         );
 
+        try{
+            //鍙戦�佸井淇¢�氱煡
+            if(StringUtils.isNotBlank(member.getOpenid())){
+                sendWxMessage.identityInfoMessage(member.getOpenid(),identityInfo);
+            }
+        }catch (WxErrorException wxErrorException){
+
+        }
+
+
+
     }
 }
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java
index a640402..dc8af9f 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java
@@ -82,6 +82,9 @@
     private WithdrawalOrdersMapper withdrawalOrdersMapper;
 
     @Autowired
+    private ReceiveWeightMapper receiveWeightMapper;
+
+    @Autowired
     private WxMiniUtilService wxMiniUtilService;
 
     @Resource
@@ -117,6 +120,7 @@
         //鐢ㄩ璁㈠崟
         if(Constants.equalsInteger(orders.getType(),Constants.TWO)){
             orders.setStatus(Constants.ordersStatus.waitPay.getKey());
+            orders.setOutTradeNo(UUID.randomUUID().toString().replace("-",""));
             //鍞よ捣鏀粯涓氬姟
             objects = this.getWxPayResponse(orders,orders.getMember().getOpenid());
             orderReleaseVO.setObject(objects);
@@ -175,10 +179,10 @@
         Payer payer = new Payer();
         payer.setSubOpenid(openid);
         request.setPayer(payer);
-        request.setOutTradeNo(orders.getCode());
+        request.setOutTradeNo(orders.getOutTradeNo());
         request.setNotifyUrl(WxMiniConfig.wxProperties.getNotifyUrl());//杩欎釜鍥炶皟url蹇呴』鏄痟ttps寮�澶寸殑
         Amount amount = new Amount();
-        amount.setTotal(orders.getEstimatedAccount().intValue());
+        amount.setTotal(1);//orders.getEstimatedAccount().intValue());
         request.setAmount(amount);
 //        PrepayResponse res = WxMiniConfig.wxPayService.prepay(request);
         // 璺熶箣鍓嶄笅鍗曠ず渚嬩竴鏍凤紝濉厖棰勪笅鍗曞弬鏁�
@@ -219,11 +223,10 @@
                 || Objects.isNull(orders.getStartDate())
                 || Objects.isNull(orders.getEndDate())
                 || StringUtil.isBlank(orders.getLocation())
-                || (!Constants.equalsInteger(Constants.ONE,orders.getType())&&StringUtil.isBlank(orders.getLocationRemark()))
                 || StringUtil.isBlank(orders.getLinkPhone())
                 || Objects.isNull(orders.getLat())
                 || Objects.isNull(orders.getLgt())
-                || Objects.isNull(orders.getCategoryId())
+                || (!Constants.equalsInteger(orders.getType(),Constants.TWO) && Objects.isNull(orders.getCategoryId()))
                 || (Constants.equalsInteger(orders.getType(),Constants.ZERO) && Objects.isNull(orders.getWorkType()))
                 || Objects.isNull(orders.getPriceNum1())
                 || Objects.isNull(orders.getEstimatedAccount())
@@ -401,28 +404,8 @@
             throw new BusinessException(ResponseStatus.DATA_EMPTY);
         }
         orders.setStatusName(Constants.ordersStatus.getName(orders.getStatus()));
+        this.getPriceUnit(orders);
 
-        if(Constants.equalsInteger(orders.getType(),Constants.ZERO)){
-            if(Constants.equalsInteger(orders.getWorkType(),Constants.ZERO)){
-                orders.setPriceUnit("鍏�/鏂�");
-            }else if(Constants.equalsInteger(orders.getWorkType(),Constants.ONE)){
-                orders.setPriceUnit("鍏�/浜�/澶�");
-            }else{
-                if(Constants.equalsInteger(orders.getCarType(),Constants.ZERO)){
-                    orders.setPriceUnit("鍏�/浜�/澶�");
-                }else if(Constants.equalsInteger(orders.getCarType(),Constants.ONE)){
-                    orders.setPriceUnit("鍏�/浜�/灏忔椂");
-                }else{
-                    orders.setPriceUnit("鍏�/鏂�");
-                }
-            }
-        }else if(Constants.equalsInteger(orders.getType(),Constants.ONE)){
-            if(Constants.equalsInteger(orders.getCarType(),Constants.ZERO)){
-                orders.setPriceUnit("鍏�/澶�");
-            }else if(Constants.equalsInteger(orders.getCarType(),Constants.ONE)){
-                orders.setPriceUnit("鍏�/娆�");
-            }
-        }
         //闄勪欢淇℃伅
         List<Multifile> multifileList = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda().eq(Multifile::getObjId,orders.getId())
                 .eq(Multifile::getIsdeleted,Constants.ZERO).eq(Multifile::getObjType,Constants.ONE).orderByAsc(Multifile::getId));
@@ -453,6 +436,29 @@
         return orders;
     }
 
+    public void getPriceUnit(Orders orders){
+        if(Constants.equalsInteger(orders.getType(),Constants.ZERO)){
+            if(Constants.equalsInteger(orders.getWorkType(),Constants.ZERO)){
+                orders.setPriceUnit("鍏�/鏂�");
+            }else if(Constants.equalsInteger(orders.getWorkType(),Constants.ONE)){
+                orders.setPriceUnit("鍏�/浜�/澶�");
+            }else{
+                if(Constants.equalsInteger(orders.getCarType(),Constants.ZERO)){
+                    orders.setPriceUnit("鍏�/浜�/澶�");
+                }else if(Constants.equalsInteger(orders.getCarType(),Constants.ONE)){
+                    orders.setPriceUnit("鍏�/浜�/灏忔椂");
+                }else{
+                    orders.setPriceUnit("鍏�/鏂�");
+                }
+            }
+        }else if(Constants.equalsInteger(orders.getType(),Constants.ONE)){
+            if(Constants.equalsInteger(orders.getCarType(),Constants.ZERO)){
+                orders.setPriceUnit("鍏�/澶�");
+            }else if(Constants.equalsInteger(orders.getCarType(),Constants.ONE)){
+                orders.setPriceUnit("鍏�/娆�");
+            }
+        }
+    }
     @Override
     public Orders findOne(Orders orders) {
         QueryWrapper<Orders> wrapper = new QueryWrapper<>(orders);
@@ -733,6 +739,7 @@
         if(
             (Constants.equalsInteger(orders.getType(),Constants.ZERO) && Constants.equalsInteger(orders.getWorkType(),Constants.ZERO ))
             || Constants.equalsInteger(orders.getType(),Constants.ONE)
+                || Constants.equalsInteger(orders.getType(),Constants.TWO)
         ){
             orders.setPriceNum2(Constants.ONE);
         }else{
@@ -798,9 +805,7 @@
             Constants.OrdersLog ordersLog = Constants.OrdersLog.UPD_DISAGREE;
             this.saveOrderLog(orders,ordersLog,
                     ordersLog.getInfo(),confirmUpdOrderDTO.getMember().getId(),null);
-
             //TODO 鍙戦�佷笉鍚屾剰鍙樻洿閫氱煡
-
         }
     }
 
@@ -960,7 +965,7 @@
      */
     @Override
     @Transactional(rollbackFor = {BusinessException.class,Exception.class})
-    public Object doneOrder(DoneOrderDTO doneOrderDTO){
+    public OrderReleaseVO doneOrder(DoneOrderDTO doneOrderDTO){
         if(Objects.isNull(doneOrderDTO)||Objects.isNull(doneOrderDTO.getOrderId())){
             throw new BusinessException(ResponseStatus.BAD_REQUEST);
         }
@@ -977,7 +982,8 @@
         if(!Constants.equalsInteger(orders.getReleaseMemberId(),doneOrderDTO.getMember().getId())){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炴偍鐨勮鍗曟棤娉曡繘琛岃鎿嶄綔");
         }
-        orders.setPayAccount(doneOrderDTO.getAmount());
+        OrderReleaseVO orderReleaseVO = new OrderReleaseVO();
+        orderReleaseVO.setId(orders.getId());
         Object object = null;
         //鐢ㄩ璁㈠崟
         if(!Constants.equalsInteger(orders.getType(),Constants.TWO)){
@@ -985,20 +991,81 @@
             //鎻愭垚閲戦
             Long tcje = Long.valueOf(new BigDecimal(orders.getPayAccount().toString()).multiply(orders.getPlatformRata()).intValue());
             orders.setReceiveAccount(orders.getPayAccount() - tcje);
+            orders.setOutTradeNo(UUID.randomUUID().toString().replace("-",""));
             ordersMapper.updateById(orders);
             //鍞よ捣鏀粯涓氬姟
             object = this.getWxPayResponse(orders,orders.getMember().getOpenid());
+            orderReleaseVO.setObject(object);
         }else{
             orders.setStatus(Constants.ordersStatus.done.getKey());
+            orders.setFinishTime(new Date());
+            ordersMapper.updateById(orders);
+
+            Member member = memberMapper.selectById(orders.getAcceptMemberId())
+
+            //瀛樺偍娴佹按璁板綍
+            MemberRevenue memberRevenue = new MemberRevenue();
+            memberRevenue.setCreateTime(new Date());
+            memberRevenue.setMemberId(orders.getAcceptMemberId());
+            memberRevenue.setType(orders.getType());
+            memberRevenue.setOptType(Constants.ONE);
+            memberRevenue.setBeforeAmount(member.getAmount());
+            memberRevenue.setAmount(orders.getReceiveAccount());
+            memberRevenue.setAfterAmount(member.getAmount() + orders.getReceiveAccount());
+            if(Constants.equalsInteger(orders.getType(),Constants.ZERO)){
+                memberRevenue.setRemark(Constants.RevenueType.getInfo(memberRevenue.getType()) + "-" +
+                        (Constants.equalsInteger(orders.getWorkType(),Constants.ZERO)?"閲囨憳宸�":(Constants.equalsInteger(orders.getWorkType(),Constants.ONE)?"鍒嗘嫞宸�":"鍖呰宸�")));
+            }else{
+                memberRevenue.setRemark(Constants.RevenueType.getInfo(memberRevenue.getType()));
+            }
+            memberRevenue.setObjId(orders.getId());
+            memberRevenue.setObjType(Constants.ZERO);
+            memberRevenue.setStatus(Constants.ZERO);
+            memberRevenueMapper.insert(memberRevenue);
+
             //鏃ュ織瀛樺偍
             Constants.OrdersLog ordersLog = Constants.OrdersLog.DONE;
             this.saveOrderLog(orders,ordersLog,
                     ordersLog.getInfo(),doneOrderDTO.getMember().getId(),null);
         }
-        return object;
+        return orderReleaseVO;
     }
 
 
+
+    @Override
+    public OrderReleaseVO reusePay(ReusePayDTO reusePayDTO){
+        if(Objects.isNull(reusePayDTO)||Objects.isNull(reusePayDTO.getOrderId())){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        Orders orders = ordersMapper.selectById(reusePayDTO.getOrderId());
+        if(Objects.isNull(orders)||Constants.equalsInteger(orders.getDeleted(),Constants.ONE)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        if(!Constants.equalsInteger(orders.getType(),Constants.TWO)&&Objects.isNull(reusePayDTO.getAmount())){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+
+        if(!((( Constants.equalsInteger(orders.getType(),Constants.TWO) && Constants.equalsInteger(orders.getStatus(),Constants.ZERO) )
+                || ( !Constants.equalsInteger(orders.getType(),Constants.TWO) && Constants.equalsInteger(orders.getStatus(),Constants.THREE) ))
+        && Constants.equalsInteger(orders.getPayStatus(),Constants.ZERO) )){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鐘舵�佸凡娴佽浆");
+        }
+        OrderReleaseVO orderReleaseVO = new OrderReleaseVO();
+        if(!Constants.equalsInteger(orders.getType(),Constants.TWO)){
+            orders.setPayAccount(reusePayDTO.getAmount());
+            //鎻愭垚閲戦
+            Long tcje = Long.valueOf(new BigDecimal(orders.getPayAccount().toString()).multiply(orders.getPlatformRata()).intValue());
+            orders.setReceiveAccount(orders.getPayAccount() - tcje);
+        }
+        orders.setOutTradeNo(UUID.randomUUID().toString().replace("-",""));
+        ordersMapper.updateById(orders);
+        //鍞よ捣鏀粯涓氬姟
+        Object object = this.getWxPayResponse(orders,orders.getMember().getOpenid());
+        orderReleaseVO.setObject(object);
+        orderReleaseVO.setId(orders.getId());
+        return orderReleaseVO;
+    }
 
 
     @Override
@@ -1083,20 +1150,16 @@
                 .set(Orders::getCommentType,Constants.ZERO)
                 .eq(Orders::getId,orders.getId())
         );
-
         memberMapper.update(new UpdateWrapper<Member>().lambda()
                 .set(Member::getScore," ( total_score +" + commentDTO.getLevel() + " ) / (score_order_num + 1 )")
                 .set(Member::getTotalScore," total_score +" + commentDTO.getLevel())
                 .set(Member::getScoreOrderNum," score_order_num + 1 " ).eq(Member::getId,orders.getAcceptMemberId())
         );
-
         //鏃ュ織瀛樺偍
         Constants.OrdersLog ordersLog = Constants.OrdersLog.COMMENT;
         this.saveOrderLog(orders,ordersLog,
                 ordersLog.getInfo(),orders.getAcceptMemberId(),null);
     }
-
-
 
 
     /**
@@ -1117,7 +1180,7 @@
                 //澶勭悊鏀粯瀹屾垚閫昏緫
                 ordersMapper.update(new UpdateWrapper<Orders>().lambda()
                         .set(Orders::getUpdateTime,new Date())
-                        .set(Orders::getStatus,Constants.ordersStatus.wait)
+                        .set(Orders::getStatus,Constants.ordersStatus.wait.getKey())
                         .set(Orders::getPayStatus,Constants.ONE)
                         .set(Orders::getPayTime,new Date())
                         .set(Orders::getPayMethod,Constants.ZERO)
@@ -1157,6 +1220,12 @@
                 memberRevenue.setBeforeAmount(member.getAmount());
                 memberRevenue.setAmount(orders.getReceiveAccount());
                 memberRevenue.setAfterAmount(member.getAmount() + orders.getReceiveAccount());
+                if(Constants.equalsInteger(orders.getType(),Constants.ZERO)){
+                    memberRevenue.setRemark(Constants.RevenueType.getInfo(memberRevenue.getType()) + "-" +
+                            (Constants.equalsInteger(orders.getWorkType(),Constants.ZERO)?"閲囨憳宸�":(Constants.equalsInteger(orders.getWorkType(),Constants.ONE)?"鍒嗘嫞宸�":"鍖呰宸�")));
+                }else{
+                    memberRevenue.setRemark(Constants.RevenueType.getInfo(memberRevenue.getType()));
+                }
                 memberRevenue.setObjId(orders.getId());
                 memberRevenue.setObjType(Constants.ZERO);
                 memberRevenue.setStatus(Constants.ZERO);
@@ -1175,6 +1244,7 @@
                         ordersLog.getInfo(),orders.getReleaseMemberId(),null);
 
                 //TODO 閫氱煡鎺ュ崟鏂� 娆鹃」宸插埌璐�
+
             }
         }
         return  ("澶勭悊鎴愬姛!");
@@ -1187,73 +1257,124 @@
         MPJLambdaWrapper<Orders> queryWrapper = new MPJLambdaWrapper<>();
         Utils.MP.blankToNull(pageWrap.getModel());
         Orders model = pageWrap.getModel();
+        if(Objects.isNull(model)
+            || Objects.isNull(model.getQueryLat())
+            || Objects.isNull(model.getQueryLgt())
+                || Objects.isNull(model.getQueryMyOrderType())
+        ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        BigDecimal chefLat = model.getQueryLat();
+        BigDecimal chefLgt = model.getQueryLgt();
+        BigDecimal driverLat = model.getQueryLat();
+        BigDecimal driverLgt = model.getQueryLgt();
+        BigDecimal workerLat = model.getQueryLat();
+        BigDecimal workerLgt = model.getQueryLgt();
+        IdentityInfo wokerIdentityInfo = identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda()
+                .eq(IdentityInfo::getMemberId,model.getMember().getId())
+                .eq(IdentityInfo::getType,Constants.ZERO)
+                .eq(IdentityInfo::getAuditStatus,Constants.TWO)
+                .last("limit 1")
+        );
+        if(Objects.nonNull(wokerIdentityInfo)){
+            workerLat = wokerIdentityInfo.getLat();
+            workerLgt = wokerIdentityInfo.getLgt();
+        }
+        IdentityInfo driverIdentityInfo = identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda()
+                .eq(IdentityInfo::getMemberId,model.getMember().getId())
+                .eq(IdentityInfo::getType,Constants.ONE)
+                .eq(IdentityInfo::getAuditStatus,Constants.TWO)
+                .last("limit 1")
+        );
+        if(Objects.nonNull(driverIdentityInfo)){
+            driverLat = driverIdentityInfo.getLat();
+            driverLgt = driverIdentityInfo.getLgt();
+        }
+        IdentityInfo chefIdentityInfo = identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda()
+                .eq(IdentityInfo::getMemberId,model.getMember().getId())
+                .eq(IdentityInfo::getType,Constants.TWO)
+                .eq(IdentityInfo::getAuditStatus,Constants.TWO)
+                .last("limit 1")
+        );
+        if(Objects.nonNull(chefIdentityInfo)){
+            chefLat = chefIdentityInfo.getLat();
+            chefLgt = chefIdentityInfo.getLgt();
+        }
         queryWrapper.selectAll(Orders.class)
                 .select("c1.name",Orders::getCategoryName)
                 .select("c2.name",Orders::getTransportTypeName)
                 .leftJoin(" category c1 on t.category_id = c1.id  ")
-                .leftJoin(" category c2 on t.TRANSPORT_TYPE_ID = c2.id  ");
+                .leftJoin(" category c2 on t.TRANSPORT_TYPE_ID = c2.id  ")
+                .select(" case when T.LGT IS NULL OR T.LAT IS NULL THEN 0 " +
+                        " when t.TYPE = 0 then CONVERT( ST_Distance_Sphere ( POINT ( t.LGT, t.LAT ), POINT ( "+workerLgt+", "+workerLat+" )) /1000,DECIMAL(15,2))  " +
+                        " when t.TYPE = 1 then   CONVERT( ST_Distance_Sphere ( POINT ( t.LGT, t.LAT ), POINT ( "+driverLgt+", "+driverLat+" )) /1000,DECIMAL(15,2)) " +
+                        " else  CONVERT( ST_Distance_Sphere ( POINT ( t.LGT, t.LAT ), POINT ( "+chefLgt+", "+chefLat+" )) /1000,DECIMAL(15,2)) end " , Orders::getDistance)
+                .eq(Objects.nonNull(model.getType()),Orders::getType,model.getType());
         if(Objects.nonNull(model.getQueryMyOrderType())){
             if(Constants.equalsInteger(model.getQueryMyOrderType(),Constants.ZERO)){
                 //鍙戝崟鏂� 鎴戠殑璁㈠崟
                 queryWrapper.eq(Orders::getReleaseMemberId,model.getMember().getId());
+                queryWrapper.eq(Objects.nonNull(model.getStatus()),Orders::getStatus,model.getStatus());
+                queryWrapper.orderByDesc(Orders::getCreateTime);
             }else if(Constants.equalsInteger(model.getQueryMyOrderType(),Constants.ONE)){
                 //鎺ュ崟鏂� 鎴戠殑璁㈠崟
                 queryWrapper.eq(Orders::getAcceptMemberId,model.getMember().getId());
+                queryWrapper.eq(Objects.nonNull(model.getStatus()),Orders::getStatus,model.getStatus());
+                queryWrapper.orderByDesc(Orders::getCreateTime);
             }else{
+                //鏌ヨ鐢ㄦ埛鐨勬帴鍗曟潈閲�
+                ReceiveWeight receiveWeight = receiveWeightMapper.selectOne(new QueryWrapper<ReceiveWeight>().lambda().eq(ReceiveWeight::getDeleted,Constants.ZERO).apply(" RECEIVE_MIN < "+model.getMember().getReceiveNum()+" and RECEIVE_MAX > " + model.getMember().getReceiveNum()).last(" limit 1 "));
+                if(Objects.nonNull(receiveWeight)){
+                    queryWrapper.apply(" DATE_ADD(t.CREATE_TIME, INTERVAL "+receiveWeight.getDelayTime()+" MINUTE)  < now() ");
+                }
                 queryWrapper.eq(Orders::getStatus,Constants.ordersStatus.wait.getKey());
-                //鎺ュ崟澶у巺
-                queryWrapper.and(Constants.equalsInteger(model.getMember().getWorkerIdentity(),Constants.TWO)||Constants.equalsInteger(model.getMember().getDriverIdentity(),Constants.TWO)||Constants.equalsInteger(model.getMember().getChefIdentity(),Constants.TWO),i->
-                        i.eq(Constants.equalsInteger(model.getMember().getWorkerIdentity(),Constants.TWO),Orders::getType,Constants.ZERO)
-                                .or()
-                                .eq(Constants.equalsInteger(model.getMember().getDriverIdentity(),Constants.TWO),Orders::getType,Constants.ONE)
-                                .or()
-                                .eq(Constants.equalsInteger(model.getMember().getChefIdentity(),Constants.TWO),Orders::getType,Constants.TWO)
-                );
-
-                queryWrapper.apply(!(Constants.equalsInteger(model.getMember().getWorkerIdentity(),Constants.TWO)||Constants.equalsInteger(model.getMember().getDriverIdentity(),Constants.TWO)||Constants.equalsInteger(model.getMember().getChefIdentity(),Constants.TWO))," 1 = 2 "
-                );
-
+                queryWrapper.ne(Orders::getReleaseMemberId,model.getMember().getId());
+                if(Objects.nonNull(model.getSortType())){
+                    if(Constants.equalsInteger(model.getSortType(),Constants.ZERO)){
+                        queryWrapper.orderByDesc(Orders::getCreateTime);
+                    }else if(Constants.equalsInteger(model.getSortType(),Constants.ONE)){
+                        queryWrapper.orderByAsc(" distance  ");
+                    }else{
+                        queryWrapper.orderByDesc(Orders::getEstimatedAccount);
+                    }
+                }
             }
-        }
-        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
-            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
-                queryWrapper.orderByDesc(sortData.getProperty());
-            } else {
-                queryWrapper.orderByAsc(sortData.getProperty());
-            }
-        }
+        } 
         IPage<Orders> iPage = ordersMapper.selectJoinPage(page,Orders.class,queryWrapper);
-        if(Objects.nonNull(model.getQueryMyOrderType())&&Constants.equalsInteger(model.getQueryMyOrderType(),Constants.TWO)){
-            if(Constants.equalsInteger(model.getMember().getUseIdentity(),Constants.ONE)){
-                model.getMember().setWorkerIdentityModel(
-                        identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda()
-                                .eq(IdentityInfo::getMemberId,model.getMember().getId())
-                                .eq(IdentityInfo::getType,Constants.ZERO)
-                                .eq(IdentityInfo::getAuditStatus,Constants.TWO)
-                                .last("limit 1")
-                        )
-                );
-                model.getMember().setDriverIdentityModel(
-                        identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda()
-                                .eq(IdentityInfo::getMemberId,model.getMember().getId())
-                                .eq(IdentityInfo::getType,Constants.ONE)
-                                .eq(IdentityInfo::getAuditStatus,Constants.TWO)
-                                .last("limit 1")
-                        )
-                );
-                model.getMember().setChefIdentityModel(
-                        identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda()
-                                .eq(IdentityInfo::getMemberId,model.getMember().getId())
-                                .eq(IdentityInfo::getType,Constants.TWO)
-                                .eq(IdentityInfo::getAuditStatus,Constants.TWO)
-                                .last("limit 1")
-                        )
-                );
-            }
-            for (Orders orders:iPage.getRecords()) {
-               this.getDistance(model.getMember(),orders);
-            }
+        for (Orders orders:iPage.getRecords()) {
+            this.getPriceUnit(orders);
         }
+//        if(Objects.nonNull(model.getQueryMyOrderType())&&Constants.equalsInteger(model.getQueryMyOrderType(),Constants.TWO)){
+//            if(Constants.equalsInteger(model.getMember().getUseIdentity(),Constants.ONE)){
+//                model.getMember().setWorkerIdentityModel(
+//                        identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda()
+//                                .eq(IdentityInfo::getMemberId,model.getMember().getId())
+//                                .eq(IdentityInfo::getType,Constants.ZERO)
+//                                .eq(IdentityInfo::getAuditStatus,Constants.TWO)
+//                                .last("limit 1")
+//                        )
+//                );
+//                model.getMember().setDriverIdentityModel(
+//                        identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda()
+//                                .eq(IdentityInfo::getMemberId,model.getMember().getId())
+//                                .eq(IdentityInfo::getType,Constants.ONE)
+//                                .eq(IdentityInfo::getAuditStatus,Constants.TWO)
+//                                .last("limit 1")
+//                        )
+//                );
+//                model.getMember().setChefIdentityModel(
+//                        identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda()
+//                                .eq(IdentityInfo::getMemberId,model.getMember().getId())
+//                                .eq(IdentityInfo::getType,Constants.TWO)
+//                                .eq(IdentityInfo::getAuditStatus,Constants.TWO)
+//                                .last("limit 1")
+//                        )
+//                );
+//            }
+//            for (Orders orders:iPage.getRecords()) {
+//               this.getDistance(model.getMember(),orders);
+//            }
+//        }
         return PageData.from(iPage);
     }
 
@@ -1309,28 +1430,36 @@
     public Orders getDetail(Integer id,Integer userType) {
         Orders orders = ordersMapper.selectJoinOne(Orders.class,new MPJLambdaWrapper<Orders>()
                         .selectAll(Orders.class)
+                        .select(" m1.name " , Orders::getReleaseName)
+                        .select(" m1.telephone " , Orders::getReleasePhone)
+                        .select(" case when i.AUTH_TYPE = 0 then i.LINK_NAME else i.COMPANY_NAME end " , Orders::getAcceptName)
+                        .select(" i.TELEPHONE " , Orders::getAcceptPhone)
                         .select("c1.name",Orders::getCategoryName)
                         .select("c2.name",Orders::getTransportTypeName)
+                        .select(" m2.SCORE " , Orders::getScore)
+                        .select(" m1.PUBLISH_NUM " , Orders::getPublishNum)
+                        .select(" m2.RECEIVE_NUM " , Orders::getReceiveNum)
+                        .select(" m1.COVER_IMAGE " , Orders::getReleaseCoverImage)
+                        .select(" m2.COVER_IMAGE " , Orders::getAcceptCoverImage)
                         .leftJoin(" category c1 on t.category_id = c1.id  ")
                         .leftJoin(" category c2 on t.TRANSPORT_TYPE_ID = c2.id  ")
+                        .leftJoin("member m1 on t.RELEASE_MEMBER_ID = m1.id ")
+                        .leftJoin("member m2 on t.ACCEPT_MEMBER_ID = m2.id ")
+                        .leftJoin("identity_info i on m2.id = i.MEMBER_ID and i.TYPE = t.type and i.AUDIT_STATUS = 2  ")
+
                         .eq(Orders::getId,id)
                 );
         if(Objects.isNull(orders)){
             throw new BusinessException(ResponseStatus.DATA_EMPTY);
         }
-        if(Objects.nonNull(userType)){
-            Member member = memberMapper.selectById(
-                    Constants.equalsInteger(userType,Constants.ZERO)?orders.getReleaseMemberId():orders.getAcceptMemberId()
-            );
-            if(Objects.nonNull(member)){
-                if(org.apache.commons.lang3.StringUtils.isNotBlank(member.getCoverImage())){
-                    //澶村儚淇℃伅
-                    String path  = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RESOURCE_PATH).getCode()
-                            +systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.MEMBER_FILES).getCode();
-                    member.setFullCoverImage(path + member.getCoverImage());
-                }
-                orders.setMember(member);
-            }
+        //澶村儚淇℃伅
+        String coverPath  = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RESOURCE_PATH).getCode()
+                +systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.MEMBER_FILES).getCode();
+        if(org.apache.commons.lang3.StringUtils.isNotBlank(orders.getReleaseCoverImage())){
+            orders.setReleaseCoverImage(coverPath + orders.getReleaseCoverImage());
+        }
+        if(org.apache.commons.lang3.StringUtils.isNotBlank(orders.getAcceptCoverImage())){
+            orders.setAcceptCoverImage(coverPath + orders.getAcceptCoverImage());
         }
         List<Multifile> multifileList = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda().eq(Multifile::getObjId,orders.getId())
                 .eq(Multifile::getIsdeleted,Constants.ZERO).eq(Multifile::getObjType,Constants.ONE).orderByAsc(Multifile::getId));
@@ -1342,7 +1471,7 @@
             }
             orders.setMultifileList(multifileList);
         }
-
+        orders.setStatusName(Constants.ordersStatus.getName(orders.getStatus()));
 
         return orders;
     }
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/WithdrawalOrdersServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/WithdrawalOrdersServiceImpl.java
index 82c3236..ef8c562 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/WithdrawalOrdersServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/WithdrawalOrdersServiceImpl.java
@@ -1,6 +1,5 @@
 package com.doumee.service.business.impl;
 
-import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.doumee.config.wx.TransferToUser;
 import com.doumee.config.wx.WXPayUtility;
@@ -210,7 +209,6 @@
         transferToUserRequest.outBillNo =  withdrawalOrders.getOutBillNo();
         transferToUserRequest.transferAmount = withdrawalDTO.getAmount();
         transferToUserRequest.transferRemark = "鎻愮幇鐢宠";
-//        transferToUserRequest.userName = member.getName();
         try {
             TransferToUser.TransferToUserResponse response =  WxMiniConfig.transferToUser.run(transferToUserRequest,member.getName());
             withdrawalOrders.setRemark(JSONObject.toJSONString(response));
@@ -231,6 +229,7 @@
             memberRevenue.setAmount(withdrawalOrders.getAmount());
             memberRevenue.setAfterAmount(member.getAmount() - withdrawalOrders.getAmount());
             memberRevenue.setObjId(withdrawalOrders.getId());
+            memberRevenue.setRemark(Constants.RevenueType.getInfo(memberRevenue.getType()));
             memberRevenue.setObjType(Constants.ONE);
             memberRevenue.setDeleted(Constants.ZERO);
             memberRevenue.setStatus(Constants.TWO);
diff --git a/server/services/src/main/resources/application-dev.yml b/server/services/src/main/resources/application-dev.yml
index add081e..c2f5827 100644
--- a/server/services/src/main/resources/application-dev.yml
+++ b/server/services/src/main/resources/application-dev.yml
@@ -85,14 +85,14 @@
   pay:
     #鏈嶅姟鍟�---------start-------
     appId: wx48fd8faa35cc8277
-    mchId: 1229817002 #1661770902
+    mchId: 1661770902
     apiV3Key: iF3kC8pL8dZ9iU3hN5fX9zI6eF4xQ6fT
     serialNumer: 368B835A194384FD583B83B77977B84127D2F655
     mchKey: W97N53Q71326D6JZ2E9HY5M4VT4BAC8S
-    #    notifyUrl: http://xiaopiqiu3.natapp1.cc/api/wxPayNotify
-    #    refundNotifyUrl: http://xiaopiqiu3.natapp1.cc/api/wxRefundNotify
-    notifyUrl: https://dmtest.ahapp.net/bike_h5_api/api/wxPayNotify
-    refundNotifyUrl: https://dmtest.ahapp.net/bike_h5_api/api/wxRefundNotify
+    notifyUrl: http://xiaopiqiu2.natapp1.cc/web/wxPayNotify
+    refundNotifyUrl: http://xiaopiqiu2.natapp1.cc/web/wxRefundNotify
+#    notifyUrl: https://dmtest.ahapp.net/bike_h5_api/api/wxPayNotify
+#    refundNotifyUrl: https://dmtest.ahapp.net/bike_h5_api/api/wxRefundNotify
     #keyPath: /usr/local/aliConfig/bike/apiclient_cert.p12
     #privateCertPath: /usr/local/aliConfig/bike/apiclient_cert.pem
     #privateKeyPath: /usr/local/aliConfig/bike/apiclient_key.pem
@@ -102,10 +102,14 @@
 
 
     #鍟嗘埛淇℃伅
-    wechatSerialNumer: 3FE90C2F3D40A56E1C51926F31B8A8D22426CCE0
-    wechatPayPublicKeyId: PUB_KEY_ID_0112298170022025071700291836000600
-    wechatPubKeyPath: d://pub_key.pem
-    wechatPrivateKeyPath: d://wechatApiclient_key.pem
+    wechatSerialNumer: 3C9A32FB6CD453FAAAF97F9737ECAEA9D6625727
+    wechatPayPublicKeyId: 47E172124E73E8098A565E971064C20ACDE7C911 # PUB_KEY_ID_0116617720032025071800291849000801 #鍟嗘埛/骞冲彴鏀粯鍏挜id
+    wechatPubKeyPath: d://pub_key.pem #鍟嗘埛鏀粯鍏挜
+    #wechatPlatformPubKeyPath: d:/wechatpay_47E172124E73E8098A565E971064C20ACDE7C911.pem  #骞冲彴鏀粯鍏挜
+    wechatPrivateKeyPath: d://wechatApiclient_key.pem #鍟嗘埛绉侀挜
+    wechatNotifyUrl: http://xiaopiqiu2.natapp1.cc/web/wechat/transferNotify #鍟嗘埛杞处鍥炶皟鍦板潃
+    #wechatApiV3Key: V4PRKUBTK2BKNKJAD9NSI9YFG2Q0EOT1 #鍟嗘埛APIV3Key
+
 
     #鏈嶅姟鍟�-------------end---
     existsSub: 1
diff --git a/server/web/src/main/java/com/doumee/api/web/OrdersApi.java b/server/web/src/main/java/com/doumee/api/web/OrdersApi.java
index 38571fa..fe942c1 100644
--- a/server/web/src/main/java/com/doumee/api/web/OrdersApi.java
+++ b/server/web/src/main/java/com/doumee/api/web/OrdersApi.java
@@ -9,10 +9,7 @@
 import com.doumee.dao.business.model.IdentityInfo;
 import com.doumee.dao.business.model.Member;
 import com.doumee.dao.business.model.Orders;
-import com.doumee.dao.dto.CommentDTO;
-import com.doumee.dao.dto.ConfirmUpdOrderDTO;
-import com.doumee.dao.dto.DoneOrderDTO;
-import com.doumee.dao.dto.UpdOrderDataDTO;
+import com.doumee.dao.dto.*;
 import com.doumee.dao.vo.OrderReleaseVO;
 import com.doumee.service.business.IdentityInfoService;
 import com.doumee.service.business.MemberService;
@@ -145,11 +142,22 @@
     @ApiImplicitParams({
             @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
     })
-    public ApiResponse<Object> doneOrder(@RequestBody DoneOrderDTO doneOrderDTO) {
+    public ApiResponse<OrderReleaseVO> doneOrder(@RequestBody DoneOrderDTO doneOrderDTO) {
         doneOrderDTO.setMember(getMemberResponse());
         return  ApiResponse.success("鎿嶄綔鎴愬姛",ordersService.doneOrder(doneOrderDTO));
     }
 
+    @LoginRequired
+    @ApiOperation(value = "璁㈠崟閲嶆柊鏀粯 - 鍙戝崟鏂�", notes = "灏忕▼搴忕")
+    @PostMapping("/reusePay")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse<OrderReleaseVO> reusePay(@RequestBody ReusePayDTO reusePayDTO) {
+        reusePayDTO.setMember(getMemberResponse());
+        return  ApiResponse.success("鎿嶄綔鎴愬姛",ordersService.reusePay(reusePayDTO));
+    }
+
 
     @LoginRequired
     @ApiOperation(value = "璁㈠崟璇勪环 - 鍙戝崟鏂�", notes = "灏忕▼搴忕")

--
Gitblit v1.9.3