ソースを参照

设备定义树

LLL 1 年間 前
コミット
850a42fa67

+ 297 - 0
jeecg_module_ems/src/main/java/org/jeecg/modules/tpmEquipmentDefine/controller/TpmEquipmentDefineController.java

@@ -0,0 +1,297 @@
+package org.jeecg.modules.tpmEquipmentDefine.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.common.system.vo.SelectTreeModel;
+import org.jeecg.modules.tpmEquipmentDefine.entity.TpmEquipmentDefine;
+import org.jeecg.modules.tpmEquipmentDefine.service.ITpmEquipmentDefineService;
+
+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: 设备定义树
+ * @Author: jeecg-boot
+ * @Date:   2024-01-09
+ * @Version: V1.0
+ */
+@Api(tags="设备定义树")
+@RestController
+@RequestMapping("/tpmEquipmentDefine/tpmEquipmentDefine")
+@Slf4j
+public class TpmEquipmentDefineController extends JeecgController<TpmEquipmentDefine, ITpmEquipmentDefineService>{
+	@Autowired
+	private ITpmEquipmentDefineService tpmEquipmentDefineService;
+
+	/**
+	 * 分页列表查询
+	 *
+	 * @param tpmEquipmentDefine
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "设备定义树-分页列表查询")
+	@ApiOperation(value="设备定义树-分页列表查询", notes="设备定义树-分页列表查询")
+	@GetMapping(value = "/rootList")
+	public Result<IPage<TpmEquipmentDefine>> queryPageList(TpmEquipmentDefine tpmEquipmentDefine,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		String hasQuery = req.getParameter("hasQuery");
+        if(hasQuery != null && "true".equals(hasQuery)){
+            QueryWrapper<TpmEquipmentDefine> queryWrapper =  QueryGenerator.initQueryWrapper(tpmEquipmentDefine, req.getParameterMap());
+            List<TpmEquipmentDefine> list = tpmEquipmentDefineService.queryTreeListNoPage(queryWrapper);
+            IPage<TpmEquipmentDefine> pageList = new Page<>(1, 10, list.size());
+            pageList.setRecords(list);
+            return Result.OK(pageList);
+        }else{
+            String parentId = tpmEquipmentDefine.getParentid();
+            if (oConvertUtils.isEmpty(parentId)) {
+                parentId = "0";
+            }
+            tpmEquipmentDefine.setParentid(null);
+            QueryWrapper<TpmEquipmentDefine> queryWrapper = QueryGenerator.initQueryWrapper(tpmEquipmentDefine, req.getParameterMap());
+            // 使用 eq 防止模糊查询
+            queryWrapper.eq("parentid", parentId);
+            Page<TpmEquipmentDefine> page = new Page<TpmEquipmentDefine>(pageNo, pageSize);
+            IPage<TpmEquipmentDefine> pageList = tpmEquipmentDefineService.page(page, queryWrapper);
+            return Result.OK(pageList);
+        }
+	}
+
+	 /**
+	  * 【vue3专用】加载节点的子数据
+	  *
+	  * @param pid
+	  * @return
+	  */
+	 @RequestMapping(value = "/loadTreeChildren", method = RequestMethod.GET)
+	 public Result<List<SelectTreeModel>> loadTreeChildren(@RequestParam(name = "pid") String pid) {
+		 Result<List<SelectTreeModel>> result = new Result<>();
+		 try {
+			 List<SelectTreeModel> ls = tpmEquipmentDefineService.queryListByPid(pid);
+			 result.setResult(ls);
+			 result.setSuccess(true);
+		 } catch (Exception e) {
+			 e.printStackTrace();
+			 result.setMessage(e.getMessage());
+			 result.setSuccess(false);
+		 }
+		 return result;
+	 }
+
+	 /**
+	  * 【vue3专用】加载一级节点/如果是同步 则所有数据
+	  *
+	  * @param async
+	  * @param pcode
+	  * @return
+	  */
+	 @RequestMapping(value = "/loadTreeRoot", method = RequestMethod.GET)
+	 public Result<List<SelectTreeModel>> loadTreeRoot(@RequestParam(name = "async") Boolean async, @RequestParam(name = "pcode") String pcode) {
+		 Result<List<SelectTreeModel>> result = new Result<>();
+		 try {
+			 List<SelectTreeModel> ls = tpmEquipmentDefineService.queryListByCode(pcode);
+			 if (!async) {
+				 loadAllChildren(ls);
+			 }
+			 result.setResult(ls);
+			 result.setSuccess(true);
+		 } catch (Exception e) {
+			 e.printStackTrace();
+			 result.setMessage(e.getMessage());
+			 result.setSuccess(false);
+		 }
+		 return result;
+	 }
+
+	 /**
+	  * 【vue3专用】递归求子节点 同步加载用到
+	  *
+	  * @param ls
+	  */
+	 private void loadAllChildren(List<SelectTreeModel> ls) {
+		 for (SelectTreeModel tsm : ls) {
+			 List<SelectTreeModel> temp = tpmEquipmentDefineService.queryListByPid(tsm.getKey());
+			 if (temp != null && temp.size() > 0) {
+				 tsm.setChildren(temp);
+				 loadAllChildren(temp);
+			 }
+		 }
+	 }
+
+	 /**
+      * 获取子数据
+      * @param tpmEquipmentDefine
+      * @param req
+      * @return
+      */
+	//@AutoLog(value = "设备定义树-获取子数据")
+	@ApiOperation(value="设备定义树-获取子数据", notes="设备定义树-获取子数据")
+	@GetMapping(value = "/childList")
+	public Result<IPage<TpmEquipmentDefine>> queryPageList(TpmEquipmentDefine tpmEquipmentDefine,HttpServletRequest req) {
+		QueryWrapper<TpmEquipmentDefine> queryWrapper = QueryGenerator.initQueryWrapper(tpmEquipmentDefine, req.getParameterMap());
+		List<TpmEquipmentDefine> list = tpmEquipmentDefineService.list(queryWrapper);
+		IPage<TpmEquipmentDefine> pageList = new Page<>(1, 10, list.size());
+        pageList.setRecords(list);
+		return Result.OK(pageList);
+	}
+
+    /**
+      * 批量查询子节点
+      * @param parentIds 父ID(多个采用半角逗号分割)
+      * @return 返回 IPage
+      * @param parentIds
+      * @return
+      */
+	//@AutoLog(value = "设备定义树-批量获取子数据")
+    @ApiOperation(value="设备定义树-批量获取子数据", notes="设备定义树-批量获取子数据")
+    @GetMapping("/getChildListBatch")
+    public Result getChildListBatch(@RequestParam("parentIds") String parentIds) {
+        try {
+            QueryWrapper<TpmEquipmentDefine> queryWrapper = new QueryWrapper<>();
+            List<String> parentIdList = Arrays.asList(parentIds.split(","));
+            queryWrapper.in("parentid", parentIdList);
+            List<TpmEquipmentDefine> list = tpmEquipmentDefineService.list(queryWrapper);
+            IPage<TpmEquipmentDefine> pageList = new Page<>(1, 10, list.size());
+            pageList.setRecords(list);
+            return Result.OK(pageList);
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            return Result.error("批量查询子节点失败:" + e.getMessage());
+        }
+    }
+	
+	/**
+	 *   添加
+	 *
+	 * @param tpmEquipmentDefine
+	 * @return
+	 */
+	@AutoLog(value = "设备定义树-添加")
+	@ApiOperation(value="设备定义树-添加", notes="设备定义树-添加")
+    //@RequiresPermissions("org.jeecg.modules:ems_tpm_equipment_define:add")
+	@PostMapping(value = "/add")
+	public Result<String> add(@RequestBody TpmEquipmentDefine tpmEquipmentDefine) {
+		tpmEquipmentDefineService.addTpmEquipmentDefine(tpmEquipmentDefine);
+		return Result.OK("添加成功!");
+	}
+	
+	/**
+	 *  编辑
+	 *
+	 * @param tpmEquipmentDefine
+	 * @return
+	 */
+	@AutoLog(value = "设备定义树-编辑")
+	@ApiOperation(value="设备定义树-编辑", notes="设备定义树-编辑")
+    //@RequiresPermissions("org.jeecg.modules:ems_tpm_equipment_define:edit")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> edit(@RequestBody TpmEquipmentDefine tpmEquipmentDefine) {
+		tpmEquipmentDefineService.updateTpmEquipmentDefine(tpmEquipmentDefine);
+		return Result.OK("编辑成功!");
+	}
+	
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "设备定义树-通过id删除")
+	@ApiOperation(value="设备定义树-通过id删除", notes="设备定义树-通过id删除")
+    //@RequiresPermissions("org.jeecg.modules:ems_tpm_equipment_define:delete")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		tpmEquipmentDefineService.deleteTpmEquipmentDefine(id);
+		return Result.OK("删除成功!");
+	}
+	
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "设备定义树-批量删除")
+	@ApiOperation(value="设备定义树-批量删除", notes="设备定义树-批量删除")
+    //@RequiresPermissions("org.jeecg.modules:ems_tpm_equipment_define:deleteBatch")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.tpmEquipmentDefineService.removeByIds(Arrays.asList(ids.split(",")));
+		return Result.OK("批量删除成功!");
+	}
+	
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	//@AutoLog(value = "设备定义树-通过id查询")
+	@ApiOperation(value="设备定义树-通过id查询", notes="设备定义树-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<TpmEquipmentDefine> queryById(@RequestParam(name="id",required=true) String id) {
+		TpmEquipmentDefine tpmEquipmentDefine = tpmEquipmentDefineService.getById(id);
+		if(tpmEquipmentDefine==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.OK(tpmEquipmentDefine);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param tpmEquipmentDefine
+    */
+    //@RequiresPermissions("org.jeecg.modules:ems_tpm_equipment_define:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, TpmEquipmentDefine tpmEquipmentDefine) {
+		return super.exportXls(request, tpmEquipmentDefine, TpmEquipmentDefine.class, "设备定义树");
+    }
+
+    /**
+      * 通过excel导入数据
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    //@RequiresPermissions("org.jeecg.modules:ems_tpm_equipment_define:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+		return super.importExcel(request, response, TpmEquipmentDefine.class);
+    }
+
+}

+ 68 - 0
jeecg_module_ems/src/main/java/org/jeecg/modules/tpmEquipmentDefine/entity/TpmEquipmentDefine.java

@@ -0,0 +1,68 @@
+package org.jeecg.modules.tpmEquipmentDefine.entity;
+
+import java.io.Serializable;
+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 java.io.UnsupportedEncodingException;
+
+/**
+ * @Description: 设备定义树
+ * @Author: jeecg-boot
+ * @Date:   2024-01-09
+ * @Version: V1.0
+ */
+@Data
+@TableName("ems_tpm_equipment_define")
+@ApiModel(value="ems_tpm_equipment_define对象", description="设备定义树")
+public class TpmEquipmentDefine implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**设备定义ID*/
+	@Excel(name = "设备定义ID", width = 15)
+    @ApiModelProperty(value = "设备定义ID")
+    private java.lang.String equipdefid;
+	/**名称*/
+	@Excel(name = "名称", width = 15)
+    @ApiModelProperty(value = "名称")
+    private java.lang.String name;
+	/**上级ID*/
+	@Excel(name = "上级ID", width = 15)
+    @ApiModelProperty(value = "上级ID")
+    private java.lang.String parentid;
+	/**是否有子节点*/
+	@Excel(name = "是否有子节点", width = 15, dicCode = "yn")
+	@Dict(dicCode = "yn")
+    @ApiModelProperty(value = "是否有子节点")
+    private java.lang.String hasChild;
+	/**创建者*/
+    @ApiModelProperty(value = "创建者")
+    private java.lang.String createBy;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "创建时间")
+    private java.util.Date createTime;
+	/**更新者*/
+    @ApiModelProperty(value = "更新者")
+    private java.lang.String updateBy;
+	/**更新时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "更新时间")
+    private java.util.Date updateTime;
+	/**备注*/
+	@Excel(name = "备注", width = 15)
+    @ApiModelProperty(value = "备注")
+    private java.lang.String remark;
+}

