Browse Source

feature1.0.0-img:添加转入钱包方法,提现方法

master
chengkun 4 years ago
parent
commit
2c0c180a25
  1. 54
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/config/AlipayConfig.java
  2. 5
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/constants/WithdrawConstant.java
  3. 92
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/CreatorMiniController.java
  4. 2
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/domain/WithdrawLog.java
  5. 8
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/mapper/CreatorAccountMapper.java
  6. 6
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/mapper/CreatorMapper.java
  7. 6
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/mapper/CreatorProfitMapper.java
  8. 8
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/CreatorAccountService.java
  9. 6
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/CreatorProfitService.java
  10. 15
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/CreatorService.java
  11. 6
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/ProfitVerifyOrderService.java
  12. 15
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/CreatorAccountServiceImpl.java
  13. 8
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/CreatorProfitServiceImpl.java
  14. 14
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/CreatorServiceImpl.java
  15. 35
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/ProfitVerifyOrderServiceImpl.java
  16. 119
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/WithdrawLogServiceImpl.java
  17. 24
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/vo/ConfirmProfitVo.java
  18. 7
      bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/CreatorAccountMapper.xml
  19. 4
      bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/CreatorMapper.xml
  20. 8
      bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/CreatorProfitMapper.xml

54
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/config/AlipayConfig.java

@ -0,0 +1,54 @@
package com.bnyer.img.config;
//import com.bnyer.img.handler.TokenCheckHandler;
import lombok.Getter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* @author chengkun
* @date 2022/4/21 17:43
*/
@Configuration
@ConfigurationProperties(prefix = "alipay")
@Getter
@RefreshScope
public class AlipayConfig{
@Value("${alipay.gatewayUrl}")
private String gatewayUrl;
@Value("${alipay.appId}")
public String appId;
@Value("${alipay.privateKey}")
public String privateKey;
@Value("${alipay.certPath}")
public String certPath;
@Value("${alipay.alipayPublicCertPath}")
public String alipayPublicCertPath;
@Value("${alipay.rootPath}")
public String rootPath;
// @Resource
// private TokenCheckHandler tokenCheckHandler;
/** 不需要拦截地址 */
// public static final String[] excludeUrls = { "/mini/tiktok/loginTiktok", "/mini/tiktok/insertFeedback"};
//
// @Override
// public void addInterceptors(InterceptorRegistry registry) {
// // 注册Token拦截器
// registry.addInterceptor(tokenCheckHandler)
// .addPathPatterns("/**")
// .excludePathPatterns(excludeUrls)
// .order(-10);
//
// }
}

5
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/constants/WithdrawConstant.java

@ -31,4 +31,9 @@ public class WithdrawConstant {
*/
public static final String ALIPAY = "2";
/**
* 调用支付宝转账打款成功响应码
*/
public static final String SUCCESS = "10000";
}

92
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/CreatorMiniController.java

