From df5ab4f34d11a7e68af1124b3d1c3bc1d79e1fd6 Mon Sep 17 00:00:00 2001
From: k94314517 <8417338+k94314517@user.noreply.gitee.com>
Date: 星期一, 14 七月 2025 18:18:11 +0800
Subject: [PATCH] 111

---
 server/services/src/main/java/com/doumee/dao/dto/CateringDTO.java                     |   28 
 server/services/src/main/java/com/doumee/config/wx/WxMiniConfig.java                  |   76 ++
 server/web/src/main/java/com/doumee/api/web/PaymentCallback.java                      |  159 +++++
 server/services/src/main/java/com/doumee/dao/dto/ConfirmUpdOrderDTO.java              |   26 
 server/services/src/main/resources/application-dev.yml                                |   31 +
 server/services/src/main/java/com/doumee/dao/business/model/Multifile.java            |    2 
 server/services/src/main/java/com/doumee/dao/business/model/OrderLog.java             |    9 
 server/services/src/main/java/com/doumee/dao/dto/CommentDTO.java                      |   30 
 server/services/src/main/java/com/doumee/dao/dto/DoneOrderDTO.java                    |   27 
 server/services/src/main/java/com/doumee/core/utils/DateUtil.java                     |    9 
 server/services/src/main/java/com/doumee/config/wx/WxMiniUtilService.java             |   83 ++
 server/services/src/main/java/com/doumee/dao/business/model/WithdrawalOrders.java     |    8 
 server/services/src/main/resources/application-test.yml                               |   30 
 server/web/src/main/java/com/doumee/api/web/OrdersApi.java                            |  107 +++
 server/services/src/main/java/com/doumee/config/wx/WxPayProperties.java               |   66 ++
 server/services/src/main/java/com/doumee/core/constants/Constants.java                |   94 +++
 server/services/src/main/java/com/doumee/dao/dto/WayInfoDTO.java                      |   38 +
 server/services/src/main/resources/application-pro.yml                                |   30 
 server/services/src/main/java/com/doumee/dao/business/model/Orders.java               |   59 +
 server/services/src/main/java/com/doumee/service/business/OrdersService.java          |   34 +
 server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java |  862 +++++++++++++++++++++++++++
 server/services/src/main/java/com/doumee/dao/business/model/Category.java             |    2 
 server/services/src/main/java/com/doumee/dao/business/model/Member.java               |   10 
 server/services/src/main/java/com/doumee/dao/dto/UpdOrderDataDTO.java                 |   35 +
 24 files changed, 1,803 insertions(+), 52 deletions(-)

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 f93edef..3c9cf04 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
@@ -10,6 +10,12 @@
 import com.github.binarywang.wxpay.constant.WxPayConstants;
 import com.github.binarywang.wxpay.service.WxPayService;
 import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl;
+import com.wechat.pay.java.core.Config;
+import com.wechat.pay.java.core.RSAAutoCertificateConfig;
+import com.wechat.pay.java.service.billdownload.BillDownloadService;
+import com.wechat.pay.java.service.partnerpayments.jsapi.JsapiService;
+import com.wechat.pay.java.service.partnerpayments.jsapi.JsapiServiceExtension;
+import com.wechat.pay.java.service.refund.RefundService;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Configuration;
@@ -21,12 +27,18 @@
  */
 @Configuration
 public class WxMiniConfig {
-    @Autowired
-    private SystemDictDataBiz systemDictDataBiz;
     /********寰俊灏忕▼搴忔湇鍔�**********/
     public static WxMaService wxMaService;
     /********寰俊灏忕▼搴忔敮浠�**********/
-    public static WxPayService wxPayService;
+    public static JsapiService wxPayService;
+    public static WxPayService wxPayV2Service;
+    public static RefundService refundService;
+    public static JsapiServiceExtension jsapiExtService;
+    public static BillDownloadService billDownloadService;
+    public static WxPayProperties wxProperties;
+
+    @Autowired
+    private WxPayProperties wxPayProperties;
 
     public static WxMiniConfig me() {
         return SpringUtils.get().getBean(WxMiniConfig.class);
@@ -35,15 +47,23 @@
     @PostConstruct
     void init() {
         this.load_WxMaService();
-//        this.load_wxPayService();
+        this.load_wxPayService();
+        this.load_wxPayV2Service();
+        this.wxProperties = wxPayProperties;
     }
     /**
      * 鍒濆鍖栧井淇″皬绋嬪簭
      */
     public void load_WxMaService() {
         WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl();
-        config.setAppid(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.WX_CONFIG,Constants.APPID).getCode()));
-        config.setSecret(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.WX_CONFIG,Constants.SECRET).getCode()));
+        if(wxPayProperties.getExistsSub() ==1){
+            //濡傛灉鏄湇鍔″晢鏀粯,鍙栧瓙鍟嗘埛淇℃伅
+            config.setAppid(StringUtils.trimToNull(wxPayProperties.getSubAppId()));
+            config.setSecret(StringUtils.trimToNull(wxPayProperties.getSubAppSecret()));
+        }else {
+            config.setAppid(StringUtils.trimToNull(wxPayProperties.getAppId()));
+            config.setSecret(StringUtils.trimToNull(wxPayProperties.getAppSecret()));
+        }
         config.setMsgDataFormat("JSON");
         //config.setToken("");
         //config.setAesKey("");
@@ -55,6 +75,50 @@
     /**
      * 鍒濆鍖栧井淇″皬绋嬪簭鏀粯
      */
+    public void load_wxPayService()   {
+        try {
+            Config config =
+                    new RSAAutoCertificateConfig.Builder()
+                            .merchantId(wxPayProperties.getMchId())
+                            .privateKeyFromPath(wxPayProperties.getPrivateKeyPath())
+                            .merchantSerialNumber(wxPayProperties.getSerialNumer())
+                            .apiV3Key(wxPayProperties.getApiV3Key())
+                            .build();
+            this.wxPayService =  new JsapiService.Builder().config(config).build();
+
+            this.jsapiExtService =  new JsapiServiceExtension.Builder().config(config).build();
+            this.refundService = new RefundService.Builder().config(config).build();
+            this.billDownloadService = new BillDownloadService.Builder().config(config).build();
+        }catch (Exception e){
+            e.printStackTrace();
+
+        }
+    }
+
+    /**
+     * 鍒濆鍖栧井淇″皬绋嬪簭鏀粯
+     */
+    public void load_wxPayV2Service()
+    {
+        WxPayConfig payConfig = new WxPayConfig();
+        payConfig.setTradeType(WxPayConstants.TradeType.JSAPI);
+        payConfig.setSignType(WxPayConstants.SignType.MD5);
+        payConfig.setAppId(StringUtils.trimToNull(wxPayProperties.getAppId()));
+        payConfig.setSubAppId(StringUtils.trimToNull(wxPayProperties.getSubAppId()));
+        payConfig.setMchId(StringUtils.trimToNull(wxPayProperties.getMchId()));
+        payConfig.setSubMchId(StringUtils.trimToNull(wxPayProperties.getSubMchId()));
+        payConfig.setMchKey(StringUtils.trimToNull(wxPayProperties.getMchKey()));
+//        payConfig.setKeyPath(StringUtils.trimToNull(wxPayProperties.getKeyPath()));
+        payConfig.setNotifyUrl(StringUtils.trimToNull(wxPayProperties.getNotifyUrl()));
+        WxPayService wxPayService = new WxPayServiceImpl();
+        wxPayService.setConfig(payConfig);
+        this.wxPayV2Service = wxPayService;
+    }
+
+
+    /**
+     * 鍒濆鍖栧井淇″皬绋嬪簭鏀粯
+     */
 //    public void load_wxPayService() {
 //        WxPayConfig payConfig = new WxPayConfig();
 //        payConfig.setTradeType(WxPayConstants.TradeType.JSAPI);
diff --git a/server/services/src/main/java/com/doumee/config/wx/WxMiniUtilService.java b/server/services/src/main/java/com/doumee/config/wx/WxMiniUtilService.java
new file mode 100644
index 0000000..26bf4d0
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/config/wx/WxMiniUtilService.java
@@ -0,0 +1,83 @@
+package com.doumee.config.wx;
+
+import com.alibaba.fastjson.JSONObject;
+import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.core.constants.Constants;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
+import com.doumee.core.utils.DateUtil;
+import com.doumee.core.utils.HttpsUtil;
+import com.doumee.dao.business.WithdrawalOrdersMapper;
+import com.doumee.dao.business.model.Orders;
+import com.doumee.dao.business.model.WithdrawalOrders;
+import com.doumee.dao.system.model.SystemDictData;
+import com.wechat.pay.java.service.refund.model.AmountReq;
+import com.wechat.pay.java.service.refund.model.CreateRequest;
+import com.wechat.pay.java.service.refund.model.QueryByOutRefundNoRequest;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * 寰俊灏忕▼搴�-鍏叡鏂规硶
+ */
+@Service
+@Slf4j
+public class WxMiniUtilService {
+
+    @Autowired
+    private WithdrawalOrdersMapper withdrawalOrdersMapper;
+
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
+
+    @Autowired
+    private WxPayProperties wxPayProperties;
+
+    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
+    public boolean wxRefund(WithdrawalOrders withdrawalOrders,Orders orders) {
+        // 鍙戦�侀��娆捐姹�
+        withdrawalOrders.setCreateTime(new Date());
+        withdrawalOrdersMapper.insert(withdrawalOrders);
+        CreateRequest request = new CreateRequest();
+        request.setOutTradeNo(orders.getCode());
+        request.setOutRefundNo("refund_"+orders.getCode());
+        request.setSubMchid(WxMiniConfig.wxProperties.getSubMchId());
+        request.setNotifyUrl(WxMiniConfig.wxProperties.getRefundNotifyUrl());
+        AmountReq amountReq = new AmountReq();
+        amountReq.setTotal(withdrawalOrders.getAmount());
+        amountReq.setRefund(withdrawalOrders.getAmount());
+        amountReq.setCurrency("CNY");
+        request.setAmount(amountReq);
+        try {
+            log.error("=============="+JSONObject.toJSONString(request));
+            com.wechat.pay.java.service.refund.model.Refund response = WxMiniConfig.refundService.create(request);
+            log.error("=============="+JSONObject.toJSONString(response));
+            if ("SUCCESS".equals(response.getStatus().name())
+                    || "PROCESSING".equals(response.getStatus().name()) ) {
+                return  true;
+            }else{
+                throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝閫�娆剧敵璇峰け璐ュ摝锛�");
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝閫�娆剧敵璇峰け璐ワ紒");
+        }
+    }
+
+
+
+}
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
new file mode 100644
index 0000000..e5c948d
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/config/wx/WxPayProperties.java
@@ -0,0 +1,66 @@
+package com.doumee.config.wx;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/3/22 18:04
+ */
+@Component
+@ConfigurationProperties(prefix = "wx.pay")
+@Data
+public class WxPayProperties {
+
+    /**
+     * AppID
+     */
+    private String appId;
+    private String apiV3Key;
+
+    /**
+     * AppSecret
+     */
+    private String appSecret;
+
+    /**
+     * 寰俊鍟嗘埛鍙�
+     */
+    private String mchId;
+
+    /**
+     * 鏀粯API瀵嗛挜
+     */
+    private String mchKey;
+    /**
+     * 鏀粯API瀵嗛挜
+     */
+    private String subMchKey;
+
+    /**
+     * 鏀粯鍥炶皟鍦板潃
+     */
+    private String notifyUrl;
+    /**
+     * 閫�娆惧洖璋冨湴鍧�
+     */
+    private String refundNotifyUrl;
+
+    /**
+     * 鏀粯璇佷功(p12)
+     */
+    private String keyPath;
+    private String serialNumer;
+
+    private int existsSub;// true
+    private String subAppId;//wxcd2b89fd2ff065f8
+    private String subMchId;// 1229817002
+    private String subAppSecret;// 1229817002
+    private String typeId;// gybike
+    private String privateKeyPath ;
+    private String privateCertPath;// gybike
+
+}
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 f579819..5fa236d 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
@@ -52,6 +52,12 @@
     public static final String ABOUT_US ="ABOUT_US" ;
 
 
+    public static final String RELEASE_CANCEL_TIMES ="RELEASE_CANCEL_TIMES" ;
+    public static final String RECEIVE_CANCEL_TIMES ="RECEIVE_CANCEL_TIMES" ;
+    public static final String RELEASE_CANCEL_TIME ="RELEASE_CANCEL_TIME" ;
+    public static final String RECEIVE_CANCEL_TIME ="RECEIVE_CANCEL_TIME" ;
+    public static final String AUTO_DISPATCH ="AUTO_DISPATCH" ;
+    public static final String AUTO_DISPATCH_DISTANCE ="AUTO_DISPATCH_DISTANCE" ;
 
     public static final String QYWX = "QYWX";
     public static final  Integer ONE = 1;
@@ -388,4 +394,92 @@
 
 
     }
