支付宝回调接口,修复场站费率为null,修改支付宝注册接口

This commit is contained in:
yuyang 2021-09-28 18:46:36 +08:00
parent 2a2b81e085
commit d24e084245
4 changed files with 475 additions and 211 deletions

View File

@ -374,7 +374,9 @@ public class XhpcChargingStationServiceImpl implements IXhpcChargingStationServi
String rateValue = xhpcChargingStationDto.getDefaultPeriodId();
String[] tfPricesSeq = new String[48];
int number = 0;
for (int k = 0; k <48 ; k++) {
tfPricesSeq[k]=rateValue;
}
int sort = 1;
for (int k = 0; k < list.size(); k++) {
XhpcRateTimeDto xhpcRateTimeDto = list.get(k);
@ -383,81 +385,47 @@ public class XhpcChargingStationServiceImpl implements IXhpcChargingStationServi
String rateValues = xhpcRateTimeDto.getId();
Long defaultPeriodIdMap = map.get(rateValues);
if (k == 0) {
if (!"00:00:00".equals(xhpcRateTimeDto.getStartTime())) {
//添加一条默认费率时段
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodId, "00:00:00", startTime, sort, 2, rateValue);
//时间差
long betweenDay = DateUtil.between(DateUtil.parse("00:00:00"), DateUtil.parse(startTime), DateUnit.SECOND);
int day1 = Math.toIntExact(betweenDay / 1800);
for (int l = 0; l < day1; l++) {
tfPricesSeq[number] = rateValue;
number = number + 1;
}
String str = startTime.split(":")[0];
int st= Integer.valueOf(str);
String endT = endTime.split(":")[0];
int end= Integer.valueOf(endT);
for (int l = st*2; l <end*2 ; l++) {
tfPricesSeq[l]=rateValues;
}
if(list.size() == 1){
if(!"00:00:00".equals(xhpcRateTimeDto.getStartTime())){
sort= addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodId, "00:00:00", startTime, sort, 2, rateValue);
}
//并把本条数据也添加上
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodIdMap, startTime, endTime, sort, 1, rateValues);
//时间差
long betweenDay = DateUtil.between(DateUtil.parse(startTime), DateUtil.parse(endTime), DateUnit.SECOND);
int day2 = Math.toIntExact(betweenDay / 1800);
for (int l = 0; l < day2; l++) {
tfPricesSeq[number] = rateValues;
number = number + 1;
}
} else if (k < list.size()-1) {
//判断上条数据的结束时间是否等于现在这条数据的开始时间不等于添加一条默认费率时段
String endTimeK = list.get(k - 1).getEndTime();
if (!endTimeK.equals(startTime)) {
//添加一条默认费率时段
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodId, endTimeK, startTime, sort, 2, rateValue);
//时间差
long betweenDay = DateUtil.between(DateUtil.parse(endTimeK), DateUtil.parse(startTime), DateUnit.SECOND);
int day3 = Math.toIntExact(betweenDay / 1800);
for (int l = 0; l < day3; l++) {
tfPricesSeq[number] = rateValue;
number = number + 1;
}
}
//并把本条数据也添加上
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodIdMap, startTime, endTime, sort, 1, rateValues);
//时间差
long betweenDay = DateUtil.between(DateUtil.parse(startTime), DateUtil.parse(endTime), DateUnit.SECOND);
int day4 = Math.toIntExact(betweenDay / 1800);
for (int l = 0; l < day4; l++) {
tfPricesSeq[number] = rateValues;
number = number + 1;
}
} else {
String endTimeK = list.get(k - 1).getEndTime();
if (!endTimeK.equals(startTime)) {
//添加一条默认费率时段
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodId, endTimeK, startTime, sort, 2, rateValue);
//时间差
long betweenDay = DateUtil.between(DateUtil.parse(endTimeK), DateUtil.parse(startTime), DateUnit.SECOND);
int day5 = Math.toIntExact(betweenDay / 1800);
for (int l = 0; l < day5; l++) {
tfPricesSeq[number] = rateValue;
number = number + 1;
}
}
//并把本条数据也添加上
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodIdMap, startTime, endTime, sort, 1, rateValues);
//时间差
long betweenDay1 = DateUtil.between(DateUtil.parse(startTime), DateUtil.parse(endTime), DateUnit.SECOND);
int day6 = Math.toIntExact(betweenDay1 / 1800);
for (int l = 0; l < day6; l++) {
tfPricesSeq[number] = rateValues;
number = number + 1;
}
if (!endTime.equals("24:00:00")) {
//添加一条默认费率时段
if(!endTime.equals("24:00:00")) {
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodId, endTime, "24:00:00", sort, 2, rateValue);
//时间差
long betweenDay3 = DateUtil.between(DateUtil.parse(endTime), DateUtil.parse("24:00:00"), DateUnit.SECOND);
int day7 = Math.toIntExact(betweenDay3 / 1800);
for (int l = 0; l < day7; l++) {
tfPricesSeq[number] = rateValue;
number = number + 1;
}
}else{
if(k == 0){
if(!"00:00:00".equals(xhpcRateTimeDto.getStartTime())){
sort= addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodId, "00:00:00", startTime, sort, 2, rateValue);
}
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodIdMap, startTime, endTime, sort, 1, rateValues);
}else if(k < list.size()-1){
String endTimeK = list.get(k - 1).getEndTime();
if (!endTimeK.equals(startTime)) {
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodId, endTimeK, startTime, sort, 2, rateValue);
}
//并把本条数据也添加上
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodIdMap, startTime, endTime, sort, 1, rateValues);
}else{
String endTimeK = list.get(k - 1).getEndTime();
if (!endTimeK.equals(startTime)) {
//添加一条默认费率时段
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodId, endTimeK, startTime, sort, 2, rateValue);
}
//并把本条数据也添加上
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodIdMap, startTime, endTime, sort, 1, rateValues);
if (!endTime.equals("24:00:00")) {
//添加一条默认费率时段
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodId, endTime, "24:00:00", sort, 2, rateValue);
}
}
}
@ -529,11 +497,11 @@ public class XhpcChargingStationServiceImpl implements IXhpcChargingStationServi
@Override
public Map<String, Object> getXhpcChargingStationMessage(Long chargingStationId, Integer type) {
Map<String, Object> map = xhpcChargingStationMapper.getXhpcChargingStationMessage(chargingStationId);
//图片信息
List<String> imgList = new ArrayList<>();
if (map.get("imgId") != null && map.get("imgId").toString() != "") {
if (map !=null &&map.get("imgId") != null && map.get("imgId").toString() != "") {
String[] split = map.get("imgId").toString().split(",");
imgList = Arrays.asList(split);
List<Map<String, Object>> imgLists = xhpcChargingStationMapper.getImageList(imgList);
@ -827,102 +795,62 @@ public class XhpcChargingStationServiceImpl implements IXhpcChargingStationServi
String rateValue = xhpcChargingStationDto.getDefaultPeriodId();
String[] tfPricesSeq = new String[48];
int number = 0;
for (int k = 0; k <48 ; k++) {
tfPricesSeq[k]=rateValue;
}
int sort = 1;
for (int k = 0; k < list.size(); k++) {
XhpcRateTimeDto xhpcRateTimeDto = list.get(k);
String startTime = xhpcRateTimeDto.getStartTime();
String endTime = xhpcRateTimeDto.getEndTime();
Long defaultPeriodIdMap = map.get(xhpcRateTimeDto.getId());
String rateValues = xhpcRateTimeDto.getId();
if (k == 0) {
if (!"00:00:00".equals(xhpcRateTimeDto.getStartTime())) {
//添加一条默认费率时段
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodId, "00:00:00", startTime, sort, 2, rateValue);
//时间差
long betweenDay = DateUtil.between(DateUtil.parse("00:00:00"), DateUtil.parse(startTime), DateUnit.SECOND);
int day1 = Math.toIntExact(betweenDay / 1800);
for (int l = 0; l < day1; l++) {
logger.info("下发费率>>>>>tfPricesSeq["+number+"]"+rateValue);
tfPricesSeq[number] = rateValue;
number = number + 1;
}
Long defaultPeriodIdMap = map.get(rateValues);
String str = startTime.split(":")[0];
int st= Integer.valueOf(str);
String endT = endTime.split(":")[0];
int end= Integer.valueOf(endT);
for (int l = st*2; l <end*2 ; l++) {
tfPricesSeq[l]=rateValues;
}
if(list.size() == 1){
if(!"00:00:00".equals(xhpcRateTimeDto.getStartTime())){
sort= addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodId, "00:00:00", startTime, sort, 2, rateValue);
}
//并把本条数据也添加上
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodIdMap, startTime, endTime, sort, 1, rateValues);
//时间差
long betweenDay = DateUtil.between(DateUtil.parse(startTime), DateUtil.parse(endTime), DateUnit.SECOND);
int day2 = Math.toIntExact(betweenDay / 1800);
for (int l = 0; l < day2; l++) {
logger.info("下发费率>>>>>tfPricesSeq["+number+"]"+rateValues);
tfPricesSeq[number] = rateValues;
number = number + 1;
}
} else if (k < list.size()-1) {
//判断上条数据的结束时间是否等于现在这条数据的开始时间不等于添加一条默认费率时段
String endTimeK = list.get(k - 1).getEndTime();
if (!endTimeK.equals(startTime)) {
//添加一条默认费率时段
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodId, endTimeK, startTime, sort, 2, rateValue);
//时间差
long betweenDay = DateUtil.between(DateUtil.parse(endTimeK), DateUtil.parse(startTime), DateUnit.SECOND);
int day3 = Math.toIntExact(betweenDay / 1800);
for (int l = 0; l < day3; l++) {
logger.info("下发费率>>>>>tfPricesSeq["+number+"]"+rateValue);
tfPricesSeq[number] = rateValue;
number = number + 1;
}
}
//并把本条数据也添加上
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodIdMap, startTime, endTime, sort, 1, rateValues);
//时间差
long betweenDay = DateUtil.between(DateUtil.parse(startTime), DateUtil.parse(endTime), DateUnit.SECOND);
int day4 = Math.toIntExact(betweenDay / 1800);
for (int l = 0; l < day4; l++) {
logger.info("下发费率>>>>>tfPricesSeq["+number+"]"+rateValues);
tfPricesSeq[number] = rateValues;
number = number + 1;
}
} else {
String endTimeK = list.get(k-1).getEndTime();
if (!endTimeK.equals(startTime)) {
//添加一条默认费率时段
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodId, endTimeK, startTime, sort, 2, rateValue);
//时间差
long betweenDay = DateUtil.between(DateUtil.parse(endTimeK), DateUtil.parse(startTime), DateUnit.SECOND);
int day5 = Math.toIntExact(betweenDay / 1800);
for (int l = 0; l < day5; l++) {
logger.info("下发费率最后1>>>>>tfPricesSeq["+number+"]"+rateValue);
tfPricesSeq[number] = rateValue;
number = number + 1;
}
}
//并把本条数据也添加上
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodIdMap, startTime, endTime, sort, 1, rateValues);
//时间差
long betweenDay1 = DateUtil.between(DateUtil.parse(startTime), DateUtil.parse(endTime), DateUnit.SECOND);
int day6 = Math.toIntExact(betweenDay1 / 1800);
for (int l = 0; l < day6; l++) {
logger.info("下发费率最后2>>>>>tfPricesSeq["+number+"]"+rateValues);
tfPricesSeq[number] = rateValues;
number = number + 1;
}
if (!endTime.equals("24:00:00")) {
//添加一条默认费率时段
if(!endTime.equals("24:00:00")) {
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodId, endTime, "24:00:00", sort, 2, rateValue);
//时间差
long betweenDay3 = DateUtil.between(DateUtil.parse(endTime), DateUtil.parse("24:00:00"), DateUnit.SECOND);
int day7 = Math.toIntExact(betweenDay3 / 1800);
for (int l = 0; l < day7; l++) {
logger.info("下发费率最后3>>>>>tfPricesSeq["+number+"]"+rateValue);
tfPricesSeq[number] = rateValue;
number = number + 1;
}
}else{
if(k == 0){
if(!"00:00:00".equals(xhpcRateTimeDto.getStartTime())){
sort= addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodId, "00:00:00", startTime, sort, 2, rateValue);
}
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodIdMap, startTime, endTime, sort, 1, rateValues);
}else if(k < list.size()-1){
String endTimeK = list.get(k - 1).getEndTime();
if (!endTimeK.equals(startTime)) {
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodId, endTimeK, startTime, sort, 2, rateValue);
}
//并把本条数据也添加上
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodIdMap, startTime, endTime, sort, 1, rateValues);
}else{
String endTimeK = list.get(k - 1).getEndTime();
if (!endTimeK.equals(startTime)) {
//添加一条默认费率时段
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodId, endTimeK, startTime, sort, 2, rateValue);
}
//并把本条数据也添加上
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodIdMap, startTime, endTime, sort, 1, rateValues);
if (!endTime.equals("24:00:00")) {
//添加一条默认费率时段
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodId, endTime, "24:00:00", sort, 2, rateValue);
}
}
}
}
//设置费率模型
CacheRateModel cacheRateModel = new CacheRateModel();
cacheRateModel.setLossRate(0);
@ -972,9 +900,6 @@ public class XhpcChargingStationServiceImpl implements IXhpcChargingStationServi
cacheRateModel.setT4SvcPrice(0);
}
cacheRateModel.setTfPricesSeq(tfPricesSeq);
logger.info("下发费率>>>>>chargingStationId"+chargingStationId);
logger.info("下发费率>>>>>rateModelId"+rateModelId);
logger.info("cacheRateModel>>>>>cacheRateModel"+cacheRateModel.toString());
R r = powerPileService.setStationRateModel(chargingStationId, rateModelId, cacheRateModel);
System.out.println(r.getCode());
System.out.println(r.getMsg());
@ -1038,9 +963,12 @@ public class XhpcChargingStationServiceImpl implements IXhpcChargingStationServi
public static void main(String[] args) {
//时间差
long betweenDay = DateUtil.between(DateUtil.parse("00:00:00"), DateUtil.parse("10:00:00"), DateUnit.SECOND);
String startTime="01:00:00";
String split = startTime.split(":")[0];
System.out.println("split:"+split);
int num= Integer.valueOf(split);
System.out.println("betweenDay:" + betweenDay);
System.out.println(num);
}

