miduo_pay/src/main/java/com/jmfy/controller/PayLogic.java

133 lines
5.4 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.jmfy.controller;
import com.jmfy.dto.CPayOrder;
import com.jmfy.dto.CUserDao;
import com.jmfy.dto.CUserInfo;
import com.jmfy.paramBean.PaySdkEnum;
import com.jmfy.thrift.idl.RPCRequestIFace;
import com.jmfy.thrift.idl.Result;
import com.jmfy.thrift.pool.ClientAdapterPo;
import com.jmfy.thrift.pool.ServiceKey;
import com.jmfy.util.JsonUtil;
import org.apache.commons.lang.ArrayUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @Author hj
* @Date 2021/6/23 17:06
* @Description:
* @Version 1.0
*/
@SuppressWarnings("ALL")
@Component
public class PayLogic {
private static final Logger LOGGER = LoggerFactory.getLogger(PayLogic.class);
@Resource
private CUserDao cuserDao;
private PayLogic() {
}
public String initOrder(String collBackInfo, String orderId, String amount, Date time, String openId, PaySdkEnum sdk){
return initOrder(collBackInfo,orderId,amount,time,openId,sdk,"");
}
/**
*
* @param collBackInfo 回调参数
* @param orderId 自己订单号
* @param amount 金钱,单位是分
* @param time 支付时间
* @param openId 渠道的用户id目前用不到
* @param sdk sdk支付渠道标识
* @return
*/
public String initOrder(String collBackInfo, String orderId, String amount, Date time, String openId, PaySdkEnum sdk, String ext){
try {
// 角色id_物品id_ccId_平台
String[] collback = collBackInfo.split("_");
LOGGER.info("支付透传参数,分割前:{},分割后:{},长度:{},支付:{}",collBackInfo, ArrayUtils.toString(collback,","),collback.length,sdk.getName());
String uid = collback.length > 0 ? collback[0] : "0";
String goodsId = collback.length > 1 ? collback[1] : "0";
String ccId = collback.length > 2 ? collback[2] : "0";
String platform = collback.length > 3 ? collback[3] : "ANDROID";
CUserInfo cUserInfo = cuserDao.findUserInfo(Integer.valueOf(uid));
//0为了兼容
if (!"0".equals(uid) && cUserInfo == null) {
LOGGER.info("该用户无此角色" + uid);
return "USER_IS_NOT";
}
CPayOrder cPayOrder = cuserDao.getCpayOrderByOrderId(orderId);
if (cPayOrder != null) {
LOGGER.info("callback==>creditId={},uId={} orderId is exit!!!", cUserInfo.getId(), cUserInfo.getOpenId());
return "ORDER_IS_EXIST";
} else {
DateFormat dateTimeformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date = dateTimeformat.format(time);
cPayOrder = new CPayOrder();
cPayOrder.setOrderId(orderId);
cPayOrder.setServerId(cUserInfo.getServerid());
cPayOrder.setDelivery_time(date);
cPayOrder.setUserId(uid);
cPayOrder.setAmount(amount);
cPayOrder.setGoodsId(goodsId);
cPayOrder.setCc_id(ccId);
cPayOrder.setPaySdk(sdk.getName());
cPayOrder.setPlatform(platform);
Result result = null;
String userAddress = cuserDao.findUserAddress(cUserInfo.getId());
if (userAddress != null) {
LOGGER.info("callback==>userAddress={} ", userAddress);
String[] split = userAddress.split(":");
String ip = split[0];
String port = split[1];
LOGGER.info("RPC address --> IP : " + ip + "; PORT : " + port);
ClientAdapterPo<RPCRequestIFace.Client> rPCClient = null;
String serviceKey = JsonUtil.getServiceKey(ServiceKey.RPCCore, ip, port);
LOGGER.info("serviceKey : " + serviceKey);
try {
rPCClient = ClientAdapterPo.getClientAdapterPo(serviceKey);
result = rPCClient.getClient().deliveryRecharge(cUserInfo.getId(), goodsId, openId, orderId, 0, (int)Double.parseDouble(amount));
} catch (Exception e) {
LOGGER.info("callback=>", e);
} finally {
if (rPCClient != null) {
rPCClient.returnObject(serviceKey);
} else {
LOGGER.info("callback=> rPCClient is null ");
}
}
} else {
LOGGER.info("not get the user url,the openID={} ", uid);
return "REDIS_ADDRESS_NULL";
}
if (result != null && result.getResultCode() == 1) {
LOGGER.info(" callback==>RPC result : ResultCode : " + result.getResultCode() + "; ResultMsg : " + result.getResultMsg());
cuserDao.addCpayOrder(cPayOrder);
} else {
LOGGER.error("发送订单到游戏服,返回数据异常");
return "GAME_SERVER_RESULT_ERROR";
}
}
} catch (Exception e) {
e.printStackTrace();
LOGGER.info("callback==>err " + e.toString());
return "FAIL";
}
return "SUCCESS";
}
}