cuijian
2025-05-09 621f92b7cbebff393fcdf58736c30349d864112e
工具分类导出、工具信息等
已添加6个文件
已修改6个文件
573 ■■■■■ 文件已修改
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/BaseToolsController.java 177 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/ToolsClassifyController.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/BaseTools.java 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/ToolsClassify.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/BaseToolsMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/ToolsClassifyMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/BaseToolsMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/ToolsClassifyMapper.xml 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IBaseToolsService.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IToolsClassifyService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/BaseToolsServiceImpl.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/ToolsClassifyServiceImpl.java 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/BaseToolsController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,177 @@
package org.jeecg.modules.tms.controller;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.tms.entity.BaseTools;
import org.jeecg.modules.tms.service.IBaseToolsService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.jeecg.common.system.base.controller.JeecgController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import com.alibaba.fastjson.JSON;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.jeecg.common.aspect.annotation.AutoLog;
 /**
 * @Description: tms_base_tools
 * @Author: jeecg-boot
 * @Date:   2025-05-09
 * @Version: V1.0
 */
@Api(tags="tms_base_tools")
@RestController
@RequestMapping("/tms/baseTools")
@Slf4j
public class BaseToolsController extends JeecgController<BaseTools, IBaseToolsService> {
    @Autowired
    private IBaseToolsService baseToolsService;
    /**
     * åˆ†é¡µåˆ—表查询
     *
     * @param baseTools
     * @param pageNo
     * @param pageSize
     * @param req
     * @return
     */
    //@AutoLog(value = "tms_base_tools-分页列表查询")
    @ApiOperation(value="tms_base_tools-分页列表查询", notes="tms_base_tools-分页列表查询")
    @GetMapping(value = "/list")
    public Result<IPage<BaseTools>> queryPageList(BaseTools baseTools,
                                   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
                                   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
                                   HttpServletRequest req) {
        QueryWrapper<BaseTools> queryWrapper = QueryGenerator.initQueryWrapper(baseTools, req.getParameterMap());
        Page<BaseTools> page = new Page<BaseTools>(pageNo, pageSize);
        IPage<BaseTools> pageList = baseToolsService.page(page, queryWrapper);
        return Result.OK(pageList);
    }
    /**
     *   æ·»åŠ 
     *
     * @param baseTools
     * @return
     */
    @AutoLog(value = "tms_base_tools-添加")
    @ApiOperation(value="tms_base_tools-添加", notes="tms_base_tools-添加")
    //@RequiresPermissions("org.jeecg.modules:tms_base_tools:add")
    @PostMapping(value = "/add")
    public Result<String> add(@RequestBody BaseTools baseTools) {
        baseToolsService.save(baseTools);
        return Result.OK("添加成功!");
    }
    /**
     *  ç¼–辑
     *
     * @param baseTools
     * @return
     */
    @AutoLog(value = "tms_base_tools-编辑")
    @ApiOperation(value="tms_base_tools-编辑", notes="tms_base_tools-编辑")
    //@RequiresPermissions("org.jeecg.modules:tms_base_tools:edit")
    @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
    public Result<String> edit(@RequestBody BaseTools baseTools) {
        baseToolsService.updateById(baseTools);
        return Result.OK("编辑成功!");
    }
    /**
     *   é€šè¿‡id删除
     *
     * @param id
     * @return
     */
    @AutoLog(value = "tms_base_tools-通过id删除")
    @ApiOperation(value="tms_base_tools-通过id删除", notes="tms_base_tools-通过id删除")
    //@RequiresPermissions("org.jeecg.modules:tms_base_tools:delete")
    @DeleteMapping(value = "/delete")
    public Result<String> delete(@RequestParam(name="id",required=true) String id) {
        baseToolsService.removeById(id);
        return Result.OK("删除成功!");
    }
    /**
     *  æ‰¹é‡åˆ é™¤
     *
     * @param ids
     * @return
     */
    @AutoLog(value = "tms_base_tools-批量删除")
    @ApiOperation(value="tms_base_tools-批量删除", notes="tms_base_tools-批量删除")
    //@RequiresPermissions("org.jeecg.modules:tms_base_tools:deleteBatch")
    @DeleteMapping(value = "/deleteBatch")
    public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
        this.baseToolsService.removeByIds(Arrays.asList(ids.split(",")));
        return Result.OK("批量删除成功!");
    }
    /**
     * é€šè¿‡id查询
     *
     * @param id
     * @return
     */
    //@AutoLog(value = "tms_base_tools-通过id查询")
    @ApiOperation(value="tms_base_tools-通过id查询", notes="tms_base_tools-通过id查询")
    @GetMapping(value = "/queryById")
    public Result<BaseTools> queryById(@RequestParam(name="id",required=true) String id) {
        BaseTools baseTools = baseToolsService.getById(id);
        if(baseTools==null) {
            return Result.error("未找到对应数据");
        }
        return Result.OK(baseTools);
    }
    /**
    * å¯¼å‡ºexcel
    *
    * @param request
    * @param baseTools
    */
    //@RequiresPermissions("org.jeecg.modules:tms_base_tools:exportXls")
    @RequestMapping(value = "/exportXls")
    public ModelAndView exportXls(HttpServletRequest request, BaseTools baseTools) {
        return super.exportXls(request, baseTools, BaseTools.class, "tms_base_tools");
    }
    /**
      * é€šè¿‡excel导入数据
    *
    * @param request
    * @param response
    * @return
    */
    //@RequiresPermissions("tms_base_tools:importExcel")
    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
        return super.importExcel(request, response, BaseTools.class);
    }
}
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/ToolsClassifyController.java
@@ -163,23 +163,24 @@
    //@RequiresPermissions("org.jeecg.modules:tms_tools_classify:exportXls")
    @RequestMapping(value = "/exportXls")
    public ModelAndView exportXls(HttpServletRequest request, ToolsClassify toolsClassify) {
        return super.exportXls(request, toolsClassify, ToolsClassify.class, "tms_tools_classify");
        return this.toolsClassifyService.toolClassifyExport(request, toolsClassify, ToolsClassify.class, "工具分类");
        //return super.exportXls(request, toolsClassify, ToolsClassify.class, "tms_tools_classify");
    }
    /**
      * é€šè¿‡excel导入数据
    *
    * @param request
    * @param response
    * @return
    */
    //@RequiresPermissions("tms_tools_classify:importExcel")
    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
        return super.importExcel(request, response, ToolsClassify.class);
    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) throws IOException{
        return this.toolsClassifyService.toolClassifyImportExcel(request,response);
    }
     @AutoLog(value = "工具分类树")
     @ApiOperation(value = "工具分类树", notes = "工具分类树")
     @GetMapping("/loadTree")
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/BaseTools.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,103 @@
package org.jeecg.modules.tms.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableLogic;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
 * @Description: tms_base_tools
 * @Author: jeecg-boot
 * @Date:   2025-05-09
 * @Version: V1.0
 */