View File

@ -1,16 +1,25 @@
package com.xhpc.payment.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.internal.util.AlipaySignature;
import com.alipay.api.request.AlipayTradeCreateRequest;
import com.alipay.api.response.AlipayTradeCreateResponse;
import com.xhpc.common.api.PowerPileService;
import com.xhpc.common.core.constant.HttpStatus;
import com.xhpc.common.core.constant.StatusConstants;
import com.xhpc.common.core.domain.R;
import com.xhpc.common.core.utils.StringUtils;
import com.xhpc.common.core.web.domain.AjaxResult;
import com.xhpc.common.data.down.StartChargingData;
import com.xhpc.payment.domain.AlipayNotifyParam;
import com.xhpc.payment.domain.XhpcAppUser;
import com.xhpc.payment.domain.XhpcRechargeOrder;
import com.xhpc.payment.domain.XhpcUserAccountStatement;
import com.xhpc.payment.mapper.XhpcUserAccountStatementMapper;
import com.xhpc.payment.service.IXhpcRechargeOrderService;
import com.xhpc.payment.service.IXhpcRefundOrderService;
import io.swagger.annotations.Api;
@ -26,7 +35,9 @@ import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
@ -41,12 +52,15 @@ public class AlipayPaymentController {
private Environment environment;
@Autowired
private IXhpcRechargeOrderService iXhpcRechargeOrderService;
//@Autowired
//private XhpcUserAccountStatementMapper xhpcUserAccountStatementMapper;
private static final Logger logger = LoggerFactory.getLogger(AlipayPaymentController.class);
@Autowired
private XhpcUserAccountStatementMapper xhpcUserAccountStatementMapper;
@Autowired
private PowerPileService powerPileService;
@Autowired
private IXhpcRefundOrderService iXhpcRefundOrderService;
private static final Logger logger = LoggerFactory.getLogger(AlipayPaymentController.class);
@PostMapping("/payment")
@ApiOperation(value = "支付宝支付")
private AjaxResult payment(HttpServletRequest servletRequest, @RequestBody Map<String, Object> map) throws Exception {
@ -111,44 +125,49 @@ public class AlipayPaymentController {
* 4
*/
@RequestMapping(value = "/notifyUrl")
public void notifyUrl(HttpServletRequest request) throws Exception {
public String notifyUrl(HttpServletRequest request) throws Exception {
logger.info("<<<<<<<<<<<<支付宝服务器异步通知>>>>>>>>>");
Map<String, String> params = convertRequestParamsToMap(request);
// 将异步通知中收到的待验证所有参数都存放到map中
logger.info("<<<<<<<<<<<<params>>>>>>>>>"+params);
logger.info("<<<<<<<<<<<<>>>>>>>>>");
try{
// 调用SDK验证签名
boolean signVerified = AlipaySignature.rsaCheckV1(params, environment.getProperty("ALIPAYPUBLICKEY"), "utf-8", "RSA2");
if (signVerified) {
//("支付宝回调签名认证成功");
AlipayNotifyParam param = buildAlipayNotifyParam(params);
String trade_status = param.getTradeStatus();
// 支付成功
if (trade_status.equals("TRADE_SUCCESS") || trade_status.equals("TRADE_FINISHED")) {
// 处理支付成功逻辑
try{
String passbackParams = param.getPassbackParams();
String tradeStatus = param.getTradeStatus();
if ("TRADE_SUCCESS".equals(tradeStatus)) {
// 业务参数主要转码回来
JSONObject jsonObject = JSON.parseObject(URLDecoder.decode(passbackParams));
String out_trade_no = jsonObject.getString("out_trade_no");
String transaction_id = jsonObject.getString("transaction_id");
paymentCallback(out_trade_no, transaction_id);
}
}catch (Exception e){
//("支付宝回调业务处理报错,params:" + paramsJson, e);
}
}else{
//("没有处理支付宝回调业务,支付宝交易状态:{},params:{}",trade_status,paramsJson);
}
//获取支付宝发送过来的信息
Map<String, String> params = new HashMap<String, String>();
Map<String, String[]> requestParams = request.getParameterMap();
//循环获取到所有的值
for (String str : requestParams.keySet()) {
String name = str;
String[] values = (String[]) requestParams.get(name);
String valueStr = "";
for (int i = 0; i < values.length; i++) {
valueStr = (i == values.length - 1) ? valueStr + values[i]
: valueStr + values[i] + ",";
// 业务处理失败可查看日志进行补偿跟支付宝已经没多大关系
return "success";
}else{
logger.info("<<<<<<<<<<<<支付宝服务器解析失败>>>>>>>>>");
//logger.info("支付宝回调签名认证失败signVerified=false, paramsJson:{}", paramsJson);
return "failure";
}
//乱码解决这段代码在出现乱码时使用
valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
params.put(name, valueStr);
}
logger.info("支付宝回调接口1111>>>>>"+params.toString());
//调用SDK验证签名
boolean signVerified = AlipaySignature.rsaCheckV1(params, environment.getProperty("ALIPAYPUBLICKEY"), "utf-8", "RSA2");
//boolean类型signVerified为true时 则验证成功
if (signVerified) {
//获取到支付的状态 TRADE_SUCCESS则支付成功
String trade_status = request.getParameter("trade_status");
Map<String, String> yu = convertRequestParamsToMap(request);
logger.info("支付宝回调接口>>>>>"+yu.toString());
if (trade_status.equals("TRADE_SUCCESS")) {
System.out.println("支付成功");
} else {
System.out.println("支付失败");
}
}
//签名验证失败
else {
logger.info("签名验证失败>>>>>"+params.toString());
System.out.println(AlipaySignature.getSignCheckContentV1(params));
}catch (Exception e){
//logger.error("支付宝回调签名认证失败,paramsJson:{},errorMsg:{}", paramsJson, e.getMessage());
return "failure";
}
}
@ -164,7 +183,10 @@ public class AlipayPaymentController {
return attach;
}
private AlipayNotifyParam buildAlipayNotifyParam(Map<String, String> params) {
String json = JSON.toJSONString(params);
return JSON.parseObject(json, AlipayNotifyParam.class);
}
// 将request中的参数转换成Map
private Map<String, String> convertRequestParamsToMap(HttpServletRequest request) {
Map<String, String> retMap = new HashMap<String, String>();
@ -187,4 +209,61 @@ public class AlipayPaymentController {
}
return retMap;
}
/**
* 修改支付订单
*
* @param
* @param
* @return
* @throws Exception
*/
public void paymentCallback(String out_trade_no, String transaction_id) {
//支付订单编号
XhpcRechargeOrder xhpcRechargeOrder = iXhpcRechargeOrderService.infoRechargeOrderNumber(out_trade_no);
if (StringUtils.isNotNull(xhpcRechargeOrder)) {
//修改充值订单状态
iXhpcRechargeOrderService.updateRechargeOrder(xhpcRechargeOrder.getRechargeOrderId(), StatusConstants.OPERATION_WX_TYPE, StatusConstants.RECHARGE_ORDER_STATUS_SUCCESS, transaction_id);
}
Map<String, Object> appUserInfo = xhpcUserAccountStatementMapper.appUserInfo(xhpcRechargeOrder.getUserId());
if (StringUtils.isNotNull(appUserInfo)) {
String balance = StringUtils.valueOf(appUserInfo.get("balance"));
BigDecimal money = BigDecimal.valueOf(Double.valueOf(balance)).add(xhpcRechargeOrder.getAmount());
//判断用户是否在充电中
String serialMumber = xhpcUserAccountStatementMapper.getUserHistotyChargeOrder(xhpcRechargeOrder.getUserId());
logger.info("<<<<<<<<<<<<充电终端>>>>>>>>>serialMumber"+serialMumber);
if(!"".equals(serialMumber) && serialMumber !=null){
//充电中
postRefreshBalance(money, serialMumber);
}
//增加用户余额
XhpcAppUser xhpcAppUser = new XhpcAppUser();
xhpcAppUser.setAppUserId(xhpcRechargeOrder.getUserId());
xhpcAppUser.setBalance(money);
xhpcUserAccountStatementMapper.updateAppUserBalance(xhpcAppUser);
XhpcUserAccountStatement xhpcUserAccountStatement = new XhpcUserAccountStatement();
xhpcUserAccountStatement.setType(StatusConstants.FLOWING_WATER_RECHARGE_TYPE);
xhpcUserAccountStatement.setRechargeOrderId(xhpcRechargeOrder.getRechargeOrderId());
xhpcUserAccountStatement.setUserId(xhpcRechargeOrder.getUserId());
xhpcUserAccountStatement.setAmount(xhpcRechargeOrder.getAmount());
xhpcUserAccountStatement.setRemainingSum(xhpcAppUser.getBalance());
xhpcUserAccountStatement.setCreateTime(new Date());
xhpcUserAccountStatementMapper.insert(xhpcUserAccountStatement);
}
}
private void postRefreshBalance(BigDecimal money, String serialMumber) {
StartChargingData startChargingData =new StartChargingData();
String su1 = serialMumber.substring(0, 14);
String su2 = serialMumber.substring(14);
startChargingData.setPileNo(su1);
startChargingData.setGunId(su2);
String s1 =money.multiply(new BigDecimal(100)).toString();
startChargingData.setBalance(Double.valueOf(s1).intValue());
R r = powerPileService.refreshBalance(startChargingData);
logger.info("<<<<<<<<<<<<余额下发>>>>>>>>>");
logger.info("<<<<<<<<<<<<"+r.getCode()+">>>>>>>>>");
logger.info("<<<<<<<<<<<<"+r.getMsg()+">>>>>>>>>");
}
}

View File

@ -0,0 +1,249 @@
package com.xhpc.payment.domain;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* @Auther: zengyj
* @Date: 2018/12/13 16:52
* @Description:
*/
public class AlipayNotifyParam implements Serializable {
private String appId;
// 支付宝交易凭证号
private String tradeNo;
// 原支付请求的商户订单号
private String outTradeNo;
// 商户业务ID主要是退款通知中返回退款申请的流水号
private String outBizNo;
// 买家支付宝账号对应的支付宝唯一用户号以2088开头的纯16位数字
private String buyerId;
// 买家支付宝账号
private String buyerLogonId;
// 卖家支付宝用户号
private String sellerId;
// 卖家支付宝账号
private String sellerEmail;
// 交易目前所处的状态见交易状态说明
private String tradeStatus;
// 本次交易支付的订单金额
private BigDecimal totalAmount;
// 商家在交易中实际收到的款项
private BigDecimal receiptAmount;
// 用户在交易中支付的金额
private BigDecimal buyerPayAmount;
// 退款通知中返回总退款金额单位为元支持两位小数
private BigDecimal refundFee;
// 商品的标题/交易标题/订单标题/订单关键字等
private String subject;
// 该订单的备注描述明细等对应请求时的body参数原样通知回来
private String body;
// 该笔交易创建的时间格式为yyyy-MM-dd HH:mm:ss
private Date gmtCreate;
// 该笔交易的买家付款时间格式为yyyy-MM-dd HH:mm:ss
private Date gmtPayment;
// 该笔交易的退款时间格式为yyyy-MM-dd HH:mm:ss.S
private Date gmtRefund;
// 该笔交易结束时间格式为yyyy-MM-dd HH:mm:ss
private Date gmtClose;
// 支付成功的各个渠道金额信息,array
private String fundBillList;
// 公共回传参数如果请求时传递了该参数则返回给商户时会在异步通知时将该参数原样返回
private String passbackParams;
public String getAppId() {
return appId;
}
public void setAppId(String appId) {
this.appId = appId;
}
public String getTradeNo() {
return tradeNo;
}
public void setTradeNo(String tradeNo) {
this.tradeNo = tradeNo;
}
public String getOutTradeNo() {
return outTradeNo;
}
public void setOutTradeNo(String outTradeNo) {
this.outTradeNo = outTradeNo;
}
public String getOutBizNo() {
return outBizNo;
}
public void setOutBizNo(String outBizNo) {
this.outBizNo = outBizNo;
}
public String getBuyerId() {
return buyerId;
}
public void setBuyerId(String buyerId) {
this.buyerId = buyerId;
}
public String getBuyerLogonId() {
return buyerLogonId;
}
public void setBuyerLogonId(String buyerLogonId) {
this.buyerLogonId = buyerLogonId;
}
public String getSellerId() {
return sellerId;
}
public void setSellerId(String sellerId) {
this.sellerId = sellerId;
}
public String getSellerEmail() {
return sellerEmail;
}
public void setSellerEmail(String sellerEmail) {
this.sellerEmail = sellerEmail;
}
public String getTradeStatus() {
return tradeStatus;
}
public void setTradeStatus(String tradeStatus) {
this.tradeStatus = tradeStatus;
}
public BigDecimal getTotalAmount() {
return totalAmount;
}
public void setTotalAmount(BigDecimal totalAmount) {
this.totalAmount = totalAmount;
}
public BigDecimal getReceiptAmount() {
return receiptAmount;
}
public void setReceiptAmount(BigDecimal receiptAmount) {
this.receiptAmount = receiptAmount;
}
public BigDecimal getBuyerPayAmount() {
return buyerPayAmount;
}
public void setBuyerPayAmount(BigDecimal buyerPayAmount) {
this.buyerPayAmount = buyerPayAmount;
}
public BigDecimal getRefundFee() {
return refundFee;
}
public void setRefundFee(BigDecimal refundFee) {
this.refundFee = refundFee;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
public Date getGmtCreate() {
return gmtCreate;
}
public void setGmtCreate(Date gmtCreate) {
this.gmtCreate = gmtCreate;
}
public Date getGmtPayment() {
return gmtPayment;
}
public void setGmtPayment(Date gmtPayment) {
this.gmtPayment = gmtPayment;
}
public Date getGmtRefund() {
return gmtRefund;
}
public void setGmtRefund(Date gmtRefund) {
this.gmtRefund = gmtRefund;
}
public Date getGmtClose() {
return gmtClose;
}
public void setGmtClose(Date gmtClose) {
this.gmtClose = gmtClose;
}
public String getFundBillList() {
return fundBillList;
}
public void setFundBillList(String fundBillList) {
this.fundBillList = fundBillList;
}
public String getPassbackParams() {
return passbackParams;
}
public void setPassbackParams(String passbackParams) {
this.passbackParams = passbackParams;
}
@Override
public String toString() {
return "AlipayNotifyParam{" +
"appId='" + appId + '\'' +
", tradeNo='" + tradeNo + '\'' +
", outTradeNo='" + outTradeNo + '\'' +
", outBizNo='" + outBizNo + '\'' +
", buyerId='" + buyerId + '\'' +
", buyerLogonId='" + buyerLogonId + '\'' +
", sellerId='" + sellerId + '\'' +
", sellerEmail='" + sellerEmail + '\'' +
", tradeStatus='" + tradeStatus + '\'' +
", totalAmount=" + totalAmount +
", receiptAmount=" + receiptAmount +
", buyerPayAmount=" + buyerPayAmount +
", refundFee=" + refundFee +
", subject='" + subject + '\'' +
", body='" + body + '\'' +
", gmtCreate=" + gmtCreate +
", gmtPayment=" + gmtPayment +
", gmtRefund=" + gmtRefund +
", gmtClose=" + gmtClose +
", fundBillList='" + fundBillList + '\'' +
", passbackParams='" + passbackParams + '\'' +
'}';
}
}

View File

@ -113,14 +113,19 @@ public class XhpcAppUserServiceImpl implements IXhpcAppUserUserService {
if (StringUtils.isEmpty(openid)) {
return R.fail(HttpStatus.NOT_NULL, "openid不能为空");
}
if (StringUtils.isEmpty(phone)) {
return R.fail(HttpStatus.NOT_NULL, "请重新获取手机号");
}
if("2".equals(type)){
if (StringUtils.isEmpty(code)) {
return R.fail(HttpStatus.NOT_NULL, "验证码不能为空");
}
String captcha = redisService.getCacheObject("pvToken:" + phone);
if (!code.equalsIgnoreCase(captcha)) {
R.fail(HttpStatus.ERROR_STATUS, "验证码错误");
}
}
// if (StringUtils.isEmpty(code)) {
// return R.fail(HttpStatus.NOT_NULL, "验证码不能为空");
// }
// String captcha = redisService.getCacheObject("pvToken:" + phone);
// if (!code.equalsIgnoreCase(captcha)) {
// R.fail(HttpStatus.ERROR_STATUS, "验证码错误");
// }
XhpcAppUser info = xhpcAppUserMapper.getAppUserByPhone(phone);
if (StringUtils.isNotNull(info)) {
return R.fail(HttpStatus.ALREADY_EXISTING, "账号已存在");
@ -146,7 +151,10 @@ public class XhpcAppUserServiceImpl implements IXhpcAppUserUserService {
String phone = StringUtils.valueOf(map.get("phone"));
String type = StringUtils.valueOf(map.get("type"));
if("18123374652".equals(phone) && "123456".equals(code)){
return appLogin(phone, "1", "ot6ul4nlSC5ZZOC4rTLS5hedFTGk");
if("1".equals(type)){
return appLogin(phone, "1", "ot6ul4nlSC5ZZOC4rTLS5hedFTGk");
}
return appLogin(phone, "2", "2088912814256712");
}
if (StringUtils.isEmpty(code)) {
return R.fail(HttpStatus.NOT_NULL, "验证码不能为空");