jiangbiao 1 год назад
Родитель
Сommit
2b95e09cc3
34 измененных файлов с 2925 добавлено и 1138 удалено
  1. 1 1
      README.md
  2. 7 0
      admin/pom.xml
  3. 202 0
      admin/src/main/java/com/ruoyi/project/approval/controller/TApprovalController.java
  4. 449 0
      admin/src/main/java/com/ruoyi/project/approval/domain/TApproval.java
  5. 61 0
      admin/src/main/java/com/ruoyi/project/approval/mapper/TApprovalMapper.java
  6. 61 0
      admin/src/main/java/com/ruoyi/project/approval/service/ITApprovalService.java
  7. 93 0
      admin/src/main/java/com/ruoyi/project/approval/service/impl/TApprovalServiceImpl.java
  8. 238 0
      admin/src/main/java/com/ruoyi/project/shiftmgr/controller/TShiftLogController.java
  9. 643 0
      admin/src/main/java/com/ruoyi/project/shiftmgr/domain/TShiftLog.java
  10. 61 0
      admin/src/main/java/com/ruoyi/project/shiftmgr/mapper/TShiftLogMapper.java
  11. 61 0
      admin/src/main/java/com/ruoyi/project/shiftmgr/service/ITShiftLogService.java
  12. 93 0
      admin/src/main/java/com/ruoyi/project/shiftmgr/service/impl/TShiftLogServiceImpl.java
  13. 34 50
      admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
  14. 1 1
      admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java
  15. 195 0
      admin/src/main/resources/mapper/approval/TApprovalMapper.xml
  16. 267 0
      admin/src/main/resources/mapper/shiftmgr/TShiftLogMapper.xml
  17. 8 0
      common/src/main/java/com/ruoyi/common/config/RuoYiConfig.java
  18. 12 0
      common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
  19. 309 0
      common/src/main/java/com/ruoyi/common/utils/file/ExcelUtils.java
  20. 3 0
      generator/src/main/java/com/ruoyi/generator/domain/GenTable.java
  21. 3 0
      generator/src/main/java/com/ruoyi/generator/domain/GenTableColumn.java
  22. 2 0
      system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
  23. 2 0
      system/src/main/java/com/ruoyi/system/service/ISysUserService.java
  24. 5 0
      system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
  25. 21 3
      system/src/main/resources/mapper/system/SysUserMapper.xml
  26. 54 0
      ui/src/api/approval/approval.js
  27. BIN
      ui/src/assets/images/login-background.jpg
  28. BIN
      ui/src/assets/images/pay.png
  29. 1 1
      ui/src/assets/styles/variables.scss
  30. 1 1
      ui/src/settings.js
  31. 11 13
      ui/src/views/approval/approval/index.vue
  32. 0 1067
      ui/src/views/index_v2.vue
  33. 25 0
      ui/src/views/loading.vue
  34. 1 1
      ui/src/views/login.vue

+ 1 - 1
README.md

@@ -47,7 +47,7 @@
 
 ## 在线体验
 
-- admin/admin123  
+- admin/123456  
 - 陆陆续续收到一些打赏,为了更好的体验已用于演示服务器升级。谢谢各位小伙伴。
 
 演示地址:http://vue.ruoyi.vip  

+ 7 - 0
admin/pom.xml

@@ -78,6 +78,13 @@
             <version>2.4.2</version>
         </dependency>
 
+        <!--poi-tl-->
+        <dependency>
+            <groupId>com.deepoove</groupId>
+            <artifactId>poi-tl</artifactId>
+            <version>1.10.4</version>
+        </dependency>
+
     </dependencies>
 
     <build>

+ 202 - 0
admin/src/main/java/com/ruoyi/project/approval/controller/TApprovalController.java

@@ -0,0 +1,202 @@
+package com.ruoyi.project.approval.controller;
+
+import com.alibaba.fastjson2.JSON;
+import com.ruoyi.project.approval.domain.TApproval;
+import com.ruoyi.project.approval.service.ITApprovalService;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.file.ExcelUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+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 java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 批文清单Controller
+ *
+ * @author ruoyi
+ * @date 2023-10-18
+ */
+@RestController
+@RequestMapping("/ehs/approval")
+public class TApprovalController extends BaseController {
+    @Autowired
+    private ITApprovalService tApprovalService;
+
+    /**
+     * 查询批文清单列表
+     */
+    @PreAuthorize("@ss.hasPermi('ehs:approval:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TApproval tApproval) {
+        startPage();
+        List<TApproval> list = tApprovalService.selectTApprovalList(tApproval);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出批文清单列表
+     */
+    @PreAuthorize("@ss.hasPermi('ehs:approval:export')")
+    @Log(title = "批文清单", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(TApproval tApproval) {
+        List<TApproval> list = tApprovalService.selectTApprovalList(tApproval);
+        ExcelUtil<TApproval> util = new ExcelUtil<TApproval>(TApproval.class);
+        return util.exportExcel(list, "批文清单数据");
+    }
+
+    /**
+     * 获取批文清单详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('ehs:approval:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id) {
+        return AjaxResult.success(tApprovalService.selectTApprovalById(id));
+    }
+
+    /**
+     * 新增批文清单
+     */
+    @PreAuthorize("@ss.hasPermi('ehs:approval:add')")
+    @Log(title = "批文清单", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TApproval tApproval) {
+        return toAjax(tApprovalService.insertTApproval(tApproval));
+    }
+
+    /**
+     * 修改批文清单
+     */
+    @PreAuthorize("@ss.hasPermi('ehs:approval:edit')")
+    @Log(title = "批文清单", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TApproval tApproval) {
+        return toAjax(tApprovalService.updateTApproval(tApproval));
+    }
+
+    /**
+     * 删除批文清单
+     */
+    @PreAuthorize("@ss.hasPermi('ehs:approval:remove')")
+    @Log(title = "批文清单", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids) {
+        return toAjax(tApprovalService.deleteTApprovalByIds(ids));
+    }
+
+    @PreAuthorize("@ss.hasPermi('ehs:approval:add')")
+    @Log(title = "批文清单批量导入", businessType = BusinessType.INSERT)
+    @PostMapping("/importData")
+    public AjaxResult updateData(@RequestParam("file") MultipartFile file) throws IOException {
+        //获取操作人员ID
+        Long userId = getUserId();
+        //报错行数统计
+        List<Integer> failRow = new ArrayList<Integer>();
+        Workbook workbook = ExcelUtils.getWorkBook(file);
+        Sheet sheet = workbook.getSheetAt(0);
+        List<TApproval> 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();
+                TApproval entity = new TApproval();
+                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);
+
+                    if (j == 0) {
+                        entity.setApprovalAttibutes(cellValue);
+                    } else if (j == 1) {
+                        entity.setEffetivedate(DateUtils.parseDate(cellValue));//装置名称
+                    } else if (j == 2) {
+                        entity.setItemName(cellValue);//位号
+                    } else if (j == 3) {
+                        entity.setItemOverview(cellValue);//设备名称
+                    } else if (j == 4) {
+                        entity.setApprovalname(cellValue);//使用证号
+                    } else if (j == 5) {
+                        entity.setFileno(cellValue);//检验单位
+                    } else if (j == 6) {
+                        entity.setResponsauth(cellValue);
+                    } else if (j == 7) {
+                        entity.setContent(cellValue);//内部检验结论
+                    } else if (j == 8) {
+                        entity.setScope(cellValue);//内部检验报告编号
+                    } else if (j == 9) {
+                        entity.setRelatedlaw(cellValue);
+                    } else if (j == 10) {
+                        entity.setValidityBefore(DateUtils.parseDate(cellValue));
+                    } else if (j == 11) {
+                        entity.setValidityAfter(DateUtils.parseDate(cellValue));//外部检验结论
+                    } else if (j == 12) {
+                        if ("是".equals(cellValue)) {
+                            entity.setIsPermanent("1");
+                        } else if ("否".equals(cellValue)) {
+                            entity.setIsPermanent("0");
+                        }
+                    } else if (j == 13) {
+                        entity.setFollow(cellValue);
+                    } else if (j == 14) {
+                        entity.setOwner(cellValue);
+                    } else if (j == 15) {
+                        entity.setReviewer(cellValue);
+                    } else if (j == 16) {
+                        entity.setReviewdate(DateUtils.parseDate(cellValue));
+                    } else if (j == 17) {
+                        entity.setIsCompliance(cellValue);
+                    } else if (j == 18) {
+                        entity.setNextreviewdate(DateUtils.parseDate(cellValue));
+                    } else if (j == 19) {
+                        entity.setRemarks(cellValue);
+                    }
+                }
+                logger.info("entity:" + JSON.toJSONString(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 (TApproval t : list) {
+            failNum++;
+            try {
+                add(t);
+                successNumber++;
+            } catch (Exception e) {
+                failNumber++;
+                logger.info("e:" + e);
+                failRow.add(failNum + 1);
+                e.printStackTrace();
+            }
+        }
+        logger.info("list:" + JSON.toJSONString(list));
+        logger.info("successNumber:" + String.valueOf(successNumber));
+        logger.info("failNumber:" + String.valueOf(failNumber));
+        logger.info("failRow:" + String.valueOf(failRow));
+        return AjaxResult.success(String.valueOf(successNumber), failRow);
+    }
+}

+ 449 - 0
admin/src/main/java/com/ruoyi/project/approval/domain/TApproval.java

@@ -0,0 +1,449 @@
+package com.ruoyi.project.approval.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.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 批文清单对象 t_approval
+ * 
+ * @author ruoyi
+ * @date 2024-03-25
+ */
+public class TApproval extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** id */
+    private Long id;
+
+    /** 装置 */
+    @Excel(name = "装置")
+    private String plantCode;
+
+    /** 部门 */
+    @Excel(name = "部门")
+    private String division;
+
+    /** 批准日期 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "批准日期", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date effetivedate;
+
+    /** 项目名称 */
+    @Excel(name = "项目名称")
+    private String itemName;
+
+    /** 项目概况 */
+    @Excel(name = "项目概况")
+    private String itemOverview;
+
+    /** 批文属性 */
+    @Excel(name = "批文属性")
+    private String approvalAttibutes;
+
+    /** 批文名称 */
+    @Excel(name = "批文名称")
+    private String approvalname;
+
+    /** 批文编号 */
+    @Excel(name = "批文编号")
+    private String fileno;
+
+    /** 审批单位 */
+    @Excel(name = "审批单位")
+    private String responsauth;
+
+    /** 主要内容-图文 */
+    @Excel(name = "主要内容-图文")
+    private String contentFile;
+
+    /** 主要内容 */
+    @Excel(name = "主要内容")
+    private String content;
+
+    /** 适用范围 */
+    @Excel(name = "适用范围")
+    private String scope;
+
+    /** 相关法规 */
+    @Excel(name = "相关法规")
+    private String relatedlaw;
+
+    /** 证书有效期(前) */
+    @Excel(name = "证书有效期", readConverterExp = "前=")
+    private Date validityBefore;
+
+    /** 证书有效期(后) */
+    @Excel(name = "证书有效期", readConverterExp = "后=")
+    private Date validityAfter;
+
+    /** 证书有效期是否永久 */
+    @Excel(name = "证书有效期是否永久")
+    private String isPermanent;
+
+    /** 是否需要跟进 */
+    @Excel(name = "是否需要跟进")
+    private String follow;
+
+    /** 负责人 */
+    @Excel(name = "负责人")
+    private String owner;
+
+    /** 回顾人 */
+    @Excel(name = "回顾人")
+    private String reviewer;
+
+    /** 回顾时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "回顾时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date reviewdate;
+
+    /** 是否合规 */
+    @Excel(name = "是否合规")
+    private String isCompliance;
+
+    /** 下次回顾时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "下次回顾时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date nextreviewdate;
+
+    /** 备注 */
+    @Excel(name = "备注")
+    private String remarks;
+
+    /** 删除标识 */
+    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;
+
+    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 setDivision(String division) 
+    {
+        this.division = division;
+    }
+
+    public String getDivision() 
+    {
+        return division;
+    }
+    public void setEffetivedate(Date effetivedate) 
+    {
+        this.effetivedate = effetivedate;
+    }
+
+    public Date getEffetivedate() 
+    {
+        return effetivedate;
+    }
+    public void setItemName(String itemName) 
+    {
+        this.itemName = itemName;
+    }
+
+    public String getItemName() 
+    {
+        return itemName;
+    }
+    public void setItemOverview(String itemOverview) 
+    {
+        this.itemOverview = itemOverview;
+    }
+
+    public String getItemOverview() 
+    {
+        return itemOverview;
+    }
+    public void setApprovalAttibutes(String approvalAttibutes) 
+    {
+        this.approvalAttibutes = approvalAttibutes;
+    }
+
+    public String getApprovalAttibutes() 
+    {
+        return approvalAttibutes;
+    }
+    public void setApprovalname(String approvalname) 
+    {
+        this.approvalname = approvalname;
+    }
+
+    public String getApprovalname() 
+    {
+        return approvalname;
+    }
+    public void setFileno(String fileno) 
+    {
+        this.fileno = fileno;
+    }
+
+    public String getFileno() 
+    {
+        return fileno;
+    }
+    public void setResponsauth(String responsauth) 
+    {
+        this.responsauth = responsauth;
+    }
+
+    public String getResponsauth() 
+    {
+        return responsauth;
+    }
+    public void setContentFile(String contentFile) 
+    {
+        this.contentFile = contentFile;
+    }
+
+    public String getContentFile() 
+    {
+        return contentFile;
+    }
+    public void setContent(String content) 
+    {
+        this.content = content;
+    }
+
+    public String getContent() 
+    {
+        return content;
+    }
+    public void setScope(String scope) 
+    {
+        this.scope = scope;
+    }
+
+    public String getScope() 
+    {
+        return scope;
+    }
+    public void setRelatedlaw(String relatedlaw) 
+    {
+        this.relatedlaw = relatedlaw;
+    }
+
+    public String getRelatedlaw() 
+    {
+        return relatedlaw;
+    }
+    public void setValidityBefore(Date validityBefore) 
+    {
+        this.validityBefore = validityBefore;
+    }
+
+    public Date getValidityBefore() 
+    {
+        return validityBefore;
+    }
+    public void setValidityAfter(Date validityAfter) 
+    {
+        this.validityAfter = validityAfter;
+    }
+
+    public Date getValidityAfter() 
+    {
+        return validityAfter;
+    }
+    public void setIsPermanent(String isPermanent) 
+    {
+        this.isPermanent = isPermanent;
+    }
+
+    public String getIsPermanent() 
+    {
+        return isPermanent;
+    }
+    public void setFollow(String follow) 
+    {
+        this.follow = follow;
+    }
+
+    public String getFollow() 
+    {
+        return follow;
+    }
+    public void setOwner(String owner) 
+    {
+        this.owner = owner;
+    }
+
+    public String getOwner() 
+    {
+        return owner;
+    }
+    public void setReviewer(String reviewer) 
+    {
+        this.reviewer = reviewer;
+    }
+
+    public String getReviewer() 
+    {
+        return reviewer;
+    }
+    public void setReviewdate(Date reviewdate) 
+    {
+        this.reviewdate = reviewdate;
+    }
+
+    public Date getReviewdate() 
+    {
+        return reviewdate;
+    }
+    public void setIsCompliance(String isCompliance) 
+    {
+        this.isCompliance = isCompliance;
+    }
+
+    public String getIsCompliance() 
+    {
+        return isCompliance;
+    }
+    public void setNextreviewdate(Date nextreviewdate) 
+    {
+        this.nextreviewdate = nextreviewdate;
+    }
+
+    public Date getNextreviewdate() 
+    {
+        return nextreviewdate;
+    }
+    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 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;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("plantCode", getPlantCode())
+            .append("division", getDivision())
+            .append("effetivedate", getEffetivedate())
+            .append("itemName", getItemName())
+            .append("itemOverview", getItemOverview())
+            .append("approvalAttibutes", getApprovalAttibutes())
+            .append("approvalname", getApprovalname())
+            .append("fileno", getFileno())
+            .append("responsauth", getResponsauth())
+            .append("contentFile", getContentFile())
+            .append("content", getContent())
+            .append("scope", getScope())
+            .append("relatedlaw", getRelatedlaw())
+            .append("validityBefore", getValidityBefore())
+            .append("validityAfter", getValidityAfter())
+            .append("isPermanent", getIsPermanent())
+            .append("follow", getFollow())
+            .append("owner", getOwner())
+            .append("reviewer", getReviewer())
+            .append("reviewdate", getReviewdate())
+            .append("isCompliance", getIsCompliance())
+            .append("nextreviewdate", getNextreviewdate())
+            .append("remarks", getRemarks())
+            .append("delFlag", getDelFlag())
+            .append("createrCode", getCreaterCode())
+            .append("createdate", getCreatedate())
+            .append("updaterCode", getUpdaterCode())
+            .append("updatedate", getUpdatedate())
+            .append("deptId", getDeptId())
+            .toString();
+    }
+}