+
+
+
+
+    public  enum OrdersLog {
+        UPLOAD(0, "鍙戝崟鏂�-鍙戝竷璁㈠崟","{userName}鍙戝竷{param}",0),
+        RECEIVE(1, "鎺ュ崟鏂�-宸叉姠鍗�","{userName}宸叉姠鍗�",1),
+        UPD_ORDER(2, "鍙戝崟鏂�-淇敼璁㈠崟","{userName}淇敼浜嗙敤宸ユ椂闂�",0),
+        UPD_DISAGREE(3, "鎺ュ崟鏂�-涓嶅悓鎰忎慨鏀�,璁㈠崟鍙栨秷","{userName}涓嶅悓鎰忎慨鏀癸紝璁㈠崟鍙栨秷",1),
+        UPD_AGREE(4, "鎺ュ崟鏂�-鍚屾剰淇敼","{userName}鍚屾剰淇敼",1),
+        AUTO(5, "绯荤粺-鑷姩娲惧崟","鏃犱汉鎺ュ崟宸茶嚜鍔ㄦ淳鍗曠粰{userName}",1),
+        CANCEL(6, "鎺ュ崟鏂�-鍙栨秷鎺ュ崟","{userName}宸叉墜鍔ㄥ彇娑堟帴鍗�",1),
+        BEGIN(7, "鍙戝崟鏂�-寮�濮嬩綔涓�","{userName}宸插紑濮嬩綔涓�",0),
+        DONE(8, "鍙戝崟鏂�-瀹屾垚浣滀笟","{userName}宸茬‘璁ゅ畬鎴愪綔涓�",0),
+        PAY(9, "鍙戝崟鏂�-瀹屾垚鏀粯","{userName}宸叉敮浠樿垂鐢�",0),
+        COMMENT(10, "鍙戝崟鏂�-璇勪环瀹屾垚","{userName}瀹屾垚璇勪环",0),
+        SYSTEM_CANCEL(11, "绯荤粺-璁㈠崟鍙栨秷","绯荤粺鍙栨秷",2),
+        RELEASE_CANCEL(12, "鍙戝崟鏂�-璁㈠崟鍙栨秷","{userName}宸叉墜鍔ㄥ彇娑堣鍗�",0),
+
+        ;
+        // 鎴愬憳鍙橀噺
+        private String name;
+        private String info;
+        private int key;
+        private int userType;
+
+        // 鏋勯�犳柟娉�
+        OrdersLog(int key, String name,String info,int userType) {
+            this.name = name;
+            this.info = info;
+            this.key = key;
+            this.userType = userType;
+        }
+
+        // 鏅�氭柟娉�
+        public static String getName(int index) {
+            for (OrdersLog c : OrdersLog.values()) {
+                if (c.getKey() == index) {
+                    return c.name;
+                }
+            }
+            return null;
+        }
+        public static String getInfo(int index) {
+            for (OrdersLog c : OrdersLog.values()) {
+                if (c.getKey() == index) {
+                    return c.info;
+                }
+            }
+            return null;
+        }
+
+        // get set 鏂规硶
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public int getKey() {
+            return key;
+        }
+
+        public void setKey(int key) {
+            this.key = key;
+        }
+
+        public int getUserType() {
+            return userType;
+        }
+
+        public void setUserType(int key) {
+            this.userType = userType;
+        }
+
+        public String getInfo() {
+            return info;
+        }
+
+        public void setInfo(String info) {
+            this.info = info;
+        }
+    }
+
+
+
 }
diff --git a/server/services/src/main/java/com/doumee/core/utils/DateUtil.java b/server/services/src/main/java/com/doumee/core/utils/DateUtil.java
index dcf6ec1..526440b 100644
--- a/server/services/src/main/java/com/doumee/core/utils/DateUtil.java
+++ b/server/services/src/main/java/com/doumee/core/utils/DateUtil.java
@@ -1380,6 +1380,9 @@
         return (int) days;
     }
 
+
+
+
     public static int daysBetweenDates11(Date newDate, Date oldDate) {
         int days = 0;
         Calendar calo = Calendar.getInstance();
@@ -2944,9 +2947,9 @@
 //                System.out.println(getPlusTime2(d));
 //            }
 
-//            Date startTime = DateUtil.StringToDate("2024-05-01 08:00:00" ,"yyyy-MM-dd HH:mm:ss");
-//            Date endTime = DateUtil.StringToDate("2024-05-01 17:00:00" ,"yyyy-MM-dd HH:mm:ss");
-//            Long intervalTime = 35L;
+            Date startTime = DateUtil.StringToDate("2024-05-01" ,"yyyy-MM-dd");
+            Date endTime = DateUtil.StringToDate("2024-06-02" ,"yyyy-MM-dd");
+            System.out.println(DateUtil.daysBetweenDates(endTime,startTime));
 //
 //
 //            DateUtil.checkDateInterval( startTime.toInstant()
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/Category.java b/server/services/src/main/java/com/doumee/dao/business/model/Category.java
index 7141788..beca239 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/Category.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/Category.java
@@ -26,7 +26,7 @@
 
     @ApiModelProperty(value = "鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�", example = "1")
     @ExcelColumn(name="鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�")
-    private Byte deleted;
+    private Integer deleted;
 
     @ApiModelProperty(value = "鐘舵��:0=鍚敤锛�1=绂佺敤锛�", example = "1")
     @ExcelColumn(name="鐘舵��:0=鍚敤锛�1=绂佺敤锛�")
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/Member.java b/server/services/src/main/java/com/doumee/dao/business/model/Member.java
index 8ded3a7..e9311ab 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/Member.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/Member.java
@@ -118,6 +118,16 @@
     @ExcelColumn(name="璇勫垎")
     private BigDecimal score;
 
+
+    @ApiModelProperty(value = "璇勫垎鎬绘暟", example = "1")
+    @ExcelColumn(name="璇勫垎鎬绘暟")
+    private BigDecimal totalScore;
+
+    @ApiModelProperty(value = "琚瘎浠锋�昏鍗曟暟", example = "1")
+    @ExcelColumn(name="琚瘎浠锋�昏鍗曟暟")
+    private Integer scoreOrderNum;
+
+
     @ApiModelProperty(value = "瀹氫綅鍦板潃")
     @ExcelColumn(name="瀹氫綅鍦板潃")
     private String location;
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/Multifile.java b/server/services/src/main/java/com/doumee/dao/business/model/Multifile.java
index c5e23a1..c3a415f 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/Multifile.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/Multifile.java
@@ -52,7 +52,7 @@
 
 //    @ApiModelProperty(value = "鍏宠仈瀵硅薄绫诲瀷 0SHE涓婃姤 1璺岀粖婊戜笂鎶� 2璺岀粖婊戝鐞� 3璺岀粖婊戝垎閰嶇墿涓氫富绠� 4璺岀粖婊戝垎閰嶅鐞嗕汉 5DCA椋庨櫓涓婃姤 6DCA椋庨櫓澶勭悊 7DCA宸ュ崟鍥剧墖", example = "1")
 //    @ExcelExportColumn(name="鍏宠仈瀵硅薄绫诲瀷 0SHE涓婃姤 1璺岀粖婊戜笂鎶� 2璺岀粖婊戝鐞� 3璺岀粖婊戝垎閰嶇墿涓氫富绠� 4璺岀粖婊戝垎閰嶅鐞嗕汉 5DCA椋庨櫓涓婃姤 6DCA椋庨櫓澶勭悊 7DCA宸ュ崟鍥剧墖")
-    @ApiModelProperty(value = "鍏宠仈瀵硅薄绫诲瀷 0宸ュ崟涓婃姤 1宸ュ崟澶勭悊 2宸ュ崟杞氦", example = "1")
+    @ApiModelProperty(value = "鍏宠仈瀵硅薄绫诲瀷 0韬唤鐢宠璧勬枡 1璁㈠崟闄勪欢", example = "1")
     private Integer objType;
 
     @ApiModelProperty(value = "鏂囦欢鍦板潃")
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/OrderLog.java b/server/services/src/main/java/com/doumee/dao/business/model/OrderLog.java
index 5584ea2..471c200 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/OrderLog.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/OrderLog.java
@@ -26,7 +26,7 @@
 
     @ApiModelProperty(value = "鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�", example = "1")
     @ExcelColumn(name="鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�")
-    private Byte deleted;
+    private Integer deleted;
 
     @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
     @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
@@ -34,7 +34,6 @@
 
     @ApiModelProperty(value = "鍒涘缓鏃堕棿")
     @ExcelColumn(name="鍒涘缓鏃堕棿")
-    @JsonFormat(pattern = "yyyy-MM-dd")
     private Date createTime;
 
     @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
@@ -43,7 +42,6 @@
 
     @ApiModelProperty(value = "鏇存柊鏃堕棿")
     @ExcelColumn(name="鏇存柊鏃堕棿")
-    @JsonFormat(pattern = "yyyy-MM-dd")
     private Date updateTime;
 
     @ApiModelProperty(value = "澶囨敞")
@@ -82,4 +80,9 @@
     @ExcelColumn(name="璁㈠崟鐘舵��:0=寰呮帴鍗曪紱1=宸叉帴鍗曪紱2=杩涜涓紱3=宸插畬鎴愶紱99=宸插彇娑堬紱")
     private Integer orderStatus;
 
+
+
+    @ApiModelProperty(value = "鎿嶄綔浜虹被鍨嬶細0=鍙戝崟鏂�;1=鎺ュ崟鏂�;2=绯荤粺;", example = "1")
+    @ExcelColumn(name="鎿嶄綔浜虹被鍨嬶細0=鍙戝崟鏂�;1=鎺ュ崟鏂�;2=绯荤粺;")
+    private Integer optUserType;
 }
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 a47edc6..b238a22 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
@@ -2,6 +2,8 @@
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.doumee.core.annotation.excel.ExcelColumn;
+import com.doumee.dao.dto.CateringDTO;
+import com.doumee.dao.dto.WayInfoDTO;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import com.baomidou.mybatisplus.annotation.IdType;
@@ -29,7 +31,7 @@
 
     @ApiModelProperty(value = "鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�", example = "1")
     @ExcelColumn(name="鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�")
-    private Byte deleted;
+    private Integer deleted;
 
     @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
     @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
@@ -107,12 +109,12 @@
     @ExcelColumn(name="鐢ㄥ伐绫诲瀷:0=閲囨憳宸ワ紱1=鍒嗘嫞宸ワ紱2=鍖呰宸ワ紱锛堢敤宸ヨ鍗曪級")
     private Integer workType;
 
-    @ApiModelProperty(value = "璁′环鏁伴噺1(澶╂暟/鐢ㄨ溅娆℃暟)", example = "1")
-    @ExcelColumn(name="璁′环鏁伴噺1(澶╂暟/鐢ㄨ溅娆℃暟)")
+    @ApiModelProperty(value = "璁′环鏁伴噺1(澶╂暟/鐢ㄨ溅娆℃暟/灏忔椂/鏂ゆ暟)", example = "1")
+    @ExcelColumn(name="璁′环鏁伴噺1(澶╂暟/鐢ㄨ溅娆℃暟/灏忔椂/鏂ゆ暟)")
     private Integer priceNum1;
 
-    @ApiModelProperty(value = "璁′环鏁伴噺2(鐢ㄥ伐鏁伴噺/閲囨憳鏁伴噺/鐢ㄨ溅鏁伴噺/)", example = "1")
-    @ExcelColumn(name="璁′环鏁伴噺2(鐢ㄥ伐鏁伴噺/閲囨憳鏁伴噺/鐢ㄨ溅鏁伴噺/)")
+    @ApiModelProperty(value = "璁′环鏁伴噺2(浜烘暟/鐢ㄩ浠芥暟)", example = "1")
+    @ExcelColumn(name="璁′环鏁伴噺2(浜烘暟/鐢ㄩ浠芥暟)")
     private Integer priceNum2;
 
     @ApiModelProperty(value = "闇�姹傝ˉ鍏�")
