Browse Source

cpms优化
基础文档清单

jiangbiao 1 năm trước cách đây
mục cha
commit
d62fd3e891
96 tập tin đã thay đổi với 9303 bổ sung399 xóa
  1. 192 0
      cpms-admin/src/main/java/com/cpms/project/asset/controller/TAssetBasedocController.java
  2. 190 0
      cpms-admin/src/main/java/com/cpms/project/asset/domain/TAssetBasedoc.java
  3. 61 0
      cpms-admin/src/main/java/com/cpms/project/asset/mapper/TAssetBasedocMapper.java
  4. 61 0
      cpms-admin/src/main/java/com/cpms/project/asset/service/ITAssetBasedocService.java
  5. 93 0
      cpms-admin/src/main/java/com/cpms/project/asset/service/impl/TAssetBasedocServiceImpl.java
  6. 9 4
      cpms-admin/src/main/java/com/cpms/project/file/controller/TFileController.java
  7. 102 55
      cpms-admin/src/main/java/com/cpms/project/file/domain/TFile.java
  8. 191 175
      cpms-admin/src/main/java/com/cpms/project/office/OnlyofficeController.java
  9. 99 0
      cpms-admin/src/main/java/com/cpms/project/plant/controller/TMtAgendaController.java
  10. 106 0
      cpms-admin/src/main/java/com/cpms/project/plant/controller/TMtContentController.java
  11. 399 0
      cpms-admin/src/main/java/com/cpms/project/plant/controller/TMtMeetingController.java
  12. 109 0
      cpms-admin/src/main/java/com/cpms/project/plant/controller/TMtPersonController.java
  13. 328 0
      cpms-admin/src/main/java/com/cpms/project/plant/domain/TMtAgenda.java
  14. 294 0
      cpms-admin/src/main/java/com/cpms/project/plant/domain/TMtContent.java
  15. 259 0
      cpms-admin/src/main/java/com/cpms/project/plant/domain/TMtMeeting.java
  16. 277 0
      cpms-admin/src/main/java/com/cpms/project/plant/domain/TMtPerson.java
  17. 62 0
      cpms-admin/src/main/java/com/cpms/project/plant/mapper/TMtAgendaMapper.java
  18. 62 0
      cpms-admin/src/main/java/com/cpms/project/plant/mapper/TMtContentMapper.java
  19. 64 0
      cpms-admin/src/main/java/com/cpms/project/plant/mapper/TMtMeetingMapper.java
  20. 64 0
      cpms-admin/src/main/java/com/cpms/project/plant/mapper/TMtPersonMapper.java
  21. 62 0
      cpms-admin/src/main/java/com/cpms/project/plant/service/ITMtAgendaService.java
  22. 62 0
      cpms-admin/src/main/java/com/cpms/project/plant/service/ITMtContentService.java
  23. 61 0
      cpms-admin/src/main/java/com/cpms/project/plant/service/ITMtMeetingService.java
  24. 68 0
      cpms-admin/src/main/java/com/cpms/project/plant/service/ITMtPersonService.java
  25. 97 0
      cpms-admin/src/main/java/com/cpms/project/plant/service/impl/TMtAgendaServiceImpl.java
  26. 97 0
      cpms-admin/src/main/java/com/cpms/project/plant/service/impl/TMtContentServiceImpl.java
  27. 138 0
      cpms-admin/src/main/java/com/cpms/project/plant/service/impl/TMtMeetingServiceImpl.java
  28. 163 0
      cpms-admin/src/main/java/com/cpms/project/plant/service/impl/TMtPersonServiceImpl.java
  29. 1 1
      cpms-admin/src/main/resources/application.yml
  30. 100 0
      cpms-admin/src/main/resources/mapper/asset/TAssetBasedocMapper.xml
  31. 104 0
      cpms-admin/src/main/resources/mapper/file/TFileMapper.xml
  32. 174 0
      cpms-admin/src/main/resources/mapper/plant/TMtAgendaMapper.xml
  33. 149 0
      cpms-admin/src/main/resources/mapper/plant/TMtContentMapper.xml
  34. 126 0
      cpms-admin/src/main/resources/mapper/plant/TMtMeetingMapper.xml
  35. 132 0
      cpms-admin/src/main/resources/mapper/plant/TMtPersonMapper.xml
  36. 1 3
      cpms-admin/src/main/resources/mapper/process/TClassdOverviewMapper.xml
  37. 1 3
      cpms-admin/src/main/resources/mapper/process/TSifOverviewMapper.xml
  38. BIN
      cpms-admin/src/main/resources/static/template/process/classd.xlsx
  39. 9 0
      cpms-common/src/main/java/com/cpms/common/utils/DictUtils.java
  40. 39 0
      cpms-common/src/main/java/com/cpms/common/utils/poi/POIConstants.java
  41. 777 0
      cpms-common/src/main/java/com/cpms/common/utils/poi/PoiWordTools.java
  42. 5 0
      cpms-generator/src/main/resources/vm/java/controller.java.vm
  43. 44 0
      cpms-ui/src/api/asset/basedoc.js
  44. 51 0
      cpms-ui/src/api/plant/agenda.js
  45. 53 0
      cpms-ui/src/api/plant/content.js
  46. 61 0
      cpms-ui/src/api/plant/meeting.js
  47. 53 0
      cpms-ui/src/api/plant/person.js
  48. 29 17
      cpms-ui/src/router/index.js
  49. 1 1
      cpms-ui/src/utils/request.js
  50. 5 5
      cpms-ui/src/views/approval/index.vue
  51. 3 3
      cpms-ui/src/views/asset/asset/index.vue
  52. 471 0
      cpms-ui/src/views/asset/basedoc/index.vue
  53. 3 3
      cpms-ui/src/views/asset/fixedAsset/index.vue
  54. 4 4
      cpms-ui/src/views/asset/specMain/index.vue
  55. 3 3
      cpms-ui/src/views/asset/typemgr/index.vue
  56. 451 0
      cpms-ui/src/views/components/meeting/person.vue
  57. 408 0
      cpms-ui/src/views/file/file/uploadFile.vue
  58. 254 0
      cpms-ui/src/views/plant/agenda/hisAgenda.vue
  59. 399 0
      cpms-ui/src/views/plant/agenda/index.vue
  60. 217 0
      cpms-ui/src/views/plant/content/hisContent.vue
  61. 513 0
      cpms-ui/src/views/plant/content/index.vue
  62. 3 0
      cpms-ui/src/views/plant/meeting/index.vue
  63. 6 6
      cpms-ui/src/views/plant/staffmgr/index.vue
  64. 455 0
      cpms-ui/src/views/plant/weekmeeting/bMeeting.vue
  65. 312 0
      cpms-ui/src/views/plant/weekmeeting/index.vue
  66. 1 1
      cpms-ui/src/views/process/classd/index.vue
  67. 3 3
      cpms-ui/src/views/sems/specAqf/bf.vue
  68. 3 3
      cpms-ui/src/views/sems/specAqf/fc.vue
  69. 3 3
      cpms-ui/src/views/sems/specAqf/index.vue
  70. 3 3
      cpms-ui/src/views/sems/specAqf/ty.vue
  71. 5 5
      cpms-ui/src/views/sems/specCc/bf.vue
  72. 5 5
      cpms-ui/src/views/sems/specCc/index.vue
  73. 5 5
      cpms-ui/src/views/sems/specCc/ty.vue
  74. 5 5
      cpms-ui/src/views/sems/specCc/zx.vue
  75. 4 4
      cpms-ui/src/views/sems/specDt/bf.vue
  76. 4 4
      cpms-ui/src/views/sems/specDt/index.vue
  77. 4 4
      cpms-ui/src/views/sems/specDt/ty.vue
  78. 4 4
      cpms-ui/src/views/sems/specDt/zx.vue
  79. 4 4
      cpms-ui/src/views/sems/specDzsb/bf.vue
  80. 4 4
      cpms-ui/src/views/sems/specDzsb/index.vue
  81. 4 4
      cpms-ui/src/views/sems/specDzsb/ty.vue
  82. 4 4
      cpms-ui/src/views/sems/specDzsb/zx.vue
  83. 3 3
      cpms-ui/src/views/sems/specGl/bf.vue
  84. 3 3
      cpms-ui/src/views/sems/specGl/index.vue
  85. 3 3
      cpms-ui/src/views/sems/specGl/ty.vue
  86. 3 3
      cpms-ui/src/views/sems/specGl/zx.vue
  87. 4 4
      cpms-ui/src/views/sems/specYlgd/bf.vue
  88. 4 4
      cpms-ui/src/views/sems/specYlgd/index.vue
  89. 4 4
      cpms-ui/src/views/sems/specYlgd/ty.vue
  90. 4 4
      cpms-ui/src/views/sems/specYlgd/zx.vue
  91. 4 4
      cpms-ui/src/views/sems/specYlrq/bf.vue
  92. 4 4
      cpms-ui/src/views/sems/specYlrq/index.vue
  93. 3 3
      cpms-ui/src/views/sems/specYlrq/specYlrq-hisReform.vue
  94. 4 4
      cpms-ui/src/views/sems/specYlrq/ty.vue
  95. 4 4
      cpms-ui/src/views/sems/specYlrq/zx.vue
  96. 4 4
      cpms-ui/src/views/shiftmgr/log/index.vue

+ 192 - 0
cpms-admin/src/main/java/com/cpms/project/asset/controller/TAssetBasedocController.java

@@ -0,0 +1,192 @@
+package com.cpms.project.asset.controller;
+
+import com.alibaba.fastjson2.JSON;
+import com.cpms.common.annotation.Log;
+import com.cpms.common.core.controller.BaseController;
+import com.cpms.common.core.domain.AjaxResult;
+import com.cpms.common.core.page.TableDataInfo;
+import com.cpms.common.enums.BusinessType;
+import com.cpms.common.utils.file.ExcelUtils;
+import com.cpms.common.utils.poi.ExcelUtil;
+import com.cpms.project.asset.domain.TAssetBasedoc;
+import com.cpms.project.asset.service.ITAssetBasedocService;
+import com.cpms.project.file.domain.TFile;
+import com.cpms.project.file.service.ITFileService;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 资产管理基础文档清单Controller
+ *
+ * @author admin
+ * @date 2024-04-18
+ */
+@RestController
+@RequestMapping("/asset/basedoc")
+public class TAssetBasedocController extends BaseController {
+    @Autowired
+    private ITAssetBasedocService tAssetBasedocService;
+    @Autowired
+    private ITFileService tFileService;
+
+    /**
+     * 查询资产管理基础文档清单列表
+     */
+    @PreAuthorize("@ss.hasPermi('asset:basedoc:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TAssetBasedoc tAssetBasedoc) {
+        startPage();
+        List<TAssetBasedoc> list = tAssetBasedocService.selectTAssetBasedocList(tAssetBasedoc);
+        TFile file = new TFile();
+        file.setLinkName("basedoc");
+        file.setType("1");
+        list.forEach(item -> {
+            file.setLinkId(item.getId());
+            item.setFileNum(0L);
+            List<TFile> tFiles = tFileService.selectTFileList(file);
+            if (CollectionUtils.isNotEmpty(tFiles))
+                item.setFileNum((long) tFiles.size());
+        });
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出资产管理基础文档清单列表
+     */
+    @PreAuthorize("@ss.hasPermi('asset:basedoc:export')")
+    @Log(title = "资产管理基础文档清单", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TAssetBasedoc tAssetBasedoc) {
+        List<TAssetBasedoc> list = tAssetBasedocService.selectTAssetBasedocList(tAssetBasedoc);
+        ExcelUtil<TAssetBasedoc> util = new ExcelUtil<TAssetBasedoc>(TAssetBasedoc.class);
+        util.exportExcel(response, list, "资产管理基础文档清单数据");
+    }
+
+    /**
+     * 获取资产管理基础文档清单详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('asset:basedoc:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id) {
+        return success(tAssetBasedocService.selectTAssetBasedocById(id));
+    }
+
+    /**
+     * 新增资产管理基础文档清单
+     */
+    @PreAuthorize("@ss.hasPermi('asset:basedoc:add')")
+    @Log(title = "资产管理基础文档清单", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TAssetBasedoc tAssetBasedoc) {
+        tAssetBasedoc.setCreaterCode(getUserId().toString());
+        tAssetBasedoc.setCreatedate(new Date());
+        return toAjax(tAssetBasedocService.insertTAssetBasedoc(tAssetBasedoc));
+    }
+
+    /**
+     * 修改资产管理基础文档清单
+     */
+    @PreAuthorize("@ss.hasPermi('asset:basedoc:edit')")
+    @Log(title = "资产管理基础文档清单", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TAssetBasedoc tAssetBasedoc) {
+        tAssetBasedoc.setUpdaterCode(getUserId().toString());
+        tAssetBasedoc.setUpdatedate(new Date());
+        return toAjax(tAssetBasedocService.updateTAssetBasedoc(tAssetBasedoc));
+    }
+
+    /**
+     * 删除资产管理基础文档清单
+     */
+    @PreAuthorize("@ss.hasPermi('asset:basedoc:remove')")
+    @Log(title = "资产管理基础文档清单", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids) {
+        return toAjax(tAssetBasedocService.deleteTAssetBasedocByIds(ids));
+    }
+
+
+    @Log(title = "资产管理基础文档清单批量导入", businessType = BusinessType.INSERT)
+    @PostMapping("/importData")
+    public AjaxResult importData(@RequestParam("file") MultipartFile file) throws IOException {
+        //获取操作人员ID
+        Long userId = getUserId();
+        //报错行数统计
+        List<Integer> failRow = new ArrayList<>();
+        Workbook workbook = ExcelUtils.getWorkBook(file);
+        Sheet sheet = workbook.getSheetAt(0);
+        List<TAssetBasedoc> list = new ArrayList<>();
+        int rowNum = sheet.getPhysicalNumberOfRows();
+        int failNumber = 0;
+        for (int i = 2; i < rowNum; i++) {
+            try {
+                logger.info("读取行数:" + i);
+                Row row = sheet.getRow(i);
+                int cellNum = row.getLastCellNum();
+                TAssetBasedoc entity = new TAssetBasedoc();
+                for (int j = 0; j < cellNum; j++) {
+                    Cell cell = row.getCell(j);
+                    if (cell == null) {
+                        continue;
+                    }
+                    String cellValue = ExcelUtils.getCellValue(cell);
+                    logger.info("cellValue:" + cellValue);
+                    switch (j) {
+                        case 0:
+                            entity.setType(cellValue);
+                            break;
+                        case 1:
+                            entity.setDocName(cellValue);
+                            break;
+                        case 2:
+                            entity.setDocStatus(cellValue);
+                            break;
+                        case 3:
+                            entity.setRemarks(cellValue);
+                            break;
+                    }
+                }
+                entity.setCreaterCode(String.valueOf(userId));
+                logger.info("entity:" + entity);
+                list.add(entity);
+            } catch (Exception e) {
+                failNumber++;
+                logger.info("e:" + JSON.toJSONString(e));
+                failRow.add(i + 1);
+            }
+        }
+        int successNumber = 0;
+        int failNum = 0;
+        for (TAssetBasedoc t : list
+        ) {
+            failNum++;
+            try {
+                //根据使用证、注册编号、位号,进行数据更新
+                add(t);
+                successNumber++;
+            } catch (Exception e) {
+                failNumber++;
+                logger.info("e:" + e);
+                failRow.add(failNum + 1);
+            }
+        }
+        logger.info("list:" + JSON.toJSONString(list));
+        logger.info("successNumber:" + successNumber);
+        logger.info("failNumber:" + failNumber);
+        logger.info("failRow:" + failRow);
+        return AjaxResult.success(String.valueOf(successNumber), failRow);
+    }
+}

+ 190 - 0
cpms-admin/src/main/java/com/cpms/project/asset/domain/TAssetBasedoc.java

@@ -0,0 +1,190 @@
+package com.cpms.project.asset.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.cpms.common.annotation.Excel;
+import com.cpms.common.core.domain.BaseEntity;
+
+/**
+ * 资产管理基础文档清单对象 t_asset_basedoc
+ * 
+ * @author admin
+ * @date 2024-04-18
+ */
+public class TAssetBasedoc extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** id */
+    private Long id;
+
+    /** 类型 */
+    @Excel(name = "类型")
+    private String type;
+
+    /** 文档名称 */
+    @Excel(name = "文档名称")
+    private String docName;
+
+    /** 状态 */
+    @Excel(name = "状态")
+    private String docStatus;
+
+    /** 上传人 */
+    @Excel(name = "上传人")
+    private String createrCode;
+
+    /** 上传日期 */
+    @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
+    @Excel(name = "上传日期", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date createdate;
+
+    /** 备注 */
+    @Excel(name = "备注")
+    private String remarks;
+
+    /** 删除标识 */
+    private Integer delFlag;
+
+    /** 更新人 */
+    @Excel(name = "更新人")
+    private String updaterCode;
+
+    /** 更新日期 */
+    @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
+    @Excel(name = "更新日期", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date updatedate;
+
+    /** 部门编号 */
+    @Excel(name = "部门编号")
+    private Long deptId;
+
+    private Long fileNum;
+
+    public Long getFileNum() {
+        return fileNum;
+    }
+
+    public void setFileNum(Long fileNum) {
+        this.fileNum = fileNum;
+    }
+
+    public void setId(Long id)
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setType(String type) 
+    {
+        this.type = type;
+    }
+
+    public String getType() 
+    {
+        return type;
+    }
+    public void setDocName(String docName) 
+    {
+        this.docName = docName;
+    }
+
+    public String getDocName() 
+    {
+        return docName;
+    }
+    public void setDocStatus(String docStatus) 
+    {
+        this.docStatus = docStatus;
+    }
+
+    public String getDocStatus() 
+    {
+        return docStatus;
+    }
+    public void setCreaterCode(String createrCode) 
+    {
+        this.createrCode = createrCode;
+    }
+
+    public String getCreaterCode() 
+    {
+        return createrCode;
+    }
+    public void setCreatedate(Date createdate) 
+    {
+        this.createdate = createdate;
+    }
+
+    public Date getCreatedate() 
+    {
+        return createdate;
+    }
+    public void setRemarks(String remarks) 
+    {
+        this.remarks = remarks;
+    }
+
+    public String getRemarks() 
+    {
+        return remarks;
+    }
+    public void setDelFlag(Integer delFlag) 
+    {
+        this.delFlag = delFlag;
+    }
+
+    public Integer getDelFlag() 
+    {
+        return delFlag;
+    }
+    public void setUpdaterCode(String updaterCode) 
+    {
+        this.updaterCode = updaterCode;
+    }
+
+    public String getUpdaterCode() 
+    {
+        return updaterCode;
+    }
+    public void setUpdatedate(Date updatedate) 
+    {
+        this.updatedate = updatedate;
+    }
+
+    public Date getUpdatedate() 
+    {
+        return updatedate;
+    }
+    public void setDeptId(Long deptId) 
+    {
+        this.deptId = deptId;
+    }
+
+    public Long getDeptId() 
+    {
+        return deptId;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("type", getType())
+            .append("docName", getDocName())
+            .append("docStatus", getDocStatus())
+            .append("createrCode", getCreaterCode())
+            .append("createdate", getCreatedate())
+            .append("remarks", getRemarks())
+            .append("delFlag", getDelFlag())
+            .append("updaterCode", getUpdaterCode())
+            .append("updatedate", getUpdatedate())
+            .append("deptId", getDeptId())
+            .toString();
+    }
+}

+ 61 - 0
cpms-admin/src/main/java/com/cpms/project/asset/mapper/TAssetBasedocMapper.java

@@ -0,0 +1,61 @@
+package com.cpms.project.asset.mapper;
+
+import java.util.List;
+import com.cpms.project.asset.domain.TAssetBasedoc;
+
+/**
+ * 资产管理基础文档清单Mapper接口
+ * 
+ * @author admin
+ * @date 2024-04-18
+ */
+public interface TAssetBasedocMapper 
+{
+    /**
+     * 查询资产管理基础文档清单
+     * 
+     * @param id 资产管理基础文档清单主键
+     * @return 资产管理基础文档清单
+     */
+    public TAssetBasedoc selectTAssetBasedocById(Long id);
+
+    /**
+     * 查询资产管理基础文档清单列表
+     * 
+     * @param tAssetBasedoc 资产管理基础文档清单
+     * @return 资产管理基础文档清单集合
+     */
+    public List<TAssetBasedoc> selectTAssetBasedocList(TAssetBasedoc tAssetBasedoc);
+
+    /**
+     * 新增资产管理基础文档清单
+     * 
+     * @param tAssetBasedoc 资产管理基础文档清单
+     * @return 结果
+     */
+    public int insertTAssetBasedoc(TAssetBasedoc tAssetBasedoc);
+
+    /**
+     * 修改资产管理基础文档清单
+     * 
+     * @param tAssetBasedoc 资产管理基础文档清单
+     * @return 结果
+     */
+    public int updateTAssetBasedoc(TAssetBasedoc tAssetBasedoc);
+
+    /**
+     * 删除资产管理基础文档清单
+     * 
+     * @param id 资产管理基础文档清单主键
+     * @return 结果
+     */
+    public int deleteTAssetBasedocById(Long id);
+
+    /**
+     * 批量删除资产管理基础文档清单
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTAssetBasedocByIds(Long[] ids);
+}

+ 61 - 0
cpms-admin/src/main/java/com/cpms/project/asset/service/ITAssetBasedocService.java

@@ -0,0 +1,61 @@
+package com.cpms.project.asset.service;
+
+import java.util.List;
+import com.cpms.project.asset.domain.TAssetBasedoc;
+
+/**
+ * 资产管理基础文档清单Service接口
+ * 
+ * @author admin
+ * @date 2024-04-18
+ */
+public interface ITAssetBasedocService 
+{
+    /**
+     * 查询资产管理基础文档清单
+     * 
+     * @param id 资产管理基础文档清单主键
+     * @return 资产管理基础文档清单
+     */
+    public TAssetBasedoc selectTAssetBasedocById(Long id);
+
+    /**
+     * 查询资产管理基础文档清单列表
+     * 
+     * @param tAssetBasedoc 资产管理基础文档清单
+     * @return 资产管理基础文档清单集合
+     */
+    public List<TAssetBasedoc> selectTAssetBasedocList(TAssetBasedoc tAssetBasedoc);
+
+    /**
+     * 新增资产管理基础文档清单
+     * 
+     * @param tAssetBasedoc 资产管理基础文档清单
+     * @return 结果
+     */
+    public int insertTAssetBasedoc(TAssetBasedoc tAssetBasedoc);
+
+    /**
+     * 修改资产管理基础文档清单
+     * 
+     * @param tAssetBasedoc 资产管理基础文档清单
+     * @return 结果
+     */
+    public int updateTAssetBasedoc(TAssetBasedoc tAssetBasedoc);
+
+    /**
+     * 批量删除资产管理基础文档清单
+     * 
+     * @param ids 需要删除的资产管理基础文档清单主键集合
+     * @return 结果
+     */
+    public int deleteTAssetBasedocByIds(Long[] ids);
+
+    /**
+     * 删除资产管理基础文档清单信息
+     * 
+     * @param id 资产管理基础文档清单主键
+     * @return 结果
+     */
+    public int deleteTAssetBasedocById(Long id);
+}

+ 93 - 0
cpms-admin/src/main/java/com/cpms/project/asset/service/impl/TAssetBasedocServiceImpl.java

@@ -0,0 +1,93 @@
+package com.cpms.project.asset.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.cpms.project.asset.mapper.TAssetBasedocMapper;
+import com.cpms.project.asset.domain.TAssetBasedoc;
+import com.cpms.project.asset.service.ITAssetBasedocService;
+
+/**
+ * 资产管理基础文档清单Service业务层处理
+ * 
+ * @author admin
+ * @date 2024-04-18
+ */
+@Service
+public class TAssetBasedocServiceImpl implements ITAssetBasedocService 
+{
+    @Autowired
+    private TAssetBasedocMapper tAssetBasedocMapper;
+
+    /**
+     * 查询资产管理基础文档清单
+     * 
+     * @param id 资产管理基础文档清单主键
+     * @return 资产管理基础文档清单
+     */
+    @Override
+    public TAssetBasedoc selectTAssetBasedocById(Long id)
+    {
+        return tAssetBasedocMapper.selectTAssetBasedocById(id);
+    }
+
+    /**
+     * 查询资产管理基础文档清单列表
+     * 
+     * @param tAssetBasedoc 资产管理基础文档清单
+     * @return 资产管理基础文档清单
+     */
+    @Override
+    public List<TAssetBasedoc> selectTAssetBasedocList(TAssetBasedoc tAssetBasedoc)
+    {
+        return tAssetBasedocMapper.selectTAssetBasedocList(tAssetBasedoc);
+    }
+
+    /**
+     * 新增资产管理基础文档清单
+     * 
+     * @param tAssetBasedoc 资产管理基础文档清单
+     * @return 结果
+     */
+    @Override
+    public int insertTAssetBasedoc(TAssetBasedoc tAssetBasedoc)
+    {
+        return tAssetBasedocMapper.insertTAssetBasedoc(tAssetBasedoc);
+    }
+
+    /**
+     * 修改资产管理基础文档清单
+     * 
+     * @param tAssetBasedoc 资产管理基础文档清单
+     * @return 结果
+     */
+    @Override
+    public int updateTAssetBasedoc(TAssetBasedoc tAssetBasedoc)
+    {
+        return tAssetBasedocMapper.updateTAssetBasedoc(tAssetBasedoc);
+    }
+
+    /**
+     * 批量删除资产管理基础文档清单
+     * 
+     * @param ids 需要删除的资产管理基础文档清单主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTAssetBasedocByIds(Long[] ids)
+    {
+        return tAssetBasedocMapper.deleteTAssetBasedocByIds(ids);
+    }
+
+    /**
+     * 删除资产管理基础文档清单信息
+     * 
+     * @param id 资产管理基础文档清单主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTAssetBasedocById(Long id)
+    {
+        return tAssetBasedocMapper.deleteTAssetBasedocById(id);
+    }
+}

+ 9 - 4
cpms-admin/src/main/java/com/cpms/project/file/controller/TFileController.java

@@ -6,6 +6,7 @@ import com.cpms.common.core.controller.BaseController;
 import com.cpms.common.core.domain.AjaxResult;
 import com.cpms.common.core.page.TableDataInfo;
 import com.cpms.common.enums.BusinessType;
+import com.cpms.common.utils.StringUtils;
 import com.cpms.common.utils.file.FileUploadUtils;
 import com.cpms.project.file.domain.TFile;
 import com.cpms.project.file.service.ITFileService;
@@ -15,6 +16,8 @@ import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.Date;
 import java.util.List;
 
@@ -35,10 +38,9 @@ public class TFileController extends BaseController {
      */
     @PreAuthorize("@ss.hasPermi('file:file:list')")
     @GetMapping("/list")
-    public TableDataInfo list(TFile tFile) {
-        startPage();
+    public AjaxResult list(TFile tFile) {
         List<TFile> list = tFileService.selectTFileList(tFile);
-        return getDataTable(list);
+        return AjaxResult.success(list);
     }
 
 
@@ -83,12 +85,15 @@ public class TFileController extends BaseController {
 
 
     @PostMapping("/uploadFile")
-    public AjaxResult uploadFile(@RequestParam("file") MultipartFile file, @RequestParam(value = "linkId", required = false) Long linkId, @RequestParam(value = "linkName", required = false) String linkName) throws IOException {
+    public AjaxResult uploadFile(@RequestParam("file") MultipartFile file, @RequestParam(value = "linkId", required = false) Long linkId, @RequestParam(value = "linkName", required = false) String linkName, @RequestParam(value = "pId", required = false) Long pId) throws IOException {
         if (!file.isEmpty()) {
             String avatar = FileUploadUtils.upload(RuoYiConfig.getUploadPath(), file);
             TFile tFile = new TFile();
             tFile.setFileName(file.getOriginalFilename());
             tFile.setFileUrl(avatar);
+            tFile.setType("1");
+            tFile.setpId(pId);
+            tFile.setFileSize(String.valueOf(new BigDecimal(file.getSize()).divide(BigDecimal.valueOf(1024),2, RoundingMode.HALF_DOWN)));
             tFile.setUploader(getNickname());
             tFile.setUploadDate(new Date());
             tFile.setLinkId(linkId);

+ 102 - 55
cpms-admin/src/main/java/com/cpms/project/file/domain/TFile.java

@@ -1,8 +1,8 @@
 package com.cpms.project.file.domain;
 
-import com.fasterxml.jackson.annotation.JsonFormat;
 import com.cpms.common.annotation.Excel;
 import com.cpms.common.core.domain.BaseEntity;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
 
@@ -14,126 +14,173 @@ import java.util.Date;
  * @author jiang
  * @date 2023-10-16
  */
-public class TFile extends BaseEntity
-{
+public class TFile extends BaseEntity {
     private static final long serialVersionUID = 1L;
 
-    /** $column.columnComment */
+    /**
+     * $column.columnComment
+     */
     private Long id;
 
-    /** 附件地址 */
+    /**
+     * 附件地址
+     */
     @Excel(name = "附件地址")
     private String fileUrl;
 
-    /** 附件名称 */
+    /**
+     * 附件名称
+     */
     @Excel(name = "附件名称")
     private String fileName;
 
-    /** 上传时间 */
-    @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
+    /**
+     * 文件大小
+     */
+    @Excel(name = "文件大小")
+    private String fileSize;
+
+    /**
+     * 类型
+     */
+    @Excel(name = "类型")
+    private String type;
+
+    /**
+     * 上传时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     @Excel(name = "上传时间", width = 30, dateFormat = "yyyy-MM-dd")
     private Date uploadDate;
 
-    /** 上传人 */
+    /**
+     * 上传人
+     */
     @Excel(name = "上传人")
     private String uploader;
 
-    /** 关联表id */
+    /**
+     * 关联表id
+     */
     @Excel(name = "关联表id")
     private Long linkId;
 
-    /** 关联表名 */
+    /**
+     * 关联表名
+     */
     @Excel(name = "关联表名")
     private String linkName;
 
-    /** 删除标识 */
+    /**
+     * 删除标识
+     */
     private String delFlag;
 
-    public void setId(Long id)
-    {
+    /**
+     * 上级id
+     */
+    private Long pId;
+
+    public void setId(Long id) {
         this.id = id;
     }
 
-    public Long getId()
-    {
+    public Long getId() {
         return id;
     }
-    public void setFileUrl(String fileUrl)
-    {
+
+    public void setFileUrl(String fileUrl) {
         this.fileUrl = fileUrl;
     }
 
-    public String getFileUrl()
-    {
+    public String getFileUrl() {
         return fileUrl;
     }
-    public void setFileName(String fileName)
-    {
+
+    public void setFileName(String fileName) {
         this.fileName = fileName;
     }
 
-    public String getFileName()
-    {
+    public String getFileName() {
         return fileName;
     }
-    public void setUploadDate(Date uploadDate)
-    {
+
+    public String getFileSize() {
+        return fileSize;
+    }
+
+    public void setFileSize(String fileSize) {
+        this.fileSize = fileSize;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public void setUploadDate(Date uploadDate) {
         this.uploadDate = uploadDate;
     }
 
-    public Date getUploadDate()
-    {
+    public Date getUploadDate() {
         return uploadDate;
     }
-    public void setUploader(String uploader)
-    {
+
+    public void setUploader(String uploader) {
         this.uploader = uploader;
     }
 
-    public String getUploader()
-    {
+    public String getUploader() {
         return uploader;
     }
-    public void setLinkId(Long linkId)
-    {
+
+    public void setLinkId(Long linkId) {
         this.linkId = linkId;
     }
 
-    public Long getLinkId()
-    {
+    public Long getLinkId() {
         return linkId;
     }
-    public void setLinkName(String linkName)
-    {
+
+    public void setLinkName(String linkName) {
         this.linkName = linkName;
     }
 
-    public String getLinkName()
-    {
+    public String getLinkName() {
         return linkName;
     }
-    public void setDelFlag(String delFlag)
-    {
+
+    public void setDelFlag(String delFlag) {
         this.delFlag = delFlag;
     }
 
-    public String getDelFlag()
-    {
+    public String getDelFlag() {
         return delFlag;
     }
 
+    public Long getpId() {
+        return pId;
+    }
+
+    public void setpId(Long pId) {
+        this.pId = pId;
+    }
+
     @Override
     public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("id", getId())
-            .append("fileUrl", getFileUrl())
-            .append("fileName", getFileName())
-            .append("uploadDate", getUploadDate())
-            .append("uploader", getUploader())
-            .append("remark", getRemark())
-            .append("linkId", getLinkId())
-            .append("linkName", getLinkName())
-            .append("delFlag", getDelFlag())
-            .toString();
+        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+                .append("id", getId())
+                .append("fileUrl", getFileUrl())
+                .append("fileName", getFileName())
+                .append("uploadDate", getUploadDate())
+                .append("uploader", getUploader())
+                .append("remark", getRemark())
+                .append("linkId", getLinkId())
+                .append("linkName", getLinkName())
+                .append("delFlag", getDelFlag())
+                .toString();
     }
 }

+ 191 - 175
cpms-admin/src/main/java/com/cpms/project/office/OnlyofficeController.java

@@ -1,188 +1,204 @@
 package com.cpms.project.office;
 
+import com.alibaba.fastjson2.JSONObject;
 import com.cpms.common.core.controller.BaseController;
+import com.cpms.common.core.domain.AjaxResult;
+import com.cpms.common.core.domain.entity.SysUser;
+import com.cpms.project.file.domain.TFile;
+import com.cpms.project.file.service.ITFileService;
+import com.cpms.project.office.documentserver.models.enums.Action;
+import com.cpms.project.office.documentserver.models.enums.Type;
+import com.cpms.project.office.documentserver.models.filemodel.FileModel;
+import com.cpms.project.office.dto.PreviewOfficeFileDTO;
+import com.cpms.project.office.entities.User;
+import com.cpms.project.office.entities.UserFile;
+import com.cpms.project.office.services.configurers.FileConfigurer;
+import com.cpms.project.office.services.configurers.wrappers.DefaultFileWrapper;
+import com.cpms.system.service.ISysUserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Locale;
 
 
 @Component
 @RestController
 @RequestMapping(value = "/onlyoffice", method = RequestMethod.POST)
 public class OnlyofficeController extends BaseController {
-//
-//    protected final Logger logger = LoggerFactory.getLogger(BaseController.class);
-//    @Autowired
-//    private ISysUserService sysUserService;
-//
-//    @Autowired
-//    private FileConfigurer<DefaultFileWrapper> fileConfigurer;
-//
-//    @Value("${deployment.host}")
-//    private String deploymentHost;
-//    @Value("${server.port}")
-//    private String port;
-//
-//    @Value("${files.docservice.url.site}")
-//    private String docserviceSite;
-//
-//    @Value("${files.docservice.url.api}")
-//    private String docserviceApiUrl;
-//
-//    @Autowired
-//    private ITFileService tFileService;
-//
-//    @PostMapping("/previewFile")
-//    public AjaxResult preview(HttpServletRequest request, @RequestBody PreviewOfficeFileDTO previewOfficeFileDTO) {
-//        //获取当前用户
-//        SysUser sysUser = sysUserService.selectUserById(getUserId());
-//        Action action = Action.view;
-//        Type type = Type.desktop;
-//        Locale locale = new Locale("zh");
-//
-//        User user = new User(sysUser);
-//        //文件
-//        UserFile userFile = new UserFile();
-//        TFile rcfile = tFileService.selectTFileById(Long.parseLong(previewOfficeFileDTO.getUserFileId()));
-//        userFile.setFileId(rcfile.getId().toString());
-//        userFile.setFilePath(rcfile.getFileUrl());
-//        userFile.setFileName(rcfile.getFileName());
-//        userFile.setExtendName("");
-//        userFile.setUserFileId(rcfile.getId().toString());
-//        userFile.setUploadTime(String.valueOf(rcfile.getUploadDate().getTime()));
-//
-//        //下载地址
-//        String previewUrl = deploymentHost + rcfile.getFileUrl();
-////        String previewUrl = "/onlyoffice/download?filePath=" + rcfile.getFileUrl();
-//
-//
-//        FileModel fileModel = fileConfigurer.getFileModel(
-//                DefaultFileWrapper
-//                        .builder()
-//                        .userFile(userFile)
-//                        .type(type)
-//                        .lang(locale.toLanguageTag())
-//                        .action(action)
-//                        .user(user)
-//                        .actionData(previewUrl)
-//                        .build()
-//        );
-//        fileModel.setToken(null);
-//        JSONObject jsonObject = new JSONObject();
-//        jsonObject.put("file", fileModel);
-//        jsonObject.put("docserviceApiUrl", docserviceSite + docserviceApiUrl);
-//        jsonObject.put("reportName", userFile.getFileName());
-//        return AjaxResult.success(jsonObject);
-//    }
-//
-///*    @PostMapping("/editFile")
-//
-//    public AjaxResult edit(HttpServletRequest request,  @RequestBody PreviewOfficeFileDTO previewOfficeFileDTO) {
-//
-//        //
-//        SysUser sysUser = sysUserService.selectUserById(getUserId());
-//        Action action = Action.edit;
-//        Type type = Type.desktop;
-//        Locale locale = new Locale("zh");
-//
-//        User user = new User(sysUser);
-//        //文件
-//        UserFile userFile = new UserFile();
-//        TRcfile rcfile = tRcfileService.selectTRcfileById(Long.parseLong(previewOfficeFileDTO.getUserFileId()));
-//        userFile.setFileId(rcfile.getId().toString());
-//        userFile.setFilePath(rcfile.getFileUrl());
-//        userFile.setFileName(rcfile.getFileName());
-//        userFile.setExtendName("");
-//        userFile.setUserFileId(rcfile.getId().toString());
-//        userFile.setUploadTime(String.valueOf(rcfile.getUpdatedate().getTime()));
-//
+
+    @Autowired
+    private ISysUserService sysUserService;
+
+    @Autowired
+    private FileConfigurer<DefaultFileWrapper> fileConfigurer;
+
+    @Value("${deployment.host}")
+    private String deploymentHost;
+    @Value("${server.port}")
+    private String port;
+
+    @Value("${files.docservice.url.site}")
+    private String docserviceSite;
+
+    @Value("${files.docservice.url.api}")
+    private String docserviceApiUrl;
+
+    @Autowired
+    private ITFileService tFileService;
+
+    @PostMapping("/previewFile")
+    public AjaxResult preview(HttpServletRequest request, @RequestBody PreviewOfficeFileDTO previewOfficeFileDTO) {
+        //获取当前用户
+        SysUser sysUser = sysUserService.selectUserById(getUserId());
+        Action action = Action.view;
+        Type type = Type.desktop;
+        Locale locale = new Locale("zh");
+
+        User user = new User(sysUser);
+        //文件
+        UserFile userFile = new UserFile();
+        TFile rcfile = tFileService.selectTFileById(Long.parseLong(previewOfficeFileDTO.getUserFileId()));
+        userFile.setFileId(rcfile.getId().toString());
+        userFile.setFilePath(rcfile.getFileUrl());
+        userFile.setFileName(rcfile.getFileName());
+        userFile.setExtendName("");
+        userFile.setUserFileId(rcfile.getId().toString());
+        userFile.setUploadTime(String.valueOf(rcfile.getUploadDate().getTime()));
+
+        //下载地址
+        String previewUrl = deploymentHost + rcfile.getFileUrl();
 //        String previewUrl = "/onlyoffice/download?filePath=" + rcfile.getFileUrl();
-//
-//
-//        FileModel fileModel = fileConfigurer.getFileModel(
-//                DefaultFileWrapper
-//                        .builder()
-//                        .userFile(userFile)
-//                        .type(type)
-//                        .lang(locale.toLanguageTag())
-//                        .action(action)
-//                        .user(user)
-//                        .actionData(previewUrl)
-//                        .build()
-//        );
-//        fileModel.setToken(null);
-//        JSONObject jsonObject = new JSONObject();
-//        jsonObject.put("file",fileModel);
-//        jsonObject.put("docserviceApiUrl", docserviceSite + docserviceApiUrl);
-//        jsonObject.put("reportName",userFile.getFileName());
-//        return  AjaxResult.success(jsonObject);
-//    }
-//*/
-//
-///*    @RequestMapping(value = "/IndexServlet", method = RequestMethod.POST)
-//    @ResponseBody
-//    public void IndexServlet(HttpServletResponse response, HttpServletRequest request) throws IOException {
-//        logger.info(JSON.toJSONString(request.getParameterMap()));
-//        String token = request.getParameter("token");
-//
-//        PrintWriter writer = response.getWriter();
-//        Scanner scanner = new Scanner(request.getInputStream()).useDelimiter("\\A");
-//        String body = scanner.hasNext() ? scanner.next() : "";
-//        JSONObject jsonObj = JSON.parseObject(body);
-//        logger.info(jsonObj.toJSONString());
-//        logger.info("===saveeditedfile:" + jsonObj.get("status"));
-//        String status = jsonObj != null ? jsonObj.get("status").toString() : "";
-//        if ("2".equals(status) || "6".equals(status)) {
-//            String type = request.getParameter("type");
-//            String downloadUri = (String) jsonObj.get("url");
-//            if("edit".equals(type)){ //修改报告
-//                String userFileId = request.getParameter("userFileId");
-//                TRcfile rcfile = tRcfileService.selectTRcfileById(Long.parseLong( userFileId ));
-//
-//                String pathForSave = RuoYiConfig.getProfile() + rcfile.getFileUrl().replace("/profile","");
-//                URL url = new URL(downloadUri);
-//                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
-//
-//                InputStream stream = connection.getInputStream();
-//
-//                File savedFile = new File(pathForSave);
-//                try (FileOutputStream out = new FileOutputStream(savedFile)) {
-//                    int read;
-//                    final byte[] bytes = new byte[1024];
-//                    while ((read = stream.read(bytes)) != -1) {
-//                        out.write(bytes, 0, read);
-//                    }
-//                    out.flush();
-//                }
-//                connection.disconnect();
-//                //更新文件时间
-//                rcfile.setUpdatedate(new Date());
-//                tRcfileService.updateTRcfile(rcfile);
-//            }
-//        }
-//        writer.write("{\"error\":" + "0" + "}");
-//    }*/
-//
-//    /**
-//     *
-//     * @param response
-//     */
-///*    @GetMapping("/download")
-//    public void download(UserFile userFile, HttpServletResponse response) {
-//        try {
-//            String newFilePath = userFile.getFilePath().replace("/profile","");
-//            // 需要转换的文件路径
-//           String pathName = RuoYiConfig.getProfile()+newFilePath;
-//            logger.info("pathName::::::::::" + pathName);
-//            String fileName = pathName.substring(pathName.lastIndexOf("/") + 1);
-//            logger.info("fileName::::::::::" + fileName);
-//            FileUtils.downloadInline(pathName, fileName,response);
-//        }catch (Exception e){
-//            e.printStackTrace();
-//        }
-//
-//    }*/
-//
+
+
+        FileModel fileModel = fileConfigurer.getFileModel(
+                DefaultFileWrapper
+                        .builder()
+                        .userFile(userFile)
+                        .type(type)
+                        .lang(locale.toLanguageTag())
+                        .action(action)
+                        .user(user)
+                        .actionData(previewUrl)
+                        .build()
+        );
+        fileModel.setToken(null);
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("file", fileModel);
+        jsonObject.put("docserviceApiUrl", docserviceSite + docserviceApiUrl);
+        jsonObject.put("reportName", userFile.getFileName());
+        return AjaxResult.success(jsonObject);
+    }
+
+/*    @PostMapping("/editFile")
+
+    public AjaxResult edit(HttpServletRequest request,  @RequestBody PreviewOfficeFileDTO previewOfficeFileDTO) {
+
+        //
+        SysUser sysUser = sysUserService.selectUserById(getUserId());
+        Action action = Action.edit;
+        Type type = Type.desktop;
+        Locale locale = new Locale("zh");
+
+        User user = new User(sysUser);
+        //文件
+        UserFile userFile = new UserFile();
+        TRcfile rcfile = tRcfileService.selectTRcfileById(Long.parseLong(previewOfficeFileDTO.getUserFileId()));
+        userFile.setFileId(rcfile.getId().toString());
+        userFile.setFilePath(rcfile.getFileUrl());
+        userFile.setFileName(rcfile.getFileName());
+        userFile.setExtendName("");
+        userFile.setUserFileId(rcfile.getId().toString());
+        userFile.setUploadTime(String.valueOf(rcfile.getUpdatedate().getTime()));
+
+        String previewUrl = "/onlyoffice/download?filePath=" + rcfile.getFileUrl();
+
+
+        FileModel fileModel = fileConfigurer.getFileModel(
+                DefaultFileWrapper
+                        .builder()
+                        .userFile(userFile)
+                        .type(type)
+                        .lang(locale.toLanguageTag())
+                        .action(action)
+                        .user(user)
+                        .actionData(previewUrl)
+                        .build()
+        );
+        fileModel.setToken(null);
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("file",fileModel);
+        jsonObject.put("docserviceApiUrl", docserviceSite + docserviceApiUrl);
+        jsonObject.put("reportName",userFile.getFileName());
+        return  AjaxResult.success(jsonObject);
+    }
+*/
+
+/*    @RequestMapping(value = "/IndexServlet", method = RequestMethod.POST)
+    @ResponseBody
+    public void IndexServlet(HttpServletResponse response, HttpServletRequest request) throws IOException {
+        logger.info(JSON.toJSONString(request.getParameterMap()));
+        String token = request.getParameter("token");
+
+        PrintWriter writer = response.getWriter();
+        Scanner scanner = new Scanner(request.getInputStream()).useDelimiter("\\A");
+        String body = scanner.hasNext() ? scanner.next() : "";
+        JSONObject jsonObj = JSON.parseObject(body);
+        logger.info(jsonObj.toJSONString());
+        logger.info("===saveeditedfile:" + jsonObj.get("status"));
+        String status = jsonObj != null ? jsonObj.get("status").toString() : "";
+        if ("2".equals(status) || "6".equals(status)) {
+            String type = request.getParameter("type");
+            String downloadUri = (String) jsonObj.get("url");
+            if("edit".equals(type)){ //修改报告
+                String userFileId = request.getParameter("userFileId");
+                TRcfile rcfile = tRcfileService.selectTRcfileById(Long.parseLong( userFileId ));
+
+                String pathForSave = RuoYiConfig.getProfile() + rcfile.getFileUrl().replace("/profile","");
+                URL url = new URL(downloadUri);
+                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
+
+                InputStream stream = connection.getInputStream();
+
+                File savedFile = new File(pathForSave);
+                try (FileOutputStream out = new FileOutputStream(savedFile)) {
+                    int read;
+                    final byte[] bytes = new byte[1024];
+                    while ((read = stream.read(bytes)) != -1) {
+                        out.write(bytes, 0, read);
+                    }
+                    out.flush();
+                }
+                connection.disconnect();
+                //更新文件时间
+                rcfile.setUpdatedate(new Date());
+                tRcfileService.updateTRcfile(rcfile);
+            }
+        }
+        writer.write("{\"error\":" + "0" + "}");
+    }*/
+
+    /**
+     *
+     * @param response
+     */
+/*    @GetMapping("/download")
+    public void download(UserFile userFile, HttpServletResponse response) {
+        try {
+            String newFilePath = userFile.getFilePath().replace("/profile","");
+            // 需要转换的文件路径
+           String pathName = RuoYiConfig.getProfile()+newFilePath;
+            logger.info("pathName::::::::::" + pathName);
+            String fileName = pathName.substring(pathName.lastIndexOf("/") + 1);
+            logger.info("fileName::::::::::" + fileName);
+            FileUtils.downloadInline(pathName, fileName,response);
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+
+    }*/
+
 
 }

+ 99 - 0
cpms-admin/src/main/java/com/cpms/project/plant/controller/TMtAgendaController.java

@@ -0,0 +1,99 @@
+package com.cpms.project.plant.controller;
+
+import com.cpms.common.annotation.Log;
+import com.cpms.common.core.controller.BaseController;
+import com.cpms.common.core.domain.AjaxResult;
+import com.cpms.common.core.page.TableDataInfo;
+import com.cpms.common.enums.BusinessType;
+import com.cpms.common.utils.poi.ExcelUtil;
+import com.cpms.project.plant.domain.TMtAgenda;
+import com.cpms.project.plant.service.ITMtAgendaService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 装置会议议程Controller
+ *
+ * @author ruoyi
+ * @date 2023-06-07
+ */
+@RestController
+@RequestMapping("/plant/agenda")
+public class TMtAgendaController extends BaseController {
+    @Autowired
+    private ITMtAgendaService tMtAgendaService;
+
+    /**
+     * 查询装置会议议程列表
+     */
+    @PreAuthorize("@ss.hasPermi('plant:agenda:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TMtAgenda tMtAgenda) {
+        startPage();
+        List<TMtAgenda> tMtAgendaList = tMtAgendaService.selectTMtAgendaList(tMtAgenda);
+        return getDataTable(tMtAgendaList);
+    }
+
+    @PreAuthorize("@ss.hasPermi('plant:agenda:list')")
+    @GetMapping("/list2")
+    public TableDataInfo list2(TMtAgenda tMtAgenda) {
+        startPage();
+        List<TMtAgenda> tMtAgendaList = tMtAgendaService.selectAgendaList(tMtAgenda);
+        return getDataTable(tMtAgendaList);
+    }
+
+    /**
+     * 导出装置会议议程列表
+     */
+    @PreAuthorize("@ss.hasPermi('plant:agenda:export')")
+    @Log(title = "装置会议议程", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TMtAgenda tMtAgenda) {
+        List<TMtAgenda> list = tMtAgendaService.selectTMtAgendaList(tMtAgenda);
+        ExcelUtil<TMtAgenda> util = new ExcelUtil<TMtAgenda>(TMtAgenda.class);
+        util.exportExcel( list, "装置会议议程数据");
+    }
+
+    /**
+     * 获取装置会议议程详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('plant:agenda:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id) {
+        return AjaxResult.success(tMtAgendaService.selectTMtAgendaById(id));
+    }
+
+    /**
+     * 新增装置会议议程
+     */
+    @PreAuthorize("@ss.hasPermi('plant:agenda:add')")
+    @Log(title = "装置会议议程", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TMtAgenda tMtAgenda) {
+        return toAjax(tMtAgendaService.insertTMtAgenda(tMtAgenda));
+    }
+
+    /**
+     * 修改装置会议议程
+     */
+    @PreAuthorize("@ss.hasPermi('plant:agenda:edit')")
+    @Log(title = "装置会议议程", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TMtAgenda tMtAgenda) {
+        return toAjax(tMtAgendaService.updateTMtAgenda(tMtAgenda));
+    }
+
+    /**
+     * 删除装置会议议程
+     */
+    @PreAuthorize("@ss.hasPermi('plant:agenda:remove')")
+    @Log(title = "装置会议议程", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids) {
+        return toAjax(tMtAgendaService.deleteTMtAgendaByIds(ids));
+    }
+}

+ 106 - 0
cpms-admin/src/main/java/com/cpms/project/plant/controller/TMtContentController.java

@@ -0,0 +1,106 @@
+package com.cpms.project.plant.controller;
+
+import com.cpms.common.annotation.Log;
+import com.cpms.common.core.controller.BaseController;
+import com.cpms.common.core.domain.AjaxResult;
+import com.cpms.common.core.page.TableDataInfo;
+import com.cpms.common.enums.BusinessType;
+import com.cpms.common.utils.poi.ExcelUtil;
+import com.cpms.project.plant.service.ITMtContentService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 装置空白会议Controller
+ *
+ * @author ruoyi
+ * @date 2023-08-03
+ */
+@RestController
+@RequestMapping("/plant/content")
+public class TMtContentController extends BaseController
+{
+    @Autowired
+    private ITMtContentService tMtContentService;
+
+    /**
+     * 查询装置空白会议列表
+     */
+    @PreAuthorize("@ss.hasPermi('plant:content:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(com.cpms.project.plant.domain.TMtContent tMtContent)
+    {
+        startPage();
+        List<com.cpms.project.plant.domain.TMtContent> list = tMtContentService.selectTMtContentList(tMtContent);
+        return getDataTable(list);
+    }
+
+    @PreAuthorize("@ss.hasPermi('plant:content:list')")
+    @GetMapping("/list2")
+    public TableDataInfo list2(com.cpms.project.plant.domain.TMtContent tMtContent)
+    {
+        startPage();
+        List<com.cpms.project.plant.domain.TMtContent> list = tMtContentService.selectContentList(tMtContent);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出装置空白会议列表
+     */
+    @PreAuthorize("@ss.hasPermi('plant:content:export')")
+    @Log(title = "装置空白会议", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, com.cpms.project.plant.domain.TMtContent tMtContent)
+    {
+        List<com.cpms.project.plant.domain.TMtContent> list = tMtContentService.selectTMtContentList(tMtContent);
+        ExcelUtil<com.cpms.project.plant.domain.TMtContent> util = new ExcelUtil<com.cpms.project.plant.domain.TMtContent>(com.cpms.project.plant.domain.TMtContent.class);
+        util.exportExcel(list, "装置空白会议数据");
+    }
+
+    /**
+     * 获取装置空白会议详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('plant:content:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(tMtContentService.selectTMtContentById(id));
+    }
+
+    /**
+     * 新增装置空白会议
+     */
+    @PreAuthorize("@ss.hasPermi('plant:content:add')")
+    @Log(title = "装置空白会议", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody com.cpms.project.plant.domain.TMtContent tMtContent)
+    {
+        return toAjax(tMtContentService.insertTMtContent(tMtContent));
+    }
+
+    /**
+     * 修改装置空白会议
+     */
+    @PreAuthorize("@ss.hasPermi('plant:content:edit')")
+    @Log(title = "装置空白会议", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody com.cpms.project.plant.domain.TMtContent tMtContent)
+    {
+        return toAjax(tMtContentService.updateTMtContent(tMtContent));
+    }
+
+    /**
+     * 删除装置空白会议
+     */
+    @PreAuthorize("@ss.hasPermi('plant:content:remove')")
+    @Log(title = "装置空白会议", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tMtContentService.deleteTMtContentByIds(ids));
+    }
+}

+ 399 - 0
cpms-admin/src/main/java/com/cpms/project/plant/controller/TMtMeetingController.java

@@ -0,0 +1,399 @@
+package com.cpms.project.plant.controller;
+
+import com.cpms.common.annotation.Log;
+import com.cpms.common.config.RuoYiConfig;
+import com.cpms.common.core.controller.BaseController;
+import com.cpms.common.core.domain.AjaxResult;
+import com.cpms.common.core.page.TableDataInfo;
+import com.cpms.common.enums.BusinessType;
+import com.cpms.common.utils.DateUtils;
+import com.cpms.common.utils.StringUtils;
+import com.cpms.common.utils.file.FileUploadUtils;
+import com.cpms.common.utils.poi.ExcelUtil;
+import com.cpms.project.file.domain.TFile;
+import com.cpms.project.file.service.ITFileService;
+import com.cpms.project.plant.domain.TMtAgenda;
+import com.cpms.project.plant.domain.TMtContent;
+import com.cpms.project.plant.domain.TMtPerson;
+import com.cpms.project.plant.service.ITMtAgendaService;
+import com.cpms.project.plant.service.ITMtContentService;
+import com.cpms.project.plant.service.ITMtMeetingService;
+import com.cpms.project.plant.service.ITMtPersonService;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.data.RowRenderData;
+import com.deepoove.poi.data.Rows;
+import com.deepoove.poi.data.Tables;
+import com.deepoove.poi.data.Texts;
+import io.jsonwebtoken.lang.Assert;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.io.*;
+import java.util.*;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+
+/**
+ * 装置会议Controller
+ *
+ * @author ruoyi
+ * @date 2020-12-30
+ */
+@RestController
+@RequestMapping("/plant/meeting")
+public class TMtMeetingController extends BaseController {
+    @Autowired
+    private ITMtMeetingService tMtMeetingService;
+    @Autowired
+    private ITMtAgendaService tMtAgendaService;
+    @Autowired
+    private ITMtPersonService tMtPersonService;
+    @Autowired
+    private ITMtContentService itMtContentService;
+    @Autowired
+    private ITFileService tFileService;
+
+    /**
+     * 查询装置会议列表
+     */
+    @PreAuthorize("@ss.hasPermi('plant:meeting:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(com.cpms.project.plant.domain.TMtMeeting tMtMeeting) {
+        startPage();
+        List<com.cpms.project.plant.domain.TMtMeeting> list = tMtMeetingService.selectTMtMeetingList(tMtMeeting);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出装置会议列表
+     */
+    @PreAuthorize("@ss.hasPermi('plant:meeting:export')")
+    @Log(title = "装置会议", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(com.cpms.project.plant.domain.TMtMeeting tMtMeeting) {
+        List<com.cpms.project.plant.domain.TMtMeeting> list = tMtMeetingService.selectTMtMeetingList(tMtMeeting);
+        ExcelUtil<com.cpms.project.plant.domain.TMtMeeting> util = new ExcelUtil<com.cpms.project.plant.domain.TMtMeeting>(com.cpms.project.plant.domain.TMtMeeting.class);
+        return util.exportExcel(list, "meeting");
+    }
+
+    /**
+     * 获取装置会议详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('plant:meeting:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id) {
+        return AjaxResult.success(tMtMeetingService.selectTMtMeetingById(id));
+    }
+
+    /**
+     * 新增装置会议
+     */
+    @PreAuthorize("@ss.hasPermi('plant:meeting:add')")
+    @Log(title = "装置会议", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody com.cpms.project.plant.domain.TMtMeeting tMtMeeting) {
+        return toAjax(tMtMeetingService.insertTMtMeeting(tMtMeeting));
+    }
+
+    /**
+     * 修改装置会议
+     */
+    @PreAuthorize("@ss.hasPermi('plant:meeting:edit')")
+    @Log(title = "装置会议", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody com.cpms.project.plant.domain.TMtMeeting tMtMeeting) {
+        return toAjax(tMtMeetingService.updateTMtMeeting(tMtMeeting));
+    }
+
+    /**
+     * 删除装置会议
+     */
+    @PreAuthorize("@ss.hasPermi('plant:meeting:remove')")
+    @Log(title = "装置会议", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids) {
+        return toAjax(tMtMeetingService.deleteTMtMeetingByIds(ids));
+    }
+
+    @GetMapping("/wordView/{id}")
+    public AjaxResult wordView(@PathVariable Long id) throws IOException {
+        //根据ID查询并生成
+        com.cpms.project.plant.domain.TMtMeeting tMtMeeting = tMtMeetingService.selectTMtMeetingById(id);
+        //根据ID查询并生成
+        String url = PreView(tMtMeeting);
+        List<String> list = new ArrayList<>();
+        list.add(RuoYiConfig.getFilePath(url.substring(8)));
+        if (tMtMeeting.getMtType() == 1) {
+
+        } else if (tMtMeeting.getMtType() == 2) {
+            com.cpms.project.plant.domain.TMtContent tMtContent = new com.cpms.project.plant.domain.TMtContent();
+            tMtContent.setMeetingId(String.valueOf(id));
+            for (com.cpms.project.plant.domain.TMtContent mtContent : itMtContentService.selectTMtContentList(tMtContent)) {
+                TFile tFile = new TFile();
+                tFile.setLinkName("meetContent");
+                tFile.setLinkId(mtContent.getId());
+                for (TFile file : tFileService.selectTFileList(tFile)) {
+                    list.add(RuoYiConfig.getFilePath(file.getFileUrl().substring(8)));                  ;
+                }
+            }
+        } else {
+        }
+        String zipName = "/upload/"+ UUID.randomUUID()+".zip";
+        FileOutputStream fos = new FileOutputStream(RuoYiConfig.getFilePath(zipName));
+        ZipOutputStream zos = new ZipOutputStream(fos);
+        for (String  path: list) {
+            // 创建一个输入流,读取文件数据
+            FileInputStream fis = new FileInputStream(path);
+            // 创建一个zip条目,指定文件名
+            ZipEntry entry = new ZipEntry(path.substring(path.lastIndexOf("/")));
+            // 将条目添加到zip文件中
+            zos.putNextEntry(entry);
+            // 将文件数据写入zip文件
+            byte[] buffer = new byte[1024];
+            int length;
+            while ((length = fis.read(buffer)) > 0) {
+                zos.write(buffer, 0, length);
+            }
+            // 关闭输入流
+            fis.close();
+            // 完成当前文件的压缩
+            zos.closeEntry();
+        }
+
+        // 关闭输出流
+        zos.close();
+        return AjaxResult.success("/profile"+zipName);
+    }
+    /**
+     * @param tMtMeeting 生成文件名
+     * @return
+     * @throws IOException
+     */
+    public String PreView(com.cpms.project.plant.domain.TMtMeeting tMtMeeting) throws IOException {
+        return this.createMeetingWord(tMtMeeting);
+    }
+
+    public String createMeetingWord(com.cpms.project.plant.domain.TMtMeeting tMtMeeting) throws IOException {
+        //生成word
+        // 模板路径
+        String templatePath;
+        // 生成word的路径
+        String fileDir = RuoYiConfig.getProfile() + "/" + "meeting";
+        // 生成word的文件名称
+        String fileName = tMtMeeting.getMeetingNo() + "号会议记录.docx";
+        //渲染文本
+        Map<String, Object> params = getWordData(tMtMeeting);
+        if (tMtMeeting.getMtType() == 1) {
+            templatePath = "static/word/meeting.docx";
+        } else if (tMtMeeting.getMtType() == 2) {
+            templatePath = "static/word/blankMeeting.docx";
+        } else {
+            return "";
+        }
+        return createWord(templatePath, fileDir, fileName, params, String.valueOf(tMtMeeting.getId()));
+    }
+
+    public Map<String, Object> getWordData(com.cpms.project.plant.domain.TMtMeeting tMtMeeting) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("mtDate", Texts.of(DateUtils.parseDateToStr("yyyyMMdd", tMtMeeting.getMeetingDate())).fontSize(10).bold().create());
+        params.put("mtVenue", Texts.of(String.valueOf(tMtMeeting.getVenue())).fontSize(10).bold().create());
+        params.put("subject", Texts.of(tMtMeeting.getSubject()).fontSize(10).bold().create());
+        params.put("mtNo", Texts.of(tMtMeeting.getMeetingNo()).fontSize(10).bold().create());
+        params.put("mtRecorder", Texts.of(tMtMeeting.getRecorder()).fontSize(10).bold().create());
+        params.put("mtPresided", Texts.of(tMtMeeting.getPresided()).fontSize(10).bold().create());
+        params.put("participants", replaceTextInParagraph("participants", String.valueOf(tMtMeeting.getId())));
+        if (tMtMeeting.getMtType()==1) {
+            params.put("table1", replaceTextInParagraph("table1", String.valueOf(tMtMeeting.getId())));
+            params.put("table2", replaceTextInParagraph("table2", String.valueOf(tMtMeeting.getId())));
+            params.put("table3", replaceTextInParagraph("table3", String.valueOf(tMtMeeting.getId())));
+            params.put("table4", replaceTextInParagraph("table4", String.valueOf(tMtMeeting.getId())));
+            params.put("table5", replaceTextInParagraph("table5", String.valueOf(tMtMeeting.getId())));
+            params.put("table6", replaceTextInParagraph("table6", String.valueOf(tMtMeeting.getId())));
+            params.put("table7", replaceTextInParagraph("table7", String.valueOf(tMtMeeting.getId())));
+            params.put("table8", replaceTextInParagraph("table8", String.valueOf(tMtMeeting.getId())));
+            params.put("table9", replaceTextInParagraph("table9", String.valueOf(tMtMeeting.getId())));
+            params.put("table10", replaceTextInParagraph("table10", String.valueOf(tMtMeeting.getId())));
+            params.put("table11", replaceTextInParagraph("table11", String.valueOf(tMtMeeting.getId())));
+            params.put("table12", replaceTextInParagraph("table12", String.valueOf(tMtMeeting.getId())));
+            params.put("table13", replaceTextInParagraph("table13", String.valueOf(tMtMeeting.getId())));
+            params.put("table14", replaceTextInParagraph("table14", String.valueOf(tMtMeeting.getId())));
+        } else if (tMtMeeting.getMtType()==2) {
+            params.put("content", replaceTextInParagraph(String.valueOf(tMtMeeting.getId())));
+        }
+        return params;
+    }
+
+    public String createWord(String templatePath, String fileDir, String fileName, Map<String, Object> paramMap, String meetingId) throws IOException {
+        Assert.notNull(templatePath, "word模板文件路径不能为空");
+        Assert.notNull(fileDir, "生成的文件存放地址不能为空");
+        Assert.notNull(fileName, "生成的文件名不能为空");
+        File dir = new File(fileDir);
+        if (!dir.exists()) {
+            logger.info("目录不存在,创建文件夹{}!", fileDir);
+            dir.mkdirs();
+        }
+        fileName = fileName.replaceAll("/", "_"); //替换文件中敏感字段
+        logger.info("目录文件{}!", fileName);
+        String filePath = fileDir + "/" + fileName;
+        logger.info("目录{}!", filePath);
+        // 读取模板渲染参数
+        InputStream is = getClass().getClassLoader().getResourceAsStream(templatePath);
+        XWPFTemplate template = null;
+        if (is != null) {
+            template = XWPFTemplate.compile(is).render(paramMap);
+        }
+        try {
+            // 将模板参数写入路径
+            if (template != null) {
+                template.writeToFile(filePath);
+                template.close();
+            }
+        } catch (Exception e) {
+            logger.error("生成word异常{}", e.getMessage());
+            e.printStackTrace();
+        }
+        return FileUploadUtils.getPathFileName(RuoYiConfig.getFilePath("/" + "meeting"), fileName);
+    }
+
+    private Object replaceTextInParagraph(String placeholder, String meetingId) {
+        String title = "";
+        String agendaType = "";
+        TMtAgenda tMtAgenda = new TMtAgenda();
+        tMtAgenda.setMeetingId(String.valueOf(meetingId));
+        List<TMtAgenda> list;
+        switch (placeholder) {
+            case "participants": {
+                TMtPerson tMtPerson = new TMtPerson();
+                tMtPerson.setMeetingId(Long.valueOf(meetingId));
+                List<TMtPerson> tMtPersonList = tMtPersonService.selectTMtPersonList(tMtPerson);
+                List<RowRenderData> rowDatas = new ArrayList<>();
+                List<List<String>> names = new ArrayList<>();
+                List<String> nameList = new ArrayList<>();
+                for (int i = 0; i < tMtPersonList.size(); i++) {
+                    TMtPerson person = tMtPersonList.get(i);
+                    nameList.add(person.getName());
+                    if (tMtPersonList.size() - 1 == i && nameList.size() != 2) {
+                        nameList.add("");
+                        names.add(nameList);
+                        break;
+                    }
+                    if (nameList.size() == 2) {
+                        names.add(nameList);
+                        nameList = new ArrayList<>();
+                    }
+                }
+                for (List<String> item : names) {
+                    rowDatas.add(Rows.of(item.toArray(new String[0])).create());
+                }
+                return Tables.of(rowDatas.toArray(new RowRenderData[0])).width(16.98, new double[]{16.98 * 0.55, 16.98 * 0.55}).create();
+            }
+            case "table1": {
+                title = "内容";
+                agendaType = "1";
+                tMtAgenda.setAgendaType(agendaType);
+                list = tMtAgendaService.selectTMtAgendaList(tMtAgenda);
+                list.add(new TMtAgenda());
+                ArrayList<RowRenderData> rowDatas = new ArrayList<>();
+                // 表头
+                RowRenderData tableHead = Rows.of(title, "类型", "跟踪人", "回顾/截止时间", "状态").textFontFamily("微软雅黑").textFontSize(8).textBold().create();
+                rowDatas.add(tableHead);
+                for (TMtAgenda agenda : list) {
+                    rowDatas.add(Rows.of(agenda.getAgendaContent(), agenda.getWorkType(), agenda.getResponsible(), DateUtils.dateTime(agenda.getDeadlineTime()), agenda.getStatus()).textFontSize(8).create());
+                }
+                return Tables.of(rowDatas.toArray(new RowRenderData[0])).width(16.98, new double[]{16.98 * 0.6, 16.98 * 0.1, 16.98 * 0.1, 16.98 * 0.2, 16.98 * 0.1}).create();
+            }
+            case "table2":
+                title = "√EHS 信息分享(作业票,安全绩效,政府/公司检查信息等)";
+                agendaType = "2";
+                break;
+            case "table3":
+                title = "√质量议题";
+                agendaType = "3";
+                break;
+            case "table4":
+                title = "√行动项追踪系统状态";
+                agendaType = "4";
+                break;
+            case "table14":
+                title = "√生产计划";
+                agendaType = "14";
+                break;
+            case "table5": {
+                title = "√装置运行状态,负荷等";
+                agendaType = "5";
+                tMtAgenda.setAgendaType(agendaType);
+                list = tMtAgendaService.selectTMtAgendaList(tMtAgenda);
+                list.add(new TMtAgenda());
+                ArrayList<RowRenderData> rowDatas = new ArrayList<>();
+                // 表头
+                RowRenderData tableHead = Rows.of(title, "", "", "", "").textFontFamily("微软雅黑").textFontSize(8).textBold().create();
+                rowDatas.add(tableHead);
+                for (TMtAgenda agenda : list) {
+                    if (StringUtils.isEmpty(agenda.getPlanType()))
+                        agenda.setPlanType("");
+                    if (StringUtils.isEmpty(agenda.getAgendaContent()))
+                        agenda.setAgendaContent("");
+                    rowDatas.add(Rows.of(agenda.getPlanType() + agenda.getAgendaContent(), agenda.getWorkType(), agenda.getResponsible(), DateUtils.dateTime(agenda.getDeadlineTime()), agenda.getStatus()).textFontSize(8).create());
+                }
+                return Tables.of(rowDatas.toArray(new RowRenderData[0])).width(16.98, new double[]{16.98 * 0.6, 16.98 * 0.1, 16.98 * 0.1, 16.98 * 0.2, 16.98 * 0.1}).create();
+            }
+            case "table6":
+                title = "√OpEx/KPIs 议题";
+                agendaType = "6";
+                break;
+            case "table7":
+                title = "√MOC议题";
+                agendaType = "7";
+                break;
+            case "table8":
+                title = "√CapEx/检修议题";
+                agendaType = "8";
+                break;
+            case "table9":
+                title = "√文档完整性";
+                agendaType = "9";
+                break;
+            case "table10":
+                title = "√其他/5S";
+                agendaType = "10";
+                break;
+            case "table11":
+                title = "√其他/LEAN";
+                agendaType = "11";
+                break;
+            case "table12":
+                title = "√静设备近期PM/检维修计划";
+                agendaType = "12";
+                break;
+            case "table13":
+                title = "√电气仪表近期PM/检维修计划";
+                agendaType = "13";
+                break;
+        }
+        tMtAgenda.setAgendaType(agendaType);
+        list = tMtAgendaService.selectTMtAgendaList(tMtAgenda);
+        list.add(new TMtAgenda());
+        ArrayList<RowRenderData> rowDatas = new ArrayList<>();
+        // 表头
+        RowRenderData tableHead = Rows.of(title, "", "", "", "").textFontFamily("微软雅黑").textFontSize(8).textBold().create();
+        rowDatas.add(tableHead);
+        for (TMtAgenda agenda : list) {
+            rowDatas.add(Rows.of(agenda.getAgendaContent(), agenda.getWorkType(), agenda.getResponsible(), DateUtils.dateTime(agenda.getDeadlineTime()), agenda.getStatus()).textFontSize(8).create());
+        }
+        return Tables.of(rowDatas.toArray(new RowRenderData[0])).width(16.98, new double[]{16.98 * 0.6, 16.98 * 0.1, 16.98 * 0.1, 16.98 * 0.2, 16.98 * 0.1}).create();
+    }
+    private Object replaceTextInParagraph(String meetingId) {
+        TMtContent tMtContent = new TMtContent();
+        tMtContent.setMeetingId(String.valueOf(meetingId));
+        List<TMtContent> list = itMtContentService.selectTMtContentList(tMtContent);
+        ArrayList<RowRenderData> rowDatas = new ArrayList<>();
+        for (TMtContent agenda : list) {// 表头
+            RowRenderData tableHead = Rows.of("内容", "类型", "跟踪人", "回顾/截止时间", "状态").textFontFamily("微软雅黑").textFontSize(8).textBold().create();
+            rowDatas.add(tableHead);
+            rowDatas.add(Rows.of(agenda.getAgendaContent(), agenda.getWorkType(), agenda.getResponsible(), DateUtils.dateTime(agenda.getDeadlineTime()), agenda.getStatus()).textFontSize(8).create());
+        }
+        return Tables.of(rowDatas.toArray(new RowRenderData[0])).width(16.98, new double[]{16.98 * 0.6, 16.98 * 0.1, 16.98 * 0.1, 16.98 * 0.2, 16.98 * 0.1}).create();
+    }
+
+}

+ 109 - 0
cpms-admin/src/main/java/com/cpms/project/plant/controller/TMtPersonController.java

@@ -0,0 +1,109 @@
+package com.cpms.project.plant.controller;
+
+import com.cpms.common.annotation.Log;
+import com.cpms.common.core.controller.BaseController;
+import com.cpms.common.core.domain.AjaxResult;
+import com.cpms.common.core.page.TableDataInfo;
+import com.cpms.common.enums.BusinessType;
+import com.cpms.common.utils.poi.ExcelUtil;
+import com.cpms.project.plant.domain.TMtPerson;
+import com.cpms.project.plant.mapper.TStaffmgrMapper;
+import com.cpms.project.plant.service.ITMtPersonService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 会议人员Controller
+ *
+ * @author ruoyi
+ * @date 2021-01-14
+ */
+@RestController
+@RequestMapping("/plant/person")
+public class TMtPersonController extends BaseController
+{
+    @Autowired
+    private ITMtPersonService tMtPersonService;
+    @Resource
+    private TStaffmgrMapper tStaffmgrMapper;
+    /**
+     * 查询会议人员列表
+     */
+    @PreAuthorize("@ss.hasPermi('plant:keymaintenance:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TMtPerson tMtPerson)
+    {
+        startPage();
+        List<TMtPerson> list = tMtPersonService.selectTMtPersonList(tMtPerson);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出会议人员列表
+     */
+    @PreAuthorize("@ss.hasPermi('plant:keymaintenance:export')")
+    @Log(title = "会议人员", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(TMtPerson tMtPerson)
+    {
+        List<TMtPerson> list = tMtPersonService.selectTMtPersonList(tMtPerson);
+        ExcelUtil<TMtPerson> util = new ExcelUtil<TMtPerson>(TMtPerson.class);
+        return util.exportExcel(list, "person");
+    }
+
+    /**
+     * 获取会议人员详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('plant:keymaintenance:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(tMtPersonService.selectTMtPersonById(id));
+    }
+
+    /**
+     * 新增会议人员
+     */
+    @PreAuthorize("@ss.hasPermi('plant:keymaintenance:add')")
+    @Log(title = "会议人员", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TMtPerson tMtPerson)
+    {
+//        TStaffmgr t = tStaffmgrMapper.selectTStaffmgrByStaffId(tMtPerson.getStaffid());
+//        tMtPerson.setActualpost(t.getActualpost());
+//        tMtPerson.setDeptId(t.getDeptId());
+//        tMtPerson.setName(t.getName());
+//        tMtPerson.setPlantCode(t.getPlantCode());
+//        tMtPerson.setUnit(t.getUnit());
+//        tMtPerson.setContact(t.getContact());
+//        tMtPerson.setTeam(t.getTeam());
+//        tMtPerson.setSex(t.getSex());
+        return toAjax(tMtPersonService.insertTMtPerson(tMtPerson));
+    }
+
+    /**
+     * 修改会议人员
+     */
+    @PreAuthorize("@ss.hasPermi('plant:keymaintenance:edit')")
+    @Log(title = "会议人员", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TMtPerson tMtPerson)
+    {
+        return toAjax(tMtPersonService.updateTMtPerson(tMtPerson));
+    }
+
+    /**
+     * 删除会议人员
+     */
+    @PreAuthorize("@ss.hasPermi('plant:keymaintenance:remove')")
+    @Log(title = "会议人员", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tMtPersonService.deleteTMtPersonByIds(ids));
+    }
+}

+ 328 - 0
cpms-admin/src/main/java/com/cpms/project/plant/domain/TMtAgenda.java

@@ -0,0 +1,328 @@
+package com.cpms.project.plant.domain;
+
+import java.util.Date;
+
+import com.cpms.common.annotation.Excel;
+import com.cpms.common.core.domain.BaseEntity;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 装置会议议程对象 t_mt_agenda
+ *
+ * @author ruoyi
+ * @date 2023-06-07
+ */
+public class TMtAgenda extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * id
+     */
+    private Long id;
+
+    /**
+     * 会议id
+     */
+    @Excel(name = "会议id")
+    private String meetingId;
+
+    /**
+     * 议程类型
+     */
+    @Excel(name = "议程类型")
+    private String agendaType;
+
+    /**
+     * 议程内容
+     */
+    @Excel(name = "议程内容")
+    private String agendaContent;
+
+    /**
+     * 工作类型
+     */
+    @Excel(name = "工作类型")
+    private String workType;
+
+    /**
+     * 计划类型
+     */
+    @Excel(name = "计划类型")
+    private String planType;
+
+    /**
+     * 责任人
+     */
+    @Excel(name = "跟踪人")
+    private String responsible;
+
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "回顾/截止时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date deadlineTime;
+
+    /**
+     * 状态
+     */
+    @Excel(name = "状态")
+    private String status;
+
+    /**
+     * 删除
+     */
+    private Integer delFlag;
+
+    /**
+     * 创建人
+     */
+    @Excel(name = "创建人")
+    private String createrCode;
+
+    /**
+     * 创建时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date createdate;
+
+    /**
+     * 更新人
+     */
+    @Excel(name = "更新人")
+    private String updaterCode;
+
+    /**
+     * 更新日期
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "更新日期", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date updatedate;
+
+    /**
+     * 所属部门
+     */
+    @Excel(name = "所属部门")
+    private Long deptId;
+
+    /**
+     * 备注
+     */
+    @Excel(name = "备注")
+    private String remarks;
+
+    /**
+     * 记录人
+     */
+    @Excel(name = "记录人")
+    private String presided;
+
+    private Long isHis;
+
+    private Long flag;
+
+
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date meetingDate;
+
+    private String meetingNo;
+    private String subject;
+
+    public Date getMeetingDate() {
+        return meetingDate;
+    }
+
+    public void setMeetingDate(Date meetingDate) {
+        this.meetingDate = meetingDate;
+    }
+
+    public String getMeetingNo() {
+        return meetingNo;
+    }
+
+    public void setMeetingNo(String meetingNo) {
+        this.meetingNo = meetingNo;
+    }
+
+    public String getSubject() {
+        return subject;
+    }
+
+    public void setSubject(String subject) {
+        this.subject = subject;
+    }
+
+    public Long getFlag() {
+        return flag;
+    }
+
+    public void setFlag(Long flag) {
+        this.flag = flag;
+    }
+
+    public Date getDeadlineTime() {
+        return deadlineTime;
+    }
+
+    public void setDeadlineTime(Date deadlineTime) {
+        this.deadlineTime = deadlineTime;
+    }
+
+    public Long getIsHis() {
+        return isHis;
+    }
+
+    public void setIsHis(Long isHis) {
+        this.isHis = isHis;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setMeetingId(String meetingId) {
+        this.meetingId = meetingId;
+    }
+
+    public String getMeetingId() {
+        return meetingId;
+    }
+
+    public void setAgendaType(String agendaType) {
+        this.agendaType = agendaType;
+    }
+
+    public String getAgendaType() {
+        return agendaType;
+    }
+
+    public void setAgendaContent(String agendaContent) {
+        this.agendaContent = agendaContent;
+    }
+
+    public String getAgendaContent() {
+        return agendaContent;
+    }
+
+    public void setWorkType(String workType) {
+        this.workType = workType;
+    }
+
+    public String getWorkType() {
+        return workType;
+    }
+
+    public void setPlanType(String planType) {
+        this.planType = planType;
+    }
+
+    public String getPlanType() {
+        return planType;
+    }
+
+    public void setResponsible(String responsible) {
+        this.responsible = responsible;
+    }
+
+    public String getResponsible() {
+        return responsible;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setDelFlag(Integer delFlag) {
+        this.delFlag = delFlag;
+    }
+
+    public Integer getDelFlag() {
+        return delFlag;
+    }
+
+    public void setCreaterCode(String createrCode) {
+        this.createrCode = createrCode;
+    }
+
+    public String getCreaterCode() {
+        return createrCode;
+    }
+
+    public void setCreatedate(Date createdate) {
+        this.createdate = createdate;
+    }
+
+    public Date getCreatedate() {
+        return createdate;
+    }
+
+    public void setUpdaterCode(String updaterCode) {
+        this.updaterCode = updaterCode;
+    }
+
+    public String getUpdaterCode() {
+        return updaterCode;
+    }
+
+    public void setUpdatedate(Date updatedate) {
+        this.updatedate = updatedate;
+    }
+
+    public Date getUpdatedate() {
+        return updatedate;
+    }
+
+    public void setDeptId(Long deptId) {
+        this.deptId = deptId;
+    }
+
+    public Long getDeptId() {
+        return deptId;
+    }
+
+    public void setRemarks(String remarks) {
+        this.remarks = remarks;
+    }
+
+    public String getRemarks() {
+        return remarks;
+    }
+
+    public void setPresided(String presided) {
+        this.presided = presided;
+    }
+
+    public String getPresided() {
+        return presided;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+                .append("id", getId())
+                .append("meetingId", getMeetingId())
+                .append("agendaType", getAgendaType())
+                .append("agendaContent", getAgendaContent())
+                .append("workType", getWorkType())
+                .append("planType", getPlanType())
+                .append("responsible", getResponsible())
+                .append("status", getStatus())
+                .append("delFlag", getDelFlag())
+                .append("createrCode", getCreaterCode())
+                .append("createdate", getCreatedate())
+                .append("updaterCode", getUpdaterCode())
+                .append("updatedate", getUpdatedate())
+                .append("deptId", getDeptId())
+                .append("remarks", getRemarks())
+                .append("presided", getPresided())
+                .toString();
+    }
+}

+ 294 - 0
cpms-admin/src/main/java/com/cpms/project/plant/domain/TMtContent.java

@@ -0,0 +1,294 @@
+package com.cpms.project.plant.domain;
+
+import java.util.Date;
+
+import com.cpms.common.annotation.Excel;
+import com.cpms.common.core.domain.BaseEntity;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+/**
+ * 装置空白会议对象 t_mt_content
+ *
+ * @author ruoyi
+ * @date 2023-08-03
+ */
+public class TMtContent extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** id */
+    private Long id;
+
+    /** 会议id */
+    @Excel(name = "会议id")
+    private String meetingId;
+
+    /** 议程内容 */
+    @Excel(name = "议程内容")
+    private String agendaContent;
+
+    /** 工作类型 */
+    @Excel(name = "工作类型")
+    private String workType;
+
+    /** 责任人 */
+    @Excel(name = "责任人")
+    private String responsible;
+
+    /** 状态 */
+    @Excel(name = "状态")
+    private String status;
+
+    /** 删除 */
+    private Integer delFlag;
+
+    /** 创建人 */
+    @Excel(name = "创建人")
+    private String createrCode;
+
+    /** 创建时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date createdate;
+
+    /** 更新人 */
+    @Excel(name = "更新人")
+    private String updaterCode;
+
+    /** 更新日期 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "更新日期", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date updatedate;
+
+    /** 所属部门 */
+    @Excel(name = "所属部门")
+    private Long deptId;
+
+    /** 备注 */
+    @Excel(name = "备注")
+    private String remarks;
+
+    /** 记录人 */
+    @Excel(name = "记录人")
+    private String presided;
+
+    /** 是否历史会议 */
+    @Excel(name = "是否历史会议")
+    private Integer isHis;
+
+    /** 回顾/截止时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "回顾/截止时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date deadlineTime;
+
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date meetingDate;
+
+    /** 会议标题 */
+    @Excel(name = "会议标题")
+    private String meetingTitle;
+    private String meetingNo;
+    private String subject;
+
+    public Date getMeetingDate() {
+        return meetingDate;
+    }
+
+    public void setMeetingDate(Date meetingDate) {
+        this.meetingDate = meetingDate;
+    }
+
+    public String getMeetingNo() {
+        return meetingNo;
+    }
+
+    public void setMeetingNo(String meetingNo) {
+        this.meetingNo = meetingNo;
+    }
+
+    public String getSubject() {
+        return subject;
+    }
+
+    public void setSubject(String subject) {
+        this.subject = subject;
+    }
+
+    public void setId(Long id)
+    {
+        this.id = id;
+    }
+
+    public Long getId()
+    {
+        return id;
+    }
+    public void setMeetingId(String meetingId)
+    {
+        this.meetingId = meetingId;
+    }
+
+    public String getMeetingId()
+    {
+        return meetingId;
+    }
+    public void setAgendaContent(String agendaContent)
+    {
+        this.agendaContent = agendaContent;
+    }
+
+    public String getAgendaContent()
+    {
+        return agendaContent;
+    }
+    public void setWorkType(String workType)
+    {
+        this.workType = workType;
+    }
+
+    public String getWorkType()
+    {
+        return workType;
+    }
+    public void setResponsible(String responsible)
+    {
+        this.responsible = responsible;
+    }
+
+    public String getResponsible()
+    {
+        return responsible;
+    }
+    public void setStatus(String status)
+    {
+        this.status = status;
+    }
+
+    public String getStatus()
+    {
+        return status;
+    }
+    public void setDelFlag(Integer delFlag)
+    {
+        this.delFlag = delFlag;
+    }
+
+    public Integer getDelFlag()
+    {
+        return delFlag;
+    }
+    public void setCreaterCode(String createrCode)
+    {
+        this.createrCode = createrCode;
+    }
+
+    public String getCreaterCode()
+    {
+        return createrCode;
+    }
+    public void setCreatedate(Date createdate)
+    {
+        this.createdate = createdate;
+    }
+
+    public Date getCreatedate()
+    {
+        return createdate;
+    }
+    public void setUpdaterCode(String updaterCode)
+    {
+        this.updaterCode = updaterCode;
+    }
+
+    public String getUpdaterCode()
+    {
+        return updaterCode;
+    }
+    public void setUpdatedate(Date updatedate)
+    {
+        this.updatedate = updatedate;
+    }
+
+    public Date getUpdatedate()
+    {
+        return updatedate;
+    }
+    public void setDeptId(Long deptId)
+    {
+        this.deptId = deptId;
+    }
+
+    public Long getDeptId()
+    {
+        return deptId;
+    }
+    public void setRemarks(String remarks)
+    {
+        this.remarks = remarks;
+    }
+
+    public String getRemarks()
+    {
+        return remarks;
+    }
+    public void setPresided(String presided)
+    {
+        this.presided = presided;
+    }
+
+    public String getPresided()
+    {
+        return presided;
+    }
+    public void setIsHis(Integer isHis)
+    {
+        this.isHis = isHis;
+    }
+
+    public Integer getIsHis()
+    {
+        return isHis;
+    }
+    public void setDeadlineTime(Date deadlineTime)
+    {
+        this.deadlineTime = deadlineTime;
+    }
+
+    public Date getDeadlineTime()
+    {
+        return deadlineTime;
+    }
+    public void setMeetingTitle(String meetingTitle)
+    {
+        this.meetingTitle = meetingTitle;
+    }
+
+    public String getMeetingTitle()
+    {
+        return meetingTitle;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("meetingId", getMeetingId())
+            .append("agendaContent", getAgendaContent())
+            .append("workType", getWorkType())
+            .append("responsible", getResponsible())
+            .append("status", getStatus())
+            .append("delFlag", getDelFlag())
+            .append("createrCode", getCreaterCode())
+            .append("createdate", getCreatedate())
+            .append("updaterCode", getUpdaterCode())
+            .append("updatedate", getUpdatedate())
+            .append("deptId", getDeptId())
+            .append("remarks", getRemarks())
+            .append("presided", getPresided())
+            .append("isHis", getIsHis())
+            .append("deadlineTime", getDeadlineTime())
+            .append("meetingTitle", getMeetingTitle())
+            .toString();
+    }
+}

+ 259 - 0
cpms-admin/src/main/java/com/cpms/project/plant/domain/TMtMeeting.java

@@ -0,0 +1,259 @@
+package com.cpms.project.plant.domain;
+
+import java.util.Date;
+
+import com.cpms.common.annotation.Excel;
+import com.cpms.common.core.domain.BaseEntity;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 装置会议对象 t_mt_meeting
+ *
+ * @author ruoyi
+ * @date 2020-12-30
+ */
+public class TMtMeeting extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** id */
+    private Long id;
+
+    /** 装置 */
+    @Excel(name = "装置")
+    private String plantCode;
+
+    /** 记录人 */
+    @Excel(name = "记录人")
+    private String recorder;
+
+    /** 会议编号 */
+    @Excel(name = "会议编号")
+    private String meetingNo;
+
+    /** 会议时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    @Excel(name = "会议时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date meetingDate;
+
+    /** 会议地点 */
+    @Excel(name = "会议地点")
+    private String venue;
+
+    /** 主题 */
+    @Excel(name = "主题")
+    private String subject;
+
+    /** 删除 */
+    private Long delFlag;
+
+    /** 创建人 */
+    private String createrCode;
+
+    /** 创建时间 */
+    private Date createdate;
+
+    /** 更新人 */
+    private String updaterCode;
+
+    /** 更新日期 */
+    private Date updatedate;
+
+    /** 所属部门 */
+    @Excel(name = "所属部门")
+    private Long deptId;
+
+    /** 部门名称 */
+    @Excel(name = "部门名称")
+    private String deptName;
+
+    /** 备注 */
+    @Excel(name = "备注")
+    private String remarks;
+
+    private String presided;
+    private Long mtType;
+
+    private TMtAgenda tMtAgenda;
+
+    public TMtAgenda gettMtAgenda() {
+        return tMtAgenda;
+    }
+
+    public void settMtAgenda(TMtAgenda tMtAgenda) {
+        this.tMtAgenda = tMtAgenda;
+    }
+
+    public Long getMtType() {
+        return mtType;
+    }
+
+    public void setMtType(Long mtType) {
+        this.mtType = mtType;
+    }
+
+    public String getPresided() {
+        return presided;
+    }
+
+    public void setPresided(String presided) {
+        this.presided = presided;
+    }
+
+    public String getDeptName() {
+        return deptName;
+    }
+
+    public void setDeptName(String deptName) {
+        this.deptName = deptName;
+    }
+
+    public void setId(Long id)
+    {
+        this.id = id;
+    }
+
+    public Long getId()
+    {
+        return id;
+    }
+    public void setPlantCode(String plantCode)
+    {
+        this.plantCode = plantCode;
+    }
+
+    public String getPlantCode()
+    {
+        return plantCode;
+    }
+    public void setRecorder(String recorder)
+    {
+        this.recorder = recorder;
+    }
+
+    public String getRecorder()
+    {
+        return recorder;
+    }
+    public void setMeetingNo(String meetingNo)
+    {
+        this.meetingNo = meetingNo;
+    }
+
+    public String getMeetingNo()
+    {
+        return meetingNo;
+    }
+    public void setMeetingDate(Date meetingDate)
+    {
+        this.meetingDate = meetingDate;
+    }
+
+    public Date getMeetingDate()
+    {
+        return meetingDate;
+    }
+    public void setVenue(String venue)
+    {
+        this.venue = venue;
+    }
+
+    public String getVenue()
+    {
+        return venue;
+    }
+    public void setSubject(String subject)
+    {
+        this.subject = subject;
+    }
+
+    public String getSubject()
+    {
+        return subject;
+    }
+    public void setDelFlag(Long delFlag)
+    {
+        this.delFlag = delFlag;
+    }
+
+    public Long getDelFlag()
+    {
+        return delFlag;
+    }
+    public void setCreaterCode(String createrCode)
+    {
+        this.createrCode = createrCode;
+    }
+
+    public String getCreaterCode()
+    {
+        return createrCode;
+    }
+    public void setCreatedate(Date createdate)
+    {
+        this.createdate = createdate;
+    }
+
+    public Date getCreatedate()
+    {
+        return createdate;
+    }
+    public void setUpdaterCode(String updaterCode)
+    {
+        this.updaterCode = updaterCode;
+    }
+
+    public String getUpdaterCode()
+    {
+        return updaterCode;
+    }
+    public void setUpdatedate(Date updatedate)
+    {
+        this.updatedate = updatedate;
+    }
+
+    public Date getUpdatedate()
+    {
+        return updatedate;
+    }
+    public void setDeptId(Long deptId)
+    {
+        this.deptId = deptId;
+    }
+
+    public Long getDeptId()
+    {
+        return deptId;
+    }
+    public void setRemarks(String remarks)
+    {
+        this.remarks = remarks;
+    }
+
+    public String getRemarks()
+    {
+        return remarks;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("plantCode", getPlantCode())
+            .append("recorder", getRecorder())
+            .append("meetingNo", getMeetingNo())
+            .append("meetingDate", getMeetingDate())
+            .append("venue", getVenue())
+            .append("subject", getSubject())
+            .append("delFlag", getDelFlag())
+            .append("createrCode", getCreaterCode())
+            .append("createdate", getCreatedate())
+            .append("updaterCode", getUpdaterCode())
+            .append("updatedate", getUpdatedate())
+            .append("deptId", getDeptId())
+            .append("remarks", getRemarks())
+            .toString();
+    }
+}

+ 277 - 0
cpms-admin/src/main/java/com/cpms/project/plant/domain/TMtPerson.java

@@ -0,0 +1,277 @@
+package com.cpms.project.plant.domain;
+
+import java.util.Date;
+
+import com.cpms.common.annotation.Excel;
+import com.cpms.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 会议人员对象 t_mt_person
+ *
+ * @author ruoyi
+ * @date 2021-01-14
+ */
+public class TMtPerson extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 唯一标识ID */
+    private Long id;
+
+    /** 装置名称 */
+    @Excel(name = "装置名称")
+    private String plantCode;
+
+    /** 员工号 */
+    @Excel(name = "员工号")
+    private String staffid;
+
+    /** 姓名 */
+    @Excel(name = "姓名")
+    private String name;
+
+    /** 性别 */
+    @Excel(name = "性别")
+    private String sex;
+
+    /** 部门 */
+    @Excel(name = "部门")
+    private String unit;
+
+    /** 班值 */
+    @Excel(name = "班值")
+    private String team;
+
+    /** 实际岗位 */
+    @Excel(name = "实际岗位")
+    private String actualpost;
+
+    /** 联系方式 */
+    @Excel(name = "联系方式")
+    private String contact;
+
+
+    /** 状态 */
+    private Long delFlag;
+
+    /** 创建人 */
+    private String createrCode;
+
+    /** 创建时间 */
+    private Date createdate;
+
+    /** 修改人 */
+    private String updaterCode;
+
+    /** 修改时间 */
+    private Date updatedate;
+
+    /** 会议id */
+    private Long meetingId;
+
+    /** 历史 */
+    private Long isHis;
+
+    /** 抄报 */
+    private Long isCc;
+    /** 部门编号 */
+    private Long deptId;
+    /** 部门名称 */
+    @Excel(name = "部门名称")
+    private String deptName;
+
+    public Long getDeptId() {
+        return deptId;
+    }
+
+    public void setDeptId(Long deptId) {
+        this.deptId = deptId;
+    }
+
+    public String getDeptName() {
+        return deptName;
+    }
+
+    public void setDeptName(String deptName) {
+        this.deptName = deptName;
+    }
+
+    public void setId(Long id)
+    {
+        this.id = id;
+    }
+
+    public Long getId()
+    {
+        return id;
+    }
+    public void setPlantCode(String plantCode)
+    {
+        this.plantCode = plantCode;
+    }
+
+    public String getPlantCode()
+    {
+        return plantCode;
+    }
+    public void setStaffid(String staffid)
+    {
+        this.staffid = staffid;
+    }
+
+    public String getStaffid()
+    {
+        return staffid;
+    }
+    public void setName(String name)
+    {
+        this.name = name;
+    }
+
+    public String getName()
+    {
+        return name;
+    }
+    public void setSex(String sex)
+    {
+        this.sex = sex;
+    }
+
+    public String getSex()
+    {
+        return sex;
+    }
+    public void setUnit(String unit)
+    {
+        this.unit = unit;
+    }
+
+    public String getUnit()
+    {
+        return unit;
+    }
+    public void setTeam(String team)
+    {
+        this.team = team;
+    }
+
+    public String getTeam()
+    {
+        return team;
+    }
+    public void setActualpost(String actualpost)
+    {
+        this.actualpost = actualpost;
+    }
+
+    public String getActualpost()
+    {
+        return actualpost;
+    }
+    public void setContact(String contact)
+    {
+        this.contact = contact;
+    }
+
+    public String getContact()
+    {
+        return contact;
+    }
+    public void setDelFlag(Long delFlag)
+    {
+        this.delFlag = delFlag;
+    }
+
+    public Long getDelFlag()
+    {
+        return delFlag;
+    }
+    public void setCreaterCode(String createrCode)
+    {
+        this.createrCode = createrCode;
+    }
+
+    public String getCreaterCode()
+    {
+        return createrCode;
+    }
+    public void setCreatedate(Date createdate)
+    {
+        this.createdate = createdate;
+    }
+
+    public Date getCreatedate()
+    {
+        return createdate;
+    }
+    public void setUpdaterCode(String updaterCode)
+    {
+        this.updaterCode = updaterCode;
+    }
+
+    public String getUpdaterCode()
+    {
+        return updaterCode;
+    }
+    public void setUpdatedate(Date updatedate)
+    {
+        this.updatedate = updatedate;
+    }
+
+    public Date getUpdatedate()
+    {
+        return updatedate;
+    }
+    public void setMeetingId(Long meetingId)
+    {
+        this.meetingId = meetingId;
+    }
+
+    public Long getMeetingId()
+    {
+        return meetingId;
+    }
+    public void setIsHis(Long isHis)
+    {
+        this.isHis = isHis;
+    }
+
+    public Long getIsHis()
+    {
+        return isHis;
+    }
+    public void setIsCc(Long isCc)
+    {
+        this.isCc = isCc;
+    }
+
+    public Long getIsCc()
+    {
+        return isCc;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("plantCode", getPlantCode())
+            .append("staffid", getStaffid())
+            .append("name", getName())
+            .append("sex", getSex())
+            .append("unit", getUnit())
+            .append("team", getTeam())
+            .append("actualpost", getActualpost())
+            .append("contact", getContact())
+            .append("delFlag", getDelFlag())
+            .append("createrCode", getCreaterCode())
+            .append("createdate", getCreatedate())
+            .append("updaterCode", getUpdaterCode())
+            .append("updatedate", getUpdatedate())
+            .append("meetingId", getMeetingId())
+            .append("isHis", getIsHis())
+            .append("isCc", getIsCc())
+            .toString();
+    }
+}

+ 62 - 0
cpms-admin/src/main/java/com/cpms/project/plant/mapper/TMtAgendaMapper.java

@@ -0,0 +1,62 @@
+package com.cpms.project.plant.mapper;
+
+import java.util.List;
+import com.cpms.project.plant.domain.TMtAgenda;
+
+/**
+ * 装置会议议程Mapper接口
+ *
+ * @author ruoyi
+ * @date 2023-06-07
+ */
+public interface TMtAgendaMapper
+{
+    /**
+     * 查询装置会议议程
+     *
+     * @param id 装置会议议程主键
+     * @return 装置会议议程
+     */
+    public TMtAgenda selectTMtAgendaById(Long id);
+
+    /**
+     * 查询装置会议议程列表
+     *
+     * @param tMtAgenda 装置会议议程
+     * @return 装置会议议程集合
+     */
+    public List<TMtAgenda> selectTMtAgendaList(TMtAgenda tMtAgenda);
+    public List<TMtAgenda> selectAgendaList(TMtAgenda tMtAgenda);
+
+    /**
+     * 新增装置会议议程
+     *
+     * @param tMtAgenda 装置会议议程
+     * @return 结果
+     */
+    public int insertTMtAgenda(TMtAgenda tMtAgenda);
+
+    /**
+     * 修改装置会议议程
+     *
+     * @param tMtAgenda 装置会议议程
+     * @return 结果
+     */
+    public int updateTMtAgenda(TMtAgenda tMtAgenda);
+
+    /**
+     * 删除装置会议议程
+     *
+     * @param id 装置会议议程主键
+     * @return 结果
+     */
+    public int deleteTMtAgendaById(Long id);
+
+    /**
+     * 批量删除装置会议议程
+     *
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTMtAgendaByIds(Long[] ids);
+}

+ 62 - 0
cpms-admin/src/main/java/com/cpms/project/plant/mapper/TMtContentMapper.java

@@ -0,0 +1,62 @@
+package com.cpms.project.plant.mapper;
+
+import java.util.List;
+import com.cpms.project.plant.domain.TMtContent;
+
+/**
+ * 装置空白会议Mapper接口
+ *
+ * @author ruoyi
+ * @date 2023-08-03
+ */
+public interface TMtContentMapper
+{
+    /**
+     * 查询装置空白会议
+     *
+     * @param id 装置空白会议主键
+     * @return 装置空白会议
+     */
+    public TMtContent selectTMtContentById(Long id);
+
+    /**
+     * 查询装置空白会议列表
+     *
+     * @param tMtContent 装置空白会议
+     * @return 装置空白会议集合
+     */
+    public List<TMtContent> selectTMtContentList(TMtContent tMtContent);
+    public List<TMtContent> selectContentList(TMtContent tMtContent);
+
+    /**
+     * 新增装置空白会议
+     *
+     * @param tMtContent 装置空白会议
+     * @return 结果
+     */
+    public int insertTMtContent(TMtContent tMtContent);
+
+    /**
+     * 修改装置空白会议
+     *
+     * @param tMtContent 装置空白会议
+     * @return 结果
+     */
+    public int updateTMtContent(TMtContent tMtContent);
+
+    /**
+     * 删除装置空白会议
+     *
+     * @param id 装置空白会议主键
+     * @return 结果
+     */
+    public int deleteTMtContentById(Long id);
+
+    /**
+     * 批量删除装置空白会议
+     *
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTMtContentByIds(Long[] ids);
+}

+ 64 - 0
cpms-admin/src/main/java/com/cpms/project/plant/mapper/TMtMeetingMapper.java

@@ -0,0 +1,64 @@
+package com.cpms.project.plant.mapper;
+
+import java.util.List;
+
+import com.cpms.common.annotation.DataScope;
+import com.cpms.project.plant.domain.TMtMeeting;
+
+/**
+ * 装置会议Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2020-12-30
+ */
+public interface TMtMeetingMapper 
+{
+    /**
+     * 查询装置会议
+     * 
+     * @param id 装置会议ID
+     * @return 装置会议
+     */
+    public TMtMeeting selectTMtMeetingById(Long id);
+
+    /**
+     * 查询装置会议列表
+     * 
+     * @param tMtMeeting 装置会议
+     * @return 装置会议集合
+     */
+    @DataScope(deptAlias = "d")
+    public List<TMtMeeting> selectTMtMeetingList(TMtMeeting tMtMeeting);
+
+    /**
+     * 新增装置会议
+     * 
+     * @param tMtMeeting 装置会议
+     * @return 结果
+     */
+    public int insertTMtMeeting(TMtMeeting tMtMeeting);
+
+    /**
+     * 修改装置会议
+     * 
+     * @param tMtMeeting 装置会议
+     * @return 结果
+     */
+    public int updateTMtMeeting(TMtMeeting tMtMeeting);
+
+    /**
+     * 删除装置会议
+     * 
+     * @param id 装置会议ID
+     * @return 结果
+     */
+    public int deleteTMtMeetingById(Long id);
+
+    /**
+     * 批量删除装置会议
+     * 
+     * @param ids 需要删除的数据ID
+     * @return 结果
+     */
+    public int deleteTMtMeetingByIds(Long[] ids);
+}

+ 64 - 0
cpms-admin/src/main/java/com/cpms/project/plant/mapper/TMtPersonMapper.java

@@ -0,0 +1,64 @@
+package com.cpms.project.plant.mapper;
+
+import java.util.List;
+
+import com.cpms.common.annotation.DataScope;
+import com.cpms.project.plant.domain.TMtPerson;
+
+/**
+ * 会议人员Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2021-01-14
+ */
+public interface TMtPersonMapper 
+{
+    /**
+     * 查询会议人员
+     * 
+     * @param id 会议人员ID
+     * @return 会议人员
+     */
+    public TMtPerson selectTMtPersonById(Long id);
+
+    /**
+     * 查询会议人员列表
+     * 
+     * @param tMtPerson 会议人员
+     * @return 会议人员集合
+     */
+    @DataScope(deptAlias = "d")
+    public List<TMtPerson> selectTMtPersonList(TMtPerson tMtPerson);
+
+    /**
+     * 新增会议人员
+     * 
+     * @param tMtPerson 会议人员
+     * @return 结果
+     */
+    public int insertTMtPerson(TMtPerson tMtPerson);
+
+    /**
+     * 修改会议人员
+     * 
+     * @param tMtPerson 会议人员
+     * @return 结果
+     */
+    public int updateTMtPerson(TMtPerson tMtPerson);
+
+    /**
+     * 删除会议人员
+     * 
+     * @param id 会议人员ID
+     * @return 结果
+     */
+    public int deleteTMtPersonById(Long id);
+
+    /**
+     * 批量删除会议人员
+     * 
+     * @param ids 需要删除的数据ID
+     * @return 结果
+     */
+    public int deleteTMtPersonByIds(Long[] ids);
+}

+ 62 - 0
cpms-admin/src/main/java/com/cpms/project/plant/service/ITMtAgendaService.java

@@ -0,0 +1,62 @@
+package com.cpms.project.plant.service;
+
+import java.util.List;
+import com.cpms.project.plant.domain.TMtAgenda;
+
+/**
+ * 装置会议议程Service接口
+ *
+ * @author ruoyi
+ * @date 2023-06-07
+ */
+public interface ITMtAgendaService
+{
+    /**
+     * 查询装置会议议程
+     *
+     * @param id 装置会议议程主键
+     * @return 装置会议议程
+     */
+    public TMtAgenda selectTMtAgendaById(Long id);
+
+    /**
+     * 查询装置会议议程列表
+     *
+     * @param tMtAgenda 装置会议议程
+     * @return 装置会议议程集合
+     */
+    public List<TMtAgenda> selectTMtAgendaList(TMtAgenda tMtAgenda);
+    public List<TMtAgenda> selectAgendaList(TMtAgenda tMtAgenda);
+
+    /**
+     * 新增装置会议议程
+     *
+     * @param tMtAgenda 装置会议议程
+     * @return 结果
+     */
+    public int insertTMtAgenda(TMtAgenda tMtAgenda);
+
+    /**
+     * 修改装置会议议程
+     *
+     * @param tMtAgenda 装置会议议程
+     * @return 结果
+     */
+    public int updateTMtAgenda(TMtAgenda tMtAgenda);
+
+    /**
+     * 批量删除装置会议议程
+     *
+     * @param ids 需要删除的装置会议议程主键集合
+     * @return 结果
+     */
+    public int deleteTMtAgendaByIds(Long[] ids);
+
+    /**
+     * 删除装置会议议程信息
+     *
+     * @param id 装置会议议程主键
+     * @return 结果
+     */
+    public int deleteTMtAgendaById(Long id);
+}

+ 62 - 0
cpms-admin/src/main/java/com/cpms/project/plant/service/ITMtContentService.java

@@ -0,0 +1,62 @@
+package com.cpms.project.plant.service;
+
+import java.util.List;
+import com.cpms.project.plant.domain.TMtContent;
+
+/**
+ * 装置空白会议Service接口
+ *
+ * @author ruoyi
+ * @date 2023-08-03
+ */
+public interface ITMtContentService
+{
+    /**
+     * 查询装置空白会议
+     *
+     * @param id 装置空白会议主键
+     * @return 装置空白会议
+     */
+    public TMtContent selectTMtContentById(Long id);
+
+    /**
+     * 查询装置空白会议列表
+     *
+     * @param tMtContent 装置空白会议
+     * @return 装置空白会议集合
+     */
+    public List<TMtContent> selectTMtContentList(TMtContent tMtContent);
+    public List<TMtContent> selectContentList(TMtContent tMtContent);
+
+    /**
+     * 新增装置空白会议
+     *
+     * @param tMtContent 装置空白会议
+     * @return 结果
+     */
+    public int insertTMtContent(TMtContent tMtContent);
+
+    /**
+     * 修改装置空白会议
+     *
+     * @param tMtContent 装置空白会议
+     * @return 结果
+     */
+    public int updateTMtContent(TMtContent tMtContent);
+
+    /**
+     * 批量删除装置空白会议
+     *
+     * @param ids 需要删除的装置空白会议主键集合
+     * @return 结果
+     */
+    public int deleteTMtContentByIds(Long[] ids);
+
+    /**
+     * 删除装置空白会议信息
+     *
+     * @param id 装置空白会议主键
+     * @return 结果
+     */
+    public int deleteTMtContentById(Long id);
+}

+ 61 - 0
cpms-admin/src/main/java/com/cpms/project/plant/service/ITMtMeetingService.java

@@ -0,0 +1,61 @@
+package com.cpms.project.plant.service;
+
+import java.util.List;
+import com.cpms.project.plant.domain.TMtMeeting;
+
+/**
+ * 装置会议Service接口
+ * 
+ * @author ruoyi
+ * @date 2020-12-30
+ */
+public interface ITMtMeetingService 
+{
+    /**
+     * 查询装置会议
+     * 
+     * @param id 装置会议ID
+     * @return 装置会议
+     */
+    public TMtMeeting selectTMtMeetingById(Long id);
+
+    /**
+     * 查询装置会议列表
+     * 
+     * @param tMtMeeting 装置会议
+     * @return 装置会议集合
+     */
+    public List<TMtMeeting> selectTMtMeetingList(TMtMeeting tMtMeeting);
+
+    /**
+     * 新增装置会议
+     * 
+     * @param tMtMeeting 装置会议
+     * @return 结果
+     */
+    public int insertTMtMeeting(TMtMeeting tMtMeeting);
+
+    /**
+     * 修改装置会议
+     * 
+     * @param tMtMeeting 装置会议
+     * @return 结果
+     */
+    public int updateTMtMeeting(TMtMeeting tMtMeeting);
+
+    /**
+     * 批量删除装置会议
+     * 
+     * @param ids 需要删除的装置会议ID
+     * @return 结果
+     */
+    public int deleteTMtMeetingByIds(Long[] ids);
+
+    /**
+     * 删除装置会议信息
+     * 
+     * @param id 装置会议ID
+     * @return 结果
+     */
+    public int deleteTMtMeetingById(Long id);
+}

+ 68 - 0
cpms-admin/src/main/java/com/cpms/project/plant/service/ITMtPersonService.java

@@ -0,0 +1,68 @@
+package com.cpms.project.plant.service;
+
+import java.util.List;
+import com.cpms.project.plant.domain.TMtPerson;
+import org.apache.poi.xwpf.usermodel.XWPFDocument;
+import org.apache.poi.xwpf.usermodel.XWPFParagraph;
+import org.apache.poi.xwpf.usermodel.XWPFRun;
+
+/**
+ * 会议人员Service接口
+ *
+ * @author ruoyi
+ * @date 2021-01-14
+ */
+public interface ITMtPersonService
+{
+    /**
+     * 查询会议人员
+     *
+     * @param id 会议人员ID
+     * @return 会议人员
+     */
+    public TMtPerson selectTMtPersonById(Long id);
+
+    /**
+     * 查询会议人员列表
+     *
+     * @param tMtPerson 会议人员
+     * @return 会议人员集合
+     */
+    public List<TMtPerson> selectTMtPersonList(TMtPerson tMtPerson);
+
+    /**
+     * 新增会议人员
+     *
+     * @param tMtPerson 会议人员
+     * @return 结果
+     */
+    public int insertTMtPerson(TMtPerson tMtPerson);
+
+    /**
+     * 修改会议人员
+     *
+     * @param tMtPerson 会议人员
+     * @return 结果
+     */
+    public int updateTMtPerson(TMtPerson tMtPerson);
+
+    /**
+     * 批量删除会议人员
+     *
+     * @param ids 需要删除的会议人员ID
+     * @return 结果
+     */
+    public int deleteTMtPersonByIds(Long[] ids);
+
+    /**
+     * 删除会议人员信息
+     *
+     * @param id 会议人员ID
+     * @return 结果
+     */
+    public int deleteTMtPersonById(Long id);
+
+    void dealPerson1(XWPFDocument doc, XWPFParagraph paragraph, XWPFRun run, Long meetingId);
+
+    void dealPerson2(XWPFDocument doc, XWPFParagraph paragraph, XWPFRun run, Long meetingId);
+}

+ 97 - 0
cpms-admin/src/main/java/com/cpms/project/plant/service/impl/TMtAgendaServiceImpl.java

@@ -0,0 +1,97 @@
+package com.cpms.project.plant.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.cpms.project.plant.mapper.TMtAgendaMapper;
+import com.cpms.project.plant.domain.TMtAgenda;
+import com.cpms.project.plant.service.ITMtAgendaService;
+
+/**
+ * 装置会议议程Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2023-06-07
+ */
+@Service
+public class TMtAgendaServiceImpl implements ITMtAgendaService
+{
+    @Autowired
+    private TMtAgendaMapper tMtAgendaMapper;
+
+    /**
+     * 查询装置会议议程
+     *
+     * @param id 装置会议议程主键
+     * @return 装置会议议程
+     */
+    @Override
+    public TMtAgenda selectTMtAgendaById(Long id)
+    {
+        return tMtAgendaMapper.selectTMtAgendaById(id);
+    }
+
+    /**
+     * 查询装置会议议程列表
+     *
+     * @param tMtAgenda 装置会议议程
+     * @return 装置会议议程
+     */
+    @Override
+    public List<TMtAgenda> selectTMtAgendaList(TMtAgenda tMtAgenda)
+    {
+        return tMtAgendaMapper.selectTMtAgendaList(tMtAgenda);
+    }   @Override
+    public List<TMtAgenda> selectAgendaList(TMtAgenda tMtAgenda)
+    {
+        return tMtAgendaMapper.selectAgendaList(tMtAgenda);
+    }
+
+    /**
+     * 新增装置会议议程
+     *
+     * @param tMtAgenda 装置会议议程
+     * @return 结果
+     */
+    @Override
+    public int insertTMtAgenda(TMtAgenda tMtAgenda)
+    {
+        return tMtAgendaMapper.insertTMtAgenda(tMtAgenda);
+    }
+
+    /**
+     * 修改装置会议议程
+     *
+     * @param tMtAgenda 装置会议议程
+     * @return 结果
+     */
+    @Override
+    public int updateTMtAgenda(TMtAgenda tMtAgenda)
+    {
+        return tMtAgendaMapper.updateTMtAgenda(tMtAgenda);
+    }
+
+    /**
+     * 批量删除装置会议议程
+     *
+     * @param ids 需要删除的装置会议议程主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTMtAgendaByIds(Long[] ids)
+    {
+        return tMtAgendaMapper.deleteTMtAgendaByIds(ids);
+    }
+
+    /**
+     * 删除装置会议议程信息
+     *
+     * @param id 装置会议议程主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTMtAgendaById(Long id)
+    {
+        return tMtAgendaMapper.deleteTMtAgendaById(id);
+    }
+}

+ 97 - 0
cpms-admin/src/main/java/com/cpms/project/plant/service/impl/TMtContentServiceImpl.java

@@ -0,0 +1,97 @@
+package com.cpms.project.plant.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.cpms.project.plant.mapper.TMtContentMapper;
+import com.cpms.project.plant.domain.TMtContent;
+import com.cpms.project.plant.service.ITMtContentService;
+
+/**
+ * 装置空白会议Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2023-08-03
+ */
+@Service
+public class TMtContentServiceImpl implements ITMtContentService
+{
+    @Autowired
+    private TMtContentMapper tMtContentMapper;
+
+    /**
+     * 查询装置空白会议
+     *
+     * @param id 装置空白会议主键
+     * @return 装置空白会议
+     */
+    @Override
+    public TMtContent selectTMtContentById(Long id)
+    {
+        return tMtContentMapper.selectTMtContentById(id);
+    }
+
+    /**
+     * 查询装置空白会议列表
+     *
+     * @param tMtContent 装置空白会议
+     * @return 装置空白会议
+     */
+    @Override
+    public List<TMtContent> selectTMtContentList(TMtContent tMtContent)
+    {
+        return tMtContentMapper.selectTMtContentList(tMtContent);
+    }    @Override
+    public List<TMtContent> selectContentList(TMtContent tMtContent)
+    {
+        return tMtContentMapper.selectContentList(tMtContent);
+    }
+
+    /**
+     * 新增装置空白会议
+     *
+     * @param tMtContent 装置空白会议
+     * @return 结果
+     */
+    @Override
+    public int insertTMtContent(TMtContent tMtContent)
+    {
+        return tMtContentMapper.insertTMtContent(tMtContent);
+    }
+
+    /**
+     * 修改装置空白会议
+     *
+     * @param tMtContent 装置空白会议
+     * @return 结果
+     */
+    @Override
+    public int updateTMtContent(TMtContent tMtContent)
+    {
+        return tMtContentMapper.updateTMtContent(tMtContent);
+    }
+
+    /**
+     * 批量删除装置空白会议
+     *
+     * @param ids 需要删除的装置空白会议主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTMtContentByIds(Long[] ids)
+    {
+        return tMtContentMapper.deleteTMtContentByIds(ids);
+    }
+
+    /**
+     * 删除装置空白会议信息
+     *
+     * @param id 装置空白会议主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTMtContentById(Long id)
+    {
+        return tMtContentMapper.deleteTMtContentById(id);
+    }
+}

+ 138 - 0
cpms-admin/src/main/java/com/cpms/project/plant/service/impl/TMtMeetingServiceImpl.java

@@ -0,0 +1,138 @@
+package com.cpms.project.plant.service.impl;
+
+import java.util.Date;
+import java.util.List;
+
+import com.cpms.project.plant.domain.*;
+import com.cpms.project.plant.mapper.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.cpms.project.plant.service.ITMtMeetingService;
+
+import javax.annotation.Resource;
+
+/**
+ * 装置会议Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2020-12-30
+ */
+@Service
+public class TMtMeetingServiceImpl implements ITMtMeetingService {
+    @Resource
+    private TMtMeetingMapper tMtMeetingMapper;
+    @Resource
+    private TMtAgendaMapper tMtAgendaMapper;
+    @Resource
+    private TMtPersonMapper tMtPersonMapper;
+    @Resource
+    private TMtContentMapper tMtContentMapper;
+
+    /**
+     * 查询装置会议
+     *
+     * @param id 装置会议ID
+     * @return 装置会议
+     */
+    @Override
+    public TMtMeeting selectTMtMeetingById(Long id) {
+        return tMtMeetingMapper.selectTMtMeetingById(id);
+    }
+
+    /**
+     * 查询装置会议列表
+     *
+     * @param tMtMeeting 装置会议
+     * @return 装置会议
+     */
+    @Override
+    public List<TMtMeeting> selectTMtMeetingList(TMtMeeting tMtMeeting) {
+        return tMtMeetingMapper.selectTMtMeetingList(tMtMeeting);
+    }
+
+    /**
+     * 新增装置会议
+     *
+     * @param tMtMeeting 装置会议
+     * @return 结果
+     */
+    @Override
+    public int insertTMtMeeting(TMtMeeting tMtMeeting) {
+        tMtMeetingMapper.insertTMtMeeting(tMtMeeting);
+        if (1 == tMtMeeting.getMtType()) {
+            List<TMtAgenda> tMtAgendaList = tMtAgendaMapper.selectTMtAgendaList(tMtMeeting.gettMtAgenda());
+            for (TMtAgenda item : tMtAgendaList) {
+                item.setIsHis(1L);
+                item.setMeetingId(String.valueOf(tMtMeeting.getId()));
+                tMtAgendaMapper.updateTMtAgenda(item);
+                if (!"Finished".equals(item.getStatus())) {
+                    item.setIsHis(0L);
+                    item.setMeetingId(null);
+                    item.setId(item.getId());
+                    tMtAgendaMapper.insertTMtAgenda(item);
+                }
+            }
+            TMtPerson person = new TMtPerson();
+            person.setIsCc(1L);
+            List<TMtPerson> tMtPersonList = tMtPersonMapper.selectTMtPersonList(person);
+            for (TMtPerson item : tMtPersonList) {
+                item.setIsHis(1L);
+                item.setMeetingId(tMtMeeting.getId());
+                tMtPersonMapper.updateTMtPerson(item);
+                item.setIsHis(0L);
+                item.setIsCc(1L);
+                item.setMeetingId(null);
+                item.setId(null);
+                tMtPersonMapper.insertTMtPerson(item);
+            }
+        } else {
+            TMtContent content = new TMtContent();
+            content.setIsHis(0);
+            for (TMtContent item : tMtContentMapper.selectTMtContentList(content)) {
+                item.setIsHis(1);
+                item.setMeetingId(String.valueOf(tMtMeeting.getId()));
+                tMtContentMapper.updateTMtContent(item);
+            }
+            List<TMtPerson> tMtPersonList = tMtPersonMapper.selectTMtPersonList(new TMtPerson());
+            for (TMtPerson item : tMtPersonList) {
+                item.setIsHis(1L);
+                item.setMeetingId(tMtMeeting.getId());
+                tMtPersonMapper.updateTMtPerson(item);
+            }
+        }
+        return 1;
+    }
+
+    /**
+     * 修改装置会议
+     *
+     * @param tMtMeeting 装置会议
+     * @return 结果
+     */
+    @Override
+    public int updateTMtMeeting(TMtMeeting tMtMeeting) {
+        return tMtMeetingMapper.updateTMtMeeting(tMtMeeting);
+    }
+
+    /**
+     * 批量删除装置会议
+     *
+     * @param ids 需要删除的装置会议ID
+     * @return 结果
+     */
+    @Override
+    public int deleteTMtMeetingByIds(Long[] ids) {
+        return tMtMeetingMapper.deleteTMtMeetingByIds(ids);
+    }
+
+    /**
+     * 删除装置会议信息
+     *
+     * @param id 装置会议ID
+     * @return 结果
+     */
+    @Override
+    public int deleteTMtMeetingById(Long id) {
+        return tMtMeetingMapper.deleteTMtMeetingById(id);
+    }
+}

+ 163 - 0
cpms-admin/src/main/java/com/cpms/project/plant/service/impl/TMtPersonServiceImpl.java

@@ -0,0 +1,163 @@
+package com.cpms.project.plant.service.impl;
+
+import java.util.List;
+
+import com.cpms.common.core.domain.entity.SysDictData;
+import com.cpms.common.utils.DictUtils;
+import com.cpms.common.utils.poi.POIConstants;
+import com.cpms.common.utils.poi.PoiWordTools;
+import com.cpms.system.service.ISysDictTypeService;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.poi.xwpf.usermodel.*;
+import org.apache.xmlbeans.XmlCursor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.cpms.project.plant.mapper.TMtPersonMapper;
+import com.cpms.project.plant.domain.TMtPerson;
+import com.cpms.project.plant.service.ITMtPersonService;
+
+import javax.annotation.Resource;
+
+/**
+ * 会议人员Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2021-01-14
+ */
+@Service
+public class TMtPersonServiceImpl implements ITMtPersonService
+{
+    @Resource
+    private TMtPersonMapper tMtPersonMapper;
+    @Autowired
+    private ISysDictTypeService iSysDictTypeService;
+    /**
+     * 查询会议人员
+     *
+     * @param id 会议人员ID
+     * @return 会议人员
+     */
+    @Override
+    public TMtPerson selectTMtPersonById(Long id)
+    {
+        return tMtPersonMapper.selectTMtPersonById(id);
+    }
+
+    /**
+     * 查询会议人员列表
+     *
+     * @param tMtPerson 会议人员
+     * @return 会议人员
+     */
+    @Override
+    public List<TMtPerson> selectTMtPersonList(TMtPerson tMtPerson)
+    {
+        return tMtPersonMapper.selectTMtPersonList(tMtPerson);
+    }
+
+    /**
+     * 新增会议人员
+     *
+     * @param tMtPerson 会议人员
+     * @return 结果
+     */
+    @Override
+    public int insertTMtPerson(TMtPerson tMtPerson)
+    {
+        return tMtPersonMapper.insertTMtPerson(tMtPerson);
+    }
+
+    /**
+     * 修改会议人员
+     *
+     * @param tMtPerson 会议人员
+     * @return 结果
+     */
+    @Override
+    public int updateTMtPerson(TMtPerson tMtPerson)
+    {
+        return tMtPersonMapper.updateTMtPerson(tMtPerson);
+    }
+
+    /**
+     * 批量删除会议人员
+     *
+     * @param ids 需要删除的会议人员ID
+     * @return 结果
+     */
+    @Override
+    public int deleteTMtPersonByIds(Long[] ids)
+    {
+        return tMtPersonMapper.deleteTMtPersonByIds(ids);
+    }
+
+    /**
+     * 删除会议人员信息
+     *
+     * @param id 会议人员ID
+     * @return 结果
+     */
+    @Override
+    public int deleteTMtPersonById(Long id)
+    {
+        return tMtPersonMapper.deleteTMtPersonById(id);
+    }
+
+    @Override
+    public void dealPerson1(XWPFDocument doc, XWPFParagraph paragraph, XWPFRun run, Long meetingId) {
+        run.setText("", 0);//设置此文本在运行中的文本value -应在文件中显示的文字文本,pos --在文本数组中的位置(NB:从0开始)
+        XmlCursor cursor = paragraph.getCTP().newCursor();
+        XWPFTable tableOne = doc.insertNewTbl(cursor);// ---这个是关键
+        List<SysDictData> staff = iSysDictTypeService.selectDictDataByType("STAFF_UNIT");
+        List<SysDictData> actualpost = iSysDictTypeService.selectDictDataByType("ACTUALPOST");
+        // 设置表格宽度,第一行宽度就可以了,这个值的单位,目前我也还不清楚,还没来得及研究
+        tableOne.setWidth(6000);
+
+        // 表格第一行,对于每个列,必须使用createCell(),而不是getCell(),因为第一行嘛,肯定是属于创建的,没有create哪里来的get呢
+        XWPFTableRow tableOneRowOne = tableOne.getRow(0);// 行
+        PoiWordTools.setWordCellSelfStyle(tableOneRowOne.getCell(0), POIConstants.FONT_NAME, POIConstants.MT_FONT_SIZE,    POIConstants.FONT_BOLD, POIConstants.ALIGNMENT, POIConstants.VERTICAL,POIConstants.FONT_COLOR, POIConstants.MT_BG_TITLE_COLOR, "20", "部门/岗位");
+        PoiWordTools.setWordCellSelfStyle(tableOneRowOne.createCell(), POIConstants.FONT_NAME, POIConstants.MT_FONT_SIZE,  POIConstants.FONT_BOLD, POIConstants.ALIGNMENT,POIConstants.VERTICAL, POIConstants.FONT_COLOR, POIConstants.MT_BG_TITLE_COLOR, "40", "姓名");
+        TMtPerson tMtPerson = new TMtPerson();
+        tMtPerson.setMeetingId(meetingId);
+        tMtPerson.setIsCc(0l);
+        List<TMtPerson> list = tMtPersonMapper.selectTMtPersonList(tMtPerson);
+
+        if (CollectionUtils.isNotEmpty(list)) {
+            for (int i = 0; i < list.size(); i++) {
+                // 表格第二行
+                XWPFTableRow tableOneRowTwo = tableOne.createRow();// 行
+                PoiWordTools.setWordCellSelfStyle(tableOneRowTwo.getCell(0), POIConstants.FONT_NAME, POIConstants.MT_FONT_SIZE, POIConstants.FONT_BOLD, POIConstants.ALIGNMENT,POIConstants.VERTICAL, POIConstants.FONT_COLOR, POIConstants.BG_COLOR, "20", DictUtils.getDictVale(staff ,list.get(i).getUnit())+ "  " + DictUtils.getDictVale(actualpost ,list.get(i).getActualpost()));
+                PoiWordTools.setWordCellSelfStyle(tableOneRowTwo.getCell(1), POIConstants.FONT_NAME, POIConstants.MT_FONT_SIZE, POIConstants.FONT_BOLD, POIConstants.ALIGNMENT,POIConstants.VERTICAL, POIConstants.FONT_COLOR, POIConstants.BG_COLOR, "40", list.get(i).getName());
+            }
+        }
+    }
+
+    @Override
+    public void dealPerson2(XWPFDocument doc, XWPFParagraph paragraph, XWPFRun run, Long meetingId) {
+        run.setText("", 0);//设置此文本在运行中的文本value -应在文件中显示的文字文本,pos --在文本数组中的位置(NB:从0开始)
+        XmlCursor cursor = paragraph.getCTP().newCursor();
+        XWPFTable tableOne = doc.insertNewTbl(cursor);// ---这个是关键
+
+        // 设置表格宽度,第一行宽度就可以了,这个值的单位,目前我也还不清楚,还没来得及研究
+        tableOne.setWidth(6000);
+
+        // 表格第一行,对于每个列,必须使用createCell(),而不是getCell(),因为第一行嘛,肯定是属于创建的,没有create哪里来的get呢
+        XWPFTableRow tableOneRowOne = tableOne.getRow(0);// 行
+        PoiWordTools.setWordCellSelfStyle(tableOneRowOne.getCell(0), POIConstants.FONT_NAME, POIConstants.MT_FONT_SIZE,    POIConstants.FONT_BOLD, POIConstants.ALIGNMENT, POIConstants.VERTICAL,POIConstants.FONT_COLOR, POIConstants.MT_BG_TITLE_COLOR, "20", "部门/岗位");
+        PoiWordTools.setWordCellSelfStyle(tableOneRowOne.createCell(), POIConstants.FONT_NAME, POIConstants.MT_FONT_SIZE,  POIConstants.FONT_BOLD, POIConstants.ALIGNMENT,POIConstants.VERTICAL, POIConstants.FONT_COLOR, POIConstants.MT_BG_TITLE_COLOR, "40", "姓名");
+        TMtPerson tMtPerson = new TMtPerson();
+        tMtPerson.setMeetingId(meetingId);
+        tMtPerson.setIsCc(1l);
+        List<TMtPerson> list = tMtPersonMapper.selectTMtPersonList(tMtPerson);
+        List<SysDictData> staff = iSysDictTypeService.selectDictDataByType("STAFF_UNIT");
+        List<SysDictData> actualpost = iSysDictTypeService.selectDictDataByType("ACTUALPOST");
+        if (CollectionUtils.isNotEmpty(list)) {
+            for (int i = 0; i < list.size(); i++) {
+                // 表格第二行
+                XWPFTableRow tableOneRowTwo = tableOne.createRow();// 行
+                PoiWordTools.setWordCellSelfStyle(tableOneRowTwo.getCell(0), POIConstants.FONT_NAME, POIConstants.MT_FONT_SIZE, POIConstants.FONT_BOLD, POIConstants.ALIGNMENT,POIConstants.VERTICAL, POIConstants.FONT_COLOR, POIConstants.BG_COLOR, "20", DictUtils.getDictVale(staff ,list.get(i).getUnit())+ "  " + DictUtils.getDictVale(actualpost ,list.get(i).getActualpost()));
+                PoiWordTools.setWordCellSelfStyle(tableOneRowTwo.getCell(1), POIConstants.FONT_NAME, POIConstants.MT_FONT_SIZE, POIConstants.FONT_BOLD, POIConstants.ALIGNMENT,POIConstants.VERTICAL, POIConstants.FONT_COLOR, POIConstants.BG_COLOR, "40", list.get(i).getName());
+            }
+        }
+    }
+}

+ 1 - 1
cpms-admin/src/main/resources/application.yml

@@ -132,7 +132,7 @@ jasypt:
     password: test
 # 当前部署外网IP,用于office预览
 deployment:
-  host: cpms.free.idcfengye.com/dev-api
+  host: cpms.v7.idcfengye.com/dev-api
 filesize-max: 5242880
 files:
   docservice:

+ 100 - 0
cpms-admin/src/main/resources/mapper/asset/TAssetBasedocMapper.xml

@@ -0,0 +1,100 @@
+<?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.cpms.project.asset.mapper.TAssetBasedocMapper">
+    
+    <resultMap type="TAssetBasedoc" id="TAssetBasedocResult">
+        <result property="id"    column="id"    />
+        <result property="type"    column="type"    />
+        <result property="docName"    column="doc_name"    />
+        <result property="docStatus"    column="doc_status"    />
+        <result property="createrCode"    column="creater_code"    />
+        <result property="createdate"    column="createdate"    />
+        <result property="remarks"    column="remarks"    />
+        <result property="delFlag"    column="del_flag"    />
+        <result property="updaterCode"    column="updater_code"    />
+        <result property="updatedate"    column="updatedate"    />
+        <result property="deptId"    column="dept_id"    />
+    </resultMap>
+
+    <sql id="selectTAssetBasedocVo">
+        select id, type, doc_name, doc_status, creater_code, createdate, remarks, del_flag, updater_code, updatedate, dept_id from t_asset_basedoc
+    </sql>
+
+    <select id="selectTAssetBasedocList" parameterType="TAssetBasedoc" resultMap="TAssetBasedocResult">
+        <include refid="selectTAssetBasedocVo"/>
+        <where>  
+            <if test="type != null  and type != ''"> and type = #{type}</if>
+            <if test="docName != null  and docName != ''"> and doc_name like concat('%', #{docName}, '%')</if>
+            <if test="docStatus != null  and docStatus != ''"> and doc_status = #{docStatus}</if>
+            <if test="createrCode != null  and createrCode != ''"> and creater_code = #{createrCode}</if>
+            <if test="createdate != null "> and createdate = #{createdate}</if>
+            <if test="remarks != null  and remarks != ''"> and remarks = #{remarks}</if>
+            <if test="updaterCode != null  and updaterCode != ''"> and updater_code = #{updaterCode}</if>
+            <if test="updatedate != null "> and updatedate = #{updatedate}</if>
+            <if test="deptId != null "> and dept_id = #{deptId}</if>
+        </where>
+    </select>
+    
+    <select id="selectTAssetBasedocById" parameterType="Long" resultMap="TAssetBasedocResult">
+        <include refid="selectTAssetBasedocVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertTAssetBasedoc" parameterType="TAssetBasedoc" useGeneratedKeys="true" keyProperty="id">
+        insert into t_asset_basedoc
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="type != null">type,</if>
+            <if test="docName != null">doc_name,</if>
+            <if test="docStatus != null">doc_status,</if>
+            <if test="createrCode != null">creater_code,</if>
+            <if test="createdate != null">createdate,</if>
+            <if test="remarks != null">remarks,</if>
+            <if test="delFlag != null">del_flag,</if>
+            <if test="updaterCode != null">updater_code,</if>
+            <if test="updatedate != null">updatedate,</if>
+            <if test="deptId != null">dept_id,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="type != null">#{type},</if>
+            <if test="docName != null">#{docName},</if>
+            <if test="docStatus != null">#{docStatus},</if>
+            <if test="createrCode != null">#{createrCode},</if>
+            <if test="createdate != null">#{createdate},</if>
+            <if test="remarks != null">#{remarks},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+            <if test="updaterCode != null">#{updaterCode},</if>
+            <if test="updatedate != null">#{updatedate},</if>
+            <if test="deptId != null">#{deptId},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTAssetBasedoc" parameterType="TAssetBasedoc">
+        update t_asset_basedoc
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="type != null">type = #{type},</if>
+            <if test="docName != null">doc_name = #{docName},</if>
+            <if test="docStatus != null">doc_status = #{docStatus},</if>
+            <if test="createrCode != null">creater_code = #{createrCode},</if>
+            <if test="createdate != null">createdate = #{createdate},</if>
+            <if test="remarks != null">remarks = #{remarks},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+            <if test="updaterCode != null">updater_code = #{updaterCode},</if>
+            <if test="updatedate != null">updatedate = #{updatedate},</if>
+            <if test="deptId != null">dept_id = #{deptId},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteTAssetBasedocById" parameterType="Long">
+        delete from t_asset_basedoc where id = #{id}
+    </delete>
+
+    <delete id="deleteTAssetBasedocByIds" parameterType="String">
+        delete from t_asset_basedoc where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 104 - 0
cpms-admin/src/main/resources/mapper/file/TFileMapper.xml

@@ -0,0 +1,104 @@
+<?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.cpms.project.file.mapper.TFileMapper">
+
+    <resultMap type="TFile" id="TFileResult">
+        <result property="id"    column="id"    />
+        <result property="fileUrl"    column="file_url"    />
+        <result property="fileName"    column="file_name"    />
+        <result property="fileSize"    column="file_size"    />
+        <result property="type"    column="type"    />
+        <result property="uploadDate"    column="upload_date"    />
+        <result property="uploader"    column="uploader"    />
+        <result property="remark"    column="remark"    />
+        <result property="linkId"    column="link_id"    />
+        <result property="linkName"    column="link_name"    />
+        <result property="delFlag"    column="del_flag"    />
+        <result property="pId"    column="p_id"    />
+    </resultMap>
+
+    <sql id="selectTFileVo">
+        select id, file_url, file_name, file_size, type, upload_date, uploader, remark, link_id, link_name, del_flag, p_id from t_file
+    </sql>
+
+    <select id="selectTFileList" parameterType="TFile" resultMap="TFileResult">
+        <include refid="selectTFileVo"/>
+        <where>
+            <if test="fileUrl != null  and fileUrl != ''"> and file_url = #{fileUrl}</if>
+            <if test="fileName != null  and fileName != ''"> and file_name like concat('%', #{fileName}, '%')</if>
+            <if test="fileSize != null  and fileSize != ''"> and file_size = #{fileSize}</if>
+            <if test="type != null  and type != ''"> and type = #{type}</if>
+            <if test="uploadDate != null "> and upload_date = #{uploadDate}</if>
+            <if test="uploader != null  and uploader != ''"> and uploader = #{uploader}</if>
+            <if test="linkId != null "> and link_id = #{linkId}</if>
+            <if test="linkName != null  and linkName != ''"> and link_name = #{linkName}</if>
+            <if test="pId != null "> and p_id = #{pId}</if>
+        </where>
+    </select>
+
+    <select id="selectTFileById" parameterType="Long" resultMap="TFileResult">
+        <include refid="selectTFileVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertTFile" parameterType="TFile" useGeneratedKeys="true" keyProperty="id">
+        insert into t_file
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="fileUrl != null">file_url,</if>
+            <if test="fileName != null">file_name,</if>
+            <if test="fileSize != null">file_size,</if>
+            <if test="type != null">type,</if>
+            <if test="uploadDate != null">upload_date,</if>
+            <if test="uploader != null">uploader,</if>
+            <if test="remark != null">remark,</if>
+            <if test="linkId != null">link_id,</if>
+            <if test="linkName != null">link_name,</if>
+            <if test="delFlag != null">del_flag,</if>
+            <if test="pId != null">p_id,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="fileUrl != null">#{fileUrl},</if>
+            <if test="fileName != null">#{fileName},</if>
+            <if test="fileSize != null">#{fileSize},</if>
+            <if test="type != null">#{type},</if>
+            <if test="uploadDate != null">#{uploadDate},</if>
+            <if test="uploader != null">#{uploader},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="linkId != null">#{linkId},</if>
+            <if test="linkName != null">#{linkName},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+            <if test="pId != null">#{pId},</if>
+        </trim>
+    </insert>
+
+    <update id="updateTFile" parameterType="TFile">
+        update t_file
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="fileUrl != null">file_url = #{fileUrl},</if>
+            <if test="fileName != null">file_name = #{fileName},</if>
+            <if test="fileSize != null">file_size = #{fileSize},</if>
+            <if test="type != null">type = #{type},</if>
+            <if test="uploadDate != null">upload_date = #{uploadDate},</if>
+            <if test="uploader != null">uploader = #{uploader},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="linkId != null">link_id = #{linkId},</if>
+            <if test="linkName != null">link_name = #{linkName},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+            <if test="pId != null">p_id = #{pId},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteTFileById" parameterType="Long">
+        delete from t_file where id = #{id}
+    </delete>
+
+    <delete id="deleteTFileByIds" parameterType="String">
+        delete from t_file where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 174 - 0
cpms-admin/src/main/resources/mapper/plant/TMtAgendaMapper.xml

@@ -0,0 +1,174 @@
+<?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.cpms.project.plant.mapper.TMtAgendaMapper">
+
+    <resultMap type="TMtAgenda" id="TMtAgendaResult">
+        <result property="id"    column="id"    />
+        <result property="meetingId"    column="meeting_id"    />
+        <result property="agendaType"    column="agenda_type"    />
+        <result property="agendaContent"    column="agenda_content"    />
+        <result property="workType"    column="work_type"    />
+        <result property="planType"    column="plan_type"    />
+        <result property="responsible"    column="responsible"    />
+        <result property="status"    column="status"    />
+        <result property="delFlag"    column="del_flag"    />
+        <result property="createrCode"    column="creater_code"    />
+        <result property="createdate"    column="createdate"    />
+        <result property="updaterCode"    column="updater_code"    />
+        <result property="updatedate"    column="updatedate"    />
+        <result property="deptId"    column="dept_id"    />
+        <result property="remarks"    column="remarks"    />
+        <result property="presided"    column="presided"    />
+        <result property="isHis"    column="is_his"    />
+        <result property="deadlineTime"    column="deadline_time"    />
+        <result property="subject"    column="subject"    />
+        <result property="meetingNo"    column="meeting_no"    />
+        <result property="meetingDate"    column="meeting_date"    />
+    </resultMap>
+
+    <sql id="selectTMtAgendaVo">
+        select deadline_time,id, meeting_id, agenda_type, agenda_content, work_type, plan_type, responsible, status, del_flag, creater_code, createdate, updater_code, updatedate, dept_id, remarks, presided,is_his from t_mt_agenda
+    </sql>
+    <select id="selectAgendaList" parameterType="TMtAgenda" resultMap="TMtAgendaResult">
+        select a.deadline_time,
+               a.id,
+               a.meeting_id,
+               a.agenda_type,
+               a.agenda_content,
+               a.work_type,
+               a.plan_type,
+               a.responsible,
+               a.status,
+               a.del_flag,
+               a.creater_code,
+               a.createdate,
+               a.updater_code,
+               a.updatedate,
+               a.dept_id,
+               a.remarks,
+               a.presided,
+               a.is_his,
+               b.subject,
+               b.meeting_no,
+               b.meeting_date
+        from t_mt_agenda a
+                 left join t_mt_meeting b on a.meeting_id = b.id
+        <where>
+            <if test="isHis != null ">and a.is_his = #{isHis}</if>
+            <if test="deadlineTime != null ">and a.deadline_time <![CDATA[ <= ]]> #{deadlineTime}</if>
+            <if test="workType != null  and workType != ''">and a.work_type = #{workType}</if>
+            <if test="status != null  and status != ''">and a.status = #{status}</if>
+            <if test="responsible != null">and a.responsible like concat('%',#{responsible},'%')</if>
+            and a.del_flag = 0
+            and b.del_flag = 0
+        </where>
+    </select>
+
+    <select id="selectTMtAgendaList" parameterType="TMtAgenda" resultMap="TMtAgendaResult">
+        <include refid="selectTMtAgendaVo"/>
+        <where>
+            <if test="meetingId != null  and meetingId != ''"> and meeting_id = #{meetingId}</if>
+            <if test="agendaType != null  and agendaType != ''"> and agenda_type = #{agendaType}</if>
+            <if test="agendaContent != null  and agendaContent != ''"> and agenda_content = #{agendaContent}</if>
+            <if test="workType != null  and workType != ''"> and work_type = #{workType}</if>
+            <if test="planType != null  and planType != ''"> and plan_type = #{planType}</if>
+            <if test="responsible != null  and responsible != ''"> and responsible = #{responsible}</if>
+            <if test="status != null  and status != ''"> and status = #{status}</if>
+            <if test="flag == 1"> and status != 'Finished'</if>
+            <if test="createrCode != null  and createrCode != ''"> and creater_code = #{createrCode}</if>
+            <if test="createdate != null "> and createdate = #{createdate}</if>
+            <if test="deadlineTime != null "> and deadline_time <![CDATA[ <= ]]> #{deadlineTime}</if>
+            <if test="updaterCode != null  and updaterCode != ''"> and updater_code = #{updaterCode}</if>
+            <if test="updatedate != null "> and updatedate = #{updatedate}</if>
+            <if test="deptId != null "> and dept_id = #{deptId}</if>
+            <if test="remarks != null  and remarks != ''"> and remarks = #{remarks}</if>
+            <if test="presided != null  and presided != ''"> and presided = #{presided}</if>
+            <if test="isHis != null "> and is_his = #{isHis}</if>
+        and del_flag = 0
+        </where>
+    </select>
+
+    <select id="selectTMtAgendaById" parameterType="Long" resultMap="TMtAgendaResult">
+        <include refid="selectTMtAgendaVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertTMtAgenda" parameterType="TMtAgenda" useGeneratedKeys="true" keyProperty="id">
+        insert into t_mt_agenda
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="meetingId != null and meetingId != ''">meeting_id,</if>
+            <if test="agendaType != null">agenda_type,</if>
+            <if test="agendaContent != null">agenda_content,</if>
+            <if test="workType != null">work_type,</if>
+            <if test="planType != null">plan_type,</if>
+            <if test="responsible != null">responsible,</if>
+            <if test="status != null">status,</if>
+            <if test="delFlag != null">del_flag,</if>
+            <if test="createrCode != null">creater_code,</if>
+            <if test="createdate != null">createdate,</if>
+            <if test="updaterCode != null">updater_code,</if>
+            <if test="updatedate != null">updatedate,</if>
+            <if test="deptId != null">dept_id,</if>
+            <if test="remarks != null">remarks,</if>
+            <if test="presided != null">presided,</if>
+            <if test="isHis != null">is_his,</if>
+            <if test="deadlineTime != null">deadline_time,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="meetingId != null and meetingId != ''">#{meetingId},</if>
+            <if test="agendaType != null">#{agendaType},</if>
+            <if test="agendaContent != null">#{agendaContent},</if>
+            <if test="workType != null">#{workType},</if>
+            <if test="planType != null">#{planType},</if>
+            <if test="responsible != null">#{responsible},</if>
+            <if test="status != null">#{status},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+            <if test="createrCode != null">#{createrCode},</if>
+            <if test="createdate != null">#{createdate},</if>
+            <if test="updaterCode != null">#{updaterCode},</if>
+            <if test="updatedate != null">#{updatedate},</if>
+            <if test="deptId != null">#{deptId},</if>
+            <if test="remarks != null">#{remarks},</if>
+            <if test="presided != null">#{presided},</if>
+            <if test="isHis != null">#{isHis},</if>
+            <if test="deadlineTime != null">#{deadlineTime},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTMtAgenda" parameterType="TMtAgenda">
+        update t_mt_agenda
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="meetingId != null and meetingId != ''">meeting_id = #{meetingId},</if>
+            <if test="agendaType != null">agenda_type = #{agendaType},</if>
+            <if test="agendaContent != null">agenda_content = #{agendaContent},</if>
+            <if test="workType != null">work_type = #{workType},</if>
+            <if test="planType != null">plan_type = #{planType},</if>
+            <if test="responsible != null">responsible = #{responsible},</if>
+            <if test="status != null">status = #{status},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+            <if test="createrCode != null">creater_code = #{createrCode},</if>
+            <if test="createdate != null">createdate = #{createdate},</if>
+            <if test="updaterCode != null">updater_code = #{updaterCode},</if>
+            <if test="updatedate != null">updatedate = #{updatedate},</if>
+            <if test="deptId != null">dept_id = #{deptId},</if>
+            <if test="remarks != null">remarks = #{remarks},</if>
+            <if test="presided != null">presided = #{presided},</if>
+            <if test="isHis != null">is_his = #{isHis},</if>
+            <if test="deadlineTime != null">deadline_time = #{deadlineTime},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteTMtAgendaById" parameterType="Long">
+        update t_mt_agenda set del_flag=1 where id = #{id}
+    </delete>
+
+    <delete id="deleteTMtAgendaByIds" parameterType="String">
+        update t_mt_agenda set del_flag=1 where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 149 - 0
cpms-admin/src/main/resources/mapper/plant/TMtContentMapper.xml

@@ -0,0 +1,149 @@
+<?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.cpms.project.plant.mapper.TMtContentMapper">
+
+    <resultMap type="TMtContent" id="TMtContentResult">
+        <result property="id"    column="id"    />
+        <result property="meetingId"    column="meeting_id"    />
+        <result property="agendaContent"    column="agenda_content"    />
+        <result property="workType"    column="work_type"    />
+        <result property="responsible"    column="responsible"    />
+        <result property="status"    column="status"    />
+        <result property="delFlag"    column="del_flag"    />
+        <result property="createrCode"    column="creater_code"    />
+        <result property="createdate"    column="createdate"    />
+        <result property="updaterCode"    column="updater_code"    />
+        <result property="updatedate"    column="updatedate"    />
+        <result property="deptId"    column="dept_id"    />
+        <result property="remarks"    column="remarks"    />
+        <result property="presided"    column="presided"    />
+        <result property="isHis"    column="is_his"    />
+        <result property="deadlineTime"    column="deadline_time"    />
+        <result property="meetingTitle"    column="meeting_title"    />
+        <result property="subject"    column="subject"    />
+        <result property="meetingNo"    column="meeting_no"    />
+        <result property="meetingDate"    column="meeting_date"    />
+    </resultMap>
+
+    <sql id="selectTMtContentVo">
+        select id, meeting_id, agenda_content, work_type, responsible, status, del_flag, creater_code, createdate, updater_code, updatedate, dept_id, remarks, presided, is_his, deadline_time, meeting_title from t_mt_content
+    </sql>
+
+    <select id="selectTMtContentList" parameterType="TMtContent" resultMap="TMtContentResult">
+        <include refid="selectTMtContentVo"/>
+        <where>
+            <if test="meetingId != null  and meetingId != ''"> and meeting_id = #{meetingId}</if>
+            <if test="agendaContent != null  and agendaContent != ''"> and agenda_content = #{agendaContent}</if>
+            <if test="workType != null  and workType != ''"> and work_type = #{workType}</if>
+            <if test="responsible != null  and responsible != ''"> and responsible = #{responsible}</if>
+            <if test="status != null  and status != ''"> and status = #{status}</if>
+            <if test="createrCode != null  and createrCode != ''"> and creater_code = #{createrCode}</if>
+            <if test="createdate != null "> and createdate = #{createdate}</if>
+            <if test="updaterCode != null  and updaterCode != ''"> and updater_code = #{updaterCode}</if>
+            <if test="updatedate != null "> and updatedate = #{updatedate}</if>
+            <if test="deptId != null "> and dept_id = #{deptId}</if>
+            <if test="remarks != null  and remarks != ''"> and remarks = #{remarks}</if>
+            <if test="presided != null  and presided != ''"> and presided = #{presided}</if>
+            <if test="isHis != null "> and is_his = #{isHis}</if>
+            <if test="deadlineTime != null "> and deadline_time <![CDATA[ < ]]> #{deadlineTime}</if>
+            <if test="meetingTitle != null  and meetingTitle != ''"> and meeting_title = #{meetingTitle}</if>
+        and del_flag = 0
+        </where>
+    </select>
+
+    <select id="selectContentList" parameterType="TMtContent" resultMap="TMtContentResult">
+        select a.id, a.meeting_id, a.agenda_content, a.work_type, a.responsible, a.status, a.remarks, a.presided,
+        a.is_his, a.deadline_time, a.meeting_title,b.subject,b.meeting_no,b.meeting_date from t_mt_content a
+        left join t_mt_meeting b on a.meeting_id=b.id
+        <where>
+            <if test="isHis != null ">and a.is_his = #{isHis}</if>
+            <if test="deadlineTime != null ">and a.deadline_time <![CDATA[ < ]]> #{deadlineTime}</if>
+            <if test="workType != null  and workType != ''">and a.work_type = #{workType}</if>
+            <if test="status != null  and status != ''">and a.status = #{status}</if>
+            <if test="responsible != null">and a.responsible like concat('%',#{responsible},'%')</if>
+            and a.del_flag = 0
+            and b.del_flag = 0
+        </where>
+    </select>
+
+    <select id="selectTMtContentById" parameterType="Long" resultMap="TMtContentResult">
+        <include refid="selectTMtContentVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertTMtContent" parameterType="TMtContent" useGeneratedKeys="true" keyProperty="id">
+        insert into t_mt_content
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="meetingId != null">meeting_id,</if>
+            <if test="agendaContent != null">agenda_content,</if>
+            <if test="workType != null">work_type,</if>
+            <if test="responsible != null">responsible,</if>
+            <if test="status != null">status,</if>
+            <if test="delFlag != null">del_flag,</if>
+            <if test="createrCode != null">creater_code,</if>
+            <if test="createdate != null">createdate,</if>
+            <if test="updaterCode != null">updater_code,</if>
+            <if test="updatedate != null">updatedate,</if>
+            <if test="deptId != null">dept_id,</if>
+            <if test="remarks != null">remarks,</if>
+            <if test="presided != null">presided,</if>
+            <if test="isHis != null">is_his,</if>
+            <if test="deadlineTime != null">deadline_time,</if>
+            <if test="meetingTitle != null">meeting_title,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="meetingId != null">#{meetingId},</if>
+            <if test="agendaContent != null">#{agendaContent},</if>
+            <if test="workType != null">#{workType},</if>
+            <if test="responsible != null">#{responsible},</if>
+            <if test="status != null">#{status},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+            <if test="createrCode != null">#{createrCode},</if>
+            <if test="createdate != null">#{createdate},</if>
+            <if test="updaterCode != null">#{updaterCode},</if>
+            <if test="updatedate != null">#{updatedate},</if>
+            <if test="deptId != null">#{deptId},</if>
+            <if test="remarks != null">#{remarks},</if>
+            <if test="presided != null">#{presided},</if>
+            <if test="isHis != null">#{isHis},</if>
+            <if test="deadlineTime != null">#{deadlineTime},</if>
+            <if test="meetingTitle != null">#{meetingTitle},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTMtContent" parameterType="TMtContent">
+        update t_mt_content
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="meetingId != null">meeting_id = #{meetingId},</if>
+            <if test="agendaContent != null">agenda_content = #{agendaContent},</if>
+            <if test="workType != null">work_type = #{workType},</if>
+            <if test="responsible != null">responsible = #{responsible},</if>
+            <if test="status != null">status = #{status},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+            <if test="createrCode != null">creater_code = #{createrCode},</if>
+            <if test="createdate != null">createdate = #{createdate},</if>
+            <if test="updaterCode != null">updater_code = #{updaterCode},</if>
+            <if test="updatedate != null">updatedate = #{updatedate},</if>
+            <if test="deptId != null">dept_id = #{deptId},</if>
+            <if test="remarks != null">remarks = #{remarks},</if>
+            <if test="presided != null">presided = #{presided},</if>
+            <if test="isHis != null">is_his = #{isHis},</if>
+            <if test="deadlineTime != null">deadline_time = #{deadlineTime},</if>
+            <if test="meetingTitle != null">meeting_title = #{meetingTitle},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteTMtContentById" parameterType="Long">
+        update t_mt_content set del_flag=1 where id = #{id}
+    </delete>
+
+    <delete id="deleteTMtContentByIds" parameterType="String">
+        update t_mt_content set del_flag=1 where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 126 - 0
cpms-admin/src/main/resources/mapper/plant/TMtMeetingMapper.xml

@@ -0,0 +1,126 @@
+<?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.cpms.project.plant.mapper.TMtMeetingMapper">
+
+    <resultMap type="TMtMeeting" id="TMtMeetingResult">
+        <result property="id"    column="id"    />
+        <result property="plantCode"    column="plant_code"    />
+        <result property="recorder"    column="recorder"    />
+        <result property="meetingNo"    column="meeting_no"    />
+        <result property="meetingDate"    column="meeting_date"    />
+        <result property="venue"    column="venue"    />
+        <result property="subject"    column="subject"    />
+        <result property="delFlag"    column="del_flag"    />
+        <result property="createrCode"    column="creater_code"    />
+        <result property="createdate"    column="createdate"    />
+        <result property="updaterCode"    column="updater_code"    />
+        <result property="updatedate"    column="updatedate"    />
+        <result property="deptId"    column="dept_id"    />
+        <result property="remarks"    column="remarks"    />
+        <result property="presided"    column="presided"    />
+        <result property="deptName" column="dept_name" />
+        <result property="mtType" column="mt_type" />
+    </resultMap>
+
+    <sql id="selectTMtMeetingVo">
+        select d.mt_type,d.presided,d.id, d.plant_code, d.recorder, d.meeting_no, d.meeting_date, d.venue, d.subject, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id, d.remarks ,s.dept_name from t_mt_meeting d
+      left join sys_dept s on s.dept_id = d.dept_id
+    </sql>
+
+    <select id="selectTMtMeetingList" parameterType="TMtMeeting" resultMap="TMtMeetingResult">
+        <include refid="selectTMtMeetingVo"/>
+        <where>
+            <if test="plantCode != null  and plantCode != ''"> and plant_code = #{plantCode}</if>
+            <if test="meetingNo != null  and meetingNo != ''"> and meeting_no = #{meetingNo}</if>
+            <if test="meetingDate != null "> and meeting_date = #{meetingDate}</if>
+            <if test="venue != null  and venue != ''"> and venue = #{venue}</if>
+            <if test="subject != null  and subject != ''"> and subject = #{subject}</if>
+            and d.del_flag = 0
+        </where>
+        <!-- 数据范围过滤 -->
+        ${params.dataScope}
+        order by meeting_date desc
+    </select>
+
+    <select id="selectTMtMeetingById" parameterType="Long" resultMap="TMtMeetingResult">
+        <include refid="selectTMtMeetingVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertTMtMeeting" parameterType="TMtMeeting" useGeneratedKeys="true" keyProperty="id">
+
+        insert into t_mt_meeting
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">id,</if>
+            <if test="plantCode != null and plantCode != ''">plant_code,</if>
+            <if test="recorder != null">recorder,</if>
+            <if test="meetingNo != null">meeting_no,</if>
+            <if test="meetingDate != null">meeting_date,</if>
+            <if test="venue != null">venue,</if>
+            <if test="subject != null">subject,</if>
+            <if test="delFlag != null">del_flag,</if>
+            <if test="createrCode != null">creater_code,</if>
+            <if test="createdate != null">createdate,</if>
+            <if test="updaterCode != null">updater_code,</if>
+            <if test="updatedate != null">updatedate,</if>
+            <if test="deptId != null">dept_id,</if>
+            <if test="remarks != null">remarks,</if>
+            <if test="presided != null">presided,</if>
+            <if test="mtType != null">mt_type,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="plantCode != null and plantCode != ''">#{plantCode},</if>
+            <if test="recorder != null">#{recorder},</if>
+            <if test="meetingNo != null">#{meetingNo},</if>
+            <if test="meetingDate != null">#{meetingDate},</if>
+            <if test="venue != null">#{venue},</if>
+            <if test="subject != null">#{subject},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+            <if test="createrCode != null">#{createrCode},</if>
+            <if test="createdate != null">#{createdate},</if>
+            <if test="updaterCode != null">#{updaterCode},</if>
+            <if test="updatedate != null">#{updatedate},</if>
+            <if test="deptId != null">#{deptId},</if>
+            <if test="remarks != null">#{remarks},</if>
+            <if test="presided != null">#{presided},</if>
+            <if test="mtType != null">#{mtType},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTMtMeeting" parameterType="TMtMeeting">
+        update t_mt_meeting
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="plantCode != null and plantCode != ''">plant_code = #{plantCode},</if>
+            <if test="recorder != null">recorder = #{recorder},</if>
+            <if test="meetingNo != null">meeting_no = #{meetingNo},</if>
+            <if test="meetingDate != null">meeting_date = #{meetingDate},</if>
+            <if test="venue != null">venue = #{venue},</if>
+            <if test="subject != null">subject = #{subject},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+            <if test="createrCode != null">creater_code = #{createrCode},</if>
+            <if test="createdate != null">createdate = #{createdate},</if>
+            <if test="updaterCode != null">updater_code = #{updaterCode},</if>
+            <if test="updatedate != null">updatedate = #{updatedate},</if>
+            <if test="deptId != null">dept_id = #{deptId},</if>
+            <if test="remarks != null">remarks = #{remarks},</if>
+            <if test="presided != null">presided = #{presided},</if>
+            <if test="mtType != null">mt_type = #{mtType},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <update id="deleteTMtMeetingById" parameterType="Long">
+        update t_mt_meeting set del_flag = 2 where id = #{id}
+    </update>
+
+    <update id="deleteTMtMeetingByIds" parameterType="String">
+        update t_mt_meeting set del_flag = 2 where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </update>
+
+</mapper>

+ 132 - 0
cpms-admin/src/main/resources/mapper/plant/TMtPersonMapper.xml

@@ -0,0 +1,132 @@
+<?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.cpms.project.plant.mapper.TMtPersonMapper">
+
+    <resultMap type="TMtPerson" id="TMtPersonResult">
+        <result property="id"    column="id"    />
+        <result property="plantCode"    column="plant_code"    />
+        <result property="staffid"    column="staffid"    />
+        <result property="name"    column="name"    />
+        <result property="sex"    column="sex"    />
+        <result property="unit"    column="unit"    />
+        <result property="team"    column="team"    />
+        <result property="actualpost"    column="actualpost"    />
+        <result property="contact"    column="contact"    />
+        <result property="delFlag"    column="del_flag"    />
+        <result property="createrCode"    column="creater_code"    />
+        <result property="createdate"    column="createdate"    />
+        <result property="updaterCode"    column="updater_code"    />
+        <result property="updatedate"    column="updatedate"    />
+        <result property="meetingId"    column="meeting_id"    />
+        <result property="isHis"    column="is_his"    />
+        <result property="isCc"    column="is_cc"    />
+        <result property="deptName" column="dept_name" />
+    </resultMap>
+
+    <sql id="selectTMtPersonVo">
+        select d.id, d.plant_code, d.staffid, d.name, d.sex, d.unit, d.team, d.actualpost, d.contact, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.meeting_id, d.is_his, d.is_cc ,s.dept_name from t_mt_person d
+      left join sys_dept s on s.dept_id = d.dept_id
+    </sql>
+
+    <select id="selectTMtPersonList" parameterType="TMtPerson" resultMap="TMtPersonResult">
+        <include refid="selectTMtPersonVo"/>
+        <where>
+            <if test="name != null  and name != ''"> and name like concat(concat('%', #{name}), '%')</if>
+            <if test="meetingId != null  and meetingId != ''"> and meeting_id = #{meetingId}</if>
+            <if test="meetingId == null  or meetingId == ''"> and is_his = 0</if>
+            <if test="isCc != null  and isCc != ''"> and is_cc = 1</if>
+            <if test="isCc == null"> and is_cc IS NULL</if>
+            and d.del_flag = 0
+        </where>
+        <!-- 数据范围过滤 -->
+        ${params.dataScope}
+    </select>
+
+    <select id="selectTMtPersonById" parameterType="Long" resultMap="TMtPersonResult">
+        <include refid="selectTMtPersonVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertTMtPerson" parameterType="TMtPerson">
+
+        insert into t_mt_person
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">id,</if>
+            <if test="plantCode != null and plantCode != ''">plant_code,</if>
+            <if test="staffid != null">staffid,</if>
+            <if test="name != null and name != ''">name,</if>
+            <if test="sex != null and sex != ''">sex,</if>
+            <if test="unit != null">unit,</if>
+            <if test="team != null">team,</if>
+            <if test="actualpost != null">actualpost,</if>
+            <if test="contact != null">contact,</if>
+            <if test="delFlag != null">del_flag,</if>
+            <if test="createrCode != null">creater_code,</if>
+            <if test="createdate != null">createdate,</if>
+            <if test="updaterCode != null">updater_code,</if>
+            <if test="updatedate != null">updatedate,</if>
+            <if test="meetingId != null">meeting_id,</if>
+            <if test="deptId != null">dept_id,</if>
+            <if test="isHis != null">is_his,</if>
+            <if test="isCc != null">is_cc,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="plantCode != null and plantCode != ''">#{plantCode},</if>
+            <if test="staffid != null">#{staffid},</if>
+            <if test="name != null and name != ''">#{name},</if>
+            <if test="sex != null and sex != ''">#{sex},</if>
+            <if test="unit != null">#{unit},</if>
+            <if test="team != null">#{team},</if>
+            <if test="actualpost != null">#{actualpost},</if>
+            <if test="contact != null">#{contact},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+            <if test="createrCode != null">#{createrCode},</if>
+            <if test="createdate != null">#{createdate},</if>
+            <if test="updaterCode != null">#{updaterCode},</if>
+            <if test="updatedate != null">#{updatedate},</if>
+            <if test="meetingId != null">#{meetingId},</if>
+            <if test="deptId != null">#{deptId},</if>
+            <if test="isHis != null">#{isHis},</if>
+            <if test="isCc != null">#{isCc},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTMtPerson" parameterType="TMtPerson">
+        update t_mt_person
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="plantCode != null and plantCode != ''">plant_code = #{plantCode},</if>
+            <if test="staffid != null">staffid = #{staffid},</if>
+            <if test="name != null and name != ''">name = #{name},</if>
+            <if test="sex != null and sex != ''">sex = #{sex},</if>
+            <if test="unit != null">unit = #{unit},</if>
+            <if test="team != null">team = #{team},</if>
+            <if test="actualpost != null">actualpost = #{actualpost},</if>
+            <if test="contact != null">contact = #{contact},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+            <if test="createrCode != null">creater_code = #{createrCode},</if>
+            <if test="createdate != null">createdate = #{createdate},</if>
+            <if test="updaterCode != null">updater_code = #{updaterCode},</if>
+            <if test="updatedate != null">updatedate = #{updatedate},</if>
+            <if test="meetingId != null">meeting_id = #{meetingId},</if>
+            <if test="isHis != null">is_his = #{isHis},</if>
+            <if test="isCc != null">is_cc = #{isCc},</if>
+            <if test="deptId != null">dept_id = #{deptId},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <update id="deleteTMtPersonById" parameterType="Long">
+        update t_mt_person set del_flag = 2 where id = #{id}
+    </update>
+
+    <update id="deleteTMtPersonByIds" parameterType="String">
+        update t_mt_person set del_flag = 2 where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </update>
+
+</mapper>

+ 1 - 3
cpms-admin/src/main/resources/mapper/process/TClassdOverviewMapper.xml

@@ -56,10 +56,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         where id = #{id}
     </select>
         
-    <insert id="insertTClassdOverview" parameterType="TClassdOverview">
+    <insert id="insertTClassdOverview" parameterType="TClassdOverview"  useGeneratedKeys="true" keyProperty="id">
         insert into t_classd_overview
         <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="id != null">id,</if>
             <if test="discussionItem != null">discussion_item,</if>
             <if test="hazard != null">hazard,</if>
             <if test="cause != null">cause,</if>
@@ -79,7 +78,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="deptId != null">dept_id,</if>
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="id != null">#{id},</if>
             <if test="discussionItem != null">#{discussionItem},</if>
             <if test="hazard != null">#{hazard},</if>
             <if test="cause != null">#{cause},</if>

+ 1 - 3
cpms-admin/src/main/resources/mapper/process/TSifOverviewMapper.xml

@@ -60,10 +60,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         where id = #{id}
     </select>
         
-    <insert id="insertTSifOverview" parameterType="TSifOverview">
+    <insert id="insertTSifOverview" parameterType="TSifOverview" useGeneratedKeys="true" keyProperty="id">
         insert into t_sif_overview
         <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="id != null">id,</if>
             <if test="sifNo != null">sif_no,</if>
             <if test="deviation != null">deviation,</if>
             <if test="sheNo != null">she_no,</if>
@@ -85,7 +84,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="deptId != null">dept_id,</if>
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="id != null">#{id},</if>
             <if test="sifNo != null">#{sifNo},</if>
             <if test="deviation != null">#{deviation},</if>
             <if test="sheNo != null">#{sheNo},</if>

BIN
cpms-admin/src/main/resources/static/template/process/classd.xlsx


+ 9 - 0
cpms-common/src/main/java/com/cpms/common/utils/DictUtils.java

@@ -183,4 +183,13 @@ public class DictUtils
     {
         return CacheConstants.SYS_DICT_KEY + configKey;
     }
+
+    public static String getDictVale(List<SysDictData> list , String value){
+        for (SysDictData p : list) {
+            if (p.getDictValue().equals(value)) {
+                return  p.getDictLabel();
+            }
+        }
+        return value;
+    }
 }

+ 39 - 0
cpms-common/src/main/java/com/cpms/common/utils/poi/POIConstants.java

@@ -0,0 +1,39 @@
+package com.cpms.common.utils.poi;
+/**
+ * poi常量
+ * @author bzm
+ * 2020-8-25
+ */
+public class POIConstants {
+
+	//字体
+	public static final String FONT_NAME ="微软雅黑";
+
+	//字体大小
+	public static final String FONT_SIAZE ="7";
+	//字体大小
+	public static final String MT_FONT_SIZE ="10";
+	//字体大小 0:不加粗,1:加粗
+	public static final Integer FONT_BOLD = 0;
+
+	//字体大小 0:不加粗,1:加粗
+	public static final Integer FONT_BOLD_C = 1;
+	//单元格对齐方式-横向
+	public static final String ALIGNMENT ="center";
+
+	//单元格对齐方式-垂直方向
+	public static final String VERTICAL ="center";
+
+	//字体颜色
+	public static final String FONT_COLOR ="#000000";
+
+	//表格标题背景颜色
+	public static final String BG_TITLE_COLOR ="#80bdf9";
+	public static final String MT_BG_TITLE_COLOR ="#FFFFFF";
+	//表格内容背景颜色
+	public static final String BG_COLOR ="#FFFFFF";
+
+	//单元格宽度:Set the width to the value "auto", an integer value (20ths of a point), or a percentage ("nn.nn%")
+	public static final String CELL_WIDTH ="auto";
+
+}

+ 777 - 0
cpms-common/src/main/java/com/cpms/common/utils/poi/PoiWordTools.java

@@ -0,0 +1,777 @@
+package com.cpms.common.utils.poi;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.ooxml.POIXMLDocumentPart;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.xssf.streaming.SXSSFWorkbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.apache.poi.xwpf.usermodel.XWPFChart;
+import org.apache.poi.xwpf.usermodel.XWPFTableCell;
+import org.openxmlformats.schemas.drawingml.x2006.chart.*;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.*;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * poi生成word的工具类
+ * 针对于模板中的图表是静态的,也就是模板中的图表长什么样子不会根据数据而改变
+ * https://blog.csdn.net/u014427811/article/details/100771314
+ */
+public class PoiWordTools {
+
+    private static final BigDecimal bd2 = new BigDecimal("2");
+
+
+    /**
+     * 调用替换雷达图数据
+     */
+    public static void replaceRadarCharts(POIXMLDocumentPart poixmlDocumentPart,
+                                          List<String> titleArr, List<String> fldNameArr, List<Map<String, String>> listItemsByType) {
+        XWPFChart chart = (XWPFChart) poixmlDocumentPart;
+        chart.getCTChart();
+
+        //根据属性第一列名称切换数据类型
+        CTChart ctChart = chart.getCTChart();
+        CTPlotArea plotArea = ctChart.getPlotArea();
+
+        // 设置标题
+        // PoiWordTitle.setBarTitle(ctChart, "我是雷达图标题");
+
+        CTRadarChart radarChart = plotArea.getRadarChartArray(0);
+        List<CTRadarSer> radarList = radarChart.getSerList();  // 获取雷达图单位
+
+        //刷新内置excel数据
+        PoiWordTools.refreshExcel(chart, listItemsByType, fldNameArr, titleArr);
+        //刷新页面显示数据
+        refreshRadarStrGraphContent(radarChart, radarList, listItemsByType, fldNameArr, 1);
+
+
+    }
+
+
+    /**
+     * 调用替换柱状图数据
+     */
+    public static void replaceBarCharts(POIXMLDocumentPart poixmlDocumentPart,
+                                        List<String> titleArr, List<String> fldNameArr, List<Map<String, String>> listItemsByType) {
+        XWPFChart chart = (XWPFChart) poixmlDocumentPart;
+        chart.getCTChart();
+
+        //根据属性第一列名称切换数据类型
+        CTChart ctChart = chart.getCTChart();
+        CTPlotArea plotArea = ctChart.getPlotArea();
+
+        // 设置标题
+       // PoiWordTitle.setBarTitle(ctChart, "我是修改后的标题");
+
+        CTBarChart barChart = plotArea.getBarChartArray(0);
+        List<CTBarSer> BarSerList = barChart.getSerList();  // 获取柱状图单位
+
+        //刷新内置excel数据
+        PoiWordTools.refreshExcel(chart, listItemsByType, fldNameArr, titleArr);
+        //刷新页面显示数据
+        refreshBarStrGraphContent(barChart, BarSerList, listItemsByType, fldNameArr, 1);
+
+
+    }
+
+
+    /**
+     * 调用替换折线图数据
+     */
+    public static void replaceLineCharts(POIXMLDocumentPart poixmlDocumentPart,
+                                         List<String> titleArr, List<String> fldNameArr, List<Map<String, String>> listItemsByType) {
+        XWPFChart chart = (XWPFChart) poixmlDocumentPart;
+        chart.getCTChart();
+
+        //根据属性第一列名称切换数据类型
+        CTChart ctChart = chart.getCTChart();
+        CTPlotArea plotArea = ctChart.getPlotArea();
+
+        CTLineChart lineChart = plotArea.getLineChartArray(0);
+        List<CTLineSer> lineSerList = lineChart.getSerList();   // 获取折线图单位
+
+        //刷新内置excel数据
+         PoiWordTools.refreshExcel(chart, listItemsByType, fldNameArr, titleArr);
+        //刷新页面显示数据
+        PoiWordTools.refreshLineStrGraphContent(lineChart, lineSerList, listItemsByType, fldNameArr, 1);
+
+    }
+
+
+    /**
+     * 调用替换饼图数据
+     */
+    public static void replacePieCharts(POIXMLDocumentPart poixmlDocumentPart,
+                                        List<String> titleArr, List<String> fldNameArr, List<Map<String, String>> listItemsByType) {
+        XWPFChart chart = (XWPFChart) poixmlDocumentPart;
+        chart.getCTChart();
+
+        //根据属性第一列名称切换数据类型
+        CTChart ctChart = chart.getCTChart();
+        CTPlotArea plotArea = ctChart.getPlotArea();
+
+        CTPieChart pieChart = plotArea.getPieChartArray(0);
+        List<CTPieSer> pieSerList = pieChart.getSerList();  // 获取饼图单位
+
+        //刷新内置excel数据
+        PoiWordTools.refreshExcel(chart, listItemsByType, fldNameArr, titleArr);
+        //刷新页面显示数据
+        PoiWordTools.refreshPieStrGraphContent(pieChart, pieSerList, listItemsByType, fldNameArr, 1);
+
+    }
+
+
+    /**
+     *  调用替换柱状图、折线图组合数据
+     *  eg:3项(2柱状,1折线)
+     * @param poixmlDocumentPart
+     * @param titleArr
+     * @param fldNameArr
+     * @param listItemsByType
+     * @param barPos 柱状图数据起始位置
+     * @param linePos 折线图数据起始位置
+     */
+    public static void replaceCombinationCharts(POIXMLDocumentPart poixmlDocumentPart,
+                                                List<String> titleArr, List<String> fldNameArr, List<Map<String, String>> listItemsByType,
+                                                int barPos,int linePos) {
+        XWPFChart chart = (XWPFChart) poixmlDocumentPart;
+        chart.getCTChart();
+        //根据属性第一列名称切换数据类型
+        CTChart ctChart = chart.getCTChart();
+        CTPlotArea plotArea = ctChart.getPlotArea();
+        CTBarChart barChart = plotArea.getBarChartArray(0);
+        List<CTBarSer> barSerList = barChart.getSerList();  // 获取柱状图单位
+        //刷新内置excel数据
+        PoiWordTools.refreshExcel(chart, listItemsByType, fldNameArr, titleArr);
+        //刷新页面显示数据   数据中下标1开始的是柱状图数据,所以这个是1
+        refreshBarStrGraphContent(barChart, barSerList, listItemsByType, fldNameArr, barPos);
+        CTLineChart lineChart = plotArea.getLineChartArray(0);
+        List<CTLineSer> lineSerList = lineChart.getSerList();   // 获取折线图单位
+        //刷新内置excel数据   有一个就可以了    有一个就可以了    有一个就可以了
+        //PoiWordTools.refreshExcel(chart, listItemsByType, fldNameArr, titleArr);
+        //刷新页面显示数据   数据中下标3开始的是折线图的数据,所以这个是3
+        PoiWordTools.refreshLineStrGraphContent(lineChart, lineSerList, listItemsByType, fldNameArr, linePos);
+
+    }
+
+
+    /**
+     * 刷新折线图数据方法
+     *
+     * @param typeChart
+     * @param serList
+     * @param dataList
+     * @param fldNameArr
+     * @param position
+     * @return
+     */
+    @SuppressWarnings("unused")
+	public static boolean refreshLineStrGraphContent(Object typeChart,
+                                                     List<?> serList, List<Map<String, String>> dataList, List<String> fldNameArr, int position) {
+
+        boolean result = true;
+        //更新数据区域
+        for (int i = 0; i < serList.size(); i++) {
+            CTAxDataSource cat = null;
+            CTNumDataSource val = null;
+            CTLineSer ser = ((CTLineChart) typeChart).getSerArray(i);
+            // 设置标题
+            CTSerTx tx = ser.getTx();
+         //   tx.getStrRef().getStrCache().getPtList().get(0).setV("阿里嘎痛"); // wps和office都能打开
+
+            // Category Axis Data
+            cat = ser.getCat();
+            // 获取图表的值
+            val = ser.getVal();
+            // strData.set
+            CTStrData strData = cat.getStrRef().getStrCache();
+            CTNumData numData = val.getNumRef().getNumCache();
+            strData.setPtArray((CTStrVal[]) null); // unset old axis text
+            numData.setPtArray((CTNumVal[]) null); // unset old values
+
+            // set model
+            long idx = 0;
+            for (int j = 0; j < dataList.size(); j++) {
+                //判断获取的值是否为空
+                String value = "0";
+                String cc =dataList.get(j).get(fldNameArr.get(i + position)) == null ? "0" :dataList.get(j).get(fldNameArr.get(i + position));
+                value = new BigDecimal(cc).toString();
+              //  if (!"0".equals(value)) {
+                    CTNumVal numVal = numData.addNewPt();//序列值
+                    numVal.setIdx(idx);
+                    numVal.setV(value);
+               // }
+                CTStrVal sVal = strData.addNewPt();//序列名称
+                sVal.setIdx(idx);
+                sVal.setV(dataList.get(j).get(fldNameArr.get(0)));
+                idx++;
+            }
+            numData.getPtCount().setVal(idx);
+            strData.getPtCount().setVal(idx);
+
+
+            //赋值横坐标数据区域
+            String axisDataRange = new CellRangeAddress(1, dataList.size(), 0, 0)
+                    .formatAsString("Sheet1", false);
+            cat.getStrRef().setF(axisDataRange);
+
+            //数据区域
+            String numDataRange = new CellRangeAddress(1, dataList.size(), i + position, i + position)
+                    .formatAsString("Sheet1", false);
+            val.getNumRef().setF(numDataRange);
+
+            // 设置系列生成方向
+
+
+        }
+        return result;
+    }
+
+
+    /**
+     * 刷新柱状图数据方法
+     *
+     * @param typeChart
+     * @param serList
+     * @param dataList
+     * @param fldNameArr
+     * @param position
+     * @return
+     */
+    @SuppressWarnings("unused")
+	public static boolean refreshBarStrGraphContent(Object typeChart,
+                                                    List<?> serList, List<Map<String, String>> dataList, List<String> fldNameArr, int position) {
+        boolean result = true;
+        //更新数据区域
+        for (int i = 0; i < serList.size(); i++) {
+            CTAxDataSource cat = null;
+            CTNumDataSource val = null;
+            CTBarSer ser = ((CTBarChart) typeChart).getSerArray(i);
+
+            // 设置标题 用以下这个方式,可以兼容office和wps
+            CTSerTx tx = ser.getTx();
+          //  tx.getStrRef().getStrCache().getPtList().get(0).setV("柱状图1");//设置图例
+            // Category Axis Data
+            cat = ser.getCat();
+            // 获取图表的值
+            val = ser.getVal();
+            // strData.set
+            CTStrData strData = cat.getStrRef().getStrCache();
+            CTNumData numData = val.getNumRef().getNumCache();
+            strData.setPtArray((CTStrVal[]) null); // unset old axis text
+            numData.setPtArray((CTNumVal[]) null); // unset old values
+
+            // set model
+            long idx = 0;
+            for (int j = 0; j < dataList.size(); j++) {
+                //判断获取的值是否为空
+                String value = "0";
+                if (new BigDecimal(dataList.get(j).get(fldNameArr.get(i + position))) != null) {
+                    value = new BigDecimal(dataList.get(j).get(fldNameArr.get(i + position))).toString();
+                }
+                if (!"0".equals(value)) {
+                    CTNumVal numVal = numData.addNewPt();//序列值
+                    numVal.setIdx(idx);
+                    numVal.setV(value);
+                }
+                CTStrVal sVal = strData.addNewPt();//序列名称
+                sVal.setIdx(idx);
+                sVal.setV(dataList.get(j).get(fldNameArr.get(0)));
+                idx++;
+            }
+            numData.getPtCount().setVal(idx);
+            strData.getPtCount().setVal(idx);
+
+
+            //赋值横坐标数据区域
+            String axisDataRange = new CellRangeAddress(1, dataList.size(), 0, 0)
+                    .formatAsString("Sheet1", true);
+            cat.getStrRef().setF(axisDataRange);
+
+            //数据区域
+            String numDataRange = new CellRangeAddress(1, dataList.size(), i + position, i + position)
+                    .formatAsString("Sheet1", true);
+            val.getNumRef().setF(numDataRange);
+
+
+        }
+        return result;
+    }
+
+
+    /**
+     * 刷新饼图数据方法
+     *
+     * @param typeChart
+     * @param serList
+     * @param dataList
+     * @param fldNameArr
+     * @param position
+     * @return
+     */
+    public static boolean refreshPieStrGraphContent(Object typeChart,
+                                                    List<?> serList, List<Map<String, String>> dataList, List<String> fldNameArr, int position) {
+
+        boolean result = true;
+        //更新数据区域
+        for (int i = 0; i < serList.size(); i++) {
+            //CTSerTx tx=null;
+            CTAxDataSource cat = null;
+            CTNumDataSource val = null;
+            CTPieSer ser = ((CTPieChart) typeChart).getSerArray(i);
+
+            //tx.getStrRef().getStrCache().getPtList().get(0).setV("阿里嘎痛");
+            // Category Axis Data
+            cat = ser.getCat();
+            // 获取图表的值
+            val = ser.getVal();
+            // strData.set
+            CTStrData strData = cat.getStrRef().getStrCache();
+            CTNumData numData = val.getNumRef().getNumCache();
+            strData.setPtArray((CTStrVal[]) null); // unset old axis text
+            numData.setPtArray((CTNumVal[]) null); // unset old values
+
+            // set model
+            long idx = 0;
+            for (int j = 0; j < dataList.size(); j++) {
+                //判断获取的值是否为空
+                String value = "0";
+                if (new BigDecimal(dataList.get(j).get(fldNameArr.get(i + position))) != null) {
+                    value = new BigDecimal(dataList.get(j).get(fldNameArr.get(i + position))).toString();
+                }
+                if (!"0".equals(value)) {
+                    CTNumVal numVal = numData.addNewPt();//序列值
+                    numVal.setIdx(idx);
+                    numVal.setV(value);
+                }
+                CTStrVal sVal = strData.addNewPt();//序列名称
+                sVal.setIdx(idx);
+                sVal.setV(dataList.get(j).get(fldNameArr.get(0)));
+                idx++;
+            }
+            numData.getPtCount().setVal(idx);
+            strData.getPtCount().setVal(idx);
+
+
+            //赋值横坐标数据区域
+            String axisDataRange = new CellRangeAddress(1, dataList.size(), 0, 0)
+                    .formatAsString("Sheet1", true);
+            cat.getStrRef().setF(axisDataRange);
+
+            //数据区域
+            String numDataRange = new CellRangeAddress(1, dataList.size(), i + position, i + position)
+                    .formatAsString("Sheet1", true);
+            val.getNumRef().setF(numDataRange);
+        }
+        return result;
+    }
+
+
+    /**
+     * 刷新内置excel数据
+     *
+     * @param chart
+     * @param dataList
+     * @param fldNameArr
+     * @param titleArr
+     * @return
+     */
+    public static boolean refreshExcel(XWPFChart chart,
+                                       List<Map<String, String>> dataList, List<String> fldNameArr, List<String> titleArr) {
+        boolean result = true;
+        Workbook wb = new SXSSFWorkbook(1000);
+        Sheet sheet = wb.createSheet("Sheet1");
+        //根据数据创建excel第一行标题行
+        for (int i = 0; i < titleArr.size(); i++) {
+            if (sheet.getRow(0) == null) {
+                sheet.createRow(0).createCell(i).setCellValue(titleArr.get(i) == null ? "" : titleArr.get(i));
+            } else {
+                sheet.getRow(0).createCell(i).setCellValue(titleArr.get(i) == null ? "" : titleArr.get(i));
+            }
+        }
+
+        //遍历数据行
+        for (int i = 0; i < dataList.size(); i++) {
+            Map<String, String> baseFormMap = dataList.get(i);//数据行
+            //fldNameArr字段属性
+            for (int j = 0; j < fldNameArr.size(); j++) {
+                if (sheet.getRow(i + 1) == null) {
+                    if (j == 0) {
+                        try {
+                            sheet.createRow(i + 1).createCell(j).setCellValue(baseFormMap.get(fldNameArr.get(j)) == null ? "" : baseFormMap.get(fldNameArr.get(j)));
+                        } catch (Exception e) {
+                            if (baseFormMap.get(fldNameArr.get(j)) == null) {
+                                sheet.createRow(i + 1).createCell(j).setCellValue("");
+                            } else {
+                                sheet.createRow(i + 1).createCell(j).setCellValue(baseFormMap.get(fldNameArr.get(j)));
+                            }
+                        }
+                    }
+                } else {
+                    BigDecimal b = new BigDecimal(baseFormMap.get(fldNameArr.get(j)) == null ? "0" :baseFormMap.get(fldNameArr.get(j)));
+                    double value = 0d;
+                    if (b != null) {
+                        value = b.doubleValue();
+                    }
+                    if (value == 0) {
+                        sheet.getRow(i + 1).createCell(j);
+                    } else {
+                        sheet.getRow(i + 1).createCell(j).setCellValue(b.doubleValue());
+                    }
+                }
+            }
+
+        }
+        // 更新嵌入的workbook
+        POIXMLDocumentPart xlsPart = chart.getRelations().get(0);
+        OutputStream xlsOut = xlsPart.getPackagePart().getOutputStream();
+
+        try {
+            wb.write(xlsOut);
+            xlsOut.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+            result = false;
+        } finally {
+            if (wb != null) {
+                try {
+                    wb.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                    result = false;
+                }
+            }
+        }
+        return result;
+    }
+
+
+    /**
+     * 设置表格样式
+     *
+     * @param cell
+     * @param fontName
+     * @param fontSize
+     * @param fontBlod
+     * @param alignment
+     * @param vertical
+     * @param fontColor
+     * @param bgColor
+     * @param cellWidth
+     * @param content
+     */
+    public static void setWordCellSelfStyle(XWPFTableCell cell, String fontName, String fontSize, int fontBlod,
+                                            String alignment, String vertical, String fontColor,
+                                            String bgColor, String cellWidth, String content) {
+
+        //poi对字体大小设置特殊,不支持小数,但对原word字体大小做了乘2处理
+        BigInteger bFontSize = new BigInteger("24");
+        if (fontSize != null && !fontSize.equals("")) {
+            //poi对字体大小设置特殊,不支持小数,但对原word字体大小做了乘2处理
+            BigDecimal fontSizeBD = new BigDecimal(fontSize);
+            fontSizeBD = bd2.multiply(fontSizeBD);
+            fontSizeBD = fontSizeBD.setScale(0, BigDecimal.ROUND_HALF_UP);//这里取整
+            bFontSize = new BigInteger(fontSizeBD.toString());// 字体大小
+        }
+
+        // 设置单元格宽度
+        cell.setWidth(cellWidth);
+
+        //=====获取单元格
+        CTTc tc = cell.getCTTc();
+        //====tcPr开始====》》》》
+        CTTcPr tcPr = tc.getTcPr();//获取单元格里的<w:tcPr>
+        if (tcPr == null) {//没有<w:tcPr>,创建
+            tcPr = tc.addNewTcPr();
+        }
+
+         //  --vjc开始-->>
+        CTVerticalJc vjc = tcPr.getVAlign();//获取<w:tcPr>  的<w:vAlign w:val="center"/>
+        if (vjc == null) {//没有<w:w:vAlign/>,创建
+            vjc = tcPr.addNewVAlign();
+        }
+        //设置单元格对齐方式
+        vjc.setVal(vertical.equals("top") ? STVerticalJc.TOP : vertical.equals("bottom") ? STVerticalJc.BOTTOM : STVerticalJc.CENTER); //垂直对齐
+
+        CTShd shd = tcPr.getShd();//获取<w:tcPr>里的<w:shd w:val="clear" w:color="auto" w:fill="C00000"/>
+        if (shd == null) {//没有<w:shd>,创建
+            shd = tcPr.addNewShd();
+        }
+        // 设置背景颜色
+        shd.setFill(bgColor.substring(1));
+        //《《《《====tcPr结束====
+
+        //====p开始====》》》》
+        CTP p = tc.getPList().get(0);//获取单元格里的<w:p w:rsidR="00C36068" w:rsidRPr="00B705A0" w:rsidRDefault="00C36068" w:rsidP="00C36068">
+
+        //---ppr开始--->>>
+        CTPPr ppr = p.getPPr();//获取<w:p>里的<w:pPr>
+        if (ppr == null) {//没有<w:pPr>,创建
+            ppr = p.addNewPPr();
+        }
+        //  --jc开始-->>
+        CTJc jc = ppr.getJc();//获取<w:pPr>里的<w:jc w:val="left"/>
+        if (jc == null) {//没有<w:jc/>,创建
+            jc = ppr.addNewJc();
+        }
+        //设置单元格对齐方式
+        jc.setVal(alignment.equals("left") ? STJc.LEFT : alignment.equals("right") ? STJc.RIGHT : STJc.CENTER); //水平对齐
+        //  <<--jc结束--
+        //  --pRpr开始-->>
+        CTParaRPr pRpr = ppr.getRPr(); //获取<w:pPr>里的<w:rPr>
+        if (pRpr == null) {//没有<w:rPr>,创建
+            pRpr = ppr.addNewRPr();
+        }
+        CTFonts pfont = pRpr.getRFonts();//获取<w:rPr>里的<w:rFonts w:ascii="宋体" w:eastAsia="宋体" w:hAnsi="宋体"/>
+        if (pfont == null) {//没有<w:rPr>,创建
+            pfont = pRpr.addNewRFonts();
+        }
+        //设置字体
+        pfont.setAscii(fontName);
+        pfont.setEastAsia(fontName);
+        pfont.setHAnsi(fontName);
+
+        CTOnOff pb = pRpr.getB();//获取<w:rPr>里的<w:b/>
+        if (pb == null) {//没有<w:b/>,创建
+            pb = pRpr.addNewB();
+        }
+        //设置字体是否加粗
+        pb.setVal(fontBlod == 1 ? STOnOff.ON : STOnOff.OFF);
+
+        CTHpsMeasure psz = pRpr.getSz();//获取<w:rPr>里的<w:sz w:val="32"/>
+        if (psz == null) {//没有<w:sz w:val="32"/>,创建
+            psz = pRpr.addNewSz();
+        }
+        // 设置单元格字体大小
+        psz.setVal(bFontSize);
+        CTHpsMeasure pszCs = pRpr.getSzCs();//获取<w:rPr>里的<w:szCs w:val="32"/>
+        if (pszCs == null) {//没有<w:szCs w:val="32"/>,创建
+            pszCs = pRpr.addNewSzCs();
+        }
+        // 设置单元格字体大小
+        pszCs.setVal(bFontSize);
+        //  <<--pRpr结束--
+        //<<<---ppr结束---
+
+        //---r开始--->>>
+        List<CTR> rlist = p.getRList(); //获取<w:p>里的<w:r w:rsidRPr="00B705A0">
+        CTR r = null;
+        if (rlist != null && rlist.size() > 0) {//获取第一个<w:r>
+            r = rlist.get(0);
+        } else {//没有<w:r>,创建
+            r = p.addNewR();
+        }
+        //--rpr开始-->>
+        CTRPr rpr = r.getRPr();//获取<w:r w:rsidRPr="00B705A0">里的<w:rPr>
+        if (rpr == null) {//没有<w:rPr>,创建
+            rpr = r.addNewRPr();
+        }
+        //->-
+        CTFonts font = rpr.getRFonts();//获取<w:rPr>里的<w:rFonts w:ascii="宋体" w:eastAsia="宋体" w:hAnsi="宋体" w:hint="eastAsia"/>
+        if (font == null) {//没有<w:rFonts>,创建
+            font = rpr.addNewRFonts();
+        }
+        //设置字体
+        font.setAscii(fontName);
+        font.setEastAsia(fontName);
+        font.setHAnsi(fontName);
+
+        CTOnOff b = rpr.getB();//获取<w:rPr>里的<w:b/>
+        if (b == null) {//没有<w:b/>,创建
+            b = rpr.addNewB();
+        }
+        //设置字体是否加粗
+        b.setVal(fontBlod == 1 ? STOnOff.ON : STOnOff.OFF);
+        CTColor color = rpr.getColor();//获取<w:rPr>里的<w:color w:val="FFFFFF" w:themeColor="background1"/>
+        if (color == null) {//没有<w:color>,创建
+            color = rpr.addNewColor();
+        }
+        if(StringUtils.isNotEmpty(content)){
+    	// 设置字体颜色
+           if (content.contains("↓")) {
+               color.setVal("43CD80");
+           } else if (content.contains("↑")) {
+               color.setVal("943634");
+           } else {
+               color.setVal(fontColor.substring(1));
+           }
+        }else {
+            color.setVal(fontColor.substring(1));
+        }
+        CTHpsMeasure sz = rpr.getSz();
+        if (sz == null) {
+            sz = rpr.addNewSz();
+        }
+        sz.setVal(bFontSize);
+        CTHpsMeasure szCs = rpr.getSzCs();
+        if (szCs == null) {
+            szCs = rpr.addNewSz();
+        }
+        szCs.setVal(bFontSize);
+        //-<-
+        //<<--rpr结束--
+        List<CTText> tlist = r.getTList();
+        CTText t = null;
+        if (tlist != null && tlist.size() > 0) {//获取第一个<w:r>
+            t = tlist.get(0);
+        } else {//没有<w:r>,创建
+            t = r.addNewT();
+        }
+        content = (content != null && !content.equals("null"))? content :"";
+        t.setStringValue(content);
+        //<<<---r结束---
+    }
+
+
+    /**
+     * 获取内置表格数据,拿到第一行第一列格子数据
+     * 有时候模板设计太复杂,对于图表不能精准定位,可以通过设置图表表格数据的第一行第一列格子数据来区分,这个数据不影响图表显示,所以用来区分每个图表
+     */
+    @SuppressWarnings({ "deprecation", "resource" })
+	public static String getZeroData(POIXMLDocumentPart poixmlDocumentPart) {
+        String text = "";
+        try {
+            XWPFChart chart = (XWPFChart) poixmlDocumentPart;
+            chart.getCTChart();
+
+            POIXMLDocumentPart xlsPart = chart.getRelations().get(0);
+            InputStream xlsin = xlsPart.getPackagePart().getInputStream();
+
+            Workbook workbook = new XSSFWorkbook(xlsin);
+            // 获取第一个sheet
+            Sheet sheet = workbook.getSheetAt(0);
+            // 第一行
+            Row row = sheet.getRow(0);
+            // 第一列
+            Cell cell = row.getCell(0);
+
+            cell.setCellType(CellType.STRING);  // 设置一下格子类型为字符串,不然如果是数字或者时间的话,获取很麻烦
+            text = cell.getStringCellValue();   // 获取格子内容
+
+            System.out.println("(0,0)格子值:" + text);
+
+            // 关闭流
+            xlsin.close();
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+
+        return text;
+    }
+
+
+    /**
+     * 刷新雷达图数据方法
+     *
+     * @param typeChart
+     * @param serList
+     * @param dataList
+     * @param fldNameArr
+     * @param position
+     * @return
+     */
+    public static boolean refreshRadarStrGraphContent(Object typeChart,
+                                                      List<?> serList, List<Map<String, String>> dataList, List<String> fldNameArr, int position) {
+        boolean result = true;
+        //更新数据区域
+        for (int i = 0; i < serList.size(); i++) {
+            CTAxDataSource cat = null;
+            CTNumDataSource val = null;
+            CTRadarSer ser = ((CTRadarChart) typeChart).getSerArray(i);
+
+
+            // 设置标题 用以下这个方式,可以兼容office和wps
+            CTSerTx tx = ser.getTx();
+            tx.getStrRef().getStrCache().getPtList().get(0).setV("嘿嘿嘿");
+
+            // Category Axis Data
+            cat = ser.getCat();
+            // 获取图表的值
+            val = ser.getVal();
+
+            // strData.set
+            if (null != cat.getNumRef()) {
+                cat.unsetNumRef();
+            }
+            if (null != cat.getStrRef()) {
+                cat.unsetStrRef();
+            }
+            cat.addNewStrRef().addNewStrCache();
+
+            CTStrData strData = cat.getStrRef().getStrCache();
+            CTNumData numData = val.getNumRef().getNumCache();
+            strData.setPtArray((CTStrVal[]) null); // unset old axis text
+            numData.setPtArray((CTNumVal[]) null); // unset old values
+
+            // set model
+            long idx = 0;
+            for (int j = 0; j < dataList.size(); j++) {
+                //判断获取的值是否为空
+                String value = "0";
+                if (new BigDecimal(dataList.get(j).get(fldNameArr.get(i + position))) != null) {
+                    value = new BigDecimal(dataList.get(j).get(fldNameArr.get(i + position))).toString();
+                }
+                if (!"0".equals(value)) {
+                    CTNumVal numVal = numData.addNewPt();//序列值
+                    numVal.setIdx(idx);
+                    numVal.setV(value);
+                }
+                CTStrVal sVal = strData.addNewPt();//序列名称
+                sVal.setIdx(idx);
+                sVal.setV(dataList.get(j).get(fldNameArr.get(0)));
+                idx++;
+            }
+            strData.addNewPtCount().setVal(idx);
+            numData.getPtCount().setVal(idx);
+
+
+            //赋值横坐标数据区域
+            String axisDataRange = new CellRangeAddress(1, dataList.size(), 0, 0)
+                    .formatAsString("Sheet1", true);
+            cat.getStrRef().setF(axisDataRange);
+
+            //数据区域
+            String numDataRange = new CellRangeAddress(1, dataList.size(), i + position, i + position)
+                    .formatAsString("Sheet1", true);
+            val.getNumRef().setF(numDataRange);
+
+
+        }
+        return result;
+    }
+    /**
+     * 将输入流中的数据写入字节数组
+     * @param in
+     * @return
+     */
+    public static byte[] inputStream2ByteArray(InputStream in, boolean isClose){
+        byte[] byteArray = null;
+        try {
+            int total = in.available();
+            byteArray = new byte[total];
+            in.read(byteArray);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }finally{
+            if(isClose){
+                try {
+                    in.close();
+                } catch (Exception e2) {
+                    System.out.println("关闭流失败");
+                }
+            }
+        }
+        return byteArray;
+    }
+
+}

+ 5 - 0
cpms-generator/src/main/resources/vm/java/controller.java.vm

@@ -2,6 +2,7 @@ package ${packageName}.controller;
 
 import java.io.IOException;
 import java.util.List;
+import java.util.Date;
 import java.util.ArrayList;
 import com.alibaba.fastjson2.JSON;
 import com.cpms.common.utils.file.ExcelUtils;
@@ -99,6 +100,8 @@ public class ${ClassName}Controller extends BaseController
     @PostMapping
     public AjaxResult add(@RequestBody ${ClassName} ${className})
     {
+        ${className}.setCreaterCode(getUserId().toString());
+        ${className}.setCreatedate(new Date());
         return toAjax(${className}Service.insert${ClassName}(${className}));
     }
 
@@ -110,6 +113,8 @@ public class ${ClassName}Controller extends BaseController
     @PutMapping
     public AjaxResult edit(@RequestBody ${ClassName} ${className})
     {
+        ${className}.setUpdaterCode(getUserId().toString());
+        ${className}.setUpdatedate(new Date());
         return toAjax(${className}Service.update${ClassName}(${className}));
     }
 

+ 44 - 0
cpms-ui/src/api/asset/basedoc.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询资产管理基础文档清单列表
+export function listBasedoc(query) {
+  return request({
+    url: '/asset/basedoc/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询资产管理基础文档清单详细
+export function getBasedoc(id) {
+  return request({
+    url: '/asset/basedoc/' + id,
+    method: 'get'
+  })
+}
+
+// 新增资产管理基础文档清单
+export function addBasedoc(data) {
+  return request({
+    url: '/asset/basedoc',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改资产管理基础文档清单
+export function updateBasedoc(data) {
+  return request({
+    url: '/asset/basedoc',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除资产管理基础文档清单
+export function delBasedoc(id) {
+  return request({
+    url: '/asset/basedoc/' + id,
+    method: 'delete'
+  })
+}

+ 51 - 0
cpms-ui/src/api/plant/agenda.js

@@ -0,0 +1,51 @@
+import request from '@/utils/request'
+
+// 查询装置会议议程列表
+export function listAgenda(query) {
+  return request({
+    url: '/plant/agenda/list',
+    method: 'get',
+    params: query
+  })
+}// 查询装置会议议程列表
+export function listAgenda2(query) {
+  return request({
+    url: '/plant/agenda/list2',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询装置会议议程详细
+export function getAgenda(id) {
+  return request({
+    url: '/plant/agenda/' + id,
+    method: 'get'
+  })
+}
+
+// 新增装置会议议程
+export function addAgenda(data) {
+  return request({
+    url: '/plant/agenda',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改装置会议议程
+export function updateAgenda(data) {
+  return request({
+    url: '/plant/agenda',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除装置会议议程
+export function delAgenda(id) {
+  return request({
+    url: '/plant/agenda/' + id,
+    method: 'delete'
+  })
+}

+ 53 - 0
cpms-ui/src/api/plant/content.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询装置空白会议列表
+export function listContent(query) {
+  return request({
+    url: '/plant/content/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询装置空白会议列表
+export function listContent2(query) {
+  return request({
+    url: '/plant/content/list2',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询装置空白会议详细
+export function getContent(id) {
+  return request({
+    url: '/plant/content/' + id,
+    method: 'get'
+  })
+}
+
+// 新增装置空白会议
+export function addContent(data) {
+  return request({
+    url: '/plant/content',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改装置空白会议
+export function updateContent(data) {
+  return request({
+    url: '/plant/content',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除装置空白会议
+export function delContent(id) {
+  return request({
+    url: '/plant/content/' + id,
+    method: 'delete'
+  })
+}

+ 61 - 0
cpms-ui/src/api/plant/meeting.js

@@ -0,0 +1,61 @@
+import request from '@/utils/request'
+
+// 查询装置会议列表
+export function listMeeting(query) {
+  return request({
+    url: '/plant/meeting/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询装置会议详细
+export function getMeeting(id) {
+  return request({
+    url: '/plant/meeting/' + id,
+    method: 'get'
+  })
+}
+
+// 新增装置会议
+export function addMeeting(data) {
+  return request({
+    url: '/plant/meeting',
+    method: 'post',
+    data: data
+  })
+}
+
+
+// 修改装置会议
+export function updateMeeting(data) {
+  return request({
+    url: '/plant/meeting',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除装置会议
+export function delMeeting(id) {
+  return request({
+    url: '/plant/meeting/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出装置会议
+export function exportMeeting(query) {
+  return request({
+    url: '/plant/meeting/export',
+    method: 'get',
+    params: query
+  })
+}
+
+export function wordView(id) {
+  return request({
+    url: '/plant/meeting/wordView/'+id,
+    method: 'get'
+  })
+}

+ 53 - 0
cpms-ui/src/api/plant/person.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询会议人员列表
+export function listPerson(query) {
+  return request({
+    url: '/plant/person/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询会议人员详细
+export function getPerson(id) {
+  return request({
+    url: '/plant/person/' + id,
+    method: 'get'
+  })
+}
+
+// 新增会议人员
+export function addPerson(data) {
+  return request({
+    url: '/plant/person',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改会议人员
+export function updatePerson(data) {
+  return request({
+    url: '/plant/person',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除会议人员
+export function delPerson(id) {
+  return request({
+    url: '/plant/person/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出会议人员
+export function exportPerson(query) {
+  return request({
+    url: '/plant/person/export',
+    method: 'get',
+    params: query
+  })
+}

+ 29 - 17
cpms-ui/src/router/index.js

@@ -1,11 +1,10 @@
 import Vue from 'vue'
 import Router from 'vue-router'
-
-Vue.use(Router)
-
 /* Layout */
 import Layout from '@/layout'
 
+Vue.use(Router)
+
 /**
  * Note: 路由配置项
  *
@@ -20,12 +19,12 @@ import Layout from '@/layout'
  * roles: ['admin', 'common']       // 访问路由的角色权限
  * permissions: ['a:a:a', 'b:b:b']  // 访问路由的菜单权限
  * meta : {
-    noCache: true                   // 如果设置为true,则不会被 <keep-alive> 缓存(默认 false)
-    title: 'title'                  // 设置该路由在侧边栏和面包屑中展示的名字
-    icon: 'svg-name'                // 设置该路由的图标,对应路径src/assets/icons/svg
-    breadcrumb: false               // 如果设置为false,则不会在breadcrumb面包屑中显示
-    activeMenu: '/system/user'      // 当路由设置了该属性,则会高亮相对应的侧边栏。
-  }
+ noCache: true                   // 如果设置为true,则不会被 <keep-alive> 缓存(默认 false)
+ title: 'title'                  // 设置该路由在侧边栏和面包屑中展示的名字
+ icon: 'svg-name'                // 设置该路由的图标,对应路径src/assets/icons/svg
+ breadcrumb: false               // 如果设置为false,则不会在breadcrumb面包屑中显示
+ activeMenu: '/system/user'      // 当路由设置了该属性,则会高亮相对应的侧边栏。
+ }
  */
 
 // 公共路由
@@ -41,6 +40,19 @@ export const constantRoutes = [
       }
     ]
   },
+  {
+    path: '/office',
+    component: Layout,
+    hidden: true,
+    children: [
+      {
+        path: 'edit',
+        component: () => import('@/views/onlyoffice/edit'),
+        name: 'file',
+        meta: {title: '在线编辑'}
+      }
+    ],
+  },
   {
     path: '/login',
     component: () => import('@/views/login'),
@@ -70,7 +82,7 @@ export const constantRoutes = [
         path: 'index',
         component: () => import('@/views/index'),
         name: 'Index',
-        meta: { title: '首页', icon: 'dashboard', affix: true }
+        meta: {title: '首页', icon: 'dashboard', affix: true}
       }
     ]
   },
@@ -84,7 +96,7 @@ export const constantRoutes = [
         path: 'profile',
         component: () => import('@/views/system/user/profile/index'),
         name: 'Profile',
-        meta: { title: '个人中心', icon: 'user' }
+        meta: {title: '个人中心', icon: 'user'}
       }
     ]
   }
@@ -102,7 +114,7 @@ export const dynamicRoutes = [
         path: 'role/:userId(\\d+)',
         component: () => import('@/views/system/user/authRole'),
         name: 'AuthRole',
-        meta: { title: '分配角色', activeMenu: '/system/user' }
+        meta: {title: '分配角色', activeMenu: '/system/user'}
       }
     ]
   },
@@ -116,7 +128,7 @@ export const dynamicRoutes = [
         path: 'user/:roleId(\\d+)',
         component: () => import('@/views/system/role/authUser'),
         name: 'AuthUser',
-        meta: { title: '分配用户', activeMenu: '/system/role' }
+        meta: {title: '分配用户', activeMenu: '/system/role'}
       }
     ]
   },
@@ -130,7 +142,7 @@ export const dynamicRoutes = [
         path: 'index/:dictId(\\d+)',
         component: () => import('@/views/system/dict/data'),
         name: 'Data',
-        meta: { title: '字典数据', activeMenu: '/system/dict' }
+        meta: {title: '字典数据', activeMenu: '/system/dict'}
       }
     ]
   },
@@ -144,7 +156,7 @@ export const dynamicRoutes = [
         path: 'index/:jobId(\\d+)',
         component: () => import('@/views/monitor/job/log'),
         name: 'JobLog',
-        meta: { title: '调度日志', activeMenu: '/monitor/job' }
+        meta: {title: '调度日志', activeMenu: '/monitor/job'}
       }
     ]
   },
@@ -158,7 +170,7 @@ export const dynamicRoutes = [
         path: 'index/:tableId(\\d+)',
         component: () => import('@/views/tool/gen/editTable'),
         name: 'GenEdit',
-        meta: { title: '修改生成配置', activeMenu: '/tool/gen' }
+        meta: {title: '修改生成配置', activeMenu: '/tool/gen'}
       }
     ]
   }
@@ -178,6 +190,6 @@ Router.prototype.replace = function push(location) {
 
 export default new Router({
   mode: 'history', // 去掉url中的#
-  scrollBehavior: () => ({ y: 0 }),
+  scrollBehavior: () => ({y: 0}),
   routes: constantRoutes
 })

+ 1 - 1
cpms-ui/src/utils/request.js

@@ -17,7 +17,7 @@ const service = axios.create({
   // axios中请求配置有baseURL选项,表示请求URL公共部分
   baseURL: process.env.VUE_APP_BASE_API,
   // 超时
-  timeout: 10000
+  timeout: 1000000
 })
 
 // request拦截器

+ 5 - 5
cpms-ui/src/views/approval/index.vue

@@ -566,7 +566,7 @@ export default {
     },
     //附件上传成功处理
     handleFileDocSuccess(response, file, fileList) {
-      this.msgSuccess("上传成功");
+      this.$modal.msgSuccess("上传成功");
       this.doc.open = false;
       this.doc.fileList = [];
       this.getFileList();
@@ -593,7 +593,7 @@ export default {
     },
     handleFileRemove(row) {
       delFile(row.id).then(res => {
-        this.msgSuccess("删除成功");
+        this.$modal.msgSuccess("删除成功");
         this.getFileList();
       });
     },
@@ -723,13 +723,13 @@ export default {
           }
           if (this.form.id != null) {
             updateApproval(this.form).then(response => {
-              this.msgSuccess("修改成功");
+              this.$modal.msgSuccess("修改成功");
               this.open = false;
               this.getList();
             });
           } else {
             addApproval(this.form).then(response => {
-              this.msgSuccess("新增成功");
+              this.$modal.msgSuccess("新增成功");
               this.open = false;
               this.getList();
             });
@@ -744,7 +744,7 @@ export default {
         return delApproval(ids);
       }).then(() => {
         this.getList();
-        this.msgSuccess("删除成功");
+        this.$modal.msgSuccess("删除成功");
       }).catch(() => {
       });
     },

+ 3 - 3
cpms-ui/src/views/asset/asset/index.vue

@@ -679,13 +679,13 @@ export default {
         if (valid) {
           if (this.form.id != null) {
             updateAsset(this.form).then(response => {
-              this.msgSuccess("修改成功");
+              this.$modal.msgSuccess("修改成功");
               this.open = false;
               this.getList();
             });
           } else {
             addAsset(this.form).then(response => {
-              this.msgSuccess("新增成功");
+              this.$modal.msgSuccess("新增成功");
               this.open = false;
               this.getList();
             });
@@ -704,7 +704,7 @@ export default {
         return delAsset(ids);
       }).then(() => {
         this.getList();
-        this.msgSuccess("删除成功");
+        this.$modal.msgSuccess("删除成功");
       })
     },
     /** 导出按钮操作 */

+ 471 - 0
cpms-ui/src/views/asset/basedoc/index.vue

@@ -0,0 +1,471 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="类型" prop="type">
+        <el-select v-model="queryParams.type" placeholder="请选择类型" clearable>
+          <el-option
+            v-for="dict in dict.type.basedoc_type"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="文档名称" prop="docName">
+        <el-input
+          v-model="queryParams.docName"
+          placeholder="请输入文档名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="docStatus">
+        <el-select v-model="queryParams.docStatus" placeholder="请选择状态" clearable>
+          <el-option
+            v-for="dict in dict.type.basedoc_status"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['asset:basedoc:add']"
+        >新增
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['asset:basedoc:edit']"
+        >修改
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['asset:basedoc:remove']"
+        >删除
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-upload2"
+          size="mini"
+          @click="handleImport"
+          v-hasPermi="['asset:basedoc:add']"
+        >导入
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['asset:basedoc:export']"
+        >导出
+        </el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="basedocList" @selection-change="handleSelectionChange" :height="clientHeight"
+              border>
+      <el-table-column type="selection" width="55" align="center" fixed="left"/>
+      <el-table-column label="类型" align="center" prop="type">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.basedoc_type" :value="scope.row.type"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="文档名称" align="center" prop="docName"/>
+      <el-table-column label="文档链接" align="center">
+        <template slot-scope="scope">
+          <el-badge :value="scope.row.fileNum" style="margin-top: 10px;" type="primary">
+            <el-button
+              size="mini"
+              icon="el-icon-folder"
+              @click="openFileDialog(scope.row)"
+              circle
+            ></el-button>
+          </el-badge>
+        </template>
+      </el-table-column>
+      <el-table-column label="状态" align="center" prop="docStatus">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.basedoc_status" :value="scope.row.docStatus"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="上传人" align="center" prop="createrCode"/>
+      <el-table-column label="上传日期" align="center" prop="createdate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.createdate, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="备注" align="center" prop="remarks"/>
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['asset:basedoc:edit']"
+          >修改
+          </el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['asset:basedoc:remove']"
+          >删除
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改资产管理基础文档清单对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="700px" append-to-body :close-on-click-modal="false">
+      <el-form ref="form" :model="form" :rules="rules" label-width="130px">
+        <el-form-item label="类型" prop="type">
+          <el-select v-model="form.type" placeholder="请选择类型">
+            <el-option
+              v-for="dict in dict.type.basedoc_type"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="文档名称" prop="docName">
+          <el-input v-model="form.docName" placeholder="请输入文档名称"/>
+        </el-form-item>
+        <el-form-item label="状态" prop="docStatus">
+          <el-select v-model="form.docStatus" placeholder="请选择状态">
+            <el-option
+              v-for="dict in dict.type.basedoc_status"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="备注" prop="remarks">
+          <el-input v-model="form.remarks" placeholder="请输入备注"/>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+
+
+    <!-- 用户导入对话框 -->
+    <el-dialog :close-on-click-modal="false" :title="upload.title" :visible.sync="upload.open" append-to-body
+               width="400px">
+      <el-upload
+        ref="upload"
+        :action="upload.url + '?updateSupport=' + upload.updateSupport"
+        :auto-upload="false"
+        :disabled="upload.isUploading"
+        :headers="upload.headers"
+        :limit="1"
+        :on-progress="handleFileUploadProgress"
+        :on-success="handleFileSuccess"
+        accept=".xlsx, .xls"
+        drag
+      >
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">
+          将文件拖到此处,或
+          <em>点击上传</em>
+        </div>
+        <div slot="tip" class="el-upload__tip">
+          <!--          <el-checkbox v-model="upload.updateSupport"/>-->
+          <!--          是否更新已经存在的用户数据-->
+          <el-link style="font-size:12px" type="info" @click="importTemplate">下载模板</el-link>
+        </div>
+        <div slot="tip" class="el-upload__tip" style="color:red">提示:仅允许导入“xls”或“xlsx”格式文件!</div>
+      </el-upload>
+      <div slot="footer" class="dialog-footer">
+        <el-button v-loading.fullscreen.lock="fullscreenLoading" type="primary" @click="submitFileForm">确 定
+        </el-button>
+        <el-button @click="upload.open = false">取 消</el-button>
+      </div>
+    </el-dialog>
+    <form ref="downloadFileForm" :action="upload.downloadAction" target="FORMSUBMIT">
+      <input :value="upload.type" hidden name="type"/>
+    </form>
+
+    <el-dialog :close-on-click-modal="false" title="附件" :visible.sync="file.open" append-to-body
+               width="70%">
+      <upload-file :linkId="file.linkId" :linkName="file.linkName"/>
+    </el-dialog>
+
+  </div>
+</template>
+
+<script>
+import {addBasedoc, delBasedoc, getBasedoc, listBasedoc, updateBasedoc} from "@/api/asset/basedoc";
+import {getToken} from "@/utils/auth";
+import Treeselect from "@riophae/vue-treeselect";
+import File from "@/views/file/file/index.vue";
+import UploadFile from "@/views/file/file/uploadFile.vue";
+
+export default {
+  name: "Basedoc",
+  dicts: ['basedoc_status', 'basedoc_type'],
+  components: {UploadFile, File, Treeselect},
+  data() {
+    return {
+      file: {
+        open: false,
+        linkId: null,
+        linkName: 'basedoc'
+      },
+      // 批量导入全屏遮罩
+      fullscreenLoading: false,
+      // 用户导入参数
+      upload: {
+        downloadAction: process.env.VUE_APP_BASE_API + '/common/template',
+        type: "assetbasedoc",
+        // 是否显示弹出层(用户导入)
+        open: false,
+        // 弹出层标题(用户导入)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 设置上传的请求头部
+        headers: {Authorization: "Bearer " + getToken()},
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/asset/basedoc/importData"
+      },
+      // 页面高度
+      clientHeight: 300,
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: false,
+      // 总条数
+      total: 0,
+      // 资产管理基础文档清单表格数据
+      basedocList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 20,
+        type: null,
+        docName: null,
+        docStatus: null,
+        createrCode: null,
+        createdate: null,
+        remarks: null,
+        updaterCode: null,
+        updatedate: null,
+        deptId: null
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {},
+      fileRules: {}
+    };
+  },
+  created() {
+    this.getList();
+    //设置表格高度对应屏幕高度
+    this.$nextTick(() => {
+      this.clientHeight = (document.body.clientHeight - 80) * 0.8
+    });
+  },
+  methods: {
+    openFileDialog(row) {
+      this.file.open = true;
+      this.file.linkId = row.id;
+    },
+    /** 查询资产管理基础文档清单列表 */
+    getList() {
+      this.loading = true;
+      listBasedoc(this.queryParams).then(response => {
+        this.basedocList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        type: null,
+        docName: null,
+        docStatus: null,
+        createrCode: null,
+        createdate: null,
+        remarks: null,
+        delFlag: null,
+        updaterCode: null,
+        updatedate: null,
+        deptId: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length !== 1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加资产管理基础文档清单";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getBasedoc(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改资产管理基础文档清单";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateBasedoc(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addBasedoc(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除资产管理基础文档清单编号为"' + ids + '"的数据项?').then(function () {
+        return delBasedoc(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {
+      });
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('asset/basedoc/export', {
+        ...this.queryParams
+      }, `basedoc_${new Date().getTime()}.xlsx`)
+    },
+    /** 导入按钮操作 */
+    handleImport() {
+      this.upload.title = "用户导入";
+      this.upload.open = true;
+    },
+    // 提交上传文件
+    submitFileForm() {
+      this.$refs.upload.submit();
+      this.fullscreenLoading = true;
+    },
+    // 文件上传中处理
+    handleFileUploadProgress(event, file, fileList) {
+      this.upload.isUploading = true;
+    },
+    // 文件上传成功处理
+    handleFileSuccess(response, file, fileList) {
+      this.upload.open = false;
+      this.upload.isUploading = false;
+      this.$refs.upload.clearFiles();
+      this.fullscreenLoading = false;
+      if (response.data.length > 0) {
+        let failrow = ''
+        for (let i = 0; i < response.data.length; i++) {
+          failrow += response.data[i] + ','
+        }
+        this.$alert('导入成功条数:' + response.msg + '<br>' + '失败行数:' + failrow, '导入结果', {dangerouslyUseHTMLString: true});
+      } else {
+        this.$alert('导入成功条数:' + response.msg, '导入结果', {dangerouslyUseHTMLString: true});
+      }
+      this.getList();
+    },
+    /** 下载模板操作 */
+    importTemplate() {
+      this.$refs['downloadFileForm'].submit()
+    }
+  }
+};
+</script>

+ 3 - 3
cpms-ui/src/views/asset/fixedAsset/index.vue

@@ -629,13 +629,13 @@ export default {
         if (valid) {
           if (this.form.id != null) {
             updateAsset(this.form).then(response => {
-              this.msgSuccess("修改成功");
+              this.$modal.msgSuccess("修改成功");
               this.open = false;
               this.getList();
             });
           } else {
             addAsset(this.form).then(response => {
-              this.msgSuccess("新增成功");
+              this.$modal.msgSuccess("新增成功");
               this.open = false;
               this.getList();
             });
@@ -654,7 +654,7 @@ export default {
         return delAsset(ids);
       }).then(() => {
         this.getList();
-        this.msgSuccess("删除成功");
+        this.$modal.msgSuccess("删除成功");
       })
     },
     /** 导出按钮操作 */

+ 4 - 4
cpms-ui/src/views/asset/specMain/index.vue

@@ -693,13 +693,13 @@ export default {
         if (valid) {
           if (this.form.id != null) {
             updateMain(this.form).then(response => {
-              this.msgSuccess("修改成功");
+              this.$modal.msgSuccess("修改成功");
               this.open = false;
               this.getList();
             });
           } else {
             addMain(this.form).then(response => {
-              this.msgSuccess("新增成功");
+              this.$modal.msgSuccess("新增成功");
               this.open = false;
               this.getList();
             });
@@ -715,7 +715,7 @@ export default {
       }).then(function () {
         return syncAllDev();
       }).then(() => {
-        this.msgSuccess("同步成功");
+        this.$modal.msgSuccess("同步成功");
         this.getList();
       })
     },
@@ -730,7 +730,7 @@ export default {
         return delMain(ids);
       }).then(() => {
         this.getList();
-        this.msgSuccess("删除成功");
+        this.$modal.msgSuccess("删除成功");
       })
     }
     ,

+ 3 - 3
cpms-ui/src/views/asset/typemgr/index.vue

@@ -258,13 +258,13 @@ export default {
         if (valid) {
           if (this.form.id != null) {
             updateTypemgr(this.form).then(response => {
-              this.msgSuccess("修改成功");
+              this.$modal.msgSuccess("修改成功");
               this.open = false;
               this.getList();
             });
           } else {
             addTypemgr(this.form).then(response => {
-              this.msgSuccess("新增成功");
+              this.$modal.msgSuccess("新增成功");
               this.open = false;
               this.getList();
             });
@@ -279,7 +279,7 @@ export default {
         return delTypemgr(ids);
       }).then(() => {
         this.getList();
-        this.msgSuccess("删除成功");
+        this.$modal.msgSuccess("删除成功");
       }).catch(() => {
       });
     },

+ 451 - 0
cpms-ui/src/views/components/meeting/person.vue

@@ -0,0 +1,451 @@
+<template>
+  <div class="app-container" style="padding: 0px;">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="姓名" prop="name">
+        <el-input
+          v-model="queryParams.name"
+          placeholder="请输入姓名"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['plant:person:add']"
+        >新增
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['plant:person:remove']"
+        >删除
+        </el-button>
+      </el-col>
+
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="personList" @selection-change="handleSelectionChange" :height="clientHeight"
+              border>
+      <el-table-column type="selection" width="55" align="center"/>
+<!--      <el-table-column label="装置名称" align="center" prop="plantCode" :formatter="plantCodeFormat"/>-->
+<!--      <el-table-column label="员工号" align="center" prop="staffid" :show-overflow-tooltip="true"/>-->
+      <el-table-column label="姓名" align="center" prop="name" :show-overflow-tooltip="true"/>
+<!--      <el-table-column label="性别" align="center" prop="sex" :formatter="sexFormat"/>-->
+      <el-table-column label="部门" align="center" prop="unit"/>
+<!--      <el-table-column label="班值" align="center" prop="team" :formatter="teamFormat"/>-->
+<!--      <el-table-column label="实际岗位" align="center" prop="actualpost" width="100"-->
+<!--                       :formatter="actualpostFormat"/>-->
+<!--      <el-table-column label="联系方式" align="center" prop="contact" :show-overflow-tooltip="true"/>-->
+      <el-table-column label="操作" align="center" fixed="right" width="120"
+                       class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['plant:person:remove']"
+          >删除
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改会议人员对话框 -->
+    <el-dialog :close-on-click-modal="false" v-dialogDrag :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="姓名" prop="name">
+          <!--          <el-select v-model="form.staffid" filterable placeholder="请选择人员">-->
+          <!--            <el-option-->
+          <!--              v-for="dict in stffmgrOptions"-->
+          <!--              :key="dict.staffid"-->
+          <!--              label="dict.name"-->
+          <!--              :value="dict.staffid">-->
+          <!--              <span style="float: left">{{ dict.name }}</span>-->
+          <!--              <span style="float: right; color: #8492a6; font-size: 13px">{{ dict.staffid }}</span>-->
+          <!--            </el-option>-->
+          <!--          </el-select>-->
+          <!--                    <el-select v-model="form.staffid" filterable placeholder="请选择 + 人员"-->
+          <!--                    >-->
+          <!--                      <el-option-->
+          <!--                                      v-for="dict in stffmgrOptions"-->
+          <!--                                      :key="dict.staffid"-->
+          <!--                                      label="dict.name"-->
+          <!--                                      :value="dict.staffid">-->
+          <!--                                    </el-option>-->
+          <!--                    </el-select>-->
+          <el-input v-model="form.name" placeholder="请输入姓名"/>
+        </el-form-item>
+        <el-form-item label="部门" prop="unit">
+          <el-input v-model="form.unit" placeholder="请输入部门"/>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+    <!-- 用户导入对话框 -->
+    <el-dialog :close-on-click-modal="false" v-dialogDrag :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
+      <el-upload
+        ref="upload"
+        :limit="1"
+        accept=".xlsx, .xls"
+        :headers="upload.headers"
+        :action="upload.url + '?updateSupport=' + upload.updateSupport"
+        :disabled="upload.isUploading"
+        :on-progress="handleFileUploadProgress"
+        :on-success="handleFileSuccess"
+        :auto-upload="false"
+        drag
+      >
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">
+          将文件拖到此处,或
+          <em>点击上传</em>
+        </div>
+        <div class="el-upload__tip" slot="tip">
+          <!--<el-checkbox v-model="upload.updateSupport" />是否更新已经存在的用户数据-->
+          <el-link type="info" style="font-size:12px" @click="importTemplate">下载模板</el-link>
+        </div>
+        <div class="el-upload__tip" style="color:red" slot="tip">提示:仅允许导入“xls”或“xlsx”格式文件!</div>
+      </el-upload>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitFileForm">确 定</el-button>
+        <el-button @click="upload.open = false">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  addPerson,
+  delPerson,
+  exportPerson,
+  getPerson,
+  importTemplate,
+  listPerson,
+  updatePerson
+} from "@/api/plant/person";
+import {treeselect} from "@/api/system/dept";
+import {getToken} from "@/utils/auth";
+import Treeselect from "@riophae/vue-treeselect";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import {listStaffmgr} from "@/api/plant/staffmgr";
+
+export default {
+  props: ['meetingId','isCc'],
+  name: "Person",
+  components: {Treeselect},
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: false,
+      // 总条数
+      total: 0,
+      // 会议人员表格数据
+      personList: [],
+      // 弹出层标题
+      title: "",
+      // 部门树选项
+      deptOptions: undefined,
+      //人员表联查
+      stffmgrOptions: [],
+      clientHeight: 300,
+      // 是否显示弹出层
+      open: false,
+      // 装置名称字典
+      plantCodeOptions: [],
+      // 性别字典
+      sexOptions: [],
+      // 部门字典
+      unitOptions: [],
+      // 班值字典
+      teamOptions: [],
+      // 实际岗位字典
+      actualpostOptions: [],
+      // 用户导入参数
+      upload: {
+        // 是否显示弹出层(用户导入)
+        open: false,
+        // 弹出层标题(用户导入)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 设置上传的请求头部
+        headers: {Authorization: "Bearer " + getToken()},
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/plant/person/importData"
+      },
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 20,
+        name: null,
+        meetingId: this.meetingId,
+        isCc: this.isCc,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        name: [
+          { required: true, message: '姓名不能为空', trigger: "blur" }
+        ],
+      }
+    };
+  },
+  watch: {
+    // 根据名称筛选部门树
+    deptName(val) {
+      this.$refs.tree.filter(val);
+    }
+  },
+  created() {
+    //设置表格高度对应屏幕高度
+    this.$nextTick(() => {
+      this.clientHeight = (document.body.clientHeight - 80) * 0.8
+    })
+    this.getList();
+    this.getTreeselect();
+    this.queryParams.meetingId = this.$route.params && this.$route.params.tableId;
+    this.getDicts("PLANT_DIVIDE").then(response => {
+      this.plantCodeOptions = response.data;
+    });
+    this.getDicts("sys_user_sex").then(response => {
+      this.sexOptions = response.data;
+    });
+    this.getDicts("STAFF_UNIT").then(response => {
+      this.unitOptions = response.data;
+    });
+    this.getDicts("TEAM_DIVIDE").then(response => {
+      this.teamOptions = response.data;
+    });
+    this.getDicts("ACTUALPOST").then(response => {
+      this.actualpostOptions = response.data;
+    });
+  },
+  methods: {
+    /** 查询会议人员列表 */
+    getList() {
+      this.loading = true;
+      listPerson(this.queryParams).then(response => {
+        this.personList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    /** 查询部门下拉树结构 */
+    getTreeselect() {
+      treeselect().then(response => {
+        this.deptOptions = response.data;
+      });
+    },
+    // 装置名称字典翻译
+    plantCodeFormat(row, column) {
+      return this.selectDictLabel(this.plantCodeOptions, row.plantCode);
+    },
+    // 性别字典翻译
+    sexFormat(row, column) {
+      return this.selectDictLabel(this.sexOptions, row.sex);
+    },
+    // 部门字典翻译
+    unitFormat(row, column) {
+      return this.selectDictLabel(this.unitOptions, row.unit);
+    },
+    // 班值字典翻译
+    teamFormat(row, column) {
+      return this.selectDictLabel(this.teamOptions, row.team);
+    },
+    // 实际岗位字典翻译
+    actualpostFormat(row, column) {
+      return this.selectDictLabel(this.actualpostOptions, row.actualpost);
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        plantCode: null,
+        staffid: null,
+        name: null,
+        sex: null,
+        unit: null,
+        team: null,
+        actualpost: null,
+        contact: null,
+        delFlag: null,
+        createrCode: null,
+        createdate: null,
+        updaterCode: null,
+        updatedate: null,
+        meetingId: this.meetingId,
+        isHis: null,
+        isCc: this.isCc
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length !== 1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = '新增会议人员';
+      this.getStaffmar();
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getPerson(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = '修改会议人员';
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      if (this.meetingId == null) {
+        this.form.isHis = 0;
+      }
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updatePerson(this.form).then(response => {
+              this.$modal.msgSuccess('修改成功');
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            this.form.meetingId = this.queryParams.meetingId
+            this.form.isCc = this.isCc
+            addPerson(this.form).then(response => {
+              this.$modal.msgSuccess('新增成功');
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$confirm('是否确认删除?', '警告', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: "warning"
+      }).then(function () {
+        return delPerson(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess('删除成功');
+      })
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$confirm('是否确认导出所有会议人员数据项?', '警告', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: "warning"
+      }).then(function () {
+        return exportPerson(queryParams);
+      }).then(response => {
+        this.download(response.msg);
+      })
+    },
+    /** 导入按钮操作 */
+    handleImport() {
+      this.upload.title = '用户导入';
+      this.upload.open = true;
+    },
+    /** 下载模板操作 */
+    importTemplate() {
+      importTemplate().then(response => {
+        this.download(response.msg);
+      });
+    },
+    // 文件上传中处理
+    handleFileUploadProgress(event, file, fileList) {
+      this.upload.isUploading = true;
+    },
+    // 文件上传成功处理
+    handleFileSuccess(response, file, fileList) {
+      this.upload.open = false;
+      this.upload.isUploading = false;
+      this.$refs.upload.clearFiles();
+      this.$alert(response.msg, '导入结果', {dangerouslyUseHTMLString: true});
+      this.getList();
+    },
+    // 提交上传文件
+    submitFileForm() {
+      this.$refs.upload.submit();
+    },
+    //获取人员表
+    getStaffmar() {
+      listStaffmgr(this.staffmgrQueryParams).then(response => {
+        this.stffmgrOptions = response.rows;
+        for (let i = 0; i < this.stffmgrOptions.length; i++) {
+          this.stffmgrOptions[i].name = this.stffmgrOptions[i].name + ' ' + this.stffmgrOptions[i].staffid
+        }
+      });
+    },
+  }
+};
+</script>

+ 408 - 0
cpms-ui/src/views/file/file/uploadFile.vue

@@ -0,0 +1,408 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="文件名" prop="fileName">
+        <el-input
+          v-model="queryParams.fileName"
+          placeholder="请输入文件名"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          icon="el-icon-folder-add"
+          size="mini"
+          @click="handleAdd"
+        >新建文件夹
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          icon="el-icon-upload2"
+          size="mini"
+          @click="handleAddFile"
+        >上传文件
+        </el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table
+      v-loading="loading"
+      :data="fileList"
+      row-key="id"
+      default-expand-all
+      :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
+    >
+      <el-table-column label="文件名" width="500" align="left" prop="fileName" :show-overflow-tooltip="true">
+        <template slot-scope="scope">
+          <a v-if="scope.row.type == 1" class="link-type" @click="handleFileView(scope.row)">
+            <span>{{ scope.row.fileName }}</span>
+          </a>
+          <span v-else-if="scope.row.type == 0">{{ scope.row.fileName }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="类型" width="80" align="center" prop="type">
+        <template slot-scope="scope">
+          <i v-if="scope.row.type == 1" class="el-icon-document"></i>
+          <i v-else-if="scope.row.type == 0" class="el-icon-folder"></i>
+        </template>
+      </el-table-column>
+
+      <el-table-column label="创建人" align="center" prop="creator"/>
+      <el-table-column label="创建时间" align="center" prop="createdate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.createdate, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="文件大小(Kb)" width="100" align="center" prop="fileSize"/>
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            v-if="scope.row.fileName.endsWith('pdf') && scope.row.type == 1"
+            size="mini"
+            type="text"
+            icon="el-icon-view"
+            @click="handleSee(scope.row)"
+          >预览
+          </el-button>
+          <el-button
+            v-if="scope.row.type == 1"
+            size="mini"
+            type="text"
+            icon="el-icon-download"
+            @click="handleDownload(scope.row)"
+          >下载
+          </el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+          >修改
+          </el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+          >删除
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+<!--    <el-dialog :close-on-click-modal="false" v-dialogDrag :title="pdf.title" :visible.sync="pdf.open" width="1300px"-->
+<!--               append-to-body>-->
+<!--      <div style="margin-top: -60px;float: right;margin-right: 40px;">-->
+<!--        <el-button size="mini" type="text" @click="openPdf">新页面打开PDF</el-button>-->
+<!--      </div>-->
+<!--      <div style="margin-top: -30px">-->
+<!--        <iframe :src="pdf.pdfUrl" frameborder="0" width="100%" height="700px"></iframe>-->
+<!--      </div>-->
+<!--    </el-dialog>-->
+    <!-- 添加或修改附件对话框 -->
+    <el-dialog :title="doc.title" :visible.sync="doc.open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+
+        <el-form-item label="上级" prop="pId">
+          <treeselect v-model="form.pId" :options="fileOptions" :normalizer="normalizer"
+                      placeholder="请选择文件夹"/>
+        </el-form-item>
+        <el-upload style="text-align: center;"
+          ref="doc"
+          :limit="50"
+          :headers="doc.headers"
+          :action="doc.url + '?linkId=' + this.linkId + '&linkName=' + this.linkName + '&pId=' + this.form.pId"
+          :disabled="doc.isUploading"
+          :on-progress="handleFileDocProgress"
+          :on-success="handleFileDocSuccess"
+          :auto-upload="true"
+          drag
+        >
+          <i class="el-icon-upload"></i>
+          <div class="el-upload__text">
+            将文件拖到此处,或
+            <em>点击上传</em>
+          </div>
+        </el-upload>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitFile">确 定</el-button>
+        <el-button @click="doc.open = false">返 回</el-button>
+      </div>
+    </el-dialog>
+    <!-- 添加或修改附件对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item v-if="form.type != 1" label="文件夹" prop="fileName">
+          <el-input v-model="form.fileName" placeholder="请输入文件夹名"/>
+        </el-form-item>
+
+        <el-form-item label="上级" prop="pId">
+          <treeselect v-model="form.pId" :options="fileOptions" :normalizer="normalizer" placeholder="请选择文件夹"/>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {addFile, delFile, getFile, listFile, updateFile} from "@/api/file/file";
+import Treeselect from "@riophae/vue-treeselect";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import {getToken} from "@/utils/auth";
+
+export default {
+  name: "uploadFile",
+  components: {
+    Treeselect
+  },
+  props: {
+    linkId: {
+      type: Number,
+      required: true
+    },
+    linkName: {
+      type: String,
+      required: true
+    }
+  },
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 显示搜索条件
+      showSearch: false,
+      // 附件表格数据
+      fileList: [],
+      // 附件树选项
+      fileOptions: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      pId: null,
+      // 查询参数
+      queryParams: {
+        linkId: this.linkId,
+        linkName: this.linkName,
+        fileName: null,
+        pId: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        id: [
+          {required: true, message: "id不能为空", trigger: "blur"}
+        ],
+      },
+      pdf: {
+        title: '',
+        pdfUrl: '',
+        numPages: null,
+        open: false,
+        pageNum: 1,
+        pageTotalNum: 1,
+        loadedRatio: 0,
+      },
+      // 报告附件参数
+      doc: {
+        file: "",
+        // 是否显示弹出层(报告附件)
+        open: false,
+        // 弹出层标题(报告附件)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 报告附件上传位置编号
+        ids: 0,
+        // 设置上传的请求头部
+        headers: {Authorization: "Bearer " + getToken()},
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/file/file/uploadFile",
+        commonfileList: null,
+      },
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询附件列表 */
+    getList() {
+      this.loading = true;
+      listFile(this.queryParams).then(response => {
+        this.fileList = this.handleTree(response.data, "id", "pId");
+        this.loading = false;
+      });
+    },
+    /** 转换附件数据结构 */
+    normalizer(node) {
+      if (node.children && !node.children.length) {
+        delete node.children;
+      }
+      return {
+        id: node.id,
+        label: node.fileName,
+        children: node.children
+      };
+    },
+    /** 查询部门下拉树结构 */
+    getTreeselect() {
+      let param = {
+        linkId: this.linkId,
+        linkName: this.linkName,
+      }
+      param.type = 0
+      listFile(param).then(response => {
+        this.fileOptions = [];
+        const data = {id: 0, fileName: '顶级节点', children: []};
+        data.children = this.handleTree(response.data, "id", "pId");
+        this.fileOptions.push(data);
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        pId: null,
+        fileName: null,
+        fileUrl: null,
+        delFlag: null,
+        remarks: null,
+        fileSize: null,
+        type: null,
+        linkId: this.linkId,
+        linkName: this.linkName
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.getTreeselect();
+      this.open = true;
+      this.title = "添加附件";
+      this.form.type = '0';
+      this.form.pId = 0;
+    },
+    handleAddFile() {
+      this.reset();
+      this.getTreeselect();
+      this.form.type = '1';
+      this.form.pId = 0;
+      this.doc.open = true;
+      this.$nextTick(() => {
+        this.$refs.doc.clearFiles()
+      })
+      this.doc.title = "添加附件";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      this.getTreeselect();
+      getFile(row.id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改附件";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateFile(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addFile(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    submitFile() {
+      this.doc.open = false;
+      this.getList();
+    },
+    // 文件下载处理
+    handleDownload(row) {
+      var name = row.fileName;
+      var url = row.fileUrl;
+      var suffix = url.substring(url.lastIndexOf("."), url.length);
+      const a = document.createElement('a')
+      a.setAttribute('download', name)
+      a.setAttribute('target', '_blank')
+      a.setAttribute('href', process.env.VUE_APP_BASE_API + url)
+      a.click()
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      this.$confirm('是否确认删除附件编号为"' + row.id + '"的数据项?', "警告", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(function () {
+        return delFile(row.id);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      })
+    },
+    //附件上传中处理
+    handleFileDocProgress(event, file, fileList) {
+      this.doc.file = file;
+      this.doc.isUploading = true;
+    },
+    //附件上传成功处理
+    handleFileDocSuccess(response, file, fileList) {
+      this.doc.isUploading = false;
+      this.$alert(response.msg, '导入结果', {dangerouslyUseHTMLString: true});
+      this.form.id = this.doc.pId;
+      // addFile(this.form)
+      this.$refs.upload.clearFiles();
+      this.getList()
+    },
+    handleFileView(row){
+      this.$router.push({ path: '/office/edit', query: { fileId: row.id, ot: 'detail' }});
+    }
+  }
+};
+</script>

+ 254 - 0
cpms-ui/src/views/plant/agenda/hisAgenda.vue

@@ -0,0 +1,254 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px">
+      <el-form-item label="回顾/截止日期" prop="deadlineTime">
+        <el-date-picker clearable size="small" style="width: 200px"
+                        v-model="queryParams.deadlineTime"
+                        type="date"
+                        value-format="yyyy-MM-dd"
+                        placeholder="请选择回顾/截止日期" @change="handleQuery">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="类型" prop="workType" label-width="50px">
+        <el-select v-model="queryParams.workType" placeholder="请选择类型" clearable size="small"
+                   style="width: 100%;" @change="handleQuery">
+          <el-option
+            v-for="dict in workTypeOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="状态" prop="status" label-width="50px">
+        <el-select v-model="queryParams.status" placeholder="请选择状态" clearable size="small"
+                   style="width: 100%;" @change="handleQuery">
+          <el-option
+            v-for="dict in agendaStatusOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="跟踪人" prop="responsible" label-width="70px">
+        <el-input v-model="queryParams.responsible" placeholder="请输入跟踪人"/>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+    <el-row :gutter="10" class="mb8">
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+    <el-table :data="agendaList" :height="clientHeight" border>
+      <el-table-column label="主题" align="center" prop="subject"/>
+      <el-table-column label="会议编号" align="center" prop="meetingNo"/>
+      <el-table-column label="会议时间" align="center" prop="meetingDate">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.meetingDate, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="内容" align="center" prop="agendaContent">
+        <template slot-scope="scope">
+          <el-input type="textarea" v-model="scope.row.agendaContent" placeholder="请输入行动项内容"
+                    v-if="scope.row.isEdit&&scope.row.workType==='P'"/>
+          <span v-else>{{ scope.row.agendaContent }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="类型" align="center" prop="workType"/>
+      <el-table-column label="跟踪人" align="center" prop="responsible"/>
+      <el-table-column label="回顾/截止时间" align="center" prop="deadlineTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.deadlineTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="状态" align="center" prop="status">
+        <template slot-scope="scope">
+          <el-select v-if="scope.row.isEdit" v-model="scope.row.status" placeholder="请选择状态"
+                     clearable
+                     size="small" style="width: 100%;">
+            <el-option
+              v-for="dict in agendaStatusOptions"
+              :key="dict.dictValue"
+              :label="dict.dictLabel"
+              :value="dict.dictValue"
+            />
+          </el-select>
+          <span v-else>{{ scope.row.status }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            v-if="!scope.row.isEdit&&scope.row.workType!=='I'"
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdateRecord(scope.row)"
+            v-hasPermi="['plant:agenda:edit']"
+          >修改
+          </el-button>
+          <el-button v-if="scope.row.isEdit"
+                     size="mini"
+                     type="text"
+                     icon="el-icon-check"
+                     @click="save(scope.row)"
+          >保存
+          </el-button>
+          <el-button v-if="scope.row.isEdit"
+                     size="mini"
+                     type="text"
+                     icon="el-icon-close"
+                     @click="cancelRecord(scope.row,scope.$index)"
+          >取消
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+  </div>
+</template>
+
+<script>
+import {listAgenda2, updateAgenda} from "@/api/plant/agenda";
+
+export default {
+  name: "hisAgenda",
+  data() {
+    return {
+      // 页面高度
+      clientHeight: 300,
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: false,
+      // 总条数
+      total: 0,
+      // 装置会议议程表格数据
+      agendaList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        meetingId: null,
+        agendaType: null,
+        agendaContent: null,
+        workType: null,
+        planType: null,
+        responsible: null,
+        status: null,
+        createrCode: null,
+        createdate: null,
+        updaterCode: null,
+        updatedate: null,
+        deptId: null,
+        remarks: null,
+        presided: null,
+        isHis: 1,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        agendaContent: [
+          {required: true, message: '议程内容不能为空', trigger: "blur"}
+        ],
+      },
+      workTypeOptions: [],
+      agendaStatusOptions: [],
+    };
+  },
+  created() {
+    this.getList();
+    //设置表格高度对应屏幕高度
+    this.$nextTick(() => {
+      this.clientHeight = (document.body.clientHeight - 130) * 0.8
+    });
+    this.getDicts("agenda_type").then(res => {
+      this.workTypeOptions = res.data;
+    });
+    this.getDicts("agenda_status").then(res => {
+      this.agendaStatusOptions = res.data;
+    });
+  },
+  methods: {
+    save(row) {
+      let data = {
+        id: row.id,
+        status: row.status
+      }
+      updateAgenda(data).then(res => {
+        this.$modal.msgSuccess("修改成功");
+        row.isEdit = false;
+        this.getList();
+      })
+    },
+    handleUpdateRecord(row) {
+      // 备份原始数据
+      row['oldRow'] = JSON.parse(JSON.stringify(row));
+      this.$nextTick(() => {
+        row.isEdit = true;
+      })
+    },
+    cancelRecord(row, index) {
+      // 如果是新增的数据
+      if (row.isAdd) {
+        this.record.dataList.splice(index, 1)
+      } else {
+        // 不是新增的数据  还原数据
+        for (const i in row.oldRow) {
+          row[i] = row.oldRow[i]
+        }
+        row.isEdit = false
+      }
+    },
+    /** 查询装置会议议程列表 */
+    getList() {
+      this.loading = true;
+      listAgenda2(this.queryParams).then(response => {
+        this.total = response.total;
+        this.loading = false;
+        response.rows.forEach(item => {
+          item["isEdit"] = false;
+        })
+        this.agendaList = response.rows;
+      });
+    }, /** 搜索按钮操作 */
+    handleQuery() {
+      console.log(this.queryParams)
+      this.$emit('queryParams', this.queryParams)
+      this.queryParams.pageNum = 1;
+      this.getList();
+
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 399 - 0
cpms-ui/src/views/plant/agenda/index.vue

@@ -0,0 +1,399 @@
+<template>
+  <div>
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px">
+      <el-form-item label="回顾/截止日期" prop="deadlineTime">
+        <el-date-picker clearable size="small" style="width: 200px"
+                        v-model="queryParams.deadlineTime"
+                        type="date"
+                        value-format="yyyy-MM-dd"
+                        placeholder="请选择回顾/截止日期">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="类型" prop="workType" label-width="50px">
+        <el-select v-model="queryParams.workType" placeholder="请选择类型" clearable size="small"
+                   style="width: 100%;">
+          <el-option
+            v-for="dict in workTypeOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="状态" prop="status" label-width="50px">
+        <el-select v-model="queryParams.status" placeholder="请选择状态" clearable size="small"
+                   style="width: 100%;">
+          <el-option
+            v-for="dict in agendaStatusOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['plant:agenda:add']"
+        >新增
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['plant:agenda:edit']"
+        >修改
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['plant:agenda:remove']"
+        >删除
+        </el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table :data="agendaList" :height="clientHeight"
+              border>
+      <el-table-column :label="contentTitle" align="center" prop="agendaContent">
+        <template slot-scope="scope">
+          <span v-if="agendaType==5">{{ scope.row.planType }}{{ scope.row.agendaContent }}</span>
+          <span v-else>{{ scope.row.agendaContent }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="类型" align="center" prop="workType" width="100">
+      </el-table-column>
+      <el-table-column label="跟踪人" align="center" prop="responsible" width="130">
+      </el-table-column>
+      <el-table-column label="回顾/截止时间" align="center" prop="deadlineTime" width="130">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.deadlineTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="状态" align="center" prop="status" width="130">
+      </el-table-column>
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="180">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['plant:agenda:edit']"
+          >修改
+          </el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['plant:agenda:remove']"
+          >删除
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改装置会议议程对话框 -->
+    <el-dialog :close-on-click-modal="false" :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="auto">
+        <el-form-item label="计划类型" prop="planType" v-if="agendaType==5">
+          <el-select v-model="form.planType" style="width: 100%;">
+            <el-option value="THF:" label="THF"/>
+            <el-option value="PTHF:" label="PTHF"/>
+            <el-option value="精馏:" label="精馏"/>
+            <el-option value="BDO:" label="BDO"/>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="议程内容" prop="agendaContent">
+          <el-input type="textarea" v-model="form.agendaContent" placeholder="请输入议程内容"/>
+        </el-form-item>
+        <el-form-item label="类型" prop="workType">
+          <el-select v-model="form.workType" placeholder="请选择类型" @change="selectWorkType" clearable
+                     size="small" style="width: 100%;">
+            <el-option
+              v-for="dict in workTypeOptions"
+              :key="dict.dictValue"
+              :label="dict.dictLabel"
+              :value="dict.dictValue"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="跟踪人" prop="responsible" v-if="isI">
+          <el-input v-model="form.responsible" placeholder="请输入跟踪人"/>
+        </el-form-item>
+        <el-form-item label="回顾/截止时间" prop="deadlineTime" v-if="isI">
+          <el-date-picker clearable size="small" style="width: 100%;"
+                          v-model="form.deadlineTime"
+                          type="date"
+                          value-format="yyyy-MM-dd"
+                          placeholder="请选择回顾/截止时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="状态" prop="status" v-if="isI">
+          <el-select v-model="form.status" placeholder="请选择状态" clearable size="small"
+                     style="width: 100%;">
+            <el-option
+              v-for="dict in agendaStatusOptions"
+              :key="dict.dictValue"
+              :label="dict.dictLabel"
+              :value="dict.dictValue"
+            />
+          </el-select>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {addAgenda, delAgenda, getAgenda, listAgenda, updateAgenda} from "@/api/plant/agenda";
+import {MessageBox} from "element-ui";
+
+export default {
+  props: ['contentTitle', 'agendaType', 'meetingId'],
+  name: "Agenda",
+  data() {
+    return {
+      isI: false,
+      // 页面高度
+      clientHeight: 300,
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: false,
+      // 总条数
+      total: 0,
+      // 装置会议议程表格数据
+      agendaList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        meetingId: this.meetingId,
+        agendaType: this.agendaType,
+        agendaContent: null,
+        workType: null,
+        planType: null,
+        responsible: null,
+        status: null,
+        createrCode: null,
+        createdate: null,
+        updaterCode: null,
+        updatedate: null,
+        deptId: null,
+        remarks: null,
+        presided: null,
+        isHis: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        agendaContent: [
+          {required: true, message: '议程内容不能为空', trigger: "blur"}
+        ],
+        responsible: [
+          {required: true, message:'跟踪人不能为空', trigger: "blur"}
+        ],
+        deadlineTime: [
+          {required: true, message: '回顾/截止日期不能为空', trigger: "blur"}
+        ],
+        status: [
+          {required: true, message: '状态不能为空', trigger: "blur"}
+        ],
+        workType: [
+          {required: true, message: '类型不能为空', trigger: "blur"}
+        ],
+      },
+      workTypeOptions: [],
+      agendaStatusOptions: [],
+    };
+  },
+  created() {
+    this.getList();
+    //设置表格高度对应屏幕高度
+    this.$nextTick(() => {
+      this.clientHeight = (document.body.clientHeight - 130) * 0.8
+    });
+    this.getDicts("agenda_type").then(res => {
+      this.workTypeOptions = res.data;
+    });
+    this.getDicts("agenda_status").then(res => {
+      this.agendaStatusOptions = res.data;
+    });
+  },
+  methods: {
+    selectWorkType(val) {
+      this.isI = val !== 'I';
+      if (val==='A')
+      this.form.status='Open'
+      else if (val==='P')
+        this.form.status='On Going'
+    },
+    /** 查询装置会议议程列表 */
+    getList() {
+      if (!this.meetingId) {
+        this.queryParams.isHis = 0;
+      }
+      this.loading = true;
+      listAgenda(this.queryParams).then(response => {
+        this.agendaList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        meetingId: this.meetingId,
+        agendaType: this.agendaType,
+        agendaContent: null,
+        workType: null,
+        planType: null,
+        responsible: null,
+        status: null,
+        delFlag: null,
+        createrCode: null,
+        createdate: null,
+        updaterCode: null,
+        updatedate: null,
+        deptId: null,
+        remarks: null,
+        presided: null,
+        isHis: null,
+        deadlineTime: null,
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      console.log(this.queryParams)
+      this.$emit('queryParams', this.queryParams)
+      this.queryParams.pageNum = 1;
+      this.getList();
+
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length !== 1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加装置会议议程";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getAgenda(id).then(response => {
+        this.form = response.data;
+        this.isI = response.data.workType !== 'I';
+        this.open = true;
+        this.title = "修改装置会议议程";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      if (this.meetingId == null) {
+        this.form.isHis = 0;
+      } else {
+        this.form.isHis = 1;
+      }
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateAgenda(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addAgenda(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      MessageBox.confirm('是否确认删除数据项?').then(function () {
+        return delAgenda(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {
+      });
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('plant/agenda/export', {
+        ...this.queryParams
+      }, `agenda_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 217 - 0
cpms-ui/src/views/plant/content/hisContent.vue

@@ -0,0 +1,217 @@
+<template>
+  <div class="app-container">
+    <el-form v-show="showSearch" ref="queryForm" :inline="true" :model="his.query" label-width="100px">
+      <el-form-item label="回顾/截止日期" prop="deadlineTime">
+        <el-date-picker v-model="his.query.deadlineTime" clearable placeholder="请选择回顾/截止日期"
+                        size="small"
+                        style="width: 200px"
+                        type="date"
+                        value-format="yyyy-MM-dd" @change="getContentList">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="类型" label-width="50px" prop="workType">
+        <el-select v-model="his.query.workType" placeholder="请选择类型" clearable size="small"
+                   style="width: 100%;" @change="getContentList">
+          <el-option
+            v-for="dict in workTypeOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="状态" label-width="50px" prop="status">
+        <el-select v-model="his.query.status" placeholder="请选择状态" clearable size="small"
+                   style="width: 100%;" @change="getContentList">
+          <el-option
+            v-for="dict in agendaStatusOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="跟踪人" label-width="70px" prop="responsible">
+        <el-input v-model="his.query.responsible" placeholder="请输入跟踪人"/>
+      </el-form-item>
+      <el-form-item>
+        <el-button icon="el-icon-search" size="mini" type="cyan" @click="getContentList">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getContentList"></right-toolbar>
+    </el-row>
+
+    <el-table :data="his.contentList" :height="clientHeight" border>
+      <el-table-column align="center" label="主题" prop="subject"/>
+      <el-table-column align="center" label="会议编号" prop="meetingNo"/>
+      <el-table-column align="center" label="会议时间" prop="meetingDate">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.meetingDate, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column align="center" label="内容" prop="agendaContent">
+        <template slot-scope="scope">
+          <el-input v-if="scope.row.isEdit&&scope.row.workType==='P'" v-model="scope.row.agendaContent"
+                    placeholder="请输入行动项内容"
+                    type="textarea"/>
+          <span v-else>{{ scope.row.agendaContent }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column align="center" label="类型" prop="workType"/>
+      <el-table-column align="center" label="跟踪人" prop="responsible"/>
+      <el-table-column align="center" label="回顾/截止时间" prop="deadlineTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.deadlineTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column align="center" label="状态" prop="status">
+        <template slot-scope="scope">
+          <el-select v-if="scope.row.isEdit" v-model="scope.row.status" placeholder="请选择状态"
+                     clearable
+                     size="small" style="width: 100%;">
+            <el-option
+              v-for="dict in agendaStatusOptions"
+              :key="dict.dictValue"
+              :label="dict.dictLabel"
+              :value="dict.dictValue"
+            />
+          </el-select>
+          <span v-else>{{ scope.row.status }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column align="center" class-name="small-padding fixed-width" label="操作">
+        <template slot-scope="scope">
+          <el-button
+            v-if="!scope.row.isEdit&&scope.row.workType!=='I'"
+            v-hasPermi="['plant:content:edit']"
+            icon="el-icon-edit"
+            size="mini"
+            type="text"
+            @click="handleUpdateRecord(scope.row)"
+          >修改
+          </el-button>
+          <el-button v-if="scope.row.isEdit"
+                     icon="el-icon-check"
+                     size="mini"
+                     type="text"
+                     @click="save(scope.row)"
+          >保存
+          </el-button>
+          <el-button v-if="scope.row.isEdit"
+                     icon="el-icon-close"
+                     size="mini"
+                     type="text"
+                     @click="cancelRecord(scope.row,scope.$index)"
+          >取消
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="his.total>0"
+      :limit.sync="his.query.pageSize"
+      :page.sync="his.query.pageNum"
+      :total="his.total"
+      @pagination="getContentList"
+    />
+  </div>
+</template>
+
+<script>
+import {listContent2, updateContent} from "@/api/plant/content";
+
+export default {
+  name: "hisContent",
+  data() {
+    return {
+      his: {
+        open: false,
+        contentList: [],
+        total: 0,
+        query: {
+          pageNum: 1,
+          pageSize: 10,
+          isHis: 1,
+        }
+      },
+      // 显示搜索条件
+      showSearch: false,
+      clientHeight: 300,
+      workTypeOptions: [],
+      agendaStatusOptions: [],
+      plantCodeOptions: [],
+    }
+  },
+  created() {
+    //设置表格高度对应屏幕高度
+    this.$nextTick(() => {
+      this.clientHeight = (document.body.clientHeight - 80) * 0.8
+    })
+    this.getContentList();
+    this.getDicts("PLANT_DIVIDE").then(response => {
+      this.plantCodeOptions = response.data;
+    });
+    this.getDicts("agenda_type").then(res => {
+      this.workTypeOptions = res.data;
+    });
+    this.getDicts("agenda_status").then(res => {
+      this.agendaStatusOptions = res.data;
+    });
+  },
+  methods: {
+    save(row) {
+      let data = {
+        id: row.id,
+        status: row.status,
+        agendaContent: row.agendaContent,
+      }
+      updateContent(data).then(res => {
+        this.$modal.msgSuccess("修改成功");
+        row.isEdit = false;
+        this.getContentList();
+      })
+    },
+    handleUpdateRecord(row) {
+      // 备份原始数据
+      row['oldRow'] = JSON.parse(JSON.stringify(row));
+      this.$nextTick(() => {
+        row.isEdit = true;
+      })
+    },
+    cancelRecord(row, index) {
+      // 如果是新增的数据
+      if (row.isAdd) {
+        this.record.dataList.splice(index, 1)
+      } else {
+        // 不是新增的数据  还原数据
+        for (const i in row.oldRow) {
+          row[i] = row.oldRow[i]
+        }
+        row.isEdit = false
+      }
+    },
+    getContentList() {
+      listContent2(this.his.query).then(response => {
+        response.rows.forEach(item => {
+          item["isEdit"] = false;
+        })
+        this.his.contentList = response.rows;
+        this.his.total = response.total;
+      });
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 513 - 0
cpms-ui/src/views/plant/content/index.vue

@@ -0,0 +1,513 @@
+<template>
+  <div>
+    <!--    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+          < <el-form-item label="类型" prop="workType" label-width="50px">
+          <el-select v-model="queryParams.workType" :placeholder="$t('请选择') + $t('类型')" clearable size="small" style="width: 100%;">
+            <el-option
+              v-for="dict in workTypeOptions"
+              :key="dict.dictValue"
+              :label="dict.dictLabel"
+              :value="dict.dictValue"
+            />
+          </el-select>
+        </el-form-item>
+          <el-form-item label="状态" prop="status" label-width="50px">
+            <el-select v-model="queryParams.status" :placeholder="$t('请选择') + $t('状态')" clearable size="small"  style="width: 100%;">
+              <el-option
+                v-for="dict in agendaStatusOptions"
+                :key="dict.dictValue"
+                :label="dict.dictLabel"
+                :value="dict.dictValue"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="回顾/截止时间" prop="deadlineTime" label-width="110px">
+            <el-date-picker clearable
+              v-model="queryParams.deadlineTime"
+              type="date"
+              value-format="yyyy-MM-dd"
+              placeholder="请选择回顾/截止时间">
+            </el-date-picker>
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+            <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+          </el-form-item>
+        </el-form>-->
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['plant:content:add']"
+        >新增
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['plant:content:edit']"
+        >修改
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['plant:content:remove']"
+        >删除
+        </el-button>
+      </el-col>
+      <!--      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>-->
+    </el-row>
+
+    <el-table v-loading="loading" :data="contentList" @selection-change="handleSelectionChange" :height="clientHeight"
+              border>
+      <el-table-column type="selection" width="55" align="center"/>
+      <el-table-column label="内容" align="center" prop="agendaContent" width="auto">
+        <template slot-scope="scope">
+          <p v-html="scope.row.agendaContent" />
+        </template>
+      </el-table-column>
+      <el-table-column label="类型" align="center" prop="workType"/>
+      <el-table-column label="跟踪人" align="center" prop="responsible"/>
+      <el-table-column label="回顾/截止时间" align="center" prop="deadlineTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.deadlineTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="状态" align="center" prop="status"/>
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+              icon="el-icon-folder"
+              size="mini"
+              type="text"
+              @click="openFileDialog(scope.row)"
+          >附件
+          </el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['plant:content:edit']"
+          >修改
+          </el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['plant:content:remove']"
+          >删除
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改装置空白会议对话框 -->
+    <el-dialog :close-on-click-modal="false" :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="auto">
+        <el-form-item label="会议内容">
+          <editor type="textarea" v-model="form.agendaContent" :min-height="192"/>
+        </el-form-item>
+        <el-form-item label="类型" prop="workType">
+          <el-select v-model="form.workType" placeholder="请选择类型" clearable size="small" style="width: 100%;"  @change="selectWorkType" >
+            <el-option
+              v-for="dict in workTypeOptions"
+              :key="dict.dictValue"
+              :label="dict.dictLabel"
+              :value="dict.dictValue"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="责任人" prop="responsible" v-if="isI">
+          <el-input v-model="form.responsible" placeholder="请输入责任人"/>
+        </el-form-item>
+        <el-form-item label="状态" v-if="isI">
+          <el-select v-model="form.status" placeholder="请选择状态" clearable size="small" style="width: 100%;">
+            <el-option
+              v-for="dict in agendaStatusOptions"
+              :key="dict.dictValue"
+              :label="dict.dictLabel"
+              :value="dict.dictValue"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="回顾/截止时间" prop="deadlineTime"v-if="isI">
+          <el-date-picker clearable
+                          v-model="form.deadlineTime"
+                          type="date"
+                          value-format="yyyy-MM-dd"
+                          placeholder="请选择回顾/截止时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="备注" prop="remarks">
+          <el-input v-model="form.remarks" type="textarea" placeholder="请输入内容"/>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+
+    <el-dialog :close-on-click-modal="false" :visible.sync="file.open" append-to-body title="附件管理" width="60%">
+      <el-row :gutter="10" class="mb8">
+        <el-col :span="1.5">
+          <el-button
+              icon="el-icon-plus"
+              plain
+              size="mini"
+              type="primary"
+              @click="handleFileAdd"
+          >新增
+          </el-button>
+        </el-col>
+      </el-row>
+      <el-table  :data="file.fileList" :height="clientHeight-100"
+                 border>
+        <el-table-column align="center" label="附件名称" prop="fileName">
+          <template slot-scope="scope">
+            <el-button
+                size="mini"
+                type="text"
+                @click="previewFile(scope.row.fileUrl)"
+            >{{ scope.row.fileName }}
+            </el-button>
+          </template>
+        </el-table-column>
+        <el-table-column align="center" label="上传时间" prop="uploadDate" width="180">
+          <template slot-scope="scope">
+            <span>{{ parseTime(scope.row.uploadDate, '{y}-{m}-{d}') }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column align="center" label="上传人" prop="uploader">
+        </el-table-column>
+        <el-table-column align="center" class-name="small-padding fixed-width" label="操作">
+          <template slot-scope="scope">
+            <el-button
+                icon="el-icon-delete"
+                size="mini"
+                type="text"
+                @click="handleFileRemove(scope.row)"
+            >删除
+            </el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+
+      <pagination
+          v-show="file.total>0"
+          :limit.sync="file.queryParams.pageSize"
+          :page.sync="file.queryParams.pageNum"
+          :total="file.total"
+          @pagination="getFileList"
+      />
+    </el-dialog>
+    <el-dialog :close-on-click-modal="false" :visible.sync="doc.open" append-to-body title="附件上传" width="400px">
+      <el-upload
+          ref="doc"
+          :action="doc.url"
+          :auto-upload="false"
+          :file-list="doc.fileList"
+          :headers="doc.headers"
+          :on-progress="handleFileDocProgress"
+          :on-success="handleFileDocSuccess"
+          drag
+          multiple>
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
+      </el-upload>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitUpload">确 定</el-button>
+        <el-button @click="cancelUpload">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {addContent, delContent, getContent, listContent, updateContent} from "@/api/plant/content";
+import Editor from "../../../components/Editor/index.vue";
+import {delFile,listFile} from "../../../api/file/file";
+import {getToken} from "../../../utils/auth";
+
+export default {
+  name: "Content",
+  components: {Editor},
+  props: ['meetingId'],
+  data() {
+    return {
+      file: {
+        open: false,
+        fileList: [],
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          linkId: null,
+          linkName: 'meetContent',
+        },
+        total:0,
+      },
+      doc: {
+        id: null,
+        file: "",
+        fileList: [],
+        // 是否显示弹出层
+        open: false,
+        // 设置上传的请求头部
+        headers: {Authorization: "Bearer " + getToken()},
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/file/file/uploadFile",
+      },
+      isI: false,
+      // 页面高度
+      clientHeight: 300,
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: false,
+      // 总条数
+      total: 0,
+      // 装置空白会议表格数据
+      contentList: [],
+      workTypeOptions: [],
+      agendaStatusOptions: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        meetingId: this.meetingId,
+        agendaContent: null,
+        workType: null,
+        responsible: null,
+        status: null,
+        createrCode: null,
+        createdate: null,
+        updaterCode: null,
+        updatedate: null,
+        deptId: null,
+        remarks: null,
+        presided: null,
+        isHis: null,
+        deadlineTime: null,
+        meetingTitle: null
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {}
+    };
+  },
+  created() {
+    this.getList();
+    //设置表格高度对应屏幕高度
+    this.$nextTick(() => {
+      this.clientHeight = (document.body.clientHeight - 80) * 0.8
+    });
+    this.getDicts("agenda_type").then(res => {
+      this.workTypeOptions = res.data;
+    });
+    this.getDicts("agenda_status").then(res => {
+      this.agendaStatusOptions = res.data;
+    });
+  },
+  methods: {
+    previewFile(url){
+      window.open(process.env.VUE_APP_BASE_API + url);
+    },
+    submitUpload() {
+      this.$refs.doc.submit();
+      this.doc.open = false;
+      this.doc.fileList = [];
+      this.getFileList();
+    },
+    //附件上传中处理
+    handleFileDocProgress(event, file, fileList) {
+      this.doc.file = file;
+    },
+    //附件上传成功处理
+    handleFileDocSuccess(response, file, fileList) {
+      this.$modal.msgSuccess("上传成功");
+      this.doc.open = false;
+      this.doc.fileList = [];
+      this.getFileList();
+    },
+    cancelUpload() {
+      this.doc.open = false;
+      this.doc.fileList = [];
+    },
+    openFileDialog(row) {
+      this.file.open = true
+      this.file.fileList=[];
+      this.file.queryParams.linkId = row.id;
+      this.getFileList();
+    },
+    getFileList() {
+      listFile(this.file.queryParams).then(response => {
+        this.file.fileList = response.rows;
+        this.file.total = response.total;
+      })
+    },
+    handleFileAdd() {
+      this.doc.open = true;
+      this.doc.url = process.env.VUE_APP_BASE_API + "/file/file/uploadFile?linkId=" + this.file.queryParams.linkId + "&linkName=" + this.file.queryParams.linkName;
+    },
+    handleFileRemove(row) {
+      delFile(row.id).then(res => {
+        this.$modal.msgSuccess("删除成功");
+        this.getFileList();
+      });
+    },
+    selectWorkType(val) {
+      this.isI = val !== 'I';
+      if (val==='A')
+        this.form.status='Open'
+      else if (val==='P')
+        this.form.status='On Going'
+    },
+    /** 查询装置空白会议列表 */
+    getList() {
+      if (!this.meetingId) {
+        this.queryParams.isHis = 0;
+      }
+      this.loading = true;
+      listContent(this.queryParams).then(response => {
+        this.contentList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        meetingId: null,
+        agendaContent: null,
+        workType: null,
+        responsible: null,
+        status: null,
+        delFlag: null,
+        createrCode: null,
+        createdate: null,
+        updaterCode: null,
+        updatedate: null,
+        deptId: null,
+        remarks: null,
+        presided: null,
+        isHis: 0,
+        deadlineTime: null,
+        meetingTitle: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length !== 1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加装置空白会议";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getContent(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改装置空白会议";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateContent(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addContent(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$confirm('是否确认删除数据项?').then(function () {
+        return delContent(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {
+      });
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('plant/content/export', {
+        ...this.queryParams
+      }, `content_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 3 - 0
cpms-ui/src/views/plant/meeting/index.vue

@@ -0,0 +1,3 @@
+<template >
+  <router-view />
+</template>

+ 6 - 6
cpms-ui/src/views/plant/staffmgr/index.vue

@@ -1223,14 +1223,14 @@ export default {
           this.form.specialDuty = this.specialDutys.join();
           if (this.form.id != null) {
             updateStaffmgr(this.form).then(response => {
-              this.msgSuccess('修改成功');
+              this.$modal.msgSuccess('修改成功');
               this.open = false;
               this.getList();
               this.getpIdTreeselect();
             });
           } else {
             addStaffmgr(this.form).then(response => {
-              this.msgSuccess('新增成功');
+              this.$modal.msgSuccess('新增成功');
               this.open = false;
               this.getList();
             });
@@ -1249,7 +1249,7 @@ export default {
         return delStaffmgr(ids);
       }).then(() => {
         this.getList();
-        this.msgSuccess('删除成功');
+        this.$modal.msgSuccess('删除成功');
       })
     },
 
@@ -1257,7 +1257,7 @@ export default {
     handleLeftDelete(id) {
       delLeftStaffmgr(id).then(() => {
         this.getList();
-        this.msgSuccess('离岗成功');
+        this.$modal.msgSuccess('离岗成功');
       })
     },
     /** 导出按钮操作 */
@@ -1341,7 +1341,7 @@ export default {
         return delCommonfile(ids);
       }).then(() => {
         this.getFileList()
-        this.msgSuccess('删除成功');
+        this.$modal.msgSuccess('删除成功');
       })
     },
     // 文件下载处理
@@ -1384,7 +1384,7 @@ export default {
       }).then(() => {
         this.getLeftData();
         this.getList();
-        this.msgSuccess('复职成功');
+        this.$modal.msgSuccess('复职成功');
       })
     },
     //数据分析

+ 455 - 0
cpms-ui/src/views/plant/weekmeeting/bMeeting.vue

@@ -0,0 +1,455 @@
+<template>
+  <div>
+    <el-button
+      v-if="this.meetingId == null"
+      style="margin: 15px 1px 1px 35px;"
+      type="success"
+      icon="el-icon-edit"
+      size="mini"
+      @click="handleAdd"
+      v-hasPermi="['plant:keymaintenance:edit']"
+    >保存会议
+    </el-button>
+    <el-button
+      type="primary"
+      v-if="this.meetingId == null"
+      style="margin: 15px 1px 1px 35px;"
+      icon="el-icon-s-order"
+      size="mini"
+      @click="openDialog"
+    >历史行动项管理
+    </el-button>
+    <h3
+      v-if="this.meetingId != null"
+      style="margin: 15px 1px 1px 35px;"
+    >会议内容</h3>
+
+    <el-tabs tab-position="left" class="app-container">
+      <el-tab-pane label="参会人员">
+        <person :meetingId="meetingId"/>
+      </el-tab-pane>
+      <el-tab-pane label="内容">
+        <Content :meetingId="meetingId"/>
+      </el-tab-pane>
+    </el-tabs>
+
+    <!-- 添加或修改装置会议对话框 -->
+    <el-dialog :close-on-click-modal="false" v-dialogDrag :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="主题" prop="subject">
+          <el-input v-model="form.subject" placeholder="请输入主题"/>
+        </el-form-item>
+        <el-form-item label="主持人" prop="presided">
+          <el-input v-model="form.presided" placeholder="请输入主持人"/>
+        </el-form-item>
+        <el-form-item label="记录人" prop="recorder">
+          <el-input v-model="form.recorder" placeholder="请输入记录人"/>
+        </el-form-item>
+        <el-form-item label="会议编号" prop="meetingNo">
+          <el-input v-model="form.meetingNo" placeholder="请输入 +会议编号"/>
+        </el-form-item>
+        <el-form-item label="会议时间" prop="meetingDate">
+          <el-date-picker clearable size="small" style="width: 200px"
+                          v-model="form.meetingDate"
+                          type="date"
+                          value-format="yyyy-MM-dd"
+                          placeholder="请选择会议时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="会议地点" prop="venue">
+          <el-input v-model="form.venue" placeholder="请输入会议地点"/>
+        </el-form-item>
+        <el-form-item label="备注" prop="remarks">
+          <el-input v-model="form.remarks" placeholder="请输入备注"/>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+
+    <el-dialog :close-on-click-modal="false" title="历史行动项管理" :visible.sync="his.open" width="70%" append-to-body>
+      <el-form :model="his.query" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px">
+        <el-form-item label="回顾/截止日期" prop="deadlineTime">
+          <el-date-picker clearable size="small" style="width: 200px"
+                          v-model="his.query.deadlineTime"
+                          type="date"
+                          value-format="yyyy-MM-dd"
+                          placeholder="请选择回顾/截止日期" @change="getContentList">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="类型" prop="workType" label-width="50px">
+          <el-select v-model="his.query.workType" placeholder="请选择类型" clearable size="small"
+                     style="width: 100%;" @change="getContentList">
+            <el-option
+              v-for="dict in workTypeOptions"
+              :key="dict.dictValue"
+              :label="dict.dictLabel"
+              :value="dict.dictValue"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="状态" prop="status" label-width="50px">
+          <el-select v-model="his.query.status" placeholder="请选择状态" clearable size="small"
+                     style="width: 100%;" @change="getContentList">
+            <el-option
+              v-for="dict in agendaStatusOptions"
+              :key="dict.dictValue"
+              :label="dict.dictLabel"
+              :value="dict.dictValue"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="跟踪人" prop="responsible" label-width="70px">
+          <el-input v-model="his.query.responsible" placeholder="请输入跟踪人" />
+        </el-form-item>
+        <el-form-item>
+          <el-button type="cyan" icon="el-icon-search" size="mini" @click="getContentList">搜索</el-button>
+          <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+        </el-form-item>
+      </el-form>
+
+      <el-row :gutter="10" class="mb8">
+        <right-toolbar :showSearch.sync="showSearch" @queryTable="getContentList"></right-toolbar>
+      </el-row>
+
+      <el-table :data="his.contentList" :height="clientHeight" border>
+        <el-table-column label="主题" align="center" prop="subject"/>
+        <el-table-column label="会议编号" align="center" prop="meetingNo"/>
+        <el-table-column label="会议时间" align="center" prop="meetingDate">
+          <template slot-scope="scope">
+            <span>{{ parseTime(scope.row.meetingDate, '{y}-{m}-{d}') }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="内容" align="center" prop="agendaContent">
+          <template slot-scope="scope">
+            <el-input type="textarea" v-model="scope.row.agendaContent" placeholder="请输入行动项内容" v-if="scope.row.isEdit&&scope.row.workType==='P'"/>
+            <span v-else>{{ scope.row.agendaContent }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="类型" align="center" prop="workType"/>
+        <el-table-column label="跟踪人" align="center" prop="responsible"/>
+        <el-table-column label="回顾/截止时间" align="center" prop="deadlineTime" width="180">
+          <template slot-scope="scope">
+            <span>{{ parseTime(scope.row.deadlineTime, '{y}-{m}-{d}') }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="状态" align="center" prop="status">
+          <template slot-scope="scope">
+            <el-select v-if="scope.row.isEdit" v-model="scope.row.status" placeholder="请选择状态"
+                       clearable
+                       size="small" style="width: 100%;">
+              <el-option
+                v-for="dict in agendaStatusOptions"
+                :key="dict.dictValue"
+                :label="dict.dictLabel"
+                :value="dict.dictValue"
+              />
+            </el-select>
+            <span v-else>{{ scope.row.status }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+          <template slot-scope="scope">
+            <el-button
+              v-if="!scope.row.isEdit&&scope.row.workType!=='I'"
+              size="mini"
+              type="text"
+              icon="el-icon-edit"
+              @click="handleUpdateRecord(scope.row)"
+              v-hasPermi="['plant:content:edit']"
+            >修改
+            </el-button>
+            <el-button v-if="scope.row.isEdit"
+                       size="mini"
+                       type="text"
+                       icon="el-icon-check"
+                       @click="save(scope.row)"
+            >保存
+            </el-button>
+            <el-button v-if="scope.row.isEdit"
+                       size="mini"
+                       type="text"
+                       icon="el-icon-close"
+                       @click="cancelRecord(scope.row,scope.$index)"
+            >取消
+            </el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+
+      <pagination
+        v-show="his.total>0"
+        :total="his.total"
+        :page.sync="his.query.pageNum"
+        :limit.sync="his.query.pageSize"
+        @pagination="getContentList"
+      />
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {addMeeting, getMeeting, updateMeeting} from "@/api/plant/meeting";
+import Treeselect from "@riophae/vue-treeselect";
+import {treeselect} from "@/api/system/dept";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import {getToken} from "@/utils/auth";
+import Content from "@/views/plant/content/index.vue";
+import Person from "@/views/components/meeting/person.vue";
+import {listContent2, updateContent} from "@/api/plant/content";
+
+export default {
+  name: "Weekmeeting",
+  components: {
+    Content,
+    Person,
+    Treeselect
+  },
+  data() {
+    return {
+      workTypeOptions: [],
+      agendaStatusOptions: [],
+      his: {
+        open: false,
+        contentList: [],
+        total: 0,
+        query: {
+          pageNum: 1,
+          pageSize: 10,
+          isHis: 1,
+        }
+      },
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: false,
+      // 总条数
+      total: 0,
+      // 装置会议表格数据
+      meetingList: [],
+      // 弹出层标题
+      title: "",
+      // 部门树选项
+      deptOptions: undefined,
+      clientHeight: 300,
+      // 是否显示弹出层
+      open: false,
+      // 装置字典
+      plantCodeOptions: [],
+      // 表单参数
+      form: {},
+      meetingId: 0,
+      // 附件参数
+      doc: {
+        file: "123",
+        // 是否显示弹出层(报告附件)
+        open: false,
+        // 弹出层标题(报告附件)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 报告附件上传位置编号
+        ids: 0,
+        // 设置上传的请求头部
+        headers: {Authorization: "Bearer " + getToken()},
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/common/commonfile/uploadFile",
+        commonfileList: null,
+        queryParams: {
+          pId: null,
+          pType: 'manageactivity'
+        },
+        pType: 'manageactivity',
+        pId: null
+      },
+      // 表单校验
+      rules: {
+        subject: [
+          {required: true, message: '会议主题不能为空', trigger: "change"}
+        ],
+      }
+    };
+  },
+  watch: {
+    // 根据名称筛选部门树
+    deptName(val) {
+      this.$refs.tree.filter(val);
+    }
+  },
+  created() {
+    this.meetingId = this.$route.params && this.$route.params.tableId;
+    //设置表格高度对应屏幕高度
+    this.$nextTick(() => {
+      this.clientHeight = (document.body.clientHeight - 80) * 0.8
+    })
+    this.getTreeselect();
+    this.getDicts("PLANT_DIVIDE").then(response => {
+      this.plantCodeOptions = response.data;
+    });
+    this.getDicts("agenda_status").then(res => {
+      this.agendaStatusOptions = res.data;
+    });
+  },
+  methods: {
+    save(row) {
+      let data = {
+        id: row.id,
+        status: row.status
+      }
+      updateContent(data).then(res => {
+        this.$modal.msgSuccess("修改成功");
+        row.isEdit = false;
+        this.getContentList();
+      })
+    },
+    handleUpdateRecord(row) {
+      // 备份原始数据
+      row['oldRow'] = JSON.parse(JSON.stringify(row));
+      this.$nextTick(() => {
+        row.isEdit = true;
+      })
+    },
+    cancelRecord(row, index) {
+      // 如果是新增的数据
+      if (row.isAdd) {
+        this.record.dataList.splice(index, 1)
+      } else {
+        // 不是新增的数据  还原数据
+        for (const i in row.oldRow) {
+          row[i] = row.oldRow[i]
+        }
+        row.isEdit = false
+      }
+    },
+    openDialog() {
+      this.his.open = true;
+      this.getContentList();
+      this.getDicts("agenda_type").then(res => {
+        this.workTypeOptions = res.data;
+      });
+      this.getDicts("agenda_status").then(res => {
+        this.agendaStatusOptions = res.data;
+      });
+    },
+    getContentList() {
+      listContent2(this.his.query).then(response => {
+        response.rows.forEach(item => {
+          item["isEdit"] = false;
+        })
+        this.his.contentList = response.rows;
+        this.his.total = response.total;
+      });
+    },
+    /** 查询部门下拉树结构 */
+    getTreeselect() {
+      treeselect().then(response => {
+        this.deptOptions = response.data;
+      });
+    },
+    // 装置字典翻译
+    plantCodeFormat(row, column) {
+      return this.selectDictLabel(this.plantCodeOptions, row.plantCode);
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        plantCode: null,
+        recorder: null,
+        meetingNo: null,
+        meetingDate: null,
+        venue: null,
+        subject: null,
+        delFlag: null,
+        createrCode: null,
+        createdate: null,
+        updaterCode: null,
+        updatedate: null,
+        deptId: null,
+        remarks: null,
+        presided: null,
+        mtType: 2,
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length !== 1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = '新增装置会议';
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getMeeting(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = '修改装置会议';
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateMeeting(this.form).then(response => {
+              this.$modal.msgSuccess('修改成功');
+              this.open = false;
+              window.location.reload();
+            });
+          } else {
+            addMeeting(this.form).then(response => {
+              this.$modal.msgSuccess('新增成功');
+              this.open = false;
+             location.reload();
+            });
+          }
+        }
+      });
+    },
+    /** 报告附件按钮操作 */
+    importMeeting(row) {
+      this.doc.open = true;
+      this.$nextTick(() => {
+        this.$refs.doc.clearFiles()
+      })
+    },
+  }
+};
+</script>
+
+<style>
+
+</style>

+ 312 - 0
cpms-ui/src/views/plant/weekmeeting/index.vue

@@ -0,0 +1,312 @@
+<template>
+  <div>
+    <el-button
+      v-if="this.meetingId == null"
+      style="margin: 15px 1px 1px 35px;"
+      type="success"
+      icon="el-icon-edit"
+      size="mini"
+      @click="handleAdd"
+      v-hasPermi="['plant:keymaintenance:edit']"
+    >保存会议
+    </el-button>
+    <!--    <el-button-->
+    <!--      v-if="this.meetingId == null"-->
+    <!--      style="margin: 15px 1px 1px 35px;"-->
+    <!--      type="success"-->
+    <!--      icon="el-icon-edit"-->
+    <!--      size="mini"-->
+    <!--      @click="importMeeting"-->
+    <!--      v-hasPermi="['plant:keymaintenance:edit']"-->
+    <!--    >导入会议-->
+    <!--    </el-button>-->
+    <h3
+      v-if="this.meetingId != null"
+      style="margin: 15px 1px 1px 35px;"
+    >会议内容</h3>
+
+    <el-tabs tab-position="left">
+      <el-tab-pane label="参会人员">
+        <person :meetingId="meetingId" :isCc="1"/>
+      </el-tab-pane>
+      <el-tab-pane label="内容">
+        <agenda :contentTitle="'内容'" :agendaType="1" :meetingId="meetingId"/>
+      </el-tab-pane>
+      <el-tab-pane label="EHS信息分享">
+        <agenda :contentTitle="'√ EHS信息分享'" :agendaType="2" :meetingId="meetingId"/>
+      </el-tab-pane>
+      <el-tab-pane label="质量议题">
+        <agenda :contentTitle="'√ 质量议题'" :agendaType="3" :meetingId="meetingId"/>
+      </el-tab-pane>
+      <el-tab-pane label="行动项追踪系统状态">
+        <agenda :contentTitle="'√ 行动项追踪系统状态'" :agendaType="4" :meetingId="meetingId"/>
+      </el-tab-pane>
+      <el-tab-pane label="生产计划">
+        <agenda :contentTitle="'√ 生产计划'" :agendaType="14" :meetingId="meetingId"/>
+      </el-tab-pane>
+      <el-tab-pane label="装置运行状态,负荷等">
+        <agenda :contentTitle="'√ 装置运行状态,负荷等'" :agendaType="5" :meetingId="meetingId"/>
+      </el-tab-pane>
+      <el-tab-pane label="OpEx/KPIs 议题">
+        <agenda :contentTitle="'√ OpEx/KPIs 议题'" :agendaType="6" :meetingId="meetingId"/>
+      </el-tab-pane>
+      <el-tab-pane label="MOC议题">
+        <agenda :contentTitle="'√ MOC议题'" :agendaType="7" :meetingId="meetingId"/>
+      </el-tab-pane>
+      <el-tab-pane label="CapEx/检修议题">
+        <agenda :contentTitle="'√ CapEx/检修议题'" :agendaType="8" :meetingId="meetingId"/>
+      </el-tab-pane>
+      <el-tab-pane label="文档完整性">
+        <agenda :contentTitle="'√ 文档完整性'" :agendaType="9" :meetingId="meetingId"/>
+      </el-tab-pane>
+      <el-tab-pane label="其他/5S">
+        <agenda :contentTitle="'√ 其他/5S'" :agendaType="10" :meetingId="meetingId"/>
+      </el-tab-pane>
+      <el-tab-pane label="其他/LEAN">
+        <agenda :contentTitle="'√ 其他/LEAN'" :agendaType="11" :meetingId="meetingId"/>
+      </el-tab-pane>
+      <el-tab-pane label="静设备近期PM/检维修计划">
+        <agenda :contentTitle="'√ 静设备近期PM/检维修计划'" :agendaType="12" :meetingId="meetingId"/>
+      </el-tab-pane>
+      <el-tab-pane label="电气仪表近期PM/检维修计划">
+        <agenda :contentTitle="'√ 电气仪表近期PM/检维修计划'" :agendaType="13" :meetingId="meetingId"/>
+      </el-tab-pane>
+    </el-tabs>
+    <!-- 添加或修改装置会议对话框 -->
+    <el-dialog :close-on-click-modal="false" v-dialogDrag :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="主题" prop="subject">
+          <el-input v-model="form.subject" placeholder="请输入主题"/>
+        </el-form-item>
+        <el-form-item label="主持人" prop="presided">
+          <el-input v-model="form.presided" placeholder="请输入主持人"/>
+        </el-form-item>
+        <el-form-item label="记录人" prop="recorder">
+          <el-input v-model="form.recorder" placeholder="请输入记录人"/>
+        </el-form-item>
+        <el-form-item label="会议编号" prop="meetingNo">
+          <el-input v-model="form.meetingNo" placeholder="请输入会议编号"/>
+        </el-form-item>
+        <el-form-item label="会议时间" prop="meetingDate">
+          <el-date-picker clearable size="small" style="width: 200px"
+                          v-model="form.meetingDate"
+                          type="date"
+                          value-format="yyyy-MM-dd"
+                          placeholder="请选择会议时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="会议地点" prop="venue">
+          <el-input v-model="form.venue" placeholder="请输入会议地点"/>
+        </el-form-item>
+        <el-form-item label="备注" prop="remarks">
+          <el-input v-model="form.remarks" placeholder="请输入备注"/>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary"  @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {addMeeting, getMeeting, updateMeeting} from "@/api/plant/meeting";
+import {treeselect} from "@/api/system/dept";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import Person from "../../components/meeting/person";
+import {getToken} from "@/utils/auth";
+import Agenda from "@/views/plant/agenda/index.vue";
+
+export default {
+  name: "Weekmeeting",
+  components: {
+    Agenda,
+    Person
+  },
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: false,
+      // 总条数
+      total: 0,
+      // 装置会议表格数据
+      meetingList: [],
+      // 弹出层标题
+      title: "",
+      // 部门树选项
+      deptOptions: undefined,
+      clientHeight: 300,
+      // 是否显示弹出层
+      open: false,
+      // 装置字典
+      plantCodeOptions: [],
+      // 表单参数
+      form: {},
+      meetingId: 0,
+      // 附件参数
+      doc: {
+        file: "123",
+        // 是否显示弹出层(报告附件)
+        open: false,
+        // 弹出层标题(报告附件)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 报告附件上传位置编号
+        ids: 0,
+        // 设置上传的请求头部
+        headers: {Authorization: "Bearer " + getToken()},
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/common/commonfile/uploadFile",
+        commonfileList: null,
+        queryParams: {
+          pId: null,
+          pType: 'manageactivity'
+        },
+        pType: 'manageactivity',
+        pId: null
+      },
+      // 表单校验
+      rules: {
+        subject: [
+          {required: true, message: '会议主题不能为空', trigger: "change"}
+        ],
+      }
+    };
+  },
+  watch: {
+    // 根据名称筛选部门树
+    deptName(val) {
+      this.$refs.tree.filter(val);
+    }
+  },
+  created() {
+    this.meetingId = this.$route.params && this.$route.params.tableId;
+    //设置表格高度对应屏幕高度
+    this.$nextTick(() => {
+      this.clientHeight = (document.body.clientHeight - 80) * 0.8
+    })
+    this.getTreeselect();
+    this.getDicts("PLANT_DIVIDE").then(response => {
+      this.plantCodeOptions = response.data;
+    });
+  },
+  methods: {
+    /** 查询部门下拉树结构 */
+    getTreeselect() {
+      treeselect().then(response => {
+        this.deptOptions = response.data;
+      });
+    },
+    // 装置字典翻译
+    plantCodeFormat(row, column) {
+      return this.selectDictLabel(this.plantCodeOptions, row.plantCode);
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        plantCode: null,
+        recorder: null,
+        meetingNo: null,
+        meetingDate: null,
+        venue: null,
+        subject: null,
+        delFlag: null,
+        createrCode: null,
+        createdate: null,
+        updaterCode: null,
+        updatedate: null,
+        deptId: null,
+        remarks: null,
+        presided: null,
+        mtType: 1,
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length !== 1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = '新增装置会议';
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getMeeting(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = '修改装置会议';
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+          if (valid) {
+            if (this.form.id != null) {
+              updateMeeting(this.form).then(response => {
+                this.$modal.msgSuccess('修改成功');
+                this.open = false;
+                // this.getList();
+              });
+            } else {
+              // this.form.tMtAgenda = {};//传过来的值存到这里
+              addMeeting(this.form).then(response => {
+                this.$modal.msgSuccess('新增成功');
+                this.open = false;
+                // this.getList();
+                location.reload();
+              });
+            }
+          }
+        }
+      )
+      ;
+    },
+    /** 报告附件按钮操作 */
+    importMeeting(row) {
+      this.doc.open = true;
+      this.$nextTick(() => {
+        this.$refs.doc.clearFiles()
+      })
+    },
+  }
+};
+</script>
+
+<style>
+
+</style>

+ 1 - 1
cpms-ui/src/views/process/classd/index.vue

@@ -141,7 +141,7 @@
           <el-input v-model="form.p" placeholder="请输入P"/>
         </el-form-item>
         <el-form-item label="Justification P" prop="justificationP">
-          <el-input v-model="form.justificationP" placeholder="请输入Justification P"/>
+          <el-input v-model="form.justificationP" placeholder="请输入Justificati`on P"/>
         </el-form-item>
         <el-form-item label="S" prop="s">
           <el-input v-model="form.s" placeholder="请输入S"/>

+ 3 - 3
cpms-ui/src/views/sems/specAqf/bf.vue

@@ -668,13 +668,13 @@ export default {
         if (valid) {
           if (this.form.id != null) {
             updateAqf(this.form).then(response => {
-              this.msgSuccess("修改成功");
+              this.$modal.msgSuccess("修改成功");
               this.open = false;
               this.getList();
             });
           } else {
             addAqf(this.form).then(response => {
-              this.msgSuccess("新增成功");
+              this.$modal.msgSuccess("新增成功");
               this.open = false;
               this.getList();
             });
@@ -693,7 +693,7 @@ export default {
         return delAqf(ids);
       }).then(() => {
         this.getList();
-        this.msgSuccess("删除成功");
+        this.$modal.msgSuccess("删除成功");
       })
     },
     /** 导出按钮操作 */

+ 3 - 3
cpms-ui/src/views/sems/specAqf/fc.vue

@@ -676,13 +676,13 @@ export default {
         if (valid) {
           if (this.form.id != null) {
             updateAqf(this.form).then(response => {
-              this.msgSuccess("修改成功");
+              this.$modal.msgSuccess("修改成功");
               this.open = false;
               this.getList();
             });
           } else {
             addAqf(this.form).then(response => {
-              this.msgSuccess("新增成功");
+              this.$modal.msgSuccess("新增成功");
               this.open = false;
               this.getList();
             });
@@ -701,7 +701,7 @@ export default {
         return delAqf(ids);
       }).then(() => {
         this.getList();
-        this.msgSuccess("删除成功");
+        this.$modal.msgSuccess("删除成功");
       })
     },
     /** 导出按钮操作 */

+ 3 - 3
cpms-ui/src/views/sems/specAqf/index.vue

@@ -644,13 +644,13 @@ export default {
         if (valid) {
           if (this.form.id != null) {
             updateAqf(this.form).then(response => {
-              this.msgSuccess("修改成功");
+              this.$modal.msgSuccess("修改成功");
               this.open = false;
               this.getList();
             });
           } else {
             addAqf(this.form).then(response => {
-              this.msgSuccess("新增成功");
+              this.$modal.msgSuccess("新增成功");
               this.open = false;
               this.getList();
             });
@@ -669,7 +669,7 @@ export default {
         return delAqf(ids);
       }).then(() => {
         this.getList();
-        this.msgSuccess("删除成功");
+        this.$modal.msgSuccess("删除成功");
       })
     },
     /** 导出按钮操作 */

+ 3 - 3
cpms-ui/src/views/sems/specAqf/ty.vue

@@ -668,13 +668,13 @@ export default {
         if (valid) {
           if (this.form.id != null) {
             updateAqf(this.form).then(response => {
-              this.msgSuccess("修改成功");
+              this.$modal.msgSuccess("修改成功");
               this.open = false;
               this.getList();
             });
           } else {
             addAqf(this.form).then(response => {
-              this.msgSuccess("新增成功");
+              this.$modal.msgSuccess("新增成功");
               this.open = false;
               this.getList();
             });
@@ -693,7 +693,7 @@ export default {
         return delAqf(ids);
       }).then(() => {
         this.getList();
-        this.msgSuccess("删除成功");
+        this.$modal.msgSuccess("删除成功");
       })
     },
     /** 导出按钮操作 */

+ 5 - 5
cpms-ui/src/views/sems/specCc/bf.vue

@@ -540,13 +540,13 @@ export default {
         if (valid) {
           if (this.form.id != null) {
             updateSpecCc(this.form).then(response => {
-              this.msgSuccess('修改成功');
+              this.$modal.msgSuccess('修改成功');
               this.open = false;
               this.getList();
             });
           } else {
             addSpecCc(this.form).then(response => {
-              this.msgSuccess('新增成功');
+              this.$modal.msgSuccess('新增成功');
               this.open = false;
               this.getList();
             });
@@ -565,7 +565,7 @@ export default {
         return delSpecCc(ids);
       }).then(() => {
         this.getList();
-        this.msgSuccess('删除成功');
+        this.$modal.msgSuccess('删除成功');
       })
     },
     /** 去重按钮操作 */
@@ -578,7 +578,7 @@ export default {
         return duplicate();
       }).then(() => {
         this.getList();
-        this.msgSuccess('删除成功');
+        this.$modal.msgSuccess('删除成功');
       })
     },
     /** 导出按钮操作 */
@@ -692,7 +692,7 @@ export default {
     },
     submitModofyForm() {
       addModify(this.modifyForm).then(response => {
-        this.msgSuccess('提交成功');
+        this.$modal.msgSuccess('提交成功');
         this.modifyVisible = false
         this.getList();
       });

+ 5 - 5
cpms-ui/src/views/sems/specCc/index.vue

@@ -540,13 +540,13 @@ export default {
         if (valid) {
           if (this.form.id != null) {
             updateSpecCc(this.form).then(response => {
-              this.msgSuccess('修改成功');
+              this.$modal.msgSuccess('修改成功');
               this.open = false;
               this.getList();
             });
           } else {
             addSpecCc(this.form).then(response => {
-              this.msgSuccess('新增成功');
+              this.$modal.msgSuccess('新增成功');
               this.open = false;
               this.getList();
             });
@@ -565,7 +565,7 @@ export default {
           return delSpecCc(ids);
         }).then(() => {
           this.getList();
-          this.msgSuccess('删除成功');
+          this.$modal.msgSuccess('删除成功');
         })
     },
     /** 去重按钮操作 */
@@ -578,7 +578,7 @@ export default {
         return duplicate();
       }).then(() => {
         this.getList();
-        this.msgSuccess('删除成功');
+        this.$modal.msgSuccess('删除成功');
       })
     },
     /** 导出按钮操作 */
@@ -692,7 +692,7 @@ export default {
     },
     submitModofyForm() {
       addModify(this.modifyForm).then(response => {
-        this.msgSuccess('提交成功');
+        this.$modal.msgSuccess('提交成功');
         this.modifyVisible = false
         this.getList();
       });

+ 5 - 5
cpms-ui/src/views/sems/specCc/ty.vue

@@ -540,13 +540,13 @@ export default {
         if (valid) {
           if (this.form.id != null) {
             updateSpecCc(this.form).then(response => {
-              this.msgSuccess('修改成功');
+              this.$modal.msgSuccess('修改成功');
               this.open = false;
               this.getList();
             });
           } else {
             addSpecCc(this.form).then(response => {
-              this.msgSuccess('新增成功');
+              this.$modal.msgSuccess('新增成功');
               this.open = false;
               this.getList();
             });
@@ -565,7 +565,7 @@ export default {
         return delSpecCc(ids);
       }).then(() => {
         this.getList();
-        this.msgSuccess('删除成功');
+        this.$modal.msgSuccess('删除成功');
       })
     },
     /** 去重按钮操作 */
@@ -578,7 +578,7 @@ export default {
         return duplicate();
       }).then(() => {
         this.getList();
-        this.msgSuccess('删除成功');
+        this.$modal.msgSuccess('删除成功');
       })
     },
     /** 导出按钮操作 */
@@ -692,7 +692,7 @@ export default {
     },
     submitModofyForm() {
       addModify(this.modifyForm).then(response => {
-        this.msgSuccess('提交成功');
+        this.$modal.msgSuccess('提交成功');
         this.modifyVisible = false
         this.getList();
       });

+ 5 - 5
cpms-ui/src/views/sems/specCc/zx.vue

@@ -541,13 +541,13 @@ export default {
         if (valid) {
           if (this.form.id != null) {
             updateSpecCc(this.form).then(response => {
-              this.msgSuccess('修改成功');
+              this.$modal.msgSuccess('修改成功');
               this.open = false;
               this.getList();
             });
           } else {
             addSpecCc(this.form).then(response => {
-              this.msgSuccess('新增成功');
+              this.$modal.msgSuccess('新增成功');
               this.open = false;
               this.getList();
             });
@@ -566,7 +566,7 @@ export default {
         return delSpecCc(ids);
       }).then(() => {
         this.getList();
-        this.msgSuccess('删除成功');
+        this.$modal.msgSuccess('删除成功');
       })
     },
     /** 去重按钮操作 */
@@ -579,7 +579,7 @@ export default {
         return duplicate();
       }).then(() => {
         this.getList();
-        this.msgSuccess('删除成功');
+        this.$modal.msgSuccess('删除成功');
       })
     },
     /** 导出按钮操作 */
@@ -693,7 +693,7 @@ export default {
     },
     submitModofyForm() {
       addModify(this.modifyForm).then(response => {
-        this.msgSuccess('提交成功');
+        this.$modal.msgSuccess('提交成功');
         this.modifyVisible = false
         this.getList();
       });

+ 4 - 4
cpms-ui/src/views/sems/specDt/bf.vue

@@ -526,7 +526,7 @@ export default {
         return duplicate();
       }).then(() => {
         this.getList();
-        this.msgSuccess('删除成功');
+        this.$modal.msgSuccess('删除成功');
       })
     },
     /** 提交按钮 */
@@ -535,13 +535,13 @@ export default {
         if (valid) {
           if (this.form.id != null) {
             updateSpecDt(this.form).then(response => {
-              this.msgSuccess('修改成功');
+              this.$modal.msgSuccess('修改成功');
               this.open = false;
               this.getList();
             });
           } else {
             addSpecDt(this.form).then(response => {
-              this.msgSuccess(新增成功);
+              this.$modal.msgSuccess(新增成功);
               this.open = false;
               this.getList();
             });
@@ -560,7 +560,7 @@ export default {
         return delSpecDt(ids);
       }).then(() => {
         this.getList();
-        this.msgSuccess('删除成功');
+        this.$modal.msgSuccess('删除成功');
       })
     },
     /** 导出按钮操作 */

+ 4 - 4
cpms-ui/src/views/sems/specDt/index.vue

@@ -527,7 +527,7 @@ export default {
         return duplicate();
       }).then(() => {
         this.getList();
-        this.msgSuccess('删除成功');
+        this.$modal.msgSuccess('删除成功');
       })
     },
     /** 提交按钮 */
@@ -536,13 +536,13 @@ export default {
         if (valid) {
           if (this.form.id != null) {
             updateSpecDt(this.form).then(response => {
-              this.msgSuccess('修改成功');
+              this.$modal.msgSuccess('修改成功');
               this.open = false;
               this.getList();
             });
           } else {
             addSpecDt(this.form).then(response => {
-              this.msgSuccess(新增成功);
+              this.$modal.msgSuccess(新增成功);
               this.open = false;
               this.getList();
             });
@@ -561,7 +561,7 @@ export default {
         return delSpecDt(ids);
       }).then(() => {
         this.getList();
-        this.msgSuccess('删除成功');
+        this.$modal.msgSuccess('删除成功');
         })
     },
     /** 导出按钮操作 */

+ 4 - 4
cpms-ui/src/views/sems/specDt/ty.vue

@@ -527,7 +527,7 @@ export default {
         return duplicate();
       }).then(() => {
         this.getList();
-        this.msgSuccess('删除成功');
+        this.$modal.msgSuccess('删除成功');
       })
     },
     /** 提交按钮 */
@@ -536,13 +536,13 @@ export default {
         if (valid) {
           if (this.form.id != null) {
             updateSpecDt(this.form).then(response => {
-              this.msgSuccess('修改成功');
+              this.$modal.msgSuccess('修改成功');
               this.open = false;
               this.getList();
             });
           } else {
             addSpecDt(this.form).then(response => {
-              this.msgSuccess(新增成功);
+              this.$modal.msgSuccess(新增成功);
               this.open = false;
               this.getList();
             });
@@ -561,7 +561,7 @@ export default {
         return delSpecDt(ids);
       }).then(() => {
         this.getList();
-        this.msgSuccess('删除成功');
+        this.$modal.msgSuccess('删除成功');
       })
     },
     /** 导出按钮操作 */

+ 4 - 4
cpms-ui/src/views/sems/specDt/zx.vue

@@ -527,7 +527,7 @@ export default {
         return duplicate();
       }).then(() => {
         this.getList();
-        this.msgSuccess('删除成功');
+        this.$modal.msgSuccess('删除成功');
       })
     },
     /** 提交按钮 */
@@ -536,13 +536,13 @@ export default {
         if (valid) {
           if (this.form.id != null) {
             updateSpecDt(this.form).then(response => {
-              this.msgSuccess('修改成功');
+              this.$modal.msgSuccess('修改成功');
               this.open = false;
               this.getList();
             });
           } else {
             addSpecDt(this.form).then(response => {
-              this.msgSuccess(新增成功);
+              this.$modal.msgSuccess(新增成功);
               this.open = false;
               this.getList();
             });
@@ -561,7 +561,7 @@ export default {
         return delSpecDt(ids);
       }).then(() => {
         this.getList();
-        this.msgSuccess('删除成功');
+        this.$modal.msgSuccess('删除成功');
       })
     },
     /** 导出按钮操作 */

+ 4 - 4
cpms-ui/src/views/sems/specDzsb/bf.vue

@@ -552,13 +552,13 @@ export default {
         if (valid) {
           if (this.form.id != null) {
             updateSpecDzsb(this.form).then(response => {
-              this.msgSuccess(修改成功);
+              this.$modal.msgSuccess(修改成功);
               this.open = false;
               this.getList();
             });
           } else {
             addSpecDzsb(this.form).then(response => {
-              this.msgSuccess(新增成功);
+              this.$modal.msgSuccess(新增成功);
               this.open = false;
               this.getList();
             });
@@ -577,7 +577,7 @@ export default {
         return delSpecDzsb(ids);
       }).then(() => {
         this.getList();
-        this.msgSuccess('删除成功');
+        this.$modal.msgSuccess('删除成功');
       })
     },
     /** 去重按钮操作 */
@@ -590,7 +590,7 @@ export default {
         return duplicate();
       }).then(() => {
         this.getList();
-        this.msgSuccess('删除成功');
+        this.$modal.msgSuccess('删除成功');
       })
     },
     /** 导出按钮操作 */

+ 4 - 4
cpms-ui/src/views/sems/specDzsb/index.vue

@@ -552,13 +552,13 @@ export default {
         if (valid) {
           if (this.form.id != null) {
             updateSpecDzsb(this.form).then(response => {
-              this.msgSuccess(修改成功);
+              this.$modal.msgSuccess(修改成功);
               this.open = false;
               this.getList();
             });
           } else {
             addSpecDzsb(this.form).then(response => {
-              this.msgSuccess(新增成功);
+              this.$modal.msgSuccess(新增成功);
               this.open = false;
               this.getList();
             });
@@ -577,7 +577,7 @@ export default {
           return delSpecDzsb(ids);
         }).then(() => {
           this.getList();
-          this.msgSuccess('删除成功');
+          this.$modal.msgSuccess('删除成功');
         })
     },
     /** 去重按钮操作 */
@@ -590,7 +590,7 @@ export default {
         return duplicate();
       }).then(() => {
         this.getList();
-        this.msgSuccess('删除成功');
+        this.$modal.msgSuccess('删除成功');
       })
     },
     /** 导出按钮操作 */

+ 4 - 4
cpms-ui/src/views/sems/specDzsb/ty.vue

@@ -552,13 +552,13 @@ export default {
         if (valid) {
           if (this.form.id != null) {
             updateSpecDzsb(this.form).then(response => {
-              this.msgSuccess(修改成功);
+              this.$modal.msgSuccess(修改成功);
               this.open = false;
               this.getList();
             });
           } else {
             addSpecDzsb(this.form).then(response => {
-              this.msgSuccess(新增成功);
+              this.$modal.msgSuccess(新增成功);
               this.open = false;
               this.getList();
             });
@@ -577,7 +577,7 @@ export default {
         return delSpecDzsb(ids);
       }).then(() => {
         this.getList();
-        this.msgSuccess('删除成功');
+        this.$modal.msgSuccess('删除成功');
       })
     },
     /** 去重按钮操作 */
@@ -590,7 +590,7 @@ export default {
         return duplicate();
       }).then(() => {
         this.getList();
-        this.msgSuccess('删除成功');
+        this.$modal.msgSuccess('删除成功');
       })
     },
     /** 导出按钮操作 */

+ 4 - 4
cpms-ui/src/views/sems/specDzsb/zx.vue

@@ -552,13 +552,13 @@ export default {
         if (valid) {
           if (this.form.id != null) {
             updateSpecDzsb(this.form).then(response => {
-              this.msgSuccess(修改成功);
+              this.$modal.msgSuccess(修改成功);
               this.open = false;
               this.getList();
             });
           } else {
             addSpecDzsb(this.form).then(response => {
-              this.msgSuccess(新增成功);
+              this.$modal.msgSuccess(新增成功);
               this.open = false;
               this.getList();
             });
@@ -577,7 +577,7 @@ export default {
         return delSpecDzsb(ids);
       }).then(() => {
         this.getList();
-        this.msgSuccess('删除成功');
+        this.$modal.msgSuccess('删除成功');
       })
     },
     /** 去重按钮操作 */
@@ -590,7 +590,7 @@ export default {
         return duplicate();
       }).then(() => {
         this.getList();
-        this.msgSuccess('删除成功');
+        this.$modal.msgSuccess('删除成功');
       })
     },
     /** 导出按钮操作 */

+ 3 - 3
cpms-ui/src/views/sems/specGl/bf.vue

@@ -639,13 +639,13 @@ export default {
         if (valid) {
           if (this.form.id != null) {
             updateSpecGl(this.form).then(response => {
-              this.msgSuccess('修改成功');
+              this.$modal.msgSuccess('修改成功');
               this.open = false;
               this.getList();
             });
           } else {
             addSpecGl(this.form).then(response => {
-              this.msgSuccess('新增成功');
+              this.$modal.msgSuccess('新增成功');
               this.open = false;
               this.getList();
             });
@@ -664,7 +664,7 @@ export default {
         return delSpecGl(ids);
       }).then(() => {
         this.getList();
-        this.msgSuccess('删除成功');
+        this.$modal.msgSuccess('删除成功');
       })
     },
     /** 导出按钮操作 */

+ 3 - 3
cpms-ui/src/views/sems/specGl/index.vue

@@ -621,13 +621,13 @@ export default {
         if (valid) {
           if (this.form.id != null) {
             updateSpecGl(this.form).then(response => {
-              this.msgSuccess('修改成功');
+              this.$modal.msgSuccess('修改成功');
               this.open = false;
               this.getList();
             });
           } else {
             addSpecGl(this.form).then(response => {
-              this.msgSuccess('新增成功');
+              this.$modal.msgSuccess('新增成功');
               this.open = false;
               this.getList();
             });
@@ -646,7 +646,7 @@ export default {
         return delSpecGl(ids);
       }).then(() => {
         this.getList();
-        this.msgSuccess('删除成功');
+        this.$modal.msgSuccess('删除成功');
       })
     },
     /** 导出按钮操作 */

+ 3 - 3
cpms-ui/src/views/sems/specGl/ty.vue

@@ -639,13 +639,13 @@ export default {
         if (valid) {
           if (this.form.id != null) {
             updateSpecGl(this.form).then(response => {
-              this.msgSuccess('修改成功');
+              this.$modal.msgSuccess('修改成功');
               this.open = false;
               this.getList();
             });
           } else {
             addSpecGl(this.form).then(response => {
-              this.msgSuccess('新增成功');
+              this.$modal.msgSuccess('新增成功');
               this.open = false;
               this.getList();
             });
@@ -664,7 +664,7 @@ export default {
         return delSpecGl(ids);
       }).then(() => {
         this.getList();
-        this.msgSuccess('删除成功');
+        this.$modal.msgSuccess('删除成功');
       })
     },
     /** 导出按钮操作 */

+ 3 - 3
cpms-ui/src/views/sems/specGl/zx.vue

@@ -639,13 +639,13 @@ export default {
         if (valid) {
           if (this.form.id != null) {
             updateSpecGl(this.form).then(response => {
-              this.msgSuccess('修改成功');
+              this.$modal.msgSuccess('修改成功');
               this.open = false;
               this.getList();
             });
           } else {
             addSpecGl(this.form).then(response => {
-              this.msgSuccess('新增成功');
+              this.$modal.msgSuccess('新增成功');
               this.open = false;
               this.getList();
             });
@@ -664,7 +664,7 @@ export default {
         return delSpecGl(ids);
       }).then(() => {
         this.getList();
-        this.msgSuccess('删除成功');
+        this.$modal.msgSuccess('删除成功');
       })
     },
     /** 导出按钮操作 */

+ 4 - 4
cpms-ui/src/views/sems/specYlgd/bf.vue

@@ -844,13 +844,13 @@ export default {
           }
           if (this.form.id != null) {
             updateSpecYlgd(this.form).then(response => {
-              this.msgSuccess('修改成功');
+              this.$modal.msgSuccess('修改成功');
               this.open = false;
               this.getList();
             });
           } else {
             addSpecYlgd(this.form).then(response => {
-              this.msgSuccess('新增成功');
+              this.$modal.msgSuccess('新增成功');
               this.open = false;
               this.getList();
             });
@@ -869,7 +869,7 @@ export default {
         return delSpecYlgd(ids);
       }).then(() => {
         this.getList();
-        this.msgSuccess('删除成功');
+        this.$modal.msgSuccess('删除成功');
       })
     },
     /** 删除按钮操作 */
@@ -882,7 +882,7 @@ export default {
         return duplicate();
       }).then(() => {
         this.getList();
-        this.msgSuccess('删除成功');
+        this.$modal.msgSuccess('删除成功');
       })
     },
     /** 导出按钮操作 */

+ 4 - 4
cpms-ui/src/views/sems/specYlgd/index.vue

@@ -844,13 +844,13 @@ export default {
           }
           if (this.form.id != null) {
             updateSpecYlgd(this.form).then(response => {
-              this.msgSuccess('修改成功');
+              this.$modal.msgSuccess('修改成功');
               this.open = false;
               this.getList();
             });
           } else {
             addSpecYlgd(this.form).then(response => {
-              this.msgSuccess('新增成功');
+              this.$modal.msgSuccess('新增成功');
               this.open = false;
               this.getList();
             });
@@ -869,7 +869,7 @@ export default {
           return delSpecYlgd(ids);
         }).then(() => {
           this.getList();
-          this.msgSuccess('删除成功');
+          this.$modal.msgSuccess('删除成功');
         })
     },
     /** 删除按钮操作 */
@@ -882,7 +882,7 @@ export default {
         return duplicate();
       }).then(() => {
         this.getList();
-        this.msgSuccess('删除成功');
+        this.$modal.msgSuccess('删除成功');
       })
     },
     /** 导出按钮操作 */

+ 4 - 4
cpms-ui/src/views/sems/specYlgd/ty.vue

@@ -844,13 +844,13 @@ export default {
           }
           if (this.form.id != null) {
             updateSpecYlgd(this.form).then(response => {
-              this.msgSuccess('修改成功');
+              this.$modal.msgSuccess('修改成功');
               this.open = false;
               this.getList();
             });
           } else {
             addSpecYlgd(this.form).then(response => {
-              this.msgSuccess('新增成功');
+              this.$modal.msgSuccess('新增成功');
               this.open = false;
               this.getList();
             });
@@ -869,7 +869,7 @@ export default {
         return delSpecYlgd(ids);
       }).then(() => {
         this.getList();
-        this.msgSuccess('删除成功');
+        this.$modal.msgSuccess('删除成功');
       })
     },
     /** 删除按钮操作 */
@@ -882,7 +882,7 @@ export default {
         return duplicate();
       }).then(() => {
         this.getList();
-        this.msgSuccess('删除成功');
+        this.$modal.msgSuccess('删除成功');
       })
     },
     /** 导出按钮操作 */

+ 4 - 4
cpms-ui/src/views/sems/specYlgd/zx.vue

@@ -844,13 +844,13 @@ export default {
           }
           if (this.form.id != null) {
             updateSpecYlgd(this.form).then(response => {
-              this.msgSuccess('修改成功');
+              this.$modal.msgSuccess('修改成功');
               this.open = false;
               this.getList();
             });
           } else {
             addSpecYlgd(this.form).then(response => {
-              this.msgSuccess('新增成功');
+              this.$modal.msgSuccess('新增成功');
               this.open = false;
               this.getList();
             });
@@ -869,7 +869,7 @@ export default {
         return delSpecYlgd(ids);
       }).then(() => {
         this.getList();
-        this.msgSuccess('删除成功');
+        this.$modal.msgSuccess('删除成功');
       })
     },
     /** 删除按钮操作 */
@@ -882,7 +882,7 @@ export default {
         return duplicate();
       }).then(() => {
         this.getList();
-        this.msgSuccess('删除成功');
+        this.$modal.msgSuccess('删除成功');
       })
     },
     /** 导出按钮操作 */

+ 4 - 4
cpms-ui/src/views/sems/specYlrq/bf.vue

@@ -649,13 +649,13 @@ export default {
         if (valid) {
           if (this.form.id != null) {
             updateSpecYlrq(this.form).then(response => {
-              this.msgSuccess("修改成功");
+              this.$modal.msgSuccess("修改成功");
               this.open = false;
               this.getList();
             });
           } else {
             addSpecYlrq(this.form).then(response => {
-              this.msgSuccess(新增成功);
+              this.$modal.msgSuccess(新增成功);
               this.open = false;
               this.getList();
             });
@@ -674,7 +674,7 @@ export default {
         return delSpecYlrq(ids);
       }).then(() => {
         this.getList();
-        this.msgSuccess("删除成功");
+        this.$modal.msgSuccess("删除成功");
       })
     },
     /** 去重按钮操作 */
@@ -687,7 +687,7 @@ export default {
         return duplicate();
       }).then(() => {
         this.getList();
-        this.msgSuccess('删除成功');
+        this.$modal.msgSuccess('删除成功');
       })
     },
     /** 导出按钮操作 */

+ 4 - 4
cpms-ui/src/views/sems/specYlrq/index.vue

@@ -649,13 +649,13 @@ export default {
         if (valid) {
           if (this.form.id != null) {
             updateSpecYlrq(this.form).then(response => {
-              this.msgSuccess("修改成功");
+              this.$modal.msgSuccess("修改成功");
               this.open = false;
               this.getList();
             });
           } else {
             addSpecYlrq(this.form).then(response => {
-              this.msgSuccess(新增成功);
+              this.$modal.msgSuccess(新增成功);
               this.open = false;
               this.getList();
             });
@@ -674,7 +674,7 @@ export default {
           return delSpecYlrq(ids);
         }).then(() => {
           this.getList();
-          this.msgSuccess("删除成功");
+          this.$modal.msgSuccess("删除成功");
         })
     },
     /** 去重按钮操作 */
@@ -687,7 +687,7 @@ export default {
         return duplicate();
       }).then(() => {
         this.getList();
-        this.msgSuccess('删除成功');
+        this.$modal.msgSuccess('删除成功');
       })
     },
     /** 导出按钮操作 */

+ 3 - 3
cpms-ui/src/views/sems/specYlrq/specYlrq-hisReform.vue

@@ -284,13 +284,13 @@
       //     if (valid) {
       //       if (this.form.id != null) {
       //         updateCheck(this.form).then(response => {
-      //           this.msgSuccess("修改成功");
+      //           this.$modal.msgSuccess("修改成功");
       //           this.open = false;
       //           this.getList();
       //         });
       //       } else {
       //         addCheck(this.form).then(response => {
-      //           this.msgSuccess("新增成功");
+      //           this.$modal.msgSuccess("新增成功");
       //           this.open = false;
       //           this.getList();
       //         });
@@ -309,7 +309,7 @@
       //     return delCheck(ids);
       //   }).then(() => {
       //     this.getList();
-      //     this.msgSuccess("删除成功");
+      //     this.$modal.msgSuccess("删除成功");
       //   })
       // },
       // /** 导出按钮操作 */

+ 4 - 4
cpms-ui/src/views/sems/specYlrq/ty.vue

@@ -649,13 +649,13 @@ export default {
         if (valid) {
           if (this.form.id != null) {
             updateSpecYlrq(this.form).then(response => {
-              this.msgSuccess("修改成功");
+              this.$modal.msgSuccess("修改成功");
               this.open = false;
               this.getList();
             });
           } else {
             addSpecYlrq(this.form).then(response => {
-              this.msgSuccess(新增成功);
+              this.$modal.msgSuccess(新增成功);
               this.open = false;
               this.getList();
             });
@@ -674,7 +674,7 @@ export default {
         return delSpecYlrq(ids);
       }).then(() => {
         this.getList();
-        this.msgSuccess("删除成功");
+        this.$modal.msgSuccess("删除成功");
       })
     },
     /** 去重按钮操作 */
@@ -687,7 +687,7 @@ export default {
         return duplicate();
       }).then(() => {
         this.getList();
-        this.msgSuccess('删除成功');
+        this.$modal.msgSuccess('删除成功');
       })
     },
     /** 导出按钮操作 */

+ 4 - 4
cpms-ui/src/views/sems/specYlrq/zx.vue

@@ -649,13 +649,13 @@ export default {
         if (valid) {
           if (this.form.id != null) {
             updateSpecYlrq(this.form).then(response => {
-              this.msgSuccess("修改成功");
+              this.$modal.msgSuccess("修改成功");
               this.open = false;
               this.getList();
             });
           } else {
             addSpecYlrq(this.form).then(response => {
-              this.msgSuccess(新增成功);
+              this.$modal.msgSuccess(新增成功);
               this.open = false;
               this.getList();
             });
@@ -674,7 +674,7 @@ export default {
         return delSpecYlrq(ids);
       }).then(() => {
         this.getList();
-        this.msgSuccess("删除成功");
+        this.$modal.msgSuccess("删除成功");
       })
     },
     /** 去重按钮操作 */
@@ -687,7 +687,7 @@ export default {
         return duplicate();
       }).then(() => {
         this.getList();
-        this.msgSuccess('删除成功');
+        this.$modal.msgSuccess('删除成功');
       })
     },
     /** 导出按钮操作 */

+ 4 - 4
cpms-ui/src/views/shiftmgr/log/index.vue

@@ -748,13 +748,13 @@ export default {
         if (valid) {
           if (this.form.id != null) {
             updateLog(this.form).then(response => {
-              this.msgSuccess("修改成功");
+              this.$modal.msgSuccess("修改成功");
               this.open = false;
               this.getList();
             });
           } else {
             addLog(this.form).then(response => {
-              this.msgSuccess("新增成功");
+              this.$modal.msgSuccess("新增成功");
               this.open = false;
               this.getList();
             });
@@ -765,7 +765,7 @@ export default {
     conform() {
       this.detail.data.status = 1;
       updateLog(this.detail.data).then(response => {
-        this.msgSuccess("确认成功");
+        this.$modal.msgSuccess("确认成功");
         this.detail.open = false;
         this.getList();
       });
@@ -777,7 +777,7 @@ export default {
         return delLog(ids);
       }).then(() => {
         this.getList();
-        this.msgSuccess("删除成功");
+        this.$modal.msgSuccess("删除成功");
       }).catch(() => {
       });
     },