产品最终版,薪资优化
This commit is contained in:
@@ -11,6 +11,7 @@ import com.gear.mat.service.IMatProductAdditionService;
|
||||
import lombok.Data;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import java.util.Map;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -37,6 +38,11 @@ public class MatProductAdditionController extends BaseController {
|
||||
List<MatProductAdditionVo> list = productAdditionService.listProductAddition(productAdditionBo);
|
||||
return TableDataInfo.build(list);
|
||||
}
|
||||
|
||||
@PostMapping("/listByProductIds")
|
||||
public R<Map<Long, List<MatProductAdditionVo>>> listByProductIds(@RequestBody List<Long> productIds) {
|
||||
return R.ok(productAdditionService.listByProductIds(productIds));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增产品属性附加表
|
||||
|
||||
@@ -23,8 +23,13 @@ import com.gear.common.utils.poi.ExcelUtil;
|
||||
import com.gear.mat.domain.vo.MatProductVo;
|
||||
import com.gear.mat.domain.vo.MatProductWithMaterialsVo;
|
||||
import com.gear.mat.domain.bo.MatProductBo;
|
||||
import com.gear.mat.domain.bo.MatProductImportBo;
|
||||
import com.gear.mat.service.IMatProductService;
|
||||
import com.gear.common.core.page.TableDataInfo;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.util.Collections;
|
||||
|
||||
/**
|
||||
* 产品基础信息
|
||||
@@ -48,6 +53,14 @@ public class MatProductController extends BaseController {
|
||||
return iMatProductService.queryPageListWithMaterials(bo, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询产品基础信息列表(不包含配料信息,用于列表页加速)
|
||||
*/
|
||||
@GetMapping("/listBase")
|
||||
public TableDataInfo<MatProductVo> listBase(MatProductBo bo, PageQuery pageQuery) {
|
||||
return iMatProductService.queryPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出产品基础信息列表
|
||||
*/
|
||||
@@ -58,6 +71,25 @@ public class MatProductController extends BaseController {
|
||||
ExcelUtil.exportExcel(list, "产品基础信息", MatProductVo.class, response);
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/importTemplate", method = {RequestMethod.GET, RequestMethod.POST})
|
||||
public void importTemplate(HttpServletResponse response) {
|
||||
ExcelUtil.exportExcel(Collections.singletonList(new MatProductImportBo()), "产品导入模板", MatProductImportBo.class, response);
|
||||
}
|
||||
|
||||
@Log(title = "产品基础信息", businessType = BusinessType.IMPORT)
|
||||
@PostMapping("/importData")
|
||||
public R<String> importData(@RequestPart("file") MultipartFile file,
|
||||
@RequestParam(value = "updateSupport", required = false, defaultValue = "false") Boolean updateSupport) throws Exception {
|
||||
if (file == null || file.isEmpty()) {
|
||||
return R.fail("导入文件不能为空");
|
||||
}
|
||||
try (InputStream is = file.getInputStream()) {
|
||||
List<MatProductImportBo> list = ExcelUtil.importExcel(is, MatProductImportBo.class);
|
||||
String msg = iMatProductService.importByExcel(list, updateSupport);
|
||||
return R.ok(msg);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取产品基础信息详细信息
|
||||
*
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.gear.mat.domain.bo;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 产品导入模板对象
|
||||
*/
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class MatProductImportBo {
|
||||
|
||||
@ExcelProperty("产品名称")
|
||||
private String productName;
|
||||
|
||||
@ExcelProperty("产品规格")
|
||||
private String spec;
|
||||
|
||||
@ExcelProperty("产品型号")
|
||||
private String model;
|
||||
|
||||
@ExcelProperty("产品单价")
|
||||
private BigDecimal unitPrice;
|
||||
|
||||
@ExcelProperty("备注")
|
||||
private String remark;
|
||||
}
|
||||
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.gear.mat.domain.MatProductAddition;
|
||||
import com.gear.mat.domain.bo.MatProductAdditionBo;
|
||||
import com.gear.mat.domain.vo.MatProductAdditionVo;
|
||||
import java.util.Map;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -46,4 +47,6 @@ public interface IMatProductAdditionService extends IService<MatProductAddition>
|
||||
boolean delProductAddition(Long addId);
|
||||
|
||||
boolean batchSaveProductAddition(Long productId, List<MatProductAdditionBo> items);
|
||||
|
||||
Map<Long, List<MatProductAdditionVo>> listByProductIds(List<Long> productIds);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.gear.mat.service;
|
||||
|
||||
import com.gear.mat.domain.MatProduct;
|
||||
import com.gear.mat.domain.bo.MatProductImportBo;
|
||||
import com.gear.mat.domain.vo.MatProductVo;
|
||||
import com.gear.mat.domain.vo.MatProductWithMaterialsVo;
|
||||
import com.gear.mat.domain.bo.MatProductBo;
|
||||
@@ -52,4 +53,9 @@ public interface IMatProductService {
|
||||
* 校验并批量删除产品基础信息信息
|
||||
*/
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
|
||||
/**
|
||||
* Excel导入产品基础信息
|
||||
*/
|
||||
String importByExcel(List<MatProductImportBo> list, Boolean updateSupport);
|
||||
}
|
||||
|
||||
@@ -10,7 +10,10 @@ import com.gear.mat.service.IMatProductAdditionService;
|
||||
import com.gear.common.utils.BeanCopyUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.HashMap;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -105,4 +108,26 @@ public class MatProductAdditionServiceImpl extends ServiceImpl<MatProductAdditio
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<Long, List<MatProductAdditionVo>> listByProductIds(List<Long> productIds) {
|
||||
if (productIds == null || productIds.isEmpty()) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
List<MatProductAddition> list = baseMapper.selectList(new LambdaQueryWrapper<MatProductAddition>()
|
||||
.in(MatProductAddition::getProductId, productIds)
|
||||
.eq(MatProductAddition::getDelFlag, 0)
|
||||
.orderByAsc(MatProductAddition::getProductId)
|
||||
.orderByAsc(MatProductAddition::getAddId));
|
||||
|
||||
Map<Long, List<MatProductAdditionVo>> result = new HashMap<>();
|
||||
for (MatProductAddition item : list) {
|
||||
if (item == null || item.getProductId() == null) {
|
||||
continue;
|
||||
}
|
||||
MatProductAdditionVo vo = BeanCopyUtils.copy(item, MatProductAdditionVo.class);
|
||||
result.computeIfAbsent(item.getProductId(), k -> new java.util.ArrayList<>()).add(vo);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import com.gear.common.core.domain.PageQuery;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.gear.mat.domain.bo.MatProductImportBo;
|
||||
import com.gear.mat.domain.bo.MatProductMaterialRelationBo;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -25,6 +26,7 @@ import com.gear.mat.domain.vo.MatProductMaterialRelationVo;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Collection;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.ArrayList;
|
||||
|
||||
@@ -210,4 +212,46 @@ public class MatProductServiceImpl implements IMatProductService {
|
||||
}
|
||||
return baseMapper.deleteBatchIds(ids) > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String importByExcel(List<MatProductImportBo> list, Boolean updateSupport) {
|
||||
if (list == null || list.isEmpty()) {
|
||||
return "导入数据为空";
|
||||
}
|
||||
int success = 0;
|
||||
int skipped = 0;
|
||||
for (MatProductImportBo row : list) {
|
||||
String productName = row == null ? null : StringUtils.trim(row.getProductName());
|
||||
String spec = row == null ? null : StringUtils.trim(row.getSpec());
|
||||
String model = row == null ? null : StringUtils.trim(row.getModel());
|
||||
if (StringUtils.isBlank(productName)) {
|
||||
skipped++;
|
||||
continue;
|
||||
}
|
||||
LambdaQueryWrapper<MatProduct> lqw = Wrappers.lambdaQuery();
|
||||
lqw.eq(MatProduct::getProductName, productName)
|
||||
.eq(MatProduct::getSpec, Objects.toString(spec, ""))
|
||||
.eq(MatProduct::getModel, Objects.toString(model, ""))
|
||||
.last("limit 1");
|
||||
MatProduct exist = baseMapper.selectOne(lqw);
|
||||
if (exist != null && !Boolean.TRUE.equals(updateSupport)) {
|
||||
skipped++;
|
||||
continue;
|
||||
}
|
||||
|
||||
MatProduct data = exist == null ? new MatProduct() : exist;
|
||||
data.setProductName(productName);
|
||||
data.setSpec(spec);
|
||||
data.setModel(model);
|
||||
data.setUnitPrice(row.getUnitPrice());
|
||||
data.setRemark(row.getRemark());
|
||||
if (exist == null) {
|
||||
baseMapper.insert(data);
|
||||
} else {
|
||||
baseMapper.updateById(data);
|
||||
}
|
||||
success++;
|
||||
}
|
||||
return "导入完成,成功 " + success + " 条,跳过 " + skipped + " 条";
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user