|
|
@@ -0,0 +1,430 @@
|
|
|
+package com.chuanghai.patrol.service.mapper.patrol;
|
|
|
+
|
|
|
+import com.chuanghai.patrol.dao.PatrolTaskDynamicSqlSupport;
|
|
|
+import com.chuanghai.patrol.dao.PatrolTaskMapper;
|
|
|
+import com.chuanghai.patrol.dao.PatrolTaskRecordDynamicSqlSupport;
|
|
|
+import com.chuanghai.patrol.vo.*;
|
|
|
+import com.flyhigh.core.mybatis.SqlExtBuilder;
|
|
|
+import com.flyhigh.core.mybatis.sql.If;
|
|
|
+import org.apache.ibatis.annotations.Mapper;
|
|
|
+import org.apache.ibatis.annotations.ResultMap;
|
|
|
+import org.apache.ibatis.annotations.SelectProvider;
|
|
|
+import org.mybatis.dynamic.sql.Constant;
|
|
|
+import org.mybatis.dynamic.sql.DerivedColumn;
|
|
|
+import org.mybatis.dynamic.sql.SqlBuilder;
|
|
|
+import org.mybatis.dynamic.sql.render.RenderingStrategies;
|
|
|
+import org.mybatis.dynamic.sql.select.render.SelectStatementProvider;
|
|
|
+import org.mybatis.dynamic.sql.util.SqlProviderAdapter;
|
|
|
+import org.mybatis.dynamic.sql.util.mybatis3.CommonSelectMapper;
|
|
|
+
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Objects;
|
|
|
+import java.util.Optional;
|
|
|
+
|
|
|
+import static com.chuanghai.patrol.config.AppConstant.*;
|
|
|
+import static com.flyhigh.core.mybatis.SqlExtBuilder.isLikeAll;
|
|
|
+import static org.mybatis.dynamic.sql.SqlBuilder.*;
|
|
|
+
|
|
|
+@Mapper
|
|
|
+public interface PatrolTaskExtMapper extends PatrolTaskMapper, CommonSelectMapper {
|
|
|
+ /**
|
|
|
+ * 查询巡检任务id
|
|
|
+ */
|
|
|
+ default List<Long> selectTaskIdList(LocalDateTime beginTimeStart, LocalDateTime beginTimeEnd) {
|
|
|
+ SelectStatementProvider statementProvider = SqlBuilder.select(PatrolTaskDynamicSqlSupport.id, PatrolTaskDynamicSqlSupport.beginTime)
|
|
|
+ .from(PatrolTaskDynamicSqlSupport.patrolTask)
|
|
|
+ .where(PatrolTaskDynamicSqlSupport.status, isNotEqualTo(TASK_STATE_NOT_STARTED))
|
|
|
+ .and(PatrolTaskDynamicSqlSupport.beginTime, isGreaterThanOrEqualTo(beginTimeStart).filter(SqlExtBuilder.isNonEmpty()))
|
|
|
+ .and(PatrolTaskDynamicSqlSupport.beginTime, isLessThanOrEqualTo(beginTimeEnd).filter(SqlExtBuilder.isNonEmpty()))
|
|
|
+ .orderBy(PatrolTaskDynamicSqlSupport.beginTime.descending())
|
|
|
+ .build().render(RenderingStrategies.MYBATIS3);
|
|
|
+ return selectManyLongs(statementProvider);
|
|
|
+ }
|
|
|
+
|
|
|
+ @SelectProvider(type = SqlProviderAdapter.class, method = "select")
|
|
|
+ List<PatrolTaskVO> selectList(SelectStatementProvider selectStatement);
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询巡检任务
|
|
|
+ */
|
|
|
+ default List<PatrolTaskVO> selectList(List<Long> ids) {
|
|
|
+ SelectStatementProvider statementProvider = SqlBuilder.select(
|
|
|
+ PatrolTaskDynamicSqlSupport.id,
|
|
|
+ PatrolTaskDynamicSqlSupport.status,
|
|
|
+ PatrolTaskDynamicSqlSupport.name,
|
|
|
+ PatrolTaskDynamicSqlSupport.beginTime,
|
|
|
+ PatrolTaskDynamicSqlSupport.endTime,
|
|
|
+ countDistinct(PatrolTaskRecordDynamicSqlSupport.roomId).as("total").as("total"),
|
|
|
+ SqlExtBuilder.ifNull(DerivedColumn.of("completed_count"), 0).as("completed"),
|
|
|
+ SqlBuilder.divide(SqlExtBuilder.ifNull(DerivedColumn.of("completed_count"), 0), countDistinct(PatrolTaskRecordDynamicSqlSupport.roomId)).as("completion_rate"))
|
|
|
+ .from(PatrolTaskDynamicSqlSupport.patrolTask, "pt")
|
|
|
+ .leftJoin(PatrolTaskRecordDynamicSqlSupport.patrolTaskRecord, "ptr").on(PatrolTaskRecordDynamicSqlSupport.taskId, equalTo(PatrolTaskDynamicSqlSupport.id))
|
|
|
+ .leftJoin(
|
|
|
+ // 任务中已完成的房间数
|
|
|
+ SqlBuilder.select(PatrolTaskRecordDynamicSqlSupport.taskId, countDistinct(PatrolTaskRecordDynamicSqlSupport.roomId).as("completed_count"))
|
|
|
+ .from(PatrolTaskRecordDynamicSqlSupport.patrolTaskRecord)
|
|
|
+ .where(PatrolTaskRecordDynamicSqlSupport.completed, isTrue())
|
|
|
+ .and(PatrolTaskRecordDynamicSqlSupport.taskId, isIn(ids))
|
|
|
+ .groupBy(PatrolTaskRecordDynamicSqlSupport.taskId)
|
|
|
+ , "completed")
|
|
|
+ .on(PatrolTaskRecordDynamicSqlSupport.taskId.qualifiedWith("completed"), equalTo(PatrolTaskRecordDynamicSqlSupport.taskId))
|
|
|
+ .where(PatrolTaskDynamicSqlSupport.id, isIn(ids))
|
|
|
+ .groupBy(PatrolTaskDynamicSqlSupport.id)
|
|
|
+ .orderBy(PatrolTaskDynamicSqlSupport.beginTime.descending())
|
|
|
+ .build().render(RenderingStrategies.MYBATIS3);
|
|
|
+ return selectList(statementProvider);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据房间id查询正在进行的巡检任务id
|
|
|
+ */
|
|
|
+ default List<Long> selectTaskIdListByRoomId(Long userId, Long roomId) {
|
|
|
+ SelectStatementProvider statementProvider = SqlBuilder.select(PatrolTaskDynamicSqlSupport.id)
|
|
|
+ .from(PatrolTaskDynamicSqlSupport.patrolTask)
|
|
|
+ .join(PatrolTaskRecordDynamicSqlSupport.patrolTaskRecord).on(PatrolTaskRecordDynamicSqlSupport.taskId, equalTo(PatrolTaskDynamicSqlSupport.id))
|
|
|
+ .where(PatrolTaskDynamicSqlSupport.status, isEqualTo(TASK_STATE_PROCESSING))
|
|
|
+ .and(PatrolTaskRecordDynamicSqlSupport.completed, isFalse())
|
|
|
+ .and(PatrolTaskRecordDynamicSqlSupport.userId, isEqualTo(userId))
|
|
|
+ .and(PatrolTaskRecordDynamicSqlSupport.roomId, isEqualTo(roomId))
|
|
|
+ .groupBy(PatrolTaskDynamicSqlSupport.id)
|
|
|
+ .build().render(RenderingStrategies.MYBATIS3);
|
|
|
+ return selectManyLongs(statementProvider);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询正在进行的巡检任务
|
|
|
+ */
|
|
|
+ default List<PatrolTaskVO> selectTaskListByIds(Long userId, List<Long> ids) {
|
|
|
+ SelectStatementProvider statementProvider = SqlBuilder.select(
|
|
|
+ PatrolTaskDynamicSqlSupport.id,
|
|
|
+ PatrolTaskDynamicSqlSupport.name,
|
|
|
+ PatrolTaskDynamicSqlSupport.status,
|
|
|
+ PatrolTaskDynamicSqlSupport.beginTime,
|
|
|
+ PatrolTaskDynamicSqlSupport.endTime,
|
|
|
+ countDistinct(PatrolTaskRecordDynamicSqlSupport.roomId).as("total").as("total"),
|
|
|
+ SqlExtBuilder.ifNull(DerivedColumn.of("completed_count"), 0).as("completed"),
|
|
|
+ SqlBuilder.divide(SqlExtBuilder.ifNull(DerivedColumn.of("completed_count"), 0), countDistinct(PatrolTaskRecordDynamicSqlSupport.roomId)).as("completion_rate"))
|
|
|
+ .from(PatrolTaskDynamicSqlSupport.patrolTask, "pt")
|
|
|
+ .join(PatrolTaskRecordDynamicSqlSupport.patrolTaskRecord, "ptr").on(PatrolTaskRecordDynamicSqlSupport.taskId, equalTo(PatrolTaskDynamicSqlSupport.id))
|
|
|
+ .leftJoin(
|
|
|
+ // 任务中已完成的房间数
|
|
|
+ SqlBuilder.select(PatrolTaskRecordDynamicSqlSupport.taskId, countDistinct(PatrolTaskRecordDynamicSqlSupport.roomId).as("completed_count"))
|
|
|
+ .from(PatrolTaskRecordDynamicSqlSupport.patrolTaskRecord)
|
|
|
+ .where(PatrolTaskRecordDynamicSqlSupport.taskId, isIn(ids))
|
|
|
+ .and(PatrolTaskRecordDynamicSqlSupport.userId, isEqualTo(userId))
|
|
|
+ .and(PatrolTaskRecordDynamicSqlSupport.completed, isTrue())
|
|
|
+ .groupBy(PatrolTaskRecordDynamicSqlSupport.taskId)
|
|
|
+ , "completed")
|
|
|
+ .on(PatrolTaskRecordDynamicSqlSupport.taskId.qualifiedWith("completed"), equalTo(PatrolTaskRecordDynamicSqlSupport.taskId))
|
|
|
+ .where(PatrolTaskDynamicSqlSupport.id, isIn(ids))
|
|
|
+ .and(PatrolTaskRecordDynamicSqlSupport.userId, isEqualTo(userId))
|
|
|
+ .groupBy(PatrolTaskDynamicSqlSupport.id)
|
|
|
+ .build().render(RenderingStrategies.MYBATIS3);
|
|
|
+ return selectList(statementProvider);
|
|
|
+ }
|
|
|
+
|
|
|
+ @SelectProvider(type = SqlProviderAdapter.class, method = "select")
|
|
|
+ Optional<PatrolRoomDetailsVO> selectByUserTaskRoomId(SelectStatementProvider selectStatement);
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 巡检任务
|
|
|
+ */
|
|
|
+ default Optional<PatrolRoomDetailsVO> selectByUserTaskRoomId(Long userId, Long taskId, Long roomId) {
|
|
|
+ SelectStatementProvider statementProvider = SqlBuilder.select(
|
|
|
+ PatrolTaskRecordDynamicSqlSupport.roomId.as("id"),
|
|
|
+ PatrolTaskRecordDynamicSqlSupport.roomName.as("name"),
|
|
|
+ PatrolTaskRecordDynamicSqlSupport.roomNumber,
|
|
|
+ PatrolTaskRecordDynamicSqlSupport.floorName,
|
|
|
+ PatrolTaskRecordDynamicSqlSupport.buildingName,
|
|
|
+ PatrolTaskDynamicSqlSupport.name.as("task_name"))
|
|
|
+ .from(PatrolTaskDynamicSqlSupport.patrolTask)
|
|
|
+ .leftJoin(PatrolTaskRecordDynamicSqlSupport.patrolTaskRecord).on(PatrolTaskRecordDynamicSqlSupport.taskId, equalTo(PatrolTaskDynamicSqlSupport.id))
|
|
|
+ .where(PatrolTaskRecordDynamicSqlSupport.userId, isEqualTo(userId))
|
|
|
+ .and(PatrolTaskRecordDynamicSqlSupport.roomId, isEqualTo(roomId))
|
|
|
+ .and(PatrolTaskDynamicSqlSupport.id, isEqualTo(taskId))
|
|
|
+ .groupBy(PatrolTaskRecordDynamicSqlSupport.roomId,
|
|
|
+ PatrolTaskRecordDynamicSqlSupport.roomName,
|
|
|
+ PatrolTaskRecordDynamicSqlSupport.roomNumber,
|
|
|
+ PatrolTaskRecordDynamicSqlSupport.floorName,
|
|
|
+ PatrolTaskRecordDynamicSqlSupport.buildingName,
|
|
|
+ PatrolTaskDynamicSqlSupport.name)
|
|
|
+ .build().render(RenderingStrategies.MYBATIS3);
|
|
|
+ return selectByUserTaskRoomId(statementProvider);
|
|
|
+ }
|
|
|
+
|
|
|
+ @ResultMap("taskRate")
|
|
|
+ @SelectProvider(type = SqlProviderAdapter.class, method = "select")
|
|
|
+ Optional<PatrolRateVO> selectRateByUserTaskRoomId(SelectStatementProvider selectStatement);
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询巡检任务
|
|
|
+ */
|
|
|
+ default Optional<PatrolRateVO> selectRateByUserTaskRoomId(Long id) {
|
|
|
+ SelectStatementProvider statementProvider = SqlBuilder.select(
|
|
|
+ PatrolTaskDynamicSqlSupport.id,
|
|
|
+ PatrolTaskDynamicSqlSupport.name,
|
|
|
+ PatrolTaskDynamicSqlSupport.beginTime,
|
|
|
+ PatrolTaskDynamicSqlSupport.endTime,
|
|
|
+ DerivedColumn.of("total", "room_total").as("total"),
|
|
|
+ SqlExtBuilder.ifNull(DerivedColumn.of("completed_count"), 0).as("completed"),
|
|
|
+ SqlBuilder.divide(SqlExtBuilder.ifNull(DerivedColumn.of("completed_count"), 0), DerivedColumn.of("total", "room_total")).as("completion_rate"),
|
|
|
+ PatrolTaskRecordDynamicSqlSupport.roomId,
|
|
|
+ PatrolTaskRecordDynamicSqlSupport.roomName,
|
|
|
+ PatrolTaskRecordDynamicSqlSupport.roomNumber,
|
|
|
+ PatrolTaskRecordDynamicSqlSupport.completed.as("room_completed"),
|
|
|
+ If.of(PatrolTaskRecordDynamicSqlSupport.roomId.qualifiedWith("qualified"), ">", Constant.of("0"), 0, 1).as("qualified"))
|
|
|
+ .from(PatrolTaskDynamicSqlSupport.patrolTask, "pt")
|
|
|
+ .join(PatrolTaskRecordDynamicSqlSupport.patrolTaskRecord, "ptr").on(PatrolTaskRecordDynamicSqlSupport.taskId, equalTo(PatrolTaskDynamicSqlSupport.id))
|
|
|
+ .leftJoin(
|
|
|
+ // 任务中已完成的房间数
|
|
|
+ SqlBuilder.select(PatrolTaskRecordDynamicSqlSupport.taskId, countDistinct(PatrolTaskRecordDynamicSqlSupport.roomId).as("completed_count"))
|
|
|
+ .from(PatrolTaskRecordDynamicSqlSupport.patrolTaskRecord)
|
|
|
+ .where(PatrolTaskRecordDynamicSqlSupport.taskId, isEqualTo(id))
|
|
|
+ .and(PatrolTaskRecordDynamicSqlSupport.completed, isTrue())
|
|
|
+ , "completed")
|
|
|
+ .on(PatrolTaskRecordDynamicSqlSupport.taskId.qualifiedWith("completed"), equalTo(PatrolTaskRecordDynamicSqlSupport.taskId))
|
|
|
+ .leftJoin(
|
|
|
+ // 任务中房间总数
|
|
|
+ SqlBuilder.select(PatrolTaskRecordDynamicSqlSupport.taskId, countDistinct(PatrolTaskRecordDynamicSqlSupport.roomId).as("total"))
|
|
|
+ .from(PatrolTaskRecordDynamicSqlSupport.patrolTaskRecord)
|
|
|
+ .where(PatrolTaskRecordDynamicSqlSupport.taskId, isEqualTo(id))
|
|
|
+ .groupBy(PatrolTaskRecordDynamicSqlSupport.taskId)
|
|
|
+ , "room_total")
|
|
|
+ .on(PatrolTaskRecordDynamicSqlSupport.taskId, equalTo(PatrolTaskRecordDynamicSqlSupport.taskId.qualifiedWith("room_total")))
|
|
|
+ .leftJoin(
|
|
|
+ // 任务中不合格的房间数
|
|
|
+ SqlBuilder.select(PatrolTaskRecordDynamicSqlSupport.roomId)
|
|
|
+ .from(PatrolTaskRecordDynamicSqlSupport.patrolTaskRecord)
|
|
|
+ .where(PatrolTaskRecordDynamicSqlSupport.taskId, isEqualTo(id))
|
|
|
+ .and(PatrolTaskRecordDynamicSqlSupport.completed, isTrue())
|
|
|
+ .and(PatrolTaskRecordDynamicSqlSupport.qualified, isFalse())
|
|
|
+ .groupBy(PatrolTaskRecordDynamicSqlSupport.roomId)
|
|
|
+ , "qualified"
|
|
|
+ ).on(PatrolTaskRecordDynamicSqlSupport.roomId.qualifiedWith("qualified"), equalTo(PatrolTaskRecordDynamicSqlSupport.roomId))
|
|
|
+ .where(PatrolTaskDynamicSqlSupport.id, isEqualTo(id))
|
|
|
+ .groupBy(PatrolTaskDynamicSqlSupport.id, PatrolTaskRecordDynamicSqlSupport.roomId, PatrolTaskRecordDynamicSqlSupport.roomName, PatrolTaskRecordDynamicSqlSupport.roomNumber, PatrolTaskRecordDynamicSqlSupport.completed, DerivedColumn.of("completed_count"))
|
|
|
+ .build().render(RenderingStrategies.MYBATIS3);
|
|
|
+ return selectRateByUserTaskRoomId(statementProvider);
|
|
|
+ }
|
|
|
+
|
|
|
+ @SelectProvider(type = SqlProviderAdapter.class, method = "select")
|
|
|
+ Optional<PatrolDetailsVO> selectDetailsByUserTaskRoomId(SelectStatementProvider selectStatement);
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 巡检任务记录
|
|
|
+ */
|
|
|
+ default Optional<PatrolDetailsVO> selectDetailsByUserTaskRoomId(Long taskId, Long roomId) {
|
|
|
+ SelectStatementProvider statementProvider = SqlBuilder.select(
|
|
|
+ PatrolTaskRecordDynamicSqlSupport.roomName,
|
|
|
+ PatrolTaskRecordDynamicSqlSupport.roomNumber,
|
|
|
+ PatrolTaskRecordDynamicSqlSupport.buildingName,
|
|
|
+ PatrolTaskRecordDynamicSqlSupport.floorName,
|
|
|
+ PatrolTaskDynamicSqlSupport.name,
|
|
|
+ PatrolTaskDynamicSqlSupport.status,
|
|
|
+ PatrolTaskDynamicSqlSupport.beginTime.as("time"),
|
|
|
+ PatrolTaskRecordDynamicSqlSupport.username,
|
|
|
+ sum(PatrolTaskRecordDynamicSqlSupport.score).as("score"))
|
|
|
+ .from(PatrolTaskDynamicSqlSupport.patrolTask)
|
|
|
+ .leftJoin(PatrolTaskRecordDynamicSqlSupport.patrolTaskRecord).on(PatrolTaskRecordDynamicSqlSupport.taskId, equalTo(PatrolTaskDynamicSqlSupport.id))
|
|
|
+ .where(PatrolTaskRecordDynamicSqlSupport.oneself, isTrue())
|
|
|
+ .and(PatrolTaskRecordDynamicSqlSupport.roomId, isEqualTo(roomId))
|
|
|
+ .and(PatrolTaskDynamicSqlSupport.id, isEqualTo(taskId))
|
|
|
+ .groupBy(PatrolTaskRecordDynamicSqlSupport.roomName,
|
|
|
+ PatrolTaskRecordDynamicSqlSupport.roomNumber,
|
|
|
+ PatrolTaskRecordDynamicSqlSupport.buildingName,
|
|
|
+ PatrolTaskRecordDynamicSqlSupport.floorName,
|
|
|
+ PatrolTaskDynamicSqlSupport.name,
|
|
|
+ PatrolTaskDynamicSqlSupport.status,
|
|
|
+ PatrolTaskDynamicSqlSupport.beginTime,
|
|
|
+ PatrolTaskRecordDynamicSqlSupport.username)
|
|
|
+ .build().render(RenderingStrategies.MYBATIS3);
|
|
|
+ return selectDetailsByUserTaskRoomId(statementProvider);
|
|
|
+ }
|
|
|
+
|
|
|
+ @SelectProvider(type = SqlProviderAdapter.class, method = "select")
|
|
|
+ List<PatrolRoomRecordVO> selectRoomRecordListByPlanRoomId(SelectStatementProvider selectStatement);
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询巡检任务
|
|
|
+ */
|
|
|
+ default List<PatrolRoomRecordVO> selectRoomRecordListByPlanRoomId(Long planId, Long roomId, Long userId) {
|
|
|
+ SelectStatementProvider statementProvider = SqlBuilder.select(
|
|
|
+ PatrolTaskDynamicSqlSupport.id,
|
|
|
+ PatrolTaskDynamicSqlSupport.beginTime.as("time"),
|
|
|
+ PatrolTaskRecordDynamicSqlSupport.roomId,
|
|
|
+ PatrolTaskRecordDynamicSqlSupport.roomName,
|
|
|
+ PatrolTaskRecordDynamicSqlSupport.username,
|
|
|
+ If.of(PatrolTaskRecordDynamicSqlSupport.taskId.qualifiedWith("qualified"), ">", Constant.of("0"), 0, 1).as("qualified"))
|
|
|
+ .from(PatrolTaskDynamicSqlSupport.patrolTask, "pt")
|
|
|
+ .join(PatrolTaskRecordDynamicSqlSupport.patrolTaskRecord, "ptr").on(PatrolTaskRecordDynamicSqlSupport.taskId, equalTo(PatrolTaskDynamicSqlSupport.id))
|
|
|
+ .leftJoin(
|
|
|
+ // 任务中不合格的房间
|
|
|
+ SqlBuilder.select(PatrolTaskRecordDynamicSqlSupport.taskId)
|
|
|
+ .from(PatrolTaskRecordDynamicSqlSupport.patrolTaskRecord)
|
|
|
+ .where(PatrolTaskRecordDynamicSqlSupport.roomId, isEqualTo(roomId))
|
|
|
+ .and(PatrolTaskRecordDynamicSqlSupport.userId, isEqualTo(userId))
|
|
|
+ .and(PatrolTaskRecordDynamicSqlSupport.completed, isTrue())
|
|
|
+ .and(PatrolTaskRecordDynamicSqlSupport.qualified, isFalse())
|
|
|
+ .groupBy(PatrolTaskRecordDynamicSqlSupport.taskId)
|
|
|
+ , "qualified"
|
|
|
+ ).on(PatrolTaskRecordDynamicSqlSupport.taskId.qualifiedWith("qualified"), equalTo(PatrolTaskRecordDynamicSqlSupport.taskId))
|
|
|
+ .where(PatrolTaskDynamicSqlSupport.planId, isEqualTo(planId))
|
|
|
+ .and(PatrolTaskRecordDynamicSqlSupport.roomId, isEqualTo(roomId))
|
|
|
+ .and(PatrolTaskRecordDynamicSqlSupport.userId, isEqualTo(userId))
|
|
|
+ .and(PatrolTaskRecordDynamicSqlSupport.completed, isTrue())
|
|
|
+ .groupBy(PatrolTaskDynamicSqlSupport.id, PatrolTaskRecordDynamicSqlSupport.roomId, PatrolTaskRecordDynamicSqlSupport.roomName, PatrolTaskRecordDynamicSqlSupport.username)
|
|
|
+ .orderBy(PatrolTaskDynamicSqlSupport.beginTime.descending())
|
|
|
+ .build().render(RenderingStrategies.MYBATIS3);
|
|
|
+ return selectRoomRecordListByPlanRoomId(statementProvider);
|
|
|
+ }
|
|
|
+
|
|
|
+ @SelectProvider(type = SqlProviderAdapter.class, method = "select")
|
|
|
+ List<PatrolRecordVO> selectRecordList(SelectStatementProvider selectStatement);
|
|
|
+
|
|
|
+ default List<PatrolRecordVO> selectRecordList(Boolean qualified, String keyword, LocalDateTime completedTimeStart, LocalDateTime completedTimeEnd) {
|
|
|
+ SelectStatementProvider statementProvider;
|
|
|
+ if (Objects.isNull(qualified) || !qualified) {
|
|
|
+ statementProvider = SqlBuilder.select(
|
|
|
+ PatrolTaskDynamicSqlSupport.id,
|
|
|
+ PatrolTaskDynamicSqlSupport.name,
|
|
|
+ PatrolTaskRecordDynamicSqlSupport.updateTime.qualifiedWith("ptr").as("time"),
|
|
|
+ PatrolTaskRecordDynamicSqlSupport.roomId.qualifiedWith("ptr"),
|
|
|
+ PatrolTaskRecordDynamicSqlSupport.roomName.qualifiedWith("ptr"),
|
|
|
+ PatrolTaskRecordDynamicSqlSupport.username.qualifiedWith("ptr"))
|
|
|
+ .from(PatrolTaskDynamicSqlSupport.patrolTask)
|
|
|
+ .join(
|
|
|
+ SqlBuilder.select(PatrolTaskRecordDynamicSqlSupport.taskId, PatrolTaskRecordDynamicSqlSupport.roomId, PatrolTaskRecordDynamicSqlSupport.roomName, PatrolTaskRecordDynamicSqlSupport.username, PatrolTaskRecordDynamicSqlSupport.updateTime)
|
|
|
+ .from(PatrolTaskRecordDynamicSqlSupport.patrolTaskRecord)
|
|
|
+ .where(PatrolTaskRecordDynamicSqlSupport.qualified, isEqualTo(qualified).filter(SqlExtBuilder.isNonEmpty()))
|
|
|
+ .and(PatrolTaskRecordDynamicSqlSupport.completed, isTrue())
|
|
|
+ .and(PatrolTaskRecordDynamicSqlSupport.oneself, isTrue())
|
|
|
+ .and(PatrolTaskRecordDynamicSqlSupport.updateTime, isGreaterThanOrEqualTo(completedTimeStart).filter(SqlExtBuilder.isNonEmpty()))
|
|
|
+ .and(PatrolTaskRecordDynamicSqlSupport.updateTime, isLessThanOrEqualTo(completedTimeEnd).filter(SqlExtBuilder.isNonEmpty()))
|
|
|
+ .groupBy(PatrolTaskRecordDynamicSqlSupport.taskId, PatrolTaskRecordDynamicSqlSupport.roomId, PatrolTaskRecordDynamicSqlSupport.roomName, PatrolTaskRecordDynamicSqlSupport.username, PatrolTaskRecordDynamicSqlSupport.updateTime)
|
|
|
+ , "ptr")
|
|
|
+ .on(PatrolTaskRecordDynamicSqlSupport.taskId.qualifiedWith("ptr"), equalTo(PatrolTaskDynamicSqlSupport.id))
|
|
|
+ .where(PatrolTaskRecordDynamicSqlSupport.username.qualifiedWith("ptr"), isLikeAll(keyword).filter(SqlExtBuilder.isNonEmpty()),
|
|
|
+ or(PatrolTaskDynamicSqlSupport.name, isLikeAll(keyword).filter(SqlExtBuilder.isNonEmpty())),
|
|
|
+ or(PatrolTaskRecordDynamicSqlSupport.roomName.qualifiedWith("ptr"), isLikeAll(keyword).filter(SqlExtBuilder.isNonEmpty())))
|
|
|
+ .build().render(RenderingStrategies.MYBATIS3);
|
|
|
+ } else {
|
|
|
+ statementProvider = SqlBuilder.select(
|
|
|
+ PatrolTaskDynamicSqlSupport.id,
|
|
|
+ PatrolTaskDynamicSqlSupport.name,
|
|
|
+ PatrolTaskRecordDynamicSqlSupport.updateTime.qualifiedWith("ptr").as("time"),
|
|
|
+ PatrolTaskRecordDynamicSqlSupport.roomId.qualifiedWith("ptr"),
|
|
|
+ PatrolTaskRecordDynamicSqlSupport.roomName.qualifiedWith("ptr"),
|
|
|
+ PatrolTaskRecordDynamicSqlSupport.username.qualifiedWith("ptr"))
|
|
|
+ .from(PatrolTaskDynamicSqlSupport.patrolTask)
|
|
|
+ .join(
|
|
|
+ SqlBuilder.select(PatrolTaskRecordDynamicSqlSupport.taskId, PatrolTaskRecordDynamicSqlSupport.roomId, PatrolTaskRecordDynamicSqlSupport.roomName, PatrolTaskRecordDynamicSqlSupport.userId, PatrolTaskRecordDynamicSqlSupport.username, PatrolTaskRecordDynamicSqlSupport.updateTime,
|
|
|
+ countDistinct(PatrolTaskRecordDynamicSqlSupport.id).as("total"))
|
|
|
+ .from(PatrolTaskRecordDynamicSqlSupport.patrolTaskRecord)
|
|
|
+ .where(PatrolTaskRecordDynamicSqlSupport.completed, isTrue())
|
|
|
+ .and(PatrolTaskRecordDynamicSqlSupport.oneself, isTrue())
|
|
|
+ .and(PatrolTaskRecordDynamicSqlSupport.updateTime, isGreaterThanOrEqualTo(completedTimeStart).filter(SqlExtBuilder.isNonEmpty()))
|
|
|
+ .and(PatrolTaskRecordDynamicSqlSupport.updateTime, isLessThanOrEqualTo(completedTimeEnd).filter(SqlExtBuilder.isNonEmpty()))
|
|
|
+ .groupBy(PatrolTaskRecordDynamicSqlSupport.taskId, PatrolTaskRecordDynamicSqlSupport.roomId, PatrolTaskRecordDynamicSqlSupport.roomName, PatrolTaskRecordDynamicSqlSupport.userId, PatrolTaskRecordDynamicSqlSupport.username, PatrolTaskRecordDynamicSqlSupport.updateTime)
|
|
|
+ , "ptr")
|
|
|
+ .on(PatrolTaskRecordDynamicSqlSupport.taskId.qualifiedWith("ptr"), equalTo(PatrolTaskDynamicSqlSupport.id))
|
|
|
+ .join(
|
|
|
+ // 合格项目数
|
|
|
+ SqlBuilder.select(PatrolTaskRecordDynamicSqlSupport.taskId, PatrolTaskRecordDynamicSqlSupport.roomId, PatrolTaskRecordDynamicSqlSupport.userId,
|
|
|
+ countDistinct(PatrolTaskRecordDynamicSqlSupport.id).as("qualified_total"))
|
|
|
+ .from(PatrolTaskRecordDynamicSqlSupport.patrolTaskRecord)
|
|
|
+ .where(PatrolTaskRecordDynamicSqlSupport.qualified, isTrue())
|
|
|
+ .and(PatrolTaskRecordDynamicSqlSupport.completed, isTrue())
|
|
|
+ .and(PatrolTaskRecordDynamicSqlSupport.oneself, isTrue())
|
|
|
+ .groupBy(PatrolTaskRecordDynamicSqlSupport.taskId, PatrolTaskRecordDynamicSqlSupport.roomId, PatrolTaskRecordDynamicSqlSupport.userId)
|
|
|
+ , "qualified"
|
|
|
+ ).on(PatrolTaskRecordDynamicSqlSupport.taskId.qualifiedWith("qualified"), equalTo(PatrolTaskRecordDynamicSqlSupport.taskId.qualifiedWith("ptr")))
|
|
|
+ .and(PatrolTaskRecordDynamicSqlSupport.roomId.qualifiedWith("qualified"), equalTo(PatrolTaskRecordDynamicSqlSupport.roomId.qualifiedWith("ptr")))
|
|
|
+ .and(PatrolTaskRecordDynamicSqlSupport.userId.qualifiedWith("qualified"), equalTo(PatrolTaskRecordDynamicSqlSupport.userId.qualifiedWith("ptr")))
|
|
|
+ .and(DerivedColumn.of("qualified_total"), equalTo(DerivedColumn.of("total")))
|
|
|
+ .where(PatrolTaskRecordDynamicSqlSupport.username.qualifiedWith("ptr"), isLikeAll(keyword).filter(SqlExtBuilder.isNonEmpty()),
|
|
|
+ or(PatrolTaskDynamicSqlSupport.name, isLikeAll(keyword).filter(SqlExtBuilder.isNonEmpty())),
|
|
|
+ or(PatrolTaskRecordDynamicSqlSupport.roomName.qualifiedWith("ptr"), isLikeAll(keyword).filter(SqlExtBuilder.isNonEmpty())))
|
|
|
+ .build().render(RenderingStrategies.MYBATIS3);
|
|
|
+ }
|
|
|
+ return selectRecordList(statementProvider);
|
|
|
+ }
|
|
|
+
|
|
|
+ default List<PatrolRecordVO> selectRecordList(Boolean qualified, String keyword, LocalDateTime beginTimeStart, LocalDateTime beginTimeEnd, Integer page, Integer size) {
|
|
|
+ SelectStatementProvider statementProvider;
|
|
|
+ if (Objects.isNull(qualified) || !qualified) {
|
|
|
+ statementProvider = SqlBuilder.select(
|
|
|
+ PatrolTaskDynamicSqlSupport.id.qualifiedWith("pt"),
|
|
|
+ PatrolTaskDynamicSqlSupport.name.qualifiedWith("pt"),
|
|
|
+ PatrolTaskDynamicSqlSupport.beginTime.qualifiedWith("pt").as("time"),
|
|
|
+ PatrolTaskRecordDynamicSqlSupport.roomId.qualifiedWith("ptr"),
|
|
|
+ PatrolTaskRecordDynamicSqlSupport.roomName.qualifiedWith("ptr"),
|
|
|
+ PatrolTaskRecordDynamicSqlSupport.username.qualifiedWith("ptr"))
|
|
|
+ .from(
|
|
|
+ SqlBuilder.select(PatrolTaskDynamicSqlSupport.id, PatrolTaskDynamicSqlSupport.name, PatrolTaskDynamicSqlSupport.beginTime)
|
|
|
+ .from(PatrolTaskDynamicSqlSupport.patrolTask)
|
|
|
+ .where(PatrolTaskDynamicSqlSupport.beginTime, isGreaterThanOrEqualTo(beginTimeStart).filter(SqlExtBuilder.isNonEmpty()))
|
|
|
+ .and(PatrolTaskDynamicSqlSupport.beginTime, isLessThanOrEqualTo(beginTimeEnd).filter(SqlExtBuilder.isNonEmpty()))
|
|
|
+ .and(PatrolTaskDynamicSqlSupport.status, isEqualTo(TASK_STATE_COMPLETED),
|
|
|
+ or(PatrolTaskDynamicSqlSupport.status, isEqualTo(TASK_STATE_OMISSION)),
|
|
|
+ or(PatrolTaskDynamicSqlSupport.status, isEqualTo(TASK_STATE_TIMEOUT_COMPLETED)))
|
|
|
+ , "pt")
|
|
|
+ .join(
|
|
|
+ SqlBuilder.select(PatrolTaskRecordDynamicSqlSupport.taskId, PatrolTaskRecordDynamicSqlSupport.roomId, PatrolTaskRecordDynamicSqlSupport.roomName, PatrolTaskRecordDynamicSqlSupport.username)
|
|
|
+ .from(PatrolTaskRecordDynamicSqlSupport.patrolTaskRecord)
|
|
|
+ .where(PatrolTaskRecordDynamicSqlSupport.qualified, isEqualTo(qualified).filter(SqlExtBuilder.isNonEmpty()))
|
|
|
+ .groupBy(PatrolTaskRecordDynamicSqlSupport.taskId, PatrolTaskRecordDynamicSqlSupport.roomId, PatrolTaskRecordDynamicSqlSupport.roomName, PatrolTaskRecordDynamicSqlSupport.username)
|
|
|
+ , "ptr")
|
|
|
+ .on(PatrolTaskRecordDynamicSqlSupport.taskId.qualifiedWith("ptr"), equalTo(PatrolTaskDynamicSqlSupport.id.qualifiedWith("pt")))
|
|
|
+ .where(PatrolTaskRecordDynamicSqlSupport.username.qualifiedWith("ptr"), isLikeAll(keyword).filter(SqlExtBuilder.isNonEmpty()),
|
|
|
+ or(PatrolTaskDynamicSqlSupport.name.qualifiedWith("pt"), isLikeAll(keyword).filter(SqlExtBuilder.isNonEmpty())),
|
|
|
+ or(PatrolTaskRecordDynamicSqlSupport.roomName.qualifiedWith("ptr"), isLikeAll(keyword).filter(SqlExtBuilder.isNonEmpty())))
|
|
|
+ .orderBy(PatrolTaskDynamicSqlSupport.beginTime.descending())
|
|
|
+ .limit(size).offset((long) (page - 1) * size)
|
|
|
+ .build().render(RenderingStrategies.MYBATIS3);
|
|
|
+ } else {
|
|
|
+ statementProvider = SqlBuilder.select(
|
|
|
+ PatrolTaskDynamicSqlSupport.id.qualifiedWith("pt"),
|
|
|
+ PatrolTaskDynamicSqlSupport.name.qualifiedWith("pt"),
|
|
|
+ PatrolTaskDynamicSqlSupport.beginTime.qualifiedWith("pt").as("time"),
|
|
|
+ PatrolTaskRecordDynamicSqlSupport.roomId.qualifiedWith("ptr"),
|
|
|
+ PatrolTaskRecordDynamicSqlSupport.roomName.qualifiedWith("ptr"),
|
|
|
+ PatrolTaskRecordDynamicSqlSupport.username.qualifiedWith("ptr"))
|
|
|
+ .from(
|
|
|
+ SqlBuilder.select(PatrolTaskDynamicSqlSupport.id, PatrolTaskDynamicSqlSupport.name, PatrolTaskDynamicSqlSupport.beginTime)
|
|
|
+ .from(PatrolTaskDynamicSqlSupport.patrolTask)
|
|
|
+ .where(PatrolTaskDynamicSqlSupport.beginTime, isGreaterThanOrEqualTo(beginTimeStart).filter(SqlExtBuilder.isNonEmpty()))
|
|
|
+ .and(PatrolTaskDynamicSqlSupport.beginTime, isLessThanOrEqualTo(beginTimeEnd).filter(SqlExtBuilder.isNonEmpty()))
|
|
|
+ .and(PatrolTaskDynamicSqlSupport.status, isEqualTo(TASK_STATE_COMPLETED),
|
|
|
+ or(PatrolTaskDynamicSqlSupport.status, isEqualTo(TASK_STATE_OMISSION)),
|
|
|
+ or(PatrolTaskDynamicSqlSupport.status, isEqualTo(TASK_STATE_TIMEOUT_COMPLETED)))
|
|
|
+ , "pt")
|
|
|
+ .join(
|
|
|
+ SqlBuilder.select(PatrolTaskRecordDynamicSqlSupport.taskId, PatrolTaskRecordDynamicSqlSupport.roomId, PatrolTaskRecordDynamicSqlSupport.roomName, PatrolTaskRecordDynamicSqlSupport.userId, PatrolTaskRecordDynamicSqlSupport.username,
|
|
|
+ countDistinct(PatrolTaskRecordDynamicSqlSupport.id).as("total"))
|
|
|
+ .from(PatrolTaskRecordDynamicSqlSupport.patrolTaskRecord)
|
|
|
+ .groupBy(PatrolTaskRecordDynamicSqlSupport.taskId, PatrolTaskRecordDynamicSqlSupport.roomId, PatrolTaskRecordDynamicSqlSupport.roomName, PatrolTaskRecordDynamicSqlSupport.userId, PatrolTaskRecordDynamicSqlSupport.username)
|
|
|
+ , "ptr")
|
|
|
+ .on(PatrolTaskRecordDynamicSqlSupport.taskId.qualifiedWith("ptr"), equalTo(PatrolTaskDynamicSqlSupport.id.qualifiedWith("pt")))
|
|
|
+ .join(
|
|
|
+ // 合格项目数
|
|
|
+ SqlBuilder.select(PatrolTaskRecordDynamicSqlSupport.taskId, PatrolTaskRecordDynamicSqlSupport.roomId, PatrolTaskRecordDynamicSqlSupport.userId,
|
|
|
+ countDistinct(PatrolTaskRecordDynamicSqlSupport.id).as("qualified_total"))
|
|
|
+ .from(PatrolTaskRecordDynamicSqlSupport.patrolTaskRecord)
|
|
|
+ .where(PatrolTaskRecordDynamicSqlSupport.qualified, isTrue())
|
|
|
+ .groupBy(PatrolTaskRecordDynamicSqlSupport.taskId, PatrolTaskRecordDynamicSqlSupport.roomId, PatrolTaskRecordDynamicSqlSupport.userId)
|
|
|
+ , "qualified"
|
|
|
+ ).on(PatrolTaskRecordDynamicSqlSupport.taskId.qualifiedWith("qualified"), equalTo(PatrolTaskRecordDynamicSqlSupport.taskId.qualifiedWith("ptr")))
|
|
|
+ .and(PatrolTaskRecordDynamicSqlSupport.roomId.qualifiedWith("qualified"), equalTo(PatrolTaskRecordDynamicSqlSupport.roomId.qualifiedWith("ptr")))
|
|
|
+ .and(PatrolTaskRecordDynamicSqlSupport.userId.qualifiedWith("qualified"), equalTo(PatrolTaskRecordDynamicSqlSupport.userId.qualifiedWith("ptr")))
|
|
|
+ .and(DerivedColumn.of("qualified_total"), equalTo(DerivedColumn.of("total")))
|
|
|
+ .where(PatrolTaskRecordDynamicSqlSupport.username.qualifiedWith("ptr"), isLikeAll(keyword).filter(SqlExtBuilder.isNonEmpty()),
|
|
|
+ or(PatrolTaskDynamicSqlSupport.name.qualifiedWith("pt"), isLikeAll(keyword).filter(SqlExtBuilder.isNonEmpty())),
|
|
|
+ or(PatrolTaskRecordDynamicSqlSupport.roomName.qualifiedWith("ptr"), isLikeAll(keyword).filter(SqlExtBuilder.isNonEmpty())))
|
|
|
+ .orderBy(PatrolTaskDynamicSqlSupport.beginTime.descending())
|
|
|
+ .limit(size).offset((long) (page - 1) * size)
|
|
|
+ .build().render(RenderingStrategies.MYBATIS3);
|
|
|
+ }
|
|
|
+ return selectRecordList(statementProvider);
|
|
|
+ }
|
|
|
+}
|