server/admin/src/main/java/com/doumee/api/business/PaymentCallback.java
@@ -1,9 +1,15 @@ package com.doumee.api.business; import com.alibaba.fastjson.JSON; import com.doumee.config.wx.TransferDetailEntityNew; import com.doumee.config.wx.WxMiniConfig; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.model.ApiResponse; import com.doumee.service.business.OrdersService; import com.wechat.pay.java.core.Config; import com.wechat.pay.java.core.RSAAutoCertificateConfig; import com.wechat.pay.java.core.RSAPublicKeyConfig; import com.wechat.pay.java.core.notification.NotificationConfig; import com.wechat.pay.java.core.notification.NotificationParser; import com.wechat.pay.java.core.notification.RequestParam; @@ -20,7 +26,11 @@ import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServletRequest; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.HashMap; import java.util.Map; /** * Created by IntelliJ IDEA. @@ -41,7 +51,7 @@ * * @return */ @PostMapping("/api/wxPayNotify") @PostMapping("/web/wxPayNotify") public ApiResponse wxPay_notify(HttpServletRequest request) { try { ServletInputStream inputStream = request.getInputStream(); @@ -76,6 +86,8 @@ NotificationParser parser = new NotificationParser(config); Transaction result = parser.parse(requestParam, Transaction.class); //èªå®ä¹è®¢åå· String outTradeNo = result.getOutTradeNo(); @@ -105,7 +117,7 @@ return ApiResponse.failed(""); } } @PostMapping("/api/wxRefundNotify") @PostMapping("/web/wxRefundNotify") public ApiResponse wxRefundNotify(HttpServletRequest request) { log.error("å¾®ä¿¡éæ¬¾åè°ç»æå¼å§===========" ); try { @@ -156,4 +168,98 @@ } } /** * å¾®ä¿¡åæ·é¶çº¿è½¬è´¦ - åè°éç¥ * @Context注解 æHTTP请æ±ä¸ä¸æå¯¹è±¡æ³¨å ¥è¿æ¥ï¼HttpServletRequestãHttpServletResponseãUriInfo ç * @return */ @PostMapping(value = "/web/wechat/transferNotify") public ApiResponse wxPayCallback( HttpServletRequest request) { Map<String,String> errMap = new HashMap<>(); try { log.info("å¾®ä¿¡åæ·é¶çº¿è½¬è´¦ - åè°éç¥ /wxpay/callback"); TransferDetailEntityNew entity = wxPaySuccessCallback(request); log.info("transfer ok.{}",entity); //åè°æååå¤çèªå·±çä¸å¡ if(entity != null){ } return ApiResponse.success("å¤çæå"); } catch (Exception e) { log.error("å¾®ä¿¡åæ·é¶çº¿è½¬è´¦ - åè°éç¥ /wxpay/callbackï¼å¼å¸¸ï¼", e); errMap.put("code", "FAIL"); errMap.put("message", "æå¡å¨å é¨é误"); return ApiResponse.failed("å¤ç失败"); } } public TransferDetailEntityNew wxPaySuccessCallback(HttpServletRequest request) throws IOException { String requestBody = getBodyString(request, "UTF-8"); //è¯ä¹¦åºåå·ï¼å¾®ä¿¡å¹³å°ï¼ éªç¾çâ微信æ¯ä»å¹³å°è¯ä¹¦âæå¯¹åºçå¹³å°è¯ä¹¦åºåå· String wechatPaySerial = request.getHeader("Wechatpay-Serial"); //å¾®ä¿¡ä¼ éè¿æ¥çç¾å éªç¾çç¾åå¼ String wechatSignature = request.getHeader("Wechatpay-Signature"); //éªç¾çæ¶é´æ³ String wechatTimestamp = request.getHeader("Wechatpay-Timestamp"); //éªç¾çéæºå符串 String wechatpayNonce = request.getHeader("Wechatpay-Nonce"); // 1. æé RequestParam RequestParam requestParam = new RequestParam.Builder() .serialNumber(wechatPaySerial) .nonce(wechatpayNonce) .signature(wechatSignature) .timestamp(wechatTimestamp) .body(requestBody) .build(); // 2. æå»ºConfig RSAPublicKeyConfig Config config = new RSAPublicKeyConfig.Builder() .merchantId(WxMiniConfig.wxProperties.getMchId()) //微信æ¯ä»çåæ·å· .privateKeyFromPath(WxMiniConfig.wxProperties.getPrivateKeyPath()) // åæ·APIè¯ä¹¦ç§é¥çåæ¾è·¯å¾ .publicKeyFromPath(WxMiniConfig.wxProperties.getWechatPubKeyPath()) //微信æ¯ä»å ¬é¥çåæ¾è·¯å¾ .publicKeyId(WxMiniConfig.wxProperties.getWechatPayPublicKeyId()) //微信æ¯ä»å ¬é¥ID .merchantSerialNumber(WxMiniConfig.wxProperties.getSerialNumer()) //åæ·APIè¯ä¹¦åºåå· .apiV3Key("") //APIv3å¯é¥ .build(); log.info("WxPayService.wxPaySuccessCallback request : wechatPaySerial is [{}] , wechatSignature is [{}] , wechatTimestamp is [{}] , wechatpayNonce is [{}] , requestBody is [{}]",wechatPaySerial,wechatSignature,wechatTimestamp,wechatpayNonce,requestBody); // 3. åå§å NotificationParser NotificationParser parser = new NotificationParser((NotificationConfig) config); try { TransferDetailEntityNew entity = parser.parse(requestParam, TransferDetailEntityNew.class); log.info("WxPayService.wxPaySuccessCallback responseBody: {}", entity != null ? JSON.toJSONString(entity) : null); return entity; } catch (Exception e) { log.error("Exception occurred while processing", e); throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"ç³»ç»å é¨é误"); } } /** * è·åpost请æ±ä¸çBody * * @param request httpRequest * @return bodyå符串 */ public static String getBodyString(HttpServletRequest request, String charSet) throws IOException { StringBuilder sb = new StringBuilder(); InputStream inputStream = null; BufferedReader reader = null; try { inputStream = request.getInputStream(); //è¯»åæµå¹¶å°æµååºå»,é¿å æ°æ®æµä¸æ; reader = new BufferedReader(new InputStreamReader(inputStream, charSet)); String line; while ((line = reader.readLine()) != null) { sb.append(line); } } catch (IOException e) { log.error("è·årequestBodyå¼å¸¸", e); } finally { inputStream.close(); reader.close(); } return sb.toString(); } } server/pom.xml
@@ -260,7 +260,7 @@ <dependency> <groupId>com.github.wechatpay-apiv3</groupId> <artifactId>wechatpay-java</artifactId> <version>0.2.12</version> <version>0.2.15</version> </dependency> server/services/src/main/java/com/doumee/config/wx/SendWxMessage.java
@@ -4,6 +4,7 @@ import com.doumee.biz.system.SystemDictDataBiz; import com.doumee.core.constants.Constants; import com.doumee.core.utils.DateUtil; import com.doumee.dao.business.model.IdentityInfo; import lombok.extern.slf4j.Slf4j; import me.chanjar.weixin.common.error.WxErrorException; import org.springframework.beans.factory.annotation.Autowired; @@ -27,33 +28,32 @@ private static String goodsOrderUrl = "pages/settlementDetails/settlementDetails?goodsOrderId="; private static String identityInfoUrl = "pages/mine/mine"; @Autowired private SystemDictDataBiz systemDictDataBiz; public void bookingsCancel(String openid, String goodsOrderId, String accessToken, String bikeCode, Date startTime, Date endTime) throws WxErrorException { public void identityInfoMessage(String openid, IdentityInfo identityInfo) throws WxErrorException { RestTemplate restTemplate = new RestTemplate(); log.info("微信å°ç¨åº->å¾®ä¿¡æ¶æ¯éç¥ -> accessTokenï¼{}",accessToken); String accessToken = WxMiniConfig.wxMaService.getAccessToken(); log.info("微信å°ç¨åº->å¾®ä¿¡æ¶æ¯éç¥ - 认è¯ä¿¡æ¯ -> accessTokenï¼{}",accessToken); //è¿éç®åèµ·è§æä»¬æ¯æ¬¡é½è·åææ°çaccess_tokenï¼æ¶é´å¼åä¸ï¼åºè¯¥å¨access_tokenå¿«è¿ææ¶åéæ°è·åï¼ String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+WxMiniConfig.wxMaService.getAccessToken(); String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+accessToken; //æ¼æ¥æ¨éçæ¨¡ç WxMsgVO wxMsgVo = new WxMsgVO(); WxMsgVO wxMsgVO = new WxMsgVO(); //ç¨æ·çopenidï¼è¦åéç»é£ä¸ªç¨æ·ï¼ wxMsgVo.setTouser(openid); wxMsgVO.setTouser(openid); //è®¢é æ¶æ¯æ¨¡æ¿id // wxMsgVo.setTemplate_id(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.TIME_OUT_TEMPID).getCode()); wxMsgVO.setTemplate_id("4H9ztG4E9BxJLwMuYSZ6oiM7yb4KX7u7bYhkhYJP0-Y"); Map<String, TemplateData> m = new HashMap<>(4); m.put("character_string1", new TemplateData(bikeCode)); //è§£éæ¶é´ m.put("date3", new TemplateData(DateUtil.getFomartDate(startTime,"yyyy/MM/dd HH:mm"))); //ä¸éæ¶é´ m.put("date4", new TemplateData(DateUtil.getFomartDate(endTime,"yyyy/MM/dd HH:mm"))); //温馨æé m.put("thing5", new TemplateData("临æ¶éè½¦å·²è¶ è¿æå¤§æ¶é¿ï¼å·²èªå¨è¿è½¦")); wxMsgVo.setPage(goodsOrderUrl + goodsOrderId); wxMsgVo.setData(m); m.put("thing11", new TemplateData(Constants.equalsInteger(identityInfo.getType(),Constants.ZERO)?"ç¨å·¥è®¤è¯":Constants.equalsInteger(identityInfo.getType(),Constants.ONE)?"è¿è´§è®¤è¯":"ä¾é¤è®¤è¯")); m.put("phrase4", new TemplateData(Constants.equalsInteger(identityInfo.getAuditStatus(),Constants.TWO)?"认è¯éè¿":"è®¤è¯æªéè¿")); m.put("date3", new TemplateData(DateUtil.getFomartDate(identityInfo.getAuditTime(),"yyyy-MM-dd HH:mm:ss"))); m.put("thing5", new TemplateData(identityInfo.getAuditRemark())); wxMsgVO.setPage(identityInfoUrl); wxMsgVO.setData(m); ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, wxMsgVo, String.class); log.info("微信å°ç¨åº->å¾®ä¿¡æ¶æ¯éç¥ ä¸´æ¶éè½¦è¶ æ¶ï¼{}", JSONObject.toJSONString(responseEntity)); restTemplate.postForEntity(url, wxMsgVO, String.class); log.info("微信å°ç¨åº->å¾®ä¿¡æ¶æ¯éç¥ è®¤è¯ä¿¡æ¯ï¼{}", JSONObject.toJSONString(responseEntity)); } server/services/src/main/java/com/doumee/config/wx/TransferDetailEntityNew.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,213 @@ package com.doumee.config.wx; import com.google.gson.annotations.SerializedName; import com.wechat.pay.java.core.cipher.PrivacyDecryptor; import lombok.Data; import java.util.Objects; /** * åæ·åå·æ¥è¯¢è½¬è´¦åå®ä½ç±»ä¿¡æ¯ * * @author: suhai * @date: 2025/05/13 11:28 */ @Data public class TransferDetailEntityNew { /** åæ·å· Y 说æï¼å¾®ä¿¡æ¯ä»åé çåæ·å· */ @SerializedName("mch_id") private String mchId; /** åæ·åå· Y 说æï¼åæ·ç³»ç»å é¨çåå®¶åå·ï¼è¦æ±æ¤åæ°åªè½ç±æ°åã大å°ååæ¯ç»æï¼å¨åæ·ç³»ç»å é¨å¯ä¸ */ @SerializedName("out_bill_no") private String outBillNo; /** å家转账订åå· Y 说æï¼å家转账订åç主é®ï¼å¯ä¸å®ä¹æ¤èµæºçæ è¯ */ @SerializedName("transfer_bill_no") private String transferBillNo; /** åæ·appid Y 说æï¼ç³è¯·åæ·å·çappidæåæ·å·ç»å®çappidï¼ä¼ä¸å·corpidå³ä¸ºæ¤appidï¼ */ @SerializedName("appid") private String appid; /** åæ®ç¶æ Y 说æï¼åæ®ç¶æ */ @SerializedName("state") private String state; /** 转账éé¢ Y 说æï¼è½¬è´¦éé¢åä½ä¸ºâåâã*/ @SerializedName("transfer_amount") private Integer transferAmount; /** è½¬è´¦å¤æ³¨ Y 说æï¼è½¬è´¦å¤æ³¨ï¼ç¨æ·æ¶æ¬¾æ¶å¯è§è¯¥å¤æ³¨ä¿¡æ¯ï¼UTF8ç¼ç ï¼æå¤å 许32个å符ã*/ @SerializedName("transfer_remark") private String transferRemark; /** 失败åå N 说æï¼è®¢å已失败æè å·²éèµéæ¶ï¼è¿å失败åå ã */ @SerializedName("fail_reason") private String failReason; /** æ¶æ¬¾ç¨æ·OpenID Y 说æï¼åæ·AppIDä¸ï¼æç¨æ·çOpenID */ @SerializedName("openid") private String openid; /** æ¶æ¬¾ç¨æ·å§å N 说æï¼æ¶æ¬¾æ¹çå®å§åãéè¦å å¯ä¼ å ¥ï¼æ¯ææ åRSAç®æ³åå½å¯ç®æ³ï¼å ¬é¥ç±å¾®ä¿¡ä¾§æä¾ã 转账éé¢ >= 2,000å æ¶ï¼è¯¥ç¬æç»å¿ 须填å è¥åæ·ä¼ å ¥æ¶æ¬¾ç¨æ·å§åï¼å¾®ä¿¡æ¯ä»ä¼æ ¡éªæ¶æ¬¾ç¨æ·ä¸è¾å ¥å§åæ¯å¦ä¸è´ï¼å¹¶æä¾çµååå */ @SerializedName("user_name") private String userName; /** åæ®å建æ¶é´ N 说æï¼åæ®åçæåæ¶è¿åï¼æç §ä½¿ç¨rfc3339æå®ä¹çæ ¼å¼ï¼æ ¼å¼ä¸ºyyyy-MM-DDThh:mm:ss+TIMEZONE */ @SerializedName("create_time") private String createTime; /** æå䏿¬¡ç¶æåæ´æ¶é´ N 说æï¼åæ®æåæ´æ°æ¶é´ï¼æç §ä½¿ç¨rfc3339æå®ä¹çæ ¼å¼ï¼æ ¼å¼ä¸ºyyyy-MM-DDThh:mm:ss+TIMEZONE */ @SerializedName("update_time") private String updateTime; public String getMchId() { return mchId; } public void setMchId(String mchId) { this.mchId = mchId; } public String getOutBillNo() { return outBillNo; } public void setOutBillNo(String outBillNo) { this.outBillNo = outBillNo; } public String getTransferBillNo() { return transferBillNo; } public void setTransferBillNo(String transferBillNo) { this.transferBillNo = transferBillNo; } public String getAppid() { return appid; } public void setAppid(String appid) { this.appid = appid; } public String getState() { return state; } public void setState(String state) { this.state = state; } public Integer getTransferAmount() { return transferAmount; } public void setTransferAmount(Integer transferAmount) { this.transferAmount = transferAmount; } public String getTransferRemark() { return transferRemark; } public void setTransferRemark(String transferRemark) { this.transferRemark = transferRemark; } public String getFailReason() { return failReason; } public void setFailReason(String failReason) { this.failReason = failReason; } public String getOpenid() { return openid; } public void setOpenid(String openid) { this.openid = openid; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getCreateTime() { return createTime; } public void setCreateTime(String createTime) { this.createTime = createTime; } public String getUpdateTime() { return updateTime; } public void setUpdateTime(String updateTime) { this.updateTime = updateTime; } @Override public boolean equals(Object o) { if (o == null || getClass() != o.getClass()) return false; TransferDetailEntityNew that = (TransferDetailEntityNew) o; return Objects.equals(mchId, that.mchId) && Objects.equals(outBillNo, that.outBillNo) && Objects.equals(transferBillNo, that.transferBillNo) && Objects.equals(appid, that.appid) && Objects.equals(state, that.state) && Objects.equals(transferAmount, that.transferAmount) && Objects.equals(transferRemark, that.transferRemark) && Objects.equals(failReason, that.failReason) && Objects.equals(openid, that.openid) && Objects.equals(userName, that.userName) && Objects.equals(createTime, that.createTime) && Objects.equals(updateTime, that.updateTime); } @Override public int hashCode() { return Objects.hash(mchId, outBillNo, transferBillNo, appid, state, transferAmount, transferRemark, failReason, openid, userName, createTime, updateTime); } @Override public String toString() { return "TransferDetailEntityNew{" + "mchId='" + mchId + '\'' + ", outBillNo='" + outBillNo + '\'' + ", transferBillNo='" + transferBillNo + '\'' + ", appid='" + appid + '\'' + ", state='" + state + '\'' + ", transferAmount=" + transferAmount + ", transferRemark='" + transferRemark + '\'' + ", failReason='" + failReason + '\'' + ", openid='" + openid + '\'' + ", userName='" + userName + '\'' + ", createTime='" + createTime + '\'' + ", updateTime='" + updateTime + '\'' + '}'; } public TransferDetailEntityNew cloneWithCipher(PrivacyDecryptor encryptor) { TransferDetailEntityNew copy = new TransferDetailEntityNew(); copy.mchId = mchId; copy.outBillNo = outBillNo; copy.transferBillNo = transferBillNo; copy.appid = appid; copy.state = state; copy.transferAmount = transferAmount; copy.transferRemark = transferRemark; copy.failReason = failReason; copy.openid = openid; if (userName != null && !userName.isEmpty()) { copy.userName = encryptor.decrypt(userName); } copy.createTime = createTime; copy.updateTime = updateTime; return copy; } } server/services/src/main/java/com/doumee/config/wx/TransferToUser.java
@@ -29,12 +29,20 @@ public static void main(String[] args) { // TODO: 请åå¤åæ·å¼åå¿ è¦åæ°ï¼åèï¼https://pay.weixin.qq.com/doc/v3/merchant/4013070756 // TransferToUser client = new TransferToUser( // "1229817002", // åæ·å·ï¼æ¯ç±å¾®ä¿¡æ¯ä»ç³»ç»çæå¹¶åé ç»æ¯ä¸ªåæ·çå¯ä¸æ è¯ç¬¦ï¼åæ·å·è·åæ¹å¼åè https://pay.weixin.qq.com/doc/v3/merchant/4013070756 // "3FE90C2F3D40A56E1C51926F31B8A8D22426CCE0", // åæ·APIè¯ä¹¦åºåå·ï¼å¦ä½è·å请åè https://pay.weixin.qq.com/doc/v3/merchant/4013053053 // "d://wechatApiclient_key.pem", // åæ·APIè¯ä¹¦ç§é¥æä»¶è·¯å¾ï¼æ¬å°æä»¶è·¯å¾ // "PUB_KEY_ID_0112298170022025071700291836000600", // 微信æ¯ä»å ¬é¥IDï¼å¦ä½è·å请åè https://pay.weixin.qq.com/doc/v3/merchant/4013038816 // "d://pub_key.pem" // 微信æ¯ä»å ¬é¥æä»¶è·¯å¾ï¼æ¬å°æä»¶è·¯å¾ // ); TransferToUser client = new TransferToUser( "1229817002", // åæ·å·ï¼æ¯ç±å¾®ä¿¡æ¯ä»ç³»ç»çæå¹¶åé ç»æ¯ä¸ªåæ·çå¯ä¸æ è¯ç¬¦ï¼åæ·å·è·åæ¹å¼åè https://pay.weixin.qq.com/doc/v3/merchant/4013070756 "3FE90C2F3D40A56E1C51926F31B8A8D22426CCE0", // åæ·APIè¯ä¹¦åºåå·ï¼å¦ä½è·å请åè https://pay.weixin.qq.com/doc/v3/merchant/4013053053 "1661772003", // åæ·å·ï¼æ¯ç±å¾®ä¿¡æ¯ä»ç³»ç»çæå¹¶åé ç»æ¯ä¸ªåæ·çå¯ä¸æ è¯ç¬¦ï¼åæ·å·è·åæ¹å¼åè https://pay.weixin.qq.com/doc/v3/merchant/4013070756 "3C9A32FB6CD453FAAAF97F9737ECAEA9D6625727", // åæ·APIè¯ä¹¦åºåå·ï¼å¦ä½è·å请åè https://pay.weixin.qq.com/doc/v3/merchant/4013053053 "d://wechatApiclient_key.pem", // åæ·APIè¯ä¹¦ç§é¥æä»¶è·¯å¾ï¼æ¬å°æä»¶è·¯å¾ "PUB_KEY_ID_0112298170022025071700291836000600", // 微信æ¯ä»å ¬é¥IDï¼å¦ä½è·å请åè https://pay.weixin.qq.com/doc/v3/merchant/4013038816 "d://pub_key.pem" // 微信æ¯ä»å ¬é¥æä»¶è·¯å¾ï¼æ¬å°æä»¶è·¯å¾ "47E172124E73E8098A565E971064C20ACDE7C911", // 微信æ¯ä»å ¬é¥IDï¼å¦ä½è·å请åè https://pay.weixin.qq.com/doc/v3/merchant/4013038816 "d://wechatpay_47E172124E73E8098A565E971064C20ACDE7C911.pem" // 微信æ¯ä»å ¬é¥æä»¶è·¯å¾ï¼æ¬å°æä»¶è·¯å¾ ); TransferToUserRequest request = new TransferToUserRequest(); @@ -42,10 +50,10 @@ request.outBillNo = "plfk2020042016"; request.transferSceneId = "1005"; request.openid = "oKKHU5IFKpss_DIbFX1lqghFJOEg"; request.userName = client.encrypt("æ½æè¾"); request.transferAmount = 91L; // request.userName = client.encrypt("æ½æè¾"); request.transferAmount = 10L; request.transferRemark = "~~~"; request.notifyUrl = "https://www.weixin.qq.com/wxpay/pay.php"; // request.notifyUrl = "https://www.weixin.qq.com/wxpay/pay.php"; request.userRecvPerception = "å³å¡æ¥é ¬"; request.transferSceneReportInfos = new ArrayList<>(); { @@ -118,6 +126,7 @@ public TransferToUserResponse run(TransferToUserRequest request,String name) { String uri = PATH; request.appid = WxMiniConfig.wxProperties.getSubAppId(); // request.notifyUrl = WxMiniConfig.wxProperties.getWechatNotifyUrl(); request.transferSceneId = "1005"; request.userRecvPerception = "å³å¡æ¥é ¬"; if(request.transferAmount >= 30){ @@ -140,7 +149,7 @@ Request.Builder reqBuilder = new Request.Builder().url(HOST + uri); reqBuilder.addHeader("Accept", "application/json"); reqBuilder.addHeader("Wechatpay-Serial", WxMiniConfig.wxProperties.getWechatPayPublicKeyId()); reqBuilder.addHeader("Authorization", WXPayUtility.buildAuthorization(WxMiniConfig.wxProperties.getMchId(), reqBuilder.addHeader("Authorization", WXPayUtility.buildAuthorization(WxMiniConfig.wxProperties.getSubMchId(), WxMiniConfig.wxProperties.getWechatSerialNumer(), WXPayUtility.loadPrivateKeyFromPath(WxMiniConfig.wxProperties.getWechatPrivateKeyPath()), METHOD, uri, reqBody)); @@ -178,7 +187,7 @@ Request.Builder reqBuilder = new Request.Builder().url(HOST + uri); reqBuilder.addHeader("Accept", "application/json"); reqBuilder.addHeader("Wechatpay-Serial", wechatPayPublicKeyId); reqBuilder.addHeader("Authorization", WXPayUtility.buildAuthorization(WxMiniConfig.wxProperties.getMchId(), reqBuilder.addHeader("Authorization", WXPayUtility.buildAuthorization(WxMiniConfig.wxProperties.getSubMchId(), WxMiniConfig.wxProperties.getWechatSerialNumer(), WXPayUtility.loadPrivateKeyFromPath(WxMiniConfig.wxProperties.getWechatPrivateKeyPath()), METHOD, uri, null)); server/services/src/main/java/com/doumee/config/wx/WxMiniConfig.java
@@ -139,13 +139,20 @@ public void load_transferToUser() { TransferToUser transferToUser = new TransferToUser( StringUtils.trimToNull(wxPayProperties.getMchId()), //åæ·id StringUtils.trimToNull(wxPayProperties.getSubMchId()), //åæ·id StringUtils.trimToNull(wxPayProperties.getWechatSerialNumer()), //åæ·APIè¯ä¹¦åºåå·ï¼å¦ä½è·å请åè https://pay.weixin.qq.com/doc/v3/merchant/4013053053 StringUtils.trimToNull(wxPayProperties.getWechatPrivateKeyPath()), // åæ·APIè¯ä¹¦ç§é¥æä»¶è·¯å¾ï¼æ¬å°æä»¶è·¯å¾ StringUtils.trimToNull(wxPayProperties.getWechatPayPublicKeyId()), // 微信æ¯ä»å ¬é¥IDï¼å¦ä½è·å请åè https://pay.weixin.qq.com/doc/v3/merchant/4013038816 StringUtils.trimToNull(wxPayProperties.getWechatPubKeyPath()) // 微信æ¯ä»å ¬é¥æä»¶è·¯å¾ï¼æ¬å°æä»¶è·¯å¾ ); // TransferToUser client = new TransferToUser( // "1229817002", // åæ·å·ï¼æ¯ç±å¾®ä¿¡æ¯ä»ç³»ç»çæå¹¶åé ç»æ¯ä¸ªåæ·çå¯ä¸æ è¯ç¬¦ï¼åæ·å·è·åæ¹å¼åè https://pay.weixin.qq.com/doc/v3/merchant/4013070756 // "3FE90C2F3D40A56E1C51926F31B8A8D22426CCE0", // åæ·APIè¯ä¹¦åºåå·ï¼å¦ä½è·å请åè https://pay.weixin.qq.com/doc/v3/merchant/4013053053 // "d://wechatApiclient_key.pem", // åæ·APIè¯ä¹¦ç§é¥æä»¶è·¯å¾ï¼æ¬å°æä»¶è·¯å¾ // "PUB_KEY_ID_0112298170022025071700291836000600", // 微信æ¯ä»å ¬é¥IDï¼å¦ä½è·å请åè https://pay.weixin.qq.com/doc/v3/merchant/4013038816 // "d://pub_key.pem" // 微信æ¯ä»å ¬é¥æä»¶è·¯å¾ï¼æ¬å°æä»¶è·¯å¾ // ); this.transferToUser = transferToUser; } server/services/src/main/java/com/doumee/config/wx/WxPayProperties.java
@@ -68,5 +68,9 @@ private String wechatPayPublicKeyId; // 微信æ¯ä»å ¬é¥ID private String wechatPubKeyPath; //微信æ¯ä»å ¬é¥æä»¶è·¯å¾ private String wechatPrivateKeyPath; private String wechatNotifyUrl; // private String wechatApiV3Key; // private String wechatPlatformPubKeyPath; } server/services/src/main/java/com/doumee/core/constants/Constants.java
@@ -358,9 +358,10 @@ */ @Getter public enum RevenueType { YGD_INCOME( 0, "ç¨å·¥åæ¶å ¥","ç¨å·¥åæ¶å ¥" ,0), HYD_INCOME( 1, "è´§è¿åæ¶å ¥","è´§è¿åæ¶å ¥" ,0), GCD_INCOME(2, "ä¾é¤åæ¶å ¥","ä¾é¤åæ¶å ¥" ,0), YGD_INCOME( 0, "ç¨å·¥åæ¶å ¥","ç¨å·¥å" ,0), HYD_INCOME( 1, "è´§è¿åæ¶å ¥","è´§è¿å" ,0), GCD_INCOME(2, "ä¾é¤åæ¶å ¥","ä¾é¤å" ,0), WITHDRAW_APPLY(3, "æç°ç³è¯·","æç°ç³è¯·" ,0), REFUND( 4, "æç°ç³è¯·éå","æç°ç³è¯·éå" ,0) ; @@ -384,6 +385,22 @@ } return null; } public static String getName(int index) { for (RevenueType c : RevenueType.values()) { if (c.getKey() == index) { return c.getName(); } } return null; } public static String getInfo(int index) { for (RevenueType c : RevenueType.values()) { if (c.getKey() == index) { return c.getInfo(); } } return null; } public static String getObjName(int index) { for (RevenueType c : RevenueType.values()) { if (c.getKey() == index) { server/services/src/main/java/com/doumee/dao/business/model/IdentityInfo.java
@@ -116,9 +116,7 @@ @ExcelColumn(name="认è¯å®¡æ¹å¤æ³¨") private String auditRemark; @ApiModelProperty(value = "å¾çåç¼") @TableField(exist = false) private String prefix; @ApiModelProperty(value = "å®¡æ ¸äººå§å") @TableField(exist = false) private String editorName; server/services/src/main/java/com/doumee/dao/business/model/Orders.java
@@ -220,6 +220,9 @@ @ApiModelProperty(value = "车è¾è§æ ¼", example = "1") private String carUnit; @ApiModelProperty(value = "䏿¹æ¯ä»è®¢åå·", example = "1") private String outTradeNo; @ApiModelProperty(value = "å¾ç") @TableField(exist = false) private List<Multifile> multifileList; @@ -242,7 +245,7 @@ @TableField(exist = false) private List<CateringDTO> cateringDTOList; @ApiModelProperty(value = "ç§»å¨ç«¯ç¨æ·", hidden = true) @ApiModelProperty(value = "ç§»å¨ç«¯ç¨æ·") @TableField(exist = false) private Member member; @@ -329,5 +332,38 @@ @TableField(exist = false) private Date doneTimeEnd; @ApiModelProperty(value = "æåºæ¹å¼ï¼0=ææ°åå¸;1=è·ç¦»ä¼å ;2=ä»·æ ¼ååº", example = "1") @TableField(exist = false) private Integer sortType; @ApiModelProperty(value = "æ¥åæ¹è¯å") @TableField(exist = false) private double score; @ApiModelProperty(value = "æ¥åé") @TableField(exist = false) private Long receiveNum; @ApiModelProperty(value = "ååé") @TableField(exist = false) private Long publishNum; @ApiModelProperty(value = "å忹头å") @TableField(exist = false) private String releaseCoverImage; @ApiModelProperty(value = "æ¥åæ¹å¤´å") @TableField(exist = false) private String acceptCoverImage; @ApiModelProperty(value = "ç»åº¦", example = "1") @TableField(exist = false) private BigDecimal queryLat; @ApiModelProperty(value = "纬度", example = "1") @TableField(exist = false) private BigDecimal queryLgt; } server/services/src/main/java/com/doumee/dao/dto/ReusePayDTO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,27 @@ package com.doumee.dao.dto; import com.doumee.dao.business.model.Member; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * Created by IntelliJ IDEA. * * @Author : Rk * @create 2023/3/23 9:50 */ @Data @ApiModel("éæ°æ¯ä»") public class ReusePayDTO { @ApiModelProperty(value = "订å主é®") private Integer orderId; @ApiModelProperty(value = "æ¯ä»éé¢ åä½ï¼å") private Long amount; @ApiModelProperty(hidden = true) private Member member; } server/services/src/main/java/com/doumee/service/business/OrdersService.java
@@ -5,10 +5,7 @@ import com.doumee.core.model.PageWrap; import com.doumee.dao.business.model.Member; import com.doumee.dao.business.model.Orders; import com.doumee.dao.dto.CommentDTO; import com.doumee.dao.dto.ConfirmUpdOrderDTO; import com.doumee.dao.dto.DoneOrderDTO; import com.doumee.dao.dto.UpdOrderDataDTO; import com.doumee.dao.dto.*; import com.doumee.dao.vo.OrderReleaseVO; import com.wechat.pay.java.service.refund.model.RefundNotification; @@ -116,7 +113,7 @@ void receiveCancelOrder(Integer orderId,Member member); Object doneOrder(DoneOrderDTO doneOrderDTO); OrderReleaseVO doneOrder(DoneOrderDTO doneOrderDTO); void comment(CommentDTO commentDTO); @@ -144,4 +141,6 @@ void autoGrabOrders(); void initializeCode(); OrderReleaseVO reusePay(ReusePayDTO reusePayDTO); } server/services/src/main/java/com/doumee/service/business/impl/IdentityInfoServiceImpl.java
@@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.doumee.biz.system.SystemDictDataBiz; import com.doumee.config.wx.SendWxMessage; import com.doumee.core.annotation.excel.ExcelColumn; import com.doumee.core.constants.Constants; import com.doumee.core.constants.ResponseStatus; @@ -23,6 +24,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.yulichang.wrapper.MPJLambdaWrapper; import io.swagger.annotations.ApiModelProperty; import me.chanjar.weixin.common.error.WxErrorException; import nonapi.io.github.classgraph.json.Id; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; @@ -55,9 +57,9 @@ @Transactional(rollbackFor = {BusinessException.class,Exception.class}) public Integer create(IdentityInfo identityInfo) { if(Objects.isNull(identityInfo) || Objects.isNull(identityInfo.getType()) || Objects.isNull(identityInfo.getMemberId()) || Objects.isNull(identityInfo.getAuthType()) || Objects.isNull(identityInfo.getType()) || Objects.isNull(identityInfo.getMemberId()) || Objects.isNull(identityInfo.getAuthType()) || StringUtils.isEmpty(identityInfo.getLinkName()) || StringUtils.isEmpty(identityInfo.getTelephone()) || StringUtils.isEmpty(identityInfo.getLocation()) @@ -71,23 +73,28 @@ ){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } //æ¥è¯¢ç¨æ·æ¯å¦å·²åå¨å½å身份 if(identityInfoMapper.selectCount(new QueryWrapper<IdentityInfo>().lambda().eq(IdentityInfo::getDeleted,Constants.ZERO).eq(IdentityInfo::getMemberId,identityInfo.getMemberId()) .eq(IdentityInfo::getType,identityInfo.getType()))>Constants.ZERO){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"å·²åå¨è¯¥èº«ä»½è¯·å·æ°æ¥çï¼"); }; identityInfo.setDeleted(Constants.ZERO); identityInfo.setCreateTime(new Date()); identityInfo.setUpdateTime(identityInfo.getCreateTime()); identityInfo.setAuditStatus(Constants.ONE); identityInfoMapper.insert(identityInfo); if(Objects.nonNull(identityInfo.getId())){ this.updateById(identityInfo); }else{ //æ¥è¯¢ç¨æ·æ¯å¦å·²åå¨å½å身份 if(identityInfoMapper.selectCount(new QueryWrapper<IdentityInfo>().lambda() .eq(IdentityInfo::getDeleted,Constants.ZERO) .eq(IdentityInfo::getMemberId,identityInfo.getMemberId()) .eq(IdentityInfo::getType,identityInfo.getType()))>Constants.ZERO){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"å·²åå¨è¯¥èº«ä»½è¯·å·æ°æ¥çï¼"); }; identityInfo.setDeleted(Constants.ZERO); identityInfo.setCreateTime(new Date()); identityInfo.setUpdateTime(identityInfo.getCreateTime()); identityInfo.setAuditStatus(Constants.ONE); identityInfoMapper.insert(identityInfo); memberMapper.update(new UpdateWrapper<Member>().lambda() .set(Constants.equalsInteger(identityInfo.getType(),Constants.ZERO),Member::getWorkerIdentity,Constants.ONE) .set(Constants.equalsInteger(identityInfo.getType(),Constants.ONE),Member::getDriverIdentity,Constants.ONE) .set(Constants.equalsInteger(identityInfo.getType(),Constants.TWO),Member::getChefIdentity,Constants.ONE) .eq(Member::getId,identityInfo.getMemberId())); memberMapper.update(new UpdateWrapper<Member>().lambda() .set(Constants.equalsInteger(identityInfo.getType(),Constants.ZERO),Member::getWorkerIdentity,Constants.ONE) .set(Constants.equalsInteger(identityInfo.getType(),Constants.ONE),Member::getDriverIdentity,Constants.ONE) .set(Constants.equalsInteger(identityInfo.getType(),Constants.TWO),Member::getChefIdentity,Constants.ONE) .eq(Member::getId,identityInfo.getMemberId())); } return identityInfo.getId(); } @@ -193,24 +200,50 @@ @Override public IdentityInfo findById(Integer id) { IdentityInfo identityInfo = identityInfoMapper.selectById(id); //缺失åç¼ identityInfo.setPrefix(""); return identityInfo; IdentityInfo model = identityInfoMapper.selectById(id); String path = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RESOURCE_PATH).getCode() +systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.INENTITY_FILES).getCode(); model.setImgList(new ArrayList<>()); if(StringUtils.isNotBlank(model.getImg1())){ model.getImgList().add(path + model.getImg1()); } if(StringUtils.isNotBlank(model.getImg2())){ model.getImgList().add(path + model.getImg2()); } if(StringUtils.isNotBlank(model.getImg3())) { model.getImgList().add(path + model.getImg3()); } if(StringUtils.isNotBlank(model.getImg4())){ model.getImgList().add(path + model.getImg4()); } return model; } @Override public IdentityInfo findByMemberType(Integer type,Integer memberId){ IdentityInfo identityInfo = identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda() IdentityInfo model = identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda() .eq(IdentityInfo::getMemberId,memberId).eq(IdentityInfo::getType,type)); if(Objects.nonNull(identityInfo)){ //缺失åç¼ identityInfo.setPrefix(""); if(Objects.nonNull(model)){ String path = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RESOURCE_PATH).getCode() +systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.INENTITY_FILES).getCode(); model.setImgList(new ArrayList<>()); if(StringUtils.isNotBlank(model.getImg1())){ model.getImgList().add(path + model.getImg1()); } if(StringUtils.isNotBlank(model.getImg2())){ model.getImgList().add(path + model.getImg2()); } if(StringUtils.isNotBlank(model.getImg3())) { model.getImgList().add(path + model.getImg3()); } if(StringUtils.isNotBlank(model.getImg4())){ model.getImgList().add(path + model.getImg4()); } }else{ identityInfo = new IdentityInfo(); model = new IdentityInfo(); } return identityInfo; return model; } @@ -385,6 +418,9 @@ } @Autowired private SendWxMessage sendWxMessage; @Override @Transactional(rollbackFor = {BusinessException.class,Exception.class}) public void audit(AuditDTO auditDTO){ @@ -403,6 +439,13 @@ if(!Constants.equalsInteger(identityInfo.getAuditStatus(),Constants.ONE)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"已审æ¹ï¼è¯·å¿é夿ä½"); } Member member = memberMapper.selectById(identityInfo.getMemberId()); if(Objects.isNull(member)){ throw new BusinessException(ResponseStatus.DATA_EMPTY); } identityInfo.setAuditStatus(auditDTO.getAuditStatus()); identityInfo.setAuditRemark(auditDTO.getAuditRemark()); identityInfo.setAuditTime(new Date()); Date date = new Date(); identityInfoMapper.update(new UpdateWrapper<IdentityInfo>().lambda() .set(IdentityInfo::getAuditStatus, auditDTO.getAuditStatus() ) @@ -422,5 +465,16 @@ .eq(Member::getId,identityInfo.getMemberId()) ); try{ //åé微信éç¥ if(StringUtils.isNotBlank(member.getOpenid())){ sendWxMessage.identityInfoMessage(member.getOpenid(),identityInfo); } }catch (WxErrorException wxErrorException){ } } } server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java
@@ -82,6 +82,9 @@ private WithdrawalOrdersMapper withdrawalOrdersMapper; @Autowired private ReceiveWeightMapper receiveWeightMapper; @Autowired private WxMiniUtilService wxMiniUtilService; @Resource @@ -117,6 +120,7 @@ //ç¨é¤è®¢å if(Constants.equalsInteger(orders.getType(),Constants.TWO)){ orders.setStatus(Constants.ordersStatus.waitPay.getKey()); orders.setOutTradeNo(UUID.randomUUID().toString().replace("-","")); //å¤èµ·æ¯ä»ä¸å¡ objects = this.getWxPayResponse(orders,orders.getMember().getOpenid()); orderReleaseVO.setObject(objects); @@ -175,10 +179,10 @@ Payer payer = new Payer(); payer.setSubOpenid(openid); request.setPayer(payer); request.setOutTradeNo(orders.getCode()); request.setOutTradeNo(orders.getOutTradeNo()); request.setNotifyUrl(WxMiniConfig.wxProperties.getNotifyUrl());//è¿ä¸ªåè°urlå¿ é¡»æ¯httpså¼å¤´ç Amount amount = new Amount(); amount.setTotal(orders.getEstimatedAccount().intValue()); amount.setTotal(1);//orders.getEstimatedAccount().intValue()); request.setAmount(amount); // PrepayResponse res = WxMiniConfig.wxPayService.prepay(request); // è·ä¹åä¸å示ä¾ä¸æ ·ï¼å¡«å é¢ä¸ååæ° @@ -219,11 +223,10 @@ || Objects.isNull(orders.getStartDate()) || Objects.isNull(orders.getEndDate()) || StringUtil.isBlank(orders.getLocation()) || (!Constants.equalsInteger(Constants.ONE,orders.getType())&&StringUtil.isBlank(orders.getLocationRemark())) || StringUtil.isBlank(orders.getLinkPhone()) || Objects.isNull(orders.getLat()) || Objects.isNull(orders.getLgt()) || Objects.isNull(orders.getCategoryId()) || (!Constants.equalsInteger(orders.getType(),Constants.TWO) && Objects.isNull(orders.getCategoryId())) || (Constants.equalsInteger(orders.getType(),Constants.ZERO) && Objects.isNull(orders.getWorkType())) || Objects.isNull(orders.getPriceNum1()) || Objects.isNull(orders.getEstimatedAccount()) @@ -401,28 +404,8 @@ throw new BusinessException(ResponseStatus.DATA_EMPTY); } orders.setStatusName(Constants.ordersStatus.getName(orders.getStatus())); this.getPriceUnit(orders); if(Constants.equalsInteger(orders.getType(),Constants.ZERO)){ if(Constants.equalsInteger(orders.getWorkType(),Constants.ZERO)){ orders.setPriceUnit("å /æ¤"); }else if(Constants.equalsInteger(orders.getWorkType(),Constants.ONE)){ orders.setPriceUnit("å /人/天"); }else{ if(Constants.equalsInteger(orders.getCarType(),Constants.ZERO)){ orders.setPriceUnit("å /人/天"); }else if(Constants.equalsInteger(orders.getCarType(),Constants.ONE)){ orders.setPriceUnit("å /人/å°æ¶"); }else{ orders.setPriceUnit("å /æ¤"); } } }else if(Constants.equalsInteger(orders.getType(),Constants.ONE)){ if(Constants.equalsInteger(orders.getCarType(),Constants.ZERO)){ orders.setPriceUnit("å /天"); }else if(Constants.equalsInteger(orders.getCarType(),Constants.ONE)){ orders.setPriceUnit("å /次"); } } //éä»¶ä¿¡æ¯ List<Multifile> multifileList = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda().eq(Multifile::getObjId,orders.getId()) .eq(Multifile::getIsdeleted,Constants.ZERO).eq(Multifile::getObjType,Constants.ONE).orderByAsc(Multifile::getId)); @@ -453,6 +436,29 @@ return orders; } public void getPriceUnit(Orders orders){ if(Constants.equalsInteger(orders.getType(),Constants.ZERO)){ if(Constants.equalsInteger(orders.getWorkType(),Constants.ZERO)){ orders.setPriceUnit("å /æ¤"); }else if(Constants.equalsInteger(orders.getWorkType(),Constants.ONE)){ orders.setPriceUnit("å /人/天"); }else{ if(Constants.equalsInteger(orders.getCarType(),Constants.ZERO)){ orders.setPriceUnit("å /人/天"); }else if(Constants.equalsInteger(orders.getCarType(),Constants.ONE)){ orders.setPriceUnit("å /人/å°æ¶"); }else{ orders.setPriceUnit("å /æ¤"); } } }else if(Constants.equalsInteger(orders.getType(),Constants.ONE)){ if(Constants.equalsInteger(orders.getCarType(),Constants.ZERO)){ orders.setPriceUnit("å /天"); }else if(Constants.equalsInteger(orders.getCarType(),Constants.ONE)){ orders.setPriceUnit("å /次"); } } } @Override public Orders findOne(Orders orders) { QueryWrapper<Orders> wrapper = new QueryWrapper<>(orders); @@ -733,6 +739,7 @@ if( (Constants.equalsInteger(orders.getType(),Constants.ZERO) && Constants.equalsInteger(orders.getWorkType(),Constants.ZERO )) || Constants.equalsInteger(orders.getType(),Constants.ONE) || Constants.equalsInteger(orders.getType(),Constants.TWO) ){ orders.setPriceNum2(Constants.ONE); }else{ @@ -798,9 +805,7 @@ Constants.OrdersLog ordersLog = Constants.OrdersLog.UPD_DISAGREE; this.saveOrderLog(orders,ordersLog, ordersLog.getInfo(),confirmUpdOrderDTO.getMember().getId(),null); //TODO åéä¸åæåæ´éç¥ } } @@ -960,7 +965,7 @@ */ @Override @Transactional(rollbackFor = {BusinessException.class,Exception.class}) public Object doneOrder(DoneOrderDTO doneOrderDTO){ public OrderReleaseVO doneOrder(DoneOrderDTO doneOrderDTO){ if(Objects.isNull(doneOrderDTO)||Objects.isNull(doneOrderDTO.getOrderId())){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } @@ -977,7 +982,8 @@ if(!Constants.equalsInteger(orders.getReleaseMemberId(),doneOrderDTO.getMember().getId())){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鿍çè®¢åæ æ³è¿è¡è¯¥æä½"); } orders.setPayAccount(doneOrderDTO.getAmount()); OrderReleaseVO orderReleaseVO = new OrderReleaseVO(); orderReleaseVO.setId(orders.getId()); Object object = null; //ç¨é¤è®¢å if(!Constants.equalsInteger(orders.getType(),Constants.TWO)){ @@ -985,20 +991,81 @@ //ææéé¢ Long tcje = Long.valueOf(new BigDecimal(orders.getPayAccount().toString()).multiply(orders.getPlatformRata()).intValue()); orders.setReceiveAccount(orders.getPayAccount() - tcje); orders.setOutTradeNo(UUID.randomUUID().toString().replace("-","")); ordersMapper.updateById(orders); //å¤èµ·æ¯ä»ä¸å¡ object = this.getWxPayResponse(orders,orders.getMember().getOpenid()); orderReleaseVO.setObject(object); }else{ orders.setStatus(Constants.ordersStatus.done.getKey()); orders.setFinishTime(new Date()); ordersMapper.updateById(orders); Member member = memberMapper.selectById(orders.getAcceptMemberId()); //å卿µæ°´è®°å½ MemberRevenue memberRevenue = new MemberRevenue(); memberRevenue.setCreateTime(new Date()); memberRevenue.setMemberId(orders.getAcceptMemberId()); memberRevenue.setType(orders.getType()); memberRevenue.setOptType(Constants.ONE); memberRevenue.setBeforeAmount(member.getAmount()); memberRevenue.setAmount(orders.getReceiveAccount()); memberRevenue.setAfterAmount(member.getAmount() + orders.getReceiveAccount()); if(Constants.equalsInteger(orders.getType(),Constants.ZERO)){ memberRevenue.setRemark(Constants.RevenueType.getInfo(memberRevenue.getType()) + "-" + (Constants.equalsInteger(orders.getWorkType(),Constants.ZERO)?"éæå·¥":(Constants.equalsInteger(orders.getWorkType(),Constants.ONE)?"忣工":"å è£ å·¥"))); }else{ memberRevenue.setRemark(Constants.RevenueType.getInfo(memberRevenue.getType())); } memberRevenue.setObjId(orders.getId()); memberRevenue.setObjType(Constants.ZERO); memberRevenue.setStatus(Constants.ZERO); memberRevenueMapper.insert(memberRevenue); //æ¥å¿åå¨ Constants.OrdersLog ordersLog = Constants.OrdersLog.DONE; this.saveOrderLog(orders,ordersLog, ordersLog.getInfo(),doneOrderDTO.getMember().getId(),null); } return object; return orderReleaseVO; } @Override public OrderReleaseVO reusePay(ReusePayDTO reusePayDTO){ if(Objects.isNull(reusePayDTO)||Objects.isNull(reusePayDTO.getOrderId())){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } Orders orders = ordersMapper.selectById(reusePayDTO.getOrderId()); if(Objects.isNull(orders)||Constants.equalsInteger(orders.getDeleted(),Constants.ONE)){ throw new BusinessException(ResponseStatus.DATA_EMPTY); } if(!Constants.equalsInteger(orders.getType(),Constants.TWO)&&Objects.isNull(reusePayDTO.getAmount())){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } if(!((( Constants.equalsInteger(orders.getType(),Constants.TWO) && Constants.equalsInteger(orders.getStatus(),Constants.ZERO) ) || ( !Constants.equalsInteger(orders.getType(),Constants.TWO) && Constants.equalsInteger(orders.getStatus(),Constants.THREE) )) && Constants.equalsInteger(orders.getPayStatus(),Constants.ZERO) )){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"订åç¶æå·²æµè½¬"); } OrderReleaseVO orderReleaseVO = new OrderReleaseVO(); if(!Constants.equalsInteger(orders.getType(),Constants.TWO)){ orders.setPayAccount(reusePayDTO.getAmount()); //ææéé¢ Long tcje = Long.valueOf(new BigDecimal(orders.getPayAccount().toString()).multiply(orders.getPlatformRata()).intValue()); orders.setReceiveAccount(orders.getPayAccount() - tcje); } orders.setOutTradeNo(UUID.randomUUID().toString().replace("-","")); ordersMapper.updateById(orders); //å¤èµ·æ¯ä»ä¸å¡ Object object = this.getWxPayResponse(orders,orders.getMember().getOpenid()); orderReleaseVO.setObject(object); orderReleaseVO.setId(orders.getId()); return orderReleaseVO; } @Override @@ -1083,20 +1150,16 @@ .set(Orders::getCommentType,Constants.ZERO) .eq(Orders::getId,orders.getId()) ); memberMapper.update(new UpdateWrapper<Member>().lambda() .set(Member::getScore," ( total_score +" + commentDTO.getLevel() + " ) / (score_order_num + 1 )") .set(Member::getTotalScore," total_score +" + commentDTO.getLevel()) .set(Member::getScoreOrderNum," score_order_num + 1 " ).eq(Member::getId,orders.getAcceptMemberId()) ); //æ¥å¿åå¨ Constants.OrdersLog ordersLog = Constants.OrdersLog.COMMENT; this.saveOrderLog(orders,ordersLog, ordersLog.getInfo(),orders.getAcceptMemberId(),null); } /** @@ -1117,7 +1180,7 @@ //å¤çæ¯ä»å®æé»è¾ ordersMapper.update(new UpdateWrapper<Orders>().lambda() .set(Orders::getUpdateTime,new Date()) .set(Orders::getStatus,Constants.ordersStatus.wait) .set(Orders::getStatus,Constants.ordersStatus.wait.getKey()) .set(Orders::getPayStatus,Constants.ONE) .set(Orders::getPayTime,new Date()) .set(Orders::getPayMethod,Constants.ZERO) @@ -1157,6 +1220,12 @@ memberRevenue.setBeforeAmount(member.getAmount()); memberRevenue.setAmount(orders.getReceiveAccount()); memberRevenue.setAfterAmount(member.getAmount() + orders.getReceiveAccount()); if(Constants.equalsInteger(orders.getType(),Constants.ZERO)){ memberRevenue.setRemark(Constants.RevenueType.getInfo(memberRevenue.getType()) + "-" + (Constants.equalsInteger(orders.getWorkType(),Constants.ZERO)?"éæå·¥":(Constants.equalsInteger(orders.getWorkType(),Constants.ONE)?"忣工":"å è£ å·¥"))); }else{ memberRevenue.setRemark(Constants.RevenueType.getInfo(memberRevenue.getType())); } memberRevenue.setObjId(orders.getId()); memberRevenue.setObjType(Constants.ZERO); memberRevenue.setStatus(Constants.ZERO); @@ -1175,6 +1244,7 @@ ordersLog.getInfo(),orders.getReleaseMemberId(),null); //TODO éç¥æ¥åæ¹ æ¬¾é¡¹å·²å°è´¦ } } return ("å¤çæå!"); @@ -1187,73 +1257,124 @@ MPJLambdaWrapper<Orders> queryWrapper = new MPJLambdaWrapper<>(); Utils.MP.blankToNull(pageWrap.getModel()); Orders model = pageWrap.getModel(); if(Objects.isNull(model) || Objects.isNull(model.getQueryLat()) || Objects.isNull(model.getQueryLgt()) || Objects.isNull(model.getQueryMyOrderType()) ){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } BigDecimal chefLat = model.getQueryLat(); BigDecimal chefLgt = model.getQueryLgt(); BigDecimal driverLat = model.getQueryLat(); BigDecimal driverLgt = model.getQueryLgt(); BigDecimal workerLat = model.getQueryLat(); BigDecimal workerLgt = model.getQueryLgt(); IdentityInfo wokerIdentityInfo = identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda() .eq(IdentityInfo::getMemberId,model.getMember().getId()) .eq(IdentityInfo::getType,Constants.ZERO) .eq(IdentityInfo::getAuditStatus,Constants.TWO) .last("limit 1") ); if(Objects.nonNull(wokerIdentityInfo)){ workerLat = wokerIdentityInfo.getLat(); workerLgt = wokerIdentityInfo.getLgt(); } IdentityInfo driverIdentityInfo = identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda() .eq(IdentityInfo::getMemberId,model.getMember().getId()) .eq(IdentityInfo::getType,Constants.ONE) .eq(IdentityInfo::getAuditStatus,Constants.TWO) .last("limit 1") ); if(Objects.nonNull(driverIdentityInfo)){ driverLat = driverIdentityInfo.getLat(); driverLgt = driverIdentityInfo.getLgt(); } IdentityInfo chefIdentityInfo = identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda() .eq(IdentityInfo::getMemberId,model.getMember().getId()) .eq(IdentityInfo::getType,Constants.TWO) .eq(IdentityInfo::getAuditStatus,Constants.TWO) .last("limit 1") ); if(Objects.nonNull(chefIdentityInfo)){ chefLat = chefIdentityInfo.getLat(); chefLgt = chefIdentityInfo.getLgt(); } queryWrapper.selectAll(Orders.class) .select("c1.name",Orders::getCategoryName) .select("c2.name",Orders::getTransportTypeName) .leftJoin(" category c1 on t.category_id = c1.id ") .leftJoin(" category c2 on t.TRANSPORT_TYPE_ID = c2.id "); .leftJoin(" category c2 on t.TRANSPORT_TYPE_ID = c2.id ") .select(" case when T.LGT IS NULL OR T.LAT IS NULL THEN 0 " + " when t.TYPE = 0 then CONVERT( ST_Distance_Sphere ( POINT ( t.LGT, t.LAT ), POINT ( "+workerLgt+", "+workerLat+" )) /1000,DECIMAL(15,2)) " + " when t.TYPE = 1 then CONVERT( ST_Distance_Sphere ( POINT ( t.LGT, t.LAT ), POINT ( "+driverLgt+", "+driverLat+" )) /1000,DECIMAL(15,2)) " + " else CONVERT( ST_Distance_Sphere ( POINT ( t.LGT, t.LAT ), POINT ( "+chefLgt+", "+chefLat+" )) /1000,DECIMAL(15,2)) end " , Orders::getDistance) .eq(Objects.nonNull(model.getType()),Orders::getType,model.getType()); if(Objects.nonNull(model.getQueryMyOrderType())){ if(Constants.equalsInteger(model.getQueryMyOrderType(),Constants.ZERO)){ //ååæ¹ æç订å queryWrapper.eq(Orders::getReleaseMemberId,model.getMember().getId()); queryWrapper.eq(Objects.nonNull(model.getStatus()),Orders::getStatus,model.getStatus()); queryWrapper.orderByDesc(Orders::getCreateTime); }else if(Constants.equalsInteger(model.getQueryMyOrderType(),Constants.ONE)){ //æ¥åæ¹ æç订å queryWrapper.eq(Orders::getAcceptMemberId,model.getMember().getId()); queryWrapper.eq(Objects.nonNull(model.getStatus()),Orders::getStatus,model.getStatus()); queryWrapper.orderByDesc(Orders::getCreateTime); }else{ //æ¥è¯¢ç¨æ·çæ¥åæé ReceiveWeight receiveWeight = receiveWeightMapper.selectOne(new QueryWrapper<ReceiveWeight>().lambda().eq(ReceiveWeight::getDeleted,Constants.ZERO).apply(" RECEIVE_MIN < "+model.getMember().getReceiveNum()+" and RECEIVE_MAX > " + model.getMember().getReceiveNum()).last(" limit 1 ")); if(Objects.nonNull(receiveWeight)){ queryWrapper.apply(" DATE_ADD(t.CREATE_TIME, INTERVAL "+receiveWeight.getDelayTime()+" MINUTE) < now() "); } queryWrapper.eq(Orders::getStatus,Constants.ordersStatus.wait.getKey()); //æ¥å大å queryWrapper.and(Constants.equalsInteger(model.getMember().getWorkerIdentity(),Constants.TWO)||Constants.equalsInteger(model.getMember().getDriverIdentity(),Constants.TWO)||Constants.equalsInteger(model.getMember().getChefIdentity(),Constants.TWO),i-> i.eq(Constants.equalsInteger(model.getMember().getWorkerIdentity(),Constants.TWO),Orders::getType,Constants.ZERO) .or() .eq(Constants.equalsInteger(model.getMember().getDriverIdentity(),Constants.TWO),Orders::getType,Constants.ONE) .or() .eq(Constants.equalsInteger(model.getMember().getChefIdentity(),Constants.TWO),Orders::getType,Constants.TWO) ); queryWrapper.apply(!(Constants.equalsInteger(model.getMember().getWorkerIdentity(),Constants.TWO)||Constants.equalsInteger(model.getMember().getDriverIdentity(),Constants.TWO)||Constants.equalsInteger(model.getMember().getChefIdentity(),Constants.TWO))," 1 = 2 " ); queryWrapper.ne(Orders::getReleaseMemberId,model.getMember().getId()); if(Objects.nonNull(model.getSortType())){ if(Constants.equalsInteger(model.getSortType(),Constants.ZERO)){ queryWrapper.orderByDesc(Orders::getCreateTime); }else if(Constants.equalsInteger(model.getSortType(),Constants.ONE)){ queryWrapper.orderByAsc(" distance "); }else{ queryWrapper.orderByDesc(Orders::getEstimatedAccount); } } } } for(PageWrap.SortData sortData: pageWrap.getSorts()) { if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) { queryWrapper.orderByDesc(sortData.getProperty()); } else { queryWrapper.orderByAsc(sortData.getProperty()); } } } IPage<Orders> iPage = ordersMapper.selectJoinPage(page,Orders.class,queryWrapper); if(Objects.nonNull(model.getQueryMyOrderType())&&Constants.equalsInteger(model.getQueryMyOrderType(),Constants.TWO)){ if(Constants.equalsInteger(model.getMember().getUseIdentity(),Constants.ONE)){ model.getMember().setWorkerIdentityModel( identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda() .eq(IdentityInfo::getMemberId,model.getMember().getId()) .eq(IdentityInfo::getType,Constants.ZERO) .eq(IdentityInfo::getAuditStatus,Constants.TWO) .last("limit 1") ) ); model.getMember().setDriverIdentityModel( identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda() .eq(IdentityInfo::getMemberId,model.getMember().getId()) .eq(IdentityInfo::getType,Constants.ONE) .eq(IdentityInfo::getAuditStatus,Constants.TWO) .last("limit 1") ) ); model.getMember().setChefIdentityModel( identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda() .eq(IdentityInfo::getMemberId,model.getMember().getId()) .eq(IdentityInfo::getType,Constants.TWO) .eq(IdentityInfo::getAuditStatus,Constants.TWO) .last("limit 1") ) ); } for (Orders orders:iPage.getRecords()) { this.getDistance(model.getMember(),orders); } for (Orders orders:iPage.getRecords()) { this.getPriceUnit(orders); } // if(Objects.nonNull(model.getQueryMyOrderType())&&Constants.equalsInteger(model.getQueryMyOrderType(),Constants.TWO)){ // if(Constants.equalsInteger(model.getMember().getUseIdentity(),Constants.ONE)){ // model.getMember().setWorkerIdentityModel( // identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda() // .eq(IdentityInfo::getMemberId,model.getMember().getId()) // .eq(IdentityInfo::getType,Constants.ZERO) // .eq(IdentityInfo::getAuditStatus,Constants.TWO) // .last("limit 1") // ) // ); // model.getMember().setDriverIdentityModel( // identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda() // .eq(IdentityInfo::getMemberId,model.getMember().getId()) // .eq(IdentityInfo::getType,Constants.ONE) // .eq(IdentityInfo::getAuditStatus,Constants.TWO) // .last("limit 1") // ) // ); // model.getMember().setChefIdentityModel( // identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda() // .eq(IdentityInfo::getMemberId,model.getMember().getId()) // .eq(IdentityInfo::getType,Constants.TWO) // .eq(IdentityInfo::getAuditStatus,Constants.TWO) // .last("limit 1") // ) // ); // } // for (Orders orders:iPage.getRecords()) { // this.getDistance(model.getMember(),orders); // } // } return PageData.from(iPage); } @@ -1309,28 +1430,36 @@ public Orders getDetail(Integer id,Integer userType) { Orders orders = ordersMapper.selectJoinOne(Orders.class,new MPJLambdaWrapper<Orders>() .selectAll(Orders.class) .select(" m1.name " , Orders::getReleaseName) .select(" m1.telephone " , Orders::getReleasePhone) .select(" case when i.AUTH_TYPE = 0 then i.LINK_NAME else i.COMPANY_NAME end " , Orders::getAcceptName) .select(" i.TELEPHONE " , Orders::getAcceptPhone) .select("c1.name",Orders::getCategoryName) .select("c2.name",Orders::getTransportTypeName) .select(" m2.SCORE " , Orders::getScore) .select(" m1.PUBLISH_NUM " , Orders::getPublishNum) .select(" m2.RECEIVE_NUM " , Orders::getReceiveNum) .select(" m1.COVER_IMAGE " , Orders::getReleaseCoverImage) .select(" m2.COVER_IMAGE " , Orders::getAcceptCoverImage) .leftJoin(" category c1 on t.category_id = c1.id ") .leftJoin(" category c2 on t.TRANSPORT_TYPE_ID = c2.id ") .leftJoin("member m1 on t.RELEASE_MEMBER_ID = m1.id ") .leftJoin("member m2 on t.ACCEPT_MEMBER_ID = m2.id ") .leftJoin("identity_info i on m2.id = i.MEMBER_ID and i.TYPE = t.type and i.AUDIT_STATUS = 2 ") .eq(Orders::getId,id) ); if(Objects.isNull(orders)){ throw new BusinessException(ResponseStatus.DATA_EMPTY); } if(Objects.nonNull(userType)){ Member member = memberMapper.selectById( Constants.equalsInteger(userType,Constants.ZERO)?orders.getReleaseMemberId():orders.getAcceptMemberId() ); if(Objects.nonNull(member)){ if(org.apache.commons.lang3.StringUtils.isNotBlank(member.getCoverImage())){ //头åä¿¡æ¯ String path = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RESOURCE_PATH).getCode() +systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.MEMBER_FILES).getCode(); member.setFullCoverImage(path + member.getCoverImage()); } orders.setMember(member); } //头åä¿¡æ¯ String coverPath = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RESOURCE_PATH).getCode() +systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.MEMBER_FILES).getCode(); if(org.apache.commons.lang3.StringUtils.isNotBlank(orders.getReleaseCoverImage())){ orders.setReleaseCoverImage(coverPath + orders.getReleaseCoverImage()); } if(org.apache.commons.lang3.StringUtils.isNotBlank(orders.getAcceptCoverImage())){ orders.setAcceptCoverImage(coverPath + orders.getAcceptCoverImage()); } List<Multifile> multifileList = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda().eq(Multifile::getObjId,orders.getId()) .eq(Multifile::getIsdeleted,Constants.ZERO).eq(Multifile::getObjType,Constants.ONE).orderByAsc(Multifile::getId)); @@ -1342,7 +1471,7 @@ } orders.setMultifileList(multifileList); } orders.setStatusName(Constants.ordersStatus.getName(orders.getStatus())); return orders; } server/services/src/main/java/com/doumee/service/business/impl/WithdrawalOrdersServiceImpl.java
@@ -1,6 +1,5 @@ package com.doumee.service.business.impl; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.doumee.config.wx.TransferToUser; import com.doumee.config.wx.WXPayUtility; @@ -210,7 +209,6 @@ transferToUserRequest.outBillNo = withdrawalOrders.getOutBillNo(); transferToUserRequest.transferAmount = withdrawalDTO.getAmount(); transferToUserRequest.transferRemark = "æç°ç³è¯·"; // transferToUserRequest.userName = member.getName(); try { TransferToUser.TransferToUserResponse response = WxMiniConfig.transferToUser.run(transferToUserRequest,member.getName()); withdrawalOrders.setRemark(JSONObject.toJSONString(response)); @@ -231,6 +229,7 @@ memberRevenue.setAmount(withdrawalOrders.getAmount()); memberRevenue.setAfterAmount(member.getAmount() - withdrawalOrders.getAmount()); memberRevenue.setObjId(withdrawalOrders.getId()); memberRevenue.setRemark(Constants.RevenueType.getInfo(memberRevenue.getType())); memberRevenue.setObjType(Constants.ONE); memberRevenue.setDeleted(Constants.ZERO); memberRevenue.setStatus(Constants.TWO); server/services/src/main/resources/application-dev.yml
@@ -85,14 +85,14 @@ pay: #æå¡å---------start------- appId: wx48fd8faa35cc8277 mchId: 1229817002 #1661770902 mchId: 1661770902 apiV3Key: iF3kC8pL8dZ9iU3hN5fX9zI6eF4xQ6fT serialNumer: 368B835A194384FD583B83B77977B84127D2F655 mchKey: W97N53Q71326D6JZ2E9HY5M4VT4BAC8S # notifyUrl: http://xiaopiqiu3.natapp1.cc/api/wxPayNotify # refundNotifyUrl: http://xiaopiqiu3.natapp1.cc/api/wxRefundNotify notifyUrl: https://dmtest.ahapp.net/bike_h5_api/api/wxPayNotify refundNotifyUrl: https://dmtest.ahapp.net/bike_h5_api/api/wxRefundNotify notifyUrl: http://xiaopiqiu2.natapp1.cc/web/wxPayNotify refundNotifyUrl: http://xiaopiqiu2.natapp1.cc/web/wxRefundNotify # notifyUrl: https://dmtest.ahapp.net/bike_h5_api/api/wxPayNotify # refundNotifyUrl: https://dmtest.ahapp.net/bike_h5_api/api/wxRefundNotify #keyPath: /usr/local/aliConfig/bike/apiclient_cert.p12 #privateCertPath: /usr/local/aliConfig/bike/apiclient_cert.pem #privateKeyPath: /usr/local/aliConfig/bike/apiclient_key.pem @@ -102,10 +102,14 @@ #åæ·ä¿¡æ¯ wechatSerialNumer: 3FE90C2F3D40A56E1C51926F31B8A8D22426CCE0 wechatPayPublicKeyId: PUB_KEY_ID_0112298170022025071700291836000600 wechatPubKeyPath: d://pub_key.pem wechatPrivateKeyPath: d://wechatApiclient_key.pem wechatSerialNumer: 3C9A32FB6CD453FAAAF97F9737ECAEA9D6625727 wechatPayPublicKeyId: 47E172124E73E8098A565E971064C20ACDE7C911 # PUB_KEY_ID_0116617720032025071800291849000801 #åæ·/平尿¯ä»å ¬é¥id wechatPubKeyPath: d://pub_key.pem #åæ·æ¯ä»å ¬é¥ #wechatPlatformPubKeyPath: d:/wechatpay_47E172124E73E8098A565E971064C20ACDE7C911.pem #平尿¯ä»å ¬é¥ wechatPrivateKeyPath: d://wechatApiclient_key.pem #åæ·ç§é¥ wechatNotifyUrl: http://xiaopiqiu2.natapp1.cc/web/wechat/transferNotify #åæ·è½¬è´¦åè°å°å #wechatApiV3Key: V4PRKUBTK2BKNKJAD9NSI9YFG2Q0EOT1 #åæ·APIV3Key #æå¡å-------------end--- existsSub: 1 server/web/src/main/java/com/doumee/api/web/OrdersApi.java
@@ -9,10 +9,7 @@ import com.doumee.dao.business.model.IdentityInfo; import com.doumee.dao.business.model.Member; import com.doumee.dao.business.model.Orders; import com.doumee.dao.dto.CommentDTO; import com.doumee.dao.dto.ConfirmUpdOrderDTO; import com.doumee.dao.dto.DoneOrderDTO; import com.doumee.dao.dto.UpdOrderDataDTO; import com.doumee.dao.dto.*; import com.doumee.dao.vo.OrderReleaseVO; import com.doumee.service.business.IdentityInfoService; import com.doumee.service.business.MemberService; @@ -145,11 +142,22 @@ @ApiImplicitParams({ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), }) public ApiResponse<Object> doneOrder(@RequestBody DoneOrderDTO doneOrderDTO) { public ApiResponse<OrderReleaseVO> doneOrder(@RequestBody DoneOrderDTO doneOrderDTO) { doneOrderDTO.setMember(getMemberResponse()); return ApiResponse.success("æä½æå",ordersService.doneOrder(doneOrderDTO)); } @LoginRequired @ApiOperation(value = "订åéæ°æ¯ä» - ååæ¹", notes = "å°ç¨åºç«¯") @PostMapping("/reusePay") @ApiImplicitParams({ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), }) public ApiResponse<OrderReleaseVO> reusePay(@RequestBody ReusePayDTO reusePayDTO) { reusePayDTO.setMember(getMemberResponse()); return ApiResponse.success("æä½æå",ordersService.reusePay(reusePayDTO)); } @LoginRequired @ApiOperation(value = "订åè¯ä»· - ååæ¹", notes = "å°ç¨åºç«¯") small-program/pages/demand-hall/demand-hall.vue
@@ -36,7 +36,7 @@ </view> <!-- ååæ¹ --> <view class="index-list" v-if="typeViewId === 0"> <view class="index-list-item" v-for="(item, index) in orderList" :key="index"> <view class="index-list-item" v-for="(item, index) in orderList" :key="index" @click="jumpDesc(item)"> <view class="index-list-item-head"> <view class="index-list-item-head-l"> <view class="xoam"></view> @@ -85,7 +85,7 @@ </view> <view class="index-list-item-dz"> <image src="/static/icon/order_ic_time@2x.png" mode="widthFix"></image> <text>{{item.startDate}} è³ {{item.endDate}}ï¼{{item.priceNum1}}天ï¼</text> <text>{{item.startDate}} è³ {{item.endDate}}ï¼{{item.totalDays}}天ï¼</text> </view> </template> <view class="index-list-item-price"> @@ -344,6 +344,11 @@ this.getOrderList() }, methods: { jumpDesc(item) { uni.navigateTo({ url: `/pages/order-details/order-details?id=${item.id}` }) }, // ä¿®æ¹ jumpEdit(item) { if (item.type === 0 && item.workType === 0) { @@ -357,6 +362,10 @@ } else if (item.type === 0 && item.workType === 2) { uni.navigateTo({ url: `/pages/packaging-worker/packaging-worker?id=${item.id}` }) } else if (item.type === 1) { uni.navigateTo({ url: `/pages/freight/freight?id=${item.id}` }) } }, @@ -404,6 +413,8 @@ if (this.orderList.length === res.data.total) { this.next = false } else { this.page += 1 } }) }, small-program/pages/using-workers/using-workers.vue
@@ -56,7 +56,7 @@ <view class="list-item-row-label">å¾ç</view> <view class="list-item-row-upload"> <view class="upload-item" v-for="(item, index) in form.multifileList" :key="index"> <image :src="item.url" mode="widthFix"></image> <image :src="item.url || item.fileurlFull" mode="widthFix"></image> <image class="upload-item-dele" @click="form.multifileList.splice(index, 1)" src="/static/icon/ic_delete1@2x.png" mode="widthFix"></image> </view> <view class="upload-item" @click="uploadImg"> @@ -155,6 +155,7 @@ show: false, show1: false, form: { id: null, days: '', startDate: '', endDate: '', @@ -175,19 +176,34 @@ estimatedAccount: '', type: 0 }, modify: false, cateList: [], viewStatus: false }; }, onLoad(option) { this.form.linkPhone = this.userInfo.telephone this.form.days = option.days this.form.startDate = option.startDate this.form.endDate = option.endDate this.form.lat = option.latitude this.form.lgt = option.longitude this.form.location = option.address this.form.workType = option.workType // ç¼è¾ if (option.id) { this.form.id = option.id this.$u.api.getDetail({ orderId: option.id }).then(res => { for (const key in this.form) { this.form[key] = res.data[key] } this.form.days = res.data.totalDays this.form.price = Number(this.form.price) / 100 }) } else { this.form.linkPhone = this.userInfo.telephone this.form.days = option.days this.form.startDate = option.startDate this.form.endDate = option.endDate this.form.lat = option.latitude this.form.lgt = option.longitude this.form.location = option.address this.form.workType = option.workType } this.getCateList() }, methods: { @@ -205,14 +221,33 @@ if (!this.form.linkPhone) { return uni.showToast({ title: '请è¾å ¥èç³»çµè¯', icon: 'none' }) } this.$u.api.release({ ...this.form, price: Number(this.form.price) * 100 }) .then(res => { if (res.code == 200) { uni.navigateTo({ url: `/pages/success/success?orderId=${res.data.id}` }) } }) if (!this.form.id) { this.$u.api.release({ ...this.form, price: Number(this.form.price) * 100 }) .then(res => { if (res.code == 200) { uni.navigateTo({ url: `/pages/success/success?orderId=${res.data.id}` }) } }) } else { this.$u.api.updateOrder({ ...this.form, price: Number(this.form.price) * 100 }) .then(res => { if (res.code == 200) { uni.showToast({ title: 'ç¼è¾æå', icon: 'success', mask: true, duration: 2000 }) setTimeout(() => { uni.navigateBack({ delta: 1 }); uni.$emit('refresh') }, 1500) } }) } }, // 计ç®éé¢ getPrice() { @@ -225,6 +260,7 @@ type: this.form.type, workType: this.form.workType }).then(res => { this.modify = true this.form.estimatedAccount = res.data }) }