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