Selaa lähdekoodia

1.每个月1号清除3个月前登录操作日志

2.个人参培记录审核表 及审核流程
lamphua 3 kuukautta sitten
vanhempi
commit
28b4d17d40

+ 97
- 0
oa-back/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/CmcTrainApprovalController.java Näytä tiedosto

@@ -0,0 +1,97 @@
1
+package com.ruoyi.web.controller.oa;
2
+
3
+import java.util.List;
4
+import javax.servlet.http.HttpServletResponse;
5
+import org.springframework.beans.factory.annotation.Autowired;
6
+import org.springframework.web.bind.annotation.GetMapping;
7
+import org.springframework.web.bind.annotation.PostMapping;
8
+import org.springframework.web.bind.annotation.PutMapping;
9
+import org.springframework.web.bind.annotation.DeleteMapping;
10
+import org.springframework.web.bind.annotation.PathVariable;
11
+import org.springframework.web.bind.annotation.RequestBody;
12
+import org.springframework.web.bind.annotation.RequestMapping;
13
+import org.springframework.web.bind.annotation.RestController;
14
+import com.ruoyi.common.annotation.Log;
15
+import com.ruoyi.common.core.controller.BaseController;
16
+import com.ruoyi.common.core.domain.AjaxResult;
17
+import com.ruoyi.common.enums.BusinessType;
18
+import com.ruoyi.oa.domain.CmcTrainApproval;
19
+import com.ruoyi.oa.service.ICmcTrainApprovalService;
20
+import com.ruoyi.common.utils.poi.ExcelUtil;
21
+import com.ruoyi.common.core.page.TableDataInfo;
22
+
23
+/**
24
+ * 参培审核Controller
25
+ * 
26
+ * @author cmc
27
+ * @date 2025-03-04
28
+ */
29
+@RestController
30
+@RequestMapping("/oa/trainApproval")
31
+public class CmcTrainApprovalController extends BaseController
32
+{
33
+    @Autowired
34
+    private ICmcTrainApprovalService cmcTrainApprovalService;
35
+
36
+    /**
37
+     * 查询参培审核列表
38
+     */
39
+    @GetMapping("/list")
40
+    public TableDataInfo list(CmcTrainApproval cmcTrainApproval)
41
+    {
42
+        startPage();
43
+        List<CmcTrainApproval> list = cmcTrainApprovalService.selectCmcTrainApprovalList(cmcTrainApproval);
44
+        return getDataTable(list);
45
+    }
46
+
47
+    /**
48
+     * 导出参培审核列表
49
+     */
50
+    @Log(title = "参培审核", businessType = BusinessType.EXPORT)
51
+    @PostMapping("/export")
52
+    public void export(HttpServletResponse response, CmcTrainApproval cmcTrainApproval)
53
+    {
54
+        List<CmcTrainApproval> list = cmcTrainApprovalService.selectCmcTrainApprovalList(cmcTrainApproval);
55
+        ExcelUtil<CmcTrainApproval> util = new ExcelUtil<CmcTrainApproval>(CmcTrainApproval.class);
56
+        util.exportExcel(response, list, "参培审核数据");
57
+    }
58
+
59
+    /**
60
+     * 获取参培审核详细信息
61
+     */
62
+    @GetMapping(value = "/{participateId}")
63
+    public AjaxResult getInfo(@PathVariable("participateId") String participateId)
64
+    {
65
+        return success(cmcTrainApprovalService.selectCmcTrainApprovalByParticipateId(participateId));
66
+    }
67
+
68
+    /**
69
+     * 新增参培审核
70
+     */
71
+    @Log(title = "参培审核", businessType = BusinessType.INSERT)
72
+    @PostMapping
73
+    public AjaxResult add(@RequestBody CmcTrainApproval cmcTrainApproval)
74
+    {
75
+        return toAjax(cmcTrainApprovalService.insertCmcTrainApproval(cmcTrainApproval));
76
+    }
77
+
78
+    /**
79
+     * 修改参培审核
80
+     */
81
+    @Log(title = "参培审核", businessType = BusinessType.UPDATE)
82
+    @PutMapping
83
+    public AjaxResult edit(@RequestBody CmcTrainApproval cmcTrainApproval)
84
+    {
85
+        return toAjax(cmcTrainApprovalService.updateCmcTrainApproval(cmcTrainApproval));
86
+    }
87
+
88
+    /**
89
+     * 删除参培审核
90
+     */
91
+    @Log(title = "参培审核", businessType = BusinessType.DELETE)
92
+	@DeleteMapping("/{participateIds}")
93
+    public AjaxResult remove(@PathVariable String[] participateIds)
94
+    {
95
+        return toAjax(cmcTrainApprovalService.deleteCmcTrainApprovalByParticipateIds(participateIds));
96
+    }
97
+}

+ 4
- 0
oa-back/ruoyi-quartz/pom.xml Näytä tiedosto

@@ -34,6 +34,10 @@
34 34
             <groupId>com.ruoyi</groupId>
35 35
             <artifactId>ruoyi-common</artifactId>
36 36
         </dependency>
37
+        <dependency>
38
+            <groupId>com.ruoyi</groupId>
39
+            <artifactId>ruoyi-system</artifactId>
40
+        </dependency>
37 41
 
38 42
     </dependencies>
39 43
 

+ 11
- 0
oa-back/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java Näytä tiedosto

@@ -1,5 +1,8 @@
1 1
 package com.ruoyi.quartz.task;
2 2
 
3
+import com.ruoyi.common.utils.spring.SpringUtils;
4
+import com.ruoyi.system.service.ISysOperLogService;
5
+import org.springframework.beans.factory.annotation.Autowired;
3 6
 import org.springframework.stereotype.Component;
4 7
 import com.ruoyi.common.utils.StringUtils;
5 8
 
