|
|
@@ -13,6 +13,7 @@ import com.xjrsoft.common.page.PageOutput;
|
|
|
import com.xjrsoft.common.utils.VoToColumnUtil;
|
|
|
import com.xjrsoft.module.ledger.dto.LedgerStatisticsPageDto;
|
|
|
import com.xjrsoft.module.ledger.vo.LedgerStatisticsLeaveVo;
|
|
|
+import com.xjrsoft.module.ledger.vo.LedgerStatisticsListenVo;
|
|
|
import com.xjrsoft.module.ledger.vo.LedgerStatisticsOvertimeVo;
|
|
|
import com.xjrsoft.module.organization.entity.User;
|
|
|
import com.xjrsoft.module.organization.service.IUserService;
|
|
|
@@ -167,10 +168,10 @@ public class LedgerStatisticsController {
|
|
|
String startTime = dto.getStartDate().atTime(0,0,0).format(dtf);
|
|
|
String endTime = dto.getEndDate().atTime(23,59,59).format(dtf);
|
|
|
sql += " AND (" +
|
|
|
- " (overtime_start_time BETWEEN '" + startTime + "' and '" + endTime + "')" +
|
|
|
- " OR (overtime_end_time BETWEEN '" + startTime + "' and '" + endTime + "')" +
|
|
|
- " OR (overtime_start_time > '" + startTime + "' and '" + endTime + "' > overtime_end_time)" +
|
|
|
- " OR ('" + startTime + "' > overtime_start_time and overtime_end_time > '" + endTime + "')" +
|
|
|
+ " (t.overtime_start_time BETWEEN '" + startTime + "' and '" + endTime + "')" +
|
|
|
+ " OR (t.overtime_end_time BETWEEN '" + startTime + "' and '" + endTime + "')" +
|
|
|
+ " OR (t.overtime_start_time > '" + startTime + "' and '" + endTime + "' > t.overtime_end_time)" +
|
|
|
+ " OR ('" + startTime + "' > t.overtime_start_time and t.overtime_end_time > '" + endTime + "')" +
|
|
|
")";
|
|
|
}
|
|
|
sql += " GROUP BY t4.teacher_user_id";
|
|
|
@@ -196,7 +197,7 @@ public class LedgerStatisticsController {
|
|
|
@PostMapping(value = "/teacher-overtime-export-query")
|
|
|
@ApiOperation(value="教师加班统计-导出")
|
|
|
@SaCheckPermission("ledgerstatistics:detail")
|
|
|
- public ResponseEntity<byte[]> teacherOvertimeExportQuery(@Valid LedgerStatisticsPageDto dto){
|
|
|
+ public ResponseEntity<byte[]> teacherOvertimeExportQuery(@Valid @RequestBody LedgerStatisticsPageDto dto){
|
|
|
List<LedgerStatisticsOvertimeVo> userPage = userService.selectJoinList(LedgerStatisticsOvertimeVo.class,
|
|
|
new MPJLambdaWrapper<User>()
|
|
|
.disableSubLogicDel()
|
|
|
@@ -221,10 +222,10 @@ public class LedgerStatisticsController {
|
|
|
String startTime = dto.getStartDate().atTime(0,0,0).format(dtf);
|
|
|
String endTime = dto.getEndDate().atTime(23,59,59).format(dtf);
|
|
|
sql += " AND (" +
|
|
|
- " (overtime_start_time BETWEEN '" + startTime + "' and '" + endTime + "')" +
|
|
|
- " OR (overtime_end_time BETWEEN '" + startTime + "' and '" + endTime + "')" +
|
|
|
- " OR (overtime_start_time > '" + startTime + "' and '" + endTime + "' > overtime_end_time)" +
|
|
|
- " OR ('" + startTime + "' > overtime_start_time and overtime_end_time > '" + endTime + "')" +
|
|
|
+ " (t.overtime_start_time BETWEEN '" + startTime + "' and '" + endTime + "')" +
|
|
|
+ " OR (t.overtime_end_time BETWEEN '" + startTime + "' and '" + endTime + "')" +
|
|
|
+ " OR (t.overtime_start_time > '" + startTime + "' and '" + endTime + "' > t.overtime_end_time)" +
|
|
|
+ " OR ('" + startTime + "' > t.overtime_start_time and t.overtime_end_time > '" + endTime + "')" +
|
|
|
")";
|
|
|
}
|
|
|
sql += " GROUP BY t4.teacher_user_id";
|
|
|
@@ -249,4 +250,98 @@ public class LedgerStatisticsController {
|
|
|
return RT.fileStream(bot.toByteArray(), "teacher-overtime" + ExcelTypeEnum.XLSX.getValue());
|
|
|
}
|
|
|
|
|
|
+ @GetMapping(value = "/teacher-listen-page")
|
|
|
+ @ApiOperation(value="教师听课统计(分页)")
|
|
|
+ @SaCheckPermission("ledgerstatistics:detail")
|
|
|
+ public RT<PageOutput<LedgerStatisticsListenVo>> teacherListenPage(@Valid LedgerStatisticsPageDto dto){
|
|
|
+ IPage<LedgerStatisticsListenVo> userPage = userService.selectJoinListPage(ConventPage.getPage(dto), 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)
|
|
|
+ );
|
|
|
+ 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" +
|
|
|
+ " LEFT JOIN xjr_workflow_form_relation t2 ON t1.id = t2.form_key_value" +
|
|
|
+ " WHERE t2.current_state = 'COMPLETED'";
|
|
|
+ if(dto.getStartDate() != null && dto.getEndDate() != null){
|
|
|
+ String startTime = dto.getStartDate().format(dtf);
|
|
|
+ String endTime = dto.getEndDate().format(dtf);
|
|
|
+ sql += " AND t1.schedule_date BETWEEN '" + startTime + "' and '" + endTime + "'";
|
|
|
+ }
|
|
|
+ sql += " GROUP BY t1.user_id";
|
|
|
+ List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql);
|
|
|
+ Map<Long, String> userLeaveMap = list.stream().collect(
|
|
|
+ Collectors.toMap(x -> Long.parseLong(x.get("user_id").toString()), x -> x.get("course_count").toString())
|
|
|
+ );
|
|
|
+ for (LedgerStatisticsListenVo record : userPage.getRecords()) {
|
|
|
+ if(!userLeaveMap.containsKey(record.getId())){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ double value = Double.parseDouble(userLeaveMap.get(record.getId()));
|
|
|
+ boolean isInteger = (value % 1) == 0;
|
|
|
+ DecimalFormat df = new DecimalFormat(isInteger ? "0" : "#.##");
|
|
|
+ String formattedValue = df.format(value);
|
|
|
+ record.setCourseCount(formattedValue);
|
|
|
+ }
|
|
|
+
|
|
|
+ PageOutput<LedgerStatisticsListenVo> pageOutput = ConventPage.getPageOutput(userPage, LedgerStatisticsListenVo.class);
|
|
|
+ return RT.ok(pageOutput);
|
|
|
+ }
|
|
|
+
|
|
|
+ @GetMapping(value = "/teacher-listen-export-query")
|
|
|
+ @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)
|
|
|
+ );
|
|
|
+ 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" +
|
|
|
+ " LEFT JOIN xjr_workflow_form_relation t2 ON t1.id = t2.form_key_value" +
|
|
|
+ " WHERE t2.current_state = 'COMPLETED'";
|
|
|
+ if(dto.getStartDate() != null && dto.getEndDate() != null){
|
|
|
+ String startTime = dto.getStartDate().format(dtf);
|
|
|
+ String endTime = dto.getEndDate().format(dtf);
|
|
|
+ sql += " AND t1.schedule_date BETWEEN '" + startTime + "' and '" + endTime + "'";
|
|
|
+ }
|
|
|
+ sql += " GROUP BY t1.user_id";
|
|
|
+ List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql);
|
|
|
+ Map<Long, String> userLeaveMap = list.stream().collect(
|
|
|
+ Collectors.toMap(x -> Long.parseLong(x.get("user_id").toString()), x -> x.get("course_count").toString())
|
|
|
+ );
|
|
|
+ for (LedgerStatisticsListenVo record : userPage) {
|
|
|
+ if(!userLeaveMap.containsKey(record.getId())){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ double value = Double.parseDouble(userLeaveMap.get(record.getId()));
|
|
|
+ boolean isInteger = (value % 1) == 0;
|
|
|
+ DecimalFormat df = new DecimalFormat(isInteger ? "0" : "#.##");
|
|
|
+ String formattedValue = df.format(value);
|
|
|
+ record.setCourseCount(formattedValue);
|
|
|
+ }
|
|
|
+
|
|
|
+ ByteArrayOutputStream bot = new ByteArrayOutputStream();
|
|
|
+ EasyExcel.write(bot, LedgerStatisticsListenVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(list);
|
|
|
+
|
|
|
+ return RT.fileStream(bot.toByteArray(), "teacher-listen" + ExcelTypeEnum.XLSX.getValue());
|
|
|
+ }
|
|
|
+
|
|
|
}
|