Răsfoiți Sursa

消息、通知、交易

qrs 1 zi în urmă
părinte
comite
6f94d80901

+ 18 - 2
alien-config/src/main/java/shop/alien/config/databases/MyBatisFieldHandler.java

@@ -1,9 +1,12 @@
 package shop.alien.config.databases;
 
+import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.ibatis.reflection.MetaObject;
 import org.springframework.stereotype.Component;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
 import shop.alien.util.common.JwtUtil;
 
 import java.util.Date;
@@ -28,9 +31,17 @@ public class MyBatisFieldHandler implements MetaObjectHandler {
     @Override
     public void insertFill(MetaObject metaObject) {
         log.info("=================================insertFill=========================================");
+        System.out.println(metaObject.getOriginalObject());
         //字段为实体类名, 不是表字段名
         this.setFieldValByName("createdTime", new Date(), metaObject);
-        this.setFieldValByName("createdUserId", 1, metaObject);
+        this.setFieldValByName("updatedTime", new Date(), metaObject);
+        if (JwtUtil.hasToken()) {
+            this.setFieldValByName("createdUserId", Objects.requireNonNull(JwtUtil.getCurrentUserInfo()).getInteger("userId"), metaObject);
+            this.setFieldValByName("updatedUserId", Objects.requireNonNull(JwtUtil.getCurrentUserInfo()).getInteger("userId"), metaObject);
+        } else {
+            this.setFieldValByName("createdUserId", 0, metaObject);
+            this.setFieldValByName("updatedUserId", 0, metaObject);
+        }
     }
 
     /**
@@ -40,8 +51,13 @@ public class MyBatisFieldHandler implements MetaObjectHandler {
      */
     @Override
     public void updateFill(MetaObject metaObject) {
+        log.info("=================================updateFill=========================================");
         //字段为实体类名, 不是表字段名
         this.setFieldValByName("updatedTime", new Date(), metaObject);
-        this.setFieldValByName("updatedUserId", Objects.requireNonNull(JwtUtil.getCurrentUserInfo()).getInteger("userId"), metaObject);
+        if (JwtUtil.hasToken()) {
+            this.setFieldValByName("updatedUserId", Objects.requireNonNull(JwtUtil.getCurrentUserInfo()).getInteger("userId"), metaObject);
+        } else {
+            this.setFieldValByName("updatedUserId", 0, metaObject);
+        }
     }
 }

+ 3 - 0
alien-entity/src/main/java/shop/alien/entity/second/vo/SecondTradeRecordVo.java

@@ -30,4 +30,7 @@ public class SecondTradeRecordVo extends SecondTradeRecord {
 
     @ApiModelProperty(value = "用户交易评价")
     private String userEvaluate;
+
+    @ApiModelProperty(value = "当前时间是否超过交易时间  0-否  1-是")
+    private String timeOutFlag;
 }

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