@@ -15,6 +18,9 @@ import java.util.Date;
15 18
 @Component("ryTask")
16 19
 public class RyTask
17 20
 {
21
+    @Autowired
22
+    private ISysOperLogService sysOperLogService;
23
+
18 24
     public void ryMultipleParams(String s, Boolean b, Long l, Double d, Integer i)
19 25
     {
20 26
         System.out.println(StringUtils.format("执行多参方法: 字符串类型{},布尔类型{},长整型{},浮点型{},整形{}", s, b, l, d, i));
@@ -48,4 +54,9 @@ public class RyTask
48 54
         }
49 55
     }
50 56
 
57
+    public void deleteSysOperLog() {
58
+        sysOperLogService.deleteOperLogJob();
59
+        sysOperLogService.deleteOperLogJob();
60
+    }
61
+
51 62
 }

+ 195
- 0
oa-back/ruoyi-system/src/main/java/com/ruoyi/oa/domain/CmcTrainApproval.java Näytä tiedosto

@@ -0,0 +1,195 @@
1
+package com.ruoyi.oa.domain;
2
+
3
+import java.util.Date;
4
+import com.fasterxml.jackson.annotation.JsonFormat;
5
+import com.ruoyi.common.core.domain.entity.SysDept;
6
+import com.ruoyi.common.core.domain.entity.SysUser;
7
+import org.apache.commons.lang3.builder.ToStringBuilder;
8
+import org.apache.commons.lang3.builder.ToStringStyle;
9
+import com.ruoyi.common.annotation.Excel;
10
+import com.ruoyi.common.core.domain.BaseEntity;
11
+
12
+/**
13
+ * 参培审核对象 cmc_train_approval
14
+ * 
15
+ * @author cmc
16
+ * @date 2025-03-04
17
+ */
18
+public class CmcTrainApproval extends BaseEntity
19
+{
20
+    private static final long serialVersionUID = 1L;
21
+
22
+    /** 参培id */
23
+    private String participateId;
24
+
25
+    /** 上报人 */
26
+    private Long userId;
27
+    @Excel(name = "上报人")
28
+    private String reportUserName;
29
+    private SysUser reportUser;
30
+
31
+    /** 上报人部门 */
32
+    private Long deptId;
33
+    @Excel(name = "上报人部门")
34
+    private String deptName;
35
+    private SysDept dept;
36
+
37
+    /** 上报日期 */
38
+    @JsonFormat(pattern = "yyyy-MM-dd")
39
+    @Excel(name = "上报日期", width = 30, dateFormat = "yyyy-MM-dd")
40
+    private Date reportTime;
41
+
42
+    /** 培训名称 */
43
+    @Excel(name = "培训名称")
44
+    private String trainName;
45
+
46
+    /** 主要内容 */
47
+    @Excel(name = "主要内容")
48
+    private String content;
49
+
50
+    /** 时长 */
51
+    @Excel(name = "时长")
52
+    private Double hours;
53
+
54
+    /** 部门审核人 */
55
+    private Long deptUserId;
56
+    @Excel(name = "部门审核人")
57
+    private String deptUserName;
58
+    private SysUser deptUser;
59
+
60
+    /** 部门审核时间 */
61
+    @JsonFormat(pattern = "yyyy-MM-dd")
62
+    @Excel(name = "部门审核时间", width = 30, dateFormat = "yyyy-MM-dd")
63
+    private Date deptTime;
64
+
65
+    /** 部门审核意见 */
66
+    @Excel(name = "部门审核意见")
67
+    private String deptComment;
68
+
69
+    public void setParticipateId(String participateId) 
70
+    {
71
+        this.participateId = participateId;
72
+    }
73
+
74
+    public String getParticipateId() 
75
+    {
76
+        return participateId;
77
+    }
78
+    public void setUserId(Long userId) 
79
+    {
80
+        this.userId = userId;
81
+    }
82
+
83
+    public Long getUserId() 
84
+    {
85
+        return userId;
86
+    }
87
+    public void setReportTime(Date reportTime) 
88
+    {
89
+        this.reportTime = reportTime;
90
+    }
91
+
92
+    public Date getReportTime() 
93
+    {
94
+        return reportTime;
95
+    }
96
+    public void setTrainName(String trainName) 
97
+    {
98
+        this.trainName = trainName;
99
+    }
100
+
101
+    public String getTrainName() 
102
+    {
103
+        return trainName;
104
+    }
105
+    public void setContent(String content) 
106
+    {
107
+        this.content = content;
108
+    }
109
+
110
+    public String getContent() 
111
+    {
112
+        return content;
113
+    }
114
+    public void setHours(Double hours) 
115
+    {
116
+        this.hours = hours;
117
+    }
118
+
119
+    public Double getHours() 
120
+    {
121
+        return hours;
122
+    }
123
+    public void setDeptUserId(Long deptUserId) 
124
+    {
125
+        this.deptUserId = deptUserId;
126
+    }
127
+
128
+    public Long getDeptUserId() 
129
+    {
130
+        return deptUserId;
131
+    }
132
+    public void setDeptTime(Date deptTime) 
133
+    {
134
+        this.deptTime = deptTime;
135
+    }
136
+
137
+    public Date getDeptTime() 
138
+    {
139
+        return deptTime;
140
+    }
141
+    public void setDeptComment(String deptComment) 
142
+    {
143
+        this.deptComment = deptComment;
144
+    }
145
+
146
+    public String getDeptComment() 
147
+    {
148
+        return deptComment;
149
+    }
150
+    public void setReportUser(SysUser reportUser)
151
+    {
152
+        this.reportUser = reportUser;
153
+        this.reportUserName = reportUser == null ? "" : reportUser.getNickName();
154
+    }
155
+
156
+    public SysUser getReportUser()
157
+    {
158
+        return reportUser;
159
+    }
160
+    public void setDeptUser(SysUser deptUser)
161
+    {
162
+        this.deptUser = deptUser;
163
+        this.deptUserName = deptUser == null ? "" : deptUser.getNickName();
164
+    }
165
+
166
+    public SysUser getDeptUser()
167
+    {
168
+        return deptUser;
169
+    }
170
+    public void setDept(SysDept dept)
171
+    {
172
+        this.dept = dept;
173
+        this.deptName = dept == null ? "" : dept.getDeptName();
174
+    }
175
+
176
+    public SysDept getDept()
177
+    {
178
+        return dept;
179
+    }
180
+
181
+    @Override
182
+    public String toString() {
183
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
184
+            .append("participateId", getParticipateId())
185
+            .append("userId", getUserId())
186
+            .append("reportTime", getReportTime())
187
+            .append("trainName", getTrainName())
188
+            .append("content", getContent())
189
+            .append("hours", getHours())
190
+            .append("deptUserId", getDeptUserId())
191
+            .append("deptTime", getDeptTime())
192
+            .append("deptComment", getDeptComment())
193
+            .toString();
194
+    }
195
+}

