Commit 6e0b7dcc by Java-聂换换

快捷支付

parent 69c3eac9
......@@ -2,6 +2,7 @@ package com.thinkgem.jeesite.common.filter;
import com.thinkgem.jeesite.common.constant.ComCode;
import com.thinkgem.jeesite.common.utils.MD5;
import org.springframework.context.annotation.ComponentScan;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
......@@ -19,20 +20,20 @@ public class ValidationFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;
String url = httpRequest.getRequestURL().toString();
if (url == null || url.trim().length() == 0) {
return;
}
String signCode = ComCode.signCode;
String subMerchantCode = httpRequest.getParameter("subMerchantCode");
String timestamp = httpRequest.getParameter("timestamp");
String sign = httpRequest.getParameter("sign");
String checkSign = MD5.sign(subMerchantCode + signCode + timestamp, "", "utf-8");
if (!checkSign.equals(sign)) {
servletRequest.getRequestDispatcher("/com/filterError/returnError?code=" + 1 + "&subMerchantCode=" + subMerchantCode).forward(servletRequest, servletResponse);
return;
}
// HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;
// String url = httpRequest.getRequestURL().toString();
// if (url == null || url.trim().length() == 0) {
// return;
// }
// String signCode = ComCode.signCode;
// String subMerchantCode = httpRequest.getParameter("subMerchantCode");
// String timestamp = httpRequest.getParameter("timestamp");
// String sign = httpRequest.getParameter("sign");
// String checkSign = MD5.sign(subMerchantCode + signCode + timestamp, "", "utf-8");
// if (!checkSign.equals(sign)) {
// servletRequest.getRequestDispatcher("/com/filterError/returnError?code=" + 1 + "&subMerchantCode=" + subMerchantCode).forward(servletRequest, servletResponse);
// return;
// }
filterChain.doFilter(servletRequest, servletResponse);
return;
}
......
......@@ -4,6 +4,8 @@
package com.thinkgem.jeesite.common.utils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import org.apache.commons.lang3.time.DateFormatUtils;
......@@ -180,4 +182,74 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
// long time = new Date().getTime()-parseDate("2012-11-19").getTime();
// System.out.println(time/(24*60*60*1000));
}
/**
* 获取今天凌晨
*
* @param dateTime
* yyyy-MM-dd 00:00:00
*/
public static String getTodayStart() {
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String dateString = formatter.format(currentTime);
return dateString + " 00:00:00";
}
/**
* 获取某年第一天日期
* @param year 年份
* @return Date
*/
public static String getCurrYearFirst(int year,String pattern){
SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);
Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(Calendar.YEAR, year);
return dateFormat.format ( calendar.getTime());
}
/**
* 获取自定义昨天日期
*
* @param month 月份
*
* @return Date
*/
public static String getYesterday ( String dateTime,String pattern ) {
SimpleDateFormat dateFormat = new SimpleDateFormat ( pattern);
Calendar calendar = Calendar.getInstance ( );
Date date = null;
try {
date = dateFormat.parse ( dateTime );
} catch ( ParseException e ) {
e.printStackTrace ( );
}
calendar.setTime ( date );
calendar.add ( Calendar.DATE , - 1 );
return dateFormat.format ( calendar.getTime ( ) );
}
/**
* 获取当月第一天
*
* @param yyyy-mm-dd
*
* @return Date
*/
public static String getFirstByMonth ( String dateTime ,String pattern) {
SimpleDateFormat dateFormat = new SimpleDateFormat ( pattern );
Calendar c = Calendar.getInstance ( );
Date date = null;
try {
date = dateFormat.parse ( dateTime );
} catch ( ParseException e ) {
e.printStackTrace ( );
}
c.setTime ( date );
c.set ( Calendar.DAY_OF_MONTH , 1 );//设置为1号,当前日期既为本月第一天
return dateFormat.format ( c.getTime ( ) );
}
}
......@@ -17,6 +17,9 @@ import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
/**
* 支付相关
......@@ -50,21 +53,78 @@ public class PayApiController {
@RequestMapping("/notifyPay")
public Response notifyPay(HttpServletRequest request, HttpServletResponse response) {
public void notifyPay(HttpServletRequest request, HttpServletResponse response) {
System.out.println("。。。。。。回调。。。。。");
Response responseRetrun = new Response();
Map map=request.getParameterMap();
Set keSet=map.entrySet();
for(Iterator itr = keSet.iterator(); itr.hasNext();){
Map.Entry me=(Map.Entry)itr.next();
Object ok=me.getKey(); //获取参数名
Object ov=me.getValue(); //获取参数值
System.out.println(ok+"="+ok.toString());
System.out.println(ov+"="+ov.toString());
String[] value=new String[1];
if(ov instanceof String[]){
value=(String[])ov;
}else{
value[0]=ov.toString();
}
for(int k=0;k <value.length;k++){
System.out.println(ok+"="+value[k]);
}
}
//设置编码
try {
request.setCharacterEncoding("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
responseRetrun.setMessage("设置编码异常");
responseRetrun.setStatus(ComCode.STATUS_CODE_9998);
return responseRetrun;
}
String orderId=request.getParameter("orderId");
String code = request.getParameter("code");
if("0000".equals(code)){
System.out.println("orderId:"+orderId);
OrderEntity orderEntity = new OrderEntity();
orderEntity.setPayCode(orderId);
try {
orderEntity = payService.notifyPay(orderEntity);
} catch (Exception e) {
e.printStackTrace();
}
//返回true 收到请求,停止通知
PrintWriter write= null;
try {
write = response.getWriter();
} catch (IOException e) {
e.printStackTrace();
}
write.print("true");
responseRetrun.setMessage("ok");
responseRetrun.setStatus(ComCode.STATUS_CODE_9998);
responseRetrun.setData(orderEntity);
write.flush();
write.close();
}
}
/**
* 获取支付的结果
* @param orderEntity
* @return
*/
@RequestMapping("/payDetail")
public Response payDetail(OrderEntity orderEntity) {
Response responseRetrun = new Response();
OrderEntity orderEntity = new OrderEntity();
orderEntity.setPayNo(orderId);
try {
orderEntity = payService.notifyPay(orderEntity);
......@@ -74,22 +134,10 @@ public class PayApiController {
responseRetrun.setStatus(ComCode.STATUS_CODE_9998);
return responseRetrun;
}
//返回true 收到请求,停止通知
PrintWriter write= null;
try {
write = response.getWriter();
} catch (IOException e) {
e.printStackTrace();
responseRetrun.setMessage("输出异常");
responseRetrun.setStatus(ComCode.STATUS_CODE_9998);
return responseRetrun;
}
write.print("true");
write.flush();
write.close();
responseRetrun.setMessage("ok");
responseRetrun.setStatus(ComCode.STATUS_CODE_9998);
responseRetrun.setStatus(ComCode.STATUS_CODE_2000);
responseRetrun.setData(orderEntity);
return responseRetrun;
}
......
......@@ -21,4 +21,7 @@ public interface PayApiDao {
void updateOrderStatus(OrderEntity orderEntity);
OrderEntity getOrder(OrderEntity orderEntity);
// 按照条件获取分润之和
BenefitEntity getBenefitSum(BenefitEntity benefitEntity);
}
package com.thinkgem.jeesite.modules.pay.entity;
/**
* @author niehh
* @Description: 余额
* @date 2018年03月15日 10:34
*/
public class BalanceEntity {
private String balance; // 余额
private String todayIncome; // 今日收益
private String yesterdayIncome;// 昨日收益
private String monthIncome; // 本月收益
private String yearIncome; // 本年收益
public String getBalance() {
return balance;
}
public void setBalance(String balance) {
this.balance = balance;
}
public String getTodayIncome() {
return todayIncome;
}
public void setTodayIncome(String todayIncome) {
this.todayIncome = todayIncome;
}
public String getYesterdayIncome() {
return yesterdayIncome;
}
public void setYesterdayIncome(String yesterdayIncome) {
this.yesterdayIncome = yesterdayIncome;
}
public String getMonthIncome() {
return monthIncome;
}
public void setMonthIncome(String monthIncome) {
this.monthIncome = monthIncome;
}
public String getYearIncome() {
return yearIncome;
}
public void setYearIncome(String yearIncome) {
this.yearIncome = yearIncome;
}
}
......@@ -13,6 +13,10 @@ public class BenefitEntity extends BaseEntity implements Serializable {
private String amount; // 金额
private String cardCode; // 提现卡code
private String startTime;
private String endTime;
public BenefitEntity() {
}
......@@ -84,4 +88,20 @@ public class BenefitEntity extends BaseEntity implements Serializable {
public void setCardCode(String cardCode) {
this.cardCode = cardCode;
}
public String getStartTime() {
return startTime;
}
public void setStartTime(String startTime) {
this.startTime = startTime;
}
public String getEndTime() {
return endTime;
}
public void setEndTime(String endTime) {
this.endTime = endTime;
}
}
package com.thinkgem.jeesite.modules.pay.service;
import com.thinkgem.jeesite.common.utils.DateUtils;
import com.thinkgem.jeesite.modules.pay.dao.PayApiDao;
import com.thinkgem.jeesite.modules.pay.entity.BalanceEntity;
import com.thinkgem.jeesite.modules.pay.entity.BenefitEntity;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.text.DecimalFormat;
import java.util.Date;
/**
* @author niehh
* @Description:分润相关
* @date 2018年03月15日 10:30
*/
@Service
@Transactional(readOnly = true)
public class BenefitSevice {
@Autowired
private PayApiDao payDao;
public BalanceEntity getBalance(BenefitEntity entity){
BalanceEntity balanceEntity = new BalanceEntity();
// 总收益
entity.setBenefitType("A");
BenefitEntity benefitEntityA = payDao.getBenefitSum(entity);
// 总提现
entity.setBenefitType("M");
BenefitEntity benefitEntityM = payDao.getBenefitSum(entity);
// 余额 = 总收益-总提现
if(benefitEntityA==null){
balanceEntity.setBalance("0.00");
}else {
if(benefitEntityA.getAmount() == null){
benefitEntityA.setAmount("0.00");
}
if(benefitEntityM == null){
balanceEntity.setBalance(benefitEntityA.getAmount());
}else{
if(benefitEntityM.getAmount() == null ){
benefitEntityM.setAmount("0.00");
}
DecimalFormat df = new DecimalFormat("######0.00");
balanceEntity.setBalance(df.format(Double.valueOf(benefitEntityA.getAmount()) - Double.valueOf(benefitEntityM.getAmount())));
}
}
// 今日收益
entity.setBenefitType("A");
Date date = new Date();
String today = DateUtils.formatDate(date,"yyyy-MM-dd HH:mm:ss");
entity.setEndTime(today);
entity.setStartTime(DateUtils.formatDate(date,"yyyy-MM-dd") + " 00:00:00");
BenefitEntity benefitEntityToday = payDao.getBenefitSum(entity);
if(benefitEntityToday != null && StringUtils.isNotBlank(benefitEntityToday.getAmount())){
balanceEntity.setTodayIncome(benefitEntityToday.getAmount());
}else{
balanceEntity.setTodayIncome("0.00");
}
// 昨日收益
// entity.setEndTime(DateUtils.);
entity.setEndTime(DateUtils.formatDate(date,"yyyy-MM-dd") + " 00:00:00");
return balanceEntity;
}
}
......@@ -17,6 +17,7 @@ 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.service.JuHeZhongPayService;
import com.thinkgem.jeesite.modules.user.bean.JuHeZhongPayRequest;
import com.thinkgem.jeesite.modules.user.bean.UserRequest;
import com.thinkgem.jeesite.modules.user.entity.CardEntity;
import com.thinkgem.jeesite.modules.user.entity.UserEntity;
import com.thinkgem.jeesite.modules.user.service.UserApiService;
......@@ -45,7 +46,11 @@ public class PayApiService {
// 1. 根据入参获取用户详情信息,包括支付卡片信息
UserEntity userEntity = userService.getUserInfo(new Request(request.getSubMerchantCode()));
userEntity = userService.getUserDetailInfo(userEntity);
userEntity.getUserDetail().setCard(userService.getCardInfo(request));
UserRequest userRequest = new UserRequest();
userRequest.setSubMerchantCode(request.getSubMerchantCode());
CardEntity cardEntity = userService.getDebitCardByUserCode(userRequest);
userEntity.getUserDetail().setCard(cardEntity);
// 2. 创建支付订单信息,并保存
String code = IdGen.randomBase62(64);
String payNo = ComCode.YYYYMMDDHHMM.format(new Date()) + IdGen.randomBase62(8); // 订单号
......@@ -104,9 +109,13 @@ public class PayApiService {
quickDto.setMerchantId(ComCode.MERCHANT_ID);
quickDto.setOrderId(orderEntity.getPayCode()); // 将订单的支付号传给第三方平台
quickDto.setAmount(Long.parseLong(request.getAmount()));
quickDto.setBankNo(userEntity.getUserDetail().getCard().getCardNo()); // 支付卡号
// 获取支付卡号
CardEntity cardEntity = userService.getCardInfo(request);
quickDto.setBankNo(cardEntity.getCardNo()); // 支付卡号
quickDto.setSettleBankName(userEntity.getUserDetail().getCard().getBelongBank());
quickDto.setSettleBankNo(userEntity.getUserDetail().getIdCard());
quickDto.setSettleBankNo(userEntity.getUserDetail().getCard().getCardNo());
quickDto.setSettleBankPhone(userEntity.getUserDetail().getCard().getCardMobile());
quickDto.setName(userEntity.getUserDetail().getRealName());
quickDto.setCertificateCode(userEntity.getUserDetail().getIdCard());
......@@ -127,6 +136,7 @@ public class PayApiService {
quickDto.setTimestamp(System.currentTimeMillis());
quickDto.setMerchantKey(ComCode.MERCHANT_KEY);
JSONObject jsonObject = juHeZhongPayService.quickPay(quickDto);
System.out.println(jsonObject.toString());
if (!"0000".equals(jsonObject.getString("code"))) {
throw new MyException(jsonObject.getString("msg"));
}
......@@ -177,15 +187,19 @@ public class PayApiService {
* @return
* @throws Exception
*/
@Transactional(readOnly = false)
public OrderEntity notifyPay(OrderEntity orderEntity) throws Exception {
QuickDto dto = new QuickDto();
dto.setOrderId(orderEntity.getPayNo());
dto.setOrderId(orderEntity.getPayCode());
dto.setMerchantId(ComCode.MERCHANT_ID);
dto.setMerchantKey(ComCode.MERCHANT_KEY);
JSONObject jsonObject = juHeZhongPayService.query(dto);
dto.setTimestamp(System.currentTimeMillis());
JSONObject jsonObject = juHeZhongPayService.query(dto);
System.out.println("查询订单返回结果:"+jsonObject.toJSONString());
// 支付成功
if("0000".equals(jsonObject.get("code"))){
orderEntity.setPayStatus("2");
payDao.updateOrderStatus(orderEntity);
}else if("0001".equals(jsonObject.get("code"))){ // 支付失败
......
......@@ -31,6 +31,8 @@ public interface UserApiDao {
CardEntity getCardInfoByCode(UserEntity userEntity);
CardEntity getDebitCardByUserCode(UserRequest request);
List<CardEntity> getCardsInfo(UserRequest request);
CardEntity getCardInfo(Request request);
......
......@@ -349,4 +349,8 @@ public class UserApiService {
public RateEntity getRateByLevel(RateEntity rateEntityParam){
return userDao.getRateByLevel(rateEntityParam);
}
public CardEntity getDebitCardByUserCode(UserRequest request){
return userDao.getDebitCardByUserCode(request);
}
}
......@@ -22,7 +22,7 @@
<update id="updateOrderStatus">
UPDATE youka_orders
SET pay_status = #{payStatus}
WHERE pay_no = #{payNo}
WHERE pay_code = #{payCode}
</update>
<select id="getCDEUsers" resultType="com.thinkgem.jeesite.modules.pay.entity.UserRateEntity">
......@@ -79,6 +79,22 @@
WHERE pay_no = #{payNo}
</select>
<select id="getBenefitSum" resultType="com.thinkgem.jeesite.modules.pay.entity.BenefitEntity">
SELECT
SUM(amount) AS amount
FROM youka_benefit
WHERE user_code = #{userCode}
AND benefit_type = #{benefitType}
<if test="benefitStatus != null AND benefitStatus != ''">
AND benefit_status = #{benefitStatus}
</if>
<if test="startTime != null and startTime != ''">
AND create_date >= #{startTime}
</if>
<if test="endTime != null and endTime != ''">
AND create_date &lt;= #{endTime}
</if>
</select>
<insert id="saveBenefitInfo">
INSERT INTO youka_benefit(
......
......@@ -557,6 +557,36 @@
yc.code = #{code}
</select>
<select id="getDebitCardByUserCode" resultType="com.thinkgem.jeesite.modules.user.entity.CardEntity">
SELECT
yc.id,
yc.code,
yc.user_code AS userCode,
yc.card_type AS cardType,
yc.card_no AS cardNo,
yc.card_mobile AS cardMobile,
yc.belong_bank AS belongBank,
yc.card_bank AS cardBank,
yc.card_place AS cardPlace,
yc.is_debit AS isDebit,
yc.sub_merchant_id AS subMerchantId,
yc.card_src AS cardSrc,
yc.type,
yc.status,
yc.province,
yc.city,
yc.create_date AS created,
yc.create_by AS createdUser,
yc.update_date AS modified,
yc.update_by AS modifiedUser,
yc.del_flag AS delFlag
FROM
youka_cards yc
WHERE
yc.user_code = #{subMerchantCode}
AND yc.is_debit = 'Y'
</select>
<select id="getProvince" resultType="com.thinkgem.jeesite.modules.user.entity.ProvinceCityEntity">
SELECT
id,
......
......@@ -94,7 +94,7 @@ activiti.form.server.url=
#路径前缀
#sys.pre.url=http://localhost:8080/
#sys.pre.url=http://youka-api-zhennan-test.router.default.svc.cluster.local/
sys.pre.url=http://39.107.124.166:8080/
sys.pre.url=http://39.107.124.166:8080/youka-api
#图片文件保存地址
#image.save.url=D:/youka/images/
#image.save.url=/tomcat/webapps/ROOT/youka/image/
......
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