@ -266,96 +266,4 @@ public class CreatorMiniController extends BaseController {
log.info("支付宝回调了!");
return AjaxResult.success();
}
//@TokenCheck
@ApiOperation(value="提现")
@GetMapping(value = "/withdraw")
public AjaxResult withdraw() throws AlipayApiException {
String sandboxGatewayUrl = "https://openapi.alipaydev.com/gateway.do";
String gatewayUrl = "https://openapi.alipay.com/gateway.do";
String sandboxPrivateKey = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC1rI3A7cuj7vjBZpU+AYqTsQJxXGMvUlPdVZmuJJR/o3NY+jxIiSDOA/HjChJ2v8DlZXDmpzgJ+DQt1+GZkNr/yGt335jd9JBZuNEUO19iFjnlWnwPu6enp829IqBJv65km0ATA73jVnj2gW9E9bRkpwbrXdf9FSYvb14+6P1sKGavCVHLjafWIbBavaOXJlaEjR+U62nghHoiIP1RL49xsvBV8VtRXQfnCUPaOGU4PZbvYne3FzTbjIDwqbYWsfTfO4dIo1z2jkGNzPi8ZGrVe8PJsXBRl7A9qK5EI2wBwDpgWmrkUs2avfMkSYWfrrTJ4WnurCiNomxRszylGcHNAgMBAAECggEAdlABoPs7+27NoWXlG5R1YumL5bd9AHxlEWeFxdscumL/45pTWAm1y3TWOj18+Mi4HqyJcizEWfnCQXit+wxTEvC6zD5Zl3KF72hlAQAJhh9jZPIgiT50WML3QY0jReQG9o4ElF2DdGIENMTmacp5yHLeFrnux2rWi13DysSBBcXQ8rYS88jyT6L0xqWb8M7TD0MzZYyRBOFm4Nv91FBoj2vWtxNz5T9hJfX8AGO5HChR4NgvclM1Jbq+k9/6oeEEBU5m3AuIo2DEy1mQbVvA80hJMsi38Na+5CyfdXjm9wJ7v95/opcjgWAPrHrDdBngVeMuvmm2qj31b7ZHp3z+AQKBgQDZV2JJMA4dy6zyLbc2ImNLfU8iDyzuXAMKRgwrU0/wLnJRrvFJsIxzRnQxM9yF+Yo9bxqAv0nUisYIInhmGMVo8L8+nCyTHK1KYbOa2O+9grQiY/8p+lGlesrMKUnbUgbwS2Sj//hLmgor+f/pnp99xnmkkwV1CfAj69iaDL2LnQKBgQDV/RAJ8JmnjFHhGW7T0U7xtCR+jLO+EGpVaAlPznmTpr83IZbFnaDMEN9XhKCHk7iwDx6+bTSko/tfnyDEP5f2LjHuHH6hQyZBPIUSB9nvgB5Dtky43yzNtO4UkpH+MFCeFun5v+RtmyUELMSksjxwKjRBV3lG5pDW1NIxjk2v8QKBgHCEFJXfEu/J6ZbWo+qakt0Z2kW/pXsgl1JSQSqMzu2Anh47ex6zD4L+DlkKiDezoCV9xzKv1QD7dtnvPnVcjZZuTBOVtl3SksPXIKwhcruhVrAXJJoOxQXuM97N4TZxmLX90fQ1J827yVhK7Hl9bQQoJAFXO5QDuRZfmprlzZrhAoGBAIGewuJifZDCLK7fiwR/mwRKDHkjnZUZuG93j3xqI7bOoLEyhXO64bX62m7XBa5aSttKrWLIH8VDF3d6moyFwPT8Un5bgFEKrdeCY1DitJ6gyrRVbu/lL+yDFlwb1JdWiN7aHmyMUkAaZDe9LnhdBsMirXiPFgVekImxbIlcG67hAoGBAJIhIcvXkYbXZSP6SLFoT0NsG2hPYNwSr3+4u4acT3mBD519EA9kBvmAom56l7t6xoIVjgREuz0Kaa+V24+Za5o14LJA0iBxgKBIqD5ABMY6XkgPMY5p1/eVUWoXPmx4KsS/ys0MX60Kf0xgLD0gW0j+x1vsA8w1GiJXTAT0JZWP";
String privateKey = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCGq3UKNbNuIazHbD9slLNJsStw2347rYwR1NmFLCi/d62yNLeTZvmrY4aW3GsDsQiK5vFdLRxaT8tIkGO11GilBRn00xkNKnwPkMA8GUdtr7GaudH+YBqk2snDeBhtdlYLq1V79USGZKdnpsPoUIXVIpyhnBlULzcJP7hf7NSauRVBnDf+MuEQOjhRAc6i8RN7nY2Oz5x6ZuIPhJ8qWjbZQoN6sJ00KU5oYZaN34/NGmPIfpR4QwbZbABm0Y0dCwkXzzNoV3cPYsFqKWNN8gxY7mI7YQqYsVb25fvALDjOl0XUGv1D7lMOC4mX3iz4q8b13ZNK+Tb3y4atwO6jK0EdAgMBAAECggEAUb4ZGM1n0F2YZqQKC3pnKT/lQme4w7if4OL19aPMSAv43sao90v2GFYdB81bF66JpOZxc0FCiH8OwUkDfQclTaU/ECBigF9dVoViahheBvIyN9y63lCvW4mCFqf7C9ZcfFDPXqKNqZXHF19eYtEdqzWLJX1+0l6mZXLME03J7u+tPX+OOnjf/K3wBp90RzoS02Ofp8fxiRyiDwFwlcxfRVbffLPVIW8JMqyOuI95U0l90F3N48+twJj8UeZlWHQeTGSDZ5jgfC6T5SXkDxOi6e7ZemZUG43rqsEHyb84fBfpr4ZFh9SkjXSnRih5w0VRws50dE2u1wAeCLG8K5KD8QKBgQDX/rpHjIJl0aD2LsI1kcUW82Yzm7qOJWApRCTe/+mZtrNGotzz/Mc2S0xV8s95ahgsH9AYqytu58UdM0CQhJ5+57fPDQcYWq9QvHB741ljAd1371qTLvRsMQg6E/nmObFvAON7ynNuh+TfkM9e7HQS6dpA0FkVqrREdD7hgUeUewKBgQCfnL3GKdMdH5FTTMBJgiLwHYBpgFQxDPzD5DEvz9lgCgosk76k4jQGi/3/raJWxkAED5K4O2J90IE/VnRXV4Uhi4h54D3ceO9dtXWBN1IxqEuO7pw9ldiRjFrlTo4aSgnq2wrjiVKn92Fm2YXIcAyhibUs7hamWt6LGAULbM5JRwKBgG11jXlM35gxz9xyfcEgCj1DQ/vLY5M9panD+tt33S4kxF17k3WiGGKPbjPwROxGs9FInfCibfRaSC4wFvwl+Rxe2Wt4MqxI6KeFl4tw/4+JFm79QW1tUjix8HVeQjpF6oFSdfX59t2AyJ/zhuOX+IrNL+nArCSqyYgXUPZ+yYOZAoGATbLAkxnDInc+iF1hcac/GMJTw4fr9CDNXxLTeuHkgKMChua5NIzFJLa7Q96jmzhQ62klVDfcX0DD2jBc3DPHpCfHnQSzOINKisSN2gQzJ+c0OPUg673pOhkoGl5eQJ/wKfrNVyx/JzL+oFGdlZAuJejiYGfacMrlcLKVqhUiansCgYEAtPCz8J3fYipscjdWKQIXsejr110KF0zsh8X7ZYKxhAgRZ5ck3wbMbffYIfa7wCm5nIJMY640P3Jh6Rb5W5/4/i04gHbE1Loi714aGCXoY6gm5oVoKIFP8h3g3MyQl7mZ2huAA/KnLsThlmfQ0l0n6Pd8xEcqJ+Ggi/GS2MQQrIw=";
String sandboxAppId = "2021000121609470";
String appId = "2021003135690045";
String sandboxCertPath = "D:/sandbox/appCertPublicKey_2021000121609470.crt";
String certPath = "D:/onlineKey/appCertPublicKey_2021003135690045.crt";
String sandboxAlipayPublicCertPath = "D:/sandbox/alipayCertPublicKey_RSA2.crt";
String alipayPublicCertPath = "D:/onlineKey/alipayCertPublicKey_RSA2.crt";
String sandboxRootPath = "D:/sandbox/alipayRootCert.crt";
String rootPath = "D:/onlineKey/alipayRootCert.crt";
String sandboxIdentify = "yglaxq2770@sandbox.com";
String identify = "19983455096";
String sandboxName = "yglaxq2770";
String name = "权煜航";
//构造client
CertAlipayRequest certAlipayRequest = new CertAlipayRequest();
//设置网关地址
//certAlipayRequest.setServerUrl(sandboxGatewayUrl);
certAlipayRequest.setServerUrl(gatewayUrl);
//设置应用Id
//certAlipayRequest.setAppId(sandboxAppId);
certAlipayRequest.setAppId(appId);
//设置应用私钥
//certAlipayRequest.setPrivateKey(sandboxPrivateKey);
certAlipayRequest.setPrivateKey(privateKey);
//设置请求格式,固定值json
certAlipayRequest.setFormat("json");
//设置字符集
certAlipayRequest.setCharset("UTF8");
//设置签名类型
certAlipayRequest.setSignType("RSA2");
//设置应用公钥证书路径
//certAlipayRequest.setCertPath(sandboxCertPath);
certAlipayRequest.setCertPath(certPath);
//设置支付宝公钥证书路径
//certAlipayRequest.setAlipayPublicCertPath(sandboxAlipayPublicCertPath);
certAlipayRequest.setAlipayPublicCertPath(alipayPublicCertPath);
//设置支付宝根证书路径
//certAlipayRequest.setRootCertPath(sandboxRootPath);
certAlipayRequest.setRootCertPath(rootPath);
//构造client
AlipayClient alipayClient = new DefaultAlipayClient(certAlipayRequest);
AlipayFundTransUniTransferRequest request = new AlipayFundTransUniTransferRequest();
AlipayFundTransUniTransferModel model = new AlipayFundTransUniTransferModel();
model.setOutBizNo(IdUtil.getSnowflakeNextIdStr());
model.setTransAmount("0.9");
model.setProductCode("TRANS_ACCOUNT_NO_PWD");
/** 场景码,单笔无密转账到支付宝账户固定为:DIRECT_TRANSFER **/
model.setBizScene("DIRECT_TRANSFER");
/** 转账业务的标题,用于在支付宝用户的账单里显示 **/
model.setOrderTitle("bnyer提现打款");
Participant participant = new Participant();
/** 参与方的唯一标识,收款支付宝账号或者支付宝吧账号唯一会员ID **/
//participant.setIdentity(sandboxIdentify);
participant.setIdentity(identify);
/** 参与方的标识类型:ALIPAY_USER_ID 支付宝的会员ID ALIPAY_LOGON_ID手机号登录 **/
participant.setIdentityType("ALIPAY_LOGON_ID");
/** 参与方真实姓名,如果非空,将校验收款支付宝账号姓名一致性。当identity_type=ALIPAY_LOGON_ID时,本字段必填 **/
//participant.setName(sandboxName);
participant.setName(name);
model.setPayeeInfo(participant);
/** 业务备注 **/
model.setRemark("提现打款");
request.setBizModel(model);
log.info("支付宝提现入参为:{}",JSON.toJSONString(request));
AlipayFundTransUniTransferResponse response = null;
try {
response = alipayClient.certificateExecute(request);
} catch (AlipayApiException e) {
e.printStackTrace();
}
/** 获取接口调用结果,如果调用失败,可根据返回错误信息到该文档寻找排查方案:https://opensupport.alipay.com/support/helpcenter/107 **/
log.info("支付宝提现响应结果为:{}",response.getBody());
return AjaxResult.success();
}
}

