qrs 15 годин тому
батько
коміт
bb02ed4103

+ 79 - 26
alien-job/src/main/java/shop/alien/job/second/SecondGoodsTradeXxlJob.java

@@ -26,6 +26,7 @@ import shop.alien.mapper.second.SecondTradeRecordMapper;
 import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 
 @Slf4j
@@ -52,64 +53,115 @@ public class SecondGoodsTradeXxlJob {
      */
     @XxlJob("secondTradeRemind")
     public void secondTradeRemind() throws Exception {
-        LocalDateTime now = LocalDateTime.now().withSecond(0).withNano(0);
+        Date now = Date.from(LocalDateTime.now().plusMinutes(10).withSecond(0).withNano(0).atZone(ZoneId.systemDefault()).toInstant());
 
         // 查询所有待交易
         LambdaQueryWrapper<SecondTradeRecord> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(SecondTradeRecord::getTradeStatus, 3);
+        wrapper.eq(SecondTradeRecord::getTransactionTime, now);
         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)) {
+            // 十分钟前
+//            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());
-                SecondGoods goods = secondGoodsMapper.selectById(tradeRecord.getGoodsId());
 
                 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(sellerPhoneId);
+                lifeMessage.setReceiverId(buyerPhoneId);
+                lifeMessage.setContent(message.toJSONString());
+                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());
+                alienStoreFeign.sendMsgToClientByPhoneId(buyerPhoneId, JSONObject.from(webSocketVo).toJSONString());
+
                 // 给买家发送通知
                 LifeNotice lifeNotice = new LifeNotice();
                 lifeNotice.setSenderId("system");
                 lifeNotice.setReceiverId(buyerPhoneId);
                 lifeNotice.setBusinessId(tradeRecord.getId());
-                lifeNotice.setTitle("商品是否交易成功");
+                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", "您有一笔交易已完成, 请前往确认");
+                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 webSocketVo = new WebSocketVo();
+                webSocketVo = new WebSocketVo();
                 webSocketVo.setSenderId("system");
                 webSocketVo.setReceiverId(buyerPhoneId);
                 webSocketVo.setCategory("notice");
                 webSocketVo.setNoticeType("1");
                 webSocketVo.setType("5");
-                webSocketVo.setIsRead(0);
                 webSocketVo.setText(JSONObject.from(lifeNotice).toJSONString());
+                webSocketVo.setMessageId(lifeMessage.getId());
                 alienStoreFeign.sendMsgToClientByPhoneId(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());
+                alienStoreFeign.sendMsgToClientByPhoneId(sellerPhoneId, JSONObject.from(webSocketVo).toJSONString());
+
                 // 给卖家发送通知
                 lifeNotice = new LifeNotice();
                 lifeNotice.setSenderId("system");
                 lifeNotice.setReceiverId(sellerPhoneId);
                 lifeNotice.setBusinessId(tradeRecord.getId());
-                lifeNotice.setTitle("商品是否交易成功");
+                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);
 
@@ -120,10 +172,10 @@ public class SecondGoodsTradeXxlJob {
                 webSocketVo.setCategory("notice");
                 webSocketVo.setNoticeType("1");
                 webSocketVo.setType("5");
-                webSocketVo.setIsRead(0);
                 webSocketVo.setText(JSONObject.from(lifeNotice).toJSONString());
-                alienStoreFeign.sendMsgToClientByPhoneId(buyerPhoneId, JSONObject.from(webSocketVo).toJSONString());
-            }
+                webSocketVo.setMessageId(lifeMessage.getId());
+                alienStoreFeign.sendMsgToClientByPhoneId(sellerPhoneId, JSONObject.from(webSocketVo).toJSONString());
+//            }
         }
     }
 
@@ -133,16 +185,17 @@ public class SecondGoodsTradeXxlJob {
     @XxlJob("secondTradeConfirm")
     public void secondTradeConfirm() throws Exception {
         try {
-            LocalDateTime now = LocalDateTime.now().withSecond(0).withNano(0);
+            Date now = Date.from(LocalDateTime.now().withSecond(0).withNano(0).atZone(ZoneId.systemDefault()).toInstant());
 
             // 查询所有待交易
             LambdaQueryWrapper<SecondTradeRecord> wrapper = new LambdaQueryWrapper<>();
             wrapper.eq(SecondTradeRecord::getTradeStatus, 3);
+            wrapper.eq(SecondTradeRecord::getTransactionTime, now);
             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)) {
+//                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());
@@ -203,8 +256,8 @@ public class SecondGoodsTradeXxlJob {
                     webSocketVo.setType("5");
                     webSocketVo.setIsRead(0);
                     webSocketVo.setText(JSONObject.from(lifeNotice).toJSONString());
-                    alienStoreFeign.sendMsgToClientByPhoneId(buyerPhoneId, JSONObject.from(webSocketVo).toJSONString());
-                }
+                    alienStoreFeign.sendMsgToClientByPhoneId(sellerPhoneId, JSONObject.from(webSocketVo).toJSONString());
+//                }
             }
         } catch (Exception e) {
             log.error("SecondGoodsTradeXxlJob.secondTradeConfirm Error Mgs={}", e.getMessage());

+ 4 - 1
alien-second/src/main/java/shop/alien/second/service/impl/SecondTradeRecordServiceImpl.java

@@ -125,6 +125,7 @@ public class SecondTradeRecordServiceImpl extends ServiceImpl<SecondTradeRecordM
         lifeMessage.setType(messageType);
         lifeMessage.setContent(message.toJSONString());
         lifeMessageMapper.insert(lifeMessage);
+        message.put("createdTime", lifeMessage.getCreatedTime());
 
         // 给买家与卖家发送交易消息
         WebSocketVo webSocketVo = new WebSocketVo();
@@ -342,6 +343,7 @@ public class SecondTradeRecordServiceImpl extends ServiceImpl<SecondTradeRecordM
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public SecondTradeRecordVo getUserTradeStatus(int tradeId) throws Exception {
         try {
             SecondTradeRecordVo recordVo = new SecondTradeRecordVo();
@@ -362,6 +364,7 @@ public class SecondTradeRecordServiceImpl extends ServiceImpl<SecondTradeRecordM
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public boolean tradeCompleteConfirm(int tradeId, int type, String evaluate) throws Exception {
         try {
             int userId = Objects.requireNonNull(JwtUtil.getCurrentUserInfo()).getInteger("userId");
@@ -378,7 +381,7 @@ public class SecondTradeRecordServiceImpl extends ServiceImpl<SecondTradeRecordM
                 if (0 != tradeRecord.getSellerTransactionStatus()) return false;
                 record.setSellerTransactionStatus(type);
                 record.setSellerEvaluate(evaluate);
-                record.setTradeStatus(type);
+                record.setTradeStatus(1 == type ? 4 : 5);
                 // 卖家如果选择交易成功  同步修改商品表
                 if (1 == tradeRecord.getBuyerTransactionStatus()) {
                     SecondGoods goods = new SecondGoods();