Bladeren bron

查询人事绩效用户列表

chenshudong 1 maand geleden
bovenliggende
commit
2ed511f49a

+ 10 - 0
airport-admin/src/main/java/com/sundot/airport/web/controller/system/SysUserController.java

@@ -20,6 +20,7 @@ import com.sundot.airport.check.domain.CheckLargeScreenCorrectionQueryParamDto;
20 20
 import com.sundot.airport.common.core.domain.ResetUserPostDto;
21 21
 import com.sundot.airport.common.core.domain.ResetUserRoleDto;
22 22
 import com.sundot.airport.common.core.domain.SysLargeScreenWorkingPortraitDto;
23
+import com.sundot.airport.common.dto.SysPersonnelUserConditionDto;
23 24
 import com.sundot.airport.common.dto.SysUserConditionDto;
24 25
 import com.sundot.airport.common.dto.SysUserLeaderConditionDto;
25 26
 import com.sundot.airport.common.enums.RoleTypeEnum;
@@ -161,6 +162,15 @@ public class SysUserController extends BaseController {
161 162
     }
162 163
 
163 164
     /**
165
+     * 查询人事绩效用户列表
166
+     */
167
+    @PostMapping("/selectPersonnelUserList")
168
+    public AjaxResult selectPersonnelUserList(@RequestBody SysPersonnelUserConditionDto dto) {
169
+        List<SysUser> result = userService.selectPersonnelUserList(dto);
170
+        return success(result);
171
+    }
172
+
173
+    /**
164 174
      * 能力画像-协同配合
165 175
      */