+ 61
- 0
oa-back/ruoyi-system/src/main/java/com/ruoyi/oa/mapper/CmcTrainApprovalMapper.java Näytä tiedosto

@@ -0,0 +1,61 @@
1
+package com.ruoyi.oa.mapper;
2
+
3
+import java.util.List;
4
+import com.ruoyi.oa.domain.CmcTrainApproval;
5
+
6
+/**
7
+ * 参培审核Mapper接口
8
+ * 
9
+ * @author cmc
10
+ * @date 2025-03-04
11
+ */
12
+public interface CmcTrainApprovalMapper 
13
+{
14
+    /**
15
+     * 查询参培审核
16
+     * 
17
+     * @param participateId 参培审核主键
18
+     * @return 参培审核
19
+     */
20
+    public CmcTrainApproval selectCmcTrainApprovalByParticipateId(String participateId);
21
+
22
+    /**
23
+     * 查询参培审核列表
24
+     * 
25
+     * @param cmcTrainApproval 参培审核
26
+     * @return 参培审核集合
27
+     */
28
+    public List<CmcTrainApproval> selectCmcTrainApprovalList(CmcTrainApproval cmcTrainApproval);
29
+
30
+    /**
31
+     * 新增参培审核
32
+     * 
33
+     * @param cmcTrainApproval 参培审核
34
+     * @return 结果
35
+     */
36
+    public int insertCmcTrainApproval(CmcTrainApproval cmcTrainApproval);
37
+
38
+    /**
39
+     * 修改参培审核
40
+     * 
41
+     * @param cmcTrainApproval 参培审核
42
+     * @return 结果
43
+     */
44
+    public int updateCmcTrainApproval(CmcTrainApproval cmcTrainApproval);
45
+
46
+    /**
47
+     * 删除参培审核
48
+     * 
49
+     * @param participateId 参培审核主键
50
+     * @return 结果
51
+     */
52
+    public int deleteCmcTrainApprovalByParticipateId(String participateId);
53
+
54
+    /**
55
+     * 批量删除参培审核
56
+     * 
57
+     * @param participateIds 需要删除的数据主键集合
58
+     * @return 结果
59
+     */
60
+    public int deleteCmcTrainApprovalByParticipateIds(String[] participateIds);
61
+}

+ 61
- 0
oa-back/ruoyi-system/src/main/java/com/ruoyi/oa/service/ICmcTrainApprovalService.java Näytä tiedosto

@@ -0,0 +1,61 @@
1
+package com.ruoyi.oa.service;
2
+
3
+import java.util.List;
4
+import com.ruoyi.oa.domain.CmcTrainApproval;
5
+
6
+/**
7
+ * 参培审核Service接口
8
+ * 
9
+ * @author cmc
10
+ * @date 2025-03-04
11
+ */
12
+public interface ICmcTrainApprovalService 
13
+{
14
+    /**
15
+     * 查询参培审核
16
+     * 
17
+     * @param participateId 参培审核主键
18
+     * @return 参培审核
19
+     */
20
+    public CmcTrainApproval selectCmcTrainApprovalByParticipateId(String participateId);
21
+
22
+    /**
23
+     * 查询参培审核列表
24
+     * 
25
+     * @param cmcTrainApproval 参培审核
26
+     * @return 参培审核集合
27
+     */
28
+    public List<CmcTrainApproval> selectCmcTrainApprovalList(CmcTrainApproval cmcTrainApproval);
29
+
30
+    /**
31
+     * 新增参培审核
32
+     * 
33
+     * @param cmcTrainApproval 参培审核
34
+     * @return 结果
35
+     */
36
+    public int insertCmcTrainApproval(CmcTrainApproval cmcTrainApproval);
37
+
38
+    /**
39
+     * 修改参培审核
40
+     * 
41
+     * @param cmcTrainApproval 参培审核
42
+     * @return 结果
43
+     */
44
+    public int updateCmcTrainApproval(CmcTrainApproval cmcTrainApproval);
45
+
46
+    /**
47
+     * 批量删除参培审核
48
+     * 
49
+     * @param participateIds 需要删除的参培审核主键集合
50
+     * @return 结果
51
+     */
52
+    public int deleteCmcTrainApprovalByParticipateIds(String[] participateIds);
53
+
54
+    /**
55
+     * 删除参培审核信息
56
+     * 
57
+     * @param participateId 参培审核主键
58
+     * @return 结果
59
+     */
60
+    public int deleteCmcTrainApprovalByParticipateId(String participateId);
61
+}

+ 93
- 0
oa-back/ruoyi-system/src/main/java/com/ruoyi/oa/service/impl/CmcTrainApprovalServiceImpl.java Näytä tiedosto

