mitao
2024-05-24 78698a4a6731054bd9e5bc397cf9aba4764aa763
提交【管理后台】 商城管理-团购管理-立即结束 接口
1 文件已重命名
13个文件已修改
211 ■■■■■ 已修改文件
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/Order.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/OrderFallbackFactory.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/OrderClient.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/PaymentMethodEnum.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/DTO/GoodsGroupPurchaseDTO.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/MgtGoodsGroupPurchaseController.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsGroupPurchaseService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSeckillServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/OrderMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IOrderService.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/Order.java
File was renamed from ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/Order.java
@@ -1,4 +1,4 @@
package com.ruoyi.order.domain.pojo;
package com.ruoyi.system.api.domain;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/OrderFallbackFactory.java
@@ -1,9 +1,11 @@
package com.ruoyi.system.api.factory;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.system.api.domain.Order;
import com.ruoyi.system.api.domain.dto.OrderAuctionBondDTO;
import com.ruoyi.system.api.domain.dto.OrderDTO;
import com.ruoyi.system.api.feignClient.OrderClient;
import java.util.List;
import org.springframework.cloud.openfeign.FallbackFactory;
/**
@@ -35,6 +37,11 @@
            public R<Integer> getGroupPurchasesGoodsNum(Long id) {
                return R.fail("获取团购商品已购数量失败:" + cause.getMessage());
            }
            @Override
            public R<List<Order>> getOrderByGroupPurchaseId(Long id) {
                return R.fail("根据团购商品id获取订单列表失败:" + cause.getMessage());
            }
        };
    }
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/OrderClient.java
@@ -2,9 +2,11 @@
import com.ruoyi.common.core.constant.ServiceNameConstants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.system.api.domain.Order;
import com.ruoyi.system.api.domain.dto.OrderAuctionBondDTO;
import com.ruoyi.system.api.domain.dto.OrderDTO;
import com.ruoyi.system.api.factory.OrderFallbackFactory;
import java.util.List;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
@@ -38,4 +40,13 @@
     */
    @GetMapping("/order/group-purchase-num/{id}")
    R<Integer> getGroupPurchasesGoodsNum(@PathVariable("id") Long id);
    /**
     * 根据团购商品id获取订单列表
     *
     * @param id 团购商品id
     * @return List<Order> 订单列表
     */
    @GetMapping("/order/group-purchase-id/{id}")
    R<List<Order>> getOrderByGroupPurchaseId(@PathVariable("id") Long id);
}
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/PaymentMethodEnum.java
@@ -12,8 +12,8 @@
    /* 支付方式 1=微信 2=支付宝*/
    WECHAT(1, "男"),
    ALIPAY(2, "未知");
    WECHAT(1, "微信"),
    ALIPAY(2, "支付宝");
    @EnumValue
    private final int code;
    @JsonValue
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/DTO/GoodsGroupPurchaseDTO.java
@@ -5,6 +5,8 @@
import io.swagger.annotations.ApiModelProperty;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import lombok.Data;
/**
@@ -22,29 +24,37 @@
    private Long goodsSkuId;
    @ApiModelProperty(value = "分享标题")
    @NotBlank(message = "分享标题不能为空")
    private String shareTitle;
    @ApiModelProperty(value = "分享图片")
    @NotBlank(message = "分享图片不能为空")
    private String sharePic;
    @ApiModelProperty(value = "团购价格")
    @NotNull(message = "团购价格不能为空")
    private BigDecimal groupPurchasePrice;
    @ApiModelProperty(value = "成团人数")
    @NotNull(message = "成团人数不能为空")
    private Integer groupSize;
    @ApiModelProperty(value = "限购数量")
    @NotNull(message = "限购数量不能为空")
    private Integer limitNumber;
    @ApiModelProperty(value = "团购开始时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @NotNull(message = "团购开始时间不能为空")
    private LocalDateTime startTime;
    @ApiModelProperty(value = "团购结束时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @NotNull(message = "团购结束时间不能为空")
    private LocalDateTime endTime;
    @ApiModelProperty(value = "参团说明")
    @NotBlank(message = "参团说明不能为空")
    private String description;
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/MgtGoodsGroupPurchaseController.java
@@ -86,4 +86,16 @@
        goodsGroupPurchaseService.updStatus(dto);
        return R.ok();
    }
    /**
     * 立即结束
     *
     * @param id 团购商品id
     */
    @ApiOperation(value = "立即结束", notes = "立即结束")
    @PutMapping("/stop-immediately/{id}")
    public R<Void> stopImmediately(@PathVariable("id") Long id) {
        goodsGroupPurchaseService.stopImmediately(id);
        return R.ok();
    }
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsGroupPurchaseService.java
@@ -61,4 +61,11 @@
     * @param groupPurchaseId 团购商品id
     */
    void endGroupPurchase(Long groupPurchaseId);
    /**
     * 立即结束团购
     *
     * @param id 团购商品id
     */
    void stopImmediately(Long id);
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java
@@ -2,7 +2,9 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.enums.GroupStatusEnum;
import com.ruoyi.common.core.enums.ListingStatusEnum;
import com.ruoyi.common.core.enums.PaymentMethodEnum;
import com.ruoyi.common.core.enums.StartStatusEnum;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.StringUtils;
@@ -12,10 +14,15 @@
import com.ruoyi.goods.controller.management.DTO.GoodsGroupPurchaseQuery;
import com.ruoyi.goods.controller.management.VO.GoodsGroupPurchaseVO;
import com.ruoyi.goods.domain.GoodsGroupPurchase;
import com.ruoyi.goods.domain.GoodsSku;
import com.ruoyi.goods.mapper.GoodsGroupPurchaseMapper;
import com.ruoyi.goods.service.IGoodsGroupPurchaseService;
import com.ruoyi.goods.service.IGoodsSkuService;
import com.ruoyi.goods.service.async.AsyncMethodService;
import com.ruoyi.system.api.domain.Order;
import com.ruoyi.system.api.domain.dto.ListStatusDTO;
import com.ruoyi.system.api.feignClient.OrderClient;
import java.util.List;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@@ -34,7 +41,8 @@
public class GoodsGroupPurchaseServiceImpl extends ServiceImpl<GoodsGroupPurchaseMapper, GoodsGroupPurchase> implements IGoodsGroupPurchaseService {
    private final OrderClient orderClient;
    private final IGoodsSkuService goodsSkuService;
    private final AsyncMethodService asyncMethodService;
    /**
     * 获取团购商品列表的分页数据
     *
@@ -57,16 +65,39 @@
    public void saveGoodsGroupPurchase(GoodsGroupPurchaseDTO dto) {
        GoodsGroupPurchase goodsGroupPurchase = BeanUtils.copyBean(dto, GoodsGroupPurchase.class);
        if (StringUtils.isNull(dto.getId())) {
            if (StringUtils.isNull(dto.getGoodsSkuId())) {
                throw new ServiceException("商品id不能为空");
            }
            this.save(goodsGroupPurchase);
            GoodsSku goodsSku = goodsSkuService.getById(dto.getGoodsSkuId());
            if (StringUtils.isNull(goodsSku)) {
                throw new ServiceException("商品不存在");
            }
            int groupPurchaseStock = dto.getLimitNumber() * dto.getGroupSize();
            goodsSkuService.lambdaUpdate()
                    .set(GoodsSku::getStock, goodsSku.getStock() - groupPurchaseStock)
                    .ge(GoodsSku::getStock, groupPurchaseStock)
                    .eq(GoodsSku::getId, goodsSku.getId());
        } else {
            GoodsGroupPurchase groupPurchase = this.getById(dto.getId());
            if (StringUtils.isNull(groupPurchase)) {
                throw new ServiceException("团购商品不存在");
            }
            int originGroupStock = groupPurchase.getLimitNumber() * groupPurchase.getGroupSize();
            GoodsSku goodsSku = goodsSkuService.getById(dto.getGoodsSkuId());
            if (StringUtils.isNull(goodsSku)) {
                throw new ServiceException("商品不存在");
            }
            int groupPurchaseStock = dto.getLimitNumber() * dto.getGroupSize();
            int latestStock = originGroupStock - groupPurchaseStock;
            goodsSkuService.lambdaUpdate()
                    .set(GoodsSku::getStock,
                            goodsSku.getStock() + latestStock)
                    .ge(GoodsSku::getStock, latestStock)
                    .eq(GoodsSku::getId, goodsSku.getId());
            this.updateById(goodsGroupPurchase);
            asyncMethodService.groupPurchaseScheduleTask(goodsGroupPurchase);
        }
        //TODO 添加调度任务 处理团购商品开始结束
    }
    /**
@@ -141,4 +172,34 @@
            //TODO 通知小程序
        }
    }
    /**
     * 立即结束
     *
     * @param id 团购商品id
     */
    @Override
    public void stopImmediately(Long id) {
        GoodsGroupPurchase groupPurchase = this.getById(id);
        if (StringUtils.isNull(groupPurchase)) {
            throw new ServiceException("团购商品不存在");
        }
        //判断商品状态,未成团则查询关联订单,进行退款;成团就直接修改状态
        if (groupPurchase.getGroupStatus().equals(GroupStatusEnum.TO_FORM_A_GROUP)) {
            //查询关联订单
            List<Order> orderList = orderClient.getOrderByGroupPurchaseId(id).getData();
            for (Order order : orderList) {
                if (PaymentMethodEnum.ALIPAY.equals(order.getPaymentMethod())) {
                    //TODO
                }
                if (PaymentMethodEnum.WECHAT.equals(order.getPaymentMethod())) {
                    //TODO
                }
            }
        } else {
            this.lambdaUpdate()
                    .set(GoodsGroupPurchase::getStartStatus, StartStatusEnum.ENDED)
                    .eq(GoodsGroupPurchase::getId, id).update();
        }
    }
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSeckillServiceImpl.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.constant.CacheConstants;
import com.ruoyi.common.core.enums.StartStatusEnum;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.utils.page.BeanUtils;
import com.ruoyi.common.core.utils.page.PageDTO;
@@ -60,6 +61,15 @@
        this.saveBatch(goodsSeckills);
        for (GoodsSeckill goodsSeckill : goodsSeckills) {
            GoodsSku goodsSku = goodsSkuService.getById(goodsSeckill.getGoodsSkuId());
            if (StringUtils.isNull(goodsSku)) {
                throw new ServiceException("商品不存在");
            }
            Integer seckillStock = goodsSeckill.getSeckillStock();
            goodsSkuService.lambdaUpdate()
                    .set(GoodsSku::getStock, goodsSku.getStock() - seckillStock)
                    .ge(GoodsSku::getStock, seckillStock)
                    .eq(GoodsSku::getId, goodsSku.getId());
            asyncMethodService.seckillScheduleTask(goodsSeckill);
        }
    }
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java
@@ -4,7 +4,9 @@
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.security.annotation.InnerAuth;
import com.ruoyi.order.service.IOrderService;
import com.ruoyi.system.api.domain.Order;
import com.ruoyi.system.api.domain.dto.OrderDTO;
import java.util.List;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.formula.functions.T;
@@ -64,4 +66,16 @@
    R<Integer> getGroupPurchasesGoodsNum(@PathVariable("id") Long id) {
        return R.ok(orderService.getGroupPurchasesGoodsNum(id));
    }
    /**
     * 获取团购商品已购订单列表
     *
     * @param id 团购商品id
     * @return List<Order> 订单列表
     */
    @InnerAuth
    @GetMapping("/group-purchase-id/{id}")
    R<List<Order>> getOrderByGroupPurchaseId(@PathVariable("id") Long id) {
        return R.ok(orderService.getOrderByGroupPurchaseId(id));
    }
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/OrderMapper.java
@@ -1,7 +1,8 @@
package com.ruoyi.order.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.order.domain.pojo.Order;
import com.ruoyi.system.api.domain.Order;
import java.util.List;
import org.apache.ibatis.annotations.Param;
/**
@@ -14,5 +15,19 @@
 */