+ 35 - 0
jeecg_module_ems/src/main/java/org/jeecg/modules/tpmEquipmentDefine/mapper/TpmEquipmentDefineMapper.java

@@ -0,0 +1,35 @@
+package org.jeecg.modules.tpmEquipmentDefine.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.common.system.vo.SelectTreeModel;
+import org.jeecg.modules.tpmEquipmentDefine.entity.TpmEquipmentDefine;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 设备定义树
+ * @Author: jeecg-boot
+ * @Date:   2024-01-09
+ * @Version: V1.0
+ */
+public interface TpmEquipmentDefineMapper extends BaseMapper<TpmEquipmentDefine> {
+
+	/**
+	 * 编辑节点状态
+	 * @param id
+	 * @param status
+	 */
+	void updateTreeNodeStatus(@Param("id") String id,@Param("status") String status);
+
+	/**
+	 * 【vue3专用】根据父级ID查询树节点数据
+	 *
+	 * @param pid
+	 * @param query
+	 * @return
+	 */
+	List<SelectTreeModel> queryListByPid(@Param("pid") String pid, @Param("query") Map<String, String> query);
+
+}

+ 25 - 0
jeecg_module_ems/src/main/java/org/jeecg/modules/tpmEquipmentDefine/mapper/xml/TpmEquipmentDefineMapper.xml

