From f4d2f6743865223f666a6775be990afb9ac58b08 Mon Sep 17 00:00:00 2001 From: Lemon Date: Thu, 13 Jul 2023 11:16:34 +0800 Subject: [PATCH 01/13] =?UTF-8?q?update=20=20=E5=B0=86=E8=A7=A3=E9=94=81?= =?UTF-8?q?=E5=8D=A1/vin=E7=8A=B6=E6=80=81=E9=80=BB=E8=BE=91=E4=BB=8E=200x?= =?UTF-8?q?3b=E7=A7=BB=E5=88=B0=E7=BB=93=E7=AE=97=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TransactionRecordsRequestHandler.java | 36 +++++++++---------- .../impl/OrderBasicInfoServiceImpl.java | 24 +++++++++++++ 2 files changed, 42 insertions(+), 18 deletions(-) diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/TransactionRecordsRequestHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/TransactionRecordsRequestHandler.java index 30cadc4aa..14c99bec8 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/handler/TransactionRecordsRequestHandler.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/handler/TransactionRecordsRequestHandler.java @@ -604,24 +604,24 @@ public class TransactionRecordsRequestHandler extends AbstractHandler { if (Objects.isNull(orderBasicInfo.getChargeEndTime())) { // 结束时间 orderBasicInfo.setChargeEndTime(DateUtils.parseDate(data.getEndTime())); } - if (!StringUtils.equals("0000000000000000", data.getLogicCard())) { - // 根据物理卡号查出当前为锁定状态的卡 - PileAuthCard cardInfo = pileAuthCardService.selectSomeStatusCardInfo(CardStatusEnum.START_LOCK.getCode(), orderBasicInfo.getLogicCard()); - if (cardInfo != null) { - // orderBasicInfo.setMemberId(cardInfo.getMemberId()); - // 将此卡状态改为正常 - cardInfo.setStatus(CardStatusEnum.NORMAL.getCode()); - pileAuthCardService.updatePileAuthCard(cardInfo); - } - } - // 如果是vin启动,将启动锁定状态改为正常 - if (StringUtils.equals(data.getTransactionIdentifier(), "05")) { - MemberPlateNumberRelation plateInfo = memberPlateNumberRelationService.getMemberPlateInfoByVinCode(data.getVinCode()); - if (plateInfo != null && (StringUtils.equals(plateInfo.getVinStatus(), "2"))) { - plateInfo.setVinStatus("1"); - memberPlateNumberRelationService.updateMemberPlateNumberRelation(plateInfo); - } - } + // if (!StringUtils.equals("0000000000000000", data.getLogicCard())) { + // // 根据物理卡号查出当前为锁定状态的卡 + // PileAuthCard cardInfo = pileAuthCardService.selectSomeStatusCardInfo(CardStatusEnum.START_LOCK.getCode(), orderBasicInfo.getLogicCard()); + // if (cardInfo != null) { + // // orderBasicInfo.setMemberId(cardInfo.getMemberId()); + // // 将此卡状态改为正常 + // cardInfo.setStatus(CardStatusEnum.NORMAL.getCode()); + // pileAuthCardService.updatePileAuthCard(cardInfo); + // } + // } + // // 如果是vin启动,将启动锁定状态改为正常 + // if (StringUtils.equals(data.getTransactionIdentifier(), "05")) { + // MemberPlateNumberRelation plateInfo = memberPlateNumberRelationService.getMemberPlateInfoByVinCode(data.getVinCode()); + // if (plateInfo != null && (StringUtils.equals(plateInfo.getVinStatus(), "2"))) { + // plateInfo.setVinStatus("1"); + // memberPlateNumberRelationService.updateMemberPlateNumberRelation(plateInfo); + // } + // } orderBasicInfoService.updateOrderBasicInfo(orderBasicInfo); // 结算订单操作 diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java index c36d60ff0..1034b2228 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java @@ -796,6 +796,30 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService { transactionService.doUpdateOrder(dto); logger.info("结算订单 end OrderTransactionDTO:{}", JSONObject.toJSONString(dto)); + try { + // 将卡/vin状态解锁 + if (!StringUtils.equals("0000000000000000", data.getLogicCard())) { + // 根据物理卡号查出当前为锁定状态的卡 + PileAuthCard cardInfo = pileAuthCardService.selectSomeStatusCardInfo(CardStatusEnum.START_LOCK.getCode(), orderBasicInfo.getLogicCard()); + if (cardInfo != null) { + // orderBasicInfo.setMemberId(cardInfo.getMemberId()); + // 将此卡状态改为正常 + cardInfo.setStatus(CardStatusEnum.NORMAL.getCode()); + pileAuthCardService.updatePileAuthCard(cardInfo); + } + } + // 如果是vin启动,将启动锁定状态改为正常 + if (StringUtils.equals(data.getTransactionIdentifier(), "05")) { + MemberPlateNumberRelation plateInfo = memberPlateNumberRelationService.getMemberPlateInfoByVinCode(data.getVinCode()); + if (plateInfo != null && (StringUtils.equals(plateInfo.getVinStatus(), "2"))) { + plateInfo.setVinStatus("1"); + memberPlateNumberRelationService.updateMemberPlateNumberRelation(plateInfo); + } + } + } catch (Exception e) { + logger.error("解锁卡/vin状态 error,", e); + } + try { // uniApp 发送停止充电订阅消息 WechatSendMsgDTO wechatSendMsgDTO = new WechatSendMsgDTO(); From 80114296cf2c2f20ab70e8ef2fe1736f120b7c67 Mon Sep 17 00:00:00 2001 From: "autumn.g@foxmail.com" Date: Thu, 13 Jul 2023 11:22:27 +0800 Subject: [PATCH 02/13] update --- .../java/com/jsowell/pile/vo/uniapp/UniAppOrderDetailVO.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/vo/uniapp/UniAppOrderDetailVO.java b/jsowell-pile/src/main/java/com/jsowell/pile/vo/uniapp/UniAppOrderDetailVO.java index 246ee66a6..d5ac1819c 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/vo/uniapp/UniAppOrderDetailVO.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/vo/uniapp/UniAppOrderDetailVO.java @@ -11,5 +11,5 @@ import lombok.NoArgsConstructor; @Builder public class UniAppOrderDetailVO { - + private String orderCode; } From e7de879e13e9fd2768d66eccd0ae9868e1e4727b Mon Sep 17 00:00:00 2001 From: "autumn.g@foxmail.com" Date: Thu, 13 Jul 2023 11:37:11 +0800 Subject: [PATCH 03/13] =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jsowell-ui/src/utils/request.js | 252 ++++++++++++++++---------------- 1 file changed, 128 insertions(+), 124 deletions(-) diff --git a/jsowell-ui/src/utils/request.js b/jsowell-ui/src/utils/request.js index f50ae65d1..7fd6594f5 100644 --- a/jsowell-ui/src/utils/request.js +++ b/jsowell-ui/src/utils/request.js @@ -1,65 +1,65 @@ import axios from 'axios' -import { Notification, MessageBox, Message, Loading } from 'element-ui' +import {Notification, MessageBox, Message, Loading} from 'element-ui' import store from '@/store' -import { getToken } from '@/utils/auth' +import {getToken} from '@/utils/auth' import errorCode from '@/utils/errorCode' -import { tansParams, blobValidate } from "@/utils/common"; +import {tansParams, blobValidate} from "@/utils/common"; import cache from '@/plugins/cache' -import { saveAs } from 'file-saver' +import {saveAs} from 'file-saver' let downloadLoadingInstance; // 是否显示重新登录 -export let isRelogin = { show: false }; +export let isRelogin = {show: false}; axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8' // 创建axios实例 const service = axios.create({ - // axios中请求配置有baseURL选项,表示请求URL公共部分 - baseURL: process.env.VUE_APP_BASE_API, - // 超时 - timeout: 30000 + // axios中请求配置有baseURL选项,表示请求URL公共部分 + baseURL: process.env.VUE_APP_BASE_API, + // 超时 + timeout: 30000 }) // request拦截器 service.interceptors.request.use(config => { - // 是否需要设置 token - const isToken = (config.headers || {}).isToken === false - // 是否需要防止数据重复提交 - const isRepeatSubmit = (config.headers || {}).repeatSubmit === false - if (getToken() && !isToken) { - config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改 - } - // get请求映射params参数 - if (config.method === 'get' && config.params) { - let url = config.url + '?' + tansParams(config.params); - url = url.slice(0, -1); - config.params = {}; - config.url = url; - } - if (!isRepeatSubmit && (config.method === 'post' || config.method === 'put')) { - const requestObj = { - url: config.url, - data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data, - time: new Date().getTime() + // 是否需要设置 token + const isToken = (config.headers || {}).isToken === false + // 是否需要防止数据重复提交 + const isRepeatSubmit = (config.headers || {}).repeatSubmit === false + if (getToken() && !isToken) { + config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改 } - const sessionObj = cache.session.getJSON('sessionObj') - if (sessionObj === undefined || sessionObj === null || sessionObj === '') { - cache.session.setJSON('sessionObj', requestObj) - } else { - const s_url = sessionObj.url; // 请求地址 - const s_data = sessionObj.data; // 请求数据 - const s_time = sessionObj.time; // 请求时间 - const interval = 1000; // 间隔时间(ms),小于此时间视为重复提交 - if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) { - const message = '数据正在处理,请勿重复提交'; - console.warn(`[${s_url}]: ` + message) - return Promise.reject(new Error(message)) - } else { - cache.session.setJSON('sessionObj', requestObj) - } + // get请求映射params参数 + if (config.method === 'get' && config.params) { + let url = config.url + '?' + tansParams(config.params); + url = url.slice(0, -1); + config.params = {}; + config.url = url; } - } - return config + if (!isRepeatSubmit && (config.method === 'post' || config.method === 'put')) { + const requestObj = { + url: config.url, + data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data, + time: new Date().getTime() + } + const sessionObj = cache.session.getJSON('sessionObj') + if (sessionObj === undefined || sessionObj === null || sessionObj === '') { + cache.session.setJSON('sessionObj', requestObj) + } else { + const s_url = sessionObj.url; // 请求地址 + const s_data = sessionObj.data; // 请求数据 + const s_time = sessionObj.time; // 请求时间 + const interval = 1000; // 间隔时间(ms),小于此时间视为重复提交 + if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) { + const message = '数据正在处理,请勿重复提交'; + console.warn(`[${s_url}]: ` + message) + return Promise.reject(new Error(message)) + } else { + cache.session.setJSON('sessionObj', requestObj) + } + } + } + return config }, error => { console.log(error) Promise.reject(error) @@ -67,92 +67,96 @@ service.interceptors.request.use(config => { // 响应拦截器 service.interceptors.response.use(res => { - // 未设置状态码则默认成功状态 - const code = res.data.code || 200; - // 获取错误信息 - const msg = errorCode[code] || res.data.msg || errorCode['default'] - // 二进制数据则直接返回 - if(res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer'){ - return res.data - } - if (code === 401) { - if (!isRelogin.show) { - isRelogin.show = true; - MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { - confirmButtonText: '重新登录', - cancelButtonText: '取消', - type: 'warning' + // 未设置状态码则默认成功状态 + const code = res.data.code || 200; + // 获取错误信息 + const msg = errorCode[code] || res.data.msg || errorCode['default'] + // 二进制数据则直接返回 + if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') { + return res.data } - ).then(() => { - isRelogin.show = false; - store.dispatch('LogOut').then(() => { - location.href = '/index'; + if (code === 401) { + if (!isRelogin.show) { + isRelogin.show = true; + MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { + confirmButtonText: '重新登录', + cancelButtonText: '取消', + type: 'warning' + } + ).then(() => { + isRelogin.show = false; + store.dispatch('LogOut').then(() => { + location.href = '/index'; + }) + }).catch(() => { + isRelogin.show = false; + }); + } + return Promise.reject('无效的会话,或者会话已过期,请重新登录。') + } else if (code === 500) { + Message({ + message: msg, + type: 'error' + }) + return Promise.reject(new Error(msg)) + } else if (code !== 200) { + Notification.error({ + title: msg + }) + return Promise.reject('error') + } else { + return res.data + } + }, + error => { + console.log('err' + error) + let {message} = error; + if (message == "Network Error") { + message = "后端接口连接异常"; + } else if (message.includes("timeout")) { + message = "系统接口请求超时"; + } else if (message.includes("Request failed with status code")) { + message = "系统接口" + message.substr(message.length - 3) + "异常"; + } + Message({ + message: message, + type: 'error', + duration: 5 * 1000 }) - }).catch(() => { - isRelogin.show = false; - }); + return Promise.reject(error) } - return Promise.reject('无效的会话,或者会话已过期,请重新登录。') - } else if (code === 500) { - Message({ - message: msg, - type: 'error' - }) - return Promise.reject(new Error(msg)) - } else if (code !== 200) { - Notification.error({ - title: msg - }) - return Promise.reject('error') - } else { - return res.data - } - }, - error => { - console.log('err' + error) - let { message } = error; - if (message == "Network Error") { - message = "后端接口连接异常"; - } - else if (message.includes("timeout")) { - message = "系统接口请求超时"; - } - else if (message.includes("Request failed with status code")) { - message = "系统接口" + message.substr(message.length - 3) + "异常"; - } - Message({ - message: message, - type: 'error', - duration: 5 * 1000 - }) - return Promise.reject(error) - } ) // 通用下载方法 export function download(url, params, filename) { - downloadLoadingInstance = Loading.service({ text: "正在下载数据,请稍候", spinner: "el-icon-loading", background: "rgba(0, 0, 0, 0.7)", }) - return service.post(url, params, { - transformRequest: [(params) => { return tansParams(params) }], - headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, - responseType: 'blob' - }).then(async (data) => { - const isLogin = await blobValidate(data); - if (isLogin) { - const blob = new Blob([data]) - saveAs(blob, filename) - } else { - const resText = await data.text(); - const rspObj = JSON.parse(resText); - const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default'] - Message.error(errMsg); - } - downloadLoadingInstance.close(); - }).catch((r) => { - console.error(r) - Message.error('下载文件出现错误,请联系管理员!') - downloadLoadingInstance.close(); - }) + downloadLoadingInstance = Loading.service({ + text: "正在下载数据,请稍候", + spinner: "el-icon-loading", + background: "rgba(0, 0, 0, 0.7)", + }) + return service.post(url, params, { + transformRequest: [(params) => { + return tansParams(params) + }], + headers: {'Content-Type': 'application/x-www-form-urlencoded'}, + responseType: 'blob' + }).then(async (data) => { + const isLogin = await blobValidate(data); + if (isLogin) { + const blob = new Blob([data]) + saveAs(blob, filename) + } else { + const resText = await data.text(); + const rspObj = JSON.parse(resText); + const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default'] + Message.error(errMsg); + } + downloadLoadingInstance.close(); + }).catch((r) => { + console.error(r) + Message.error('下载文件出现错误,请联系管理员!') + downloadLoadingInstance.close(); + }) } export default service From c752dc504b214616bcdd40d8605564c7484bd6e0 Mon Sep 17 00:00:00 2001 From: Lemon Date: Thu, 13 Jul 2023 11:52:43 +0800 Subject: [PATCH 04/13] =?UTF-8?q?update=20=E6=8E=A8=E9=80=81=E8=81=94?= =?UTF-8?q?=E8=81=94=E5=B9=B3=E5=8F=B0=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../thirdparty/lianlian/util/HttpRequestUtil.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/lianlian/util/HttpRequestUtil.java b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/lianlian/util/HttpRequestUtil.java index 418fbaadd..0aed14262 100644 --- a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/lianlian/util/HttpRequestUtil.java +++ b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/lianlian/util/HttpRequestUtil.java @@ -2,8 +2,11 @@ package com.jsowell.thirdparty.lianlian.util; import cn.hutool.http.HttpRequest; import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; import com.google.common.collect.Maps; +import com.jsowell.common.constant.Constants; import com.jsowell.common.util.DateUtils; +import com.jsowell.common.util.StringUtils; import lombok.extern.slf4j.Slf4j; import org.apache.http.HttpEntity; import org.apache.http.client.config.RequestConfig; @@ -102,6 +105,7 @@ public class HttpRequestUtil { */ public static String sendPost(String token, String data, String url, String dataSecret, String dataSecretIV, String operatorId, String sigSecret){ + log.info("联联平台发送请求 data:{}", data); //加密 byte[] encryptText = Cryptos.aesEncrypt(data.getBytes(), dataSecret.getBytes(), dataSecretIV.getBytes()); @@ -128,8 +132,14 @@ public class HttpRequestUtil { Map map = (Map) JSON.parse(hutoolRequest); log.info("返回数据map:{}", JSON.toJSONString(map)); - String rData = map.get("Data"); + String ret = map.get("Ret"); String resultMsg = map.get("Msg"); + if (!StringUtils.equals(Constants.ZERO, ret)) { + // 表示请求有异常 + log.error("联联平台发送请求 error:{}, 源数据:{}", resultMsg, data); + return resultMsg; + } + String rData = map.get("Data"); byte[] plainText = Cryptos.aesDecrypt(Encodes.decodeBase64(rData), dataSecret.getBytes(), dataSecretIV.getBytes()); From 8b0d103cee0b799b6f63dda03a93b6a88b823908 Mon Sep 17 00:00:00 2001 From: Lemon Date: Thu, 13 Jul 2023 13:44:33 +0800 Subject: [PATCH 05/13] =?UTF-8?q?update=20=E6=8E=A8=E9=80=81=E8=81=94?= =?UTF-8?q?=E8=81=94=E5=B9=B3=E5=8F=B0=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../thirdparty/lianlian/util/HttpRequestUtil.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/lianlian/util/HttpRequestUtil.java b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/lianlian/util/HttpRequestUtil.java index 0aed14262..817b79c5d 100644 --- a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/lianlian/util/HttpRequestUtil.java +++ b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/lianlian/util/HttpRequestUtil.java @@ -129,17 +129,18 @@ public class HttpRequestUtil { log.info("接收到返回数据:{}", hutoolRequest); // System.out.println("接收到返回数据:" + hutoolRequest); - Map map = (Map) JSON.parse(hutoolRequest); + Map map = (Map) JSON.parse(hutoolRequest); log.info("返回数据map:{}", JSON.toJSONString(map)); - String ret = map.get("Ret"); - String resultMsg = map.get("Msg"); - if (!StringUtils.equals(Constants.ZERO, ret)) { + + int ret = (int) map.get("Ret"); + String resultMsg = (String) map.get("Msg"); + if (ret != 0) { // 表示请求有异常 log.error("联联平台发送请求 error:{}, 源数据:{}", resultMsg, data); return resultMsg; } - String rData = map.get("Data"); + String rData = (String) map.get("Data"); byte[] plainText = Cryptos.aesDecrypt(Encodes.decodeBase64(rData), dataSecret.getBytes(), dataSecretIV.getBytes()); From 28c6d4d7b45dc44ffc8ee34190d7c66ed9d4dada Mon Sep 17 00:00:00 2001 From: "autumn.g@foxmail.com" Date: Thu, 13 Jul 2023 14:12:05 +0800 Subject: [PATCH 06/13] update --- jsowell-ui/src/views/order/order/index.vue | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/jsowell-ui/src/views/order/order/index.vue b/jsowell-ui/src/views/order/order/index.vue index 1b7f2ef8f..b8b18d15c 100644 --- a/jsowell-ui/src/views/order/order/index.vue +++ b/jsowell-ui/src/views/order/order/index.vue @@ -130,11 +130,11 @@ >导出 -
+ Date: Thu, 13 Jul 2023 15:12:02 +0800 Subject: [PATCH 07/13] update --- .../com/jsowell/service/OrderService.java | 2 +- .../test/java/SpringBootTestController.java | 8 +++-- .../enums/adapay/AdapayAuditStateEnum.java | 36 +++++++++++++++++++ 3 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 jsowell-common/src/main/java/com/jsowell/common/enums/adapay/AdapayAuditStateEnum.java diff --git a/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java b/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java index b76a728c2..aac732528 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java @@ -1417,7 +1417,7 @@ public class OrderService { if (adapayMemberAccount == null) { return; } - adapayMemberAccount.setDelFlag(Constants.ONE); + adapayMemberAccount.setStatus(Constants.TWO); // 逻辑删除记录,并删除缓存 adapayMemberAccountService.updateAdapayMemberAccount(adapayMemberAccount); } diff --git a/jsowell-admin/src/test/java/SpringBootTestController.java b/jsowell-admin/src/test/java/SpringBootTestController.java index 244af8652..f8c27553f 100644 --- a/jsowell-admin/src/test/java/SpringBootTestController.java +++ b/jsowell-admin/src/test/java/SpringBootTestController.java @@ -13,6 +13,7 @@ import com.huifu.adapay.core.exception.BaseAdaPayException; import com.huifu.adapay.model.Refund; import com.jsowell.JsowellApplication; import com.jsowell.adapay.service.AdapayMemberService; +import com.jsowell.adapay.vo.AdapayCorpMemberVO; import com.jsowell.common.constant.CacheConstants; import com.jsowell.common.constant.Constants; import com.jsowell.common.core.domain.entity.SysDictData; @@ -527,8 +528,11 @@ public class SpringBootTestController { @Test public void testQueryCorpMember() { try { - Map map = adapayMemberService.selectAdapayMember("5"); - System.out.println(map); + // Map map = adapayMemberService.selectAdapayMember("5"); + + String adapayMemberId = "ACM29562569"; + AdapayCorpMemberVO adapayCorpMemberVO = adapayMemberService.queryCorpAdapayMemberInfo(adapayMemberId); + System.out.println(adapayCorpMemberVO); } catch (BaseAdaPayException e) { throw new RuntimeException(e); } diff --git a/jsowell-common/src/main/java/com/jsowell/common/enums/adapay/AdapayAuditStateEnum.java b/jsowell-common/src/main/java/com/jsowell/common/enums/adapay/AdapayAuditStateEnum.java new file mode 100644 index 000000000..dc6f32b21 --- /dev/null +++ b/jsowell-common/src/main/java/com/jsowell/common/enums/adapay/AdapayAuditStateEnum.java @@ -0,0 +1,36 @@ +package com.jsowell.common.enums.adapay; + +/** + * 审核状态 + */ +public enum AdapayAuditStateEnum { + AWAIT_AUDIT("A", "待审核"), + AUDIT_FAILED("B", "审核失败"), + ACCOUNT_OPENING_FAILED("C", "开户失败"), + ACCOUNT_OPENED_NO_SETTLEMENT_ACCOUNT("D", "开户成功但未创建结算账户"), + ACCOUNT_SUCCESSFUL("E", "开户和创建结算账户成功") // + ; + private String value; + private String label; + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public String getLabel() { + return label; + } + + public void setLabel(String label) { + this.label = label; + } + + AdapayAuditStateEnum(String value, String label) { + this.value = value; + this.label = label; + } +} From 5cb609ba34b2d0b245c15f168354062c322521bb Mon Sep 17 00:00:00 2001 From: "autumn.g@foxmail.com" Date: Thu, 13 Jul 2023 15:22:26 +0800 Subject: [PATCH 08/13] update --- .../jsowell/adapay/service/AdapayMemberService.java | 9 +++++++++ .../pile/service/IAdapayMemberAccountService.java | 2 ++ .../impl/AdapayMemberAccountServiceImpl.java | 11 +++++++++++ .../mapper/pile/AdapayMemberAccountMapper.xml | 13 +++++++++++-- 4 files changed, 33 insertions(+), 2 deletions(-) diff --git a/jsowell-pile/src/main/java/com/jsowell/adapay/service/AdapayMemberService.java b/jsowell-pile/src/main/java/com/jsowell/adapay/service/AdapayMemberService.java index 781d0cc48..cccb8b08c 100644 --- a/jsowell-pile/src/main/java/com/jsowell/adapay/service/AdapayMemberService.java +++ b/jsowell-pile/src/main/java/com/jsowell/adapay/service/AdapayMemberService.java @@ -24,6 +24,7 @@ import com.jsowell.common.util.id.IdUtils; import com.jsowell.pile.domain.AdapayMemberAccount; import com.jsowell.pile.service.IAdapayMemberAccountService; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -408,6 +409,14 @@ public class AdapayMemberService { if (StringUtils.equals((String) member.get("status"), "failed")) { throw new BusinessException("", (String) member.get("error_msg")); } + + // 逻辑删除原来审核不通过的记录 + List accountList = adapayMemberAccountService.selectAdapayMemberAccountList(dto.getMerchantId()); + if (CollectionUtils.isNotEmpty(accountList)) { + Long[] ids = (Long[]) accountList.stream().map(AdapayMemberAccount::getId).toArray(); + adapayMemberAccountService.deleteAdapayMemberAccountByIds(ids); + } + // 保存到数据库 AdapayMemberAccount adapayMemberAccount = new AdapayMemberAccount(); adapayMemberAccount.setMerchantId(dto.getMerchantId()); diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/IAdapayMemberAccountService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/IAdapayMemberAccountService.java index 6f0a7c71e..42fdadb22 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/IAdapayMemberAccountService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/IAdapayMemberAccountService.java @@ -27,6 +27,8 @@ public interface IAdapayMemberAccountService { */ public List selectAdapayMemberAccountList(AdapayMemberAccount adapayMemberAccount); + public List selectAdapayMemberAccountList(String merchantId); + /** * 新增【请填写功能名称】 * diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/AdapayMemberAccountServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/AdapayMemberAccountServiceImpl.java index 9b1f73cd1..75624d7e4 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/AdapayMemberAccountServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/AdapayMemberAccountServiceImpl.java @@ -1,5 +1,6 @@ package com.jsowell.pile.service.impl; +import com.google.common.collect.Lists; import com.jsowell.common.constant.CacheConstants; import com.jsowell.common.core.redis.RedisCache; import com.jsowell.common.util.DateUtils; @@ -55,6 +56,16 @@ public class AdapayMemberAccountServiceImpl implements IAdapayMemberAccountServi return adapayMemberAccountMapper.selectAdapayMemberAccountList(adapayMemberAccount); } + @Override + public List selectAdapayMemberAccountList(String merchantId) { + if (StringUtils.isBlank(merchantId)) { + return Lists.newArrayList(); + } + AdapayMemberAccount adapayMemberAccount = new AdapayMemberAccount(); + adapayMemberAccount.setMerchantId(merchantId); + return selectAdapayMemberAccountList(adapayMemberAccount); + } + /** * 新增【请填写功能名称】 * diff --git a/jsowell-pile/src/main/resources/mapper/pile/AdapayMemberAccountMapper.xml b/jsowell-pile/src/main/resources/mapper/pile/AdapayMemberAccountMapper.xml index e954098f5..057cb442d 100644 --- a/jsowell-pile/src/main/resources/mapper/pile/AdapayMemberAccountMapper.xml +++ b/jsowell-pile/src/main/resources/mapper/pile/AdapayMemberAccountMapper.xml @@ -103,12 +103,21 @@ delete from adapay_member_account where id = #{id} - + + + + update adapay_member_account + set del_flag = '1' + where id in + + #{id} + + @@ -32,77 +33,7 @@ delete from order_pay_record where id = #{id,jdbcType=INTEGER} - - - insert into order_pay_record (order_code, pay_mode, pay_amount, refund_amount, - create_by, create_time, update_by, - update_time, del_flag) - values (#{orderCode,jdbcType=VARCHAR}, #{payMode,jdbcType=VARCHAR}, #{payAmount,jdbcType=DECIMAL}, #{refundAmount,jdbcType=DECIMAL}, - #{createBy,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, #{updateBy,jdbcType=VARCHAR}, - #{updateTime,jdbcType=TIMESTAMP}, #{delFlag,jdbcType=CHAR}) - - - - insert into order_pay_record - - - order_code, - - - pay_mode, - - - pay_amount, - - - refund_amount, - - - create_by, - - - create_time, - - - update_by, - - - update_time, - - - del_flag, - - - - - #{orderCode,jdbcType=VARCHAR}, - - - #{payMode,jdbcType=VARCHAR}, - - - #{payAmount,jdbcType=DECIMAL}, - - - #{refundAmount,jdbcType=DECIMAL}, - - - #{createBy,jdbcType=VARCHAR}, - - - #{createTime,jdbcType=TIMESTAMP}, - - - #{updateBy,jdbcType=VARCHAR}, - - - #{updateTime,jdbcType=TIMESTAMP}, - - - #{delFlag,jdbcType=CHAR}, - - - + update order_pay_record @@ -119,6 +50,9 @@ refund_amount = #{refundAmount,jdbcType=DECIMAL}, + + acquirer = #{acquirer,jdbcType=VARCHAR}, + create_by = #{createBy,jdbcType=VARCHAR}, @@ -144,6 +78,7 @@ pay_mode = #{payMode,jdbcType=VARCHAR}, pay_amount = #{payAmount,jdbcType=DECIMAL}, refund_amount = #{refundAmount,jdbcType=DECIMAL}, + acquirer = #{acquirer,jdbcType=VARCHAR}, create_by = #{createBy,jdbcType=VARCHAR}, create_time = #{createTime,jdbcType=TIMESTAMP}, update_by = #{updateBy,jdbcType=VARCHAR}, @@ -154,12 +89,12 @@ insert into order_pay_record - (order_code, pay_mode, pay_amount, create_by) + (order_code, pay_mode, pay_amount, acquirer, create_by) values ( #{item.orderCode,jdbcType=VARCHAR}, #{item.payMode,jdbcType=VARCHAR}, #{item.payAmount,jdbcType=DECIMAL}, - #{item.createBy,jdbcType=VARCHAR} + #{item.acquirer,jdbcType=VARCHAR}, #{item.createBy,jdbcType=VARCHAR} ) From 18f47009a5454ba09f8dec57fda5920767aebb19 Mon Sep 17 00:00:00 2001 From: "autumn.g@foxmail.com" Date: Thu, 13 Jul 2023 16:53:14 +0800 Subject: [PATCH 12/13] =?UTF-8?q?=E8=AE=B0=E5=BD=95=E6=96=B9=E6=B3=95=20?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=94=B6=E5=8D=95=E6=9C=BA=E6=9E=84=E5=AD=97?= =?UTF-8?q?=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/jsowell/service/OrderService.java | 183 +----------------- .../jsowell/common/enums/AcquirerEnum.java | 35 ++++ .../service/AdapayCallbackRecordService.java | 3 - .../pile/service/IOrderPayRecordService.java | 10 - .../impl/AdapayCallbackRecordServiceImpl.java | 31 +-- .../impl/OrderBasicInfoServiceImpl.java | 19 +- .../impl/OrderPayRecordServiceImpl.java | 24 --- 7 files changed, 50 insertions(+), 255 deletions(-) create mode 100644 jsowell-common/src/main/java/com/jsowell/common/enums/AcquirerEnum.java diff --git a/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java b/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java index aac732528..41ea0dfb2 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java @@ -24,6 +24,7 @@ import com.jsowell.common.core.domain.ykc.RealTimeMonitorData; import com.jsowell.common.core.domain.ykc.TransactionRecordsData; import com.jsowell.common.core.page.PageResponse; import com.jsowell.common.core.redis.RedisCache; +import com.jsowell.common.enums.AcquirerEnum; import com.jsowell.common.enums.InvoiceRecordEnum; import com.jsowell.common.enums.MemberWalletEnum; import com.jsowell.common.enums.adapay.AdapayEventEnum; @@ -382,6 +383,7 @@ public class OrderService { .orderCode(orderCode) .payMode(OrderPayRecordEnum.PRINCIPAL_BALANCE_PAYMENT.getValue()) .payAmount(principalPay) + .acquirer(AcquirerEnum.LOCAL.getValue()) .createBy(dto.getMemberId()) .build()); } @@ -390,6 +392,7 @@ public class OrderService { .orderCode(orderCode) .payMode(OrderPayRecordEnum.GIFT_BALANCE_PAYMENT.getValue()) .payAmount(giftPay) + .acquirer(AcquirerEnum.LOCAL.getValue()) .createBy(dto.getMemberId()) .build()); } @@ -419,179 +422,6 @@ public class OrderService { } } - /** - * 订单支付成功 支付回调 - * 支付成功后掉用这个方法 - * 1. 修改订单支付状态 - * 2. 发送启动充电指令 - */ - /*public void payOrderSuccessCallback(PayOrderSuccessCallbackDTO dto) { - OrderBasicInfo orderInfo = orderBasicInfoService.getOrderInfoByOrderCode(dto.getOrderCode()); - BigDecimal payAmount = dto.getPayAmount(); - - // 修改订单 - orderInfo.setPayMode(dto.getPayMode()); - orderInfo.setPayStatus(Constants.ONE); - orderInfo.setPayAmount(payAmount); - orderInfo.setPayTime(new Date()); - orderBasicInfoService.updateOrderBasicInfo(orderInfo); - - if (StringUtils.equals(orderInfo.getStartType(), StartTypeEnum.NOW.getValue())) { // 立即启动充电 - String pileSn = orderInfo.getPileSn(); - // 发送启动充电指令前,再次下发计费模板 - BillingTemplateVO billingTemplateVO = pileBillingTemplateService.selectBillingTemplateDetailByPileSn(pileSn); - if (billingTemplateVO != null) { - pileRemoteService.publishPileBillingTemplate(pileSn, billingTemplateVO); - } - // 发送启动指令 - pileRemoteService.remoteStartCharging(pileSn, orderInfo.getConnectorCode(), orderInfo.getTransactionCode(), orderInfo.getPayAmount()); - } else { // 预约充电 - // 修改枪口状态为 占用预约 - - // 下发修改充电桩设置指令 - - } - - }*/ - - /** - * 保存订单信息到数据库 - * - * @param dto - * @return - */ - // private String saveOrder2Database(GenerateOrderDTO dto) throws ParseException { - // String orderCode = IdUtils.getOrderCode(); - // String transactionCode = IdUtils.generateTransactionCode(dto.getPileSn(), dto.getConnectorCode()); - // - // if (StringUtils.isBlank(dto.getStartType())) { - // dto.setStartType(StartTypeEnum.NOW.getValue()); - // } - // - // String stationId = dto.getPileConnector().getStationId(); - // // 查询站点信息 - // PileStationInfo pileStationInfo = pileStationInfoService.selectPileStationInfoById(Long.valueOf(stationId)); - // String merchantId = pileStationInfo != null ? String.valueOf(pileStationInfo.getMerchantId()) : ""; - // - // // 订单基本信息 - // OrderBasicInfo orderBasicInfo = OrderBasicInfo.builder() - // .orderCode(orderCode) - // .transactionCode(transactionCode) - // .orderStatus(OrderStatusEnum.NOT_START.getValue()) - // .memberId(dto.getMemberId()) - // .stationId(stationId) - // .merchantId(merchantId) - // .pileSn(dto.getPileSn()) - // .connectorCode(dto.getConnectorCode()) - // .pileConnectorCode(dto.getPileSn() + dto.getConnectorCode()) - // .startMode(dto.getStartMode()) - // .payStatus(Constants.ZERO) - // .payAmount(dto.getChargeAmount()) - // .payMode(dto.getPayMode()) - // .orderAmount(BigDecimal.ZERO) - // .virtualAmount(BigDecimal.ZERO) - // .settleAmount(BigDecimal.ZERO) - // .startType(dto.getStartType()) - // .build(); - // if (StringUtils.equals(dto.getStartType(), StartTypeEnum.APPOINTMENT.getValue())) { - // orderBasicInfo.setAppointmentTime(DateUtils.parseDate(dto.getAppointmentTime(), DateUtils.YYYY_MM_DD_HH_MM_SS)); - // } - // - // // 订单详情 - // BillingTemplateVO billingTemplate = dto.getBillingTemplate(); - // log.info("订单使用的计费模板-orderCode:{}, billingTemplate:{}", orderCode, JSONObject.toJSONString(billingTemplate)); - // BigDecimal sharpElectricityPrice = billingTemplate.getSharpElectricityPrice() != null ? billingTemplate.getSharpElectricityPrice() : BigDecimal.ZERO; - // BigDecimal sharpServicePrice = billingTemplate.getSharpServicePrice() != null ? billingTemplate.getSharpServicePrice() : BigDecimal.ZERO; - // BigDecimal peakElectricityPrice = billingTemplate.getPeakElectricityPrice() != null ? billingTemplate.getPeakElectricityPrice() : BigDecimal.ZERO; - // BigDecimal peakServicePrice = billingTemplate.getPeakServicePrice() != null ? billingTemplate.getPeakServicePrice() : BigDecimal.ZERO; - // BigDecimal flatElectricityPrice = billingTemplate.getFlatElectricityPrice() != null ? billingTemplate.getFlatElectricityPrice() : BigDecimal.ZERO; - // BigDecimal flatServicePrice = billingTemplate.getFlatServicePrice() != null ? billingTemplate.getFlatServicePrice() : BigDecimal.ZERO; - // BigDecimal valleyElectricityPrice = billingTemplate.getValleyElectricityPrice() != null ? billingTemplate.getValleyElectricityPrice() : BigDecimal.ZERO; - // BigDecimal valleyServicePrice = billingTemplate.getValleyServicePrice() != null ? billingTemplate.getValleyServicePrice() : BigDecimal.ZERO; - // - // OrderDetail orderDetail = OrderDetail.builder() - // .orderCode(orderCode) - // .sharpPrice(sharpElectricityPrice.add(sharpServicePrice)) - // .sharpElectricityPrice(sharpElectricityPrice) - // .sharpServicePrice(sharpServicePrice) - // .peakPrice(peakElectricityPrice.add(peakServicePrice)) - // .peakElectricityPrice(peakElectricityPrice) - // .peakServicePrice(peakServicePrice) - // .flatPrice(flatElectricityPrice.add(flatServicePrice)) - // .flatElectricityPrice(flatElectricityPrice) - // .flatServicePrice(flatServicePrice) - // .valleyPrice(valleyElectricityPrice.add(valleyServicePrice)) - // .valleyElectricityPrice(valleyElectricityPrice) - // .valleyServicePrice(valleyServicePrice) - // .build(); - // - // OrderTransactionDTO createOrderTransactionDTO = OrderTransactionDTO.builder() - // .orderBasicInfo(orderBasicInfo) - // .orderDetail(orderDetail) - // .build(); - // pileTransactionService.doCreateOrder(createOrderTransactionDTO); - // return orderCode; - // } - - /** - * 校验充电桩相关的信息 - * - * @param dto - */ - // private void checkPileInfo(GenerateOrderDTO dto) { - // // 查询充电桩状态 是否空闲 枪口是否占用 - // PileConnectorDetailVO pileConnector = pileService.queryPileConnectorDetail(dto.getPileSn() + dto.getConnectorCode()); - // if (pileConnector == null) { - // log.error("checkPileInfo充电枪口为空 pileSn:{}, connectorCode:{}", dto.getPileSn(), dto.getConnectorCode()); - // throw new BusinessException(ReturnCodeEnum.CODE_CONNECTOR_INFO_NULL_ERROR); - // } - // - // // 查询站点状态 - // PileStationVO stationInfo = pileStationInfoService.getStationInfo(pileConnector.getStationId()); - // if (stationInfo == null || StringUtils.equals(stationInfo.getOpenFlag(), Constants.ZERO)) { - // throw new BusinessException(ReturnCodeEnum.CODE_STATION_IS_NOT_OPEN); - // } - // - // // 判断枪口状态 - // if (!(StringUtils.equals(pileConnector.getConnectorStatus(), PileConnectorDataBaseStatusEnum.FREE.getValue()) - // || StringUtils.equals(pileConnector.getConnectorStatus(), PileConnectorDataBaseStatusEnum.OCCUPIED_NOT_CHARGED.getValue()))) { - // log.error("checkPileInfo充电枪口状态不正确,当前状态为:{}", pileConnector.getConnectorStatus()); - // throw new BusinessException(ReturnCodeEnum.CODE_PILE_CONNECTOR_STATUS_ERROR); - // } - // // 查询充电桩的计费模板 - // BillingTemplateVO billingTemplateVO = pileBillingTemplateService.selectBillingTemplateDetailByPileSn(dto.getPileSn()); - // if (billingTemplateVO == null) { - // throw new BusinessException(ReturnCodeEnum.CODE_BILLING_TEMPLATE_NULL_ERROR); - // } - // dto.setPileConnector(pileConnector); - // dto.setBillingTemplate(billingTemplateVO); - // } - - - /** - * 处理前端传的参数 - * pileConnectorCode = pileSn + connectorCode - * - * @param dto - */ - // public void analysisPileParameter(BasicPileDTO dto) { - // if (StringUtils.isBlank(dto.getPileSn()) || StringUtils.isBlank(dto.getConnectorCode())) { - // // 从pileConnectorCode解析 - // String pileConnectorCode = dto.getPileConnectorCode(); - // if (StringUtils.isNotEmpty(pileConnectorCode) && pileConnectorCode.length() == Constants.PILE_CONNECTOR_CODE_LENGTH) { - // dto.setPileSn(StringUtils.substring(pileConnectorCode, 0, pileConnectorCode.length() - 2)); - // dto.setConnectorCode(StringUtils.substring(pileConnectorCode, pileConnectorCode.length() - 2, pileConnectorCode.length())); - // } else { - // throw new BusinessException(ReturnCodeEnum.CODE_DATA_LENGTH_ERROR); - // } - // } else { - // // 说明pileSn 和 connectorCode前端传了,那就校验一下长度 - // if (dto.getPileSn().length() != Constants.PILE_SN_LENGTH || dto.getConnectorCode().length() != Constants.CONNECTOR_CODE_LENGTH) { - // throw new BusinessException(ReturnCodeEnum.CODE_DATA_LENGTH_ERROR); - // } - // } - // } - /** * 结算订单 * endCharging @@ -733,6 +563,7 @@ public class OrderService { .orderCode(orderCode) .payMode(OrderPayRecordEnum.WECHATPAY_PAYMENT.getValue()) .payAmount(amount) + .acquirer(AcquirerEnum.WECHAT_PAY.getValue()) .createBy(null) .build(); orderPayRecordService.batchInsert(Lists.newArrayList(orderPayRecord)); @@ -1342,6 +1173,11 @@ public class OrderService { } + /** + * adapay支付成功回调 + * @param data + * @throws JsonProcessingException + */ private void paymentSucceeded(String data) throws JsonProcessingException { //验签成功 保存到回调记录表中 JSONObject jsonObject = JSON.parseObject(data); @@ -1378,6 +1214,7 @@ public class OrderService { .orderCode(orderCode) .payMode(OrderPayRecordEnum.WECHATPAY_PAYMENT.getValue()) .payAmount(amount) + .acquirer(AcquirerEnum.ADAPAY.getValue()) .createBy(null) .build(); orderPayRecordService.batchInsert(Lists.newArrayList(orderPayRecord)); diff --git a/jsowell-common/src/main/java/com/jsowell/common/enums/AcquirerEnum.java b/jsowell-common/src/main/java/com/jsowell/common/enums/AcquirerEnum.java new file mode 100644 index 000000000..4dad5186c --- /dev/null +++ b/jsowell-common/src/main/java/com/jsowell/common/enums/AcquirerEnum.java @@ -0,0 +1,35 @@ +package com.jsowell.common.enums; + +/** + * 收单机构enum + */ +public enum AcquirerEnum { + LOCAL("0", "本账户余额"), + WECHAT_PAY("1", "微信支付"), + ADAPAY("2", "汇付支付"), + ; + + private String value; + private String label; + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public String getLabel() { + return label; + } + + public void setLabel(String label) { + this.label = label; + } + + AcquirerEnum(String value, String label) { + this.value = value; + this.label = label; + } +} diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/AdapayCallbackRecordService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/AdapayCallbackRecordService.java index 940780934..ce8968ea8 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/AdapayCallbackRecordService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/AdapayCallbackRecordService.java @@ -1,13 +1,10 @@ package com.jsowell.pile.service; -import com.fasterxml.jackson.core.JsonProcessingException; import com.jsowell.pile.domain.AdapayCallbackRecord; public interface AdapayCallbackRecordService { void saveAdapayCallbackRecord(AdapayCallbackRecord callbackRecord); - void saveAdapayCallbackRecord(String data) throws JsonProcessingException; - AdapayCallbackRecord selectByOrderCode(String orderCode); AdapayCallbackRecord selectByPaymentId(String paymentId); diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/IOrderPayRecordService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/IOrderPayRecordService.java index 5adad0548..d663a8b8a 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/IOrderPayRecordService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/IOrderPayRecordService.java @@ -6,18 +6,8 @@ import java.util.List; public interface IOrderPayRecordService { - // int deleteByPrimaryKey(Integer id); - - // int insert(OrderPayRecord record); - - // int insertSelective(OrderPayRecord record); - - // OrderPayRecord selectByPrimaryKey(Integer id); - int updateByPrimaryKeySelective(OrderPayRecord record); - // int updateByPrimaryKey(OrderPayRecord record); - /** * 批量保存订单支付记录 * @param payRecordList diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/AdapayCallbackRecordServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/AdapayCallbackRecordServiceImpl.java index f1de52ee3..3a6d8dcb0 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/AdapayCallbackRecordServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/AdapayCallbackRecordServiceImpl.java @@ -1,10 +1,5 @@ package com.jsowell.pile.service.impl; -import com.alibaba.fastjson2.JSON; -import com.alibaba.fastjson2.JSONObject; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.PropertyNamingStrategies; import com.jsowell.common.constant.CacheConstants; import com.jsowell.common.core.redis.RedisCache; import com.jsowell.common.util.StringUtils; @@ -15,8 +10,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.math.BigDecimal; - @Slf4j @Service public class AdapayCallbackRecordServiceImpl implements AdapayCallbackRecordService { @@ -32,29 +25,7 @@ public class AdapayCallbackRecordServiceImpl implements AdapayCallbackRecordServ adapayCallbackRecordMapper.insert(callbackRecord); } - @Override - public void saveAdapayCallbackRecord(String data) throws JsonProcessingException { - JSONObject jsonObject = JSON.parseObject(data); - ObjectMapper mapper = new ObjectMapper(); - mapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE); - AdapayCallbackRecord adapayCallbackRecord = mapper.readValue(jsonObject.toJSONString(), AdapayCallbackRecord.class); - adapayCallbackRecord.setExpend(jsonObject.getString("expend")); - adapayCallbackRecord.setPaymentId(jsonObject.getString("id")); - - JSONObject descJson = JSON.parseObject(adapayCallbackRecord.getDescription()); - String type = descJson.getString("type"); - adapayCallbackRecord.setPayScenario(type); - String memberId = descJson.getString("memberId"); - adapayCallbackRecord.setMemberId(memberId); - String orderCode = descJson.getString("orderCode"); - adapayCallbackRecord.setOrderCode(orderCode); - BigDecimal amount = adapayCallbackRecord.getPayAmt(); - - // 保存到数据库 - this.saveAdapayCallbackRecord(adapayCallbackRecord); - } - - /** + /** * 根据订单号查询支付回调信息 * @param orderCode * @return diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java index 46480e761..0fd62032c 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java @@ -21,6 +21,7 @@ import com.jsowell.common.core.domain.vo.AuthorizedDeptVO; import com.jsowell.common.core.domain.ykc.RealTimeMonitorData; import com.jsowell.common.core.domain.ykc.TransactionRecordsData; import com.jsowell.common.core.redis.RedisCache; +import com.jsowell.common.enums.AcquirerEnum; import com.jsowell.common.enums.MemberWalletEnum; import com.jsowell.common.enums.ykc.*; import com.jsowell.common.exception.BusinessException; @@ -2203,22 +2204,8 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService { // 微信支付 dto.setOrderBasicInfo(orderInfo); + // 2023-07-11 全部改为汇付支付 Map weixinMap = adapayPayOrder(dto); - // 从字典中获取使用汇付支付的站点 - // List adapay_station = DictUtils.getDictCache("adapay_station"); - // List stationIdList = Lists.newArrayList(); - // if (CollectionUtils.isNotEmpty(adapay_station)) { - // for (SysDictData sysDictData : adapay_station) { - // stationIdList.add(sysDictData.getDictValue()); - // } - // } - // if (stationIdList.contains(orderInfo.getStationId())) { - // logger.info("该站点:{}在字典中配置了使用汇付支付", orderInfo.getStationId()); - // weixinMap = adapayPayOrder(dto); - // } else { - // logger.info("该站点:{}使用微信支付", orderInfo.getStationId()); - // weixinMap = wechatPayOrder(dto); - // } // 返回微信支付参数 resultMap.put("weixinMap", weixinMap); @@ -2496,6 +2483,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService { .orderCode(orderCode) .payMode(OrderPayRecordEnum.PRINCIPAL_BALANCE_PAYMENT.getValue()) .payAmount(principalPay) + .acquirer(AcquirerEnum.LOCAL.getValue()) .createBy(dto.getMemberId()) .build()); } @@ -2504,6 +2492,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService { .orderCode(orderCode) .payMode(OrderPayRecordEnum.GIFT_BALANCE_PAYMENT.getValue()) .payAmount(giftPay) + .acquirer(AcquirerEnum.LOCAL.getValue()) .createBy(dto.getMemberId()) .build()); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderPayRecordServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderPayRecordServiceImpl.java index 05bc9e0e7..e5dad0948 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderPayRecordServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderPayRecordServiceImpl.java @@ -15,35 +15,11 @@ public class OrderPayRecordServiceImpl implements IOrderPayRecordService { private OrderPayRecordMapper orderPayRecordMapper; - // @Override - // public int deleteByPrimaryKey(Integer id) { - // return orderPayRecordMapper.deleteByPrimaryKey(id); - // } - - // @Override - // public int insert(OrderPayRecord record) { - // return orderPayRecordMapper.insert(record); - // } - // - // @Override - // public int insertSelective(OrderPayRecord record) { - // return orderPayRecordMapper.insertSelective(record); - // } - - // @Override - // public OrderPayRecord selectByPrimaryKey(Integer id) { - // return orderPayRecordMapper.selectByPrimaryKey(id); - // } - @Override public int updateByPrimaryKeySelective(OrderPayRecord record) { return orderPayRecordMapper.updateByPrimaryKeySelective(record); } - // @Override - // public int updateByPrimaryKey(OrderPayRecord record) { - // return orderPayRecordMapper.updateByPrimaryKey(record); - // } @Override public int batchInsert(List payRecordList) { From 6bc373042541460a00e6d332615cf10d2b7c9e65 Mon Sep 17 00:00:00 2001 From: "autumn.g@foxmail.com" Date: Thu, 13 Jul 2023 16:56:45 +0800 Subject: [PATCH 13/13] =?UTF-8?q?=E5=85=B3=E9=97=AD=E6=9C=AA=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/jsowell/api/uniapp/PayController.java | 48 --- .../com/jsowell/service/OrderService.java | 274 +----------------- 2 files changed, 4 insertions(+), 318 deletions(-) diff --git a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/PayController.java b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/PayController.java index c939fe895..438af38fa 100644 --- a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/PayController.java +++ b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/PayController.java @@ -169,54 +169,6 @@ public class PayController extends BaseController { return response; } - /** - * 使用adapay支付订单 - * http://localhost:8080/uniapp/pay/payOrderWithAdapay - * @param request - * @param dto - * @return - */ - @PostMapping("/payOrderWithAdapay") - public RestApiResponse payOrderWithAdapay(HttpServletRequest request, @RequestBody PayOrderDTO dto) { - logger.info("adapay支付订单 param:{}", dto.toString()); - RestApiResponse response; - - // 支付订单加锁 - String lockKey = "pay_order_" + dto.getOrderCode(); - String lockValue = IdUtils.fastUUID(); - try { - String memberId = getMemberIdByAuthorization(request); - if (StringUtils.isBlank(memberId)) { - throw new BusinessException(ReturnCodeEnum.CODE_TOKEN_ERROR); - } - if (dto.getPayAmount() == null) { - throw new BusinessException(ReturnCodeEnum.CODE_PARAM_NOT_NULL_ERROR); - } - dto.setMemberId(memberId); - dto.setLockValue(lockValue); - // redis锁 - Boolean isLock = redisCache.lock(lockKey, lockValue, 60); - Map map = null; - if (isLock) { - map = orderService.payOrderWithAdapay(dto); - } - response = new RestApiResponse<>(map); - } catch (BusinessException e) { - logger.warn("adapay支付订单 warn param:{}", dto.toString(), e); - response = new RestApiResponse<>(e.getCode(), e.getMessage()); - } catch (Exception e) { - logger.error("adapay支付订单 error param:{}", dto.toString(), e); - response = new RestApiResponse<>(ReturnCodeEnum.CODE_ORDER_PAY_ERROR); - } finally { - // 支付订单解锁 - if (lockValue.equals(redisCache.getCacheObject(lockKey).toString())) { - redisCache.unLock(lockKey); - } - } - logger.info("adapay支付订单 result:{}", JSONObject.toJSONString(response)); - return response; - } - /** * 7003 获取支付方式 * http://localhost:8080/uniapp/pay/getPayMode diff --git a/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java b/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java index 41ea0dfb2..01d74de27 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java @@ -2,22 +2,15 @@ package com.jsowell.service; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; -import com.alibaba.fastjson2.TypeReference; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.PropertyNamingStrategies; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; -import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; -import com.google.common.collect.Maps; import com.google.common.collect.Sets; import com.huifu.adapay.core.AdapayCore; -import com.huifu.adapay.core.exception.BaseAdaPayException; import com.huifu.adapay.core.util.AdapaySign; -import com.huifu.adapay.model.Payment; -import com.jsowell.adapay.common.CreateAdaPaymentParam; -import com.jsowell.common.constant.CacheConstants; import com.jsowell.common.constant.Constants; import com.jsowell.common.core.domain.vo.AuthorizedDeptVO; import com.jsowell.common.core.domain.ykc.RealTimeMonitorData; @@ -30,7 +23,6 @@ import com.jsowell.common.enums.MemberWalletEnum; import com.jsowell.common.enums.adapay.AdapayEventEnum; import com.jsowell.common.enums.ykc.*; import com.jsowell.common.exception.BusinessException; -import com.jsowell.common.util.AdapayUtil; import com.jsowell.common.util.DateUtils; import com.jsowell.common.util.SecurityUtils; import com.jsowell.common.util.StringUtils; @@ -43,9 +35,11 @@ import com.jsowell.pile.vo.base.OrderAmountDetailVO; import com.jsowell.pile.vo.base.OrderPeriodAmountVO; import com.jsowell.pile.vo.base.PileInfoVO; import com.jsowell.pile.vo.base.StationInfoVO; -import com.jsowell.pile.vo.uniapp.InvoiceRecordVO; import com.jsowell.pile.vo.uniapp.*; -import com.jsowell.pile.vo.web.*; +import com.jsowell.pile.vo.web.OrderDetailInfoVO; +import com.jsowell.pile.vo.web.PileStationVO; +import com.jsowell.pile.vo.web.PlatformTesterVO; +import com.jsowell.pile.vo.web.UpdateMemberBalanceDTO; import com.jsowell.wxpay.dto.WeChatRefundDTO; import com.jsowell.wxpay.response.WechatPayNotifyParameter; import org.apache.commons.collections4.CollectionUtils; @@ -53,7 +47,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.cglib.beans.BeanMap; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletRequest; @@ -61,7 +54,6 @@ import java.math.BigDecimal; import java.text.ParseException; import java.time.LocalDateTime; import java.util.*; -import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @Service @@ -164,264 +156,6 @@ public class OrderService { return resultMap; } - /** - * 使用adapay支付订单 - * @param dto - * @return - */ - public Map payOrderWithAdapay(PayOrderDTO dto) { - OrderBasicInfo orderInfo = orderBasicInfoService.getOrderInfoByOrderCode(dto.getOrderCode()); - if (orderInfo == null) { - throw new BusinessException(ReturnCodeEnum.CODE_QUERY_ORDER_NULL_ERROR); - } - if (!StringUtils.equals(orderInfo.getPayStatus(), "0")) { - // 订单已支付 - throw new BusinessException(ReturnCodeEnum.CODE_ORDER_IS_NOT_TO_BE_PAID_ERROR); - } - Map resultMap = Maps.newHashMap(); - if (StringUtils.equals(dto.getPayMode(), OrderPayModeEnum.PAYMENT_OF_BALANCE.getValue())) { - // 余额支付 - balancePayOrder(dto); - } else if (StringUtils.equals(dto.getPayMode(), OrderPayModeEnum.PAYMENT_OF_WECHATPAY.getValue())) { - // 微信支付 使用adapay - dto.setOrderBasicInfo(orderInfo); - Map weixinMap = adapayPayOrder(dto); - // 返回微信支付参数 - resultMap.put("weixinMap", weixinMap); - } else if (StringUtils.equals(dto.getPayMode(), OrderPayModeEnum.PAYMENT_OF_ALIPAY.getValue())) { // 支付宝支付 - // TODO 返回支付宝支付参数 - } else if (StringUtils.equals(dto.getPayMode(), OrderPayModeEnum.PAYMENT_OF_WHITELIST.getValue())) { // 白名单支付 - // 白名单支付可以直接调支付回调方法 - dto.setPayAmount(new BigDecimal("500")); - whiteListPayOrder(dto); - } - return resultMap; - } - - /** - * 白名单支付订单逻辑 - * @param dto - */ - private void whiteListPayOrder(PayOrderDTO dto) { - String orderCode = dto.getOrderCode(); - BigDecimal payAmount = dto.getPayAmount(); - String payMode = dto.getPayMode(); - PayOrderSuccessCallbackDTO callbackDTO = PayOrderSuccessCallbackDTO.builder() - .orderCode(orderCode) - .payAmount(payAmount) - .payMode(payMode) - .build(); - orderBasicInfoService.payOrderSuccessCallback(callbackDTO); - } - - /** - * 使用汇付支付 - * @param dto - * @return - */ - private Map adapayPayOrder(PayOrderDTO dto) { - log.info("===============使用汇付支付"); - // 相同参数重复请求,返回同一个支付对象 - String redisKey = CacheConstants.ADAPAY_ORDER_PARAM + dto.getOrderCode(); - Map cacheObject = redisCache.getCacheObject(redisKey); - if (cacheObject != null) { - return cacheObject; - } - - OrderBasicInfo orderInfo = dto.getOrderBasicInfo(); - if (orderInfo == null) { - // 订单为空重新查询 - orderInfo = orderBasicInfoService.getOrderInfoByOrderCode(dto.getOrderCode()); - } - // 获取openId - String openId = memberService.getOpenIdByCode(dto.getCode()); - if (StringUtils.isBlank(openId)) { - throw new BusinessException(ReturnCodeEnum.CODE_GET_OPEN_ID_BY_CODE_ERROR); - } - - // 封装对象 - String amount = AdapayUtil.formatAmount(dto.getPayAmount()); // 用户支付金额 - CreateAdaPaymentParam createAdaPaymentParam = new CreateAdaPaymentParam(); - createAdaPaymentParam.setOrder_no(orderInfo.getOrderCode()); - createAdaPaymentParam.setPay_amt(amount); - createAdaPaymentParam.setApp_id(ADAPAY_APP_ID); - createAdaPaymentParam.setPay_channel("wx_lite"); // todo 如果以后有支付宝等别的渠道,这里需要做修改,判断是什么渠道的请求 - createAdaPaymentParam.setGoods_title("充电费用"); - createAdaPaymentParam.setGoods_desc("充电桩预付款金额"); // 这个字段是微信支付凭证的商品名 - Map map = Maps.newHashMap(); - map.put("type", ScenarioEnum.ORDER.getValue()); - map.put("orderCode", dto.getOrderCode()); - createAdaPaymentParam.setDescription(JSON.toJSONString(map)); - //异步通知地址,url为http/https路径,服务器POST回调,URL 上请勿附带参数 - createAdaPaymentParam.setNotify_url(ADAPAY_CALLBACK_URL); - createAdaPaymentParam.setExpend(JSONObject.toJSONString( ImmutableMap.of("open_id", openId))); - - // 分账对象信息 - // String adapayMemberId = adapayMemberAccountService.selectAdapayMemberIdByStationId(orderInfo.getStationId()); - // if (StringUtils.isNotBlank(adapayMemberId)) { - // JSONObject jsonObject = new JSONObject(); - // jsonObject.put("member_id", adapayMemberId); - // jsonObject.put("amount", amount); - // jsonObject.put("fee_flag", Constants.Y); - // - // // 分账对象信息列表,最多仅支持7个分账方,json 数组形式 - // JSONArray jsonArray = new JSONArray(); - // jsonArray.add(jsonObject); - // createAdaPaymentParam.setDiv_members(jsonArray.toString()); - // } - - // 延时分账 - createAdaPaymentParam.setPay_mode("delay"); - try { - log.info("创建汇付支付参数:{}", JSONObject.toJSONString(createAdaPaymentParam)); - Map response = Payment.create(BeanMap.create(createAdaPaymentParam)); - if (response != null && !response.isEmpty()) { - JSONObject expend = JSONObject.parseObject(response.get("expend").toString()); - JSONObject pay_info = expend.getJSONObject("pay_info"); - Map resultMap = JSONObject.parseObject(pay_info.toJSONString(), new TypeReference>() { - }); - if (resultMap != null) { - // 表示已经获取到支付参数了,后续再有支付请求就拒绝 - redisCache.setCacheObject(redisKey, resultMap, 15, TimeUnit.MINUTES); - } - return resultMap; - } - } catch (BaseAdaPayException e) { - log.error("汇付-获取支付对象发生异常", e); - } - return null; - } - - /** - * 微信支付订单逻辑 获取支付参数 - * @param dto - * @return - * @throws Exception - */ - private Map wechatPayOrder(PayOrderDTO dto) throws Exception { - // 相同参数重复请求,返回同一个支付对象 - String redisKey = CacheConstants.WECHAT_PAY_ORDER_PARAM + dto.getOrderCode(); - Map cacheObject = redisCache.getCacheObject(redisKey); - if (cacheObject != null) { - return cacheObject; - } - - OrderBasicInfo orderInfo = dto.getOrderBasicInfo(); - if (orderInfo == null) { - orderInfo = orderBasicInfoService.getOrderInfoByOrderCode(dto.getOrderCode()); - } - String openId = memberService.getOpenIdByCode(dto.getCode()); - if (StringUtils.isBlank(openId)) { - throw new BusinessException(ReturnCodeEnum.CODE_GET_OPEN_ID_BY_CODE_ERROR); - } - WeixinPayDTO weixinPayDTO = new WeixinPayDTO(); - weixinPayDTO.setOpenId(openId); - weixinPayDTO.setAmount(dto.getPayAmount().toString()); - // 支付订单 附加参数 - PaymentScenarioDTO paymentScenarioDTO = PaymentScenarioDTO.builder() - .type(ScenarioEnum.ORDER.getValue()) - .orderCode(dto.getOrderCode()) - .memberId(orderInfo.getMemberId()) - .build(); - weixinPayDTO.setAttach(JSONObject.toJSONString(paymentScenarioDTO)); - weixinPayDTO.setDescription("充电费用"); - Map payV3 = this.weixinPayV3(weixinPayDTO); - if (payV3 != null) { - // 表示已经获取到支付参数了,后续再有支付请求就拒绝 - redisCache.setCacheObject(redisKey, payV3, 15, TimeUnit.MINUTES); - } - return payV3; - } - - /** - * 余额支付订单逻辑 - * @param dto - */ - private void balancePayOrder(PayOrderDTO dto) { - // 记录支付流水 - List payRecordList = Lists.newArrayList(); - String orderCode = dto.getOrderCode(); - BigDecimal chargeAmount = dto.getPayAmount(); - // 查询该会员的余额 - MemberVO memberVO = memberService.getMemberInfoByMemberId(dto.getMemberId()); - BigDecimal totalAccountAmount = memberVO.getTotalAccountAmount(); - - if (totalAccountAmount.compareTo(chargeAmount) < 0) { - // 总余额小于充电金额 - throw new BusinessException(ReturnCodeEnum.CODE_BALANCE_IS_INSUFFICIENT); - } - BigDecimal principalAmount = memberVO.getPrincipalBalance(); // 会员剩余本金金额 - // BigDecimal giftAmount = memberVO.getGiftBalance(); // 会员剩余赠送余额 - - BigDecimal principalPay = null; // 30 - BigDecimal giftPay = null; // 10 - // 先扣除本金金额,再扣除赠送金额 - BigDecimal subtract = principalAmount.subtract(chargeAmount); - if (subtract.compareTo(BigDecimal.ZERO) >= 0) { - principalPay = chargeAmount; - } else { - if (principalAmount.compareTo(BigDecimal.ZERO) > 0) { - principalPay = principalAmount; - } - giftPay = subtract.negate(); - } - - // 更新会员钱包 - UpdateMemberBalanceDTO updateMemberBalanceDTO = UpdateMemberBalanceDTO.builder() - .memberId(dto.getMemberId()) - .type(MemberWalletEnum.TYPE_OUT.getValue()) - .subType(MemberWalletEnum.SUBTYPE_PAYMENT_FOR_ORDER.getValue()) - .updatePrincipalBalance(principalPay) - .updateGiftBalance(giftPay) - .relatedOrderCode(orderCode) - .build(); - memberBasicInfoService.updateMemberBalance(updateMemberBalanceDTO); - - // 记录流水 - if (principalPay != null) { - payRecordList.add(OrderPayRecord.builder() - .orderCode(orderCode) - .payMode(OrderPayRecordEnum.PRINCIPAL_BALANCE_PAYMENT.getValue()) - .payAmount(principalPay) - .acquirer(AcquirerEnum.LOCAL.getValue()) - .createBy(dto.getMemberId()) - .build()); - } - if (giftPay != null) { - payRecordList.add(OrderPayRecord.builder() - .orderCode(orderCode) - .payMode(OrderPayRecordEnum.GIFT_BALANCE_PAYMENT.getValue()) - .payAmount(giftPay) - .acquirer(AcquirerEnum.LOCAL.getValue()) - .createBy(dto.getMemberId()) - .build()); - } - // 余额支付可以直接调支付回调方法 - PayOrderSuccessCallbackDTO callbackDTO = PayOrderSuccessCallbackDTO.builder() - .orderCode(orderCode) - .payAmount(chargeAmount) - .payMode(dto.getPayMode()) - .build(); - orderBasicInfoService.payOrderSuccessCallback(callbackDTO); - - // 余额支付订单 记录会员交易流水 - MemberTransactionRecord record = MemberTransactionRecord.builder() - .orderCode(orderCode) - .scenarioType(ScenarioEnum.ORDER.getValue()) - .memberId(memberVO.getMemberId()) - .actionType(ActionTypeEnum.FORWARD.getValue()) - .payMode(PayModeEnum.PAYMENT_OF_BALANCE.getValue()) - .paymentInstitutions(PaymentInstitutionsEnum.LOCAL_ACCOUNTS.getValue()) - .amount(dto.getPayAmount()) // 单位元 - .build(); - memberTransactionRecordService.insertSelective(record); - - // 订单支付流水入库 - if (CollectionUtils.isNotEmpty(payRecordList)) { - orderPayRecordService.batchInsert(payRecordList); - } - } - /** * 结算订单 * endCharging