LIVE_YE 1 年之前
父節點
當前提交
dd6cc00fdb
共有 24 個文件被更改,包括 3010 次插入0 次删除
  1. 130 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/proposal/CategoryProposalController.java
  2. 152 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/proposal/ProposalInfoController.java
  3. 118 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/proposal/ProposalUnitReplyController.java
  4. 104 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/proposal/ProposalUserController.java
  5. 138 0
      ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/CategoryProposal.java
  6. 492 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/ProposalInfo.java
  7. 119 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/ProposalUnitReply.java
  8. 94 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/ProposalUser.java
  9. 62 0
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/CategoryProposalMapper.java
  10. 61 0
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/ProposalInfoMapper.java
  11. 67 0
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/ProposalUnitReplyMapper.java
  12. 63 0
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/ProposalUserMapper.java
  13. 68 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/ICategoryProposalService.java
  14. 71 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/IProposalInfoService.java
  15. 66 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/IProposalUnitReplyService.java
  16. 61 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/IProposalUserService.java
  17. 185 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/CategoryProposalServiceImpl.java
  18. 244 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ProposalInfoServiceImpl.java
  19. 139 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ProposalUnitReplyServiceImpl.java
  20. 93 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ProposalUserServiceImpl.java
  21. 98 0
      ruoyi-system/src/main/resources/mapper/system/CategoryProposalMapper.xml
  22. 221 0
      ruoyi-system/src/main/resources/mapper/system/ProposalInfoMapper.xml
  23. 86 0
      ruoyi-system/src/main/resources/mapper/system/ProposalUnitReplyMapper.xml
  24. 78 0
      ruoyi-system/src/main/resources/mapper/system/ProposalUserMapper.xml

+ 130 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/proposal/CategoryProposalController.java

