Explorar el Código

联锁基础表、联锁总表

LLL hace 9 meses
padre
commit
2b40810c5b

+ 297 - 0
jeecg-module-interlock/src/main/java/org/jeecg/modules/base/controller/InterlockBaseController.java

@@ -0,0 +1,297 @@
+package org.jeecg.modules.base.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.base.entity.InterlockBase;
+import org.jeecg.modules.base.service.IInterlockBaseService;
+
+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-05-22
+ * @Version: V1.0
+ */
+@Api(tags="联锁基础表")
+@RestController
+@RequestMapping("/base/interlockBase")
+@Slf4j
+public class InterlockBaseController extends JeecgController<InterlockBase, IInterlockBaseService>{
+	@Autowired
+	private IInterlockBaseService interlockBaseService;
+
+	/**
+	 * 分页列表查询
+	 *
+	 * @param interlockBase
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "联锁基础表-分页列表查询")
+	@ApiOperation(value="联锁基础表-分页列表查询", notes="联锁基础表-分页列表查询")
+	@GetMapping(value = "/rootList")
+	public Result<IPage<InterlockBase>> queryPageList(InterlockBase interlockBase,
+								   @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<InterlockBase> queryWrapper =  QueryGenerator.initQueryWrapper(interlockBase, req.getParameterMap());
+            List<InterlockBase> list = interlockBaseService.queryTreeListNoPage(queryWrapper);
+            IPage<InterlockBase> pageList = new Page<>(1, 10, list.size());
+            pageList.setRecords(list);
+            return Result.OK(pageList);
+        }else{
+            String parentId = interlockBase.getPid();
+            if (oConvertUtils.isEmpty(parentId)) {
+                parentId = "0";
+            }
+            interlockBase.setPid(null);
+            QueryWrapper<InterlockBase> queryWrapper = QueryGenerator.initQueryWrapper(interlockBase, req.getParameterMap());
+            // 使用 eq 防止模糊查询
+            queryWrapper.eq("pid", parentId);
+            Page<InterlockBase> page = new Page<InterlockBase>(pageNo, pageSize);
+            IPage<InterlockBase> pageList = interlockBaseService.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 = interlockBaseService.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 = interlockBaseService.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 = interlockBaseService.queryListByPid(tsm.getKey());
+			 if (temp != null && temp.size() > 0) {
+				 tsm.setChildren(temp);
+				 loadAllChildren(temp);
+			 }
+		 }
+	 }
+
+	 /**
+      * 获取子数据
+      * @param interlockBase
+      * @param req
+      * @return
+      */
+	//@AutoLog(value = "联锁基础表-获取子数据")
+	@ApiOperation(value="联锁基础表-获取子数据", notes="联锁基础表-获取子数据")
+	@GetMapping(value = "/childList")
+	public Result<IPage<InterlockBase>> queryPageList(InterlockBase interlockBase,HttpServletRequest req) {
+		QueryWrapper<InterlockBase> queryWrapper = QueryGenerator.initQueryWrapper(interlockBase, req.getParameterMap());
+		List<InterlockBase> list = interlockBaseService.list(queryWrapper);
+		IPage<InterlockBase> 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<InterlockBase> queryWrapper = new QueryWrapper<>();
+            List<String> parentIdList = Arrays.asList(parentIds.split(","));
+            queryWrapper.in("pid", parentIdList);
+            List<InterlockBase> list = interlockBaseService.list(queryWrapper);
+            IPage<InterlockBase> 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 interlockBase
+	 * @return
+	 */
+	@AutoLog(value = "联锁基础表-添加")
+	@ApiOperation(value="联锁基础表-添加", notes="联锁基础表-添加")
+    //@RequiresPermissions("org.jeecg.modules:interlock_base:add")
+	@PostMapping(value = "/add")
+	public Result<String> add(@RequestBody InterlockBase interlockBase) {
+		interlockBaseService.addInterlockBase(interlockBase);
+		return Result.OK("添加成功!");
+	}
+	
+	/**
+	 *  编辑
+	 *
+	 * @param interlockBase
+	 * @return
+	 */
+	@AutoLog(value = "联锁基础表-编辑")
+	@ApiOperation(value="联锁基础表-编辑", notes="联锁基础表-编辑")
+    //@RequiresPermissions("org.jeecg.modules:interlock_base:edit")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> edit(@RequestBody InterlockBase interlockBase) {
+		interlockBaseService.updateInterlockBase(interlockBase);
+		return Result.OK("编辑成功!");
+	}
+	
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "联锁基础表-通过id删除")
+	@ApiOperation(value="联锁基础表-通过id删除", notes="联锁基础表-通过id删除")
+    //@RequiresPermissions("org.jeecg.modules:interlock_base:delete")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		interlockBaseService.deleteInterlockBase(id);
+		return Result.OK("删除成功!");
+	}
+	
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "联锁基础表-批量删除")
+	@ApiOperation(value="联锁基础表-批量删除", notes="联锁基础表-批量删除")
+    //@RequiresPermissions("org.jeecg.modules:interlock_base:deleteBatch")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.interlockBaseService.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<InterlockBase> queryById(@RequestParam(name="id",required=true) String id) {
+		InterlockBase interlockBase = interlockBaseService.getById(id);
+		if(interlockBase==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.OK(interlockBase);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param interlockBase
+    */
+    //@RequiresPermissions("org.jeecg.modules:interlock_base:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, InterlockBase interlockBase) {
+		return super.exportXls(request, interlockBase, InterlockBase.class, "联锁基础表");
+    }
+
+    /**
+      * 通过excel导入数据
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    //@RequiresPermissions("org.jeecg.modules:interlock_base:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+		return super.importExcel(request, response, InterlockBase.class);
+    }
+
+}

+ 72 - 0
jeecg-module-interlock/src/main/java/org/jeecg/modules/base/entity/InterlockBase.java

@@ -0,0 +1,72 @@
+package org.jeecg.modules.base.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-05-22
+ * @Version: V1.0
+ */
+@Data
+@TableName("interlock_base")
+@ApiModel(value="interlock_base对象", description="联锁基础表")
+public class InterlockBase implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "主键")
+    private java.lang.String id;
+	/**类型*/
+	@Excel(name = "类型", width = 15, dicCode = "interlock_type")
+	@Dict(dicCode = "interlock_type")
+    @ApiModelProperty(value = "类型")
+    private java.lang.String interlockType;
+	/**名称*/
+	@Excel(name = "名称", width = 15)
+    @ApiModelProperty(value = "名称")
+    private java.lang.String interlockName;
+	/**父级节点*/
+	@Excel(name = "父级节点", width = 15)
+    @ApiModelProperty(value = "父级节点")
+    private java.lang.String pid;
+	/**是否有子节点*/
+	@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 HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建日期")
+    private java.util.Date createTime;
+	/**更新人*/
+    @ApiModelProperty(value = "更新人")
+    private java.lang.String updateBy;
+	/**更新日期*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新日期")
+    private java.util.Date updateTime;
+	/**所属部门*/
+    @ApiModelProperty(value = "所属部门")
+    private java.lang.String sysOrgCode;
+}

