package com.ruoyi.auction.service.impl;
|
|
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.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.google.common.collect.Lists;
|
import com.ruoyi.auction.controller.management.dto.MgtAuctionGoodsDTO;
|
import com.ruoyi.auction.controller.management.dto.MgtAuctionGoodsQuery;
|
import com.ruoyi.auction.controller.management.vo.MgtAuctionBidRecordVO;
|
import com.ruoyi.auction.controller.management.vo.MgtAuctionGoodsVO;
|
import com.ruoyi.auction.domain.AuctionBidRecord;
|
import com.ruoyi.auction.domain.AuctionBrowseRecord;
|
import com.ruoyi.auction.domain.MemberAuctionCollection;
|
import com.ruoyi.auction.mapper.AuctionBondJlMapper;
|
import com.ruoyi.auction.mapper.AuctionGoodsMapper;
|
import com.ruoyi.auction.service.IAuctionBidRecordService;
|
import com.ruoyi.auction.service.IAuctionBrowseRecordService;
|
import com.ruoyi.auction.service.IAuctionGoodsService;
|
import com.ruoyi.auction.service.IMemberAuctionCollectionService;
|
import com.ruoyi.auction.service.async.AuctionAsyncMethodService;
|
import com.ruoyi.common.core.constant.SecurityConstants;
|
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.enums.BondStatusEnum;
|
import com.ruoyi.common.core.enums.ClientTypeEnum;
|
import com.ruoyi.common.core.enums.ListingStatusEnum;
|
import com.ruoyi.common.core.enums.OrderFromEnum;
|
import com.ruoyi.common.core.exception.ServiceException;
|
import com.ruoyi.common.core.utils.DateUtils;
|
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.constants.ConfigEnum;
|
import com.ruoyi.system.api.constants.NotificationTypeConstant;
|
import com.ruoyi.system.api.domain.AuctionBondJl;
|
import com.ruoyi.system.api.domain.AuctionGoods;
|
import com.ruoyi.system.api.domain.CustomConfig;
|
import com.ruoyi.system.api.domain.GoodsBrand;
|
import com.ruoyi.system.api.domain.GoodsCategory;
|
import com.ruoyi.system.api.domain.GoodsFlavorType;
|
import com.ruoyi.system.api.domain.GoodsSeries;
|
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.WebsocketMessageDTO;
|
import com.ruoyi.system.api.domain.dto.AuctionGoodsListDTO;
|
import com.ruoyi.system.api.domain.dto.AuctionGoodsListPageDTO;
|
import com.ruoyi.system.api.domain.dto.GoodsStockUpdDTO;
|
import com.ruoyi.system.api.domain.dto.ListStatusDTO;
|
import com.ruoyi.system.api.domain.dto.MemberAuctionSalesroomDTO;
|
import com.ruoyi.system.api.domain.dto.OrderDTO;
|
import com.ruoyi.system.api.domain.dto.RefundDTO;
|
import com.ruoyi.system.api.domain.vo.AuctionGoodsListVO;
|
import com.ruoyi.system.api.domain.vo.AuctionGoodsinfoVO;
|
import com.ruoyi.system.api.domain.vo.GoodsInfoTitleValueVO;
|
import com.ruoyi.system.api.domain.vo.getHomeGoodsSkuXxiVO;
|
import com.ruoyi.system.api.feignClient.AuctionClient;
|
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 io.seata.spring.annotation.GlobalTransactional;
|
import java.math.BigDecimal;
|
import java.math.RoundingMode;
|
import java.time.LocalDateTime;
|
import java.util.ArrayList;
|
import java.util.Collections;
|
import java.util.Comparator;
|
import java.util.HashSet;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.Objects;
|
import java.util.Set;
|
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;
|
import org.springframework.transaction.annotation.Transactional;
|
|
/**
|
* <p>
|
* 拍卖商品表 服务实现类
|
* </p>
|
*
|
* @author mitao
|
* @since 2024-05-16
|
*/
|
@Slf4j
|
@Service
|
@RequiredArgsConstructor
|
public class AuctionGoodsServiceImpl extends ServiceImpl<AuctionGoodsMapper, AuctionGoods> implements IAuctionGoodsService {
|
|
private final GoodsSkuClient goodsSkuClient;
|
private final MemberClient memberClient;
|
private final OrderClient orderClient;
|
private final SysUserClient sysUserClient;
|
|
private final AuctionClient auctionClient;
|
private final IAuctionBidRecordService auctionBidRecordService;
|
private final AuctionAsyncMethodService auctionAsyncMethodService;
|
// 创建一个静态共享的ObjectMapper实例以重用
|
private static final ObjectMapper objectMapper = new ObjectMapper();
|
@Resource
|
private IMemberAuctionCollectionService memberAuctionCollectionService;
|
|
@Resource
|
private AuctionGoodsMapper auctionGoodsMapper;
|
|
@Resource
|
private IAuctionBrowseRecordService iAuctionBrowseRecordService;
|
|
@Resource
|
private AuctionBondJlMapper auctionBondJlMapper;
|
|
/**
|
* 获取拍卖商品列表的分页数据
|
*
|
* @param query 拍卖商品查询对象
|
* @return PageDTO<AuctionGoodsVO>
|
*/
|
@Override
|
public PageDTO<MgtAuctionGoodsVO> getAuctionGoodsPage(MgtAuctionGoodsQuery query) {
|
Set<Long> goodsSkuIdList = null;
|
Page<AuctionGoods> page = new Page<>(query.getPageCurr(), query.getPageSize());
|
if (StringUtils.isNotEmpty(query.getGoodsSkuName())) {
|
List<GoodsSku> goodsSku = goodsSkuClient.getGoodsByName(query.getGoodsSkuName(),
|
SecurityConstants.INNER).getData();
|
if (StringUtils.isEmpty(goodsSku)) {
|
return PageDTO.empty(page);
|
}
|
goodsSkuIdList = goodsSku.stream().map(GoodsSku::getId)
|
.collect(Collectors.toSet());
|
|
}
|
page = this.lambdaQuery()
|
.select(AuctionGoods::getId, AuctionGoods::getGoodsSkuId,
|
AuctionGoods::getListingStatus, AuctionGoods::getStartStatus,
|
AuctionGoods::getStartTime, AuctionGoods::getEndTime,
|
AuctionGoods::getAuctionStock, AuctionGoods::getMinimumMarkupAmount,
|
AuctionGoods::getAuthentication, AuctionGoods::getStartingPrice).in(
|
StringUtils.isNotEmpty(goodsSkuIdList), AuctionGoods::getGoodsSkuId,
|
goodsSkuIdList).eq(StringUtils.isNotNull(query.getAuthentication()),
|
AuctionGoods::getAuthentication, query.getAuthentication())
|
.eq(StringUtils.isNotNull(query.getListingStatus()), AuctionGoods::getListingStatus,
|
query.getListingStatus())
|
.eq(StringUtils.isNotNull(query.getStartStatus()), AuctionGoods::getStartStatus,
|
query.getStartStatus())
|
.orderByDesc(AuctionGoods::getCreateTime)
|
.page(new Page<>(query.getPageCurr(), query.getPageSize()));
|
if (StringUtils.isEmpty(page.getRecords())) {
|
return PageDTO.empty(page);
|
}
|
// 查询商品信息
|
Set<Long> goodsIdList = page.getRecords().stream().map(AuctionGoods::getGoodsSkuId)
|
.collect(Collectors.toSet());
|
List<GoodsSku> data = goodsSkuClient.getGoodsListByIds(goodsIdList, SecurityConstants.INNER)
|
.getData();
|
PageDTO<MgtAuctionGoodsVO> pageDTO = PageDTO.of(page,
|
MgtAuctionGoodsVO.class);
|
if (StringUtils.isNotEmpty(data)) {
|
Map<Long, GoodsSku> goodsSkuMap = data.stream()
|
.collect(Collectors.toMap(GoodsSku::getId, e -> e));
|
for (MgtAuctionGoodsVO mgtAuctionGoodsVO : pageDTO.getList()) {
|
GoodsSku goodsSku = goodsSkuMap.get(mgtAuctionGoodsVO.getGoodsSkuId());
|
if (StringUtils.isNotNull(goodsSku)) {
|
mgtAuctionGoodsVO.setGoodsSkuName(goodsSku.getSkuName());
|
mgtAuctionGoodsVO.setSpec(goodsSku.getSpec());
|
}
|
}
|
}
|
return pageDTO;
|
}
|
|
@Override
|
@Transactional
|
@GlobalTransactional(rollbackFor = Exception.class)
|
public void saveAuctionGoods(MgtAuctionGoodsDTO dto) {
|
Long id = dto.getId();
|
Long goodsSkuId = dto.getGoodsSkuId();
|
AuctionGoods auctionGoods = BeanUtils.copyBean(dto, AuctionGoods.class);
|
// 添加
|
if (StringUtils.isNull(id)) {
|
if (StringUtils.isNull(goodsSkuId)) {
|
throw new ServiceException("商品id不能为空");
|
}
|
GoodsSku goodsSku = goodsSkuClient.getGoodsSkuOne(goodsSkuId, SecurityConstants.INNER)
|
.getData();
|
if (StringUtils.isNull(goodsSku)) {
|
throw new ServiceException("商品不存在");
|
}
|
if (goodsSku.getStock() < dto.getAuctionStock()) {
|
throw new ServiceException("商品库存不足");
|
}
|
this.save(auctionGoods);
|
// 扣减商品库存
|
GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO();
|
goodsStockUpdDTO.setGoodsSkuId(goodsSkuId);
|
goodsStockUpdDTO.setAuctionStock(dto.getAuctionStock() * -1);
|
goodsSkuClient.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO),
|
SecurityConstants.INNER);
|
} else {
|
// 编辑
|
AuctionGoods auctionGoodsOrg = this.getById(id);
|
if (StringUtils.isNull(auctionGoodsOrg)) {
|
throw new ServiceException("拍卖商品不存在");
|
}
|
if (auctionGoodsOrg.getStartStatus().equals(AuctionStartStatusEnum.IN_AUCTION)) {
|
throw new ServiceException("商品正在拍卖中不能编辑");
|
}
|
if (auctionGoodsOrg.getStartStatus().equals(AuctionStartStatusEnum.ENDED)) {
|
throw new ServiceException("商品拍卖已结束不能编辑");
|
}
|
GoodsSku goodsSku = goodsSkuClient.getGoodsSkuOne(goodsSkuId, SecurityConstants.INNER)
|
.getData();
|
if (StringUtils.isNull(goodsSku)) {
|
throw new ServiceException("商品不存在");
|
}
|
if (goodsSku.getStock() + auctionGoodsOrg.getAuctionStock() < dto.getAuctionStock()) {
|
throw new ServiceException("商品库存不足");
|
}
|
if (!auctionGoodsOrg.getAuctionStock().equals(dto.getAuctionStock())) {
|
// 更新商品库存
|
GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO();
|
goodsStockUpdDTO.setGoodsSkuId(goodsSkuId);
|
goodsStockUpdDTO.setAuctionStock(
|
auctionGoodsOrg.getAuctionStock() - dto.getAuctionStock());
|
goodsSkuClient.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO),
|
SecurityConstants.INNER);
|
}
|
auctionGoodsOrg.setStartingPrice(dto.getStartingPrice());
|
auctionGoodsOrg.setMinimumMarkupAmount(dto.getMinimumMarkupAmount());
|
auctionGoodsOrg.setStartTime(dto.getStartTime());
|
auctionGoodsOrg.setEndTime(dto.getEndTime());
|
auctionGoodsOrg.setAuctionStock(dto.getAuctionStock());
|
auctionGoodsOrg.setBond(dto.getBond());
|
auctionGoodsOrg.setAuthentication(dto.getAuthentication());
|
auctionGoodsOrg.setDescription(dto.getDescription());
|
auctionGoodsOrg.setShareTitle(dto.getShareTitle());
|
auctionGoodsOrg.setSharePic(dto.getSharePic());
|
this.updateById(auctionGoodsOrg);
|
}
|
if (auctionGoods.getEndTime().isBefore(LocalDateTime.now())) {
|
// 退回剩余库存
|
GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO();
|
goodsStockUpdDTO.setAuctionStock(auctionGoods.getAuctionStock());
|
goodsStockUpdDTO.setGoodsSkuId(auctionGoods.getGoodsSkuId());
|
goodsSkuClient.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO),
|
SecurityConstants.INNER);
|
auctionGoods.setStartStatus(AuctionStartStatusEnum.ENDED);
|
this.updateById(auctionGoods);
|
} else {
|
auctionAsyncMethodService.auctionGoodsScheduleTask(Lists.newArrayList(auctionGoods));
|
}
|
|
}
|
|
/**
|
* 查看拍卖商品详情
|
*
|
* @param id 拍卖商品id
|
* @return AuctionGoodsVO
|
*/
|
@Override
|
public MgtAuctionGoodsVO getAuctionGoodsById(Long id) {
|
AuctionGoods auctionGoods = this.getById(id);
|
if (StringUtils.isNull(auctionGoods)) {
|
throw new ServiceException("拍卖商品不存在");
|
}
|
MgtAuctionGoodsVO auctionGoodsVO = BeanUtils.copyBean(auctionGoods,
|
MgtAuctionGoodsVO.class);
|
// 远程调用商品服务,获取商品信息
|
GoodsSku goodsSku = goodsSkuClient.getGoodsSkuOne(auctionGoods.getGoodsSkuId(),
|
SecurityConstants.INNER).getData();
|
if (StringUtils.isNotNull(goodsSku)) {
|
auctionGoodsVO.setGoodsSkuName(goodsSku.getSkuName());
|
}
|
if (!auctionGoods.getStartStatus().equals(AuctionStartStatusEnum.IN_PREVIEW)) {
|
List<AuctionBidRecord> list = auctionBidRecordService.lambdaQuery()
|
.eq(AuctionBidRecord::getTargetId, auctionGoodsVO.getId())
|
.eq(AuctionBidRecord::getAuctionType, AuctionOrderTypeEnum.REGULAR_ITEMS)
|
.orderByDesc(AuctionBidRecord::getLastBidAmount).list();
|
if (StringUtils.isNotEmpty(list)) {
|
Set<Long> collect = list.stream().map(AuctionBidRecord::getMemberId)
|
.collect(Collectors.toSet());
|
List<Member> memberList = memberClient.
|
getMemberListByIds(collect, SecurityConstants.INNER).getData();
|
Map<Long, Member> memberMap = memberList.stream()
|
.collect(Collectors.toMap(Member::getId, e -> e));
|
List<MgtAuctionBidRecordVO> mgtAuctionBidRecordVOS = BeanUtils.copyList(list,
|
MgtAuctionBidRecordVO.class);
|
for (MgtAuctionBidRecordVO vo : mgtAuctionBidRecordVOS) {
|
Member member = memberMap.get(vo.getMemberId());
|
if (StringUtils.isNotNull(member)) {
|
vo.setMemberName(member.getNickname());
|
vo.setPhone(member.getPhone());
|
}
|
|
}
|
auctionGoodsVO.setRecordList(mgtAuctionBidRecordVOS);
|
}
|
}
|
return auctionGoodsVO;
|
}
|
|
/**
|
* 立即结束
|
*
|
* @param id 拍卖商品id
|
*/
|
@Override
|
@GlobalTransactional(rollbackFor = Exception.class)
|
@Transactional
|
public void stopAuctionGoods(Long id) {
|
AuctionGoods auctionGoods = this.lambdaQuery().eq(AuctionGoods::getId, id)
|
.eq(AuctionGoods::getStartStatus, AuctionStartStatusEnum.IN_AUCTION).one();
|
if (StringUtils.isNull(auctionGoods)) {
|
throw new ServiceException("拍卖商品不存在");
|
}
|
// 远程调用商品服务,获取商品信息
|
GoodsSku goodsSku = goodsSkuClient.getGoodsSkuOne(auctionGoods.getGoodsSkuId(),
|
SecurityConstants.INNER)
|
.getData();
|
if (auctionGoods.getStartStatus().equals(AuctionStartStatusEnum.IN_AUCTION)) {
|
// 查询出价记录
|
List<AuctionBidRecord> auctionBidRecords = auctionBidRecordService.getBidRecordByGoodsId(
|
id);
|
List<AuctionBidRecord> auctionBidRecordList = new ArrayList<>();
|
if (StringUtils.isNotEmpty(auctionBidRecords)) {
|
if (auctionBidRecords.size() >= auctionGoods.getAuctionStock()) {
|
// 中标
|
for (int i = 0; i < auctionGoods.getAuctionStock(); i++) {
|
AuctionBidRecord auctionBidRecord = auctionBidRecords.get(i);
|
auctionBidRecord.setStatus(BidStatusEnum.SUCCESSFUL);
|
auctionBidRecordList.add(auctionBidRecord);
|
}
|
} else {
|
// 中标
|
for (int i = 0; i < auctionBidRecords.size(); i++) {
|
AuctionBidRecord auctionBidRecord = auctionBidRecords.get(i);
|
auctionBidRecord.setStatus(BidStatusEnum.SUCCESSFUL);
|
auctionBidRecordList.add(auctionBidRecord);
|
}
|
// 退回剩余库存
|
GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO();
|
goodsStockUpdDTO.setGoodsSkuId(auctionGoods.getGoodsSkuId());
|
goodsStockUpdDTO.setAuctionStock(
|
auctionGoods.getAuctionStock() - auctionBidRecords.size());
|
goodsSkuClient.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO),
|
SecurityConstants.INNER);
|
}
|
|
auctionBidRecordService.updateBatchById(auctionBidRecordList);
|
|
// 创建待支付订单
|
CustomConfig moneyConfig = sysUserClient.getconfig(
|
ConfigEnum.MEMBER_POINTS_MONEY.getKey()).getData();
|
CustomConfig pointsConfig = sysUserClient.getconfig(
|
ConfigEnum.MEMBER_POINTS_POINTS.getKey()).getData();
|
for (AuctionBidRecord auctionBidRecord : auctionBidRecordList) {
|
BigDecimal lastBidAmount = auctionBidRecord.getLastBidAmount();
|
BigDecimal divide = lastBidAmount.divide(
|
new BigDecimal(moneyConfig.getConfigValue()), 0, RoundingMode.DOWN);
|
int points = divide.multiply(
|
new BigDecimal(pointsConfig.getConfigValue())).intValue();
|
OrderDTO orderDTO = new OrderDTO();
|
orderDTO.setAuctionType(AuctionOrderTypeEnum.REGULAR_ITEMS);
|
orderDTO.setGoodsQuantity(auctionGoods.getAuctionStock());
|
orderDTO.setGoodsSkuId(auctionGoods.getId());
|
orderDTO.setBound(auctionGoods.getBond());
|
orderDTO.setMemberId(auctionBidRecord.getMemberId());
|
orderDTO.setTotalAmount(auctionBidRecord.getLastBidAmount());
|
orderDTO.setOrderFrom(OrderFromEnum.AUCTION_ORDERS);
|
orderDTO.setOrderTime(LocalDateTime.now());
|
orderDTO.setPoints(points);
|
orderDTO.setBound(auctionGoods.getBond());
|
MemberAddress data = memberClient.getMemberAddressOne(
|
auctionBidRecord.getMemberId(), SecurityConstants.INNER).getData();
|
if (StringUtils.isNotNull(data)) {
|
orderDTO.setReceiverName(data.getRecipientName());
|
orderDTO.setReceiverCity(data.getReceiverCity());
|
orderDTO.setReceiverDetailAddress(data.getDetailedAddress());
|
orderDTO.setReceiverphone(data.getRecipientPhone());
|
}
|
if (StringUtils.isNotNull(goodsSku)) {
|
orderDTO.setCoverPic(goodsSku.getCoverPic());
|
orderDTO.setPrice(goodsSku.getPrice());
|
orderDTO.setSkuName(goodsSku.getSkuName());
|
}
|
orderDTO.setOrderTimeSx(auctionGoods.getEndTime());
|
orderClient.saveOrderOne(orderDTO, SecurityConstants.INNER);
|
}
|
} else {
|
// 没有人出价,退回拍卖商品库存
|
GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO();
|
goodsStockUpdDTO.setGoodsSkuId(auctionGoods.getGoodsSkuId());
|
goodsStockUpdDTO.setAuctionStock(auctionGoods.getAuctionStock());
|
goodsSkuClient.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO),
|
SecurityConstants.INNER);
|
}
|
// 结束拍卖
|
this.lambdaUpdate().set(AuctionGoods::getStartStatus, AuctionStartStatusEnum.ENDED)
|
.eq(AuctionGoods::getId, id).update();
|
// 查询已支付保证金记录
|
List<OrderAuctionBond> auctionBondList = orderClient.getOrderAuctionBondList(id,
|
AuctionOrderTypeEnum.REGULAR_ITEMS,
|
BondStatusEnum.PAID,
|
SecurityConstants.INNER).getData();
|
if (StringUtils.isNotEmpty(auctionBondList)) {
|
List<RefundDTO> refundDTOList = new ArrayList<>();
|
List<Long> unRefundMemberIdList = auctionBidRecordList.stream()
|
.map(AuctionBidRecord::getMemberId).collect(
|
Collectors.toList());
|
for (OrderAuctionBond orderAuctionBond : auctionBondList) {
|
|
// 已中标需在订单完成后退保证金
|
if (unRefundMemberIdList.contains(orderAuctionBond.getMemberId())
|
|| Objects.isNull(orderAuctionBond.getBond())) {
|
continue;
|
}
|
RefundDTO refundDTO = new RefundDTO();
|
refundDTO.setOrderNo(orderAuctionBond.getOrderNo());
|
refundDTO.setAmount(orderAuctionBond.getBond());
|
refundDTOList.add(refundDTO);
|
}
|
// 远程调用订单服务进行退款
|
Map<String, Object> data = orderClient.refund(refundDTOList,
|
SecurityConstants.INNER).getData();
|
if (CollUtils.isNotEmpty(data)) {
|
// 处理退款返回结果
|
List<String> successfulOrders = new ArrayList<>();
|
List<String> failedOrders = new ArrayList<>();
|
data.forEach((key, value) -> {
|
if ((boolean) value) {
|
successfulOrders.add(key);
|
} else {
|
failedOrders.add(key);
|
}
|
});
|
log.info("订单号:{},退款失败", failedOrders);
|
// 退款成功的订单修改状态
|
List<Long> ids = auctionBondList.stream().map(bond -> {
|
if (successfulOrders.contains(bond.getOrderNo())) {
|
return bond.getId();
|
}
|
return null;
|
}).filter(Objects::nonNull).collect(Collectors.toList());
|
|
// 远程调用订单服务修改订单状态
|
orderClient.updateOrderAuctionBondStatus(ids, BondStatusEnum.REFUNDED,
|
SecurityConstants.INNER);
|
}
|
}
|
}
|
}
|
|
@Override
|
public PageDTO<AuctionGoodsListVO> getAuctionGoodsList(AuctionGoodsListDTO auctionGoodsListDTO) {
|
Set<Long> goodsSkuIdList = null;
|
if (StringUtils.isNotEmpty(auctionGoodsListDTO.getGoodsSkuName())) {
|
List<GoodsSku> goodsSku = goodsSkuClient.getGoodsByName(auctionGoodsListDTO.getGoodsSkuName(),
|
SecurityConstants.INNER)
|
.getData();
|
if (CollUtils.isEmpty(goodsSku)) {
|
return PageDTO.empty(0L, 1L);
|
}
|
if (goodsSku!=null){
|
goodsSkuIdList = goodsSku.stream().map(GoodsSku::getId)
|
.collect(Collectors.toSet());
|
}
|
|
}
|
|
AuctionGoodsListPageDTO auctionGoodsListPageDTO=new AuctionGoodsListPageDTO();
|
if (StringUtils.isNotEmpty(auctionGoodsListDTO.getGoodsSkuName())) {
|
if (goodsSkuIdList != null) {
|
auctionGoodsListPageDTO.setGoodsSkuIdList(goodsSkuIdList);
|
} else {
|
goodsSkuIdList = new HashSet<>();
|
goodsSkuIdList.add(0L);
|
auctionGoodsListPageDTO.setGoodsSkuIdList(goodsSkuIdList);
|
}
|
}
|
|
Page<AuctionGoodsListVO> page = new Page<>();
|
page.setSize(auctionGoodsListDTO.getPageSize());
|
page.setCurrent(auctionGoodsListDTO.getPageCurr());
|
List<AuctionGoods> auctionGoodsPgeList = auctionGoodsMapper.getAuctionGoodsPgeList(page, auctionGoodsListPageDTO);
|
List<AuctionGoodsListVO> auctionGoodsVOS=new ArrayList<>();
|
for (AuctionGoods auctionGoods:auctionGoodsPgeList){
|
AuctionGoodsListVO auctionGoodsVO=new AuctionGoodsListVO();
|
auctionGoodsVO.setAuctionStock(auctionGoods.getAuctionStock());
|
auctionGoodsVO.setGoodsSkuId(auctionGoods.getId());
|
auctionGoodsVO.setEndTime(auctionGoods.getEndTime());
|
auctionGoodsVO.setStartTime(auctionGoods.getStartTime());
|
auctionGoodsVO.setStartingPrice(auctionGoods.getStartingPrice());
|
auctionGoodsVO.setStartStatus(auctionGoods.getStartStatus());
|
auctionGoodsVO.setAuctionStock(auctionGoods.getAuctionStock());
|
GoodsSku goodsSkuOne = goodsSkuClient.getGoodsSkuOne(auctionGoods.getGoodsSkuId(), SecurityConstants.INNER).getData();
|
auctionGoodsVO.setUnit(goodsSkuOne.getUnit());
|
auctionGoodsVO.setSpec(goodsSkuOne.getSpec());
|
auctionGoodsVO.setSpecUnit(goodsSkuOne.getSpecUnit());
|
auctionGoodsVO.setGoodsSkuName(goodsSkuOne.getSkuName());
|
auctionGoodsVO.setCoverPic(goodsSkuOne.getCoverPic());
|
auctionGoodsVO.setYears(String.valueOf(goodsSkuOne.getYears()));
|
auctionGoodsVOS.add(auctionGoodsVO);
|
|
}
|
page.setRecords(auctionGoodsVOS);
|
return PageDTO.of(page);
|
}
|
|
@Override
|
public AuctionGoodsinfoVO getAuctionGoodsInfo(AuctionGoodsListDTO auctionGoodsListDTO) {
|
AuctionGoods byId = auctionGoodsMapper.selectById(auctionGoodsListDTO.getGoodsSkuId());
|
GoodsSku goodsSkuOne = goodsSkuClient.getGoodsSkuOne(byId.getGoodsSkuId(), SecurityConstants.INNER).getData();
|
AuctionGoodsinfoVO auctionGoodsinfoVO=new AuctionGoodsinfoVO();
|
auctionGoodsinfoVO.setGoodsSkuId(byId.getGoodsSkuId());
|
auctionGoodsinfoVO.setGoodsSkuName(goodsSkuOne.getSkuName());
|
auctionGoodsinfoVO.setStartingPrice(byId.getStartingPrice());
|
auctionGoodsinfoVO.setSalesroomStock(byId.getAuctionStock());
|
auctionGoodsinfoVO.setStartStatus(byId.getStartStatus());
|
auctionGoodsinfoVO.setStartTime(byId.getStartTime());
|
auctionGoodsinfoVO.setEndTime(byId.getEndTime());
|
auctionGoodsinfoVO.setUnit(goodsSkuOne.getUnit());
|
auctionGoodsinfoVO.setBond(byId.getBond());
|
auctionGoodsinfoVO.setDescription(goodsSkuOne.getDescription());
|
auctionGoodsinfoVO.setExplain(byId.getDescription());
|
auctionGoodsinfoVO.setYears(goodsSkuOne.getYears());
|
GoodsBrand data = goodsSkuClient.getBrandOne(goodsSkuOne.getBrandId(), SecurityConstants.INNER).getData();
|
GoodsCategory data1 = goodsSkuClient.getCategoryOne(goodsSkuOne.getCategoryId(), SecurityConstants.INNER).getData();
|
GoodsSeries data2 = goodsSkuClient.getSeriesOne(goodsSkuOne.getSeriesId(), SecurityConstants.INNER).getData();
|
GoodsFlavorType data3 = goodsSkuClient.getFlavorTypeOne(goodsSkuOne.getFlavorTypeId(), SecurityConstants.INNER).getData();
|
if (data!=null){
|
auctionGoodsinfoVO.setBrand(data.getBrandName());
|
}
|
if (data1!=null){
|
auctionGoodsinfoVO.setCategory(data1.getCategoryName());
|
}
|
if (data2!=null){
|
auctionGoodsinfoVO.setSeries(data2.getSeriesName());
|
}
|
if (data3!=null) {
|
auctionGoodsinfoVO.setFlavorType(data3.getFlavorTypeName());
|
}
|
auctionGoodsinfoVO.setCoverPic(goodsSkuOne.getCoverPic());
|
auctionGoodsinfoVO.setAlbum(goodsSkuOne.getAlbum());
|
auctionGoodsinfoVO.setAuthentication(byId.getAuthentication().getCode());
|
auctionGoodsinfoVO.setMinimumMarkupAmount(byId.getMinimumMarkupAmount());
|
auctionGoodsinfoVO.setSpec(goodsSkuOne.getSpec());
|
auctionGoodsinfoVO.setSpecUnit(goodsSkuOne.getSpecUnit());
|
auctionGoodsinfoVO.setShareTitle(goodsSkuOne.getShareTitle());
|
auctionGoodsinfoVO.setDetail(goodsSkuOne.getDetail());
|
auctionGoodsinfoVO.setBond(byId.getBond());
|
auctionGoodsinfoVO.setYears(goodsSkuOne.getYears());
|
auctionGoodsinfoVO.setSharePic(byId.getSharePic());
|
auctionGoodsinfoVO.setShareTitle(byId.getShareTitle());
|
LambdaQueryWrapper<AuctionBidRecord> wrapper1= Wrappers.lambdaQuery();
|
wrapper1.eq(AuctionBidRecord::getAuctionType,1);
|
wrapper1.eq(AuctionBidRecord::getTargetId,byId.getId());
|
wrapper1.eq(AuctionBidRecord::getMemberId,auctionGoodsListDTO.getMemberId());
|
wrapper1.eq(AuctionBidRecord::getDelFlag,0);
|
AuctionBidRecord list1 = auctionBidRecordService.getOne(wrapper1);
|
if (list1!=null){
|
auctionGoodsinfoVO.setIsBond(2);
|
auctionGoodsinfoVO.setPresentBid(list1.getLastBidAmount());
|
if (list1.getStatus().getCode()==2){
|
auctionGoodsinfoVO.setIsStatus(2);
|
|
OrderDTO orderDTO =new OrderDTO();
|
orderDTO.setMemberId(auctionGoodsListDTO.getMemberId());
|
orderDTO.setGoodsSkuId(byId.getId());
|
Order data4 = orderClient.getOrderOne1(orderDTO, SecurityConstants.INNER).getData();
|
if (data4!=null){
|
auctionGoodsinfoVO.setOrderId(data4.getId());
|
auctionGoodsinfoVO.setOrderNo(data4.getOrderNo());
|
}
|
}else{
|
auctionGoodsinfoVO.setIsStatus(1);
|
}
|
}else{
|
auctionGoodsinfoVO.setIsBond(1);
|
auctionGoodsinfoVO.setIsStatus(1);
|
}
|
LambdaQueryWrapper<MemberAuctionCollection> wrapper2= Wrappers.lambdaQuery();
|
wrapper2.eq(MemberAuctionCollection::getMemberId,auctionGoodsListDTO.getMemberId());
|
wrapper2.eq(MemberAuctionCollection::getTargetId,byId.getId());
|
wrapper2.eq(MemberAuctionCollection::getDelFlag,0);
|
MemberAuctionCollection one = memberAuctionCollectionService.getOne(wrapper2);
|
if (one!=null){
|
auctionGoodsinfoVO.setIsCollection(2);
|
}else {
|
auctionGoodsinfoVO.setIsCollection(1);
|
}
|
LambdaQueryWrapper<AuctionBondJl> wrapper8=Wrappers.lambdaQuery();
|
wrapper8.eq(AuctionBondJl::getAuctionGoodsId,byId.getId());
|
wrapper8.eq(AuctionBondJl::getMemberId,auctionGoodsListDTO.getMemberId());
|
wrapper8.eq(AuctionBondJl::getIsState,0);
|
AuctionBondJl auctionBondJl = auctionBondJlMapper.selectOne(wrapper8);
|
if(auctionBondJl!=null){
|
auctionGoodsinfoVO.setIsApply(2);
|
}else{
|
auctionGoodsinfoVO.setIsApply(1);
|
}
|
|
|
|
LocalDateTime now = LocalDateTime.now();
|
LocalDateTime newTime7 = now.minusDays(7);
|
|
LambdaQueryWrapper<AuctionBrowseRecord> wrapper3=Wrappers.lambdaQuery();
|
wrapper3.eq(AuctionBrowseRecord::getDelFlag,0);
|
wrapper3.eq(AuctionBrowseRecord::getTargetId,auctionGoodsListDTO.getGoodsSkuId());
|
wrapper3.eq(AuctionBrowseRecord::getBrowseType,AuctionOrderTypeEnum.REGULAR_ITEMS);
|
wrapper3.eq(AuctionBrowseRecord::getMemberId,auctionGoodsListDTO.getMemberId());
|
wrapper3.ge(AuctionBrowseRecord::getCreateTime, newTime7)
|
.le(AuctionBrowseRecord::getCreateTime, now);
|
List<AuctionBrowseRecord> list = iAuctionBrowseRecordService.list(wrapper3);
|
if (list.size()==0){
|
AuctionBrowseRecord auctionBrowseRecord=new AuctionBrowseRecord();
|
auctionBrowseRecord.setBrowseType(AuctionOrderTypeEnum.REGULAR_ITEMS);
|
auctionBrowseRecord.setMemberId(auctionGoodsListDTO.getMemberId());
|
auctionBrowseRecord.setSkuName(goodsSkuOne.getSkuName());
|
auctionBrowseRecord.setTargetId(auctionGoodsListDTO.getGoodsSkuId());
|
iAuctionBrowseRecordService.save(auctionBrowseRecord);
|
}
|
|
LambdaQueryWrapper<AuctionBidRecord> wrapper5= Wrappers.lambdaQuery();
|
wrapper5.eq(AuctionBidRecord::getAuctionType,1);
|
wrapper5.eq(AuctionBidRecord::getTargetId,byId.getId());
|
wrapper5.eq(AuctionBidRecord::getDelFlag,0);
|
wrapper5.orderByDesc(AuctionBidRecord::getLastBidAmount);
|
List<AuctionBidRecord> list2 = auctionBidRecordService.list(wrapper5);
|
if (list2.size()>0){
|
auctionGoodsinfoVO.setZgBid(list2.get(0).getLastBidAmount());
|
}
|
|
|
/*CustomConfig returnAddressUserName = sysUserClient.getconfig("MALL_ORDER_DESCRIPTION").getData();
|
auctionGoodsinfoVO.setExplain(returnAddressUserName.getConfigValue());*/
|
|
|
List<getHomeGoodsSkuXxiVO> homeGoodsSkuXxiVOS=new ArrayList<>();
|
List<GoodsInfoTitleValueVO> goodsInfoTitleValueVOList = goodsSkuClient.getlistByGoodsId(goodsSkuOne.getId(), SecurityConstants.INNER).getData();
|
Collections.sort(goodsInfoTitleValueVOList, Comparator.comparingInt(GoodsInfoTitleValueVO::getSortNum));
|
for (GoodsInfoTitleValueVO goodsInfoTitleValueVO:goodsInfoTitleValueVOList){
|
getHomeGoodsSkuXxiVO getHomeGoodsSkuXxiVOs=new getHomeGoodsSkuXxiVO();
|
getHomeGoodsSkuXxiVOs.setContent(goodsInfoTitleValueVO.getContent());
|
getHomeGoodsSkuXxiVOs.setTitleName(goodsInfoTitleValueVO.getTitleName());
|
homeGoodsSkuXxiVOS.add(getHomeGoodsSkuXxiVOs);
|
}
|
auctionGoodsinfoVO.setXxiVOS(homeGoodsSkuXxiVOS);
|
|
return auctionGoodsinfoVO;
|
}
|
|
@Override
|
public PageDTO<AuctionGoodsListVO> getWdAuctionSalesList(AuctionGoodsListDTO auctionGoodsListDTO) {
|
|
MemberAuctionSalesroomDTO memberAuctionSalesroomDTO =new MemberAuctionSalesroomDTO();
|
memberAuctionSalesroomDTO.setMemberId(auctionGoodsListDTO.getMemberId());
|
List<OrderAuctionBond> data = orderClient.getAuctionGoodsOrderAuctionBondList(auctionGoodsListDTO, SecurityConstants.INNER).getData();
|
List<Long> goodsSkuIdList = null;
|
if (data.size()>0){
|
goodsSkuIdList = data.stream().map(OrderAuctionBond::getAuctionGoodsId)
|
.collect(Collectors.toList());
|
}else {
|
List<Long> goodsSkuIdList1 =new ArrayList<>();
|
goodsSkuIdList1.add(0L);
|
goodsSkuIdList=goodsSkuIdList1;
|
}
|
|
|
List<Long> goodsSkuIdList1 =null;
|
if (StringUtils.isNotEmpty(auctionGoodsListDTO.getGoodsSkuName())) {
|
List<GoodsSku> goodsSku = goodsSkuClient.getGoodsByName(auctionGoodsListDTO.getGoodsSkuName(),
|
SecurityConstants.INNER)
|
.getData();
|
goodsSkuIdList1= goodsSku.stream().map(GoodsSku::getId)
|
.collect(Collectors.toList());
|
}
|
|
|
|
Page<AuctionGoods> page = new Page<>(auctionGoodsListDTO.getPageCurr(),
|
auctionGoodsListDTO.getPageSize());
|
LambdaQueryWrapper<AuctionGoods> wrapper1=Wrappers.lambdaQuery();
|
if (goodsSkuIdList.size()>0){
|
wrapper1.in(AuctionGoods::getId,goodsSkuIdList);
|
}
|
if (StringUtils.isNotEmpty(auctionGoodsListDTO.getGoodsSkuName())) {
|
if (goodsSkuIdList1.size()>0){
|
wrapper1.in(AuctionGoods::getGoodsSkuId,goodsSkuIdList1);
|
}else{
|
goodsSkuIdList1=new ArrayList<>();
|
goodsSkuIdList1.add(0L);
|
wrapper1.in(AuctionGoods::getGoodsSkuId,goodsSkuIdList1);
|
}
|
}
|
if (auctionGoodsListDTO.getStartStatus() != 4) {
|
wrapper1.eq(AuctionGoods::getStartStatus,auctionGoodsListDTO.getStartStatus());
|
}
|
wrapper1.last(auctionGoodsListDTO.getStartStatus() == 4, "ORDER BY\n"
|
+ " FIELD(start_status, 1, 0, 2),\n"
|
+ " start_time DESC");
|
wrapper1.last(auctionGoodsListDTO.getStartStatus() != 4, "ORDER BY start_time DESC");
|
Page<AuctionGoods> auctionSalesroomList=this.page(page,wrapper1);
|
PageDTO<AuctionGoodsListVO> wdMemberAuctionSalesroomVOPageDTO = PageDTO.of(auctionSalesroomList, AuctionGoodsListVO.class);
|
List<AuctionGoodsListVO> list = wdMemberAuctionSalesroomVOPageDTO.getList();
|
for (AuctionGoodsListVO auctionGoodsVO:list){
|
|
GoodsSku goodsSkuOne = goodsSkuClient.getGoodsSkuOne(auctionGoodsVO.getGoodsSkuId(), SecurityConstants.INNER).getData();
|
auctionGoodsVO.setUnit(goodsSkuOne.getUnit());
|
auctionGoodsVO.setSpec(goodsSkuOne.getSpec());
|
auctionGoodsVO.setSpecUnit(goodsSkuOne.getSpecUnit());
|
auctionGoodsVO.setGoodsSkuName(goodsSkuOne.getSkuName());
|
auctionGoodsVO.setCoverPic(goodsSkuOne.getCoverPic());
|
|
LambdaQueryWrapper<AuctionBidRecord> wrapper2= Wrappers.lambdaQuery();
|
wrapper2.eq(AuctionBidRecord::getMemberId,auctionGoodsListDTO.getMemberId());
|
wrapper2.eq(AuctionBidRecord::getAuctionType,1);
|
wrapper2.eq(AuctionBidRecord::getTargetId,auctionGoodsVO.getId());
|
wrapper2.eq(AuctionBidRecord::getDelFlag,0);
|
AuctionBidRecord list1 = auctionBidRecordService.getOne(wrapper2);
|
if (list1!=null){
|
if (list1.getStatus().getCode()==2){
|
auctionGoodsVO.setIsStatus(2);
|
}else{
|
auctionGoodsVO.setIsStatus(1);
|
}
|
}else{
|
auctionGoodsVO.setIsStatus(1);
|
}
|
auctionGoodsVO.setGoodsSkuId(auctionGoodsVO.getId());
|
|
}
|
return wdMemberAuctionSalesroomVOPageDTO;
|
}
|
|
@Override
|
@GlobalTransactional(rollbackFor = Exception.class)
|
@Transactional
|
public void endAuctionGoods(Long id) throws JsonProcessingException {
|
AuctionGoods auctionGoods = this.getById(id);
|
if (StringUtils.isNotNull(auctionGoods) && auctionGoods.getStartStatus()
|
.equals(AuctionStartStatusEnum.IN_AUCTION)) {
|
// 远程调用商品服务,获取商品信息
|
GoodsSku goodsSku = goodsSkuClient.getGoodsSkuOne(auctionGoods.getGoodsSkuId(),
|
SecurityConstants.INNER)
|
.getData();
|
if (auctionGoods.getStartStatus().equals(AuctionStartStatusEnum.IN_AUCTION)) {
|
// 查询出价记录
|
List<AuctionBidRecord> auctionBidRecords = auctionBidRecordService.getBidRecordByGoodsId(
|
id);
|
List<AuctionBidRecord> auctionBidRecordList = new ArrayList<>();
|
if (StringUtils.isNotEmpty(auctionBidRecords)) {
|
if (auctionBidRecords.size() >= auctionGoods.getAuctionStock()) {
|
// 中标
|
for (int i = 0; i < auctionGoods.getAuctionStock(); i++) {
|
AuctionBidRecord auctionBidRecord = auctionBidRecords.get(i);
|
auctionBidRecord.setStatus(BidStatusEnum.SUCCESSFUL);
|
auctionBidRecordList.add(auctionBidRecord);
|
}
|
} else {
|
// 中标
|
for (int i = 0; i < auctionBidRecords.size(); i++) {
|
AuctionBidRecord auctionBidRecord = auctionBidRecords.get(i);
|
auctionBidRecord.setStatus(BidStatusEnum.SUCCESSFUL);
|
auctionBidRecordList.add(auctionBidRecord);
|
}
|
// 退回剩余库存
|
GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO();
|
goodsStockUpdDTO.setGoodsSkuId(auctionGoods.getGoodsSkuId());
|
goodsStockUpdDTO.setAuctionStock(
|
auctionGoods.getAuctionStock() - auctionBidRecords.size());
|
goodsSkuClient.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO),
|
SecurityConstants.INNER);
|
}
|
|
auctionBidRecordService.updateBatchById(auctionBidRecordList);
|
|
// 创建待支付订单
|
CustomConfig moneyConfig = sysUserClient.getconfig(
|
ConfigEnum.MEMBER_POINTS_MONEY.getKey()).getData();
|
CustomConfig pointsConfig = sysUserClient.getconfig(
|
ConfigEnum.MEMBER_POINTS_POINTS.getKey()).getData();
|
for (AuctionBidRecord auctionBidRecord : auctionBidRecordList) {
|
BigDecimal lastBidAmount = auctionBidRecord.getLastBidAmount();
|
BigDecimal divide = lastBidAmount.divide(
|
new BigDecimal(moneyConfig.getConfigValue()), 0, RoundingMode.DOWN);
|
int points = divide.multiply(
|
new BigDecimal(pointsConfig.getConfigValue())).intValue();
|
OrderDTO orderDTO = new OrderDTO();
|
orderDTO.setAuctionType(AuctionOrderTypeEnum.REGULAR_ITEMS);
|
orderDTO.setGoodsQuantity(auctionGoods.getAuctionStock());
|
orderDTO.setGoodsSkuId(auctionGoods.getId());
|
orderDTO.setBound(auctionGoods.getBond());
|
orderDTO.setMemberId(auctionBidRecord.getMemberId());
|
orderDTO.setTotalAmount(lastBidAmount);
|
orderDTO.setOrderFrom(OrderFromEnum.AUCTION_ORDERS);
|
orderDTO.setOrderTime(LocalDateTime.now());
|
orderDTO.setPoints(points);
|
orderDTO.setBound(auctionGoods.getBond());
|
MemberAddress data = memberClient.getMemberAddressOne(
|
auctionBidRecord.getMemberId(), SecurityConstants.INNER).getData();
|
if (StringUtils.isNotNull(data)) {
|
orderDTO.setReceiverName(data.getRecipientName());
|
orderDTO.setReceiverCity(data.getReceiverCity());
|
orderDTO.setReceiverDetailAddress(data.getDetailedAddress());
|
orderDTO.setReceiverphone(data.getRecipientPhone());
|
}
|
if (StringUtils.isNotNull(goodsSku)) {
|
orderDTO.setCoverPic(goodsSku.getCoverPic());
|
orderDTO.setPrice(goodsSku.getPrice());
|
orderDTO.setSkuName(goodsSku.getSkuName());
|
}
|
orderDTO.setOrderTimeSx(auctionGoods.getEndTime());
|
orderClient.saveOrderOne(orderDTO, SecurityConstants.INNER);
|
}
|
} else {
|
// 没有人出价,退回拍卖商品库存
|
GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO();
|
goodsStockUpdDTO.setGoodsSkuId(auctionGoods.getGoodsSkuId());
|
goodsStockUpdDTO.setAuctionStock(auctionGoods.getAuctionStock());
|
goodsSkuClient.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO),
|
SecurityConstants.INNER);
|
}
|
// 结束拍卖
|
this.lambdaUpdate().set(AuctionGoods::getStartStatus, AuctionStartStatusEnum.ENDED)
|
.eq(AuctionGoods::getId, id).update();
|
// 查询已支付保证金记录
|
List<OrderAuctionBond> auctionBondList = orderClient.getOrderAuctionBondList(id,
|
AuctionOrderTypeEnum.REGULAR_ITEMS,
|
BondStatusEnum.PAID,
|
SecurityConstants.INNER).getData();
|
if (StringUtils.isNotEmpty(auctionBondList)) {
|
List<RefundDTO> refundDTOList = new ArrayList<>();
|
List<Long> unRefundMemberIdList = auctionBidRecordList.stream()
|
.map(AuctionBidRecord::getMemberId).collect(
|
Collectors.toList());
|
for (OrderAuctionBond orderAuctionBond : auctionBondList) {
|
|
// 已中标需在订单完成后退保证金
|
if (unRefundMemberIdList.contains(orderAuctionBond.getMemberId())) {
|
continue;
|
}
|
RefundDTO refundDTO = new RefundDTO();
|
refundDTO.setOrderNo(orderAuctionBond.getOrderNo());
|
refundDTO.setAmount(orderAuctionBond.getBond());
|
refundDTOList.add(refundDTO);
|
}
|
// 远程调用订单服务进行退款
|
Map<String, Object> data = orderClient.refund(refundDTOList,
|
SecurityConstants.INNER).getData();
|
// 处理退款返回结果
|
List<String> successfulOrders = new ArrayList<>();
|
List<String> failedOrders = new ArrayList<>();
|
|
data.forEach((key, value) -> {
|
if ((boolean) value) {
|
successfulOrders.add(key);
|
} else {
|
failedOrders.add(key);
|
}
|
});
|
log.info("订单号:{},退款失败", failedOrders);
|
// 退款成功的订单修改状态
|
List<Long> ids = auctionBondList.stream().map(bond -> {
|
if (successfulOrders.contains(bond.getOrderNo())) {
|
return bond.getId();
|
}
|
return null;
|
}).filter(Objects::nonNull).collect(Collectors.toList());
|
// 远程调用订单服务修改订单状态
|
orderClient.updateOrderAuctionBondStatus(ids, BondStatusEnum.REFUNDED,
|
SecurityConstants.INNER);
|
}
|
}
|
Map<String, Object> map = new ConcurrentHashMap<>();
|
map.put("notification_type", NotificationTypeConstant.AUCTION_GOODS);
|
map.put("notification_time", DateUtils.dateTimeNow("yyyy-MM-dd HH:mm:ss"));
|
map.put("target_id", id);
|
map.put("message_type", "end");
|
String msg = objectMapper.writeValueAsString(map);
|
sysUserClient.pushByClientType(WebsocketMessageDTO.builder().message(msg)
|
.clientType(ClientTypeEnum.MEMBER).build(), SecurityConstants.INNER);
|
log.info("===================>发送websocket通知,消息体{}", msg);
|
}
|
}
|
|
@Override
|
public void startAuctionGoods(Long id) throws JsonProcessingException {
|
AuctionGoods auctionGoods = this.getById(id);
|
if (StringUtils.isNotNull(auctionGoods) && auctionGoods.getListingStatus().equals(
|
ListingStatusEnum.ON_SHELVES) && auctionGoods.getStartStatus()
|
.equals(AuctionStartStatusEnum.IN_PREVIEW)) {
|
auctionGoods.setStartStatus(AuctionStartStatusEnum.IN_AUCTION);
|
this.updateById(auctionGoods);
|
Map<String, Object> map = new ConcurrentHashMap<>();
|
map.put("notification_type", NotificationTypeConstant.AUCTION_GOODS);
|
map.put("notification_time", DateUtils.dateTimeNow("yyyy-MM-dd HH:mm:ss"));
|
map.put("target_id", id);
|
map.put("message_type", "start");
|
String msg = objectMapper.writeValueAsString(map);
|
sysUserClient.pushByClientType(WebsocketMessageDTO.builder().message(msg)
|
.clientType(ClientTypeEnum.MEMBER).build(), SecurityConstants.INNER);
|
log.info("===================>发送websocket通知,消息体{}", msg);
|
}
|
}
|
|
/**
|
* 下架/上架 拍卖商品
|
*
|
* @param dto 商品上下架状态对象
|
*/
|
@Override
|
public void updStatus(ListStatusDTO dto) {
|
AuctionGoods auctionGoods = this.getById(dto.getId());
|
if (StringUtils.isNull(auctionGoods)) {
|
throw new ServiceException("拍卖商品不存在");
|
}
|
auctionGoods.setListingStatus(dto.getListingStatus());
|
this.updateById(auctionGoods);
|
}
|
|
/**
|
* 根据商品id获取正在进行的拍卖商品
|
*
|
* @param id 商品id
|
* @return
|
*/
|
@Override
|
public List<AuctionGoods> getAuctionGoodsBySkuId(Long id) {
|
return this.list(new LambdaQueryWrapper<AuctionGoods>().eq(AuctionGoods::getGoodsSkuId,
|
id).eq(AuctionGoods::getListingStatus, ListingStatusEnum.ON_SHELVES)
|
.eq(AuctionGoods::getStartStatus, AuctionStartStatusEnum.IN_AUCTION));
|
}
|
|
public static void main(String[] args) throws JsonProcessingException {
|
Map<String, Object> map = new ConcurrentHashMap<>();
|
map.put("notification_type", NotificationTypeConstant.AUCTION_GOODS);
|
map.put("notification_time", DateUtils.dateTimeNow("yyyy-MM-dd HH:mm:ss"));
|
map.put("target_id", 1);
|
map.put("message_type", "end");
|
String msg = objectMapper.writeValueAsString(map);
|
System.out.println(msg);
|
}
|
|
}
|