mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-05-13 14:30:08 +08:00
Merge branch 'master' into dev
This commit is contained in:
@@ -145,4 +145,27 @@ public class JumpController extends BaseController {
|
|||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量退款接口
|
||||||
|
* http://localhost:8080/app-xcx-h5/batchRefund
|
||||||
|
* @param dto
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@PostMapping("/batchRefund")
|
||||||
|
public RestApiResponse<?> batchRefund(@RequestBody QueryOrderDTO dto) {
|
||||||
|
RestApiResponse<?> response = null;
|
||||||
|
try {
|
||||||
|
orderBasicInfoService.batchRefund(dto);
|
||||||
|
response = new RestApiResponse<>();
|
||||||
|
} catch (BusinessException e) {
|
||||||
|
logger.warn("临时订单退款接口 warn", e);
|
||||||
|
response = new RestApiResponse<>(e.getCode(), e.getMessage());
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.error("临时订单退款接口 error", e);
|
||||||
|
response = new RestApiResponse<>(ReturnCodeEnum.CODE_WEIXIN_REFUND_ERROR);
|
||||||
|
}
|
||||||
|
logger.info("临时刷数据接口 result:{}", JSONObject.toJSONString(response));
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package com.jsowell.service;
|
|||||||
import com.alibaba.fastjson2.JSON;
|
import com.alibaba.fastjson2.JSON;
|
||||||
import com.alibaba.fastjson2.JSONObject;
|
import com.alibaba.fastjson2.JSONObject;
|
||||||
import com.alibaba.fastjson2.TypeReference;
|
import com.alibaba.fastjson2.TypeReference;
|
||||||
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
|
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
|
||||||
import com.github.pagehelper.PageHelper;
|
import com.github.pagehelper.PageHelper;
|
||||||
@@ -1311,6 +1312,9 @@ public class OrderService {
|
|||||||
String data = request.getParameter("data");
|
String data = request.getParameter("data");
|
||||||
//验签请参sign
|
//验签请参sign
|
||||||
String sign = request.getParameter("sign");
|
String sign = request.getParameter("sign");
|
||||||
|
// type
|
||||||
|
String type = request.getParameter("type");
|
||||||
|
|
||||||
//验签请参publicKey
|
//验签请参publicKey
|
||||||
String publicKey = AdapayCore.PUBLIC_KEY;
|
String publicKey = AdapayCore.PUBLIC_KEY;
|
||||||
log.info("汇付支付回调验签请参data={}, sign={}", data, sign);
|
log.info("汇付支付回调验签请参data={}, sign={}", data, sign);
|
||||||
@@ -1320,6 +1324,14 @@ public class OrderService {
|
|||||||
log.info("汇付支付回调验签失败:{}", data);
|
log.info("汇付支付回调验签失败:{}", data);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (StringUtils.equals("payment.succeeded", type)) {
|
||||||
|
paymentSucceeded(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void paymentSucceeded(String data) throws JsonProcessingException {
|
||||||
//验签成功 保存到回调记录表中
|
//验签成功 保存到回调记录表中
|
||||||
JSONObject jsonObject = JSON.parseObject(data);
|
JSONObject jsonObject = JSON.parseObject(data);
|
||||||
ObjectMapper mapper = new ObjectMapper();
|
ObjectMapper mapper = new ObjectMapper();
|
||||||
|
|||||||
@@ -231,4 +231,7 @@ public class Constants {
|
|||||||
|
|
||||||
// 汇付企业用户前缀
|
// 汇付企业用户前缀
|
||||||
public static final String ADAPAY_CORP_MEMBER_PREFIX = "ACM";
|
public static final String ADAPAY_CORP_MEMBER_PREFIX = "ACM";
|
||||||
|
|
||||||
|
// 汇付延时分账支付模式
|
||||||
|
public static final String ADAPAY_PAY_MODE_DELAY = "delay";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,38 @@
|
|||||||
|
package com.jsowell.common.enums.adapay;
|
||||||
|
|
||||||
|
public enum AdapayEventEnum {
|
||||||
|
payment_succeeded("payment.succeeded", "支付成功"),
|
||||||
|
payment_failed("payment.failed", "支付失败"),
|
||||||
|
payment_close_succeeded("payment.close.succeeded", "支付关单成功"),
|
||||||
|
payment_close_failed("payment.close.failed", "支付关单失败"),
|
||||||
|
refund_succeeded("refund.succeeded", "退款成功"),
|
||||||
|
refund_failed("refund.failed", "退款失败"),
|
||||||
|
corp_member_succeeded("corp_member.succeeded", "开户成功"),
|
||||||
|
corp_member_failed("corp_member.failed", "开户失败"),
|
||||||
|
payment_reverse_succeeded("payment_reverse.succeeded", "支付撤销成功"),
|
||||||
|
payment_reverse_failed("payment_reverse.failed", "支付撤销失败"),
|
||||||
|
;
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
AdapayEventEnum(String value, String label) {
|
||||||
|
this.value = value;
|
||||||
|
this.label = label;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,6 +6,8 @@ import lombok.Builder;
|
|||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@@ -67,4 +69,6 @@ public class QueryOrderDTO extends BaseEntity {
|
|||||||
// private int pageSize;
|
// private int pageSize;
|
||||||
//
|
//
|
||||||
// private int pageNum;
|
// private int pageNum;
|
||||||
|
|
||||||
|
private List<String> orderCodeList;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import com.jsowell.pile.vo.uniapp.PersonPileConnectorSumInfoVO;
|
|||||||
import com.jsowell.pile.vo.uniapp.SendMessageVO;
|
import com.jsowell.pile.vo.uniapp.SendMessageVO;
|
||||||
import com.jsowell.pile.vo.web.IndexOrderInfoVO;
|
import com.jsowell.pile.vo.web.IndexOrderInfoVO;
|
||||||
import com.jsowell.pile.vo.web.OrderListVO;
|
import com.jsowell.pile.vo.web.OrderListVO;
|
||||||
|
import com.jsowell.pile.vo.web.RefundOrder;
|
||||||
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Param;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
@@ -215,4 +216,6 @@ public interface OrderBasicInfoMapper {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
List<MerchantOrderInfoVO> getMerchantOrderInfoList(@Param("dto") QueryMerchantOrderDTO dto);
|
List<MerchantOrderInfoVO> getMerchantOrderInfoList(@Param("dto") QueryMerchantOrderDTO dto);
|
||||||
|
|
||||||
|
List<RefundOrder> batchRefundQuery(List<String> orderCodeList);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -289,4 +289,6 @@ public interface IOrderBasicInfoService {
|
|||||||
void analysisPileParameter(BasicPileDTO dto);
|
void analysisPileParameter(BasicPileDTO dto);
|
||||||
|
|
||||||
Map<String, Object> payOrder(PayOrderDTO dto) throws Exception;
|
Map<String, Object> payOrder(PayOrderDTO dto) throws Exception;
|
||||||
|
|
||||||
|
void batchRefund(QueryOrderDTO dto);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import com.google.common.collect.Maps;
|
|||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
import com.huifu.adapay.core.exception.BaseAdaPayException;
|
import com.huifu.adapay.core.exception.BaseAdaPayException;
|
||||||
import com.huifu.adapay.model.Payment;
|
import com.huifu.adapay.model.Payment;
|
||||||
|
import com.huifu.adapay.model.PaymentReverse;
|
||||||
import com.huifu.adapay.model.Refund;
|
import com.huifu.adapay.model.Refund;
|
||||||
import com.jsowell.adapay.common.CreateAdaPaymentParam;
|
import com.jsowell.adapay.common.CreateAdaPaymentParam;
|
||||||
import com.jsowell.common.constant.CacheConstants;
|
import com.jsowell.common.constant.CacheConstants;
|
||||||
@@ -1939,18 +1940,36 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 创建汇付退款对象 在完成初始化设置情况下,调用方法,获取 Refund对象
|
// 创建汇付退款对象 在完成初始化设置情况下,调用方法,获取 Refund对象
|
||||||
String id = record.getPaymentId();
|
String id = record.getPaymentId(); //
|
||||||
Map<String, Object> refundParams = Maps.newHashMap();
|
String snowflakeId = SnowflakeIdWorker.getSnowflakeId();
|
||||||
String amount = AdapayUtil.formatAmount(dto.getRefundAmount());
|
String amount = AdapayUtil.formatAmount(dto.getRefundAmount());
|
||||||
refundParams.put("refund_amt", amount);
|
|
||||||
refundParams.put("refund_order_no", SnowflakeIdWorker.getSnowflakeId());
|
|
||||||
refundParams.put("notify_url", ADAPAY_REFUND_CALLBACK_URL);
|
|
||||||
|
|
||||||
try {
|
String payMode = "delay";
|
||||||
Map<String, Object> response = Refund.create(id, refundParams);
|
if (StringUtils.equals("", payMode)) {
|
||||||
logger.info("汇付支付创建退款对象:{}", JSON.toJSONString(response));
|
// 延迟分账确认的调退款接口
|
||||||
} catch (BaseAdaPayException e) {
|
Map<String, Object> refundParams = Maps.newHashMap();
|
||||||
logger.error("汇付支付创建退款对象error", e);
|
refundParams.put("refund_amt", amount);
|
||||||
|
refundParams.put("refund_order_no", snowflakeId);
|
||||||
|
refundParams.put("notify_url", ADAPAY_REFUND_CALLBACK_URL);
|
||||||
|
try {
|
||||||
|
Map<String, Object> response = Refund.create(id, refundParams);
|
||||||
|
logger.info("汇付支付创建退款对象:{}", JSON.toJSONString(response));
|
||||||
|
} catch (BaseAdaPayException e) {
|
||||||
|
logger.error("汇付支付创建退款对象error", e);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 延迟分账未确认调撤销调撤销接口退款
|
||||||
|
Map<String, Object> reverseParams = Maps.newHashMap();
|
||||||
|
reverseParams.put("app_id", ADAPAY_APP_ID);
|
||||||
|
reverseParams.put("payment_id", id);
|
||||||
|
reverseParams.put("reverse_amt", amount);
|
||||||
|
reverseParams.put("order_no", snowflakeId);
|
||||||
|
try {
|
||||||
|
Map<String, Object> paymentReverse = PaymentReverse.create(reverseParams);
|
||||||
|
logger.info("汇付支付创建交易撤销对象:{}", JSON.toJSONString(paymentReverse));
|
||||||
|
} catch (BaseAdaPayException e) {
|
||||||
|
logger.error("汇付支付创建交易撤销对象error", e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2155,6 +2174,27 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
|||||||
return resultMap;
|
return resultMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void batchRefund(QueryOrderDTO dto) {
|
||||||
|
if (CollectionUtils.isEmpty(dto.getOrderCodeList())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
List<RefundOrder> list = orderBasicInfoMapper.batchRefundQuery(dto.getOrderCodeList());
|
||||||
|
if (CollectionUtils.isEmpty(list)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
WeChatRefundDTO weChatRefundDTO = null;
|
||||||
|
for (RefundOrder refundOrder : list) {
|
||||||
|
if (StringUtils.isBlank(refundOrder.getRefundAmount())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
weChatRefundDTO = new WeChatRefundDTO();
|
||||||
|
weChatRefundDTO.setOrderCode(refundOrder.getOrderCode());
|
||||||
|
weChatRefundDTO.setRefundAmount(new BigDecimal(refundOrder.getRefundAmount()));
|
||||||
|
this.refundForOrderWithAdapay(weChatRefundDTO);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 白名单支付订单逻辑
|
* 白名单支付订单逻辑
|
||||||
*
|
*
|
||||||
@@ -2277,6 +2317,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
|||||||
|
|
||||||
// 封装对象
|
// 封装对象
|
||||||
String amount = AdapayUtil.formatAmount(dto.getPayAmount()); // 用户支付金额
|
String amount = AdapayUtil.formatAmount(dto.getPayAmount()); // 用户支付金额
|
||||||
|
String payMode = Constants.ADAPAY_PAY_MODE_DELAY; // 汇付延时分账
|
||||||
CreateAdaPaymentParam createAdaPaymentParam = new CreateAdaPaymentParam();
|
CreateAdaPaymentParam createAdaPaymentParam = new CreateAdaPaymentParam();
|
||||||
createAdaPaymentParam.setOrder_no(orderInfo.getOrderCode());
|
createAdaPaymentParam.setOrder_no(orderInfo.getOrderCode());
|
||||||
createAdaPaymentParam.setPay_amt(amount);
|
createAdaPaymentParam.setPay_amt(amount);
|
||||||
@@ -2287,38 +2328,26 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
|||||||
Map<String, String> map = Maps.newHashMap();
|
Map<String, String> map = Maps.newHashMap();
|
||||||
map.put("type", ScenarioEnum.ORDER.getValue());
|
map.put("type", ScenarioEnum.ORDER.getValue());
|
||||||
map.put("orderCode", dto.getOrderCode());
|
map.put("orderCode", dto.getOrderCode());
|
||||||
|
map.put("payMode", payMode);
|
||||||
createAdaPaymentParam.setDescription(JSON.toJSONString(map));
|
createAdaPaymentParam.setDescription(JSON.toJSONString(map));
|
||||||
// 异步通知地址,url为http/https路径,服务器POST回调,URL 上请勿附带参数
|
// 异步通知地址,url为http/https路径,服务器POST回调,URL 上请勿附带参数
|
||||||
createAdaPaymentParam.setNotify_url(ADAPAY_CALLBACK_URL);
|
createAdaPaymentParam.setNotify_url(ADAPAY_CALLBACK_URL);
|
||||||
createAdaPaymentParam.setExpend(JSONObject.toJSONString(ImmutableMap.of("open_id", openId)));
|
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");
|
createAdaPaymentParam.setPay_mode(payMode);
|
||||||
try {
|
try {
|
||||||
logger.info("创建汇付支付参数:{}", JSONObject.toJSONString(createAdaPaymentParam));
|
logger.info("创建汇付支付参数:{}", JSONObject.toJSONString(createAdaPaymentParam));
|
||||||
Map<String, Object> response = Payment.create(BeanMap.create(createAdaPaymentParam));
|
Map<String, Object> response = Payment.create(BeanMap.create(createAdaPaymentParam));
|
||||||
if (response != null && !response.isEmpty()) {
|
if (response != null && !response.isEmpty()) {
|
||||||
JSONObject expend = JSONObject.parseObject(response.get("expend").toString());
|
JSONObject expend = JSONObject.parseObject(response.get("expend").toString());
|
||||||
JSONObject pay_info = expend.getJSONObject("pay_info");
|
JSONObject pay_info = expend.getJSONObject("pay_info");
|
||||||
Map<String, Object> resultMap = JSONObject.parseObject(pay_info.toJSONString(), new TypeReference<Map<String, Object>>() {
|
Map<String, Object> resultMap = JSONObject.parseObject(pay_info.toJSONString(), new TypeReference<Map<String, Object>>() {});
|
||||||
});
|
|
||||||
if (resultMap != null) {
|
if (resultMap != null) {
|
||||||
// 表示已经获取到支付参数了,后续再有支付请求就拒绝
|
// 表示已经获取到支付参数了,后续再有支付请求就拒绝
|
||||||
redisCache.setCacheObject(redisKey, resultMap, 15, TimeUnit.MINUTES);
|
redisCache.setCacheObject(redisKey, resultMap, 15, TimeUnit.MINUTES);
|
||||||
|
|
||||||
|
// 设置订单号的
|
||||||
}
|
}
|
||||||
return resultMap;
|
return resultMap;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package com.jsowell.pile.vo.web;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Builder
|
||||||
|
public class RefundOrder {
|
||||||
|
private String orderCode;
|
||||||
|
private String orderStatus;
|
||||||
|
private String stationId;
|
||||||
|
private String orderAmount;
|
||||||
|
private String payAmount;
|
||||||
|
private String refundAmount;
|
||||||
|
}
|
||||||
@@ -1087,4 +1087,23 @@
|
|||||||
|
|
||||||
order by t1.create_time desc
|
order by t1.create_time desc
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<select id="batchRefundQuery" resultType="com.jsowell.pile.vo.web.RefundOrder">
|
||||||
|
SELECT
|
||||||
|
t1.order_code as orderCode,
|
||||||
|
t1.`order_status` as orderStatus,
|
||||||
|
t1.station_id as stationId,
|
||||||
|
t2.station_name AS stationName,
|
||||||
|
t1.pay_amount AS payAmount,
|
||||||
|
t1.order_amount AS orderAmount,
|
||||||
|
t1.refund_amount AS refundAmount
|
||||||
|
FROM
|
||||||
|
order_basic_info t1
|
||||||
|
JOIN pile_station_info t2 ON t1.station_id = t2.id
|
||||||
|
WHERE
|
||||||
|
t1.order_code IN
|
||||||
|
<foreach collection="list" item="itme" open="(" separator="," close=")">
|
||||||
|
#{itme,jdbcType=VARCHAR}
|
||||||
|
</foreach>
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
Reference in New Issue
Block a user