|
|
@@ -2,19 +2,20 @@ package com.sundot.airport.ledger.service.impl;
|
|
2
|
2
|
|
|
3
|
3
|
import com.sundot.airport.common.core.domain.entity.SysDept;
|
|
4
|
4
|
import com.sundot.airport.common.core.domain.entity.SysUser;
|
|
5
|
|
-import com.sundot.airport.ledger.domain.LedgerBannerLetter;
|
|
6
|
5
|
import com.sundot.airport.ledger.domain.LedgerExamScore;
|
|
7
|
|
-import com.sundot.airport.ledger.domain.LedgerTerminalBonus;
|
|
8
|
6
|
import com.sundot.airport.ledger.domain.ScoreDimension;
|
|
9
|
7
|
import com.sundot.airport.ledger.domain.ScoreEvent;
|
|
10
|
8
|
import com.sundot.airport.ledger.domain.vo.EmployeePortraitVO;
|
|
11
|
|
-import com.sundot.airport.ledger.mapper.LedgerBannerLetterMapper;
|
|
12
|
9
|
import com.sundot.airport.ledger.mapper.LedgerExamScoreMapper;
|
|
13
|
|
-import com.sundot.airport.ledger.mapper.LedgerTerminalBonusMapper;
|
|
|
10
|
+import com.sundot.airport.ledger.mapper.LedgerSeizureStatsMapper;
|
|
14
|
11
|
import com.sundot.airport.ledger.mapper.ScoreDimensionMapper;
|
|
15
|
12
|
import com.sundot.airport.ledger.mapper.ScoreEventMapper;
|
|
16
|
13
|
import com.sundot.airport.ledger.service.IEmployeePortraitService;
|
|
|
14
|
+import com.sundot.airport.system.domain.SysPost;
|
|
|
15
|
+import com.sundot.airport.common.core.domain.entity.SysRole;
|
|
17
|
16
|
import com.sundot.airport.system.mapper.SysDeptMapper;
|
|
|
17
|
+import com.sundot.airport.system.mapper.SysPostMapper;
|
|
|
18
|
+import com.sundot.airport.system.mapper.SysRoleMapper;
|
|
18
|
19
|
import com.sundot.airport.system.mapper.SysUserMapper;
|
|
19
|
20
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
20
|
21
|
import org.springframework.stereotype.Service;
|
|
|
@@ -34,6 +35,12 @@ public class EmployeePortraitServiceImpl implements IEmployeePortraitService {
|
|
34
|
35
|
private SysDeptMapper sysDeptMapper;
|
|
35
|
36
|
|
|
36
|
37
|
@Autowired
|
|
|
38
|
+ private SysRoleMapper sysRoleMapper;
|
|
|
39
|
+
|
|
|
40
|
+ @Autowired
|
|
|
41
|
+ private SysPostMapper sysPostMapper;
|
|
|
42
|
+
|
|
|
43
|
+ @Autowired
|
|
37
|
44
|
private ScoreEventMapper scoreEventMapper;
|
|
38
|
45
|
|
|
39
|
46
|
@Autowired
|
|
|
@@ -43,10 +50,7 @@ public class EmployeePortraitServiceImpl implements IEmployeePortraitService {
|
|
43
|
50
|
private LedgerExamScoreMapper ledgerExamScoreMapper;
|
|
44
|
51
|
|
|
45
|
52
|
@Autowired
|
|
46
|
|
- private LedgerBannerLetterMapper ledgerBannerLetterMapper;
|
|
47
|
|
-
|
|
48
|
|
- @Autowired
|
|
49
|
|
- private LedgerTerminalBonusMapper ledgerTerminalBonusMapper;
|
|
|
53
|
+ private LedgerSeizureStatsMapper ledgerSeizureStatsMapper;
|
|
50
|
54
|
|
|
51
|
55
|
// ── 搜索员工 ─────────────────────────────────────────────────────────────
|
|
52
|
56
|
|
|
|
@@ -85,9 +89,16 @@ public class EmployeePortraitServiceImpl implements IEmployeePortraitService {
|
|
85
|
89
|
// 3. 最新考试成绩
|
|
86
|
90
|
fillExamScore(vo, personName);
|
|
87
|
91
|
|
|
88
|
|
- // 4. 获奖记录(锦旗/感谢信 + 航站楼加分)
|
|
|
92
|
+ // 4. 获奖记录
|
|
89
|
93
|
fillAwards(vo, personName);
|
|
90
|
94
|
|
|
|
95
|
+ // 5. 配分明细(全量加减分)
|
|
|
96
|
+ fillScoreDetails(vo, personName, beginTime, endTime);
|
|
|
97
|
+
|
|
|
98
|
+ // 6. 质控情况
|
|
|
99
|
+ int qcCount = ledgerSeizureStatsMapper.countByInspectorAndDateRange(personName, beginTime, endTime);
|
|
|
100
|
+ vo.setQualityControlCount(qcCount);
|
|
|
101
|
+
|
|
91
|
102
|
return vo;
|
|
92
|
103
|
}
|
|
93
|
104
|
|
|
|
@@ -127,6 +138,33 @@ public class EmployeePortraitServiceImpl implements IEmployeePortraitService {
|
|
127
|
138
|
vo.setSecurityCheckYears((int) ((nowMs - user.getSecurityCheckStartDate().getTime()) / (365L * 24 * 3600 * 1000)));
|
|
128
|
139
|
}
|
|
129
|
140
|
|
|
|
141
|
+ // 出生日期(从18位身份证第7~14位提取)
|
|
|
142
|
+ String card = user.getCardNumber();
|
|
|
143
|
+ if (card != null && card.length() >= 14) {
|
|
|
144
|
+ String bd = card.substring(6, 14);
|
|
|
145
|
+ vo.setBirthday(bd.substring(0, 4) + "-" + bd.substring(4, 6) + "-" + bd.substring(6, 8));
|
|
|
146
|
+ }
|
|
|
147
|
+
|
|
|
148
|
+ // 职务(sys_role)
|
|
|
149
|
+ List<SysRole> roles = sysRoleMapper.selectRolesByUserName(user.getUserName());
|
|
|
150
|
+ if (roles != null && !roles.isEmpty()) {
|
|
|
151
|
+ String rn = roles.stream()
|
|
|
152
|
+ .map(SysRole::getRoleName)
|
|
|
153
|
+ .filter(s -> s != null && !s.isEmpty())
|
|
|
154
|
+ .collect(Collectors.joining("、"));
|
|
|
155
|
+ vo.setRoleNames(rn);
|
|
|
156
|
+ }
|
|
|
157
|
+
|
|
|
158
|
+ // 岗位(sys_post)
|
|
|
159
|
+ List<SysPost> posts = sysPostMapper.selectPostsByUserName(user.getUserName());
|
|
|
160
|
+ if (posts != null && !posts.isEmpty()) {
|
|
|
161
|
+ String pn = posts.stream()
|
|
|
162
|
+ .map(SysPost::getPostName)
|
|
|
163
|
+ .filter(s -> s != null && !s.isEmpty())
|
|
|
164
|
+ .collect(Collectors.joining("、"));
|
|
|
165
|
+ vo.setPostNames(pn);
|
|
|
166
|
+ }
|
|
|
167
|
+
|
|
130
|
168
|
// 部门路径
|
|
131
|
169
|
if (user.getDept() != null) {
|
|
132
|
170
|
String deptName = user.getDept().getDeptName();
|
|
|
@@ -225,40 +263,57 @@ public class EmployeePortraitServiceImpl implements IEmployeePortraitService {
|
|
225
|
263
|
|
|
226
|
264
|
// ── 获奖记录 ──────────────────────────────────────────────────────────────
|
|
227
|
265
|
|
|
228
|
|
- private void fillAwards(EmployeePortraitVO vo, String personName) {
|
|
229
|
|
- List<EmployeePortraitVO.AwardRecord> awards = new ArrayList<>();
|
|
|
266
|
+ private void fillScoreDetails(EmployeePortraitVO vo, String personName, String beginTime, String endTime) {
|
|
|
267
|
+ ScoreEvent eq = new ScoreEvent();
|
|
|
268
|
+ eq.setPersonName(personName);
|
|
|
269
|
+ if (beginTime != null && !beginTime.isEmpty()) eq.getParams().put("beginTime", beginTime);
|
|
|
270
|
+ if (endTime != null && !endTime.isEmpty()) eq.getParams().put("endTime", endTime);
|
|
|
271
|
+ List<ScoreEvent> events = scoreEventMapper.selectList(eq);
|
|
230
|
272
|
|
|
231
|
|
- // 锦旗及感谢信
|
|
232
|
|
- LedgerBannerLetter bq = new LedgerBannerLetter();
|
|
233
|
|
- bq.setPersonName(personName);
|
|
234
|
|
- for (LedgerBannerLetter b : ledgerBannerLetterMapper.selectList(bq)) {
|
|
235
|
|
- EmployeePortraitVO.AwardRecord ar = new EmployeePortraitVO.AwardRecord();
|
|
236
|
|
- ar.setType("1".equals(b.getType()) ? "锦旗" : "感谢信");
|
|
237
|
|
- ar.setContent(b.getContentDesc());
|
|
238
|
|
- ar.setScore(b.getAddScore());
|
|
239
|
|
- ar.setDate(b.getRecordDate());
|
|
240
|
|
- awards.add(ar);
|
|
|
273
|
+ List<EmployeePortraitVO.ScoreDetail> details = new ArrayList<>();
|
|
|
274
|
+ for (ScoreEvent e : events) {
|
|
|
275
|
+ String raw = e.getPersonName();
|
|
|
276
|
+ if (raw == null) continue;
|
|
|
277
|
+ boolean matched = false;
|
|
|
278
|
+ for (String n : raw.split("[,,]")) {
|
|
|
279
|
+ if (personName.equals(n.trim())) { matched = true; break; }
|
|
|
280
|
+ }
|
|
|
281
|
+ if (!matched) continue;
|
|
|
282
|
+
|
|
|
283
|
+ EmployeePortraitVO.ScoreDetail d = new EmployeePortraitVO.ScoreDetail();
|
|
|
284
|
+ d.setDimensionName(e.getDimensionName());
|
|
|
285
|
+ d.setLevel2Name(e.getLevel2Name());
|
|
|
286
|
+ d.setLevel3Name(e.getLevel3Name());
|
|
|
287
|
+ d.setTotalScore(e.getTotalScore());
|
|
|
288
|
+ details.add(d);
|
|
241
|
289
|
}
|
|
|
290
|
+ vo.setScoreDetails(details);
|
|
|
291
|
+ }
|
|
|
292
|
+
|
|
|
293
|
+ private void fillAwards(EmployeePortraitVO vo, String personName) {
|
|
|
294
|
+ // 群团协作能力 dimension_id = 5
|
|
|
295
|
+ ScoreEvent eq = new ScoreEvent();
|
|
|
296
|
+ eq.setPersonName(personName);
|
|
|
297
|
+ eq.setDimensionId(5L);
|
|
|
298
|
+ List<ScoreEvent> events = scoreEventMapper.selectList(eq);
|
|
|
299
|
+
|
|
|
300
|
+ List<EmployeePortraitVO.AwardRecord> awards = new ArrayList<>();
|
|
|
301
|
+ for (ScoreEvent e : events) {
|
|
|
302
|
+ String raw = e.getPersonName();
|
|
|
303
|
+ if (raw == null) continue;
|
|
|
304
|
+ boolean matched = false;
|
|
|
305
|
+ for (String n : raw.split("[,,]")) {
|
|
|
306
|
+ if (personName.equals(n.trim())) { matched = true; break; }
|
|
|
307
|
+ }
|
|
|
308
|
+ if (!matched) continue;
|
|
242
|
309
|
|
|
243
|
|
- // 航站楼加分
|
|
244
|
|
- LedgerTerminalBonus tq = new LedgerTerminalBonus();
|
|
245
|
|
- tq.setPersonName(personName);
|
|
246
|
|
- for (LedgerTerminalBonus t : ledgerTerminalBonusMapper.selectList(tq)) {
|
|
247
|
310
|
EmployeePortraitVO.AwardRecord ar = new EmployeePortraitVO.AwardRecord();
|
|
248
|
|
- ar.setType("航站楼加分");
|
|
249
|
|
- ar.setContent(t.getBonusType());
|
|
250
|
|
- ar.setScore(t.getAddScore());
|
|
251
|
|
- ar.setDate(t.getApproveDate());
|
|
|
311
|
+ ar.setLevel3Name(e.getLevel3Name());
|
|
|
312
|
+ ar.setLevel2Name(e.getLevel2Name());
|
|
|
313
|
+ ar.setLevel4Name(e.getLevel4Name());
|
|
|
314
|
+ ar.setScore(e.getTotalScore());
|
|
252
|
315
|
awards.add(ar);
|
|
253
|
316
|
}
|
|
254
|
|
-
|
|
255
|
|
- // 按日期降序
|
|
256
|
|
- awards.sort((a, b) -> {
|
|
257
|
|
- if (a.getDate() == null) return 1;
|
|
258
|
|
- if (b.getDate() == null) return -1;
|
|
259
|
|
- return b.getDate().compareTo(a.getDate());
|
|
260
|
|
- });
|
|
261
|
|
-
|
|
262
|
317
|
vo.setAwards(awards);
|
|
263
|
318
|
}
|
|
264
|
319
|
|