+ 61 - 0
admin/src/main/java/com/ruoyi/project/approval/mapper/TApprovalMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.project.approval.mapper;
+
+import java.util.List;
+import com.ruoyi.project.approval.domain.TApproval;
+
+/**
+ * 批文清单Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2024-03-25
+ */
+public interface TApprovalMapper 
+{
+    /**
+     * 查询批文清单
+     * 
+     * @param id 批文清单主键
+     * @return 批文清单
+     */
+    public TApproval selectTApprovalById(Long id);
+
+    /**
+     * 查询批文清单列表
+     * 
+     * @param tApproval 批文清单
+     * @return 批文清单集合
+     */
+    public List<TApproval> selectTApprovalList(TApproval tApproval);
+
+    /**
+     * 新增批文清单
+     * 
+     * @param tApproval 批文清单
+     * @return 结果
+     */
+    public int insertTApproval(TApproval tApproval);
+
+    /**
+     * 修改批文清单
+     * 
+     * @param tApproval 批文清单
+     * @return 结果
+     */
+    public int updateTApproval(TApproval tApproval);
+
+    /**
+     * 删除批文清单
+     * 
+     * @param id 批文清单主键
+     * @return 结果
+     */
+    public int deleteTApprovalById(Long id);
+
+    /**
+     * 批量删除批文清单
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTApprovalByIds(Long[] ids);
+}

+ 61 - 0
admin/src/main/java/com/ruoyi/project/approval/service/ITApprovalService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.project.approval.service;
+
+import java.util.List;
+import com.ruoyi.project.approval.domain.TApproval;
+
+/**
+ * 批文清单Service接口
+ * 
+ * @author ruoyi
+ * @date 2024-03-25
+ */
+public interface ITApprovalService 
+{
+    /**
+     * 查询批文清单
+     * 
+     * @param id 批文清单主键
+     * @return 批文清单
+     */
+    public TApproval selectTApprovalById(Long id);
+
+    /**
+     * 查询批文清单列表
+     * 
+     * @param tApproval 批文清单
+     * @return 批文清单集合
+     */
+    public List<TApproval> selectTApprovalList(TApproval tApproval);
+
+    /**
+     * 新增批文清单
+     * 
+     * @param tApproval 批文清单
+     * @return 结果
+     */
+    public int insertTApproval(TApproval tApproval);
+
+    /**
+     * 修改批文清单
+     * 
+     * @param tApproval 批文清单
+     * @return 结果
+     */
+    public int updateTApproval(TApproval tApproval);
+
+    /**
+     * 批量删除批文清单
+     * 
+     * @param ids 需要删除的批文清单主键集合
+     * @return 结果
+     */
+    public int deleteTApprovalByIds(Long[] ids);
+
+    /**
+     * 删除批文清单信息
+     * 
+     * @param id 批文清单主键
+     * @return 结果
+     */
+    public int deleteTApprovalById(Long id);
+}

+ 93 - 0
admin/src/main/java/com/ruoyi/project/approval/service/impl/TApprovalServiceImpl.java

@@ -0,0 +1,93 @@
+package com.ruoyi.project.approval.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.project.approval.mapper.TApprovalMapper;
+import com.ruoyi.project.approval.domain.TApproval;
+import com.ruoyi.project.approval.service.ITApprovalService;
+
+/**
+ * 批文清单Service业务层处理
+ * 
+ * @author ruoyi
+ * @date 2024-03-25
+ */
+@Service
+public class TApprovalServiceImpl implements ITApprovalService 
+{
+    @Autowired
+    private TApprovalMapper tApprovalMapper;
+
+    /**
+     * 查询批文清单
+     * 
+     * @param id 批文清单主键
+     * @return 批文清单
+     */
+    @Override
+    public TApproval selectTApprovalById(Long id)
+    {
+        return tApprovalMapper.selectTApprovalById(id);
+    }
+
+    /**
+     * 查询批文清单列表
+     * 
+     * @param tApproval 批文清单
+     * @return 批文清单
+     */
+    @Override
+    public List<TApproval> selectTApprovalList(TApproval tApproval)
+    {
+        return tApprovalMapper.selectTApprovalList(tApproval);
+    }
+
+    /**
+     * 新增批文清单
+     * 
+     * @param tApproval 批文清单
+     * @return 结果
+     */
+    @Override
+    public int insertTApproval(TApproval tApproval)
+    {
+        return tApprovalMapper.insertTApproval(tApproval);
+    }
+
+    /**
+     * 修改批文清单
+     * 
+     * @param tApproval 批文清单
+     * @return 结果
+     */
+    @Override
+    public int updateTApproval(TApproval tApproval)
+    {
+        return tApprovalMapper.updateTApproval(tApproval);
+    }
+
+    /**
+     * 批量删除批文清单
+     * 
+     * @param ids 需要删除的批文清单主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTApprovalByIds(Long[] ids)
+    {
+        return tApprovalMapper.deleteTApprovalByIds(ids);
+    }
+
+    /**
+     * 删除批文清单信息
+     * 
+     * @param id 批文清单主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTApprovalById(Long id)
+    {
+        return tApprovalMapper.deleteTApprovalById(id);
+    }
+}

+ 238 - 0
admin/src/main/java/com/ruoyi/project/shiftmgr/controller/TShiftLogController.java

@@ -0,0 +1,238 @@
+package com.ruoyi.project.shiftmgr.controller;
+
+
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.data.Texts;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.config.RuoYiConfig;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.file.FileUploadUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.project.shiftmgr.domain.TShiftLog;
+import com.ruoyi.project.shiftmgr.service.ITShiftLogService;
+import com.ruoyi.system.service.ISysUserService;
+import io.jsonwebtoken.lang.Assert;
+import org.apache.commons.collections4.CollectionUtils;
+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.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 轮班日志Controller
+ *
+ * @author ruoyi
+ * @date 2023-08-17
+ */
+@RestController
+@RequestMapping("/shiftmgr/log")
+public class TShiftLogController extends BaseController {
+    @Autowired
+    private ITShiftLogService tShiftLogService;
+
+    @Autowired
+    private ISysUserService sysUserService;
+
+    /**
+     * 查询轮班日志列表
+     */
+    @PreAuthorize("@ss.hasPermi('shiftmgr:log:list')")
+    @GetMapping("/list")
+    public AjaxResult list(TShiftLog tShiftLog) {
+        startPage();
+        List<TShiftLog> list = tShiftLogService.selectTShiftLogList(tShiftLog);
+        return AjaxResult.success(getUserId().toString(), getDataTable(list));
+    }
+
+    @PreAuthorize("@ss.hasPermi('shiftmgr:log:list')")
+    @GetMapping("/lastData")
+    public AjaxResult lastData(TShiftLog tShiftLog) {
+        tShiftLog.setToShiftSup(getUserId().toString());
+        List<TShiftLog> list = tShiftLogService.selectTShiftLogList(tShiftLog);
+        if (CollectionUtils.isNotEmpty(list)) {
+            return AjaxResult.success(list.get(0));
+        }
+        return AjaxResult.success();
+    }
+
+    /**
+     * 导出轮班日志列表
+     */
+    @PreAuthorize("@ss.hasPermi('shiftmgr:log:export')")
+    @Log(title = "轮班日志", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TShiftLog tShiftLog) {
+        List<TShiftLog> list = tShiftLogService.selectTShiftLogList(tShiftLog);
+        ExcelUtil<TShiftLog> util = new ExcelUtil<TShiftLog>(TShiftLog.class);
+        util.exportExcel(list, "轮班日志数据");
+    }
+
+    /**
+     * 获取轮班日志详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('shiftmgr:log:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id) {
+        return AjaxResult.success(tShiftLogService.selectTShiftLogById(id));
+    }
+
+    /**
+     * 新增轮班日志
+     */
+    @PreAuthorize("@ss.hasPermi('shiftmgr:log:add')")
+    @Log(title = "轮班日志", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TShiftLog tShiftLog) {
+        tShiftLog.setCreaterCode(String.valueOf(getUserId()));
+        tShiftLog.setCreatedate(new Date());
+        return toAjax(tShiftLogService.insertTShiftLog(tShiftLog));
+    }
+
+    /**
+     * 修改轮班日志
+     */
+    @PreAuthorize("@ss.hasPermi('shiftmgr:log:edit')")
+    @Log(title = "轮班日志", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TShiftLog tShiftLog) {
+        tShiftLog.setUpdaterCode(String.valueOf(getUserId()));
+        tShiftLog.setUpdatedate(new Date());
+        if (tShiftLog.getStatus() == 1)
+            tShiftLog.setGiveOverTime(new Date());
+        return toAjax(tShiftLogService.updateTShiftLog(tShiftLog));
+    }
+
+    /**
+     * 删除轮班日志
+     */
+    @PreAuthorize("@ss.hasPermi('shiftmgr:log:remove')")
+    @Log(title = "轮班日志", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids) {
+        return toAjax(tShiftLogService.deleteTShiftLogByIds(ids));
+    }
+
+
+    @GetMapping("/wordView/{id}")
+    public AjaxResult wordView(@PathVariable Long id) throws IOException {
+        //根据ID查询并生成
+        String url = PreView(id);
+        return AjaxResult.success(url);
+    }
+
+    /**
+     * @return
+     * @throws IOException
+     */
+    public String PreView(Long id) throws IOException {
+        //根据ID查询并生成
+        TShiftLog tShiftLog = tShiftLogService.selectTShiftLogById(id);
+        return this.createMeetingWord(tShiftLog);
+    }
+
+    public String createMeetingWord(TShiftLog tShiftLog) throws IOException {
+        //生成word
+        // 模板路径
+        String templatePath;
+        // 生成word的路径
+        String fileDir = RuoYiConfig.getProfile() + "/" + "shiftLog";
+        // 生成word的文件名称
+        SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日");
+
+        String fileName = format.format(tShiftLog.getTakeOverTime()) + "~" + format.format(tShiftLog.getGiveOverTime()) + "_交接班_轮班日志.docx";
+        //渲染文本
+        Map<String, Object> params = getWordData(tShiftLog);
+        templatePath = "static/word/shiftLog.docx";
+        return createWord(templatePath, fileDir, fileName, params);
+    }
+
+    public Map<String, Object> getWordData(TShiftLog tShiftLog) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("shiftTeam", Texts.of(tShiftLog.getShiftTeam()).fontSize(10).create());
+        params.put("takeOverTime", Texts.of(DateUtils.parseDateToStr("yyyy年MM月dd日 HH时mm分", tShiftLog.getTakeOverTime())).fontSize(10).create());
+        params.put("giveOverTime", Texts.of(DateUtils.parseDateToStr("yyyy年MM月dd日 HH时mm分", tShiftLog.getGiveOverTime())).fontSize(10).create());
+        params.put("tocp", Texts.of(tShiftLog.getTocp()).fontSize(10).create());
+        params.put("ehs5sBriefing", Texts.of(tShiftLog.getEhs5sBriefing()).fontSize(10).create());
+        params.put("soa", Texts.of(tShiftLog.getSoa()).fontSize(10).create());
+        params.put("sh", Texts.of(tShiftLog.getSh()).fontSize(10).create());
+        params.put("bdoc", Texts.of(tShiftLog.getBdoc()).fontSize(10).create());
+        params.put("thfd", Texts.of(tShiftLog.getThfd()).fontSize(10).create());
+        params.put("pthfUnit", Texts.of(tShiftLog.getPthfUnit()).fontSize(10).create());
+        params.put("dbpd", Texts.of(tShiftLog.getDbpd()).fontSize(10).create());
+        params.put("truss", Texts.of(tShiftLog.getTruss()).fontSize(10).create());
+        params.put("pthfCus", Texts.of(tShiftLog.getPthfCus()).fontSize(10).create());
+        params.put("bipus", Texts.of(tShiftLog.getBipus()).fontSize(10).create());
+        params.put("lpgH2", Texts.of(tShiftLog.getLpgH2()).fontSize(10).create());
+        params.put("q125601", Texts.of(tShiftLog.getQ125601()).fontSize(10).create());
+        params.put("q125602", Texts.of(tShiftLog.getQ125602()).fontSize(10).create());
+        params.put("q312018Q1", Texts.of(tShiftLog.getQ312018Q1()).fontSize(10).create());
+        params.put("q312018Q2", Texts.of(tShiftLog.getQ312018Q2()).fontSize(10).create());
+        params.put("q312018Q3", Texts.of(tShiftLog.getQ312018Q3()).fontSize(10).create());
+        params.put("q312018Q4", Texts.of(tShiftLog.getQ312018Q4()).fontSize(10).create());
+        params.put("q312000", Texts.of(tShiftLog.getQ312000()).fontSize(10).create());
+        params.put("q312001", Texts.of(tShiftLog.getQ312001()).fontSize(10).create());
+        params.put("epdOther", Texts.of(tShiftLog.getEpdOther()).fontSize(10).create());
+        params.put("ehsOther", Texts.of(tShiftLog.getEhsOther()).fontSize(10).create());
+        params.put("qar", Texts.of(tShiftLog.getQar()).fontSize(10).create());
+        params.put("maEi", Texts.of(tShiftLog.getMaEi()).fontSize(10).create());
+        params.put("maMechanical", Texts.of(tShiftLog.getMaMechanical()).fontSize(10).create());
+        params.put("thirdPartyCommunication", Texts.of(tShiftLog.getThirdPartyCommunication()).fontSize(10).create());
+        params.put("fampEi", Texts.of(tShiftLog.getFampEi()).fontSize(10).create());
+        params.put("fampMechanical", Texts.of(tShiftLog.getFampMechanical()).fontSize(10).create());
+        params.put("faop", Texts.of(tShiftLog.getFaop()).fontSize(10).create());
+        params.put("comments", Texts.of(tShiftLog.getComments()).fontSize(10).create());
+        SysUser ho = sysUserService.selectUserById(Long.valueOf(tShiftLog.getHoShiftSup()));
+        SysUser to = sysUserService.selectUserById(Long.valueOf(tShiftLog.getToShiftSup()));
+        if (ho != null)
+            params.put("hoShiftSup", Texts.of(ho.getNickName()).fontSize(10).create());
+        if (to != null)
+            params.put("toShiftSup", Texts.of(to.getNickName()).fontSize(10).create());
+        params.put("remarks", Texts.of(tShiftLog.getRemarks()).fontSize(10).create());
+        return params;
+    }
+
+    public String createWord(String templatePath, String fileDir, String fileName, Map<String, Object> paramMap) 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("/" + "shiftLog"), fileName);
+    }
+}

+ 643 - 0
admin/src/main/java/com/ruoyi/project/shiftmgr/domain/TShiftLog.java

@@ -0,0 +1,643 @@
+package com.ruoyi.project.shiftmgr.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 轮班日志对象 t_shift_log
+ *
+ * @author ruoyi
+ * @date 2023-08-17
+ */
+public class TShiftLog extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** id */
+    private Long id;
+
+    /** 倒班班组 */
+    @Excel(name = "倒班班组")
+    private String shiftTeam;
+
+    /** 接班时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
+    @Excel(name = "接班时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm")
+    private Date takeOverTime;
+
+    /** 交班时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
+    @Excel(name = "交班时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm")
+    private Date giveOverTime;
+
+    /** 接班时工艺状况 */
+    @Excel(name = "接班时工艺状况")
+    private String tocp;
+
+    /** 安全、环保、健康及5S事项班前简报 */
+    @Excel(name = "安全、环保、健康及5S事项班前简报")
+    private String ehs5sBriefing;
+
+    /** C4分离和氧化吸收 */
+    @Excel(name = "C4分离和氧化吸收")
+    private String soa;
+
+    /** 汽提和加氢 */
+    @Excel(name = "汽提和加氢")
+    private String sh;
+
+    /** BDO环化 */
+    @Excel(name = "BDO环化")
+    private String bdoc;
+
+    /** THF精馏 */
+    @Excel(name = "THF精馏")
+    private String thfd;
+
+    /** PTHF单元 */
+    @Excel(name = "PTHF单元")
+    private String pthfUnit;
+
+    /** DBP精馏 */
+    @Excel(name = "DBP精馏")
+    private String dbpd;
+
+    /** TRU和蒸汽系统 */
+    @Excel(name = "TRU和蒸汽系统")
+    private String truss;
+
+    /** PolyTHF Complex公用工程系统 */
+    @Excel(name = "PolyTHF Complex公用工程系统")
+    private String pthfCus;
+
+    /** BIP公用工程系统 */
+    @Excel(name = "BIP公用工程系统")
+    private String bipus;
+
+    /** 液化气和氢气 */
+    @Excel(name = "液化气和氢气")
+    private String lpgH2;
+
+    /** TRU-CO */
+    @Excel(name = "TRU-CO")
+    private String q125601;
+
+    /** TRU-非甲烷总烃 */
+    @Excel(name = "TRU-非甲烷总烃")
+    private String q125602;
+
+    /** 厂界-THF */
+    @Excel(name = "厂界-THF")
+    private String q312018Q1;
+
+    /** 厂界-MeOH */
+    @Excel(name = "厂界-MeOH")
+    private String q312018Q2;
+
+    /** 厂界-MeAC */
+    @Excel(name = "厂界-MeAC")
+    private String q312018Q3;
+
+    /** 厂界-Xylene */
+    @Excel(name = "厂界-Xylene")
+    private String q312018Q4;
+
+    /** 雨水总管-TOC */
+    @Excel(name = "雨水总管-TOC")
+    private String q312000;
+
+    /** 雨水总管-PH */
+    @Excel(name = "雨水总管-PH")
+    private String q312001;
+
+    /** 异常状况描述 */
+    @Excel(name = "异常状况描述")
+    private String epdOther;
+
+    /** 其他 */
+    @Excel(name = "其他")
+    private String ehsOther;
+
+    /** 产品质量和分析报告 */
+    @Excel(name = "产品质量和分析报告")
+    private String qar;
+
+    /** 电气及仪表 */
+    @Excel(name = "电气及仪表")
+    private String maEi;
+
+    /** 机械 */
+    @Excel(name = "机械")
+    private String maMechanical;
+
+    /** 第三方联系 */
+    @Excel(name = "第三方联系")
+    private String thirdPartyCommunication;
+
+    /** 电气及仪表 */
+    @Excel(name = "电气及仪表")
+    private String fampEi;
+
+    /** 机械 */
+    @Excel(name = "机械")
+    private String fampMechanical;
+
+    /** 接班班组需继续的操作 */
+    @Excel(name = "接班班组需继续的操作")
+    private String faop;
+
+    /** 评述 */
+    @Excel(name = "评述")
+    private String comments;
+
+    /** 交班班组组长 */
+    @Excel(name = "交班班组组长")
+    private String hoShiftSup;
+
+    /** 接班班组组长 */
+    @Excel(name = "接班班组组长")
+    private String toShiftSup;
+
+    /** 删除标识 */
+    private Integer delFlag;
+
+    /** 状态 */
+    @Excel(name = "状态")
+    private Integer status;
+
+    /** 创建人 */
+    @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;
+
+    public void setId(Long id)
+    {
+        this.id = id;
+    }
+
+    public Long getId()
+    {
+        return id;
+    }
+    public void setShiftTeam(String shiftTeam)
+    {
+        this.shiftTeam = shiftTeam;
+    }
+
+    public String getShiftTeam()
+    {
+        return shiftTeam;
+    }
+    public void setTakeOverTime(Date takeOverTime)
+    {
+        this.takeOverTime = takeOverTime;
+    }
+
+    public Date getTakeOverTime()
+    {
+        return takeOverTime;
+    }
+
+    public Date getGiveOverTime() {
+        return giveOverTime;
+    }
+
+    public void setGiveOverTime(Date giveOverTime) {
+        this.giveOverTime = giveOverTime;
+    }
+
+    public void setTocp(String tocp)
+    {
+        this.tocp = tocp;
+    }
+
+    public String getTocp()
+    {
+        return tocp;
+    }
+    public void setEhs5sBriefing(String ehs5sBriefing)
+    {
+        this.ehs5sBriefing = ehs5sBriefing;
+    }
+
+    public String getEhs5sBriefing()
+    {
+        return ehs5sBriefing;
+    }
+    public void setSoa(String soa)
+    {
+        this.soa = soa;
+    }
+
+    public String getSoa()
+    {
+        return soa;
+    }
+    public void setSh(String sh)
+    {
+        this.sh = sh;
+    }
+
+    public String getSh()
+    {
+        return sh;
+    }
+    public void setBdoc(String bdoc)
+    {
+        this.bdoc = bdoc;
+    }
+
+    public String getBdoc()
+    {
+        return bdoc;
+    }
+    public void setThfd(String thfd)
+    {
+        this.thfd = thfd;
+    }
+
+    public String getThfd()
+    {
+        return thfd;
+    }
+    public void setPthfUnit(String pthfUnit)
+    {
+        this.pthfUnit = pthfUnit;
+    }
+
+    public String getPthfUnit()
+    {
+        return pthfUnit;
+    }
+    public void setDbpd(String dbpd)
+    {
+        this.dbpd = dbpd;
+    }
+
+    public String getDbpd()
+    {
+        return dbpd;
+    }
+    public void setTruss(String truss)
+    {
+        this.truss = truss;
+    }
+
+    public String getTruss()
+    {
+        return truss;
+    }
+    public void setPthfCus(String pthfCus)
+    {
+        this.pthfCus = pthfCus;
+    }
+
+    public String getPthfCus()
+    {
+        return pthfCus;
+    }
+    public void setBipus(String bipus)
+    {
+        this.bipus = bipus;
+    }
+
+    public String getBipus()
+    {
+        return bipus;
+    }
+    public void setLpgH2(String lpgH2)
+    {
+        this.lpgH2 = lpgH2;
+    }
+
+    public String getLpgH2()
+    {
+        return lpgH2;
+    }
+    public void setQ125601(String q125601)
+    {
+        this.q125601 = q125601;
+    }
+
+    public String getQ125601()
+    {
+        return q125601;
+    }
+    public void setQ125602(String q125602)
+    {
+        this.q125602 = q125602;
+    }
+
+    public String getQ125602()
+    {
+        return q125602;
+    }
+    public void setQ312018Q1(String q312018Q1)
+    {
+        this.q312018Q1 = q312018Q1;
+    }
+
+    public String getQ312018Q1()
+    {
+        return q312018Q1;
+    }
+    public void setQ312018Q2(String q312018Q2)
+    {
+        this.q312018Q2 = q312018Q2;
+    }
+
+    public String getQ312018Q2()
+    {
+        return q312018Q2;
+    }
+    public void setQ312018Q3(String q312018Q3)
+    {
+        this.q312018Q3 = q312018Q3;
+    }
+
+    public String getQ312018Q3()
+    {
+        return q312018Q3;
+    }
+    public void setQ312018Q4(String q312018Q4)
+    {
+        this.q312018Q4 = q312018Q4;
+    }
+
+    public String getQ312018Q4()
+    {
+        return q312018Q4;
+    }
+    public void setQ312000(String q312000)
+    {
+        this.q312000 = q312000;
+    }
+
+    public String getQ312000()
+    {
+        return q312000;
+    }
+    public void setQ312001(String q312001)
+    {
+        this.q312001 = q312001;
+    }
+
+    public String getQ312001()
+    {
+        return q312001;
+    }
+    public void setEpdOther(String epdOther)
+    {
+        this.epdOther = epdOther;
+    }
+
+    public String getEpdOther()
+    {
+        return epdOther;
+    }
+    public void setEhsOther(String ehsOther)
+    {
+        this.ehsOther = ehsOther;
+    }
+
+    public String getEhsOther()
+    {
+        return ehsOther;
+    }
+    public void setQar(String qar)
+    {
+        this.qar = qar;
+    }
+
+    public String getQar()
+    {
+        return qar;
+    }
+    public void setMaEi(String maEi)
+    {
+        this.maEi = maEi;
+    }
+
+    public String getMaEi()
+    {
+        return maEi;
+    }
+    public void setMaMechanical(String maMechanical)
+    {
+        this.maMechanical = maMechanical;
+    }
+
+    public String getMaMechanical()
+    {
+        return maMechanical;
+    }
+    public void setThirdPartyCommunication(String thirdPartyCommunication)
+    {
+        this.thirdPartyCommunication = thirdPartyCommunication;
+    }
+
+    public String getThirdPartyCommunication()
+    {
+        return thirdPartyCommunication;
+    }
+    public void setFampEi(String fampEi)
+    {
+        this.fampEi = fampEi;
+    }
+
+    public String getFampEi()
+    {
+        return fampEi;
+    }
+    public void setFampMechanical(String fampMechanical)
+    {
+        this.fampMechanical = fampMechanical;
+    }
+
+    public String getFampMechanical()
+    {
+        return fampMechanical;
+    }
+    public void setFaop(String faop)
+    {
+        this.faop = faop;
+    }
+
+    public String getFaop()
+    {
+        return faop;
+    }
+    public void setComments(String comments)
+    {
+        this.comments = comments;
+    }
+
+    public String getComments()
+    {
+        return comments;
+    }
+    public void setHoShiftSup(String hoShiftSup)
+    {
+        this.hoShiftSup = hoShiftSup;
+    }
+
+    public String getHoShiftSup()
+    {
+        return hoShiftSup;
+    }
+    public void setToShiftSup(String toShiftSup)
+    {
+        this.toShiftSup = toShiftSup;
+    }
+
+    public String getToShiftSup()
+    {
+        return toShiftSup;
+    }
+    public void setDelFlag(Integer delFlag)
+    {
+        this.delFlag = delFlag;
+    }
+
+    public Integer getDelFlag()
+    {
+        return delFlag;
+    }
+    public void setStatus(Integer status)
+    {
+        this.status = status;
+    }
+
+    public Integer getStatus()
+    {
+        return status;
+    }
+    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("shiftTeam", getShiftTeam())
+            .append("takeOverTime", getTakeOverTime())
+            .append("tocp", getTocp())
+            .append("ehs5sBriefing", getEhs5sBriefing())
+            .append("soa", getSoa())
+            .append("sh", getSh())
+            .append("bdoc", getBdoc())
+            .append("thfd", getThfd())
+            .append("pthfUnit", getPthfUnit())
+            .append("dbpd", getDbpd())
+            .append("truss", getTruss())
+            .append("pthfCus", getPthfCus())
+            .append("bipus", getBipus())
+            .append("lpgH2", getLpgH2())
+            .append("q125601", getQ125601())
+            .append("q125602", getQ125602())
+            .append("q312018Q1", getQ312018Q1())
+            .append("q312018Q2", getQ312018Q2())
+            .append("q312018Q3", getQ312018Q3())
+            .append("q312018Q4", getQ312018Q4())
+            .append("q312000", getQ312000())
+            .append("q312001", getQ312001())
+            .append("epdOther", getEpdOther())
+            .append("ehsOther", getEhsOther())
+            .append("qar", getQar())
+            .append("maEi", getMaEi())
+            .append("maMechanical", getMaMechanical())
+            .append("thirdPartyCommunication", getThirdPartyCommunication())
+            .append("fampEi", getFampEi())
+            .append("fampMechanical", getFampMechanical())
+            .append("faop", getFaop())
+            .append("comments", getComments())
+            .append("hoShiftSup", getHoShiftSup())
+            .append("toShiftSup", getToShiftSup())
+            .append("delFlag", getDelFlag())
+            .append("status", getStatus())
+            .append("createrCode", getCreaterCode())
+            .append("createdate", getCreatedate())
+            .append("updaterCode", getUpdaterCode())
+            .append("updatedate", getUpdatedate())
+            .append("deptId", getDeptId())
+            .append("remarks", getRemarks())
+            .toString();
+    }
+}

