|
|
@@ -19,7 +19,10 @@ import com.xjrsoft.module.ledger.vo.LedgerStatisticsListenExcelVo;
|
|
|
import com.xjrsoft.module.ledger.vo.LedgerStatisticsListenVo;
|
|
|
import com.xjrsoft.module.ledger.vo.LedgerStatisticsOvertimeExcelVo;
|
|
|
import com.xjrsoft.module.ledger.vo.LedgerStatisticsOvertimeVo;
|
|
|
+import com.xjrsoft.module.organization.entity.Department;
|
|
|
import com.xjrsoft.module.organization.entity.User;
|
|
|
+import com.xjrsoft.module.organization.entity.UserDeptRelation;
|
|
|
+import com.xjrsoft.module.organization.service.IUserDeptRelationService;
|
|
|
import com.xjrsoft.module.organization.service.IUserService;
|
|
|
import com.xjrsoft.module.organization.vo.UserPageVo;
|
|
|
import com.xjrsoft.module.teacher.entity.BaseTeacher;
|
|
|
@@ -60,11 +63,24 @@ public class LedgerStatisticsController {
|
|
|
|
|
|
private final IUserService userService;
|
|
|
private final IWfTeacherleaveService teacherleaveService;
|
|
|
+ private final IUserDeptRelationService deptRelationService;
|
|
|
|
|
|
@GetMapping(value = "/teacher-leave-page")
|
|
|
@ApiOperation(value="教师请假统计(分页)")
|
|
|
@SaCheckPermission("ledgerstatistics:detail")
|
|
|
public RT<PageOutput<LedgerStatisticsLeaveVo>> teacherLeavePage(@Valid LedgerStatisticsPageDto dto){
|
|
|
+ List<Long> userIdList = new ArrayList<>();
|
|
|
+ if(StrUtil.isNotEmpty(dto.getDeptName())){
|
|
|
+ List<UserDeptRelation> userList = deptRelationService.list(
|
|
|
+ new MPJLambdaWrapper<UserDeptRelation>()
|
|
|
+ .select(UserDeptRelation::getId)
|
|
|
+ .select(UserDeptRelation::getDeptId)
|
|
|
+ .select(UserDeptRelation::getUserId)
|
|
|
+ .innerJoin(Department.class, Department::getId, UserDeptRelation::getDeptId)
|
|
|
+ .like(StrUtil.isNotEmpty(dto.getDeptName()), Department::getName, dto.getDeptName())
|
|
|
+ );
|
|
|
+ userIdList.addAll(userList.stream().map(UserDeptRelation::getUserId).collect(Collectors.toList()));
|
|
|
+ }
|
|
|
|
|
|
LocalDateTime startTime = null;
|
|
|
LocalDateTime endTime = null;
|
|
|
@@ -72,7 +88,7 @@ public class LedgerStatisticsController {
|
|
|
startTime = dto.getStartDate().atTime(0,0,0);
|
|
|
endTime = dto.getEndDate().atTime(23,59,59);
|
|
|
}
|
|
|
- Map<String, List<WfTeacherleave>> userLeaveMap = teacherleaveService.getUserLeaveList(startTime, endTime);
|
|
|
+ Map<String, List<WfTeacherleave>> userLeaveMap = teacherleaveService.getUserLeaveList(startTime, endTime, userIdList);
|
|
|
|
|
|
List<String> userIds = new ArrayList<>(userLeaveMap.keySet());
|
|
|
if(userIds.isEmpty()){
|
|
|
@@ -89,6 +105,7 @@ public class LedgerStatisticsController {
|
|
|
" WHERE t1.delete_mark = 0 AND t2.user_id = t.id) as dept_name")
|
|
|
.innerJoin(BaseTeacher.class, BaseTeacher::getUserId, User::getId)
|
|
|
.like(StrUtil.isNotEmpty(dto.getName()), User::getName, dto.getName())
|
|
|
+ .like(StrUtil.isNotEmpty(dto.getUserName()), User::getUserName, dto.getUserName())
|
|
|
.in(User::getId, userIds)
|
|
|
.orderByAsc(User::getId)
|
|
|
);
|
|
|
@@ -113,13 +130,26 @@ public class LedgerStatisticsController {
|
|
|
@ApiOperation(value="教师请假统计-导出")
|
|
|
@SaCheckPermission("ledgerstatistics:detail")
|
|
|
public ResponseEntity<byte[]> teacherLeaveExportQuery(@Valid @RequestBody LedgerStatisticsPageDto dto){
|
|
|
+ List<Long> userIdList = new ArrayList<>();
|
|
|
+ if(StrUtil.isNotEmpty(dto.getDeptName())){
|
|
|
+ List<UserDeptRelation> userList = deptRelationService.list(
|
|
|
+ new MPJLambdaWrapper<UserDeptRelation>()
|
|
|
+ .select(UserDeptRelation::getId)
|
|
|
+ .select(UserDeptRelation::getDeptId)
|
|
|
+ .select(UserDeptRelation::getUserId)
|
|
|
+ .innerJoin(Department.class, Department::getId, UserDeptRelation::getDeptId)
|
|
|
+ .like(StrUtil.isNotEmpty(dto.getDeptName()), Department::getName, dto.getDeptName())
|
|
|
+ );
|
|
|
+ userIdList.addAll(userList.stream().map(UserDeptRelation::getUserId).collect(Collectors.toList()));
|
|
|
+ }
|
|
|
+
|
|
|
LocalDateTime startTime = null;
|
|
|
LocalDateTime endTime = null;
|
|
|
if(dto.getStartDate() != null && dto.getEndDate() != null){
|
|
|
startTime = dto.getStartDate().atTime(0,0,0);
|
|
|
endTime = dto.getEndDate().atTime(23,59,59);
|
|
|
}
|
|
|
- Map<String, List<WfTeacherleave>> userLeaveMap = teacherleaveService.getUserLeaveList(startTime, endTime);
|
|
|
+ Map<String, List<WfTeacherleave>> userLeaveMap = teacherleaveService.getUserLeaveList(startTime, endTime, userIdList);
|
|
|
|
|
|
List<String> userIds = new ArrayList<>(userLeaveMap.keySet());
|
|
|
if(userIds.isEmpty()){
|
|
|
@@ -140,6 +170,7 @@ public class LedgerStatisticsController {
|
|
|
" WHERE t1.delete_mark = 0 AND t2.user_id = t.id) as dept_name")
|
|
|
.innerJoin(BaseTeacher.class, BaseTeacher::getUserId, User::getId)
|
|
|
.like(StrUtil.isNotEmpty(dto.getName()), User::getName, dto.getName())
|
|
|
+ .like(StrUtil.isNotEmpty(dto.getUserName()), User::getUserName, dto.getUserName())
|
|
|
.in(User::getId, userIds)
|
|
|
.orderByAsc(User::getId)
|
|
|
);
|
|
|
@@ -172,6 +203,20 @@ public class LedgerStatisticsController {
|
|
|
@ApiOperation(value="教师加班统计(分页)")
|
|
|
@SaCheckPermission("ledgerstatistics:detail")
|
|
|
public RT<PageOutput<LedgerStatisticsOvertimeVo>> teacherOvertimePage(@Valid LedgerStatisticsPageDto dto){
|
|
|
+
|
|
|
+ List<Long> userIdList = new ArrayList<>();
|
|
|
+ if(StrUtil.isNotEmpty(dto.getDeptName())){
|
|
|
+ List<UserDeptRelation> list = deptRelationService.list(
|
|
|
+ new MPJLambdaWrapper<UserDeptRelation>()
|
|
|
+ .select(UserDeptRelation::getId)
|
|
|
+ .select(UserDeptRelation::getDeptId)
|
|
|
+ .select(UserDeptRelation::getUserId)
|
|
|
+ .innerJoin(Department.class, Department::getId, UserDeptRelation::getDeptId)
|
|
|
+ .like(StrUtil.isNotEmpty(dto.getDeptName()), Department::getName, dto.getDeptName())
|
|
|
+ );
|
|
|
+ userIdList.addAll(list.stream().map(UserDeptRelation::getUserId).collect(Collectors.toList()));
|
|
|
+ }
|
|
|
+
|
|
|
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
|
String sql = "SELECT t4.teacher_user_id,SUM(t.total_days) as total_days FROM wf_overtime t" +
|
|
|
@@ -190,6 +235,9 @@ public class LedgerStatisticsController {
|
|
|
" OR ('" + startTime + "' > t.overtime_start_time and t.overtime_end_time > '" + endTime + "')" +
|
|
|
")";
|
|
|
}
|
|
|
+ if(!userIdList.isEmpty()){
|
|
|
+ sql = " AND t.teacher_user_id in (" + userIdList.toString().replace("[", "").replace("]", "") + ")";
|
|
|
+ }
|
|
|
sql += " GROUP BY t4.teacher_user_id";
|
|
|
List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql);
|
|
|
Map<Long, String> userLeaveMap = list.stream().filter(x -> x.get("total_days") != null && x.get("teacher_user_id") != null).collect(
|
|
|
@@ -201,6 +249,7 @@ public class LedgerStatisticsController {
|
|
|
return RT.ok(new PageOutput<>());
|
|
|
}
|
|
|
|
|
|
+
|
|
|
IPage<LedgerStatisticsOvertimeVo> userPage = userService.selectJoinListPage(ConventPage.getPage(dto), LedgerStatisticsOvertimeVo.class,
|
|
|
new MPJLambdaWrapper<User>()
|
|
|
.disableSubLogicDel()
|
|
|
@@ -211,6 +260,7 @@ public class LedgerStatisticsController {
|
|
|
" WHERE t1.delete_mark = 0 AND t2.user_id = t.id) as dept_name")
|
|
|
.innerJoin(BaseTeacher.class, BaseTeacher::getUserId, User::getId)
|
|
|
.like(StrUtil.isNotEmpty(dto.getName()), User::getName, dto.getName())
|
|
|
+ .like(StrUtil.isNotEmpty(dto.getUserName()), User::getUserName, dto.getUserName())
|
|
|
.in(User::getId, userIds)
|
|
|
.orderByAsc(User::getId)
|
|
|
);
|
|
|
@@ -234,6 +284,18 @@ public class LedgerStatisticsController {
|
|
|
@ApiOperation(value="教师加班统计-导出")
|
|
|
@SaCheckPermission("ledgerstatistics:detail")
|
|
|
public ResponseEntity<byte[]> teacherOvertimeExportQuery(@Valid @RequestBody LedgerStatisticsPageDto dto){
|
|
|
+ List<Long> userIdList = new ArrayList<>();
|
|
|
+ if(StrUtil.isNotEmpty(dto.getDeptName())){
|
|
|
+ List<UserDeptRelation> list = deptRelationService.list(
|
|
|
+ new MPJLambdaWrapper<UserDeptRelation>()
|
|
|
+ .select(UserDeptRelation::getId)
|
|
|
+ .select(UserDeptRelation::getDeptId)
|
|
|
+ .select(UserDeptRelation::getUserId)
|
|
|
+ .innerJoin(Department.class, Department::getId, UserDeptRelation::getDeptId)
|
|
|
+ .like(StrUtil.isNotEmpty(dto.getDeptName()), Department::getName, dto.getDeptName())
|
|
|
+ );
|
|
|
+ userIdList.addAll(list.stream().map(UserDeptRelation::getUserId).collect(Collectors.toList()));
|
|
|
+ }
|
|
|
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
|
String sql = "SELECT t4.teacher_user_id,SUM(t.total_days) as total_days FROM wf_overtime t" +
|
|
|
@@ -252,6 +314,9 @@ public class LedgerStatisticsController {
|
|
|
" OR ('" + startTime + "' > t.overtime_start_time and t.overtime_end_time > '" + endTime + "')" +
|
|
|
")";
|
|
|
}
|
|
|
+ if(!userIdList.isEmpty()){
|
|
|
+ sql = " AND t.teacher_user_id in (" + userIdList.toString().replace("[", "").replace("]", "") + ")";
|
|
|
+ }
|
|
|
sql += " GROUP BY t4.teacher_user_id";
|
|
|
List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql);
|
|
|
Map<Long, String> userLeaveMap = list.stream().filter(x -> x.get("total_days") != null && x.get("teacher_user_id") != null).collect(
|
|
|
@@ -277,6 +342,7 @@ public class LedgerStatisticsController {
|
|
|
" WHERE t1.delete_mark = 0 AND t2.user_id = t.id) as dept_name")
|
|
|
.innerJoin(BaseTeacher.class, BaseTeacher::getUserId, User::getId)
|
|
|
.like(StrUtil.isNotEmpty(dto.getName()), User::getName, dto.getName())
|
|
|
+ .like(StrUtil.isNotEmpty(dto.getUserName()), User::getUserName, dto.getUserName())
|
|
|
.in(User::getId, userIds)
|
|
|
.orderByAsc(User::getId)
|
|
|
);
|
|
|
@@ -309,6 +375,18 @@ public class LedgerStatisticsController {
|
|
|
@ApiOperation(value="教师听课统计(分页)")
|
|
|
@SaCheckPermission("ledgerstatistics:detail")
|
|
|
public RT<PageOutput<LedgerStatisticsListenVo>> teacherListenPage(@Valid LedgerStatisticsPageDto dto){
|
|
|
+ List<Long> userIdList = new ArrayList<>();
|
|
|
+ if(StrUtil.isNotEmpty(dto.getDeptName())){
|
|
|
+ List<UserDeptRelation> userList = deptRelationService.list(
|
|
|
+ new MPJLambdaWrapper<UserDeptRelation>()
|
|
|
+ .select(UserDeptRelation::getId)
|
|
|
+ .select(UserDeptRelation::getDeptId)
|
|
|
+ .select(UserDeptRelation::getUserId)
|
|
|
+ .innerJoin(Department.class, Department::getId, UserDeptRelation::getDeptId)
|
|
|
+ .like(StrUtil.isNotEmpty(dto.getDeptName()), Department::getName, dto.getDeptName())
|
|
|
+ );
|
|
|
+ userIdList.addAll(userList.stream().map(UserDeptRelation::getUserId).collect(Collectors.toList()));
|
|
|
+ }
|
|
|
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
|
|
|
|
|
String sql = "SELECT t1.user_id,count(t1.course_name) as course_count FROM wf_teacher_listen t1" +
|
|
|
@@ -319,6 +397,9 @@ public class LedgerStatisticsController {
|
|
|
String endTime = dto.getEndDate().format(dtf);
|
|
|
sql += " AND t1.schedule_date BETWEEN '" + startTime + "' and '" + endTime + "'";
|
|
|
}
|
|
|
+ if(!userIdList.isEmpty()){
|
|
|
+ sql = " AND t1.user_id in (" + userIdList.toString().replace("[", "").replace("]", "") + ")";
|
|
|
+ }
|
|
|
sql += " GROUP BY t1.user_id";
|
|
|
List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql);
|
|
|
Map<Long, String> userLeaveMap = list.stream().filter(x -> x.get("user_id") != null && x.get("course_count") != null).collect(
|
|
|
@@ -340,6 +421,7 @@ public class LedgerStatisticsController {
|
|
|
" WHERE t1.delete_mark = 0 AND t2.user_id = t.id) as dept_name")
|
|
|
.innerJoin(BaseTeacher.class, BaseTeacher::getUserId, User::getId)
|
|
|
.like(StrUtil.isNotEmpty(dto.getName()), User::getName, dto.getName())
|
|
|
+ .like(StrUtil.isNotEmpty(dto.getUserName()), User::getUserName, dto.getUserName())
|
|
|
.in(User::getId, userIds)
|
|
|
.orderByAsc(User::getId)
|
|
|
);
|
|
|
@@ -363,18 +445,19 @@ public class LedgerStatisticsController {
|
|
|
@ApiOperation(value="教师听课统计-导出")
|
|
|
@SaCheckPermission("ledgerstatistics:detail")
|
|
|
public ResponseEntity<byte[]> teacherListenExportQuery(@Valid @RequestBody LedgerStatisticsPageDto dto){
|
|
|
- List<LedgerStatisticsListenVo> userPage = userService.selectJoinList(LedgerStatisticsListenVo.class,
|
|
|
- new MPJLambdaWrapper<User>()
|
|
|
- .disableSubLogicDel()
|
|
|
- .select(User::getId)
|
|
|
- .select(User.class, x -> VoToColumnUtil.fieldsToColumns(UserPageVo.class).contains(x.getProperty()))
|
|
|
- .select(" (SELECT GROUP_CONCAT(t1.name) FROM xjr_department t1" +
|
|
|
- " INNER JOIN xjr_user_dept_relation t2 ON t1.id = t2.dept_id" +
|
|
|
- " WHERE t1.delete_mark = 0 AND t2.user_id = t.id) as dept_name")
|
|
|
- .innerJoin(BaseTeacher.class, BaseTeacher::getUserId, User::getId)
|
|
|
- .like(StrUtil.isNotEmpty(dto.getName()), User::getName, dto.getName())
|
|
|
- .orderByAsc(User::getId)
|
|
|
- );
|
|
|
+ List<Long> userIdList = new ArrayList<>();
|
|
|
+ if(StrUtil.isNotEmpty(dto.getDeptName())){
|
|
|
+ List<UserDeptRelation> userList = deptRelationService.list(
|
|
|
+ new MPJLambdaWrapper<UserDeptRelation>()
|
|
|
+ .select(UserDeptRelation::getId)
|
|
|
+ .select(UserDeptRelation::getDeptId)
|
|
|
+ .select(UserDeptRelation::getUserId)
|
|
|
+ .innerJoin(Department.class, Department::getId, UserDeptRelation::getDeptId)
|
|
|
+ .like(StrUtil.isNotEmpty(dto.getDeptName()), Department::getName, dto.getDeptName())
|
|
|
+ );
|
|
|
+ userIdList.addAll(userList.stream().map(UserDeptRelation::getUserId).collect(Collectors.toList()));
|
|
|
+ }
|
|
|
+
|
|
|
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
|
|
|
|
|
String sql = "SELECT t1.user_id,count(t1.course_name) as course_count FROM wf_teacher_listen t1" +
|
|
|
@@ -385,6 +468,9 @@ public class LedgerStatisticsController {
|
|
|
String endTime = dto.getEndDate().format(dtf);
|
|
|
sql += " AND t1.schedule_date BETWEEN '" + startTime + "' and '" + endTime + "'";
|
|
|
}
|
|
|
+ if(!userIdList.isEmpty()){
|
|
|
+ sql = " AND t1.user_id in (" + userIdList.toString().replace("[", "").replace("]", "") + ")";
|
|
|
+ }
|
|
|
sql += " GROUP BY t1.user_id";
|
|
|
List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql);
|
|
|
Map<Long, String> userLeaveMap = list.stream().filter(x -> x.get("user_id") != null && x.get("course_count") != null).collect(
|
|
|
@@ -400,6 +486,21 @@ public class LedgerStatisticsController {
|
|
|
return RT.fileStream(bot.toByteArray(), "teacher-leave" + ExcelTypeEnum.XLSX.getValue());
|
|
|
}
|
|
|
|
|
|
+ List<LedgerStatisticsListenVo> userPage = userService.selectJoinList(LedgerStatisticsListenVo.class,
|
|
|
+ new MPJLambdaWrapper<User>()
|
|
|
+ .disableSubLogicDel()
|
|
|
+ .select(User::getId)
|
|
|
+ .select(User.class, x -> VoToColumnUtil.fieldsToColumns(UserPageVo.class).contains(x.getProperty()))
|
|
|
+ .select(" (SELECT GROUP_CONCAT(t1.name) FROM xjr_department t1" +
|
|
|
+ " INNER JOIN xjr_user_dept_relation t2 ON t1.id = t2.dept_id" +
|
|
|
+ " WHERE t1.delete_mark = 0 AND t2.user_id = t.id) as dept_name")
|
|
|
+ .innerJoin(BaseTeacher.class, BaseTeacher::getUserId, User::getId)
|
|
|
+ .like(StrUtil.isNotEmpty(dto.getName()), User::getName, dto.getName())
|
|
|
+ .like(StrUtil.isNotEmpty(dto.getUserName()), User::getUserName, dto.getUserName())
|
|
|
+ .in(User::getId, userIds)
|
|
|
+ .orderByAsc(User::getId)
|
|
|
+ );
|
|
|
+
|
|
|
List<LedgerStatisticsListenExcelVo> dataList = new ArrayList<>();
|
|
|
|
|
|
int sortCode = 1;
|