166 176
     @Cacheable(

+ 52 - 0
airport-common/src/main/java/com/sundot/airport/common/dto/SysPersonnelUserConditionDto.java

@@ -0,0 +1,52 @@
1
+package com.sundot.airport.common.dto;
2
+
3
+import lombok.Data;
4
+
5
+import java.util.Date;
6
+import java.util.List;
7
+
8
+/**
9
+ * 查询用户列表参数
10
+ *
11
+ * @Author: wangchong
12
+ * @Date: 2025/7/15 16:12
13
+ **/
14
+@Data
15
+public class SysPersonnelUserConditionDto {
16
+
17
+    /**
18
+     * 部门id
19
+     */
20
+    private Long deptId;
21
+
22
+    /**
23
+     * 角色编码列表
24
+     */
25
+    private List<String> roleKeyList;
26
+
27
+    /**
28
+     * 用工形式列表
29
+     */
30
+    private List<String> employmentTypeList;
31
+
32
+    /**
33
+     * 用户昵称
34
+     */
35
+    private String nickName;
36
+
37
+    /**
38
+     * 月份值(yyyyMM)
39
+     */
40
+    private String month;
41
+
42
+    /**
43
+     * 月份开始时间
44
+     */
45
+    private Date monthStartTime;
46
+
47
+    /**
48
+     * 月份结束时间
49
+     */
50
+    private Date monthEndTime;
51
+
52
+}

+ 83 - 0
airport-common/src/main/java/com/sundot/airport/common/utils/MonthUtils.java

@@ -1,8 +1,12 @@
1 1
 package com.sundot.airport.common.utils;
2 2
 
3
+import java.text.ParseException;
4
+import java.text.SimpleDateFormat;
3 5
 import java.time.YearMonth;
4 6
 import java.time.format.DateTimeFormatter;
5 7
 import java.util.ArrayList;
8
+import java.util.Calendar;
9
+import java.util.Date;
6 10
 import java.util.List;
7 11
 
8 12
 /**
@@ -236,4 +240,83 @@ public class MonthUtils {
236 240
         }
237 241
     }
238 242
 
243
+
244
+    /**
245
+     * 获取指定月份的第一天开始时间(yyyy-MM-dd 00:00:00)
246
+     * @param yearMonth 月份字符串,格式 yyyyMM
247
+     * @return 开始时间的 Date 对象
248
+     */
249
+    public static Date getMonthStartTime(String yearMonth) {
250
+        try {
251
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM");
252
+            Date date = sdf.parse(yearMonth);
253
+
254
+            Calendar calendar = Calendar.getInstance();
255
+            calendar.setTime(date);
256
+            calendar.set(Calendar.DAY_OF_MONTH, 1);
257
+            calendar.set(Calendar.HOUR_OF_DAY, 0);
258
+            calendar.set(Calendar.MINUTE, 0);
259
+            calendar.set(Calendar.SECOND, 0);
260
+            calendar.set(Calendar.MILLISECOND, 0);
261
+
262
+            return calendar.getTime();
263
+        } catch (ParseException e) {
264
+            throw new IllegalArgumentException("月份格式无效,请使用【yyyyMM】格式");
265
+        }
266
+    }
267
+
268
+    /**
269
+     * 获取指定月份的最后一天开始时间(yyyy-MM-dd 00:00:00)
270
+     * @param yearMonth 月份字符串,格式 yyyyMM
271
+     * @return 最后一天开始时间的 Date 对象
272
+     */
273
+    public static Date getMonthLastDayStartTime(String yearMonth) {
274
+        try {
275
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM");
276
+            Date date = sdf.parse(yearMonth);
277
+
278
+            Calendar calendar = Calendar.getInstance();
279
+            calendar.setTime(date);
280
+            // 获取该月的最大天数
281
+            int lastDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
282
+            calendar.set(Calendar.DAY_OF_MONTH, lastDay);
283
+            calendar.set(Calendar.HOUR_OF_DAY, 0);
284
+            calendar.set(Calendar.MINUTE, 0);
285
+            calendar.set(Calendar.SECOND, 0);
286
+            calendar.set(Calendar.MILLISECOND, 0);
287
+
288
+            return calendar.getTime();
289
+        } catch (ParseException e) {
290
+            throw new IllegalArgumentException("Invalid month format. Please use yyyyMM.");
291
+        }
292
+    }
293
+
294
+    /**
295
+     * 获取指定月份的最后一天结束时间(yyyy-MM-dd 23:59:59)
296
+     * @param yearMonth 月份字符串,格式 yyyyMM
297
+     * @return 结束时间的 Date 对象
298
+     */
299
+    public static Date getMonthEndTime(String yearMonth) {
300
+        try {
301
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM");
302
+            Date date = sdf.parse(yearMonth);
303
+
304
+            Calendar calendar = Calendar.getInstance();
305
+            calendar.setTime(date);
306
+            // 设置为下个月第一天
307
+            calendar.add(Calendar.MONTH, 1);
308
+            calendar.set(Calendar.DAY_OF_MONTH, 1);
309
+            calendar.set(Calendar.HOUR_OF_DAY, 0);
310
+            calendar.set(Calendar.MINUTE, 0);
311
+            calendar.set(Calendar.SECOND, 0);
312
+            calendar.set(Calendar.MILLISECOND, 0);
313
+            // 减去一秒得到当月最后一秒
314
+            calendar.add(Calendar.SECOND, -1);
315
+
316
+            return calendar.getTime();
317
+        } catch (ParseException e) {
318
+            throw new IllegalArgumentException("月份格式无效,请使用【yyyyMM】格式");
319
+        }
320
+    }
321
+
239 322
 }

+ 14 - 0
airport-system/src/main/java/com/sundot/airport/system/mapper/SysUserMapper.java

@@ -1,5 +1,6 @@
1 1
 package com.sundot.airport.system.mapper;
2 2
 
3
+import java.util.Date;
3 4
 import java.util.List;
4 5
 
5 6
 import com.sundot.airport.common.core.domain.LargeScreenHomePageUserInfoSqlDto;
