Commit 41832fd9 by Java-聂换换

快捷支付 和 余额查询

parent 6e0b7dcc
......@@ -14,6 +14,9 @@ public class BaseEntity implements java.io.Serializable {
@JsonIgnore
private String modifiedUser; //修改人
@JsonIgnore
private String delFlag;
public String getId() {
return id;
}
......@@ -61,4 +64,12 @@ public class BaseEntity implements java.io.Serializable {
public void setModifiedUser(String modifiedUser) {
this.modifiedUser = modifiedUser;
}
public String getDelFlag() {
return delFlag;
}
public void setDelFlag(String delFlag) {
this.delFlag = delFlag;
}
}
......@@ -99,4 +99,10 @@ public class ComCode {
*/
public static final String STATUS_CODE_5001 = "5001";
public static final String STATUS_CODE_5001_DESC = "卡片注册异常";
/**
* 支付订单相关
*/
public static final String STATUS_CODE_6001 = "6001";
public static final String STATUS_CODE_6001_DESC = "订单号不存在";
}
......@@ -172,16 +172,6 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
return (afterTime - beforeTime) / (1000 * 60 * 60 * 24);
}
/**
* @param args
* @throws ParseException
*/
public static void main(String[] args) throws ParseException {
// System.out.println(formatDate(parseDate("2010/3/6")));
// System.out.println(getDate("yyyy年MM月dd日 E"));
// long time = new Date().getTime()-parseDate("2012-11-19").getTime();
// System.out.println(time/(24*60*60*1000));
}
/**
* 获取今天凌晨
......@@ -232,6 +222,23 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
}
/**
* 获取自定义昨天日期
*
* @param month 月份
*
* @return Date
*/
public static String getYesterday ( String pattern ) {
SimpleDateFormat dateFormat = new SimpleDateFormat ( pattern);
Calendar calendar = Calendar.getInstance ( );
Date date = new Date();
calendar.setTime ( date );
calendar.add ( Calendar.DATE , - 1 );
return dateFormat.format ( calendar.getTime ( ) );
}
/**
* 获取当月第一天
*
* @param yyyy-mm-dd
......@@ -252,4 +259,33 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
return dateFormat.format ( c.getTime ( ) );
}
/**
* 获取某年第一天日期
* @param year 年份
* @return Date
*/
public static String getCurrYearFirst(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_YEAR, 1);
return dateFormat.format ( c.getTime());
}
/**
* @param args
* @throws ParseException
*/
public static void main(String[] args) throws ParseException {
System.out.println(getCurrYearFirst("2018-03-16 12:21:22","yyyy-MM-dd HH:mm:ss"));
}
}
package com.thinkgem.jeesite.modules.pay.api;
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.StringUtils;
import com.thinkgem.jeesite.modules.pay.entity.BalanceEntity;
import com.thinkgem.jeesite.modules.pay.entity.BenefitEntity;
import com.thinkgem.jeesite.modules.pay.service.BenefitSevice;
import com.thinkgem.jeesite.modules.user.bean.UserRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author niehh
* @Description:分润相关
* @date 2018年03月16日 14:32
*/
@RestController
@RequestMapping("/api/benefit")
public class BenefitController{
@Autowired
private BenefitSevice benefitSevice;
/**
* 余额查询
* @param request
* @return
*/
@PostMapping("/getBalance")
public Response getBalance(Request request){
Response response = new Response();
if(StringUtils.isBlank(request.getSubMerchantCode())){
response.setStatus(ComCode.STATUS_CODE_4001);
response.setMessage(ComCode.STATUS_CODE_4001_DESC);
return response;
}
BenefitEntity entity = new BenefitEntity();
entity.setUserCode(request.getSubMerchantCode());
BalanceEntity balanceEntity = benefitSevice.getBalance(entity);
response.setData(balanceEntity);
response.setStatus(ComCode.STATUS_CODE_2000);
response.setMessage(ComCode.STATUS_CODE_2000_DESC);
return response;
}
}
......@@ -3,6 +3,7 @@ package com.thinkgem.jeesite.modules.pay.api;
import com.thinkgem.jeesite.common.baseBean.Response;
import com.thinkgem.jeesite.common.constant.ComCode;
import com.thinkgem.jeesite.modules.pay.entity.OrderEntity;
import com.thinkgem.jeesite.modules.pay.juhezhong.dto.PayBackDto;
import com.thinkgem.jeesite.modules.pay.service.PayApiService;
import com.thinkgem.jeesite.modules.user.bean.JuHeZhongPayRequest;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -40,9 +41,10 @@ public class PayApiController {
public Response quickPay(JuHeZhongPayRequest request) {
Response resp = new Response();
try {
payService.quickPay(request);
PayBackDto payBackDto = payService.quickPay(request);
resp.setStatus(ComCode.STATUS_CODE_2000);
resp.setMessage(ComCode.STATUS_CODE_2000_DESC);
resp.setData(payBackDto);
} catch (Exception e) {
resp.setStatus(ComCode.STATUS_CODE_9998);
resp.setMessage(ComCode.STATUS_CODE_9998_DESC);
......@@ -127,10 +129,28 @@ public class PayApiController {
try {
// 获取订单
orderEntity = payService.getOrder(orderEntity);
if(orderEntity == null){
responseRetrun.setMessage(ComCode.STATUS_CODE_6001_DESC);
responseRetrun.setStatus(ComCode.STATUS_CODE_6001);
return responseRetrun;
}
// 已经支付成功或者支付失败的直接返回结果
if("2".equals(orderEntity.getPayStatus()) || "3".equals(orderEntity.getPayStatus()) || "4".equals(orderEntity.getPayStatus())){
responseRetrun.setMessage("ok");
responseRetrun.setStatus(ComCode.STATUS_CODE_2000);
responseRetrun.setData(orderEntity);
return responseRetrun;
}
// 未经过回调的 先进行juhezhong支付状态查询
orderEntity = payService.notifyPay(orderEntity);
} catch (Exception e) {
e.printStackTrace();
responseRetrun.setMessage("回调异常");
responseRetrun.setMessage(ComCode.STATUS_CODE_9998_DESC);
responseRetrun.setStatus(ComCode.STATUS_CODE_9998);
return responseRetrun;
}
......
......@@ -24,4 +24,11 @@ public interface PayApiDao {
// 按照条件获取分润之和
BenefitEntity getBenefitSum(BenefitEntity benefitEntity);
void updateBenefit(BenefitEntity benefitEntity);
void deleteBenefit(BenefitEntity benefitEntity);
// 查询状态为支付中的状态
List<OrderEntity> getOrderListTimeing(OrderEntity orderEntity);
}
......@@ -17,6 +17,7 @@ public class BenefitEntity extends BaseEntity implements Serializable {
private String endTime;
public BenefitEntity() {
}
......
package com.thinkgem.jeesite.modules.pay.juhezhong.dto;
/**
* @author niehh
* @Description: 支付返回信息
* @date 2018年03月18日 9:19
*/
public class PayBackDto {
private String url; // 支付url
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}
......@@ -58,8 +58,9 @@ public class BenefitSevice {
entity.setBenefitType("A");
Date date = new Date();
String today = DateUtils.formatDate(date,"yyyy-MM-dd HH:mm:ss");
String todayYMD = DateUtils.formatDate(date,"yyyy-MM-dd");
entity.setEndTime(today);
entity.setStartTime(DateUtils.formatDate(date,"yyyy-MM-dd") + " 00:00:00");
entity.setStartTime(todayYMD+ " 00:00:00");
BenefitEntity benefitEntityToday = payDao.getBenefitSum(entity);
if(benefitEntityToday != null && StringUtils.isNotBlank(benefitEntityToday.getAmount())){
balanceEntity.setTodayIncome(benefitEntityToday.getAmount());
......@@ -68,9 +69,36 @@ public class BenefitSevice {
}
// 昨日收益
// entity.setEndTime(DateUtils.);
entity.setEndTime(DateUtils.formatDate(date,"yyyy-MM-dd") + " 00:00:00");
entity.setEndTime(DateUtils.getYesterday(todayYMD,"yyyy-MM-dd") + "23:59:59");
entity.setStartTime(DateUtils.getYesterday(todayYMD,"yyyy-MM-dd") + " 00:00:00");
BenefitEntity benefitEntityYesterday = payDao.getBenefitSum(entity);
if(benefitEntityYesterday != null && StringUtils.isNotBlank(benefitEntityYesterday.getAmount())){
balanceEntity.setYesterdayIncome(benefitEntityToday.getAmount());
}else{
balanceEntity.setYesterdayIncome("0.00");
}
// 本月收益
entity.setEndTime(today);
entity.setStartTime(DateUtils.getFirstByMonth(todayYMD,"yyyy-MM-dd") + "00:00:00");
BenefitEntity benefitEntityMonth = payDao.getBenefitSum(entity);
if(benefitEntityMonth != null && StringUtils.isNotBlank(benefitEntityMonth.getAmount())){
balanceEntity.setMonthIncome(benefitEntityToday.getAmount());
}else{
balanceEntity.setMonthIncome("0.00");
}
// 本年收益
entity.setEndTime(today);
entity.setStartTime(DateUtils.getCurrYearFirst(todayYMD,"yyyy-MM-dd") + "00:00:00");
BenefitEntity benefitEntityYear = payDao.getBenefitSum(entity);
if(benefitEntityYear != null && StringUtils.isNotBlank(benefitEntityYear.getAmount())){
balanceEntity.setYearIncome(benefitEntityToday.getAmount());
}else{
balanceEntity.setYearIncome("0.00");
}
return balanceEntity;
}
......
......@@ -14,6 +14,7 @@ import com.thinkgem.jeesite.modules.pay.entity.RateEntity;
import com.thinkgem.jeesite.modules.pay.entity.UserRateEntity;
import com.thinkgem.jeesite.modules.pay.juhezhong.dto.ApiQuickPayDto;
import com.thinkgem.jeesite.modules.pay.juhezhong.dto.MerchantDto;
import com.thinkgem.jeesite.modules.pay.juhezhong.dto.PayBackDto;
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;
......@@ -22,10 +23,13 @@ import com.thinkgem.jeesite.modules.user.entity.CardEntity;
import com.thinkgem.jeesite.modules.user.entity.UserEntity;
import com.thinkgem.jeesite.modules.user.service.UserApiService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.annotation.Order;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.*;
/**
......@@ -42,7 +46,7 @@ public class PayApiService {
private JuHeZhongPayService juHeZhongPayService;
@Transactional(readOnly = false)
public void quickPay(JuHeZhongPayRequest request) throws MyException, Exception {
public PayBackDto quickPay(JuHeZhongPayRequest request) throws MyException, Exception {
// 1. 根据入参获取用户详情信息,包括支付卡片信息
UserEntity userEntity = userService.getUserInfo(new Request(request.getSubMerchantCode()));
userEntity = userService.getUserDetailInfo(userEntity);
......@@ -55,7 +59,9 @@ public class PayApiService {
String code = IdGen.randomBase62(64);
String payNo = ComCode.YYYYMMDDHHMM.format(new Date()) + IdGen.randomBase62(8); // 订单号
String payCode = IdGen.randomBase62(64);
OrderEntity orderEntity = new OrderEntity(code, request.getSubMerchantCode(), payNo, payCode, request.getPayChannel(), "1", request.getAmount(), request.getSubject(), "", String.valueOf("D".equalsIgnoreCase(userEntity.getUserDetail().getCard().getCardType()) ? 5 : ("C".equalsIgnoreCase(userEntity.getUserDetail().getCard().getCardType()) ? 6 : 0)), request.getCardCode());
DecimalFormat df = new DecimalFormat("######0.00");
String amount = df.format(Double.valueOf(request.getAmount()));
OrderEntity orderEntity = new OrderEntity(code, request.getSubMerchantCode(), payNo, payCode, request.getPayChannel(), "1",amount , request.getSubject(), "", String.valueOf("D".equalsIgnoreCase(userEntity.getUserDetail().getCard().getCardType()) ? 5 : ("C".equalsIgnoreCase(userEntity.getUserDetail().getCard().getCardType()) ? 6 : 0)), request.getCardCode());
payDao.saveOrderInfo(orderEntity);
// 3. 创建分润信息,并保存
Map<String, String> userBenefits = getUserBenefit(userEntity, request);
......@@ -65,7 +71,9 @@ public class PayApiService {
payDao.saveBenefitInfo(benefitEntity);
}
// 4. JuHeZhong支付
quickPayJuHeZhongPay(userEntity, orderEntity, request);
PayBackDto payBackDto = quickPayJuHeZhongPay(userEntity, orderEntity, request);
return payBackDto;
}
/*
......@@ -79,7 +87,7 @@ public class PayApiService {
* @param request
* @throws Exception
*/
public void quickPayJuHeZhongPay(UserEntity userEntity, OrderEntity orderEntity, JuHeZhongPayRequest request) throws Exception {
public PayBackDto quickPayJuHeZhongPay(UserEntity userEntity, OrderEntity orderEntity, JuHeZhongPayRequest request) throws Exception {
// 快捷支付
// ApiQuickPayDto quickPayDto = new ApiQuickPayDto();
// quickPayDto.setMerchantId(ComCode.MERCHANT_ID);
......@@ -137,9 +145,14 @@ public class PayApiService {
quickDto.setMerchantKey(ComCode.MERCHANT_KEY);
JSONObject jsonObject = juHeZhongPayService.quickPay(quickDto);
System.out.println(jsonObject.toString());
PayBackDto payBackDto = new PayBackDto();
if (!"0000".equals(jsonObject.getString("code"))) {
throw new MyException(jsonObject.getString("msg"));
}else{
payBackDto.setUrl(jsonObject.getString("url"));
}
return payBackDto;
}
public Map<String, String> getUserBenefit(UserEntity userEntity, JuHeZhongPayRequest request) {
......@@ -201,13 +214,42 @@ public class PayApiService {
if("0000".equals(jsonObject.get("code"))){
orderEntity.setPayStatus("2");
payDao.updateOrderStatus(orderEntity);
// BenefitEntity benefitEntity = new BenefitEntity();
// benefitEntity.setOrderCode(orderEntity.getPayCode());
// benefitEntity.setBenefitStatus("1");
// payDao.updateBenefit(benefitEntity);
}else if("0001".equals(jsonObject.get("code"))){ // 支付失败
orderEntity.setPayStatus("4");
payDao.updateOrderStatus(orderEntity);
BenefitEntity benefitEntity = new BenefitEntity();
benefitEntity.setOrderCode(orderEntity.getPayCode());
benefitEntity.setDelFlag("1");
payDao.deleteBenefit(benefitEntity);
}
orderEntity = payDao.getOrder(orderEntity);
return orderEntity;
}
public OrderEntity getOrder(OrderEntity orderEntity){
return payDao.getOrder(orderEntity);
}
@Scheduled(cron = "*/30 * * * * ?")
@Transactional(readOnly = false)
public void updateOrderTiming(){
OrderEntity orderEntity = new OrderEntity();
orderEntity.setCreated(DateUtils.getYesterday(DateUtils.getYesterday("yyyy-MM-dd HH:mm:ss")));
List<OrderEntity> list = payDao.getOrderListTimeing(orderEntity);
for(OrderEntity order:list){
order.setPayStatus("3");
payDao.updateOrderStatus(order);
BenefitEntity benefitEntity = new BenefitEntity();
benefitEntity.setOrderCode(order.getPayCode());
payDao.deleteBenefit(benefitEntity);
}
}
}
......@@ -77,15 +77,35 @@
card_code
FROM youka_orders
WHERE pay_no = #{payNo}
AND del_flag = 0
</select>
<select id="getOrderListTimeing" resultType="com.thinkgem.jeesite.modules.pay.entity.OrderEntity">
SELECT
code,
user_code,
pay_no,
pay_code,
pay_channel,
pay_status,
amount,
subject,
trade_no,
pay_type,
card_code
FROM youka_orders
WHERE pay_status = 1
AND create_date &lt;= #{create}
AND del_flag = 0
</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 del_flag = 0
AND benefit_type = #{benefitType}
<if test="benefitStatus != null AND benefitStatus != ''">
<if test="benefitStatus != null and benefitStatus != ''">
AND benefit_status = #{benefitStatus}
</if>
<if test="startTime != null and startTime != ''">
......@@ -96,6 +116,7 @@
</if>
</select>
<insert id="saveBenefitInfo">
INSERT INTO youka_benefit(
code,
......@@ -110,4 +131,16 @@
update_by
) VALUES (#{code}, #{userCode}, #{orderCode}, #{payChannel}, #{benefitStatus}, #{benefitType}, #{amount}, #{cardCode}, #{createdUser}, #{modifiedUser})
</insert>
<update id="updateBenefit">
UPDATE youka_benefit
SET benefit_status = #{benefitStatus}
WHERE order_code = #{orderCode}
</update>
<update id="deleteBenefit">
UPDATE youka_benefit
SET del_flag = 1
WHERE order_code = #{orderCode}
</update>
</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