From b2b82c1308fd2cf71e118ab8df8258f8160f010a Mon Sep 17 00:00:00 2001
From: 陶杰 <1378534974@qq.com>
Date: 星期四, 29 八月 2024 15:52:17 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master-v2' into master-v2
---
src/main/java/com/mzl/flower/service/impl/coupon/CouponTemplateServiceImpl2.java | 311 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 311 insertions(+), 0 deletions(-)
diff --git a/src/main/java/com/mzl/flower/service/impl/coupon/CouponTemplateServiceImpl2.java b/src/main/java/com/mzl/flower/service/impl/coupon/CouponTemplateServiceImpl2.java
new file mode 100644
index 0000000..d64b382
--- /dev/null
+++ b/src/main/java/com/mzl/flower/service/impl/coupon/CouponTemplateServiceImpl2.java
@@ -0,0 +1,311 @@
+package com.mzl.flower.service.impl.coupon;
+
+import cn.hutool.core.util.IdUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mzl.flower.config.security.SecurityUtils;
+import com.mzl.flower.dto.request.coupon.*;
+import com.mzl.flower.dto.response.coupon.CouponTemplateVO;
+import com.mzl.flower.entity.coupon.CouponRecordDO;
+import com.mzl.flower.entity.coupon.CouponTemplateCustomerDO;
+import com.mzl.flower.entity.coupon.CouponTemplateDO;
+import com.mzl.flower.entity.customer.Customer;
+import com.mzl.flower.enums.*;
+import com.mzl.flower.mapper.coupon.CouponTemplateMapper;
+import com.mzl.flower.mapper.coupon.CouponTemplateMapperCustom;
+import com.mzl.flower.mapper.customer.CustomerMapper;
+import com.mzl.flower.service.coupon.CouponRecordService;
+import com.mzl.flower.service.coupon.CouponTemplateCustomerService;
+import com.mzl.flower.service.coupon.CouponTemplateService2;
+import com.mzl.flower.service.payment.OrderService;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 服务实现类
+ * </p>
+ *
+ * @author @TaoJie
+ * @since 2024-08-22
+ */
+@Service
+public class CouponTemplateServiceImpl2 extends ServiceImpl<CouponTemplateMapper, CouponTemplateDO> implements CouponTemplateService2 {
+
+ @Autowired
+ private CouponTemplateMapperCustom couponTemplateMapperCustom;
+
+ @Autowired
+ private CouponTemplateCustomerService pointCustomReService;
+
+ @Autowired
+ private CouponRecordService couponRecordService;
+
+ @Autowired
+ private CustomerMapper customerMapper;
+
+ @Autowired
+ private OrderService orderService;
+
+ @Transactional
+ @Override
+ public boolean createCouponTemplate(CreateCouponTemplateBO dto) {
+ CouponTemplateDO couponTemplateDO = new CouponTemplateDO();
+ BeanUtils.copyProperties(dto, couponTemplateDO);
+ // 设置id,关联使用到的id
+ couponTemplateDO.setId(IdUtil.simpleUUID());
+
+ couponTemplateDO.create(SecurityUtils.getUserId());
+ if (StringUtils.isBlank(dto.getStatus())) {
+ // 优惠券状态 初始化为未激活状态
+ couponTemplateDO.setStatus(CouponStatusEnum.INACTIVE.getStatus());
+ }
+
+ // 指定会员:需要添加制定用户的关联信息
+ if (CollectionUtils.isNotEmpty(dto.getPointCostomIdList())) {
+
+ final List<CouponTemplateCustomerDO> couponCustomList = dto.getPointCostomIdList().stream().map(customId -> {
+ CouponTemplateCustomerDO customReDO = new CouponTemplateCustomerDO();
+ customReDO.setCouponId(couponTemplateDO.getId());
+ customReDO.setCustomId(customId);
+ return customReDO;
+ }).collect(Collectors.toList());
+
+ // 批量插入 优惠券与指定用户关联关系
+ pointCustomReService.saveBatch(couponCustomList);
+
+ // 设置优惠券的数量
+ couponTemplateDO.setCouponAmount(dto.getPointCostomIdList().size());
+
+ }
+
+ return baseMapper.insert(couponTemplateDO) > 0;
+ }
+
+ @Transactional
+ @Override
+ public boolean updateCouponTemplate(CreateCouponTemplateBO dto) {
+ CouponTemplateDO couponTemplateDO = baseMapper.selectById(dto.getId());
+ BeanUtils.copyProperties(dto, couponTemplateDO);
+ couponTemplateDO.update(SecurityUtils.getUserId());
+
+ if (CollectionUtils.isNotEmpty(dto.getPointCostomIdList())) {
+ // 根据优惠券的信息删除关联信息
+ pointCustomReService.deleteByCouponTemplateId(couponTemplateDO.getId());
+ }
+ // 指定会员:需要添加制定用户的关联信息
+ if (CollectionUtils.isNotEmpty(dto.getPointCostomIdList())) {
+
+ final List<CouponTemplateCustomerDO> couponCustomList = dto.getPointCostomIdList().stream().map(customId -> {
+ CouponTemplateCustomerDO customReDO = new CouponTemplateCustomerDO();
+ customReDO.setCouponId(couponTemplateDO.getId());
+ customReDO.setCustomId(customId);
+ return customReDO;
+ }).collect(Collectors.toList());
+
+ // 批量插入 优惠券与指定用户关联关系
+ pointCustomReService.saveBatch(couponCustomList);
+
+ // 设置优惠券总数当前人数
+ couponTemplateDO.setCouponAmount(couponCustomList.size());
+
+ }
+
+
+ return baseMapper.updateById(couponTemplateDO) > 0;
+ }
+
+ @Override
+ public List<CouponTemplateVO> getList(QueryCouponDTO dto) {
+
+ List<CouponTemplateVO> list = couponTemplateMapperCustom.getList(dto);
+ return list;
+ }
+
+ @Override
+ public Page<CouponTemplateVO> getPage(Page page, QueryCouponDTO dto) {
+ List<CouponTemplateVO> result = couponTemplateMapperCustom.getCouponTemplatePage(page, dto);
+ return page.setRecords(result);
+ }
+
+ @Override
+ public CouponTemplateVO getDetailById(String id) {
+ QueryCouponDTO dto = new QueryCouponDTO();
+ dto.setId(id);
+ final List<CouponTemplateVO> list = getList(dto);
+ if (CollectionUtils.isNotEmpty(list)) {
+ return list.get(0);
+ }
+ return null;
+ }
+
+ @Transactional
+ @Override
+ public boolean deleteCouponTemplate(String id) {
+ return baseMapper.deleteById(id) > 0;
+ }
+
+ @Transactional
+ @Override
+ public boolean activeCouponTemplate(String id) {
+
+ CouponTemplateDO couponTemplateDO = baseMapper.selectById(id);
+ couponTemplateDO.setStatus(CouponStatusEnum.ACTIVE.getStatus());
+
+ // 判断当前的优惠券的用户类型是指定用户还是全部用户,如果是指定用户的情况下需要发布优惠券
+ if (StringUtils.isNotBlank(couponTemplateDO.getGetUserType())
+ && StringUtils.isNotBlank(couponTemplateDO.getCategory())
+ && couponTemplateDO.getGetUserType().equals(CouponGetUserTypeEnum.POINT.getType())
+ && couponTemplateDO.getCategory().equals(CouponCategoryEnum.USER.getStatus())
+ ) {
+
+ // 获取当前优惠券下的指定人员信息
+ List<CouponTemplateCustomerDO> couponTemplateCustomerDOList = pointCustomReService.getPointCustomReList(id);
+
+ if (CollectionUtils.isNotEmpty(couponTemplateCustomerDOList)) {
+
+ // 根据发放后有效期来设置时间
+ if (couponTemplateDO.getUsageTimeNum() == null || couponTemplateDO.getUsageTimeNum() <= 0) {
+ throw new IllegalArgumentException("使用时间数量必须为正整数");
+ }
+ LocalDateTime currentTime = LocalDateTime.now();
+ couponTemplateDO.setUsageStartDate(currentTime);
+ if (couponTemplateDO.getUsageTimeType().equals(CouponUsageTimeTypeEnum.DAY.getType())) {
+ // 天
+ couponTemplateDO.setUsageEndDate(currentTime.plusDays(couponTemplateDO.getUsageTimeNum()));
+ }
+ if (couponTemplateDO.getUsageTimeType().equals(CouponUsageTimeTypeEnum.HOUR.getType())) {
+ // 小时
+ couponTemplateDO.setUsageEndDate(currentTime.plusDays(couponTemplateDO.getUsageTimeNum()));
+ }
+ if (couponTemplateDO.getUsageTimeType().equals(CouponUsageTimeTypeEnum.MINUTE.getType())) {
+ // 分钟
+ couponTemplateDO.setUsageEndDate(currentTime.plusDays(couponTemplateDO.getUsageTimeNum()));
+ }
+
+ // 优惠券的总数等于下发人员的总数
+ couponTemplateDO.setCouponAmount(couponTemplateCustomerDOList.size());
+
+ List<CouponRecordDO> couponUsageDOList = couponTemplateCustomerDOList.stream().map(pointCustomRe -> {
+
+ CouponRecordDO couponRecordDO = new CouponRecordDO();
+ couponRecordDO.setCouponId(pointCustomRe.getCouponId());
+ couponRecordDO.setCustomerId(pointCustomRe.getCustomId());
+ final Customer customer = customerMapper.selectById(pointCustomRe.getCustomId());
+ if (null != customer && StringUtils.isNotBlank(customer.getUserId())) {
+ // 设置所属用户id
+ couponRecordDO.setUserId(customer.getUserId());
+ }
+ couponRecordDO.setStatus(CouponUsedStatusEnum.UNUSED.getType());
+
+ // 设置优惠券的使用开始时间
+ couponRecordDO.setEffectiveStart(couponTemplateDO.getUsageStartDate());
+ // 设置优惠券的使用结束时间
+ couponRecordDO.setEffectiveEnd(couponTemplateDO.getUsageEndDate());
+
+ // 优惠券的冗余字段
+ couponRecordDO.setCouponCode(couponTemplateDO.getCouponCode());
+ couponRecordDO.setCouponName(couponTemplateDO.getCouponName());
+ // 优惠券种类
+ couponRecordDO.setCategory(couponTemplateDO.getGetUserType());
+ couponRecordDO.setMinOrderAmount(couponTemplateDO.getMinOrderAmount());
+ couponRecordDO.setCouponDiscountValue(couponTemplateDO.getCouponDiscountValue());
+ couponRecordDO.setGetType(couponTemplateDO.getGetType());
+ couponRecordDO.setCouponDiscountType(couponTemplateDO.getCouponDiscountType());
+ couponRecordDO.setGetUserType(couponTemplateDO.getGetUserType());
+ couponRecordDO.setPoint(couponTemplateDO.getPoint());
+
+ // 创建相关信息
+ couponRecordDO.create(SecurityUtils.getUserId());
+
+ return couponRecordDO;
+ }).collect(Collectors.toList());
+
+ // 批量保存优惠券信息
+ couponRecordService.saveBatch(couponUsageDOList);
+ }
+ }
+ return baseMapper.updateById(couponTemplateDO) > 0;
+ }
+
+ @Transactional
+ @Override
+ public boolean expireCouponTemplate(String id) {
+ CouponTemplateDO couponTemplateDO = baseMapper.selectById(id);
+ couponTemplateDO.setStatus(CouponStatusEnum.EXPIRED.getStatus());
+ return baseMapper.updateById(couponTemplateDO) > 0;
+ }
+
+ /**
+ * 获取所有会员优惠券模版
+ *
+ * @return
+ */
+ @Transactional
+ @Override
+ public List<CouponTemplateDO> getVipCouponTemplate() {
+ QueryWrapper<CouponTemplateDO> queryWrapper = new QueryWrapper<>();
+ queryWrapper.lambda()
+ .eq(CouponTemplateDO::getDeleted, TrueOrFalseEnum.FALSE.isFlag())
+ .eq(CouponTemplateDO::getCategory, CouponCategoryEnum.MEMBER.getStatus())
+ .eq(CouponTemplateDO::getStatus, CouponStatusEnum.ACTIVE.getStatus());
+
+ return baseMapper.selectList(queryWrapper);
+
+ }
+
+ @Transactional
+ @Override
+ public boolean deleteBatchCouponTemplate(BatchCouponTemplateDTO dto) {
+
+ if (CollectionUtils.isNotEmpty(dto.getIdList())) {
+ dto.setUpdateBy(SecurityUtils.getUserId());
+ return couponTemplateMapperCustom.deleteBatchCouponTemplate(dto) > 0;
+ }
+ return false;
+ }
+
+ @Transactional
+ @Override
+ public boolean activeBatchCouponTemplate(BatchCouponTemplateDTO dto) {
+ if (CollectionUtils.isNotEmpty(dto.getIdList())) {
+ dto.setUpdateBy(SecurityUtils.getUserId());
+ return couponTemplateMapperCustom.activeBatchCouponTemplate(dto) > 0;
+ }
+ return false;
+ }
+
+ @Transactional
+ @Override
+ public boolean expireBatchCouponTemplate(BatchCouponTemplateDTO dto) {
+ if (CollectionUtils.isNotEmpty(dto.getIdList())) {
+ dto.setUpdateBy(SecurityUtils.getUserId());
+ return couponTemplateMapperCustom.expireBatchCouponTemplate(dto) > 0;
+ }
+ return false;
+ }
+
+ @Override
+ public CouponTemplateVO statisCouponTemplatePoint(QueryCouponStatisticsBO queryCouponStatisticsBO) {
+
+ //TODO 优惠券总数
+ couponRecordService.statisCouponTemplateCount(queryCouponStatisticsBO);
+
+ //TODO 本月兑换优惠券总数
+ couponRecordService.statisCouponTemplateCurMonCount(queryCouponStatisticsBO);
+
+ //TODO 本月兑换积分总数
+ couponRecordService.statisCouponPointCurMonPontAmonut(queryCouponStatisticsBO);
+
+ return null;
+ }
+}
--
Gitblit v1.9.3