+ 61 - 0
admin/src/main/java/com/ruoyi/project/shiftmgr/mapper/TShiftLogMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.project.shiftmgr.mapper;
+
+import java.util.List;
+import com.ruoyi.project.shiftmgr.domain.TShiftLog;
+
+/**
+ * 轮班日志Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2023-08-17
+ */
+public interface TShiftLogMapper 
+{
+    /**
+     * 查询轮班日志
+     * 
+     * @param id 轮班日志主键
+     * @return 轮班日志
+     */
+    public TShiftLog selectTShiftLogById(Long id);
+
+    /**
+     * 查询轮班日志列表
+     * 
+     * @param tShiftLog 轮班日志
+     * @return 轮班日志集合
+     */
+    public List<TShiftLog> selectTShiftLogList(TShiftLog tShiftLog);
+
+    /**
+     * 新增轮班日志
+     * 
+     * @param tShiftLog 轮班日志
+     * @return 结果
+     */
+    public int insertTShiftLog(TShiftLog tShiftLog);
+
+    /**
+     * 修改轮班日志
+     * 
+     * @param tShiftLog 轮班日志
+     * @return 结果
+     */
+    public int updateTShiftLog(TShiftLog tShiftLog);
+
+    /**
+     * 删除轮班日志
+     * 
+     * @param id 轮班日志主键
+     * @return 结果
+     */
+    public int deleteTShiftLogById(Long id);
+
+    /**
+     * 批量删除轮班日志
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTShiftLogByIds(Long[] ids);
+}

+ 61 - 0
admin/src/main/java/com/ruoyi/project/shiftmgr/service/ITShiftLogService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.project.shiftmgr.service;
+
+import java.util.List;
+import com.ruoyi.project.shiftmgr.domain.TShiftLog;
+
+/**
+ * 轮班日志Service接口
+ * 
+ * @author ruoyi
+ * @date 2023-08-17
+ */
+public interface ITShiftLogService 
+{
+    /**
+     * 查询轮班日志
+     * 
+     * @param id 轮班日志主键
+     * @return 轮班日志
+     */
+    public TShiftLog selectTShiftLogById(Long id);
+
+    /**
+     * 查询轮班日志列表
+     * 
+     * @param tShiftLog 轮班日志
+     * @return 轮班日志集合
+     */
+    public List<TShiftLog> selectTShiftLogList(TShiftLog tShiftLog);
+
+    /**
+     * 新增轮班日志
+     * 
+     * @param tShiftLog 轮班日志
+     * @return 结果
+     */
+    public int insertTShiftLog(TShiftLog tShiftLog);
+
+    /**
+     * 修改轮班日志
+     * 
+     * @param tShiftLog 轮班日志
+     * @return 结果
+     */
+    public int updateTShiftLog(TShiftLog tShiftLog);
+
+    /**
+     * 批量删除轮班日志
+     * 
+     * @param ids 需要删除的轮班日志主键集合
+     * @return 结果
+     */
+    public int deleteTShiftLogByIds(Long[] ids);
+
+    /**
+     * 删除轮班日志信息
+     * 
+     * @param id 轮班日志主键
+     * @return 结果
+     */
+    public int deleteTShiftLogById(Long id);
+}

+ 93 - 0
admin/src/main/java/com/ruoyi/project/shiftmgr/service/impl/TShiftLogServiceImpl.java

@@ -0,0 +1,93 @@
+package com.ruoyi.project.shiftmgr.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.project.shiftmgr.mapper.TShiftLogMapper;
+import com.ruoyi.project.shiftmgr.domain.TShiftLog;
+import com.ruoyi.project.shiftmgr.service.ITShiftLogService;
+
+/**
+ * 轮班日志Service业务层处理
+ * 
+ * @author ruoyi
+ * @date 2023-08-17
+ */
+@Service
+public class TShiftLogServiceImpl implements ITShiftLogService 
+{
+    @Autowired
+    private TShiftLogMapper tShiftLogMapper;
+
+    /**
+     * 查询轮班日志
+     * 
+     * @param id 轮班日志主键
+     * @return 轮班日志
+     */
+    @Override
+    public TShiftLog selectTShiftLogById(Long id)
+    {
+        return tShiftLogMapper.selectTShiftLogById(id);
+    }
+
+    /**
+     * 查询轮班日志列表
+     * 
+     * @param tShiftLog 轮班日志
+     * @return 轮班日志
+     */
+    @Override
+    public List<TShiftLog> selectTShiftLogList(TShiftLog tShiftLog)
+    {
+        return tShiftLogMapper.selectTShiftLogList(tShiftLog);
+    }
+
+    /**
+     * 新增轮班日志
+     * 
+     * @param tShiftLog 轮班日志
+     * @return 结果
+     */
+    @Override
+    public int insertTShiftLog(TShiftLog tShiftLog)
+    {
+        return tShiftLogMapper.insertTShiftLog(tShiftLog);
+    }
+
+    /**
+     * 修改轮班日志
+     * 
+     * @param tShiftLog 轮班日志
+     * @return 结果
+     */
+    @Override
+    public int updateTShiftLog(TShiftLog tShiftLog)
+    {
+        return tShiftLogMapper.updateTShiftLog(tShiftLog);
+    }
+
+    /**
+     * 批量删除轮班日志
+     * 
+     * @param ids 需要删除的轮班日志主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTShiftLogByIds(Long[] ids)
+    {
+        return tShiftLogMapper.deleteTShiftLogByIds(ids);
+    }
+
+    /**
+     * 删除轮班日志信息
+     * 
+     * @param id 轮班日志主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTShiftLogById(Long id)
+    {
+        return tShiftLogMapper.deleteTShiftLogById(id);
+    }
+}

+ 34 - 50
admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java

@@ -3,6 +3,7 @@ package com.ruoyi.web.controller.system;
 import java.util.List;
 import java.util.stream.Collectors;
 import javax.servlet.http.HttpServletResponse;
+
 import org.apache.commons.lang3.ArrayUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -34,13 +35,12 @@ import com.ruoyi.system.service.ISysUserService;
 
 /**
  * 用户信息
- * 
+ *
  * @author ruoyi
  */
 @RestController
 @RequestMapping("/system/user")
-public class SysUserController extends BaseController
-{
+public class SysUserController extends BaseController {
     @Autowired
     private ISysUserService userService;
 
@@ -58,8 +58,7 @@ public class SysUserController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('system:user:list')")
     @GetMapping("/list")
-    public TableDataInfo list(SysUser user)
-    {
+    public TableDataInfo list(SysUser user) {
         startPage();
         List<SysUser> list = userService.selectUserList(user);
         return getDataTable(list);
@@ -68,8 +67,7 @@ public class SysUserController extends BaseController
     @Log(title = "用户管理", businessType = BusinessType.EXPORT)
     @PreAuthorize("@ss.hasPermi('system:user:export')")
     @PostMapping("/export")
-    public void export(HttpServletResponse response, SysUser user)
-    {
+    public void export(HttpServletResponse response, SysUser user) {
         List<SysUser> list = userService.selectUserList(user);
         ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
         util.exportExcel(response, list, "用户数据");
@@ -78,8 +76,7 @@ public class SysUserController extends BaseController
     @Log(title = "用户管理", businessType = BusinessType.IMPORT)
     @PreAuthorize("@ss.hasPermi('system:user:import')")
     @PostMapping("/importData")
-    public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
-    {
+    public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception {
         ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
         List<SysUser> userList = util.importExcel(file.getInputStream());
         String operName = getUsername();
@@ -88,8 +85,7 @@ public class SysUserController extends BaseController
     }
 
     @PostMapping("/importTemplate")
-    public void importTemplate(HttpServletResponse response)
-    {
+    public void importTemplate(HttpServletResponse response) {
         ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
         util.importTemplateExcel(response, "用户数据");
     }
@@ -98,16 +94,14 @@ public class SysUserController extends BaseController
      * 根据用户编号获取详细信息
      */
     @PreAuthorize("@ss.hasPermi('system:user:query')")
-    @GetMapping(value = { "/", "/{userId}" })
-    public AjaxResult getInfo(@PathVariable(value = "userId", required = false) Long userId)
-    {
+    @GetMapping(value = {"/", "/{userId}"})
+    public AjaxResult getInfo(@PathVariable(value = "userId", required = false) Long userId) {
         userService.checkUserDataScope(userId);
         AjaxResult ajax = AjaxResult.success();
         List<SysRole> roles = roleService.selectRoleAll();
         ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
         ajax.put("posts", postService.selectPostAll());
-        if (StringUtils.isNotNull(userId))
-        {
+        if (StringUtils.isNotNull(userId)) {
             SysUser sysUser = userService.selectUserById(userId);
             ajax.put(AjaxResult.DATA_TAG, sysUser);
             ajax.put("postIds", postService.selectPostListByUserId(userId));
@@ -122,18 +116,12 @@ public class SysUserController extends BaseController
     @PreAuthorize("@ss.hasPermi('system:user:add')")
     @Log(title = "用户管理", businessType = BusinessType.INSERT)
     @PostMapping
-    public AjaxResult add(@Validated @RequestBody SysUser user)
-    {
-        if (!userService.checkUserNameUnique(user))
-        {
+    public AjaxResult add(@Validated @RequestBody SysUser user) {
+        if (!userService.checkUserNameUnique(user)) {
             return error("新增用户'" + user.getUserName() + "'失败,登录账号已存在");
-        }
-        else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user))
-        {
+        } else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) {
             return error("新增用户'" + user.getUserName() + "'失败,手机号码已存在");
-        }
-        else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user))
-        {
+        } else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user)) {
             return error("新增用户'" + user.getUserName() + "'失败,邮箱账号已存在");
         }
         user.setCreateBy(getUsername());
@@ -147,20 +135,14 @@ public class SysUserController extends BaseController
     @PreAuthorize("@ss.hasPermi('system:user:edit')")
     @Log(title = "用户管理", businessType = BusinessType.UPDATE)
     @PutMapping
-    public AjaxResult edit(@Validated @RequestBody SysUser user)
-    {
+    public AjaxResult edit(@Validated @RequestBody SysUser user) {
         userService.checkUserAllowed(user);
         userService.checkUserDataScope(user.getUserId());
-        if (!userService.checkUserNameUnique(user))
-        {
+        if (!userService.checkUserNameUnique(user)) {
             return error("修改用户'" + user.getUserName() + "'失败,登录账号已存在");
-        }
-        else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user))
-        {
+        } else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) {
             return error("修改用户'" + user.getUserName() + "'失败,手机号码已存在");
-        }
-        else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user))
-        {
+        } else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user)) {
             return error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在");
         }
         user.setUpdateBy(getUsername());
@@ -173,10 +155,8 @@ public class SysUserController extends BaseController
     @PreAuthorize("@ss.hasPermi('system:user:remove')")
     @Log(title = "用户管理", businessType = BusinessType.DELETE)
     @DeleteMapping("/{userIds}")
-    public AjaxResult remove(@PathVariable Long[] userIds)
-    {
-        if (ArrayUtils.contains(userIds, getUserId()))
-        {
+    public AjaxResult remove(@PathVariable Long[] userIds) {
+        if (ArrayUtils.contains(userIds, getUserId())) {
             return error("当前用户不能删除");
         }
         return toAjax(userService.deleteUserByIds(userIds));
@@ -188,8 +168,7 @@ public class SysUserController extends BaseController
     @PreAuthorize("@ss.hasPermi('system:user:resetPwd')")
     @Log(title = "用户管理", businessType = BusinessType.UPDATE)
     @PutMapping("/resetPwd")
-    public AjaxResult resetPwd(@RequestBody SysUser user)
-    {
+    public AjaxResult resetPwd(@RequestBody SysUser user) {
         userService.checkUserAllowed(user);
         userService.checkUserDataScope(user.getUserId());
         user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
@@ -203,8 +182,7 @@ public class SysUserController extends BaseController
     @PreAuthorize("@ss.hasPermi('system:user:edit')")
     @Log(title = "用户管理", businessType = BusinessType.UPDATE)
     @PutMapping("/changeStatus")
-    public AjaxResult changeStatus(@RequestBody SysUser user)
-    {
+    public AjaxResult changeStatus(@RequestBody SysUser user) {
         userService.checkUserAllowed(user);
         userService.checkUserDataScope(user.getUserId());
         user.setUpdateBy(getUsername());
@@ -216,8 +194,7 @@ public class SysUserController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('system:user:query')")
     @GetMapping("/authRole/{userId}")
-    public AjaxResult authRole(@PathVariable("userId") Long userId)
-    {
+    public AjaxResult authRole(@PathVariable("userId") Long userId) {
         AjaxResult ajax = AjaxResult.success();
         SysUser user = userService.selectUserById(userId);
         List<SysRole> roles = roleService.selectRolesByUserId(userId);
@@ -232,8 +209,7 @@ public class SysUserController extends BaseController
     @PreAuthorize("@ss.hasPermi('system:user:edit')")
     @Log(title = "用户管理", businessType = BusinessType.GRANT)
     @PutMapping("/authRole")
-    public AjaxResult insertAuthRole(Long userId, Long[] roleIds)
-    {
+    public AjaxResult insertAuthRole(Long userId, Long[] roleIds) {
         userService.checkUserDataScope(userId);
         userService.insertUserAuth(userId, roleIds);
         return success();
@@ -244,8 +220,16 @@ public class SysUserController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('system:user:list')")
     @GetMapping("/deptTree")
-    public AjaxResult deptTree(SysDept dept)
-    {
+    public AjaxResult deptTree(SysDept dept) {
         return success(deptService.selectDeptTreeList(dept));
     }
+
+
+    /**
+     * 获取用户列表
+     */
+    @GetMapping("/postUserList")
+    public List<SysUser> postUserList(String postCode) {
+        return userService.selectUserListByPost(postCode);
+    }
 }

+ 1 - 1
admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java

@@ -34,7 +34,7 @@ public class TestController extends BaseController
 {
     private final static Map<Integer, UserEntity> users = new LinkedHashMap<Integer, UserEntity>();
     {
-        users.put(1, new UserEntity(1, "admin", "admin123", "15888888888"));
+        users.put(1, new UserEntity(1, "admin", "123456", "15888888888"));
         users.put(2, new UserEntity(2, "ry", "admin123", "15666666666"));
     }
 

+ 195 - 0
admin/src/main/resources/mapper/approval/TApprovalMapper.xml

@@ -0,0 +1,195 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.project.approval.mapper.TApprovalMapper">
+    
+    <resultMap type="TApproval" id="TApprovalResult">
+        <result property="id"    column="id"    />
+        <result property="plantCode"    column="plant_code"    />
+        <result property="division"    column="division"    />
+        <result property="effetivedate"    column="effetivedate"    />
+        <result property="itemName"    column="item_name"    />
+        <result property="itemOverview"    column="item_overview"    />
+        <result property="approvalAttibutes"    column="approval_attibutes"    />
+        <result property="approvalname"    column="approvalname"    />
+        <result property="fileno"    column="fileno"    />
+        <result property="responsauth"    column="responsauth"    />
+        <result property="contentFile"    column="content_file"    />
+        <result property="content"    column="content"    />
+        <result property="scope"    column="scope"    />
+        <result property="relatedlaw"    column="relatedlaw"    />
+        <result property="validityBefore"    column="validity_before"    />
+        <result property="validityAfter"    column="validity_after"    />
+        <result property="isPermanent"    column="is_permanent"    />
+        <result property="follow"    column="follow"    />
+        <result property="owner"    column="owner"    />
+        <result property="reviewer"    column="reviewer"    />
+        <result property="reviewdate"    column="reviewdate"    />
+        <result property="isCompliance"    column="is_compliance"    />
+        <result property="nextreviewdate"    column="nextreviewdate"    />
+        <result property="remarks"    column="remarks"    />
+        <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"    />
+    </resultMap>
+
+    <sql id="selectTApprovalVo">
+        select id, plant_code, division, effetivedate, item_name, item_overview, approval_attibutes, approvalname, fileno, responsauth, content_file, content, scope, relatedlaw, validity_before, validity_after, is_permanent, follow, owner, reviewer, reviewdate, is_compliance, nextreviewdate, remarks, del_flag, creater_code, createdate, updater_code, updatedate, dept_id from t_approval
+    </sql>
+
+    <select id="selectTApprovalList" parameterType="TApproval" resultMap="TApprovalResult">
+        <include refid="selectTApprovalVo"/>
+        <where>  
+            <if test="plantCode != null  and plantCode != ''"> and plant_code = #{plantCode}</if>
+            <if test="division != null  and division != ''"> and division = #{division}</if>
+            <if test="effetivedate != null "> and effetivedate = #{effetivedate}</if>
+            <if test="itemName != null  and itemName != ''"> and item_name like concat('%', #{itemName}, '%')</if>
+            <if test="itemOverview != null  and itemOverview != ''"> and item_overview = #{itemOverview}</if>
+            <if test="approvalAttibutes != null  and approvalAttibutes != ''"> and approval_attibutes = #{approvalAttibutes}</if>
+            <if test="approvalname != null  and approvalname != ''"> and approvalname like concat('%', #{approvalname}, '%')</if>
+            <if test="fileno != null  and fileno != ''"> and fileno = #{fileno}</if>
+            <if test="responsauth != null  and responsauth != ''"> and responsauth = #{responsauth}</if>
+            <if test="contentFile != null  and contentFile != ''"> and content_file = #{contentFile}</if>
+            <if test="content != null  and content != ''"> and content = #{content}</if>
+            <if test="scope != null  and scope != ''"> and scope = #{scope}</if>
+            <if test="relatedlaw != null  and relatedlaw != ''"> and relatedlaw = #{relatedlaw}</if>
+            <if test="validityBefore != null "> and validity_before = #{validityBefore}</if>
+            <if test="validityAfter != null "> and validity_after = #{validityAfter}</if>
+            <if test="isPermanent != null  and isPermanent != ''"> and is_permanent = #{isPermanent}</if>
+            <if test="follow != null  and follow != ''"> and follow = #{follow}</if>
+            <if test="owner != null  and owner != ''"> and owner = #{owner}</if>
+            <if test="reviewer != null  and reviewer != ''"> and reviewer = #{reviewer}</if>
+            <if test="reviewdate != null "> and reviewdate = #{reviewdate}</if>
+            <if test="isCompliance != null  and isCompliance != ''"> and is_compliance = #{isCompliance}</if>
+            <if test="nextreviewdate != null "> and nextreviewdate = #{nextreviewdate}</if>
+            <if test="remarks != null  and remarks != ''"> and remarks = #{remarks}</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>
+        </where>
+    </select>
+    
+    <select id="selectTApprovalById" parameterType="Long" resultMap="TApprovalResult">
+        <include refid="selectTApprovalVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertTApproval" parameterType="TApproval" useGeneratedKeys="true" keyProperty="id">
+        insert into t_approval
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="plantCode != null">plant_code,</if>
+            <if test="division != null">division,</if>
+            <if test="effetivedate != null">effetivedate,</if>
+            <if test="itemName != null">item_name,</if>
+            <if test="itemOverview != null">item_overview,</if>
+            <if test="approvalAttibutes != null">approval_attibutes,</if>
+            <if test="approvalname != null and approvalname != ''">approvalname,</if>
+            <if test="fileno != null and fileno != ''">fileno,</if>
+            <if test="responsauth != null">responsauth,</if>
+            <if test="contentFile != null">content_file,</if>
+            <if test="content != null">content,</if>
+            <if test="scope != null">scope,</if>
+            <if test="relatedlaw != null">relatedlaw,</if>
+            <if test="validityBefore != null">validity_before,</if>
+            <if test="validityAfter != null">validity_after,</if>
+            <if test="isPermanent != null">is_permanent,</if>
+            <if test="follow != null">follow,</if>
+            <if test="owner != null">owner,</if>
+            <if test="reviewer != null">reviewer,</if>
+            <if test="reviewdate != null">reviewdate,</if>
+            <if test="isCompliance != null">is_compliance,</if>
+            <if test="nextreviewdate != null">nextreviewdate,</if>
+            <if test="remarks != null">remarks,</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>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="plantCode != null">#{plantCode},</if>
+            <if test="division != null">#{division},</if>
+            <if test="effetivedate != null">#{effetivedate},</if>
+            <if test="itemName != null">#{itemName},</if>
+            <if test="itemOverview != null">#{itemOverview},</if>
+            <if test="approvalAttibutes != null">#{approvalAttibutes},</if>
+            <if test="approvalname != null and approvalname != ''">#{approvalname},</if>
+            <if test="fileno != null and fileno != ''">#{fileno},</if>
+            <if test="responsauth != null">#{responsauth},</if>
+            <if test="contentFile != null">#{contentFile},</if>
+            <if test="content != null">#{content},</if>
+            <if test="scope != null">#{scope},</if>
+            <if test="relatedlaw != null">#{relatedlaw},</if>
+            <if test="validityBefore != null">#{validityBefore},</if>
+            <if test="validityAfter != null">#{validityAfter},</if>
+            <if test="isPermanent != null">#{isPermanent},</if>
+            <if test="follow != null">#{follow},</if>
+            <if test="owner != null">#{owner},</if>
+            <if test="reviewer != null">#{reviewer},</if>
+            <if test="reviewdate != null">#{reviewdate},</if>
+            <if test="isCompliance != null">#{isCompliance},</if>
+            <if test="nextreviewdate != null">#{nextreviewdate},</if>
+            <if test="remarks != null">#{remarks},</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>
+         </trim>
+    </insert>
+
+    <update id="updateTApproval" parameterType="TApproval">
+        update t_approval
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="plantCode != null">plant_code = #{plantCode},</if>
+            <if test="division != null">division = #{division},</if>
+            <if test="effetivedate != null">effetivedate = #{effetivedate},</if>
+            <if test="itemName != null">item_name = #{itemName},</if>
+            <if test="itemOverview != null">item_overview = #{itemOverview},</if>
+            <if test="approvalAttibutes != null">approval_attibutes = #{approvalAttibutes},</if>
+            <if test="approvalname != null and approvalname != ''">approvalname = #{approvalname},</if>
+            <if test="fileno != null and fileno != ''">fileno = #{fileno},</if>
+            <if test="responsauth != null">responsauth = #{responsauth},</if>
+            <if test="contentFile != null">content_file = #{contentFile},</if>
+            <if test="content != null">content = #{content},</if>
+            <if test="scope != null">scope = #{scope},</if>
+            <if test="relatedlaw != null">relatedlaw = #{relatedlaw},</if>
+            <if test="validityBefore != null">validity_before = #{validityBefore},</if>
+            <if test="validityAfter != null">validity_after = #{validityAfter},</if>
+            <if test="isPermanent != null">is_permanent = #{isPermanent},</if>
+            <if test="follow != null">follow = #{follow},</if>
+            <if test="owner != null">owner = #{owner},</if>
+            <if test="reviewer != null">reviewer = #{reviewer},</if>
+            <if test="reviewdate != null">reviewdate = #{reviewdate},</if>
+            <if test="isCompliance != null">is_compliance = #{isCompliance},</if>
+            <if test="nextreviewdate != null">nextreviewdate = #{nextreviewdate},</if>
+            <if test="remarks != null">remarks = #{remarks},</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>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteTApprovalById" parameterType="Long">
+        delete from t_approval where id = #{id}
+    </delete>
+
+    <delete id="deleteTApprovalByIds" parameterType="String">
+        delete from t_approval where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 267 - 0
admin/src/main/resources/mapper/shiftmgr/TShiftLogMapper.xml

@@ -0,0 +1,267 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.project.shiftmgr.mapper.TShiftLogMapper">
+
+    <resultMap type="TShiftLog" id="TShiftLogResult">
+        <result property="id"    column="id"    />
+        <result property="shiftTeam"    column="shift_team"    />
+        <result property="takeOverTime"    column="take_over_time"    />
+        <result property="giveOverTime"    column="give_over_time"    />
+        <result property="tocp"    column="tocp"    />
+        <result property="ehs5sBriefing"    column="ehs_5s_briefing"    />
+        <result property="soa"    column="soa"    />
+        <result property="sh"    column="sh"    />
+        <result property="bdoc"    column="bdoc"    />
+        <result property="thfd"    column="thfd"    />
+        <result property="pthfUnit"    column="pthf_unit"    />
+        <result property="dbpd"    column="dbpd"    />
+        <result property="truss"    column="truss"    />
+        <result property="pthfCus"    column="pthf_cus"    />
+        <result property="bipus"    column="bipus"    />
+        <result property="lpgH2"    column="lpg_h2"    />
+        <result property="q125601"    column="q125601"    />
+        <result property="q125602"    column="q125602"    />
+        <result property="q312018Q1"    column="q312018_q1"    />
+        <result property="q312018Q2"    column="q312018_q2"    />
+        <result property="q312018Q3"    column="q312018_q3"    />
+        <result property="q312018Q4"    column="q312018_q4"    />
+        <result property="q312000"    column="q312000"    />
+        <result property="q312001"    column="q312001"    />
+        <result property="epdOther"    column="epd_other"    />
+        <result property="ehsOther"    column="ehs_other"    />
+        <result property="qar"    column="qar"    />
+        <result property="maEi"    column="ma_ei"    />
+        <result property="maMechanical"    column="ma_mechanical"    />
+        <result property="thirdPartyCommunication"    column="third_party_communication"    />
+        <result property="fampEi"    column="famp_ei"    />
+        <result property="fampMechanical"    column="famp_mechanical"    />
+        <result property="faop"    column="faop"    />
+        <result property="comments"    column="comments"    />
+        <result property="hoShiftSup"    column="ho_shift_sup"    />
+        <result property="toShiftSup"    column="to_shift_sup"    />
+        <result property="delFlag"    column="del_flag"    />
+        <result property="status"    column="status"    />
+        <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"    />
+    </resultMap>
+
+    <sql id="selectTShiftLogVo">
+        select id, shift_team, take_over_time,give_over_time, tocp, ehs_5s_briefing, soa, sh, bdoc, thfd, pthf_unit, dbpd, truss, pthf_cus, bipus, lpg_h2, q125601, q125602, q312018_q1, q312018_q2, q312018_q3, q312018_q4, q312000, q312001, epd_other, ehs_other, qar, ma_ei, ma_mechanical, third_party_communication, famp_ei, famp_mechanical, faop, comments, ho_shift_sup, to_shift_sup, del_flag, status, creater_code, createdate, updater_code, updatedate, dept_id, remarks from t_shift_log
+    </sql>
+
+    <select id="selectTShiftLogList" parameterType="TShiftLog" resultMap="TShiftLogResult">
+        <include refid="selectTShiftLogVo"/>
+        <where>
+            <if test="shiftTeam != null  and shiftTeam != ''"> and shift_team like concat('%',#{shiftTeam},'%')</if>
+            <if test="takeOverTime != null "> and take_over_time = #{takeOverTime}</if>
+            <if test="giveOverTime != null "> and give_over_time = #{giveOverTime}</if>
+            <if test="tocp != null  and tocp != ''"> and tocp = #{tocp}</if>
+            <if test="ehs5sBriefing != null  and ehs5sBriefing != ''"> and ehs_5s_briefing = #{ehs5sBriefing}</if>
+            <if test="soa != null  and soa != ''"> and soa = #{soa}</if>
+            <if test="sh != null  and sh != ''"> and sh = #{sh}</if>
+            <if test="bdoc != null  and bdoc != ''"> and bdoc = #{bdoc}</if>
+            <if test="thfd != null  and thfd != ''"> and thfd = #{thfd}</if>
+            <if test="pthfUnit != null  and pthfUnit != ''"> and pthf_unit = #{pthfUnit}</if>
+            <if test="dbpd != null  and dbpd != ''"> and dbpd = #{dbpd}</if>
+            <if test="truss != null  and truss != ''"> and truss = #{truss}</if>
+            <if test="pthfCus != null  and pthfCus != ''"> and pthf_cus = #{pthfCus}</if>
+            <if test="bipus != null  and bipus != ''"> and bipus = #{bipus}</if>
+            <if test="lpgH2 != null  and lpgH2 != ''"> and lpg_h2 = #{lpgH2}</if>
+            <if test="q125601 != null  and q125601 != ''"> and q125601 = #{q125601}</if>
+            <if test="q125602 != null  and q125602 != ''"> and q125602 = #{q125602}</if>
+            <if test="q312018Q1 != null  and q312018Q1 != ''"> and q312018_q1 = #{q312018Q1}</if>
+            <if test="q312018Q2 != null  and q312018Q2 != ''"> and q312018_q2 = #{q312018Q2}</if>
+            <if test="q312018Q3 != null  and q312018Q3 != ''"> and q312018_q3 = #{q312018Q3}</if>
+            <if test="q312018Q4 != null  and q312018Q4 != ''"> and q312018_q4 = #{q312018Q4}</if>
+            <if test="q312000 != null  and q312000 != ''"> and q312000 = #{q312000}</if>
+            <if test="q312001 != null  and q312001 != ''"> and q312001 = #{q312001}</if>
+            <if test="epdOther != null  and epdOther != ''"> and epd_other = #{epdOther}</if>
+            <if test="ehsOther != null  and ehsOther != ''"> and ehs_other = #{ehsOther}</if>
+            <if test="qar != null  and qar != ''"> and qar = #{qar}</if>
+            <if test="maEi != null  and maEi != ''"> and ma_ei = #{maEi}</if>
+            <if test="maMechanical != null  and maMechanical != ''"> and ma_mechanical = #{maMechanical}</if>
+            <if test="thirdPartyCommunication != null  and thirdPartyCommunication != ''"> and third_party_communication = #{thirdPartyCommunication}</if>
+            <if test="fampEi != null  and fampEi != ''"> and famp_ei = #{fampEi}</if>
+            <if test="fampMechanical != null  and fampMechanical != ''"> and famp_mechanical = #{fampMechanical}</if>
+            <if test="faop != null  and faop != ''"> and faop = #{faop}</if>
+            <if test="comments != null  and comments != ''"> and comments = #{comments}</if>
+            <if test="hoShiftSup != null  and hoShiftSup != ''"> and ho_shift_sup = #{hoShiftSup}</if>
+            <if test="toShiftSup != null  and toShiftSup != ''"> and to_shift_sup = #{toShiftSup}</if>
+            <if test="status != null "> 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>
+        and del_flag = 0
+        </where>
+        order by createdate desc,take_over_time desc
+    </select>
+
+    <select id="selectTShiftLogById" parameterType="Long" resultMap="TShiftLogResult">
+        <include refid="selectTShiftLogVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertTShiftLog" parameterType="TShiftLog" useGeneratedKeys="true" keyProperty="id">
+        insert into t_shift_log
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="shiftTeam != null and shiftTeam != ''">shift_team,</if>
+            <if test="takeOverTime != null">take_over_time,</if>
+            <if test="giveOverTime != null">give_over_time,</if>
+            <if test="tocp != null and tocp != ''">tocp,</if>
+            <if test="ehs5sBriefing != null and ehs5sBriefing != ''">ehs_5s_briefing,</if>
+            <if test="soa != null and soa != ''">soa,</if>
+            <if test="sh != null and sh != ''">sh,</if>
+            <if test="bdoc != null and bdoc != ''">bdoc,</if>
+            <if test="thfd != null and thfd != ''">thfd,</if>
+            <if test="pthfUnit != null and pthfUnit != ''">pthf_unit,</if>
+            <if test="dbpd != null and dbpd != ''">dbpd,</if>
+            <if test="truss != null and truss != ''">truss,</if>
+            <if test="pthfCus != null and pthfCus != ''">pthf_cus,</if>
+            <if test="bipus != null and bipus != ''">bipus,</if>
+            <if test="lpgH2 != null and lpgH2 != ''">lpg_h2,</if>
+            <if test="q125601 != null and q125601 != ''">q125601,</if>
+            <if test="q125602 != null and q125602 != ''">q125602,</if>
+            <if test="q312018Q1 != null and q312018Q1 != ''">q312018_q1,</if>
+            <if test="q312018Q2 != null and q312018Q2 != ''">q312018_q2,</if>
+            <if test="q312018Q3 != null and q312018Q3 != ''">q312018_q3,</if>
+            <if test="q312018Q4 != null and q312018Q4 != ''">q312018_q4,</if>
+            <if test="q312000 != null and q312000 != ''">q312000,</if>
+            <if test="q312001 != null and q312001 != ''">q312001,</if>
+            <if test="epdOther != null and epdOther != ''">epd_other,</if>
+            <if test="ehsOther != null and ehsOther != ''">ehs_other,</if>
+            <if test="qar != null and qar != ''">qar,</if>
+            <if test="maEi != null and maEi != ''">ma_ei,</if>
+            <if test="maMechanical != null and maMechanical != ''">ma_mechanical,</if>
+            <if test="thirdPartyCommunication != null and thirdPartyCommunication != ''">third_party_communication,</if>
+            <if test="fampEi != null and fampEi != ''">famp_ei,</if>
+            <if test="fampMechanical != null and fampMechanical != ''">famp_mechanical,</if>
+            <if test="faop != null and faop != ''">faop,</if>
+            <if test="comments != null and comments != ''">comments,</if>
+            <if test="hoShiftSup != null and hoShiftSup != ''">ho_shift_sup,</if>
+            <if test="toShiftSup != null and toShiftSup != ''">to_shift_sup,</if>
+            <if test="delFlag != null">del_flag,</if>
+            <if test="status != null">status,</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>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="shiftTeam != null and shiftTeam != ''">#{shiftTeam},</if>
+            <if test="takeOverTime != null">#{takeOverTime},</if>
+            <if test="giveOverTime != null">#{giveOverTime},</if>
+            <if test="tocp != null and tocp != ''">#{tocp},</if>
+            <if test="ehs5sBriefing != null and ehs5sBriefing != ''">#{ehs5sBriefing},</if>
+            <if test="soa != null and soa != ''">#{soa},</if>
+            <if test="sh != null and sh != ''">#{sh},</if>
+            <if test="bdoc != null and bdoc != ''">#{bdoc},</if>
+            <if test="thfd != null and thfd != ''">#{thfd},</if>
+            <if test="pthfUnit != null and pthfUnit != ''">#{pthfUnit},</if>
+            <if test="dbpd != null and dbpd != ''">#{dbpd},</if>
+            <if test="truss != null and truss != ''">#{truss},</if>
+            <if test="pthfCus != null and pthfCus != ''">#{pthfCus},</if>
+            <if test="bipus != null and bipus != ''">#{bipus},</if>
+            <if test="lpgH2 != null and lpgH2 != ''">#{lpgH2},</if>
+            <if test="q125601 != null and q125601 != ''">#{q125601},</if>
+            <if test="q125602 != null and q125602 != ''">#{q125602},</if>
+            <if test="q312018Q1 != null and q312018Q1 != ''">#{q312018Q1},</if>
+            <if test="q312018Q2 != null and q312018Q2 != ''">#{q312018Q2},</if>
+            <if test="q312018Q3 != null and q312018Q3 != ''">#{q312018Q3},</if>
+            <if test="q312018Q4 != null and q312018Q4 != ''">#{q312018Q4},</if>
+            <if test="q312000 != null and q312000 != ''">#{q312000},</if>
+            <if test="q312001 != null and q312001 != ''">#{q312001},</if>
+            <if test="epdOther != null and epdOther != ''">#{epdOther},</if>
+            <if test="ehsOther != null and ehsOther != ''">#{ehsOther},</if>
+            <if test="qar != null and qar != ''">#{qar},</if>
+            <if test="maEi != null and maEi != ''">#{maEi},</if>
+            <if test="maMechanical != null and maMechanical != ''">#{maMechanical},</if>
+            <if test="thirdPartyCommunication != null and thirdPartyCommunication != ''">#{thirdPartyCommunication},</if>
+            <if test="fampEi != null and fampEi != ''">#{fampEi},</if>
+            <if test="fampMechanical != null and fampMechanical != ''">#{fampMechanical},</if>
+            <if test="faop != null and faop != ''">#{faop},</if>
+            <if test="comments != null and comments != ''">#{comments},</if>
+            <if test="hoShiftSup != null and hoShiftSup != ''">#{hoShiftSup},</if>
+            <if test="toShiftSup != null and toShiftSup != ''">#{toShiftSup},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+            <if test="status != null">#{status},</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>
+         </trim>
+    </insert>
+
+    <update id="updateTShiftLog" parameterType="TShiftLog">
+        update t_shift_log
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="shiftTeam != null and shiftTeam != ''">shift_team = #{shiftTeam},</if>
+            <if test="takeOverTime != null">take_over_time = #{takeOverTime},</if>
+            <if test="giveOverTime != null">give_over_time = #{giveOverTime},</if>
+            <if test="tocp != null and tocp != ''">tocp = #{tocp},</if>
+            <if test="ehs5sBriefing != null and ehs5sBriefing != ''">ehs_5s_briefing = #{ehs5sBriefing},</if>
+            <if test="soa != null and soa != ''">soa = #{soa},</if>
+            <if test="sh != null and sh != ''">sh = #{sh},</if>
+            <if test="bdoc != null and bdoc != ''">bdoc = #{bdoc},</if>
+            <if test="thfd != null and thfd != ''">thfd = #{thfd},</if>
+            <if test="pthfUnit != null and pthfUnit != ''">pthf_unit = #{pthfUnit},</if>
+            <if test="dbpd != null and dbpd != ''">dbpd = #{dbpd},</if>
+            <if test="truss != null and truss != ''">truss = #{truss},</if>
+            <if test="pthfCus != null and pthfCus != ''">pthf_cus = #{pthfCus},</if>
+            <if test="bipus != null and bipus != ''">bipus = #{bipus},</if>
+            <if test="lpgH2 != null and lpgH2 != ''">lpg_h2 = #{lpgH2},</if>
+            <if test="q125601 != null and q125601 != ''">q125601 = #{q125601},</if>
+            <if test="q125602 != null and q125602 != ''">q125602 = #{q125602},</if>
+            <if test="q312018Q1 != null and q312018Q1 != ''">q312018_q1 = #{q312018Q1},</if>
+            <if test="q312018Q2 != null and q312018Q2 != ''">q312018_q2 = #{q312018Q2},</if>
+            <if test="q312018Q3 != null and q312018Q3 != ''">q312018_q3 = #{q312018Q3},</if>
+            <if test="q312018Q4 != null and q312018Q4 != ''">q312018_q4 = #{q312018Q4},</if>
+            <if test="q312000 != null and q312000 != ''">q312000 = #{q312000},</if>
+            <if test="q312001 != null and q312001 != ''">q312001 = #{q312001},</if>
+            <if test="epdOther != null and epdOther != ''">epd_other = #{epdOther},</if>
+            <if test="ehsOther != null and ehsOther != ''">ehs_other = #{ehsOther},</if>
+            <if test="qar != null and qar != ''">qar = #{qar},</if>
+            <if test="maEi != null and maEi != ''">ma_ei = #{maEi},</if>
+            <if test="maMechanical != null and maMechanical != ''">ma_mechanical = #{maMechanical},</if>
+            <if test="thirdPartyCommunication != null and thirdPartyCommunication != ''">third_party_communication = #{thirdPartyCommunication},</if>
+            <if test="fampEi != null and fampEi != ''">famp_ei = #{fampEi},</if>
+            <if test="fampMechanical != null and fampMechanical != ''">famp_mechanical = #{fampMechanical},</if>
+            <if test="faop != null and faop != ''">faop = #{faop},</if>
+            <if test="comments != null and comments != ''">comments = #{comments},</if>
+            <if test="hoShiftSup != null and hoShiftSup != ''">ho_shift_sup = #{hoShiftSup},</if>
+            <if test="toShiftSup != null and toShiftSup != ''">to_shift_sup = #{toShiftSup},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+            <if test="status != null">status = #{status},</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>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteTShiftLogById" parameterType="Long">
+        update t_shift_log set del_flag=1 where id = #{id}
+    </delete>
+
+    <delete id="deleteTShiftLogByIds" parameterType="String">
+        update t_shift_log set del_flag=1 where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 8 - 0
common/src/main/java/com/ruoyi/common/config/RuoYiConfig.java

@@ -119,4 +119,12 @@ public class RuoYiConfig
     {
         return getProfile() + "/upload";
     }
+
+    /**
+     * 获取上传路径
+     */
+    public static String getFilePath(String dir)
+    {
+        return getProfile() + dir;
+    }
 }

+ 12 - 0
common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java

@@ -33,6 +33,10 @@ public class SysUser extends BaseEntity
     @Excel(name = "登录名称")
     private String userName;
 
+    /** 员工号 */
+    @Excel(name = "员工号")
+    private String staffId;
+
     /** 用户昵称 */
     @Excel(name = "用户名称")
     private String nickName;
@@ -154,6 +158,14 @@ public class SysUser extends BaseEntity
         this.userName = userName;
     }
 
+    public String getStaffId() {
+        return staffId;
+    }
+
+    public void setStaffId(String staffId) {
+        this.staffId = staffId;
+    }
+
     @Email(message = "邮箱格式不正确")
     @Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符")
     public String getEmail()

+ 309 - 0
common/src/main/java/com/ruoyi/common/utils/file/ExcelUtils.java

@@ -0,0 +1,309 @@
+package com.ruoyi.common.utils.file;
+
+
+import org.apache.poi.hssf.usermodel.HSSFDataFormat;
+import org.apache.poi.hssf.usermodel.HSSFDateUtil;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.math.BigDecimal;
+import java.text.DecimalFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Created by Administrator on 2018/7/26 0026.
+ */
+public class ExcelUtils {
+
+    public static Workbook getWorkBook(MultipartFile file) {
+        //获得文件名
+        String fileName = file.getOriginalFilename();
+        //创建Workbook工作薄对象,表示整个excel
+        Workbook workbook = null;
+        try {
+            //获取excel文件的io流
+            InputStream is = file.getInputStream();
+            //根据文件后缀名不同(xls和xlsx)获得不同的Workbook实现类对象
+            if (fileName.endsWith("xls")) {
+                //2003
+                workbook = new HSSFWorkbook(is);
+            } else if (fileName.endsWith("xlsx")) {
+                //2007 及2007以上
+                workbook = new XSSFWorkbook(is);
+            }
+        } catch (IOException e) {
+//            log.error(e.getMessage());
+        }
+        return workbook;
+    }
+
+    public static Workbook getWorkBook(File file) {
+        //获得文件名
+        String fileName = file.getName();
+        //创建Workbook工作薄对象,表示整个excel
+        Workbook workbook = null;
+        try {
+            //获取excel文件的io流
+            InputStream is =new FileInputStream(file);
+            //根据文件后缀名不同(xls和xlsx)获得不同的Workbook实现类对象
+            if (fileName.endsWith("xls")) {
+                //2003
+                workbook = new HSSFWorkbook(is);
+            } else if (fileName.endsWith("xlsx")) {
+                //2007 及2007以上
+                workbook = new XSSFWorkbook(is);
+            }
+        } catch (IOException e) {
+//            log.error(e.getMessage());
+        }
+        return workbook;
+    }
+
+    public static String getCellValue(Cell cell) {
+        String cellValue = "";
+        if (cell == null) {
+            return cellValue;
+        }
+        System.out.println("Excel格式:"+ cell.getCellType().name());
+
+        switch (cell.getCellType().name()) {
+            case "STRING":
+                cellValue = cell.getRichStringCellValue().getString();
+                break;
+            case "NUMERIC":
+                System.out.println("Excel数据样式:"+ cell.getCellStyle().getDataFormatString());
+                if("General".equals(cell.getCellStyle().getDataFormatString())){
+                    cellValue = new BigDecimal(cell.getNumericCellValue()).toPlainString();
+                }else if("m/d/yyyy;@".equals(cell.getCellStyle().getDataFormatString())){
+                    cellValue =  new SimpleDateFormat("yyyy-MM-dd").format(cell.getDateCellValue());
+                }else if("@".equals(cell.getCellStyle().getDataFormatString())){
+                    cellValue = cell.getNumericCellValue() + "";
+                }else if(cell.getCellStyle().getDataFormatString().indexOf("0_") > -1){
+                    //数字非日期
+                    System.out.println("Excel值:"+ cell.getNumericCellValue());
+                    cellValue = cell.getNumericCellValue() + "";
+                }else{
+                    try {
+                        cellValue =  new SimpleDateFormat("yyyy-MM-dd").format(cell.getDateCellValue());
+                    }catch (Exception e){
+                        cellValue = cell.getNumericCellValue() + "";
+                    }
+                }
+                break;
+            case "BLANK":
+                cellValue = "";
+                break;
+            default:
+                cellValue = cell.toString();
+                break;
+        }
+        //判断数据的类型
+//        switch (cell.getCellType()) {
+//            case Cell.CELL_TYPE_NUMERIC: //数字
+//                cellValue = stringDateProcess(cell);
+//                break;
+//            case Cell.CELL_TYPE_STRING: //字符串
+//                cellValue = String.valueOf(cell.getStringCellValue());
+//                break;
+//            case Cell.CELL_TYPE_BOOLEAN: //Boolean
+//                cellValue = String.valueOf(cell.getBooleanCellValue());
+//                break;
+//            case Cell.CELL_TYPE_FORMULA: //公式
+//                cellValue = String.valueOf(cell.getCellFormula());
+//                break;
+//            case Cell.CELL_TYPE_BLANK: //空值
+//                cellValue = "";
+//                break;
+//            case Cell.CELL_TYPE_ERROR: //故障
+//                cellValue = "非法字符";
+//                break;
+//            default:
+//                cellValue = "未知类型";
+//                break;
+//        }
+//        cellValue = String.valueOf(cell.getStringCellValue());
+        return cellValue;
+    }
+
+    /**
+     * 时间格式处理
+     *
+     * @return
+     * @author Liu Xin Nan
+     * @data 2017年11月27日
+     */
+    public static String stringDateProcess(Cell cell) {
+        String result = new String();
+        if (HSSFDateUtil.isCellDateFormatted(cell)) {// 处理日期格式、时间格式
+            SimpleDateFormat sdf = null;
+            if (cell.getCellStyle().getDataFormat() == HSSFDataFormat.getBuiltinFormat("h:mm")) {
+                sdf = new SimpleDateFormat("HH:mm");
+            } else {// 日期
+                sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
+            }
+            Date date = cell.getDateCellValue();
+            result = sdf.format(date);
+        } else if (cell.getCellStyle().getDataFormat() == 58) {
+            // 处理自定义日期格式:m月d日(通过判断单元格的格式id解决,id的值是58)
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
+            double value = cell.getNumericCellValue();
+            Date date = DateUtil
+                    .getJavaDate(value);
+            result = sdf.format(date);
+        } else {
+            double value = cell.getNumericCellValue();
+            CellStyle style = cell.getCellStyle();
+            DecimalFormat format = new DecimalFormat();
+            String temp = style.getDataFormatString();
+            // 单元格设置成常规
+            if (temp.equals("General")) {
+                format.applyPattern("#");
+            }
+            result = format.format(value);
+        }
+
+        return result;
+    }
+
+    /**
+     * 合并单元格处理,获取合并行
+     *
+     * @param sheet
+     * @return List<CellRangeAddress>
+     */
+    public static List<CellRangeAddress> getCombineCell(Sheet sheet) {
+        List<CellRangeAddress> list = new ArrayList<CellRangeAddress>();
+        //获得一个 sheet 中合并单元格的数量
+        int sheetmergerCount = sheet.getNumMergedRegions();
+        //遍历所有的合并单元格
+        for (int i = 0; i < sheetmergerCount; i++) {
+            //获得合并单元格保存进list中
+            CellRangeAddress ca = sheet.getMergedRegion(i);
+            list.add(ca);
+        }
+        return list;
+    }
+
+    public static int getRowNum(List<CellRangeAddress> listCombineCell, Cell cell, Sheet sheet) {
+        int xr = 0;
+        int firstC = 0;
+        int lastC = 0;
+        int firstR = 0;
+        int lastR = 0;
+        for (CellRangeAddress ca : listCombineCell) {
+            //获得合并单元格的起始行, 结束行, 起始列, 结束列
+            firstC = ca.getFirstColumn();
+            lastC = ca.getLastColumn();
+            firstR = ca.getFirstRow();
+            lastR = ca.getLastRow();
+            if (cell.getRowIndex() >= firstR && cell.getRowIndex() <= lastR) {
+                if (cell.getColumnIndex() >= firstC && cell.getColumnIndex() <= lastC) {
+                    xr = lastR;
+                }
+            }
+        }
+        return xr;
+
+    }
+
+    /**
+     * 判断单元格是否为合并单元格,是的话则将单元格的值返回
+     *
+     * @param listCombineCell 存放合并单元格的list
+     * @param cell            需要判断的单元格
+     * @param sheet           sheet
+     * @return
+     */
+    public static String isCombineCell(List<CellRangeAddress> listCombineCell, Cell cell, Sheet sheet)
+            throws Exception {
+        int firstC = 0;
+        int lastC = 0;
+        int firstR = 0;
+        int lastR = 0;
+        String cellValue = null;
+        for (CellRangeAddress ca : listCombineCell) {
+            //获得合并单元格的起始行, 结束行, 起始列, 结束列
+            firstC = ca.getFirstColumn();
+            lastC = ca.getLastColumn();
+            firstR = ca.getFirstRow();
+            lastR = ca.getLastRow();
+            if (cell.getRowIndex() >= firstR && cell.getRowIndex() <= lastR) {
+                if (cell.getColumnIndex() >= firstC && cell.getColumnIndex() <= lastC) {
+                    Row fRow = sheet.getRow(firstR);
+                    Cell fCell = fRow.getCell(firstC);
+                    cellValue = getCellValue(fCell);
+                    break;
+                }
+            } else {
+                cellValue = "";
+            }
+        }
+        return cellValue;
+    }
+
+    /**
+     * 获取合并单元格的值
+     *
+     * @param sheet
+     * @param row
+     * @param column
+     * @return
+     */
+    public static String getMergedRegionValue(Sheet sheet, int row, int column) {
+        int sheetMergeCount = sheet.getNumMergedRegions();
+
+        for (int i = 0; i < sheetMergeCount; i++) {
+            CellRangeAddress ca = sheet.getMergedRegion(i);
+            int firstColumn = ca.getFirstColumn();
+            int lastColumn = ca.getLastColumn();
+            int firstRow = ca.getFirstRow();
+            int lastRow = ca.getLastRow();
+
+            if (row >= firstRow && row <= lastRow) {
+                if (column >= firstColumn && column <= lastColumn) {
+                    Row fRow = sheet.getRow(firstRow);
+                    Cell fCell = fRow.getCell(firstColumn);
+                    return getCellValue(fCell);
+                }
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * 判断指定的单元格是否是合并单元格
+     *
+     * @param sheet
+     * @param row    行下标
+     * @param column 列下标
+     * @return
+     */
+    public static boolean isMergedRegion(Sheet sheet, int row, int column) {
+        int sheetMergeCount = sheet.getNumMergedRegions();
+        for (int i = 0; i < sheetMergeCount; i++) {
+            CellRangeAddress range = sheet.getMergedRegion(i);
+            int firstColumn = range.getFirstColumn();
+            int lastColumn = range.getLastColumn();
+            int firstRow = range.getFirstRow();
+            int lastRow = range.getLastRow();
+            if (row >= firstRow && row <= lastRow) {
+                if (column >= firstColumn && column <= lastColumn) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+}

+ 3 - 0
generator/src/main/java/com/ruoyi/generator/domain/GenTable.java

@@ -3,6 +3,8 @@ package com.ruoyi.generator.domain;
 import java.util.List;
 import javax.validation.Valid;
 import javax.validation.constraints.NotBlank;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import org.apache.commons.lang3.ArrayUtils;
 import com.ruoyi.common.constant.GenConstants;
 import com.ruoyi.common.core.domain.BaseEntity;
@@ -13,6 +15,7 @@ import com.ruoyi.common.utils.StringUtils;
  * 
  * @author ruoyi
  */
+@JsonIgnoreProperties(ignoreUnknown = true)
 public class GenTable extends BaseEntity
 {
     private static final long serialVersionUID = 1L;

+ 3 - 0
generator/src/main/java/com/ruoyi/generator/domain/GenTableColumn.java

@@ -1,6 +1,8 @@
 package com.ruoyi.generator.domain;
 
 import javax.validation.constraints.NotBlank;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.ruoyi.common.core.domain.BaseEntity;
 import com.ruoyi.common.utils.StringUtils;
 
@@ -9,6 +11,7 @@ import com.ruoyi.common.utils.StringUtils;
  * 
  * @author ruoyi
  */
+@JsonIgnoreProperties(ignoreUnknown = true)
 public class GenTableColumn extends BaseEntity
 {
     private static final long serialVersionUID = 1L;

+ 2 - 0
system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java

@@ -124,4 +124,6 @@ public interface SysUserMapper
      * @return 结果
      */
     public SysUser checkEmailUnique(String email);
+
+    List<SysUser> selectUserListByPost(String postCode);
 }

+ 2 - 0
system/src/main/java/com/ruoyi/system/service/ISysUserService.java

@@ -203,4 +203,6 @@ public interface ISysUserService
      * @return 结果
      */
     public String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName);
+
+    List<SysUser> selectUserListByPost(String postCode);
 }

+ 5 - 0
system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java

@@ -541,4 +541,9 @@ public class SysUserServiceImpl implements ISysUserService
         }
         return successMsg.toString();
     }
+
+    @Override
+    public List<SysUser> selectUserListByPost(String postCode) {
+        return userMapper.selectUserListByPost(postCode);
+    }
 }

+ 21 - 3
system/src/main/resources/mapper/system/SysUserMapper.xml

@@ -6,6 +6,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
     <resultMap type="SysUser" id="SysUserResult">
         <id     property="userId"       column="user_id"      />
+        <id     property="staffId"       column="staff_id"      />
         <result property="deptId"       column="dept_id"      />
         <result property="userName"     column="user_name"    />
         <result property="nickName"     column="nick_name"    />
@@ -47,7 +48,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </resultMap>
 	
 	<sql id="selectUserVo">
-        select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, 
+        select u.user_id, u.dept_id, u.user_name, u.nick_name,u.staff_id, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,
         d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status,
         r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status
         from sys_user u
@@ -57,7 +58,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </sql>
     
     <select id="selectUserList" parameterType="SysUser" resultMap="SysUserResult">
-		select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader from sys_user u
+		select u.user_id, u.dept_id, u.nick_name, u.user_name,u.staff_id, u.email, u.avatar, u.phonenumber, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader from sys_user u
 		left join sys_dept d on u.dept_id = d.dept_id
 		where u.del_flag = '0'
 		<if test="userId != null and userId != 0">
@@ -84,9 +85,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		<!-- 数据范围过滤 -->
 		${params.dataScope}
 	</select>
+
+	<select id="selectUserListByPost" parameterType="String" resultMap="SysUserResult">
+		select u.user_id,u.staffid,u.email, u.dept_id, u.user_name, concat_ws('__',u.nick_name,d.dept_name) as nick_name
+		from sys_user u
+		left join sys_dept d on u.dept_id = d.dept_id
+		left join sys_user_role ur on u.user_id = ur.user_id
+		left join sys_role r on r.role_id = ur.role_id
+		LEFT JOIN SYS_USER_POST sp on u.USER_ID = sp.USER_ID
+		LEFT JOIN SYS_POST p on p.POST_ID = sp.POST_ID
+		where u.del_flag = '0' and u.staffid is not null
+		<if test="postCode != null and postCode != ''">
+			and p.POST_CODE = #{postCode}
+		</if>
+	</select>
 	
 	<select id="selectAllocatedList" parameterType="SysUser" resultMap="SysUserResult">
-	    select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time
+	    select distinct u.user_id, u.dept_id, u.user_name, u.nick_name,u.staff_id, u.email, u.phonenumber, u.status, u.create_time
 	    from sys_user u
 			 left join sys_dept d on u.dept_id = d.dept_id
 			 left join sys_user_role ur on u.user_id = ur.user_id
@@ -147,6 +162,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="userId != null and userId != 0">user_id,</if>
  			<if test="deptId != null and deptId != 0">dept_id,</if>
  			<if test="userName != null and userName != ''">user_name,</if>
+ 			<if test="staffId != null and staffId != ''">staff_id,</if>
  			<if test="nickName != null and nickName != ''">nick_name,</if>
  			<if test="email != null and email != ''">email,</if>
  			<if test="avatar != null and avatar != ''">avatar,</if>
@@ -161,6 +177,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="userId != null and userId != ''">#{userId},</if>
  			<if test="deptId != null and deptId != ''">#{deptId},</if>
  			<if test="userName != null and userName != ''">#{userName},</if>
+ 			<if test="staffId != null and staffId != ''">#{staffId},</if>
  			<if test="nickName != null and nickName != ''">#{nickName},</if>
  			<if test="email != null and email != ''">#{email},</if>
  			<if test="avatar != null and avatar != ''">#{avatar},</if>
@@ -180,6 +197,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="deptId != null and deptId != 0">dept_id = #{deptId},</if>
  			<if test="userName != null and userName != ''">user_name = #{userName},</if>
  			<if test="nickName != null and nickName != ''">nick_name = #{nickName},</if>
+ 			<if test="staffId != null and staffId != ''">staff_id = #{staffId},</if>
  			<if test="email != null ">email = #{email},</if>
  			<if test="phonenumber != null ">phonenumber = #{phonenumber},</if>
  			<if test="sex != null and sex != ''">sex = #{sex},</if>

+ 54 - 0
ui/src/api/approval/approval.js

@@ -0,0 +1,54 @@
+import request from '@/utils/request'
+
+// 查询批文清单列表
+export function listApproval(query) {
+  return request({
+    url: '/ehs/approval/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询批文清单详细
+export function getApproval(id) {
+  return request({
+    url: '/ehs/approval/' + id,
+    method: 'get'
+  })
+}
+
+// 新增批文清单
+export function addApproval(data) {
+  return request({
+    url: '/ehs/approval',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改批文清单
+export function updateApproval(data) {
+  return request({
+    url: '/ehs/approval',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除批文清单
+export function delApproval(id) {
+  return request({
+    url: '/ehs/approval/' + id,
+    method: 'delete'
+  })
+}
+
+
+// 导出批文清单
+export function exportApproval(query) {
+  return request({
+    url: '/ehs/approval/export',
+    method: 'get',
+    params: query
+  })
+}

BIN
ui/src/assets/images/login-background.jpg


BIN
ui/src/assets/images/pay.png


+ 1 - 1
ui/src/assets/styles/variables.scss

@@ -36,7 +36,7 @@ $base-sub-menu-background:#000c17;
 $base-sub-menu-hover:#001528;
 */
 
-$base-sidebar-width: 200px;
+$base-sidebar-width: 260px;
 
 // the :export directive is the magic sauce for webpack
 // https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass

+ 1 - 1
ui/src/settings.js

@@ -2,7 +2,7 @@ module.exports = {
   /**
    * 侧边栏主题 深色主题theme-dark,浅色主题theme-light
    */
-  sideTheme: 'theme-dark',
+  sideTheme: 'theme-light',
 
   /**
    * 是否系统布局配置

+ 11 - 13
ui/src/views/onlyoffice/index.vue → ui/src/views/approval/approval/index.vue

@@ -62,7 +62,7 @@
             size="mini"
             type="info"
             @click="handleImport"
-        >{{ $t('导入') }}
+        >导入
         </el-button>
       </el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
@@ -363,34 +363,32 @@
       >
         <i class="el-icon-upload"></i>
         <div class="el-upload__text">
-          {{ $t('将文件拖到此处,或') }}
-          <em>{{ $t('点击上传') }}</em>
+          将文件拖到此处,或
+          <em>点击上传</em>
         </div>
         <div slot="tip" class="el-upload__tip">
-          <!--                  <el-checkbox v-model="upload.updateSupport" />{{ $t('是否更新已经存在的用户数据') }}-->
-          <el-link style="font-size:12px" type="info" @click="importTemplate">{{ $t('下载模板') }}</el-link>
+          <!--                  <el-checkbox v-model="upload.updateSupport" />是否更新已经存在的用户数据-->
+          <el-link style="font-size:12px" type="info" @click="importTemplate">下载模板</el-link>
         </div>
         <form ref="downloadFileForm" :action="upload.downloadAction" target="FORMSUBMIT">
           <input :value="upload.type" hidden name="type"/>
         </form>
-        <div slot="tip" class="el-upload__tip" style="color:red">{{ $t('提示:仅允许导入“xls”或“xlsx”格式文件!') }}</div>
+        <div slot="tip" class="el-upload__tip" style="color:red">提示:仅允许导入“xls”或“xlsx”格式文件!</div>
       </el-upload>
       <div slot="footer" class="dialog-footer">
-        <a v-if="waitSubmit" style="margin-right: 300px">{{ $t('正在导入...') }}</a>
+        <a v-if="waitSubmit" style="margin-right: 300px">正在导入...</a>
         <el-button v-loading.fullscreen.lock="fullscreenLoading" type="primary"
-                   @click="submitFileForm">{{ $t('确 定') }}
+                   @click="submitFileForm">确 定
         </el-button>
-        <el-button @click="upload.open = false">{{ $t('取 消') }}</el-button>
+        <el-button @click="upload.open = false">取 消</el-button>
       </div>
     </el-dialog>
   </div>
 </template>
 
 <script>
-import {addApproval, delApproval, getApproval, listApproval, updateApproval} from "@/api/ehs/approval";
-import {getToken} from "../../../utils/auth";
-import {exportApproval} from "../../../api/ehs/approval";
-import {delFile, listFile} from "../../../api/file/file";
+import {addApproval, delApproval, getApproval, listApproval, updateApproval,exportApproval} from "@/api/approval/approval";
+import {getToken} from "@/utils/auth";
 
 export default {
   name: "Approval",

+ 0 - 1067
ui/src/views/index_v2.vue

@@ -1,1067 +0,0 @@
-<template>
-  <div class="app-container home">
-    <el-row :gutter="20">
-      <el-col :sm="24" :lg="24">
-        <blockquote class="text-warning" style="font-size: 14px">
-          领取阿里云通用云产品1888优惠券
-          <br />
-          <el-link
-            href="https://www.aliyun.com/minisite/goods?userCode=brki8iof"
-            type="primary"
-            target="_blank"
-            >https://www.aliyun.com/minisite/goods?userCode=brki8iof</el-link
-          >
-          <br />
-          领取腾讯云通用云产品2860优惠券
-          <br />
-          <el-link
-            href="https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console"
-            type="primary"
-            target="_blank"
-            >https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console</el-link
-          >
-          <br />
-          阿里云服务器折扣区
-          <el-link href="http://aly.ruoyi.vip" type="primary" target="_blank"
-            >>☛☛点我进入☚☚</el-link
-          >
-          &nbsp;&nbsp;&nbsp; 腾讯云服务器秒杀区
-          <el-link href="http://txy.ruoyi.vip" type="primary" target="_blank"
-            >>☛☛点我进入☚☚</el-link
-          ><br />
-          <h4 class="text-danger">
-            云产品通用红包,可叠加官网常规优惠使用。(仅限新用户)
-          </h4>
-        </blockquote>
-
-        <hr />
-      </el-col>
-    </el-row>
-    <el-row :gutter="20">
-      <el-col :sm="24" :lg="12" style="padding-left: 20px">
-        <h2>若依后台管理框架</h2>
-        <p>
-          一直想做一款后台管理系统,看了很多优秀的开源项目但是发现没有合适自己的。于是利用空闲休息时间开始自己写一套后台系统。如此有了CPMS管理系统,她可以用于所有的Web应用程序,如网站管理后台,网站会员中心,CMS,CRM,OA等等,当然,您也可以对她进行深度定制,以做出更强系统。所有前端后台代码封装过后十分精简易上手,出错概率低。同时支持移动客户端访问。系统会陆续更新一些实用功能。
-        </p>
-        <p>
-          <b>当前版本:</b> <span>v{{ version }}</span>
-        </p>
-        <p>
-          <el-tag type="danger">&yen;免费开源</el-tag>
-        </p>
-        <p>
-          <el-button
-            type="primary"
-            size="mini"
-            icon="el-icon-cloudy"
-            plain
-            @click="goTarget('https://gitee.com/y_project/RuoYi-Vue')"
-            >访问码云</el-button
-          >
-          <el-button
-            size="mini"
-            icon="el-icon-s-home"
-            plain
-            @click="goTarget('http://ruoyi.vip')"
-            >访问主页</el-button
-          >
-        </p>
-      </el-col>
-
-      <el-col :sm="24" :lg="12" style="padding-left: 50px">
-        <el-row>
-          <el-col :span="12">
-            <h2>技术选型</h2>
-          </el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="6">
-            <h4>后端技术</h4>
-            <ul>
-              <li>SpringBoot</li>
-              <li>Spring Security</li>
-              <li>JWT</li>
-              <li>MyBatis</li>
-              <li>Druid</li>
-              <li>Fastjson</li>
-              <li>...</li>
-            </ul>
-          </el-col>
-          <el-col :span="6">
-            <h4>前端技术</h4>
-            <ul>
-              <li>Vue</li>
-              <li>Vuex</li>
-              <li>Element-ui</li>
-              <li>Axios</li>
-              <li>Sass</li>
-              <li>Quill</li>
-              <li>...</li>
-            </ul>
-          </el-col>
-        </el-row>
-      </el-col>
-    </el-row>
-    <el-divider />
-    <el-row :gutter="20">
-      <el-col :xs="24" :sm="24" :md="12" :lg="8">
-        <el-card class="update-log">
-          <div slot="header" class="clearfix">
-            <span>联系信息</span>
-          </div>
-          <div class="body">
-            <p>
-              <i class="el-icon-s-promotion"></i> 官网:<el-link
-                href="http://www.ruoyi.vip"
-                target="_blank"
-                >http://www.ruoyi.vip</el-link
-              >
-            </p>
-            <p>
-              <i class="el-icon-user-solid"></i> QQ群:<s> 满937441 </s> <s> 满887144332 </s>
-              <s> 满180251782 </s> <s> 满104180207 </s> <s> 满186866453 </s> <s> 满201396349 </s>
-              <s> 满101456076 </s> <s> 满101539465 </s> <s> 满264312783 </s> <s> 满167385320 </s>
-              <s> 满104748341 </s> <s> 满160110482 </s> <s> 满170801498 </s> <s> 满108482800 </s>
-              <s> 满101046199 </s> <s> 满136919097 </s> <s> 满143961921 </s> <s> 满174951577 </s>
-              <s> 满161281055 </s> <a href="http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=XIzkm_mV2xTsUtFxo63bmicYoDBA6Ifm&authKey=dDW%2F4qsmw3x9govoZY9w%2FoWAoC4wbHqGal%2BbqLzoS6VBarU8EBptIgPKN%2FviyC8j&noverify=0&group_code=138988063" target="_blank">138988063</a>
-            </p>
-            <p>
-              <i class="el-icon-chat-dot-round"></i> 微信:<a
-                href="javascript:;"
-                >/ *若依</a
-              >
-            </p>
-            <p>
-              <i class="el-icon-money"></i> 支付宝:<a
-                href="javascript:;"
-                class="支付宝信息"
-                >/ *若依</a
-              >
-            </p>
-          </div>
-        </el-card>
-      </el-col>
-      <el-col :xs="24" :sm="24" :md="12" :lg="8">
-        <el-card class="update-log">
-          <div slot="header" class="clearfix">
-            <span>更新日志</span>
-          </div>
-          <el-collapse accordion>
-            <el-collapse-item title="v3.8.7 - 2023-12-08">
-              <ol>
-                <li>操作日志记录部门名称</li>
-                <li>全局数据存储用户编号</li>
-                <li>新增编程式判断资源访问权限</li>
-                <li>操作日志列表新增IP地址查询</li>
-                <li>定时任务新增页去除状态选项</li>
-                <li>代码生成支持选择前端模板类型</li>
-                <li>显隐列组件支持复选框弹出类型</li>
-                <li>通用排序属性orderBy参数限制长度</li>
-                <li>Excel自定义数据处理器增加单元格/工作簿对象</li>
-                <li>升级oshi到最新版本6.4.8</li>
-                <li>升级druid到最新版本1.2.20</li>
-                <li>升级fastjson到最新版2.0.43</li>
-                <li>升级pagehelper到最新版1.4.7</li>
-                <li>升级commons.io到最新版本2.13.0</li>
-                <li>升级element-ui到最新版本2.15.14</li>
-                <li>修复五级路由缓存无效问题</li>
-                <li>修复外链带端口出现的异常</li>
-                <li>修复树模板父级编码变量错误</li>
-                <li>修复字典表详情页面搜索问题</li>
-                <li>修复内链iframe没有传递参数问题</li>
-                <li>修复自定义字典样式不生效的问题</li>
-                <li>修复字典缓存删除方法参数错误问题</li>
-                <li>修复Excel导入数据临时文件无法删除问题</li>
-                <li>修复未登录带参数访问成功后参数丢失问题</li>
-                <li>修复HeaderSearch组件跳转query参数丢失问题</li>
-                <li>修复代码生成导入后必填项与数据库不匹配问题</li>
-                <li>修复Excels导入时无法获取到dictType字典值问题</li>
-                <li>优化下载zip方法新增遮罩层</li>
-                <li>优化头像上传参数新增文件名称</li>
-                <li>优化字典标签支持自定义分隔符</li>
-                <li>优化菜单管理类型为按钮状态可选</li>
-                <li>优化前端防重复提交数据大小限制</li>
-                <li>优化TopNav菜单没有图标svg不显示</li>
-                <li>优化数字金额大写转换精度丢失问题</li>
-                <li>优化富文本Editor组件检验图片格式</li>
-                <li>优化页签在Firefox浏览器被遮挡的问题</li>
-                <li>优化个人中心/基本资料修改时数据显示问题</li>
-                <li>优化缓存监控图表支持跟随屏幕大小自适应调整</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.8.6 - 2023-06-30">
-              <ol>
-                <li>支持登录IP黑名单限制</li>
-                <li>新增监控页面图标显示</li>
-                <li>操作日志新增消耗时间属性</li>
-                <li>屏蔽定时任务bean违规的字符</li>
-                <li>日志管理使用索引提升查询性能</li>
-                <li>日志注解支持排除指定的请求参数</li>
-                <li>支持自定义隐藏属性列过滤子对象</li>
-                <li>升级oshi到最新版本6.4.3</li>
-                <li>升级druid到最新版本1.2.16</li>
-                <li>升级fastjson到最新版2.0.34</li>
-                <li>升级spring-boot到最新版本2.5.15</li>
-                <li>升级element-ui到最新版本2.15.13</li>
-                <li>移除apache/commons-fileupload依赖</li>
-                <li>修复页面切换时布局错乱的问题</li>
-                <li>修复匿名注解Anonymous空指针问题</li>
-                <li>修复路由跳转被阻止时内部产生报错信息问题</li>
-                <li>修复isMatchedIp的参数判断产生空指针的问题</li>
-                <li>修复用户多角色数据权限可能出现权限抬升的情况</li>
-                <li>修复开启TopNav后一级菜单路由参数设置无效问题</li>
-                <li>修复DictTag组件value没有匹配的值时则展示value</li>
-                <li>优化文件下载出现的异常</li>
-                <li>优化选择图标组件高亮回显</li>
-                <li>优化弹窗后导航栏偏移的问题</li>
-                <li>优化修改密码日志存储明文问题</li>
-                <li>优化页签栏关闭其他出现的异常问题</li>
-                <li>优化页签关闭左侧选项排除首页选项</li>
-                <li>优化关闭当前tab页跳转最右侧tab页</li>
-                <li>优化缓存列表清除操作提示不变的问题</li>
-                <li>优化字符未使用下划线不进行驼峰式处理</li>
-                <li>优化用户导入更新时需获取用户编号问题</li>
-                <li>优化侧边栏的平台标题与VUE_APP_TITLE保持同步</li>
-                <li>优化导出Excel时设置dictType属性重复查缓存问题</li>
-                <li>连接池Druid支持新的配置connectTimeout和socketTimeout</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.8.5 - 2023-01-01">
-              <ol>
-                <li>定时任务违规的字符</li>
-                <li>重置时取消部门选中</li>
-                <li>新增返回警告消息提示</li>
-                <li>忽略不必要的属性数据返回</li>
-                <li>修改参数键名时移除前缓存配置</li>
-                <li>导入更新用户数据前校验数据权限</li>
-                <li>兼容Excel下拉框内容过多无法显示的问题</li>
-                <li>升级echarts到最新版本5.4.0</li>
-                <li>升级core-js到最新版本3.25.3</li>
-                <li>升级oshi到最新版本6.4.0</li>
-                <li>升级kaptcha到最新版2.3.3</li>
-                <li>升级druid到最新版本1.2.15</li>
-                <li>升级fastjson到最新版2.0.20</li>
-                <li>升级pagehelper到最新版1.4.6</li>
-                <li>优化弹窗内容过多展示不全问题</li>
-                <li>优化swagger-ui静态资源使用缓存</li>
-                <li>开启TopNav没有子菜单隐藏侧边栏</li>
-                <li>删除fuse无效选项maxPatternLength</li>
-                <li>优化导出对象的子列表为空会出现[]问题</li>
-                <li>优化编辑头像时透明部分会变成黑色问题</li>
-                <li>优化小屏幕上修改头像界面布局错位的问题</li>
-                <li>修复代码生成勾选属性无效问题</li>
-                <li>修复文件上传组件格式验证问题</li>
-                <li>修复回显数据字典数组异常问题</li>
-                <li>修复sheet超出最大行数异常问题</li>
-                <li>修复Log注解GET请求记录不到参数问题</li>
-                <li>修复调度日志点击多次数据不变化的问题</li>
-                <li>修复主题颜色在Drawer组件不会加载问题</li>
-                <li>修复文件名包含特殊字符的文件无法下载问题</li>
-                <li>修复table中更多按钮切换主题色未生效修复问题</li>
-                <li>修复某些特性的环境生成代码变乱码TXT文件问题</li>
-                <li>修复代码生成图片/文件/单选时选择必填无法校验问题</li>
-                <li>修复某些特性的情况用户编辑对话框中角色和部门无法修改问题</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.8.4 - 2022-09-26">
-              <ol>
-                <li>数据逻辑删除不进行唯一验证</li>
-                <li>Excel注解支持导出对象的子列表方法</li>
-                <li>Excel注解支持自定义隐藏属性列</li>
-                <li>Excel注解支持backgroundColor属性设置背景色</li>
-                <li>支持配置密码最大错误次数/锁定时间</li>
-                <li>登录日志新增解锁账户功能</li>
-                <li>通用下载方法新增config配置选项</li>
-                <li>支持多权限字符匹配角色数据权限</li>
-                <li>页面内嵌iframe切换tab不刷新数据</li>
-                <li>操作日志记录支持排除敏感属性字段</li>
-                <li>修复多文件上传报错出现的异常问题</li>
-                <li>修复图片预览组件src属性为null值控制台报错问题</li>
-                <li>升级oshi到最新版本6.2.2</li>
-                <li>升级fastjson到最新版2.0.14</li>
-                <li>升级pagehelper到最新版1.4.3</li>
-                <li>升级core-js到最新版本3.25.2</li>
-                <li>升级element-ui到最新版本2.15.10</li>
-                <li>优化任务过期不执行调度</li>
-                <li>优化字典数据使用store存取</li>
-                <li>优化修改资料头像被覆盖的问题</li>
-                <li>优化修改用户登录账号重复验证</li>
-                <li>优化代码生成同步后值NULL问题</li>
-                <li>优化定时任务支持执行父类方法</li>
-                <li>优化用户个人信息接口防止修改部门</li>
-                <li>优化布局设置使用el-drawer抽屉显示</li>
-                <li>优化没有权限的用户编辑部门缺少数据</li>
-                <li>优化日志注解记录限制请求地址的长度</li>
-                <li>优化excel/scale属性导出单元格数值类型</li>
-                <li>优化日志操作中重置按钮时重复查询的问题</li>
-                <li>优化多个相同角色数据导致权限SQL重复问题</li>
-                <li>优化表格上右侧工具条(搜索按钮显隐&右侧样式凸出)</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.8.3 - 2022-06-27">
-              <ol>
-                <li>新增缓存列表菜单功能</li>
-                <li>代码生成树表新增(展开/折叠)</li>
-                <li>Excel注解支持color字体颜色</li>
-                <li>新增Anonymous匿名访问不鉴权注解</li>
-                <li>用户头像上传限制只能为图片格式</li>
-                <li>接口使用泛型使其看到响应属性字段</li>
-                <li>检查定时任务bean所在包名是否为白名单配置</li>
-                <li>添加页签openPage支持传递参数</li>
-                <li>用户缓存信息添加部门ancestors祖级列表</li>
-                <li>升级element-ui到最新版本2.15.8</li>
-                <li>升级oshi到最新版本6.1.6</li>
-                <li>升级druid到最新版本1.2.11</li>
-                <li>升级fastjson到最新版2.0.8</li>
-                <li>升级spring-boot到最新版本2.5.14</li>
-                <li>降级jsencrypt版本兼容IE浏览器</li>
-                <li>删除多余的salt字段</li>
-                <li>新增获取不带后缀文件名称方法</li>
-                <li>新增获取配置文件中的属性值方法</li>
-                <li>新增内容编码/解码方便插件集成使用</li>
-                <li>字典类型必须以字母开头,且只能为(小写字母,数字,下滑线)</li>
-                <li>优化设置分页参数默认值</li>
-                <li>优化对空字符串参数处理的过滤</li>
-                <li>优化显示顺序orderNum类型为整型</li>
-                <li>优化表单构建按钮不显示正则校验</li>
-                <li>优化字典数据回显样式下拉框显示值</li>
-                <li>优化R响应成功状态码与全局保持一致</li>
-                <li>优化druid开启wall过滤器出现的异常问题</li>
-                <li>优化用户管理左侧树型组件增加选中高亮保持</li>
-                <li>优化新增用户与角色信息&用户与岗位信息逻辑</li>
-                <li>优化默认不启用压缩文件缓存防止node_modules过大</li>
-                <li>修复字典数据显示不全问题</li>
-                <li>修复操作日志查询类型条件为0时会查到所有数据</li>
-                <li>修复Excel注解prompt/combo同时使用不生效问题</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.8.2 - 2022-04-01">
-              <ol>
-                <li>前端支持设置是否需要防止数据重复提交</li>
-                <li>开启TopNav没有子菜单情况隐藏侧边栏</li>
-                <li>侧边栏菜单名称过长悬停显示标题</li>
-                <li>用户访问控制时校验数据权限,防止越权</li>
-                <li>导出Excel时屏蔽公式,防止CSV注入风险</li>
-                <li>组件ImagePreview支持多图预览显示</li>
-                <li>组件ImageUpload支持多图同时选择上传</li>
-                <li>组件FileUpload支持多文件同时选择上传</li>
-                <li>服务监控新增运行参数信息显示</li>
-                <li>定时任务目标字符串过滤特殊字符</li>
-                <li>定时任务目标字符串验证包名白名单</li>
-                <li>代码生成列表图片支持预览</li>
-                <li>代码生成编辑修改打开新页签</li>
-                <li>代码生成新增Java类型Boolean</li>
-                <li>代码生成子表支持日期/字典配置</li>
-                <li>代码生成同步保留必填/类型选项</li>
-                <li>升级oshi到最新版本6.1.2</li>
-                <li>升级fastjson到最新版1.2.80</li>
-                <li>升级pagehelper到最新版1.4.1</li>
-                <li>升级spring-boot到最新版本2.5.11</li>
-                <li>升级spring-boot-mybatis到最新版2.2.2</li>
-                <li>添加遗漏的分页参数合理化属性</li>
-                <li>修改npm即将过期的注册源地址</li>
-                <li>修复分页组件请求两次问题</li>
-                <li>修复通用文件下载接口跨域问题</li>
-                <li>修复Xss注解字段值为空时的异常问题</li>
-                <li>修复选项卡点击右键刷新丢失参数问题</li>
-                <li>修复表单清除元素位置未垂直居中问题</li>
-                <li>修复服务监控中运行参数显示条件错误</li>
-                <li>修复导入Excel时字典字段类型为Long转义为空问题</li>
-                <li>修复登录超时刷新页面跳转登录页面还提示重新登录问题</li>
-                <li>优化加载字典缓存数据</li>
-                <li>优化IP地址获取到多个的问题</li>
-                <li>优化任务队列满时任务拒绝策略</li>
-                <li>优化文件上传兼容Weblogic环境</li>
-                <li>优化定时任务默认保存到内存中执行</li>
-                <li>优化部门修改缩放后出现的错位问题</li>
-                <li>优化Excel格式化不同类型的日期对象</li>
-                <li>优化菜单表关键字导致的插件报错问题</li>
-                <li>优化Oracle用户头像列为空时不显示问题</li>
-                <li>优化页面若未匹配到字典标签则返回原字典值</li>
-                <li>优化修复登录失效后多次请求提示多次弹窗问题</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.8.1 - 2022-01-01">
-              <ol>
-                <li>新增Vue3前端代码生成模板</li>
-                <li>新增图片预览组件</li>
-                <li>新增压缩插件实现打包Gzip</li>
-                <li>自定义xss校验注解实现</li>
-                <li>自定义文字复制剪贴指令</li>
-                <li>代码生成预览支持复制内容</li>
-                <li>路由支持单独配置菜单或角色权限</li>
-                <li>用户管理部门查询选择节点后分页参数初始</li>
-                <li>修复用户分配角色属性错误</li>
-                <li>修复打包后字体图标偶现的乱码问题</li>
-                <li>修复菜单管理重置表单出现的错误</li>
-                <li>修复版本差异导致的懒加载报错问题</li>
-                <li>修复Cron组件中周回显问题</li>
-                <li>修复定时任务多参数逗号分隔的问题</li>
-                <li>修复根据ID查询列表可能出现的主键溢出问题</li>
-                <li>修复tomcat配置参数已过期问题</li>
-                <li>升级clipboard到最新版本2.0.8</li>
-                <li>升级oshi到最新版本v5.8.6</li>
-                <li>升级fastjson到最新版1.2.79</li>
-                <li>升级spring-boot到最新版本2.5.8</li>
-                <li>升级log4j2到2.17.1,防止漏洞风险</li>
-                <li>优化下载解析blob异常提示</li>
-                <li>优化代码生成字典组重复问题</li>
-                <li>优化查询用户的角色组&岗位组代码</li>
-                <li>优化定时任务cron表达式小时设置24</li>
-                <li>优化用户导入提示溢出则显示滚动条</li>
-                <li>优化防重复提交标识组合为(key+url+header)</li>
-                <li>优化分页方法设置成通用方便灵活调用</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.8.0 - 2021-12-01">
-              <ol>
-                <li>新增配套并同步的Vue3前端版本</li>
-                <li>新增通用方法简化模态/缓存/下载/权限/页签使用</li>
-                <li>优化导出数据/使用通用下载方法</li>
-                <li>Excel注解支持自定义数据处理器</li>
-                <li>Excel注解支持导入导出标题信息</li>
-                <li>Excel导入支持@Excels注解</li>
-                <li>新增组件data-dict,简化数据字典使用</li>
-                <li>新增Jaxb依赖,防止jdk8以上出现的兼容错误</li>
-                <li>生产环境使用路由懒加载提升页面响应速度</li>
-                <li>修复五级以上菜单出现的404问题</li>
-                <li>防重提交注解支持配置间隔时间/提示消息</li>
-                <li>日志注解新增是否保存响应参数</li>
-                <li>任务屏蔽违规字符&参数忽略双引号中的逗号</li>
-                <li>升级SpringBoot到最新版本2.5.6</li>
-                <li>升级pagehelper到最新版1.4.0</li>
-                <li>升级spring-boot-mybatis到最新版2.2.0</li>
-                <li>升级oshi到最新版本v5.8.2</li>
-                <li>升级druid到最新版1.2.8</li>
-                <li>升级velocity到最新版本2.3</li>
-                <li>升级fastjson到最新版1.2.78</li>
-                <li>升级axios到最新版本0.24.0</li>
-                <li>升级dart-sass到版本1.32.13</li>
-                <li>升级core-js到最新版本3.19.1</li>
-                <li>升级jsencrypt到最新版本3.2.1</li>
-                <li>升级js-cookie到最新版本3.0.1</li>
-                <li>升级file-saver到最新版本2.0.5</li>
-                <li>升级sass-loader到最新版本10.1.1</li>
-                <li>升级element-ui到最新版本2.15.6</li>
-                <li>新增sendGet无参请求方法</li>
-                <li>禁用el-tag组件的渐变动画</li>
-                <li>代码生成点击预览重置激活tab</li>
-                <li>AjaxResult重写put方法,以方便链式调用</li>
-                <li>优化登录/验证码请求headers不设置token</li>
-                <li>优化用户个人信息接口防止修改用户名</li>
-                <li>优化Cron表达式生成器关闭时销毁避免缓存</li>
-                <li>优化注册成功提示消息类型success</li>
-                <li>优化aop语法,使用spring自动注入注解</li>
-                <li>优化记录登录信息,移除不必要的修改</li>
-                <li>优化mybatis全局默认的执行器</li>
-                <li>优化Excel导入图片可能出现的异常</li>
-                <li>修复代码生成模板主子表删除缺少事务</li>
-                <li>修复日志记录可能出现的转换异常</li>
-                <li>修复代码生成复选框字典遗漏问题</li>
-                <li>修复关闭xss功能导致可重复读RepeatableFilter失效</li>
-                <li>修复字符串无法被反转义问题</li>
-                <li>修复后端主子表代码模板方法名生成错误问题</li>
-                <li>修复xss过滤后格式出现的异常</li>
-                <li>修复swagger没有指定dataTypeClass导致启动出现warn日志</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.7.0 - 2021-09-13">
-              <ol>
-                <li>参数管理支持配置验证码开关</li>
-                <li>新增是否开启用户注册功能</li>
-                <li>定时任务支持在线生成cron表达式</li>
-                <li>菜单管理支持配置路由参数</li>
-                <li>支持自定义注解实现接口限流</li>
-                <li>Excel注解支持Image图片导入</li>
-                <li>自定义弹层溢出滚动样式</li>
-                <li>自定义可拖动弹窗宽度指令</li>
-                <li>自定义可拖动弹窗高度指令</li>
-                <li>修复任意账户越权问题</li>
-                <li>修改时检查用户数据权限范围</li>
-                <li>修复保存配置主题颜色失效问题</li>
-                <li>新增暗色菜单风格主题</li>
-                <li>菜单&部门新增展开/折叠功能</li>
-                <li>页签新增关闭左侧&添加图标</li>
-                <li>顶部菜单排除隐藏的默认路由</li>
-                <li>顶部菜单同步系统主题样式</li>
-                <li>跳转路由高亮相对应的菜单栏</li>
-                <li>代码生成主子表多选行数据</li>
-                <li>日期范围支持添加多组</li>
-                <li>升级element-ui到最新版本2.15.5</li>
-                <li>升级oshi到最新版本v5.8.0</li>
-                <li>升级commons.io到最新版本v2.11.0</li>
-                <li>定时任务屏蔽ldap远程调用</li>
-                <li>定时任务屏蔽http(s)远程调用</li>
-                <li>补充定时任务表字段注释</li>
-                <li>定时任务对检查异常进行事务回滚</li>
-                <li>启用父部门状态排除顶级节点</li>
-                <li>富文本新增上传文件大小限制</li>
-                <li>默认首页使用keep-alive缓存</li>
-                <li>修改代码生成字典回显样式</li>
-                <li>自定义分页合理化传入参数</li>
-                <li>修复字典组件值为整形不显示问题</li>
-                <li>修复定时任务日志执行状态显示</li>
-                <li>角色&菜单新增字段属性提示信息</li>
-                <li>修复角色分配用户页面参数类型错误提醒</li>
-                <li>优化布局设置动画特效</li>
-                <li>优化异常处理信息</li>
-                <li>优化错误token导致的解析异常</li>
-                <li>密码框新增显示切换密码图标</li>
-                <li>定时任务新增更多操作</li>
-                <li>更多操作按钮添加权限控制</li>
-                <li>导入用户样式优化</li>
-                <li>提取通用方法到基类控制器</li>
-                <li>优化使用权限工具获取用户信息</li>
-                <li>优化用户不能删除自己</li>
-                <li>优化XSS跨站脚本过滤</li>
-                <li>优化代码生成模板</li>
-                <li>验证码默认20s超时</li>
-                <li>BLOB下载时清除URL对象引用</li>
-                <li>代码生成导入表按创建时间排序</li>
-                <li>修复代码生成页面数据编辑保存之后总是跳转第一页的问题</li>
-                <li>修复带safari浏览器无法格式化utc日期格式yyyy-MM-dd'T'HH:mm:ss.SSS问题</li>
-                <li>多图上传组件移除多余的api地址&验证失败导致图片删除问题&无法删除相应图片修复</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.6.0 - 2021-07-12">
-              <ol>
-                <li>角色管理新增分配用户功能</li>
-                <li>用户管理新增分配角色功能</li>
-                <li>日志列表支持排序操作</li>
-                <li>优化参数&字典缓存操作</li>
-                <li>系统布局配置支持动态标题开关</li>
-                <li>菜单路由配置支持内链访问</li>
-                <li>默认访问后端首页新增提示语</li>
-                <li>富文本默认上传返回url类型</li>
-                <li>新增自定义弹窗拖拽指令</li>
-                <li>全局注册常用通用组件</li>
-                <li>全局挂载字典标签组件</li>
-                <li>ImageUpload组件支持多图片上传</li>
-                <li>FileUpload组件支持多文件上传</li>
-                <li>文件上传组件添加数量限制属性</li>
-                <li>富文本编辑组件添加类型属性</li>
-                <li>富文本组件工具栏配置视频</li>
-                <li>封装通用iframe组件</li>
-                <li>限制超级管理员不允许操作</li>
-                <li>用户信息长度校验限制</li>
-                <li>分页组件新增pagerCount属性</li>
-                <li>添加bat脚本执行应用</li>
-                <li>升级oshi到最新版本v5.7.4</li>
-                <li>升级element-ui到最新版本2.15.2</li>
-                <li>升级pagehelper到最新版1.3.1</li>
-                <li>升级commons.io到最新版本v2.10.0</li>
-                <li>升级commons.fileupload到最新版本v1.4</li>
-                <li>升级swagger到最新版本v3.0.0</li>
-                <li>修复关闭confirm提示框控制台报错问题</li>
-                <li>修复存在的SQL注入漏洞问题</li>
-                <li>定时任务屏蔽rmi远程调用</li>
-                <li>修复用户搜索分页变量错误</li>
-                <li>修复导出角色数据范围翻译缺少仅本人</li>
-                <li>修复表单构建选择下拉选择控制台报错问题</li>
-                <li>优化图片工具类读取文件</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.5.0 - 2021-05-25">
-              <ol>
-                <li>新增菜单导航显示风格TopNav(false为左侧导航菜单,true为顶部导航菜单)</li>
-                <li>布局设置支持保存&重置配置</li>
-                <li>修复树表数据显示不全&加载慢问题</li>
-                <li>新增IE浏览器版本过低提示页面</li>
-                <li>用户登录后记录最后登录IP&时间</li>
-                <li>页面导出按钮点击之后添加遮罩</li>
-                <li>富文本编辑器支持自定义上传地址</li>
-                <li>富文本编辑组件新增readOnly属性</li>
-                <li>页签TagsView新增关闭右侧功能</li>
-                <li>显隐列组件加载初始默认隐藏列</li>
-                <li>关闭头像上传窗口还原默认图片</li>
-                <li>个人信息添加手机&邮箱重复验证</li>
-                <li>代码生成模板导出按钮点击后添加遮罩</li>
-                <li>代码生成模板树表操作列添加新增按钮</li>
-                <li>代码生成模板修复主子表字段重名问题</li>
-                <li>升级fastjson到最新版1.2.76</li>
-                <li>升级druid到最新版本v1.2.6</li>
-                <li>升级mybatis到最新版3.5.6 阻止远程代码执行漏洞</li>
-                <li>升级oshi到最新版本v5.6.0</li>
-                <li>velocity剔除commons-collections版本,防止3.2.1版本的反序列化漏洞</li>
-                <li>数据监控页默认账户密码防止越权访问</li>
-                <li>修复firefox下表单构建拖拽会新打卡一个选项卡</li>
-                <li>修正后端导入表权限标识</li>
-                <li>修正前端操作日志&登录日志权限标识</li>
-                <li>设置Redis配置HashKey序列化</li>
-                <li>删除操作日志记录信息</li>
-                <li>上传媒体类型添加视频格式</li>
-                <li>修复请求形参未传值记录日志异常问题</li>
-                <li>优化xss校验json请求条件</li>
-                <li>树级结构更新子节点使用replaceFirst</li>
-                <li>优化ExcelUtil空值处理</li>
-                <li>日志记录过滤BindingResult对象,防止异常</li>
-                <li>修改主题后mini类型按钮无效问题</li>
-                <li>优化通用下载完成后删除节点</li>
-                <li>通用Controller添加响应返回消息</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.4.0 - 2021-02-22">
-              <ol>
-                <li>代码生成模板支持主子表</li>
-                <li>表格右侧工具栏组件支持显隐列</li>
-                <li>图片组件添加预览&移除功能</li>
-                <li>Excel注解支持Image图片导出</li>
-                <li>操作按钮组调整为朴素按钮样式</li>
-                <li>代码生成支持文件上传组件</li>
-                <li>代码生成日期控件区分范围</li>
-                <li>代码生成数据库文本类型生成表单文本域</li>
-                <li>用户手机邮箱&菜单组件修改允许空字符串</li>
-                <li>升级SpringBoot到最新版本2.2.13 提升启动速度</li>
-                <li>升级druid到最新版本v1.2.4</li>
-                <li>升级fastjson到最新版1.2.75</li>
-                <li>升级element-ui到最新版本2.15.0</li>
-                <li>修复IE11浏览器报错问题</li>
-                <li>优化多级菜单之间切换无法缓存的问题</li>
-                <li>修复四级菜单无法显示问题</li>
-                <li>修正侧边栏静态路由丢失问题</li>
-                <li>修复角色管理-编辑角色-功能权限显示异常</li>
-                <li>配置文件新增redis数据库索引属性</li>
-                <li>权限工具类增加admin判断</li>
-                <li>角色非自定义权限范围清空选择值</li>
-                <li>修复导入数据为负浮点数时丢失精度问题</li>
-                <li>移除path-to-regexp正则匹配插件</li>
-                <li>修复生成树表代码异常</li>
-                <li>修改ip字段长度防止ipv6地址长度不够</li>
-                <li>防止get请求参数值为false或0等特殊值会导致无法正确的传参</li>
-                <li>登录后push添加catch防止出现检查错误</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.3.0 - 2020-12-14">
-              <ol>
-                <li>新增缓存监控功能</li>
-                <li>支持主题风格配置</li>
-                <li>修复多级菜单之间切换无法缓存的问题</li>
-                <li>多级菜单自动配置组件</li>
-                <li>代码生成预览支持高亮显示</li>
-                <li>支持Get请求映射Params参数</li>
-                <li>删除用户和角色解绑关联</li>
-                <li>去除用户手机邮箱部门必填验证</li>
-                <li>Excel支持注解align对齐方式</li>
-                <li>Excel支持导入Boolean型数据</li>
-                <li>优化头像样式,鼠标移入悬停遮罩</li>
-                <li>代码生成预览提供滚动机制</li>
-                <li>代码生成删除多余的数字float类型</li>
-                <li>修正转换字符串的目标字符集属性</li>
-                <li>回显数据字典防止空值报错</li>
-                <li>日志记录增加过滤多文件场景</li>
-                <li>修改缓存Set方法可能导致嵌套的问题</li>
-                <li>移除前端一些多余的依赖</li>
-                <li>防止安全扫描YUI出现的风险提示</li>
-                <li>修改node-sass为dart-sass</li>
-                <li>升级SpringBoot到最新版本2.1.18</li>
-                <li>升级poi到最新版本4.1.2</li>
-                <li>升级oshi到最新版本v5.3.6</li>
-                <li>升级bitwalker到最新版本1.21</li>
-                <li>升级axios到最新版本0.21.0</li>
-                <li>升级element-ui到最新版本2.14.1</li>
-                <li>升级vue到最新版本2.6.12</li>
-                <li>升级vuex到最新版本3.6.0</li>
-                <li>升级vue-cli到版本4.5.9</li>
-                <li>升级vue-router到最新版本3.4.9</li>
-                <li>升级vue-cli到最新版本4.4.6</li>
-                <li>升级vue-cropper到最新版本0.5.5</li>
-                <li>升级clipboard到最新版本2.0.6</li>
-                <li>升级core-js到最新版本3.8.1</li>
-                <li>升级echarts到最新版本4.9.0</li>
-                <li>升级file-saver到最新版本2.0.4</li>
-                <li>升级fuse.js到最新版本6.4.3</li>
-                <li>升级js-beautify到最新版本1.13.0</li>
-                <li>升级js-cookie到最新版本2.2.1</li>
-                <li>升级path-to-regexp到最新版本6.2.0</li>
-                <li>升级quill到最新版本1.3.7</li>
-                <li>升级screenfull到最新版本5.0.2</li>
-                <li>升级sortablejs到最新版本1.10.2</li>
-                <li>升级vuedraggable到最新版本2.24.3</li>
-                <li>升级chalk到最新版本4.1.0</li>
-                <li>升级eslint到最新版本7.15.0</li>
-                <li>升级eslint-plugin-vue到最新版本7.2.0</li>
-                <li>升级lint-staged到最新版本10.5.3</li>
-                <li>升级runjs到最新版本4.4.2</li>
-                <li>升级sass-loader到最新版本10.1.0</li>
-                <li>升级script-ext-html-webpack-plugin到最新版本2.1.5</li>
-                <li>升级svg-sprite-loader到最新版本5.1.1</li>
-                <li>升级vue-template-compiler到最新版本2.6.12</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.2.1 - 2020-11-18">
-              <ol>
-                <li>阻止任意文件下载漏洞</li>
-                <li>代码生成支持上传控件</li>
-                <li>新增图片上传组件</li>
-                <li>调整默认首页</li>
-                <li>升级druid到最新版本v1.2.2</li>
-                <li>mapperLocations配置支持分隔符</li>
-                <li>权限信息调整</li>
-                <li>调整sql默认时间</li>
-                <li>解决代码生成没有bit类型的问题</li>
-                <li>升级pagehelper到最新版1.3.0</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.2.0 - 2020-10-10">
-              <ol>
-                <li>升级springboot版本到2.1.17 提升安全性</li>
-                <li>升级oshi到最新版本v5.2.5</li>
-                <li>升级druid到最新版本v1.2.1</li>
-                <li>升级jjwt到版本0.9.1</li>
-                <li>升级fastjson到最新版1.2.74</li>
-                <li>修改sass为node-sass,避免el-icon图标乱码</li>
-                <li>代码生成支持同步数据库</li>
-                <li>代码生成支持富文本控件</li>
-                <li>代码生成页面时不忽略remark属性</li>
-                <li>代码生成添加select必填选项</li>
-                <li>Excel导出类型NUMERIC支持精度浮点类型</li>
-                <li>Excel导出targetAttr优化获取值,防止get方法不规范</li>
-                <li>Excel注解支持自动统计数据总和</li>
-                <li>Excel注解支持设置BigDecimal精度&舍入规则</li>
-                <li>菜单&数据权限新增(展开/折叠 全选/全不选 父子联动)</li>
-                <li>允许用户分配到部门父节点</li>
-                <li>菜单新增是否缓存keep-alive</li>
-                <li>表格操作列间距调整</li>
-                <li>限制系统内置参数不允许删除</li>
-                <li>富文本组件优化,支持自定义高度&图片冲突问题</li>
-                <li>富文本工具栏样式对齐</li>
-                <li>导入excel整形值校验优化</li>
-                <li>修复页签关闭所有时固定标签路由不刷新问题</li>
-                <li>表单构建布局型组件新增按钮</li>
-                <li>左侧菜单文字过长显示省略号</li>
-                <li>修正根节点为子部门时,树状结构显示问题</li>
-                <li>修正调用目标字符串最大长度</li>
-                <li>修正菜单提示信息错误</li>
-                <li>修正定时任务执行一次权限标识</li>
-                <li>修正数据库字符串类型nvarchar</li>
-                <li>优化递归子节点</li>
-                <li>优化数据权限判断</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-
-            <el-collapse-item title="v3.1.0 - 2020-08-13">
-              <ol>
-                <li>表格工具栏右侧添加刷新&显隐查询组件</li>
-                <li>后端支持CORS跨域请求</li>
-                <li>代码生成支持选择上级菜单</li>
-                <li>代码生成支持自定义路径</li>
-                <li>代码生成支持复选框</li>
-                <li>Excel导出导入支持dictType字典类型</li>
-                <li>Excel支持分割字符串组内容</li>
-                <li>验证码类型支持(数组计算、字符验证)</li>
-                <li>升级vue-cli版本到4.4.4</li>
-                <li>修改 node-sass 为 dart-sass</li>
-                <li>表单类型为Integer/Long设置整形默认值</li>
-                <li>代码生成器默认mapper路径与默认mapperScan路径不一致</li>
-                <li>优化防重复提交拦截器</li>
-                <li>优化上级菜单不能选择自己</li>
-                <li>修复角色的权限分配后,未实时生效问题</li>
-                <li>修复在线用户日志记录类型</li>
-                <li>修复富文本空格和缩进保存后不生效问题</li>
-                <li>修复在线用户判断逻辑</li>
-                <li>唯一限制条件只返回单条数据</li>
-                <li>添加获取当前的环境配置方法</li>
-                <li>超时登录后页面跳转到首页</li>
-                <li>全局异常状态汉化拦截处理</li>
-                <li>HTML过滤器改为将html转义</li>
-                <li>检查字符支持小数点&降级改成异常提醒</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-
-            <el-collapse-item title="v3.0.0 - 2020-07-20">
-              <ol>
-                <li>单应用调整为多模块项目</li>
-                <li>升级element-ui版本到2.13.2</li>
-                <li>删除babel,提高编译速度。</li>
-                <li>新增菜单默认主类目</li>
-                <li>编码文件名修改为uuid方式</li>
-                <li>定时任务cron表达式验证</li>
-                <li>角色权限修改时已有权限未自动勾选异常修复</li>
-                <li>防止切换权限用户后登录出现404</li>
-                <li>Excel支持sort导出排序</li>
-                <li>创建用户不允许选择超级管理员角色</li>
-                <li>修复代码生成导入表结构出现异常页面不提醒问题</li>
-                <li>修复代码生成点击多次表修改数据不变化的问题</li>
-                <li>修复头像上传成功二次打开无法改变裁剪框大小和位置问题</li>
-                <li>修复布局为small者mini用户表单显示错位问题</li>
-                <li>修复热部署导致的强换异常问题</li>
-                <li>修改用户管理复选框宽度,防止部分浏览器出现省略号</li>
-                <li>IpUtils工具,清除Xss特殊字符,防止Xff注入攻击</li>
-                <li>生成domain 如果是浮点型 统一用BigDecimal</li>
-                <li>定时任务调整label-width,防止部署出现错位</li>
-                <li>调整表头固定列默认样式</li>
-                <li>代码生成模板调整,字段为String并且必填则加空串条件</li>
-                <li>代码生成字典Integer/Long使用parseInt</li>
-                <li>
-                  修复dict_sort不可update为0的问题&查询返回增加dict_sort升序排序
-                </li>
-                <li>修正岗位导出权限注解</li>
-                <li>禁止加密密文返回前端</li>
-                <li>修复代码生成页面中的查询条件创建时间未生效的问题</li>
-                <li>修复首页搜索菜单外链无法点击跳转问题</li>
-                <li>修复菜单管理选择图标,backspace删除时不过滤数据</li>
-                <li>用户管理部门分支节点不可检查&显示计数</li>
-                <li>数据范围过滤属性调整</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-
-            <el-collapse-item title="v2.3.0 - 2020-06-01">
-              <ol>
-                <li>升级fastjson到最新版1.2.70 修复高危安全漏洞</li>
-                <li>dev启动默认打开浏览器</li>
-                <li>vue-cli使用默认source-map</li>
-                <li>slidebar eslint报错优化</li>
-                <li>当tags-view滚动关闭右键菜单</li>
-                <li>字典管理添加缓存读取</li>
-                <li>参数管理支持缓存操作</li>
-                <li>支持一级菜单(和主页同级)在main区域显示</li>
-                <li>限制外链地址必须以http(s)开头</li>
-                <li>tagview & sidebar 主题颜色与element ui(全局)同步</li>
-                <li>修改数据源类型优先级,先根据方法,再根据类</li>
-                <li>支持是否需要设置token属性,自定义返回码消息。</li>
-                <li>swagger请求前缀加入配置。</li>
-                <li>登录地点设置内容过长则隐藏显示</li>
-                <li>修复定时任务执行一次按钮后不提示消息问题</li>
-                <li>修改上级部门(选择项排除本身和下级)</li>
-                <li>通用http发送方法增加参数 contentType 编码类型</li>
-                <li>更换IP地址查询接口</li>
-                <li>修复页签变量undefined</li>
-                <li>添加校验部门包含未停用的子部门</li>
-                <li>修改定时任务详情下次执行时间日期显示错误</li>
-                <li>角色管理查询设置默认排序字段</li>
-                <li>swagger添加enable参数控制是否启用</li>
-                <li>只对json类型请求构建可重复读取inputStream的request</li>
-                <li>修改代码生成字典字段int类型没有自动选中问题</li>
-                <li>vuex用户名取值修正</li>
-                <li>表格树模板去掉多余的)</li>
-                <li>代码生成序号修正</li>
-                <li>全屏情况下不调整上外边距</li>
-                <li>代码生成Date字段添加默认格式</li>
-                <li>用户管理角色选择权限控制</li>
-                <li>修复路由懒加载报错问题</li>
-                <li>模板sql.vm添加菜单状态</li>
-                <li>设置用户名称不能修改</li>
-                <li>dialog添加append-to-body属性,防止ie遮罩</li>
-                <li>菜单区分状态和显示隐藏功能</li>
-                <li>升级fastjson到最新版1.2.68 修复安全加固</li>
-                <li>修复代码生成如果选择字典类型缺失逗号问题</li>
-                <li>登录请求params更换为data,防止暴露url</li>
-                <li>日志返回时间格式处理</li>
-                <li>添加handle控制允许拖动的元素</li>
-                <li>布局设置点击扩大范围</li>
-                <li>代码生成列属性排序查询</li>
-                <li>代码生成列支持拖动排序</li>
-                <li>修复时间格式不支持ios问题</li>
-                <li>表单构建添加父级class,防止冲突</li>
-                <li>定时任务并发属性修正</li>
-                <li>角色禁用&菜单隐藏不查询权限</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-
-            <el-collapse-item title="v2.2.0 - 2020-03-18">
-              <ol>
-                <li>系统监控新增定时任务功能</li>
-                <li>添加一个打包Web工程bat</li>
-                <li>修复页签鼠标滚轮按下的时候,可以关闭不可关闭的tag</li>
-                <li>修复点击退出登录有时会无提示问题</li>
-                <li>修复防重复提交注解无效问题</li>
-                <li>修复通知公告批量删除异常问题</li>
-                <li>添加菜单时路由地址必填限制</li>
-                <li>代码生成字段描述可编辑</li>
-                <li>修复用户修改个人信息导致缓存不过期问题</li>
-                <li>个人信息创建时间获取正确属性值</li>
-                <li>操作日志详细显示正确类型</li>
-                <li>导入表单击行数据时选中对应的复选框</li>
-                <li>批量替换表前缀逻辑调整</li>
-                <li>固定重定向路径表达式</li>
-                <li>升级element-ui版本到2.13.0</li>
-                <li>操作日志排序调整</li>
-                <li>修复charts切换侧边栏或者缩放窗口显示bug</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-
-            <el-collapse-item title="v2.1.0 - 2020-02-24">
-              <ol>
-                <li>新增表单构建</li>
-                <li>代码生成支持树表结构</li>
-                <li>新增用户导入</li>
-                <li>修复动态加载路由页面刷新问题</li>
-                <li>修复地址开关无效问题</li>
-                <li>汉化错误提示页面</li>
-                <li>代码生成已知问题修改</li>
-                <li>修复多数据源下配置关闭出现异常处理</li>
-                <li>添加HTML过滤器,用于去除XSS漏洞隐患</li>
-                <li>修复上传头像控制台出现异常</li>
-                <li>修改用户管理分页不正确的问题</li>
-                <li>修复验证码记录提示错误</li>
-                <li>修复request.js缺少Message引用</li>
-                <li>修复表格时间为空出现的异常</li>
-                <li>添加Jackson日期反序列化时区配置</li>
-                <li>调整根据用户权限加载菜单数据树形结构</li>
-                <li>调整成功登录不恢复按钮,防止多次点击</li>
-                <li>修改用户个人资料同步缓存信息</li>
-                <li>修复页面同时出现el-upload和Editor不显示处理</li>
-                <li>修复在角色管理页修改菜单权限偶尔未选中问题</li>
-                <li>配置文件新增redis密码属性</li>
-                <li>设置mybatis全局的配置文件</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-
-            <el-collapse-item title="v2.0.0 - 2019-12-02">
-              <ol>
-                <li>新增代码生成</li>
-                <li>新增@RepeatSubmit注解,防止重复提交</li>
-                <li>新增菜单主目录添加/删除操作</li>
-                <li>日志记录过滤特殊对象,防止转换异常</li>
-                <li>修改代码生成路由脚本错误</li>
-                <li>用户上传头像实时同步缓存,无需重新登录</li>
-                <li>调整切换页签后不重新加载数据</li>
-                <li>添加jsencrypt实现参数的前端加密</li>
-                <li>系统退出删除用户缓存记录</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v1.1.0 - 2019-11-11">
-              <ol>
-                <li>新增在线用户管理</li>
-                <li>新增按钮组功能实现(批量删除、导出、清空)</li>
-                <li>新增查询条件重置按钮</li>
-                <li>新增Swagger全局Token配置</li>
-                <li>新增后端参数校验</li>
-                <li>修复字典管理页面的日期查询异常</li>
-                <li>修改时间函数命名防止冲突</li>
-                <li>去除菜单上级校验,默认为顶级</li>
-                <li>修复用户密码无法修改问题</li>
-                <li>修复菜单类型为按钮时不显示权限标识</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v1.0.0 - 2019-10-08">
-              <ol>
-                <li>若依前后端分离系统正式发布</li>
-              </ol>
-            </el-collapse-item>
-          </el-collapse>
-        </el-card>
-      </el-col>
-      <el-col :xs="24" :sm="24" :md="12" :lg="8">
-        <el-card class="update-log">
-          <div slot="header" class="clearfix">
-            <span>捐赠支持</span>
-          </div>
-          <div class="body">
-            <img
-              src="@/assets/images/pay.png"
-              alt="donate"
-              width="100%"
-            />
-            <span style="display: inline-block; height: 30px; line-height: 30px"
-              >你可以请作者喝杯咖啡表示鼓励</span
-            >
-          </div>
-        </el-card>
-      </el-col>
-    </el-row>
-  </div>
-</template>
-
-<script>
-export default {
-  name: "Index",
-  data() {
-    return {
-      // 版本号
-      version: "3.8.7"
-    };
-  },
-  methods: {
-    goTarget(href) {
-      window.open(href, "_blank");
-    }
-  }
-};
-</script>
-
-<style scoped lang="scss">
-.home {
-  blockquote {
-    padding: 10px 20px;
-    margin: 0 0 20px;
-    font-size: 17.5px;
-    border-left: 5px solid #eee;
-  }
-  hr {
-    margin-top: 20px;
-    margin-bottom: 20px;
-    border: 0;
-    border-top: 1px solid #eee;
-  }
-  .col-item {
-    margin-bottom: 20px;
-  }
-
-  ul {
-    padding: 0;
-    margin: 0;
-  }
-
-  font-family: "open sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
-  font-size: 13px;
-  color: #676a6c;
-  overflow-x: hidden;
-
-  ul {
-    list-style-type: none;
-  }
-
-  h4 {
-    margin-top: 0px;
-  }
-
-  h2 {
-    margin-top: 10px;
-    font-size: 26px;
-    font-weight: 100;
-  }
-
-  p {
-    margin-top: 10px;
-
-    b {
-      font-weight: 700;
-    }
-  }
-
-  .update-log {
-    ol {
-      display: block;
-      list-style-type: decimal;
-      margin-block-start: 1em;
-      margin-block-end: 1em;
-      margin-inline-start: 0;
-      margin-inline-end: 0;
-      padding-inline-start: 40px;
-    }
-  }
-}
-</style>
-

+ 25 - 0
ui/src/views/loading.vue

@@ -0,0 +1,25 @@
+<template>
+  <div class="app-container home" v-loading="true" element-loading-text="拼命加载中" style="height: 800px">
+
+  </div>
+</template>
+
+<script>
+export default {
+  name: "Index",
+  data() {
+    return{
+      // 页面高度
+      clientHeight: 300,
+    }
+  },
+  created() {
+    //设置表格高度对应屏幕高度
+    this.$nextTick(() => {
+      this.clientHeight = (document.body.clientHeight) * 0.8
+    });
+  },
+  methods: {
+  }
+};
+</script>

+ 1 - 1
ui/src/views/login.vue

@@ -59,7 +59,7 @@ export default {
       codeUrl: "",
       loginForm: {
         username: "admin",
-        password: "admin123",
+        password: "123456",
         rememberMe: false,
         code: "",
         uuid: ""