|
@@ -7,11 +7,13 @@ import com.alibaba.fastjson.JSONObject;
|
|
|
import com.izouma.jiashanxia.domain.GoodsInfo;
|
|
import com.izouma.jiashanxia.domain.GoodsInfo;
|
|
|
import com.izouma.jiashanxia.domain.UserPackage;
|
|
import com.izouma.jiashanxia.domain.UserPackage;
|
|
|
import com.izouma.jiashanxia.domain.UserPackageFlow;
|
|
import com.izouma.jiashanxia.domain.UserPackageFlow;
|
|
|
|
|
+import com.izouma.jiashanxia.domain.UserPackagePeriod;
|
|
|
import com.izouma.jiashanxia.dto.*;
|
|
import com.izouma.jiashanxia.dto.*;
|
|
|
import com.izouma.jiashanxia.enums.FlowType;
|
|
import com.izouma.jiashanxia.enums.FlowType;
|
|
|
import com.izouma.jiashanxia.exception.BusinessException;
|
|
import com.izouma.jiashanxia.exception.BusinessException;
|
|
|
import com.izouma.jiashanxia.repo.GoodsInfoRepo;
|
|
import com.izouma.jiashanxia.repo.GoodsInfoRepo;
|
|
|
import com.izouma.jiashanxia.repo.UserPackageFlowRepo;
|
|
import com.izouma.jiashanxia.repo.UserPackageFlowRepo;
|
|
|
|
|
+import com.izouma.jiashanxia.repo.UserPackagePeriodRepo;
|
|
|
import com.izouma.jiashanxia.repo.UserPackageRepo;
|
|
import com.izouma.jiashanxia.repo.UserPackageRepo;
|
|
|
import com.izouma.jiashanxia.utils.JpaUtils;
|
|
import com.izouma.jiashanxia.utils.JpaUtils;
|
|
|
import lombok.AllArgsConstructor;
|
|
import lombok.AllArgsConstructor;
|
|
@@ -19,6 +21,7 @@ import org.springframework.data.domain.Page;
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
|
import javax.persistence.criteria.Predicate;
|
|
import javax.persistence.criteria.Predicate;
|
|
|
|
|
+import java.time.LocalDateTime;
|
|
|
import java.util.*;
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
@@ -26,9 +29,10 @@ import java.util.stream.Collectors;
|
|
|
@AllArgsConstructor
|
|
@AllArgsConstructor
|
|
|
public class UserPackageFlowService {
|
|
public class UserPackageFlowService {
|
|
|
|
|
|
|
|
- private final UserPackageFlowRepo userPackageFlowRepo;
|
|
|
|
|
- private final GoodsInfoRepo goodsInfoRepo;
|
|
|
|
|
- private final UserPackageRepo userPackageRepo;
|
|
|
|
|
|
|
+ private final UserPackageFlowRepo userPackageFlowRepo;
|
|
|
|
|
+ private final GoodsInfoRepo goodsInfoRepo;
|
|
|
|
|
+ private final UserPackageRepo userPackageRepo;
|
|
|
|
|
+ private final UserPackagePeriodRepo userPackagePeriodRepo;
|
|
|
|
|
|
|
|
public Page<UserPackageFlow> all(PageQuery pageQuery) {
|
|
public Page<UserPackageFlow> all(PageQuery pageQuery) {
|
|
|
pageQuery.setSort("createdAt,desc");
|
|
pageQuery.setSort("createdAt,desc");
|
|
@@ -128,14 +132,24 @@ public class UserPackageFlowService {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 用户已有套餐
|
|
// 用户已有套餐
|
|
|
- Map<Long, UserPackage> userPackageMap = userPackageRepo.findAllByUserIdAndType(writeOffSaveVO.getUserId(), writeOffSaveVO
|
|
|
|
|
- .getType())
|
|
|
|
|
- .stream()
|
|
|
|
|
- .collect(Collectors.toMap(UserPackage::getGoodsInfoId, userPackage -> userPackage));
|
|
|
|
|
-
|
|
|
|
|
-// Map<Long, UserPackage> userPackageMap = userPackageRepo.findAllByUserId(writeOffSaveVO.getUserId())
|
|
|
|
|
|
|
+// Map<Long, UserPackage> userPackageMap = userPackageRepo.findAllByUserIdAndType(writeOffSaveVO.getUserId(), writeOffSaveVO
|
|
|
|
|
+// .getType())
|
|
|
// .stream()
|
|
// .stream()
|
|
|
-// .collect(Collectors.toMap(UserPackage::getId, userPackage -> userPackage));
|
|
|
|
|
|
|
+// .collect(Collectors.toMap(UserPackage::getGoodsInfoId, userPackage -> userPackage));
|
|
|
|
|
+
|
|
|
|
|
+ // 套餐有效期
|
|
|
|
|
+ UserPackagePeriod userPackagePeriod = userPackagePeriodRepo.findById(writeOffSaveVO.getUserPackagePeriodId())
|
|
|
|
|
+ .orElseThrow(new BusinessException("无套餐"));
|
|
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
|
|
+
|
|
|
|
|
+ if (ObjectUtil.isNotEmpty(userPackagePeriod.getEndDate()) && userPackagePeriod.getEndDate().isBefore(now)) {
|
|
|
|
|
+ throw new BusinessException("套餐已过期");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 核销套餐内容
|
|
|
|
|
+ Map<Long, UserPackage> userPackageMap = userPackageRepo.findAllByUserPackagePeriodId(writeOffSaveVO.getUserPackagePeriodId())
|
|
|
|
|
+ .stream()
|
|
|
|
|
+ .collect(Collectors.toMap(UserPackage::getId, userPackage -> userPackage));
|
|
|
|
|
|
|
|
List<GoodsDTO> goodsDTOS = JSONObject.parseArray(writeOffSaveVO.getContent(), GoodsDTO.class);
|
|
List<GoodsDTO> goodsDTOS = JSONObject.parseArray(writeOffSaveVO.getContent(), GoodsDTO.class);
|
|
|
goodsDTOS.forEach(goodsDTO -> {
|
|
goodsDTOS.forEach(goodsDTO -> {
|
|
@@ -155,6 +169,13 @@ public class UserPackageFlowService {
|
|
|
goodsDTO.setNum(-goodsDTO.getNum());
|
|
goodsDTO.setNum(-goodsDTO.getNum());
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
|
|
+ // 触发有效期
|
|
|
|
|
+ if (ObjectUtil.isEmpty(userPackagePeriod.getUseDate())) {
|
|
|
|
|
+ userPackagePeriod.setUseDate(now);
|
|
|
|
|
+ userPackagePeriod.setEndDate(now.toLocalDate().atTime(23, 59, 59));
|
|
|
|
|
+ userPackagePeriodRepo.save(userPackagePeriod);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
// 保存套餐流水
|
|
// 保存套餐流水
|
|
|
String content = JSONObject.toJSONString(goodsDTOS);
|
|
String content = JSONObject.toJSONString(goodsDTOS);
|
|
|
return userPackageFlowRepo.save(
|
|
return userPackageFlowRepo.save(
|
|
@@ -162,6 +183,7 @@ public class UserPackageFlowService {
|
|
|
.userId(writeOffSaveVO.getUserId())
|
|
.userId(writeOffSaveVO.getUserId())
|
|
|
.content(content)
|
|
.content(content)
|
|
|
.type(FlowType.WRITE_OFF)
|
|
.type(FlowType.WRITE_OFF)
|
|
|
|
|
+ .userPackagePeriodId(writeOffSaveVO.getUserPackagePeriodId())
|
|
|
.packageType(writeOffSaveVO.getType())
|
|
.packageType(writeOffSaveVO.getType())
|
|
|
.writeOffUserId(writeOffSaveVO.getWriteOffUserId())
|
|
.writeOffUserId(writeOffSaveVO.getWriteOffUserId())
|
|
|
.build());
|
|
.build());
|