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 implements MbomModelService { @Resource MbomModelMapper mbomModelMapper; @Autowired private TechnicalModelService technicalModelService; //查询物料清单维护列表-->右边展示该工艺所需要的原材料 @Override public List> selectAllMbom(Integer id) { return mbomModelMapper.selectAllMbom(id); } //新增物料清单维护表 @Override public void addMbom(MbomModelDto mbomModelDto) { List mbomModelDto2List = mbomModelDto.getMbomModelDto2List(); List 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 map,HttpServletResponse response) { try{ List 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 map,HttpServletResponse response) { try{ //类型列表 List typeList = getTypeList(map); //sheet数据 Map> exportListByType = new HashedMap<>(); typeList.forEach((type)->{ List> techTemList = technicalModelService.selectAllTechTem(type, ""); List 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> childrenList = (List>) tech.get("children"); String finalFather = father; childrenList.forEach(c -> { String name = c.get("name").toString(); Integer id = Integer.parseInt(c.get("id").toString()); List> 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 fathers = exportListByType.get(type).stream() .map(ExcelMBomTemplate::getFather).collect(Collectors.toList()); List 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 getTypeList(Map map){ if(!map.isEmpty()){ String arrStr = String.valueOf(map.get("typeList")); String[] strings = arrStr.split(","); return Arrays.asList(strings); } return null; } }