| src/main/java/com/ruoyi/basic/controller/ProductController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/basic/dto/ProductModelExportDto.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/basic/service/IProductModelService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/ruoyi/basic/controller/ProductController.java
@@ -5,10 +5,12 @@ 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.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; @@ -23,6 +25,7 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.util.List; @RestController @@ -124,9 +127,20 @@ /** * å¯¼å ¥äº§å */ @PostMapping("/import") @Log(title = "å¯¼å ¥äº§å",businessType = BusinessType.IMPORT) @PostMapping("import") public AjaxResult importProduct(MultipartFile file) { return AjaxResult.success(productModelService.importProduct(file)); public AjaxResult importProductModel(@RequestParam("file") MultipartFile file, Integer productId) { return productModelService.importProductModel(file, productId); } /** * 产åå¯¼å ¥æ¨¡æ¿ */ @GetMapping("/export") @ApiOperation("产åå¯¼å ¥æ¨¡æ¿") @Log(title = "产åå¯¼å ¥æ¨¡æ¿", businessType = BusinessType.EXPORT) public void importProduct(HttpServletResponse response) { ExcelUtil<ProductModelExportDto> excelUtil = new ExcelUtil<>(ProductModelExportDto.class); excelUtil.importTemplateExcel(response, "产åè§æ ¼å¯¼å ¥æ¨¡æ¿"); } } src/main/java/com/ruoyi/basic/dto/ProductModelExportDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,24 @@ package com.ruoyi.basic.dto; import com.ruoyi.framework.aspectj.lang.annotation.Excel; import lombok.Data; /** * <br> * 产åå¯¼åºæ¨¡æ¿ * </br> * * @author deslrey * @version 1.0 * @since 2026/02/10 14:39 */ @Data public class ProductModelExportDto { @Excel(name = "è§æ ¼åå·") private String model; @Excel(name = "åä½") private String unit; } src/main/java/com/ruoyi/basic/service/IProductModelService.java
@@ -6,6 +6,7 @@ import com.ruoyi.basic.dto.ProductDto; import com.ruoyi.basic.dto.ProductModelDto; import com.ruoyi.basic.pojo.ProductModel; import com.ruoyi.framework.web.domain.AjaxResult; import org.springframework.web.multipart.MultipartFile; import java.util.List; @@ -33,5 +34,5 @@ */ IPage<ProductModel> modelListPage(Page page , ProductDto productDto); Boolean importProduct(MultipartFile file); AjaxResult importProductModel(MultipartFile file, Integer productId); } src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java
@@ -12,17 +12,17 @@ import com.ruoyi.basic.pojo.Product; import com.ruoyi.basic.pojo.ProductModel; import com.ruoyi.basic.service.IProductModelService; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.common.utils.uuid.IdUtils; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.sales.mapper.SalesLedgerProductMapper; import com.ruoyi.sales.pojo.SalesLedgerProduct; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.Arrays; import java.util.List; import java.util.Map; @@ -55,7 +55,6 @@ } @Override public int delProductModel(Long[] ids) { List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(new QueryWrapper<SalesLedgerProduct>() @@ -76,6 +75,7 @@ /** * æ ¹æ®idæ¥è¯¢äº§åè§æ ¼å页æ¥è¯¢ * * @param page * @param productDto * @return @@ -88,24 +88,43 @@ } @Override public Boolean importProduct(MultipartFile file) { @Transactional(rollbackFor = Exception.class) public AjaxResult importProductModel(MultipartFile file, Integer productId) { if (productId == null) { return AjaxResult.error("请å éæ©äº§ååå¯¼å ¥è§æ ¼åå·"); } Product product = productMapper.selectById(productId); if (product == null) { return AjaxResult.error("éæ©ç产åä¸åå¨"); } try { ExcelUtil<ProductModel> productModelExcelUtil = new ExcelUtil<>(ProductModel.class); List<ProductModel> productModelList = productModelExcelUtil.importExcel(file.getInputStream()); Map<String, List<ProductModel>> collect = productModelList.stream().collect(Collectors.groupingBy(ProductModel::getProductName)); collect.forEach((k,v)->{ Product product = productMapper.selectOne(new LambdaQueryWrapper<Product>().eq(Product::getProductName, k).last("LIMIT 1")); if (product != null) { v.forEach(productModel -> { productModel.setProductId(product.getId()); }); this.saveOrUpdateBatch(v); if (productModelList == null || productModelList.isEmpty()) { return AjaxResult.error("å¯¼å ¥æ°æ®ä¸è½ä¸ºç©º"); } }); return true; for (int i = 0; i < productModelList.size(); i++) { ProductModel item = productModelList.get(i); int rowNum = i + 2; if (StringUtils.isEmpty(item.getModel())) { return AjaxResult.error("第 " + rowNum + " è¡å¯¼å ¥å¤±è´¥: [è§æ ¼åå·] ä¸è½ä¸ºç©º"); } if (StringUtils.isEmpty(item.getUnit())) { return AjaxResult.error("第 " + rowNum + " è¡å¯¼å ¥å¤±è´¥: [åä½] ä¸è½ä¸ºç©º"); } item.setProductId(product.getId()); } saveOrUpdateBatch(productModelList); return AjaxResult.success("æåå¯¼å ¥ " + productModelList.size() + " æ¡æ°æ®"); }catch (Exception e) { e.printStackTrace(); log.error("å¯¼å ¥äº§åè§æ ¼å¼å¸¸", e); return AjaxResult.error("å¯¼å ¥å¤±è´¥"); } return false; } }