public interface OrderMapper extends BaseMapper<Order> {
    /**
     * 获取某个商品的已购会员数
     *
     * @param id 秒杀商品id
     * @return 已购会员数
     */
    Integer getSeckillMembers(@Param("id") Long id);
    /**
     * 根据团购商品id获取团购商品订单
     *
     * @param id 团购商品id
     * @return 订单列表
     */
    List<Order> getOrderByGroupPurchaseId(@Param("id") Long id);
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IOrderService.java
@@ -1,8 +1,9 @@
package com.ruoyi.order.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.order.domain.pojo.Order;
import com.ruoyi.system.api.domain.Order;
import com.ruoyi.system.api.domain.dto.OrderDTO;
import java.util.List;
/**
 * <p>
@@ -16,6 +17,12 @@
    void saveOrderOne(OrderDTO OrderDTO);
    /**
     * 获取某个商品的已购会员数
     *
     * @param id 秒杀商品id
     * @return 已购会员数
     */
    Integer getSeckillMembers(Long id);
    /**
@@ -25,4 +32,12 @@
     * @return 团购商品已购数量
     */
    Integer getGroupPurchasesGoodsNum(Long id);
    /**
     * 根据团购商品id获取团购商品订单
     *
     * @param id 团购商品id
     * @return 订单列表
     */
    List<Order> getOrderByGroupPurchaseId(Long id);
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
@@ -2,12 +2,12 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.enums.OrderStatusEnum;
import com.ruoyi.order.domain.pojo.Order;
import com.ruoyi.order.domain.pojo.OrderMall;
import com.ruoyi.order.mapper.OrderMapper;
import com.ruoyi.order.service.IOrderMallService;
import com.ruoyi.order.service.IOrderService;
import com.ruoyi.order.util.OrderUtil;
import com.ruoyi.system.api.domain.Order;
import com.ruoyi.system.api.domain.dto.OrderDTO;
import java.util.List;
import java.util.Set;
@@ -50,6 +50,13 @@
        order.setBound(OrderDTO.getBound());
        orderService.save(order);
    }
    /**
     * 获取某个商品的已购会员数
     *
     * @param id 秒杀商品id
     * @return 已购会员数
     */
    @Override
    public Integer getSeckillMembers(Long id) {
        return baseMapper.getSeckillMembers(id);
@@ -72,4 +79,15 @@
                        OrderStatusEnum.GOODS_TO_BE_RECEIVED, OrderStatusEnum.FINISHED).list();
        return list.stream().map(Order::getGoodsQuantity).reduce(0, Integer::sum);
    }
    /**
     * 根据团购商品id获取团购商品订单
     *
     * @param id 团购商品id
     * @return 订单列表
     */
    @Override
    public List<Order> getOrderByGroupPurchaseId(Long id) {
        return baseMapper.getOrderByGroupPurchaseId(id);
    }
}
ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml
@@ -14,4 +14,17 @@
    GROUP BY
      o.member_id
  </select>
  <select id="getOrderByGroupPurchaseId" resultType="com.ruoyi.system.api.domain.Order"
    parameterType="java.lang.Long">
    SELECT
    o.*
    FROM
    t_order_mall tom
    LEFT JOIN t_order o ON tom.order_id = o.id
    <where>
      o.order_status = 2
      AND o.order_from = 3
      AND tom.activity_id = #{id}
    </where>
  </select>
</mapper>