ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/AuctionGoodsStatusEnum.java
New file @@ -0,0 +1,39 @@ package com.ruoyi.common.core.enums; import com.baomidou.mybatisplus.annotation.EnumValue; import com.fasterxml.jackson.annotation.JsonValue; import lombok.AllArgsConstructor; import lombok.Getter; @Getter @AllArgsConstructor public enum AuctionGoodsStatusEnum { /*状态 0=等待中 1=进行中 2=已结束*/ WAITING(0, "等待中"), IN_PROGRESS(1, "进行中"), ENDED(2, "已结束"); @EnumValue private final int code; @JsonValue private final String desc; /** * 通过code获取枚举 * * @param code * @return */ public static AuctionGoodsStatusEnum fromCode(Integer code) { AuctionGoodsStatusEnum[] resultTypes = AuctionGoodsStatusEnum.values(); for (AuctionGoodsStatusEnum resultType : resultTypes) { if (code.equals(resultType.getCode())) { return resultType; } } return null; } } ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/MgtAuctionScreenController.java
New file @@ -0,0 +1,61 @@ package com.ruoyi.auction.controller.management; import com.ruoyi.auction.controller.management.dto.MgtAuctionSalesroomQuery; import com.ruoyi.auction.controller.management.vo.MgtAuctionSalesroomScreenVO; import com.ruoyi.auction.controller.management.vo.MgtAuctionSalesroomVO; import com.ruoyi.auction.service.IAuctionSalesroomService; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.page.PageDTO; import com.ruoyi.common.core.web.page.BasePage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; /** * <p> * 拍卖会视频表 前端控制器 * </p> * * @author mitao * @since 2024-05-17 */ @RestController @RequestMapping("/mgt/auction-screen") @Api(tags = {"管理后台-大屏操作台相关接口"}) @RequiredArgsConstructor public class MgtAuctionScreenController { private final IAuctionSalesroomService auctionSalesroomService; /** * 大屏操作台分页查询拍卖场 * * @param query 拍卖场查询对象 * @return PageDTO<MgtAuctionSalesroomVO> */ @PostMapping("/page") @ApiOperation(value = "获取拍卖场列表的分页数据", notes = "获取拍卖场列表的分页数据") public R<PageDTO<MgtAuctionSalesroomVO>> getAuctionSalesroom4ScreenPage( MgtAuctionSalesroomQuery query) { return R.ok(auctionSalesroomService.getAuctionSalesroom4ScreenPage(query)); } /** * 进入详情 * * @param id 拍卖会id * @return 大屏操作台拍卖场视图对象 */ @PostMapping("/detail/{id}") @ApiOperation(value = "进入详情", notes = "进入详情") public R<MgtAuctionSalesroomScreenVO> getAuctionSalesroomDetail(@PathVariable("id") Long id, @RequestParam("basePage") BasePage basePage) { return R.ok(auctionSalesroomService.getAuctionSalesroomDetail(id, basePage)); } } ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/MgtAuctionVideoController.java
File was deleted ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/vo/MgtAuctionSalesroomGoodsVO.java
@@ -1,11 +1,14 @@ package com.ruoyi.auction.controller.management.vo; import com.ruoyi.common.core.enums.AuctionStartStatusEnum; import com.ruoyi.common.core.enums.AuctionGoodsStatusEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import java.io.Serializable; import java.math.BigDecimal; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; /** * @author mitao @@ -13,6 +16,9 @@ */ @Data @ApiModel(value = "拍卖场商品视图对象", description = "拍卖场商品视图对象") @Builder @NoArgsConstructor @AllArgsConstructor public class MgtAuctionSalesroomGoodsVO implements Serializable { private static final long serialVersionUID = 2894806543298759929L; @@ -22,7 +28,7 @@ @ApiModelProperty(value = "商品id") private Long goodsSkuId; @ApiModelProperty("拍卖商品名") private String goodsSkuName; @@ -41,7 +47,19 @@ @ApiModelProperty(value = "设为备选") private Boolean backupStatus; @ApiModelProperty(value = "状态 0=预展中 1=拍卖中 2=已结束") private AuctionStartStatusEnum status; @ApiModelProperty(value = "状态 0=等待中 1=进行中 2=已结束") private AuctionGoodsStatusEnum status; @ApiModelProperty(value = "规格") private String spec; @ApiModelProperty(value = "中拍人数") private Integer bidCount = 0; @ApiModelProperty(value = "已拍数量") private Integer bidQuantity = 0; @ApiModelProperty(value = "已拍人数") private Integer bidPersonCount = 0; } ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/vo/MgtAuctionSalesroomScreenVO.java
New file @@ -0,0 +1,49 @@ package com.ruoyi.auction.controller.management.vo; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.common.core.enums.AuctionStartStatusEnum; import com.ruoyi.common.core.utils.page.PageDTO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import java.io.Serializable; import java.time.LocalDateTime; import java.util.List; import lombok.Data; /** * @author mitao * @date 2024/5/29 */ @Data @ApiModel(value = "大屏操作台拍卖场视图对象", description = "大屏操作台拍卖场视图对象") public class MgtAuctionSalesroomScreenVO implements Serializable { private static final long serialVersionUID = -5626613967629761052L; @ApiModelProperty(value = "拍卖场id") private Long id; @ApiModelProperty(value = "拍卖场名称") private String salesroomName; @ApiModelProperty(value = "开始时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime startTime; @ApiModelProperty(value = "拍卖状态 0=预展中 1=拍卖中 2=已结束") private AuctionStartStatusEnum status; @ApiModelProperty(value = "当前拍品信息") private MgtAuctionSalesroomGoodsVO currentAuctionSalesroomGoods; @ApiModelProperty(value = "下一拍品拍卖信息") private MgtAuctionSalesroomGoodsVO nextAuctionSalesroomGoods; @ApiModelProperty(value = "拍卖信息") private List<MgtAuctionSalesroomGoodsVO> auctionSalesroomGoodsVOS; @ApiModelProperty(value = "当前拍品出价信息") private PageDTO<MgtAuctionBidRecordVO> mgtAuctionBidRecordVOPageDTO; } ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/vo/MgtAuctionSalesroomVO.java
@@ -10,7 +10,10 @@ import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.List; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; /** * @author mitao @@ -18,6 +21,9 @@ */ @Data @ApiModel(value = "拍卖场视图对象", description = "拍卖场视图对象") @Builder @NoArgsConstructor @AllArgsConstructor public class MgtAuctionSalesroomVO implements Serializable { private static final long serialVersionUID = -7682015246094307938L; ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/domain/AuctionSalesroomGoods.java
@@ -6,7 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; import com.ruoyi.common.core.enums.AuctionStartStatusEnum; import com.ruoyi.common.core.enums.AuctionGoodsStatusEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import java.io.Serializable; @@ -67,8 +67,8 @@ @ApiModelProperty(value = "开始时间") private LocalDateTime startTime; @ApiModelProperty(value = "状态 0=预展中 1=拍卖中 2=已结束") private AuctionStartStatusEnum status; @ApiModelProperty(value = "状态 0=等待中 1=进行中 2=已结束") private AuctionGoodsStatusEnum status; @ApiModelProperty(value = "创建者") @TableField(value = "create_by", fill = FieldFill.INSERT) ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/IAuctionSalesroomService.java
@@ -10,8 +10,10 @@ import com.ruoyi.auction.controller.management.dto.MgtAuctionSalesroomDTO; import com.ruoyi.auction.controller.management.dto.MgtAuctionSalesroomQuery; import com.ruoyi.auction.controller.management.vo.MgtAuctionBidRecordVO; import com.ruoyi.auction.controller.management.vo.MgtAuctionSalesroomScreenVO; import com.ruoyi.auction.controller.management.vo.MgtAuctionSalesroomVO; import com.ruoyi.common.core.utils.page.PageDTO; import com.ruoyi.common.core.web.page.BasePage; import com.ruoyi.system.api.domain.AppMiniLoginVO; import com.ruoyi.system.api.domain.AuctionSalesroom; import com.ruoyi.system.api.domain.dto.AppMiniLoginDTO; @@ -98,4 +100,21 @@ */ PageDTO<MgtAuctionBidRecordVO> getAuctionSalesroomBidRecordList( MgtAuctionSaleroomBidRecordQuery query); /** * 大屏操作台分页查询拍卖场 * * @param query 拍卖场查询对象 * @return PageDTO<MgtAuctionSalesroomVO> */ PageDTO<MgtAuctionSalesroomVO> getAuctionSalesroom4ScreenPage(MgtAuctionSalesroomQuery query); /** * 进入详情 * * @param id 拍卖会id * @param page * @return 大屏操作台拍卖场视图对象 */ MgtAuctionSalesroomScreenVO getAuctionSalesroomDetail(Long id, BasePage basePage); } ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomGoodsServiceImpl.java
@@ -22,6 +22,7 @@ import com.ruoyi.auction.service.IAuctionSalesroomService; import com.ruoyi.common.core.constant.SecurityConstants; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.enums.AuctionGoodsStatusEnum; import com.ruoyi.common.core.enums.AuctionOrderTypeEnum; import com.ruoyi.common.core.enums.AuctionStartStatusEnum; import com.ruoyi.common.core.enums.BidStatusEnum; @@ -291,7 +292,7 @@ wrapper2.orderByAsc(AuctionSalesroomGoods::getSortNum); wrapper2.last("limit 1"); AuctionSalesroomGoods auctionSalesroomGoods = this.getOne(wrapper2); auctionSalesroomGoods.setStatus(AuctionStartStatusEnum.IN_AUCTION); auctionSalesroomGoods.setStatus(AuctionGoodsStatusEnum.IN_PROGRESS); this.updateById(auctionSalesroomGoods); } @@ -316,7 +317,7 @@ List<AuctionSalesroomGoods> auctionSalesroomGoods=this.list(wrapper2); if (auctionSalesroomGoods.size()>0){ for (AuctionSalesroomGoods salesroomGoods:auctionSalesroomGoods){ salesroomGoods.setStatus(AuctionStartStatusEnum.ENDED); salesroomGoods.setStatus(AuctionGoodsStatusEnum.ENDED); this.updateById(salesroomGoods); GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO(); @@ -373,7 +374,7 @@ wrapper2.eq(AuctionSalesroomGoods::getDelFlag,0); wrapper2.eq(AuctionSalesroomGoods::getGoodsSkuId,auctionSalesroomGoodsDTO.getGoodsSkuId()); AuctionSalesroomGoods auctionSalesroomGoods=this.getOne(wrapper2); auctionSalesroomGoods.setStatus(AuctionStartStatusEnum.IN_AUCTION); auctionSalesroomGoods.setStatus(AuctionGoodsStatusEnum.IN_PROGRESS); this.updateById(auctionSalesroomGoods); @@ -431,7 +432,7 @@ } } auctionSalesroomGood.setStatus(AuctionStartStatusEnum.ENDED); auctionSalesroomGood.setStatus(AuctionGoodsStatusEnum.ENDED); this.updateById(auctionSalesroomGood); } ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java
@@ -1,5 +1,6 @@ package com.ruoyi.auction.service.impl; import cn.binarywang.wx.miniapp.api.WxMaService; import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; import com.alibaba.fastjson.JSONObject; import com.alipay.api.AlipayApiException; @@ -25,6 +26,7 @@ import com.ruoyi.auction.controller.management.dto.MgtAuctionSalesroomQuery; import com.ruoyi.auction.controller.management.vo.MgtAuctionBidRecordVO; import com.ruoyi.auction.controller.management.vo.MgtAuctionSalesroomGoodsVO; import com.ruoyi.auction.controller.management.vo.MgtAuctionSalesroomScreenVO; import com.ruoyi.auction.controller.management.vo.MgtAuctionSalesroomVO; import com.ruoyi.auction.domain.AuctionBidRecord; import com.ruoyi.auction.domain.AuctionSalesroomGoods; @@ -35,13 +37,13 @@ import com.ruoyi.auction.service.IAuctionBidRecordService; import com.ruoyi.auction.service.IAuctionBrowseRecordService; import com.ruoyi.auction.service.IAuctionGoodsService; import com.ruoyi.auction.service.IAuctionSalesroomGoodsService; import com.ruoyi.auction.service.IAuctionSalesroomService; import com.ruoyi.auction.service.IAuctionVideoService; import com.ruoyi.auction.util.CreateQrCode; import com.ruoyi.auction.util.HttpUtils; import com.ruoyi.common.core.constant.SecurityConstants; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.enums.AuctionGoodsStatusEnum; import com.ruoyi.common.core.enums.AuctionOrderTypeEnum; import com.ruoyi.common.core.enums.AuctionStartStatusEnum; import com.ruoyi.common.core.enums.BidStatusEnum; @@ -53,6 +55,7 @@ import com.ruoyi.common.core.utils.page.Checker; import com.ruoyi.common.core.utils.page.CollUtils; import com.ruoyi.common.core.utils.page.PageDTO; import com.ruoyi.common.core.web.page.BasePage; import com.ruoyi.system.api.domain.AppMiniLoginVO; import com.ruoyi.system.api.domain.AuctionGoods; import com.ruoyi.system.api.domain.AuctionSalesroom; @@ -60,7 +63,13 @@ import com.ruoyi.system.api.domain.Member; import com.ruoyi.system.api.domain.OrderAuctionBond; import com.ruoyi.system.api.domain.SysUser; import com.ruoyi.system.api.domain.dto.*; import com.ruoyi.system.api.domain.dto.AppMiniLoginDTO; import com.ruoyi.system.api.domain.dto.BidDTO; import com.ruoyi.system.api.domain.dto.GoodsStockUpdDTO; import com.ruoyi.system.api.domain.dto.MemberAuctionSalesroomBondDTO; import com.ruoyi.system.api.domain.dto.MemberAuctionSalesroomDTO; import com.ruoyi.system.api.domain.dto.MemberAuctionSalesroomWdDTO; import com.ruoyi.system.api.domain.dto.RefundDTO; import com.ruoyi.system.api.domain.vo.PayInfoVO; import com.ruoyi.system.api.domain.vo.WdMemberAuctionSalesroomVO; import com.ruoyi.system.api.feignClient.GoodsSkuClient; @@ -70,7 +79,11 @@ import io.seata.spring.annotation.GlobalTransactional; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.*; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; import javax.annotation.Resource; @@ -102,12 +115,11 @@ @Resource private SysUserClient sysUserClient; // @Resource // private WxMaService wxMaService; @Resource private WxMaService wxMaService; @Resource private AuctionSalesroomGoodsMapper auctionSalesroomGoodsMapper; @Resource private IAuctionGoodsService auctionGoodsService; @@ -117,6 +129,7 @@ @Resource private OrderClient orderClient; @Resource private MemberClient memberClient; @@ -260,7 +273,7 @@ String openid; String sessionKey = null; //获取session // session = wxMaService.getUserService().getSessionInfo(appMiniLoginDto.getCode()); session = wxMaService.getUserService().getSessionInfo(appMiniLoginDto.getCode()); if (session != null && StringUtils.isNotBlank(session.getOpenid())) { unionid = session.getUnionid(); openid = session.getOpenid(); @@ -809,6 +822,7 @@ // 获取拍卖场商品 LambdaQueryWrapper<AuctionSalesroomGoods> wrappers=new LambdaQueryWrapper<AuctionSalesroomGoods>(); wrappers.eq(AuctionSalesroomGoods::getAuctionSalesroomId, id); wrappers.orderByDesc(AuctionSalesroomGoods::getSortNum); List<AuctionSalesroomGoods> list = auctionSalesroomGoodsMapper.selectList(wrappers); if (StringUtils.isNotEmpty(list)) { List<MgtAuctionSalesroomGoodsVO> mgtAuctionSalesroomGoodsVOS = BeanUtils.copyList(list, @@ -827,6 +841,7 @@ GoodsSku goodsSku = goodsSkuMap.get(vo.getGoodsSkuId()); if (StringUtils.isNotNull(goodsSku)) { vo.setGoodsSkuName(goodsSku.getSkuName()); vo.setSpec(goodsSku.getSpec()); } } mgtAuctionSalesroomVO.setAuctionSalesroomGoodsVOS(mgtAuctionSalesroomGoodsVOS); @@ -882,4 +897,89 @@ } return mgtAuctionBidRecordVOPageDTO; } /** * 大屏操作台分页查询拍卖场 * * @param query 拍卖场查询对象 * @return PageDTO<MgtAuctionSalesroomVO> */ @Override public PageDTO<MgtAuctionSalesroomVO> getAuctionSalesroom4ScreenPage( MgtAuctionSalesroomQuery query) { // 分页查询 Page<AuctionSalesroom> page = this.lambdaQuery() .select(AuctionSalesroom::getId, AuctionSalesroom::getSalesroomName, AuctionSalesroom::getStartTime, AuctionSalesroom::getStatus) .like(StringUtils.isNotEmpty(query.getSalesroomName()), AuctionSalesroom::getSalesroomName, query.getSalesroomName()) .eq(StringUtils.isNotNull(query.getStatus()), AuctionSalesroom::getStatus, query.getStatus()) .ne(AuctionSalesroom::getStatus, AuctionStartStatusEnum.ENDED) .between(StringUtils.isNotNull(query.getStartTime()) && StringUtils.isNotNull( query.getEndTime()), AuctionSalesroom::getStartTime, query.getStartTime(), query.getEndTime()) .page(new Page<>(query.getPageCurr(), query.getPageSize())); List<AuctionSalesroom> records = page.getRecords(); if (StringUtils.isNull(records)) { return PageDTO.empty(page); } return PageDTO.of(page, MgtAuctionSalesroomVO.class); } /** * 进入详情 * * @param id 拍卖会id * @param basePage * @return 大屏操作台拍卖场视图对象 */ @Override public MgtAuctionSalesroomScreenVO getAuctionSalesroomDetail(Long id, BasePage basePage) { MgtAuctionSalesroomVO mgtAuctionSalesroomVO = this.getAuctionSalesroom(id); MgtAuctionSalesroomScreenVO vo = BeanUtils.copyBean( mgtAuctionSalesroomVO, MgtAuctionSalesroomScreenVO.class); if (vo.getStatus().equals(AuctionStartStatusEnum.IN_AUCTION)) { List<MgtAuctionSalesroomGoodsVO> auctionSalesroomGoodsVOS = vo.getAuctionSalesroomGoodsVOS(); List<MgtAuctionSalesroomGoodsVO> collect = auctionSalesroomGoodsVOS.stream() .peek(goods -> { List<AuctionBidRecord> list = auctionBidRecordService.lambdaQuery() .eq(AuctionBidRecord::getTargetId, goods.getId()) .eq(AuctionBidRecord::getAuctionType, AuctionOrderTypeEnum.AUCTION_ITEMS) .list(); if (StringUtils.isNotEmpty(list)) { long bidCount = list.stream() .filter(item -> BidStatusEnum.SUCCESSFUL.equals( item.getStatus())) .count(); goods.setBidCount((int) bidCount); goods.setBidQuantity((int) bidCount); goods.setBidPersonCount(list.size()); } if (goods.getStatus().equals(AuctionGoodsStatusEnum.IN_PROGRESS)) { vo.setCurrentAuctionSalesroomGoods(goods); } }).collect(Collectors.toList()); vo.setAuctionSalesroomGoodsVOS(collect); if (StringUtils.isNotNull(vo.getCurrentAuctionSalesroomGoods())) { int index = collect.indexOf(vo.getCurrentAuctionSalesroomGoods()); vo.setNextAuctionSalesroomGoods(collect.get(index + 1)); // 分页查询当前拍品出价信息 Page<AuctionBidRecord> page = auctionBidRecordService.lambdaQuery() .eq(AuctionBidRecord::getTargetId, vo.getCurrentAuctionSalesroomGoods().getId()) .eq(AuctionBidRecord::getAuctionType, AuctionOrderTypeEnum.AUCTION_ITEMS) .page(new Page<>(basePage.getPageCurr(), basePage.getPageSize())); if (StringUtils.isNotEmpty(page.getRecords())) { vo.setMgtAuctionBidRecordVOPageDTO(PageDTO.empty(page)); } vo.setMgtAuctionBidRecordVOPageDTO(PageDTO.of(page, MgtAuctionBidRecordVO.class)); } else { vo.setNextAuctionSalesroomGoods(collect.get(0)); } } return vo; } }