Commit 8575dbee by tang

分润,部分校验等

parent a16cc3e6
package com.thinkgem.jeesite.modules.pay.api;
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.constant.ComCode;
import com.thinkgem.jeesite.common.utils.IdGen;
import com.thinkgem.jeesite.modules.commonError.MyException;
import com.thinkgem.jeesite.modules.pay.entity.BalanceEntity;
import com.thinkgem.jeesite.modules.pay.entity.OrderEntity;
......@@ -30,6 +32,7 @@ import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.text.DecimalFormat;
import java.util.*;
/**
......@@ -664,4 +667,36 @@ public class PayApiController {
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 {
//获取不同渠道最新使用的额度
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;
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.QuickDto;
import com.thinkgem.jeesite.modules.pay.juhezhong.utils.Bean2Map;
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 com.thinkgem.jeesite.modules.pay.juhezhong.utils.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
......@@ -27,7 +24,7 @@ import java.util.Map;
@Service
@Transactional(readOnly = true)
public class JuHeZhongPayJFenService {
private Logger logger = LoggerFactory.getLogger(Logger.class);
private Logger logger = LoggerFactory.getLogger(JuHeZhongPayJFenService.class);
/**
* 查询订单状态
......@@ -129,6 +126,19 @@ public class JuHeZhongPayJFenService {
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 {
JuHeZhongPayJFenService juHeZhongPayJFenService = new JuHeZhongPayJFenService();
......
......@@ -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.UserEntity;
import com.thinkgem.jeesite.modules.user.service.UserApiService;
import org.apache.commons.lang3.math.NumberUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -24,6 +25,7 @@ import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
/**
* 前端用户相关
......@@ -33,6 +35,9 @@ import java.util.Map;
public class UserApiController {
/** log */
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
private UserApiService userService;
......@@ -322,11 +327,20 @@ public class UserApiController {
Response resp = new Response();
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.setMessage(ComCode.STATUS_CODE_4001_DESC);
return resp;
}
//进行初步校验
if(!NumberUtils.isNumber(request.getCardNo())){
throw new MyException("卡号格式不正确");
}
if(!regex.matcher(request.getCardMobile()).matches()){
throw new MyException("手机号码格式不正确");
}
// 根据手机号 + 使用场景 + 验证码查询
request.setMobile(request.getCardMobile());
// IdentityCodeEntity identityCodeEntity = userService.getIdentifyCode(request);
......@@ -433,6 +447,19 @@ public class UserApiController {
resp.setMessage(ComCode.STATUS_CODE_4001_DESC);
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());
// IdentityCodeEntity identityCodeEntity = userService.getIdentifyCode(request);
......@@ -650,4 +677,12 @@ public class UserApiController {
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 {
List<UserEntity> getMyInviting(UserRequest request);
//激活用户数量
public Integer getActiveUserNum(UserRequest request);
public Integer checkNoUser();
}
......@@ -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.entity.*;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
......@@ -42,6 +44,8 @@ import java.util.List;
@Lazy(false)
@Transactional
public class UserApiService {
/** log */
private static Logger logger = LoggerFactory.getLogger(UserApiService.class);
@Autowired
private UserApiDao userDao;
......@@ -130,11 +134,14 @@ public class UserApiService {
}
@Transactional(readOnly = false)
public UserEntity signUp(UserRequest request) {
public UserEntity signUp(UserRequest request) throws MyException {
// 保存用户信息
String code = IdGen.randomBase62(64);
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);
UserEntity user = userDao.getUserInfo(new Request(code));
// 以下两行代码应Android要求,增加空detail和card
......@@ -237,12 +244,15 @@ public class UserApiService {
// 实名认证
@Transactional(readOnly = false)
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(), "", "", "", "");
if (userDao.getUserDetailByCode(new UserEntity(request.getSubMerchantCode())) == null) {
userDao.saveUserDetail(userDetailEntity);
logger.debug("存完userdetail信息");
} else {
userDao.updateUserDetail(userDetailEntity);
logger.debug("修改完userdetail信息");
}
// 为用户卡注册subMerchantId
String type = "1"; // 默认将卡片添加为对私
......@@ -255,6 +265,7 @@ public class UserApiService {
// 更新银行卡详情
CardEntity cardStatusEntity = new CardEntity(request.getSubMerchantCode(), "N");
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());
userDao.addNewCard(cardEntity);
......@@ -267,10 +278,14 @@ public class UserApiService {
// 与实名用户的推荐人,推荐了4名及以上人员实名
if (countRecommend.size() >= 4) {
String[] recommendPath = countRecommend.get(0).getRecommendedPath().split(",");
UserEntity recommendedUser = userDao.getUserInfoById(recommendPath[recommendPath.length - 1]);
recommendedUser.setLevel("D");
// 实名用户的推荐人等级由E(青铜)升为D(白银)
if (recommendedUser.getLevel().equals("E")){
recommendedUser.setLevel("D");
userDao.updateUserLevel(recommendedUser);
}
RateEntity rateEntityParam = new RateEntity();
rateEntityParam.setUserLevel("D");
......@@ -371,10 +386,11 @@ public class UserApiService {
userEntity.setCode(request.getSubMerchantCode());
userEntity.setStatus("2");//根据第三方接口返回信息更改用户状态
userDao.updateUserInfo(userEntity);
logger.debug("更新用户信息完成");
userSubMchIdRequest.setPayChannel(ComCode.PAYCHANNEL_HL2);
userSubMchIdRequest.setSubmchid(JFenSubMchId);
this.addUserSubmchid(userSubMchIdRequest);
logger.debug("添加用户submchid完成");
rate.setPayChannel(ComCode.PAYCHANNEL_HL2);
rate.setPayMethod("quick");//全部写死是quick
RateEntity rateEntity = this.getRateByLevel(rate);
......@@ -504,6 +520,7 @@ public class UserApiService {
// JFen 商户入网
public String merchantInJFenJuhezhong(UserRequest request) throws MyException, Exception {
logger.debug("开始商户入网");
UserEntity userEntity = userDao.getUserInfo(request);
BelongBankEntity belongBankEntity = userDao.getBelongBankEntity(request);
if (userEntity == null) {
......@@ -543,8 +560,10 @@ public class UserApiService {
JSONObject jsonObject = juHeZhongPayJFenService.merchantIn(dto);
if (!"0000".equals(jsonObject.getString("code"))) {
logger.debug("商户入网失败,jsonObject: {} "+jsonObject);
throw new MyException(jsonObject.getString("msg"));
}
logger.debug("商户入网完成");
return jsonObject.getString("subMchId");
}
......@@ -574,6 +593,7 @@ public class UserApiService {
* @throws Exception
*/
public void merchantFeelJFen(String subMchId, RateEntity rateEntity) throws MyException, Exception {
logger.debug("进入增加或修改支付用户费率开始");
// 修改费率
JSONObject dto = new JSONObject();
dto.put("subMchId",subMchId);
......@@ -588,8 +608,10 @@ public class UserApiService {
}
if (!"0000".equals(jsonObject.getString("code"))) {
logger.debug("增加或修改用户费率失败, jsonObject: {}",jsonObject);
throw new MyException(jsonObject.getString("msg"));
}
logger.debug("增加或修改用户费率结束");
}
/**
......
......@@ -126,7 +126,9 @@
<select id="getBenefitSum" resultType="com.thinkgem.jeesite.modules.pay.entity.BenefitEntity">
SELECT
SUM(b.amount) AS amount
CAST(
sum(b.amount) AS DECIMAL (19, 3)
) AS amount
FROM youka_benefit b
LEFT JOIN youka_orders o ON o.`code` = b.order_code
WHERE b.user_code = #{userCode}
......@@ -189,4 +191,18 @@
AND update_date >= date(now())
AND update_date &lt; DATE_ADD(date(now()), INTERVAL 1 DAY)
</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>
\ No newline at end of file
......@@ -79,7 +79,7 @@
FROM
youka_users yu
WHERE
yu.recommended_mobile = #{recommendedMobile}
yu.mobile = #{recommendedMobile}
LIMIT 1
</select>
......@@ -925,4 +925,10 @@
recommended_mobile = (SELECT mobile FROM youka_users WHERE code = #{subMerchantCode})
</select>
<select id="checkNoUser" resultType="java.lang.Integer">
SELECT
COUNT (id)
FROM
youka_users
</select>
</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