VipCardLogServiceImpl.java 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. package beilv.vipCardLog.service.impl;
  2. import beilv.carinformation.domain.CarInformation;
  3. import beilv.carinformation.service.ICarInformationService;
  4. import beilv.common.core.domain.AjaxResult;
  5. import beilv.common.core.text.Convert;
  6. import beilv.common.utils.DateUtils;
  7. import beilv.common.utils.uuid.IdUtils;
  8. import beilv.competition.domain.Competition;
  9. import beilv.competition.service.ICompetitionService;
  10. import beilv.usermembershipcard.domain.UserMembershipCard;
  11. import beilv.usermembershipcard.service.IUserMembershipCardService;
  12. import beilv.vipCard.domain.VipCard;
  13. import beilv.vipCard.service.IVipCardService;
  14. import beilv.vipCardLog.domain.VipCardLog;
  15. import beilv.vipCardLog.mapper.VipCardLogMapper;
  16. import beilv.vipCardLog.service.IVipCardLogService;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import org.springframework.stereotype.Service;
  19. import java.math.BigDecimal;
  20. import java.math.RoundingMode;
  21. import java.util.List;
  22. import java.util.Map;
  23. /**
  24. * 充值记录Service业务层处理
  25. *
  26. * @author LG
  27. * @date 2025-11-12
  28. */
  29. @Service
  30. public class VipCardLogServiceImpl implements IVipCardLogService {
  31. @Autowired
  32. private VipCardLogMapper vipCardLogMapper;
  33. @Autowired
  34. private IVipCardService vipCardService;
  35. @Autowired
  36. private ICompetitionService competitionService;
  37. @Autowired
  38. private IUserMembershipCardService userMembershipCardService;
  39. @Autowired
  40. private ICarInformationService carInformationService;
  41. /**
  42. * 查询充值记录
  43. *
  44. * @param id 充值记录主键
  45. * @return 充值记录
  46. */
  47. @Override
  48. public VipCardLog selectVipCardLogById(String id) {
  49. return vipCardLogMapper.selectVipCardLogById(id);
  50. }
  51. /**
  52. * 查询充值记录列表
  53. *
  54. * @param vipCardLog 充值记录
  55. * @return 充值记录
  56. */
  57. @Override
  58. public List<VipCardLog> selectVipCardLogList(VipCardLog vipCardLog) {
  59. return vipCardLogMapper.selectVipCardLogList(vipCardLog);
  60. }
  61. /**
  62. * 新增充值记录
  63. *
  64. * @param vipCardLog 充值记录
  65. * @return 结果
  66. */
  67. @Override
  68. public int insertVipCardLog(VipCardLog vipCardLog) {
  69. return vipCardLogMapper.insertVipCardLog(vipCardLog);
  70. }
  71. /**
  72. * 修改充值记录
  73. *
  74. * @param vipCardLog 充值记录
  75. * @return 结果
  76. */
  77. @Override
  78. public int updateVipCardLog(VipCardLog vipCardLog) {
  79. return vipCardLogMapper.updateVipCardLog(vipCardLog);
  80. }
  81. /**
  82. * 批量删除充值记录
  83. *
  84. * @param ids 需要删除的充值记录主键
  85. * @return 结果
  86. */
  87. @Override
  88. public int deleteVipCardLogByIds(String ids) {
  89. return vipCardLogMapper.deleteVipCardLogByIds(Convert.toStrArray(ids));
  90. }
  91. /**
  92. * 删除充值记录信息
  93. *
  94. * @param id 充值记录主键
  95. * @return 结果
  96. */
  97. @Override
  98. public int deleteVipCardLogById(String id) {
  99. return vipCardLogMapper.deleteVipCardLogById(id);
  100. }
  101. @Override
  102. public int updateVipCardLogByOrderId(VipCardLog vipCardLog) {
  103. return vipCardLogMapper.updateVipCardLog(vipCardLog);
  104. }
  105. @Override
  106. public int getRegistrantsNumber(VipCardLog vipCardLog) {
  107. return vipCardLogMapper.getRegistrantsNumber(vipCardLog);
  108. }
  109. @Override
  110. public AjaxResult refundById(VipCardLog vipCardLog) {
  111. //拉去订单信息
  112. VipCardLog orderInfo = vipCardLogMapper.selectVipCardLogById(vipCardLog.getId());
  113. if("payment_status_to_be_paid".equals(orderInfo.getPaymentStatus())){
  114. return AjaxResult.error("订单未支付, 无需退款!");
  115. }
  116. if("payment_status_cancelled".equals(orderInfo.getPaymentStatus())){
  117. return AjaxResult.error("订单已取消, 无需退款!");
  118. }
  119. if("payment_status_refunded".equals(orderInfo.getPaymentStatus())){
  120. return AjaxResult.error("订单已退款, 无需重复操作!");
  121. }
  122. if("payment_status_verification".equals(orderInfo.getPaymentStatus())){
  123. return AjaxResult.error("订单已核销, 无法退款!");
  124. }
  125. //退款金额
  126. BigDecimal refundPrice = BigDecimal.valueOf(0);
  127. int refundSum = 0;
  128. if("yueqiu".equals(orderInfo.getOrderType())){
  129. if("numCard".equals(orderInfo.getPaymentType())){
  130. refundSum++;
  131. }else{
  132. refundPrice = refundPrice.add(orderInfo.getPracticalMoney());
  133. }
  134. }else if("gouka".equals(orderInfo.getOrderType())){
  135. //拿到次卡信息, 得到剩余使用次数
  136. UserMembershipCard userMembershipCard = userMembershipCardService.selectUserMembershipCardRecordId(orderInfo.getId());
  137. //获取原价信息
  138. CarInformation carInformation = carInformationService.selectCarInformationById(Long.valueOf(orderInfo.getBusId()));
  139. //计算已使用次数
  140. BigDecimal useSum = BigDecimal.valueOf(carInformation.getTotalNumber()-userMembershipCard.getRemainingNumber());
  141. //计算需要支付的金额
  142. BigDecimal userPrice = useSum.multiply(carInformation.getOriginalPrice());
  143. //实际支付的金额 - 需要支付的金额 = 退款金额
  144. BigDecimal refundMoner = orderInfo.getMemberPrice().subtract(userPrice);
  145. //判断如果退款金额 不大于0, 则设置退款金额为0
  146. refundMoner = refundMoner.compareTo(BigDecimal.ZERO) > 0 ? refundMoner : BigDecimal.ZERO;
  147. //计算退款金额
  148. refundPrice = refundPrice.add(refundMoner);
  149. }else if("cansai".equals(orderInfo.getOrderType()) || "menpiao".equals(orderInfo.getOrderType())){
  150. //验证赛事状态, 已经开始/已经结束/已经关闭 无法退款
  151. Competition competition = competitionService.selectCompetitionById(Integer.valueOf(orderInfo.getBusId()));
  152. if("competiton_state_5".equals(competition.getCompetitionState())){
  153. return AjaxResult.error("赛事已开始, 无法退票!");
  154. }
  155. if("competiton_state_6".equals(competition.getCompetitionState())){
  156. return AjaxResult.error("赛事已结束, 无法退票!");
  157. }
  158. if("competiton_state_3".equals(competition.getCompetitionState())){
  159. return AjaxResult.error("报名已结束, 无法退票!");
  160. }
  161. if("competiton_state_4".equals(competition.getCompetitionState())){
  162. return AjaxResult.error("赛事已关闭, 无法退票!");
  163. }
  164. //计算退款金额
  165. refundPrice = refundPrice.add(orderInfo.getPracticalMoney());
  166. }
  167. if("vipCard".equals(orderInfo.getPaymentType())){
  168. //查询会员卡信息
  169. VipCard vipCard = vipCardService.selectVipCardById(orderInfo.getPaymentId());
  170. vipCard.setBalance(vipCard.getBalance().add(refundPrice));
  171. vipCardService.updateVipCard(vipCard);
  172. }else if("weChart".equals(orderInfo.getPaymentType())){
  173. //微信支付, 退款到微信
  174. }else if("numCard".equals(orderInfo.getPaymentType())){
  175. //查询次卡信息
  176. UserMembershipCard userMembershipCard = userMembershipCardService.selectUserMembershipCardById(Long.valueOf(orderInfo.getPaymentId()));
  177. //剩余使用次数+1
  178. userMembershipCard.setRemainingNumber(userMembershipCard.getRemainingNumber() + refundSum);
  179. //更新次卡信息
  180. userMembershipCardService.updateUserMembershipCard(userMembershipCard);
  181. }
  182. vipCardLog.setRefundTime(DateUtils.getNowDate());
  183. vipCardLog.setPaymentStatus("payment_status_refunded");
  184. vipCardLogMapper.updateVipCardLog(vipCardLog);
  185. return AjaxResult.success("退款成功!");
  186. }
  187. @Override
  188. public List<Map<String, Object>> selectYueQiuList(VipCardLog vipCardLog) {
  189. vipCardLog.setOrderType("yueqiu");
  190. return vipCardLogMapper.selectYueQiuList(vipCardLog);
  191. }
  192. @Override
  193. public List<Map<String, Object>> selectCanSaiList(VipCardLog vipCardLog) {
  194. return vipCardLogMapper.selectCanSaiList(vipCardLog);
  195. }
  196. }