@@ -0,0 +1,130 @@
+package com.ruoyi.web.controller.proposal;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import com.ruoyi.common.core.domain.entity.CategoryProposal;
+import com.ruoyi.common.core.domain.entity.SysDept;
+import com.ruoyi.common.utils.StringUtils;
+import org.apache.commons.lang3.ArrayUtils;
+import org.springframework.security.access.prepost.PreAuthorize;
+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.system.service.ICategoryProposalService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 提案类别Controller
+ *
+ * @author boman
+ * @date 2024-03-07
+ */
+@RestController
+@RequestMapping("/category/proposal")
+public class CategoryProposalController extends BaseController
+{
+    @Autowired
+    private ICategoryProposalService categoryProposalService;
+
+/**
+ * 查询提案类别列表
+ */
+@PreAuthorize("@ss.hasPermi('category:proposal:list')")
+@GetMapping("/list")
+    public TableDataInfo list(CategoryProposal categoryProposal)
+    {
+        //startPage();
+        List<CategoryProposal> list = categoryProposalService.selectCategoryProposalList(categoryProposal);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出提案类别列表
+     */
+    @PreAuthorize("@ss.hasPermi('category:proposal:export')")
+    @Log(title = "提案类别", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, CategoryProposal categoryProposal)
+    {
+        List<CategoryProposal> list = categoryProposalService.selectCategoryProposalList(categoryProposal);
+        ExcelUtil<CategoryProposal> util = new ExcelUtil<CategoryProposal>(CategoryProposal.class);
+        util.exportExcel(response, list, "提案类别数据");
+    }
+
+    /**
+     * 获取提案类别详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('category:proposal:query')")
+    @GetMapping(value = "/{categoryId}")
+    public AjaxResult getInfo(@PathVariable("categoryId") Long categoryId)
+    {
+        return success(categoryProposalService.selectCategoryProposalByCategoryId(categoryId));
+    }
+
+    /**
+     * 新增提案类别
+     */
+    @PreAuthorize("@ss.hasPermi('category:proposal:add')")
+    @Log(title = "提案类别", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody CategoryProposal categoryProposal)
+    {
+        return toAjax(categoryProposalService.insertCategoryProposal(categoryProposal));
+    }
+
+    /**
+     * 修改提案类别
+     */
+    @PreAuthorize("@ss.hasPermi('category:proposal:edit')")
+    @Log(title = "提案类别", businessType = BusinessType.UPDATE)
+    @PostMapping("/put")
+    public AjaxResult edit(@RequestBody CategoryProposal categoryProposal)
+    {
+        return toAjax(categoryProposalService.updateCategoryProposal(categoryProposal));
+    }
+
+    /**
+     * 删除提案类别
+     */
+    @PreAuthorize("@ss.hasPermi('category:proposal:remove')")
+    @Log(title = "提案类别", businessType = BusinessType.DELETE)
+    @GetMapping("/delete/{categoryIds}")
+    public AjaxResult remove(@PathVariable Long[] categoryIds)
+    {
+        return toAjax(categoryProposalService.deleteCategoryProposalByCategoryIds(categoryIds));
+    }
+
+    /**
+     * 获取提案类别树列表
+     */
+    @PreAuthorize("@ss.hasPermi('category:proposal:treelist')")
+    @GetMapping("/categoryTree")
+    public AjaxResult categoryTree(CategoryProposal categoryProposal)
+    {
+        return success(categoryProposalService.selectCategoryTreeList(categoryProposal));
+    }
+
+    /**
+     * 查询部门列表(排除节点)
+     */
+    @PreAuthorize("@ss.hasPermi('category:proposal:list')")
+    @GetMapping("/list/exclude/{categoryId}")
+    public AjaxResult excludeChild(@PathVariable(value = "categoryId", required = false) Long categoryId)
+    {
+        List<CategoryProposal> list = categoryProposalService.selectCategoryProposalList(new CategoryProposal());
+        list.removeIf(d -> d.getCategoryId().intValue() == categoryId || ArrayUtils.contains(StringUtils.split(d.getAncestors(), ","), categoryId + ""));
+        return success(list);
+    }
+}

+ 152 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/proposal/ProposalInfoController.java

@@ -0,0 +1,152 @@
+package com.ruoyi.web.controller.proposal;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import com.ruoyi.system.domain.ProposalUnitReply;
+import org.springframework.security.access.prepost.PreAuthorize;
+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.system.domain.ProposalInfo;
+import com.ruoyi.system.service.IProposalInfoService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 提案信息Controller
+ *
+ * @author boman
+ * @date 2024-03-07
+ */
+@RestController
+@RequestMapping("/proposalInfo/info")
+public class ProposalInfoController extends BaseController
+{
+    @Autowired
+    private IProposalInfoService proposalInfoService;
+
+/**
+ * 查询提案信息列表
+ */
+@PreAuthorize("@ss.hasPermi('proposalInfo:info:list')")
+@GetMapping("/list")
+    public TableDataInfo list(ProposalInfo proposalInfo)
+    {
+        startPage();
+        List<ProposalInfo> list = proposalInfoService.selectProposalInfoList(proposalInfo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出提案信息列表
+     */
+    @PreAuthorize("@ss.hasPermi('proposalInfo:info:export')")
+    @Log(title = "提案信息", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, ProposalInfo proposalInfo)
+    {
+        List<ProposalInfo> list = proposalInfoService.selectProposalInfoList(proposalInfo);
+        ExcelUtil<ProposalInfo> util = new ExcelUtil<ProposalInfo>(ProposalInfo.class);
+        util.exportExcel(response, list, "提案信息数据");
+    }
+
+    /**
+     * 获取提案信息详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('proposalInfo:info:query')")
+    @GetMapping(value = "/{proposalId}")
+    public AjaxResult getInfo(@PathVariable("proposalId") Long proposalId)
+    {
+        return success(proposalInfoService.selectProposalInfoByProposalId(proposalId));
+    }
+
+    /**
+     * 新增提案信息
+     */
+    @PreAuthorize("@ss.hasPermi('proposalInfo:info:add')")
+    @Log(title = "提案信息", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody ProposalInfo proposalInfo)
+    {
+        return toAjax(proposalInfoService.insertProposalInfo(proposalInfo));
+    }
+
+    /**
+     * 修改提案信息
+     */
+    @PreAuthorize("@ss.hasPermi('proposalInfo:info:edit')")
+    @Log(title = "提案信息", businessType = BusinessType.UPDATE)
+    @PostMapping("/put")
+    public AjaxResult edit(@RequestBody ProposalInfo proposalInfo)
+    {
+        return toAjax(proposalInfoService.updateProposalInfo(proposalInfo));
+    }
+
+    /**
+     * 删除提案信息
+     */
+    @PreAuthorize("@ss.hasPermi('proposalInfo:info:remove')")
+    @Log(title = "提案信息", businessType = BusinessType.DELETE)
+    @GetMapping("/delete/{proposalIds}")
+    public AjaxResult remove(@PathVariable Long[] proposalIds)
+    {
+        return toAjax(proposalInfoService.deleteProposalInfoByProposalIds(proposalIds));
+    }
+
+    /***
+     * 是否立案
+     */
+    @PreAuthorize("@ss.hasPermi('proposalInfo:info:isRecord')")
+    @Log(title = "提案信息", businessType = BusinessType.UPDATE)
+    @PostMapping("/isRecord")
+    public AjaxResult isRecord(@RequestBody ProposalInfo proposalInfo)
+    {
+        return proposalInfoService.isRecord(proposalInfo);
+    }
+
+    /***
+     * 提案交办
+     */
+    @PreAuthorize("@ss.hasPermi('proposalInfo:info:assign')")
+    @Log(title = "提案信息", businessType = BusinessType.UPDATE)
+    @PostMapping("/assign")
+    public AjaxResult assign(@RequestBody ProposalInfo proposalInfo)
+    {
+        return proposalInfoService.assign(proposalInfo);
+    }
+
+
+    /***
+     * 委员意见
+     */
+    @PreAuthorize("@ss.hasPermi('proposalInfo:info:idea')")
+    @Log(title = "提案信息", businessType = BusinessType.UPDATE)
+    @PostMapping("/idea")
+    public AjaxResult idea(@RequestBody ProposalInfo proposalInfo)
+    {
+        return proposalInfoService.idea(proposalInfo);
+    }
+
+    /***
+     * 是否办结
+     */
+    @PreAuthorize("@ss.hasPermi('proposalInfo:info:zxIdea')")
+    @Log(title = "提案信息", businessType = BusinessType.UPDATE)
+    @PostMapping("/zxIdea")
+    public AjaxResult zxIdea(@RequestBody ProposalInfo proposalInfo)
+    {
+        return proposalInfoService.zxIdea(proposalInfo);
+    }
+
+}

+ 118 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/proposal/ProposalUnitReplyController.java

@@ -0,0 +1,118 @@
+package com.ruoyi.web.controller.proposal;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import com.ruoyi.system.domain.ProposalInfo;
+import org.springframework.security.access.prepost.PreAuthorize;
+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.system.domain.ProposalUnitReply;
+import com.ruoyi.system.service.IProposalUnitReplyService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 提案单位答复Controller
+ *
+ * @author boman
+ * @date 2024-03-07
+ */
+@RestController
+@RequestMapping("/proposal/unit")
+public class ProposalUnitReplyController extends BaseController
+{
+    @Autowired
+    private IProposalUnitReplyService proposalUnitReplyService;
+
+/**
+ * 查询提案单位答复列表
+ */
+@PreAuthorize("@ss.hasPermi('proposal:unit:list')")
+@GetMapping("/list")
+    public TableDataInfo list(ProposalUnitReply proposalUnitReply)
+    {
+        startPage();
+        List<ProposalUnitReply> list = proposalUnitReplyService.selectProposalUnitReplyList(proposalUnitReply);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出提案单位答复列表
+     */
+    @PreAuthorize("@ss.hasPermi('proposal:unit:export')")
+    @Log(title = "提案单位答复", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, ProposalUnitReply proposalUnitReply)
+    {
+        List<ProposalUnitReply> list = proposalUnitReplyService.selectProposalUnitReplyList(proposalUnitReply);
+        ExcelUtil<ProposalUnitReply> util = new ExcelUtil<ProposalUnitReply>(ProposalUnitReply.class);
+        util.exportExcel(response, list, "提案单位答复数据");
+    }
+
+    /**
+     * 获取提案单位答复详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('proposal:unit:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(proposalUnitReplyService.selectProposalUnitReplyById(id));
+    }
+
+    /**
+     * 新增提案单位答复
+     */
+    @PreAuthorize("@ss.hasPermi('proposal:unit:add')")
+    @Log(title = "提案单位答复", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody ProposalUnitReply proposalUnitReply)
+    {
+        return toAjax(proposalUnitReplyService.insertProposalUnitReply(proposalUnitReply));
+    }
+
+    /**
+     * 修改提案单位答复
+     */
+    @PreAuthorize("@ss.hasPermi('proposal:unit:edit')")
+    @Log(title = "提案单位答复", businessType = BusinessType.UPDATE)
+    @PostMapping("/put")
+    public AjaxResult edit(@RequestBody ProposalUnitReply proposalUnitReply)
+    {
+        return toAjax(proposalUnitReplyService.updateProposalUnitReply(proposalUnitReply));
+    }
+
+    /**
+     * 删除提案单位答复
+     */
+    @PreAuthorize("@ss.hasPermi('proposal:unit:remove')")
+    @Log(title = "提案单位答复", businessType = BusinessType.DELETE)
+    @GetMapping("/delete/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(proposalUnitReplyService.deleteProposalUnitReplyByIds(ids));
+    }
+
+    /***
+     * 提案答复
+     */
+    @PreAuthorize("@ss.hasPermi('proposal:unit:reply')")
+    @Log(title = "提案信息", businessType = BusinessType.UPDATE)
+    @PostMapping("/reply")
+    public AjaxResult reply(@RequestBody ProposalUnitReply proposalUnitReply)
+    {
+        return proposalUnitReplyService.reply(proposalUnitReply);
+    }
+
+}

+ 104 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/proposal/ProposalUserController.java

@@ -0,0 +1,104 @@
+package com.ruoyi.web.controller.proposal;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+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.system.domain.ProposalUser;
+import com.ruoyi.system.service.IProposalUserService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 提案人员Controller
+ *
+ * @author boman
+ * @date 2024-03-07
+ */
+@RestController
+@RequestMapping("/proposal/user")
+public class ProposalUserController extends BaseController
+{
+    @Autowired
+    private IProposalUserService proposalUserService;
+
+/**
+ * 查询提案人员列表
+ */
+@PreAuthorize("@ss.hasPermi('proposal:user:list')")
+@GetMapping("/list")
+    public TableDataInfo list(ProposalUser proposalUser)
+    {
+        startPage();
+        List<ProposalUser> list = proposalUserService.selectProposalUserList(proposalUser);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出提案人员列表
+     */
+    @PreAuthorize("@ss.hasPermi('proposal:user:export')")
+    @Log(title = "提案人员", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, ProposalUser proposalUser)
+    {
+        List<ProposalUser> list = proposalUserService.selectProposalUserList(proposalUser);
+        ExcelUtil<ProposalUser> util = new ExcelUtil<ProposalUser>(ProposalUser.class);
+        util.exportExcel(response, list, "提案人员数据");
+    }
+
+    /**
+     * 获取提案人员详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('proposal:user:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(proposalUserService.selectProposalUserById(id));
+    }
+
+    /**
+     * 新增提案人员
+     */
+    @PreAuthorize("@ss.hasPermi('proposal:user:add')")
+    @Log(title = "提案人员", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody ProposalUser proposalUser)
+    {
+        return toAjax(proposalUserService.insertProposalUser(proposalUser));
+    }
+
+    /**
+     * 修改提案人员
+     */
+    @PreAuthorize("@ss.hasPermi('proposal:user:edit')")
+    @Log(title = "提案人员", businessType = BusinessType.UPDATE)
+    @PostMapping("/put")
+    public AjaxResult edit(@RequestBody ProposalUser proposalUser)
+    {
+        return toAjax(proposalUserService.updateProposalUser(proposalUser));
+    }
+
+    /**
+     * 删除提案人员
+     */
+    @PreAuthorize("@ss.hasPermi('proposal:user:remove')")
+    @Log(title = "提案人员", businessType = BusinessType.DELETE)
+    @GetMapping("/delete/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(proposalUserService.deleteProposalUserByIds(ids));
+    }
+}

+ 138 - 0
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/CategoryProposal.java

@@ -0,0 +1,138 @@
+package com.ruoyi.common.core.domain.entity;
+
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 提案类别对象 category_proposal
+ * 
+ * @author boman
+ * @date 2024-03-07
+ */
+public class CategoryProposal extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 提案类别id */
+    private Long categoryId;
+
+    /** 父类id */
+    @Excel(name = "父类id")
+    private Long parentId;
+
+    /** 祖级列表 */
+    @Excel(name = "祖级列表")
+    private String ancestors;
+
+    /** 提案类别名称 */
+    @Excel(name = "提案类别名称")
+    private String categoryName;
+
+    /** 显示顺序 */
+    @Excel(name = "显示顺序")
+    private Integer orderNum;
+
+    /** 状态(0正常 1停用) */
+    @Excel(name = "状态", readConverterExp = "0=正常,1=停用")
+    private String status;
+
+    /** 删除标志(0代表存在 2代表删除) */
+    private String delFlag;
+
+    /** 子部门 */
+    private List<CategoryProposal> children = new ArrayList<CategoryProposal>();
+
+    public List<CategoryProposal> getChildren() {
+        return children;
+    }
+
+    public void setChildren(List<CategoryProposal> children) {
+        this.children = children;
+    }
+
+    public void setCategoryId(Long categoryId)
+    {
+        this.categoryId = categoryId;
+    }
+
+    public Long getCategoryId() 
+    {
+        return categoryId;
+    }
+    public void setParentId(Long parentId) 
+    {
+        this.parentId = parentId;
+    }
+
+    public Long getParentId() 
+    {
+        return parentId;
+    }
+    public void setAncestors(String ancestors) 
+    {
+        this.ancestors = ancestors;
+    }
+
+    public String getAncestors() 
+    {
+        return ancestors;
+    }
+    public void setCategoryName(String categoryName) 
+    {
+        this.categoryName = categoryName;
+    }
+
+    public String getCategoryName() 
+    {
+        return categoryName;
+    }
+    public void setOrderNum(Integer orderNum) 
+    {
+        this.orderNum = orderNum;
+    }
+
+    public Integer getOrderNum() 
+    {
+        return orderNum;
+    }
+    public void setStatus(String status) 
+    {
+        this.status = status;
+    }
+
+    public String getStatus() 
+    {
+        return status;
+    }
+    public void setDelFlag(String delFlag) 
+    {
+        this.delFlag = delFlag;
+    }
+
+    public String getDelFlag() 
+    {
+        return delFlag;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("categoryId", getCategoryId())
+            .append("parentId", getParentId())
+            .append("ancestors", getAncestors())
+            .append("categoryName", getCategoryName())
+            .append("orderNum", getOrderNum())
+            .append("status", getStatus())
+            .append("delFlag", getDelFlag())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .toString();
+    }
+}

+ 492 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/ProposalInfo.java

@@ -0,0 +1,492 @@
+package com.ruoyi.system.domain;
+
+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.List;
+
+/**
+ * 提案信息对象 proposal_info
+ * 
+ * @author boman
+ * @date 2024-03-07
+ */
+public class ProposalInfo extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 提案ID */
+    private Long proposalId;
+
+    /** 提案人ID */
+    @Excel(name = "提案人ID")
+    private Long proposalUserId;
+
+    /** 提案号 */
+    @Excel(name = "提案号")
+    private String proposalNumber;
+
+    /** 标题 */
+    @Excel(name = "标题")
+    private String title;
+
+    /** 提案人姓名 */
+    @Excel(name = "提案人姓名")
+    private String proposalName;
+
+    /** 提案人手机号码 */
+    @Excel(name = "提案人手机号码")
+    private String proposalPhone;
+
+    /** 界别 */
+    @Excel(name = "界别")
+    private String boundary;
+
+    /** 党派 */
+    @Excel(name = "党派")
+    private String partyAffiliation;
+
+    /** 联系地址 */
+    @Excel(name = "联系地址")
+    private String contactAddress;
+
+    /** 提案类别id */
+    @Excel(name = "提案类别id")
+    private Long categoryId;
+
+    /** 提案类别 */
+    @Excel(name = "提案类别")
+    private String categoryName;
+
+    /** 提案类型(0大会提案 1平时提案) */
+    @Excel(name = "提案类型", readConverterExp = "0=大会提案,1=平时提案")
+    private String proposalType;
+
+    /** 提案内容 */
+    @Excel(name = "提案内容")
+    private String proposalContent;
+
+    /** 联名提案(0是 1否) */
+    @Excel(name = "联名提案", readConverterExp = "0=是,1=否")
+    private String isJointly;
+
+    /** 同意公开(0是 1否) */
+    @Excel(name = "同意公开", readConverterExp = "0=是,1=否")
+    private String isPublicity;
+
+    /** 内容公开(0是 1否) */
+    @Excel(name = "内容公开", readConverterExp = "0=是,1=否")
+    private String contentPublicity;
+
+    /** 经过调研(0是 1否) */
+    @Excel(name = "经过调研", readConverterExp = "0=是,1=否")
+    private String isSurvey;
+
+    /** 第一次提出(0是 1否) */
+    @Excel(name = "第一次提出", readConverterExp = "0=是,1=否")
+    private String isFirst;
+
+    /** 由本人撰写(0是 1否) */
+    @Excel(name = "由本人撰写", readConverterExp = "0=是,1=否")
+    private String isPerson;
+
+    /** 是否立案(0是 1否) */
+    @Excel(name = "是否立案", readConverterExp = "0=是,1=否")
+    private String isRecord;
+
+    /** 需要办理的协商方式 */
+    @Excel(name = "需要办理的协商方式")
+    private String negotiateType;
+
+    /** 建议承办单位 */
+    @Excel(name = "建议承办单位")
+    private String proposedContractor;
+
+    /** 提案进度(0:提交提案,1:提案审查,2:提案立案,3:提案交办,4:办理提案,5:提案反馈,6:办结审核,7:已办结) */
+    @Excel(name = "提案进度(0:提交提案,1:提案审查,2:提案立案,3:提案交办,4:办理提案,5:提案反馈,6:办结审核,7:已办结)")
+    private String proposalProgress;
+
+    /** 滚动办理(0是 1否) */
+    @Excel(name = "滚动办理", readConverterExp = "0=是,1=否")
+    private String rollingProcess;
+
+    /** 提案答复类型(A:A类,B:B类,C:C类) */
+    @Excel(name = "提案答复类型(A:A类,B:B类,C:C类)")
+    private String complexType;
+
+    /** 是否被并案(0是 1否) */
+    @Excel(name = "是否被并案", readConverterExp = "0=是,1=否")
+    private String isCasesTogether;
+
+    /** 被并案的案件id */
+    @Excel(name = "被并案的案件id")
+    private Long uniteProposalId;
+
+    /** 委员满意程度(0:不满意,1:一般,2:满意,3:非常满意) */
+    @Excel(name = "委员满意程度", readConverterExp = "0=:不满意,1:一般,2:满意,3:非常满意")
+    private String satisfaction;
+
+    /** 委员意见 */
+    @Excel(name = "委员意见")
+    private String membersOpinion;
+
+    /** 政协满意程度(0:不满意,1:一般,2:满意,3:非常满意) */
+    @Excel(name = "政协满意程度", readConverterExp = "0=:不满意,1:一般,2:满意,3:非常满意")
+    private String zxSatisfaction;
+
+    /** 政协意见 */
+    @Excel(name = "政协意见")
+    private String zxOpinion;
+
+    /** 提案人员 */
+    private List<ProposalUser> proposalUserList;
+    /** 附件 */
+    private List<ZxFj> zxFjList;
+    /** 单位回复 */
+    private List<ProposalUnitReply> proposalUnitReplyList;
+
+    public List<ProposalUnitReply> getProposalUnitReplyList() {
+        return proposalUnitReplyList;
+    }
+
+
+    public String getZxSatisfaction() {
+        return zxSatisfaction;
+    }
+
+    public void setZxSatisfaction(String zxSatisfaction) {
+        this.zxSatisfaction = zxSatisfaction;
+    }
+
+    public String getZxOpinion() {
+        return zxOpinion;
+    }
+
+    public void setZxOpinion(String zxOpinion) {
+        this.zxOpinion = zxOpinion;
+    }
+
+    public void setProposalUnitReplyList(List<ProposalUnitReply> proposalUnitReplyList) {
+        this.proposalUnitReplyList = proposalUnitReplyList;
+    }
+
+    public List<ZxFj> getZxFjList() {
+        return zxFjList;
+    }
+
+    public void setZxFjList(List<ZxFj> zxFjList) {
+        this.zxFjList = zxFjList;
+    }
+
+    public List<ProposalUser> getProposalUserList() {
+        return proposalUserList;
+    }
+
+    public void setProposalUserList(List<ProposalUser> proposalUserList) {
+        this.proposalUserList = proposalUserList;
+    }
+
+    public void setProposalId(Long proposalId)
+    {
+        this.proposalId = proposalId;
+    }
+
+    public Long getProposalId() 
+    {
+        return proposalId;
+    }
+    public void setProposalUserId(Long proposalUserId) 
+    {
+        this.proposalUserId = proposalUserId;
+    }
+
+    public Long getProposalUserId() 
+    {
+        return proposalUserId;
+    }
+    public void setProposalNumber(String proposalNumber) 
+    {
+        this.proposalNumber = proposalNumber;
+    }
+
+    public String getProposalNumber() 
+    {
+        return proposalNumber;
+    }
+    public void setTitle(String title) 
+    {
+        this.title = title;
+    }
+
+    public String getTitle() 
+    {
+        return title;
+    }
+    public void setProposalName(String proposalName) 
+    {
+        this.proposalName = proposalName;
+    }
+
+    public String getProposalName() 
+    {
+        return proposalName;
+    }
+    public void setProposalPhone(String proposalPhone) 
+    {
+        this.proposalPhone = proposalPhone;
+    }
+
+    public String getProposalPhone() 
+    {
+        return proposalPhone;
+    }
+    public void setBoundary(String boundary) 
+    {
+        this.boundary = boundary;
+    }
+
+    public String getBoundary() 
+    {
+        return boundary;
+    }
+    public void setPartyAffiliation(String partyAffiliation) 
+    {
+        this.partyAffiliation = partyAffiliation;
+    }
+
+    public String getPartyAffiliation() 
+    {
+        return partyAffiliation;
+    }
+    public void setContactAddress(String contactAddress) 
+    {
+        this.contactAddress = contactAddress;
+    }
+
+    public String getContactAddress() 
+    {
+        return contactAddress;
+    }
+    public void setCategoryId(Long categoryId) 
+    {
+        this.categoryId = categoryId;
+    }
+
+    public Long getCategoryId() 
+    {
+        return categoryId;
+    }
+    public void setCategoryName(String categoryName) 
+    {
+        this.categoryName = categoryName;
+    }
+
+    public String getCategoryName() 
+    {
+        return categoryName;
+    }
+    public void setProposalType(String proposalType) 
+    {
+        this.proposalType = proposalType;
+    }
+
+    public String getProposalType() 
+    {
+        return proposalType;
+    }
+    public void setProposalContent(String proposalContent) 
+    {
+        this.proposalContent = proposalContent;
+    }
+
+    public String getProposalContent() 
+    {
+        return proposalContent;
+    }
+    public void setIsJointly(String isJointly) 
+    {
+        this.isJointly = isJointly;
+    }
+
+    public String getIsJointly() 
+    {
+        return isJointly;
+    }
+    public void setIsPublicity(String isPublicity) 
+    {
+        this.isPublicity = isPublicity;
+    }
+
+    public String getIsPublicity() 
+    {
+        return isPublicity;
+    }
+    public void setContentPublicity(String contentPublicity) 
+    {
+        this.contentPublicity = contentPublicity;
+    }
+
+    public String getContentPublicity() 
+    {
+        return contentPublicity;
+    }
+    public void setIsSurvey(String isSurvey) 
+    {
+        this.isSurvey = isSurvey;
+    }
+
+    public String getIsSurvey() 
+    {
+        return isSurvey;
+    }
+    public void setIsFirst(String isFirst) 
+    {
+        this.isFirst = isFirst;
+    }
+
+    public String getIsFirst() 
+    {
+        return isFirst;
+    }
+    public void setIsPerson(String isPerson) 
+    {
+        this.isPerson = isPerson;
+    }
+
+    public String getIsPerson() 
+    {
+        return isPerson;
+    }
+    public void setIsRecord(String isRecord) 
+    {
+        this.isRecord = isRecord;
+    }
+
+    public String getIsRecord() 
+    {
+        return isRecord;
+    }
+    public void setNegotiateType(String negotiateType) 
+    {
+        this.negotiateType = negotiateType;
+    }
+
+    public String getNegotiateType() 
+    {
+        return negotiateType;
+    }
+    public void setProposedContractor(String proposedContractor) 
+    {
+        this.proposedContractor = proposedContractor;
+    }
+
+    public String getProposedContractor() 
+    {
+        return proposedContractor;
+    }
+    public void setProposalProgress(String proposalProgress) 
+    {
+        this.proposalProgress = proposalProgress;
+    }
+
+    public String getProposalProgress() 
+    {
+        return proposalProgress;
+    }
+    public void setRollingProcess(String rollingProcess) 
+    {
+        this.rollingProcess = rollingProcess;
+    }
+
+    public String getRollingProcess() 
+    {
+        return rollingProcess;
+    }
+    public void setComplexType(String complexType) 
+    {
+        this.complexType = complexType;
+    }
+
+    public String getComplexType() 
+    {
+        return complexType;
+    }
+    public void setIsCasesTogether(String isCasesTogether) 
+    {
+        this.isCasesTogether = isCasesTogether;
+    }
+
+    public String getIsCasesTogether() 
+    {
+        return isCasesTogether;
+    }
+    public void setUniteProposalId(Long uniteProposalId) 
+    {
+        this.uniteProposalId = uniteProposalId;
+    }
+
+    public Long getUniteProposalId() 
+    {
+        return uniteProposalId;
+    }
+    public void setSatisfaction(String satisfaction) 
+    {
+        this.satisfaction = satisfaction;
+    }
+
+    public String getSatisfaction() 
+    {
+        return satisfaction;
+    }
+    public void setMembersOpinion(String membersOpinion) 
+    {
+        this.membersOpinion = membersOpinion;
+    }
+
+    public String getMembersOpinion() 
+    {
+        return membersOpinion;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("proposalId", getProposalId())
+            .append("proposalUserId", getProposalUserId())
+            .append("proposalNumber", getProposalNumber())
+            .append("title", getTitle())
+            .append("proposalName", getProposalName())
+            .append("proposalPhone", getProposalPhone())
+            .append("boundary", getBoundary())
+            .append("partyAffiliation", getPartyAffiliation())
+            .append("contactAddress", getContactAddress())
+            .append("categoryId", getCategoryId())
+            .append("categoryName", getCategoryName())
+            .append("proposalType", getProposalType())
+            .append("proposalContent", getProposalContent())
+            .append("isJointly", getIsJointly())
+            .append("isPublicity", getIsPublicity())
+            .append("contentPublicity", getContentPublicity())
+            .append("isSurvey", getIsSurvey())
+            .append("isFirst", getIsFirst())
+            .append("isPerson", getIsPerson())
+            .append("isRecord", getIsRecord())
+            .append("negotiateType", getNegotiateType())
+            .append("proposedContractor", getProposedContractor())
+            .append("proposalProgress", getProposalProgress())
+            .append("rollingProcess", getRollingProcess())
+            .append("complexType", getComplexType())
+            .append("isCasesTogether", getIsCasesTogether())
+            .append("uniteProposalId", getUniteProposalId())
+            .append("satisfaction", getSatisfaction())
+            .append("membersOpinion", getMembersOpinion())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .toString();
+    }
+}

+ 119 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/ProposalUnitReply.java

@@ -0,0 +1,119 @@
+package com.ruoyi.system.domain;
+
+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.List;
+
+/**
+ * 提案单位答复对象 proposal_unit_reply
+ * 
+ * @author boman
+ * @date 2024-03-07
+ */
+public class ProposalUnitReply extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** ID */
+    private Long id;
+
+    /** 单位id */
+    @Excel(name = "单位id")
+    private Long deptId;
+
+    /** 单位名称 */
+    @Excel(name = "单位名称")
+    private String deptName;
+
+    /** 提案id */
+    @Excel(name = "提案id")
+    private Long proposalId;
+
+    /** 答复内容 */
+    @Excel(name = "答复内容")
+    private String content;
+
+    /** 单位类型 1:答复单位,2:主办单位,3:协办单位 */
+    @Excel(name = "单位类型 1:答复单位,2:主办单位,3:协办单位")
+    private String type;
+
+    /** 附件 */
+    private List<ZxFj> zxFjList;
+
+    public List<ZxFj> getZxFjList() {
+        return zxFjList;
+    }
+
+    public void setZxFjList(List<ZxFj> zxFjList) {
+        this.zxFjList = zxFjList;
+    }
+
+    public void setId(Long id)
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setDeptId(Long deptId) 
+    {
+        this.deptId = deptId;
+    }
+
+    public Long getDeptId() 
+    {
+        return deptId;
+    }
+    public void setProposalId(Long proposalId) 
+    {
+        this.proposalId = proposalId;
+    }
+
+    public Long getProposalId() 
+    {
+        return proposalId;
+    }
+    public void setContent(String content) 
+    {
+        this.content = content;
+    }
+
+    public String getContent() 
+    {
+        return content;
+    }
+    public void setType(String type) 
+    {
+        this.type = type;
+    }
+
+    public String getType() 
+    {
+        return type;
+    }
+
+    public String getDeptName() {
+        return deptName;
+    }
+
+    public void setDeptName(String deptName) {
+        this.deptName = deptName;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("deptId", getDeptId())
+            .append("proposalId", getProposalId())
+            .append("content", getContent())
+            .append("type", getType())
+            .append("remark", getRemark())
+            .toString();
+    }
+}

+ 94 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/ProposalUser.java

@@ -0,0 +1,94 @@
+package com.ruoyi.system.domain;
+
+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;
+
+/**
+ * 提案人员对象 proposal_user
+ * 
+ * @author boman
+ * @date 2024-03-07
+ */
+public class ProposalUser extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** ID */
+    private Long id;
+
+    /** 提案id */
+    @Excel(name = "提案id")
+    private Long proposalId;
+
+    /** 姓名 */
+    @Excel(name = "姓名")
+    private String name;
+
+    /** 职务 */
+    @Excel(name = "职务")
+    private String unit;
+
+    /** 地址类型 1:领衔,2:附议 */
+    @Excel(name = "地址类型 1:领衔,2:附议")
+    private String type;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setProposalId(Long proposalId) 
+    {
+        this.proposalId = proposalId;
+    }
+
+    public Long getProposalId() 
+    {
+        return proposalId;
+    }
+    public void setName(String name) 
+    {
+        this.name = name;
+    }
+
+    public String getName() 
+    {
+        return name;
+    }
+
+    public String getUnit() {
+        return unit;
+    }
+
+    public void setUnit(String unit) {
+        this.unit = unit;
+    }
+
+    public void setType(String type)
+    {
+        this.type = type;
+    }
+
+    public String getType() 
+    {
+        return type;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("proposalId", getProposalId())
+            .append("name", getName())
+            .append("unit", getUnit())
+            .append("type", getType())
+            .append("remark", getRemark())
+            .toString();
+    }
+}

+ 62 - 0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/CategoryProposalMapper.java

@@ -0,0 +1,62 @@
+package com.ruoyi.system.mapper;
+
+import com.ruoyi.common.core.domain.entity.CategoryProposal;
+
+import java.util.List;
+
+/**
+ * 提案类别Mapper接口
+ * 
+ * @author boman
+ * @date 2024-03-07
+ */
+public interface CategoryProposalMapper 
+{
+    /**
+     * 查询提案类别
+     * 
+     * @param categoryId 提案类别主键
+     * @return 提案类别
+     */
+    public CategoryProposal selectCategoryProposalByCategoryId(Long categoryId);
+
+    /**
+     * 查询提案类别列表
+     * 
+     * @param categoryProposal 提案类别
+     * @return 提案类别集合
+     */
+    public List<CategoryProposal> selectCategoryProposalList(CategoryProposal categoryProposal);
+
+    /**
+     * 新增提案类别
+     * 
+     * @param categoryProposal 提案类别
+     * @return 结果
+     */
+    public int insertCategoryProposal(CategoryProposal categoryProposal);
+
+    /**
+     * 修改提案类别
+     * 
+     * @param categoryProposal 提案类别
+     * @return 结果
+     */
+    public int updateCategoryProposal(CategoryProposal categoryProposal);
+
+    /**
+     * 删除提案类别
+     * 
+     * @param categoryId 提案类别主键
+     * @return 结果
+     */
+    public int deleteCategoryProposalByCategoryId(Long categoryId);
+
+    /**
+     * 批量删除提案类别
+     * 
+     * @param categoryIds 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteCategoryProposalByCategoryIds(Long[] categoryIds);
+}

+ 61 - 0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/ProposalInfoMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.system.mapper;
+
+import java.util.List;
+import com.ruoyi.system.domain.ProposalInfo;
+
+/**
+ * 提案信息Mapper接口
+ * 
+ * @author boman
+ * @date 2024-03-07
+ */
+public interface ProposalInfoMapper 
+{
+    /**
+     * 查询提案信息
+     * 
+     * @param proposalId 提案信息主键
+     * @return 提案信息
+     */
+    public ProposalInfo selectProposalInfoByProposalId(Long proposalId);
+
+    /**
+     * 查询提案信息列表
+     * 
+     * @param proposalInfo 提案信息
+     * @return 提案信息集合
+     */
+    public List<ProposalInfo> selectProposalInfoList(ProposalInfo proposalInfo);
+
+    /**
+     * 新增提案信息
+     * 
+     * @param proposalInfo 提案信息
+     * @return 结果
+     */
+    public int insertProposalInfo(ProposalInfo proposalInfo);
+
+    /**
+     * 修改提案信息
+     * 
+     * @param proposalInfo 提案信息
+     * @return 结果
+     */
+    public int updateProposalInfo(ProposalInfo proposalInfo);
+
+    /**
+     * 删除提案信息
+     * 
+     * @param proposalId 提案信息主键
+     * @return 结果
+     */
+    public int deleteProposalInfoByProposalId(Long proposalId);
+
+    /**
+     * 批量删除提案信息
+     * 
+     * @param proposalIds 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteProposalInfoByProposalIds(Long[] proposalIds);
+}

+ 67 - 0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/ProposalUnitReplyMapper.java

@@ -0,0 +1,67 @@
+package com.ruoyi.system.mapper;
+
+import java.util.List;
+import com.ruoyi.system.domain.ProposalUnitReply;
+
+/**
+ * 提案单位答复Mapper接口
+ * 
+ * @author boman
+ * @date 2024-03-07
+ */
+public interface ProposalUnitReplyMapper 
+{
+    /**
+     * 查询提案单位答复
+     * 
+     * @param id 提案单位答复主键
+     * @return 提案单位答复
+     */
+    public ProposalUnitReply selectProposalUnitReplyById(Long id);
+
+    /**
+     * 查询提案单位答复列表
+     * 
+     * @param proposalUnitReply 提案单位答复
+     * @return 提案单位答复集合
+     */
+    public List<ProposalUnitReply> selectProposalUnitReplyList(ProposalUnitReply proposalUnitReply);
+
+    /**
+     * 新增提案单位答复
+     * 
+     * @param proposalUnitReply 提案单位答复
+     * @return 结果
+     */
+    public int insertProposalUnitReply(ProposalUnitReply proposalUnitReply);
+
+    /**
+     * 修改提案单位答复
+     * 
+     * @param proposalUnitReply 提案单位答复
+     * @return 结果
+     */
+    public int updateProposalUnitReply(ProposalUnitReply proposalUnitReply);
+
+    /**
+     * 删除提案单位答复
+     * 
+     * @param id 提案单位答复主键
+     * @return 结果
+     */
+    public int deleteProposalUnitReplyById(Long id);
+
+    /**
+     * 批量删除提案单位答复
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteProposalUnitReplyByIds(Long[] ids);
+
+    /***
+     * 修改答复内容
+     * @param proposalUnitReply
+     */
+    void updateContent(ProposalUnitReply proposalUnitReply);
+}

+ 63 - 0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/ProposalUserMapper.java

@@ -0,0 +1,63 @@
+package com.ruoyi.system.mapper;
+
+import java.util.List;
+import com.ruoyi.system.domain.ProposalUser;
+
+/**
+ * 提案人员Mapper接口
+ * 
+ * @author boman
+ * @date 2024-03-07
+ */
+public interface ProposalUserMapper 
+{
+    /**
+     * 查询提案人员
+     * 
+     * @param id 提案人员主键
+     * @return 提案人员
+     */
+    public ProposalUser selectProposalUserById(Long id);
+
+    /**
+     * 查询提案人员列表
+     * 
+     * @param proposalUser 提案人员
+     * @return 提案人员集合
+     */
+    public List<ProposalUser> selectProposalUserList(ProposalUser proposalUser);
+
+    /**
+     * 新增提案人员
+     * 
+     * @param proposalUser 提案人员
+     * @return 结果
+     */
+    public int insertProposalUser(ProposalUser proposalUser);
+
+    /**
+     * 修改提案人员
+     * 
+     * @param proposalUser 提案人员
+     * @return 结果
+     */
+    public int updateProposalUser(ProposalUser proposalUser);
+
+    /**
+     * 删除提案人员
+     * 
+     * @param id 提案人员主键
+     * @return 结果
+     */
+    public int deleteProposalUserById(Long id);
+
+    /**
+     * 批量删除提案人员
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteProposalUserByIds(Long[] ids);
+
+    void deleteProposalUserByProposalId(Long proposalId);
+}

+ 68 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/ICategoryProposalService.java

@@ -0,0 +1,68 @@
+package com.ruoyi.system.service;
+
+import java.util.List;
+
+import com.ruoyi.common.core.domain.TreeSelect;
+import com.ruoyi.common.core.domain.entity.CategoryProposal;
+import com.ruoyi.common.core.domain.entity.SysDept;
+
+/**
+ * 提案类别Service接口
+ * 
+ * @author boman
+ * @date 2024-03-07
+ */
+public interface ICategoryProposalService 
+{
+    /**
+     * 查询提案类别
+     * 
+     * @param categoryId 提案类别主键
+     * @return 提案类别
+     */
+    public CategoryProposal selectCategoryProposalByCategoryId(Long categoryId);
+
+    /**
+     * 查询提案类别列表
+     * 
+     * @param categoryProposal 提案类别
+     * @return 提案类别集合
+     */
+    public List<CategoryProposal> selectCategoryProposalList(CategoryProposal categoryProposal);
+
+    /**
+     * 新增提案类别
+     * 
+     * @param categoryProposal 提案类别
+     * @return 结果
+     */
+    public int insertCategoryProposal(CategoryProposal categoryProposal);
+
+    /**
+     * 修改提案类别
+     * 
+     * @param categoryProposal 提案类别
+     * @return 结果
+     */
+    public int updateCategoryProposal(CategoryProposal categoryProposal);
+
+    /**
+     * 批量删除提案类别
+     * 
+     * @param categoryIds 需要删除的提案类别主键集合
+     * @return 结果
+     */
+    public int deleteCategoryProposalByCategoryIds(Long[] categoryIds);
+
+    /**
+     * 删除提案类别信息
+     * 
+     * @param categoryId 提案类别主键
+     * @return 结果
+     */
+    public int deleteCategoryProposalByCategoryId(Long categoryId);
+
+    List<TreeSelect> selectCategoryTreeList(CategoryProposal categoryProposal);
+
+    public List<TreeSelect> buildCategoryTreeSelect(List<CategoryProposal> categoryProposals);
+}

+ 71 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/IProposalInfoService.java

@@ -0,0 +1,71 @@
+package com.ruoyi.system.service;
+
+import java.util.List;
+
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.system.domain.ProposalInfo;
+
+/**
+ * 提案信息Service接口
+ * 
+ * @author boman
+ * @date 2024-03-07
+ */
+public interface IProposalInfoService 
+{
+    /**
+     * 查询提案信息
+     * 
+     * @param proposalId 提案信息主键
+     * @return 提案信息
+     */
+    public ProposalInfo selectProposalInfoByProposalId(Long proposalId);
+
+    /**
+     * 查询提案信息列表
+     * 
+     * @param proposalInfo 提案信息
+     * @return 提案信息集合
+     */
+    public List<ProposalInfo> selectProposalInfoList(ProposalInfo proposalInfo);
+
+    /**
+     * 新增提案信息
+     * 
+     * @param proposalInfo 提案信息
+     * @return 结果
+     */
+    public int insertProposalInfo(ProposalInfo proposalInfo);
+
+    /**
+     * 修改提案信息
+     * 
+     * @param proposalInfo 提案信息
+     * @return 结果
+     */
+    public int updateProposalInfo(ProposalInfo proposalInfo);
+
+    /**
+     * 批量删除提案信息
+     * 
+     * @param proposalIds 需要删除的提案信息主键集合
+     * @return 结果
+     */
+    public int deleteProposalInfoByProposalIds(Long[] proposalIds);
+
+    /**
+     * 删除提案信息信息
+     * 
+     * @param proposalId 提案信息主键
+     * @return 结果
+     */
+    public int deleteProposalInfoByProposalId(Long proposalId);
+
+    AjaxResult isRecord(ProposalInfo proposalInfo);
+
+    AjaxResult assign(ProposalInfo proposalInfo);
+
+    AjaxResult idea(ProposalInfo proposalInfo);
+
+    AjaxResult zxIdea(ProposalInfo proposalInfo);
+}

+ 66 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/IProposalUnitReplyService.java

@@ -0,0 +1,66 @@
+package com.ruoyi.system.service;
+
+import java.util.List;
+
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.system.domain.ProposalInfo;
+import com.ruoyi.system.domain.ProposalUnitReply;
+
+/**
+ * 提案单位答复Service接口
+ * 
+ * @author boman
+ * @date 2024-03-07
+ */
+public interface IProposalUnitReplyService 
+{
+    /**
+     * 查询提案单位答复
+     * 
+     * @param id 提案单位答复主键
+     * @return 提案单位答复
+     */
+    public ProposalUnitReply selectProposalUnitReplyById(Long id);
+
+    /**
+     * 查询提案单位答复列表
+     * 
+     * @param proposalUnitReply 提案单位答复
+     * @return 提案单位答复集合
+     */
+    public List<ProposalUnitReply> selectProposalUnitReplyList(ProposalUnitReply proposalUnitReply);
+
+    /**
+     * 新增提案单位答复
+     * 
+     * @param proposalUnitReply 提案单位答复
+     * @return 结果
+     */
+    public int insertProposalUnitReply(ProposalUnitReply proposalUnitReply);
+
+    /**
+     * 修改提案单位答复
+     * 
+     * @param proposalUnitReply 提案单位答复
+     * @return 结果
+     */
+    public int updateProposalUnitReply(ProposalUnitReply proposalUnitReply);
+
+    /**
+     * 批量删除提案单位答复
+     * 
+     * @param ids 需要删除的提案单位答复主键集合
+     * @return 结果
+     */
+    public int deleteProposalUnitReplyByIds(Long[] ids);
+
+    /**
+     * 删除提案单位答复信息
+     * 
+     * @param id 提案单位答复主键
+     * @return 结果
+     */
+    public int deleteProposalUnitReplyById(Long id);
+
+    AjaxResult reply(ProposalUnitReply proposalUnitReply);
+}

+ 61 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/IProposalUserService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.system.service;
+
+import java.util.List;
+import com.ruoyi.system.domain.ProposalUser;
+
+/**
+ * 提案人员Service接口
+ * 
+ * @author boman
+ * @date 2024-03-07
+ */
+public interface IProposalUserService 
+{
+    /**
+     * 查询提案人员
+     * 
+     * @param id 提案人员主键
+     * @return 提案人员
+     */
+    public ProposalUser selectProposalUserById(Long id);
+
+    /**
+     * 查询提案人员列表
+     * 
+     * @param proposalUser 提案人员
+     * @return 提案人员集合
+     */
+    public List<ProposalUser> selectProposalUserList(ProposalUser proposalUser);
+
+    /**
+     * 新增提案人员
+     * 
+     * @param proposalUser 提案人员
+     * @return 结果
+     */
+    public int insertProposalUser(ProposalUser proposalUser);
+
+    /**
+     * 修改提案人员
+     * 
+     * @param proposalUser 提案人员
+     * @return 结果
+     */
+    public int updateProposalUser(ProposalUser proposalUser);
+
+    /**
+     * 批量删除提案人员
+     * 
+     * @param ids 需要删除的提案人员主键集合
+     * @return 结果
+     */
+    public int deleteProposalUserByIds(Long[] ids);
+
+    /**
+     * 删除提案人员信息
+     * 
+     * @param id 提案人员主键
+     * @return 结果
+     */
+    public int deleteProposalUserById(Long id);
+}

+ 185 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/CategoryProposalServiceImpl.java

@@ -0,0 +1,185 @@
+package com.ruoyi.system.service.impl;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import com.ruoyi.common.core.domain.TreeSelect;
+import com.ruoyi.common.core.domain.entity.CategoryProposal;
+import com.ruoyi.common.core.domain.entity.SysDept;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.spring.SpringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.system.mapper.CategoryProposalMapper;
+import com.ruoyi.system.service.ICategoryProposalService;
+
+/**
+ * 提案类别Service业务层处理
+ * 
+ * @author boman
+ * @date 2024-03-07
+ */
+@Service
+public class CategoryProposalServiceImpl implements ICategoryProposalService 
+{
+    @Autowired
+    private CategoryProposalMapper categoryProposalMapper;
+
+    /**
+     * 查询提案类别
+     * 
+     * @param categoryId 提案类别主键
+     * @return 提案类别
+     */
+    @Override
+    public CategoryProposal selectCategoryProposalByCategoryId(Long categoryId)
+    {
+        return categoryProposalMapper.selectCategoryProposalByCategoryId(categoryId);
+    }
+
+    /**
+     * 查询提案类别列表
+     * 
+     * @param categoryProposal 提案类别
+     * @return 提案类别
+     */
+    @Override
+    public List<CategoryProposal> selectCategoryProposalList(CategoryProposal categoryProposal)
+    {
+        return categoryProposalMapper.selectCategoryProposalList(categoryProposal);
+    }
+
+    /**
+     * 新增提案类别
+     * 
+     * @param categoryProposal 提案类别
+     * @return 结果
+     */
+    @Override
+    public int insertCategoryProposal(CategoryProposal categoryProposal)
+    {
+        categoryProposal.setCreateTime(DateUtils.getNowDate());
+        return categoryProposalMapper.insertCategoryProposal(categoryProposal);
+    }
+
+    /**
+     * 修改提案类别
+     * 
+     * @param categoryProposal 提案类别
+     * @return 结果
+     */
+    @Override
+    public int updateCategoryProposal(CategoryProposal categoryProposal)
+    {
+        categoryProposal.setUpdateTime(DateUtils.getNowDate());
+        return categoryProposalMapper.updateCategoryProposal(categoryProposal);
+    }
+
+    /**
+     * 批量删除提案类别
+     * 
+     * @param categoryIds 需要删除的提案类别主键
+     * @return 结果
+     */
+    @Override
+    public int deleteCategoryProposalByCategoryIds(Long[] categoryIds)
+    {
+        return categoryProposalMapper.deleteCategoryProposalByCategoryIds(categoryIds);
+    }
+
+    /**
+     * 删除提案类别信息
+     * 
+     * @param categoryId 提案类别主键
+     * @return 结果
+     */
+    @Override
+    public int deleteCategoryProposalByCategoryId(Long categoryId)
+    {
+        return categoryProposalMapper.deleteCategoryProposalByCategoryId(categoryId);
+    }
+
+    @Override
+    public List<TreeSelect> selectCategoryTreeList(CategoryProposal categoryProposal) {
+        List<CategoryProposal> categoryProposals = SpringUtils.getAopProxy(this).selectCategoryProposalList(categoryProposal);
+        return buildCategoryTreeSelect(categoryProposals);
+    }
+
+    @Override
+    public List<TreeSelect> buildCategoryTreeSelect(List<CategoryProposal> categoryProposals) {
+        List<CategoryProposal> categoryTrees = buildCategoryTree(categoryProposals);
+        return categoryTrees.stream().map(TreeSelect::new).collect(Collectors.toList());
+    }
+
+    /**
+     * 构建前端所需要树结构
+     *
+     * @param depts 部门列表
+     * @return 树结构列表
+     */
+    private List<CategoryProposal> buildCategoryTree(List<CategoryProposal> categoryProposals) {
+        List<CategoryProposal> returnList = new ArrayList<CategoryProposal>();
+        List<Long> tempList = categoryProposals.stream().map(CategoryProposal::getCategoryId).collect(Collectors.toList());
+        for (CategoryProposal category : categoryProposals)
+        {
+            // 如果是顶级节点, 遍历该父节点的所有子节点
+            if (!tempList.contains(category.getParentId()))
+            {
+                recursionFn(categoryProposals, category);
+                returnList.add(category);
+            }
+        }
+        if (returnList.isEmpty())
+        {
+            returnList = categoryProposals;
+        }
+        return returnList;
+    }
+
+    /**
+     * 递归列表
+     */
+    private void recursionFn(List<CategoryProposal> categoryProposals, CategoryProposal category) {
+        // 得到子节点列表
+        List<CategoryProposal> childList = getChildList(categoryProposals, category);
+        category.setChildren(childList);
+        for (CategoryProposal tChild : childList)
+        {
+            if (hasChild(categoryProposals, tChild))
+            {
+                recursionFn(categoryProposals, tChild);
+            }
+        }
+    }
+
+    /**
+     * 得到子节点列表
+     */
+    private List<CategoryProposal> getChildList(List<CategoryProposal> categoryProposals, CategoryProposal category) {
+        List<CategoryProposal> tlist = new ArrayList<CategoryProposal>();
+        Iterator<CategoryProposal> it = categoryProposals.iterator();
+        while (it.hasNext())
+        {
+            CategoryProposal n = (CategoryProposal) it.next();
+            if (StringUtils.isNotNull(n.getParentId()) && n.getParentId().longValue() == category.getCategoryId().longValue())
+            {
+                tlist.add(n);
+            }
+        }
+        return tlist;
+    }
+
+
+    /**
+     * 判断是否有子节点
+     */
+    private boolean hasChild(List<CategoryProposal> categoryProposals, CategoryProposal tChild) {
+        return getChildList(categoryProposals, tChild).size() > 0;
+    }
+
+
+
+}

+ 244 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ProposalInfoServiceImpl.java

@@ -0,0 +1,244 @@
+package com.ruoyi.system.service.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysDept;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.system.domain.ProposalUnitReply;
+import com.ruoyi.system.domain.ProposalUser;
+import com.ruoyi.system.domain.ZxFj;
+import com.ruoyi.system.mapper.ProposalUnitReplyMapper;
+import com.ruoyi.system.mapper.ProposalUserMapper;
+import com.ruoyi.system.mapper.ZxFjMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.system.mapper.ProposalInfoMapper;
+import com.ruoyi.system.domain.ProposalInfo;
+import com.ruoyi.system.service.IProposalInfoService;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 提案信息Service业务层处理
+ * 
+ * @author boman
+ * @date 2024-03-07
+ */
+@Service
+public class ProposalInfoServiceImpl implements IProposalInfoService 
+{
+    @Autowired
+    private ProposalInfoMapper proposalInfoMapper;
+    @Autowired
+    private ProposalUserMapper proposalUserMapper;
+    @Autowired
+    private ZxFjMapper zxFjMapper;
+    @Autowired
+    private ProposalUnitReplyMapper proposalUnitReplyMapper;
+
+    /**
+     * 查询提案信息
+     * 
+     * @param proposalId 提案信息主键
+     * @return 提案信息
+     */
+    @Override
+    public ProposalInfo selectProposalInfoByProposalId(Long proposalId)
+    {
+        ProposalInfo proposalInfo = proposalInfoMapper.selectProposalInfoByProposalId(proposalId);
+        //查询附件
+        ZxFj zxFj = new ZxFj();
+        zxFj.setMainId(proposalId);
+        List<ZxFj> zxFjList = zxFjMapper.selectZxFjList(zxFj);
+        if(zxFjList!=null && zxFjList.size()>0){
+            proposalInfo.setZxFjList(zxFjList);
+        }
+        //查询人员
+        ProposalUser proposalUser = new ProposalUser();
+        proposalUser.setProposalId(proposalId);
+        List<ProposalUser> proposalUserList = proposalUserMapper.selectProposalUserList(proposalUser);
+        if(proposalUserList!=null && proposalUserList.size()>0){
+            proposalInfo.setProposalUserList(proposalUserList);
+        }
+        //查询答复
+        ProposalUnitReply proposalUnitReply = new ProposalUnitReply();
+        proposalUnitReply.setProposalId(proposalId);
+        List<ProposalUnitReply> proposalUnitReplyList = proposalUnitReplyMapper.selectProposalUnitReplyList(proposalUnitReply);
+        if(proposalUnitReplyList!=null && proposalUnitReplyList.size()>0){
+            for (ProposalUnitReply unitReply : proposalUnitReplyList) {
+                List<ZxFj> dfFjList = new ArrayList<>();
+                //查询答复附件
+                if(zxFjList!=null && zxFjList.size()>0){
+                    for (ZxFj fj : zxFjList) {
+                        if(fj.getStytle().equals(unitReply.getType())){
+                            dfFjList.add(fj);
+                        }
+                    }
+                }
+                unitReply.setZxFjList(dfFjList);
+            }
+            proposalInfo.setProposalUnitReplyList(proposalUnitReplyList);
+        }
+        return proposalInfo;
+    }
+
+    /**
+     * 查询提案信息列表
+     * 
+     * @param proposalInfo 提案信息
+     * @return 提案信息
+     */
+    @Override
+    public List<ProposalInfo> selectProposalInfoList(ProposalInfo proposalInfo)
+    {
+        return proposalInfoMapper.selectProposalInfoList(proposalInfo);
+    }
+
+    /**
+     * 新增提案信息
+     * 
+     * @param proposalInfo 提案信息
+     * @return 结果
+     */
+    @Override
+    @Transactional
+    public int insertProposalInfo(ProposalInfo proposalInfo)
+    {
+        SysUser user = SecurityUtils.getLoginUser().getUser();
+        proposalInfo.setProposalUserId(user.getUserId());
+        proposalInfo.setProposalProgress("1");
+        proposalInfo.setCreateTime(DateUtils.getNowDate());
+        int i = proposalInfoMapper.insertProposalInfo(proposalInfo);
+        if(proposalInfo.getProposalUserList()!=null && proposalInfo.getProposalUserList().size()>0){
+            for (ProposalUser proposalUser : proposalInfo.getProposalUserList()) {
+                proposalUser.setProposalId(proposalInfo.getProposalId());
+                proposalUserMapper.insertProposalUser(proposalUser);
+            }
+        }
+        if(proposalInfo.getZxFjList()!=null && proposalInfo.getZxFjList().size()>0){
+            for (ZxFj zxFj : proposalInfo.getZxFjList()) {
+                zxFj.setMainId(proposalInfo.getProposalId());
+                zxFj.setSourceId(proposalInfo.getProposalId());
+                zxFj.setType("1");
+                zxFj.setStytle("4");
+                zxFjMapper.insertZxFj(zxFj);
+            }
+        }
+        return i;
+    }
+
+    /**
+     * 修改提案信息
+     * 
+     * @param proposalInfo 提案信息
+     * @return 结果
+     */
+    @Override
+    public int updateProposalInfo(ProposalInfo proposalInfo)
+    {
+        //删除附件
+        zxFjMapper.deleteZxFjBySourceId(proposalInfo.getProposalId());
+        //删除人员
+        proposalUserMapper.deleteProposalUserByProposalId(proposalInfo.getProposalId());
+        proposalInfo.setUpdateTime(DateUtils.getNowDate());
+        if(proposalInfo.getProposalUserList()!=null && proposalInfo.getProposalUserList().size()>0){
+            for (ProposalUser proposalUser : proposalInfo.getProposalUserList()) {
+                proposalUser.setProposalId(proposalInfo.getProposalId());
+                proposalUserMapper.insertProposalUser(proposalUser);
+            }
+        }
+        if(proposalInfo.getZxFjList()!=null && proposalInfo.getZxFjList().size()>0){
+            for (ZxFj zxFj : proposalInfo.getZxFjList()) {
+                zxFj.setMainId(proposalInfo.getProposalId());
+                zxFj.setSourceId(proposalInfo.getProposalId());
+                zxFj.setType("1");
+                zxFj.setStytle("4");
+                zxFjMapper.insertZxFj(zxFj);
+            }
+        }
+        return proposalInfoMapper.updateProposalInfo(proposalInfo);
+    }
+
+    /**
+     * 批量删除提案信息
+     * 
+     * @param proposalIds 需要删除的提案信息主键
+     * @return 结果
+     */
+    @Override
+    public int deleteProposalInfoByProposalIds(Long[] proposalIds)
+    {
+        return proposalInfoMapper.deleteProposalInfoByProposalIds(proposalIds);
+    }
+
+    /**
+     * 删除提案信息信息
+     * 
+     * @param proposalId 提案信息主键
+     * @return 结果
+     */
+    @Override
+    public int deleteProposalInfoByProposalId(Long proposalId)
+    {
+        return proposalInfoMapper.deleteProposalInfoByProposalId(proposalId);
+    }
+
+    /***
+     * 是否立案
+     */
+    @Override
+    @Transactional
+    public AjaxResult isRecord(ProposalInfo proposalInfo) {
+        //不立案,指定答复单位
+        if("1".equals(proposalInfo.getIsRecord())){
+            proposalInfo.setProposalProgress("1");
+            List<ProposalUnitReply> proposalUnitReplyList = proposalInfo.getProposalUnitReplyList();
+            for (ProposalUnitReply proposalUnitReply : proposalUnitReplyList) {
+                proposalUnitReply.setProposalId(proposalInfo.getProposalId());
+                proposalUnitReply.setType("1");
+                proposalUnitReplyMapper.insertProposalUnitReply(proposalUnitReply);
+            }
+        }else{
+            proposalInfo.setProposalProgress("2");
+        }
+        proposalInfo.setUpdateTime(DateUtils.getNowDate());
+        int i = proposalInfoMapper.updateProposalInfo(proposalInfo);
+        return i > 0 ? AjaxResult.success() : AjaxResult.error();
+    }
+
+    /***
+     * 提案交办
+     */
+    @Override
+    @Transactional
+    public AjaxResult assign(ProposalInfo proposalInfo) {
+        List<ProposalUnitReply> proposalUnitReplyList = proposalInfo.getProposalUnitReplyList();
+        for (ProposalUnitReply proposalUnitReply : proposalUnitReplyList) {
+            proposalUnitReply.setProposalId(proposalInfo.getProposalId());
+            proposalUnitReplyMapper.insertProposalUnitReply(proposalUnitReply);
+        }
+        proposalInfo.setProposalProgress("3");
+        proposalInfo.setUpdateTime(DateUtils.getNowDate());
+        int i = proposalInfoMapper.updateProposalInfo(proposalInfo);
+        return i > 0 ? AjaxResult.success() : AjaxResult.error();
+    }
+
+    @Override
+    public AjaxResult idea(ProposalInfo proposalInfo) {
+        proposalInfo.setProposalProgress("5");
+        proposalInfo.setUpdateTime(DateUtils.getNowDate());
+        int i = proposalInfoMapper.updateProposalInfo(proposalInfo);
+        return i > 0 ? AjaxResult.success() : AjaxResult.error();
+    }
+
+    @Override
+    public AjaxResult zxIdea(ProposalInfo proposalInfo) {
+        proposalInfo.setProposalProgress("6");
+        proposalInfo.setUpdateTime(DateUtils.getNowDate());
+        int i = proposalInfoMapper.updateProposalInfo(proposalInfo);
+        return i > 0 ? AjaxResult.success() : AjaxResult.error();
+    }
+}

+ 139 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ProposalUnitReplyServiceImpl.java

@@ -0,0 +1,139 @@
+package com.ruoyi.system.service.impl;
+
+import java.util.List;
+
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.system.domain.ProposalInfo;
+import com.ruoyi.system.domain.ZxFj;
+import com.ruoyi.system.mapper.ProposalInfoMapper;
+import com.ruoyi.system.mapper.ZxFjMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.system.mapper.ProposalUnitReplyMapper;
+import com.ruoyi.system.domain.ProposalUnitReply;
+import com.ruoyi.system.service.IProposalUnitReplyService;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 提案单位答复Service业务层处理
+ * 
+ * @author boman
+ * @date 2024-03-07
+ */
+@Service
+public class ProposalUnitReplyServiceImpl implements IProposalUnitReplyService 
+{
+    @Autowired
+    private ProposalUnitReplyMapper proposalUnitReplyMapper;
+    @Autowired
+    private ProposalInfoMapper proposalInfoMapper;
+    @Autowired
+    private ZxFjMapper zxFjMapper;
+
+    /**
+     * 查询提案单位答复
+     * 
+     * @param id 提案单位答复主键
+     * @return 提案单位答复
+     */
+    @Override
+    public ProposalUnitReply selectProposalUnitReplyById(Long id)
+    {
+        return proposalUnitReplyMapper.selectProposalUnitReplyById(id);
+    }
+
+    /**
+     * 查询提案单位答复列表
+     * 
+     * @param proposalUnitReply 提案单位答复
+     * @return 提案单位答复
+     */
+    @Override
+    public List<ProposalUnitReply> selectProposalUnitReplyList(ProposalUnitReply proposalUnitReply)
+    {
+        return proposalUnitReplyMapper.selectProposalUnitReplyList(proposalUnitReply);
+    }
+
+    /**
+     * 新增提案单位答复
+     * 
+     * @param proposalUnitReply 提案单位答复
+     * @return 结果
+     */
+    @Override
+    public int insertProposalUnitReply(ProposalUnitReply proposalUnitReply)
+    {
+        return proposalUnitReplyMapper.insertProposalUnitReply(proposalUnitReply);
+    }
+
+    /**
+     * 修改提案单位答复
+     * 
+     * @param proposalUnitReply 提案单位答复
+     * @return 结果
+     */
+    @Override
+    public int updateProposalUnitReply(ProposalUnitReply proposalUnitReply)
+    {
+        return proposalUnitReplyMapper.updateProposalUnitReply(proposalUnitReply);
+    }
+
+    /**
+     * 批量删除提案单位答复
+     * 
+     * @param ids 需要删除的提案单位答复主键
+     * @return 结果
+     */
+    @Override
+    public int deleteProposalUnitReplyByIds(Long[] ids)
+    {
+        return proposalUnitReplyMapper.deleteProposalUnitReplyByIds(ids);
+    }
+
+    /**
+     * 删除提案单位答复信息
+     * 
+     * @param id 提案单位答复主键
+     * @return 结果
+     */
+    @Override
+    public int deleteProposalUnitReplyById(Long id)
+    {
+        return proposalUnitReplyMapper.deleteProposalUnitReplyById(id);
+    }
+
+    @Override
+    @Transactional
+    public AjaxResult reply(ProposalUnitReply proposalUnitReply) {
+        //查询当前账号部门
+        Long deptId = SecurityUtils.getDeptId();
+        proposalUnitReply.setDeptId(deptId);
+        List<ProposalUnitReply> list = proposalUnitReplyMapper.selectProposalUnitReplyList(proposalUnitReply);
+        for (ProposalUnitReply unitReply : list) {
+            unitReply.setContent(proposalUnitReply.getContent());
+            proposalUnitReplyMapper.updateProposalUnitReply(unitReply);
+        }
+        if(list.get(0).getType().equals("2")){
+            ProposalInfo proposalInfo = new ProposalInfo();
+            proposalInfo.setProposalId(proposalUnitReply.getProposalId());
+            proposalInfo.setProposalProgress("4");
+            proposalInfo.setUpdateTime(DateUtils.getNowDate());
+            proposalInfoMapper.updateProposalInfo(proposalInfo);
+        }
+
+        if(proposalUnitReply.getZxFjList()!=null && proposalUnitReply.getZxFjList().size()>0){
+            for (ZxFj zxFj : proposalUnitReply.getZxFjList()) {
+                zxFj.setMainId(proposalUnitReply.getProposalId());
+                zxFj.setSourceId(proposalUnitReply.getId());
+                zxFj.setType("1");
+                zxFj.setStytle(list.get(0).getType());
+                zxFjMapper.insertZxFj(zxFj);
+            }
+        }
+
+        return  AjaxResult.success();
+    }
+
+}

+ 93 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ProposalUserServiceImpl.java

@@ -0,0 +1,93 @@
+package com.ruoyi.system.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.system.mapper.ProposalUserMapper;
+import com.ruoyi.system.domain.ProposalUser;
+import com.ruoyi.system.service.IProposalUserService;
+
+/**
+ * 提案人员Service业务层处理
+ * 
+ * @author boman
+ * @date 2024-03-07
+ */
+@Service
+public class ProposalUserServiceImpl implements IProposalUserService 
+{
+    @Autowired
+    private ProposalUserMapper proposalUserMapper;
+
+    /**
+     * 查询提案人员
+     * 
+     * @param id 提案人员主键
+     * @return 提案人员
+     */
+    @Override
+    public ProposalUser selectProposalUserById(Long id)
+    {
+        return proposalUserMapper.selectProposalUserById(id);
+    }
+
+    /**
+     * 查询提案人员列表
+     * 
+     * @param proposalUser 提案人员
+     * @return 提案人员
+     */
+    @Override
+    public List<ProposalUser> selectProposalUserList(ProposalUser proposalUser)
+    {
+        return proposalUserMapper.selectProposalUserList(proposalUser);
+    }
+
+    /**
+     * 新增提案人员
+     * 
+     * @param proposalUser 提案人员
+     * @return 结果
+     */
+    @Override
+    public int insertProposalUser(ProposalUser proposalUser)
+    {
+        return proposalUserMapper.insertProposalUser(proposalUser);
+    }
+
+    /**
+     * 修改提案人员
+     * 
+     * @param proposalUser 提案人员
+     * @return 结果
+     */
+    @Override
+    public int updateProposalUser(ProposalUser proposalUser)
+    {
+        return proposalUserMapper.updateProposalUser(proposalUser);
+    }
+
+    /**
+     * 批量删除提案人员
+     * 
+     * @param ids 需要删除的提案人员主键
+     * @return 结果
+     */
+    @Override
+    public int deleteProposalUserByIds(Long[] ids)
+    {
+        return proposalUserMapper.deleteProposalUserByIds(ids);
+    }
+
+    /**
+     * 删除提案人员信息
+     * 
+     * @param id 提案人员主键
+     * @return 结果
+     */
+    @Override
+    public int deleteProposalUserById(Long id)
+    {
+        return proposalUserMapper.deleteProposalUserById(id);
+    }
+}

+ 98 - 0
ruoyi-system/src/main/resources/mapper/system/CategoryProposalMapper.xml

@@ -0,0 +1,98 @@
+<?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.system.mapper.CategoryProposalMapper">
+    
+    <resultMap type="CategoryProposal" id="CategoryProposalResult">
+        <result property="categoryId"    column="category_id"    />
+        <result property="parentId"    column="parent_id"    />
+        <result property="ancestors"    column="ancestors"    />
+        <result property="categoryName"    column="category_name"    />
+        <result property="orderNum"    column="order_num"    />
+        <result property="status"    column="status"    />
+        <result property="delFlag"    column="del_flag"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+    </resultMap>
+
+    <sql id="selectCategoryProposalVo">
+        select category_id, parent_id, ancestors, category_name, order_num, status, del_flag, create_by, create_time, update_by, update_time from category_proposal
+    </sql>
+
+    <select id="selectCategoryProposalList" parameterType="CategoryProposal" resultMap="CategoryProposalResult">
+        <include refid="selectCategoryProposalVo"/>
+        <where>
+            del_flag = '0'
+            <if test="parentId != null "> and parent_id = #{parentId}</if>
+            <if test="ancestors != null  and ancestors != ''"> and ancestors = #{ancestors}</if>
+            <if test="categoryName != null  and categoryName != ''"> and category_name like concat('%', #{categoryName}, '%')</if>
+            <if test="orderNum != null "> and order_num = #{orderNum}</if>
+            <if test="status != null  and status != ''"> and status = #{status}</if>
+        </where>
+        order by parent_id, order_num
+    </select>
+    
+    <select id="selectCategoryProposalByCategoryId" parameterType="Long" resultMap="CategoryProposalResult">
+        <include refid="selectCategoryProposalVo"/>
+        where category_id = #{categoryId}
+    </select>
+        
+    <insert id="insertCategoryProposal" parameterType="CategoryProposal" useGeneratedKeys="true" keyProperty="categoryId">
+        insert into category_proposal
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="parentId != null">parent_id,</if>
+            <if test="ancestors != null">ancestors,</if>
+            <if test="categoryName != null">category_name,</if>
+            <if test="orderNum != null">order_num,</if>
+            <if test="status != null">status,</if>
+            <if test="delFlag != null">del_flag,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="parentId != null">#{parentId},</if>
+            <if test="ancestors != null">#{ancestors},</if>
+            <if test="categoryName != null">#{categoryName},</if>
+            <if test="orderNum != null">#{orderNum},</if>
+            <if test="status != null">#{status},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+         </trim>
+    </insert>
+
+    <update id="updateCategoryProposal" parameterType="CategoryProposal">
+        update category_proposal
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="parentId != null">parent_id = #{parentId},</if>
+            <if test="ancestors != null">ancestors = #{ancestors},</if>
+            <if test="categoryName != null">category_name = #{categoryName},</if>
+            <if test="orderNum != null">order_num = #{orderNum},</if>
+            <if test="status != null">status = #{status},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+        </trim>
+        where category_id = #{categoryId}
+    </update>
+
+    <delete id="deleteCategoryProposalByCategoryId" parameterType="Long">
+        delete from category_proposal where category_id = #{categoryId}
+    </delete>
+
+    <delete id="deleteCategoryProposalByCategoryIds" parameterType="String">
+        delete from category_proposal where category_id in 
+        <foreach item="categoryId" collection="array" open="(" separator="," close=")">
+            #{categoryId}
+        </foreach>
+    </delete>
+</mapper>

+ 221 - 0
ruoyi-system/src/main/resources/mapper/system/ProposalInfoMapper.xml

@@ -0,0 +1,221 @@
+<?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.system.mapper.ProposalInfoMapper">
+    
+    <resultMap type="ProposalInfo" id="ProposalInfoResult">
+        <result property="proposalId"    column="proposal_id"    />
+        <result property="proposalUserId"    column="proposal_user_id"    />
+        <result property="proposalNumber"    column="proposal_number"    />
+        <result property="title"    column="title"    />
+        <result property="proposalName"    column="proposal_name"    />
+        <result property="proposalPhone"    column="proposal_phone"    />
+        <result property="boundary"    column="boundary"    />
+        <result property="partyAffiliation"    column="party_affiliation"    />
+        <result property="contactAddress"    column="contact_address"    />
+        <result property="categoryId"    column="category_id"    />
+        <result property="categoryName"    column="category_name"    />
+        <result property="proposalType"    column="proposal_type"    />
+        <result property="proposalContent"    column="proposal_content"    />
+        <result property="isJointly"    column="is_jointly"    />
+        <result property="isPublicity"    column="is_publicity"    />
+        <result property="contentPublicity"    column="content_publicity"    />
+        <result property="isSurvey"    column="is_survey"    />
+        <result property="isFirst"    column="is_first"    />
+        <result property="isPerson"    column="is_person"    />
+        <result property="isRecord"    column="is_record"    />
+        <result property="negotiateType"    column="negotiate_type"    />
+        <result property="proposedContractor"    column="proposed_contractor"    />
+        <result property="proposalProgress"    column="proposal_progress"    />
+        <result property="rollingProcess"    column="rolling_process"    />
+        <result property="complexType"    column="complex_type"    />
+        <result property="isCasesTogether"    column="is_cases_together"    />
+        <result property="uniteProposalId"    column="unite_proposal_id"    />
+        <result property="satisfaction"    column="satisfaction"    />
+        <result property="membersOpinion"    column="members_opinion"    />
+        <result property="zxSatisfaction"    column="zx_satisfaction"    />
+        <result property="zxOpinion"    column="zx_opinion"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+    </resultMap>
+
+    <sql id="selectProposalInfoVo">
+        select proposal_id, proposal_user_id, proposal_number, title, proposal_name, proposal_phone, boundary, party_affiliation, contact_address, category_id, category_name, proposal_type, proposal_content, is_jointly, is_publicity, content_publicity, is_survey, is_first, is_person, is_record, negotiate_type, proposed_contractor, proposal_progress, rolling_process, complex_type, is_cases_together, unite_proposal_id, satisfaction, members_opinion, create_by, create_time, update_by, update_time, remark from proposal_info
+    </sql>
+
+    <select id="selectProposalInfoList" parameterType="ProposalInfo" resultMap="ProposalInfoResult">
+        <include refid="selectProposalInfoVo"/>
+        <where>  
+            <if test="proposalUserId != null "> and proposal_user_id = #{proposalUserId}</if>
+            <if test="proposalNumber != null  and proposalNumber != ''"> and proposal_number = #{proposalNumber}</if>
+            <if test="title != null  and title != ''"> and title = #{title}</if>
+            <if test="proposalName != null  and proposalName != ''"> and proposal_name like concat('%', #{proposalName}, '%')</if>
+            <if test="proposalPhone != null  and proposalPhone != ''"> and proposal_phone = #{proposalPhone}</if>
+            <if test="boundary != null  and boundary != ''"> and boundary = #{boundary}</if>
+            <if test="partyAffiliation != null  and partyAffiliation != ''"> and party_affiliation = #{partyAffiliation}</if>
+            <if test="contactAddress != null  and contactAddress != ''"> and contact_address = #{contactAddress}</if>
+            <if test="categoryId != null "> and category_id = #{categoryId}</if>
+            <if test="categoryName != null  and categoryName != ''"> and category_name like concat('%', #{categoryName}, '%')</if>
+            <if test="proposalType != null  and proposalType != ''"> and proposal_type = #{proposalType}</if>
+            <if test="proposalContent != null  and proposalContent != ''"> and proposal_content = #{proposalContent}</if>
+            <if test="isJointly != null  and isJointly != ''"> and is_jointly = #{isJointly}</if>
+            <if test="isPublicity != null  and isPublicity != ''"> and is_publicity = #{isPublicity}</if>
+            <if test="contentPublicity != null  and contentPublicity != ''"> and content_publicity = #{contentPublicity}</if>
+            <if test="isSurvey != null  and isSurvey != ''"> and is_survey = #{isSurvey}</if>
+            <if test="isFirst != null  and isFirst != ''"> and is_first = #{isFirst}</if>
+            <if test="isPerson != null  and isPerson != ''"> and is_person = #{isPerson}</if>
+            <if test="isRecord != null  and isRecord != ''"> and is_record = #{isRecord}</if>
+            <if test="negotiateType != null  and negotiateType != ''"> and negotiate_type = #{negotiateType}</if>
+            <if test="proposedContractor != null  and proposedContractor != ''"> and proposed_contractor = #{proposedContractor}</if>
+            <if test="proposalProgress != null  and proposalProgress != ''"> and proposal_progress = #{proposalProgress}</if>
+            <if test="rollingProcess != null  and rollingProcess != ''"> and rolling_process = #{rollingProcess}</if>
+            <if test="complexType != null  and complexType != ''"> and complex_type = #{complexType}</if>
+            <if test="isCasesTogether != null  and isCasesTogether != ''"> and is_cases_together = #{isCasesTogether}</if>
+            <if test="uniteProposalId != null "> and unite_proposal_id = #{uniteProposalId}</if>
+            <if test="satisfaction != null  and satisfaction != ''"> and satisfaction = #{satisfaction}</if>
+            <if test="membersOpinion != null  and membersOpinion != ''"> and members_opinion = #{membersOpinion}</if>
+            <if test="zxSatisfaction != null  and zxSatisfaction != ''"> and zx_satisfaction = #{zxSatisfaction}</if>
+            <if test="zxOpinion != null  and zxOpinion != ''"> and zx_opinion = #{zxOpinion}</if>
+        </where>
+    </select>
+    
+    <select id="selectProposalInfoByProposalId" parameterType="Long" resultMap="ProposalInfoResult">
+        <include refid="selectProposalInfoVo"/>
+        where proposal_id = #{proposalId}
+    </select>
+        
+    <insert id="insertProposalInfo" parameterType="ProposalInfo" useGeneratedKeys="true" keyProperty="proposalId">
+        insert into proposal_info
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="proposalUserId != null">proposal_user_id,</if>
+            <if test="proposalNumber != null">proposal_number,</if>
+            <if test="title != null and title != ''">title,</if>
+            <if test="proposalName != null and proposalName != ''">proposal_name,</if>
+            <if test="proposalPhone != null and proposalPhone != ''">proposal_phone,</if>
+            <if test="boundary != null">boundary,</if>
+            <if test="partyAffiliation != null">party_affiliation,</if>
+            <if test="contactAddress != null">contact_address,</if>
+            <if test="categoryId != null">category_id,</if>
+            <if test="categoryName != null">category_name,</if>
+            <if test="proposalType != null">proposal_type,</if>
+            <if test="proposalContent != null">proposal_content,</if>
+            <if test="isJointly != null">is_jointly,</if>
+            <if test="isPublicity != null">is_publicity,</if>
+            <if test="contentPublicity != null">content_publicity,</if>
+            <if test="isSurvey != null">is_survey,</if>
+            <if test="isFirst != null">is_first,</if>
+            <if test="isPerson != null">is_person,</if>
+            <if test="isRecord != null">is_record,</if>
+            <if test="negotiateType != null">negotiate_type,</if>
+            <if test="proposedContractor != null">proposed_contractor,</if>
+            <if test="proposalProgress != null">proposal_progress,</if>
+            <if test="rollingProcess != null">rolling_process,</if>
+            <if test="complexType != null">complex_type,</if>
+            <if test="isCasesTogether != null">is_cases_together,</if>
+            <if test="uniteProposalId != null">unite_proposal_id,</if>
+            <if test="satisfaction != null">satisfaction,</if>
+            <if test="membersOpinion != null">members_opinion,</if>
+            <if test="zxSatisfaction != null  "> zx_satisfaction</if>
+            <if test="zxOpinion != null  "> zx_opinion</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="remark != null">remark,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="proposalUserId != null">#{proposalUserId},</if>
+            <if test="proposalNumber != null">#{proposalNumber},</if>
+            <if test="title != null and title != ''">#{title},</if>
+            <if test="proposalName != null and proposalName != ''">#{proposalName},</if>
+            <if test="proposalPhone != null and proposalPhone != ''">#{proposalPhone},</if>
+            <if test="boundary != null">#{boundary},</if>
+            <if test="partyAffiliation != null">#{partyAffiliation},</if>
+            <if test="contactAddress != null">#{contactAddress},</if>
+            <if test="categoryId != null">#{categoryId},</if>
+            <if test="categoryName != null">#{categoryName},</if>
+            <if test="proposalType != null">#{proposalType},</if>
+            <if test="proposalContent != null">#{proposalContent},</if>
+            <if test="isJointly != null">#{isJointly},</if>
+            <if test="isPublicity != null">#{isPublicity},</if>
+            <if test="contentPublicity != null">#{contentPublicity},</if>
+            <if test="isSurvey != null">#{isSurvey},</if>
+            <if test="isFirst != null">#{isFirst},</if>
+            <if test="isPerson != null">#{isPerson},</if>
+            <if test="isRecord != null">#{isRecord},</if>
+            <if test="negotiateType != null">#{negotiateType},</if>
+            <if test="proposedContractor != null">#{proposedContractor},</if>
+            <if test="proposalProgress != null">#{proposalProgress},</if>
+            <if test="rollingProcess != null">#{rollingProcess},</if>
+            <if test="complexType != null">#{complexType},</if>
+            <if test="isCasesTogether != null">#{isCasesTogether},</if>
+            <if test="uniteProposalId != null">#{uniteProposalId},</if>
+            <if test="satisfaction != null">#{satisfaction},</if>
+            <if test="membersOpinion != null">#{membersOpinion},</if>
+            <if test="zxSatisfaction != null "> #{zxSatisfaction}</if>
+            <if test="zxOpinion != null  ">#{zxOpinion}</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+         </trim>
+    </insert>
+
+    <update id="updateProposalInfo" parameterType="ProposalInfo">
+        update proposal_info
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="proposalUserId != null">proposal_user_id = #{proposalUserId},</if>
+            <if test="proposalNumber != null">proposal_number = #{proposalNumber},</if>
+            <if test="title != null and title != ''">title = #{title},</if>
+            <if test="proposalName != null and proposalName != ''">proposal_name = #{proposalName},</if>
+            <if test="proposalPhone != null and proposalPhone != ''">proposal_phone = #{proposalPhone},</if>
+            <if test="boundary != null">boundary = #{boundary},</if>
+            <if test="partyAffiliation != null">party_affiliation = #{partyAffiliation},</if>
+            <if test="contactAddress != null">contact_address = #{contactAddress},</if>
+            <if test="categoryId != null">category_id = #{categoryId},</if>
+            <if test="categoryName != null">category_name = #{categoryName},</if>
+            <if test="proposalType != null">proposal_type = #{proposalType},</if>
+            <if test="proposalContent != null">proposal_content = #{proposalContent},</if>
+            <if test="isJointly != null">is_jointly = #{isJointly},</if>
+            <if test="isPublicity != null">is_publicity = #{isPublicity},</if>
+            <if test="contentPublicity != null">content_publicity = #{contentPublicity},</if>
+            <if test="isSurvey != null">is_survey = #{isSurvey},</if>
+            <if test="isFirst != null">is_first = #{isFirst},</if>
+            <if test="isPerson != null">is_person = #{isPerson},</if>
+            <if test="isRecord != null">is_record = #{isRecord},</if>
+            <if test="negotiateType != null">negotiate_type = #{negotiateType},</if>
+            <if test="proposedContractor != null">proposed_contractor = #{proposedContractor},</if>
+            <if test="proposalProgress != null">proposal_progress = #{proposalProgress},</if>
+            <if test="rollingProcess != null">rolling_process = #{rollingProcess},</if>
+            <if test="complexType != null">complex_type = #{complexType},</if>
+            <if test="isCasesTogether != null">is_cases_together = #{isCasesTogether},</if>
+            <if test="uniteProposalId != null">unite_proposal_id = #{uniteProposalId},</if>
+            <if test="satisfaction != null">satisfaction = #{satisfaction},</if>
+            <if test="membersOpinion != null">members_opinion = #{membersOpinion},</if>
+            <if test="zxSatisfaction != null "> zx_satisfaction = #{zxSatisfaction}</if>
+            <if test="zxOpinion != null "> zx_opinion = #{zxOpinion}</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+        </trim>
+        where proposal_id = #{proposalId}
+    </update>
+
+    <delete id="deleteProposalInfoByProposalId" parameterType="Long">
+        delete from proposal_info where proposal_id = #{proposalId}
+    </delete>
+
+    <delete id="deleteProposalInfoByProposalIds" parameterType="String">
+        delete from proposal_info where proposal_id in 
+        <foreach item="proposalId" collection="array" open="(" separator="," close=")">
+            #{proposalId}
+        </foreach>
+    </delete>
+</mapper>

+ 86 - 0
ruoyi-system/src/main/resources/mapper/system/ProposalUnitReplyMapper.xml

@@ -0,0 +1,86 @@
+<?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.system.mapper.ProposalUnitReplyMapper">
+    
+    <resultMap type="ProposalUnitReply" id="ProposalUnitReplyResult">
+        <result property="id"    column="id"    />
+        <result property="deptId"    column="dept_id"    />
+        <result property="deptName"    column="dept_name"    />
+        <result property="proposalId"    column="proposal_id"    />
+        <result property="content"    column="content"    />
+        <result property="type"    column="type"    />
+        <result property="remark"    column="remark"    />
+    </resultMap>
+
+    <sql id="selectProposalUnitReplyVo">
+        select id, dept_id,dept_name, proposal_id, content, type, remark from proposal_unit_reply
+    </sql>
+
+    <select id="selectProposalUnitReplyList" parameterType="ProposalUnitReply" resultMap="ProposalUnitReplyResult">
+        <include refid="selectProposalUnitReplyVo"/>
+        <where>  
+            <if test="deptId != null "> and dept_id = #{deptId}</if>
+            <if test="proposalId != null "> and proposal_id = #{proposalId}</if>
+            <if test="content != null  and content != ''"> and content = #{content}</if>
+            <if test="type != null  and type != ''"> and type = #{type}</if>
+        </where>
+    </select>
+    
+    <select id="selectProposalUnitReplyById" parameterType="Long" resultMap="ProposalUnitReplyResult">
+        <include refid="selectProposalUnitReplyVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertProposalUnitReply" parameterType="ProposalUnitReply" useGeneratedKeys="true" keyProperty="id">
+        insert into proposal_unit_reply
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="deptId != null">dept_id,</if>
+            <if test="deptName != null and deptName != ''">dept_name,</if>
+            <if test="proposalId != null">proposal_id,</if>
+            <if test="content != null and content != ''">content,</if>
+            <if test="type != null">type,</if>
+            <if test="remark != null">remark,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="deptId != null">#{deptId},</if>
+            <if test="deptName != null and deptName != ''">#{deptName},</if>
+            <if test="proposalId != null">#{proposalId},</if>
+            <if test="content != null and content != ''">#{content},</if>
+            <if test="type != null">#{type},</if>
+            <if test="remark != null">#{remark},</if>
+         </trim>
+    </insert>
+
+    <update id="updateProposalUnitReply" parameterType="ProposalUnitReply">
+        update proposal_unit_reply
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="deptId != null">dept_id = #{deptId},</if>
+            <if test="deptName != null and deptName != ''">dept_name= #{deptName},</if>
+            <if test="proposalId != null">proposal_id = #{proposalId},</if>
+            <if test="content != null and content != ''">content = #{content},</if>
+            <if test="type != null">type = #{type},</if>
+            <if test="remark != null">remark = #{remark},</if>
+        </trim>
+        where id = #{id}
+    </update>
+    <update id="updateContent" parameterType="ProposalUnitReply">
+        update proposal_unit_reply
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="content != null and content != ''">content = #{content},</if>
+        </trim>
+        where dept_id = #{deptId} and >proposal_id = #{proposalId}
+    </update>
+
+    <delete id="deleteProposalUnitReplyById" parameterType="Long">
+        delete from proposal_unit_reply where id = #{id}
+    </delete>
+
+    <delete id="deleteProposalUnitReplyByIds" parameterType="String">
+        delete from proposal_unit_reply where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 78 - 0
ruoyi-system/src/main/resources/mapper/system/ProposalUserMapper.xml

@@ -0,0 +1,78 @@
+<?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.system.mapper.ProposalUserMapper">
+    
+    <resultMap type="ProposalUser" id="ProposalUserResult">
+        <result property="id"    column="id"    />
+        <result property="proposalId"    column="proposal_id"    />
+        <result property="name"    column="name"    />
+        <result property="unit"    column="unit"    />
+        <result property="type"    column="type"    />
+        <result property="remark"    column="remark"    />
+    </resultMap>
+
+    <sql id="selectProposalUserVo">
+        select id, proposal_id, name, unit, type, remark from proposal_user
+    </sql>
+
+    <select id="selectProposalUserList" parameterType="ProposalUser" resultMap="ProposalUserResult">
+        <include refid="selectProposalUserVo"/>
+        <where>  
+            <if test="proposalId != null "> and proposal_id = #{proposalId}</if>
+            <if test="name != null  and name != ''"> and name like concat('%', #{name}, '%')</if>
+            <if test="unit != null  and unit != ''"> and unit = #{unit}</if>
+            <if test="type != null  and type != ''"> and type = #{type}</if>
+        </where>
+    </select>
+    
+    <select id="selectProposalUserById" parameterType="Long" resultMap="ProposalUserResult">
+        <include refid="selectProposalUserVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertProposalUser" parameterType="ProposalUser" useGeneratedKeys="true" keyProperty="id">
+        insert into proposal_user
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="proposalId != null">proposal_id,</if>
+            <if test="name != null and name != ''">name,</if>
+            <if test="unit != null and unit != ''">unit,</if>
+            <if test="type != null">type,</if>
+            <if test="remark != null">remark,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="proposalId != null">#{proposalId},</if>
+            <if test="name != null and name != ''">#{name},</if>
+            <if test="unit != null and unit != ''">#{unit},</if>
+            <if test="type != null">#{type},</if>
+            <if test="remark != null">#{remark},</if>
+         </trim>
+    </insert>
+
+    <update id="updateProposalUser" parameterType="ProposalUser">
+        update proposal_user
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="proposalId != null">proposal_id = #{proposalId},</if>
+            <if test="name != null and name != ''">name = #{name},</if>
+            <if test="unit != null and unit != ''">unit = #{unit},</if>
+            <if test="type != null">type = #{type},</if>
+            <if test="remark != null">remark = #{remark},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteProposalUserById" parameterType="Long">
+        delete from proposal_user where id = #{id}
+    </delete>
+
+    <delete id="deleteProposalUserByIds" parameterType="String">
+        delete from proposal_user where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+    <delete id="deleteProposalUserByProposalId" parameterType="java.lang.Long">
+        delete from proposal_user where proposal_id = #{proposalId}
+    </delete>
+</mapper>