@@ -0,0 +1,93 @@
1
+package com.ruoyi.oa.service.impl;
2
+
3
+import java.util.List;
4
+import org.springframework.beans.factory.annotation.Autowired;
5
+import org.springframework.stereotype.Service;
6
+import com.ruoyi.oa.mapper.CmcTrainApprovalMapper;
7
+import com.ruoyi.oa.domain.CmcTrainApproval;
8
+import com.ruoyi.oa.service.ICmcTrainApprovalService;
9
+
10
+/**
11
+ * 参培审核Service业务层处理
12
+ * 
13
+ * @author cmc
14
+ * @date 2025-03-04
15
+ */
16
+@Service
17
+public class CmcTrainApprovalServiceImpl implements ICmcTrainApprovalService 
18
+{
19
+    @Autowired
20
+    private CmcTrainApprovalMapper cmcTrainApprovalMapper;
21
+
22
+    /**
23
+     * 查询参培审核
24
+     * 
25
+     * @param participateId 参培审核主键
26
+     * @return 参培审核
27
+     */
28
+    @Override
29
+    public CmcTrainApproval selectCmcTrainApprovalByParticipateId(String participateId)
30
+    {
31
+        return cmcTrainApprovalMapper.selectCmcTrainApprovalByParticipateId(participateId);
32
+    }
33
+
34
+    /**
35
+     * 查询参培审核列表
36
+     * 
37
+     * @param cmcTrainApproval 参培审核
38
+     * @return 参培审核
39
+     */
40
+    @Override
41
+    public List<CmcTrainApproval> selectCmcTrainApprovalList(CmcTrainApproval cmcTrainApproval)
42
+    {
43
+        return cmcTrainApprovalMapper.selectCmcTrainApprovalList(cmcTrainApproval);
44
+    }
45
+
46
+    /**
47
+     * 新增参培审核
48
+     * 
49
+     * @param cmcTrainApproval 参培审核
50
+     * @return 结果
51
+     */
52
+    @Override
53
+    public int insertCmcTrainApproval(CmcTrainApproval cmcTrainApproval)
54
+    {
55
+        return cmcTrainApprovalMapper.insertCmcTrainApproval(cmcTrainApproval);
56
+    }
57
+
58
+    /**
59
+     * 修改参培审核
60
+     * 
61
+     * @param cmcTrainApproval 参培审核
62
+     * @return 结果
63
+     */
64
+    @Override
65
+    public int updateCmcTrainApproval(CmcTrainApproval cmcTrainApproval)
66
+    {
67
+        return cmcTrainApprovalMapper.updateCmcTrainApproval(cmcTrainApproval);
68
+    }
69
+
70
+    /**
71
+     * 批量删除参培审核
72
+     * 
73
+     * @param participateIds 需要删除的参培审核主键
74
+     * @return 结果
75
+     */
76
+    @Override
77
+    public int deleteCmcTrainApprovalByParticipateIds(String[] participateIds)
78
+    {
79
+        return cmcTrainApprovalMapper.deleteCmcTrainApprovalByParticipateIds(participateIds);
80
+    }
81
+
82
+    /**
83
+     * 删除参培审核信息
84
+     * 
85
+     * @param participateId 参培审核主键
86
+     * @return 结果
87
+     */
88
+    @Override
89
+    public int deleteCmcTrainApprovalByParticipateId(String participateId)
90
+    {
91
+        return cmcTrainApprovalMapper.deleteCmcTrainApprovalByParticipateId(participateId);
92
+    }
93
+}

+ 10
- 0
oa-back/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOperLogMapper.java Näytä tiedosto

@@ -41,6 +41,16 @@ public interface SysOperLogMapper
41 41
      */
42 42
     public SysOperLog selectOperLogById(Long operId);
43 43
 
44
+    /**
45
+     * 删除操作日志详细
46
+     */
47
+    public void deleteOperLogJob();
48
+
49
+    /**
50
+     * 删除登录日志详细
51
+     */
52
+    public void deleteLoginInfoJob();
53
+
44 54
     /**
45 55
      * 清空操作日志
46 56
      */

+ 10
- 0
oa-back/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOperLogService.java Näytä tiedosto

@@ -41,6 +41,16 @@ public interface ISysOperLogService
41 41
      */
42 42
     public SysOperLog selectOperLogById(Long operId);
43 43
 
44
+    /**
45
+     * 删除操作日志详细
46
+     */
47
+    public void deleteOperLogJob();
48
+
49
+    /**
50
+     * 删除登录日志详细
51
+     */
52
+    public void deleteLoginInfoJob();
53
+
44 54
     /**
45 55
      * 清空操作日志
46 56
      */

+ 18
- 0
oa-back/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java Näytä tiedosto

@@ -65,6 +65,24 @@ public class SysOperLogServiceImpl implements ISysOperLogService
65 65
         return operLogMapper.selectOperLogById(operId);
66 66
     }
67 67
 
68
+    /**
69
+     * 删除操作日志详细
70
+     */
71
+    @Override
72
+    public void deleteOperLogJob()
73
+    {
74
+        operLogMapper.deleteOperLogJob();
75
+    }
76
+
77
+    /**
78
+     * 删除登录日志详细
79
+     */
80
+    @Override
81
+    public void deleteLoginInfoJob()
82
+    {
83
+        operLogMapper.deleteLoginInfoJob();
84
+    }
85
+
68 86
     /**
69 87
      * 清空操作日志
70 88
      */

+ 119
- 0
oa-back/ruoyi-system/src/main/resources/mapper/oa/CmcTrainApprovalMapper.xml Näytä tiedosto

