From 1c5bae5118b4c9adcbd574d6fd5cc00635d1f3dd Mon Sep 17 00:00:00 2001 From: GYJ <1157756119@qq.com> Date: Wed, 4 Dec 2024 13:27:44 +0800 Subject: [PATCH] =?UTF-8?q?=E6=97=A0=E5=BF=A7=E4=BB=98=E6=94=AF=E4=BB=98?= =?UTF-8?q?=E8=AE=A2=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/sqx/common/utils/Result.java | 12 +- .../modules/invite/service/InviteService.java | 2 +- .../service/impl/InviteServiceImpl.java | 2 +- .../com/sqx/modules/orders/entity/Orders.java | 2 +- .../service/impl/OrdersServiceImpl.java | 179 +++++++++--------- .../pay/controller/app/WuyouController.java | 117 +++++++++++- 6 files changed, 211 insertions(+), 103 deletions(-) diff --git a/src/main/java/com/sqx/common/utils/Result.java b/src/main/java/com/sqx/common/utils/Result.java index 6ceb162b..e29a8322 100644 --- a/src/main/java/com/sqx/common/utils/Result.java +++ b/src/main/java/com/sqx/common/utils/Result.java @@ -11,20 +11,20 @@ import java.util.Map; */ public class Result extends HashMap { 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 { r.put("msg", msg); return r; } - + public static Result success(Map map) { Result r = new Result(); r.putAll(map); return r; } - + public static Result success() { return new Result(); } diff --git a/src/main/java/com/sqx/modules/invite/service/InviteService.java b/src/main/java/com/sqx/modules/invite/service/InviteService.java index b62e1c4c..9238e7f1 100644 --- a/src/main/java/com/sqx/modules/invite/service/InviteService.java +++ b/src/main/java/com/sqx/modules/invite/service/InviteService.java @@ -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 updateInvite(UserEntity userEntity, String format, Long userId, BigDecimal price); } diff --git a/src/main/java/com/sqx/modules/invite/service/impl/InviteServiceImpl.java b/src/main/java/com/sqx/modules/invite/service/impl/InviteServiceImpl.java index bd74d00d..b131d339 100644 --- a/src/main/java/com/sqx/modules/invite/service/impl/InviteServiceImpl.java +++ b/src/main/java/com/sqx/modules/invite/service/impl/InviteServiceImpl.java @@ -188,7 +188,7 @@ public class InviteServiceImpl extends ServiceImpl implements @Override - public Map updateInvite(UserEntity userEntity, String format, Long userId, BigDecimal price) { + public Map updateInvite(UserEntity userEntity, String format, Long userId, BigDecimal price) { Map result=new HashMap<>(); if (userEntity != null && userId != null && price != null) { Invite invite1 = inviteDao.selectInviteByUser(userEntity.getUserId(), userId,1); diff --git a/src/main/java/com/sqx/modules/orders/entity/Orders.java b/src/main/java/com/sqx/modules/orders/entity/Orders.java index 207f9b95..2d20b62c 100644 --- a/src/main/java/com/sqx/modules/orders/entity/Orders.java +++ b/src/main/java/com/sqx/modules/orders/entity/Orders.java @@ -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; diff --git a/src/main/java/com/sqx/modules/orders/service/impl/OrdersServiceImpl.java b/src/main/java/com/sqx/modules/orders/service/impl/OrdersServiceImpl.java index 55caa689..a0ea4c5e 100644 --- a/src/main/java/com/sqx/modules/orders/service/impl/OrdersServiceImpl.java +++ b/src/main/java/com/sqx/modules/orders/service/impl/OrdersServiceImpl.java @@ -217,52 +217,54 @@ public class OrdersServiceImpl extends ServiceImpl implements Map result = new HashMap<>(); //查询会员信息 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - //订单模板对象 - Orders orders = new Orders(); - if (courseId != null) { - //根据短剧id去查询短剧相关信息 来填充订单模板 - QueryWrapper 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 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 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() .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() .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 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 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 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 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 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 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 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); } - } diff --git a/src/main/java/com/sqx/modules/pay/controller/app/WuyouController.java b/src/main/java/com/sqx/modules/pay/controller/app/WuyouController.java index b705a9d8..ab1ff902 100644 --- a/src/main/java/com/sqx/modules/pay/controller/app/WuyouController.java +++ b/src/main/java/com/sqx/modules/pay/controller/app/WuyouController.java @@ -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 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"; } }