2
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/domain/WithdrawLog.java

@ -82,7 +82,7 @@ public class WithdrawLog extends BaseDomain {
* 状态(0->待审核;1->提现中;2->提现成功;3->提现失败)
*/
@TableField(value = "status")
@ApiModelProperty(value="状态(0->待审核;1->提现;2->提现成功;3->提现失败;4->审核拒绝)")
@ApiModelProperty(value="状态(0->待审核;1->提现异常;2->提现成功;3->提现失败;4->审核拒绝)")
private String status;
private static final long serialVersionUID = 1L;

8
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/mapper/CreatorAccountMapper.java

@ -18,4 +18,12 @@ public interface CreatorAccountMapper extends BaseMapper<CreatorAccount> {
* @return -
*/
List<CreatorAccountVo> queryFrontList(@Param("creatorId") Long creatorId);
/**
* 根据类型查询艺术家账户列表
* @param creatorId 艺术家id
* @param type 类型
* @return -
*/
CreatorAccountVo queryListByType(@Param("creatorId")Long creatorId,@Param("type") String type);
}

6
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/mapper/CreatorMapper.java

@ -38,9 +38,9 @@ public interface CreatorMapper extends BaseMapper<Creator> {
List<Creator> queryPage(@Param("params") CreatorPageDto params);
/**
* 艺术家并返回主键
* @param creator 艺术家实体
* 批量更新艺术家
* @param list 艺术家列表
* @return -
*/
// int insertCreator(@Param("creator") Creator creator);
int updateBatch(@Param("list") List<Creator> list);
}

6
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/mapper/CreatorProfitMapper.java

@ -136,4 +136,10 @@ public interface CreatorProfitMapper extends BaseMapper<CreatorProfit> {
* @return -
*/
List<CreatorProfitVo> queryPage(@Param("params") CreatorProfitPageDto params);
/**
* 查询除会员外所有已入账且已确认收益
* @return -
*/
List<ConfirmProfitVo> queryConfirmList();
}

8
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/CreatorAccountService.java

@ -52,6 +52,14 @@ public interface CreatorAccountService {
*/
List<CreatorAccountVo> queryList(Long creatorId);
/**
* 根据指定类型查询艺术家账户列表
* @param creatorId 艺术家id
* @param type 类型
* @return -
*/
CreatorAccountVo queryListByType(Long creatorId,String type);
/**
* 变更显示状态
* @param id 主键id

6
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/CreatorProfitService.java

@ -162,4 +162,10 @@ public interface CreatorProfitService {
* @return -
*/
List<CreatorProfit> queryPreProfit(String platform,String appType,String type,String date);
/**
* 查询除会员外所有已入账且已确认收益
* @return -
*/
List<ConfirmProfitVo> queryConfirmList();
}

15
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/CreatorService.java

@ -91,9 +91,22 @@ public interface CreatorService {
int reVerify(Long id);
/**
* 小程序用户登录
* 小程序艺术家登录
* @param param 前端传来的参数
* @return -
*/
Map<String,Object> login(WxLoginDto param);
/**
* 查询所有审核通过的艺术家
* @return -
*/
List<Creator> queryPassList();
/**
* 批量更新艺术家
* @param list 艺术家列表
* @return -
*/
int batchUpdate(List<Creator> list);
}

6
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/ProfitVerifyOrderService.java

@ -51,4 +51,10 @@ public interface ProfitVerifyOrderService {
* @return -
*/
boolean verify(ProfitVerifyOrderDto params);
/**
* 收益转入钱包
* @return -
*/
int transInfoWallet();
}

15
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/CreatorAccountServiceImpl.java

@ -122,6 +122,21 @@ public class CreatorAccountServiceImpl implements CreatorAccountService {
return creatorAccountVos;
}
@Override
public CreatorAccountVo queryListByType(Long creatorId, String type) {
CreatorAccountVo creatorAccount = creatorAccountMapper.queryListByType(creatorId, type);
if(creatorAccount != null){
if(StringUtils.isNotBlank(creatorAccount.getBankNo())){
creatorAccount.setBankNo(Sm4Util.sm4Decrypt(creatorAccount.getBankNo()));
}
if(StringUtils.isNotBlank(creatorAccount.getAliPayNo())){
creatorAccount.setAliPayNo(Sm4Util.sm4Decrypt(creatorAccount.getAliPayNo()));
}
return creatorAccount;
}
return null;
}
@Override
@Transactional(rollbackFor = Exception.class)
public int changeStatus(Long id, String status) {

8
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/CreatorProfitServiceImpl.java

@ -3,8 +3,6 @@ package com.bnyer.img.service.impl;
import cn.hutool.core.util.IdUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.bnyer.common.core.utils.StringUtils;
import com.bnyer.common.core.utils.uuid.IdUtils;
import com.bnyer.common.redis.service.RedisService;
import com.bnyer.img.domain.CreatorProfit;
import com.bnyer.img.domain.InviteLog;
@ -14,7 +12,6 @@ import com.bnyer.img.dto.ProfitInOrEndDto;
import com.bnyer.img.mapper.CreatorProfitMapper;
import com.bnyer.img.mapper.InviteLogMapper;
import com.bnyer.img.service.CreatorProfitService;
import com.bnyer.img.service.InviteLogService;
import com.bnyer.img.service.TiktokImgService;
import com.bnyer.img.vo.*;
import lombok.extern.slf4j.Slf4j;
@ -284,4 +281,9 @@ public class CreatorProfitServiceImpl implements CreatorProfitService {
public List<CreatorProfit> queryPreProfit(String platform, String appType, String type, String date) {
return creatorProfitMapper.queryPreProfit(platform, appType, type, date);
}
@Override
public List<ConfirmProfitVo> queryConfirmList() {
return creatorProfitMapper.queryConfirmList();
}
}

14
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/CreatorServiceImpl.java

@ -322,4 +322,18 @@ public class CreatorServiceImpl implements CreatorService {
throw new ServiceException(e.getMessage(), TiktokConstant.CALL_WECHAT_FAIL);
}
}
@Override
public List<Creator> queryPassList() {
LambdaQueryWrapper<Creator> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(Creator::getStatus, "1");
wrapper.eq(Creator::getIsShow, "1");
return creatorMapper.selectList(wrapper);
}
@Override
@Transactional(rollbackFor = Exception.class)
public int batchUpdate(List<Creator> list) {
return creatorMapper.updateBatch(list);
}
}

