diff --git a/tashow-framework/tashow-common/src/main/java/com/tashow/cloud/common/util/json/databind/StringLocalDateTimeSerializer.java b/tashow-framework/tashow-common/src/main/java/com/tashow/cloud/common/util/json/databind/StringLocalDateTimeSerializer.java new file mode 100644 index 0000000..0226446 --- /dev/null +++ b/tashow-framework/tashow-common/src/main/java/com/tashow/cloud/common/util/json/databind/StringLocalDateTimeSerializer.java @@ -0,0 +1,27 @@ +package com.tashow.cloud.common.util.json.databind; + +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.LocalDateTimeUtil; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; + +import java.io.IOException; +import java.time.LocalDateTime; + +/** + * 基于字符串的 LocalDateTime 序列化器 + * + * @author 老五 + */ +public class StringLocalDateTimeSerializer extends JsonSerializer { + + public static final StringLocalDateTimeSerializer INSTANCE = new StringLocalDateTimeSerializer(); + + @Override + public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException { + // 将 LocalDateTime 对象,转换为 Long 时间戳 + gen.writeString(LocalDateTimeUtil.format(value, DatePattern.NORM_DATETIME_FORMATTER) ); + } + +} diff --git a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/app/dialog/vo/AiDialogMessageRespVo.java b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/app/dialog/vo/AiDialogMessageRespVo.java index 5c5b606..2629d25 100644 --- a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/app/dialog/vo/AiDialogMessageRespVo.java +++ b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/app/dialog/vo/AiDialogMessageRespVo.java @@ -5,6 +5,8 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; /** @@ -70,7 +72,6 @@ public class AiDialogMessageRespVo { * 创建时间 */ @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private String createTime; + private LocalDateTime createTime; } \ No newline at end of file diff --git a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/app/dialog/vo/TranslateRespVo.java b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/app/dialog/vo/TranslateRespVo.java index 0da9dfc..b481080 100644 --- a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/app/dialog/vo/TranslateRespVo.java +++ b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/app/dialog/vo/TranslateRespVo.java @@ -1,11 +1,11 @@ package com.tashow.cloud.ai.controller.app.dialog.vo; -import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.tashow.cloud.common.util.json.databind.StringLocalDateTimeSerializer; import lombok.Data; -import org.springframework.format.annotation.DateTimeFormat; -import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; +import java.time.LocalDateTime; /** * 翻译接口结果vo @@ -40,8 +40,7 @@ public class TranslateRespVo { //文件时长 private Long contentDuration; //发送时间 - @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private String createTime; + @JsonSerialize(using = StringLocalDateTimeSerializer.class) + private LocalDateTime createTime; } diff --git a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/dal/dataobject/dialog/AiDialogMessageDO.java b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/dal/dataobject/dialog/AiDialogMessageDO.java index cc26722..4602c2c 100644 --- a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/dal/dataobject/dialog/AiDialogMessageDO.java +++ b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/dal/dataobject/dialog/AiDialogMessageDO.java @@ -1,10 +1,14 @@ package com.tashow.cloud.ai.dal.dataobject.dialog; import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.*; +import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDateTime; +import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + /** * ai-对话消息 DO * @@ -89,6 +93,8 @@ public class AiDialogMessageDO { * 创建时间 */ @TableField(fill = FieldFill.INSERT) + @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime createTime; } \ No newline at end of file diff --git a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/service/dialog/AiDialogServiceImpl.java b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/service/dialog/AiDialogServiceImpl.java index 7f6b8b7..ee8b613 100644 --- a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/service/dialog/AiDialogServiceImpl.java +++ b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/service/dialog/AiDialogServiceImpl.java @@ -1,5 +1,6 @@ package com.tashow.cloud.ai.service.dialog; +import cn.hutool.core.date.LocalDateTimeUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpUtil; @@ -30,8 +31,8 @@ import javax.sound.sampled.AudioSystem; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; -import java.time.LocalDateTime; import java.util.Comparator; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -55,6 +56,17 @@ public class AiDialogServiceImpl extends ServiceImpl private FileApi fileApi; + private Map petAvatars = new HashMap<>() {{ + put("cat", "https://petshy.tashowz.com/admin-api/infra/file/29/get/89f4982de19aadae3248ffde37132857df255b3276de484fdf12e603e5e29a7e.png"); + put("dog", "https://petshy.tashowz.com/admin-api/infra/file/29/get/175ba9f58dc812786bfe0598ca9c4a7f422fe138c1889e08d8228aebc953c1b3.png"); + }}; + + private Map petName = new HashMap<>() {{ + put("cat", "猫猫・三胖"); + put("dog", "狗狗・旺财"); + }}; + + @Override public DialogResp getDialog(Long userId) { AiDialogDO aiDialogDO = this.getOne(new LambdaQueryWrapper().eq(AiDialogDO::getUserId, userId)); @@ -108,7 +120,7 @@ public class AiDialogServiceImpl extends ServiceImpl .last("limit 1") ); messageDO.setMessageOrder(aiDialogMessageDO == null ? 1 : aiDialogMessageDO.getMessageOrder() + 1); - messageDO.setCreateTime(LocalDateTime.now()); + messageDO.setCreateTime(LocalDateTimeUtil.now()); } int i = messageDO.getId() == null ? aiDialogMessageMapper.insert(messageDO) : aiDialogMessageMapper.updateById(messageDO); TranslateRespVo bean = BeanUtils.toBean(messageDO, TranslateRespVo.class); @@ -136,7 +148,11 @@ public class AiDialogServiceImpl extends ServiceImpl //数据解析 JSONObject translateResult = JSON.parseObject(result); - if (translateResult.isEmpty() || !translateResult.containsKey("intent_result") || !translateResult.getBoolean("is_species_sound")) { + if (translateResult.isEmpty() + || !translateResult.containsKey("intent_result") + || !translateResult.getBoolean("is_species_sound") + || translateResult.getInteger("confidence") < 0.7 + ) { messageDO.setTransStatus(0); messageDO.setTransResult(""); return messageDO; @@ -148,16 +164,24 @@ public class AiDialogServiceImpl extends ServiceImpl .getJSONObject("probabilities"); String resultKey = probabilities.entrySet().stream() - .filter(entry -> entry.getValue() instanceof Number) + .filter(entry -> entry.getValue() instanceof Number && ((Number) entry.getValue()).doubleValue() > 0.7) .max(Comparator.comparingDouble(entry -> ((Number) entry.getValue()).doubleValue())) .map(Map.Entry::getKey) .orElse(null); //返回结果 + if (StrUtil.isBlank(resultKey)) { + messageDO.setTransStatus(0); + messageDO.setTransResult(""); + return messageDO; + } + //宠物档案 todo messageDO.setPetId(1l); - messageDO.setPetName(speciesLabels); - messageDO.setPetAvatar("https://img1.baidu.com/it/u=1224902049,3440357835&fm=253&app=138&f=JPEG?w=801&h=800"); + messageDO.setPetName(petName.get(speciesLabels)); + https: +//qcloud.dpfile.com/pc/qw4HqeQN5Af9tLaw0mx8pXQhxKUCvwHbCXmSRI-nKiW1NpX6wMdvSN80YpcTbMKw.jpg + messageDO.setPetAvatar(petAvatars.get(speciesLabels)); messageDO.setPetType(speciesLabels); messageDO.setTransStatus(1); messageDO.setTransResult(StrUtil.isBlank(resultKey) ? "" : resultKey.split(StrUtil.UNDERLINE)[1]); diff --git a/tashow-module/tashow-module-system/src/main/java/com/tashow/cloud/system/dal/dataobject/oauth2/OAuth2AccessTokenDO.java b/tashow-module/tashow-module-system/src/main/java/com/tashow/cloud/system/dal/dataobject/oauth2/OAuth2AccessTokenDO.java index d07e668..f99bf1a 100644 --- a/tashow-module/tashow-module-system/src/main/java/com/tashow/cloud/system/dal/dataobject/oauth2/OAuth2AccessTokenDO.java +++ b/tashow-module/tashow-module-system/src/main/java/com/tashow/cloud/system/dal/dataobject/oauth2/OAuth2AccessTokenDO.java @@ -70,6 +70,7 @@ public class OAuth2AccessTokenDO extends TenantBaseDO { /** * 过期时间 */ + private LocalDateTime expiresTime; } diff --git a/tashow-module/tashow-module-trade/src/main/java/com/tashow/cloud/trade/controller/admin/order/vo/TradeOrderDetailRespVO.java b/tashow-module/tashow-module-trade/src/main/java/com/tashow/cloud/trade/controller/admin/order/vo/TradeOrderDetailRespVO.java index a84678e..d283f3e 100644 --- a/tashow-module/tashow-module-trade/src/main/java/com/tashow/cloud/trade/controller/admin/order/vo/TradeOrderDetailRespVO.java +++ b/tashow-module/tashow-module-trade/src/main/java/com/tashow/cloud/trade/controller/admin/order/vo/TradeOrderDetailRespVO.java @@ -47,6 +47,8 @@ public class TradeOrderDetailRespVO { private String orderTerminal; //用户信息 private String userInfo; + //用户头像 + private String userAvatar; //取消时间 private String cancelTime;