zouyu
2023-09-27 75b2904fbaf4fab6a9fb3baf065d2c927cc7a7a2
base-server/src/main/java/com/yuanchu/mom/service/impl/MbomModelServiceImpl.java
@@ -1,17 +1,32 @@
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 java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -25,6 +40,9 @@
    @Resource
    MbomModelMapper mbomModelMapper;
    @Autowired
    private TechnicalModelService technicalModelService;
    //查询物料清单维护列表-->右边展示该工艺所需要的原材料
@@ -61,5 +79,124 @@
    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;
    }
}