Procházet zdrojové kódy

交易确认bug修改、添加交易实时位置、修改交易信息功能

qrs před 4 týdny
rodič
revize
58ad3d5ffc

+ 1 - 1
alien-entity/src/main/java/shop/alien/entity/store/vo/WebSocketVo.java

@@ -17,7 +17,7 @@ public class WebSocketVo {
     @ApiModelProperty(value = "接收者id")
     private String receiverId;
 
-    @ApiModelProperty(value = "类别  message:消息  notice:公告  heartbeat:心跳  receipt:消息发送成功回调(用来记录消息id)")
+    @ApiModelProperty(value = "类别  message:消息  notice:公告  heartbeat:心跳  receipt:消息发送成功回调(用来记录消息id) position:二手交易实时定位")
     private String category;
 
     @ApiModelProperty(value = "公告类型  (0-系统通知和订单提醒之外的类型  1-系统通知 2-订单提醒)")

+ 18 - 0
alien-second/src/main/java/shop/alien/second/controller/SecondTradeRecordController.java

@@ -141,4 +141,22 @@ public class SecondTradeRecordController {
         log.info("SecondTradeRecordController.getTradeRecord?sideId={}", sideId);
         return R.data(secondTradeRecordService.getTradeRecord(sideId));
     }
+
+    @ApiOperation("双方是否有交易中的状态")
+    @ApiOperationSupport(order = 10)
+    @ApiImplicitParams({@ApiImplicitParam(name = "sideId", value = "对方的id", dataType = "Integer", paramType = "query", required = true)})
+    @GetMapping("/hasInTradeRecord")
+    public R<SecondTradeRecord> hasInTradeRecord(@RequestParam int sideId) throws Exception {
+        log.info("SecondTradeRecordController.hasInTradeRecord?sideId={}", sideId);
+        return R.data(secondTradeRecordService.hasInTradeRecord(sideId));
+    }
+
+    @ApiOperation("修改交易信息")
+    @ApiOperationSupport(order = 11)
+    @ApiImplicitParams({@ApiImplicitParam(name = "type", value = "1-交易成功  2-交易失败", dataType = "Integer", paramType = "query", required = true)})
+    @GetMapping("/modifyTradeRecord")
+    public R<Boolean> modifyTradeRecord(int type, Integer tradeId, String transactionTime, String transactionLatitudeLongitude, String transactionLatitudeLongitudeAddress, String transactionLocation, String messageId) throws Exception {
+        log.info("SecondTradeRecordController.modifyTradeRecord?record={}", transactionTime);
+        return R.data(secondTradeRecordService.modifyTradeRecord(type, tradeId, transactionTime, transactionLatitudeLongitude, transactionLatitudeLongitudeAddress, transactionLocation, messageId));
+    }
 }

+ 4 - 0
alien-second/src/main/java/shop/alien/second/service/SecondTradeRecordService.java

@@ -34,4 +34,8 @@ public interface SecondTradeRecordService extends IService<SecondTradeRecord> {
     boolean tradeCompleteConfirm(int tradeId, int type, String evaluate) throws Exception;
 
     List<SecondTradeRecordVo> getTradeRecord(int sideId) throws Exception;
+
+    SecondTradeRecord hasInTradeRecord(Integer sideId) throws Exception;
+
+    boolean modifyTradeRecord(int type, Integer tradeId, String transactionTime, String transactionLatitudeLongitude, String transactionLatitudeLongitudeAddress, String transactionLocation, String messageId) throws Exception;
 }

+ 55 - 0
alien-second/src/main/java/shop/alien/second/service/impl/SecondTradeRecordServiceImpl.java

@@ -201,6 +201,16 @@ public class SecondTradeRecordServiceImpl extends ServiceImpl<SecondTradeRecordM
             // 交易信息
             SecondTradeRecord trade = secondTradeRecordMapper.selectById(tradeId);
 