@@ -135,12 +137,11 @@
     @ExcelColumn(name="瀹炴敹璐圭敤")
     private Long receiveAccount;
 
-    @ApiModelProperty(value = "璐圭敤璇存槑")
-    @ExcelColumn(name="璐圭敤璇存槑")
-    private String priceRemark;
+//    @ApiModelProperty(value = "璐圭敤璇存槑(寮冪敤)")
+//    private String priceRemark;
 
-    @ApiModelProperty(value = "鐢ㄨ溅绫诲瀷(杩愯揣浣跨敤):0=澶╋紱1=娆�", example = "1")
-    @ExcelColumn(name="鐢ㄨ溅绫诲瀷(杩愯揣浣跨敤):0=澶╋紱1=娆�")
+    @ApiModelProperty(value = "鐢ㄨ溅绫诲瀷(鐢ㄥ伐鍖呰/杩愯揣浣跨敤):0=澶�;1=娆�/灏忔椂;2=閲嶉噺", example = "1")
+    @ExcelColumn(name="鐢ㄨ溅绫诲瀷(鐢ㄥ伐鍖呰/杩愯揣浣跨敤):0=澶�;1=娆�/灏忔椂;2=閲嶉噺")
     private Integer carType;
 
     @ApiModelProperty(value = "杩愯緭鍝佺(杩愯揣浣跨敤) 鍏宠仈category琛�", example = "1")
@@ -175,9 +176,13 @@
     @ExcelColumn(name="璁㈠崟缂栧彿")
     private String code;
 
-    @ApiModelProperty(value = "璁㈠崟鐘舵��:0=寰呮帴鍗曪紱1=宸叉帴鍗曪紱2=杩涜涓紱3=宸插畬鎴愶紱99=宸插彇娑堬紱", example = "1")
-    @ExcelColumn(name="璁㈠崟鐘舵��:0=寰呮帴鍗曪紱1=宸叉帴鍗曪紱2=杩涜涓紱3=宸插畬鎴愶紱99=宸插彇娑堬紱")
+    @ApiModelProperty(value = "璁㈠崟鐘舵��:0=寰呮敮浠� 1=寰呮帴鍗曪紱2=宸叉帴鍗曪紱3=杩涜涓紱4=宸插畬鎴愶紱99=宸插彇娑堬紱", example = "1")
+    @ExcelColumn(name="璁㈠崟鐘舵��:0=寰呮敮浠� 1=寰呮帴鍗曪紱2=宸叉帴鍗曪紱3=杩涜涓紱4=宸插畬鎴愶紱99=宸插彇娑堬紱")
     private Integer status;
+
+    @ApiModelProperty(value = "鏀粯鐘舵��:0=寰呮敮浠� 1=宸叉敮浠�", example = "1")
+    @ExcelColumn(name="鏀粯鐘舵��:0=寰呮敮浠� 1=宸叉敮浠橈紱")
+    private Integer payStatus;
 
     @ApiModelProperty(value = "鎺ュ崟鏃堕棿")
     @ExcelColumn(name="鎺ュ崟鏃堕棿")
@@ -236,16 +241,40 @@
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date cancelTime;
 
-    @ApiModelProperty(value = "鏄惁宸蹭慨鏀�:0=鍚︼紱1=鏄紱", example = "1")
-    @ExcelColumn(name="鏄惁宸蹭慨鏀�:0=鍚︼紱1=鏄紱")
+    @ApiModelProperty(value = "鏄惁宸蹭慨鏀�:0=鍚︼紱1=鏄紱2=宸茬‘璁�;", example = "1")
+    @ExcelColumn(name="鏄惁宸蹭慨鏀�:0=鍚︼紱1=鏄紱2=宸茬‘璁わ紱")
     private Integer isUpdate;
 
     @ApiModelProperty(value = "鎺ュ崟鏂归粦鍚嶅崟member:id 澶氫釜浠�,鍒嗗壊")
     @ExcelColumn(name="鎺ュ崟鏂归粦鍚嶅崟member:id 澶氫釜浠�,鍒嗗壊")
     private String blackReceive;
 
-    @ApiModelProperty
+
+    @ApiModelProperty(value = "鎬诲ぉ鏁�", example = "1")
+    @ExcelColumn(name="鎬诲ぉ鏁�")
+    private Integer totalDays;
+
+    @ApiModelProperty(value = "鍙栨秷绫诲瀷锛�0=鍙戝崟鏂规棤璐e彇娑堬紱1=鍙戝崟鏂规湁璐e彇娑堬紱2=绯荤粺鍙栨秷锛�", example = "1")
+    @ExcelColumn(name="鍙栨秷绫诲瀷锛�0=鍙戝崟鏂规棤璐e彇娑堬紱1=鍙戝崟鏂规湁璐e彇娑堬紱2=绯荤粺鍙栨秷锛�")
+    private Integer cancelType;
+
+    @ApiModelProperty(value = "鍥剧墖")
     @TableField(exist = false)
     private List<Multifile> multifileList;
 
+    @ApiModelProperty(value = "閫旂粡鐐�")
+    @TableField(exist = false)
+    private List<WayInfoDTO> wayInfoDTOList;
+
+    @ApiModelProperty(value = "椁愭爣")
+    @TableField(exist = false)
+    private List<CateringDTO> cateringDTOList;
+
+
+    @ApiModelProperty(value = "绉诲姩绔敤鎴�",hidden = true)
+    @TableField(exist = false)
+    private Member member;
+
+
+
 }
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/WithdrawalOrders.java b/server/services/src/main/java/com/doumee/dao/business/model/WithdrawalOrders.java
index 49e5003..01c042b 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/WithdrawalOrders.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/WithdrawalOrders.java
@@ -75,4 +75,12 @@
     @ExcelColumn(name="瀹屾垚澶囨敞")
     private String doneInfo;
 
+
+    @ApiModelProperty(value = "涓氬姟绫诲瀷锛�0=鎻愮幇锛�1=閫�娆撅紱", example = "1")
+    @ExcelColumn(name="涓氬姟绫诲瀷锛�0=鎻愮幇锛�1=閫�娆撅紱")
+    private Integer type;
+
+    @ApiModelProperty(value = "鍏宠仈璁㈠崟涓婚敭 orders", example = "1")
+    @ExcelColumn(name="鍏宠仈璁㈠崟涓婚敭 orders")
+    private Integer objId;
 }
