From bec9f04c86772087ec8e5589b78dfc155049f166 Mon Sep 17 00:00:00 2001 From: gaoqr <13665037151@163.com> Date: Wed, 8 Jul 2026 16:48:33 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B4=B4=E7=9A=AE=E6=96=87=E4=BB=B6=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/veneer/VeneerController.java | 6 ++-- .../service/veneer/VeneerService.java | 5 ++-- .../service/veneer/VeneerServiceImpl.java | 12 ++++++-- .../admin/veneer/VeneerControllerTest.java | 5 ++-- .../service/veneer/VeneerServiceImplTest.java | 30 +++++++++++++++++-- 5 files changed, 48 insertions(+), 10 deletions(-) diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/veneer/VeneerController.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/veneer/VeneerController.java index dc76c6093..b84c9ee41 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/veneer/VeneerController.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/veneer/VeneerController.java @@ -28,6 +28,7 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestPart; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; @@ -116,8 +117,9 @@ public class VeneerController { @PostMapping("/pic") @Operation(summary = "上传贴皮照片") @OperateLog(logArgs = false, type = CREATE) - public CommonResult uploadVeneerPic(@RequestPart(value = "file") MultipartFile file) throws IOException { - return success(veneerService.uploadPic(file)); + public CommonResult uploadVeneerPic(@RequestParam("id") Long id, + @RequestPart(value = "file") MultipartFile file) throws IOException { + return success(veneerService.uploadPic(id, file)); } @PostMapping("/defect") diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/veneer/VeneerService.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/veneer/VeneerService.java index d2b4d610b..07c1e23b5 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/veneer/VeneerService.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/veneer/VeneerService.java @@ -50,10 +50,11 @@ public interface VeneerService { /** * 上传贴皮照片 * - * @param file + * @param id 贴皮id + * @param file 贴皮图片 * @return */ - Long uploadPic(MultipartFile file) throws IOException; + Long uploadPic(Long id, MultipartFile file) throws IOException; /** * 贴皮导入模版下载 diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/veneer/VeneerServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/veneer/VeneerServiceImpl.java index 6938e4834..b1235413d 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/veneer/VeneerServiceImpl.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/veneer/VeneerServiceImpl.java @@ -127,7 +127,11 @@ public class VeneerServiceImpl implements VeneerService { } @Override - public Long uploadPic(MultipartFile file) throws IOException { + public Long uploadPic(Long id, MultipartFile file) throws IOException { + if (ObjectUtil.isNull(validateExist(id))) { + throw new ServiceException(VENEER_NOT_EXIST); + } + Long organId = SecurityFrameworkUtils.getUserOrganId(); // 获取组织名称 @@ -138,7 +142,11 @@ public class VeneerServiceImpl implements VeneerService { } else { organizationDTO = details.getData(); } - return fileApi.createFileAndReturnId(file.getBytes(), String.format("%s-veneer-pic-file-%s.%s", organizationDTO.getName(), LocalDateTimeUtil.format(LocalDateTime.now(), PURE_DATETIME_PATTERN), getFileExtension(file.getOriginalFilename()))); + Long fileId = fileApi.createFileAndReturnId(file.getBytes(), String.format("%s-veneer-pic-file-%s.%s", organizationDTO.getName(), LocalDateTimeUtil.format(LocalDateTime.now(), PURE_DATETIME_PATTERN), getFileExtension(file.getOriginalFilename()))); + veneerMapper.update(new LambdaUpdateWrapper() + .eq(VeneerDO::getId, id) + .set(VeneerDO::getFileId, fileId)); + return fileId; } @Override diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/test/java/com/cf/imes/module/executor/controller/admin/veneer/VeneerControllerTest.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/test/java/com/cf/imes/module/executor/controller/admin/veneer/VeneerControllerTest.java index bcb654e7b..da4dd59f9 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/test/java/com/cf/imes/module/executor/controller/admin/veneer/VeneerControllerTest.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/test/java/com/cf/imes/module/executor/controller/admin/veneer/VeneerControllerTest.java @@ -161,10 +161,11 @@ class VeneerControllerTest extends BaseWebUnitTest { "file", "a.jpg", "image/jpeg", "123".getBytes() ); - when(veneerService.uploadPic(any())).thenReturn(10L); + when(veneerService.uploadPic(eq(1L), any())).thenReturn(10L); mockMvc.perform(multipart("/executor/veneer/pic") - .file(file)) + .file(file) + .param("id", "1")) .andExpect(status().isOk()) .andExpect(jsonPath("$.data").value(10L)); } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/test/java/com/cf/imes/module/executor/service/veneer/VeneerServiceImplTest.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/test/java/com/cf/imes/module/executor/service/veneer/VeneerServiceImplTest.java index e278db25d..08c0fe29f 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/test/java/com/cf/imes/module/executor/service/veneer/VeneerServiceImplTest.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/test/java/com/cf/imes/module/executor/service/veneer/VeneerServiceImplTest.java @@ -259,6 +259,9 @@ class VeneerServiceImplTest extends BaseMockitoUnitTest { @Test @WithMockLoginUser(organId = 1L) void uploadPic_success() throws Exception { + VeneerDO veneerDO = new VeneerDO(); + veneerDO.setId(1L); + when(veneerMapper.selectById(1L)).thenReturn(veneerDO); // mock organApi OrganizationDTO dto = new OrganizationDTO(); @@ -279,7 +282,7 @@ class VeneerServiceImplTest extends BaseMockitoUnitTest { "test-content".getBytes() ); - Long fileId = veneerService.uploadPic(file); + Long fileId = veneerService.uploadPic(1L, file); assertEquals(100L, fileId); @@ -288,11 +291,16 @@ class VeneerServiceImplTest extends BaseMockitoUnitTest { any(byte[].class), argThat(name -> name.contains("测试组织-veneer-pic-file-")) ); + verify(veneerMapper).update(argThat((LambdaUpdateWrapper wrapper) -> + wrapper.getSqlSegment().contains("id") && wrapper.getSqlSet().contains("file_id"))); } @Test @WithMockLoginUser(organId = 1L) void uploadPic_fail_when_organ_api_error() { + VeneerDO veneerDO = new VeneerDO(); + veneerDO.setId(1L); + when(veneerMapper.selectById(1L)).thenReturn(veneerDO); when(organApi.getOrganDetails(1L)) .thenReturn(CommonResult.error(500, "组织服务异常")); @@ -306,13 +314,31 @@ class VeneerServiceImplTest extends BaseMockitoUnitTest { ServiceException ex = assertThrows( ServiceException.class, - () -> veneerService.uploadPic(file) + () -> veneerService.uploadPic(1L, file) ); assertEquals(500, ex.getCode()); assertEquals("组织服务异常", ex.getMessage()); verify(fileApi, never()).createFileAndReturnId(any(), any()); + verify(veneerMapper, never()).update(any()); + } + + @Test + void uploadPic_fail_when_veneer_not_exists() { + MockMultipartFile file = new MockMultipartFile( + "file", + "test.jpg", + "image/jpeg", + "content".getBytes() + ); + + assertServiceException(() -> veneerService.uploadPic(999L, file), + VENEER_NOT_EXIST); + + verify(organApi, never()).getOrganDetails(anyLong()); + verify(fileApi, never()).createFileAndReturnId(any(), any()); + verify(veneerMapper, never()).update(any()); } @Test