mitao
2024-07-18 95639988ed630dae4b2461b5f6c3ccb6d9af8d86
修改bug
1个文件已添加
32个文件已修改
369 ■■■■ 已修改文件
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/AuctionGoods.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/AuctionSalesroom.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/GoodsSku.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/OrderDTO.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/OrderUpdDTO.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/OrderFallbackFactory.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/OrderClient.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysUserClient.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/management/MgtArticleController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/service/IArticleService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/service/impl/ArticleServiceImpl.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/domain/AuctionSalesroomGoods.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/vo/GoodsSeckillVO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java 72 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSeckillServiceImpl.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberServiceImpl.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/inner/OrderController.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/inner/PayController.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/management/vo/MgtOrderVO.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IOrderService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IPaylogService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/LogisticsServiceImpl.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderReturnRequestServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java 55 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/PaylogServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/MgtCouponController.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/vo/CouponReceiveDetailVO.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/converter/CouponUseEnumConverter.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/AuctionGoods.java
@@ -1,6 +1,7 @@
package com.ruoyi.system.api.domain;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
@@ -58,6 +59,7 @@
    private Integer auctionStock;
    @ApiModelProperty(value = "保证金")
    @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
    private BigDecimal bond;
    @ApiModelProperty(value = "实名认证 0=不需实名 1=需要实名")
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/AuctionSalesroom.java
@@ -1,6 +1,7 @@
package com.ruoyi.system.api.domain;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
@@ -51,6 +52,7 @@
    private AuctionTypeEnum type;
    @ApiModelProperty(value = "保证金")
    @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
    private BigDecimal bond;
    @ApiModelProperty(value = "实名认证 0=不需认证 1=需要实名")
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/GoodsSku.java
@@ -1,6 +1,7 @@
package com.ruoyi.system.api.domain;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
@@ -92,6 +93,7 @@
    private String detail;
    @ApiModelProperty(value = "排序")
    @TableField(updateStrategy = FieldStrategy.IGNORED, insertStrategy = FieldStrategy.IGNORED)
    private Integer sortNum;
    @ApiModelProperty(value = "上架状态 0=上架中 1= 已下架")
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/OrderDTO.java
@@ -4,10 +4,9 @@
import com.ruoyi.common.core.enums.OrderFromEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import lombok.Data;
@Data
@ApiModel(value = "订单传输对象", description = "订单传输对象")
@@ -72,6 +71,7 @@
    @ApiModelProperty(value = "积分")
    private Integer points;
    @ApiModelProperty("失效时间")
    private LocalDateTime orderTimeSx;
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/OrderUpdDTO.java
@@ -91,4 +91,6 @@
    @ApiModelProperty(value = "开票状态 开票状态 1 待开票,2待审核,3 已开票,4 拒绝")
    private Integer invoiceStatus;
    @ApiModelProperty(value = "是否显示订单 1显示,2 不显示")
    private Integer isOrder;
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/OrderFallbackFactory.java
@@ -146,7 +146,17 @@
            @Override
            public R<?> autoCancelOrder(Long id, String source) {
                return null;
                return R.fail("自动取消订单失败" + cause.getMessage());
            }
            @Override
            public R<List<Order>> getOrderListByMubres(List<String> mubres, String source) {
                return R.fail("根据团购唯一表示获取订单列表失败" + cause.getMessage());
            }
            @Override
            public R<?> updateOrderStatusByMubres(List<String> formedGroupMubres, String source) {
                return R.fail("修改订单展示状态失败" + cause.getMessage());
            }
        };
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/OrderClient.java
@@ -183,4 +183,12 @@
    @PutMapping("/order/autoCancelOrder/{id}")
    R<?> autoCancelOrder(@PathVariable("id") Long id,
                         @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
    @PostMapping("/order/getOrderListByMubres")
    R<List<Order>> getOrderListByMubres(@RequestBody List<String> mubres,
            @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
    @PostMapping("/order/updOrderStatusByMubres")
    R<?> updateOrderStatusByMubres(@RequestBody List<String> formedGroupMubres,
            @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysUserClient.java
@@ -95,7 +95,7 @@
    @GetMapping("/custom-config/{configId}")
    R<CustomConfig>  getconfig(@PathVariable("configId") String configId);
    @GetMapping("/user/list-by-name")
    @PostMapping("/user/list-by-name")
    R<List<SysUser>> getUserListByName(@RequestBody SysUser sysUser,
            @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/management/MgtArticleController.java
@@ -125,4 +125,12 @@
        articleService.removeById(id);
        return R.ok();
    }
    @ApiOperation("删除资讯评论")
    @DeleteMapping("/comments/{id}")
    public R<?> removeCommentsById(
            @ApiParam(name = "id", value = "资讯评论id", required = true) @PathVariable("id") Long id) {
        articleService.removeCommentsById(id);
        return R.ok();
    }
}
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/service/IArticleService.java
@@ -78,4 +78,6 @@
     * @param dto 资讯上下架数据传输对象
     */
    void updStatus(MgtArticleUpdDTO dto);
    void removeCommentsById(Long id);
}
ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/service/impl/ArticleServiceImpl.java
@@ -29,6 +29,7 @@
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.CollUtils;
import com.ruoyi.common.core.utils.page.PageDTO;
import com.ruoyi.system.api.domain.Member;
import com.ruoyi.system.api.domain.SysUser;
@@ -36,7 +37,6 @@
import com.ruoyi.system.api.feignClient.MemberClient;
import com.ruoyi.system.api.feignClient.SysUserClient;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -46,6 +46,7 @@
import java.util.stream.Collectors;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
 * <p>
@@ -344,15 +345,19 @@
            user.setPhonenumber(query.getPhone());
            List<SysUser> sysUserList = sysUserClient.getUserListByName(user,
                    SecurityConstants.INNER).getData();
            if (CollUtils.isNotEmpty(sysUserList)) {
            sysUserIdSet = sysUserList.stream().map(SysUser::getUserId)
                    .collect(Collectors.toSet());
            }
            MemberDTO memberDTO = new MemberDTO();
            memberDTO.setNickname(query.getCreateBy());
            memberDTO.setPhone(query.getPhone());
            List<Member> memberlist = memberClient.getMemberListByCondition(memberDTO,
                    SecurityConstants.INNER).getData();
            if (CollUtils.isNotEmpty(memberlist)) {
            memberIdSet = memberlist.stream().map(Member::getId)
                    .collect(Collectors.toSet());
            }
            if (StringUtils.isEmpty(sysUserIdSet) && StringUtils.isEmpty(memberIdSet)) {
                return PageDTO.empty(page);
            }
@@ -361,11 +366,16 @@
        page = this.lambdaQuery()
                .in(StringUtils.isNotEmpty(sysUserIdSet), Article::getCreateBy,
                        sysUserIdSet)
                .or()
                .in(StringUtils.isNotEmpty(memberIdSet), Article::getMemberId, memberIdSet)
                .eq(StringUtils.isNotNull(query.getListingStatus()), Article::getListingStatus,
                        query.getListingStatus())
                .eq(StringUtils.isNotNull(query.getArticleType()), Article::getArticleType,
                        query.getArticleType())
                .in(StringUtils.isNotNull(query.getArticleType()) && query.getArticleType()
                                .equals(ArticleTypeEnum.USER_POSTING), Article::getStatus,
                        Lists.newArrayList(AuditStatusEnum.TO_BE_REVIEWED,
                                AuditStatusEnum.REJECTED))
                .like(StringUtils.isNotBlank(query.getTitle()), Article::getTitle, query.getTitle())
                .orderByDesc(Article::getReported)
                .page(new Page<>(query.getPageCurr(), query.getPageSize()));
@@ -488,7 +498,12 @@
        if (StringUtils.isNull(article)) {
            throw new ServiceException("资讯不存在");
        }
        return BeanUtils.copyBean(article, MgtArticleVO.class);
        MgtArticleVO mgtArticleVO = BeanUtils.copyBean(article, MgtArticleVO.class);
        long count = articleCommentsService.count(
                Wrappers.lambdaQuery(ArticleComments.class).eq(ArticleComments::getArticleId, id)
                        .eq(ArticleComments::getType, 1));
        mgtArticleVO.setCommentCount((int) count);
        return mgtArticleVO;
    }
    /**
@@ -519,4 +534,25 @@
        this.lambdaUpdate().set(Article::getListingStatus, dto.getListingStatus())
                .eq(Article::getId, dto.getId()).update();
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void removeCommentsById(Long id) {
        ArticleComments articleComments = articleCommentsService.getById(id);
        if (StringUtils.isNull(articleComments)) {
            throw new ServiceException("评论/回复不存在");
        }
        articleCommentsService.removeById(id);
        // 评论
        if (articleComments.getType().equals(1)) {
            // 查询回复
            List<ArticleComments> replyList = articleCommentsService.lambdaQuery()
                    .eq(ArticleComments::getReplyId, id).list();
            if (StringUtils.isNotEmpty(replyList)) {
                List<Long> replyIds = replyList.stream().map(ArticleComments::getId)
                        .collect(Collectors.toList());
                articleCommentsService.removeByIds(replyIds);
            }
        }
    }
}
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/domain/AuctionSalesroomGoods.java
@@ -1,6 +1,7 @@
package com.ruoyi.auction.domain;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
@@ -53,6 +54,7 @@
    private Integer salesroomStock;
    @ApiModelProperty(value = "兜底成交个数")
    @TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
    private Integer guaranteedTradeVolume;
    @ApiModelProperty(value = "拍卖时间(分钟)")
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java
@@ -354,6 +354,7 @@
                    orderDTO.setPrice(goodsSku.getPrice());
                    orderDTO.setSkuName(goodsSku.getSkuName());
                }
                orderDTO.setOrderTimeSx(auctionGoods.getEndTime());
                orderClient.saveOrderOne(orderDTO, SecurityConstants.INNER);
            } else {
                // 没有人出价,退回拍卖商品库存
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/vo/GoodsSeckillVO.java
@@ -37,6 +37,9 @@
    @ApiModelProperty(value = "秒杀价格")
    private BigDecimal seckillPrice;
    @ApiModelProperty(value = "商品库存")
    private Integer goodsSkuStock;
    @ApiModelProperty(value = "已售数量")
    private Integer soldQuantity;
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java
@@ -25,6 +25,7 @@
import com.ruoyi.goods.controller.management.vo.GoodsGroupPurchaseVO;
import com.ruoyi.goods.domain.MemberGoodsCollection;
import com.ruoyi.goods.mapper.GoodsGroupPurchaseMapper;
import com.ruoyi.goods.service.IGoodsGroupPurchaseInfoService;
import com.ruoyi.goods.service.IGoodsGroupPurchaseService;
import com.ruoyi.goods.service.IGoodsSkuService;
import com.ruoyi.goods.service.IMemberGoodsCollectionService;
@@ -51,7 +52,6 @@
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@@ -75,9 +75,7 @@
    private final RedisService redisService;
    private final IMemberGoodsCollectionService iMemberGoodsCollectionService;
    private final SysUserClient sysUserClient;
    @Resource
    private GoodsGroupPurchaseInfoServiceImpl  GoodsGroupPurchaseInfoServiceImpl;
    private final IGoodsGroupPurchaseInfoService goodsGroupPurchaseInfoService;
    // 创建一个静态共享的ObjectMapper实例以重用
    private static final ObjectMapper objectMapper = new ObjectMapper();
    /**
@@ -101,6 +99,7 @@
    @Override
    public void saveGoodsGroupPurchase(GoodsGroupPurchaseDTO dto) {
        GoodsGroupPurchase goodsGroupPurchase = BeanUtils.copyBean(dto, GoodsGroupPurchase.class);
        goodsGroupPurchase.setListingStatus(ListingStatusEnum.ON_SHELVES);
        if (StringUtils.isNull(dto.getId())) {
            if (StringUtils.isNull(dto.getGoodsSkuId())) {
                throw new ServiceException("商品id不能为空");
@@ -204,6 +203,12 @@
                    + groupPurchase.getId());
            redisService.deleteObject(
                    DelayTaskEnum.GROUP_PURCHASES_END_TASK.getCode() + "-" + groupPurchase.getId());
            // 退回剩余库存
            GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO();
            goodsStockUpdDTO.setAuctionStock(
                    groupPurchase.getLimitNumber() * groupPurchase.getGroupSize());
            goodsStockUpdDTO.setGoodsSkuId(groupPurchase.getGoodsSkuId());
            goodsSkuService.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO));
        }
        //修改状态
        groupPurchase.setListingStatus(dto.getListingStatus());
@@ -253,10 +258,12 @@
    public void endGroupPurchase(Long groupPurchaseId) throws JsonProcessingException {
        log.info(">>>>>>>>>>>>>>>>>>>>{}团购商品结束团购<<<<<<<<<<<<<<<<<<<<", groupPurchaseId);
        GoodsGroupPurchase groupPurchase = this.getById(groupPurchaseId);
        if (StringUtils.isNotNull(groupPurchase) && groupPurchase.getStartStatus()
                .equals(StartStatusEnum.STARTED)) {
            this.lambdaUpdate().set(GoodsGroupPurchase::getStartStatus, StartStatusEnum.ENDED)
                    .eq(GoodsGroupPurchase::getId, groupPurchaseId).update();
        boolean res = handleGroupPurchase(groupPurchaseId);
        if (StringUtils.isNotNull(groupPurchase)) {
            groupPurchase.setStartStatus(StartStatusEnum.ENDED);
            groupPurchase.setGroupStatus(
                    res ? GroupStatusEnum.FORMED_INTO_A_GROUP : GroupStatusEnum.GROUP_FAILURE);
            this.updateById(groupPurchase);
            Map<String, Object> map = new ConcurrentHashMap<>();
            map.put("notification_type", NotificationTypeConstant.GROUP_PURCHASE);
            map.put("notification_time", DateUtils.dateTimeNow("yyyy-MM-dd HH:mm:ss"));
@@ -280,13 +287,26 @@
        if (StringUtils.isNull(groupPurchase)) {
            throw new ServiceException("团购商品不存在");
        }
        //判断商品状态,未成团则查询关联订单,进行退款;成团就直接修改状态
        if (groupPurchase.getGroupStatus().equals(GroupStatusEnum.TO_FORM_A_GROUP)) {
            //查询关联订单
            List<Order> orderList = orderClient.getOrderByGroupPurchaseId(id,
        // 处理未成团订单退款和成团订单修改展示状态
        boolean res = handleGroupPurchase(id);
        groupPurchase.setGroupStatus(
                res ? GroupStatusEnum.FORMED_INTO_A_GROUP : GroupStatusEnum.GROUP_FAILURE);
        groupPurchase.setStartStatus(StartStatusEnum.ENDED);
        this.updateById(groupPurchase);
    }
    private boolean handleGroupPurchase(Long id) {
        List<GoodsGroupPurchaseInfo> groupPurchaseInfoList = goodsGroupPurchaseInfoService.lambdaQuery()
                .eq(GoodsGroupPurchaseInfo::getGroupPurchaseId, id).list();
        if (CollUtils.isNotEmpty(groupPurchaseInfoList)) {
            List<String> mubres = groupPurchaseInfoList.stream()
                    .filter(g -> g.getCurrentNumber()
                            < g.getGroupSize())
                    .map(GoodsGroupPurchaseInfo::getMubre).collect(
                            Collectors.toList());
            List<Order> orderList = orderClient.getOrderListByMubres(mubres,
                    SecurityConstants.INNER).getData();
            if (CollUtils.isNotEmpty(orderList)) {
                List<RefundDTO> refundDTOList = orderList.stream().map(order -> {
                    RefundDTO refundDTO = new RefundDTO();
                    refundDTO.setOrderNo(order.getOrderNo());
@@ -307,6 +327,15 @@
                            failedOrders.add(key);
                        }
                    });
                    try {
                        log.info(
                                "============  =================退款结束=============================");
                        log.info("退款成功订单:{}",
                                objectMapper.writeValueAsString(successfulOrders));
                        log.info("退款失败订单:{}", objectMapper.writeValueAsString(failedOrders));
                    } catch (JsonProcessingException e) {
                        throw new RuntimeException(e);
                    }
                    // 处理退款结果
                    List<Order> updateOrderList = orderList.stream()
                            .filter(order -> successfulOrders.contains(order.getOrderNo()))
@@ -318,10 +347,17 @@
                    orderClient.updateOrderList(orderUpdDTOS, SecurityConstants.INNER);
                }
            }
            groupPurchase.setGroupStatus(GroupStatusEnum.GROUP_FAILURE);
            List<String> formedGroupMubres = groupPurchaseInfoList.stream()
                    .filter(g -> g.getCurrentNumber()
                            >= g.getGroupSize())
                    .map(GoodsGroupPurchaseInfo::getMubre).collect(
                            Collectors.toList());
            if (CollUtils.isNotEmpty(formedGroupMubres)) {
                orderClient.updateOrderStatusByMubres(formedGroupMubres, SecurityConstants.INNER);
                return true;
        }
        groupPurchase.setStartStatus(StartStatusEnum.ENDED);
        this.updateById(groupPurchase);
        }
        return false;
    }
    @Override
@@ -354,7 +390,7 @@
        wrapper6.eq(GoodsGroupPurchaseInfo::getDelFlag,0);
        wrapper6.eq(GoodsGroupPurchaseInfo::getGroupStatus,0);
        wrapper6.eq(GoodsGroupPurchaseInfo::getGroupPurchaseId,one.getId());
        GoodsGroupPurchaseInfo one1 = GoodsGroupPurchaseInfoServiceImpl.getOne(wrapper6);
        GoodsGroupPurchaseInfo one1 = goodsGroupPurchaseInfoService.getOne(wrapper6);
        if (one1!=null){
            goodsGroupPurchaseInfoVO.setCurrentNumber(one1.getCurrentNumber());
            if (one1.getGroupStatus()==0){
@@ -396,7 +432,7 @@
            LambdaQueryWrapper<GoodsGroupPurchaseInfo> wrapper7= Wrappers.lambdaQuery();
            wrapper7.eq(GoodsGroupPurchaseInfo::getMubre,data.getGroupNo());
            GoodsGroupPurchaseInfo one7 = GoodsGroupPurchaseInfoServiceImpl.getOne(wrapper7);
            GoodsGroupPurchaseInfo one7 = goodsGroupPurchaseInfoService.getOne(wrapper7);
            if (one7!=null){
                goodsGroupPurchaseInfoVO.setCurrentNumber(one7.getCurrentNumber());
                if (one7.getGroupStatus()==0){
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSeckillServiceImpl.java
@@ -186,6 +186,7 @@
            throw new ServiceException("编辑失败,商品库存不足");
        }
        GoodsSeckill goodsSeckillUpd = BeanUtils.copyBean(upd, GoodsSeckill.class);
        goodsSeckillUpd.setListingStatus(ListingStatusEnum.ON_SHELVES);
        this.updateById(goodsSeckillUpd);
        GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO();
        goodsStockUpdDTO.setAuctionStock(upd.getSeckillStock() * -1);
@@ -216,7 +217,7 @@
                    DelayTaskEnum.SECKILL_END_TASK.getCode() + "-" + goodsSeckill.getId());
            // 退回剩余库存
            GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO();
            goodsStockUpdDTO.setAuctionStock(goodsSeckill.getSeckillStock() * -1);
            goodsStockUpdDTO.setAuctionStock(goodsSeckill.getSeckillStock());
            goodsStockUpdDTO.setGoodsSkuId(goodsSeckill.getGoodsSkuId());
            goodsSkuService.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO));
            goodsSeckill.setSeckillStock(0);
@@ -241,8 +242,11 @@
        }
        GoodsSeckillVO vo = BeanUtils.copyBean(goodsSeckill, GoodsSeckillVO.class);
        GoodsSku goods = goodsSkuService.getById(goodsSeckill.getGoodsSkuId());
        Optional.of(goods).ifPresent(goodsSku -> vo.setGoodsSkuName(goodsSku.getSkuName()));
        Integer num = orderClient.getSeckillMembers(goodsSeckill.getGoodsSkuId(),
        Optional.of(goods).ifPresent(goodsSku -> {
            vo.setGoodsSkuName(goodsSku.getSkuName());
            vo.setGoodsSkuStock(goodsSku.getStock());
        });
        Integer num = orderClient.getSeckillMembers(goodsSeckill.getId(),
                SecurityConstants.INNER).getData();
        vo.setNumberOfPurchasedMembers(StringUtils.isNull(num) ? 0 : num);
        return vo;
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java
@@ -8,6 +8,7 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.ruoyi.common.core.constant.SecurityConstants;
import com.ruoyi.common.core.enums.ListingStatusEnum;
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;
@@ -425,7 +426,9 @@
        LambdaQueryWrapper<GoodsGroupPurchase> queryWrapper1 =new LambdaQueryWrapper<>();
        queryWrapper1.eq(GoodsGroupPurchase::getListingStatus,
                        ListingStatusEnum.ON_SHELVES)
                .eq(GoodsGroupPurchase::getGoodsSkuId, byId.getId());
                .eq(GoodsGroupPurchase::getGoodsSkuId, byId.getId())
                .eq(GoodsGroupPurchase::getStartStatus,
                        StartStatusEnum.STARTED);
        GoodsGroupPurchase goodsGroupPurchase = goodsGroupPurchaseMapper.selectOne(queryWrapper1);
        if(goodsGroupPurchase!=null){
            HomeGoodsSkuDTO homeGoodsSkuDTO1 =new HomeGoodsSkuDTO();
@@ -457,7 +460,9 @@
        LambdaQueryWrapper<GoodsGroupPurchase> queryWrapper2 =new LambdaQueryWrapper<>();
        queryWrapper2.eq(GoodsGroupPurchase::getListingStatus,
                        ListingStatusEnum.ON_SHELVES)
                .eq(GoodsGroupPurchase::getGoodsSkuId, byId.getId());
                .eq(GoodsGroupPurchase::getGoodsSkuId, byId.getId())
                .eq(GoodsGroupPurchase::getStartStatus,
                        StartStatusEnum.STARTED);
        GoodsGroupPurchase goodsGroupPurchase2 = goodsGroupPurchaseMapper.selectOne(queryWrapper2);
        if (goodsGroupPurchase2!=null){
            homeGoodsSkuInfoVO.setGroupPurchaseGoods(2);
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberServiceImpl.java
@@ -18,7 +18,6 @@
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.collect.Lists;
import com.ruoyi.common.core.enums.GenderEnum;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.StringUtils;
@@ -38,7 +37,6 @@
import com.ruoyi.member.service.IMemberService;
import com.ruoyi.member.util.HttpUtils;
import com.ruoyi.system.api.RemoteUserService;
import com.ruoyi.system.api.constants.SecurityConstant;
import com.ruoyi.system.api.domain.AppMiniLoginVO;
import com.ruoyi.system.api.domain.Member;
import com.ruoyi.system.api.domain.MemberPoints;
@@ -55,7 +53,6 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import javax.annotation.Resource;
import org.apache.commons.io.IOUtils;
import org.apache.http.HttpEntity;
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/inner/OrderController.java
@@ -3,8 +3,6 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.enums.OrderStatusEnum;
import com.ruoyi.common.core.utils.page.BeanUtils;
@@ -183,4 +181,16 @@
            return R.ok();
    }
    @InnerAuth
    @PostMapping("/getOrderListByMubres")
    R<List<Order>> getOrderListByMubres(@RequestBody List<String> mubres) {
        return R.ok(orderService.getOrderListByMubres(mubres));
    }
    @InnerAuth
    @PostMapping("/updOrderStatusByMubres")
    R<?> updateOrderStatusByMubres(@RequestBody List<String> formedGroupMubres) {
        orderService.updateOrderStatusByMubres(formedGroupMubres);
        return R.ok();
    }
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/inner/PayController.java
@@ -3,7 +3,6 @@
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.security.annotation.InnerAuth;
import com.ruoyi.order.service.IPaylogService;
import com.ruoyi.order.service.impl.PaylogServiceImpl;
import com.ruoyi.system.api.domain.dto.RefundDTO;
import java.util.List;
import java.util.Map;
@@ -24,6 +23,10 @@
    private final IPaylogService paylogService;
    /**
     * @param refundDTOS 退款数据传输对象
     * @return Map<String, Object> key :orderNo value 退款结果
     */
    @InnerAuth
    @PostMapping("/refund-batch")
    public R<Map<String, Object>> refund(@RequestBody List<RefundDTO> refundDTOS) {
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/management/vo/MgtOrderVO.java
@@ -144,4 +144,8 @@
    @ApiModelProperty("物流信息")
    private Express100VO express100VO;
    @ApiModelProperty("是否售后 1未售后,2 售后")
    private Integer isRequest;
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IOrderService.java
@@ -142,4 +142,8 @@
     * @return List<Order>
     */
    List<Order> getStaticsOrderList(LocalDateTime startTime, LocalDateTime endTime);
    List<Order> getOrderListByMubres(List<String> mubres);
    void updateOrderStatusByMubres(List<String> formedGroupMubres);
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IPaylogService.java
@@ -42,6 +42,10 @@
     */
    void wxnotify(HttpServletRequest request, HttpServletResponse response);
    /**
     * @param refundDTOS 退款数据传输对象
     * @return Map<String, Object> key :orderNo value 退款结果
     */
    Map<String, Object> refund(List<RefundDTO> refundDTOS);
    void refund1(RefundDTO refundDTOS);
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/LogisticsServiceImpl.java
@@ -1,7 +1,6 @@
package com.ruoyi.order.service.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.nacos.shaded.com.google.gson.Gson;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -12,34 +11,23 @@
import com.kuaidi100.sdk.request.QueryTrackParam;
import com.kuaidi100.sdk.request.QueryTrackReq;
import com.kuaidi100.sdk.utils.SignUtils;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.order.mapper.LogisticsMapper;
import com.ruoyi.order.service.ILogisticsService;
import com.ruoyi.order.vo.KuaiDiCode;
import com.ruoyi.system.api.domain.Logistics;
import com.ruoyi.system.api.domain.dto.LogisticsDTO;
import com.ruoyi.system.api.domain.vo.Express100VO;
import net.sf.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
/**
 * <p>
@@ -90,7 +78,9 @@
        LambdaQueryWrapper<Logistics> wrapper= Wrappers.lambdaQuery();
        wrapper.eq(Logistics::getLogisticsNum,logisticsDTO.getCompany());
        Logistics one = this.getOne(wrapper);
        if (Objects.nonNull(one)) {
        response.setLogisticsName(one.getLogisticsName());
        }
        return response;
    }
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderReturnRequestServiceImpl.java
@@ -163,6 +163,7 @@
            }
            memberIdSet = memberList.stream().map(Member::getId)
                    .collect(Collectors.toSet());
            query.setMemberIdSet(memberIdSet);
        }
        page = baseMapper.getOrderReturnRequestPage(page, query);
        if (StringUtils.isEmpty(page.getRecords())) {
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
@@ -7,7 +7,6 @@
import com.google.common.collect.Lists;
import com.ruoyi.common.core.constant.CacheConstants;
import com.ruoyi.common.core.constant.SecurityConstants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.enums.AuctionOrderTypeEnum;
import com.ruoyi.common.core.enums.AuditStatusEnum;
import com.ruoyi.common.core.enums.BondStatusEnum;
@@ -37,7 +36,18 @@
import com.ruoyi.order.util.OrderUtil;
import com.ruoyi.order.util.SinataUtil;
import com.ruoyi.system.api.constants.DelayTaskEnum;
import com.ruoyi.system.api.domain.*;
import com.ruoyi.system.api.domain.AuctionSalesroom;
import com.ruoyi.system.api.domain.CouponMember;
import com.ruoyi.system.api.domain.CustomConfig;
import com.ruoyi.system.api.domain.DelayTask;
import com.ruoyi.system.api.domain.GoodsGroupPurchase;
import com.ruoyi.system.api.domain.GoodsGroupPurchaseInfo;
import com.ruoyi.system.api.domain.GoodsSeckill;
import com.ruoyi.system.api.domain.GoodsSku;
import com.ruoyi.system.api.domain.Member;
import com.ruoyi.system.api.domain.MemberAddress;
import com.ruoyi.system.api.domain.Order;
import com.ruoyi.system.api.domain.OrderAuctionBond;
import com.ruoyi.system.api.domain.dto.CouponMemberDTO;
import com.ruoyi.system.api.domain.dto.GoodsStockUpdDTO;
import com.ruoyi.system.api.domain.dto.HomeGoodsSkuDTO;
@@ -61,7 +71,10 @@
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime;
import java.util.*;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
import java.util.regex.Matcher;
@@ -72,6 +85,7 @@
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
 * <p>
@@ -164,6 +178,7 @@
        order.setSkuName(OrderDTO.getSkuName());
        order.setPrice(OrderDTO.getPrice());
        order.setCoverPic(OrderDTO.getCoverPic());
        order.setOrderTimeSx(OrderDTO.getOrderTimeSx());
        this.save(order);
        if (OrderDTO.getOrderFrom().getCode()==4){
@@ -1177,8 +1192,9 @@
            pageVO = PageDTO.empty(page);
        }
        pageVO = PageDTO.of(page, MgtOrderVO.class);
        List<MgtOrderVO> voList = pageVO.getList();
        if (query.getOrderFrom() == OrderFromEnum.AUCTION_ORDERS) {
            List<MgtOrderVO> list = pageVO.getList();
            List<MgtOrderVO> list = voList;
            // 封装参数查询拍卖会
            Set<Long> auctionSalesroomGoodsIdSet = list.stream()
                    .filter(order -> order.getAuctionType() == AuctionOrderTypeEnum.AUCTION_ITEMS)
@@ -1243,6 +1259,19 @@
                }
            });
        }
        Set<Long> memberVoIdSet = voList.stream().map(MgtOrderVO::getMemberId)
                .collect(Collectors.toSet());
        List<Member> data = memberClient.getMemberListByIds(memberVoIdSet, SecurityConstants.INNER)
                .getData();
        Map<Long, Member> memberMap = data.stream()
                .collect(Collectors.toMap(Member::getId, e -> e));
        voList = voList.stream().peek(order -> {
            Member member = memberMap.get(order.getMemberId());
            if (StringUtils.isNotNull(member)) {
                order.setNickname(member.getNickname());
                order.setPhone(member.getPhone());
            }
        }).collect(Collectors.toList());
        return pageVO;
    }
@@ -1274,7 +1303,7 @@
            }
        }
        // 查询售后信息
        if (order.getOrderStatus() == OrderStatusEnum.AFTER_SALE) {
        if (order.getIsRequest() == 2) {
            OrderReturnRequest orderReturnRequest = orderReturnRequestService.getOne(
                    Wrappers.lambdaQuery(OrderReturnRequest.class)
                            .eq(OrderReturnRequest::getOrderId,
@@ -1345,6 +1374,7 @@
     * @param id 订单id
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void refund(Long id) {
        Order order = getOrder(id);
        String orderNo = order.getOrderNo();
@@ -1367,6 +1397,8 @@
            orderReturnRequest.setAuditStatus(AuditStatusEnum.PASSED);
            orderReturnRequestService.save(orderReturnRequest);
        }
        order.setIsRequest(2);
        this.updateById(order);
    }
    private boolean handleRefund(PaymentMethodEnum paymentMethod, Paylog paylog, String orderNo) {
@@ -1401,7 +1433,7 @@
        Order order = getOrder(id);
        if (order.getOrderStatus() == OrderStatusEnum.FINISHED) {
            OrderReturnRequest orderReturnRequest = new OrderReturnRequest();
            order.setOrderStatus(OrderStatusEnum.AFTER_SALE);
            order.setIsRequest(2);
            this.updateById(order);
            MgtAfterSaleSettingDTO data = sysUserClient.getAfterSaleSetting().getData();
            if (StringUtils.isNull(data)) {
@@ -1484,4 +1516,15 @@
    public List<Order> getStaticsOrderList(LocalDateTime startTime, LocalDateTime endTime) {
        return baseMapper.getStaticsOrderList(startTime, endTime);
    }
    @Override
    public List<Order> getOrderListByMubres(List<String> mubres) {
        return this.lambdaQuery().in(Order::getGroupNo, mubres).list();
    }
    @Override
    public void updateOrderStatusByMubres(List<String> formedGroupMubres) {
        this.lambdaUpdate().set(Order::getIsOrder, 1).in(Order::getGroupNo, formedGroupMubres)
                .update();
    }
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/PaylogServiceImpl.java
@@ -883,6 +883,10 @@
            return m.matches();
        }
    /**
     * @param refundDTOS 退款数据传输对象
     * @return Map<String, Object> key :orderNo value 退款结果
     */
    @Override
    public Map<String, Object> refund(List<RefundDTO> refundDTOS) {
        Map<String, Object> map = new HashMap<>();
ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml
@@ -3,14 +3,13 @@
<mapper namespace="com.ruoyi.order.mapper.OrderMapper">
  <select id="getSeckillMembers" resultType="java.lang.Integer">
    SELECT ifnull(count(1), 0) FROM t_order o
    SELECT IFNULL(COUNT(id), 0) AS num
    FROM t_order o
    WHERE
      o.goods_sku_id = #{id}
      AND o.order_from=2
      AND o.del_flag=0
      AND o.order_status IN (2
        , 3
        , 4)
      AND o.order_status IN (2, 3, 4)
    GROUP BY
      o.member_id
  </select>
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/MgtCouponController.java
@@ -2,9 +2,7 @@
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.util.DateUtils;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.page.PageDTO;
import com.ruoyi.promotion.controller.management.dto.MgtCouponDTO;
@@ -18,8 +16,11 @@
import com.ruoyi.system.api.validate.UpdateGroup;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
@@ -43,6 +44,7 @@
public class MgtCouponController {
    private final ICouponService couponService;
    private final HttpServletResponse response;
    /**
     * 获取优惠券列表的分页数据
@@ -115,14 +117,22 @@
    public void exportReceiveDetail(@RequestBody MgtCouponReceiveQuery query) {
        List<CouponReceiveDetailVO> couponReceiveDetailVOList = couponService.getCouponReceiveDetailList(
                query);
        String fileName =
                "优惠券领取明细" + DateUtils.format(new Date(), "yyyyMMddHHmmss") + ".xlsx";
        try (ExcelWriter excelWriter = EasyExcel.write(fileName, CouponReceiveDetailVO.class)
                .build()) {
            WriteSheet writeSheet = EasyExcel.writerSheet("优惠券领取详情").build();
            excelWriter.write(couponReceiveDetailVOList, writeSheet);
        response.setContentType(
                "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setCharacterEncoding("utf-8");
        // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
        try {
            String fileName = URLEncoder.encode(
                            "优惠券领取明细" + DateUtils.format(new Date(), "yyyyMMddHHmmss"), "UTF-8")
                    .replaceAll("\\+", "%20");
            response.setHeader("Content-disposition",
                    "attachment;filename*=utf-8''" + fileName + ".xlsx");
            EasyExcel.write(response.getOutputStream(), CouponReceiveDetailVO.class)
                    .sheet("优惠券领取明细")
                    .doWrite(couponReceiveDetailVOList);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        }
    }
    
}
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/vo/CouponReceiveDetailVO.java
@@ -4,6 +4,7 @@
import com.alibaba.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.core.enums.CouponUseEnum;
import com.ruoyi.promotion.converter.CouponUseEnumConverter;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
@@ -46,7 +47,7 @@
    private LocalDateTime createTime;
    @ApiModelProperty(value = "使用状态 0:未使用, 1:已使用")
    @ExcelProperty("使用状态")
    @ExcelProperty(value = "使用状态", converter = CouponUseEnumConverter.class)
    private CouponUseEnum couponStatus;
}
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/converter/CouponUseEnumConverter.java
New file
@@ -0,0 +1,17 @@
package com.ruoyi.promotion.converter;
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import com.ruoyi.common.core.enums.CouponUseEnum;
public class CouponUseEnumConverter  implements Converter<CouponUseEnum> {
    @Override
    public WriteCellData<?> convertToExcelData(CouponUseEnum value,
            ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration)
            throws Exception {
        return new WriteCellData<String>(value.getDesc());
    }
}
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
@@ -587,7 +587,7 @@
    }
    @InnerAuth
    @GetMapping("/list-by-name")
    @PostMapping("/list-by-name")
    R<List<SysUser>> getUserListByName(@RequestBody SysUser sysUser) {
        List<SysUser> list = userService.lambdaQuery()
                .like(StringUtils.isNotBlank(sysUser.getNickName()), SysUser::getNickName,
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
@@ -603,12 +603,13 @@
    public void saveSupplier(SupplierDTO dto) {
        SysUser user = BeanUtils.copyBean(dto, SysUser.class);
        // 添加
        if (StringUtils.isNull(dto.getUserId())) {
        boolean b = checkPhoneUnique(user);
        if (!b) {
            throw new ServiceException("该手机号已存在");
        }
        // 添加
        if (StringUtils.isNull(dto.getUserId())) {
            user.setUserName(dto.getPhonenumber());
            user.setPassword(SecurityUtils.encryptPassword(dto.getPassword()));
            user.setUserType("04");
@@ -618,6 +619,12 @@
        } else {
            // 编辑
            user = this.getById(dto.getUserId());
            if (!user.getPhonenumber().equals(dto.getPhonenumber())) {
                boolean b = checkPhoneUnique(user);
                if (!b) {
                    throw new ServiceException("该手机号已存在");
                }
            }
            if (StringUtils.isNull(user)) {
                throw new ServiceException("供应商不存在");
            }