提交 a9a7f9f0 authored 作者: huningning's avatar huningning

Merge branch 'v5.7_break_contract_reverse_20231020' into test

# Conflicts: # performance-api/src/main/java/com/clx/performance/param/pay/NotifyParam.java # performance-web/src/main/java/com/clx/performance/controller/payment/PayNotifyController.java # performance-web/src/main/java/com/clx/performance/service/impl/PaymentServiceImpl.java # performance-web/src/main/java/com/clx/performance/service/impl/TempServiceImpl.java
package com.clx.performance.param.pay;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.msl.common.enums.ResultEnum;
import io.swagger.annotations.ApiModel;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
//@ApiModel(description = "货主绑卡")
@Getter
@Setter
@ToString
public class NotifyParam {
/** 支付操作 参考<MessageTypeEnum> */
private Integer action;
/** 交易单号 */
private String orderNo;
/** 支付请求唯一ID */
private String uuid;
/** 出错时的交易单元编号 */
private String errorNo;
@JsonIgnoreProperties(ignoreUnknown = true)
private Integer code; // 返回结果代码,0为成功
@JsonIgnoreProperties(ignoreUnknown = true)
private Long total;//总共记录数
@JsonIgnoreProperties(ignoreUnknown = true)
private Integer pageNum;//总共页数
@JsonIgnoreProperties(ignoreUnknown = true)
private String msg;
@JsonIgnoreProperties(ignoreUnknown = true)
private String data;
}
......@@ -2,25 +2,37 @@ package com.clx.performance.param.pc.payment;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotBlank;
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Accessors(chain = true)
public class PayParam {
@NotBlank(message = "支付人不能为空")
@ApiModelProperty(value = "支付来源", example = "2234", dataType = "int")
Integer from;
@NotBlank(message = "支付密码不能为空")
@ApiModelProperty(value = "支付方密码", example = "2356", dataType = "String")
String pwd;
@NotBlank(message = "收款钱包不能为空")
@ApiModelProperty(value = "支付去向", example = "2234", dataType = "int")
Integer to;
@NotBlank(message = "金额不能为空")
@ApiModelProperty(value = "金额", example = "2356", dataType = "int")
Integer figure;
@NotBlank(message = "交易单号不能为空")
@ApiModelProperty(value = "交易单号", example = "2356", dataType = "String")
String tradeNo;
@NotBlank(message = "交易单id不能为空")
@ApiModelProperty(value = "交易单id", example = "23", dataType = "int")
Integer tradeId;
@ApiModelProperty(value = "服务费收取方", example = "2234", dataType = "int")
Integer figureFeeCode;
@NotBlank(message = "交易备注不能为空")
@ApiModelProperty(value = "交易备注", example = "23", dataType = "int")
String remark;
}
package com.clx.performance.param.pc.payment;
import lombok.*;
import lombok.experimental.Accessors;
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Accessors(chain = true)
public class PayUnitDTO {
/** 支付单元唯一标识*/
private String id;
......
......@@ -2,11 +2,14 @@ package com.clx.performance.param.pc.payment;
import lombok.*;
import lombok.experimental.Accessors;
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Accessors(chain = true)
public class PayUserDTO {
/**用户钱包编号 用户发起的操作必填 */
private Integer userCode;
......
package com.clx.performance.config;
import lombok.Getter;
import lombok.Setter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
@Configuration
@Getter
@Setter
public class MslPaymentConfig {
@Value("${msl.payment.host}")
private String host;
@Value("${msl.payment.notifyhost}")
private String notifyhost;
}
......@@ -8,7 +8,7 @@ import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.Objects;
@Slf4j
......@@ -19,21 +19,20 @@ import org.springframework.web.bind.annotation.*;
@AllArgsConstructor
public class PayNotifyController {
@ApiOperation(value = "用户支付完成回调接口", notes = " <br>By:许建科")
@ApiOperation(value = "用户支付完成回调接口", notes = " <br>By:胡宁宁")
@RequestMapping(value = "/userPayNotify", method = RequestMethod.POST)
// public Result<Object> userPayNotify(@RequestBody String notify) {
public Result<Object> userPayNotify(@RequestBody NotifyString notify) {
log.info("用户支付完成回调接口 传参 {}", notify);
// if (Objects.isNull(notify) || Objects.isNull(notify.getCode()) || Objects.isNull(notify.getAction())) {
// return new Result<>();
// }
// if (notify.getCode() != 0) {
// // 支付失败处理
// log.info("唯一id {}", notify.getOrderNo());
// } else {
// // 支付支付成功处理
// log.info("唯一id {}", notify.getOrderNo());
// }
if (Objects.isNull(notify) || Objects.isNull(notify.getCode()) || Objects.isNull(notify.getAction())) {
return new Result<>();
}
if (notify.getCode() != 0) {
// 支付失败处理
log.info("支付失败处理 唯一id {}", notify.getOrderNo());
} else {
// 支付支付成功处理
log.info(" 支付支付成功处理 唯一id {}", notify.getOrderNo());
}
Result<Object> ret = new Result<>();
return ret;
}
......
......@@ -158,7 +158,8 @@ public class OrderGoodsTruckBindDaoImpl extends BaseDaoImpl<OrderGoodsTruckBindM
@Override
public List<OrderGoodsTruckBind> getCancelOrderGoods(String truckNo, String beginTime, String endTime) {
return baseMapper.selectList(lQrWrapper().eq(OrderGoodsTruckBind::getOrderNo, truckNo)
return baseMapper.selectList(lQrWrapper().eq(OrderGoodsTruckBind::getTruckNo, truckNo)
.eq(OrderGoodsTruckBind::getStatus, OrderGoodsTruckBindEnum.Status.CANCEL.getCode())
.le(OrderGoodsTruckBind::getCreateTime, endTime)
.ge(OrderGoodsTruckBind::getCreateTime, beginTime)
);
......
package com.clx.performance.enums;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* Created by cuiwanzhe on 2017/6/2.
* 支付备注枚举
*/
public enum PayRemarkEnum {
OWNER_CREDIT(1, "货主冻结押金"),
DRIVER_CREDIT(2, "司机冻结押金"),
OWNER_FREIGHT(3, "货主冻结运费"),
OWNER_INSURANCE(4, "货主冻结保险"),
DRIVER_UNFREEZE(5, "司机解冻押金"),
INSURANCE_UNFREEZE(6, "解冻保险到系统账户"),
COMPENSATION_TO_DRIVER(7, "司机赔偿货主"),
FREIGHT_TO_OWNER(8, "货主支付运费给司机"),
UPDATE_FREIGHT(9, "修正运费"),
UPDATE_INSURANCE(10, "修正保险"),
OWNER_UNFREEZE(11, "解冻货主的押金"),
DRIVER_SALE(12, "冻结司机的消费"),
DRIVER_SALE_UNFREEZE(13, "司机支付货款给货主"),
//v78 解冻保险
UNFREEZE_INSURANCE(14, "解冻保险"),
;
private static Map<Integer, String> map = new ConcurrentHashMap<>();
static {
for(PayRemarkEnum payRemarkEnum : PayRemarkEnum.values()){
map.put(payRemarkEnum.getValue(), payRemarkEnum.getDisplayValue());
}
}
private int value;
private String displayValue;
public void setValue(int value) {
this.value = value;
}
public String getDisplayValue() {
return displayValue;
}
public void setDisplayValue(String displayValue) {
this.displayValue = displayValue;
}
private PayRemarkEnum(int value, String displayValue){
this.value = value;
this.displayValue = displayValue;
}
public int getValue(){
return value;
}
public static String toString(int value){
return map.get(value);
}
}
package com.clx.performance.service;
import com.clx.performance.param.pc.payment.PayParam;
import com.msl.common.result.Result;
public interface PaymentService {
Result paymentWallet(Integer fromUser,Integer toUser,Integer figure,String tradeNo, Integer id);
Result paymentWallet( PayParam noCheckPwd);
}
......@@ -2,6 +2,8 @@ package com.clx.performance.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.clx.performance.config.MslAppConfig;
import com.clx.performance.config.MslPaymentConfig;
import com.clx.performance.constant.ActionConstants;
import com.clx.performance.dao.ThirdPartRequestLogDao;
import com.clx.performance.encryption.oldmsl.PayEncryptTools;
......@@ -17,6 +19,7 @@ import com.clx.performance.param.pc.payment.PayUnitDTO;
import com.clx.performance.param.pc.payment.PayUserDTO;
import com.clx.performance.service.ThirdPartRequestLogService;
import com.msl.common.dto.HttpDTO;
import com.msl.common.enums.ResultCodeEnum;
import com.msl.common.exception.ServiceSystemException;
import com.msl.common.result.Result;
import com.msl.common.utils.EncryptUtil;
......@@ -27,6 +30,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.security.GeneralSecurityException;
import java.util.UUID;
......@@ -37,69 +41,56 @@ import static com.clx.performance.enums.HttpEnum.PERFORMANCE_PAY_CLX_PAYMENT;
@AllArgsConstructor
public class PaymentServiceImpl implements PaymentService {
@Autowired
ThirdPartRequestLogDao thirdPartRequestLogDao;
@Autowired
ThirdPartRequestLogService thirdPartRequestLogService;
public static final String TRANSPORT_USER = "13403503399";
public static final String TRANSPORT_KEY = "9Y1N5AUP8N2TI359";
// 请求地址
public static final String OLD_CLX_HOST = "https://api.clxkj.cn:8088";
//回调地址
public static final String NOTIFY_HOST = "https://gateway.testclx.cn";
/** 转账回调地址 **/
public static final String NOTIFY_URL = "/clx-performance/payment/notify/userPayNotify";
@Override
public Result paymentWallet(Integer fromUser, Integer toUser, Integer figure, String tradeNo, Integer id) {
PayParam payDTO = new PayParam();
payDTO.setPwd("noCheckPwd"); // 不校验密码
payDTO.setFrom(fromUser);
payDTO.setTo(toUser);
payDTO.setTradeNo(tradeNo); // 流水号
payDTO.setTradeId(id); //唯一id
payDTO.setFigureFeeCode(10000);//默认到平台
payDTO.setFigure(figure);
return userPay(payDTO);
}
@Autowired
private final MslPaymentConfig mslPaymentConfig;
@Autowired
ThirdPartRequestLogDao thirdPartRequestLogDao;
@Autowired
ThirdPartRequestLogService thirdPartRequestLogService;
/**
* 组装余额支付报文并发送请求
* 钱包直接划账给钱包
*
* @param payDTO
* @return
*/
public Result<Object> userPay(PayParam payDTO) {
PayUnitDTO payUnitDTO = new PayUnitDTO();
payUnitDTO.setId(payDTO.getTradeId().toString());
payUnitDTO.setFrom(payDTO.getFrom());
payUnitDTO.setTo(payDTO.getTo());
payUnitDTO.setFigure(payDTO.getFigure());
payUnitDTO.setType(PayUnitTypeEnum.RESIDUE_PAY.getCode());
payUnitDTO.setTimestamp(System.currentTimeMillis() / 1000);
payUnitDTO.setRemark("承运支付钱包转账");
PayEncryptTools.sign(payUnitDTO, PrivateKeyConfig.privateKeyByte);// 用业务系统自己的私钥
PayUserDTO payUserDTO = new PayUserDTO();
payUserDTO.setPwd(payDTO.getPwd());
payUserDTO.setSystem(SystemCodeEnum.PERFORMANCE_SERVICE.getCode()); //商户
payUserDTO.setUserCode(payDTO.getFrom());
payUserDTO.setOrderNo(payDTO.getTradeNo());
payUserDTO.setUuid(UUID.randomUUID().toString().replaceAll("-", ""));
payUserDTO.setNotifyUrl(NOTIFY_HOST+NOTIFY_URL);
// payUserDTO.setFee(payDTO.getFigureFee());
payUserDTO.setPayUnitDTO(payUnitDTO);
payUserDTO.setFeeToUserCode(payDTO.getFigureFeeCode());
log.info("发起支付请求日志 {}",payUserDTO);
Result<Object> notify = (Result<Object>)postRequest(OLD_CLX_HOST+PERFORMANCE_PAY_CLX_PAYMENT.getUrl(), JSON.toJSONString(payUserDTO));
log.info("支付返回日志 {}",notify);
//Result<Object> notify = feignPaymentService.payUserMQ(payUserDTO);
// if (notify == null) {
// //FEGIN返回null
// throw new ServiceSystemException(ResultCodeEnum.FEGIN_NULL);
// }
// if (notify.getCode() != 0) {
// }
@Override
public Result paymentWallet(PayParam payDTO) {
/** 构建支付单元 **/
PayUnitDTO payUnitDTO = PayUnitDTO.builder()
.id(payDTO.getTradeId().toString())
.from(payDTO.getFrom())
.to(payDTO.getTo())
.figure(payDTO.getFigure())
.type(PayUnitTypeEnum.RESIDUE_PAY.getCode())
.timestamp(System.currentTimeMillis() / 1000)
.remark(payDTO.getRemark()).build();
/** 生成签名**/
PayEncryptTools.sign(payUnitDTO, PrivateKeyConfig.privateKeyByte);
/** 构建支付支付 ***/
PayUserDTO payUserDTO = PayUserDTO.builder()
.pwd(payDTO.getPwd())
.system(SystemCodeEnum.PERFORMANCE_SERVICE.getCode())
.userCode(payDTO.getFrom())
.orderNo(payDTO.getTradeNo())
.uuid(UUID.randomUUID().toString().replaceAll("-", ""))
.notifyUrl(mslPaymentConfig.getNotifyhost() + NOTIFY_URL)
.payUnitDTO(payUnitDTO).build();
log.info("发起支付请求日志 {}", payUserDTO);
Result<Object> notify = (Result<Object>) postRequest(mslPaymentConfig.getHost()+ PERFORMANCE_PAY_CLX_PAYMENT.getUrl(), JSON.toJSONString(payUserDTO));
log.info("支付返回日志 {}", notify);
if (notify == null) {
//FEGIN返回null
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "支付服务返回异常");
}
return notify;
}
......@@ -111,12 +102,14 @@ public class PaymentServiceImpl implements PaymentService {
public Result<?> postRequest(String requestUrl, String param) {
ThirdPartRequestLog log = ThirdPartRequestLog.builder()
.requestId(UUID.randomUUID().toString())
.appNo(Long.valueOf(10000)) //应用编号 10000 默认诚联信
//应用编号 10000 默认诚联信
.appNo(Long.valueOf(10000))
.requestType(ThirdRequestTypeEnum.SEND.getCode())
.action(ActionConstants.CLX_PAYMENT_PAY)
.url(requestUrl)
.requestContent(param)
.status(0) //状态: 0-请求中,1-成功,2-失败
//状态: 0-请求中,1-成功,2-失败
.status(0)
.build();
thirdPartRequestLogDao.saveEntity(log);
return encryptPost(requestUrl, param, log.getId());
......
......@@ -2,7 +2,9 @@ package com.clx.performance.service.impl;
import com.clx.performance.dao.breakcontract.BreakContractSettlementDriverDao;
import com.clx.performance.enums.BreakContractSettlementDriverEnum;
import com.clx.performance.enums.PayRemarkEnum;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.param.pc.payment.PayParam;
import com.clx.performance.service.PaymentService;
import com.clx.performance.model.breakcontract.BreakContractSettlementDriver;
import com.clx.performance.service.TempService;
......@@ -39,12 +41,18 @@ public class TempServiceImpl implements TempService {
@Override
public void paymentTest(String fromUser, String toUser, String figure) {
paymentService.paymentWallet(
Integer.valueOf(fromUser),
Integer.valueOf(toUser),
Integer.valueOf(figure),
UUID.randomUUID().toString().replaceAll("-", ""),
999);
PayParam noCheckPwd = PayParam.builder().from(
Integer.valueOf(fromUser))
.to(Integer.valueOf(toUser))
.figure(Integer.valueOf(figure))
.tradeNo(UUID.randomUUID().toString().replaceAll("-", ""))
.tradeId(12345)
.pwd("noCheckPwd")
.remark(PayRemarkEnum.toString(PayRemarkEnum.FREIGHT_TO_OWNER.getValue()))
.build();
paymentService.paymentWallet(noCheckPwd);
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论