35
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/ProfitVerifyOrderServiceImpl.java

@ -5,15 +5,19 @@ import com.bnyer.common.core.utils.StringUtils;
import com.bnyer.common.redis.service.RedisService;
import com.bnyer.img.constants.ProfitOrderConstant;
import com.bnyer.img.constants.RedisKeyConstant;
import com.bnyer.img.domain.Creator;
import com.bnyer.img.domain.CreatorProfit;
import com.bnyer.img.domain.ProfitVerifyOrder;
import com.bnyer.img.dto.ProfitVerifyOrderDto;
import com.bnyer.img.dto.ProfitVerifyOrderInsertDto;
import com.bnyer.img.dto.ProfitVerifyOrderPageDto;
import com.bnyer.img.dto.ProfitVerifyOrderUpdateDto;
import com.bnyer.img.mapper.CreatorMapper;
import com.bnyer.img.mapper.ProfitVerifyOrderMapper;
import com.bnyer.img.service.CreatorProfitService;
import com.bnyer.img.service.CreatorService;
import com.bnyer.img.service.ProfitVerifyOrderService;
import com.bnyer.img.vo.ConfirmProfitVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -21,6 +25,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@ -37,6 +42,12 @@ public class ProfitVerifyOrderServiceImpl implements ProfitVerifyOrderService {
@Autowired
private CreatorProfitService creatorProfitService;
@Autowired
private CreatorService creatorService;
@Autowired
private CreatorMapper creatorMapper;
@Override
@Transactional(rollbackFor = Exception.class)
public int insert(ProfitVerifyOrderInsertDto params) {
@ -161,4 +172,28 @@ public class ProfitVerifyOrderServiceImpl implements ProfitVerifyOrderService {
return false;
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public int transInfoWallet() {
//查询所有审核通过的艺术家
List<Creator> creators = creatorService.queryPassList();
//查询审所有核状态为已到账,且已确认且类型不为会员的收益
List<ConfirmProfitVo> confirmProfits = creatorProfitService.queryConfirmList();
List<Creator> list = new ArrayList<>();
if(confirmProfits.size() > 0 && creators.size() > 0){
for (ConfirmProfitVo confirmProfit : confirmProfits) {
for (Creator creator : creators) {
if(confirmProfit.getCreatorId().equals(creator.getId())){
creator.getAmt().add(confirmProfit.getAmt());
list.add(creator);
}
}
}
//TODO 批量更新艺术家
return creatorService.batchUpdate(list);
}else{
return 0;
}
}
}

119
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/WithdrawLogServiceImpl.java

@ -1,12 +1,22 @@
package com.bnyer.img.service.impl;
import cn.hutool.core.util.IdUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.CertAlipayRequest;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayFundTransUniTransferModel;
import com.alipay.api.domain.Participant;
import com.alipay.api.request.AlipayFundTransUniTransferRequest;
import com.alipay.api.response.AlipayFundTransUniTransferResponse;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.bnyer.common.core.exception.ServiceException;
import com.bnyer.common.core.utils.DesensitizedUtils;
import com.bnyer.common.core.utils.Sm4Util;
import com.bnyer.common.core.utils.StringUtils;
import com.bnyer.img.config.AlipayConfig;
import com.bnyer.img.constants.TiktokConstant;
import com.bnyer.img.constants.WithdrawConstant;
import com.bnyer.img.domain.Creator;
@ -15,13 +25,16 @@ import com.bnyer.img.dto.VerifyDto;
import com.bnyer.img.dto.WithdrawPageDto;
import com.bnyer.img.mapper.CreatorMapper;
import com.bnyer.img.mapper.WithdrawLogMapper;
import com.bnyer.img.service.CreatorAccountService;
import com.bnyer.img.service.WithdrawLogService;
import com.bnyer.img.vo.CreatorAccountVo;
import com.bnyer.img.vo.WithdrawLogVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@ -40,6 +53,13 @@ public class WithdrawLogServiceImpl implements WithdrawLogService {
@Autowired
private CreatorMapper creatorMapper;
@Autowired
private CreatorAccountService creatorAccountService;
@Resource
private AlipayConfig alipayConfig;
@Override
@Transactional(rollbackFor = Exception.class)
@ -127,6 +147,69 @@ public class WithdrawLogServiceImpl implements WithdrawLogService {
return withdrawLogMapper.queryFrontDetails(orderId);
}
/**
* 支付宝打款到指定支付宝账号
* @param orderId 订单id
* @param amt 金额
* @param aliPayNo 艺术家支付宝账号
* @param name 姓名
* @return -
*/
private AlipayFundTransUniTransferResponse trans(String orderId,String aliPayNo,String name,BigDecimal amt) throws AlipayApiException {
//构造client
CertAlipayRequest certAlipayRequest = new CertAlipayRequest();
//设置网关地址
certAlipayRequest.setServerUrl(alipayConfig.getGatewayUrl());
//设置应用Id
certAlipayRequest.setAppId(alipayConfig.getAppId());
//设置应用私钥
certAlipayRequest.setPrivateKey(alipayConfig.getPrivateKey());
//设置请求格式,固定值json
certAlipayRequest.setFormat("json");
//设置字符集
certAlipayRequest.setCharset("UTF8");
//设置签名类型
certAlipayRequest.setSignType("RSA2");
//设置应用公钥证书路径
certAlipayRequest.setCertPath(alipayConfig.getCertPath());
//设置支付宝公钥证书路径
certAlipayRequest.setAlipayPublicCertPath(alipayConfig.getAlipayPublicCertPath());
//设置支付宝根证书路径
certAlipayRequest.setRootCertPath(alipayConfig.getRootPath());
//构造client
AlipayClient alipayClient = new DefaultAlipayClient(certAlipayRequest);
AlipayFundTransUniTransferRequest request = new AlipayFundTransUniTransferRequest();
AlipayFundTransUniTransferModel model = new AlipayFundTransUniTransferModel();
model.setOutBizNo(orderId);
model.setTransAmount(amt.toString());
model.setProductCode("TRANS_ACCOUNT_NO_PWD");
/** 场景码,单笔无密转账到支付宝账户固定为:DIRECT_TRANSFER **/
model.setBizScene("DIRECT_TRANSFER");
/** 转账业务的标题,用于在支付宝用户的账单里显示 **/
model.setOrderTitle("次元hub提现打款");
Participant participant = new Participant();
/** 参与方的唯一标识,收款支付宝账号或者支付宝吧账号唯一会员ID **/
participant.setIdentity(aliPayNo);
/** 参与方的标识类型:ALIPAY_USER_ID 支付宝的会员ID ALIPAY_LOGON_ID手机号登录 **/
participant.setIdentityType("ALIPAY_LOGON_ID");
/** 参与方真实姓名,如果非空,将校验收款支付宝账号姓名一致性。当identity_type=ALIPAY_LOGON_ID时,本字段必填 **/
participant.setName(name);
model.setPayeeInfo(participant);
/** 业务备注 **/
model.setRemark("提现打款");
request.setBizModel(model);
log.info("支付宝提现入参为:{}", JSON.toJSONString(request));
AlipayFundTransUniTransferResponse response = null;
try {
response = alipayClient.certificateExecute(request);
} catch (AlipayApiException e) {
throw e;
}
/** 获取接口调用结果,如果调用失败,可根据返回错误信息到该文档寻找排查方案:https://opensupport.alipay.com/support/helpcenter/107 **/
log.info("支付宝提现响应结果为:{}",response.getBody());
return response;
}
@Override
@Transactional(rollbackFor = Exception.class)
public int verify(VerifyDto params) {
@ -142,15 +225,43 @@ public class WithdrawLogServiceImpl implements WithdrawLogService {
return withdrawLogMapper.updateById(withdrawLog);
}
//审核通过
withdrawLog.setStatus("1");
withdrawLog.setStatus("2");
withdrawLog.setUpdateTime(new Date());
int update = withdrawLogMapper.updateById(withdrawLog);
//TODO
//此处审核通过,调用支付宝企业付款到用户处方法
if(withdrawLog.getChannel().equals(WithdrawConstant.ALIPAY)){
//根据用户id查询其支付宝账户及其真实名称
CreatorAccountVo creatorAccount = creatorAccountService.queryListByType(withdrawLog.getCreatorId(), "1");
if(creatorAccount != null){
try{
AlipayFundTransUniTransferResponse body = this.trans(withdrawLog.getOrderId(), creatorAccount.getAliPayNo(), creatorAccount.getName(), withdrawLog.getAmt());
if(!body.getCode().equals(WithdrawConstant.SUCCESS)){
//提现失败
withdrawLog.setStatus("3");
withdrawLog.setReason(body.getSubMsg());
log.error("艺术家【{}】订单【{}】提现失败!原因为:【{}】",withdrawLog.getCreatorId(),withdrawLog.getOrderId(),body.getSubMsg());
return withdrawLogMapper.updateById(withdrawLog);
}
//扣除账户余额
Creator creator = creatorMapper.selectById(withdrawLog.getCreatorId());
BigDecimal amt = creator.getAmt().subtract(withdrawLog.getAmt());
creator.setAmt(amt);
creatorMapper.updateById(creator);
//TODO 分布式锁
}catch (AlipayApiException e){
log.error("艺术家【{}】订单【{}】提现异常!原因为:【{}】",withdrawLog.getCreatorId(),withdrawLog.getOrderId(),e);
withdrawLog.setStatus("1");
withdrawLog.setReason(e.getMessage());
withdrawLogMapper.updateById(withdrawLog);
throw new ServiceException(e.getMessage());
}
return update;
}else{
throw new ServiceException("该艺术家未绑定支付宝账户!请手动设置!");
}
}else if(withdrawLog.getChannel().equals(WithdrawConstant.BANK)){
//TODO 转账到银行卡待开发
}
log.info("艺术家【{}】订单【{}】提现【{}】元成功!",withdrawLog.getCreatorId(),withdrawLog.getOrderId(),withdrawLog.getAmt());
return withdrawLogMapper.updateById(withdrawLog);
}
@Override

24
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/vo/ConfirmProfitVo.java

@ -0,0 +1,24 @@
package com.bnyer.img.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.math.BigDecimal;
@Getter
@Setter
@ApiModel("已确认收益响应体")
public class ConfirmProfitVo implements Serializable {
@ApiModelProperty(value="艺术家id")
private Long creatorId;
@ApiModelProperty(value="收益")
private BigDecimal amt;
private static final long serialVersionUID = 1L;
}

7
bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/CreatorAccountMapper.xml

@ -28,4 +28,11 @@
from img_creator_account
where is_show = '1' and creator_id = #{creatorId}
</select>
<select id="queryListByType" resultType="com.bnyer.img.vo.CreatorAccountVo">
select
id, creator_id,name,bank_no,alipay_no,type
from img_creator_account
where is_show = '1' and creator_id = #{creatorId} and type = #{type}
</select>
</mapper>

4
bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/CreatorMapper.xml

@ -86,4 +86,8 @@
</where>
order by create_time desc
</select>
<update id="updateBatch">
</update>
</mapper>

8
bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/CreatorProfitMapper.xml

@ -203,4 +203,12 @@
</where>
order by icp.create_time desc
</select>
<select id="queryConfirmList" resultType="com.bnyer.img.vo.ConfirmProfitVo">
select
creator_id as creatorId,sum(profit) as amt
from img_creator_profit
where status = '1' and confirm_status = '1' and type != '2'
group by creator_id
</select>
</mapper>

Loading…
Cancel
Save