CmsGroupServiceImpl.java 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. package com.cyksj.service.mange.group;
  2. import cn.hutool.core.date.DateField;
  3. import cn.hutool.core.date.DateUtil;
  4. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  5. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  6. import com.cyksj.common.exception.BusinessRuntimeException;
  7. import com.cyksj.mapper.GoodsDonSkuMapper;
  8. import com.cyksj.mapper.GroupsMapper;
  9. import com.cyksj.mapper.GroupsRelationMapper;
  10. import com.cyksj.mapper.OrderDonMapper;
  11. import com.cyksj.model.entity.GoodsDonSku;
  12. import com.cyksj.model.entity.GroupsRelation;
  13. import com.cyksj.model.entity.GroupsTrips;
  14. import com.cyksj.model.entity.OrderDon;
  15. import com.cyksj.service.mange.CmsGroupService;
  16. import lombok.RequiredArgsConstructor;
  17. import lombok.extern.slf4j.Slf4j;
  18. import org.springframework.stereotype.Service;
  19. import org.springframework.transaction.annotation.Transactional;
  20. import java.util.Date;
  21. import java.util.List;
  22. import java.util.Optional;
  23. /**
  24. * @author chan
  25. * @date 2022/9/27 6:27 PM
  26. */
  27. @Slf4j
  28. @Service
  29. @RequiredArgsConstructor
  30. public class CmsGroupServiceImpl extends ServiceImpl<GroupsMapper,GroupsTrips> implements CmsGroupService {
  31. private final GoodsDonSkuMapper skuMapper;
  32. private final GroupsRelationMapper relationMapper;
  33. private final OrderDonMapper orderDonMapper;
  34. @Override
  35. public GroupsTrips issuance(GroupsTrips groups) {
  36. GoodsDonSku sku = skuMapper.selectById(groups.getSkuId());
  37. if (sku == null) {
  38. throw new BusinessRuntimeException("该商品规格不存在!");
  39. }
  40. groups.setNum(sku.getNum());
  41. groups.setAvailableNum(sku.getNum());
  42. this.save(groups);
  43. for (Integer i = 1; i <= groups.getNum(); i++) {
  44. GroupsRelation relation = new GroupsRelation();
  45. relation.setGroupsId(groups.getId());
  46. relation.setStatus(GroupsRelation.Status.none);
  47. relation.setNum(i);
  48. relationMapper.insert(relation);
  49. }
  50. return groups;
  51. }
  52. @Override
  53. public void close(Long groupId) {
  54. GroupsTrips groupsTrips = this.getById(groupId);
  55. if(groupsTrips == null){
  56. throw new BusinessRuntimeException("非法参数.车队不存在");
  57. }
  58. Integer count = relationMapper.selectCount(Wrappers.lambdaQuery(GroupsRelation.class).in(GroupsRelation::getStatus, List.of(GroupsRelation.Status.locking, GroupsRelation.Status.validity)));
  59. if (count > 0) {
  60. throw new BusinessRuntimeException("该车队已有用户购买或锁定.无法删除");
  61. }else {
  62. relationMapper.delete(Wrappers.lambdaQuery(GroupsRelation.class).eq(GroupsRelation::getGroupsId,groupId));
  63. this.removeById(groupId);
  64. }
  65. }
  66. @Override
  67. @Transactional(rollbackFor = Throwable.class)
  68. public void setAccount(GroupsTrips groupsTrips) {
  69. int count = count(Wrappers.lambdaQuery(GroupsTrips.class).eq(GroupsTrips::getAccountId, groupsTrips.getAccountId()));
  70. if (count > 0) {
  71. throw new BusinessRuntimeException("该账号已发车.请选择未发车账户");
  72. }
  73. List<GroupsRelation> groupsRelations = relationMapper.selectList(Wrappers.lambdaQuery(GroupsRelation.class).eq(GroupsRelation::getGroupsId, groupsTrips.getId()).eq(GroupsRelation::getStatus, GroupsRelation.Status.validity));
  74. groupsRelations.forEach((relation)->{
  75. if (relation.getExpiryTime() == null) {
  76. List<OrderDon> orderDonList = orderDonMapper.selectList(Wrappers.lambdaQuery(OrderDon.class).eq(OrderDon::getUserId, relation.getUserId()).eq(OrderDon::getRelationId, relation.getId()).eq(OrderDon::getStatus, OrderDon.Status.hasPayment));
  77. orderDonList.forEach((orderDon)->{
  78. //如果续费增加时间,如果首次则设置当前时间为初始时间
  79. Date expiryTime = Optional.ofNullable(relation.getExpiryTime()).orElse(new Date());
  80. log.info("设置账号,该用户 {} 初始时间:{} ",orderDon.getUserId(),DateUtil.format(expiryTime,"yyyy-MM-dd HH:mm:ss"));
  81. GoodsDonSku donSku = skuMapper.selectById(getById(groupsTrips.getId()).getSkuId());
  82. Date newDate = DateUtil.offset(expiryTime, DateField.MONTH, donSku.getMonths() * orderDon.getNum());
  83. relation.setExpiryTime(newDate);
  84. log.info("设置账号,该用户 {} 过期时间:{} ",orderDon.getUserId(),DateUtil.format(newDate,"yyyy-MM-dd HH:mm:ss"));
  85. relation.setStartTime(relation.getStartTime() == null ? new Date() : null);
  86. relationMapper.updateById(relation);
  87. orderDon.setStatus(OrderDon.Status.complete);
  88. orderDonMapper.updateById(orderDon);
  89. });
  90. }
  91. });
  92. groupsTrips.setStatus(GroupsTrips.Status.validity);
  93. updateById(groupsTrips);
  94. }
  95. }