@@ -240,6 +241,19 @@ public interface SysUserMapper {
240 241
     public List<SysUser> selectUserListByDeptIdAndRoleKeyListAndUserName(@Param("deptId") Long deptId, @Param("list") List<String> list, @Param("nickName") String nickName);
241 242
 
242 243
     /**
244
+     * 查询人事绩效用户列表
245
+     *
246
+     * @param nickName 用户昵称
247
+     * @return 用户信息集合
248
+     */
249
+    public List<SysUser> selectPersonnelUserList(@Param("deptId") Long deptId,
250
+                                                 @Param("roleKeyList") List<String> roleKeyList,
251
+                                                 @Param("employmentTypeList") List<String> employmentTypeList,
252
+                                                 @Param("monthStartTime") Date monthStartTime,
253
+                                                 @Param("monthEndTime") Date monthEndTime,
254
+                                                 @Param("nickName") String nickName);
255
+
256
+    /**
243 257
      * 首页 - 用户信息(按大队 ID 筛选)
244 258
      *
245 259
      * @param brigadeId 大队 ID

+ 9 - 0
airport-system/src/main/java/com/sundot/airport/system/service/ISysUserService.java

@@ -7,6 +7,7 @@ import com.sundot.airport.common.core.domain.LargeScreenHomePageUserInfoSqlDto;
7 7
 import com.sundot.airport.common.core.domain.ResetUserPostDto;
8 8
 import com.sundot.airport.common.core.domain.ResetUserRoleDto;
9 9
 import com.sundot.airport.common.core.domain.entity.SysUser;
10
+import com.sundot.airport.common.dto.SysPersonnelUserConditionDto;
10 11
 import com.sundot.airport.common.dto.SysUserConditionDto;
11 12
 import com.sundot.airport.common.dto.SysUserLeaderConditionDto;
12 13
 import com.sundot.airport.system.domain.SysLargeScreenCooperationDto;
@@ -331,6 +332,14 @@ public interface ISysUserService {
331 332
     public List<SysUser> selectUserListByDeptIdAndRoleKeyListAndUserName(SysUserConditionDto dto);
332 333
 
333 334
     /**
335
+     * 查询人事绩效用户列表
336
+     *
337
+     * @param dto 查询用户列表参数
338
+     * @return 用户信息集合
339
+     */
340
+    public List<SysUser> selectPersonnelUserList(SysPersonnelUserConditionDto dto);
341
+
342
+    /**
334 343
      * 首页 - 用户信息(按大队 ID 筛选)
335 344
      *
336 345
      * @param brigadeId 大队 ID

+ 36 - 0
airport-system/src/main/java/com/sundot/airport/system/service/impl/SysUserServiceImpl.java

@@ -23,11 +23,15 @@ import com.sundot.airport.common.core.domain.ResetUserPostDto;
23 23
 import com.sundot.airport.common.core.domain.ResetUserRoleDto;
24 24
 import com.sundot.airport.common.core.domain.entity.SysDept;
25 25
 import com.sundot.airport.common.core.domain.entity.SysDictData;
26
+import com.sundot.airport.common.dto.SysPersonnelUserConditionDto;
26 27
 import com.sundot.airport.common.dto.SysUserConditionDto;
27 28
 import com.sundot.airport.common.dto.SysUserLeaderConditionDto;
28 29
 import com.sundot.airport.common.dto.UserInfo;
29 30
 import com.sundot.airport.common.enums.DeptType;
31
+import com.sundot.airport.common.enums.EmploymentTypeEnum;
30 32
 import com.sundot.airport.common.enums.RoleTypeEnum;
33
+import com.sundot.airport.common.utils.DeptUtils;
34
+import com.sundot.airport.common.utils.MonthUtils;
31 35
 import com.sundot.airport.system.domain.SysLargeScreenCooperationDto;
32 36
 import com.sundot.airport.system.domain.SysLargeScreenCooperationItemDto;
33 37
 import com.sundot.airport.system.domain.SysLargeScreenCooperationQueryParamDto;
@@ -97,6 +101,9 @@ public class SysUserServiceImpl implements ISysUserService {
97 101
     @Autowired
98 102
     private ISysDictDataService sysDictDataService;
99 103
 
104
+    @Autowired
105
+    private ISysDeptService sysDeptService;
106
+
100 107
     /**
101 108
      * 根据条件分页查询用户列表
102 109
      *
@@ -1342,6 +1349,35 @@ public class SysUserServiceImpl implements ISysUserService {
1342 1349
         return userMapper.selectUserListByDeptIdAndRoleKeyListAndUserName(dto.getDeptId(), dto.getRoleKeyList(), dto.getNickName());
1343 1350
     }
1344 1351
 
1352
+    /**
1353
+     * 查询人事绩效用户列表
1354
+     *
1355
+     * @param dto 查询用户列表参数
1356
+     * @return 用户信息集合
1357
+     */
1358
+    @Override
1359
+    public List<SysUser> selectPersonnelUserList(SysPersonnelUserConditionDto dto) {
1360
+        if (ObjUtil.isNull(dto.getMonth())) {
1361
+            throw new ServiceException("请选择月份");
1362
+        }
1363
+        dto.setMonthStartTime(MonthUtils.getMonthStartTime(dto.getMonth()));
1364
+        dto.setMonthEndTime(MonthUtils.getMonthLastDayStartTime(dto.getMonth()));
1365
+        if (ObjUtil.isNull(dto.getDeptId())) {
1366
+            Long topSiteId = DeptUtils.getTopSiteId(sysDeptService.selectDeptById(SecurityUtils.getDeptId()));
1367
+            if (topSiteId == null) {
1368
+                throw new ServiceException("无法找到有效的站点信息");
1369
+            }
1370
+            dto.setDeptId(topSiteId);
1371
+        }
1372
+        if (CollUtil.isEmpty(dto.getRoleKeyList())) {
1373
+            dto.setRoleKeyList(Arrays.asList(RoleTypeEnum.SecurityCheck.getCode(), RoleTypeEnum.banzuzhang.getCode(), RoleTypeEnum.kezhang.getCode()));
1374
+        }
1375
+        if (CollUtil.isEmpty(dto.getEmploymentTypeList())) {
1376
+            dto.setEmploymentTypeList(Arrays.asList(EmploymentTypeEnum.DISPATCHED_WORKER.getCode(), EmploymentTypeEnum.REGULAR_EMPLOYEE.getCode()));
1377
+        }
1378
+        return userMapper.selectPersonnelUserList(dto.getDeptId(), dto.getRoleKeyList(), dto.getEmploymentTypeList(), dto.getMonthStartTime(), dto.getMonthEndTime(), dto.getNickName());
1379
+    }
1380
+
1345 1381
     @Override
1346 1382
     public List<LargeScreenHomePageUserInfoSqlDto> homePageUserInfoByBrigadeId(Long brigadeId) {
1347 1383
         return userMapper.homePageUserInfoByBrigadeId(brigadeId);

+ 34 - 8
airport-system/src/main/resources/mapper/system/SysUserMapper.xml

@@ -1111,6 +1111,32 @@
1111 1111
         </if>
1112 1112
     </select>
1113 1113
 
1114
+    <select id="selectPersonnelUserList" resultMap="SysUserResult">
1115
+        <include refid="selectUserVo"/>
1116
+        where (u.dept_id = #{deptId} OR u.dept_id IN (
1117
+        SELECT t.dept_id FROM sys_dept t WHERE find_in_set(#{deptId}, ancestors)))
1118
+        and u.del_flag = '0'
1119
+        and (u.take_assessment = 'Y' or
1120
+        (u.take_assessment = 'N' and
1121
+        (u.exempt_take_assessment_start_time <![CDATA[>]]> #{monthStartTime} or
1122
+        u.exempt_take_assessment_end_time <![CDATA[<]]> #{monthEndTime})))
1123
+        <if test="roleKeyList != null and roleKeyList.size() > 0">
1124
+            and r.role_key in
1125
+            <foreach collection="roleKeyList" item="item" open="(" separator="," close=")">
1126
+                #{item}
1127
+            </foreach>
1128
+        </if>
1129
+        <if test="employmentTypeList != null and employmentTypeList.size() > 0">
1130
+            and u.employment_type in
1131
+            <foreach collection="employmentTypeList" item="item" open="(" separator="," close=")">
1132
+                #{item}
1133
+            </foreach>
1134
+        </if>
1135
+        <if test="nickName != null and nickName != ''">
1136
+            and u.nick_name like concat('%', #{nickName}, '%')
1137
+        </if>
1138
+    </select>
1139
+
1114 1140
     <select id="homePageUserInfo" resultType="com.sundot.airport.common.core.domain.LargeScreenHomePageUserInfoSqlDto">
1115 1141
         select su.user_id      userId,
1116 1142
                su.user_name    userName,
@@ -1209,14 +1235,14 @@
1209 1235
         <include refid="selectUserVo"/>
1210 1236
         where u.del_flag = '0'
1211 1237
         and (
1212
-            u.user_name in
1213
-            <foreach collection="names" item="name" open="(" separator="," close=")">
1214
-                #{name}
1215
-            </foreach>
1216
-            or u.nick_name in
1217
-            <foreach collection="names" item="name" open="(" separator="," close=")">
1218
-                #{name}
1219
-            </foreach>
1238
+        u.user_name in
1239
+        <foreach collection="names" item="name" open="(" separator="," close=")">
1240
+            #{name}
1241
+        </foreach>
1242
+        or u.nick_name in
1243
+        <foreach collection="names" item="name" open="(" separator="," close=")">
1244
+            #{name}
1245
+        </foreach>
1220 1246
         )
1221 1247
     </select>
1222 1248
 </mapper>