@Data
@TableName("tms_base_tools")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="tms_base_tools对象", description="tms_base_tools")
public class BaseTools implements Serializable {
    private static final long serialVersionUID = 1L;
    /**主键id*/
    @TableId(type = IdType.ASSIGN_ID)
    @ApiModelProperty(value = "主键id")
    private String id;
    /**分类编号*/
    @Excel(name = "分类编号", width = 15)
    @ApiModelProperty(value = "分类编号")
    private String classifyId;
    /**工具编码*/
    @Excel(name = "工具编码", width = 15)
    @ApiModelProperty(value = "工具编码")
    private String toolCode;
    /**工具编号*/
    @Excel(name = "工具编号", width = 15)
    @ApiModelProperty(value = "工具编号")
    private String toolId;
    /**总库存*/
    @Excel(name = "总库存", width = 15)
    @ApiModelProperty(value = "总库存")
    private BigDecimal totalCount;
    /**可用库存*/
    @Excel(name = "可用库存", width = 15)
    @ApiModelProperty(value = "可用库存")
    private BigDecimal availableCount;
    /**总报损数量*/
    @Excel(name = "总报损数量", width = 15)
    @ApiModelProperty(value = "总报损数量")
    private BigDecimal lossCount;
    /**在修数量*/
    @Excel(name = "在修数量", width = 15)
    @ApiModelProperty(value = "在修数量")
    private BigDecimal repairCount;
    /**在检*/
    @Excel(name = "在检", width = 15)
    @ApiModelProperty(value = "在检")
    private BigDecimal detectionCount;
    /**在借*/
    @Excel(name = "在借", width = 15)
    @ApiModelProperty(value = "在借")
    private BigDecimal lendCount;
    /**在磨*/
    @Excel(name = "在磨", width = 15)
    @ApiModelProperty(value = "在磨")
    private BigDecimal sharpeningCount;
    /**参数表名称*/
    @Excel(name = "参数表名称", width = 15)
    @ApiModelProperty(value = "参数表名称")
    private String paramaTableName;
    /**租户号*/
    @Excel(name = "租户号", width = 15)
    @ApiModelProperty(value = "租户号")
    private String tenantId;
    /**创建人*/
    @ApiModelProperty(value = "创建人")
    private String createBy;
    /**创建时间*/
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern="yyyy-MM-dd")
    @ApiModelProperty(value = "创建时间")
    private Date createTime;
    /**更新人*/
    @ApiModelProperty(value = "更新人")
    private String updateBy;
    /**更新时间*/
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern="yyyy-MM-dd")
    @ApiModelProperty(value = "更新时间")
    private Date updateTime;
}
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/ToolsClassify.java
@@ -31,45 +31,63 @@
public class ToolsClassify implements Serializable {
    private static final long serialVersionUID = 1L;
    /**主键id*/
    @TableId(type = IdType.ASSIGN_ID)
    @ApiModelProperty(value = "主键id")
    private String id;
    /**分类编码*/
    @Excel(name = "分类编码", width = 15)
    @ApiModelProperty(value = "分类编码")
    private String classifyId;
    /**类型名称*/
    @Excel(name = "类型名称", width = 15)
    @Excel(name = "分类名称", width = 15)
    @ApiModelProperty(value = "类型名称")
    private String typeName;
    /**父类型id*/
    @Excel(name = "父类型id", width = 15)
    //@Excel(name = "父类型id", width = 15)
    @ApiModelProperty(value = "父类型id")
    private String parentId;
    @Excel(name = "上级分类编号", width = 15)
    @TableField(exist = false)
    private String parentNum;
    @Excel(name = "上级分类名称", width = 15)
    @TableField(exist = false)
    private String parentName;
    /**显示序号*/
    @Excel(name = "显示序号", width = 15)
    //@Excel(name = "显示序号", width = 15)
    @ApiModelProperty(value = "显示序号")
    private String seq;
    /**状态(1.启用;2.关闭)*/
    @Excel(name = "状态(1.启用;2.关闭)", width = 15)
    //@Excel(name = "状态(1.启用;2.关闭)", width = 15)
    @ApiModelProperty(value = "状态(1.启用;2.关闭)")
    private String status;
    /**是否是叶子节点*/
    @Excel(name = "是否是叶子节点", width = 15)
    //@Excel(name = "是否是叶子节点", width = 15)
    @ApiModelProperty(value = "是否是叶子节点")
    private String leafFlag;
    /**层级*/
    @Excel(name = "层级", width = 15)
    //@Excel(name = "层级", width = 15)
    @ApiModelProperty(value = "层级")
    private String rank;
    /**对应参数模板表名称*/
    @Excel(name = "对应参数模板表名称", width = 15)
    //@Excel(name = "对应参数模板表名称", width = 15)
    @ApiModelProperty(value = "对应参数模板表名称")
    @Dict(dicCode = "tool_para_type")
    private String paraTypeFlag;
    /**备注*/
    @Excel(name = "参数模板", width = 15)
    @TableField(exist = false)
    private String paraTypeFlagName;
    /**备注*/
    @Excel(name = "备注", width = 15)
    @ApiModelProperty(value = "备注")
    private String remark;
    /**租户号*/
    @Excel(name = "租户号", width = 15)
    //@Excel(name = "租户号", width = 15)
    @ApiModelProperty(value = "租户号")
    private String tenantId;
    /**创建人*/
@@ -83,25 +101,14 @@
    @ApiModelProperty(value = "创建时间")
    private Date createTime;
    /**更新人*/
    @Excel(name = "更新人", width = 15)
    //@Excel(name = "更新人", width = 15)
    @ApiModelProperty(value = "更新人")
    private String updateBy;
    /**更新时间*/
    @Excel(name = "更新时间", width = 15, format = "yyyy-MM-dd")
    //@Excel(name = "更新时间", width = 15, format = "yyyy-MM-dd")
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern="yyyy-MM-dd")
    @ApiModelProperty(value = "更新时间")
    private Date updateTime;
    /**分类编码*/
    @Excel(name = "分类编码", width = 15)
    @ApiModelProperty(value = "分类编码")
    private String classifyId;
    @TableField(exist = false)
    private String parentNum;
    @TableField(exist = false)
    private String parentName;
    @TableField(exist = false)
    private String paraTypeFlagName;
}
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/BaseToolsMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package org.jeecg.modules.tms.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.tms.entity.BaseTools;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
 * @Description: tms_base_tools
 * @Author: jeecg-boot
 * @Date:   2025-05-09
 * @Version: V1.0
 */
