Browse Source

添加定时任务 - secondTradeConfirm()

qrs 1 week ago
parent
commit
97581ebb38
1 changed files with 172 additions and 38 deletions
  1. 172 38
      alien-store/src/main/java/shop/alien/store/task/ScheduledTask.java

+ 172 - 38
alien-store/src/main/java/shop/alien/store/task/ScheduledTask.java

@@ -8,10 +8,12 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
+import shop.alien.entity.second.SecondGoods;
 import shop.alien.entity.second.SecondTradeRecord;
 import shop.alien.entity.store.*;
 import shop.alien.entity.store.vo.WebsocketVo;
 import shop.alien.mapper.*;
+import shop.alien.mapper.second.SecondGoodsMapper;
 import shop.alien.mapper.second.SecondTradeRecordMapper;
 import shop.alien.store.config.BaseRedisService;
 import shop.alien.store.config.WebSocketProcess;
@@ -58,6 +60,8 @@ public class ScheduledTask {
 
     private final LifeUserMapper lifeUserMapper;
 
+    private final SecondGoodsMapper secondGoodsMapper;
+
     private final WebSocketProcess webSocketProcess;
 
     private final BaseRedisService baseRedisService;
@@ -295,86 +299,216 @@ public class ScheduledTask {
     /**
      * 二手交易平台 - 交易时间前的十分钟和十五分钟之间  给买家和卖家发送通知提醒
      */
-//    @Scheduled(cron = "0 */5 * * * ?")
+    @Scheduled(cron = "0 * * * * ?")
     public void secondTradeRemind() throws Exception {
-        LocalDateTime now = LocalDateTime.now();
-        // 五分钟后
-        LocalDateTime fiveMinutesLater = now.plusMinutes(5);
+        LocalDateTime now = LocalDateTime.now().withSecond(0).withNano(0);
 
         // 查询所有待交易
         LambdaQueryWrapper<SecondTradeRecord> wrapper = new LambdaQueryWrapper<>();
-        wrapper.eq(SecondTradeRecord::getTradeStatus, 0);
+        wrapper.eq(SecondTradeRecord::getTradeStatus, 3);
         List<SecondTradeRecord> tradeRecordList = secondTradeRecordMapper.selectList(wrapper);
 
         for (SecondTradeRecord tradeRecord : tradeRecordList) {
             // 十分钟前
-            LocalDateTime tenMinutesAgo = tradeRecord.getTransactionTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime().minusMinutes(10);
-            // 交易时间前的十分钟和十五分钟之间
-            if ((now.isBefore(tenMinutesAgo) && fiveMinutesLater.isAfter(tenMinutesAgo))
-                    || now.isEqual(tenMinutesAgo) || fiveMinutesLater.isEqual(tenMinutesAgo)) {
+            LocalDateTime tenMinutesAgo = tradeRecord.getTransactionTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime().minusMinutes(10).withSecond(0).withNano(0);
+            // 交易时间的十分钟前
+            if (now.isEqual(tenMinutesAgo)) {
+                LifeUser buyer = lifeUserMapper.selectById(tradeRecord.getBuyerId());
+                LifeUser seller = lifeUserMapper.selectById(tradeRecord.getSellerId());
+
+                String buyerPhoneId = null == buyer ? "" : "user_" + buyer.getUserPhone();
+                String sellerPhoneId = null == seller ? "" : "user_" + seller.getUserPhone();
+
+                // 封装交易信息
+                JSONObject message = new JSONObject();
+                message.put("tradeId", tradeRecord.getId());
+                message.put("transactionAmount", tradeRecord.getTransactionAmount());
+                message.put("transactionLatitudeLongitude", tradeRecord.getTransactionLatitudeLongitude());
+                message.put("transactionLatitudeLongitudeAddress", tradeRecord.getTransactionLatitudeLongitudeAddress());
+                message.put("transactionLocation", tradeRecord.getTransactionLocation());
+                message.put("transactionTime", tradeRecord.getTransactionTime());
+                message.put("tradeStatus", tradeRecord.getTradeStatus());
 
                 // 给买家发送消息
                 LifeMessage lifeMessage = new LifeMessage();
-                lifeMessage.setSenderId(String.valueOf(tradeRecord.getSellerId()));
-                lifeMessage.setReceiverId(String.valueOf(tradeRecord.getBuyerId()));
-                lifeMessage.setContent("签到");
+                lifeMessage.setSenderId(sellerPhoneId);
+                lifeMessage.setReceiverId(buyerPhoneId);
+                lifeMessage.setContent(message.toJSONString());
                 lifeMessage.setType("5");
                 lifeMessageMapper.insert(lifeMessage);
 
-                // 给卖家发送消息
-                lifeMessage = new LifeMessage();
-                lifeMessage.setSenderId(String.valueOf(tradeRecord.getBuyerId()));
-                lifeMessage.setReceiverId(String.valueOf(tradeRecord.getSellerId()));
-                lifeMessage.setContent("签到");
-                lifeMessage.setType("5");
-                lifeMessageMapper.insert(lifeMessage);
+                // 给买家推送消息
+                WebsocketVo websocketVo = new WebsocketVo();
+                websocketVo.setSenderId(sellerPhoneId);
+                websocketVo.setReceiverId(buyerPhoneId);
+                websocketVo.setCategory("message");
+                websocketVo.setType("5");
+                websocketVo.setText(message.toJSONString());
+                websocketVo.setMessageId(lifeMessage.getId());
+                webSocketProcess.sendMessage(buyerPhoneId, JSONObject.from(websocketVo).toJSONString());
 
                 // 给买家发送通知
                 LifeNotice lifeNotice = new LifeNotice();
                 lifeNotice.setSenderId("system");
-                lifeNotice.setReceiverId(String.valueOf(tradeRecord.getBuyerId()));
+                lifeNotice.setReceiverId(buyerPhoneId);
                 lifeNotice.setBusinessId(tradeRecord.getId());
-                lifeNotice.setTitle("交易提醒");
-                lifeNotice.setContext("您有一笔交易即将开始, 请及时前往查看");
+                lifeNotice.setTitle("商品交易签到");
                 lifeNotice.setNoticeType(1);
+                // 封装通知信息
+                JSONObject noticeMessage = new JSONObject();
+                noticeMessage.put("tradeId", tradeRecord.getId());
+                noticeMessage.put("otherSideUserId", tradeRecord.getSellerId());
+                noticeMessage.put("otherSidePhoneId", sellerPhoneId);
+                noticeMessage.put("otherSideName", null == seller ? "" : seller.getUserName());
+                noticeMessage.put("otherSideImage", null == seller ? "" : seller.getUserImage());
+                noticeMessage.put("message", "您有一笔交易即将开始, 请及时前往查看");
+                lifeNotice.setContext(noticeMessage.toJSONString());
                 lifeNoticeMapper.insert(lifeNotice);
 
+                // 给买家推送通知
+                websocketVo = new WebsocketVo();
+                websocketVo.setSenderId("system");
+                websocketVo.setReceiverId(buyerPhoneId);
+                websocketVo.setCategory("notice");
+                websocketVo.setNoticeType("1");
+                websocketVo.setType("5");
+                websocketVo.setText(JSONObject.from(lifeNotice).toJSONString());
+                websocketVo.setMessageId(lifeMessage.getId());
+                webSocketProcess.sendMessage(buyerPhoneId, JSONObject.from(websocketVo).toJSONString());
+
+                // 给卖家发送消息
+                lifeMessage = new LifeMessage();
+                lifeMessage.setSenderId(buyerPhoneId);
+                lifeMessage.setReceiverId(sellerPhoneId);
+                lifeMessage.setContent(message.toJSONString());
+                lifeMessage.setType("5");
+                lifeMessageMapper.insert(lifeMessage);
+
+                // 给卖家推送消息
+                websocketVo = new WebsocketVo();
+                websocketVo.setSenderId(buyerPhoneId);
+                websocketVo.setReceiverId(sellerPhoneId);
+                websocketVo.setCategory("message");
+                websocketVo.setType("5");
+                websocketVo.setText(message.toJSONString());
+                websocketVo.setMessageId(lifeMessage.getId());
+                webSocketProcess.sendMessage(sellerPhoneId, JSONObject.from(websocketVo).toJSONString());
+
                 // 给卖家发送通知
                 lifeNotice = new LifeNotice();
                 lifeNotice.setSenderId("system");
-                lifeNotice.setReceiverId(String.valueOf(tradeRecord.getSellerId()));
+                lifeNotice.setReceiverId(sellerPhoneId);
                 lifeNotice.setBusinessId(tradeRecord.getId());
-                lifeNotice.setTitle("交易提醒");
-                lifeNotice.setContext("您有一笔交易即将开始, 请及时前往查看");
+                lifeNotice.setTitle("商品交易签到");
                 lifeNotice.setNoticeType(1);
+                // 封装通知信息
+                noticeMessage = new JSONObject();
+                noticeMessage.put("tradeId", tradeRecord.getId());
+                noticeMessage.put("otherSideUserId", tradeRecord.getBuyerId());
+                noticeMessage.put("otherSidePhoneId", buyerPhoneId);
+                noticeMessage.put("otherSideName", null == buyer ? "" : buyer.getUserName());
+                noticeMessage.put("otherSideImage", null == buyer ? "" : buyer.getUserImage());
+                noticeMessage.put("message", "您有一笔交易即将开始, 请及时前往查看");
+                lifeNotice.setContext(noticeMessage.toJSONString());
+                lifeNoticeMapper.insert(lifeNotice);
+
+                // 给卖家推送通知
+                websocketVo = new WebsocketVo();
+                websocketVo.setSenderId("system");
+                websocketVo.setReceiverId(sellerPhoneId);
+                websocketVo.setCategory("notice");
+                websocketVo.setNoticeType("1");
+                websocketVo.setType("5");
+                websocketVo.setText(JSONObject.from(lifeNotice).toJSONString());
+                websocketVo.setMessageId(lifeMessage.getId());
+                webSocketProcess.sendMessage(sellerPhoneId, JSONObject.from(websocketVo).toJSONString());
+            }
+        }
+    }
+
+    /**
+     * 二手交易平台 - 到达交易时间时,给买家和卖家发送交易确认提醒
+     */
+    @Scheduled(cron = "0 * * * * ?")
+    public void secondTradeConfirm() throws Exception {
+        LocalDateTime now = LocalDateTime.now().withSecond(0).withNano(0);
+
+        // 查询所有待交易
+        LambdaQueryWrapper<SecondTradeRecord> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(SecondTradeRecord::getTradeStatus, 3);
+        List<SecondTradeRecord> tradeRecordList = secondTradeRecordMapper.selectList(wrapper);
+
+        for (SecondTradeRecord tradeRecord : tradeRecordList) {
+            LocalDateTime tenMinutesAgo = tradeRecord.getTransactionTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime().withSecond(0).withNano(0);
+            // 交易时间的十分钟前
+            if (now.isEqual(tenMinutesAgo)) {
+                LifeUser buyer = lifeUserMapper.selectById(tradeRecord.getBuyerId());
+                LifeUser seller = lifeUserMapper.selectById(tradeRecord.getSellerId());
+                SecondGoods goods = secondGoodsMapper.selectById(tradeRecord.getGoodsId());
+
+                String buyerPhoneId = null == buyer ? "" : "user_" + buyer.getUserPhone();
+                String sellerPhoneId = null == seller ? "" : "user_" + seller.getUserPhone();
+
+                // 给买家发送通知
+                LifeNotice lifeNotice = new LifeNotice();
+                lifeNotice.setSenderId("system");
+                lifeNotice.setReceiverId(buyerPhoneId);
+                lifeNotice.setBusinessId(tradeRecord.getId());
+                lifeNotice.setTitle("商品是否交易成功");
+                lifeNotice.setNoticeType(1);
+                // 封装通知信息
+                JSONObject noticeMessage = new JSONObject();
+                noticeMessage.put("goodsId", goods.getId());
+                noticeMessage.put("goodsHomeImage", goods.getHomeImage());
+                noticeMessage.put("goodsTitle", goods.getTitle());
+                noticeMessage.put("tradeId", tradeRecord.getId());
+                noticeMessage.put("transactionAmount", tradeRecord.getTransactionAmount());
+                noticeMessage.put("transactionLatitudeLongitude", tradeRecord.getTransactionLatitudeLongitude());
+                noticeMessage.put("transactionLatitudeLongitudeAddress", tradeRecord.getTransactionLatitudeLongitudeAddress());
+                noticeMessage.put("transactionLocation", tradeRecord.getTransactionLocation());
+                noticeMessage.put("transactionTime", tradeRecord.getTransactionTime());
+                noticeMessage.put("tradeStatus", tradeRecord.getTradeStatus());
+                noticeMessage.put("message", "您有一笔交易已完成, 请前往确认");
+                lifeNotice.setContext(noticeMessage.toJSONString());
                 lifeNoticeMapper.insert(lifeNotice);
 
                 // 给买家推送通知
-                LifeUser user = lifeUserMapper.selectById(tradeRecord.getBuyerId());
                 WebsocketVo websocketVo = new WebsocketVo();
                 websocketVo.setSenderId("system");
+                websocketVo.setReceiverId(buyerPhoneId);
                 websocketVo.setCategory("notice");
+                websocketVo.setNoticeType("1");
                 websocketVo.setType("5");
-                websocketVo.setText("签到");
-                if (user != null) {
-                    websocketVo.setReceiverId("user_" + user.getUserPhone());
-                    webSocketProcess.sendMessage("user_" + user.getUserPhone(), JSONObject.from(websocketVo).toJSONString());
-                }
+                websocketVo.setText(JSONObject.from(lifeNotice).toJSONString());
+                webSocketProcess.sendMessage(buyerPhoneId, JSONObject.from(websocketVo).toJSONString());
+
+                // 给卖家发送通知
+                lifeNotice = new LifeNotice();
+                lifeNotice.setSenderId("system");
+                lifeNotice.setReceiverId(sellerPhoneId);
+                lifeNotice.setBusinessId(tradeRecord.getId());
+                lifeNotice.setTitle("商品是否交易成功");
+                lifeNotice.setNoticeType(1);
+                lifeNotice.setContext(noticeMessage.toJSONString());
+                lifeNoticeMapper.insert(lifeNotice);
 
                 // 给卖家推送通知
-                user = lifeUserMapper.selectById(tradeRecord.getSellerId());
-                if (user != null) {
-                    websocketVo.setReceiverId("user_" + user.getUserPhone());
-                    webSocketProcess.sendMessage("user_" + user.getUserPhone(), JSONObject.from(websocketVo).toJSONString());
-                }
+                websocketVo = new WebsocketVo();
+                websocketVo.setSenderId("system");
+                websocketVo.setReceiverId(sellerPhoneId);
+                websocketVo.setCategory("notice");
+                websocketVo.setNoticeType("1");
+                websocketVo.setType("5");
+                websocketVo.setText(JSONObject.from(lifeNotice).toJSONString());
+                webSocketProcess.sendMessage(buyerPhoneId, JSONObject.from(websocketVo).toJSONString());
             }
         }
     }
 
     /**
-     * 每分钟从redis中读取已读的消息id 并将数据库设为已读
+     * 二手交易平台 - 每分钟从redis中读取已读的消息id 并将数据库设为已读
      */
-//    @Scheduled(cron = "0 * * * * ?")
+    @Scheduled(cron = "0 * * * * ?")
     public void readMessage() {
         try {
             if (CollectionUtil.isEmpty(baseRedisService.getList("readMessageIdKey"))) return;