@@ -0,0 +1,119 @@
1
+<?xml version="1.0" encoding="UTF-8" ?>
2
+<!DOCTYPE mapper
3
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
4
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
5
+<mapper namespace="com.ruoyi.oa.mapper.CmcTrainApprovalMapper">
6
+    
7
+    <resultMap type="CmcTrainApproval" id="CmcTrainApprovalResult">
8
+        <result property="participateId"    column="participate_id"    />
9
+        <result property="userId"    column="user_id"    />
10
+        <result property="deptId"    column="dept_id"    />
11
+        <result property="reportTime"    column="report_time"    />
12
+        <result property="trainName"    column="train_name"    />
13
+        <result property="content"    column="content"    />
14
+        <result property="hours"    column="hours"    />
15
+        <result property="deptUserId"    column="dept_user_id"    />
16
+        <result property="deptTime"    column="dept_time"    />
17
+        <result property="deptComment"    column="dept_comment"    />
18
+        <association property="user"    javaType="SysUser"         resultMap="ReportUserResult" />
19
+        <association property="user"    javaType="SysUser"         resultMap="DeptUserResult" />
20
+        <association property="dept"    javaType="SysDept"         resultMap="SysDeptResult" />
21
+    </resultMap>
22
+
23
+    <resultMap type="SysUser" id="ReportUserResult">
24
+        <result property="userId"    column="user_id"    />
25
+        <result property="nickName"    column="report_nick_name"    />
26
+    </resultMap>
27
+
28
+    <resultMap type="SysUser" id="DeptUserResult">
29
+        <result property="userId"    column="user_id"    />
30
+        <result property="nickName"    column="dept_nick_name"    />
31
+    </resultMap>
32
+
33
+    <resultMap type="SysDept" id="SysDeptResult">
34
+        <result property="deptId"    column="dept_id"    />
35
+        <result property="deptName"    column="dept_name"    />
36
+    </resultMap>
37
+
38
+    <sql id="selectCmcTrainApprovalVo">
39
+        select ta.participate_id, ta.user_id, u.nick_name as report_nick_name, ta.dept_id, d.dept_name, ta.report_time, ta.train_name, ta.content, ta.hours, ta.dept_user_id, u1.nick_name as dept_nick_name, ta.dept_time, ta.dept_comment from cmc_train_approval as ta
40
+        left join sys_user as u on u.user_id = ta.user_id
41
+        left join sys_user as u1 on u1.user_id = ta.user_id
42
+        left join sys_dept as d on d.dept_id = ta.dept_id
43
+    </sql>
44
+
45
+    <select id="selectCmcTrainApprovalList" parameterType="CmcTrainApproval" resultMap="CmcTrainApprovalResult">
46
+        <include refid="selectCmcTrainApprovalVo"/>
47
+        <where>  
48
+            <if test="userId != null "> and ta.user_id = #{userId}</if>
49
+            <if test="deptId != null "> and ta.dept_id = #{deptId}</if>
50
+            <if test="reportTime != null "> and ta.report_time = #{reportTime}</if>
51
+            <if test="trainName != null  and trainName != ''"> and ta.train_name like concat('%', #{trainName}, '%')</if>
52
+            <if test="content != null  and content != ''"> and ta.content = #{content}</if>
53
+            <if test="hours != null "> and ta.hours = #{hours}</if>
54
+            <if test="deptUserId != null "> and ta.dept_user_id = #{deptUserId}</if>
55
+            <if test="deptTime != null "> and ta.dept_time = #{deptTime}</if>
56
+            <if test="deptComment != null  and deptComment != ''"> and ta.dept_comment = #{deptComment}</if>
57
+        </where>
58
+    </select>
59
+    
60
+    <select id="selectCmcTrainApprovalByParticipateId" parameterType="String" resultMap="CmcTrainApprovalResult">
61
+        <include refid="selectCmcTrainApprovalVo"/>
62
+        where participate_id = #{participateId}
63
+    </select>
64
+        
65
+    <insert id="insertCmcTrainApproval" parameterType="CmcTrainApproval">
66
+        insert into cmc_train_approval
67
+        <trim prefix="(" suffix=")" suffixOverrides=",">
68
+            <if test="participateId != null">participate_id,</if>
69
+            <if test="userId != null">user_id,</if>
70
+            <if test="deptId != null">dept_id,</if>
71
+            <if test="reportTime != null">report_time,</if>
72
+            <if test="trainName != null">train_name,</if>
73
+            <if test="content != null">content,</if>
74
+            <if test="hours != null">hours,</if>
75
+            <if test="deptUserId != null">dept_user_id,</if>
76
+            <if test="deptTime != null">dept_time,</if>
77
+            <if test="deptComment != null">dept_comment,</if>
78
+         </trim>
79
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
80
+            <if test="participateId != null">#{participateId},</if>
81
+            <if test="userId != null">#{userId},</if>
82
+            <if test="deptId != null">#{deptId},</if>
83
+            <if test="reportTime != null">#{reportTime},</if>
84
+            <if test="trainName != null">#{trainName},</if>
85
+            <if test="content != null">#{content},</if>
86
+            <if test="hours != null">#{hours},</if>
87
+            <if test="deptUserId != null">#{deptUserId},</if>
88
+            <if test="deptTime != null">#{deptTime},</if>
89
+            <if test="deptComment != null">#{deptComment},</if>
90
+         </trim>
91
+    </insert>
92
+
93
+    <update id="updateCmcTrainApproval" parameterType="CmcTrainApproval">
94
+        update cmc_train_approval
95
+        <trim prefix="SET" suffixOverrides=",">
96
+            <if test="userId != null">user_id = #{userId},</if>
97
+            <if test="deptId != null">dept_id = #{deptId},</if>
98
+            <if test="reportTime != null">report_time = #{reportTime},</if>
99
+            <if test="trainName != null">train_name = #{trainName},</if>
100
+            <if test="content != null">content = #{content},</if>
101
+            <if test="hours != null">hours = #{hours},</if>
102
+            <if test="deptUserId != null">dept_user_id = #{deptUserId},</if>
103
+            <if test="deptTime != null">dept_time = #{deptTime},</if>
104
+            <if test="deptComment != null">dept_comment = #{deptComment},</if>
105
+        </trim>
106
+        where participate_id = #{participateId}
107
+    </update>
108
+
109
+    <delete id="deleteCmcTrainApprovalByParticipateId" parameterType="String">
110
+        delete from cmc_train_approval where participate_id = #{participateId}
111
+    </delete>
112
+
113
+    <delete id="deleteCmcTrainApprovalByParticipateIds" parameterType="String">
114
+        delete from cmc_train_approval where participate_id in 
115
+        <foreach item="participateId" collection="array" open="(" separator="," close=")">
116
+            #{participateId}
117
+        </foreach>
118
+    </delete>
119
+</mapper>

+ 10
- 2
oa-back/ruoyi-system/src/main/resources/mapper/system/SysOperLogMapper.xml Näytä tiedosto

@@ -76,12 +76,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
76 76
  			#{operId}
77 77
         </foreach> 
78 78
  	</delete>
79
- 	
79
+
80 80
  	<select id="selectOperLogById" parameterType="Long" resultMap="SysOperLogResult">
81 81
 		<include refid="selectOperLogVo"/>
82 82
 		where oper_id = #{operId}
83 83
 	</select>
84
-	
84
+
85
+	<delete id="deleteOperLogJob">
86
+		delete from sys_oper_log where oper_time &lt;= date_sub(now(),interval 3 month)
87
+	</delete>
88
+
89
+	<delete id="deleteLoginInfoJob">
90
+		delete from sys_logininfor where login_time &lt;= date_sub(now(),interval 3 month)
91
+	</delete>
92
+
85 93
 	<update id="cleanOperLog">
86 94
         truncate table sys_oper_log
87 95
     </update>

+ 29
- 3
oa-back/sql/sq.sql
File diff suppressed because it is too large
Näytä tiedosto


+ 44
- 0
oa-ui/src/api/oa/study/trainApproval.js Näytä tiedosto

@@ -0,0 +1,44 @@
1
+import request from '@/utils/request'
2
+
3
+// 查询参培审核列表
4
+export function listTrainApproval(query) {
5
+  return request({
6
+    url: '/oa/trainApproval/list',
7
+    method: 'get',
8
+    params: query
9
+  })
10
+}
11
+
12
+// 查询参培审核详细
13
+export function getTrainApproval(participateId) {
14
+  return request({
15
+    url: '/oa/trainApproval/' + participateId,
16
+    method: 'get'
17
+  })
18
+}
19
+
20
+// 新增参培审核
21
+export function addTrainApproval(data) {
22
+  return request({
23
+    url: '/oa/trainApproval',
24
+    method: 'post',
25
+    data: data
26
+  })
27
+}
28
+
29
+// 修改参培审核
30
+export function updateTrainApproval(data) {
31
+  return request({
32
+    url: '/oa/trainApproval',
33
+    method: 'put',
34
+    data: data
35
+  })
36
+}
37
+
38
+// 删除参培审核
39
+export function delTrainApproval(participateId) {
40
+  return request({
41
+    url: '/oa/trainApproval/' + participateId,
42
+    method: 'delete'
43
+  })
44
+}

+ 3
- 3
oa-ui/src/views/index.vue Näytä tiedosto

@@ -1,8 +1,8 @@
1 1
 <!--
2 2
  * @Author: ysh
3 3
  * @Date: 2024-01-03 09:23:11
4
- * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2025-02-27 15:38:19
4
+ * @LastEditors: wrh
5
+ * @LastEditTime: 2025-02-28 09:16:34
6 6
 -->
7 7
 
8 8
 <template>
@@ -235,7 +235,7 @@ export default {
235 235
         },{
236 236
           id: 9,
237 237
           name: '项目结算',
238
-          icon: 'money',
238
+          icon: 'settle',
239 239
           bgColor: '#ff6f61',
240 240
           boxShadow: '0 5px 20px rgba(255,111,97,0.5)',
241 241
           path: '/product/settle/project',

+ 362
- 0
oa-ui/src/views/oa/study/approval.vue Näytä tiedosto

@@ -0,0 +1,362 @@
1
+<template>
2
+  <div class="app-container">
3
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
4
+      <el-form-item label="上报人" prop="userId">
5
+        <el-input
6
+          v-model="queryParams.userId"
7
+          placeholder="请输入上报人"
8
+          clearable
9
+          @keyup.enter.native="handleQuery"
10
+        />
11
+      </el-form-item>
12
+      <el-form-item label="部门" prop="deptId">
13
+        <el-input
14
+            v-model="queryParams.deptId"
15
+            placeholder="请输入部门"
16
+            clearable
17
+            @keyup.enter.native="handleQuery"
18
+          />
19
+      </el-form-item>
20
+      <el-form-item label="上报日期" prop="reportTime">
21
+        <el-date-picker clearable
22
+          v-model="queryParams.reportTime"
23
+          type="date"
24
+          value-format="yyyy-MM-dd"
25
+          placeholder="请选择上报日期">
26
+        </el-date-picker>
27
+      </el-form-item>
28
+      <el-form-item label="培训名称" prop="trainName">
29
+        <el-input
30
+          v-model="queryParams.trainName"
31
+          placeholder="请输入培训名称"
32
+          clearable
33
+          @keyup.enter.native="handleQuery"
34
+        />
35
+      </el-form-item>
36
+      <el-form-item label="时长" prop="hours">
37
+        <el-input
38
+          v-model="queryParams.hours"
39
+          placeholder="请输入时长"
40
+          clearable
41
+          @keyup.enter.native="handleQuery"
42
+        />
43
+      </el-form-item>
44
+      <el-form-item label="部门审核人" prop="deptUserId">
45
+        <el-input
46
+          v-model="queryParams.deptUserId"
47
+          placeholder="请输入部门审核人"
48
+          clearable
49
+          @keyup.enter.native="handleQuery"
50
+        />
51
+      </el-form-item>
52
+      <el-form-item label="部门审核时间" prop="deptTime">
53
+        <el-date-picker clearable
54
+          v-model="queryParams.deptTime"
55
+          type="date"
56
+          value-format="yyyy-MM-dd"
57
+          placeholder="请选择部门审核时间">
58
+        </el-date-picker>
59
+      </el-form-item>
60
+      <el-form-item label="部门审核意见" prop="deptComment">
61
+        <el-input
62
+          v-model="queryParams.deptComment"
63
+          placeholder="请输入部门审核意见"
64
+          clearable
65
+          @keyup.enter.native="handleQuery"
66
+        />
67
+      </el-form-item>
68
+      <el-form-item>
69
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
70
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
71
+      </el-form-item>
72
+    </el-form>
73
+
74
+    <el-row :gutter="10" class="mb8">
75
+      <el-col :span="1.5">
76
+        <el-button
77
+          type="primary"
78
+          plain
79
+          icon="el-icon-plus"
80
+          size="mini"
81
+          @click="handleAdd"
82
+          v-hasPermi="['oa:trainApproval:add']"
83
+        >新增</el-button>
84
+      </el-col>
85
+      <el-col :span="1.5">
86
+        <el-button
87
+          type="success"
88
+          plain
89
+          icon="el-icon-edit"
90
+          size="mini"
91
+          :disabled="single"
92
+          @click="handleUpdate"
93
+          v-hasPermi="['oa:trainApproval:edit']"
94
+        >修改</el-button>
95
+      </el-col>
96
+      <el-col :span="1.5">
97
+        <el-button
98
+          type="danger"
99
+          plain
100
+          icon="el-icon-delete"
101
+          size="mini"
102
+          :disabled="multiple"
103
+          @click="handleDelete"
104
+          v-hasPermi="['oa:trainApproval:remove']"
105
+        >删除</el-button>
106
+      </el-col>
107
+      <el-col :span="1.5">
108
+        <el-button
109
+          type="warning"
110
+          plain
111
+          icon="el-icon-download"
112
+          size="mini"
113
+          @click="handleExport"
114
+          v-hasPermi="['oa:trainApproval:export']"
115
+        >导出</el-button>
116
+      </el-col>
117
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
118
+    </el-row>
119
+
120
+    <el-table v-loading="loading" :data="trainApprovalList" @selection-change="handleSelectionChange">
121
+      <el-table-column type="selection" width="55" align="center" />
122
+      <el-table-column label="参培id" align="center" prop="participateId" />
123
+      <el-table-column label="上报人" align="center" prop="userId" />
124
+      <el-table-column label="部门" align="center" prop="deptId" />
125
+      <el-table-column label="上报日期" align="center" prop="reportTime" width="180">
126
+        <template slot-scope="scope">
127
+          <span>{{ parseTime(scope.row.reportTime, '{y}-{m}-{d}') }}</span>
128
+        </template>
129
+      </el-table-column>
130
+      <el-table-column label="培训名称" align="center" prop="trainName" />
131
+      <el-table-column label="主要内容" align="center" prop="content" />
132
+      <el-table-column label="时长" align="center" prop="hours" />
133
+      <el-table-column label="部门审核人" align="center" prop="deptUserId" />
134
+      <el-table-column label="部门审核时间" align="center" prop="deptTime" width="180">
135
+        <template slot-scope="scope">
136
+          <span>{{ parseTime(scope.row.deptTime, '{y}-{m}-{d}') }}</span>
137
+        </template>
138
+      </el-table-column>
139
+      <el-table-column label="部门审核意见" align="center" prop="deptComment" />
140
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
141
+        <template slot-scope="scope">
142
+          <el-button
143
+            size="mini"
144
+            type="text"
145
+            icon="el-icon-edit"
146
+            @click="handleUpdate(scope.row)"
147
+            v-hasPermi="['oa:trainApproval:edit']"
148
+          >修改</el-button>
149
+          <el-button
150
+            size="mini"
151
+            type="text"
152
+            icon="el-icon-delete"
153
+            @click="handleDelete(scope.row)"
154
+            v-hasPermi="['oa:trainApproval:remove']"
155
+          >删除</el-button>
156
+        </template>
157
+      </el-table-column>
158
+    </el-table>
159
+    
160
+    <pagination
161
+      v-show="total>0"
162
+      :total="total"
163
+      :page.sync="queryParams.pageNum"
164
+      :limit.sync="queryParams.pageSize"
165
+      @pagination="getList"
166
+    />
167
+
168
+    <!-- 添加或修改参培审核对话框 -->
169
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
170
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
171
+        <el-form-item label="上报人" prop="userId">
172
+          <el-input v-model="form.userId" placeholder="请输入上报人" />
173
+        </el-form-item>
174
+        <el-form-item label="上报日期" prop="reportTime">
175
+          <el-date-picker clearable
176
+            v-model="form.reportTime"
177
+            type="date"
178
+            value-format="yyyy-MM-dd"
179
+            placeholder="请选择上报日期">
180
+          </el-date-picker>
181
+        </el-form-item>
182
+        <el-form-item label="培训名称" prop="trainName">
183
+          <el-input v-model="form.trainName" placeholder="请输入培训名称" />
184
+        </el-form-item>
185
+        <el-form-item label="主要内容">
186
+          <editor v-model="form.content" :min-height="192"/>
187
+        </el-form-item>
188
+        <el-form-item label="时长" prop="hours">
189
+          <el-input v-model="form.hours" placeholder="请输入时长" />
190
+        </el-form-item>
191
+        <el-form-item label="部门审核人" prop="deptUserId">
192
+          <el-input v-model="form.deptUserId" placeholder="请输入部门审核人" />
193
+        </el-form-item>
194
+        <el-form-item label="部门审核时间" prop="deptTime">
195
+          <el-date-picker clearable
196
+            v-model="form.deptTime"
197
+            type="date"
198
+            value-format="yyyy-MM-dd"
199
+            placeholder="请选择部门审核时间">
200
+          </el-date-picker>
201
+        </el-form-item>
202
+        <el-form-item label="部门审核意见" prop="deptComment">
203
+          <el-input v-model="form.deptComment" placeholder="请输入部门审核意见" />
204
+        </el-form-item>
205
+      </el-form>
206
+      <div slot="footer" class="dialog-footer">
207
+        <el-button type="primary" @click="submitForm">确 定</el-button>
208
+        <el-button @click="cancel">取 消</el-button>
209
+      </div>
210
+    </el-dialog>
211
+  </div>
212
+</template>
213
+
214
+<script>
215
+import { listTrainApproval, getTrainApproval, delTrainApproval, addTrainApproval, updateTrainApproval } from "@/api/oa/study/trainApproval";
216
+
217
+export default {
218
+  name: "TrainApproval",
219
+  data() {
220
+    return {
221
+      // 遮罩层
222
+      loading: true,
223
+      // 选中数组
224
+      ids: [],
225
+      // 非单个禁用
226
+      single: true,
227
+      // 非多个禁用
228
+      multiple: true,
229
+      // 显示搜索条件
230
+      showSearch: true,
231
+      // 总条数
232
+      total: 0,
233
+      // 参培审核表格数据
234
+      trainApprovalList: [],
235
+      // 弹出层标题
236
+      title: "",
237
+      // 是否显示弹出层
238
+      open: false,
239
+      // 查询参数
240
+      queryParams: {
241
+        pageNum: 1,
242
+        pageSize: 10,
243
+        userId: null,
244
+        reportTime: null,
245
+        trainName: null,
246
+        content: null,
247
+        hours: null,
248
+        deptUserId: null,
249
+        deptTime: null,
250
+        deptComment: null
251
+      },
252
+      // 表单参数
253
+      form: {},
254
+      // 表单校验
255
+      rules: {
256
+      }
257
+    };
258
+  },
259
+  created() {
260
+    this.getList();
261
+  },
262
+  methods: {
263
+    /** 查询参培审核列表 */
264
+    getList() {
265
+      this.loading = true;
266
+      listTrainApproval(this.queryParams).then(response => {
267
+        this.trainApprovalList = response.rows;
268
+        this.total = response.total;
269
+        this.loading = false;
270
+      });
271
+    },
272
+    // 取消按钮
273
+    cancel() {
274
+      this.open = false;
275
+      this.reset();
276
+    },
277
+    // 表单重置
278
+    reset() {
279
+      this.form = {
280
+        participateId: null,
281
+        userId: null,
282
+        reportTime: null,
283
+        trainName: null,
284
+        content: null,
285
+        hours: null,
286
+        deptUserId: null,
287
+        deptTime: null,
288
+        deptComment: null
289
+      };
290
+      this.resetForm("form");
291
+    },
292
+    /** 搜索按钮操作 */
293
+    handleQuery() {
294
+      this.queryParams.pageNum = 1;
295
+      this.getList();
296
+    },
297
+    /** 重置按钮操作 */
298
+    resetQuery() {
299
+      this.resetForm("queryForm");
300
+      this.handleQuery();
301
+    },
302
+    // 多选框选中数据
303
+    handleSelectionChange(selection) {
304
+      this.ids = selection.map(item => item.participateId)
305
+      this.single = selection.length!==1
306
+      this.multiple = !selection.length
307
+    },
308
+    /** 新增按钮操作 */
309
+    handleAdd() {
310
+      this.reset();
311
+      this.open = true;
312
+      this.title = "添加参培审核";
313
+    },
314
+    /** 修改按钮操作 */
315
+    handleUpdate(row) {
316
+      this.reset();
317
+      const participateId = row.participateId || this.ids
318
+      getTrainApproval(participateId).then(response => {
319
+        this.form = response.data;
320
+        this.open = true;
321
+        this.title = "修改参培审核";
322
+      });
323
+    },
324
+    /** 提交按钮 */
325
+    submitForm() {
326
+      this.$refs["form"].validate(valid => {
327
+        if (valid) {
328
+          if (this.form.participateId != null) {
329
+            updateTrainApproval(this.form).then(response => {
330
+              this.$modal.msgSuccess("修改成功");
331
+              this.open = false;
332
+              this.getList();
333
+            });
334
+          } else {
335
+            addTrainApproval(this.form).then(response => {
336
+              this.$modal.msgSuccess("新增成功");
337
+              this.open = false;
338
+              this.getList();
339
+            });
340
+          }
341
+        }
342
+      });
343
+    },
344
+    /** 删除按钮操作 */
345
+    handleDelete(row) {
346
+      const participateIds = row.participateId || this.ids;
347
+      this.$modal.confirm('是否确认删除参培审核编号为"' + participateIds + '"的数据项?').then(function() {
348
+        return delTrainApproval(participateIds);
349
+      }).then(() => {
350
+        this.getList();
351
+        this.$modal.msgSuccess("删除成功");
352
+      }).catch(() => {});
353
+    },
354
+    /** 导出按钮操作 */
355
+    handleExport() {
356
+      this.download('oa/trainApproval/export', {
357
+        ...this.queryParams
358
+      }, `trainApproval_${new Date().getTime()}.xlsx`)
359
+    }
360
+  }
361
+};
362
+</script>

Loading…
Peruuta
Tallenna