public interface BaseToolsMapper extends BaseMapper<BaseTools> {
}
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/ToolsClassifyMapper.java
@@ -20,4 +20,6 @@
    IPage<ToolsClassify> queryPageList(Page<ToolsClassify> page,
                                   @Param(Constants.WRAPPER) Wrapper<ToolsClassify> queryWrapper);
    List<ToolsClassify> queryExportList(@Param(Constants.WRAPPER) Wrapper<ToolsClassify> queryWrapper);
}
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/BaseToolsMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.jeecg.modules.tms.mapper.BaseToolsMapper">
</mapper>
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/ToolsClassifyMapper.xml
@@ -26,4 +26,29 @@
            LEFT JOIN sys_dict_item s on s.dict_id = d.id and d.dict_code = 'tool_para_type') a on t.para_type_flag = a.item_value
    ${ew.customSqlSegment}
    </select>
    <select id="queryExportList" resultType="org.jeecg.modules.tms.entity.ToolsClassify">
        SELECT
            t.id,
            t.classify_id classifyId,
            t.type_name typeName,
            t.parent_id parentId,
            p.classify_id parentNum,
            p.type_name parentName,
            t.seq,
            t.leaf_flag leafFlag,
            t.para_type_flag paraTypeFlag,
            a.paraTypeFlagName paraTypeFlagName,
            t.status,
            t.remark,
            t.create_by createBy,
            t.create_time createTime,
            t.update_by updateBy,
            t.update_time updateTime
        FROM tms_tools_classify t
            LEFT JOIN tms_tools_classify p on t.parent_id = p.id
            LEFT JOIN (select s.item_value,s.item_text paraTypeFlagName from sys_dict d
            LEFT JOIN sys_dict_item s on s.dict_id = d.id and d.dict_code = 'tool_para_type') a on t.para_type_flag = a.item_value
            ${ew.customSqlSegment}
    </select>