@@ -26,7 +26,7 @@ public class WebSocketVo {
     @ApiModelProperty(value = "是否已读  0:未读  1:已读")
     private Integer isRead;
 
-    @ApiModelProperty(value = "消息类型  1-文本  2-图片 3-链接分享  4-二手交易(确认/拒绝/取消)  5-二手交易签到提醒  6-二手交易已签到")
+    @ApiModelProperty(value = "消息类型  1-文本  2-图片 3-链接分享  4-二手交易(确认/拒绝/取消)  5-二手交易签到提醒  6-二手交易已签到  7-消息内容不合规")
     private String type;
 
     @ApiModelProperty(value = "消息内容")

+ 3 - 2
alien-entity/src/main/java/shop/alien/mapper/second/SecondTradeRecordMapper.java

@@ -24,8 +24,9 @@ import java.util.List;
 @Mapper
 public interface SecondTradeRecordMapper extends BaseMapper<SecondTradeRecord> {
 
-    @Select("select trade.id, goods.title, goods.home_image, goods.price, trade.transaction_amount, trade.trade_status, " +
-            "       trade.transaction_latitude_longitude, trade.transaction_latitude_longitude_address, trade.transaction_location " +
+    @Select("select trade.id, goods.title, goods.home_image, goods.price, trade.transaction_amount, trade.trade_status, trade.transaction_time, " +
+            "       trade.transaction_latitude_longitude, trade.transaction_latitude_longitude_address, trade.transaction_location, trade.created_user_id, " +
+            "       if (now() >= trade.transaction_time, 1, 0) timeOutFlag " +
             "from second_trade_record trade " +
             "left join second_goods goods on goods.id = trade.goods_id " +
             "${ew.customSqlSegment} ")

+ 24 - 29
alien-store/src/main/java/shop/alien/store/config/MyBatisFieldHandler.java

@@ -3,11 +3,15 @@ package shop.alien.store.config;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.ibatis.reflection.MetaObject;
 import org.springframework.stereotype.Component;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
 import shop.alien.util.common.JwtUtil;
 
 import java.util.Date;
+import java.util.Objects;
 
 /**
  * Mybatis日期填充
@@ -17,6 +21,7 @@ import java.util.Date;
  * @date 2024/12/6 10:19
  */
 @Component
+@Slf4j
 public class MyBatisFieldHandler implements MetaObjectHandler {
 
     /**
@@ -26,17 +31,17 @@ public class MyBatisFieldHandler implements MetaObjectHandler {
      */
     @Override
     public void insertFill(MetaObject metaObject) {
-        // 设置创建时间
-        setFieldValByName("createdTime", new Date(), metaObject);
-        // 设置更新时间
-        setFieldValByName("updatedTime", new Date(), metaObject);
-
-        Integer currentUserId = getUserId();
-        if (currentUserId != null) {
-            // 设置创建人 ID
-            setFieldValByName("createdUserId", currentUserId, metaObject);
-            // 设置修改人 ID
-            setFieldValByName("updatedUserId", currentUserId, metaObject);
+        log.info("=================================insertFill=========================================");
+        System.out.println(metaObject.getOriginalObject());
+        //字段为实体类名, 不是表字段名
+        this.setFieldValByName("createdTime", new Date(), metaObject);
+        this.setFieldValByName("updatedTime", new Date(), metaObject);
+        if (JwtUtil.hasToken()) {
+            this.setFieldValByName("createdUserId", Objects.requireNonNull(JwtUtil.getCurrentUserInfo()).getInteger("userId"), metaObject);
+            this.setFieldValByName("updatedUserId", Objects.requireNonNull(JwtUtil.getCurrentUserInfo()).getInteger("userId"), metaObject);
+        } else {
+            this.setFieldValByName("createdUserId", 0, metaObject);
+            this.setFieldValByName("updatedUserId", 0, metaObject);
         }
     }
 
@@ -46,24 +51,14 @@ public class MyBatisFieldHandler implements MetaObjectHandler {
      * @param metaObject 元对象
      */
     @Override
-    public void updateFill(MetaObject metaObject) { //填充 更新时间
-        // 设置更新时间
-        setFieldValByName("updatedTime", new Date(), metaObject);
-
-        Integer currentUserId = getUserId();
-        if (currentUserId != null) {
-            // 设置修改人 ID
-            setFieldValByName("updatedUserId", currentUserId, metaObject);
-        }
-    }
-
-    public Integer getUserId() {
-        String token = JwtUtil.getToken();
-        String userId = "0";
-        if (StringUtils.isNotEmpty(token)) {
-            JSONObject tokenInfo = JwtUtil.getTokenInfo(token);
-            userId = tokenInfo.getString("userId");
+    public void updateFill(MetaObject metaObject) {
+        log.info("=================================updateFill=========================================");
+        //字段为实体类名, 不是表字段名
+        this.setFieldValByName("updatedTime", new Date(), metaObject);
+        if (JwtUtil.hasToken()) {
+            this.setFieldValByName("updatedUserId", Objects.requireNonNull(JwtUtil.getCurrentUserInfo()).getInteger("userId"), metaObject);
+        } else {
+            this.setFieldValByName("updatedUserId", 0, metaObject);
         }
-        return Integer.parseInt(userId);
     }
 }

+ 36 - 8
alien-store/src/main/java/shop/alien/store/config/WebSocketProcess.java

@@ -3,6 +3,7 @@ package shop.alien.store.config;
 import cn.hutool.core.collection.CollectionUtil;
 import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.google.common.collect.Lists;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
@@ -12,6 +13,10 @@ import shop.alien.entity.store.LifeMessage;
 import shop.alien.entity.store.vo.WebSocketVo;
 import shop.alien.mapper.LifeBlacklistMapper;
 import shop.alien.mapper.LifeMessageMapper;
+import shop.alien.util.common.safe.ImageReviewServiceEnum;
+import shop.alien.util.common.safe.TextModerationResultVO;
+import shop.alien.util.common.safe.TextModerationUtil;
+import shop.alien.util.common.safe.TextReviewServiceEnum;
 
 import javax.websocket.*;
 import javax.websocket.server.PathParam;
@@ -32,14 +37,10 @@ import java.util.stream.Collectors;
 @ServerEndpoint(value = "/socket/{sendId}")
 public class WebSocketProcess {
 
-    @Autowired
-    private LifeMessageMapper lifeMessageMapper;
-
-    @Autowired
-    private BaseRedisService baseRedisService;
-
-    @Autowired
-    private LifeBlacklistMapper lifeBlacklistMapper;
+    private final LifeMessageMapper lifeMessageMapper = SpringContext.getBean(LifeMessageMapper.class);
+    private final BaseRedisService baseRedisService = SpringContext.getBean(BaseRedisService.class);
+    private final LifeBlacklistMapper lifeBlacklistMapper = SpringContext.getBean(LifeBlacklistMapper.class);
+    private final TextModerationUtil textModerationUtil = SpringContext.getBean(TextModerationUtil.class);
 
     /*
      * 持有每个webSocket对象,以key-value存储到线程安全ConcurrentHashMap,
@@ -105,6 +106,14 @@ public class WebSocketProcess {
                 return;
             }
 
+            // 检查消息合规性
+            if (!checkCompliance(websocketVo)) {
+                websocketVo.setType("7");
+                websocketVo.setText("发送内容存在违规行为");
+                sendMessage(websocketVo.getSenderId(), JSONObject.from(websocketVo).toJSONString());
+                return;
+            }
+
             // 保存消息记录
             LifeMessage lifeMessage = new LifeMessage();
             lifeMessage.setSenderId(websocketVo.getSenderId());
@@ -134,6 +143,25 @@ public class WebSocketProcess {
         }
     }
 
+
+    private boolean checkCompliance(WebSocketVo websocketVo) throws Exception {
+        List<String> servicesList = Lists.newArrayList();
+        TextModerationResultVO textModerationResultVO = null;
+        if ("1".equals(websocketVo.getType())) {
+            servicesList.add(TextReviewServiceEnum.AD_COMPLIANCE_DETECTION_PRO.getService());
+            servicesList.add(TextReviewServiceEnum.CHAT_DETECTION_PRO.getService());
+            textModerationResultVO = textModerationUtil.invokeFunction(websocketVo.getText(), servicesList);
+
+        } else if ("2".equals(websocketVo.getType())) {
+            servicesList.add(ImageReviewServiceEnum.TONALITY_IMPROVE.getService());
+            textModerationResultVO = textModerationUtil.invokeFunction(websocketVo.getText(), servicesList);
+        }
+        if (null != textModerationResultVO && "high".equals(textModerationResultVO.getRiskLevel())) {
+            return false;
+        }
+        return true;
+    }
+
     /**
      * 发送消息到指定客户端
      */

+ 1 - 1
alien-store/src/main/java/shop/alien/store/service/impl/LifeMessageServiceImpl.java

@@ -393,7 +393,7 @@ public class LifeMessageServiceImpl extends ServiceImpl<LifeMessageMapper, LifeM
             //查询对方发送过的消息
             QueryWrapper<LifeMessage> wrapper1 = new QueryWrapper<>();
             wrapper1.apply("(sender_id = '" + receiverId + "' and receiver_id = '" + senderId + "')");
-            int receiverCount = lifeMessageMapper.selectCount(wrapper);
+            int receiverCount = lifeMessageMapper.selectCount(wrapper1);
             if (senderCount == 0){
                 //本条可以发
                 return "1";

+ 13 - 0
alien-util/src/main/java/shop/alien/util/common/JwtUtil.java

@@ -6,6 +6,7 @@ import io.jsonwebtoken.JwtBuilder;
 import io.jsonwebtoken.Jwts;
 import io.jsonwebtoken.SignatureAlgorithm;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.poi.util.StringUtil;
 import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
 
@@ -155,4 +156,16 @@ public class JwtUtil {
         return null;
     }
 
+    public static boolean hasToken() {
+        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+        if (attributes != null) {
+            HttpServletRequest request = attributes.getRequest();
+            String token = request.getHeader("Authorization");
+            if (StringUtil.isNotBlank(token)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
 }