UserPackageService.java 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. package com.izouma.jiashanxia.service;
  2. import cn.hutool.core.util.ObjectUtil;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.izouma.jiashanxia.domain.PackageGoods;
  5. import com.izouma.jiashanxia.domain.User;
  6. import com.izouma.jiashanxia.domain.UserPackage;
  7. import com.izouma.jiashanxia.domain.UserPackageFlow;
  8. import com.izouma.jiashanxia.dto.GoodsDTO;
  9. import com.izouma.jiashanxia.dto.PageQuery;
  10. import com.izouma.jiashanxia.enums.FlowType;
  11. import com.izouma.jiashanxia.enums.PackageType;
  12. import com.izouma.jiashanxia.exception.BusinessException;
  13. import com.izouma.jiashanxia.repo.UserRepo;
  14. import com.izouma.jiashanxia.repo.UserPackageFlowRepo;
  15. import com.izouma.jiashanxia.repo.UserPackageRepo;
  16. import com.izouma.jiashanxia.utils.JpaUtils;
  17. import io.swagger.models.auth.In;
  18. import lombok.AllArgsConstructor;
  19. import org.springframework.data.domain.Page;
  20. import org.springframework.stereotype.Service;
  21. import java.util.List;
  22. import java.util.Map;
  23. import java.util.stream.Collectors;
  24. @Service
  25. @AllArgsConstructor
  26. public class UserPackageService {
  27. private final UserPackageRepo userPackageRepo;
  28. private final UserPackageFlowRepo userPackageFlowRepo;
  29. public Page<UserPackage> all(PageQuery pageQuery) {
  30. return userPackageRepo.findAll(JpaUtils.toSpecification(pageQuery, UserPackage.class), JpaUtils.toPageRequest(pageQuery));
  31. }
  32. /**
  33. * 加入套餐
  34. *
  35. * @param userId 用户id
  36. * @param packageGoodsList 套餐商品
  37. * @param num 数量
  38. * @param type 类型(团队/个人)
  39. */
  40. public void joinUserPackage(Long userId, List<PackageGoods> packageGoodsList, Integer num, PackageType type) {
  41. // 用户已有套餐
  42. Map<Long, UserPackage> userPackageMap = userPackageRepo.findAllByUserIdAndType(userId, type)
  43. .stream()
  44. .collect(Collectors.toMap(UserPackage::getGoodsInfoId, userSet -> userSet));
  45. // 加入用户套餐
  46. packageGoodsList.forEach(setGoods -> {
  47. UserPackage goods = userPackageMap.get(setGoods.getGoodsInfoId());
  48. if (ObjectUtil.isNotEmpty(goods)) {
  49. goods.setNum(goods.getNum() + setGoods.getNum() * num);
  50. goods.setRemark(setGoods.getRemark());
  51. } else {
  52. goods = UserPackage.builder()
  53. .userId(userId)
  54. .goodsInfoId(setGoods.getGoodsInfoId())
  55. .num(setGoods.getNum() * num)
  56. .remark(setGoods.getRemark())
  57. .type(type)
  58. .build();
  59. }
  60. userPackageRepo.save(goods);
  61. });
  62. // 记录套餐流水
  63. List<GoodsDTO> goodsDTOS = JSONObject.parseArray(JSONObject.toJSONString(packageGoodsList), GoodsDTO.class);
  64. userPackageFlowRepo.save(UserPackageFlow.builder()
  65. .userId(userId)
  66. .type(FlowType.BUY)
  67. .packageType(type)
  68. // .content(JSONObject.toJSONString(goodsDTOS))
  69. .content(goodsDTOS)
  70. .build());
  71. }
  72. public void joinUserPackage1(Long userId, List<PackageGoods> packageGoodsList, Integer num) {
  73. // 用户已有套餐
  74. Map<Long, UserPackage> userPackageMap = userPackageRepo.findAllByUserId(userId)
  75. .stream()
  76. .collect(Collectors.toMap(UserPackage::getGoodsInfoId, userSet -> userSet));
  77. // 加入用户套餐
  78. packageGoodsList.forEach(setGoods -> {
  79. UserPackage goods = userPackageMap.get(setGoods.getGoodsInfoId());
  80. if (ObjectUtil.isNotEmpty(goods)) {
  81. goods.setNum(goods.getNum() + setGoods.getNum() * num);
  82. goods.setRemark(setGoods.getRemark());
  83. } else {
  84. goods = UserPackage.builder()
  85. .userId(userId)
  86. .goodsInfoId(setGoods.getGoodsInfoId())
  87. .num(setGoods.getNum() * num)
  88. .remark(setGoods.getRemark())
  89. .build();
  90. }
  91. userPackageRepo.save(goods);
  92. });
  93. }
  94. /*
  95. 多次套餐退款
  96. */
  97. public boolean canRefund(Long userId, Long orderId) {
  98. UserPackageFlow flow = userPackageFlowRepo.findByOrderInfoId(orderId);
  99. List<GoodsDTO> content = flow.getContent();
  100. Map<Long, UserPackage> userPackageMap = userPackageRepo.findAllByUserId(userId)
  101. .stream()
  102. .collect(Collectors.toMap(UserPackage::getGoodsInfoId, aPackage -> aPackage));
  103. for (GoodsDTO goods : content) {
  104. UserPackage userPackage = userPackageMap.get(goods.getGoodsInfoId());
  105. if (ObjectUtil.isNull(userPackage)) {
  106. return false;
  107. }
  108. if (userPackage.getNum() < goods.getNum()) {
  109. return false;
  110. }
  111. }
  112. return true;
  113. }
  114. }