+            // 判断商品是否正在交易中
+            if (type == 1) {
+                LambdaQueryWrapper<SecondTradeRecord> recordWrapper = new LambdaQueryWrapper<>();
+                recordWrapper.eq(SecondTradeRecord::getGoodsId, trade.getGoodsId());
+                recordWrapper.eq(SecondTradeRecord::getTradeStatus, 3);
+                if (secondTradeRecordMapper.selectCount(recordWrapper) > 0) {
+                    throw new BusinessException("该商品正在交易中");
+                }
+            }
+
             // 有定时任务: 超过交易时间还未确认的交易会自动取消并保存交易操作表  所以如果是已取消的交易  不需要进行这两步操作
             if (trade.getTradeStatus() != 6) {
                 // 修改交易状态
@@ -548,6 +558,51 @@ public class SecondTradeRecordServiceImpl extends ServiceImpl<SecondTradeRecordM
         }
     }
 
+    @Override
+    public SecondTradeRecord hasInTradeRecord(Integer sideId) throws Exception {
+        try {
+            int userId = Objects.requireNonNull(JwtUtil.getCurrentUserInfo()).getInteger("userId");
+            LambdaQueryWrapper<SecondTradeRecord> wrapper = new LambdaQueryWrapper<>();
+            wrapper.eq(SecondTradeRecord::getTradeStatus, 3);
+            wrapper.apply("((seller_id = " + userId + " and buyer_id = " + sideId + ") or " +
+                    "(seller_id = " + sideId + " and buyer_id = " + userId + "))");
+            wrapper.orderByDesc(SecondTradeRecord::getTransactionTime);
+            return secondTradeRecordMapper.selectOne(wrapper);
+         } catch (Exception e) {
+            log.error("SecondTradeRecordServiceImpl.hasInTradeRecord(): Error Msg={}", e.getMessage());
+            throw new Exception(e);
+        }
+    }
+
+    @Override
+    public boolean modifyTradeRecord(int type, Integer tradeId, String transactionTime, String transactionLatitudeLongitude, String transactionLatitudeLongitudeAddress, String transactionLocation, String messageId) throws Exception {
+        try {
+            if (type == 1) {
+                LambdaUpdateWrapper<SecondTradeRecord> wrapper = new LambdaUpdateWrapper<>();
+                wrapper.set(SecondTradeRecord::getTransactionTime, transactionTime);
+                wrapper.set(SecondTradeRecord::getTransactionLatitudeLongitude, transactionLatitudeLongitude);
+                wrapper.set(SecondTradeRecord::getTransactionLatitudeLongitudeAddress, transactionLatitudeLongitudeAddress);
+                wrapper.set(SecondTradeRecord::getTransactionLocation, transactionLocation);
+                wrapper.eq(SecondTradeRecord::getId, tradeId);
+                secondTradeRecordMapper.update(null, wrapper);
+            }
+            // 修改待确认的消息
+            LifeMessage lastMessage = lifeMessageMapper.selectById(messageId);
+
+            JSONObject lastMessageContent = JSONObject.parseObject(lastMessage.getContent());
+            lastMessageContent.put("messageId", lastMessage.getId());
+            lastMessageContent.put("modifyStatus", type);
+            LifeMessage message = new LifeMessage();
+            message.setId(lastMessage.getId());
+            message.setContent(lastMessageContent.toJSONString());
+            lifeMessageMapper.updateById(message);
+            return true;
+        } catch (Exception e) {
+            log.error("SecondTradeRecordServiceImpl.modifyTradeRecord(): Error Msg={}", e.getMessage());
+            throw new Exception(e);
+        }
+    }
+
     private void sendSignInMessage(SecondTradeRecord tradeRecord) throws Exception {
         log.info("二手交易平台-创建交易时间小于十分钟,直接发送交易提醒---sendSignInMessage()---");
         try {

+ 7 - 0
alien-store/src/main/java/shop/alien/store/config/WebSocketProcess.java

@@ -88,6 +88,13 @@ public class WebSocketProcess implements ApplicationContextAware {
                 return;
             }
 
+            // 发送位置信息
+            if ("position".equals(webSocketVo.getCategory())) {
+                sendMessage(webSocketVo.getSenderId(), JSONObject.from(webSocketVo).toJSONString());
+                sendMessage(webSocketVo.getReceiverId(), JSONObject.from(webSocketVo).toJSONString());
+                return;
+            }
+
             log.info("webSocketVo----------------{}", JSONObject.from(webSocketVo).toJSONString());
             log.info("concurrentHashMap----------{}", concurrentHashMap.keySet());