</mapper>
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IBaseToolsService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
package org.jeecg.modules.tms.service;
import org.jeecg.modules.tms.entity.BaseTools;
import com.baomidou.mybatisplus.extension.service.IService;
/**
 * @Description: tms_base_tools
 * @Author: jeecg-boot
 * @Date:   2025-05-09
 * @Version: V1.0
 */
public interface IBaseToolsService extends IService<BaseTools> {
}
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IToolsClassifyService.java
@@ -3,10 +3,15 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.jeecg.common.api.vo.CommonGenericTree;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.tms.entity.ToolsClassify;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.tms.entity.Warehouse;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Map;
@@ -22,4 +27,8 @@
    public List<CommonGenericTree> loadTree();
    ModelAndView toolClassifyExport(HttpServletRequest request, ToolsClassify toolsClassify, Class<ToolsClassify> clazz, String title);
    Result<?> toolClassifyImportExcel(HttpServletRequest request, HttpServletResponse response) throws IOException;
}
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/BaseToolsServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package org.jeecg.modules.tms.service.impl;
import org.jeecg.modules.tms.entity.BaseTools;
import org.jeecg.modules.tms.mapper.BaseToolsMapper;
import org.jeecg.modules.tms.service.IBaseToolsService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
 * @Description: tms_base_tools
 * @Author: jeecg-boot
 * @Date:   2025-05-09
 * @Version: V1.0
 */