diff --git a/server/services/src/main/java/com/doumee/dao/dto/CateringDTO.java b/server/services/src/main/java/com/doumee/dao/dto/CateringDTO.java
new file mode 100644
index 0000000..415e0c1
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/CateringDTO.java
@@ -0,0 +1,28 @@
+package com.doumee.dao.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import java.math.BigDecimal;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/3/23 9:50
+ */
+@Data
+@ApiModel("椁愰ギ鏍囧噯淇℃伅")
+public class CateringDTO {
+
+    @ApiModelProperty(value = "绫诲瀷锛氭棭椁愩�佷腑椁愩�佹櫄椁�")
+    private String name;
+
+    @ApiModelProperty(value = "浠锋牸 鍗曚綅:鍒�")
+    private Long price;
+
+    @ApiModelProperty(value = "浠芥暟")
+    private Integer num;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/CommentDTO.java b/server/services/src/main/java/com/doumee/dao/dto/CommentDTO.java
new file mode 100644
index 0000000..6204854
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/CommentDTO.java
@@ -0,0 +1,30 @@
+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 CommentDTO {
+
+    @ApiModelProperty(value = "璁㈠崟涓婚敭")
+    private Integer orderId;
+
+    @ApiModelProperty(value = "璇勪环鏄熺骇 1 - 5 ")
+    private Long level;
+
+    @ApiModelProperty(value = "璇勪环鍐呭")
+    private String info;
+
+    @ApiModelProperty(hidden = true)
+    private Member member;
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/ConfirmUpdOrderDTO.java b/server/services/src/main/java/com/doumee/dao/dto/ConfirmUpdOrderDTO.java
new file mode 100644
index 0000000..fb42c56
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/ConfirmUpdOrderDTO.java
@@ -0,0 +1,26 @@
+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;
+
+import java.util.Date;
+
+/**
+ * @author  dm
+ * @since 2025/03/31 16:44
+ */
+@Data
+@ApiModel("纭璁㈠崟淇敼淇℃伅")
+public class ConfirmUpdOrderDTO {
+
+    @ApiModelProperty(value = "璁㈠崟涓婚敭")
+    private Integer orderId;
+
+    @ApiModelProperty(value = "鎿嶄綔绫诲瀷锛�0=鍚屾剰锛�1=涓嶅悓鎰忥紱")
+    private Integer status;
+
+    @ApiModelProperty(hidden = true)
+    private Member member;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/DoneOrderDTO.java b/server/services/src/main/java/com/doumee/dao/dto/DoneOrderDTO.java
new file mode 100644
index 0000000..98d48ce
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/DoneOrderDTO.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 DoneOrderDTO {
+
+    @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/dao/dto/UpdOrderDataDTO.java b/server/services/src/main/java/com/doumee/dao/dto/UpdOrderDataDTO.java
new file mode 100644
index 0000000..659b469
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/UpdOrderDataDTO.java
@@ -0,0 +1,35 @@
+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;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author  dm
+ * @since 2025/03/31 16:44
+ */
+@Data
+@ApiModel("淇敼璁㈠崟鏃ユ湡")
+public class UpdOrderDataDTO {
+
+    @ApiModelProperty(value = "璁㈠崟涓婚敭")
+    private Integer orderId;
+
+    @ApiModelProperty(value = "寮�濮嬫椂闂�")
+    private Date startDate;
+
+    @ApiModelProperty(value = "缁撴潫鏃堕棿")
+    private Date endDate;
+
+    @ApiModelProperty(value = "澶╂暟")
+    private Integer totalDays;
+
+    @ApiModelProperty(hidden = true)
+    private Member member;
+}
diff --git a/server/services/src/main/java/com/doumee/dao/dto/WayInfoDTO.java b/server/services/src/main/java/com/doumee/dao/dto/WayInfoDTO.java
new file mode 100644
index 0000000..d05ab9e
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/WayInfoDTO.java
@@ -0,0 +1,38 @@
+package com.doumee.dao.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/3/23 9:50
+ */
+@Data
+@ApiModel("閫旂粡鐐逛俊鎭�")
+public class WayInfoDTO {
+
+    @ApiModelProperty(value = "鍦扮偣鍚嶇О")
+    private String location;
+
+    @ApiModelProperty(value = "缁忓害")
+    private BigDecimal lat;
+
+    @ApiModelProperty(value = "绾害")
+    private BigDecimal lgt;
+
+    @ApiModelProperty(value = "鐪�")
+    private String province;
+
+    @ApiModelProperty(value = "甯�")
+    private String city;
+
+    @ApiModelProperty(value = "鍖哄幙")
+    private String area;
+
+
+}
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 9aac0f9..c690a4c 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
@@ -1,8 +1,15 @@
 package com.doumee.service.business;
 
+import com.doumee.core.model.LoginUserInfo;
 import com.doumee.core.model.PageData;
 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 java.util.List;
 
 /**
@@ -18,7 +25,7 @@
      * @param orders 瀹炰綋瀵硅薄
      * @return Integer
      */
-    Integer create(Orders orders);
+    Object create(Orders orders);
 
     /**
      * 涓婚敭鍒犻櫎
@@ -94,4 +101,29 @@
      * @return long
      */
     long count(Orders orders);
+
+    void accept(Integer orderId, Member member);
+
+    void begin(Integer orderId,Member member);
+
+    void updOrderData(UpdOrderDataDTO updOrderDataDTO);
+
+    void confirmUpd(ConfirmUpdOrderDTO confirmUpdOrderDTO);
+
+    void releaseCancelOrder(Integer orderId,Member member);
+
+    void receiveCancelOrder(Integer orderId,Member member);
+
+    Object doneOrder(DoneOrderDTO doneOrderDTO);
+
+    void comment(CommentDTO commentDTO);
+
+    /**
+     * 鏀粯鍥炶皟涓氬姟
+     * @param preOrderId
+     * @return
+     */
+    String payNotify(String preOrderId,String paymentNo);
+
+    void platformCancel(Integer orderId, LoginUserInfo loginUserInfo);
 }
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 73c6b13..50586b7 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
@@ -1,26 +1,44 @@
 package com.doumee.service.business.impl;
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.config.wx.WxMiniConfig;
+import com.doumee.config.wx.WxMiniUtilService;
 import com.doumee.core.constants.Constants;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
+import com.doumee.core.model.LoginUserInfo;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.DateUtil;
 import com.doumee.core.utils.Utils;
-import com.doumee.dao.business.OrdersMapper;
-import com.doumee.dao.business.model.Orders;
+import com.doumee.dao.business.*;
+import com.doumee.dao.business.model.*;
+import com.doumee.dao.dto.*;
 import com.doumee.service.business.OrdersService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.wechat.pay.java.service.partnerpayments.jsapi.model.Amount;
+import com.wechat.pay.java.service.partnerpayments.jsapi.model.Payer;
+import com.wechat.pay.java.service.partnerpayments.jsapi.model.PrepayRequest;
+import com.wechat.pay.java.service.partnerpayments.jsapi.model.PrepayWithRequestPaymentResponse;
 import jodd.util.StringUtil;
+import org.apache.poi.sl.image.ImageHeaderEMF;
+import org.checkerframework.checker.units.qual.A;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 
+import java.math.BigDecimal;
+import java.util.Date;
 import java.util.List;
 import java.util.Objects;
+import java.util.UUID;
 
 /**
  * 璁㈠崟淇℃伅璁板綍Service瀹炵幇
@@ -33,13 +51,139 @@
     @Autowired
     private OrdersMapper ordersMapper;
 
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
+
+    @Autowired
+    private CategoryMapper categoryMapper;
+
+    @Autowired
+    private MultifileMapper multifileMapper;
+
+    @Autowired
+    private OrderLogMapper orderLogMapper;
+
+    @Autowired
+    private MemberMapper memberMapper;
+
+    @Autowired
+    private MemberRevenueMapper memberRevenueMapper;
+
+    @Autowired
+    private WxMiniUtilService wxMiniUtilService;
+
     @Override
-    public Integer create(Orders orders) {
+    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
+    public Object create(Orders orders) {
+        Object objects = null;
+        this.initVerification(orders);
+        orders.setCreateTime(new Date());
+        orders.setPayStatus(Constants.ZERO);
+        //TODO 璁㈠崟缂栧彿瑙勫垯
 
-
+        Category category = categoryMapper.selectOne(new QueryWrapper<Category>().lambda()
+                .eq(Category::getDeleted,Constants.ZERO).eq(Category::getType,Constants.THREE)
+                .eq(Category::getName,orders.getType())
+                .last("limit 1")
+        );
+        if(Objects.isNull(category)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鍙傛暟閰嶇疆閿欒,璇疯仈绯荤鐞嗗憳");
+        }
+        //鐢ㄩ璁㈠崟
+        if(Constants.equalsInteger(orders.getType(),Constants.TWO)){
+            orders.setStatus(Constants.ZERO);
+            //鍞よ捣鏀粯涓氬姟
+            objects = this.getWxPayResponse(orders,orders.getMember().getOpenid());
+        }else{
+            orders.setStatus(Constants.ONE);
+        }
         ordersMapper.insert(orders);
-        return orders.getId();
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(orders.getMultifileList())){
+            List<Multifile> multifileList = orders.getMultifileList();
+            for (Multifile multifile:multifileList) {
+                if(Objects.isNull(multifile)
+                || Objects.isNull(multifile.getObjType())
+                || StringUtils.isEmpty(multifile.getFileurl())
+                || StringUtils.isEmpty(multifile.getName())){
+                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"闄勪欢淇℃伅閿欒");
+                }
+                multifile.setIsdeleted(Constants.ZERO);
+                multifile.setCreateDate(new Date());
+                multifile.setObjId(orders.getId());
+                multifile.setObjType(Constants.ONE);
+            }
+            multifileMapper.insert(multifileList);
+        }
+        //鏇存柊鐢ㄦ埛鍙戝崟閲�
+        memberMapper.update(new UpdateWrapper<Member>().lambda().set(Member::getReceiveNum," (receive_num + 1 )").eq(Member::getId,orders.getMember().getId()));
+
+        //鍒涘缓鎿嶄綔鏃ュ織
+        Constants.OrdersLog ordersLog = Constants.OrdersLog.UPLOAD;
+        String orderTypeInfo = "鐢ㄥ伐鍗�";
+        if(!Constants.equalsInteger(orders.getType(),Constants.ZERO)){
+            orderTypeInfo =   Constants.equalsInteger(orders.getType(),Constants.ONE)?"鐢ㄨ溅鍗�":"閫侀鍗�";
+        }else{
+            if(Constants.equalsInteger(orders.getWorkType(),Constants.ZERO)){
+                orderTypeInfo = orderTypeInfo + "-閲囨憳宸�";
+            }else{
+                orderTypeInfo = orderTypeInfo + (Constants.equalsInteger(orders.getWorkType(),Constants.ONE)?"-鍒嗘嫞宸�":"-鍖呰宸�");
+            }
+        }
+        String logInfo = ordersLog.getInfo()
+                .replace("{param}",orderTypeInfo);
+        this.saveOrderLog(orders,ordersLog,
+                logInfo,orders.getReleaseMemberId(),null);
+        return objects;
     }
+
+    private Object getWxPayResponse(Orders orders,String openid){
+        Object response = null;
+        //璋冭捣鏀粯
+        PrepayRequest request = new PrepayRequest();
+        request.setAttach("createOrder");
+        request.setDescription("杩戝揩璁㈠崟鏀粯");
+        request.setSpMchid(WxMiniConfig.wxProperties.getMchId());
+        request.setSpAppid(WxMiniConfig.wxProperties.getAppId());
+        request.setSubMchid(WxMiniConfig.wxProperties.getSubMchId());
+        request.setSubAppid(WxMiniConfig.wxProperties.getSubAppId());
+        Payer payer = new Payer();
+        payer.setSubOpenid(openid);
+        request.setPayer(payer);
+        request.setOutTradeNo(orders.getCode());
+        request.setNotifyUrl(WxMiniConfig.wxProperties.getNotifyUrl());//杩欎釜鍥炶皟url蹇呴』鏄痟ttps寮�澶寸殑
+        Amount amount = new Amount();
+        amount.setTotal(orders.getEstimatedAccount().intValue());
+        request.setAmount(amount);
+//        PrepayResponse res = WxMiniConfig.wxPayService.prepay(request);
+        // 璺熶箣鍓嶄笅鍗曠ず渚嬩竴鏍凤紝濉厖棰勪笅鍗曞弬鏁�
+        PrepayWithRequestPaymentResponse resParam =  WxMiniConfig.jsapiExtService.prepayWithRequestPayment(request,WxMiniConfig.wxProperties.getSubAppId());
+        response =resParam;
+        return response;
+    }
+
+    /**
+     * 鏃ュ織淇℃伅
+     * @param orders 璁㈠崟淇℃伅
+     * @param ordersLog 璁㈠崟鏀寔鍒嗙被
+     * @param logInfo 鏃ュ織鍐呭
+     * @param memberId 绉诲姩绔搷浣滀汉
+     * @param userId 绯荤粺鎿嶄綔浜�
+     */
+    public void saveOrderLog(Orders orders,Constants.OrdersLog ordersLog,String logInfo,Integer memberId,Integer userId){
+        OrderLog orderLog = new OrderLog();
+        orderLog.setCreateTime(orders.getUpdateTime());
+        orderLog.setDeleted(Constants.ZERO);
+        orderLog.setOrderId(orders.getId());
+        orderLog.setTitle(ordersLog.getName());
+        orderLog.setLogInfo(logInfo);
+        orderLog.setObjType(ordersLog.getKey());
+        orderLog.setOrderStatus(orders.getStatus());
+        orderLog.setMemberId(memberId);
+        orderLog.setCreateUser(userId);
+        orderLog.setOptUserType(ordersLog.getUserType());
+        orderLogMapper.insert(orderLog);
+    }
+
 
 
 
@@ -53,22 +197,78 @@
                 || Objects.isNull(orders.getLat())
                 || Objects.isNull(orders.getLgt())
                 || Objects.isNull(orders.getCategoryId())
+                || Objects.isNull(orders.getTotalDays())
                 || (Constants.equalsInteger(orders.getType(),Constants.ZERO) && Objects.isNull(orders.getWorkType()))
                 || Objects.isNull(orders.getPriceNum1())
-                || (!( Constants.equalsInteger(orders.getType(),Constants.ZERO)
-                && Constants.equalsInteger(orders.getWorkType(),Constants.TWO) ) && Objects.isNull(orders.getPrice()) )
-                || ( Constants.equalsInteger(orders.getType(),Constants.ONE) && Objects.isNull(orders.getTransportTypeId()) )
-
+                || Objects.isNull(orders.getEstimatedAccount())
+                || Objects.isNull(orders.getPrice())
         ){
             throw new BusinessException(ResponseStatus.BAD_REQUEST);
         }
-
-        if(Constants.equalsInteger(orders.getType(),Constants.ONE)){
-
-
+        if((Constants.equalsInteger(orders.getType(),Constants.ZERO) && Constants.equalsInteger(orders.getWorkType(),Constants.ZERO ))
+                || (Constants.equalsInteger(orders.getType(),Constants.ZERO) && Constants.equalsInteger(orders.getWorkType(),Constants.TWO)
+                        &&Constants.equalsInteger(orders.getCarType(),Constants.TWO))
+                || Constants.equalsInteger(orders.getType(),Constants.ONE)
+        ){
+            orders.setPriceNum2(Constants.ONE);
         }
-
-
+        if(Objects.isNull(orders.getPriceNum2())){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        if(Constants.equalsInteger(orders.getType(),Constants.ZERO)){
+            if(Constants.equalsInteger(orders.getWorkType(),Constants.TWO)
+            && Objects.isNull(orders.getCarType())){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST);
+            }
+        }else if(Constants.equalsInteger(orders.getType(),Constants.ONE)){
+            if(Objects.isNull(orders.getTransportTypeId())
+                    || Objects.isNull(orders.getCarType())
+                    || Objects.isNull(orders.getTransportNum())
+                    || StringUtils.isEmpty(orders.getTransportUnit())
+                    || StringUtils.isEmpty(orders.getLocationEnd())
+                    || Objects.isNull(orders.getLatEnd())
+                    || Objects.isNull(orders.getLgtEnd())
+                    || CollectionUtils.isEmpty(orders.getWayInfoDTOList())
+            ){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST);
+            }
+            for (WayInfoDTO wayInfoDTO:orders.getWayInfoDTOList()) {
+                if(Objects.isNull(wayInfoDTO)
+                        ||StringUtils.isEmpty(wayInfoDTO.getLocation())
+                        ||StringUtils.isEmpty(wayInfoDTO.getProvince())
+                        ||StringUtils.isEmpty(wayInfoDTO.getCity())
+                        ||StringUtils.isEmpty(wayInfoDTO.getArea())
+                        ||Objects.isNull(wayInfoDTO.getLat())
+                        ||Objects.isNull(wayInfoDTO.getLgt())
+                ){
+                    throw new BusinessException(ResponseStatus.BAD_REQUEST);
+                }
+            }
+            orders.setWayInfo(JSONObject.toJSONString(orders.getWayInfoDTOList()));
+        }else{
+            //鐢ㄩ璁㈠崟
+            if(CollectionUtils.isEmpty(orders.getCateringDTOList())){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST);
+            }
+            Long sumPrice = 0L;
+            for (CateringDTO cateringDTO:orders.getCateringDTOList()) {
+                if(Objects.isNull(cateringDTO)
+                        || StringUtils.isEmpty(cateringDTO.getName())
+                        || Objects.isNull(cateringDTO.getPrice())
+                        || Objects.isNull(cateringDTO.getNum())
+                ){
+                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鐢ㄩ鏍囧噯鏁版嵁閿欒");
+                }
+                sumPrice = sumPrice + (cateringDTO.getPrice() * cateringDTO.getNum()) ;
+            }
+            if(!sumPrice.equals(orders.getPrice())){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍗曚环璁$畻閿欒");
+            }
+            orders.setWayInfo(JSONObject.toJSONString(orders.getCateringDTOList()));
+        }
+        if(!orders.getEstimatedAccount().equals(this.getTotal(orders))){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"閲戦璁$畻閿欒!");
+        }
     }
 
 
