BUGFIX:数据传输过程中long精度发生丢失

This commit is contained in:
2024-01-22 16:21:32 +08:00
parent 404172e5f2
commit 164454b5b2
3 changed files with 16 additions and 14 deletions

View File

@@ -64,12 +64,6 @@ public class MQConsumer {
// 2.2 将该消息从取消列表中删除
redisUtil.removeFromSet(cancelSetKey, String.valueOf(uniqueId));
} else {
try {
// 模拟耗时
Thread.sleep(40000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
GenerateCollectionVO generateCollectionVO = generateService.generateThroughImageText(generateThroughImageTextDTO);
if (!Objects.isNull(generateCollectionVO)){
HashMap<String, String> generateResult = new HashMap<>();

View File

@@ -55,12 +55,14 @@ public class GenerateController {
@ApiOperation(value = "发起生成请求,异步获取结果")
@PostMapping("/prepare")
public Response<Long> prepareForGenerate(@Valid @RequestBody GenerateThroughImageTextDTO generateThroughImageTextDTO){
return Response.success(generateService.prepareForGenerate(generateThroughImageTextDTO));
public Response<String> prepareForGenerate(@Valid @RequestBody GenerateThroughImageTextDTO generateThroughImageTextDTO){
Long l = generateService.prepareForGenerate(generateThroughImageTextDTO);
// 防止long精度丢失这里转为String类型进行传输
return Response.success(String.valueOf(l));
}
@ApiOperation(value = "取消继续生成")
@PostMapping("/stopWaiting")
@GetMapping("/stopWaiting")
public Response<String> stopWaiting(@RequestParam("uniqueId") Long uniqueId){
generateService.cancelGenerate(uniqueId);
return Response.success("stop waiting successfully");

View File

@@ -121,7 +121,7 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
generateThroughImageTextDTO.getLevel1Type().equals(PRINT_BOARD.getRealName()) ? "print" : "moodboard";
AsyncCallerUtil asyncCallerUtil = new AsyncCallerUtil();
List<String> generatedSketchUrl = asyncCallerUtil.generate(new GenerateToPythonDTO(accountId, Objects.isNull(collectionElement) ? null : collectionElement.getUrl(),
category, text, mode, "1", generateThroughImageTextDTO.getGender()),0L);
category, text, mode, "1", generateThroughImageTextDTO.getGender()),generateThroughImageTextDTO.getUniqueId());
// List<String> generatedSketchUrl = pythonService.generateSketchOrPrint(new GenerateToPythonDTO(accountId, Objects.isNull(elementId) ? null : collectionElement.getUrl(),
// category, text, mode, "1", generateThroughImageTextDTO.getGender()));
if (CollectionUtils.isEmpty(generatedSketchUrl)){
@@ -320,7 +320,13 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
Long elementId = generateThroughImageTextDTO.getCollectionElementId();
validateGeneraType(new Generate(), text, elementId,generateType);
// 2、生成唯一id
// 2、确定当前排队人数总数超过15个暂停使用当前功能
Long zSetTotal = redisUtil.getZSetTotal(consumptionOrderKey);
if (zSetTotal.equals(15L)){
return null;
}
// 3、生成唯一id
SnowflakeUtil idWorker = new SnowflakeUtil(0, 0);
long snowflakeId = idWorker.nextId();
@@ -330,14 +336,14 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
generateThroughImageTextDTO.setUniqueId(snowflakeId);
String jsonString = JSON.toJSONString(generateThroughImageTextDTO);
// 3、加入redis排队便于获取实时排队信息
// 4、加入redis排队便于获取实时排队信息
Double maxScore = redisUtil.getMaxScore(consumptionOrderKey);
redisUtil.addToZSet(consumptionOrderKey, String.valueOf(snowflakeId),maxScore);
// 4、将消息发布到MQ消息队列
// 5、将消息发布到MQ消息队列
rabbitMQService.publishMessage(jsonString);
// 5、返回唯一id
// 6、返回唯一id
return snowflakeId;
}