lyh
2025-06-25 4864c87d65e797d2ecd827b1eca9d46aec0950aa
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/ToolsClassifyServiceImpl.java
@@ -3,23 +3,44 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import liquibase.pro.packaged.Q;
import org.apache.poi.ss.usermodel.*;
import org.apache.shiro.SecurityUtils;
import org.jeecg.common.api.vo.CommonGenericTree;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.system.vo.DictModel;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.common.util.ImportExcelUtil;
import org.jeecg.common.util.StrUtils;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.system.mapper.SysDictItemMapper;
import org.jeecg.modules.system.mapper.SysDictMapper;
import org.jeecg.modules.tms.entity.ToolsClassify;
import org.jeecg.modules.tms.mapper.ToolsClassifyMapper;
import org.jeecg.modules.tms.service.IToolsClassifyService;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.tools.Tool;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.io.IOException;
import java.io.InputStream;
import java.util.*;
/**
 * @Description: tms_tools_classify
@@ -30,6 +51,14 @@
@Service
public class ToolsClassifyServiceImpl extends ServiceImpl<ToolsClassifyMapper, ToolsClassify> implements IToolsClassifyService {
    @Value("${jeecg.path.upload}")
    private String upLoadPath;
    @Autowired
    private SysDictMapper sysDictMapper;
    @Autowired
    private SysDictItemMapper sysDictItemMapper;
    @Override
    public IPage<ToolsClassify> queryPageList(Page<ToolsClassify> page, Map<String, String[]> parameterMap) {
        QueryWrapper<ToolsClassify> queryWrapper = Wrappers.query();
@@ -49,7 +78,7 @@
        return this.baseMapper.queryPageList(page, queryWrapper);
    }
    public List<CommonGenericTree> loadTree() {
        List<ToolsClassify> toolsClassifyList = this.list();
        List<ToolsClassify> toolsClassifyList = this.lambdaQuery().orderByAsc(ToolsClassify::getId).list();
        List<CommonGenericTree> commonGenericTreeList = loadTree(toolsClassifyList);
        return commonGenericTreeList;
    }
@@ -58,54 +87,39 @@
        @SuppressWarnings("unused") ToolsClassify toolsClassify = new ToolsClassify();
        List<CommonGenericTree> list = new ArrayList<>();
        Map<String, CommonGenericTree> map = new HashMap<>();
        CommonGenericTree<ToolsClassify> node = new CommonGenericTree<>();
        node.setKey("-1");
        node.setTitle("工具分类");
        node.setRField1("");
        node.setRField2("");
        node.setEntity(new ToolsClassify().setId("-1").setClassifyId("0").setTypeName("工具分类").setLeafFlag("2"));
        list.add(node);
        if (CollectionUtils.isNotEmpty(toolsClassifyList)) {
            CommonGenericTree<ToolsClassify> tcNode;
            CommonGenericTree<ToolsClassify> childNode;
            for (ToolsClassify tc : toolsClassifyList) {
                if (StrUtils.isBlankOrNull(tc.getParentId()) || tc.getParentId().equals("-1")) {
                ToolsClassify child = tc;
                if (StrUtils.isBlankOrNull(tc.getParentId())) {
                    tcNode = new CommonGenericTree<>();
                    tcNode.setKey(tc.getId());
                    tcNode.setTitle(tc.getClassifyId() + "/" + tc.getTypeName());
                    tcNode.setParentId(node.getKey());
                    tcNode.setIcon("");
                    tcNode.setType(1);
                    tcNode.setValue(tc.getId());
                    tcNode.setDisabled(CommonConstant.STATUS_0.equals(tc.getStatus()) ? true : false);
                    tcNode.setRField1(tc.getClassifyId());
                    tcNode.setRField2(getBaseParent(tc.getId(), 0).getClassifyId());
                    //tcNode.setRField2(getBaseParent(tc.getId(), 0).getClassifyId());
                    tcNode.setEntity(tc);
                    node.addChildren(tcNode);
                    list.add(tcNode);
                    map.put(tc.getId(), tcNode);
                }
            }
            CommonGenericTree<ToolsClassify> childNode;
            for (ToolsClassify tc : toolsClassifyList) {
                ToolsClassify child = tc;
                if (map.containsKey(child.getParentId())) {
                    if (StrUtils.isBlankOrNull(tc.getParentId()) || tc.getParentId().equals("-1")) {
                        toolsClassify = tc;
                    } else {
                        tcNode = map.get(child.getParentId());
                        childNode = new CommonGenericTree<>();
                        childNode.setKey(tc.getId());
                        childNode.setTitle(tc.getClassifyId() + "/" + tc.getTypeName());
                        childNode.setParentId(tc.getParentId());
                        childNode.setIcon("");
                        childNode.setType(0);
                        childNode.setValue(tc.getId());
                        childNode.setDisabled(CommonConstant.STATUS_0.equals(tc.getStatus()) ? true : false);
                        childNode.setRField1(tc.getClassifyId());
                        childNode.setRField2(getBaseParent(tc.getId(), 0).getClassifyId());
                        childNode.setEntity(tc);
                        tcNode.addChildren(childNode);
                        map.put(child.getId(), childNode);
                    }
                } else {
                    tcNode = map.get(child.getParentId());
                    childNode = new CommonGenericTree<>();
                    childNode.setKey(tc.getId());
                    childNode.setTitle(tc.getClassifyId() + "/" + tc.getTypeName());
                    childNode.setParentId(tc.getParentId());
                    childNode.setIcon("");
                    childNode.setType(0);
                    childNode.setValue(tc.getId());
                    childNode.setDisabled(CommonConstant.STATUS_0.equals(tc.getStatus()) ? true : false);
                    childNode.setRField1(tc.getClassifyId());
                    //childNode.setRField2(getBaseParent(tc.getId(), 0).getClassifyId());
                    childNode.setEntity(tc);
                    tcNode.addChildren(childNode);
                    map.put(child.getId(), childNode);
                }
            }
        }
@@ -124,4 +138,164 @@
        }
        return toolsClassify;
    }
    @Override
    public ModelAndView toolClassifyExport(HttpServletRequest request, ToolsClassify toolsClassify, Class<ToolsClassify> clazz, String title) {
// Step.1 组装查询条件
        QueryWrapper<ToolsClassify> queryWrapper = new QueryWrapper<>();
        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
        // 过滤选中数据
        String selections = request.getParameter("selections");
        if (oConvertUtils.isNotEmpty(selections)) {
            List<String> selectionList = Arrays.asList(selections.split(","));
            queryWrapper.in("t.id",selectionList);
        }
        // Step.2 获取导出数据
        List<ToolsClassify> exportList = this.baseMapper.queryExportList(queryWrapper);
        // Step.3 AutoPoi 导出Excel
        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
        //此处设置的filename无效 ,前端会重更新设置一下
        mv.addObject(NormalExcelConstants.FILE_NAME, title);
        mv.addObject(NormalExcelConstants.CLASS, clazz);
        //update-begin--Author:liusq  Date:20210126 for:图片导出报错,ImageBasePath未设置--------------------
        ExportParams exportParams=new ExportParams(title + "报表", "导出人:" + sysUser.getRealname(), title);
        exportParams.setImageBasePath(upLoadPath);
        //update-end--Author:liusq  Date:20210126 for:图片导出报错,ImageBasePath未设置----------------------
        mv.addObject(NormalExcelConstants.PARAMS,exportParams);
        mv.addObject(NormalExcelConstants.DATA_LIST, exportList);
        return mv;
    }
    @Override
    public Result<?> toolClassifyImportExcel(HttpServletRequest request, HttpServletResponse response) throws IOException {
        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
        // 获取上传文件对象
        MultipartFile file = multipartRequest.getFile("file");
        //错误信息
        List<String> errorMessage = new ArrayList<>();
        int successLines = 0, errorLines = 0;
        try (InputStream fis = file.getInputStream()) {
            Workbook workbook = WorkbookFactory.create(fis);
            // 获取第一个工作表
            Sheet sheet = workbook.getSheetAt(0);
            for(Row row : sheet) {
                int rowNum = row.getRowNum()+1;
                ToolsClassify newToolsClassify = new ToolsClassify();
                if (row.getRowNum() == 0)
                    continue;
                Cell numCell = row.getCell(0);
                String num = numCell.getStringCellValue();
                Cell nameCell = row.getCell(1);
                String name = nameCell.getStringCellValue();
                Cell parentNumCell = row.getCell(2);
                String parentNum = parentNumCell.getStringCellValue();
                Cell seqCell = row.getCell(3);
                String seq = seqCell.getStringCellValue();
                Cell leafFlagCell = row.getCell(4);
                String leafFlag = leafFlagCell.getStringCellValue();
                Cell paraTypeFlagCell = row.getCell(5);
                String paraTypeFlag = paraTypeFlagCell.getStringCellValue();
                //转义是否为叶子节点
                if("是".equals(leafFlag)){
                    leafFlag = "1";
                }else if("否".equals(leafFlag)){
                    leafFlag = "2";
                }else {
                    errorMessage.add("第"+rowNum+"行,是否为叶子节点填写错误,请填写‘是’或’否‘");
                    errorLines++;
                    continue;
                }
                if(StringUtils.isBlank(num)){
                    errorMessage.add("第"+rowNum+"行,分类编码不能为空");
                    errorLines++;
                    continue;
                }
                if(StringUtils.isBlank(name)){
                    errorMessage.add("第"+rowNum+"行,分类名称不能为空");
                    errorLines++;
                    continue;
                    //判断是否有上级分类
                }
                //判断参数模板是否存在
                if(StringUtils.isNotBlank(paraTypeFlag)){
                    List<DictModel> dictList = sysDictMapper.queryDictItemValueByCodeAndText("tool_para_type",paraTypeFlag);
                    if(CollectionUtils.isNotEmpty(dictList)){
                        paraTypeFlag = dictList.get(0).getValue();
                    }else {
                        errorMessage.add("第"+rowNum+"行,参数模板不存在");
                        errorLines++;
                        continue;
                    }
                }
                if(StringUtils.isNotBlank(parentNum)){
                    ToolsClassify toolsClassify = this.lambdaQuery()
                            .eq(ToolsClassify::getClassifyId,parentNum)
                            .eq(ToolsClassify::getLeafFlag,"2").one();
                    if(toolsClassify == null){
                        errorMessage.add("第"+rowNum+"行,分类编码为"+num+"的数据的上级分类编号不存在或为叶子节点");
                        errorLines++;
                    }else {
                        //判断编码是否重复,重复的进行更新
                        ToolsClassify tools = this.lambdaQuery().eq(ToolsClassify::getClassifyId,num).one();
                        if(tools != null){
                            tools.setClassifyId(num)
                                    .setTypeName(name)
                                    .setStatus("1")
                                    .setLeafFlag(leafFlag)
                                    .setEncodingType("3")
                                    .setSeq(seq)
                                    .setParentId(toolsClassify.getId())
                                    .setParaTypeFlag(paraTypeFlag);
                            this.updateById(tools);
                        }else{
                            newToolsClassify.setClassifyId(num)
                                    .setTypeName(name)
                                    .setStatus("1")
                                    .setLeafFlag(leafFlag)
                                    .setEncodingType("3")
                                    .setSeq(seq)
                                    .setParentId(toolsClassify.getId())
                                    .setParaTypeFlag(paraTypeFlag);
                            this.save(newToolsClassify);
                        }
                        successLines++;
                    }
                    //如果没填写上级分类编号,则新增到根节点
                }else {
                    //判断编码是否重复,重复的进行更新
                    ToolsClassify tools = this.lambdaQuery().eq(ToolsClassify::getClassifyId,num).one();
                    if(tools != null){
                        tools.setClassifyId(num)
                                .setTypeName(name)
                                .setStatus("1")
                                .setLeafFlag(leafFlag)
                                .setEncodingType("3")
                                .setSeq(seq)
                                .setParentId("-1")
                                .setParaTypeFlag(paraTypeFlag);
                        this.updateById(tools);
                    }else {
                        newToolsClassify.setClassifyId(num)
                                .setTypeName(name)
                                .setStatus("1")
                                .setParentId("-1")
                                .setSeq(seq)
                                .setLeafFlag(leafFlag)
                                .setEncodingType("3")
                                .setParaTypeFlag(paraTypeFlag);
                        this.save(newToolsClassify);
                    }
                    successLines++;
                }
            }
        }catch (IOException e) {
            e.printStackTrace();
        }
        return ImportExcelUtil.imporReturnRes(errorLines,successLines,errorMessage);
    }
}