+ 35 - 0
jeecg-module-interlock/src/main/java/org/jeecg/modules/base/mapper/InterlockBaseMapper.java

@@ -0,0 +1,35 @@
+package org.jeecg.modules.base.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.base.entity.InterlockBase;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 联锁基础表
+ * @Author: jeecg-boot
+ * @Date:   2024-05-22
+ * @Version: V1.0
+ */
+public interface InterlockBaseMapper extends BaseMapper<InterlockBase> {
+
+	/**
+	 * 编辑节点状态
+	 * @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-interlock/src/main/java/org/jeecg/modules/base/mapper/xml/InterlockBaseMapper.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.base.mapper.InterlockBaseMapper">
+
+	<update id="updateTreeNodeStatus" parameterType="java.lang.String">
+		update interlock_base 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",
+		  interlockName as "title",
+		  (case when has_child = '1' then 0 else 1 end) as isLeaf,
+		  pid as parentId
+		from interlock_base
+		where pid = #{pid}
+		<if test="query != null">
+			<foreach collection="query.entrySet()" item="value" index="key">
+				and ${key} = #{value}
+			</foreach>
+		</if>
+	</select>
+
+</mapper>

+ 74 - 0
jeecg-module-interlock/src/main/java/org/jeecg/modules/base/service/IInterlockBaseService.java

@@ -0,0 +1,74 @@
+package org.jeecg.modules.base.service;
+
+import org.jeecg.common.system.vo.SelectTreeModel;
+import org.jeecg.modules.base.entity.InterlockBase;
+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-05-22
+ * @Version: V1.0
+ */
+public interface IInterlockBaseService extends IService<InterlockBase> {
+
+	/**根节点父ID的值*/
+	public static final String ROOT_PID_VALUE = "0";
+	
+	/**树节点有子节点状态值*/
+	public static final String HASCHILD = "1";
+	
+	/**树节点无子节点状态值*/
+	public static final String NOCHILD = "0";
+
+	/**
+	 * 新增节点
+	 *
+	 * @param interlockBase
+	 */
+	void addInterlockBase(InterlockBase interlockBase);
+	
+	/**
+   * 修改节点
+   *
+   * @param interlockBase
+   * @throws JeecgBootException
+   */
+	void updateInterlockBase(InterlockBase interlockBase) throws JeecgBootException;
+	
+	/**
+	 * 删除节点
+	 *
+	 * @param id
+   * @throws JeecgBootException
+	 */
+	void deleteInterlockBase(String id) throws JeecgBootException;
+
+	  /**
+	   * 查询所有数据,无分页
+	   *
+	   * @param queryWrapper
+	   * @return List<InterlockBase>
+	   */
+    List<InterlockBase> queryTreeListNoPage(QueryWrapper<InterlockBase> queryWrapper);
+
+	/**
+	 * 【vue3专用】根据父级编码加载分类字典的数据
+	 *
+	 * @param parentCode
+	 * @return
+	 */
+	List<SelectTreeModel> queryListByCode(String parentCode);
+
+	/**
+	 * 【vue3专用】根据pid查询子节点集合
+	 *
+	 * @param pid
+	 * @return
+	 */
+	List<SelectTreeModel> queryListByPid(String pid);
+
+}

+ 219 - 0
jeecg-module-interlock/src/main/java/org/jeecg/modules/base/service/impl/InterlockBaseServiceImpl.java

@@ -0,0 +1,219 @@
+package org.jeecg.modules.base.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.base.entity.InterlockBase;
+import org.jeecg.modules.base.mapper.InterlockBaseMapper;
+import org.jeecg.modules.base.service.IInterlockBaseService;
+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-05-22
+ * @Version: V1.0
+ */
+@Service
+public class InterlockBaseServiceImpl extends ServiceImpl<InterlockBaseMapper, InterlockBase> implements IInterlockBaseService {
+
+	@Override
+	public void addInterlockBase(InterlockBase interlockBase) {
+	   //新增时设置hasChild为0
+	    interlockBase.setHasChild(IInterlockBaseService.NOCHILD);
+		if(oConvertUtils.isEmpty(interlockBase.getPid())){
+			interlockBase.setPid(IInterlockBaseService.ROOT_PID_VALUE);
+		}else{
+			//如果当前节点父ID不为空 则设置父节点的hasChildren 为1
+			InterlockBase parent = baseMapper.selectById(interlockBase.getPid());
+			if(parent!=null && !"1".equals(parent.getHasChild())){
+				parent.setHasChild("1");
+				baseMapper.updateById(parent);
+			}
+		}
+		baseMapper.insert(interlockBase);
+	}
+	
+	@Override
+	public void updateInterlockBase(InterlockBase interlockBase) {
+		InterlockBase entity = this.getById(interlockBase.getId());
+		if(entity==null) {
+			throw new JeecgBootException("未找到对应实体");
+		}
+		String old_pid = entity.getPid();
+		String new_pid = interlockBase.getPid();
+		if(!old_pid.equals(new_pid)) {
+			updateOldParentNode(old_pid);
+			if(oConvertUtils.isEmpty(new_pid)){
+				interlockBase.setPid(IInterlockBaseService.ROOT_PID_VALUE);
+			}
+			if(!IInterlockBaseService.ROOT_PID_VALUE.equals(interlockBase.getPid())) {
+				baseMapper.updateTreeNodeStatus(interlockBase.getPid(), IInterlockBaseService.HASCHILD);
+			}
+		}
+		baseMapper.updateById(interlockBase);
+	}
+	
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void deleteInterlockBase(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){
+                    InterlockBase interlockBase = this.getById(idVal);
+                    String pidVal = interlockBase.getPid();
+                    //查询此节点上一级是否还有其他子节点
+                    List<InterlockBase> dataList = baseMapper.selectList(new QueryWrapper<InterlockBase>().eq("pid", 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{
+            InterlockBase interlockBase = this.getById(id);
+            if(interlockBase==null) {
+                throw new JeecgBootException("未找到对应实体");
+            }
+            updateOldParentNode(interlockBase.getPid());
+            baseMapper.deleteById(id);
+        }
+	}
+	
+	@Override
+    public List<InterlockBase> queryTreeListNoPage(QueryWrapper<InterlockBase> queryWrapper) {
+        List<InterlockBase> dataList = baseMapper.selectList(queryWrapper);
+        List<InterlockBase> mapList = new ArrayList<>();
+        for(InterlockBase data : dataList){
+            String pidVal = data.getPid();
+            //递归查询子节点的根节点
+            if(pidVal != null && !IInterlockBaseService.NOCHILD.equals(pidVal)){
+                InterlockBase 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<InterlockBase> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.eq(InterlockBase::getPid, parentCode);
+            List<InterlockBase> 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).getId();
+        }
+        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(!IInterlockBaseService.ROOT_PID_VALUE.equals(pid)) {
+			Long count = baseMapper.selectCount(new QueryWrapper<InterlockBase>().eq("pid", pid));
+			if(count==null || count<=1) {
+				baseMapper.updateTreeNodeStatus(pid, IInterlockBaseService.NOCHILD);
+			}
+		}
+	}
+
+	/**
+     * 递归查询节点的根节点
+     * @param pidVal
+     * @return
+     */
+    private InterlockBase getTreeRoot(String pidVal){
+        InterlockBase data =  baseMapper.selectById(pidVal);
+        if(data != null && !IInterlockBaseService.ROOT_PID_VALUE.equals(data.getPid())){
+            return this.getTreeRoot(data.getPid());
+        }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<InterlockBase> dataList = baseMapper.selectList(new QueryWrapper<InterlockBase>().eq("pid", pidVal));
+        if(dataList != null && dataList.size()>0){
+            for(InterlockBase tree : dataList) {
+                if(!sb.toString().contains(tree.getId())){
+                    sb.append(",").append(tree.getId());
+                }
+                this.getTreeChildIds(tree.getId(),sb);
+            }
+        }
+        return sb;
+    }
+
+}

+ 177 - 0
jeecg-module-interlock/src/main/java/org/jeecg/modules/summary/controller/InterlockSummaryController.java

@@ -0,0 +1,177 @@
+package org.jeecg.modules.summary.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.summary.entity.InterlockSummary;
+import org.jeecg.modules.summary.service.IInterlockSummaryService;
+
+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-05-22
+ * @Version: V1.0
+ */
+@Api(tags="联锁总表")
+@RestController
+@RequestMapping("/summary/interlockSummary")
+@Slf4j
+public class InterlockSummaryController extends JeecgController<InterlockSummary, IInterlockSummaryService> {
+	@Autowired
+	private IInterlockSummaryService interlockSummaryService;
+	
+	/**
+	 * 分页列表查询
+	 *
+	 * @param interlockSummary
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "联锁总表-分页列表查询")
+	@ApiOperation(value="联锁总表-分页列表查询", notes="联锁总表-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<InterlockSummary>> queryPageList(InterlockSummary interlockSummary,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<InterlockSummary> queryWrapper = QueryGenerator.initQueryWrapper(interlockSummary, req.getParameterMap());
+		Page<InterlockSummary> page = new Page<InterlockSummary>(pageNo, pageSize);
+		IPage<InterlockSummary> pageList = interlockSummaryService.page(page, queryWrapper);
+		return Result.OK(pageList);
+	}
+	
+	/**
+	 *   添加
+	 *
+	 * @param interlockSummary
+	 * @return
+	 */
+	@AutoLog(value = "联锁总表-添加")
+	@ApiOperation(value="联锁总表-添加", notes="联锁总表-添加")
+	//@RequiresPermissions("org.jeecg.modules:interlock_summary:add")
+	@PostMapping(value = "/add")
+	public Result<String> add(@RequestBody InterlockSummary interlockSummary) {
+		interlockSummaryService.save(interlockSummary);
+		return Result.OK("添加成功!");
+	}
+	
+	/**
+	 *  编辑
+	 *
+	 * @param interlockSummary
+	 * @return
+	 */
+	@AutoLog(value = "联锁总表-编辑")
+	@ApiOperation(value="联锁总表-编辑", notes="联锁总表-编辑")
+	//@RequiresPermissions("org.jeecg.modules:interlock_summary:edit")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> edit(@RequestBody InterlockSummary interlockSummary) {
+		interlockSummaryService.updateById(interlockSummary);
+		return Result.OK("编辑成功!");
+	}
+	
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "联锁总表-通过id删除")
+	@ApiOperation(value="联锁总表-通过id删除", notes="联锁总表-通过id删除")
+	//@RequiresPermissions("org.jeecg.modules:interlock_summary:delete")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		interlockSummaryService.removeById(id);
+		return Result.OK("删除成功!");
+	}
+	
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "联锁总表-批量删除")
+	@ApiOperation(value="联锁总表-批量删除", notes="联锁总表-批量删除")
+	//@RequiresPermissions("org.jeecg.modules:interlock_summary:deleteBatch")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.interlockSummaryService.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<InterlockSummary> queryById(@RequestParam(name="id",required=true) String id) {
+		InterlockSummary interlockSummary = interlockSummaryService.getById(id);
+		if(interlockSummary==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.OK(interlockSummary);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param interlockSummary
+    */
+    //@RequiresPermissions("org.jeecg.modules:interlock_summary:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, InterlockSummary interlockSummary) {
+        return super.exportXls(request, interlockSummary, InterlockSummary.class, "联锁总表");
+    }
+
+    /**
+      * 通过excel导入数据
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    //@RequiresPermissions("interlock_summary:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, InterlockSummary.class);
+    }
+
+}

+ 86 - 0
jeecg-module-interlock/src/main/java/org/jeecg/modules/summary/entity/InterlockSummary.java

@@ -0,0 +1,86 @@
+package org.jeecg.modules.summary.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: 联锁总表
+ * @Author: jeecg-boot
+ * @Date:   2024-05-22
+ * @Version: V1.0
+ */
+@Data
+@TableName("interlock_summary")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="interlock_summary对象", description="联锁总表")
+public class InterlockSummary implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "主键")
+    private java.lang.String id;
+	/**联锁名称*/
+	@Excel(name = "联锁名称", width = 15)
+    @ApiModelProperty(value = "联锁名称")
+    private java.lang.String interlockName;
+	/**联锁条件*/
+	@Excel(name = "联锁条件", width = 15)
+    @ApiModelProperty(value = "联锁条件")
+    private java.lang.String interlockCondition;
+	/**仪表状态*/
+	@Excel(name = "仪表状态", width = 15)
+    @ApiModelProperty(value = "仪表状态")
+    private java.lang.String instrumentStatus;
+	/**联锁状态*/
+	@Excel(name = "联锁状态", width = 15)
+    @ApiModelProperty(value = "联锁状态")
+    private java.lang.String interlockStatus;
+	/**控制系统状态*/
+	@Excel(name = "控制系统状态", width = 15)
+    @ApiModelProperty(value = "控制系统状态")
+    private java.lang.String controlSystemStatus;
+	/**回路健康级别*/
+	@Excel(name = "回路健康级别", width = 15)
+    @ApiModelProperty(value = "回路健康级别")
+    private java.lang.String loopHealthLevel;
+	/**创建人*/
+    @ApiModelProperty(value = "创建人")
+    private java.lang.String createBy;
+	/**创建日期*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建日期")
+    private java.util.Date createTime;
+	/**更新人*/
+    @ApiModelProperty(value = "更新人")
+    private java.lang.String updateBy;
+	/**更新日期*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新日期")
+    private java.util.Date updateTime;
+	/**备注*/
+	@Excel(name = "备注", width = 15)
+    @ApiModelProperty(value = "备注")
+    private java.lang.String remark;
+	/**所属部门*/
+    @ApiModelProperty(value = "所属部门")
+    private java.lang.String sysOrgCode;
+}

