Commit 8575dbee by tang

分润,部分校验等

parent a16cc3e6
package com.thinkgem.jeesite.modules.pay.api; package com.thinkgem.jeesite.modules.pay.api;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.thinkgem.jeesite.common.baseBean.Request;
import com.thinkgem.jeesite.common.baseBean.Response; import com.thinkgem.jeesite.common.baseBean.Response;
import com.thinkgem.jeesite.common.constant.ComCode; import com.thinkgem.jeesite.common.constant.ComCode;
import com.thinkgem.jeesite.common.utils.IdGen;
import com.thinkgem.jeesite.modules.commonError.MyException; import com.thinkgem.jeesite.modules.commonError.MyException;
import com.thinkgem.jeesite.modules.pay.entity.BalanceEntity; import com.thinkgem.jeesite.modules.pay.entity.BalanceEntity;
import com.thinkgem.jeesite.modules.pay.entity.OrderEntity; import com.thinkgem.jeesite.modules.pay.entity.OrderEntity;
...@@ -30,6 +32,7 @@ import javax.servlet.http.HttpServletResponse; ...@@ -30,6 +32,7 @@ import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.text.DecimalFormat;
import java.util.*; import java.util.*;
/** /**
...@@ -664,4 +667,36 @@ public class PayApiController { ...@@ -664,4 +667,36 @@ public class PayApiController {
return resp; return resp;
} }
/**
* 测试分润
* @param request
* @return
*/
@PostMapping("/testBenefit")
public Response testBenefit(JuHeZhongPayRequest request){
Response resp = new Response();
try {
// UserEntity userEntity, OrderEntity orderEntity, String code, JuHeZhongPayRequest request
Request re = new Request();
re.setSubMerchantCode(request.getSubMerchantCode());
UserEntity userInfo = userApiService.getUserInfo(re);
// 2. 创建支付订单信息,并保存
String code = IdGen.randomBase62(64);
String payNo = ComCode.YYYYMMDDHHMM.format(new Date()) + IdGen.randomBase62(8); // 订单号
String payCode = IdGen.randomBase62(64);
DecimalFormat df = new DecimalFormat("######0.00");
String amount = df.format(Double.valueOf(request.getAmount()));
// 4. JuHeZhong支付
OrderEntity orderEntity = new OrderEntity(code, request.getSubMerchantCode(), payNo, payCode, "quick", request.getPayChannel(), "1", amount, request.getSubject(), "", "6", request.getCardCode());
payService.addUserBenefits(userInfo,orderEntity,orderEntity.getCode(),request);
resp.setMessage(ComCode.STATUS_CODE_2000_DESC);
resp.setStatus(ComCode.STATUS_CODE_2000);
}catch (Exception e){
resp.setMessage(ComCode.STATUS_CODE_9998_DESC);
resp.setStatus(ComCode.STATUS_CODE_9998);
resp.setError(e.getMessage());
}
return resp;
}
} }
...@@ -37,4 +37,8 @@ public interface PayApiDao { ...@@ -37,4 +37,8 @@ public interface PayApiDao {
//获取不同渠道最新使用的额度 //获取不同渠道最新使用的额度
Double getLastLimit(Map<String, String> map); Double getLastLimit(Map<String, String> map);
//获取用户的费率信息
UserRateEntity getUpUser(Map<String, String> map);
} }
...@@ -9,10 +9,7 @@ import com.thinkgem.jeesite.modules.pay.juhezhong.dto.CommonDto; ...@@ -9,10 +9,7 @@ import com.thinkgem.jeesite.modules.pay.juhezhong.dto.CommonDto;
import com.thinkgem.jeesite.modules.pay.juhezhong.dto.QrCodeDto; import com.thinkgem.jeesite.modules.pay.juhezhong.dto.QrCodeDto;
import com.thinkgem.jeesite.modules.pay.juhezhong.dto.MerchantDto; import com.thinkgem.jeesite.modules.pay.juhezhong.dto.MerchantDto;
import com.thinkgem.jeesite.modules.pay.juhezhong.dto.QuickDto; import com.thinkgem.jeesite.modules.pay.juhezhong.dto.QuickDto;
import com.thinkgem.jeesite.modules.pay.juhezhong.utils.Bean2Map; import com.thinkgem.jeesite.modules.pay.juhezhong.utils.*;
import com.thinkgem.jeesite.modules.pay.juhezhong.utils.JFenHttpUtil;
import com.thinkgem.jeesite.modules.pay.juhezhong.utils.MakeOrderNum;
import com.thinkgem.jeesite.modules.pay.juhezhong.utils.SignUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -27,7 +24,7 @@ import java.util.Map; ...@@ -27,7 +24,7 @@ import java.util.Map;
@Service @Service
@Transactional(readOnly = true) @Transactional(readOnly = true)
public class JuHeZhongPayJFenService { public class JuHeZhongPayJFenService {
private Logger logger = LoggerFactory.getLogger(Logger.class); private Logger logger = LoggerFactory.getLogger(JuHeZhongPayJFenService.class);
/** /**
* 查询订单状态 * 查询订单状态
...@@ -129,6 +126,19 @@ public class JuHeZhongPayJFenService { ...@@ -129,6 +126,19 @@ public class JuHeZhongPayJFenService {
return JSONObject.parseObject(respStr); return JSONObject.parseObject(respStr);
} }
public JSONObject quickPayHandle(JSONObject dto)throws Exception{
dto.put("merchantKey",ComCode.JFEN_MERCHANT_KEY);
dto.put("timestamp",System.currentTimeMillis());
logger.debug("HL2通道请求参数:{}",dto);
String signBefore = SignUtils.signBefore(dto);
String sign = SignUtils.sign(signBefore, ComCode.JFEN_MERCHANT_SECRET);
dto.put("sign", sign);
logger.info("signBefore:{},sign:{}", signBefore,sign);
String respStr = HttpUtil.post(ComCode.HOST + ComCode.JFEN_QUICK_PAY_URL, dto.toJSONString());
System.out.println(respStr);
return JSONObject.parseObject(respStr);
}
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
JuHeZhongPayJFenService juHeZhongPayJFenService = new JuHeZhongPayJFenService(); JuHeZhongPayJFenService juHeZhongPayJFenService = new JuHeZhongPayJFenService();
......
...@@ -25,6 +25,7 @@ import com.thinkgem.jeesite.modules.pay.juhezhong.service.JuHeZhongPayService; ...@@ -25,6 +25,7 @@ import com.thinkgem.jeesite.modules.pay.juhezhong.service.JuHeZhongPayService;
import com.thinkgem.jeesite.modules.pay.juhezhong.utils.MakeOrderNum; import com.thinkgem.jeesite.modules.pay.juhezhong.utils.MakeOrderNum;
import com.thinkgem.jeesite.modules.pay.pinganbank.PingAnBankService; import com.thinkgem.jeesite.modules.pay.pinganbank.PingAnBankService;
import com.thinkgem.jeesite.modules.pay.pinganbank.dto.PingAnBankDto; import com.thinkgem.jeesite.modules.pay.pinganbank.dto.PingAnBankDto;
import com.thinkgem.jeesite.modules.sys.dao.UserDao;
import com.thinkgem.jeesite.modules.sys.entity.Dict; import com.thinkgem.jeesite.modules.sys.entity.Dict;
import com.thinkgem.jeesite.modules.sys.utils.DictUtils; import com.thinkgem.jeesite.modules.sys.utils.DictUtils;
import com.thinkgem.jeesite.modules.user.bean.JuHeZhongPayRequest; import com.thinkgem.jeesite.modules.user.bean.JuHeZhongPayRequest;
...@@ -40,10 +41,7 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -40,10 +41,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.util.Date; import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/** /**
* 支付相关 * 支付相关
...@@ -53,7 +51,9 @@ import java.util.Map; ...@@ -53,7 +51,9 @@ import java.util.Map;
@Lazy(false) @Lazy(false)
@Transactional(readOnly = true) @Transactional(readOnly = true)
public class PayApiService { public class PayApiService {
/** log */ /**
* log
*/
private static Logger logger = LoggerFactory.getLogger(PayApiService.class); private static Logger logger = LoggerFactory.getLogger(PayApiService.class);
@Autowired @Autowired
private PayApiDao payDao; private PayApiDao payDao;
...@@ -86,6 +86,7 @@ public class PayApiService { ...@@ -86,6 +86,7 @@ public class PayApiService {
/** /**
* 快捷支付(分为不同的渠道) * 快捷支付(分为不同的渠道)
*
* @param request * @param request
* @return * @return
* @throws MyException * @throws MyException
...@@ -93,7 +94,7 @@ public class PayApiService { ...@@ -93,7 +94,7 @@ public class PayApiService {
*/ */
@Transactional(readOnly = false) @Transactional(readOnly = false)
public PayBackDto quickPay(JuHeZhongPayRequest request) throws MyException, Exception { public PayBackDto quickPay(JuHeZhongPayRequest request) throws MyException, Exception {
if(ComCode.PAYCHANNEL_HL2.equals(request.getPayChannel())){ if (ComCode.PAYCHANNEL_HL2.equals(request.getPayChannel())) {
PayBackDto payBackDto = this.jFenPayJuhezhong(request); PayBackDto payBackDto = this.jFenPayJuhezhong(request);
payBackDto.setIsUrl("0"); payBackDto.setIsUrl("0");
return payBackDto; return payBackDto;
...@@ -108,7 +109,7 @@ public class PayApiService { ...@@ -108,7 +109,7 @@ public class PayApiService {
userEntity.getUserDetail().setCard(cardEntity); userEntity.getUserDetail().setCard(cardEntity);
//获取当前渠道当日剩余额度 //获取当前渠道当日剩余额度
BigDecimal limitNumber = getLimitNumber(userEntity.getLevel(), userEntity.getCode(), request.getPayChannel()); BigDecimal limitNumber = getLimitNumber(userEntity.getLevel(), userEntity.getCode(), request.getPayChannel());
if(BigDecimal.valueOf(Double.valueOf(request.getAmount())).compareTo(limitNumber)>0){ if (BigDecimal.valueOf(Double.valueOf(request.getAmount())).compareTo(limitNumber) > 0) {
throw new MyException("超出额度"); throw new MyException("超出额度");
} }
// 2. 创建支付订单信息,并保存 // 2. 创建支付订单信息,并保存
...@@ -119,9 +120,9 @@ public class PayApiService { ...@@ -119,9 +120,9 @@ public class PayApiService {
String amount = df.format(Double.valueOf(request.getAmount())); String amount = df.format(Double.valueOf(request.getAmount()));
// 4. JuHeZhong支付 // 4. JuHeZhong支付
PayBackDto payBackDto = new PayBackDto(); PayBackDto payBackDto = new PayBackDto();
if(ComCode.PAYCHANNEL_HL1.equals(request.getPayChannel())){ if (ComCode.PAYCHANNEL_HL1.equals(request.getPayChannel())) {
OrderEntity orderEntity = new OrderEntity(code, request.getSubMerchantCode(), payNo, payCode,"quick", request.getPayChannel(), "1",amount , request.getSubject(), "", String.valueOf("D".equalsIgnoreCase(userEntity.getUserDetail().getCard().getCardType()) ? 5 : ("C".equalsIgnoreCase(userEntity.getUserDetail().getCard().getCardType()) ? 6 : 0)), request.getCardCode()); OrderEntity orderEntity = new OrderEntity(code, request.getSubMerchantCode(), payNo, payCode, "quick", request.getPayChannel(), "1", amount, request.getSubject(), "", String.valueOf("D".equalsIgnoreCase(userEntity.getUserDetail().getCard().getCardType()) ? 5 : ("C".equalsIgnoreCase(userEntity.getUserDetail().getCard().getCardType()) ? 6 : 0)), request.getCardCode());
addUserBenefits(userEntity,orderEntity,code,request); addUserBenefits(userEntity, orderEntity, code, request);
// payDao.saveOrderInfo(orderEntity); // payDao.saveOrderInfo(orderEntity);
// // 3. 创建分润信息,并保存 // // 3. 创建分润信息,并保存
// Map<String, String> userBenefits = getUserBenefit(userEntity, request); // Map<String, String> userBenefits = getUserBenefit(userEntity, request);
...@@ -135,10 +136,10 @@ public class PayApiService { ...@@ -135,10 +136,10 @@ public class PayApiService {
// 获取支付卡号 // 获取支付卡号
CardEntity cardEntityPay = userService.getCardInfo(request); CardEntity cardEntityPay = userService.getCardInfo(request);
payBackDto = this.payJuhezhong(request, userEntity, orderEntity,cardEntityPay); payBackDto = this.payJuhezhong(request, userEntity, orderEntity, cardEntityPay);
}else if(ComCode.PAYCHANNEL_HL3.equals(request.getPayChannel())){ } else if (ComCode.PAYCHANNEL_HL3.equals(request.getPayChannel())) {
OrderEntity orderEntity = new OrderEntity(code, request.getSubMerchantCode(), payNo, payCode,"quick", request.getPayChannel(), "1",amount , request.getSubject(), "", String.valueOf("D".equalsIgnoreCase(userEntity.getUserDetail().getCard().getCardType()) ? 5 : ("C".equalsIgnoreCase(userEntity.getUserDetail().getCard().getCardType()) ? 6 : 0)), request.getCardCode()); OrderEntity orderEntity = new OrderEntity(code, request.getSubMerchantCode(), payNo, payCode, "quick", request.getPayChannel(), "1", amount, request.getSubject(), "", String.valueOf("D".equalsIgnoreCase(userEntity.getUserDetail().getCard().getCardType()) ? 5 : ("C".equalsIgnoreCase(userEntity.getUserDetail().getCard().getCardType()) ? 6 : 0)), request.getCardCode());
addUserBenefits(userEntity,orderEntity,code,request); addUserBenefits(userEntity, orderEntity, code, request);
// payDao.saveOrderInfo(orderEntity); // payDao.saveOrderInfo(orderEntity);
// // 3. 创建分润信息,并保存 // // 3. 创建分润信息,并保存
// Map<String, String> userBenefits = getUserBenefit(userEntity, request); // Map<String, String> userBenefits = getUserBenefit(userEntity, request);
...@@ -152,17 +153,17 @@ public class PayApiService { ...@@ -152,17 +153,17 @@ public class PayApiService {
// 获取支付卡号 // 获取支付卡号
CardEntity cardEntityPay = userService.getCardInfo(request); CardEntity cardEntityPay = userService.getCardInfo(request);
if(!"C".equals(cardEntityPay.getCardType())){ if (!"C".equals(cardEntityPay.getCardType())) {
payBackDto.setMessage("只能用信用卡支付"); payBackDto.setMessage("只能用信用卡支付");
}else if(cardEntityPay.getSupportPayChannel()==null || !cardEntityPay.getSupportPayChannel().contains(request.getPayChannel())){ } else if (cardEntityPay.getSupportPayChannel() == null || !cardEntityPay.getSupportPayChannel().contains(request.getPayChannel())) {
payBackDto.setMessage("不支持"+cardEntityPay.getBankName()); payBackDto.setMessage("不支持" + cardEntityPay.getBankName());
}else{ } else {
payBackDto = this.quickPayJuHeZhongIntegralPay(userEntity, orderEntity, request,cardEntityPay); payBackDto = this.quickPayJuHeZhongIntegralPay(userEntity, orderEntity, request, cardEntityPay);
} }
}else if(ComCode.PAYCHANNEL_HUANQIUHUIJU.equals(request.getPayChannel())){ } else if (ComCode.PAYCHANNEL_HUANQIUHUIJU.equals(request.getPayChannel())) {
OrderEntity orderEntity = new OrderEntity(code, request.getSubMerchantCode(), payNo, payCode,"quick", request.getPayChannel(), "1",amount , request.getSubject(), "", String.valueOf("D".equalsIgnoreCase(userEntity.getUserDetail().getCard().getCardType()) ? 5 : ("C".equalsIgnoreCase(userEntity.getUserDetail().getCard().getCardType()) ? 6 : 0)), request.getCardCode()); OrderEntity orderEntity = new OrderEntity(code, request.getSubMerchantCode(), payNo, payCode, "quick", request.getPayChannel(), "1", amount, request.getSubject(), "", String.valueOf("D".equalsIgnoreCase(userEntity.getUserDetail().getCard().getCardType()) ? 5 : ("C".equalsIgnoreCase(userEntity.getUserDetail().getCard().getCardType()) ? 6 : 0)), request.getCardCode());
addUserBenefits(userEntity,orderEntity,code,request); addUserBenefits(userEntity, orderEntity, code, request);
// payDao.saveOrderInfo(orderEntity); // payDao.saveOrderInfo(orderEntity);
// // 3. 创建分润信息,并保存 // // 3. 创建分润信息,并保存
// Map<String, String> userBenefits = getUserBenefit(userEntity, request); // Map<String, String> userBenefits = getUserBenefit(userEntity, request);
...@@ -177,10 +178,10 @@ public class PayApiService { ...@@ -177,10 +178,10 @@ public class PayApiService {
// 获取支付卡号 // 获取支付卡号
CardEntity cardEntityPay = userService.getCardInfo(request); CardEntity cardEntityPay = userService.getCardInfo(request);
payBackDto = this.huanqiuhujuPay(userEntity, orderEntity, request,cardEntityPay); payBackDto = this.huanqiuhujuPay(userEntity, orderEntity, request, cardEntityPay);
}else { } else {
OrderEntity orderEntity = new OrderEntity(code, request.getSubMerchantCode(), payNo, payCode,"quick", ComCode.PAYCHANNEL_HL3, "1",amount , request.getSubject(), "", String.valueOf("D".equalsIgnoreCase(userEntity.getUserDetail().getCard().getCardType()) ? 5 : ("C".equalsIgnoreCase(userEntity.getUserDetail().getCard().getCardType()) ? 6 : 0)), request.getCardCode()); OrderEntity orderEntity = new OrderEntity(code, request.getSubMerchantCode(), payNo, payCode, "quick", ComCode.PAYCHANNEL_HL3, "1", amount, request.getSubject(), "", String.valueOf("D".equalsIgnoreCase(userEntity.getUserDetail().getCard().getCardType()) ? 5 : ("C".equalsIgnoreCase(userEntity.getUserDetail().getCard().getCardType()) ? 6 : 0)), request.getCardCode());
addUserBenefits(userEntity,orderEntity,code,request); addUserBenefits(userEntity, orderEntity, code, request);
// payDao.saveOrderInfo(orderEntity); // payDao.saveOrderInfo(orderEntity);
// // 3. 创建分润信息,并保存 // // 3. 创建分润信息,并保存
// Map<String, String> userBenefits = getUserBenefit(userEntity, request); // Map<String, String> userBenefits = getUserBenefit(userEntity, request);
...@@ -194,12 +195,12 @@ public class PayApiService { ...@@ -194,12 +195,12 @@ public class PayApiService {
// 获取支付卡号 // 获取支付卡号
CardEntity cardEntityPay = userService.getCardInfo(request); CardEntity cardEntityPay = userService.getCardInfo(request);
if(!"C".equals(cardEntityPay.getCardType())){ if (!"C".equals(cardEntityPay.getCardType())) {
payBackDto.setMessage("只能用信用卡支付"); payBackDto.setMessage("只能用信用卡支付");
}else if(cardEntityPay.getSupportPayChannel()==null || !cardEntityPay.getSupportPayChannel().contains("ComCode.PAYCHANNEL_HL3,")){ } else if (cardEntityPay.getSupportPayChannel() == null || !cardEntityPay.getSupportPayChannel().contains("ComCode.PAYCHANNEL_HL3,")) {
payBackDto.setMessage("不支持"+cardEntityPay.getBankName()); payBackDto.setMessage("不支持" + cardEntityPay.getBankName());
}else{ } else {
payBackDto = this.quickPayJuHeZhongIntegralPay(userEntity, orderEntity, request,cardEntityPay); payBackDto = this.quickPayJuHeZhongIntegralPay(userEntity, orderEntity, request, cardEntityPay);
} }
} }
...@@ -210,18 +211,20 @@ public class PayApiService { ...@@ -210,18 +211,20 @@ public class PayApiService {
/** /**
* 共用的分润信息 * 共用的分润信息
*
* @param userEntity * @param userEntity
* @param orderEntity * @param orderEntity
* @param code * @param code
* @param request * @param request
*/ */
private void addUserBenefits(UserEntity userEntity, OrderEntity orderEntity, String code ,JuHeZhongPayRequest request){ @Transactional(readOnly = false)
public void addUserBenefits(UserEntity userEntity, OrderEntity orderEntity, String code, JuHeZhongPayRequest request) {
payDao.saveOrderInfo(orderEntity); payDao.saveOrderInfo(orderEntity);
// 3. 创建分润信息,并保存 // 3. 创建分润信息,并保存
Map<String, String> userBenefits = getUserBenefit(userEntity, request); Map<String, String> userBenefits = getUserBenefit(userEntity, request);
for (String key : userBenefits.keySet()) { for (String key : userBenefits.keySet()) {
String benefitCode = IdGen.randomBase62(64); String benefitCode = IdGen.randomBase62(64);
BenefitEntity benefitEntity = new BenefitEntity(benefitCode, request.getSubMerchantCode(), code, request.getPayChannel(), "0", "A", userBenefits.get(key), ""); BenefitEntity benefitEntity = new BenefitEntity(benefitCode, key, code, request.getPayChannel(), "0", "A", userBenefits.get(key), "");
benefitEntity.setAmount(String.valueOf(Double.valueOf(benefitEntity.getAmount()))); benefitEntity.setAmount(String.valueOf(Double.valueOf(benefitEntity.getAmount())));
benefitEntity.setPayMethod(orderEntity.getPayMethod()); benefitEntity.setPayMethod(orderEntity.getPayMethod());
payDao.saveBenefitInfo(benefitEntity); payDao.saveBenefitInfo(benefitEntity);
...@@ -239,7 +242,7 @@ public class PayApiService { ...@@ -239,7 +242,7 @@ public class PayApiService {
* @param request * @param request
* @throws Exception * @throws Exception
*/ */
public PayBackDto quickPayJuHeZhongPay(UserEntity userEntity, OrderEntity orderEntity, JuHeZhongPayRequest request,CardEntity cardEntity) throws Exception { public PayBackDto quickPayJuHeZhongPay(UserEntity userEntity, OrderEntity orderEntity, JuHeZhongPayRequest request, CardEntity cardEntity) throws Exception {
// 快捷支付 // 快捷支付
// ApiQuickPayDto quickPayDto = new ApiQuickPayDto(); // ApiQuickPayDto quickPayDto = new ApiQuickPayDto();
// quickPayDto.setMerchantId(ComCode.MERCHANT_ID); // quickPayDto.setMerchantId(ComCode.MERCHANT_ID);
...@@ -268,7 +271,7 @@ public class PayApiService { ...@@ -268,7 +271,7 @@ public class PayApiService {
quickDto.setTrxType(3); quickDto.setTrxType(3);
quickDto.setMerchantId(ComCode.MERCHANT_ID); quickDto.setMerchantId(ComCode.MERCHANT_ID);
quickDto.setOrderId(orderEntity.getPayCode()); // 将订单的支付号传给第三方平台 quickDto.setOrderId(orderEntity.getPayCode()); // 将订单的支付号传给第三方平台
quickDto.setAmount(Long.parseLong(request.getAmount())*100); quickDto.setAmount(Long.parseLong(request.getAmount()) * 100);
// 获取支付卡号 // 获取支付卡号
quickDto.setBankNo(cardEntity.getCardNo()); // 支付卡号 quickDto.setBankNo(cardEntity.getCardNo()); // 支付卡号
...@@ -286,19 +289,19 @@ public class PayApiService { ...@@ -286,19 +289,19 @@ public class PayApiService {
rateEntity.setPayMethod("quick"); rateEntity.setPayMethod("quick");
rateEntity.setPayChannel(ComCode.PAYCHANNEL_HL1); rateEntity.setPayChannel(ComCode.PAYCHANNEL_HL1);
rateEntity = userService.getRateByLevel(rateEntity); rateEntity = userService.getRateByLevel(rateEntity);
if(rateEntity!=null){ if (rateEntity != null) {
double userFee = Long.parseLong(request.getAmount())*100*Double.valueOf(rateEntity.getRate()); double userFee = Long.parseLong(request.getAmount()) * 100 * Double.valueOf(rateEntity.getRate());
if(userFee<100){ if (userFee < 100) {
userFee = 100; userFee = 100;
} }
BigDecimal bigDecimal = new BigDecimal(100+ Double.valueOf(Global.getConfig("pay.y"))*100 ); BigDecimal bigDecimal = new BigDecimal(100 + Double.valueOf(Global.getConfig("pay.y")) * 100);
quickDto.setUserFee(bigDecimal); // 手续费 单位:分 ,D0 业务必传 quickDto.setUserFee(bigDecimal); // 手续费 单位:分 ,D0 业务必传
}else{ } else {
quickDto.setUserFee(new BigDecimal(0)); quickDto.setUserFee(new BigDecimal(0));
} }
quickDto.setFrontUrl(Global.getConfig("project.access.url")+"/api/pay/notifyPay");// 前台地址 quickDto.setFrontUrl(Global.getConfig("project.access.url") + "/api/pay/notifyPay");// 前台地址
quickDto.setNotifyUrl(Global.getConfig("project.access.url")+"/api/pay/notifyPay");// 通知url quickDto.setNotifyUrl(Global.getConfig("project.access.url") + "/api/pay/notifyPay");// 通知url
quickDto.setTimestamp(System.currentTimeMillis()); quickDto.setTimestamp(System.currentTimeMillis());
quickDto.setMerchantKey(ComCode.MERCHANT_KEY); quickDto.setMerchantKey(ComCode.MERCHANT_KEY);
JSONObject jsonObject = juHeZhongPayService.quickPay(quickDto); JSONObject jsonObject = juHeZhongPayService.quickPay(quickDto);
...@@ -307,15 +310,13 @@ public class PayApiService { ...@@ -307,15 +310,13 @@ public class PayApiService {
if (!"0000".equals(jsonObject.getString("code"))) { if (!"0000".equals(jsonObject.getString("code"))) {
throw new MyException(jsonObject.getString("msg")); throw new MyException(jsonObject.getString("msg"));
}else{ } else {
payBackDto.setUrl(jsonObject.getString("url")); payBackDto.setUrl(jsonObject.getString("url"));
} }
return payBackDto; return payBackDto;
} }
/** /**
* JuHeZhong积分快捷支付 * JuHeZhong积分快捷支付
* *
...@@ -323,13 +324,13 @@ public class PayApiService { ...@@ -323,13 +324,13 @@ public class PayApiService {
* @param request * @param request
* @throws Exception * @throws Exception
*/ */
public PayBackDto quickPayJuHeZhongIntegralPay(UserEntity userEntity, OrderEntity orderEntity, JuHeZhongPayRequest request,CardEntity cardEntity) throws Exception { public PayBackDto quickPayJuHeZhongIntegralPay(UserEntity userEntity, OrderEntity orderEntity, JuHeZhongPayRequest request, CardEntity cardEntity) throws Exception {
UserSubMchId userSubMchId = new UserSubMchId(); UserSubMchId userSubMchId = new UserSubMchId();
userSubMchId.setPayChannel(ComCode.PAYCHANNEL_HL3); userSubMchId.setPayChannel(ComCode.PAYCHANNEL_HL3);
userSubMchId.setUserCode(userEntity.getCode()); userSubMchId.setUserCode(userEntity.getCode());
userSubMchId = userService.getUserSubmchid(userSubMchId); userSubMchId = userService.getUserSubmchid(userSubMchId);
String subMchId = null; String subMchId = null;
if(userSubMchId==null){ if (userSubMchId == null) {
UserRequest userRequest = new UserRequest(); UserRequest userRequest = new UserRequest();
userRequest.setSubMerchantCode(request.getSubMerchantCode()); userRequest.setSubMerchantCode(request.getSubMerchantCode());
userRequest.setBelongBank(userEntity.getUserDetail().getCard().getBelongBank()); userRequest.setBelongBank(userEntity.getUserDetail().getCard().getBelongBank());
...@@ -338,30 +339,30 @@ public class PayApiService { ...@@ -338,30 +339,30 @@ public class PayApiService {
userRequest.setMobile(userEntity.getMobile()); userRequest.setMobile(userEntity.getMobile());
userRequest.setIdCard(userEntity.getUserDetail().getIdCard()); userRequest.setIdCard(userEntity.getUserDetail().getIdCard());
userRequest.setCardPlace(userEntity.getUserDetail().getCard().getCardPlace()); userRequest.setCardPlace(userEntity.getUserDetail().getCard().getCardPlace());
subMchId = userService.quickPayHandleJuhezhong(userRequest,"",userEntity.getLevel()); subMchId = userService.quickPayHandleJuhezhong(userRequest, "", userEntity.getLevel());
userSubMchId = new UserSubMchId(); userSubMchId = new UserSubMchId();
userSubMchId.setPayChannel(ComCode.PAYCHANNEL_HL3); userSubMchId.setPayChannel(ComCode.PAYCHANNEL_HL3);
userSubMchId.setUserCode(userEntity.getCode()); userSubMchId.setUserCode(userEntity.getCode());
userSubMchId.setSubmchid(subMchId); userSubMchId.setSubmchid(subMchId);
userService.addUserSubmchid(userSubMchId); userService.addUserSubmchid(userSubMchId);
}else{ } else {
subMchId = userSubMchId.getSubmchid(); subMchId = userSubMchId.getSubmchid();
} }
JSONObject dto = new JSONObject(); JSONObject dto = new JSONObject();
dto.put("serviceType", 4);// 服务类型 dto.put("serviceType", 4);// 服务类型
dto.put("orderId", orderEntity.getPayCode());//订单号 dto.put("orderId", orderEntity.getPayCode());//订单号
dto.put("amount", Long.parseLong(request.getAmount())*100);//交易金额 dto.put("amount", Long.parseLong(request.getAmount()) * 100);//交易金额
dto.put("merchantId",ComCode.INTEGRAL_MERCHANT_ID);//商户号 dto.put("merchantId", ComCode.INTEGRAL_MERCHANT_ID);//商户号
// dto.put("subMchId", userEntity.getUserDetail().getCard().getSubMerchantId());//由系统分配的商户号 // dto.put("subMchId", userEntity.getUserDetail().getCard().getSubMerchantId());//由系统分配的商户号
dto.put("subMchId",subMchId); dto.put("subMchId", subMchId);
dto.put("accNo", cardEntity.getCardNo());//开卡 唯一标识 dto.put("accNo", cardEntity.getCardNo());//开卡 唯一标识
// dto.put("accNo", "6210210010501799229");//开卡 唯一标识 // dto.put("accNo", "6210210010501799229");//开卡 唯一标识
dto.put("mobile",cardEntity.getCardMobile()); dto.put("mobile", cardEntity.getCardMobile());
dto.put("productName", "收款");//标题 dto.put("productName", "收款");//标题
dto.put("notifyUrl", Global.getConfig("project.access.url")+"/api/pay/notifyPay");//支付完成 异步通知结果 dto.put("notifyUrl", Global.getConfig("project.access.url") + "/api/pay/notifyPay");//支付完成 异步通知结果
dto.put("frontUrl", Global.getConfig("project.access.url")+"/api/pay/notifyPay");//返回商户页面 dto.put("frontUrl", Global.getConfig("project.access.url") + "/api/pay/notifyPay");//返回商户页面
dto.put("merchantKey", ComCode.INTEGRAL_MERCHANT_KEY);//商户key dto.put("merchantKey", ComCode.INTEGRAL_MERCHANT_KEY);//商户key
dto.put("timestamp", System.currentTimeMillis());//时间戳 dto.put("timestamp", System.currentTimeMillis());//时间戳
System.out.println(dto.toJSONString()); System.out.println(dto.toJSONString());
...@@ -372,79 +373,176 @@ public class PayApiService { ...@@ -372,79 +373,176 @@ public class PayApiService {
if (!"0000".equals(jsonObject.getString("code"))) { if (!"0000".equals(jsonObject.getString("code"))) {
throw new MyException(jsonObject.getString("msg")); throw new MyException(jsonObject.getString("msg"));
}else{ } else {
payBackDto.setUrl(jsonObject.getString("url")); payBackDto.setUrl(jsonObject.getString("url"));
} }
return payBackDto; return payBackDto;
} }
//TODO
//C黄金 D白银 E青铜
//根据分润变化重新写的分润方法
public Map<String, String> getUserBenefit(UserEntity userEntity, JuHeZhongPayRequest request) { public Map<String, String> getUserBenefit(UserEntity userEntity, JuHeZhongPayRequest request) {
Map<String, String> userBenefit = new HashMap<>(); Map<String, String> userBenefit = new HashMap<>();
String recommendedPath = ""; //用户等级为C,即黄金级别,上级用户不参与分成,直接返回
if(userEntity.getRecommendedPath()!=null && userEntity.getRecommendedPath().length()>0){ if(userEntity.getLevel().equals("C")){
recommendedPath = userEntity.getRecommendedPath().substring(1); return userBenefit;
} }
String[] pathIds = (recommendedPath + userEntity.getId() + ",").split(","); //该笔交易的支付方式,获取不同费率
String payChannel = request.getPayChannel();
//获取该笔交易的金额
System.out.println("recommendedPath:"+recommendedPath); String amount = request.getAmount();
System.out.println("pathIds:"+pathIds); HashMap<String, String> map = Maps.newHashMap();
map.put("pay_channel",payChannel);
// 获取三级的会员 map.put("id",userEntity.getId());
List<UserRateEntity> pathCDEUsers = payDao.getCDEUsers(pathIds); //当前用户费率实体
int countLevelC = 0; UserRateEntity userRateEntity = payDao.getUpUser(map);
// 判断上级有几个黄金会员(C)
for (UserRateEntity entity : pathCDEUsers) { List<String> idsList = new ArrayList<>();
// 不考虑该用户本身 //根据user表中recommendPath的值获取推荐人
if (entity.getUserCode().equals(userEntity.getCode())) { if (userEntity.getRecommendedPath() != null && userEntity.getRecommendedPath().length() > 0) {
continue; String[] ids = userEntity.getRecommendedPath().split(",");
} idsList = Arrays.asList(ids);
if ("C".equals(entity.getUserLevel())) { //因只取两级推荐用户也就是取,上级,上上级,而当前字符串包含了所有的推荐层级
countLevelC++; //进行逆序排序,只取前两级用户id
} Collections.sort(idsList, (a, b) -> b.compareTo(a));
} }
double minRate = 1; //获取当前用户的推荐者,只获取了上级和上上级
int levelCPosition = 0; //上级
for (UserRateEntity entity : pathCDEUsers) { UserRateEntity upUser =null;
levelCPosition++; if(idsList.size()>0){
minRate = minRate >= Double.parseDouble(entity.getRate()) ? Double.parseDouble(entity.getRate()) : minRate; String upId = idsList.get(0);
if (entity.getUserCode().equals(userEntity.getCode())) { map.put("id",upId);
continue; upUser = payDao.getUpUser(map);
} if(upUser != null && upUser.getUserLevel().equals("C")){
// 只有黄金会员(C)以上才分润 //AC1=(A-C1)乘以X=(0.55%-0.5%)乘以X
if ("C".equals(entity.getUserLevel())) { //当前用户(A,B只有这两种等级会给上级分成),也就是当前用户的费率与上级用户费率的差值
double percent = countLevelC == 1 ? 1d : (levelCPosition == 2 ? 0.95 : 0.05); BigDecimal rateResult = BigDecimal.valueOf(Double.valueOf(userRateEntity.getRate())).subtract(BigDecimal.valueOf(Double.valueOf(upUser.getRate())));
userBenefit.put(entity.getUserCode(), String.valueOf((minRate - Double.parseDouble(entity.getRate())) > 0 ? (minRate - Double.parseDouble(entity.getRate())) * Double.parseDouble(request.getAmount()) * percent : "0")); BigDecimal benefitResult = rateResult.multiply(BigDecimal.valueOf(Double.valueOf(amount)));
userBenefit.put(upUser.getUserCode(),benefitResult.toString());
} }
} }
// EE1C2=(E1-C2)乘以X=(0.55%-0.5%)乘以X
// ED1C2=(D1-C2)乘以X=(0.52%-0.5%)乘以X
// DE1C2=(D-C2)乘以X=(0.52%-0.5%)乘以X
// DD1C2=(D1-C2)乘以X=(0.52%-O.5%)乘以X
// 同上级分利润一样,当前用户是C,即黄金会员时,不参与分成;上上级用户只有是黄金会员时才能参与分成,即必须为C
// 出现的分成情况只有四种:
// 1.当前用户是E(青铜),上级用户是E1(青铜),上上级用户是C(黄金),当前用户费率与上上级用户费率差值
// 2.当前用户是E(青铜),上级用户是D1(白银),上上级用户是C(黄金),上级用户费率与上上级用户费率差值
// 3.当前用户是D(白银),上级用户是E1(青铜),上上级用户是C(黄金),当前用户费率与上上级用户费率差值
// 4.当前用户是D(白银),上级用户是D1(白银),上上级用户是C(黄金),上级用户费率与上上级用户费率差值
//
//上上级
if(idsList.size()>1){
String upUpId = idsList.get(1);
map.put("id", upUpId);
UserRateEntity upUpUser = payDao.getUpUser(map);
if(upUpUser != null && upUpUser.getUserLevel().equals("C")){
//第一种情况
if(userEntity.getLevel().equals("E") && upUser.getUserLevel().equals("E")){
BigDecimal rateResult = BigDecimal.valueOf(Double.valueOf(userRateEntity.getRate())).subtract(BigDecimal.valueOf(Double.valueOf(upUpUser.getRate())));
BigDecimal benefitResult = rateResult.multiply(BigDecimal.valueOf(Double.valueOf(amount)));
userBenefit.put(upUpUser.getUserCode(),benefitResult.toString());
}
//第二种情况
if(userEntity.getLevel().equals("E") && upUser.getUserLevel().equals("D")){
BigDecimal rateResult = BigDecimal.valueOf(Double.valueOf(upUser.getRate())).subtract(BigDecimal.valueOf(Double.valueOf(upUpUser.getRate())));
BigDecimal benefitResult = rateResult.multiply(BigDecimal.valueOf(Double.valueOf(amount)));
userBenefit.put(upUpUser.getUserCode(),benefitResult.toString());
}
// 获取顶级管理员 //第三种情况
UserRateEntity userRateEntity = new UserRateEntity(); if(userEntity.getLevel().equals("D") && upUser.getUserLevel().equals("E")){
userRateEntity.setPathIds(pathIds); BigDecimal rateResult = BigDecimal.valueOf(Double.valueOf(userRateEntity.getRate())).subtract(BigDecimal.valueOf(Double.valueOf(upUpUser.getRate())));
userRateEntity.setPayChannel(request.getPayChannel()); BigDecimal benefitResult = rateResult.multiply(BigDecimal.valueOf(Double.valueOf(amount)));
List<UserRateEntity> pathSABUsers = payDao.getSABUsers(userRateEntity); userBenefit.put(upUpUser.getUserCode(),benefitResult.toString());
}
if(pathSABUsers!=null && pathSABUsers.size()>0){ //第四种情况
for (UserRateEntity entity : pathSABUsers) { if(userEntity.getLevel().equals("D") && upUser.getUserLevel().equals("D")){
System.out.println(entity.getRate()); BigDecimal rateResult = BigDecimal.valueOf(Double.valueOf(upUser.getRate())).subtract(BigDecimal.valueOf(Double.valueOf(upUpUser.getRate())));
System.out.println(entity.getUserCode()); BigDecimal benefitResult = rateResult.multiply(BigDecimal.valueOf(Double.valueOf(amount)));
System.out.println(entity.getUserLevel()); userBenefit.put(upUpUser.getUserCode(),benefitResult.toString());
System.out.println(request.getAmount()); }
userBenefit.put(entity.getUserCode(), String.valueOf((minRate - Double.parseDouble(entity.getRate())) * Double.parseDouble(request.getAmount())));
minRate = Double.valueOf(entity.getRate());
} }
} }
return userBenefit; return userBenefit;
} }
//最初分润方法
// public Map<String, String> getUserBenefit(UserEntity userEntity, JuHeZhongPayRequest request) {
// Map<String, String> userBenefit = new HashMap<>();
// String recommendedPath = "";
// if(userEntity.getRecommendedPath()!=null && userEntity.getRecommendedPath().length()>0){
// recommendedPath = userEntity.getRecommendedPath().substring(1);
// }
// String[] pathIds = (recommendedPath + userEntity.getId() + ",").split(",");
//
//
// System.out.println("recommendedPath:"+recommendedPath);
// System.out.println("pathIds:"+pathIds);
//
// // 获取三级的会员
// List<UserRateEntity> pathCDEUsers = payDao.getCDEUsers(pathIds);
// int countLevelC = 0;
// // 判断上级有几个黄金会员(C)
// for (UserRateEntity entity : pathCDEUsers) {
// // 不考虑该用户本身
// if (entity.getUserCode().equals(userEntity.getCode())) {
// continue;
// }
// if ("C".equals(entity.getUserLevel())) {
// countLevelC++;
// }
// }
// double minRate = 1;
// int levelCPosition = 0;
// for (UserRateEntity entity : pathCDEUsers) {
// levelCPosition++;
// minRate = minRate >= Double.parseDouble(entity.getRate()) ? Double.parseDouble(entity.getRate()) : minRate;
// if (entity.getUserCode().equals(userEntity.getCode())) {
// continue;
// }
// // 只有黄金会员(C)以上才分润
// if ("C".equals(entity.getUserLevel())) {
// double percent = countLevelC == 1 ? 1d : (levelCPosition == 2 ? 0.95 : 0.05);
// userBenefit.put(entity.getUserCode(), String.valueOf((minRate - Double.parseDouble(entity.getRate())) > 0 ? (minRate - Double.parseDouble(entity.getRate())) * Double.parseDouble(request.getAmount()) * percent : "0"));
// }
// }
//
//
// // 获取顶级管理员
// UserRateEntity userRateEntity = new UserRateEntity();
// userRateEntity.setPathIds(pathIds);
// userRateEntity.setPayChannel(request.getPayChannel());
// List<UserRateEntity> pathSABUsers = payDao.getSABUsers(userRateEntity);
//
// if(pathSABUsers!=null && pathSABUsers.size()>0){
// for (UserRateEntity entity : pathSABUsers) {
// System.out.println(entity.getRate());
// System.out.println(entity.getUserCode());
// System.out.println(entity.getUserLevel());
// System.out.println(request.getAmount());
// userBenefit.put(entity.getUserCode(), String.valueOf((minRate - Double.parseDouble(entity.getRate())) * Double.parseDouble(request.getAmount())));
// minRate = Double.valueOf(entity.getRate());
// }
// }
//
// return userBenefit;
// }
/** /**
* HL2 通道 即JFEN 开卡 需要得参数 * HL2 通道 即JFEN 开卡 需要得参数
*
* @param request * @param request
* @return * @return
*/ */
public Response openCardJFen(UserRequest request){ public Response openCardJFen(UserRequest request) {
Response response = new Response(); Response response = new Response();
CardEntity cardEntity = userService.getCardInfo(request); CardEntity cardEntity = userService.getCardInfo(request);
...@@ -456,7 +554,7 @@ public class PayApiService { ...@@ -456,7 +554,7 @@ public class PayApiService {
UserDetailEntity userDetailEntity = userService.getUserDetailByCode(request.getSubMerchantCode()); UserDetailEntity userDetailEntity = userService.getUserDetailByCode(request.getSubMerchantCode());
// 如果没有注册 则先注册 // 如果没有注册 则先注册
if(userSubMchId == null){ if (userSubMchId == null) {
CardEntity cardEntityDebit = userService.getCardInfoByCode(userEntity); CardEntity cardEntityDebit = userService.getCardInfoByCode(userEntity);
JSONObject dto = new JSONObject(); JSONObject dto = new JSONObject();
...@@ -464,30 +562,30 @@ public class PayApiService { ...@@ -464,30 +562,30 @@ public class PayApiService {
dto.put("orderId", MakeOrderNum.makeOrderNum()); dto.put("orderId", MakeOrderNum.makeOrderNum());
// //
dto.put("serviceType",1); dto.put("serviceType", 1);
dto.put("subMerchantName",userDetailEntity.getRealName()+System.currentTimeMillis()); dto.put("subMerchantName", userDetailEntity.getRealName() + System.currentTimeMillis());
dto.put("subMerchantType","PERSON"); dto.put("subMerchantType", "PERSON");
dto.put("businessLicense",userDetailEntity.getRealName()+System.currentTimeMillis()); dto.put("businessLicense", userDetailEntity.getRealName() + System.currentTimeMillis());
dto.put("legalPersonName",userDetailEntity.getRealName()); dto.put("legalPersonName", userDetailEntity.getRealName());
dto.put("legalPersonID",userDetailEntity.getIdCard()); dto.put("legalPersonID", userDetailEntity.getIdCard());
dto.put("subMerchantPersonName",userDetailEntity.getRealName()); dto.put("subMerchantPersonName", userDetailEntity.getRealName());
dto.put("subMerchantPersonPhone",cardEntityDebit.getCardMobile()); dto.put("subMerchantPersonPhone", cardEntityDebit.getCardMobile());
dto.put("bankType","TOPRIVATE"); dto.put("bankType", "TOPRIVATE");
dto.put("accountName",userDetailEntity.getRealName()); dto.put("accountName", userDetailEntity.getRealName());
dto.put("accountNo",cardEntityDebit.getCardNo()); dto.put("accountNo", cardEntityDebit.getCardNo());
dto.put("bankName",cardEntityDebit.getBankName()); dto.put("bankName", cardEntityDebit.getBankName());
dto.put("bankProv","天津市"); dto.put("bankProv", "天津市");
dto.put("bankCity","天津市"); dto.put("bankCity", "天津市");
dto.put("bankBranch","天津市职场"); dto.put("bankBranch", "天津市职场");
// dto.put("bankProv",cardEntityDebit.getCity()); // dto.put("bankProv",cardEntityDebit.getCity());
// dto.put("bankCity",cardEntityDebit.getCity()); // dto.put("bankCity",cardEntityDebit.getCity());
// dto.put("bankBranch",cardEntityDebit.getCardPlace()); // dto.put("bankBranch",cardEntityDebit.getCardPlace());
dto.put("bankCode",cardEntityDebit.getBelongBank()); dto.put("bankCode", cardEntityDebit.getBelongBank());
dto.put("timestamp",System.currentTimeMillis()); dto.put("timestamp", System.currentTimeMillis());
// dto.put("legalPersonID",userDetailEntity.getIdCard()); // dto.put("legalPersonID",userDetailEntity.getIdCard());
// dto.put("subMerchantPersonName",userDetailEntity.getRealName()); // dto.put("subMerchantPersonName",userDetailEntity.getRealName());
// dto.put("subMerchantPersonPhone",cardEntityDebit.getCardMobile()); // dto.put("subMerchantPersonPhone",cardEntityDebit.getCardMobile());
...@@ -548,35 +646,34 @@ public class PayApiService { ...@@ -548,35 +646,34 @@ public class PayApiService {
rateEntity = userService.getRateByLevel(rateEntity); rateEntity = userService.getRateByLevel(rateEntity);
JSONObject dto = new JSONObject(); JSONObject dto = new JSONObject();
dto.put("orderId", MakeOrderNum.makeOrderNum()); dto.put("orderId", MakeOrderNum.makeOrderNum());
dto.put("merchantId",ComCode.JFEN_MERCHANT_ID); dto.put("merchantId", ComCode.JFEN_MERCHANT_ID);
dto.put("serviceType","8"); dto.put("serviceType", "8");
dto.put("subMchId",userSubMchId.getSubmchid()); dto.put("subMchId", userSubMchId.getSubmchid());
dto.put("idType","01"); dto.put("idType", "01");
dto.put("idNo",userDetailEntity.getIdCard()); dto.put("idNo", userDetailEntity.getIdCard());
if(rateEntity==null){ if (rateEntity == null) {
dto.put("d0Fee","0.0043"); dto.put("d0Fee", "0.0043");
}else{ } else {
dto.put("d0Fee",rateEntity.getRate()); dto.put("d0Fee", rateEntity.getRate());
} }
dto.put("accountName",userDetailEntity.getRealName()); dto.put("accountName", userDetailEntity.getRealName());
dto.put("accountNo",cardEntity.getCardNo()); dto.put("accountNo", cardEntity.getCardNo());
dto.put("mobile",cardEntity.getCardMobile()); dto.put("mobile", cardEntity.getCardMobile());
dto.put("notifyUrl",Global.getConfig("project.access.url")+"/api/pay/openCardCallback"); dto.put("notifyUrl", Global.getConfig("project.access.url") + "/api/pay/openCardCallback");
dto.put("merchantKey",ComCode.JFEN_MERCHANT_KEY); dto.put("merchantKey", ComCode.JFEN_MERCHANT_KEY);
dto.put("timestamp",System.currentTimeMillis()); dto.put("timestamp", System.currentTimeMillis());
PayBackDto payBackDto = new PayBackDto(); PayBackDto payBackDto = new PayBackDto();
try { try {
JSONObject jsonObject = juHeZhongPayJFenService.openCard(dto); JSONObject jsonObject = juHeZhongPayJFenService.openCard(dto);
if("0000".equals(jsonObject.get("code"))){ if ("0000".equals(jsonObject.get("code"))) {
payBackDto.setUrl(jsonObject.getString("url")); payBackDto.setUrl(jsonObject.getString("url"));
response.setData(payBackDto); response.setData(payBackDto);
response.setStatus(ComCode.STATUS_CODE_2000); response.setStatus(ComCode.STATUS_CODE_2000);
return response; return response;
}else{ } else {
payBackDto.setUrl(jsonObject.getString("url")); payBackDto.setUrl(jsonObject.getString("url"));
response.setData(payBackDto); response.setData(payBackDto);
...@@ -596,7 +693,7 @@ public class PayApiService { ...@@ -596,7 +693,7 @@ public class PayApiService {
// HL2 通道 即JFEN 发送验证码 需要的参数 SubMerchantCode\amount\cardCode\PayChannel 通道\ // HL2 通道 即JFEN 发送验证码 需要的参数 SubMerchantCode\amount\cardCode\PayChannel 通道\
@Transactional(readOnly = false) @Transactional(readOnly = false)
public Response sendMessageJFen (JuHeZhongPayRequest request){ public Response sendMessageJFen(JuHeZhongPayRequest request) {
request.setPayMethod("quick"); request.setPayMethod("quick");
CardEntity cardEntity = userService.getCardInfoSwpaccid(request); CardEntity cardEntity = userService.getCardInfoSwpaccid(request);
UserSubMchId userSubMchId = new UserSubMchId(); UserSubMchId userSubMchId = new UserSubMchId();
...@@ -605,7 +702,7 @@ public class PayApiService { ...@@ -605,7 +702,7 @@ public class PayApiService {
userSubMchId = userService.getUserSubmchid(userSubMchId); userSubMchId = userService.getUserSubmchid(userSubMchId);
UserEntity userEntity = userService.getUserInfo(request); UserEntity userEntity = userService.getUserInfo(request);
UserDetailEntity userDetailEntity = userService.getUserDetailByCode(request.getSubMerchantCode()); UserDetailEntity userDetailEntity = userService.getUserDetailByCode(request.getSubMerchantCode());
userDetailEntity.setCard ( cardEntity ); userDetailEntity.setCard(cardEntity);
userEntity.setUserDetail(userDetailEntity); userEntity.setUserDetail(userDetailEntity);
// 2. 创建支付订单信息,并保存 // 2. 创建支付订单信息,并保存
...@@ -614,10 +711,10 @@ public class PayApiService { ...@@ -614,10 +711,10 @@ public class PayApiService {
String payCode = IdGen.randomBase62(64); String payCode = IdGen.randomBase62(64);
DecimalFormat df = new DecimalFormat("######0.00"); DecimalFormat df = new DecimalFormat("######0.00");
String amount = df.format(Double.valueOf(request.getAmount())); String amount = df.format(Double.valueOf(request.getAmount()));
OrderEntity orderEntity = new OrderEntity(code, request.getSubMerchantCode(), payNo, payCode,"quick", request.getPayChannel(), "1",amount , request.getSubject(), "", String.valueOf("D".equalsIgnoreCase(userDetailEntity.getCard().getCardType()) ? 5 : ("C".equalsIgnoreCase(userDetailEntity.getCard().getCardType()) ? 6 : 0)), request.getCardCode()); OrderEntity orderEntity = new OrderEntity(code, request.getSubMerchantCode(), payNo, payCode, "quick", request.getPayChannel(), "1", amount, request.getSubject(), "", String.valueOf("D".equalsIgnoreCase(userDetailEntity.getCard().getCardType()) ? 5 : ("C".equalsIgnoreCase(userDetailEntity.getCard().getCardType()) ? 6 : 0)), request.getCardCode());
//3. 分润信息 //3. 分润信息
addUserBenefits(userEntity,orderEntity,code,request); addUserBenefits(userEntity, orderEntity, code, request);
// payDao.saveOrderInfo(orderEntity); // payDao.saveOrderInfo(orderEntity);
// // 3. 创建分润信息,并保存 // // 3. 创建分润信息,并保存
// Map<String, String> userBenefits = getUserBenefit(userEntity, request); // Map<String, String> userBenefits = getUserBenefit(userEntity, request);
...@@ -631,24 +728,26 @@ public class PayApiService { ...@@ -631,24 +728,26 @@ public class PayApiService {
Response response = new Response(); Response response = new Response();
JSONObject dto = new JSONObject(); JSONObject dto = new JSONObject();
dto.put("orderId",payCode); // 订单号 dto.put("orderId", payCode); // 订单号
dto.put("merchantId",ComCode.JFEN_MERCHANT_ID); dto.put("merchantId", ComCode.JFEN_MERCHANT_ID);
dto.put("serviceType","4"); dto.put("serviceType", "4");
dto.put("subMchId",userSubMchId.getSubmchid()); dto.put("subMchId", userSubMchId.getSubmchid());
dto.put("merchantKey",ComCode.JFEN_MERCHANT_KEY); dto.put("merchantKey", ComCode.JFEN_MERCHANT_KEY);
dto.put("timestamp",System.currentTimeMillis()); dto.put("timestamp", System.currentTimeMillis());
dto.put("amount",amount); int amountInt = (int) (Double.valueOf(request.getAmount()) * 100);
dto.put("idNo",userDetailEntity.getIdCard()); dto.put("amount", amountInt);
dto.put("accountName",userDetailEntity.getRealName()); dto.put("idNo", userDetailEntity.getIdCard());
dto.put("accountNo",cardEntity.getCardNo()); dto.put("accountName", userDetailEntity.getRealName());
dto.put("accountNo", cardEntity.getCardNo());
dto.put("mobile",cardEntity.getCardMobile());
dto.put("swpaccid",cardEntity.getSwpaccid()); dto.put("mobile", cardEntity.getCardMobile());
dto.put("notifyUrl",Global.getConfig("project.access.url")+"/api/pay/openCardCallback"); dto.put("swpaccid", cardEntity.getSwpaccid());
dto.put("notifyUrl", Global.getConfig("project.access.url") + "/api/pay/openCardCallback");
try { try {
//发送短信 //发送短信
JSONObject jsonObject = juHeZhongPayIntegralService.quickPayHandle ( dto ); JSONObject jsonObject = juHeZhongPayJFenService.quickPayHandle(dto);
if("0000".equals(jsonObject.get("code"))){ // JSONObject jsonObject = juHeZhongPayIntegralService.quickPayHandle ( dto );
if ("0000".equals(jsonObject.get("code"))) {
orderEntity.setTradeNo(jsonObject.getString("trade_no")); orderEntity.setTradeNo(jsonObject.getString("trade_no"));
payDao.updateOrderTradeNo(orderEntity); payDao.updateOrderTradeNo(orderEntity);
response.setData(orderEntity); response.setData(orderEntity);
...@@ -673,7 +772,7 @@ public class PayApiService { ...@@ -673,7 +772,7 @@ public class PayApiService {
// HL2 通道 即JFEN 发送验证码 需要的参数 SubMerchantCode\payNo\passwd\cardCode \ // HL2 通道 即JFEN 发送验证码 需要的参数 SubMerchantCode\payNo\passwd\cardCode \
@Transactional(readOnly = false) @Transactional(readOnly = false)
public PayBackDto jFenPayJuhezhong (JuHeZhongPayRequest request) throws Exception { public PayBackDto jFenPayJuhezhong(JuHeZhongPayRequest request) throws Exception {
request.setPayMethod("quick"); request.setPayMethod("quick");
CardEntity cardEntity = userService.getCardInfoSwpaccid(request); CardEntity cardEntity = userService.getCardInfoSwpaccid(request);
...@@ -682,8 +781,8 @@ public class PayApiService { ...@@ -682,8 +781,8 @@ public class PayApiService {
userSubMchId.setPayChannel(ComCode.PAYCHANNEL_HL2); userSubMchId.setPayChannel(ComCode.PAYCHANNEL_HL2);
userSubMchId = userService.getUserSubmchid(userSubMchId); userSubMchId = userService.getUserSubmchid(userSubMchId);
// 如果没有注册 则先注册 // 如果没有注册 则先注册
if(userSubMchId == null){ if (userSubMchId == null) {
throw new MyException("未开卡,请先开卡"); throw new MyException("未开卡,请先开卡");
} }
OrderEntity orderEntity = this.getOrder(request.getPayNo()); OrderEntity orderEntity = this.getOrder(request.getPayNo());
...@@ -692,26 +791,26 @@ public class PayApiService { ...@@ -692,26 +791,26 @@ public class PayApiService {
payBackDto.setIsUrl("0"); payBackDto.setIsUrl("0");
JSONObject dto = new JSONObject(); JSONObject dto = new JSONObject();
dto.put("orderId",MakeOrderNum.makeOrderNum()); // 非订单号 dto.put("orderId", MakeOrderNum.makeOrderNum()); // 非订单号
dto.put("merchantId",ComCode.JFEN_MERCHANT_ID);// 商户号 dto.put("merchantId", ComCode.JFEN_MERCHANT_ID);// 商户号
dto.put("serviceType","5");// 操作类型 5 dto.put("serviceType", "5");// 操作类型 5
dto.put("subMchId",userSubMchId.getSubmchid());// 子商户号 dto.put("subMchId", userSubMchId.getSubmchid());// 子商户号
dto.put("merchantKey",ComCode.JFEN_MERCHANT_KEY); dto.put("merchantKey", ComCode.JFEN_MERCHANT_KEY);
dto.put("timestamp",System.currentTimeMillis()); dto.put("timestamp", System.currentTimeMillis());
dto.put("passwd",request.getPasswd()); dto.put("passwd", request.getPasswd());
dto.put("productName","productName"); dto.put("productName", "productName");
dto.put("tradeNo",orderEntity.getTradeNo()); dto.put("tradeNo", orderEntity.getTradeNo());
dto.put("swpaccid",cardEntity.getSwpaccid()); dto.put("swpaccid", cardEntity.getSwpaccid());
JSONObject jsonObject = juHeZhongPayJFenService.openCard(dto); JSONObject jsonObject = juHeZhongPayJFenService.openCard(dto);
payBackDto.setMessage(jsonObject.getString("msg")); payBackDto.setMessage(jsonObject.getString("msg"));
if("0000".equals(jsonObject.get("code"))){ if ("0000".equals(jsonObject.get("code"))) {
this.notifyPay(orderEntity); this.notifyPay(orderEntity);
return payBackDto; return payBackDto;
}else{ } else {
throw new MyException(jsonObject.getString("msg")); throw new MyException(jsonObject.getString("msg"));
} }
...@@ -720,7 +819,7 @@ public class PayApiService { ...@@ -720,7 +819,7 @@ public class PayApiService {
// HL4 通道 // HL4 通道
@Transactional(readOnly = false) @Transactional(readOnly = false)
public PayBackDto payJuhezhong (JuHeZhongPayRequest request,UserEntity userEntity,OrderEntity orderEntity,CardEntity cardEntity) throws Exception { public PayBackDto payJuhezhong(JuHeZhongPayRequest request, UserEntity userEntity, OrderEntity orderEntity, CardEntity cardEntity) throws Exception {
//获取用户对应等级费率以及每笔需要的手续费 //获取用户对应等级费率以及每笔需要的手续费
RateEntity gradeRate = getGradeRate(userEntity.getLevel(), request.getPayChannel()); RateEntity gradeRate = getGradeRate(userEntity.getLevel(), request.getPayChannel());
...@@ -739,16 +838,17 @@ public class PayApiService { ...@@ -739,16 +838,17 @@ public class PayApiService {
dto.setOrderId(MakeOrderNum.makeOrderNum());//非订单号 dto.setOrderId(MakeOrderNum.makeOrderNum());//非订单号
dto.setMerchantId(ComCode.MERCHANT_ID);//商户号 dto.setMerchantId(ComCode.MERCHANT_ID);//商户号
dto.setMerchantKey(ComCode.MERCHANT_KEY); dto.setMerchantKey(ComCode.MERCHANT_KEY);
dto.setAmount(Integer.valueOf(request.getAmount())*100);//订单金额,单位为分 dto.setAmount(Integer.valueOf(request.getAmount()) * 100);//订单金额,单位为分
dto.setTrxType(3);//交易类型,默认传3 dto.setTrxType(3);//交易类型,默认传3
dto.setType(cardEntity.getCardType().equals("D")?6:5);//5 借记卡 只能 D0 6 贷记卡 D0 t1 ,表中 银行卡类型 D储蓄卡 C信用卡' dto.setType(cardEntity.getCardType().equals("D") ? 6 : 5);//5 借记卡 只能 D0 6 贷记卡 D0 t1 ,表中 银行卡类型 D储蓄卡 C信用卡'
dto.setBankNo(cardEntity.getCardNo());//支付卡号 dto.setBankNo(cardEntity.getCardNo());//支付卡号
dto.setCvn2(request.getCvn2());//安全码 dto.setCvn2(request.getCvn2());//安全码
dto.setPhone(cardEntity.getCardMobile());//支付卡预留手机号 dto.setPhone(cardEntity.getCardMobile());//支付卡预留手机号
dto.setExpired(request.getExpireDate());//信用卡有效期(MMYY) dto.setExpired(request.getExpireDate());//信用卡有效期(MMYY)
dto.setUserFee(amount<200 ? Integer.valueOf(ComCode.EXTRA_RATE) : amount);//手续费 单位:分 ,D0 业务必传,商家约定
if(cardEntity.getCardType().equals("C")){ dto.setUserFee(amount < 200 ? Integer.valueOf(ComCode.EXTRA_RATE) : amount);//手续费 单位:分 ,D0 业务必传,商家约定
if(cardEntityDebit == null){ if (cardEntity.getCardType().equals("C")) {
if (cardEntityDebit == null) {
throw new MyException("还没有结算卡!"); throw new MyException("还没有结算卡!");
} }
dto.setSettleBankName(cardEntityDebit.getBankName());//结算银行 D0 业务必传 dto.setSettleBankName(cardEntityDebit.getBankName());//结算银行 D0 业务必传
...@@ -760,15 +860,20 @@ public class PayApiService { ...@@ -760,15 +860,20 @@ public class PayApiService {
dto.setNotifyUrl(ComCode.NOTIFY_CALLBACK_URL);//通知url dto.setNotifyUrl(ComCode.NOTIFY_CALLBACK_URL);//通知url
dto.setFrontUrl(ComCode.NOTIFY_CALLBACK_URL);//前台地址url(保留) dto.setFrontUrl(ComCode.NOTIFY_CALLBACK_URL);//前台地址url(保留)
dto.setTimestamp(System.currentTimeMillis()); dto.setTimestamp(System.currentTimeMillis());
logger.debug("HL4支付请求参数, expireDate: {}, cvn2: {}, cardMobile: {}, " +
"cardNo: {}, settleBankName: {}, settleBankNo: {}, settleBankPhone:{}, " +
"name:{}, certificateCode:{}" ,request.getExpireDate(),request.getCvn2(),
cardEntity.getCardMobile(),cardEntity.getCardNo(),cardEntityDebit.getBankName(),cardEntityDebit.getCardNo(),
cardEntityDebit.getCardMobile(),userDetail.getRealName(),userDetail.getIdCard());
JSONObject jsonObject = juHeZhongPayService.quickPay(dto); JSONObject jsonObject = juHeZhongPayService.quickPay(dto);
logger.debug("HL4支付返回结果信息:{}"+jsonObject.toJSONString()); logger.debug("HL4支付返回结果信息:{}" + jsonObject.toJSONString());
payBackDto.setMessage(jsonObject.getString("msg")); payBackDto.setMessage(jsonObject.getString("msg"));
if("0000".equals(jsonObject.get("code"))){ if ("0000".equals(jsonObject.get("code"))) {
//订单支付成功,则进行一次查询,修改订单状态 //订单支付成功,则进行一次查询,修改订单状态
this.notifyPay(orderEntity); this.notifyPay(orderEntity);
return payBackDto; return payBackDto;
}else{ } else {
throw new MyException(jsonObject.getString("msg")); throw new MyException(jsonObject.getString("msg"));
} }
...@@ -776,119 +881,122 @@ public class PayApiService { ...@@ -776,119 +881,122 @@ public class PayApiService {
/** /**
* huanqiuhuiju 快捷支付 * huanqiuhuiju 快捷支付
*
* @param request * @param request
* @return * @return
*/ */
public PayBackDto huanqiuhujuPay(UserEntity userEntity, OrderEntity orderEntity, JuHeZhongPayRequest request,CardEntity cardEntity) throws Exception { public PayBackDto huanqiuhujuPay(UserEntity userEntity, OrderEntity orderEntity, JuHeZhongPayRequest request, CardEntity cardEntity) throws Exception {
PayBackDto payBackDto = new PayBackDto(); PayBackDto payBackDto = new PayBackDto();
JSONObject dto = new JSONObject(); JSONObject dto = new JSONObject();
String orderId = IdGen.randomBase62(32); String orderId = IdGen.randomBase62(32);
RateEntity rateEntity = new RateEntity(); RateEntity rateEntity = new RateEntity();
rateEntity.setUserLevel(userEntity.getLevel()); rateEntity.setUserLevel(userEntity.getLevel());
rateEntity.setPayMethod("quick"); rateEntity.setPayMethod("quick");
rateEntity.setPayChannel(ComCode.PAYCHANNEL_HUANQIUHUIJU); rateEntity.setPayChannel(ComCode.PAYCHANNEL_HUANQIUHUIJU);
rateEntity = userService.getRateByLevel(rateEntity); rateEntity = userService.getRateByLevel(rateEntity);
dto.put("transcode","300");// 交易码 dto.put("transcode", "300");// 交易码
dto.put("version","0100"); // 版本号 dto.put("version", "0100"); // 版本号
dto.put("ordersn", MakeOrderNum.makeOrderNum()); // 流水号 每次交易都唯一 dto.put("ordersn", MakeOrderNum.makeOrderNum()); // 流水号 每次交易都唯一
dto.put("merchno",ComCode.HUANQIUHUIJU_MERCHANT_ID); // 商户号 dto.put("merchno", ComCode.HUANQIUHUIJU_MERCHANT_ID); // 商户号
dto.put("dsorderid", orderId); // 订单号 唯一 dto.put("dsorderid", orderId); // 订单号 唯一
dto.put("txnAmt",request.getAmount()); // 交易金额 dto.put("txnAmt", request.getAmount()); // 交易金额
dto.put("txnRate",String.valueOf(Double.valueOf(rateEntity.getRate())*100));// 费率 dto.put("txnRate", String.valueOf(Double.valueOf(rateEntity.getRate()) * 100));// 费率
dto.put("siglePrice",rateEntity.getSiglePrice() ); // 单笔价格 dto.put("siglePrice", rateEntity.getSiglePrice()); // 单笔价格
dto.put("merchno",ComCode.HUANQIUHUIJU_MERCHANT_ID); // 商户号 dto.put("merchno", ComCode.HUANQIUHUIJU_MERCHANT_ID); // 商户号
dto.put("realName",userEntity.getUserDetail().getRealName()); // 真实姓名 dto.put("realName", userEntity.getUserDetail().getRealName()); // 真实姓名
dto.put("idCardNo",userEntity.getUserDetail().getIdCard()); // 身份证号 dto.put("idCardNo", userEntity.getUserDetail().getIdCard()); // 身份证号
dto.put("bankCardNo",cardEntity.getCardNo());// 银行卡号 dto.put("bankCardNo", cardEntity.getCardNo());// 银行卡号
dto.put("bankCode",cardEntity.getBelongBank()); // 银行代码 dto.put("bankCode", cardEntity.getBelongBank()); // 银行代码
dto.put("bankName",cardEntity.getBankName()); // 消费卡银行名称 dto.put("bankName", cardEntity.getBankName()); // 消费卡银行名称
dto.put("phone",cardEntity.getCardMobile()); // 手机号 dto.put("phone", cardEntity.getCardMobile()); // 手机号
dto.put("cvn2",request.getCvn2()); dto.put("cvn2", request.getCvn2());
dto.put("expireDate",request.getExpireDate()); dto.put("expireDate", request.getExpireDate());
dto.put("notifyUrl", Global.getConfig("project.access.url")+"/api/pay/notifyHuanqiuhuijuPay"); dto.put("notifyUrl", Global.getConfig("project.access.url") + "/api/pay/notifyHuanqiuhuijuPay");
dto.put("settleBankCode",userEntity.getUserDetail().getCard().getBelongBank()); // 结算银行代码 dto.put("settleBankCode", userEntity.getUserDetail().getCard().getBelongBank()); // 结算银行代码
dto.put("settleCardNo",userEntity.getUserDetail().getCard().getCardNo()); // 结算银行卡 dto.put("settleCardNo", userEntity.getUserDetail().getCard().getCardNo()); // 结算银行卡
dto.put("settlePhone",userEntity.getUserDetail().getCard().getCardMobile()); // 结算手机号 dto.put("settlePhone", userEntity.getUserDetail().getCard().getCardMobile()); // 结算手机号
dto.put("settleCardBankName",userEntity.getUserDetail().getCard().getBankName()); // 结算卡银行名称 dto.put("settleCardBankName", userEntity.getUserDetail().getCard().getBankName()); // 结算卡银行名称
System.out.println(dto.toJSONString()); System.out.println(dto.toJSONString());
JSONObject jsonObject = huanqiuhuijuService.huanqiuhuijuPay(dto); JSONObject jsonObject = huanqiuhuijuService.huanqiuhuijuPay(dto);
if("0000".equals(jsonObject.get("returncode"))){ if ("0000".equals(jsonObject.get("returncode"))) {
payBackDto.setIsUrl("0"); payBackDto.setIsUrl("0");
payBackDto.setPayChannel(ComCode.PAYCHANNEL_HUANQIUHUIJU); payBackDto.setPayChannel(ComCode.PAYCHANNEL_HUANQIUHUIJU);
this.notifyPay(orderEntity); this.notifyPay(orderEntity);
return payBackDto; return payBackDto;
}else{ } else {
orderFail(orderEntity); orderFail(orderEntity);
throw new MyException(jsonObject.getString("errtext")); throw new MyException(jsonObject.getString("errtext"));
} }
} }
/** /**
* 支付宝支付 * 支付宝支付
*
* @param request * @param request
* @return * @return
* @throws AlipayApiException * @throws AlipayApiException
*/ */
@Transactional(readOnly = false) @Transactional(readOnly = false)
public PayBackDto aliPay(JuHeZhongPayRequest request) throws AlipayApiException { public PayBackDto aliPay(JuHeZhongPayRequest request) throws AlipayApiException {
// 1. 根据入参获取用户详情信息,包括支付卡片信息 // 1. 根据入参获取用户详情信息,包括支付卡片信息
UserEntity userEntity = userService.getUserInfo(new Request(request.getSubMerchantCode())); UserEntity userEntity = userService.getUserInfo(new Request(request.getSubMerchantCode()));
userEntity = userService.getUserDetailInfo(userEntity); userEntity = userService.getUserDetailInfo(userEntity);
// 2. 创建支付订单信息,并保存 // 2. 创建支付订单信息,并保存
String code = IdGen.randomBase62(64); String code = IdGen.randomBase62(64);
String payNo = ComCode.YYYYMMDDHHMM.format(new Date()) + IdGen.randomBase62(8); // 订单号 String payNo = ComCode.YYYYMMDDHHMM.format(new Date()) + IdGen.randomBase62(8); // 订单号
String payCode = IdGen.randomBase62(64); String payCode = IdGen.randomBase62(64);
DecimalFormat df = new DecimalFormat("######0.00"); DecimalFormat df = new DecimalFormat("######0.00");
List<Dict> list = DictUtils.getDictList("level_"+request.getLevel()); List<Dict> list = DictUtils.getDictList("level_" + request.getLevel());
String amount = "398"; String amount = "398";
if(list != null && list.size()>0){ if (list != null && list.size() > 0) {
amount = list.get(0).getValue(); amount = list.get(0).getValue();
} }
// 创建订单保存 // 创建订单保存
if("D".equals(request.getLevel())){ if ("D".equals(request.getLevel())) {
request.setSubject("升级成白银会员"); request.setSubject("升级成白银会员");
}else if("C".equals(request.getLevel())){ } else if ("C".equals(request.getLevel())) {
request.setSubject("升级成黄金会员"); request.setSubject("升级成黄金会员");
}else if("B".equals(request.getLevel())){ } else if ("B".equals(request.getLevel())) {
request.setSubject("升级成钻石会员"); request.setSubject("升级成钻石会员");
} }
OrderEntity orderEntity = new OrderEntity(code, request.getSubMerchantCode(), payNo, payCode,request.getPayMethod(), "ali", "1",amount , request.getLevel() + ":" + request.getSubject(), "","0", request.getCardCode()); OrderEntity orderEntity = new OrderEntity(code, request.getSubMerchantCode(), payNo, payCode, request.getPayMethod(), "ali", "1", amount, request.getLevel() + ":" + request.getSubject(), "", "0", request.getCardCode());
payDao.saveOrderInfo(orderEntity); payDao.saveOrderInfo(orderEntity);
if("B".equals(request.getLevel())){ if ("B".equals(request.getLevel())) {
UpgradeUserEntity upgradeUserEntity = new UpgradeUserEntity(); UpgradeUserEntity upgradeUserEntity = new UpgradeUserEntity();
upgradeUserEntity.setUserCode(request.getSubMerchantCode()); upgradeUserEntity.setUserCode(request.getSubMerchantCode());
upgradeUserEntity.setLevel(request.getLevel()); upgradeUserEntity.setLevel(request.getLevel());
upgradeUserEntity.setOrderCode(payCode); upgradeUserEntity.setOrderCode(payCode);
upgradeUserEntity.setStatus("0"); upgradeUserEntity.setStatus("0");
upgradeUserEntity.setAfterMobile(request.getAfterMobile()); upgradeUserEntity.setAfterMobile(request.getAfterMobile());
userService.addUpgradeUser(upgradeUserEntity); userService.addUpgradeUser(upgradeUserEntity);
} }
// 支付宝支付返回对应支付信息 // 支付宝支付返回对应支付信息
JSONObject dto = new JSONObject(); JSONObject dto = new JSONObject();
dto.put("payCode",payCode); dto.put("payCode", payCode);
dto.put("subject",request.getSubject()); dto.put("subject", request.getSubject());
dto.put("amount",amount); dto.put("amount", amount);
dto.put("body",new HashMap<>()); dto.put("body", new HashMap<>());
String body = alipayService.aliPay(dto); String body = alipayService.aliPay(dto);
PayBackDto payBackDto = new PayBackDto(); PayBackDto payBackDto = new PayBackDto();
payBackDto.setBody(body); payBackDto.setBody(body);
return payBackDto; return payBackDto;
} }
/** /**
* 提现 * 提现
*
* @param request * @param request
* @return * @return
* @throws AlipayApiException * @throws AlipayApiException
...@@ -900,7 +1008,7 @@ public class PayApiService { ...@@ -900,7 +1008,7 @@ public class PayApiService {
entity.setUserCode(request.getSubMerchantCode()); entity.setUserCode(request.getSubMerchantCode());
BalanceEntity balanceEntity = benefitSevice.getBalanceM(entity); BalanceEntity balanceEntity = benefitSevice.getBalanceM(entity);
if(balanceEntity!=null && StringUtils.isNotBlank(balanceEntity.getBalance()) && Double.valueOf(balanceEntity.getBalance())>= Double.valueOf(request.getAmount() )){ if (balanceEntity != null && StringUtils.isNotBlank(balanceEntity.getBalance()) && Double.valueOf(balanceEntity.getBalance()) >= Double.valueOf(request.getAmount())) {
// 1. 根据入参获取用户详情信息,包括支付卡片信息 // 1. 根据入参获取用户详情信息,包括支付卡片信息
UserEntity userEntity = userService.getUserInfo(new Request(request.getSubMerchantCode())); UserEntity userEntity = userService.getUserInfo(new Request(request.getSubMerchantCode()));
userEntity = userService.getUserDetailInfo(userEntity); userEntity = userService.getUserDetailInfo(userEntity);
...@@ -912,7 +1020,7 @@ public class PayApiService { ...@@ -912,7 +1020,7 @@ public class PayApiService {
String payNo = ComCode.YYYYMMDDHHMM.format(new Date()) + IdGen.randomBase62(8); // 订单号 String payNo = ComCode.YYYYMMDDHHMM.format(new Date()) + IdGen.randomBase62(8); // 订单号
String payCode = IdGen.randomBase62(20); String payCode = IdGen.randomBase62(20);
OrderEntity orderEntity = new OrderEntity(code, request.getSubMerchantCode(), payNo, payCode,ComCode.PAYMETHOD_PUTFORWARD, ComCode.PAYMETHOD_PUTFORWARD, "1",request.getAmount() , "提现", "","0", request.getCardCode()); OrderEntity orderEntity = new OrderEntity(code, request.getSubMerchantCode(), payNo, payCode, ComCode.PAYMETHOD_PUTFORWARD, ComCode.PAYMETHOD_PUTFORWARD, "1", request.getAmount(), "提现", "", "0", request.getCardCode());
payDao.saveOrderInfo(orderEntity); payDao.saveOrderInfo(orderEntity);
// 添加提现记录 // 添加提现记录
...@@ -929,26 +1037,26 @@ public class PayApiService { ...@@ -929,26 +1037,26 @@ public class PayApiService {
// dto.setEnterprisecode("00103082100008003000"); // dto.setEnterprisecode("00103082100008003000");
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
jsonObject.put("ThirdVoucher",payCode); // 转账凭证号 标示交易唯一性,同一客户上送的不可重复,建议格式:yyyymmddHHSS+8位系列 jsonObject.put("ThirdVoucher", payCode); // 转账凭证号 标示交易唯一性,同一客户上送的不可重复,建议格式:yyyymmddHHSS+8位系列
jsonObject.put("CcyCode","RMB"); // 货币类型 RMB-人民币 jsonObject.put("CcyCode", "RMB"); // 货币类型 RMB-人民币
jsonObject.put("OutAcctNo",ComCode.PINGANBANK_OUTACCTNO); // 付款人账户 扣款账户 jsonObject.put("OutAcctNo", ComCode.PINGANBANK_OUTACCTNO); // 付款人账户 扣款账户
jsonObject.put("OutAcctName",ComCode.PINGANBANK_OUTACCTNAME); // 付款人名称 付款账户户名 jsonObject.put("OutAcctName", ComCode.PINGANBANK_OUTACCTNAME); // 付款人名称 付款账户户名
jsonObject.put("OutAcctAddr","34343"); // 付款人地址 建议填写付款账户的分行、网点名称 非必输 jsonObject.put("OutAcctAddr", "34343"); // 付款人地址 建议填写付款账户的分行、网点名称 非必输
jsonObject.put("InAcctBankNode",cardEntity.getBelongBank()); // 收款人开户行行号 跨行转账建议必输。为人行登记在册的商业银行号 jsonObject.put("InAcctBankNode", cardEntity.getBelongBank()); // 收款人开户行行号 跨行转账建议必输。为人行登记在册的商业银行号
jsonObject.put("InAcctNo",cardEntity.getCardNo()); // 收款人账户 jsonObject.put("InAcctNo", cardEntity.getCardNo()); // 收款人账户
jsonObject.put("InAcctName",userEntity.getUserDetail().getRealName()); // 收款人账户户名 jsonObject.put("InAcctName", userEntity.getUserDetail().getRealName()); // 收款人账户户名
jsonObject.put("InAcctBankName",cardEntity.getBankName()); // 收款人开户行名称 jsonObject.put("InAcctBankName", cardEntity.getBankName()); // 收款人开户行名称
jsonObject.put("TranAmount",request.getAmount()); // 转出金额 如为XML报文,则直接输入输出以元为单位的浮点数值,如2.50 (两元五角) jsonObject.put("TranAmount", request.getAmount()); // 转出金额 如为XML报文,则直接输入输出以元为单位的浮点数值,如2.50 (两元五角)
jsonObject.put("UseEx","ZZZZZtestreturn"); // 资金用途 30个汉字。现金管理代理结算 非必输 jsonObject.put("UseEx", "ZZZZZtestreturn"); // 资金用途 30个汉字。现金管理代理结算 非必输
jsonObject.put("UnionFlag",cardEntity.getBelongBank().equals(ComCode.PINGANBANK_OUTACCTBANK)?1:0); // 行内跨行标志 1:行内转账,0:跨行转账 jsonObject.put("UnionFlag", cardEntity.getBelongBank().equals(ComCode.PINGANBANK_OUTACCTBANK) ? 1 : 0); // 行内跨行标志 1:行内转账,0:跨行转账
jsonObject.put("SysFlag","1"); // Y:加急 N:普通S:特急默认为N jsonObject.put("SysFlag", "1"); // Y:加急 N:普通S:特急默认为N
jsonObject.put("AddrFlag","1"); // 同城/异地标志 “1”—同城 “2”—异地;若无法区分,可默认送1-同城。 jsonObject.put("AddrFlag", "1"); // 同城/异地标志 “1”—同城 “2”—异地;若无法区分,可默认送1-同城。
JSONObject result = pingAnBankService.singleTransfer(dto,jsonObject); JSONObject result = pingAnBankService.singleTransfer(dto, jsonObject);
if(result.get("all") !=null){ if (result.get("all") != null) {
String str = result.getString("all"); String str = result.getString("all");
String reg = "[^\u4e00-\u9fa5]"; String reg = "[^\u4e00-\u9fa5]";
...@@ -970,12 +1078,12 @@ public class PayApiService { ...@@ -970,12 +1078,12 @@ public class PayApiService {
return response; return response;
} }
/** /**
* 回调 * 回调
*
* @param orderEntity * @param orderEntity
* @return * @return
* @throws Exception * @throws Exception
...@@ -990,33 +1098,33 @@ public class PayApiService { ...@@ -990,33 +1098,33 @@ public class PayApiService {
orderEntity = payDao.getOrder(orderEntity); orderEntity = payDao.getOrder(orderEntity);
JSONObject jsonObject = null; JSONObject jsonObject = null;
if(ComCode.PAYCHANNEL_HL3.equals(orderEntity.getPayChannel())){ if (ComCode.PAYCHANNEL_HL3.equals(orderEntity.getPayChannel())) {
dto.setMerchantId(ComCode.INTEGRAL_MERCHANT_ID); dto.setMerchantId(ComCode.INTEGRAL_MERCHANT_ID);
dto.setMerchantKey(ComCode.INTEGRAL_MERCHANT_KEY); dto.setMerchantKey(ComCode.INTEGRAL_MERCHANT_KEY);
jsonObject = juHeZhongPayIntegralService.query(dto); jsonObject = juHeZhongPayIntegralService.query(dto);
}else if(ComCode.PAYCHANNEL_HL1.equals(orderEntity.getPayChannel())){ } else if (ComCode.PAYCHANNEL_HL1.equals(orderEntity.getPayChannel())) {
jsonObject = juHeZhongPayService.query(dto); jsonObject = juHeZhongPayService.query(dto);
}else if(ComCode.PAYCHANNEL_HL2.equals(orderEntity.getPayChannel())){ } else if (ComCode.PAYCHANNEL_HL2.equals(orderEntity.getPayChannel())) {
dto.setMerchantId(ComCode.JFEN_MERCHANT_ID); dto.setMerchantId(ComCode.JFEN_MERCHANT_ID);
dto.setMerchantKey(ComCode.JFEN_MERCHANT_KEY); dto.setMerchantKey(ComCode.JFEN_MERCHANT_KEY);
jsonObject = juHeZhongPayJFenService.query(dto); jsonObject = juHeZhongPayJFenService.query(dto);
}else if(ComCode.PAYCHANNEL_HUANQIUHUIJU.equals(orderEntity.getPayChannel())){ } else if (ComCode.PAYCHANNEL_HUANQIUHUIJU.equals(orderEntity.getPayChannel())) {
orderEntity.setPayStatus("2"); orderEntity.setPayStatus("2");
payDao.updateOrderStatus(orderEntity); payDao.updateOrderStatus(orderEntity);
return orderEntity; return orderEntity;
} }
logger.debug("查询订单返回结果: {}"+jsonObject.toJSONString()); logger.debug("查询订单返回结果: {}" + jsonObject.toJSONString());
// 支付成功 // 支付成功
if("0000".equals(jsonObject.get("code"))){ if ("0000".equals(jsonObject.get("code"))) {
//订单已经支付成功,则不进行再次修改,可能存在多次回调,所以进行判断 //订单已经支付成功,则不进行再次修改,可能存在多次回调,所以进行判断
if(orderEntity.getPayStatus()!="2"){ if (orderEntity.getPayStatus() != "2") {
orderEntity.setPayStatus("2"); orderEntity.setPayStatus("2");
payDao.updateOrderStatus(orderEntity); payDao.updateOrderStatus(orderEntity);
} }
}else{ // 支付失败 } else { // 支付失败
orderFail(orderEntity); orderFail(orderEntity);
} }
orderEntity = payDao.getOrder(orderEntity); orderEntity = payDao.getOrder(orderEntity);
...@@ -1026,14 +1134,15 @@ public class PayApiService { ...@@ -1026,14 +1134,15 @@ public class PayApiService {
/** /**
* 回调 * 回调
*
* @param orderEntity * @param orderEntity
* @return * @return
* @throws Exception * @throws Exception
*/ */
@Transactional(readOnly = false) @Transactional(readOnly = false)
public OrderEntity aliPayNotifyPay(OrderEntity orderEntity,String code) throws Exception { public OrderEntity aliPayNotifyPay(OrderEntity orderEntity, String code) throws Exception {
if("TRADE_SUCCESS".equals(code)) { if ("TRADE_SUCCESS".equals(code)) {
orderEntity.setPayStatus("2"); orderEntity.setPayStatus("2");
payDao.updateOrderStatus(orderEntity); payDao.updateOrderStatus(orderEntity);
...@@ -1042,31 +1151,31 @@ public class PayApiService { ...@@ -1042,31 +1151,31 @@ public class PayApiService {
UserEntity userEntity = new UserEntity(); UserEntity userEntity = new UserEntity();
userEntity.setCode(orderEntity.getUserCode()); userEntity.setCode(orderEntity.getUserCode());
if(orderEntity.getSubject() != null && !"".equals(orderEntity.getSubject())){ if (orderEntity.getSubject() != null && !"".equals(orderEntity.getSubject())) {
userEntity.setLevel(orderEntity.getSubject().substring(0,1)); userEntity.setLevel(orderEntity.getSubject().substring(0, 1));
if("B".equals(userEntity.getLevel())){ if ("B".equals(userEntity.getLevel())) {
UpgradeUserEntity upgradeUserEntity = new UpgradeUserEntity(); UpgradeUserEntity upgradeUserEntity = new UpgradeUserEntity();
upgradeUserEntity.setUserCode(orderEntity.getUserCode()); upgradeUserEntity.setUserCode(orderEntity.getUserCode());
upgradeUserEntity.setLevel(userEntity.getLevel()); upgradeUserEntity.setLevel(userEntity.getLevel());
upgradeUserEntity.setStatus("1"); upgradeUserEntity.setStatus("1");
upgradeUserEntity.setOrderCode(orderEntity.getPayCode()); upgradeUserEntity.setOrderCode(orderEntity.getPayCode());
userService.updateUpgradeUser(upgradeUserEntity); userService.updateUpgradeUser(upgradeUserEntity);
}else{ } else {
userService.updateUserLevelByCode(userEntity); userService.updateUserLevelByCode(userEntity);
} }
} }
}else{ } else {
orderEntity.setPayStatus("4"); orderEntity.setPayStatus("4");
payDao.updateOrderStatus(orderEntity); payDao.updateOrderStatus(orderEntity);
orderEntity = payDao.getOrder(orderEntity); orderEntity = payDao.getOrder(orderEntity);
if(orderEntity.getSubject() != null && !"".equals(orderEntity.getSubject()) && "A".equals(orderEntity.getSubject().substring(0,1))){ if (orderEntity.getSubject() != null && !"".equals(orderEntity.getSubject()) && "A".equals(orderEntity.getSubject().substring(0, 1))) {
UpgradeUserEntity upgradeUserEntity = new UpgradeUserEntity(); UpgradeUserEntity upgradeUserEntity = new UpgradeUserEntity();
upgradeUserEntity.setUserCode(orderEntity.getUserCode()); upgradeUserEntity.setUserCode(orderEntity.getUserCode());
upgradeUserEntity.setLevel(orderEntity.getSubject().substring(0,1)); upgradeUserEntity.setLevel(orderEntity.getSubject().substring(0, 1));
upgradeUserEntity.setOrderCode(orderEntity.getPayCode()); upgradeUserEntity.setOrderCode(orderEntity.getPayCode());
upgradeUserEntity.setStatus("3"); upgradeUserEntity.setStatus("3");
userService.updateUpgradeUser(upgradeUserEntity); userService.updateUpgradeUser(upgradeUserEntity);
...@@ -1076,11 +1185,11 @@ public class PayApiService { ...@@ -1076,11 +1185,11 @@ public class PayApiService {
} }
public OrderEntity getOrder(OrderEntity orderEntity){ public OrderEntity getOrder(OrderEntity orderEntity) {
return payDao.getOrder(orderEntity); return payDao.getOrder(orderEntity);
} }
public OrderEntity getOrder(String payNo){ public OrderEntity getOrder(String payNo) {
OrderEntity orderEntity = new OrderEntity(); OrderEntity orderEntity = new OrderEntity();
orderEntity.setPayNo(payNo); orderEntity.setPayNo(payNo);
return payDao.getOrder(orderEntity); return payDao.getOrder(orderEntity);
...@@ -1090,12 +1199,12 @@ public class PayApiService { ...@@ -1090,12 +1199,12 @@ public class PayApiService {
* 交易超过7天则修改为交易失败 * 交易超过7天则修改为交易失败
*/ */
@Transactional(readOnly = false) @Transactional(readOnly = false)
public void updateOrderTiming(){ public void updateOrderTiming() {
// System.out.println("。。。。。。。定时任务。updateOrderTiming开始。。。。"); // System.out.println("。。。。。。。定时任务。updateOrderTiming开始。。。。");
OrderEntity orderEntity = new OrderEntity(); OrderEntity orderEntity = new OrderEntity();
orderEntity.setEndTime(DateUtils.getDateByDay("yyyy-MM-dd HH:mm:ss",-7)); orderEntity.setEndTime(DateUtils.getDateByDay("yyyy-MM-dd HH:mm:ss", -7));
List<OrderEntity> list = payDao.getOrderListTimeing(orderEntity); List<OrderEntity> list = payDao.getOrderListTimeing(orderEntity);
for(OrderEntity order:list){ for (OrderEntity order : list) {
order.setPayStatus("3"); order.setPayStatus("3");
payDao.updateOrderStatus(order); payDao.updateOrderStatus(order);
BenefitEntity benefitEntity = new BenefitEntity(); BenefitEntity benefitEntity = new BenefitEntity();
...@@ -1109,43 +1218,43 @@ public class PayApiService { ...@@ -1109,43 +1218,43 @@ public class PayApiService {
* 查询交易的状态并修改 * 查询交易的状态并修改
*/ */
@Transactional(readOnly = false) @Transactional(readOnly = false)
public void updateOrders(){ public void updateOrders() {
// System.out.println("。。。。。。。定时任务。updateOrders开始。。。。"); // System.out.println("。。。。。。。定时任务。updateOrders开始。。。。");
try { try {
OrderEntity orderEntity = new OrderEntity(); OrderEntity orderEntity = new OrderEntity();
orderEntity.setStartTime(DateUtils.getDateByDay("yyyy-MM-dd HH:mm:ss",-7)); orderEntity.setStartTime(DateUtils.getDateByDay("yyyy-MM-dd HH:mm:ss", -7));
orderEntity.setEndTime(DateUtils.formatDate(DateUtils.addHours(new Date(),-12),"yyyy-MM-dd HH:mm:ss")); orderEntity.setEndTime(DateUtils.formatDate(DateUtils.addHours(new Date(), -12), "yyyy-MM-dd HH:mm:ss"));
List<OrderEntity> list = payDao.getOrderListTimeing(orderEntity); List<OrderEntity> list = payDao.getOrderListTimeing(orderEntity);
for(OrderEntity order:list){ for (OrderEntity order : list) {
// 快捷支付 // 快捷支付
if("quick".equals(order.getPayMethod())){ if ("quick".equals(order.getPayMethod())) {
QuickDto dto = new QuickDto(); QuickDto dto = new QuickDto();
dto.setOrderId(order.getPayCode()); dto.setOrderId(order.getPayCode());
dto.setTimestamp(System.currentTimeMillis()); dto.setTimestamp(System.currentTimeMillis());
JSONObject jsonObject = null; JSONObject jsonObject = null;
if(ComCode.PAYCHANNEL_HL3.equals(order.getPayChannel())){ if (ComCode.PAYCHANNEL_HL3.equals(order.getPayChannel())) {
dto.setMerchantId(ComCode.MERCHANT_ID); dto.setMerchantId(ComCode.MERCHANT_ID);
dto.setMerchantKey(ComCode.MERCHANT_KEY); dto.setMerchantKey(ComCode.MERCHANT_KEY);
jsonObject = juHeZhongPayIntegralService.query(dto); jsonObject = juHeZhongPayIntegralService.query(dto);
}else if(ComCode.PAYCHANNEL_HL1.equals(order.getPayChannel())){ } else if (ComCode.PAYCHANNEL_HL1.equals(order.getPayChannel())) {
jsonObject = juHeZhongPayService.query(dto); jsonObject = juHeZhongPayService.query(dto);
} }
if(jsonObject!=null){ if (jsonObject != null) {
// System.out.println("查询订单返回结果:"+jsonObject.toJSONString()); // System.out.println("查询订单返回结果:"+jsonObject.toJSONString());
// 支付成功 // 支付成功
if("0000".equals(jsonObject.get("code"))){ if ("0000".equals(jsonObject.get("code"))) {
System.out.println("查询订单返回结果:"+jsonObject.toJSONString()); System.out.println("查询订单返回结果:" + jsonObject.toJSONString());
order.setPayStatus("2"); order.setPayStatus("2");
payDao.updateOrderStatus(order); payDao.updateOrderStatus(order);
}else{ // 支付失败 } else { // 支付失败
orderFail(order); orderFail(order);
} }
} }
}else if("put_forward".equals(order.getPayMethod())){ // 提现 } else if ("put_forward".equals(order.getPayMethod())) { // 提现
// 查询单笔转账 // 查询单笔转账
PingAnBankDto dto = new PingAnBankDto(); PingAnBankDto dto = new PingAnBankDto();
...@@ -1154,10 +1263,10 @@ public class PayApiService { ...@@ -1154,10 +1263,10 @@ public class PayApiService {
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
jsonObject.put("OrigThirdVoucher",order.getPayCode()); // 转账凭证号 推荐使用;使用4004接口上送的ThirdVoucher或者4014上送的SThirdVoucher jsonObject.put("OrigThirdVoucher", order.getPayCode()); // 转账凭证号 推荐使用;使用4004接口上送的ThirdVoucher或者4014上送的SThirdVoucher
JSONObject jsonObject1 = pingAnBankService.querySingleTransfer(dto,jsonObject); JSONObject jsonObject1 = pingAnBankService.querySingleTransfer(dto, jsonObject);
if("20".equals(jsonObject1.getString("Stt"))){// 交易成功 if ("20".equals(jsonObject1.getString("Stt"))) {// 交易成功
order.setPayStatus("2"); order.setPayStatus("2");
payDao.updateOrderStatus(order); payDao.updateOrderStatus(order);
...@@ -1186,21 +1295,21 @@ public class PayApiService { ...@@ -1186,21 +1295,21 @@ public class PayApiService {
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
jsonObject.put("OrigThirdVoucher",payCode); // 转账凭证号 推荐使用;使用4004接口上送的ThirdVoucher或者4014上送的SThirdVoucher jsonObject.put("OrigThirdVoucher", payCode); // 转账凭证号 推荐使用;使用4004接口上送的ThirdVoucher或者4014上送的SThirdVoucher
JSONObject jsonObject1 = pingAnBankService.querySingleTransfer(dto,jsonObject); JSONObject jsonObject1 = pingAnBankService.querySingleTransfer(dto, jsonObject);
return jsonObject1; return jsonObject1;
} }
public BalanceEntity getPutForwardNum(JuHeZhongPayRequest request){ public BalanceEntity getPutForwardNum(JuHeZhongPayRequest request) {
BenefitEntity entity = new BenefitEntity(); BenefitEntity entity = new BenefitEntity();
entity.setUserCode(request.getSubMerchantCode()); entity.setUserCode(request.getSubMerchantCode());
BalanceEntity balanceEntity = benefitSevice.getBalanceM(entity); BalanceEntity balanceEntity = benefitSevice.getBalanceM(entity);
return balanceEntity; return balanceEntity;
} }
private void orderFail(OrderEntity orderEntity){ private void orderFail(OrderEntity orderEntity) {
orderEntity.setPayStatus("4"); orderEntity.setPayStatus("4");
payDao.updateOrderStatus(orderEntity); payDao.updateOrderStatus(orderEntity);
BenefitEntity benefitEntity = new BenefitEntity(); BenefitEntity benefitEntity = new BenefitEntity();
...@@ -1211,26 +1320,28 @@ public class PayApiService { ...@@ -1211,26 +1320,28 @@ public class PayApiService {
/** /**
* 获取对应用户等级的费率 * 获取对应用户等级的费率
*
* @param user_level * @param user_level
* @param pay_channel * @param pay_channel
* @return * @return
*/ */
public RateEntity getGradeRate(String user_level,String pay_channel){ public RateEntity getGradeRate(String user_level, String pay_channel) {
Map<String, String> maps = Maps.newHashMap(); Map<String, String> maps = Maps.newHashMap();
maps.put("user_level",user_level); maps.put("user_level", user_level);
maps.put("pay_channel",pay_channel); maps.put("pay_channel", pay_channel);
RateEntity rateList = rateDao.getRateEntity(maps); RateEntity rateList = rateDao.getRateEntity(maps);
return rateList; return rateList;
} }
/** /**
* 获取用户当日已使用额度,已支付完成时间为准 * 获取用户当日已使用额度,已支付完成时间为准
*
* @param user_code * @param user_code
* @param pay_channel * @param pay_channel
* @return * @return
*/ */
public Double getUseNum(String user_code,String pay_channel){ public Double getUseNum(String user_code, String pay_channel) {
HashMap<String, String> maps = Maps.newHashMap(); HashMap<String, String> maps = Maps.newHashMap();
maps.put("user_code", user_code); maps.put("user_code", user_code);
maps.put("pay_channel", pay_channel); maps.put("pay_channel", pay_channel);
...@@ -1240,25 +1351,27 @@ public class PayApiService { ...@@ -1240,25 +1351,27 @@ public class PayApiService {
/** /**
* 计算当日剩余额度 * 计算当日剩余额度
*
* @param dayLimit * @param dayLimit
* @param num * @param num
* @return * @return
*/ */
public BigDecimal getLimitNum(String dayLimit,Double num){ public BigDecimal getLimitNum(String dayLimit, Double num) {
return BigDecimal.valueOf(Long.valueOf(dayLimit)).subtract(BigDecimal.valueOf(num)); return BigDecimal.valueOf(Long.valueOf(dayLimit)).subtract(BigDecimal.valueOf(num));
} }
/** /**
* 计算当日剩余额度(集中) * 计算当日剩余额度(集中)
*
* @param user_level * @param user_level
* @param user_code * @param user_code
* @param pay_channel * @param pay_channel
* @return * @return
*/ */
public BigDecimal getLimitNumber(String user_level,String user_code,String pay_channel){ public BigDecimal getLimitNumber(String user_level, String user_code, String pay_channel) {
Map<String, String> maps = Maps.newHashMap(); Map<String, String> maps = Maps.newHashMap();
maps.put("user_level",user_level); maps.put("user_level", user_level);
maps.put("pay_channel",pay_channel); maps.put("pay_channel", pay_channel);
maps.put("user_code", user_code); maps.put("user_code", user_code);
RateEntity rateList = rateDao.getRateEntity(maps); RateEntity rateList = rateDao.getRateEntity(maps);
Double num = payDao.getLastLimit(maps); Double num = payDao.getLastLimit(maps);
...@@ -1267,11 +1380,12 @@ public class PayApiService { ...@@ -1267,11 +1380,12 @@ public class PayApiService {
/** /**
* 计算每笔交易手续费的和 * 计算每笔交易手续费的和
*
* @param gradeRate * @param gradeRate
* @param amount * @param amount
* @return * @return
*/ */
public int calculationAmount(RateEntity gradeRate,String amount){ public int calculationAmount(RateEntity gradeRate, String amount) {
Double siglePrice = Double.valueOf(gradeRate.getSiglePrice()); Double siglePrice = Double.valueOf(gradeRate.getSiglePrice());
Double rate = Double.valueOf(gradeRate.getRate()); Double rate = Double.valueOf(gradeRate.getRate());
Double amountDouble = Double.valueOf(amount); Double amountDouble = Double.valueOf(amount);
......
...@@ -14,6 +14,7 @@ import com.thinkgem.jeesite.modules.user.entity.IdentityCodeEntity; ...@@ -14,6 +14,7 @@ import com.thinkgem.jeesite.modules.user.entity.IdentityCodeEntity;
import com.thinkgem.jeesite.modules.user.entity.Level; import com.thinkgem.jeesite.modules.user.entity.Level;
import com.thinkgem.jeesite.modules.user.entity.UserEntity; import com.thinkgem.jeesite.modules.user.entity.UserEntity;
import com.thinkgem.jeesite.modules.user.service.UserApiService; import com.thinkgem.jeesite.modules.user.service.UserApiService;
import org.apache.commons.lang3.math.NumberUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -24,6 +25,7 @@ import org.springframework.web.bind.annotation.RestController; ...@@ -24,6 +25,7 @@ import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.regex.Pattern;
/** /**
* 前端用户相关 * 前端用户相关
...@@ -33,6 +35,9 @@ import java.util.Map; ...@@ -33,6 +35,9 @@ import java.util.Map;
public class UserApiController { public class UserApiController {
/** log */ /** log */
private static Logger logger = LoggerFactory.getLogger(UserApiController.class); private static Logger logger = LoggerFactory.getLogger(UserApiController.class);
/** 手机号码校验 */
private static final Pattern regex = Pattern.compile("^(((1[3-9]))\\d{9})|(0\\d{2}-\\d{8})|(0\\d{3}-\\d{7})$");
@Autowired @Autowired
private UserApiService userService; private UserApiService userService;
...@@ -322,11 +327,20 @@ public class UserApiController { ...@@ -322,11 +327,20 @@ public class UserApiController {
Response resp = new Response(); Response resp = new Response();
try { try {
// 判断业务入参是否为空 // 判断业务入参是否为空
if (StringUtils.isBlank(request.getSubMerchantCode()) || StringUtils.isBlank(request.getIdentityCode()) || StringUtils.isBlank(request.getFunction()) || StringUtils.isBlank(request.getCardType()) || StringUtils.isBlank(request.getCardNo()) || StringUtils.isBlank(request.getCardMobile()) || StringUtils.isBlank(request.getBelongBank()) || StringUtils.isBlank(request.getCardBank())) { if (StringUtils.isBlank(request.getSubMerchantCode()) ||
// StringUtils.isBlank(request.getIdentityCode()) ||
StringUtils.isBlank(request.getFunction()) || StringUtils.isBlank(request.getCardType()) || StringUtils.isBlank(request.getCardNo()) || StringUtils.isBlank(request.getCardMobile()) || StringUtils.isBlank(request.getBelongBank()) || StringUtils.isBlank(request.getCardBank())) {
resp.setStatus(ComCode.STATUS_CODE_4001); resp.setStatus(ComCode.STATUS_CODE_4001);
resp.setMessage(ComCode.STATUS_CODE_4001_DESC); resp.setMessage(ComCode.STATUS_CODE_4001_DESC);
return resp; return resp;
} }
//进行初步校验
if(!NumberUtils.isNumber(request.getCardNo())){
throw new MyException("卡号格式不正确");
}
if(!regex.matcher(request.getCardMobile()).matches()){
throw new MyException("手机号码格式不正确");
}
// 根据手机号 + 使用场景 + 验证码查询 // 根据手机号 + 使用场景 + 验证码查询
request.setMobile(request.getCardMobile()); request.setMobile(request.getCardMobile());
// IdentityCodeEntity identityCodeEntity = userService.getIdentifyCode(request); // IdentityCodeEntity identityCodeEntity = userService.getIdentifyCode(request);
...@@ -433,6 +447,19 @@ public class UserApiController { ...@@ -433,6 +447,19 @@ public class UserApiController {
resp.setMessage(ComCode.STATUS_CODE_4001_DESC); resp.setMessage(ComCode.STATUS_CODE_4001_DESC);
return resp; return resp;
} }
//身份证参数格式校验
if(!verifyIdentityCard(request.getIdCard())){
throw new MyException("身份证号码格式不正确");
}
//进行卡片校验
if(!NumberUtils.isNumber(request.getCardNo())){
throw new MyException("卡号格式不正确");
}
//手机号码校验
if(!regex.matcher(request.getCardMobile()).matches()){
throw new MyException("手机号码格式不正确");
}
// // 根据手机号 + 使用场景 + 验证码查询 // // 根据手机号 + 使用场景 + 验证码查询
// request.setMobile(request.getCardMobile()); // request.setMobile(request.getCardMobile());
// IdentityCodeEntity identityCodeEntity = userService.getIdentifyCode(request); // IdentityCodeEntity identityCodeEntity = userService.getIdentifyCode(request);
...@@ -650,4 +677,12 @@ public class UserApiController { ...@@ -650,4 +677,12 @@ public class UserApiController {
return resp; return resp;
} }
private boolean verifyIdentityCard(String num) {
String reg = "^\\d{15}$|^\\d{17}[0-9Xx]$";
if (!num.matches(reg)) {
return false;
}
return true;
}
} }
...@@ -113,4 +113,6 @@ public interface UserApiDao { ...@@ -113,4 +113,6 @@ public interface UserApiDao {
List<UserEntity> getMyInviting(UserRequest request); List<UserEntity> getMyInviting(UserRequest request);
//激活用户数量 //激活用户数量
public Integer getActiveUserNum(UserRequest request); public Integer getActiveUserNum(UserRequest request);
public Integer checkNoUser();
} }
...@@ -20,6 +20,8 @@ import com.thinkgem.jeesite.modules.user.bean.UserRequest; ...@@ -20,6 +20,8 @@ import com.thinkgem.jeesite.modules.user.bean.UserRequest;
import com.thinkgem.jeesite.modules.user.dao.UserApiDao; import com.thinkgem.jeesite.modules.user.dao.UserApiDao;
import com.thinkgem.jeesite.modules.user.entity.*; import com.thinkgem.jeesite.modules.user.entity.*;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy; import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -42,6 +44,8 @@ import java.util.List; ...@@ -42,6 +44,8 @@ import java.util.List;
@Lazy(false) @Lazy(false)
@Transactional @Transactional
public class UserApiService { public class UserApiService {
/** log */
private static Logger logger = LoggerFactory.getLogger(UserApiService.class);
@Autowired @Autowired
private UserApiDao userDao; private UserApiDao userDao;
...@@ -130,11 +134,14 @@ public class UserApiService { ...@@ -130,11 +134,14 @@ public class UserApiService {
} }
@Transactional(readOnly = false) @Transactional(readOnly = false)
public UserEntity signUp(UserRequest request) { public UserEntity signUp(UserRequest request) throws MyException {
// 保存用户信息 // 保存用户信息
String code = IdGen.randomBase62(64); String code = IdGen.randomBase62(64);
UserEntity recommend = userDao.checkRecommend(request); UserEntity recommend = userDao.checkRecommend(request);
UserEntity userEntity = new UserEntity(code, "", request.getMobile(), MD5.sign(request.getNewPassword(), ComCode.signCode, "utf-8"), request.getRecommendedMobile(), ","+recommend.getRecommendedPath() + recommend.getId() + ",", recommend.getBelongTo()); if(recommend==null || userDao.checkNoUser() >0){
throw new MyException("推荐人手机号码不存在");
}
UserEntity userEntity = new UserEntity(code, "", request.getMobile(), MD5.sign(request.getNewPassword(), ComCode.signCode, "utf-8"), request.getRecommendedMobile(), recommend==null?"0"+",":recommend.getRecommendedPath() + recommend.getId() + ",", recommend.getBelongTo());
userDao.signUp(userEntity); userDao.signUp(userEntity);
UserEntity user = userDao.getUserInfo(new Request(code)); UserEntity user = userDao.getUserInfo(new Request(code));
// 以下两行代码应Android要求,增加空detail和card // 以下两行代码应Android要求,增加空detail和card
...@@ -237,12 +244,15 @@ public class UserApiService { ...@@ -237,12 +244,15 @@ public class UserApiService {
// 实名认证 // 实名认证
@Transactional(readOnly = false) @Transactional(readOnly = false)
public void certification(UserRequest request) throws MyException, Exception { public void certification(UserRequest request) throws MyException, Exception {
logger.debug("进入实名认证service");
// 更新用户详情 // 更新用户详情
UserDetailEntity userDetailEntity = new UserDetailEntity(IdGen.randomBase62(64), request.getSubMerchantCode(), request.getRealName(), request.getIdCard(), request.getProvince()+request.getCity(), "", "", "", ""); UserDetailEntity userDetailEntity = new UserDetailEntity(IdGen.randomBase62(64), request.getSubMerchantCode(), request.getRealName(), request.getIdCard(), request.getProvince()+request.getCity(), "", "", "", "");
if (userDao.getUserDetailByCode(new UserEntity(request.getSubMerchantCode())) == null) { if (userDao.getUserDetailByCode(new UserEntity(request.getSubMerchantCode())) == null) {
userDao.saveUserDetail(userDetailEntity); userDao.saveUserDetail(userDetailEntity);
logger.debug("存完userdetail信息");
} else { } else {
userDao.updateUserDetail(userDetailEntity); userDao.updateUserDetail(userDetailEntity);
logger.debug("修改完userdetail信息");
} }
// 为用户卡注册subMerchantId // 为用户卡注册subMerchantId
String type = "1"; // 默认将卡片添加为对私 String type = "1"; // 默认将卡片添加为对私
...@@ -255,6 +265,7 @@ public class UserApiService { ...@@ -255,6 +265,7 @@ public class UserApiService {
// 更新银行卡详情 // 更新银行卡详情
CardEntity cardStatusEntity = new CardEntity(request.getSubMerchantCode(), "N"); CardEntity cardStatusEntity = new CardEntity(request.getSubMerchantCode(), "N");
userDao.updateCardStatus(cardStatusEntity); userDao.updateCardStatus(cardStatusEntity);
logger.debug("修改完银行卡信息");
CardEntity cardEntity = new CardEntity(IdGen.randomBase62(64), request.getSubMerchantCode(), "D", request.getCardNo(), request.getCardMobile(), request.getBelongBank(), request.getCardBank(), request.getCardPlace(), "Y", subMerchantId, "", type, status, request.getProvince(), request.getCity()); CardEntity cardEntity = new CardEntity(IdGen.randomBase62(64), request.getSubMerchantCode(), "D", request.getCardNo(), request.getCardMobile(), request.getBelongBank(), request.getCardBank(), request.getCardPlace(), "Y", subMerchantId, "", type, status, request.getProvince(), request.getCity());
userDao.addNewCard(cardEntity); userDao.addNewCard(cardEntity);
...@@ -267,10 +278,14 @@ public class UserApiService { ...@@ -267,10 +278,14 @@ public class UserApiService {
// 与实名用户的推荐人,推荐了4名及以上人员实名 // 与实名用户的推荐人,推荐了4名及以上人员实名
if (countRecommend.size() >= 4) { if (countRecommend.size() >= 4) {
String[] recommendPath = countRecommend.get(0).getRecommendedPath().split(","); String[] recommendPath = countRecommend.get(0).getRecommendedPath().split(",");
UserEntity recommendedUser = userDao.getUserInfoById(recommendPath[recommendPath.length - 1]); UserEntity recommendedUser = userDao.getUserInfoById(recommendPath[recommendPath.length - 1]);
recommendedUser.setLevel("D"); // 实名用户的推荐人等级由E(青铜)升为D(白银)
// 实名用户的推荐人等级由E(青铜)升为D(白银) if (recommendedUser.getLevel().equals("E")){
userDao.updateUserLevel(recommendedUser); recommendedUser.setLevel("D");
userDao.updateUserLevel(recommendedUser);
}
RateEntity rateEntityParam = new RateEntity(); RateEntity rateEntityParam = new RateEntity();
rateEntityParam.setUserLevel("D"); rateEntityParam.setUserLevel("D");
...@@ -371,10 +386,11 @@ public class UserApiService { ...@@ -371,10 +386,11 @@ public class UserApiService {
userEntity.setCode(request.getSubMerchantCode()); userEntity.setCode(request.getSubMerchantCode());
userEntity.setStatus("2");//根据第三方接口返回信息更改用户状态 userEntity.setStatus("2");//根据第三方接口返回信息更改用户状态
userDao.updateUserInfo(userEntity); userDao.updateUserInfo(userEntity);
logger.debug("更新用户信息完成");
userSubMchIdRequest.setPayChannel(ComCode.PAYCHANNEL_HL2); userSubMchIdRequest.setPayChannel(ComCode.PAYCHANNEL_HL2);
userSubMchIdRequest.setSubmchid(JFenSubMchId); userSubMchIdRequest.setSubmchid(JFenSubMchId);
this.addUserSubmchid(userSubMchIdRequest); this.addUserSubmchid(userSubMchIdRequest);
logger.debug("添加用户submchid完成");
rate.setPayChannel(ComCode.PAYCHANNEL_HL2); rate.setPayChannel(ComCode.PAYCHANNEL_HL2);
rate.setPayMethod("quick");//全部写死是quick rate.setPayMethod("quick");//全部写死是quick
RateEntity rateEntity = this.getRateByLevel(rate); RateEntity rateEntity = this.getRateByLevel(rate);
...@@ -504,6 +520,7 @@ public class UserApiService { ...@@ -504,6 +520,7 @@ public class UserApiService {
// JFen 商户入网 // JFen 商户入网
public String merchantInJFenJuhezhong(UserRequest request) throws MyException, Exception { public String merchantInJFenJuhezhong(UserRequest request) throws MyException, Exception {
logger.debug("开始商户入网");
UserEntity userEntity = userDao.getUserInfo(request); UserEntity userEntity = userDao.getUserInfo(request);
BelongBankEntity belongBankEntity = userDao.getBelongBankEntity(request); BelongBankEntity belongBankEntity = userDao.getBelongBankEntity(request);
if (userEntity == null) { if (userEntity == null) {
...@@ -543,8 +560,10 @@ public class UserApiService { ...@@ -543,8 +560,10 @@ public class UserApiService {
JSONObject jsonObject = juHeZhongPayJFenService.merchantIn(dto); JSONObject jsonObject = juHeZhongPayJFenService.merchantIn(dto);
if (!"0000".equals(jsonObject.getString("code"))) { if (!"0000".equals(jsonObject.getString("code"))) {
logger.debug("商户入网失败,jsonObject: {} "+jsonObject);
throw new MyException(jsonObject.getString("msg")); throw new MyException(jsonObject.getString("msg"));
} }
logger.debug("商户入网完成");
return jsonObject.getString("subMchId"); return jsonObject.getString("subMchId");
} }
...@@ -574,6 +593,7 @@ public class UserApiService { ...@@ -574,6 +593,7 @@ public class UserApiService {
* @throws Exception * @throws Exception
*/ */
public void merchantFeelJFen(String subMchId, RateEntity rateEntity) throws MyException, Exception { public void merchantFeelJFen(String subMchId, RateEntity rateEntity) throws MyException, Exception {
logger.debug("进入增加或修改支付用户费率开始");
// 修改费率 // 修改费率
JSONObject dto = new JSONObject(); JSONObject dto = new JSONObject();
dto.put("subMchId",subMchId); dto.put("subMchId",subMchId);
...@@ -588,8 +608,10 @@ public class UserApiService { ...@@ -588,8 +608,10 @@ public class UserApiService {
} }
if (!"0000".equals(jsonObject.getString("code"))) { if (!"0000".equals(jsonObject.getString("code"))) {
logger.debug("增加或修改用户费率失败, jsonObject: {}",jsonObject);
throw new MyException(jsonObject.getString("msg")); throw new MyException(jsonObject.getString("msg"));
} }
logger.debug("增加或修改用户费率结束");
} }
/** /**
......
...@@ -126,7 +126,9 @@ ...@@ -126,7 +126,9 @@
<select id="getBenefitSum" resultType="com.thinkgem.jeesite.modules.pay.entity.BenefitEntity"> <select id="getBenefitSum" resultType="com.thinkgem.jeesite.modules.pay.entity.BenefitEntity">
SELECT SELECT
SUM(b.amount) AS amount CAST(
sum(b.amount) AS DECIMAL (19, 3)
) AS amount
FROM youka_benefit b FROM youka_benefit b
LEFT JOIN youka_orders o ON o.`code` = b.order_code LEFT JOIN youka_orders o ON o.`code` = b.order_code
WHERE b.user_code = #{userCode} WHERE b.user_code = #{userCode}
...@@ -189,4 +191,18 @@ ...@@ -189,4 +191,18 @@
AND update_date >= date(now()) AND update_date >= date(now())
AND update_date &lt; DATE_ADD(date(now()), INTERVAL 1 DAY) AND update_date &lt; DATE_ADD(date(now()), INTERVAL 1 DAY)
</select> </select>
<select id="getUpUser" resultType="com.thinkgem.jeesite.modules.pay.entity.UserRateEntity">
SELECT
yu.code AS userCode,
yu.level AS userLevel,
yr.rate AS rate
FROM
youka_users yu
LEFT JOIN youka_rate yr ON yu.level = yr.user_level AND yr.pay_method = 'quick'
WHERE
yu.id = #{id}
AND
yr.pay_channel = #{pay_channel}
</select>
</mapper> </mapper>
\ No newline at end of file
...@@ -79,7 +79,7 @@ ...@@ -79,7 +79,7 @@
FROM FROM
youka_users yu youka_users yu
WHERE WHERE
yu.recommended_mobile = #{recommendedMobile} yu.mobile = #{recommendedMobile}
LIMIT 1 LIMIT 1
</select> </select>
...@@ -925,4 +925,10 @@ ...@@ -925,4 +925,10 @@
recommended_mobile = (SELECT mobile FROM youka_users WHERE code = #{subMerchantCode}) recommended_mobile = (SELECT mobile FROM youka_users WHERE code = #{subMerchantCode})
</select> </select>
<select id="checkNoUser" resultType="java.lang.Integer">
SELECT
COUNT (id)
FROM
youka_users
</select>
</mapper> </mapper>
\ 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