Commit 6055e6c1 authored by libin's avatar libin

提现

parent 88c275cb
......@@ -11,7 +11,7 @@ import java.util.Set;
*/
public class BaseException extends RuntimeException {
private int status = 200;
private String subCode;
public int getStatus() {
return status;
}
......@@ -20,6 +20,14 @@ public class BaseException extends RuntimeException {
this.status = status;
}
public String getSubCode() {
return subCode;
}
public void setSubCode(String subCode) {
this.subCode = subCode;
}
public BaseException() {
}
......@@ -28,6 +36,11 @@ public class BaseException extends RuntimeException {
this.status = status;
}
public BaseException(String message,String subCode){
super(message);
this.subCode = subCode;
}
public BaseException(String message) {
super(message);
}
......
package com.github.wxiaoqi.security.admin.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
......@@ -12,6 +14,8 @@ import java.math.BigDecimal;
* @data 2019/7/17 20:40
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class WalletCathListDTO {
private Long id;
......@@ -41,9 +45,12 @@ public class WalletCathListDTO {
@ApiModelProperty(value = "审核日期")
private Long finishTime;
@ApiModelProperty("单号")
@ApiModelProperty("第三方单号")
private String cono;
@ApiModelProperty("提现单号")
private String orderNo;
@ApiModelProperty(value = "用户账号")
private String accountNumber;
}
......@@ -52,9 +52,12 @@ public class WalletDetailListDTO {
private String activityName;
@ApiModelProperty(value = "单号")
@ApiModelProperty(value = "第三方单号")
private Integer cono;
@ApiModelProperty(value = "提现单号")
private String withDrawOrderNo;
@ApiModelProperty(value = "操作时间", hidden = true )
private Long crtTime;
......
......@@ -47,11 +47,9 @@ public class MyWalletCath implements Serializable {
@ApiModelProperty(value = "用户账号")
private String accountNumber;
/**
* 第三方订单号:如微信,支付宝,银行卡等
*/
@Column(name = "cono")
@ApiModelProperty(value = "第三方订单号:如微信,支付宝,银行卡等")
@ApiModelProperty(value = "提现单号")
private String cono;
......@@ -122,5 +120,7 @@ public class MyWalletCath implements Serializable {
@ApiModelProperty(value = "操作者ID")
private String updUser;
@Column(name = "order_no")
@ApiModelProperty(value = "第三方订单号:如微信,支付宝,银行卡等")
private String orderNo;
}
......@@ -109,4 +109,8 @@ public class MyWalletDetail implements Serializable {
@ApiModelProperty(value = "操作时间", hidden = true )
private Long crtTime;
@ApiModelProperty(value = "提现")
@Column(name = "with_draw_order_no")
private String withDrawOrderNo;
}
package com.github.wxiaoqi.security.admin.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/10/10 17:52
*/
@Data
@Builder(toBuilder = true)
@AllArgsConstructor
@NoArgsConstructor
public class PayAccountVo {
@ApiModelProperty(value = "微信用户名 | 支付宝帐号")
private String accountDesc;
@ApiModelProperty("微信用户名 | 支付宝账号")
private String account;
@ApiModelProperty(value = "帐户类型 0:微信 1:支付宝 2:银行卡")
private Integer accountType;
}
package com.github.wxiaoqi.security.admin.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
......@@ -12,6 +14,8 @@ import java.math.BigDecimal;
* @data 2019/7/17 20:22
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class WalletCathAdminVo {
private Long id;
......@@ -37,10 +41,13 @@ public class WalletCathAdminVo {
@ApiModelProperty(value = "审核日期")
private Long finishTime;
@ApiModelProperty("单号")
private String cono;
@ApiModelProperty("提现单号")
private String withDrawOrderNo;
@ApiModelProperty(value = "用户账号")
private String accountNumber;
@ApiModelProperty(value = "用户账号描述")
private String accountNumberDesc;
}
......@@ -3,6 +3,8 @@ package com.github.wxiaoqi.security.admin.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* @author libin
* @version 1.0
......@@ -30,9 +32,24 @@ public class WalletCathDetailVo {
@ApiModelProperty(value = "审核日期")
private Long finishTime;
@ApiModelProperty(value = "帐号")
@ApiModelProperty(value = "帐号:支付宝帐号|微信名")
private String accountNumber;
@ApiModelProperty("审核失败原因")
private String reason;
@ApiModelProperty(value = "提现类别,第三方提现类别(0-微信,1-支付宝,2-银行卡)")
private Integer cathType;
@ApiModelProperty(value = "提现单号")
private String orderNo;
@ApiModelProperty(value = "手续费")
private BigDecimal commission;
@ApiModelProperty(value = "提现金额")
private BigDecimal amount;
@ApiModelProperty(value = "到账金额")
private BigDecimal realAmount;
}
......@@ -46,6 +46,9 @@ public class WalletDetailAdminVo {
@ApiModelProperty(value = "单号")
private Integer cono;
@ApiModelProperty(value = "提现单号")
private String withDrawOrderNo;
@ApiModelProperty(value = "操作时间", hidden = true )
private Long crtTime;
......
......@@ -184,7 +184,9 @@ public class AppUserSellingWaterBiz extends BaseBiz<AppUserSellingWaterMapper, A
BigDecimal amount = new BigDecimal("0.00");
Integer userId = 0;
Integer orderType = 0;
String orderNo = "";
if (list.size() > 0) {
orderNo = list.get(0).getOrderNo();
for (AppUserSellingWater sellingWater : list) {
Integer id = sellingWater.getId();
orderType = sellingWater.getOrderType();
......@@ -204,6 +206,7 @@ public class AppUserSellingWaterBiz extends BaseBiz<AppUserSellingWaterMapper, A
detail.setUserId(userId);
detail.setAmount(amount);
detail.setCono(orderId);
detail.setWithDrawOrderNo(orderNo);
detail.setSource(1);
myWaterBiz.updMyWater(detail);
if (orderType == 1 || orderType == 2) {
......@@ -229,7 +232,9 @@ public class AppUserSellingWaterBiz extends BaseBiz<AppUserSellingWaterMapper, A
BigDecimal unbooked = new BigDecimal("0.00");
Integer userId = 0;
Integer orderType = 0;
String orderNo = "";
if (list.size() > 0) {
orderNo = list.get(0).getOrderNo();
for (AppUserSellingWater sellingWater : list) {
Integer id = sellingWater.getId();
orderType = sellingWater.getOrderType();
......@@ -251,6 +256,7 @@ public class AppUserSellingWaterBiz extends BaseBiz<AppUserSellingWaterMapper, A
detail.setUserId(userId);
detail.setAmount(amount);
detail.setCono(orderId);
detail.setWithDrawOrderNo(orderNo);
detail.setSource(1);
myWaterBiz.updMyWater(detail);
}
......@@ -370,7 +376,7 @@ public class AppUserSellingWaterBiz extends BaseBiz<AppUserSellingWaterMapper, A
sellingWalletVo.setUsername(username);
if (userIdAndAppUserDetailMap != null) {
AppUserDetail appUserDetail = userIdAndAppUserDetailMap.get(sellingWalletVo.getSourceId());
sellingWalletVo.setNickName(appUserDetail == null ? "" : appUserDetail.getNickname());
sellingWalletVo.setNickName(appUserDetail == null ? "" : appUserDetail.getRealname());
sellingWalletVo.setHeadUrl(appUserDetail == null ? "" : appUserDetail.getHeadimgurl());
}
//取消单
......
......@@ -95,16 +95,24 @@ public class MyWalletCathBiz extends BaseBiz<MyWalletCathMapper, MyWalletCath> {
() -> mapper.selectByUserNameOrPhoneOrWithDrawSate(walletCathFindDTO.getUsername(), walletCathFindDTO.getPhone(), walletCathFindDTO.getState()));
List<WalletCathListDTO> walletCathListDTOList = walletCathListDTOPage.getData();
if (CollectionUtils.isEmpty(walletCathListDTOList)){
if (CollectionUtils.isEmpty(walletCathListDTOList)) {
return walletCathAdminVoPage;
}
List<WalletCathAdminVo> walletCathAdminVos = new ArrayList<>();
WalletCathAdminVo walletCathAdminVo ;
WalletCathAdminVo walletCathAdminVo;
for (WalletCathListDTO walletCathListDTO : walletCathListDTOList) {
walletCathAdminVo = new WalletCathAdminVo();
BeanUtils.copyProperties(walletCathListDTO,walletCathAdminVo);
walletCathAdminVo.setUsername(StringUtils.isEmpty(walletCathListDTO.getRealname())?walletCathListDTO.getNickname():walletCathListDTO.getRealname());
BeanUtils.copyProperties(walletCathListDTO, walletCathAdminVo);
walletCathAdminVo.setUsername(StringUtils.isEmpty(walletCathListDTO.getRealname()) ? walletCathListDTO.getNickname() : walletCathListDTO.getRealname());
walletCathAdminVo.setPhone(walletCathListDTO.getUsername());
//微信
if (walletCathListDTO.getCathType()==0){
walletCathAdminVo.setAccountNumberDesc(String.format("%s%s%s","提现到微信(",walletCathListDTO.getAccountNumber(),")"));
}
//支付宝
if (walletCathListDTO.getCathType()==1){
walletCathAdminVo.setAccountNumberDesc(String.format("%s%s%s","提现到支付宝(",walletCathListDTO.getAccountNumber(),")"));
}
walletCathAdminVos.add(walletCathAdminVo);
}
walletCathAdminVos.sort(Comparator.comparing(WalletCathAdminVo::getCrtTime).reversed());
......@@ -123,14 +131,14 @@ public class MyWalletCathBiz extends BaseBiz<MyWalletCathMapper, MyWalletCath> {
return userIdAndPersonalConsumptionMap;
}
public WalletCathSumDto sumCathAmount(Integer userId,Integer type){
return mapper.sumCathAmount(userId,type);
public WalletCathSumDto sumCathAmount(Integer userId, Integer type) {
return mapper.sumCathAmount(userId, type);
}
public void deleteByUserIds(Collection<Integer> userIds) {
Example example = new Example(MyWalletCath.class);
Example.Criteria criteria = example.createCriteria();
criteria.andIn("userId",userIds);
criteria.andIn("userId", userIds);
mapper.deleteByExample(example);
}
}
......@@ -4,6 +4,7 @@ import com.github.wxiaoqi.security.admin.biz.AppUserAlipayBiz;
import com.github.wxiaoqi.security.admin.biz.MyWalletBiz;
import com.github.wxiaoqi.security.admin.vo.AppletWalletVo;
import com.github.wxiaoqi.security.admin.vo.ApplyCathVo;
import com.github.wxiaoqi.security.admin.vo.PayAccountVo;
import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig;
import com.github.wxiaoqi.security.auth.client.jwt.UserAuthUtil;
import com.github.wxiaoqi.security.auth.common.util.jwt.IJWTInfo;
......@@ -14,6 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.util.List;
/**
* @author libin
......@@ -125,4 +127,15 @@ public class MyWalletController {
}
}
@ApiOperation("获取支付账号(微信|支付宝|银行卡)")
@GetMapping("/pay_account_list")
public ObjectRestResponse listPayAccount(HttpServletRequest request){
try {
Integer userId = Integer.parseInt(userAuthUtil.getInfoFromToken(userAuthConfig.getToken(request)).getId());
List<PayAccountVo> payAccountVos = myWalletBiz.listPayAccountByUserId(userId);
return ObjectRestResponse.succ(payAccountVos);
}catch (Exception ex){
throw new BaseException(ex);
}
}
}
......@@ -37,11 +37,10 @@ public class WalletCathAdminController {
@ApiOperation("提现审核")
public ObjectRestResponse verifyCath(
@RequestParam(value = "cathId",defaultValue = "0") Integer cathId,
@RequestParam(value = "cono",defaultValue = "") String cono,
@RequestParam(value = "reason",defaultValue = "") String reason,
@RequestParam(value = "status",defaultValue = "1") Integer status){
try {
return myWalletBiz.verifyCath(cathId,cono,reason,status);
return myWalletBiz.verifyCath(cathId,reason,status);
}catch (Exception e) {
throw new BaseException(e);
}
......
......@@ -15,6 +15,7 @@
wc.crt_time AS `crtTime`,
wc.finish_time AS `finishTime`,
wc.cono,
wc.order_no AS `orderNo`,
wc.account_number AS `accountNumber`
FROM
(SELECT * FROM `my_wallet_cath` <if test="state != null">
......
......@@ -8,6 +8,7 @@
wd.source,
wd.amount,
wd.cono,
wd.with_draw_order_no AS `withDrawOrderNo`,
wd.itype,
wd.activity_id AS `activityId`,
wd.activity_name AS `activityName`,
......
......@@ -5,10 +5,7 @@ import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.universal.dto.SmsTemplateDTO;
import com.xxfc.platform.universal.entity.Dictionary;
import com.xxfc.platform.universal.entity.IdInformation;
import com.xxfc.platform.universal.vo.OrderPayVo;
import com.xxfc.platform.universal.vo.OrderRefundVo;
import com.xxfc.platform.universal.vo.TrafficViolations;
import com.xxfc.platform.universal.vo.ViolationVO;
import com.xxfc.platform.universal.vo.*;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
......@@ -83,4 +80,7 @@ public interface ThirdFeign {
public ObjectRestResponse<List<ViolationVO>> getRentViolation(@RequestParam(value = "rentViolationDTO") Map<String, Object> rentViolationDTO);
/*************************************支付***************************************/
@PostMapping("/pay/app/unauth/transfer_account")
String transferAccount(@RequestBody FundPayVo fundPayVo) throws Exception;
}
package com.xxfc.platform.universal.vo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder(toBuilder = true)
@NoArgsConstructor
@AllArgsConstructor
public class FundPayVo {
//转账单号
......@@ -19,4 +25,12 @@ public class FundPayVo {
//转账备注
private String remark;
//转账类型
private Integer type;
private String creatIp;
private String checkName;
}
......@@ -55,7 +55,7 @@ public class WXSuppToUserPay {
private String key;
public static void main(String[] args) throws Exception, IOException {
Map<String, String> map = WXSuppToUserPay.WeiXinTiXian("oRhMfwKwjNq2Ce-TxlqfoAqsYfww", "NO_CHECK", 500+"", "活动提现", "192.168.8.109");
Map<String, String> map = WXSuppToUserPay.WeiXinTiXian("oRhMfwKwjNq2Ce-TxlqfoAqsYfww",OrderUtil.GetOrderNumber("TX"),"NO_CHECK", 500+"", "活动提现", "192.168.8.109");
if("SUCCESS".equals(map.get("return_code")))
{
if(!StringUtils.isBlank(map.get("payment_no")) && !StringUtils.isBlank(map.get("partner_trade_no")) )
......@@ -108,14 +108,14 @@ public class WXSuppToUserPay {
// System.out.println(map.get("payment_time"));
}
public static Map<String,String> WeiXinTiXian(String openid,String check_name,String amount,String desc,String spbill_create_ip) throws Exception
public static Map<String,String> WeiXinTiXian(String openid,String partnerTradeNo,String check_name,String amount,String desc,String spbill_create_ip) throws Exception
{
WXSuppToUserPay prePay = new WXSuppToUserPay();
prePay.setMch_appid(SystemConfig.WINXIN_AppID);
prePay.setMchid(SystemConfig.WINXIN_PARTNER);
prePay.setNonce_str( OrderUtil.CreateNoncestr());
prePay.setPartner_trade_no(OrderUtil.GetOrderNumber("TX"));
prePay.setPartner_trade_no(partnerTradeNo);
prePay.setOpenid(openid);
prePay.setCheck_name(check_name);
prePay.setAmount(amount);
......@@ -130,7 +130,7 @@ public class WXSuppToUserPay {
CloseableHttpClient httpclient = null;
try {
KeyStore keyStore = KeyStore.getInstance("PKCS12");
//FileInputStream instream = new FileInputStream(new File("E:/apiclient_cert.p12"));
// FileInputStream instream = new FileInputStream(new File("E:/cert/apiclient_cert.p12"));
String path = Thread.currentThread().getContextClassLoader().getResource("/").getPath();
FileInputStream instream = new FileInputStream(new File(path+"/apiclient_cert.p12"));
try {
......
package com.xxfc.platform.universal.weixin.constant;
import lombok.AllArgsConstructor;
/**
* @author libin
* @version 1.0
* @description 以下错误 如需继续打款,要使用原来的订单号
* @data 2019/10/12 9:40
*/
@AllArgsConstructor
public enum AliNeedPayErrorEnum {
SYSTEM_ERROR("系统繁忙","系统繁忙");
private String desc;
private String reason;
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public String getReason() {
return reason;
}
public void setReason(String reason) {
this.reason = reason;
}
}
package com.xxfc.platform.universal.weixin.constant;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/10/12 10:22
*/
public enum PaySubErrorCodeEnum {
/**
* 普通付款异常
*/
PAY_ERROR("EPAY_10000"),
/**
* 需要继续付款错误码
*/
PAY_NEED_ERROR("EPAY_10001");
private String subCode;
PaySubErrorCodeEnum(String subCode) {
this.subCode = subCode;
}
public String getSubCode() {
return subCode;
}
public void setSubCode(String subCode) {
this.subCode = subCode;
}
}
package com.xxfc.platform.universal.weixin.constant;
import lombok.AllArgsConstructor;
/**
* @author libin
* @version 1.0
* @description 以下错误 如需继续打款,要使用原来的商户订单号
* @data 2019/10/12 9:11
*/
@AllArgsConstructor
public enum WxNeedPayErrorEnum {
NOTENOUGH("余额不足","付款帐号余额不足或资金未到账"),
SYSTEMERROR("系统繁忙,请稍后再试","微信内部接口调用发生错误"),
NAME_MISMATCH("姓名校验出错","付款人身份校验不通过"),
SIGN_ERROR("签名错误","校验签名错误"),
FREQ_LIMIT("超过频率限制,请稍后再试","接口请求频率超时接口限制"),
MONEY_LIMIT("已经达到今日付款总额上限/已达到付款给此用户额度上限","请关注接口的付款限额条件"),
CA_ERROR("商户API证书校验出错","请求没带商户API证书或者带上了错误的商户API证书"),
V2_ACCOUNT_SIMPLE_BAN("无法给非实名用户付款","用户微信支付账户未知名,无法付款"),
PARAM_IS_NOT_UTF8("请求参数中包含非utf8编码字符","接口规范要求所有请求参数都必须为utf8编码"),
SENDNUM_LIMIT("该用户今日付款次数超过限制","该用户今日付款次数超过限制");
private String desc;
private String reason;
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public String getReason() {
return reason;
}
public void setReason(String reason) {
this.reason = reason;
}
}
package com.xxfc.platform.universal.weixin.constant;
/**
* @author libin
* @version 1.0
* @description 微信请求响应字段
* @data 2019/10/12 9:57
*/
public class WxResponseProperties {
public static final String ERROR_CODE = "err_code";
public static final String RETURN_CODE = "return_code";
public static final String RESULT_CODE = "result_code";
public static final String ERR_CODE_DES = "err_code_des";
public static final String PARTNER_TRADE_NO = "partner_trade_no";
}
......@@ -5,6 +5,7 @@ import com.github.wxiaoqi.security.auth.client.annotation.IgnoreUserToken;
import com.github.wxiaoqi.security.common.rest.BaseController;
import com.xxfc.platform.universal.biz.OrderPayBiz;
import com.xxfc.platform.universal.entity.OrderPay;
import com.xxfc.platform.universal.vo.FundPayVo;
import com.xxfc.platform.universal.vo.OrderPayVo;
import com.xxfc.platform.universal.weixin.util.XMLUtil;
import lombok.extern.slf4j.Slf4j;
......@@ -102,4 +103,11 @@ public class OrderPayController extends BaseController<OrderPayBiz,OrderPay> {
}
@PostMapping("/app/unauth/transfer_account")
@IgnoreUserToken
public String transferAccount(@RequestBody FundPayVo fundPayVo) throws Exception {
return baseBiz.fundTrans(fundPayVo);
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment