src/main/java/com/ruoyi/aftersalesservice/controller/AfterSalesNearExpiryController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,77 @@ package com.ruoyi.aftersalesservice.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.aftersalesservice.pojo.AfterSalesNearExpiry; import com.ruoyi.aftersalesservice.service.AfterSalesNearExpiryService; import com.ruoyi.framework.aspectj.lang.annotation.Log; import com.ruoyi.framework.aspectj.lang.enums.BusinessType; import com.ruoyi.framework.web.controller.BaseController; import com.ruoyi.framework.web.domain.AjaxResult; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; /** * <br> * 临æå®åç®¡çæ§å¶å± * </br> * * @author deslrey * @version 1.0 * @since 2026/03/02 14:40 */ @RestController @Api(tags = "临æå®å管ç") @RequestMapping("/afterSalesNearExpiryService") public class AfterSalesNearExpiryController extends BaseController { @Autowired private AfterSalesNearExpiryService afterSalesNearExpiryService; /** * æ°å¢ä¸´æå®å */ @PostMapping("/add") @ApiOperation("æ°å¢ä¸´æå®å") @Log(title = "æ°å¢ä¸´æå®å", businessType = BusinessType.INSERT) public AjaxResult add(@RequestBody AfterSalesNearExpiry entity) { afterSalesNearExpiryService.add(entity); return AjaxResult.success("æ·»å æå"); } /** * æ´æ°ä¸´æå®å */ @PostMapping("/update") @ApiOperation("æ´æ°ä¸´æå®å") @Log(title = "æ´æ°ä¸´æå®å", businessType = BusinessType.UPDATE) public AjaxResult update(@RequestBody AfterSalesNearExpiry entity) { afterSalesNearExpiryService.update(entity); return AjaxResult.success("æ´æ°æå"); } /** * å é¤ä¸´æå®å */ @DeleteMapping("/delete") @ApiOperation("å é¤ä¸´æå®å") @Log(title = "å é¤ä¸´æå®å", businessType = BusinessType.DELETE) public AjaxResult delete(Long[] ids) { afterSalesNearExpiryService.delete(ids); return AjaxResult.success("å 餿å"); } /** * å页æ¥è¯¢ä¸´æå®å */ @GetMapping("/listPage") @ApiOperation("å页æ¥è¯¢ä¸´æå®å") @Log(title = "å页æ¥è¯¢ä¸´æå®å", businessType = BusinessType.OTHER) public AjaxResult listPage(Page<AfterSalesNearExpiry> page, AfterSalesNearExpiry entity) { IPage<AfterSalesNearExpiry> listPage = afterSalesNearExpiryService.listPage(page, entity); return AjaxResult.success(listPage); } } src/main/java/com/ruoyi/aftersalesservice/controller/AfterSalesServiceFileController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,56 @@ package com.ruoyi.aftersalesservice.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.aftersalesservice.pojo.AfterSalesServiceFile; import com.ruoyi.aftersalesservice.service.AfterSalesServiceFileService; import com.ruoyi.framework.aspectj.lang.annotation.Log; import com.ruoyi.framework.aspectj.lang.enums.BusinessType; import com.ruoyi.framework.web.controller.BaseController; import com.ruoyi.framework.web.domain.AjaxResult; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; /** * <br> * å®åæå¡é件表æ§å¶å± * </br> * * @author deslrey * @version 1.0 * @since 2026/03/02 11:20 */ @RestController @Api(tags = "å®åæå¡é件表") @RequestMapping("/afterSalesService/file") public class AfterSalesServiceFileController extends BaseController { @Autowired private AfterSalesServiceFileService afterSalesServiceFileService; @PostMapping("/upload") @ApiOperation("å®åæå¡-æä»¶ä¸ä¼ ") @Log(title = "å®åæå¡-æä»¶ä¸ä¼ ", businessType = BusinessType.INSERT) public AjaxResult fileUpload(@RequestParam("file") MultipartFile file, @RequestParam("id") Long afterSalesServiceId) { afterSalesServiceFileService.fileUpload(file, afterSalesServiceId); return AjaxResult.success("ä¸ä¼ æå"); } @GetMapping("/listPage") @ApiOperation("å®åå¤ç-å®åéä»¶å表") @Log(title = "å®åå¤ç-å®åéä»¶å表", businessType = BusinessType.OTHER) public AjaxResult fileList(Page<AfterSalesServiceFile> page, Long afterSalesServiceId) { return AjaxResult.success(afterSalesServiceFileService.fileList(page, afterSalesServiceId)); } @DeleteMapping("/del/{fileId}") @ApiOperation("å®åå¤ç-å é¤éä»¶") @Log(title = "å®åå¤ç-å é¤éä»¶", businessType = BusinessType.DELETE) public AjaxResult delFile(@PathVariable Long fileId) { afterSalesServiceFileService.delFile(fileId); return AjaxResult.success("å 餿å!"); } } src/main/java/com/ruoyi/aftersalesservice/mapper/AfterSalesNearExpiryMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,22 @@ package com.ruoyi.aftersalesservice.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.aftersalesservice.pojo.AfterSalesNearExpiry; import org.apache.ibatis.annotations.Param; /** * <br> * 临æå®å管çMapper * </br> * * @author deslrey * @version 1.0 * @since 2026/03/02 14:44 */ public interface AfterSalesNearExpiryMapper extends BaseMapper<AfterSalesNearExpiry> { IPage<AfterSalesNearExpiry> listPage(Page<AfterSalesNearExpiry> page, @Param("req") AfterSalesNearExpiry entity); } src/main/java/com/ruoyi/aftersalesservice/mapper/AfterSalesServiceFileMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,16 @@ package com.ruoyi.aftersalesservice.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.aftersalesservice.pojo.AfterSalesServiceFile; /** * <br> * * </br> * * @author deslrey * @version 1.0 * @since 2026/03/02 11:15 */ public interface AfterSalesServiceFileMapper extends BaseMapper<AfterSalesServiceFile> { } src/main/java/com/ruoyi/aftersalesservice/pojo/AfterSalesNearExpiry.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,91 @@ package com.ruoyi.aftersalesservice.pojo; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDate; import java.time.LocalDateTime; /** * <br> * 临æå®å管çå®ä½ç±» * </br> * * @author deslrey * @version 1.0 * @since 2026/03/02 14:41 */ @Data @TableName("after_sales_near_expiry") @ApiModel("临æå®å管ç表") public class AfterSalesNearExpiry { @TableId(type = IdType.AUTO) @ApiModelProperty("主é®") private Long id; @ApiModelProperty("临æäº§ååç§°") private String productName; @ApiModelProperty("äº§åæ¹å·") private String batchNumber; @ApiModelProperty("ä¸´ææ¥æ") @JsonFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") private LocalDate expireDate; @ApiModelProperty("åºåæ°é") private Integer stockQuantity; @ApiModelProperty("客æ·åç§°") private String customerName; @ApiModelProperty("èç³»çµè¯") private String contactPhone; @ApiModelProperty("é®é¢æè¿°") private String disRes; @ApiModelProperty("å¤çç»æ") private String disposeResult; @ApiModelProperty("å¤çç¶æ (1-å¾ å¤ç 2-å·²å¤ç)") private Integer status; @ApiModelProperty("å¤ç人ID") private Long disposeUserId; @ApiModelProperty("å¤ç人åç§°") private String disposeNickName; @ApiModelProperty("å¤çæ¥æ") @JsonFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") private LocalDate disDate; @ApiModelProperty("å建è ") private Long createUser; @ApiModelProperty("å建æ¶é´") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime createTime; @ApiModelProperty("ä¿®æ¹è ") private Long updateUser; @ApiModelProperty("ä¿®æ¹æ¶é´") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime updateTime; @ApiModelProperty("ç§æ·id") private Long tenantId; } src/main/java/com/ruoyi/aftersalesservice/pojo/AfterSalesServiceFile.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,62 @@ package com.ruoyi.aftersalesservice.pojo; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.time.LocalDateTime; /** * <br> * å®åæå¡éä»¶å®ä½ç±» * </br> * * @author deslrey * @version 1.0 * @since 2026/03/02 11:13 */ @Data @TableName("after_sales_service_file") @ApiModel("å®åæå¡é件表") public class AfterSalesServiceFile { @TableId(type = IdType.AUTO) @ApiModelProperty("主é®") private Long id; @ApiModelProperty("å®åæå¡è®°å½ID") private Long serviceId; @ApiModelProperty("æä»¶åç§°") private String fileName; @ApiModelProperty("æä»¶è®¿é®å°å") private String fileUrl; @ApiModelProperty("æä»¶å¤§å°") private Long fileSize; @ApiModelProperty("æä»¶åç¼") private String fileSuffix; @ApiModelProperty("å 餿 å¿ï¼0代表åå¨ 1代表å é¤ï¼") private String delFlag; @ApiModelProperty("ä¸ä¼ è ") private Long createUser; @ApiModelProperty("å建æ¶é´") private LocalDateTime createTime; @ApiModelProperty("ä¿®æ¹è ") private Long updateUser; @ApiModelProperty("ä¿®æ¹æ¶é´") private LocalDateTime updateTime; @ApiModelProperty("ç§æ·id") private Long tenantId; } src/main/java/com/ruoyi/aftersalesservice/service/AfterSalesNearExpiryService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,26 @@ package com.ruoyi.aftersalesservice.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.aftersalesservice.pojo.AfterSalesNearExpiry; /** * <br> * 临æå®åç®¡çæ¥å£ * </br> * * @author deslrey * @version 1.0 * @since 2026/03/02 14:45 */ public interface AfterSalesNearExpiryService extends IService<AfterSalesNearExpiry> { void add(AfterSalesNearExpiry entity); void update(AfterSalesNearExpiry entity); void delete(Long[] ids); IPage<AfterSalesNearExpiry> listPage(Page<AfterSalesNearExpiry> page, AfterSalesNearExpiry entity); } src/main/java/com/ruoyi/aftersalesservice/service/AfterSalesServiceFileService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,26 @@ package com.ruoyi.aftersalesservice.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.aftersalesservice.pojo.AfterSalesServiceFile; import org.springframework.web.multipart.MultipartFile; import java.util.List; /** * <br> * å®åæå¡é件表æ¥å£ * </br> * * @author deslrey * @version 1.0 * @since 2026/03/02 11:18 */ public interface AfterSalesServiceFileService extends IService<AfterSalesServiceFile> { void fileUpload(MultipartFile file, Long afterSalesServiceId); IPage<AfterSalesServiceFile> fileList(Page<AfterSalesServiceFile> page, Long afterSalesServiceId); void delFile(Long fileId); } src/main/java/com/ruoyi/aftersalesservice/service/impl/AfterSalesNearExpiryServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,89 @@ package com.ruoyi.aftersalesservice.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.aftersalesservice.mapper.AfterSalesNearExpiryMapper; import com.ruoyi.aftersalesservice.pojo.AfterSalesNearExpiry; import com.ruoyi.aftersalesservice.service.AfterSalesNearExpiryService; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.SecurityUtils; import org.springframework.stereotype.Service; import java.time.LocalDateTime; import java.util.Arrays; /** * <br> * 临æå®åç®¡çæ¥å£å®ç°ç±» * </br> * * @author deslrey * @version 1.0 * @since 2026/03/02 14:46 */ @Service public class AfterSalesNearExpiryServiceImpl extends ServiceImpl<AfterSalesNearExpiryMapper, AfterSalesNearExpiry> implements AfterSalesNearExpiryService { @Override public void add(AfterSalesNearExpiry entity) { if (entity == null) { throw new ServiceException("æ·»å å¤±è´¥ï¼æ°æ®ä¸è½ä¸ºç©º"); } if (entity.getProductName() == null || entity.getProductName().trim().isEmpty()) { throw new ServiceException("产ååç§°ä¸è½ä¸ºç©º"); } if (entity.getBatchNumber() == null || entity.getBatchNumber().trim().isEmpty()) { throw new ServiceException("äº§åæ¹å·ä¸è½ä¸ºç©º"); } if (entity.getExpireDate() == null) { throw new ServiceException("ä¸´ææ¥æä¸è½ä¸ºç©º"); } entity.setId(null); entity.setStatus(1); entity.setDisposeUserId(null); entity.setDisposeNickName(null); entity.setDisDate(null); entity.setCreateTime(LocalDateTime.now()); entity.setCreateUser(SecurityUtils.getLoginUser().getUserId()); entity.setUpdateUser(null); entity.setUpdateTime(null); entity.setTenantId(SecurityUtils.getLoginUser().getTenantId()); int result = baseMapper.insert(entity); if (result <= 0) { throw new ServiceException("æ°å¢å¤±è´¥"); } } @Override public void update(AfterSalesNearExpiry entity) { if (entity == null || entity.getId() == null) { throw new ServiceException("æ´æ°å¤±è´¥ï¼æ°æ®ä¸å®æ´"); } entity.setStatus(2); entity.setUpdateUser(SecurityUtils.getLoginUser().getUserId()); entity.setUpdateTime(LocalDateTime.now()); int result = baseMapper.updateById(entity); if (result <= 0) { throw new ServiceException("æ´æ°å¤±è´¥"); } } @Override public void delete(Long[] ids) { if (ids == null || ids.length == 0) { throw new ServiceException("è¯·éæ©è¦å é¤çæ°æ®"); } int result = baseMapper.deleteBatchIds(Arrays.asList(ids)); if (result <= 0) { throw new ServiceException("å é¤å¤±è´¥"); } } @Override public IPage<AfterSalesNearExpiry> listPage(Page<AfterSalesNearExpiry> page, AfterSalesNearExpiry entity) { return baseMapper.listPage(page, entity); } } src/main/java/com/ruoyi/aftersalesservice/service/impl/AfterSalesServiceFileServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,137 @@ package com.ruoyi.aftersalesservice.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.aftersalesservice.mapper.AfterSalesServiceFileMapper; import com.ruoyi.aftersalesservice.pojo.AfterSalesService; import com.ruoyi.aftersalesservice.pojo.AfterSalesServiceFile; import com.ruoyi.aftersalesservice.service.AfterSalesServiceFileService; import com.ruoyi.aftersalesservice.service.AfterSalesServiceService; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.file.FileUtils; import org.apache.commons.io.FilenameUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.UUID; /** * <br> * å®åæå¡é件表æ¥å£å®ç°ç±» * </br> * * @author deslrey * @version 1.0 * @since 2026/03/02 11:19 */ @Service public class AfterSalesServiceFileServiceImpl extends ServiceImpl<AfterSalesServiceFileMapper, AfterSalesServiceFile> implements AfterSalesServiceFileService { @Autowired private AfterSalesServiceService afterSalesServiceService; @Value("${file.upload-dir}") private String uploadDir; @Override public void fileUpload(MultipartFile file, Long afterSalesServiceId) { if (file == null || file.isEmpty()) { throw new ServiceException("ä¸ä¼ æä»¶ä¸è½ä¸ºç©º"); } if (afterSalesServiceId == null) { throw new ServiceException("å®åæå¡IDä¸è½ä¸ºç©º"); } AfterSalesService afterSalesService = afterSalesServiceService.getById(afterSalesServiceId); if (afterSalesService == null) { throw new ServiceException("å®åæå¡è®°å½ä¸åå¨"); } Long currentTenantId = SecurityUtils.getLoginUser().getTenantId(); if (!currentTenantId.equals(afterSalesService.getTenantId())) { throw new ServiceException("æ ææä½è¯¥å®åæå¡è®°å½"); } try { String formalDir = uploadDir + LocalDate.now().format(DateTimeFormatter.ISO_LOCAL_DATE); Path formalDirPath = Paths.get(formalDir); // æ£å¼ç®å½åå¨ if (!Files.exists(formalDirPath)) { Files.createDirectories(formalDirPath); } // æ£å¼æä»¶åï¼å å«ä¸å¡ID + æ¶é´æ³ + UUIDï¼ String originalFilename = file.getOriginalFilename(); String fileExtension = FilenameUtils.getExtension(originalFilename); String formalFilename = afterSalesServiceId + "_" + System.currentTimeMillis() + "_" + UUID.randomUUID().toString().substring(0, 8) + (StringUtils.hasText(fileExtension) ? "." + fileExtension : ""); Path formalFilePath = formalDirPath.resolve(formalFilename); file.transferTo(formalFilePath.toFile()); AfterSalesServiceFile serviceFile = new AfterSalesServiceFile(); serviceFile.setServiceId(afterSalesServiceId); serviceFile.setFileName(originalFilename); serviceFile.setFileUrl(formalFilePath.toString()); serviceFile.setFileSize(file.getSize()); serviceFile.setFileSuffix(fileExtension); serviceFile.setDelFlag("0"); serviceFile.setCreateUser(SecurityUtils.getUserId()); serviceFile.setCreateTime(LocalDateTime.now()); serviceFile.setTenantId(currentTenantId); save(serviceFile); } catch (Exception e) { throw new ServiceException("æä»¶ä¸ä¼ 失败ï¼" + e.getMessage()); } } @Override public IPage<AfterSalesServiceFile> fileList(Page<AfterSalesServiceFile> page, Long afterSalesServiceId) { if (afterSalesServiceId == null) { throw new ServiceException("å®åæå¡IDä¸è½ä¸ºç©º"); } LambdaQueryWrapper<AfterSalesServiceFile> wrapper = new LambdaQueryWrapper<>(); wrapper.select( AfterSalesServiceFile::getId, AfterSalesServiceFile::getFileName, AfterSalesServiceFile::getFileUrl ); wrapper.eq(AfterSalesServiceFile::getServiceId, afterSalesServiceId) .eq(AfterSalesServiceFile::getDelFlag, "0") .orderByDesc(AfterSalesServiceFile::getCreateTime); return page(page, wrapper); } @Override public void delFile(Long fileId) { if (fileId == null) { throw new ServiceException("éä»¶IDä¸è½ä¸ºç©º"); } Long tenantId = SecurityUtils.getLoginUser().getTenantId(); AfterSalesServiceFile file = getById(fileId); if (file == null) { throw new ServiceException("éä»¶ä¸åå¨"); } if (!tenantId.equals(file.getTenantId())) { throw new ServiceException("æ æéå é¤"); } removeById(fileId); FileUtils.deleteFile(file.getFileUrl()); } } src/main/resources/mapper/aftersalesservice/AfterSalesNearExpiryMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,41 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.aftersalesservice.mapper.AfterSalesNearExpiryMapper"> <resultMap id="AfterSalesNearExpiryResultMap" type="com.ruoyi.aftersalesservice.pojo.AfterSalesNearExpiry"> <id property="id" column="id"/> <result property="productName" column="product_name"/> <result property="batchNumber" column="batch_number"/> <result property="expireDate" column="expire_date"/> <result property="stockQuantity" column="stock_quantity"/> <result property="customerName" column="customer_name"/> <result property="contactPhone" column="contact_phone"/> <result property="disRes" column="dis_res"/> <result property="disposeResult" column="dispose_result"/> <result property="status" column="status"/> <result property="disposeUserId" column="dispose_user_id"/> <result property="disposeNickName" column="dispose_nick_name"/> <result property="disDate" column="dis_date"/> <result property="createUser" column="create_user"/> <result property="createTime" column="create_time"/> <result property="updateUser" column="update_user"/> <result property="updateTime" column="update_time"/> <result property="tenantId" column="tenant_id"/> </resultMap> <select id="listPage" resultType="com.ruoyi.aftersalesservice.pojo.AfterSalesNearExpiry"> select * from after_sales_near_expiry where 1 = 1 <if test="req.expireDate != null"> AND expire_date = #{req.expireDate} </if> <if test="req.disDate != null"> AND dis_date = #{req.disDate} </if> <if test="req.status != null"> AND status = #{req.status} </if> order by create_time desc </select> </mapper> src/main/resources/mapper/aftersalesservice/AfterSalesServiceFileMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,21 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.aftersalesservice.mapper.AfterSalesServiceFileMapper"> <resultMap id="AfterSalesServiceFileResultMap" type="com.ruoyi.aftersalesservice.pojo.AfterSalesServiceFile"> <id property="id" column="id"/> <result property="serviceId" column="service_id"/> <result property="fileName" column="file_name"/> <result property="fileUrl" column="file_url"/> <result property="fileSize" column="file_size"/> <result property="fileSuffix" column="file_suffix"/> <result property="delFlag" column="del_flag"/> <result property="createUser" column="create_user"/> <result property="createTime" column="create_time"/> <result property="updateUser" column="update_user"/> <result property="updateTime" column="update_time"/> <result property="tenantId" column="tenant_id"/> </resultMap> </mapper>