@@ -0,0 +1,25 @@
+<?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.tpmEquipmentDefine.mapper.TpmEquipmentDefineMapper">
+
+	<update id="updateTreeNodeStatus" parameterType="java.lang.String">
+		update ems_tpm_equipment_define set has_child = #{status} where id = #{id}
+	</update>
+
+  	<!-- 【vue3专用】 -->
+	<select id="queryListByPid" parameterType="java.lang.Object" resultType="org.jeecg.common.system.vo.SelectTreeModel">
+		select
+		  id as "key",
+		  name as "title",
+		  (case when has_child = '1' then 0 else 1 end) as isLeaf,
+		  parentid as parentId
+		from ems_tpm_equipment_define
+		where parentid = #{pid}
+		<if test="query != null">
+			<foreach collection="query.entrySet()" item="value" index="key">
+				and ${key} = #{value}
+			</foreach>
+		</if>
+	</select>
+
+</mapper>

+ 74 - 0
jeecg_module_ems/src/main/java/org/jeecg/modules/tpmEquipmentDefine/service/ITpmEquipmentDefineService.java

@@ -0,0 +1,74 @@
+package org.jeecg.modules.tpmEquipmentDefine.service;
+
+import org.jeecg.common.system.vo.SelectTreeModel;
+import org.jeecg.modules.tpmEquipmentDefine.entity.TpmEquipmentDefine;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.common.exception.JeecgBootException;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import java.util.List;
+
+/**
+ * @Description: 设备定义树
+ * @Author: jeecg-boot
+ * @Date:   2024-01-09
+ * @Version: V1.0
+ */
+public interface ITpmEquipmentDefineService extends IService<TpmEquipmentDefine> {
+
+	/**根节点父ID的值*/
+	public static final String ROOT_PID_VALUE = "0";
+	
+	/**树节点有子节点状态值*/
+	public static final String HASCHILD = "1";
+	
+	/**树节点无子节点状态值*/
+	public static final String NOCHILD = "0";
+
+	/**
+	 * 新增节点
+	 *
+	 * @param tpmEquipmentDefine
+	 */
+	void addTpmEquipmentDefine(TpmEquipmentDefine tpmEquipmentDefine);
+	
+	/**
+   * 修改节点
+   *
+   * @param tpmEquipmentDefine
+   * @throws JeecgBootException
+   */
+	void updateTpmEquipmentDefine(TpmEquipmentDefine tpmEquipmentDefine) throws JeecgBootException;
+	
+	/**
+	 * 删除节点
+	 *
+	 * @param id
+   * @throws JeecgBootException
+	 */
+	void deleteTpmEquipmentDefine(String id) throws JeecgBootException;
+
+	  /**
+	   * 查询所有数据,无分页
+	   *
+	   * @param queryWrapper
+	   * @return List<TpmEquipmentDefine>
+	   */
+    List<TpmEquipmentDefine> queryTreeListNoPage(QueryWrapper<TpmEquipmentDefine> queryWrapper);
+
+	/**
+	 * 【vue3专用】根据父级编码加载分类字典的数据
+	 *
+	 * @param parentCode
+	 * @return
+	 */
+	List<SelectTreeModel> queryListByCode(String parentCode);
+
+	/**
+	 * 【vue3专用】根据pid查询子节点集合
+	 *
+	 * @param pid
+	 * @return
+	 */
+	List<SelectTreeModel> queryListByPid(String pid);
+
+}

