无忧付支付订单

This commit is contained in:
GYJ 2024-12-04 13:27:44 +08:00
parent 2e6ffef10a
commit 1c5bae5118
6 changed files with 211 additions and 103 deletions

View File

@ -11,20 +11,20 @@ import java.util.Map;
*/
public class Result extends HashMap<String, Object> {
private static final long serialVersionUID = 1L;
public Result () {
put("code", 0);
put("msg", "success");
}
public static Result error() {
return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, "未知异常,请联系管理员");
}
public static Result error(String msg) {
return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, msg);
}
public static Result error(int code, String msg) {
Result r = new Result();
r.put("code", code);
@ -37,13 +37,13 @@ public class Result extends HashMap<String, Object> {
r.put("msg", msg);
return r;
}
public static Result success(Map<String, Object> map) {
Result r = new Result();
r.putAll(map);
return r;
}
public static Result success() {
return new Result();
}

View File

@ -30,6 +30,6 @@ public interface InviteService {
PageUtils inviteAnalysis(int page,int limit, String time, Integer flag);
Map updateInvite(UserEntity userEntity, String format, Long userId, BigDecimal price);
Map<String,Object> updateInvite(UserEntity userEntity, String format, Long userId, BigDecimal price);
}

View File

@ -188,7 +188,7 @@ public class InviteServiceImpl extends ServiceImpl<InviteDao, Invite> implements
@Override
public Map updateInvite(UserEntity userEntity, String format, Long userId, BigDecimal price) {
public Map<String,Object> updateInvite(UserEntity userEntity, String format, Long userId, BigDecimal price) {
Map<String,Object> result=new HashMap<>();
if (userEntity != null && userId != null && price != null) {
Invite invite1 = inviteDao.selectInviteByUser(userEntity.getUserId(), userId,1);

View File

@ -70,7 +70,7 @@ public class Orders implements Serializable {
private Integer diamond;
/**
* 支付方式 1微信app 2微信公众号 3微信小程序 4支付宝 5会员免费 6金豆 7抖音 8快手
* 支付方式 1微信app 2微信公众号 3微信小程序 4支付宝 5会员免费 6金豆 7抖音 8快手 9无忧付支付宝
*/
private Integer payWay;

View File

@ -217,52 +217,54 @@ public class OrdersServiceImpl extends ServiceImpl<OrdersDao, Orders> implements
Map<String, Object> result = new HashMap<>();
//查询会员信息
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//订单模板对象
Orders orders = new Orders();
if (courseId != null) {
//根据短剧id去查询短剧相关信息 来填充订单模板
QueryWrapper<Course> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("is_delete", 0);
//短剧必须是未删除的
queryWrapper.eq("course_id", courseId);
Course course = courseDao.selectOne(queryWrapper);
if (course == null) {
return Result.error("系统繁忙,请刷新后重试!");
}
//设置订单编号
orders.setOrdersNo(AliPayOrderUtil.createOrderId());
//设置用户id
orders.setUserId(userId);
//设置短剧id
orders.setCourseId(courseId);
orders.setCourseDetailsId(courseDetailsId);
if (courseDetailsId != null) {
CourseDetails courseDetails = courseDetailsService.getById(courseDetailsId);
orders.setPayMoney(courseDetails.getPrice());
} else {
orders.setPayMoney(course.getPrice());
}
BigDecimal payDiamond = orders.getPayMoney().multiply(new BigDecimal(commonInfoService.findOne(892).getValue()));
orders.setPayDiamond(payDiamond);
//设置支付状态
orders.setStatus(0);
//设置订单创建时间
orders.setCreateTime(df.format(new Date()));
//设置订单种类
orders.setOrdersType(1);
//不是会员或会员过期直接生成订单直接生成订单
int count = baseMapper.insert(orders);
result.put("flag", 2);
result.put("orders", orders);
if (count > 0) {
return Result.success("生成订单成功!").put("data", result);
} else {
return Result.error("生成订单失败!");
}
} else {
if (courseId == null) {
return Result.error("短剧的id不能为空");
}
//订单模板对象
Orders orders = new Orders();
//根据短剧id去查询短剧相关信息 来填充订单模板
QueryWrapper<Course> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("is_delete", 0);
//短剧必须是未删除的
queryWrapper.eq("course_id", courseId);
Course course = courseDao.selectOne(queryWrapper);
if (course == null) {
return Result.error("系统繁忙,请刷新后重试!");
}
//设置订单编号
orders.setOrdersNo(AliPayOrderUtil.createOrderId());
//设置用户id
orders.setUserId(userId);
//设置短剧id
orders.setCourseId(courseId);
orders.setCourseDetailsId(courseDetailsId);
if (courseDetailsId != null) {
CourseDetails courseDetails = courseDetailsService.getById(courseDetailsId);
orders.setPayMoney(courseDetails.getPrice());
} else {
orders.setPayMoney(course.getPrice());
}
BigDecimal payDiamond = orders.getPayMoney().multiply(new BigDecimal(commonInfoService.findOne(892).getValue()));
orders.setPayDiamond(payDiamond);
//设置支付状态
orders.setStatus(0);
//设置订单创建时间
orders.setCreateTime(df.format(new Date()));
//设置订单种类
orders.setOrdersType(1);
//不是会员或会员过期直接生成订单直接生成订单
int count = baseMapper.insert(orders);
result.put("flag", 2);
result.put("orders", orders);
if (count > 0) {
return Result.success("生成订单成功!").put("data", result);
} else {
return Result.error("生成订单失败!");
}
} catch (Exception e) {
e.printStackTrace();
log.error("生成商品订单错误!!!" + e.getMessage());
@ -309,26 +311,26 @@ public class OrdersServiceImpl extends ServiceImpl<OrdersDao, Orders> implements
@Override
public Result payMoney(Long ordersId) {
reentrantReadWriteLock.writeLock().lock();
try{
try {
Orders orders = baseMapper.selectById(ordersId);
if (orders == null || !orders.getStatus().equals(0)) {
return Result.error("订单错误,请刷新后重试!");
}
if(orders.getOrdersType()==1){
int count=0;
if(orders.getCourseDetailsId() != null){
if (orders.getOrdersType() == 1) {
int count = 0;
if (orders.getCourseDetailsId() != null) {
count = courseUserDao.selectCount(new QueryWrapper<CourseUser>()
.eq("user_id", orders.getUserId())
.eq("classify",2)
.eq("classify", 2)
.eq("course_id", orders.getCourseId())
.eq(orders.getCourseDetailsId() != null, "course_details_id", orders.getCourseDetailsId()));
}else{
} else {
count = courseUserDao.selectCount(new QueryWrapper<CourseUser>()
.eq("user_id", orders.getUserId())
.eq("classify",1)
.eq("classify", 1)
.eq("course_id", orders.getCourseId()));
}
if(count>0){
if (count > 0) {
return Result.error("您已购买,请不要重复点击");
}
}
@ -356,27 +358,27 @@ public class OrdersServiceImpl extends ServiceImpl<OrdersDao, Orders> implements
UserEntity byUser = userService.queryByInvitationCode(userEntity.getInviterCode());
Map map = inviteService.updateInvite(byUser, DateUtils.format(new Date()), userEntity.getUserId(), orders.getPayMoney());
Object oneUserId = map.get("oneUserId");
if(oneUserId!=null){
if (oneUserId != null) {
orders.setOneUserId(Long.parseLong(String.valueOf(oneUserId)));
orders.setOneMoney(new BigDecimal(String.valueOf(map.get("oneMoney"))));
}
Object twoUserId = map.get("twoUserId");
if(twoUserId!=null){
if (twoUserId != null) {
orders.setTwoUserId(Long.parseLong(String.valueOf(twoUserId)));
orders.setTwoMoney(new BigDecimal(String.valueOf(map.get("twoMoney"))));
}
Object sysUserId = map.get("sysUserId");
if(sysUserId!=null){
if (sysUserId != null) {
orders.setSysUserId(Long.parseLong(String.valueOf(sysUserId)));
orders.setQdMoney(new BigDecimal(String.valueOf(map.get("qdMoney"))));
}
baseMapper.updateById(orders);
insertOrders(orders);
return Result.success();
}catch (Exception e){
} catch (Exception e) {
e.printStackTrace();
log.error("金豆支付订单异常:"+e.getMessage(),e);
}finally {
log.error("金豆支付订单异常:" + e.getMessage(), e);
} finally {
reentrantReadWriteLock.writeLock().unlock();
}
return Result.success();
@ -394,7 +396,7 @@ public class OrdersServiceImpl extends ServiceImpl<OrdersDao, Orders> implements
if (!refund) {
return Result.error("退款失败!");
}
} else if(bean.getPayWay()==4 || bean.getPayWay()==5){
} else if (bean.getPayWay() == 4 || bean.getPayWay() == 5) {
String code = aliPayController.alipayRefund(bean);
if (StringUtils.isNotBlank(code)) {
JSONObject jsonObject = JSON.parseObject(code);
@ -406,18 +408,18 @@ public class OrdersServiceImpl extends ServiceImpl<OrdersDao, Orders> implements
} else {
return Result.error("退款失败!");
}
}else if(bean.getPayWay()==7){
} else if (bean.getPayWay() == 7) {
boolean refund = dyService.refund(bean);
if (!refund) {
return Result.error("退款失败!");
}
}else{
userMoneyService.updateMoney(1,bean.getUserId(),bean.getPayMoney().doubleValue());
UserMoneyDetails userMoneyDetails=new UserMoneyDetails();
} else {
userMoneyService.updateMoney(1, bean.getUserId(), bean.getPayMoney().doubleValue());
UserMoneyDetails userMoneyDetails = new UserMoneyDetails();
userMoneyDetails.setMoney(bean.getPayMoney());
userMoneyDetails.setUserId(bean.getUserId());
userMoneyDetails.setContent("订单:"+bean.getOrdersNo());
userMoneyDetails.setTitle("订单退款:"+bean.getPayMoney());
userMoneyDetails.setContent("订单:" + bean.getOrdersNo());
userMoneyDetails.setTitle("订单退款:" + bean.getPayMoney());
userMoneyDetails.setType(1);
userMoneyDetails.setClassify(1);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@ -435,23 +437,23 @@ public class OrdersServiceImpl extends ServiceImpl<OrdersDao, Orders> implements
UserVip userVip = userVipService.selectUserVipByUserId(bean.getUserId());
if (userVip != null) {
//判断用户开通的会员是否到期
if(userVip.getIsVip()!=null && userVip.getIsVip()==2){
int month=0;
if (userVip.getIsVip() != null && userVip.getIsVip() == 2) {
int month = 0;
//0会月/1季度/2年
if(bean.getVipNameType()==0){
month=1;
}else if(bean.getVipNameType()==1){
month=3;
}else{
month=12;
if (bean.getVipNameType() == 0) {
month = 1;
} else if (bean.getVipNameType() == 1) {
month = 3;
} else {
month = 12;
}
Calendar calendar=Calendar.getInstance();
calendar.setTime(DateUtils.stringToDate(userVip.getEndTime(),DateUtils.DATE_TIME_PATTERN));
calendar.add(Calendar.MONTH,-month);
if(calendar.getTime().getTime()>System.currentTimeMillis()){
Calendar calendar = Calendar.getInstance();
calendar.setTime(DateUtils.stringToDate(userVip.getEndTime(), DateUtils.DATE_TIME_PATTERN));
calendar.add(Calendar.MONTH, -month);
if (calendar.getTime().getTime() > System.currentTimeMillis()) {
//判断时间是否大于当前时间 如果大于 则改
userVip.setEndTime(DateUtils.format(calendar.getTime()));
}else{
} else {
//否则设置为当前时间 并且会员改为过期
userVip.setEndTime(DateUtils.format(new Date()));
userVip.setIsVip(1);
@ -466,12 +468,12 @@ public class OrdersServiceImpl extends ServiceImpl<OrdersDao, Orders> implements
}
@Override
public Result selectOrders(Integer page, Integer limit, String ordersNo, Integer status, Long userId,Long courseId,
Integer flag,String time,String userName,Integer ordersType,String startTime,String endTime,
Long sysUserId,String qdCode,String sysUserName) {
public Result selectOrders(Integer page, Integer limit, String ordersNo, Integer status, Long userId, Long courseId,
Integer flag, String time, String userName, Integer ordersType, String startTime, String endTime,
Long sysUserId, String qdCode, String sysUserName) {
Page<Orders> pages = new Page<>(page, limit);
return Result.success().put("data", new PageUtils(baseMapper.selectOrdersByOrdersNo(pages, ordersNo, status, userId,courseId,
flag,time,userName,ordersType,startTime,endTime,sysUserId,qdCode,sysUserName)));
return Result.success().put("data", new PageUtils(baseMapper.selectOrdersByOrdersNo(pages, ordersNo, status, userId, courseId,
flag, time, userName, ordersType, startTime, endTime, sysUserId, qdCode, sysUserName)));
}
@Override
@ -522,26 +524,25 @@ public class OrdersServiceImpl extends ServiceImpl<OrdersDao, Orders> implements
@Override
public Integer selectOrdersCount(Integer status, Integer ordersType, Integer flag, String time,Long sysUserId) {
return baseMapper.selectOrdersCount(status, ordersType, flag, time,sysUserId);
public Integer selectOrdersCount(Integer status, Integer ordersType, Integer flag, String time, Long sysUserId) {
return baseMapper.selectOrdersCount(status, ordersType, flag, time, sysUserId);
}
@Override
public Double selectOrdersMoney(Integer status, Integer ordersType, Integer flag, String time,Long courseId,Long sysUserId) {
return baseMapper.selectOrdersMoney(status, ordersType, flag, time,courseId,sysUserId);
public Double selectOrdersMoney(Integer status, Integer ordersType, Integer flag, String time, Long courseId, Long sysUserId) {
return baseMapper.selectOrdersMoney(status, ordersType, flag, time, courseId, sysUserId);
}
@Override
public Double selectFenXiaoMoney(Integer type,Long sysUserId,Integer flag,String time) {
public Double selectFenXiaoMoney(Integer type, Long sysUserId, Integer flag, String time) {
return baseMapper.selectFenXiaoMoney(type, sysUserId, flag, time);
}
@Override
public Integer selectOrdersCountStatisticsByYear(Integer flag,String time,Integer status){
public Integer selectOrdersCountStatisticsByYear(Integer flag, String time, Integer status) {
return baseMapper.selectOrdersCountStatisticsByYear(flag, time, status);
}
}

View File

@ -1,17 +1,28 @@
package com.sqx.modules.pay.controller.app;
import com.alibaba.fastjson.JSONObject;
import com.amazonaws.services.dynamodbv2.xspec.M;
import com.sqx.common.utils.DateUtils;
import com.sqx.common.utils.Result;
import com.sqx.modules.app.entity.UserEntity;
import com.sqx.modules.app.service.UserService;
import com.sqx.modules.invite.service.InviteService;
import com.sqx.modules.orders.entity.Orders;
import com.sqx.modules.orders.service.OrdersService;
import com.sqx.modules.pay.dao.PayDetailsDao;
import com.sqx.modules.pay.entity.PayDetails;
import com.sqx.modules.pay.wuyou.BaseResp;
import com.sqx.modules.pay.wuyou.Encrypt;
import com.sqx.modules.pay.wuyou.NotifyDto;
import com.sqx.modules.pay.wuyou.WuyouPay;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@ -24,6 +35,57 @@ import java.util.Map;
@RequestMapping("/app/wuyou")
public class WuyouController {
private final OrdersService ordersService;
private final PayDetailsDao payDetailsDao;
private final UserService userService;
private final InviteService inviteService;
private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
WuyouController(OrdersService ordersService, PayDetailsDao payDetailsDao, UserService userService, InviteService inviteService) {
this.ordersService = ordersService;
this.payDetailsDao = payDetailsDao;
this.userService = userService;
this.inviteService = inviteService;
}
@ApiOperation("支付订单")
@PostMapping("/payOrder")
public Result payOrder(HttpServletRequest request, @RequestBody Long orderId, @RequestAttribute("userId") Long userId) {
Orders order = ordersService.getById(orderId);
if (order == null) {
return Result.error("订单不存在");
}
if (order.getStatus() != 0) {
return Result.error("订单已支付");
}
if (!order.getUserId().equals(userId)) {
return Result.error("订单不属于当前用户");
}
PayDetails payDetails = payDetailsDao.selectByOrderId(order.getOrdersNo());
if (payDetails == null) {
payDetails = new PayDetails();
payDetails.setState(0);
payDetails.setCreateTime(sdf.format(new Date()));
payDetails.setOrderId(order.getOrdersNo());
payDetails.setUserId(order.getUserId());
payDetails.setMoney(order.getPayMoney().doubleValue());
payDetails.setType(1);
payDetails.setClassify(9);
payDetailsDao.insert(payDetails);
}
BaseResp baseResp = WuyouPay.payOrder(order.getOrdersNo(), order.getPayMoney().toString(), request.getHeader("User-Agent"));
if (baseResp.getCode() != 200) {
return Result.error(baseResp.getMsg());
}
return Result.success().put("data", baseResp.getData());
}
@PostMapping("/notify")
public String notify(HttpServletRequest request, @RequestBody NotifyDto notifyDto) {
log.info("无忧支付回调");
@ -41,6 +103,51 @@ public class WuyouController {
log.info("无忧支付回调成功, 参数: {}", JSONObject.toJSONString(notifyDto));
Orders order = ordersService.selectOrderByOrdersNo(notifyDto.getOutTradeNo());
if (order == null) {
log.error("无忧支付回调订单不存在, 参数: {}", JSONObject.toJSONString(notifyDto));
return "订单不存在";
}
if (order.getStatus() != 0) {
log.error("无忧支付回调订单已支付, 参数: {}", JSONObject.toJSONString(notifyDto));
return "订单已支付";
}
PayDetails payDetails = payDetailsDao.selectByOrderId(notifyDto.getOutTradeNo());
if (payDetails.getState() != 0) {
log.info("订单表信息丢失!");
}
String format = sdf.format(new Date());
payDetailsDao.updateState(payDetails.getId(), 1, format, notifyDto.getOutTradeNo());
order.setPayWay(9);
order.setStatus(1);
order.setPayTime(DateUtils.format(new Date()));
UserEntity user = userService.selectUserById(order.getUserId());
UserEntity byUser = userService.queryByInvitationCode(user.getInviterCode());
Map<String, Object> map = inviteService.updateInvite(byUser, format, user.getUserId(), order.getPayMoney());
Object oneUserId = map.get("oneUserId");
if (oneUserId != null) {
order.setOneUserId(Long.parseLong(String.valueOf(oneUserId)));
order.setOneMoney(new BigDecimal(String.valueOf(map.get("oneMoney"))));
}
Object twoUserId = map.get("twoUserId");
if (twoUserId != null) {
order.setTwoUserId(Long.parseLong(String.valueOf(twoUserId)));
order.setTwoMoney(new BigDecimal(String.valueOf(map.get("twoMoney"))));
}
Object sysUserId = map.get("sysUserId");
if (sysUserId != null) {
order.setSysUserId(Long.parseLong(String.valueOf(sysUserId)));
order.setQdMoney(new BigDecimal(String.valueOf(map.get("qdMoney"))));
}
ordersService.updateById(order);
ordersService.insertOrders(order);
return "success";
}
}