package com.yuanchu.mom.service.impl;
|
|
import com.alibaba.excel.EasyExcel;
|
import com.alibaba.excel.ExcelWriter;
|
import com.alibaba.excel.support.ExcelTypeEnum;
|
import com.alibaba.excel.write.metadata.WriteSheet;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.yuanchu.mom.mapper.MbomModelMapper;
|
import com.yuanchu.mom.pojo.MbomModel;
|
import com.yuanchu.mom.pojo.dto.MbomModelDto;
|
import com.yuanchu.mom.pojo.dto.MbomModelDto2;
|
import com.yuanchu.mom.service.MbomModelService;
|
import com.yuanchu.mom.service.TechnicalModelService;
|
import com.yuanchu.mom.utils.StringUtils;
|
import com.yuanchu.mom.utils.easyexcel.CustemHandler;
|
import com.yuanchu.mom.utils.easyexcel.EasyExcelUtils;
|
import com.yuanchu.mom.utils.easyexcel.ExcelMergeStrategy;
|
import com.yuanchu.mom.utils.easyexcel.converter.LocalDateConverter;
|
import com.yuanchu.mom.utils.easyexcel.template.ExcelMBomTemplate;
|
import org.apache.commons.collections4.CollectionUtils;
|
import org.apache.commons.collections4.map.HashedMap;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import javax.annotation.Resource;
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.IOException;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
/**
|
* 物料清单维护表(MbomModel)表服务实现类
|
*
|
* @author zss
|
* @since 2023-08-30 09:17:26
|
*/
|
@Service
|
public class MbomModelServiceImpl extends ServiceImpl<MbomModelMapper, MbomModel> implements MbomModelService {
|
|
@Resource
|
MbomModelMapper mbomModelMapper;
|
|
@Autowired
|
private TechnicalModelService technicalModelService;
|
|
|
//查询物料清单维护列表-->右边展示该工艺所需要的原材料
|
@Override
|
public List<Map<String, Object>> selectAllMbom(Integer id) {
|
return mbomModelMapper.selectAllMbom(id);
|
}
|
|
//新增物料清单维护表
|
@Override
|
public void addMbom(MbomModelDto mbomModelDto) {
|
List<MbomModelDto2> mbomModelDto2List = mbomModelDto.getMbomModelDto2List();
|
List<MbomModel> mbomModelList = mbomModelDto2List.stream().map(mbomModelDto2 -> {
|
MbomModel mbomModel = new MbomModel();
|
mbomModel.setTechTemId(mbomModelDto.getTechTemId());
|
BeanUtils.copyProperties(mbomModelDto2, mbomModel);
|
return mbomModel;
|
}).collect(Collectors.toList());
|
//批量添加
|
saveBatch(mbomModelList);
|
}
|
|
//删除
|
@Override
|
public void delMbomById(Integer id) {
|
MbomModel mbomModel = new MbomModel();
|
mbomModel.setId(id);
|
mbomModel.setState(0);
|
mbomModelMapper.updateById(mbomModel);
|
}
|
|
//批量删除
|
@Override
|
public void delAllMbom(String ids) {
|
mbomModelMapper.delAllMbom(ids);
|
}
|
|
@Override
|
public void downloadTemplate(Map<String, Object> map,HttpServletResponse response) {
|
try{
|
List<String> typeList = getTypeList(map);
|
ExcelWriter excelWriter = EasyExcel.write(EasyExcelUtils.getResponse(response,"物料清单导入模板").getOutputStream())
|
.excelType(ExcelTypeEnum.XLS)
|
.build();
|
// 导出多个sheet页
|
for (int i = 0; i < typeList.size(); i++) {
|
WriteSheet sheet = EasyExcel.writerSheet(i, typeList.get(i))
|
.head(ExcelMBomTemplate.class)
|
.registerConverter(new LocalDateConverter())
|
.registerWriteHandler(new CustemHandler())
|
.registerWriteHandler(EasyExcelUtils.getStyleStrategy())
|
.build();
|
excelWriter.write(null, sheet);
|
}
|
// 关闭 ExcelWriter,完成导出
|
excelWriter.finish();
|
}catch (IOException e) {
|
e.printStackTrace();
|
} finally {
|
try {
|
response.getOutputStream().close();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
}
|
|
@Override
|
public void exportMBom(Map<String, Object> map,HttpServletResponse response) {
|
try{
|
//类型列表
|
List<String> typeList = getTypeList(map);
|
//sheet数据
|
Map<String,List<ExcelMBomTemplate>> exportListByType = new HashedMap<>();
|
typeList.forEach((type)->{
|
List<Map<String,Object>> techTemList =
|
technicalModelService.selectAllTechTem(type, "");
|
List<ExcelMBomTemplate> list = new ArrayList<>();
|
techTemList.forEach(tech -> {
|
String father = "";
|
if(StringUtils.isNotEmpty(tech.get("name").toString())){
|
father = tech.get("name").toString();
|
}
|
if(StringUtils.isNotEmpty(tech.get("children").toString())){
|
List<Map<String,Object>> childrenList = (List<Map<String, Object>>) tech.get("children");
|
String finalFather = father;
|
childrenList.forEach(c -> {
|
String name = c.get("name").toString();
|
Integer id = Integer.parseInt(c.get("id").toString());
|
List<Map<String, Object>> mbom = mbomModelMapper.selectAllMbom(id);
|
if(CollectionUtils.isNotEmpty(mbom)){
|
mbom.forEach(m->{
|
ExcelMBomTemplate temp = new ExcelMBomTemplate();
|
temp.setFather(finalFather);
|
temp.setName(name);
|
temp.setMaterialName(m.get("name").toString());
|
temp.setUnit(m.get("unit").toString());
|
list.add(temp);
|
});
|
}
|
});
|
}
|
});
|
exportListByType.put(type,list);
|
});
|
ExcelWriter excelWriter = EasyExcel.write(
|
EasyExcelUtils.getResponse(response, "物料清单导出").getOutputStream()
|
)
|
.excelType(ExcelTypeEnum.XLS)
|
.build();
|
// 导出多个sheet页
|
for (int i = 0; i < typeList.size(); i++) {
|
String type = typeList.get(i);
|
List<String> fathers = exportListByType.get(type).stream()
|
.map(ExcelMBomTemplate::getFather).collect(Collectors.toList());
|
List<String> names = exportListByType.get(type).stream()
|
.map(ExcelMBomTemplate::getName).collect(Collectors.toList());
|
WriteSheet sheet = EasyExcel.writerSheet(i, typeList.get(i))
|
.head(ExcelMBomTemplate.class)
|
.registerConverter(new LocalDateConverter())
|
.registerWriteHandler(new CustemHandler())
|
.registerWriteHandler(EasyExcelUtils.getStyleStrategy())
|
.registerWriteHandler(new ExcelMergeStrategy(fathers,0))
|
.registerWriteHandler(new ExcelMergeStrategy(names,1))
|
.build();
|
excelWriter.write(exportListByType.get(type), sheet);
|
}
|
// 关闭 ExcelWriter,完成导出
|
excelWriter.finish();
|
}catch (IOException e) {
|
e.printStackTrace();
|
} finally {
|
try {
|
response.getOutputStream().close();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
|
}
|
|
/**
|
* 获取类型列表
|
* @param map
|
* @return
|
*/
|
private List<String> getTypeList(Map<String, Object> map){
|
if(!map.isEmpty()){
|
String arrStr = String.valueOf(map.get("typeList"));
|
String[] strings = arrStr.split(",");
|
return Arrays.asList(strings);
|
}
|
return null;
|
}
|
|
}
|