| | |
| | | package com.ruoyi.auction.service.impl; |
| | | |
| | | import com.alibaba.fastjson2.JSONObject; |
| | | 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.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.dto.SmsSendDTO; |
| | | 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.AuthClient; |
| | | import com.ruoyi.system.api.feignClient.GoodsSkuClient; |
| | | import com.ruoyi.system.api.feignClient.MemberClient; |
| | | import com.ruoyi.system.api.feignClient.OrderClient; |
| | |
| | | import java.util.ArrayList; |
| | | import java.util.Collections; |
| | | import java.util.Comparator; |
| | | import java.util.HashMap; |
| | | import java.util.HashSet; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | |
| | | |
| | | @Resource |
| | | private AuctionBondJlMapper auctionBondJlMapper; |
| | | @Resource |
| | | private AuthClient authClient; |
| | | private static final String SUCCESS_TEMPLATE = "【酒鼎老酒】恭喜!您参与的“content”竞拍已中拍!"; |
| | | private static final String FAILED_TEMPLATE = "【酒鼎老酒】很遗憾!您参与的”content“竞拍未中拍!"; |
| | | |
| | | /** |
| | | * 获取拍卖商品列表的分页数据 |
| | |
| | | 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(); |
| | | Map<Long, String> orderIdMap = new HashMap<>(); |
| | | for (AuctionBidRecord auctionBidRecord : auctionBidRecordList) { |
| | | BigDecimal lastBidAmount = auctionBidRecord.getLastBidAmount(); |
| | | BigDecimal divide = lastBidAmount.divide( |
| | |
| | | } |
| | | orderDTO.setOrderTimeSx(auctionGoods.getEndTime()); |
| | | orderDTO.setGoodsId(auctionGoods.getGoodsSkuId()); |
| | | orderClient.saveOrderOne(orderDTO, SecurityConstants.INNER); |
| | | Long orderId = orderClient.saveOrderOne(orderDTO, SecurityConstants.INNER) |
| | | .getData(); |
| | | if (Objects.nonNull(orderId)) { |
| | | orderIdMap.put(auctionBidRecord.getMemberId(), orderId.toString()); |
| | | auctionBidRecord.setOrderId(orderId); |
| | | } |
| | | } |
| | | // 更新出价记录 |
| | | auctionBidRecordService.updateBatchById(auctionBidRecordList); |
| | | List<Long> successMemberIdList = auctionBidRecords.stream() |
| | | .filter(auctionBidRecord -> auctionBidRecord.getStatus() |
| | | .equals(BidStatusEnum.SUCCESSFUL)) |
| | | .map(AuctionBidRecord::getMemberId) |
| | | .collect(Collectors.toList()); |
| | | List<Long> failedMemberIdList = auctionBidRecords.stream() |
| | | .filter(auctionBidRecord -> !auctionBidRecord.getStatus() |
| | | .equals(BidStatusEnum.SUCCESSFUL)) |
| | | .map(AuctionBidRecord::getMemberId) |
| | | .collect(Collectors.toList()); |
| | | if (CollUtils.isNotEmpty(successMemberIdList)) { |
| | | List<Member> successMemberList = memberClient.getMemberListByIds( |
| | | successMemberIdList, SecurityConstants.INNER).getData(); |
| | | if (CollUtils.isNotEmpty(successMemberList)) { |
| | | // 推送websocket消息 |
| | | sendWebsocketMsg(id, successMemberList, goodsSku, 1, orderIdMap); |
| | | // 发送短信通知 |
| | | List<String> mobileList = successMemberList.stream().map(Member::getPhone) |
| | | .collect(Collectors.toList()); |
| | | authClient.sendSms(SmsSendDTO.builder().mobileList(mobileList) |
| | | .content(SUCCESS_TEMPLATE.replace("content", goodsSku.getSkuName())) |
| | | .build(), SecurityConstants.INNER); |
| | | } |
| | | } |
| | | if (CollUtils.isNotEmpty(failedMemberIdList)) { |
| | | List<Member> failedMemberList = memberClient.getMemberListByIds( |
| | | failedMemberIdList, SecurityConstants.INNER).getData(); |
| | | if (CollUtils.isNotEmpty(failedMemberList)) { |
| | | // 推送websocket消息 |
| | | sendWebsocketMsg(id, failedMemberList, goodsSku, 0, orderIdMap); |
| | | // 发送短信通知 |
| | | List<String> mobileList = failedMemberList.stream().map(Member::getPhone) |
| | | .collect(Collectors.toList()); |
| | | authClient.sendSms(SmsSendDTO.builder().mobileList(mobileList) |
| | | .content(FAILED_TEMPLATE.replace("content", goodsSku.getSkuName())) |
| | | .build(), SecurityConstants.INNER); |
| | | } |
| | | } |
| | | } else { |
| | | // 没有人出价,退回拍卖商品库存 |
| | |
| | | SecurityConstants.INNER); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 发送websocket通知 |
| | | * @param id |
| | | * @param memberList |
| | | * @param goodsSku |
| | | * @param successFlag // 中标状态 1:中标 0:未中标 |
| | | */ |
| | | private void sendWebsocketMsg(Long id, List<Member> memberList, GoodsSku goodsSku, |
| | | Integer successFlag, Map<Long, String> userIdMap) { |
| | | for (Member member : memberList) { |
| | | Map<String, Object> map = new ConcurrentHashMap<>(); |
| | | map.put("notification_type", NotificationTypeConstant.AUCTION_POPUP); |
| | | map.put("notification_time", DateUtils.dateTimeNow("yyyy-MM-dd HH:mm:ss")); |
| | | map.put("target_id", id); |
| | | map.put("goods_name", goodsSku.getSkuName()); |
| | | map.put("success_flag", successFlag); |
| | | map.put("order_id", successFlag == 1 ? userIdMap.getOrDefault(member.getId(), "") : ""); |
| | | String msg = JSONObject.toJSONString(map); |
| | | sysUserClient.pushBatch( |
| | | WebsocketMessageDTO.builder().message(msg).userId(member.getUserId()).build(), |
| | | SecurityConstants.INNER); |
| | | log.info("===================>发送websocket通知,消息体{}", msg); |
| | | } |
| | | } |
| | | |
| | |
| | | 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(); |
| | | Map<Long, String> orderIdMap = new HashMap<>(); |
| | | for (AuctionBidRecord auctionBidRecord : auctionBidRecordList) { |
| | | BigDecimal lastBidAmount = auctionBidRecord.getLastBidAmount(); |
| | | BigDecimal divide = lastBidAmount.divide( |
| | |
| | | } |
| | | orderDTO.setOrderTimeSx(auctionGoods.getEndTime()); |
| | | orderDTO.setGoodsId(auctionGoods.getGoodsSkuId()); |
| | | orderClient.saveOrderOne(orderDTO, SecurityConstants.INNER); |
| | | Long orderId = orderClient.saveOrderOne(orderDTO, SecurityConstants.INNER) |
| | | .getData(); |
| | | if (Objects.nonNull(orderId)) { |
| | | orderIdMap.put(auctionBidRecord.getMemberId(), orderId.toString()); |
| | | auctionBidRecord.setOrderId(orderId); |
| | | } |
| | | } |
| | | // 更新出价记录 |
| | | auctionBidRecordService.updateBatchById(auctionBidRecordList); |
| | | List<Long> successMemberIdList = auctionBidRecords.stream() |
| | | .filter(auctionBidRecord -> auctionBidRecord.getStatus() |
| | | .equals(BidStatusEnum.SUCCESSFUL)) |
| | | .map(AuctionBidRecord::getMemberId) |
| | | .collect(Collectors.toList()); |
| | | List<Long> failedMemberIdList = auctionBidRecords.stream() |
| | | .filter(auctionBidRecord -> !auctionBidRecord.getStatus() |
| | | .equals(BidStatusEnum.SUCCESSFUL)) |
| | | .map(AuctionBidRecord::getMemberId) |
| | | .collect(Collectors.toList()); |
| | | if (CollUtils.isNotEmpty(successMemberIdList)) { |
| | | List<Member> successMemberList = memberClient.getMemberListByIds( |
| | | successMemberIdList, SecurityConstants.INNER).getData(); |
| | | if (CollUtils.isNotEmpty(successMemberList)) { |
| | | // 推送websocket消息 |
| | | sendWebsocketMsg(id, successMemberList, goodsSku, 1, orderIdMap); |
| | | // 发送短信通知 |
| | | List<String> mobileList = successMemberList.stream() |
| | | .map(Member::getPhone) |
| | | .collect(Collectors.toList()); |
| | | authClient.sendSms(SmsSendDTO.builder().mobileList(mobileList) |
| | | .content(SUCCESS_TEMPLATE.replace("content", |
| | | goodsSku.getSkuName())) |
| | | .build(), SecurityConstants.INNER); |
| | | } |
| | | } |
| | | if (CollUtils.isNotEmpty(failedMemberIdList)) { |
| | | List<Member> failedMemberList = memberClient.getMemberListByIds( |
| | | failedMemberIdList, SecurityConstants.INNER).getData(); |
| | | if (CollUtils.isNotEmpty(failedMemberList)) { |
| | | // 推送websocket消息 |
| | | sendWebsocketMsg(id, failedMemberList, goodsSku, 0, orderIdMap); |
| | | // 发送短信通知 |
| | | List<String> mobileList = failedMemberList.stream() |
| | | .map(Member::getPhone) |
| | | .collect(Collectors.toList()); |
| | | authClient.sendSms(SmsSendDTO.builder().mobileList(mobileList) |
| | | .content(FAILED_TEMPLATE.replace("content", |
| | | goodsSku.getSkuName())) |
| | | .build(), SecurityConstants.INNER); |
| | | } |
| | | } |
| | | } else { |
| | | // 没有人出价,退回拍卖商品库存 |
| | |
| | | } |
| | | |
| | | 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); |
| | | System.out.println(SUCCESS_TEMPLATE.replace("content", "剑南春")); |
| | | } |
| | | |
| | | @Override |