| src/main/java/com/ruoyi/basic/controller/ProductController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/basic/service/IProductModelService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/basic/service/IProductService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/resources/static/产品导入模板.xlsx | 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/ruoyi/basic/controller/ProductController.java
@@ -5,13 +5,11 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.basic.dto.ProductDto; import com.ruoyi.basic.dto.ProductModelDto; import com.ruoyi.basic.dto.ProductModelExportDto; import com.ruoyi.basic.dto.ProductTreeDto; import com.ruoyi.basic.pojo.ProductModel; import com.ruoyi.basic.service.IProductModelService; import com.ruoyi.basic.service.IProductService; import com.ruoyi.basic.vo.ProductModelVo; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.framework.aspectj.lang.annotation.Log; import com.ruoyi.framework.aspectj.lang.enums.BusinessType; import com.ruoyi.framework.web.controller.BaseController; @@ -125,8 +123,8 @@ */ @PostMapping("/import") @Log(title = "å¯¼å ¥äº§å", businessType = BusinessType.IMPORT) public AjaxResult importProductModel(@RequestParam("file") MultipartFile file, Integer productId) { return productModelService.importProductModel(file, productId); public AjaxResult importProductModel(@RequestParam("file") MultipartFile file) { return productModelService.importProductModel(file); } /** @@ -136,7 +134,6 @@ @Operation(summary = "产åå¯¼å ¥æ¨¡æ¿") @Log(title = "产åå¯¼å ¥æ¨¡æ¿", businessType = BusinessType.EXPORT) public void importProduct(HttpServletResponse response) { ExcelUtil<ProductModelExportDto> excelUtil = new ExcelUtil<>(ProductModelExportDto.class); excelUtil.importTemplateExcel(response, "产åè§æ ¼å¯¼å ¥æ¨¡æ¿"); productService.exportImportTemplate(response); } } src/main/java/com/ruoyi/basic/service/IProductModelService.java
@@ -34,5 +34,5 @@ */ IPage<ProductModel> modelListPage(Page page , ProductDto productDto); AjaxResult importProductModel(MultipartFile file, Integer productId); AjaxResult importProductModel(MultipartFile file); } src/main/java/com/ruoyi/basic/service/IProductService.java
@@ -8,11 +8,12 @@ import com.ruoyi.basic.pojo.Product; import com.ruoyi.basic.pojo.ProductModel; import com.ruoyi.basic.vo.ProductModelVo; import jakarta.servlet.http.HttpServletResponse; import java.util.List; public interface IProductService extends IService<Product> { int addOrEditProduct(ProductDto productDto); int delProductByIds(Long[] ids); @@ -20,4 +21,6 @@ List<ProductTreeDto> selectProductList(ProductDto productDto); IPage<ProductModelVo> listPageProductModel(Page<ProductModelVo> page, ProductModel productModel); void exportImportTemplate(HttpServletResponse response); } src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java
@@ -162,22 +162,23 @@ String parentName = trimToNull(row.getProductParentName()); String categoryName = trimToNull(row.getProductCategoryName()); String productName = trimToNull(row.getProductName()); if (categoryName == null) { throw new ServiceException("第 " + rowNum + " è¡ [产å大类] ä¸è½ä¸ºç©º"); } if (productName == null) { throw new ServiceException("第 " + rowNum + " è¡ [产ååç§°] ä¸è½ä¸ºç©º"); } String path = String.valueOf(topId); Long currentParentId = topId; Long parentNodeId = topId; if (parentName != null) { path = path + ">" + parentName; currentParentId = ensureChildNode(nodeCache, path, currentParentId, parentName); parentNodeId = ensureChildNode(nodeCache, path, parentNodeId, parentName); } if (categoryName != null) { path = path + ">" + categoryName; currentParentId = ensureChildNode(nodeCache, path, currentParentId, categoryName); } path = path + ">" + categoryName; Long categoryId = ensureChildNode(nodeCache, path, parentNodeId, categoryName); path = path + ">" + productName; Long leafId = ensureChildNode(nodeCache, path, currentParentId, productName); Long leafId = ensureChildNode(nodeCache, path, categoryId, productName); String code = trimToNull(row.getProductCode()); if (code == null) { src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java
@@ -15,15 +15,23 @@ import com.ruoyi.basic.vo.ProductModelVo; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.bean.BeanUtils; import jakarta.servlet.http.HttpServletResponse; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URLEncoder; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @Service @AllArgsConstructor @Slf4j public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> implements IProductService { private ProductMapper productMapper; @@ -130,16 +138,40 @@ } @Override public void exportImportTemplate(HttpServletResponse response) { String templatePath = "static/产åå¯¼å ¥æ¨¡æ¿.xlsx"; try (InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(templatePath)) { if (inputStream == null) { throw new FileNotFoundException("æ¨¡æ¿æä»¶ä¸åå¨ï¼" + templatePath); } response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setCharacterEncoding("utf-8"); String fileName = URLEncoder.encode("产åå¯¼å ¥æ¨¡æ¿.xlsx", "utf-8").replaceAll("\\+", "%20"); response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName); try (OutputStream outputStream = response.getOutputStream()) { byte[] buffer = new byte[1024]; int len; while ((len = inputStream.read(buffer)) > 0) { outputStream.write(buffer, 0, len); } outputStream.flush(); } } catch (IOException e) { log.error("导åºäº§åå¯¼å ¥æ¨¡æ¿å¤±è´¥", e); try { response.getWriter().write("模æ¿å¯¼åºå¤±è´¥ï¼" + e.getMessage()); } catch (IOException ex) { log.error("ååºè¾åºé误", ex); } } } @Override public int delProductByIds(Long[] ids) { // 1. å é¤å表 product_model ä¸å ³èçæ°æ® LambdaQueryWrapper<ProductModel> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(ProductModel::getProductId, ids); productModelMapper.delete(queryWrapper); // 2. å é¤ä¸»è¡¨ product æ°æ® int deleteCount = productMapper.deleteBatchIds(Arrays.asList(ids)); return deleteCount; return productMapper.deleteBatchIds(Arrays.asList(ids)); } } src/main/resources/static/²úÆ·µ¼ÈëÄ£°å.xlsxBinary files differ