+ 219 - 0
jeecg_module_ems/src/main/java/org/jeecg/modules/tpmEquipmentDefine/service/impl/TpmEquipmentDefineServiceImpl.java

@@ -0,0 +1,219 @@
+package org.jeecg.modules.tpmEquipmentDefine.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import org.jeecg.common.exception.JeecgBootException;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.common.system.vo.SelectTreeModel;
+import org.jeecg.modules.tpmEquipmentDefine.entity.TpmEquipmentDefine;
+import org.jeecg.modules.tpmEquipmentDefine.mapper.TpmEquipmentDefineMapper;
+import org.jeecg.modules.tpmEquipmentDefine.service.ITpmEquipmentDefineService;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import org.springframework.transaction.annotation.Transactional;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: 设备定义树
+ * @Author: jeecg-boot
+ * @Date:   2024-01-09
+ * @Version: V1.0
+ */
+@Service
+public class TpmEquipmentDefineServiceImpl extends ServiceImpl<TpmEquipmentDefineMapper, TpmEquipmentDefine> implements ITpmEquipmentDefineService {
+
+	@Override
+	public void addTpmEquipmentDefine(TpmEquipmentDefine tpmEquipmentDefine) {
+	   //新增时设置hasChild为0
+	    tpmEquipmentDefine.setHasChild(ITpmEquipmentDefineService.NOCHILD);
+		if(oConvertUtils.isEmpty(tpmEquipmentDefine.getParentid())){
+			tpmEquipmentDefine.setParentid(ITpmEquipmentDefineService.ROOT_PID_VALUE);
+		}else{
+			//如果当前节点父ID不为空 则设置父节点的hasChildren 为1
+			TpmEquipmentDefine parent = baseMapper.selectById(tpmEquipmentDefine.getParentid());
+			if(parent!=null && !"1".equals(parent.getHasChild())){
+				parent.setHasChild("1");
+				baseMapper.updateById(parent);
+			}
+		}
+		baseMapper.insert(tpmEquipmentDefine);
+	}
+
+	@Override
+	public void updateTpmEquipmentDefine(TpmEquipmentDefine tpmEquipmentDefine) {
+		TpmEquipmentDefine entity = this.getById(tpmEquipmentDefine.getEquipdefid());
+		if(entity==null) {
+			throw new JeecgBootException("未找到对应实体");
+		}
+		String old_pid = entity.getParentid();
+		String new_pid = tpmEquipmentDefine.getParentid();
+		if(!old_pid.equals(new_pid)) {
+			updateOldParentNode(old_pid);
+			if(oConvertUtils.isEmpty(new_pid)){
+				tpmEquipmentDefine.setParentid(ITpmEquipmentDefineService.ROOT_PID_VALUE);
+			}
+			if(!ITpmEquipmentDefineService.ROOT_PID_VALUE.equals(tpmEquipmentDefine.getParentid())) {
+				baseMapper.updateTreeNodeStatus(tpmEquipmentDefine.getParentid(), ITpmEquipmentDefineService.HASCHILD);
+			}
+		}
+		baseMapper.updateById(tpmEquipmentDefine);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void deleteTpmEquipmentDefine(String id) throws JeecgBootException {
+		//查询选中节点下所有子节点一并删除
+        id = this.queryTreeChildIds(id);
+        if(id.indexOf(",")>0) {
+            StringBuffer sb = new StringBuffer();
+            String[] idArr = id.split(",");
+            for (String idVal : idArr) {
+                if(idVal != null){
+                    TpmEquipmentDefine tpmEquipmentDefine = this.getById(idVal);
+                    String pidVal = tpmEquipmentDefine.getParentid();
+                    //查询此节点上一级是否还有其他子节点
+                    List<TpmEquipmentDefine> dataList = baseMapper.selectList(new QueryWrapper<TpmEquipmentDefine>().eq("parentid", pidVal).notIn("id",Arrays.asList(idArr)));
+                    boolean flag = (dataList == null || dataList.size() == 0) && !Arrays.asList(idArr).contains(pidVal) && !sb.toString().contains(pidVal);
+                    if(flag){
+                        //如果当前节点原本有子节点 现在木有了,更新状态
+                        sb.append(pidVal).append(",");
+                    }
+                }
+            }
+            //批量删除节点
+            baseMapper.deleteBatchIds(Arrays.asList(idArr));
+            //修改已无子节点的标识
+            String[] pidArr = sb.toString().split(",");
+            for(String pid : pidArr){
+                this.updateOldParentNode(pid);
+            }
+        }else{
+            TpmEquipmentDefine tpmEquipmentDefine = this.getById(id);
+            if(tpmEquipmentDefine==null) {
+                throw new JeecgBootException("未找到对应实体");
+            }
+            updateOldParentNode(tpmEquipmentDefine.getParentid());
+            baseMapper.deleteById(id);
+        }
+	}
+
+	@Override
+    public List<TpmEquipmentDefine> queryTreeListNoPage(QueryWrapper<TpmEquipmentDefine> queryWrapper) {
+        List<TpmEquipmentDefine> dataList = baseMapper.selectList(queryWrapper);
+        List<TpmEquipmentDefine> mapList = new ArrayList<>();
+        for(TpmEquipmentDefine data : dataList){
+            String pidVal = data.getParentid();
+            //递归查询子节点的根节点
+            if(pidVal != null && !ITpmEquipmentDefineService.NOCHILD.equals(pidVal)){
+                TpmEquipmentDefine rootVal = this.getTreeRoot(pidVal);
+                if(rootVal != null && !mapList.contains(rootVal)){
+                    mapList.add(rootVal);
+                }
+            }else{
+                if(!mapList.contains(data)){
+                    mapList.add(data);
+                }
+            }
+        }
+        return mapList;
+    }
+
+    @Override
+    public List<SelectTreeModel> queryListByCode(String parentCode) {
+        String pid = ROOT_PID_VALUE;
+        if (oConvertUtils.isNotEmpty(parentCode)) {
+            LambdaQueryWrapper<TpmEquipmentDefine> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.eq(TpmEquipmentDefine::getParentid, parentCode);
+            List<TpmEquipmentDefine> list = baseMapper.selectList(queryWrapper);
+            if (list == null || list.size() == 0) {
+                throw new JeecgBootException("该编码【" + parentCode + "】不存在,请核实!");
+            }
+            if (list.size() > 1) {
+                throw new JeecgBootException("该编码【" + parentCode + "】存在多个,请核实!");
+            }
+            pid = list.get(0).getEquipdefid();
+        }
+        return baseMapper.queryListByPid(pid, null);
+    }
+
+    @Override
+    public List<SelectTreeModel> queryListByPid(String pid) {
+        if (oConvertUtils.isEmpty(pid)) {
+            pid = ROOT_PID_VALUE;
+        }
+        return baseMapper.queryListByPid(pid, null);
+    }
+
+	/**
+	 * 根据所传pid查询旧的父级节点的子节点并修改相应状态值
+	 * @param pid
+	 */
+	private void updateOldParentNode(String pid) {
+		if(!ITpmEquipmentDefineService.ROOT_PID_VALUE.equals(pid)) {
+			Long count = baseMapper.selectCount(new QueryWrapper<TpmEquipmentDefine>().eq("parentid", pid));
+			if(count==null || count<=1) {
+				baseMapper.updateTreeNodeStatus(pid, ITpmEquipmentDefineService.NOCHILD);
+			}
+		}
+	}
+
+	/**
+     * 递归查询节点的根节点
+     * @param pidVal
+     * @return
+     */
+    private TpmEquipmentDefine getTreeRoot(String pidVal){
+        TpmEquipmentDefine data =  baseMapper.selectById(pidVal);
+        if(data != null && !ITpmEquipmentDefineService.ROOT_PID_VALUE.equals(data.getParentid())){
+            return this.getTreeRoot(data.getParentid());
+        }else{
+            return data;
+        }
+    }
+
+    /**
+     * 根据id查询所有子节点id
+     * @param ids
+     * @return
+     */
+    private String queryTreeChildIds(String ids) {
+        //获取id数组
+        String[] idArr = ids.split(",");
+        StringBuffer sb = new StringBuffer();
+        for (String pidVal : idArr) {
+            if(pidVal != null){
+                if(!sb.toString().contains(pidVal)){
+                    if(sb.toString().length() > 0){
+                        sb.append(",");
+                    }
+                    sb.append(pidVal);
+                    this.getTreeChildIds(pidVal,sb);
+                }
+            }
+        }
+        return sb.toString();
+    }
+
+    /**
+     * 递归查询所有子节点
+     * @param pidVal
+     * @param sb
+     * @return
+     */
+    private StringBuffer getTreeChildIds(String pidVal,StringBuffer sb){
+        List<TpmEquipmentDefine> dataList = baseMapper.selectList(new QueryWrapper<TpmEquipmentDefine>().eq("parentid", pidVal));
+        if(dataList != null && dataList.size()>0){
+            for(TpmEquipmentDefine tree : dataList) {
+                if(!sb.toString().contains(tree.getEquipdefid())){
+                    sb.append(",").append(tree.getEquipdefid());
+                }
+                this.getTreeChildIds(tree.getEquipdefid(),sb);
+            }
+        }
+        return sb;
+    }
+
+}