mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-10-31 02:08:43 +08:00 
			
		
		
		
	【优化】数据库增加 mjNonce 更新,生成好、或异常的图片信息
This commit is contained in:
		| @@ -49,8 +49,8 @@ public class AiImageDO extends BaseDO { | |||||||
|  |  | ||||||
|     // ============ mj 需要字段 |     // ============ mj 需要字段 | ||||||
|  |  | ||||||
|     @Schema(description = "用户操作的消息编号(MJ返回)") |     @Schema(description = "用户操作的Nonce编号(MJ返回)") | ||||||
|     private String mjMessageId; |     private String mjNonceId; | ||||||
|  |  | ||||||
|     @Schema(description = "用户操作的操作编号(MJ返回)") |     @Schema(description = "用户操作的操作编号(MJ返回)") | ||||||
|     private String mjOperationId; |     private String mjOperationId; | ||||||
|   | |||||||
| @@ -1,6 +1,7 @@ | |||||||
| package cn.iocoder.yudao.module.ai.dal.mysql; | package cn.iocoder.yudao.module.ai.dal.mysql; | ||||||
|  |  | ||||||
| import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | ||||||
|  | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | ||||||
| import cn.iocoder.yudao.module.ai.dal.dataobject.image.AiImageDO; | import cn.iocoder.yudao.module.ai.dal.dataobject.image.AiImageDO; | ||||||
| import org.apache.ibatis.annotations.Mapper; | import org.apache.ibatis.annotations.Mapper; | ||||||
| import org.springframework.stereotype.Repository; | import org.springframework.stereotype.Repository; | ||||||
| @@ -17,4 +18,13 @@ import org.springframework.stereotype.Repository; | |||||||
| public interface AiImageMapper extends BaseMapperX<AiImageDO> { | public interface AiImageMapper extends BaseMapperX<AiImageDO> { | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 更新 - 根据 messageId | ||||||
|  |      * | ||||||
|  |      * @param mjNonceId | ||||||
|  |      * @param aiImageDO | ||||||
|  |      */ | ||||||
|  |     default void updateByMjNonce(Long mjNonceId, AiImageDO aiImageDO) { | ||||||
|  |         this.update(aiImageDO, new LambdaQueryWrapperX<AiImageDO>().eq(AiImageDO::getMjNonceId, mjNonceId)); | ||||||
|  |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -145,7 +145,7 @@ public class AiImageServiceImpl implements AiImageService { | |||||||
|         // 校验 OperateId 是否存在 |         // 校验 OperateId 是否存在 | ||||||
|         AiImageMidjourneyOperationsVO midjourneyOperationsVO = validateMidjourneyOperationsExists(midjourneyOperations, req.getOperateId()); |         AiImageMidjourneyOperationsVO midjourneyOperationsVO = validateMidjourneyOperationsExists(midjourneyOperations, req.getOperateId()); | ||||||
|         // 校验 messageId |         // 校验 messageId | ||||||
|         validateMessageId(aiImageDO.getMjMessageId(), req.getMessageId()); |         validateMessageId(aiImageDO.getMjNonceId(), req.getMessageId()); | ||||||
|         // 获取 mjOperationName |         // 获取 mjOperationName | ||||||
|         String mjOperationName = midjourneyOperationsVO.getLabel(); |         String mjOperationName = midjourneyOperationsVO.getLabel(); | ||||||
|         // 保存一个 image 任务记录 |         // 保存一个 image 任务记录 | ||||||
| @@ -222,7 +222,7 @@ public class AiImageServiceImpl implements AiImageService { | |||||||
|         aiImageDO.setDrawingImageUrl(drawingImageUrl); |         aiImageDO.setDrawingImageUrl(drawingImageUrl); | ||||||
|         aiImageDO.setDrawingErrorMessage(drawingErrorMessage); |         aiImageDO.setDrawingErrorMessage(drawingErrorMessage); | ||||||
|         // |         // | ||||||
|         aiImageDO.setMjMessageId(mjMessageId); |         aiImageDO.setMjNonceId(mjMessageId); | ||||||
|         aiImageDO.setMjOperationId(mjOperationId); |         aiImageDO.setMjOperationId(mjOperationId); | ||||||
|         aiImageDO.setMjOperationName(mjOperationName); |         aiImageDO.setMjOperationName(mjOperationName); | ||||||
|         aiImageMapper.insert(aiImageDO); |         aiImageMapper.insert(aiImageDO); | ||||||
|   | |||||||
| @@ -62,12 +62,11 @@ public class YuDaoMidjourneyMessageHandler implements MidjourneyMessageHandler { | |||||||
|  |  | ||||||
|     private void errorHandler(MidjourneyMessage midjourneyMessage) { |     private void errorHandler(MidjourneyMessage midjourneyMessage) { | ||||||
|         // image 编号 |         // image 编号 | ||||||
|         Long aiImageId = Long.valueOf(midjourneyMessage.getNonce()); |         Long nonceId = Long.valueOf(midjourneyMessage.getNonce()); | ||||||
|         // 获取 error message |         // 获取 error message | ||||||
|         String errorMessage = getErrorMessage(midjourneyMessage); |         String errorMessage = getErrorMessage(midjourneyMessage); | ||||||
|         aiImageMapper.updateById( |         aiImageMapper.updateByMjNonce(nonceId, | ||||||
|                 new AiImageDO() |                 new AiImageDO() | ||||||
|                         .setId(aiImageId) |  | ||||||
|                         .setDrawingErrorMessage(errorMessage) |                         .setDrawingErrorMessage(errorMessage) | ||||||
|                         .setDrawingStatus(AiImageDrawingStatusEnum.FAIL.getStatus()) |                         .setDrawingStatus(AiImageDrawingStatusEnum.FAIL.getStatus()) | ||||||
|         ); |         ); | ||||||
| @@ -83,7 +82,7 @@ public class YuDaoMidjourneyMessageHandler implements MidjourneyMessageHandler { | |||||||
|  |  | ||||||
|     private void successHandler(MidjourneyMessage midjourneyMessage) { |     private void successHandler(MidjourneyMessage midjourneyMessage) { | ||||||
|         // 获取id |         // 获取id | ||||||
|         Long aiImageId = Long.valueOf(midjourneyMessage.getNonce()); |         Long nonceId = Long.valueOf(midjourneyMessage.getNonce()); | ||||||
|         // 获取生成 url |         // 获取生成 url | ||||||
|         String imageUrl = null; |         String imageUrl = null; | ||||||
|         if (CollUtil.isNotEmpty(midjourneyMessage.getAttachments())) { |         if (CollUtil.isNotEmpty(midjourneyMessage.getAttachments())) { | ||||||
| @@ -102,12 +101,11 @@ public class YuDaoMidjourneyMessageHandler implements MidjourneyMessageHandler { | |||||||
|         // 获取 midjourneyOperations |         // 获取 midjourneyOperations | ||||||
|         List<AiImageMidjourneyOperationsVO> midjourneyOperations = getMidjourneyOperationsList(midjourneyMessage); |         List<AiImageMidjourneyOperationsVO> midjourneyOperations = getMidjourneyOperationsList(midjourneyMessage); | ||||||
|         // 更新数据库 |         // 更新数据库 | ||||||
|         aiImageMapper.updateById( |         aiImageMapper.updateByMjNonce(nonceId, | ||||||
|                 new AiImageDO() |                 new AiImageDO() | ||||||
|                         .setId(aiImageId) |  | ||||||
|                         .setDrawingImageUrl(imageUrl) |                         .setDrawingImageUrl(imageUrl) | ||||||
|                         .setDrawingStatus(drawingStatusEnum == null ? null : drawingStatusEnum.getStatus()) |                         .setDrawingStatus(drawingStatusEnum == null ? null : drawingStatusEnum.getStatus()) | ||||||
|                         .setMjMessageId(midjourneyMessage.getId()) |                         .setMjNonceId(midjourneyMessage.getId()) | ||||||
|                         .setMjOperations(JsonUtils.toJsonString(midjourneyOperations)) |                         .setMjOperations(JsonUtils.toJsonString(midjourneyOperations)) | ||||||
|         ); |         ); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -20,5 +20,5 @@ Content-Type: application/json | |||||||
| Authorization: {{token}} | Authorization: {{token}} | ||||||
|  |  | ||||||
| { | { | ||||||
|   "prompt": "Cute cartoon style mobile game scene, a colorful camping car with an outdoor table and chairs next to it on the road in a spring forest, the simple structure of the camper van, soft lighting, C4D rendering, 3d model in the style of a cartoon, cute shape, a pastel color scheme, closeup view from the side angle, high resolution, bright colors, a happy atmosphere. --ar 1:2 --v 6.0" |   "prompt": "Cute cartoon style mobile game scene, a colorful camping car with an outdoor table and chairs next to it on the road in a spring forest, the simple structure of the camper van, soft lighting, C4D rendering, 3d model in the style of a cartoon, cute shape, a pastel color scheme, closeup view from the side angle, high resolution, bright colors, a happy atmosphere." | ||||||
| } | } | ||||||
| @@ -0,0 +1,54 @@ | |||||||
|  | { | ||||||
|  |   "type": 2, | ||||||
|  |   "application_id": "936929561302675456", | ||||||
|  |   "guild_id": "1237948819677904956", | ||||||
|  |   "channel_id": "1237948819677904960", | ||||||
|  |   "session_id": "4bdb0c32158f625bbd7f0a54bfbb54aa", | ||||||
|  |   "data": { | ||||||
|  |     "version": "1237876415471554623", | ||||||
|  |     "id": "938956540159881230", | ||||||
|  |     "name": "imagine", | ||||||
|  |     "type": 1, | ||||||
|  |     "options": [ | ||||||
|  |       { | ||||||
|  |         "type": 3, | ||||||
|  |         "name": "prompt", | ||||||
|  |         "value": "哈哈哈" | ||||||
|  |       } | ||||||
|  |     ], | ||||||
|  |     "application_command": { | ||||||
|  |       "id": "938956540159881230", | ||||||
|  |       "type": 1, | ||||||
|  |       "application_id": "936929561302675456", | ||||||
|  |       "version": "1237876415471554623", | ||||||
|  |       "name": "imagine", | ||||||
|  |       "description": "Create images with Midjourney", | ||||||
|  |       "options": [ | ||||||
|  |         { | ||||||
|  |           "type": 3, | ||||||
|  |           "name": "prompt", | ||||||
|  |           "description": "The prompt to imagine", | ||||||
|  |           "required": true, | ||||||
|  |           "description_localized": "The prompt to imagine", | ||||||
|  |           "name_localized": "prompt" | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       "dm_permission": true, | ||||||
|  |       "contexts": [ | ||||||
|  |         0, | ||||||
|  |         1, | ||||||
|  |         2 | ||||||
|  |       ], | ||||||
|  |       "integration_types": [ | ||||||
|  |         0, | ||||||
|  |         1 | ||||||
|  |       ], | ||||||
|  |       "global_popularity_rank": 1, | ||||||
|  |       "description_localized": "Create images with Midjourney", | ||||||
|  |       "name_localized": "imagine" | ||||||
|  |     }, | ||||||
|  |     "attachments": [] | ||||||
|  |   }, | ||||||
|  |   "nonce": "1238062212925358080", | ||||||
|  |   "analytics_location": "slash_ui" | ||||||
|  | } | ||||||
| @@ -52,7 +52,7 @@ spring: | |||||||
|           #          url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=ruoyi-vue-pro;SelectMethod=cursor;encrypt=false;rewriteBatchedStatements=true;useUnicode=true;characterEncoding=utf-8 # SQLServer 连接的示例 |           #          url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=ruoyi-vue-pro;SelectMethod=cursor;encrypt=false;rewriteBatchedStatements=true;useUnicode=true;characterEncoding=utf-8 # SQLServer 连接的示例 | ||||||
|           #          url: jdbc:dm://127.0.0.1:5236?schema=RUOYI_VUE_PRO # DM 连接的示例 |           #          url: jdbc:dm://127.0.0.1:5236?schema=RUOYI_VUE_PRO # DM 连接的示例 | ||||||
|           username: root |           username: root | ||||||
|           password: 123456 |           password: root | ||||||
|         #          username: sa # SQL Server 连接的示例 |         #          username: sa # SQL Server 连接的示例 | ||||||
|         #          password: Yudao@2024 # SQL Server 连接的示例 |         #          password: Yudao@2024 # SQL Server 连接的示例 | ||||||
|         #          username: SYSDBA # DM 连接的示例 |         #          username: SYSDBA # DM 连接的示例 | ||||||
| @@ -61,7 +61,7 @@ spring: | |||||||
|           lazy: true # 开启懒加载,保证启动速度 |           lazy: true # 开启懒加载,保证启动速度 | ||||||
|           url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true |           url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true | ||||||
|           username: root |           username: root | ||||||
|           password: 123456 |           password: root | ||||||
|  |  | ||||||
|   # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 |   # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 | ||||||
|   data: |   data: | ||||||
| @@ -248,9 +248,9 @@ yudao: | |||||||
|       style: vivid |       style: vivid | ||||||
|     midjourney: |     midjourney: | ||||||
|       enable: true |       enable: true | ||||||
|       token: OTc1MzcyNDg1OTcxMzEyNzAw.G2iiSo.OqW9vToC5dokiyb1QOWnCwRPsYpOjLyNcf9--M |       token: MTE4MjE3MjY2MjkxNTY3ODIzOA.GEV1SG.c49F8lZoGCUHwsj8O0UdodmM6nyQHvuD2fXflw | ||||||
|       guild-id: 1234355413420347402 |       guild-id: 1237948819677904956 | ||||||
|       channel-id: 1234380679576424448 |       channel-id: 1237948819677904960 | ||||||
|   captcha: |   captcha: | ||||||
|     enable: false # 本地环境,暂时关闭图片验证码,方便登录等接口的测试; |     enable: false # 本地环境,暂时关闭图片验证码,方便登录等接口的测试; | ||||||
|   security: |   security: | ||||||
| @@ -267,6 +267,8 @@ yudao: | |||||||
|     enable: false |     enable: false | ||||||
|   demo: false # 关闭演示模式 |   demo: false # 关闭演示模式 | ||||||
|   tencent-lbs-key: TVDBZ-TDILD-4ON4B-PFDZA-RNLKH-VVF6E # QQ 地图的密钥 https://lbs.qq.com/service/staticV2/staticGuide/staticDoc |   tencent-lbs-key: TVDBZ-TDILD-4ON4B-PFDZA-RNLKH-VVF6E # QQ 地图的密钥 https://lbs.qq.com/service/staticV2/staticGuide/staticDoc | ||||||
|  |   tenant: | ||||||
|  |     enable: false | ||||||
|  |  | ||||||
| justauth: | justauth: | ||||||
|   enabled: true |   enabled: true | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 cherishsince
					cherishsince