@@ -94,7 +294,47 @@
     }
 
     @Override
+    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
     public void updateById(Orders orders) {
+        if(Objects.isNull(orders)
+        || Objects.isNull(orders.getId())){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        Orders model = ordersMapper.selectById(orders.getId());
+        if(Constants.equalsInteger(model.getType(),Constants.TWO)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"姝ょ被璁㈠崟鏃犳硶杩涜淇敼");
+        }
+        if(!Constants.equalsInteger(model.getStatus(),Constants.ONE)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鐘舵�佸凡娴佽浆,鏃犳硶杩涜璇ユ搷浣�");
+        }
+        this.initVerification(orders);
+        orders.setUpdateTime(new Date());
+        Category category = categoryMapper.selectOne(new QueryWrapper<Category>().lambda()
+                .eq(Category::getDeleted,Constants.ZERO).eq(Category::getType,Constants.THREE)
+                .eq(Category::getName,orders.getType())
+                .last("limit 1")
+        );
+        if(Objects.isNull(category)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鍙傛暟閰嶇疆閿欒,璇疯仈绯荤鐞嗗憳");
+        }
+        multifileMapper.update(new UpdateWrapper<Multifile>().lambda().set(Multifile::getIsdeleted,Constants.ONE).eq(Multifile::getObjType,Constants.ONE)
+                .eq(Multifile::getObjId,orders.getId()));
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(orders.getMultifileList())){
+            List<Multifile> multifileList = orders.getMultifileList();
+            for (Multifile multifile:multifileList) {
+                if(Objects.isNull(multifile)
+                        || Objects.isNull(multifile.getObjType())
+                        || StringUtils.isEmpty(multifile.getFileurl())
+                        || StringUtils.isEmpty(multifile.getName())){
+                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"闄勪欢淇℃伅閿欒");
+                }
+                multifile.setIsdeleted(Constants.ZERO);
+                multifile.setCreateDate(new Date());
+                multifile.setObjId(orders.getId());
+                multifile.setObjType(Constants.ONE);
+            }
+            multifileMapper.insert(multifileList);
+        }
         ordersMapper.updateById(orders);
     }
 
@@ -212,9 +452,6 @@
         if (pageWrap.getModel().getPayAccount() != null) {
             queryWrapper.lambda().eq(Orders::getPayAccount, pageWrap.getModel().getPayAccount());
         }
-        if (pageWrap.getModel().getPriceRemark() != null) {
-            queryWrapper.lambda().eq(Orders::getPriceRemark, pageWrap.getModel().getPriceRemark());
-        }
         if (pageWrap.getModel().getCarType() != null) {
             queryWrapper.lambda().eq(Orders::getCarType, pageWrap.getModel().getCarType());
         }
@@ -307,4 +544,593 @@
         QueryWrapper<Orders> wrapper = new QueryWrapper<>(orders);
         return ordersMapper.selectCount(wrapper);
     }
