提交 f81bf149 作者: zhenjie

小猪结算-电子签约、单笔提现

上级 7142c8f3
......@@ -55,4 +55,10 @@ public class UserSystemConstant {
@Value("${third-party.xzsz.taxFundId}")
private String taxFundId;
@Value("${third-party.xzsz.authNotify}")
private String authNotify;
@Value("${third-party.xzsz.withdrawNotify}")
private String withdrawNotify;
}
......@@ -5,14 +5,10 @@ import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.constant.UserSystemConstant;
import com.mmc.iuav.user.controller.BaseController;
import com.mmc.iuav.user.model.vo.XzAuthVO;
import com.mmc.iuav.user.model.vo.XzWithdrawalVO;
import com.mmc.iuav.user.service.xzsz.XzService;
import com.piggy.settlement.sdk.client.v2.bankreceipt.PiggyBankReceiptClient;
import com.piggy.settlement.sdk.client.v2.singlewithdraw.PiggySingleWithdrawalApiV2Client;
import com.piggy.settlement.sdk.util.v2.PiggyOpenBasicsAesUtil;
import com.piggy.settlement.sdk.vo.v2.bankreceipt.PiggyBankReceiptVo;
import com.piggy.settlement.sdk.vo.v2.singlewithdraw.PiggySingleWithdrawV2Vo;
import com.piggy.settlement.sdk.vo.v2.singlewithdraw.PiggySingleWithdrawalQueryV2Vo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
......@@ -126,34 +122,22 @@ public class XzController extends BaseController {
@ApiOperation(value = "单笔提现上报")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@PostMapping("singleSubmit")
public ResultBody singleSubmit(@RequestBody XzWithdrawalVO xzWithdrawalVO, HttpServletRequest request) {
return xzService.singleSubmit(xzWithdrawalVO, this.getUserLoginInfoFromRedis(request));
public ResultBody singleSubmit(@RequestBody PiggySingleWithdrawV2Vo.SingleWithdrawV2Vo singleWithdrawV2Vo) {
return ResultBody.success(xzService.singleSubmit(singleWithdrawV2Vo));
}
@ApiOperation(value = "查询提现结果")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@PostMapping("querySingleTrade")
public ResultBody querySingleTrade() {
PiggySingleWithdrawalApiV2Client v2Client = PiggySingleWithdrawalApiV2Client.getInstanse(userSystemConstant.getXzAppSecret(), userSystemConstant.getXzDomain());
JSONObject jsonObject = v2Client.querySingleTrade(PiggySingleWithdrawalQueryV2Vo.builder()
.appKey(userSystemConstant.getXzAppKey())
.outerTradeNo("TEST-123154631531345435")
.build());
System.out.println(jsonObject.toString());
return ResultBody.success();
@GetMapping("querySingleTrade")
public ResultBody querySingleTrade(@RequestParam String outerTradeNo) {
return ResultBody.success(xzService.querySingleTrade(outerTradeNo));
}
@ApiOperation(value = "查询单笔交易回单")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@PostMapping("querySingleReceipt")
public ResultBody querySingleReceipt() {
PiggyBankReceiptClient piggyBankReceiptClient = PiggyBankReceiptClient.getInstanse(userSystemConstant.getXzAppSecret(), userSystemConstant.getXzDomain());
JSONObject jsonObject = piggyBankReceiptClient.getSingleReceipt(PiggyBankReceiptVo.builder()
.appKey(userSystemConstant.getXzAppKey())
.frontLogNo("xxx")
.build());
System.out.println(jsonObject.toString());
return ResultBody.success();
@GetMapping("querySingleReceipt")
public ResultBody querySingleReceipt(@RequestParam String frontLogNo) {
return xzService.querySingleReceipt(frontLogNo);
}
@ApiOperation(value = "签署结果回调")
......
......@@ -28,4 +28,5 @@ public class XzAuthDO implements Serializable {
private String contract_url;
private Integer deleted;
private Date create_time;
private Integer xzAuthStatus;
}
......@@ -4,7 +4,9 @@ import cn.hutool.json.JSONObject;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.model.dto.LoginSuccessDTO;
import com.mmc.iuav.user.model.vo.XzAuthVO;
import com.mmc.iuav.user.model.vo.XzWithdrawalVO;
import com.mmc.iuav.user.xzsz.SingleSubmitResp;
import com.mmc.iuav.user.xzsz.WithdrawalResp;
import com.piggy.settlement.sdk.vo.v2.singlewithdraw.PiggySingleWithdrawV2Vo;
/**
* @author: zj
......@@ -17,7 +19,7 @@ public interface XzService {
ResultBody xzService();
JSONObject getContractScope(XzAuthVO xzAuthVO);
String getContractScope(XzAuthVO xzAuthVO);
String hasKeyByUrl(XzAuthVO xzAuthVO, LoginSuccessDTO loginSuccessDTO);
......@@ -29,5 +31,9 @@ public interface XzService {
ResultBody clearTestFace(String name, String idCard);
ResultBody singleSubmit(XzWithdrawalVO xzWithdrawalVO, LoginSuccessDTO loginSuccessDTO);
SingleSubmitResp singleSubmit(PiggySingleWithdrawV2Vo.SingleWithdrawV2Vo singleWithdrawV2Vo);
WithdrawalResp querySingleTrade(String outerTradeNo);
ResultBody querySingleReceipt(String frontLogNo);
}
......@@ -8,16 +8,20 @@ import com.mmc.iuav.user.dao.xzsz.XzDao;
import com.mmc.iuav.user.entity.XzAuthDO;
import com.mmc.iuav.user.model.dto.LoginSuccessDTO;
import com.mmc.iuav.user.model.vo.XzAuthVO;
import com.mmc.iuav.user.model.vo.XzWithdrawalVO;
import com.mmc.iuav.user.service.xzsz.XzService;
import com.mmc.iuav.user.xzsz.SingleSubmitResp;
import com.mmc.iuav.user.xzsz.WithdrawalResp;
import com.piggy.settlement.sdk.client.sign.PiggySignApiClient;
import com.piggy.settlement.sdk.client.v2.bankreceipt.PiggyBankReceiptClient;
import com.piggy.settlement.sdk.client.v2.basics.PiggyOpenBasicsClient;
import com.piggy.settlement.sdk.client.v2.singlewithdraw.PiggySingleWithdrawalApiV2Client;
import com.piggy.settlement.sdk.util.v2.PiggyOpenBasicsAesUtil;
import com.piggy.settlement.sdk.vo.sign.PiggySignResultVo;
import com.piggy.settlement.sdk.vo.sign.PiggySignVo;
import com.piggy.settlement.sdk.vo.v2.bankreceipt.PiggyBankReceiptVo;
import com.piggy.settlement.sdk.vo.v2.basics.PiggyBasicsVo;
import com.piggy.settlement.sdk.vo.v2.singlewithdraw.PiggySingleWithdrawV2Vo;
import com.piggy.settlement.sdk.vo.v2.singlewithdraw.PiggySingleWithdrawalQueryV2Vo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -70,7 +74,7 @@ public class XzServiceImpl implements XzService {
}
@Override
public JSONObject getContractScope(XzAuthVO xzAuthVO) {
public String getContractScope(XzAuthVO xzAuthVO) {
PiggySignApiClient piggySignApiClient = PiggySignApiClient.getInstanse(userSystemConstant.getXzAppSecret(), userSystemConstant.getXzDomain());
JSONObject jsonObject = piggySignApiClient.getSignStatus(PiggySignResultVo.builder()
.appKey(userSystemConstant.getXzAppKey())
......@@ -79,14 +83,15 @@ public class XzServiceImpl implements XzService {
.position(userSystemConstant.getXzPosition())
.build());
System.out.println(jsonObject.toString());
return jsonObject;
return jsonObject.toString();
}
@Override
public String hasKeyByUrl(XzAuthVO xzAuthVO, LoginSuccessDTO loginSuccessDTO) {
// TODO 查询是否已认证
JSONObject contractScope = this.getContractScope(xzAuthVO);
if (contractScope.get("data") != null) {
String contractScope = this.getContractScope(xzAuthVO);
com.alibaba.fastjson2.JSONObject jsonObject1 = com.alibaba.fastjson2.JSONObject.parseObject(contractScope);
if (jsonObject1.get("data") != null) {
xzDao.updateAuthStatus(loginSuccessDTO.getUserAccountId());
// TODO 添加认证结果
return "合同签署完毕";
......@@ -101,7 +106,7 @@ public class XzServiceImpl implements XzService {
.infoSource("1")
.jumpPage("https://wwww.baidu.com")
.mobile(xzAuthVO.getMobile())
.notifyUrl("https://www.iuav.shop/xz/xzAuthNotify")
.notifyUrl(userSystemConstant.getAuthNotify())
.position(userSystemConstant.getXzPosition())
.userName(xzAuthVO.getUsername())
.build());
......@@ -115,15 +120,15 @@ public class XzServiceImpl implements XzService {
public String xzAuthNotify(JSONObject notify) {
log.info("获取到的推送结果:{}", notify.toString());
// 认证成功,修改认证状态
if (notify.get("code").equals("0")) {
if (notify.get("code").toString().equals("0")) {
XzAuthDO authDO = notify.get("data", XzAuthDO.class);
Integer userAccountId = (Integer) com.alibaba.fastjson2.JSONObject.parseObject(authDO.getCustomParams()).get("userAccountId");
if (userAccountId != null) {
XzAuthDO xzAuthDO = xzDao.getXzAuthByUserAccountId(userAccountId);
if (xzAuthDO != null) {
authDO.setUserAccountId(userAccountId);
authDO.setXzAuthStatus(1);
xzDao.addAuth(authDO);
xzDao.updateAuthStatus(userAccountId);
return "success";
}
}
......@@ -161,37 +166,41 @@ public class XzServiceImpl implements XzService {
}
@Override
public ResultBody singleSubmit(XzWithdrawalVO xzWithdrawalVO, LoginSuccessDTO loginSuccessDTO) {
XzAuthDO xzAuthDO = xzDao.getXzAuthByUserAccountId(loginSuccessDTO.getUserAccountId());
if (xzAuthDO == null) {
return ResultBody.error("未认证");
}
// 判断自己可以提现的余额
ResultBody resultBody = this.xzService();
// 判断可提现金额
public SingleSubmitResp singleSubmit(PiggySingleWithdrawV2Vo.SingleWithdrawV2Vo singleWithdrawV2Vo) {
singleWithdrawV2Vo.setNotifyUrl(userSystemConstant.getWithdrawNotify());
PiggySingleWithdrawalApiV2Client v2Client = PiggySingleWithdrawalApiV2Client.getInstanse(userSystemConstant.getXzAppSecret(), userSystemConstant.getXzDomain());
JSONObject jsonObject = v2Client.singleSubmit(PiggySingleWithdrawV2Vo.builder()
.appKey(userSystemConstant.getXzAppKey())
.bizAESContent(PiggyOpenBasicsAesUtil.produceAesData(userSystemConstant.getXzAppKey(), "0000000000000000", PiggySingleWithdrawV2Vo.SingleWithdrawV2Vo.builder()
.notifyUrl("http://www.iuav.shop/xz/xzWithdrawNotify")
.taxFundId(userSystemConstant.getTaxFundId())
.month("2021-08")
.outerTradeNo("TEST-123154631531345435")
.empNum("userAccountId_" + loginSuccessDTO.getUserAccountId())
.empName(xzAuthDO.getName())
.empPhone(xzAuthDO.getMobile())
.licenseType("ID_CARD")
.licenseId(xzAuthDO.getIdCardNo())
.settleType("bankcard")
.payAccount(xzWithdrawalVO.getPayAccount())
.positionName(userSystemConstant.getXzPosition())
.payAmount(xzWithdrawalVO.getPayAmount())
.bankRemo("云享飞提现")
.remarks("云享飞提现")
.build()))
.bizAESContent(PiggyOpenBasicsAesUtil.produceAesData(userSystemConstant.getXzAppKey(), "0000000000000000", singleWithdrawV2Vo))
.build());
System.out.println("单笔提现上报: " + jsonObject.toString());
SingleSubmitResp singleSubmitResp = com.alibaba.fastjson2.JSONObject.parseObject(jsonObject.toString(), SingleSubmitResp.class);
return singleSubmitResp;
}
@Override
public WithdrawalResp querySingleTrade(String outerTradeNo) {
PiggySingleWithdrawalApiV2Client v2Client = PiggySingleWithdrawalApiV2Client.getInstanse(userSystemConstant.getXzAppSecret(), userSystemConstant.getXzDomain());
JSONObject jsonObject = v2Client.querySingleTrade(PiggySingleWithdrawalQueryV2Vo.builder()
.appKey(userSystemConstant.getXzAppKey())
.outerTradeNo(outerTradeNo)
.build());
WithdrawalResp withdrawalResp = com.alibaba.fastjson2.JSONObject.parseObject(jsonObject.toString(), WithdrawalResp.class);
return withdrawalResp;
}
@Override
public ResultBody querySingleReceipt(String frontLogNo) {
PiggyBankReceiptClient piggyBankReceiptClient = PiggyBankReceiptClient.getInstanse(userSystemConstant.getXzAppSecret(), userSystemConstant.getXzDomain());
JSONObject jsonObject = piggyBankReceiptClient.getSingleReceipt(PiggyBankReceiptVo.builder()
.appKey(userSystemConstant.getXzAppKey())
.frontLogNo(frontLogNo)
.build());
System.out.println(jsonObject.toString());
return ResultBody.success();
if (jsonObject.get("isSuccess").toString().equals("T")) {
return ResultBody.success(jsonObject.get("data"));
} else {
return ResultBody.error(jsonObject.get("errorMessage").toString());
}
}
}
package com.mmc.iuav.user.xzsz;
import java.io.Serializable;
/**
* @author: zj
* @Date: 2023/8/22 14:26
*/
public class SingleSubmitResp {
private String isSuccess;
private String charset;
private String errorCode;
private String errorMessage;
private Data data;
public String getIsSuccess() {
return isSuccess;
}
public void setIsSuccess(String isSuccess) {
this.isSuccess = isSuccess;
}
public String getCharset() {
return charset;
}
public void setCharset(String charset) {
this.charset = charset;
}
public String getErrorCode() {
return errorCode;
}
public void setErrorCode(String errorCode) {
this.errorCode = errorCode;
}
public String getErrorMessage() {
return errorMessage;
}
public void setErrorMessage(String errorMessage) {
this.errorMessage = errorMessage;
}
public Data getData() {
return data;
}
public void setData(Data data) {
this.data = data;
}
public static class Data implements Serializable {
private static final long serialVersionUID = 887647888669372371L;
private String outerTradeNo;
public Data() {
}
public String getOuterTradeNo() {
return outerTradeNo;
}
public void setOuterTradeNo(String outerTradeNo) {
this.outerTradeNo = outerTradeNo;
}
}
}
package com.mmc.iuav.user.xzsz;
import java.math.BigDecimal;
/**
* @author: zj
* @Date: 2023/8/22 14:43
*/
public class WithdrawalResp {
private String isSuccess;
private String charset;
private Data data;
public String getIsSuccess() {
return isSuccess;
}
public void setIsSuccess(String isSuccess) {
this.isSuccess = isSuccess;
}
public String getCharset() {
return charset;
}
public void setCharset(String charset) {
this.charset = charset;
}
public Data getData() {
return data;
}
public void setData(Data data) {
this.data = data;
}
public static class Data {
private String outerTradeNo;
private String notifyType;
private String empName;
public Data() {
}
public String getOuterTradeNo() {
return outerTradeNo;
}
public void setOuterTradeNo(String outerTradeNo) {
this.outerTradeNo = outerTradeNo;
}
public String getNotifyType() {
return notifyType;
}
public void setNotifyType(String notifyType) {
this.notifyType = notifyType;
}
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName = empName;
}
public String getEmpPhone() {
return empPhone;
}
public void setEmpPhone(String empPhone) {
this.empPhone = empPhone;
}
public String getLicenseType() {
return licenseType;
}
public void setLicenseType(String licenseType) {
this.licenseType = licenseType;
}
public String getLicenseId() {
return licenseId;
}
public void setLicenseId(String licenseId) {
this.licenseId = licenseId;
}
public String getSettleType() {
return settleType;
}
public void setSettleType(String settleType) {
this.settleType = settleType;
}
public String getPayAccount() {
return payAccount;
}
public void setPayAccount(String payAccount) {
this.payAccount = payAccount;
}
public String getPositionName() {
return positionName;
}
public void setPositionName(String positionName) {
this.positionName = positionName;
}
public BigDecimal getPayAmount() {
return payAmount;
}
public void setPayAmount(BigDecimal payAmount) {
this.payAmount = payAmount;
}
public String getTradeStatus() {
return tradeStatus;
}
public void setTradeStatus(String tradeStatus) {
this.tradeStatus = tradeStatus;
}
public String getTradeTime() {
return tradeTime;
}
public void setTradeTime(String tradeTime) {
this.tradeTime = tradeTime;
}
public String getFrontLogNo() {
return frontLogNo;
}
public void setFrontLogNo(String frontLogNo) {
this.frontLogNo = frontLogNo;
}
public String getTradeResult() {
return tradeResult;
}
public void setTradeResult(String tradeResult) {
this.tradeResult = tradeResult;
}
private String empPhone;
private String licenseType;
private String licenseId;
private String settleType;
private String payAccount;
private String positionName;
private BigDecimal payAmount;
private String tradeStatus;
private String tradeTime;
private String frontLogNo;
private String tradeResult;
}
}
......@@ -76,6 +76,8 @@ third-party:
domain: https://uat.xzsz.ltd/
position: 销售推广
taxFundId: xxxxxxxxxxxxxxxxxxxxxxx
authNotify: https://test.iuav.shop/xz/xzAuthNotify
withdrawNotify: http://test.iuav.shop/xz/xzWithdrawNotify
iuav:
pay:
......
......@@ -45,6 +45,9 @@ third-party:
domain: https://uat.xzsz.ltd/
position: 销售推广
taxFundId: xxxxxxxxxxxxxxxxxxxxxxx
authNotify: https://test.iuav.shop/xz/xzAuthNotify
withdrawNotify: http://test.iuav.shop/xz/xzWithdrawNotify
iuav:
pay:
......
......@@ -5,9 +5,10 @@
<mapper namespace="com.mmc.iuav.user.dao.xzsz.XzDao">
<insert id="addAuth" parameterType="com.mmc.iuav.user.entity.XzAuthDO" useGeneratedKeys="true" keyProperty="id">
insert into xz_auth(user_account_id, `name`, id_card_no, mobile, bank_account, subsidiary_name, document_id, custom_params, contract_url, create_time)
insert into xz_auth(user_account_id, `name`, id_card_no, mobile, bank_account, subsidiary_name, document_id, custom_params, contract_url, xz_auth_status, create_time)
values (#{userAccountId}, #{name}, #{idCardNo}, #{mobile}, #{bankAccount}, #{subsidiary_name}, #{document_id}, #{customParams}, #{contract_url}, NOW())
</insert>
<update id="updateAuthStatus">
update user_account set xz_auth_status = 1 where id = #{userAccountId}
</update>
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论