+ 17 - 0
jeecg-module-interlock/src/main/java/org/jeecg/modules/summary/mapper/InterlockSummaryMapper.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.summary.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.summary.entity.InterlockSummary;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 联锁总表
+ * @Author: jeecg-boot
+ * @Date:   2024-05-22
+ * @Version: V1.0
+ */
+public interface InterlockSummaryMapper extends BaseMapper<InterlockSummary> {
+
+}

+ 5 - 0
jeecg-module-interlock/src/main/java/org/jeecg/modules/summary/mapper/xml/InterlockSummaryMapper.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.summary.mapper.InterlockSummaryMapper">
+
+</mapper>

+ 14 - 0
jeecg-module-interlock/src/main/java/org/jeecg/modules/summary/service/IInterlockSummaryService.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.summary.service;
+
+import org.jeecg.modules.summary.entity.InterlockSummary;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 联锁总表
+ * @Author: jeecg-boot
+ * @Date:   2024-05-22
+ * @Version: V1.0
+ */
+public interface IInterlockSummaryService extends IService<InterlockSummary> {
+
+}

+ 19 - 0
jeecg-module-interlock/src/main/java/org/jeecg/modules/summary/service/impl/InterlockSummaryServiceImpl.java

@@ -0,0 +1,19 @@
+package org.jeecg.modules.summary.service.impl;
+
+import org.jeecg.modules.summary.entity.InterlockSummary;
+import org.jeecg.modules.summary.mapper.InterlockSummaryMapper;
+import org.jeecg.modules.summary.service.IInterlockSummaryService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: 联锁总表
+ * @Author: jeecg-boot
+ * @Date:   2024-05-22
+ * @Version: V1.0
+ */
+@Service
+public class InterlockSummaryServiceImpl extends ServiceImpl<InterlockSummaryMapper, InterlockSummary> implements IInterlockSummaryService {
+
+}