|
@@ -3,12 +3,11 @@ package com.parksong.services.applets.impl;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.parksong.basics.exception.BusinessException;
|
|
import com.parksong.basics.exception.BusinessException;
|
|
import com.parksong.basics.filter.ApiFilter;
|
|
import com.parksong.basics.filter.ApiFilter;
|
|
|
|
+import com.parksong.basics.util.redis.CacheTool;
|
|
import com.parksong.beans.applets.OrderPayBean;
|
|
import com.parksong.beans.applets.OrderPayBean;
|
|
import com.parksong.beans.delivery.ResponsePage;
|
|
import com.parksong.beans.delivery.ResponsePage;
|
|
import com.parksong.beans.delivery.StatisticsOutboundRate;
|
|
import com.parksong.beans.delivery.StatisticsOutboundRate;
|
|
-import com.parksong.beans.express.ConsumeStatistics;
|
|
|
|
-import com.parksong.beans.express.ExpressApplets;
|
|
|
|
-import com.parksong.beans.express.ExpressDept;
|
|
|
|
|
|
+import com.parksong.beans.express.*;
|
|
import com.parksong.dao.applets.AppletsMapper;
|
|
import com.parksong.dao.applets.AppletsMapper;
|
|
import com.parksong.filter.applets.AppletsFilter;
|
|
import com.parksong.filter.applets.AppletsFilter;
|
|
import com.parksong.filter.delivery.DeliveryFilter;
|
|
import com.parksong.filter.delivery.DeliveryFilter;
|
|
@@ -18,6 +17,7 @@ import com.parksong.util.Http.OkHttpUtil;
|
|
import com.parksong.util.JwtUtils;
|
|
import com.parksong.util.JwtUtils;
|
|
import com.parksong.util.WxPayUtil;
|
|
import com.parksong.util.WxPayUtil;
|
|
import com.parksong.util.enums.ExpressStatusEnum;
|
|
import com.parksong.util.enums.ExpressStatusEnum;
|
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
@@ -31,6 +31,7 @@ import java.io.BufferedOutputStream;
|
|
import java.io.BufferedReader;
|
|
import java.io.BufferedReader;
|
|
import java.io.InputStreamReader;
|
|
import java.io.InputStreamReader;
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
|
|
+import java.time.LocalDate;
|
|
import java.util.*;
|
|
import java.util.*;
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -40,6 +41,7 @@ import java.util.*;
|
|
* @Version 1.0
|
|
* @Version 1.0
|
|
*/
|
|
*/
|
|
@Service
|
|
@Service
|
|
|
|
+@Slf4j
|
|
public class AppletsServiceImpl implements AppletsService {
|
|
public class AppletsServiceImpl implements AppletsService {
|
|
|
|
|
|
@Autowired
|
|
@Autowired
|
|
@@ -127,6 +129,20 @@ public class AppletsServiceImpl implements AppletsService {
|
|
consumeStatisticsList.stream().forEach(consumeStatistics -> consumeStatistics.setConsumeAmount(new BigDecimal(consumeStatistics.getNumber()).multiply(consumeStatistics.getPrice())));
|
|
consumeStatisticsList.stream().forEach(consumeStatistics -> consumeStatistics.setConsumeAmount(new BigDecimal(consumeStatistics.getNumber()).multiply(consumeStatistics.getPrice())));
|
|
return consumeStatisticsList;
|
|
return consumeStatisticsList;
|
|
}
|
|
}
|
|
|
|
+ @Override
|
|
|
|
+ public List<ConsumeDetail> consumeDetail(AppletsFilter filter){
|
|
|
|
+ filter.setExpressId(filter.getExpressDept().getExpId().intValue());
|
|
|
|
+ List<ConsumeDetail> consumeDetailList = appletsMapper.consumeDetail(filter);
|
|
|
|
+ consumeDetailList.stream().forEach(consumeDetail -> consumeDetail.setAmount(new BigDecimal(consumeDetail.getPackageCount()).multiply(consumeDetail.getPackagePrice())));
|
|
|
|
+ return consumeDetailList;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public List<RechargeStatistics> rechargeStatistics(AppletsFilter filter){
|
|
|
|
+ filter.setExpressId(filter.getExpressDept().getExpId().intValue());
|
|
|
|
+ List<RechargeStatistics> rechargeStatisticsList = appletsMapper.rechargeStatistics(filter);
|
|
|
|
+ return rechargeStatisticsList;
|
|
|
|
+ }
|
|
|
|
|
|
private void queryDeliveryFilterHandle(AppletsFilter filter){
|
|
private void queryDeliveryFilterHandle(AppletsFilter filter){
|
|
filter.sortInit();
|
|
filter.sortInit();
|
|
@@ -136,7 +152,7 @@ public class AppletsServiceImpl implements AppletsService {
|
|
public Map<String, Object> recharge(ApiFilter<AppletsFilter> filter){
|
|
public Map<String, Object> recharge(ApiFilter<AppletsFilter> filter){
|
|
|
|
|
|
String jsCode = filter.getData().getJsCode();
|
|
String jsCode = filter.getData().getJsCode();
|
|
- String amount = filter.getData().getAmount();
|
|
|
|
|
|
+ BigDecimal amount = filter.getData().getAmount();
|
|
//获取用户openid等相关参数
|
|
//获取用户openid等相关参数
|
|
String res = "";
|
|
String res = "";
|
|
try {
|
|
try {
|
|
@@ -146,10 +162,13 @@ public class AppletsServiceImpl implements AppletsService {
|
|
}
|
|
}
|
|
JSONObject resJson = JSONObject.parseObject(res);
|
|
JSONObject resJson = JSONObject.parseObject(res);
|
|
String openId = resJson.getString("openid");
|
|
String openId = resJson.getString("openid");
|
|
|
|
+ ExpressDept user = appletsMapper.userDetail(filter.getData().getExpressDept().getId());
|
|
|
|
+ //绑定\更新用户的openid
|
|
|
|
+ user.setOpenId(openId);
|
|
|
|
+ appletsMapper.updateDept(user);
|
|
//获取客户端的ip地址
|
|
//获取客户端的ip地址
|
|
//String spbill_create_ip = wxPayUtil.getIpAddr(request);
|
|
//String spbill_create_ip = wxPayUtil.getIpAddr(request);
|
|
- String spbill_create_ip = "https://ubmtest.uxskj.com";
|
|
|
|
-
|
|
|
|
|
|
+ String spbill_create_ip = filter.getIpAdress();
|
|
//生成六位数随机字符串
|
|
//生成六位数随机字符串
|
|
String nonce_str = wxPayUtil.createCode(6);
|
|
String nonce_str = wxPayUtil.createCode(6);
|
|
String out_trade_no = wxPayUtil.createCode(30);
|
|
String out_trade_no = wxPayUtil.createCode(30);
|
|
@@ -167,7 +186,7 @@ public class AppletsServiceImpl implements AppletsService {
|
|
//ip地址 谁调用就是谁的地址 上面有用api获取
|
|
//ip地址 谁调用就是谁的地址 上面有用api获取
|
|
.spbill_create_ip(spbill_create_ip)
|
|
.spbill_create_ip(spbill_create_ip)
|
|
//金额 这里的金额实际业务需要乘 100 微信是按照分来算的 要转换位字符串 微信识别
|
|
//金额 这里的金额实际业务需要乘 100 微信是按照分来算的 要转换位字符串 微信识别
|
|
- .total_fee(amount)
|
|
|
|
|
|
+ .total_fee(((amount.multiply(new BigDecimal(100))).setScale( 0, BigDecimal.ROUND_DOWN ).longValue()) + "")
|
|
//用户的openId 这个需要调用微信获取openId 一般都是存储到用户表
|
|
//用户的openId 这个需要调用微信获取openId 一般都是存储到用户表
|
|
.openid(openId)
|
|
.openid(openId)
|
|
.build();
|
|
.build();
|
|
@@ -177,6 +196,16 @@ public class AppletsServiceImpl implements AppletsService {
|
|
}
|
|
}
|
|
|
|
|
|
public Map<String, Object> notifyUrl(HttpServletRequest request, HttpServletResponse response) throws Exception {
|
|
public Map<String, Object> notifyUrl(HttpServletRequest request, HttpServletResponse response) throws Exception {
|
|
|
|
+
|
|
|
|
+ log.info("--------------回调开始----------------");
|
|
|
|
+ Enumeration e=request.getParameterNames();//获取所有参数名
|
|
|
|
+ while(e.hasMoreElements()){//通过Enumeration类中的hasMoreElements()判断是否还有参数名
|
|
|
|
+ String parameterName=(String)e.nextElement(); //获取当前参数名
|
|
|
|
+ //再通过request.getParameter("")的方法来获取对应参数名的值
|
|
|
|
+ System.out.println(parameterName+": "+request.getParameter(parameterName));
|
|
|
|
+ log.info("parameterName:"+parameterName+": "+request.getParameter(parameterName));
|
|
|
|
+ }
|
|
|
|
+
|
|
//微信通过流传输
|
|
//微信通过流传输
|
|
BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream()));
|
|
BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream()));
|
|
String line = null;
|
|
String line = null;
|
|
@@ -189,8 +218,8 @@ public class AppletsServiceImpl implements AppletsService {
|
|
String notityXml = sb.toString();
|
|
String notityXml = sb.toString();
|
|
String resXml = "";
|
|
String resXml = "";
|
|
Map map = wxPayUtil.doXMLParse(notityXml);
|
|
Map map = wxPayUtil.doXMLParse(notityXml);
|
|
-
|
|
|
|
String returnCode = (String) map.get("return_code");
|
|
String returnCode = (String) map.get("return_code");
|
|
|
|
+ log.info("returnCode:"+returnCode);
|
|
if ("SUCCESS".equals(returnCode)) {
|
|
if ("SUCCESS".equals(returnCode)) {
|
|
//验证签名是否正确
|
|
//验证签名是否正确
|
|
Map<String, String> validParams = wxPayUtil.paraFilter(map);
|
|
Map<String, String> validParams = wxPayUtil.paraFilter(map);
|
|
@@ -199,20 +228,35 @@ public class AppletsServiceImpl implements AppletsService {
|
|
//生成签名
|
|
//生成签名
|
|
String mysign = wxPayUtil.sign(prestr, weChatKey, "utf-8").toUpperCase();
|
|
String mysign = wxPayUtil.sign(prestr, weChatKey, "utf-8").toUpperCase();
|
|
//根据微信官网的介绍,此处不仅对回调的参数进行验签,还需要对返回的金额与系统订单的金额进行比对等
|
|
//根据微信官网的介绍,此处不仅对回调的参数进行验签,还需要对返回的金额与系统订单的金额进行比对等
|
|
|
|
+ log.info("----------mysign:"+mysign+"--------------map.get(\"sign\"):"+map.get("sign"));
|
|
if (mysign.equals(map.get("sign").toString())) {
|
|
if (mysign.equals(map.get("sign").toString())) {
|
|
- //处理你系统内部的业务逻辑 订单状态修改 金额进行校正 等
|
|
|
|
- //注意要判断微信支付重复回调,支付成功后微信会重复的进行回调
|
|
|
|
-
|
|
|
|
- //数据库查询订单 进行金额校订
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- //进行金额比较
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- //使用数据库锁
|
|
|
|
-
|
|
|
|
|
|
|
|
|
|
+ String openid = (String) map.get("openid");
|
|
|
|
+ String cash_fee = (String) map.get("cash_fee");
|
|
|
|
+ String day = String.format("%02d", LocalDate.now().getDayOfMonth());
|
|
|
|
+ CacheTool rechargeCacheTool = CacheTool.initrechargeCacheTool();
|
|
|
|
+ String number = String.format("%06d", rechargeCacheTool.incrBy(day, 1).intValue());
|
|
|
|
+ BigDecimal amount = new BigDecimal(cash_fee).divide(new BigDecimal(100));
|
|
|
|
+
|
|
|
|
+ //根据openid获取用户信息
|
|
|
|
+ ExpressDept user = appletsMapper.userDetailByOpenId(openid);
|
|
|
|
+ //添加充值记录
|
|
|
|
+ RechargeStatistics rechargeStatistics = new RechargeStatistics();
|
|
|
|
+ rechargeStatistics.setAmount(amount);
|
|
|
|
+ rechargeStatistics.setPayWay("2");
|
|
|
|
+ rechargeStatistics.setOutTradeNo(day+number);
|
|
|
|
+ rechargeStatistics.setPayStatus("1");
|
|
|
|
+ rechargeStatistics.setAccountId(user.getId().toString());
|
|
|
|
+ rechargeStatistics.setOperator("admin");
|
|
|
|
+ int a = appletsMapper.insertSelective(rechargeStatistics);
|
|
|
|
+
|
|
|
|
+ //更新余额
|
|
|
|
+ ExpressDeptAccount userAccount = new ExpressDeptAccount();
|
|
|
|
+ userAccount.setId(user.getId());
|
|
|
|
+ userAccount.setBalance(amount);
|
|
|
|
+ int b =appletsMapper.updateDeptAccount(userAccount);
|
|
|
|
+
|
|
|
|
+ log.info("----------a:"+a+"--------------b:"+b);
|
|
|
|
|
|
//返回通知微信已经接收到消息
|
|
//返回通知微信已经接收到消息
|
|
resXml = "<xml>" + "<return_code><![CDATA[SUCCESS]]></return_code>"
|
|
resXml = "<xml>" + "<return_code><![CDATA[SUCCESS]]></return_code>"
|