TRechargeServiceImpl.java 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. package com.ylx.massage.service.impl;
  2. import cn.hutool.json.JSONObject;
  3. import cn.hutool.json.JSONUtil;
  4. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  5. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  6. import com.ijpay.core.IJPayHttpResponse;
  7. import com.ijpay.core.enums.RequestMethodEnum;
  8. import com.ijpay.core.kit.PayKit;
  9. import com.ijpay.core.kit.WxPayKit;
  10. import com.ijpay.core.utils.DateTimeZoneUtil;
  11. import com.ijpay.wxpay.WxPayApi;
  12. import com.ijpay.wxpay.enums.WxDomainEnum;
  13. import com.ijpay.wxpay.enums.v3.BasePayApiEnum;
  14. import com.ijpay.wxpay.model.v3.Amount;
  15. import com.ijpay.wxpay.model.v3.Payer;
  16. import com.ijpay.wxpay.model.v3.UnifiedOrderModel;
  17. import com.ylx.common.config.WxPayConfig;
  18. import com.ylx.common.core.domain.R;
  19. import com.ylx.common.exception.ServiceException;
  20. import com.ylx.common.utils.StringUtils;
  21. import com.ylx.massage.domain.TConsumptionLog;
  22. import com.ylx.massage.domain.TRecharge;
  23. import com.ylx.massage.domain.TWxUser;
  24. import com.ylx.massage.mapper.TRechargeMapper;
  25. import com.ylx.massage.service.TConsumptionLogService;
  26. import com.ylx.massage.service.TRechargeService;
  27. import com.ylx.massage.service.TWxUserService;
  28. import com.ylx.massage.utils.OrderNumberGenerator;
  29. import io.swagger.annotations.ApiOperation;
  30. import lombok.extern.slf4j.Slf4j;
  31. import org.springframework.beans.factory.annotation.Autowired;
  32. import org.springframework.stereotype.Service;
  33. import org.springframework.transaction.annotation.Transactional;
  34. import org.springframework.web.bind.annotation.GetMapping;
  35. import org.springframework.web.bind.annotation.RequestParam;
  36. import javax.annotation.Resource;
  37. import java.math.BigDecimal;
  38. import java.time.LocalDateTime;
  39. import java.util.Map;
  40. import static com.ylx.common.constant.HttpStatus.SUCCESS;
  41. /**
  42. * 充值记录表 服务实现类
  43. */
  44. @Service
  45. @Slf4j
  46. public class TRechargeServiceImpl extends ServiceImpl<TRechargeMapper, TRecharge> implements TRechargeService {
  47. @Resource
  48. private TWxUserService wxUserService;
  49. @Resource
  50. private OrderNumberGenerator generator;
  51. @Resource
  52. private TConsumptionLogService consumptionLogService;
  53. @Override
  54. @Transactional(rollbackFor = Exception.class)
  55. public TRecharge recharge(TRecharge recharge) {
  56. //增加充值记录
  57. if (StringUtils.isBlank(recharge.getcOpenId())) {
  58. throw new ServiceException("openId不能为空");
  59. }
  60. if (null == recharge.getdMoney() || recharge.getdMoney().compareTo(BigDecimal.ZERO) <= 0) {
  61. throw new ServiceException("充值金额不能为空");
  62. }
  63. LambdaQueryWrapper<TRecharge> queryWrapper = new LambdaQueryWrapper<>();
  64. queryWrapper.eq(TRecharge::getcOpenId, recharge.getcOpenId()).eq(TRecharge::getPayStatus, -1).eq(TRecharge::getdMoney, recharge.getdMoney());
  65. TRecharge one = getOne(queryWrapper);
  66. if (one != null) {
  67. log.info("未支付的充值记录,{}",one.getRechargeNo());
  68. return one;
  69. }
  70. recharge.setRechargeNo(generator.generateNextOrderNumber(OrderNumberGenerator.KEY_PREFIX_RECHAR));
  71. recharge.setDtCreateTime(LocalDateTime.now());
  72. save(recharge);
  73. //todo 调用微信支付成功后增加账户金额
  74. return recharge;
  75. }
  76. @Override
  77. @Transactional(rollbackFor = Exception.class)
  78. public TRecharge increaseAmount(String rechargeNo) {
  79. //增加个人账户金额
  80. TRecharge recharge = getByRechargeNo(rechargeNo);
  81. if(recharge == null){
  82. log.error("未支付的充值记录不存在,单号:{}",rechargeNo);
  83. return null;
  84. }
  85. //修改充值状态
  86. recharge.setPayStatus(1);
  87. this.updateById(recharge);
  88. //增加个人账户金额
  89. TWxUser user = wxUserService.getByOpenId(recharge.getcOpenId());
  90. user.setdBalance(user.getdBalance().add(recharge.getdMoney()));
  91. wxUserService.updateById(user);
  92. //增加消费记录
  93. TConsumptionLog tConsumptionLog = new TConsumptionLog();
  94. tConsumptionLog.setAmount(recharge.getdMoney());
  95. tConsumptionLog.setBillNo(rechargeNo);
  96. tConsumptionLog.setOpenId(recharge.getcOpenId());
  97. tConsumptionLog.setBillType(1);
  98. tConsumptionLog.setNote("微信充值");
  99. consumptionLogService.save(tConsumptionLog);
  100. log.info("微信充值成功,充值单号:{},充值金额:{},充值OpenId:{}",rechargeNo,recharge.getdMoney(),user.getcOpenid());
  101. return recharge;
  102. }
  103. private TRecharge getByRechargeNo(String rechargeNo) {
  104. return getOne(new LambdaQueryWrapper<TRecharge>().eq(TRecharge::getRechargeNo, rechargeNo).eq(TRecharge::getPayStatus, -1));
  105. }
  106. }