金币系统后端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

154 lines
5.4 KiB

  1. package com.example.demo.serviceImpl;
  2. import com.example.demo.domain.entity.Detail;
  3. import com.example.demo.domain.vo.RefundA;
  4. import com.example.demo.mapper.RefundMapper;
  5. import com.example.demo.sevice.RefundService;
  6. import com.github.pagehelper.PageHelper;
  7. import com.github.pagehelper.PageInfo;
  8. import lombok.RequiredArgsConstructor;
  9. import org.springframework.cache.annotation.CacheConfig;
  10. import org.springframework.cache.annotation.CacheEvict;
  11. import org.springframework.cache.annotation.Cacheable;
  12. import org.springframework.stereotype.Service;
  13. import org.springframework.transaction.annotation.Transactional;
  14. import java.math.BigDecimal;
  15. import java.util.Arrays;
  16. import java.util.List;
  17. import java.util.UUID;
  18. @RequiredArgsConstructor
  19. @Transactional
  20. @Service
  21. @CacheConfig(cacheNames = "refund")
  22. public class RefundServiceImpl implements RefundService {
  23. private final RefundMapper refundMapper;
  24. @CacheEvict(value = {"refund", "audit"}, allEntries = true)
  25. @Override
  26. public int add(Detail detail) {
  27. // 生成UUID作为订单编号
  28. String uuid = UUID.randomUUID().toString().replaceAll("-", ""); // 去掉UUID中的'-'
  29. detail.setOrderCode(uuid);
  30. return refundMapper.insert(detail);
  31. }
  32. @CacheEvict(value = {"refund", "audit"}, allEntries = true)
  33. @Override
  34. public int addAudit(Detail detail) {
  35. return refundMapper.insertAudit(detail);
  36. }
  37. //自动软删除数据加更新数据
  38. @CacheEvict(value = {"refund", "audit"}, allEntries = true)
  39. @Override
  40. public void edit(Detail newDetail) {
  41. // 获取旧的明细记录
  42. Detail oldDetail = refundMapper.selectByDetailId(newDetail.getDetailId());
  43. if (oldDetail == null || oldDetail.getDetailFlag() == 0) {
  44. throw new IllegalArgumentException("该记录不存在或已被隐藏!");
  45. }
  46. // 软删除旧记录
  47. refundMapper.update(oldDetail.getDetailId());
  48. // 将新的字段值复制到旧记录中,未修改的字段保持旧值
  49. if (newDetail.getJwcode() == null) newDetail.setJwcode(oldDetail.getJwcode());
  50. if (newDetail.getRefundType() == null) newDetail.setRefundType(oldDetail.getRefundType());
  51. if (newDetail.getRefundGoods() == null) newDetail.setRefundGoods(oldDetail.getRefundGoods());
  52. if (newDetail.getRechargeCoin() == null) newDetail.setRechargeCoin(oldDetail.getRechargeCoin());
  53. if (newDetail.getFreeCoin() == null) newDetail.setFreeCoin(oldDetail.getFreeCoin());
  54. if (newDetail.getTaskCoin() == null) newDetail.setTaskCoin(oldDetail.getTaskCoin());
  55. if (newDetail.getRemark() == null) newDetail.setRemark(oldDetail.getRemark());
  56. if (newDetail.getAdminId() == null) newDetail.setAdminId(oldDetail.getAdminId());
  57. // 插入新记录
  58. newDetail.setDetailId(null); // 清空 ID,让其自动生成
  59. newDetail.setDetailFlag(1); // 确保新记录未被删除
  60. refundMapper.insert(newDetail);
  61. }
  62. @Override
  63. @CacheEvict(value = {"refund", "recharge"}, allEntries = true)
  64. public int update(Integer contactId) {
  65. return refundMapper.updateOrderCode(contactId);
  66. }
  67. @Override
  68. public boolean existsByContactId(Integer contactId) {
  69. return refundMapper.existsByContactId(contactId);
  70. }
  71. @CacheEvict(value = {"refund", "recharge"}, allEntries = true)
  72. @Override
  73. public int softDelete(Integer detailId) {
  74. return refundMapper.update(detailId);
  75. }
  76. @Override
  77. public Detail selectByOrderCode(String orderCode) {
  78. return refundMapper.selectByOrderCode(orderCode);
  79. }
  80. @Override
  81. public Detail selectByJWCODE(String jwcode) {
  82. return refundMapper.selectByJWCODE(jwcode);
  83. }
  84. @Override
  85. public Detail selectByDetailId(Integer detailId) {
  86. return refundMapper.selectByDetailId(detailId);
  87. }
  88. @Override
  89. public List<Detail> search(Detail detail) {
  90. return refundMapper.select(detail);
  91. }
  92. @Cacheable(key = "#root.method.name + ':' + #pageNum + '-' + #pageSize + '-' + T(java.util.Objects).hashCode(#detail)")
  93. @Override
  94. public PageInfo<Detail> searchForPage(Integer pageNum, Integer pageSize, Detail detail) {
  95. PageHelper.startPage(pageNum, pageSize);
  96. List<Detail> list = refundMapper.select(detail);
  97. return new PageInfo<>(list);
  98. }
  99. // @Override
  100. // public List<RefundA> getRefundA(RefundA refundA) {
  101. // return refundMapper.getRefundA(refundA);
  102. // }
  103. @Override
  104. public List<RefundA> getRefundA(RefundA refundA) {
  105. // 执行原始查询,获取实际存在的分类及其汇总值
  106. List<RefundA> result = refundMapper.getRefundA(refundA);
  107. // 定义完整的分类列表
  108. List<String> fullStatuses = Arrays.asList("待审核", "已通过", "已驳回");
  109. // 遍历分类列表,检查哪些分类在查询结果中缺失,并为其补充默认值
  110. for (String status : fullStatuses) {
  111. boolean categoryExists = result.stream()
  112. .anyMatch(refund -> status.equals(refund.getStatus()));
  113. if (!categoryExists) {
  114. // 如果分类缺失,补充默认值
  115. RefundA defaultRefund = new RefundA();
  116. defaultRefund.setStatus(status);
  117. defaultRefund.setAmount(BigDecimal.ZERO); // 默认值为 0
  118. result.add(defaultRefund);
  119. }
  120. }
  121. return result;
  122. }
  123. }