+
+
+    /**
+     * 鎵嬪姩鎺ュ崟
+     * @param orderId
+     */
+    @Override
+    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
+    public void accept(Integer orderId,Member member){
+        Orders orders = ordersMapper.selectById(orderId);
+        if(Objects.isNull(orders)||Constants.equalsInteger(orders.getDeleted(),Constants.ONE)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        if(!Constants.equalsInteger(orders.getStatus(),Constants.ONE)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鐘舵�佸凡娴佽浆,鏃犳硶杩涜璇ユ搷浣�");
+        }
+        if(Constants.equalsInteger(orders.getReleaseMemberId(),member.getId())){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎮ㄨ嚜宸辩殑璁㈠崟鏃犳硶杩涜璇ユ搷浣�");
+        }
+        //鏌ヨ鐢ㄦ埛鏄惁鏈夊搴旇韩浠�
+        if(Constants.equalsInteger(orders.getType(),Constants.ZERO)){
+            if(!Constants.equalsInteger(member.getWorkerIdentity(),Constants.TWO)){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"韬唤淇℃伅寮傚父锛岃鑱旂郴绠$悊鍛�");
+            }
+        }else if(Constants.equalsInteger(orders.getType(),Constants.ONE)){
+            if(!Constants.equalsInteger(member.getDriverIdentity(),Constants.TWO)){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"韬唤淇℃伅寮傚父锛岃鑱旂郴绠$悊鍛�");
+            }
+        }else{
+            if(!Constants.equalsInteger(member.getChefIdentity(),Constants.TWO)){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"韬唤淇℃伅寮傚父锛岃鑱旂郴绠$悊鍛�");
+            }
+        }
+        orders.setUpdateTime(new Date());
+        orders.setAcceptType(Constants.ZERO);
+        orders.setAcceptTime(new Date());
+        orders.setAcceptMemberId(member.getId());
+        orders.setStatus(Constants.TWO);
+        ordersMapper.updateById(orders);
+        //鏇存柊鎺ュ崟閲�
+        memberMapper.update(new UpdateWrapper<Member>().lambda().set(Member::getPublishNum," (publish_num + 1 )").eq(Member::getId,member.getId()));
+
+        //鍒涘缓鎿嶄綔鏃ュ織
+        Constants.OrdersLog ordersLog = Constants.OrdersLog.RECEIVE;
+        this.saveOrderLog(orders,ordersLog,
+                ordersLog.getInfo(),member.getId(),null);
+
+        //TODO 寰俊鍏紬鍙锋彁閱� 宸叉帴鍗曟彁閱�
+
+
+
+    }
+
+
+    /**
+     * 寮�濮嬩綔涓�
+     * @param orderId
+     * @param member
+     */
+    @Override
+    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
+    public void begin(Integer orderId,Member member){
+        Orders orders = ordersMapper.selectById(orderId);
+        if(Objects.isNull(orders)||Constants.equalsInteger(orders.getDeleted(),Constants.ONE)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        if(!Constants.equalsInteger(orders.getStatus(),Constants.TWO)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鐘舵�佸凡娴佽浆,鏃犳硶杩涜璇ユ搷浣�");
+        }
+        if(Constants.equalsInteger(orders.getReleaseMemberId(),member.getId())){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炴偍鐨勮鍗曟棤娉曡繘琛岃鎿嶄綔");
+        }
+        if(Constants.equalsInteger(orders.getIsUpdate(),Constants.ONE)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟淇敼寰呯‘璁わ紝鏃犳硶杩涜璇ユ搷浣�");
+        }
+        orders.setUpdateTime(new Date());
+        orders.setStatus(Constants.THREE);
+        orders.setWorkStartTime(new Date());
+        ordersMapper.updateById(orders);
+
+        //鍒涘缓鎿嶄綔鏃ュ織
+        Constants.OrdersLog ordersLog = Constants.OrdersLog.BEGIN;
+        this.saveOrderLog(orders,ordersLog,
+                ordersLog.getInfo(),member.getId(),null);
+    }
+
+
+    /**
+     * 鍙戝崟鏂逛慨鏀硅鍗� - 宸叉帴鍗曠姸鎬�
+     * @param updOrderDataDTO
+     */
+    @Override
+    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
+    public void updOrderData(UpdOrderDataDTO updOrderDataDTO){
+        if(Objects.isNull(updOrderDataDTO)
+            || Objects.isNull(updOrderDataDTO.getOrderId())
+            || Objects.isNull(updOrderDataDTO.getStartDate())
+            || Objects.isNull(updOrderDataDTO.getEndDate())
+            || Objects.isNull(updOrderDataDTO.getTotalDays())){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        Orders orders = ordersMapper.selectById(updOrderDataDTO.getOrderId());
+        if(Objects.isNull(orders)||Constants.equalsInteger(orders.getDeleted(),Constants.ONE)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        if(!Constants.equalsInteger(orders.getStatus(),Constants.TWO)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鐘舵�佸凡娴佽浆,鏃犳硶杩涜璇ユ搷浣�");
+        }
+        if(Constants.equalsInteger(orders.getReleaseMemberId(),updOrderDataDTO.getMember().getId())){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炴偍鐨勮鍗曟棤娉曡繘琛岃鎿嶄綔");
+        }
+        if(Constants.equalsInteger(orders.getIsUpdate(),Constants.ONE)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟宸蹭慨鏀癸紝寰呮帴鍗曟柟纭锛屾棤娉曡繘琛岃鎿嶄綔");
+        }
+        orders.setStartDate(updOrderDataDTO.getStartDate());
+        orders.setEndDate(updOrderDataDTO.getEndDate());
+        orders.setTotalDays(updOrderDataDTO.getTotalDays());
+        //鐢ㄨ溅绫诲瀷
+        if(Constants.equalsInteger(orders.getType(),Constants.ONE)){
+            if(Constants.equalsInteger(orders.getCarType(),Constants.ZERO)) {
+                orders.setPriceNum1(updOrderDataDTO.getTotalDays());
+            }
+        }else if(Constants.equalsInteger(orders.getType(),Constants.ZERO)){
+            if(Constants.equalsInteger(orders.getWorkType(),Constants.ONE)||(Constants.equalsInteger(orders.getWorkType(),Constants.TWO)&&Constants.equalsInteger(orders.getCarType(),Constants.ZERO))){
+                orders.setPriceNum1(updOrderDataDTO.getTotalDays());
+            }
+        }else{
+            orders.setPriceNum1(updOrderDataDTO.getTotalDays());
+        }
+        Long total = this.getTotal(orders);
+        ordersMapper.update(new UpdateWrapper<Orders>().lambda()
+                .set(Orders::getStartDate,updOrderDataDTO.getStartDate())
+                .set(Orders::getEndDate,updOrderDataDTO.getEndDate())
+                .set(Orders::getTotalDays,updOrderDataDTO.getTotalDays())
+                .set(Orders::getIsUpdate,Constants.ONE)
+                .set(Orders::getUpdateTime,"now()")
+                .set(Orders::getEstimatedAccount,total)
+                .eq(Orders::getId,orders.getId())
+        );
+        //鍒涘缓鎿嶄綔鏃ュ織
+        Constants.OrdersLog ordersLog = Constants.OrdersLog.UPD_ORDER;
+        this.saveOrderLog(orders,ordersLog,
+                ordersLog.getInfo(),updOrderDataDTO.getMember().getId(),null);
+
+        //TODO 閫氱煡鎺ュ崟浜� 璁㈠崟鍙戠敓鍙樻洿
+    }
+
+
+    public Long getTotal(Orders orders){
+        if(
+            (Constants.equalsInteger(orders.getType(),Constants.ZERO) && Constants.equalsInteger(orders.getWorkType(),Constants.ZERO )) ||
+                    (Constants.equalsInteger(orders.getType(),Constants.ZERO) && Constants.equalsInteger(orders.getWorkType(),Constants.TWO)
+                            &&Constants.equalsInteger(orders.getCarType(),Constants.TWO))
+            || Constants.equalsInteger(orders.getType(),Constants.ONE)
+        ){
+            orders.setPriceNum2(Constants.ONE);
+        }
+        return orders.getPrice() * orders.getPriceNum1() * orders.getPriceNum2();
+    }
+
+
+    /**
+     * 鎺ュ崟鏂瑰鐞嗚鍗曚慨鏀�
+     * @param confirmUpdOrderDTO
+     */
+    @Override
+    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
+    public void confirmUpd(ConfirmUpdOrderDTO confirmUpdOrderDTO){
+        if(Objects.isNull(confirmUpdOrderDTO)
+                || Objects.isNull(confirmUpdOrderDTO.getOrderId())
+                || Objects.isNull(confirmUpdOrderDTO.getStatus())
+                || !(Constants.equalsInteger(confirmUpdOrderDTO.getStatus(),Constants.ONE)||
+                Constants.equalsInteger(confirmUpdOrderDTO.getStatus(),Constants.ZERO))
+        ){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        Orders orders = ordersMapper.selectById(confirmUpdOrderDTO.getOrderId());
+        if(Objects.isNull(orders)||Constants.equalsInteger(orders.getDeleted(),Constants.ONE)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        if(!Constants.equalsInteger(orders.getStatus(),Constants.TWO)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鐘舵�佸凡娴佽浆,鏃犳硶杩涜璇ユ搷浣�");
+        }
+        if(!Constants.equalsInteger(orders.getIsUpdate(),Constants.ONE)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟淇敼鐘舵�佸凡娴佽浆锛屾棤娉曡繘琛岃鎿嶄綔");
+        }
+        if(Constants.equalsInteger(orders.getAcceptMemberId(),confirmUpdOrderDTO.getMember().getId())){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炴偍鐨勮鍗曟棤娉曡繘琛岃鎿嶄綔");
+        }
+        if( Constants.equalsInteger(confirmUpdOrderDTO.getStatus(),Constants.ONE)){
+            ordersMapper.update(new UpdateWrapper<Orders>().lambda()
+                    .set(Orders::getIsUpdate,Constants.TWO)
+                    .set(Orders::getUpdateTime,"now()")
+                    .eq(Orders::getId,orders.getId())
+            );
+            //璁板綍鍚屾剰淇敼鐨勬棩蹇�
+            Constants.OrdersLog ordersLog = Constants.OrdersLog.UPD_AGREE;
+            this.saveOrderLog(orders,ordersLog,
+                    ordersLog.getInfo(),confirmUpdOrderDTO.getMember().getId(),null);
+        }else{
+            ordersMapper.update(new UpdateWrapper<Orders>().lambda()
+                    .set(Orders::getIsUpdate,Constants.TWO)
+                    .set(Orders::getUpdateTime,"now()")
+                    .set(Orders::getStatus,Constants.ONE)
+                    .set(Orders::getAcceptMemberId,null)
+                    .set(Orders::getAcceptType,null)
+                    .eq(Orders::getId,orders.getId())
+            );
+
+            memberMapper.update(new UpdateWrapper<Member>().lambda().set(Member::getReceiveNum,"receive_num - 1").eq(Member::getId,confirmUpdOrderDTO.getMember().getId()));
+
+            //璁板綍涓嶅悓鎰忎慨鏀圭殑鏃ュ織
+            Constants.OrdersLog ordersLog = Constants.OrdersLog.UPD_DISAGREE;
+            this.saveOrderLog(orders,ordersLog,
+                    ordersLog.getInfo(),confirmUpdOrderDTO.getMember().getId(),null);
+
+            //TODO 鍙戦�佷笉鍚屾剰鍙樻洿閫氱煡
+
+        }
+    }
+
+
+    /**
+     * 鍙戝崟鏂瑰彇娑堣鍗�
+     * @param orderId
+     * @param member
+     */
+    @Override
+    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
+    public void releaseCancelOrder(Integer orderId,Member member){
+        Orders orders = ordersMapper.selectById(orderId);
+        if(Objects.isNull(orders)||Constants.equalsInteger(orders.getDeleted(),Constants.ONE)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        if(!(Constants.equalsInteger(orders.getStatus(),Constants.ONE)
+                ||Constants.equalsInteger(orders.getStatus(),Constants.ZERO)
+        || Constants.equalsInteger(orders.getStatus(),Constants.TWO))){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鐘舵�佸凡娴佽浆,鏃犳硶杩涜鍙栨秷");
+        }
+        if(Constants.equalsInteger(orders.getReleaseMemberId(),member.getId())){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炴偍鐨勮鍗曟棤娉曡繘琛岃鎿嶄綔");
+        }
+        //寰呮敮浠樼敤椁愯鍗�/寰呮帴鍗曡鍗曡繘琛屽彇娑�
+        if(Constants.equalsInteger(orders.getStatus(),Constants.ONE)
+                ||Constants.equalsInteger(orders.getStatus(),Constants.ZERO)){
+            if(Constants.equalsInteger(orders.getType(),Constants.TWO)&&Constants.equalsInteger(orders.getStatus(),Constants.ONE)){
+                //閫�娆句笟鍔�
+                WithdrawalOrders  withdrawalOrders = new WithdrawalOrders();
+                withdrawalOrders.setCreateTime(new Date());
+                withdrawalOrders.setMemberId(orders.getReleaseMemberId());
+                withdrawalOrders.setAmount(orders.getPayAccount());
+                withdrawalOrders.setWxExternalNo("refund_"+orders.getCode());
+                withdrawalOrders.setStatus(Constants.ONE);
+                withdrawalOrders.setDoneTime(new Date());
+                withdrawalOrders.setType(Constants.ONE);
+                withdrawalOrders.setObjId(orders.getId());
+                wxMiniUtilService.wxRefund(withdrawalOrders,orders);
+            }
+            ordersMapper.update(new UpdateWrapper<Orders>().lambda()
+                    .set(Orders::getStatus,99)
+                    .set(Orders::getUpdateTime,"now()")
+                    .set(Orders::getCancelTime,"now()")
+                    .set(Orders::getCancelType,Constants.ZERO)
+                    .eq(Orders::getId,orders.getId())
+            );
+        }else{
+            //鍒ゆ柇鏄惁鍙慨鏀� 宸插彇娑堟鏁� 涓� 鏃堕棿闄愬埗
+            Integer totalCancelTimes = Integer.valueOf(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RELEASE_CANCEL_TIMES).getCode());
+            Long cancelTimes = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda()
+                    .apply(" DATE(cancel_time) = DATE(NOW()) ")
+                    .eq(Orders::getStatus,99)
+                    .eq(Orders::getReleaseMemberId,orders.getReleaseMemberId()));
+            //鏌ヨ鍙栨秷娆℃暟
+            if(totalCancelTimes<=cancelTimes){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"浠婃棩璁㈠崟涓诲姩鍙栨秷娆℃暟宸茶秴鍑�"+totalCancelTimes+"娆�,鏃犳硶鍙栨秷璁㈠崟,濡傞渶澶勭悊璇疯仈绯诲鏈�");
+            }
+
+            Integer cancelTimeHour = Integer.valueOf(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RELEASE_CANCEL_TIME).getCode());
+            Long hours = DateUtil.getBetweenHours(new Date(),orders.getStartDate());
+            if(hours < cancelTimeHour){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璺濈璁㈠崟寮�濮嬫椂闂翠笉瓒�"+cancelTimeHour+"灏忔椂,鏃犳硶鍙栨秷璁㈠崟锛屽闇�澶勭悊璇疯仈绯诲鏈�");
+            }
+
+            if(Constants.equalsInteger(orders.getType(),Constants.TWO)){
+                //閫�娆句笟鍔�
+                WithdrawalOrders  withdrawalOrders = new WithdrawalOrders();
+                withdrawalOrders.setCreateTime(new Date());
+                withdrawalOrders.setMemberId(orders.getReleaseMemberId());
+                withdrawalOrders.setAmount(orders.getPayAccount());
+                withdrawalOrders.setWxExternalNo("refund_"+orders.getCode());
+                withdrawalOrders.setStatus(Constants.ONE);
+                withdrawalOrders.setDoneTime(new Date());
+                withdrawalOrders.setType(Constants.ONE);
+                withdrawalOrders.setObjId(orders.getId());
+                wxMiniUtilService.wxRefund(withdrawalOrders,orders);
+            }
+            ordersMapper.update(new UpdateWrapper<Orders>().lambda()
+                    .set(Orders::getStatus,99)
+                    .set(Orders::getUpdateTime,"now()")
+                    .set(Orders::getCancelTime,"now()")
+                    .set(Orders::getCancelType,Constants.ONE)
+                    .eq(Orders::getId,orders.getId())
+            );
+            //TODO 鍙戝崟鏂瑰彇娑堣鍗曢�氱煡鎺ュ崟鏂�
+
+            //鍑忓皯鎺ュ崟閲�
+            memberMapper.update(new UpdateWrapper<Member>().lambda().set(Member::getReceiveNum,"receive_num - 1").eq(Member::getId,orders.getAcceptMemberId()));
+        }
+        //鍑忓皯鍙戝崟閲�
+        memberMapper.update(new UpdateWrapper<Member>().lambda().set(Member::getPublishNum,"publish_num - 1").eq(Member::getId,orders.getReleaseMemberId()));
+
+        //鏃ュ織瀛樺偍
+        Constants.OrdersLog ordersLog = Constants.OrdersLog.RELEASE_CANCEL;
+        this.saveOrderLog(orders,ordersLog,
+                ordersLog.getInfo(),member.getId(),null);
+    }
+
+
+    /**
+     * 鎺ュ崟鏂瑰彇娑堟帴鍗�
+     * @param orderId
+     * @param member
+     */
+    @Override
+    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
+    public void receiveCancelOrder(Integer orderId,Member member){
+        Orders orders = ordersMapper.selectById(orderId);
+        if(Objects.isNull(orders)||Constants.equalsInteger(orders.getDeleted(),Constants.ONE)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        if(!Constants.equalsInteger(orders.getStatus(),Constants.TWO)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鐘舵�佸凡娴佽浆,鏃犳硶杩涜鍙栨秷");
+        }
+        if(Constants.equalsInteger(orders.getAcceptMemberId(),member.getId())){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炴偍鐨勮鍗曟棤娉曡繘琛岃鎿嶄綔");
+        }
+        //鍒ゆ柇鏄惁鍙慨鏀� 宸插彇娑堟鏁� 涓� 鏃堕棿闄愬埗
+        Integer totalCancelTimes = Integer.valueOf(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RECEIVE_CANCEL_TIMES).getCode());
+        Long cancelTimes = orderLogMapper.selectCount(new QueryWrapper<OrderLog>().lambda()
+                .apply(" DATE(create_time) = DATE(NOW()) ")
+                .eq(OrderLog::getObjType,Constants.OrdersLog.CANCEL.getKey())
+                .eq(OrderLog::getMemberId,member.getId()));
+        //鏌ヨ鍙栨秷娆℃暟
+        if(totalCancelTimes<=cancelTimes){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"浠婃棩璁㈠崟涓诲姩鍙栨秷娆℃暟宸茶秴鍑�"+totalCancelTimes+"娆�,鏃犳硶鍙栨秷璁㈠崟,濡傞渶澶勭悊璇疯仈绯诲鏈�");
+        }
+
+        Integer cancelTimeHour = Integer.valueOf(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RECEIVE_CANCEL_TIME).getCode());
+        Long hours = DateUtil.getBetweenHours(new Date(),orders.getStartDate());
+        if(hours < cancelTimeHour){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璺濈璁㈠崟寮�濮嬫椂闂翠笉瓒�"+cancelTimeHour+"灏忔椂,鏃犳硶鍙栨秷璁㈠崟锛屽闇�澶勭悊璇疯仈绯诲鏈�");
+        }
+        ordersMapper.update(new UpdateWrapper<Orders>().lambda()
+                .set(Orders::getUpdateTime,"now()")
+                .set(Orders::getStatus,Constants.ONE)
+                .set(Orders::getAcceptMemberId,null)
+                .set(Orders::getAcceptType,null)
+                .eq(Orders::getId,orders.getId())
+        );
+
+        //鍑忓皯鎺ュ崟閲�
+        memberMapper.update(new UpdateWrapper<Member>().lambda().set(Member::getReceiveNum,"receive_num - 1").eq(Member::getId,orders.getAcceptMemberId()));
+        //鏃ュ織瀛樺偍
+        Constants.OrdersLog ordersLog = Constants.OrdersLog.CANCEL;
+        this.saveOrderLog(orders,ordersLog,
+                ordersLog.getInfo(),member.getId(),null);
+
+        //TODO 鎺ュ崟鏂瑰彇娑堣鍗曢�氱煡
+
+    }
+
+
+    /**
+     * 瀹屾垚璁㈠崟
+     * @param doneOrderDTO
+     */
+    @Override
+    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
+    public Object doneOrder(DoneOrderDTO doneOrderDTO){
+        if(Objects.isNull(doneOrderDTO)||Objects.isNull(doneOrderDTO.getOrderId())){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        Orders orders = ordersMapper.selectById(doneOrderDTO.getOrderId());
+        if(!Constants.equalsInteger(orders.getType(),Constants.TWO)&&Objects.isNull(doneOrderDTO.getAmount())){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        if(Objects.isNull(orders)||Constants.equalsInteger(orders.getDeleted(),Constants.ONE)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        if(!Constants.equalsInteger(orders.getStatus(),Constants.THREE)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鐘舵�佸凡娴佽浆,鏃犳硶杩涜鍙栨秷");
+        }
+        if(Constants.equalsInteger(orders.getReleaseMemberId(),doneOrderDTO.getMember().getId())){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炴偍鐨勮鍗曟棤娉曡繘琛岃鎿嶄綔");
+        }
+        Object object = null;
+        //鐢ㄩ璁㈠崟
+        if(!Constants.equalsInteger(orders.getType(),Constants.TWO)){
+            orders.setPayAccount(doneOrderDTO.getAmount());
+            //鎻愭垚閲戦
+            Long tcje = Long.valueOf(new BigDecimal(orders.getPayAccount().toString()).multiply(orders.getPlatformRata()).intValue());
+            orders.setReceiveAccount(orders.getPayAccount() - tcje);
+            ordersMapper.updateById(orders);
+            //鍞よ捣鏀粯涓氬姟
+            object = this.getWxPayResponse(orders,orders.getMember().getOpenid());
+        }else{
+            orders.setStatus(Constants.FOUR);
+            //鏃ュ織瀛樺偍
+            Constants.OrdersLog ordersLog = Constants.OrdersLog.DONE;
+            this.saveOrderLog(orders,ordersLog,
+                    ordersLog.getInfo(),doneOrderDTO.getMember().getId(),null);
+        }
+        return object;
+    }
+
+
+
+
+    @Override
+    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
+    public void platformCancel(Integer orderId, LoginUserInfo loginUserInfo){
+        Orders orders = ordersMapper.selectById(orderId);
+        if(Objects.isNull(orders)||Constants.equalsInteger(orders.getDeleted(),Constants.ONE)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        if(!(Constants.equalsInteger(orders.getStatus(),Constants.ONE)||Constants.equalsInteger(orders.getStatus(),Constants.TWO)
+            ||Constants.equalsInteger(orders.getStatus(),Constants.THREE))){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鐘舵�佸凡娴佽浆,鏃犳硶杩涜鍙栨秷");
+        }
+        //濡傛灉宸叉敮浠� 鍒欓渶瑕佽繘琛岄��娆�
+        if(Constants.equalsInteger(orders.getPayStatus(),Constants.ONE)){
+            WithdrawalOrders  withdrawalOrders = new WithdrawalOrders();
+            withdrawalOrders.setCreateTime(new Date());
+            withdrawalOrders.setMemberId(orders.getReleaseMemberId());
+            withdrawalOrders.setAmount(orders.getPayAccount());
+            withdrawalOrders.setWxExternalNo("refund_"+orders.getCode());
+            withdrawalOrders.setStatus(Constants.ONE);
+            withdrawalOrders.setDoneTime(new Date());
+            withdrawalOrders.setType(Constants.ONE);
+            withdrawalOrders.setObjId(orders.getId());
+            wxMiniUtilService.wxRefund(withdrawalOrders,orders);
+        }
+
+        //鍑忓皯鍙戝崟閲�
+        memberMapper.update(new UpdateWrapper<Member>().lambda().set(Member::getPublishNum,"publish_num - 1").eq(Member::getId,orders.getReleaseMemberId()));
+
+        if(Constants.equalsInteger(orders.getStatus(),Constants.TWO)||Constants.equalsInteger(orders.getStatus(),Constants.THREE)){
+            //鍑忓皯鎺ュ崟閲�
+            memberMapper.update(new UpdateWrapper<Member>().lambda().set(Member::getReceiveNum,"receive_num - 1").eq(Member::getId,orders.getAcceptMemberId()));
+        }
+
+        ordersMapper.update(new UpdateWrapper<Orders>().lambda()
+                .set(Orders::getStatus,99)
+                .set(Orders::getUpdateTime,"now()")
+                .set(Orders::getCancelTime,"now()")
+                .set(Orders::getCancelType,Constants.TWO)
+                .eq(Orders::getId,orders.getId())
+        );
+
+        //鏃ュ織瀛樺偍
+        Constants.OrdersLog ordersLog = Constants.OrdersLog.SYSTEM_CANCEL;
+        this.saveOrderLog(orders,ordersLog,
+                ordersLog.getInfo(),null,loginUserInfo.getId());
+    }
+
+
+
+
+    @Override
+    public void comment(CommentDTO commentDTO){
+        if(Objects.isNull(commentDTO)
+        || Objects.isNull(commentDTO.getOrderId())
+        || Objects.isNull(commentDTO.getLevel())
+        || commentDTO.getLevel()<1 || commentDTO.getLevel() > 5 ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        Orders orders = ordersMapper.selectById(commentDTO.getOrderId());
+        if(Objects.isNull(orders)
+                ||Constants.equalsInteger(orders.getDeleted(),Constants.ONE)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        if(!Constants.equalsInteger(orders.getStatus(),Constants.FOUR)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鐘舵�佸凡娴佽浆,鏃犳硶杩涜璇勪环");
+        }
+        if(Constants.equalsInteger(orders.getCommentStatus(),Constants.ONE)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟宸茶瘎浠凤紒");
+        }
+
+        ordersMapper.update(new UpdateWrapper<Orders>().lambda()
+                .set(Orders::getCommentStatus,Constants.ONE)
+                .set(Orders::getUpdateTime,"now()")
+                .set(Orders::getCommentTime,"now()")
+                .set(Orders::getCommentLevel,commentDTO.getLevel())
+                .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);
+    }
+
+
+
+
+    /**
+     * 鏀粯鍥炶皟
+     * @param preOrderId
+     * @param paymentNo
+     * @return
+     */
+    @Override
+    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
+    public String payNotify(String preOrderId,String paymentNo){
+        Orders orders = ordersMapper.selectOne(new QueryWrapper<Orders>().lambda().eq(Orders::getCode,preOrderId).last("limit 1"));
+        if(Constants.equalsInteger(orders.getType(),Constants.TWO)){
+            //鐢ㄩ璁㈠崟  濡傛灉宸茬粡娴佽浆鍒板凡鏀粯  鍒欑洿鎺ヨ繑鍥�
+            if(!Constants.equalsInteger(orders.getStatus(),Constants.ZERO)){
+                return  ("澶勭悊鎴愬姛!");
+            }else{
+                //澶勭悊鏀粯瀹屾垚閫昏緫
+                ordersMapper.update(new UpdateWrapper<Orders>().lambda()
+                        .set(Orders::getUpdateTime,"now()")
+                        .set(Orders::getStatus,Constants.ONE)
+                        .set(Orders::getPayStatus,Constants.ONE)
+                        .set(Orders::getWxExternalNo,paymentNo)
+                        .eq(Orders::getId,orders.getId())
+                );
+
+                //瀛樺偍鏃ュ織
+                Constants.OrdersLog ordersLog = Constants.OrdersLog.PAY;
+                this.saveOrderLog(orders,ordersLog,
+                        ordersLog.getInfo(),orders.getReleaseMemberId(),null);
+            }
+        }else{
+            //闈炵敤椁愮被璁㈠崟
+            if(!Constants.equalsInteger(orders.getStatus(),Constants.THREE)){
+                return  ("澶勭悊鎴愬姛!");
+            }else{
+                //澶勭悊鏀粯瀹屾垚閫昏緫
+                ordersMapper.update(new UpdateWrapper<Orders>().lambda()
+                        .set(Orders::getUpdateTime,"now()")
+                        .set(Orders::getStatus,Constants.FOUR)
+                        .set(Orders::getPayStatus,Constants.ONE)
+                        .set(Orders::getWxExternalNo,paymentNo)
+                        .set(Orders::getFinishTime,"now()")
+                        .eq(Orders::getId,orders.getId())
+                );
+
+                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());
+                memberRevenue.setObjId(orders.getId());
+                memberRevenue.setObjType(Constants.ZERO);
+                memberRevenue.setStatus(Constants.ZERO);
+                memberRevenueMapper.insert(memberRevenue);
+
+                //鏇存柊鎺ュ崟鐢ㄦ埛鐨勪綑棰濅笌鍘嗗彶鎬婚噾棰�
+                memberMapper.update(new UpdateWrapper<Member>().lambda()
+                        .set(Member::getAmount,"amount + " + orders.getReceiveAccount() )
+                        .set(Member::getTotalAmount,"amount + " + orders.getReceiveAccount() )
+                        .eq(Member::getId,member.getId())
+                );
+
+                //瀛樺偍鏃ュ織
+                Constants.OrdersLog ordersLog = Constants.OrdersLog.PAY;
+                this.saveOrderLog(orders,ordersLog,
+                        ordersLog.getInfo(),orders.getReleaseMemberId(),null);
+
+                //TODO 閫氱煡鎺ュ崟鏂� 娆鹃」宸插埌璐�
+            }
+        }
+        return  ("澶勭悊鎴愬姛!");
+    }
+
 }
diff --git a/server/services/src/main/resources/application-dev.yml b/server/services/src/main/resources/application-dev.yml
index 3c673e9..0f36468 100644
--- a/server/services/src/main/resources/application-dev.yml
+++ b/server/services/src/main/resources/application-dev.yml
@@ -80,6 +80,37 @@
     privateKey:  # RSA绉侀挜
     time: 600000
 
+########################寰俊鏀粯鐩稿叧閰嶇疆########################
+wx:
+  pay:
+    #鏈嶅姟鍟�---------start-------
+    appId: wx48fd8faa35cc8277
+    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
+    #keyPath: /usr/local/aliConfig/bike/apiclient_cert.p12
+    #privateCertPath: /usr/local/aliConfig/bike/apiclient_cert.pem
+    #privateKeyPath: /usr/local/aliConfig/bike/apiclient_key.pem
+    #    keyPath: d://apiclient_cert.p12
+    #    privateCertPath: d://apiclient_cert.pem
+    #    privateKeyPath: d://apiclient_key.pem
+    #鏈嶅姟鍟�-------------end---
+    existsSub: 1
+    appSecret: 1ceb7c9dff3c4330d653adc3ca55ea24
+    #瀛愬晢鎴�------------start----
+    subAppId: wxcd2b89fd2ff065f8 #wxcd2b89fd2ff065f8
+    subAppSecret: 3462fa186da7cb06c544df8d8664b63a #3336812504c830b1c3c5243f9ece407a
+    subMchId: 1661772003
+    subMchKey: EVM8E15TKXE0OEMJFC0V6UFVIOZ5CSQS
+    #瀛愬晢鎴�------------end----
+    #      mchKey: u4TSNtv0wFP7WRfnxBgijYOtRhS9FvlM
+    typeId: gybike
+
 upload:
   type: ftp
 
diff --git a/server/services/src/main/resources/application-pro.yml b/server/services/src/main/resources/application-pro.yml
index f3a7fdd..709f0a8 100644
--- a/server/services/src/main/resources/application-pro.yml
+++ b/server/services/src/main/resources/application-pro.yml
@@ -49,6 +49,36 @@
     enable: true
     username: admin
     password:
+########################寰俊鏀粯鐩稿叧閰嶇疆########################
+wx:
+  pay:
+    #鏈嶅姟鍟�---------start-------
+    appId: wx48fd8faa35cc8277
+    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
+    keyPath: /usr/local/aliConfig/bike/apiclient_cert.p12
+    privateCertPath: /usr/local/aliConfig/bike/apiclient_cert.pem
+    privateKeyPath: /usr/local/aliConfig/bike/apiclient_key.pem
+    #    keyPath: d://apiclient_cert.p12
+    #    privateCertPath: d://apiclient_cert.pem
+    #    privateKeyPath: d://apiclient_key.pem
+    #鏈嶅姟鍟�-------------end---
+    existsSub: 1
+    appSecret: 1ceb7c9dff3c4330d653adc3ca55ea24
+    #瀛愬晢鎴�------------start----
+    subAppId: wxcd2b89fd2ff065f8 #wxcd2b89fd2ff065f8
+    subAppSecret: 3462fa186da7cb06c544df8d8664b63a #3336812504c830b1c3c5243f9ece407a
+    subMchId: 1661772003
+    subMchKey: EVM8E15TKXE0OEMJFC0V6UFVIOZ5CSQS
+    #瀛愬晢鎴�------------end----
+    #      mchKey: u4TSNtv0wFP7WRfnxBgijYOtRhS9FvlM
+    typeId: gybike
 
 upload:
   type: blob
diff --git a/server/services/src/main/resources/application-test.yml b/server/services/src/main/resources/application-test.yml
index 64a5f9d..bf7bdcf 100644
--- a/server/services/src/main/resources/application-test.yml
+++ b/server/services/src/main/resources/application-test.yml
@@ -69,6 +69,36 @@
     username: admin
     password: 111111
 
+########################寰俊鏀粯鐩稿叧閰嶇疆########################
+wx:
+  pay:
+    #鏈嶅姟鍟�---------start-------
+    appId: wx48fd8faa35cc8277
+    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
+    keyPath: /usr/local/aliConfig/bike/apiclient_cert.p12
+    privateCertPath: /usr/local/aliConfig/bike/apiclient_cert.pem
+    privateKeyPath: /usr/local/aliConfig/bike/apiclient_key.pem
+    #    keyPath: d://apiclient_cert.p12
+    #    privateCertPath: d://apiclient_cert.pem
+    #    privateKeyPath: d://apiclient_key.pem
+    #鏈嶅姟鍟�-------------end---
+    existsSub: 1
+    appSecret: 1ceb7c9dff3c4330d653adc3ca55ea24
+    #瀛愬晢鎴�------------start----
+    subAppId: wxcd2b89fd2ff065f8 #wxcd2b89fd2ff065f8
+    subAppSecret: 3462fa186da7cb06c544df8d8664b63a #3336812504c830b1c3c5243f9ece407a
+    subMchId: 1661772003
+    subMchKey: EVM8E15TKXE0OEMJFC0V6UFVIOZ5CSQS
+    #瀛愬晢鎴�------------end----
+    #      mchKey: u4TSNtv0wFP7WRfnxBgijYOtRhS9FvlM
+    typeId: gybike
 
 upload:
   type: blob
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 dac3322..36c03d3 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
@@ -1,10 +1,15 @@
 package com.doumee.api.web;
 
+import com.azure.core.annotation.Post;
 import com.doumee.core.annotation.LoginRequired;
 import com.doumee.core.annotation.trace.Trace;
 import com.doumee.core.model.ApiResponse;
 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.ConfirmUpdOrderDTO;
+import com.doumee.dao.dto.DoneOrderDTO;
+import com.doumee.dao.dto.UpdOrderDataDTO;
 import com.doumee.service.business.IdentityInfoService;
 import com.doumee.service.business.MemberService;
 import com.doumee.service.business.OrdersService;
@@ -37,13 +42,107 @@
     private OrdersService ordersService;
 
     @LoginRequired
-    @ApiOperation(value = "缂栬緫涓汉淇℃伅", notes = "灏忕▼搴忕")
-    @GetMapping("/getMemberInfo")
+    @ApiOperation(value = "鍙戝竷璁㈠崟 - 鍙戝崟鏂�", notes = "灏忕▼搴忕")
+    @PostMapping("/release")
     @ApiImplicitParams({
             @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
     })
-    public ApiResponse<Member> getMemberInfo() {
-        return  ApiResponse.success("鏌ヨ鎴愬姛",memberService.getMemberInfo(getMemberId()));
+    public ApiResponse<Object> release(@RequestBody Orders orders) {
+        orders.setMember(this.getMemberResponse());
+        return  ApiResponse.success("鎿嶄綔鎴愬姛",ordersService.create(orders));
+    }
+
+    @LoginRequired
+    @ApiOperation(value = "淇敼璁㈠崟 - 鍙戝崟鏂�", notes = "灏忕▼搴忕")
+    @PostMapping("/updateOrder")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse updateOrder(@RequestBody Orders orders) {
+        orders.setMember(this.getMemberResponse());
+        ordersService.updateById(orders);
+        return  ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
+    @LoginRequired
+    @ApiOperation(value = "鎵嬪姩鎺ュ崟 - 鎺ュ崟鏂�", notes = "灏忕▼搴忕")
+    @GetMapping("/accept")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse accept(@RequestParam Integer orderId) {
+        ordersService.accept(orderId,this.getMemberResponse());
+        return  ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
+    @LoginRequired
+    @ApiOperation(value = "寮�濮嬩綔涓� - 鍙戝崟鏂�", notes = "灏忕▼搴忕")
+    @GetMapping("/begin")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse begin(@RequestParam Integer orderId) {
+        ordersService.begin(orderId,this.getMemberResponse());
+        return  ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
+    @LoginRequired
+    @ApiOperation(value = "鍙栨秷璁㈠崟 - 鍙戝崟鏂�", notes = "灏忕▼搴忕")
+    @GetMapping("/releaseCancelOrder")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse releaseCancelOrder(@RequestParam Integer orderId) {
+        ordersService.releaseCancelOrder(orderId,this.getMemberResponse());
+        return  ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
+
+    @LoginRequired
+    @ApiOperation(value = "鍙栨秷鎺ュ崟 - 鎺ュ崟鏂�", notes = "灏忕▼搴忕")
+    @GetMapping("/receiveCancelOrder")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse receiveCancelOrder(@RequestParam Integer orderId) {
+        ordersService.receiveCancelOrder(orderId,this.getMemberResponse());
+        return  ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
+
+    @LoginRequired
+    @ApiOperation(value = "淇敼璁㈠崟鏃ユ湡 - 鍙戝崟鏂�", notes = "灏忕▼搴忕")
+    @PostMapping("/updOrderData")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse updOrderData(@RequestBody UpdOrderDataDTO updOrderDataDTO) {
+        updOrderDataDTO.setMember(this.getMemberResponse());
+        ordersService.updOrderData(updOrderDataDTO);
+        return  ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
+    @LoginRequired
+    @ApiOperation(value = "纭璁㈠崟淇敼 - 鎺ュ崟鏂�", notes = "灏忕▼搴忕")
+    @PostMapping("/confirmUpd")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse confirmUpd(@RequestBody ConfirmUpdOrderDTO confirmUpdOrderDTO) {
+        confirmUpdOrderDTO.setMember(this.getMemberResponse());
+        ordersService.confirmUpd(confirmUpdOrderDTO);
+        return  ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
+    @LoginRequired
+    @ApiOperation(value = "瀹屾垚璁㈠崟 - 鍙戝崟鏂�", notes = "灏忕▼搴忕")
+    @GetMapping("/doneOrder")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse<Object> doneOrder(@RequestBody DoneOrderDTO doneOrderDTO) {
+        doneOrderDTO.setMember(getMemberResponse());
+        return  ApiResponse.success("鎿嶄綔鎴愬姛",ordersService.doneOrder(doneOrderDTO));
     }
 
 
diff --git a/server/web/src/main/java/com/doumee/api/web/PaymentCallback.java b/server/web/src/main/java/com/doumee/api/web/PaymentCallback.java
new file mode 100644
index 0000000..c6b0c4e
--- /dev/null
+++ b/server/web/src/main/java/com/doumee/api/web/PaymentCallback.java
@@ -0,0 +1,159 @@
+package com.doumee.api.web;
+
+import com.doumee.config.wx.WxMiniConfig;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.service.business.OrdersService;
+import com.wechat.pay.java.core.RSAAutoCertificateConfig;
+import com.wechat.pay.java.core.notification.NotificationConfig;
+import com.wechat.pay.java.core.notification.NotificationParser;
+import com.wechat.pay.java.core.notification.RequestParam;
+import com.wechat.pay.java.service.partnerpayments.jsapi.model.Transaction;
+import com.wechat.pay.java.service.refund.model.RefundNotification;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.mgt.DefaultSecurityManager;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.ServletInputStream;
+import javax.servlet.http.HttpServletRequest;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+
+/**
+ * Created by IntelliJ IDEA.
+ * 鏀粯鍥炶皟
+ * @Author : Rk
+ * @create 2023/2/23 13:49
+ */
+@Slf4j
+@RestController
+@CrossOrigin
+public class PaymentCallback {
+
+    @Autowired
+    private OrdersService ordersService;
+
+    /**
+     * 銆愬井淇℃敮浠樸�戝紓姝ラ�氱煡
+     *
+     * @return
+     */
+    @PostMapping("/api/wxPayNotify")
+    public ApiResponse wxPay_notify(HttpServletRequest request) {
+        try {
+            ServletInputStream inputStream = request.getInputStream();
+            StringBuffer stringBuffer = new StringBuffer();
+            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
+            String s;
+            //璇诲彇鍥炶皟璇锋眰浣�
+            while ((s = bufferedReader.readLine()) != null) {
+                stringBuffer.append(s);
+            }
+            String body = stringBuffer.toString();
+            String timestamp = request.getHeader("Wechatpay-Timestamp");
+            String nonce = request.getHeader("Wechatpay-Nonce");
+            String signType = request.getHeader("Wechatpay-Signature-Type");
+            String serialNo = request.getHeader("wechatpay-Serial");
+            String signature = request.getHeader("Wechatpay-Signature");
+            RequestParam requestParam = new RequestParam.Builder()
+                    .serialNumber(serialNo)
+                    .nonce(nonce)
+                    .signType(signType)
+                    .signature(signature)
+                    .timestamp(String.valueOf(timestamp))
+                    .body(body)
+                    .build();
+
+            NotificationConfig config = new RSAAutoCertificateConfig.Builder()
+                    .merchantId(WxMiniConfig.wxProperties.getMchId())
+                    .privateKeyFromPath(WxMiniConfig.wxProperties.getPrivateKeyPath())
+                    .merchantSerialNumber(WxMiniConfig.wxProperties.getSerialNumer())
+                    .apiV3Key(WxMiniConfig.wxProperties.getApiV3Key())
+                    .build();
+
+
+            NotificationParser parser = new NotificationParser(config);
+            Transaction result = parser.parse(requestParam, Transaction.class);
+            //鑷畾涔夎鍗曞彿
+            String outTradeNo = result.getOutTradeNo();
+            //寰俊璁㈠崟鍙�
+            String paymentNo = result.getTransactionId();
+            if ("SUCCESS".equals(result.getTradeState().name())) {
+                // 鏀粯鎴愬姛ge
+                switch (result.getAttach()) {
+                    //鏀粯璁㈠崟鍥炶皟
+                    case "createOrder": {
+                        ordersService.payNotify(outTradeNo,paymentNo);
+                        break;
+                    }
+                }
+            } else {
+                // 鏀粯澶辫触
+                switch (result.getAttach()) {
+                    case "createGoodsOrder": {
+                        break;
+                    }
+                }
+            }
+            return ApiResponse.success("澶勭悊鎴愬姛!");
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.error("寰俊鍥炶皟缁撴灉寮傚父,寮傚父鍘熷洜{}", e.getLocalizedMessage());
+            return ApiResponse.failed("");
+        }
+    }
+    @PostMapping("/api/wxRefundNotify")
+    public ApiResponse wxRefundNotify(HttpServletRequest request) {
+        log.error("寰俊閫�娆惧洖璋冪粨鏋滃紑濮�===========" );
+        try {
+            DefaultSecurityManager securityManager = new DefaultSecurityManager();
+            SecurityUtils.setSecurityManager(securityManager);
+            ServletInputStream inputStream = request.getInputStream();
+            StringBuffer stringBuffer = new StringBuffer();
+            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
+            String s;
+            //璇诲彇鍥炶皟璇锋眰浣�
+            while ((s = bufferedReader.readLine()) != null) {
+                stringBuffer.append(s);
+            }
+            String body = stringBuffer.toString();
+            String timestamp = request.getHeader("Wechatpay-Timestamp");
+            String nonce = request.getHeader("Wechatpay-Nonce");
+            String signType = request.getHeader("Wechatpay-Signature-Type");
+            String serialNo = request.getHeader("wechatpay-Serial");
+            String signature = request.getHeader("Wechatpay-Signature");
+            RequestParam requestParam = new RequestParam.Builder()
+                    .serialNumber(serialNo)
+                    .nonce(nonce)
+                    .signType(signType)
+                    .signature(signature)
+                    .timestamp(String.valueOf(timestamp))
+                    .body(body)
+                    .build();
+
+            NotificationConfig config = new RSAAutoCertificateConfig.Builder()
+                    .merchantId(WxMiniConfig.wxProperties.getMchId())
+                    .privateKeyFromPath(WxMiniConfig.wxProperties.getPrivateKeyPath())
+                    .merchantSerialNumber(WxMiniConfig.wxProperties.getSerialNumer())
+                    .apiV3Key(WxMiniConfig.wxProperties.getApiV3Key())
+                    .build();
+
+
+            NotificationParser parser = new NotificationParser(config);
+            RefundNotification result = parser.parse(requestParam, RefundNotification.class);
+//            if ("SUCCESS".equals(result.getRefundStatus().name())) {
+                // 鏀粯鎴愬姛ge
+//                     goodsorderService.closeGoodsorderDone(result);
+//            }
+            return ApiResponse.success("澶勭悊鎴愬姛");
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.error("寰俊鍥炶皟缁撴灉寮傚父,寮傚父鍘熷洜{}", e.getLocalizedMessage());
+            return ApiResponse.failed("");
+        }
+    }
+
+}

--
Gitblit v1.9.3