| | |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.auction.controller.forepart.dto.AuctionSalesroomGoodsDTO; |
| | | import com.ruoyi.auction.controller.forepart.dto.ForepartAuctionBidRecordDTO; |
| | | import com.ruoyi.auction.controller.forepart.dto.MemberAuctionSalesroomDTO; |
| | | import com.ruoyi.auction.controller.forepart.vo.ForepartAuctionSalesroomGoodsVO; |
| | | import com.ruoyi.auction.controller.forepart.vo.ForepartAuctionSalesroomVO; |
| | | import com.ruoyi.auction.controller.forepart.vo.MemberAuctionSalesroomInfoVO; |
| | | import com.ruoyi.auction.controller.forepart.vo.MemberAuctionSalesroomVO; |
| | | import com.ruoyi.auction.domain.*; |
| | | import com.ruoyi.auction.controller.management.dto.MgtAuctionSalesroomDTO; |
| | | import com.ruoyi.auction.controller.management.dto.MgtAuctionSalesroomGoodsDTO; |
| | | import com.ruoyi.auction.controller.management.dto.MgtAuctionSalesroomQuery; |
| | | import com.ruoyi.auction.controller.management.vo.MgtAuctionSalesroomVO; |
| | | import com.ruoyi.auction.domain.AuctionBidRecord; |
| | | import com.ruoyi.auction.domain.AuctionSalesroomGoods; |
| | | import com.ruoyi.auction.domain.AuctionVideo; |
| | | import com.ruoyi.auction.mapper.AuctionSalesroomGoodsMapper; |
| | | import com.ruoyi.auction.mapper.AuctionSalesroomMapper; |
| | | import com.ruoyi.auction.service.*; |
| | | import com.ruoyi.auction.service.IAuctionBidRecordService; |
| | | 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.AuctionOrderTypeEnum; |
| | | import com.ruoyi.common.core.enums.AuctionStartStatusEnum; |
| | | import com.ruoyi.common.core.enums.BidStatusEnum; |
| | | import com.ruoyi.common.core.exception.ServiceException; |
| | | import com.ruoyi.common.core.utils.IDhelper; |
| | | import com.ruoyi.common.core.utils.StringUtils; |
| | | import com.ruoyi.common.core.utils.page.BeanUtils; |
| | | 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.auction.util.HttpUtils; |
| | | import com.ruoyi.system.api.constants.SecurityConstant; |
| | | import com.ruoyi.system.api.domain.AppMiniLoginVO; |
| | | import com.ruoyi.system.api.domain.AuctionGoods; |
| | | import com.ruoyi.system.api.domain.AuctionSalesroom; |
| | | import com.ruoyi.system.api.domain.GoodsSku; |
| | | 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.AppMiniLoginDTO; |
| | | import com.ruoyi.system.api.domain.dto.BidVO; |
| | | import com.ruoyi.system.api.domain.dto.MemberAuctionSalesroomBondDTO; |
| | | import com.ruoyi.system.api.domain.dto.MemberAuctionSalesroomDTO; |
| | | import com.ruoyi.system.api.domain.vo.PayInfoVO; |
| | | import com.ruoyi.system.api.feignClient.GoodsSkuClient; |
| | | import com.ruoyi.system.api.feignClient.MemberClient; |
| | | import com.ruoyi.system.api.feignClient.OrderClient; |
| | | import com.ruoyi.system.api.feignClient.SysUserClient; |
| | | import javax.annotation.Resource; |
| | | |
| | | import org.apache.http.HttpResponse; |
| | | import org.apache.http.util.EntityUtils; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.time.LocalDateTime; |
| | | import java.util.ArrayList; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.concurrent.TimeUnit; |
| | | |
| | | import static com.ruoyi.member.service.impl.MemberServiceImpl.getAccessTokenByWX; |
| | | import java.util.stream.Collectors; |
| | | import javax.annotation.Resource; |
| | | import org.apache.http.HttpResponse; |
| | | import org.apache.http.util.EntityUtils; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | /** |
| | | * <p> |
| | |
| | | private WxMaService wxMaService; |
| | | |
| | | @Resource |
| | | private IMemberBondService memberBondService; |
| | | |
| | | @Resource |
| | | private AuctionSalesroomGoodsMapper auctionSalesroomGoodsMapper; |
| | | |
| | | @Resource |
| | | private IAuctionSalesroomGoodsService auctionSalesroomGoodsService; |
| | | |
| | | @Resource |
| | | private IAuctionGoodsService auctionGoodsService; |
| | | |
| | | @Resource |
| | | private GoodsSkuClient goodsSkuClient; |
| | | |
| | | @Resource |
| | | private OrderClient orderClient; |
| | | @Resource |
| | | private MemberClient memberClient; |
| | | |
| | | |
| | | //微信 |
| | |
| | | memberAuctionSalesroomVO.setStatus(auctionSalesroom.getStatus().getCode()); |
| | | memberAuctionSalesroomVO.setSalesroomId(auctionSalesroom.getId()); |
| | | memberAuctionSalesroomVO.setCoverPic(auctionSalesroom.getCoverPic()); |
| | | LambdaQueryWrapper<MemberBond> wrapper=Wrappers.lambdaQuery(); |
| | | wrapper.eq(MemberBond::getMemberId,memberAuctionSalesroomDTO.getMemberId()); |
| | | wrapper.eq(MemberBond::getAuctionRoomId,auctionSalesroom.getId()); |
| | | wrapper.eq(MemberBond::getDelFlag,0); |
| | | List<MemberBond> list = memberBondService.list(wrapper); |
| | | if (list.size()>0){ |
| | | List<OrderAuctionBond> data = orderClient.getOrderAuctionBondList(memberAuctionSalesroomDTO, SecurityConstants.INNER).getData(); |
| | | if (data.size()>0){ |
| | | memberAuctionSalesroomVO.setIsApply(2); |
| | | }else{ |
| | | memberAuctionSalesroomVO.setIsApply(1); |
| | | } |
| | | LambdaQueryWrapper<MemberBond> wrapper1=Wrappers.lambdaQuery(); |
| | | wrapper1.eq(MemberBond::getAuctionRoomId,auctionSalesroom.getId()); |
| | | wrapper1.eq(MemberBond::getDelFlag,0); |
| | | List<MemberBond> list1 = memberBondService.list(wrapper1); |
| | | memberAuctionSalesroomVO.setApplyNum(list1.size()); |
| | | MemberAuctionSalesroomDTO memberAuctionSalesroomDTO1=new MemberAuctionSalesroomDTO(); |
| | | memberAuctionSalesroomDTO1.setAuctionSalesroomId(auctionSalesroom.getId()); |
| | | List<OrderAuctionBond> data1 = orderClient.getOrderAuctionBondList(memberAuctionSalesroomDTO1, SecurityConstants.INNER).getData(); |
| | | memberAuctionSalesroomVO.setApplyNum(data1.size()); |
| | | List.add(memberAuctionSalesroomVO); |
| | | } |
| | | page.setRecords(List); |
| | |
| | | AuctionSalesroom byId = iAuctionSalesroomService.getById(memberAuctionSalesroomDTO.getAuctionSalesroomId()); |
| | | MemberAuctionSalesroomInfoVO memberAuctionSalesroomInfoVO=new MemberAuctionSalesroomInfoVO(); |
| | | memberAuctionSalesroomInfoVO.setId(byId.getId()); |
| | | memberAuctionSalesroomInfoVO.setBound(byId.getBound()); |
| | | memberAuctionSalesroomInfoVO.setBound(byId.getBond()); |
| | | memberAuctionSalesroomInfoVO.setAuthentication(byId.getAuthentication()); |
| | | memberAuctionSalesroomInfoVO.setEndTime(byId.getEndTime()); |
| | | memberAuctionSalesroomInfoVO.setSalesroomName(byId.getSalesroomName()); |
| | |
| | | memberAuctionSalesroomInfoVO.setStartTime(byId.getStartTime()); |
| | | memberAuctionSalesroomInfoVO.setStatus(byId.getStatus()); |
| | | memberAuctionSalesroomInfoVO.setCoverPic(byId.getCoverPic()); |
| | | LambdaQueryWrapper<MemberBond> wrapper=Wrappers.lambdaQuery(); |
| | | wrapper.eq(MemberBond::getMemberId,memberAuctionSalesroomDTO.getMemberId()); |
| | | wrapper.eq(MemberBond::getAuctionRoomId,byId.getId()); |
| | | wrapper.eq(MemberBond::getDelFlag,0); |
| | | List<MemberBond> list = memberBondService.list(wrapper); |
| | | if (list.size()>0){ |
| | | List<OrderAuctionBond> data = orderClient.getOrderAuctionBondList(memberAuctionSalesroomDTO, SecurityConstants.INNER).getData(); |
| | | if (data.size()>0){ |
| | | memberAuctionSalesroomInfoVO.setIsApply(2); |
| | | }else{ |
| | | memberAuctionSalesroomInfoVO.setIsApply(1); |
| | |
| | | return memberAuctionSalesroomVO; |
| | | } |
| | | |
| | | @Override |
| | | public PayInfoVO SaveSignUpNow(MemberAuctionSalesroomBondDTO memberAuctionSalesroomBondDTO) { |
| | | return orderClient.SaveOrderAuctionBond(memberAuctionSalesroomBondDTO,SecurityConstants.INNER).getData(); |
| | | } |
| | | |
| | | @Override |
| | | public void SaveBid(BidVO bidVO) { |
| | | Member membeOne = memberClient.getMembeOne(bidVO.getMemberId(), SecurityConstants.INNER).getData(); |
| | | if (bidVO.getAuctionType()==2){ |
| | | AuctionSalesroomGoods byId = auctionSalesroomGoodsService.getById(bidVO.getTargetId()); |
| | | if (byId.getStartingPrice().doubleValue()<bidVO.getLastBidAmount().doubleValue()){ |
| | | throw new ServiceException("出价不能比起拍价低"); |
| | | } |
| | | BigDecimal bigDecimal=byId.getStartingPrice().add(byId.getMinimumMarkupAmount()); |
| | | if (bigDecimal.doubleValue()<bidVO.getLastBidAmount().doubleValue()){ |
| | | throw new ServiceException("出价不能比每次最少加价低"); |
| | | } |
| | | |
| | | LambdaQueryWrapper<AuctionBidRecord> wrapper1=Wrappers.lambdaQuery(); |
| | | wrapper1.eq(AuctionBidRecord::getMemberId,bidVO.getMemberId()); |
| | | wrapper1.eq(AuctionBidRecord::getAuctionSalesroomId,bidVO.getAuctionSalesroomId()); |
| | | wrapper1.eq(AuctionBidRecord::getTargetId,bidVO.getTargetId()); |
| | | wrapper1.eq(AuctionBidRecord::getDelFlag,0); |
| | | AuctionBidRecord one = auctionBidRecordService.getOne(wrapper1); |
| | | if (one!=null){ |
| | | BigDecimal bigDecimal1=one.getLastBidAmount().add(byId.getMinimumMarkupAmount()); |
| | | if (bigDecimal1.doubleValue()<bidVO.getLastBidAmount().doubleValue()){ |
| | | throw new ServiceException("出价不能比上次出价加每次最少加价低"); |
| | | } |
| | | one.setLastBidAmount(bidVO.getLastBidAmount()); |
| | | one.setLastBidTime(LocalDateTime.now()); |
| | | one.setBidCount(one.getBidCount()+1); |
| | | auctionBidRecordService.updateById(one); |
| | | }else{ |
| | | one=new AuctionBidRecord(); |
| | | one.setAuctionSalesroomId(bidVO.getAuctionSalesroomId()); |
| | | one.setTargetId(bidVO.getTargetId()); |
| | | one.setMemberId(bidVO.getMemberId()); |
| | | one.setLastBidTime(LocalDateTime.now()); |
| | | one.setAuctionType(AuctionOrderTypeEnum.AUCTION_ITEMS); |
| | | one.setStatus(BidStatusEnum.ELIMINATE); |
| | | one.setBidCount(1); |
| | | one.setLastBidAmount(bidVO.getLastBidAmount()); |
| | | auctionBidRecordService.save(one); |
| | | } |
| | | |
| | | |
| | | }else { |
| | | AuctionGoods byId = auctionGoodsService.getById(bidVO.getTargetId()); |
| | | if (byId.getStartingPrice().doubleValue()<bidVO.getLastBidAmount().doubleValue()){ |
| | | throw new ServiceException("出价不能比起拍价低"); |
| | | } |
| | | BigDecimal bigDecimal=byId.getStartingPrice().add(byId.getMinimumMarkupAmount()); |
| | | if (bigDecimal.doubleValue()<bidVO.getLastBidAmount().doubleValue()){ |
| | | throw new ServiceException("出价不能比每次最少加价低"); |
| | | } |
| | | LambdaQueryWrapper<AuctionBidRecord> wrapper1=Wrappers.lambdaQuery(); |
| | | wrapper1.eq(AuctionBidRecord::getMemberId,bidVO.getMemberId()); |
| | | wrapper1.eq(AuctionBidRecord::getTargetId,bidVO.getTargetId()); |
| | | wrapper1.eq(AuctionBidRecord::getDelFlag,0); |
| | | AuctionBidRecord one = auctionBidRecordService.getOne(wrapper1); |
| | | if (one!=null){ |
| | | BigDecimal bigDecimal1=one.getLastBidAmount().add(byId.getMinimumMarkupAmount()); |
| | | if (bigDecimal1.doubleValue()<bidVO.getLastBidAmount().doubleValue()){ |
| | | throw new ServiceException("出价不能比上次出价加每次最少加价低"); |
| | | } |
| | | one.setLastBidAmount(bidVO.getLastBidAmount()); |
| | | one.setLastBidTime(LocalDateTime.now()); |
| | | one.setBidCount(one.getBidCount()+1); |
| | | auctionBidRecordService.updateById(one); |
| | | }else{ |
| | | one=new AuctionBidRecord(); |
| | | one.setAuctionSalesroomId(bidVO.getAuctionSalesroomId()); |
| | | one.setTargetId(bidVO.getTargetId()); |
| | | one.setMemberId(bidVO.getMemberId()); |
| | | one.setLastBidTime(LocalDateTime.now()); |
| | | one.setAuctionType(AuctionOrderTypeEnum.REGULAR_ITEMS); |
| | | one.setStatus(BidStatusEnum.ELIMINATE); |
| | | one.setBidCount(1); |
| | | one.setLastBidAmount(bidVO.getLastBidAmount()); |
| | | auctionBidRecordService.save(one); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | public static String getAccessTokenByWX() throws Exception { |
| | | String host = ACCESS_TOKEN_HOST + "?appid=" + WX_APPID + "&secret=" + WX_SECRET + "&grant_type=client_credential"; |
| | |
| | | HttpResponse response = HttpUtils.doPost(host, "", "POST", headers, querys, body); |
| | | return EntityUtils.toString(response.getEntity()); |
| | | } |
| | | |
| | | /** |
| | | * 分页查询拍卖场 |
| | | * |
| | | * @param query 拍卖场查询对象 |
| | | * @return PageDTO<MgtAuctionSalesroomVO> |
| | | */ |
| | | @Override |
| | | public PageDTO<MgtAuctionSalesroomVO> getAuctionSalesroomPage(MgtAuctionSalesroomQuery query) { |
| | | // 分页查询 |
| | | Page<AuctionSalesroom> page = this.lambdaQuery() |
| | | .select(AuctionSalesroom::getId, AuctionSalesroom::getSalesroomName, |
| | | AuctionSalesroom::getCreateTime, AuctionSalesroom::getStartTime, |
| | | AuctionSalesroom::getEndTime, AuctionSalesroom::getType, |
| | | AuctionSalesroom::getAuthentication, AuctionSalesroom::getStatus) |
| | | .like(StringUtils.isNotEmpty(query.getSalesroomName()), |
| | | AuctionSalesroom::getSalesroomName, query.getSalesroomName()) |
| | | .eq(StringUtils.isNotNull(query.getAuthentication()), |
| | | AuctionSalesroom::getAuthentication, query.getAuthentication()) |
| | | .eq(StringUtils.isNotNull(query.getStatus()), AuctionSalesroom::getStatus, |
| | | query.getStatus()).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); |
| | | } |
| | | PageDTO<MgtAuctionSalesroomVO> auctionSalesroomVOPageDTO = PageDTO.of(page, |
| | | MgtAuctionSalesroomVO.class); |
| | | List<MgtAuctionSalesroomVO> list = auctionSalesroomVOPageDTO.getList(); |
| | | List<Long> auctionSalesroomIdList = list.stream().map(MgtAuctionSalesroomVO::getId) |
| | | .collect(Collectors.toList()); |
| | | // 所有拍卖场的拍卖商品 |
| | | List<AuctionSalesroomGoods> auctionSalesroomGoods = auctionSalesroomGoodsMapper.selectList( |
| | | Wrappers.<AuctionSalesroomGoods>lambdaQuery() |
| | | .in(AuctionSalesroomGoods::getAuctionSalesroomId, auctionSalesroomIdList)); |
| | | // 计算每个拍卖场所有拍品数量 |
| | | Map<Long, Integer> map = auctionSalesroomGoods.stream() |
| | | .collect(Collectors.groupingBy(AuctionSalesroomGoods::getAuctionSalesroomId, |
| | | Collectors.summingInt(AuctionSalesroomGoods::getSalesroomStock))); |
| | | for (MgtAuctionSalesroomVO mgtAuctionSalesroomVO : list) { |
| | | Integer i = map.get(mgtAuctionSalesroomVO.getId()); |
| | | if (StringUtils.isNotNull(i)) { |
| | | mgtAuctionSalesroomVO.setAuctionGoodsNum(i); |
| | | } |
| | | } |
| | | return auctionSalesroomVOPageDTO; |
| | | } |
| | | |
| | | /** |
| | | * 查看二维码 |
| | | * |
| | | * @param id 拍卖场id |
| | | * @return 二维码 |
| | | */ |
| | | @Override |
| | | public String getQrCode(Long id) throws Exception { |
| | | AuctionSalesroom auctionSalesroom = this.getById(id); |
| | | String auctionSalesroomNo = auctionSalesroom.getAuctionSalesroomNo(); |
| | | return CreateQrCode.createQRCode(auctionSalesroomNo); |
| | | } |
| | | |
| | | @Override |
| | | public void saveAuctionSalesroom(MgtAuctionSalesroomDTO dto) { |
| | | Long id = dto.getId(); |
| | | AuctionSalesroom auctionSalesroom = BeanUtils.copyBean(dto, AuctionSalesroom.class); |
| | | List<MgtAuctionSalesroomGoodsDTO> auctionSalesroomGoodsDTOS = dto.getAuctionSalesroomGoodsDTOS(); |
| | | CollUtils.check(auctionSalesroomGoodsDTOS, new Checker<MgtAuctionSalesroomGoodsDTO>() { |
| | | @Override |
| | | public void check(MgtAuctionSalesroomGoodsDTO data) { |
| | | if (StringUtils.isNull(data.getStartingPrice())) { |
| | | throw new ServiceException("拍卖商品起拍价格不能为空"); |
| | | } |
| | | if (StringUtils.isNull(data.getMinimumMarkupAmount())) { |
| | | throw new ServiceException("拍卖商品最低加价金额不能为空"); |
| | | } |
| | | if (StringUtils.isNull(data.getSalesroomStock())) { |
| | | throw new ServiceException("拍卖商品拍品数量不能为空"); |
| | | } |
| | | if (StringUtils.isNull(data.getListingDuration())) { |
| | | throw new ServiceException("拍卖商品拍卖时间不能为空"); |
| | | } |
| | | } |
| | | }); |
| | | List<AuctionSalesroomGoods> auctionSalesroomGoods = BeanUtils.copyList( |
| | | auctionSalesroomGoodsDTOS, AuctionSalesroomGoods.class); |
| | | |
| | | if (StringUtils.isNull(id)) { |
| | | // 生成唯一编号 |
| | | Long nextId = IDhelper.getNextId(); |
| | | auctionSalesroom.setAuctionSalesroomNo(nextId.toString()); |
| | | // 添加 |
| | | this.save(auctionSalesroom); |
| | | } else { |
| | | // 编辑 |
| | | AuctionSalesroom auctionSalesroomOrg = this.getById(id); |
| | | if (StringUtils.isNull(auctionSalesroomOrg)) { |
| | | throw new ServiceException("该拍卖场不存在"); |
| | | } |
| | | if (auctionSalesroomOrg.getStatus().equals(AuctionStartStatusEnum.IN_AUCTION)) { |
| | | throw new ServiceException("该拍卖场正在拍卖中,不能编辑"); |
| | | } |
| | | if (auctionSalesroomOrg.getStatus().equals(AuctionStartStatusEnum.ENDED)) { |
| | | throw new ServiceException("该拍卖场已结束,不能编辑"); |
| | | } |
| | | auctionSalesroom.setId(auctionSalesroomOrg.getId()); |
| | | this.updateById(auctionSalesroom); |
| | | // 移除原来地拍卖商品 |
| | | auctionSalesroomGoodsService.remove(Wrappers.<AuctionSalesroomGoods>lambdaQuery() |
| | | .eq(AuctionSalesroomGoods::getAuctionSalesroomId, id)); |
| | | } |
| | | for (AuctionSalesroomGoods auctionSalesroomGood : auctionSalesroomGoods) { |
| | | auctionSalesroomGood.setAuctionSalesroomId(id); |
| | | } |
| | | // 添加拍卖商品 |
| | | auctionSalesroomGoodsService.saveBatch(auctionSalesroomGoods); |
| | | } |
| | | } |