Explorar el Código

新增通用树列表管理

ZhuDeKang hace 6 meses
padre
commit
6c6a06f275

+ 5 - 0
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/controller/MdDataItemController.java

@@ -2,6 +2,8 @@ package com.ruoyi.interfaces.controller;
 
 import java.util.List;
 import javax.servlet.http.HttpServletResponse;
+
+import com.ruoyi.interfaces.domain.MdDataCate;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -66,6 +68,9 @@ public class MdDataItemController extends BaseController
         return success(mdDataItemService.selectMdDataItemByDataId(dataId));
     }
 
+
+
+
     /**
      * 新增数据项
      */

+ 136 - 0
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/controller/PtTreeCateController.java

@@ -0,0 +1,136 @@
+package com.ruoyi.interfaces.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import com.ruoyi.interfaces.domain.MdModelInfo;
+import com.ruoyi.interfaces.service.IMdModelInfoService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.interfaces.domain.PtTreeCate;
+import com.ruoyi.interfaces.service.IPtTreeCateService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 树状目录Controller
+ * 
+ * @author 朱得糠
+ * @date 2025-07-29
+ */
+@RestController
+@RequestMapping("/interfaces/cate")
+public class PtTreeCateController extends BaseController
+{
+    @Autowired
+    private IPtTreeCateService ptTreeCateService;
+
+    @Autowired
+    private IMdModelInfoService mdModelInfoService;
+
+
+    /**
+     * 查询树状目录列表
+     */
+    @GetMapping("/list")
+    public TableDataInfo list(PtTreeCate ptTreeCate)
+    {
+        startPage();
+        List<PtTreeCate> list = ptTreeCateService.selectPtTreeCateList(ptTreeCate);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出树状目录列表
+     */
+    @Log(title = "树状目录", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, PtTreeCate ptTreeCate)
+    {
+        List<PtTreeCate> list = ptTreeCateService.selectPtTreeCateList(ptTreeCate);
+        ExcelUtil<PtTreeCate> util = new ExcelUtil<PtTreeCate>(PtTreeCate.class);
+        util.exportExcel(response, list, "树状目录数据");
+    }
+
+    /**
+     * 获取树状目录详细信息
+     */
+    @GetMapping(value = "/{treeId}")
+    public AjaxResult getInfo(@PathVariable("treeId") String treeId)
+    {
+        return success(ptTreeCateService.selectPtTreeCateByTreeId(treeId));
+    }
+
+    /**
+     * 构建数据项树状列表
+     * @param ptTreeCate
+     * @return
+     */
+    @GetMapping(value = "/treeselect")
+    public AjaxResult treeselect(PtTreeCate ptTreeCate) {
+        List<PtTreeCate> ptTreeCates = ptTreeCateService.selectPtTreeCateList(ptTreeCate);
+        return success(ptTreeCateService.buildDataTreeSelect(ptTreeCates));
+    }
+
+
+    /**
+     * 新增树状目录
+     */
+    @Log(title = "树状目录", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody PtTreeCate ptTreeCate)
+    {
+        return toAjax(ptTreeCateService.insertPtTreeCate(ptTreeCate));
+    }
+
+    /**
+     * 修改树状目录
+     */
+    @Log(title = "树状目录", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody PtTreeCate ptTreeCate)
+    {
+        return toAjax(ptTreeCateService.updatePtTreeCate(ptTreeCate));
+    }
+
+    /**
+     * 删除树状目录
+     */
+    @Log(title = "树状目录", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{treeIds}")
+    public AjaxResult remove(@PathVariable String[] treeIds)
+    {
+        return toAjax(ptTreeCateService.deletePtTreeCateByTreeIds(treeIds));
+    }
+
+
+
+    /**
+     * 构建模型树状列表
+     * @param ptTreeCate
+     * @return
+     */
+    @GetMapping(value = "/modelTreeSelect")
+    public AjaxResult modelTreeSelect(PtTreeCate ptTreeCate) {
+        ptTreeCate.setTreeType("MODEL");
+        List<PtTreeCate> ptTreeCates = ptTreeCateService.selectPtTreeCateList(ptTreeCate);
+        for (PtTreeCate treeCate : ptTreeCates) {
+            MdModelInfo mdModelInfo = new MdModelInfo();
+            mdModelInfo.setCateid(treeCate.getTreeId());
+            treeCate.setModels(mdModelInfoService.selectMdModelInfoList(mdModelInfo));
+        }
+        return success(ptTreeCateService.buildDataTreeSelect(ptTreeCates));
+    }
+
+}

+ 160 - 0
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/domain/PtTreeCate.java

@@ -0,0 +1,160 @@
+package com.ruoyi.interfaces.domain;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 树状目录对象 pt_tree_cate
+ * 
+ * @author 朱得糠
+ * @date 2025-07-29
+ */
+public class PtTreeCate extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** id */
+    private String treeId;
+
+    /** 树类型 */
+    @Excel(name = "树类型")
+    private String treeType;
+
+    /** 父节点序号 */
+    @Excel(name = "父节点序号")
+    private String treePid;
+
+    /** 名称 */
+    @Excel(name = "名称")
+    private String itemName;
+
+    /** 排序 */
+    @Excel(name = "排序")
+    private Long itemNo;
+
+    /** 备注 */
+    @Excel(name = "备注")
+    private String itemNotes;
+
+    /** 编辑时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "编辑时间")
+    private Date modifyby;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "创建时间")
+    private Date createby;
+
+    private List<MdModelInfo> models;
+
+
+    private List<PtTreeCate> children = new ArrayList<PtTreeCate>();
+
+    public List<MdModelInfo> getModels() {
+        return models;
+    }
+
+    public void setModels(List<MdModelInfo> models) {
+        this.models = models;
+    }
+
+    public List<PtTreeCate> getChildren() {
+        return children;
+    }
+
+    public void setChildren(List<PtTreeCate> children) {
+        this.children = children;
+    }
+
+    public Date getCreateby() {
+        return createby;
+    }
+
+    public void setCreateby(Date createby) {
+        this.createby = createby;
+    }
+
+    public void setTreeId(String treeId)
+    {
+        this.treeId = treeId;
+    }
+
+    public String getTreeId() 
+    {
+        return treeId;
+    }
+    public void setTreeType(String treeType) 
+    {
+        this.treeType = treeType;
+    }
+
+    public String getTreeType() 
+    {
+        return treeType;
+    }
+    public void setTreePid(String treePid) 
+    {
+        this.treePid = treePid;
+    }
+
+    public String getTreePid() 
+    {
+        return treePid;
+    }
+    public void setItemName(String itemName) 
+    {
+        this.itemName = itemName;
+    }
+
+    public String getItemName() 
+    {
+        return itemName;
+    }
+    public void setItemNo(Long itemNo) 
+    {
+        this.itemNo = itemNo;
+    }
+
+    public Long getItemNo() 
+    {
+        return itemNo;
+    }
+    public void setItemNotes(String itemNotes) 
+    {
+        this.itemNotes = itemNotes;
+    }
+
+    public String getItemNotes() 
+    {
+        return itemNotes;
+    }
+    public void setModifyby(Date modifyby)
+    {
+        this.modifyby = modifyby;
+    }
+
+    public Date getModifyby()
+    {
+        return modifyby;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("treeId", getTreeId())
+            .append("treeType", getTreeType())
+            .append("treePid", getTreePid())
+            .append("itemName", getItemName())
+            .append("itemNo", getItemNo())
+            .append("itemNotes", getItemNotes())
+            .append("createby", getCreateby())
+            .append("modifyby", getModifyby())
+            .toString();
+    }
+}

+ 22 - 0
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/domain/TreeSelectString.java

@@ -16,6 +16,11 @@ public class TreeSelectString  implements Serializable{
     /** 节点名称 */
     private String label;
 
+    /**
+     * 模型信息列表
+     */
+    private List<MdModelInfo> models;
+
     /** 子节点 */
     @JsonInclude(JsonInclude.Include.NON_EMPTY)
     private List<TreeSelectString> children;
@@ -27,6 +32,23 @@ public class TreeSelectString  implements Serializable{
         this.children = menu.getChildren().stream().map(TreeSelectString::new).collect(Collectors.toList());
     }
 
+    public TreeSelectString(PtTreeCate menu)
+    {
+        this.id = menu.getTreeId();
+        this.label = menu.getItemName();
+        this.models = menu.getModels();
+        this.children = menu.getChildren().stream().map(TreeSelectString::new).collect(Collectors.toList());
+    }
+
+
+    public List<MdModelInfo> getModels() {
+        return models;
+    }
+
+    public void setModels(List<MdModelInfo> models) {
+        this.models = models;
+    }
+
     public TreeSelectString(String id, String label, List<TreeSelectString> children) {
         this.id = id;
         this.label = label;

+ 1 - 1
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/PtServiceMapper.java

@@ -12,7 +12,7 @@ import org.springframework.stereotype.Repository;
 import java.util.List;
 
 @Repository
-@DataSource(DataSourceType.SLAVE)
+//@DataSource(DataSourceType.SLAVE)
 public interface PtServiceMapper extends BaseMapper<PtService> {
 
     /**

+ 65 - 0
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/PtTreeCateMapper.java

@@ -0,0 +1,65 @@
+package com.ruoyi.interfaces.mapper;
+
+import java.util.List;
+
+import com.ruoyi.common.annotation.DataSource;
+import com.ruoyi.common.enums.DataSourceType;
+import com.ruoyi.interfaces.domain.PtTreeCate;
+
+/**
+ * 树状目录Mapper接口
+ * 
+ * @author 朱得糠
+ * @date 2025-07-29
+ */
+@DataSource(DataSourceType.SLAVE )
+public interface PtTreeCateMapper 
+{
+    /**
+     * 查询树状目录
+     * 
+     * @param treeId 树状目录主键
+     * @return 树状目录
+     */
+    public PtTreeCate selectPtTreeCateByTreeId(String treeId);
+
+    /**
+     * 查询树状目录列表
+     * 
+     * @param ptTreeCate 树状目录
+     * @return 树状目录集合
+     */
+    public List<PtTreeCate> selectPtTreeCateList(PtTreeCate ptTreeCate);
+
+    /**
+     * 新增树状目录
+     * 
+     * @param ptTreeCate 树状目录
+     * @return 结果
+     */
+    public int insertPtTreeCate(PtTreeCate ptTreeCate);
+
+    /**
+     * 修改树状目录
+     * 
+     * @param ptTreeCate 树状目录
+     * @return 结果
+     */
+    public int updatePtTreeCate(PtTreeCate ptTreeCate);
+
+    /**
+     * 删除树状目录
+     * 
+     * @param treeId 树状目录主键
+     * @return 结果
+     */
+    public int deletePtTreeCateByTreeId(String treeId);
+
+    /**
+     * 批量删除树状目录
+     * 
+     * @param treeIds 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deletePtTreeCateByTreeIds(String[] treeIds);
+}

+ 64 - 0
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/service/IPtTreeCateService.java

@@ -0,0 +1,64 @@
+package com.ruoyi.interfaces.service;
+
+import java.util.List;
+import com.ruoyi.interfaces.domain.PtTreeCate;
+import com.ruoyi.interfaces.domain.TreeSelectString;
+
+/**
+ * 树状目录Service接口
+ * 
+ * @author 朱得糠
+ * @date 2025-07-29
+ */
+public interface IPtTreeCateService 
+{
+    /**
+     * 查询树状目录
+     * 
+     * @param treeId 树状目录主键
+     * @return 树状目录
+     */
+    public PtTreeCate selectPtTreeCateByTreeId(String treeId);
+
+    /**
+     * 查询树状目录列表
+     * 
+     * @param ptTreeCate 树状目录
+     * @return 树状目录集合
+     */
+    public List<PtTreeCate> selectPtTreeCateList(PtTreeCate ptTreeCate);
+
+    /**
+     * 新增树状目录
+     * 
+     * @param ptTreeCate 树状目录
+     * @return 结果
+     */
+    public int insertPtTreeCate(PtTreeCate ptTreeCate);
+
+    /**
+     * 修改树状目录
+     * 
+     * @param ptTreeCate 树状目录
+     * @return 结果
+     */
+    public int updatePtTreeCate(PtTreeCate ptTreeCate);
+
+    /**
+     * 批量删除树状目录
+     * 
+     * @param treeIds 需要删除的树状目录主键集合
+     * @return 结果
+     */
+    public int deletePtTreeCateByTreeIds(String[] treeIds);
+
+    /**
+     * 删除树状目录信息
+     * 
+     * @param treeId 树状目录主键
+     * @return 结果
+     */
+    public int deletePtTreeCateByTreeId(String treeId);
+
+    List<TreeSelectString> buildDataTreeSelect(List<PtTreeCate> ptTreeCates);
+}

+ 171 - 0
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/service/impl/PtTreeCateServiceImpl.java

@@ -0,0 +1,171 @@
+package com.ruoyi.interfaces.service.impl;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.uuid.IdUtils;
+import com.ruoyi.interfaces.domain.MdDataCate;
+import com.ruoyi.interfaces.domain.TreeSelectString;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.interfaces.mapper.PtTreeCateMapper;
+import com.ruoyi.interfaces.domain.PtTreeCate;
+import com.ruoyi.interfaces.service.IPtTreeCateService;
+
+/**
+ * 树状目录Service业务层处理
+ * 
+ * @author 朱得糠
+ * @date 2025-07-29
+ */
+@Service
+public class PtTreeCateServiceImpl implements IPtTreeCateService 
+{
+    @Autowired
+    private PtTreeCateMapper ptTreeCateMapper;
+
+    /**
+     * 查询树状目录
+     * 
+     * @param treeId 树状目录主键
+     * @return 树状目录
+     */
+    @Override
+    public PtTreeCate selectPtTreeCateByTreeId(String treeId)
+    {
+        return ptTreeCateMapper.selectPtTreeCateByTreeId(treeId);
+    }
+
+    /**
+     * 查询树状目录列表
+     * 
+     * @param ptTreeCate 树状目录
+     * @return 树状目录
+     */
+    @Override
+    public List<PtTreeCate> selectPtTreeCateList(PtTreeCate ptTreeCate)
+    {
+        return ptTreeCateMapper.selectPtTreeCateList(ptTreeCate);
+    }
+
+    /**
+     * 新增树状目录
+     * 
+     * @param ptTreeCate 树状目录
+     * @return 结果
+     */
+    @Override
+    public int insertPtTreeCate(PtTreeCate ptTreeCate)
+    {
+        ptTreeCate.setTreeId(IdUtils.fastUUID());
+        ptTreeCate.setCreateby(DateUtils.getNowDate());
+        return ptTreeCateMapper.insertPtTreeCate(ptTreeCate);
+    }
+
+    /**
+     * 修改树状目录
+     * 
+     * @param ptTreeCate 树状目录
+     * @return 结果
+     */
+    @Override
+    public int updatePtTreeCate(PtTreeCate ptTreeCate)
+    {
+        ptTreeCate.setModifyby(DateUtils.getNowDate());
+        return ptTreeCateMapper.updatePtTreeCate(ptTreeCate);
+    }
+
+    /**
+     * 批量删除树状目录
+     * 
+     * @param treeIds 需要删除的树状目录主键
+     * @return 结果
+     */
+    @Override
+    public int deletePtTreeCateByTreeIds(String[] treeIds)
+    {
+        return ptTreeCateMapper.deletePtTreeCateByTreeIds(treeIds);
+    }
+
+    /**
+     * 删除树状目录信息
+     * 
+     * @param treeId 树状目录主键
+     * @return 结果
+     */
+    @Override
+    public int deletePtTreeCateByTreeId(String treeId)
+    {
+        return ptTreeCateMapper.deletePtTreeCateByTreeId(treeId);
+    }
+
+    @Override
+    public List<TreeSelectString> buildDataTreeSelect(List<PtTreeCate> menus) {
+
+        List<PtTreeCate> menuTrees = buildDataTree(menus);
+        List<TreeSelectString> collect = menuTrees.stream().map(TreeSelectString::new).collect(Collectors.toList());
+        return collect;
+    }
+
+    private List<PtTreeCate> buildDataTree(List<PtTreeCate> menus) {
+        List<PtTreeCate> returnList = new ArrayList<PtTreeCate>();
+        List<String> tempList = menus.stream().map(PtTreeCate::getTreeId).collect(Collectors.toList());
+        for (Iterator<PtTreeCate> iterator = menus.iterator(); iterator.hasNext();)
+        {
+            PtTreeCate menu = (PtTreeCate) iterator.next();
+            // 如果是顶级节点, 遍历该父节点的所有子节点
+            if (!tempList.contains(menu.getTreePid()))
+            {
+                recursionFn(menus, menu);
+                returnList.add(menu);
+            }
+        }
+        if (returnList.isEmpty())
+        {
+            returnList = menus;
+        }
+        return returnList;
+    }
+    private void recursionFn(List<PtTreeCate> list, PtTreeCate t)
+    {
+        // 得到子节点列表
+        List<PtTreeCate> childList = getChildList(list, t);
+        t.setChildren(childList);
+        for (PtTreeCate tChild : childList)
+        {
+            if (hasChild(list, tChild))
+            {
+                recursionFn(list, tChild);
+            }
+        }
+    }
+    /**
+     * 得到子节点列表
+     */
+    private List<PtTreeCate> getChildList(List<PtTreeCate> list, PtTreeCate t)
+    {
+        List<PtTreeCate> tlist = new ArrayList<PtTreeCate>();
+        Iterator<PtTreeCate> it = list.iterator();
+        while (it.hasNext())
+        {
+            PtTreeCate n = (PtTreeCate) it.next();
+            if (n.getTreePid().equals(t.getTreeId()))
+            {
+                tlist.add(n);
+            }
+        }
+        return tlist;
+    }
+
+    /**
+     * 判断是否有子节点
+     */
+    private boolean hasChild(List<PtTreeCate> list, PtTreeCate t)
+    {
+        return getChildList(list, t).size() > 0;
+    }
+
+}

+ 88 - 0
ruoyi-api-patform/src/main/resources/mapper/interfaces/PtTreeCateMapper.xml

@@ -0,0 +1,88 @@
+<?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="com.ruoyi.interfaces.mapper.PtTreeCateMapper">
+
+    <resultMap type="com.ruoyi.interfaces.domain.PtTreeCate" id="PtTreeCateResult">
+        <result property="treeId"    column="TREE_ID"    />
+        <result property="treeType"    column="TREE_TYPE"    />
+        <result property="treePid"    column="TREE_PID"    />
+        <result property="itemName"    column="ITEM_NAME"    />
+        <result property="itemNo"    column="ITEM_NO"    />
+        <result property="itemNotes"    column="ITEM_NOTES"    />
+        <result property="createby"    column="CREATEBY"    />
+        <result property="modifyby"    column="MODIFYBY"    />
+    </resultMap>
+
+    <sql id="selectPtTreeCateVo">
+        select TREE_ID, TREE_TYPE, TREE_PID, ITEM_NAME, ITEM_NO, ITEM_NOTES, CREATEBY, MODIFYBY from pt_tree_cate
+    </sql>
+
+    <select id="selectPtTreeCateList" parameterType="com.ruoyi.interfaces.domain.PtTreeCate" resultMap="PtTreeCateResult">
+        <include refid="selectPtTreeCateVo"/>
+        <where>
+            <if test="treeType != null  and treeType != ''"> and TREE_TYPE = #{treeType}</if>
+            <if test="treePid != null  and treePid != ''"> and TREE_PID = #{treePid}</if>
+            <if test="itemName != null  and itemName != ''"> and ITEM_NAME like concat('%', #{itemName}, '%')</if>
+            <if test="itemNo != null "> and ITEM_NO = #{itemNo}</if>
+            <if test="itemNotes != null  and itemNotes != ''"> and ITEM_NOTES = #{itemNotes}</if>
+            <if test="createby != null  and createby != ''"> and CREATEBY = #{createby}</if>
+            <if test="modifyby != null  and modifyby != ''"> and MODIFYBY = #{modifyby}</if>
+        </where>
+    </select>
+
+    <select id="selectPtTreeCateByTreeId" parameterType="String" resultMap="PtTreeCateResult">
+        <include refid="selectPtTreeCateVo"/>
+        where TREE_ID = #{treeId}
+    </select>
+
+    <insert id="insertPtTreeCate" parameterType="com.ruoyi.interfaces.domain.PtTreeCate">
+        insert into pt_tree_cate
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="treeId != null">TREE_ID,</if>
+            <if test="treeType != null and treeType != ''">TREE_TYPE,</if>
+            <if test="treePid != null">TREE_PID,</if>
+            <if test="itemName != null">ITEM_NAME,</if>
+            <if test="itemNo != null">ITEM_NO,</if>
+            <if test="itemNotes != null">ITEM_NOTES,</if>
+            <if test="createby != null">CREATEBY,</if>
+            <if test="modifyby != null">MODIFYBY,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="treeId != null">#{treeId},</if>
+            <if test="treeType != null and treeType != ''">#{treeType},</if>
+            <if test="treePid != null">#{treePid},</if>
+            <if test="itemName != null">#{itemName},</if>
+            <if test="itemNo != null">#{itemNo},</if>
+            <if test="itemNotes != null">#{itemNotes},</if>
+            <if test="createby != null">#{createby},</if>
+            <if test="modifyby != null">#{modifyby},</if>
+        </trim>
+    </insert>
+
+    <update id="updatePtTreeCate" parameterType="com.ruoyi.interfaces.domain.PtTreeCate">
+        update pt_tree_cate
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="treeType != null and treeType != ''">TREE_TYPE = #{treeType},</if>
+            <if test="treePid != null">TREE_PID = #{treePid},</if>
+            <if test="itemName != null">ITEM_NAME = #{itemName},</if>
+            <if test="itemNo != null">ITEM_NO = #{itemNo},</if>
+            <if test="itemNotes != null">ITEM_NOTES = #{itemNotes},</if>
+            <if test="createby != null">CREATEBY = #{createby},</if>
+            <if test="modifyby != null">MODIFYBY = #{modifyby},</if>
+        </trim>
+        where TREE_ID = #{treeId}
+    </update>
+
+    <delete id="deletePtTreeCateByTreeId" parameterType="String">
+        delete from pt_tree_cate where TREE_ID = #{treeId}
+    </delete>
+
+    <delete id="deletePtTreeCateByTreeIds" parameterType="String">
+        delete from pt_tree_cate where TREE_ID in
+        <foreach item="treeId" collection="array" open="(" separator="," close=")">
+            #{treeId}
+        </foreach>
+    </delete>
+</mapper>