@Service
public class BaseToolsServiceImpl extends ServiceImpl<BaseToolsMapper, BaseTools> implements IBaseToolsService {
}
lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/ToolsClassifyServiceImpl.java
@@ -3,23 +3,40 @@
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.LoginUser;
import org.jeecg.common.util.ImportExcelUtil;
import org.jeecg.common.util.StrUtils;
import org.jeecg.common.util.oConvertUtils;
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.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 +47,8 @@
@Service
public class ToolsClassifyServiceImpl extends ServiceImpl<ToolsClassifyMapper, ToolsClassify> implements IToolsClassifyService {
    @Value("${jeecg.path.upload}")
    private String upLoadPath;
    @Override
    public IPage<ToolsClassify> queryPageList(Page<ToolsClassify> page, Map<String, String[]> parameterMap) {
        QueryWrapper<ToolsClassify> queryWrapper = Wrappers.query();
@@ -124,4 +143,117 @@
        }
        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) {
                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 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("第"+row.getRowNum()+1+"行,是否为叶子节点填写错误,请填写‘是’或’否‘");
                    errorLines++;
                    continue;
                }
                if(StringUtils.isBlank(num)){
                    errorMessage.add("第"+row.getRowNum()+1+"行,分类编码不能为空");
                    errorLines++;
                    continue;
                }
                if(StringUtils.isBlank(name)){
                    errorMessage.add("第"+row.getRowNum()+1+"行,分类名称不能为空");
                    errorLines++;
                    continue;
                    //判断是否有上级分类
                }
                if(StringUtils.isNotBlank(parentNum)){
                    ToolsClassify toolsClassify = this.lambdaQuery()
                            .eq(ToolsClassify::getClassifyId,parentNum)
                            .eq(ToolsClassify::getLeafFlag,"2").one();
                    if(toolsClassify == null){
                        errorMessage.add("第"+row.getRowNum()+1+"行,分类编码为"+num+"的数据的上级分类编号不存在或为叶子节点");
                        errorLines++;
                    }else {
                        newToolsClassify.setClassifyId(num)
                                .setTypeName(name)
                                .setStatus("1")
                                .setLeafFlag(leafFlag)
                                .setParentId(toolsClassify.getId())
                                .setParaTypeFlag(paraTypeFlag);
                        this.save(newToolsClassify);
                        successLines++;
                    }
                    //如果没填写上级分类编号,则新增到根节点
                }else {
                    newToolsClassify.setClassifyId(num)
                            .setTypeName(name)
                            .setStatus("1")
                            .setParentId("-1")
                            .setLeafFlag(leafFlag)
                            .setParaTypeFlag(paraTypeFlag);
                    this.save(newToolsClassify);
                    successLines++;
                }
            }
        }catch (IOException e) {
            e.printStackTrace();
        }
        return ImportExcelUtil.imporReturnRes(errorLines,successLines,errorMessage);
    }
}