Преглед на файлове

feat:报表中心异常导出

Joburgess преди 4 години
родител
ревизия
0d2d3b931c

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/IndexErrDataRecordDao.java

@@ -100,6 +100,10 @@ public interface IndexErrDataRecordDao extends BaseDAO<Long, IndexErrDataRecord>
     List<IndexErrDataRecord> getNoAttendance(@Param("date") String date,
                                              @Param("dates") Set<String> dates);
 
+    List<String> queryErrStrings(Map<String, Object> params);
+    int queryErrStringsCount(Map<String, Object> params);
+    List<IndexErrDataRecord> getWithOrganMonthUserStr(@Param("omuStrings") List<String> omuStrings);
+
     /**
      * @describe 历史异常数据-乐团巡查事项异常/乐团巡查任务未提交
      * @author Joburgess

+ 40 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/IndexErrRecordQueryInfo.java

@@ -0,0 +1,40 @@
+package com.ym.mec.biz.dal.page;
+
+import com.ym.mec.common.page.QueryInfo;
+
+/**
+ * @Author Joburgess
+ * @Date 2021/5/31 0031
+ */
+public class IndexErrRecordQueryInfo extends QueryInfo {
+
+    private String organIds;
+
+    private String startDate;
+
+    private String endDate;
+
+    public String getOrganIds() {
+        return organIds;
+    }
+
+    public void setOrganIds(String organIds) {
+        this.organIds = organIds;
+    }
+
+    public String getStartDate() {
+        return startDate;
+    }
+
+    public void setStartDate(String startDate) {
+        this.startDate = startDate;
+    }
+
+    public String getEndDate() {
+        return endDate;
+    }
+
+    public void setEndDate(String endDate) {
+        this.endDate = endDate;
+    }
+}

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/IndexErrDataRecordService.java

@@ -6,9 +6,11 @@ import com.ym.mec.biz.dal.entity.IndexErrDataRecord;
 import com.ym.mec.biz.dal.entity.InspectionItem;
 import com.ym.mec.biz.dal.entity.InspectionItemPlan;
 import com.ym.mec.biz.dal.page.EndCourseScheduleQueryInfo;
+import com.ym.mec.biz.dal.page.IndexErrRecordQueryInfo;
 import com.ym.mec.biz.dal.page.InspectionItemPlanQueryInfo;
 import com.ym.mec.biz.dal.page.InspectionQueryInfo;
 import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.service.BaseService;
 
 import java.util.List;
@@ -34,6 +36,8 @@ public interface IndexErrDataRecordService extends BaseService<Long, IndexErrDat
      */
     List<IndexErrorDataExportDto> errRecordExport(String organIds, String startDate, String endDate);
 
+    PageInfo<IndexErrorDataExportDto> queryRecord(IndexErrRecordQueryInfo queryInfo);
+
     /**
      * @describe 历史异常数据-乐团巡查事项异常
      * @author Joburgess

+ 71 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexErrDataRecordServiceImpl.java

@@ -12,11 +12,13 @@ import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.IndexErrorType;
 import com.ym.mec.biz.dal.enums.InspectionItemEnum;
 import com.ym.mec.biz.dal.page.EndCourseScheduleQueryInfo;
+import com.ym.mec.biz.dal.page.IndexErrRecordQueryInfo;
 import com.ym.mec.biz.dal.page.InspectionItemPlanQueryInfo;
 import com.ym.mec.biz.dal.page.InspectionQueryInfo;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import org.apache.commons.lang3.StringUtils;
@@ -237,6 +239,75 @@ public class IndexErrDataRecordServiceImpl extends BaseServiceImpl<Long, IndexEr
 	}
 
 	@Override
+	public PageInfo<IndexErrorDataExportDto> queryRecord(IndexErrRecordQueryInfo queryInfo) {
+		PageInfo<IndexErrorDataExportDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+		Map<String, Object> params = new HashMap<String, Object>();
+		MapUtil.populateMap(params, queryInfo);
+		Set<Integer> queryOrganIds = null;
+		if(StringUtils.isNotBlank(queryInfo.getOrganIds())){
+			queryOrganIds = Arrays.stream(queryInfo.getOrganIds().split(",")).map(Integer::new).collect(Collectors.toSet());
+		}
+		params.put("queryOrganIds", queryOrganIds);
+
+		int count = indexErrDataRecordDao.queryErrStringsCount(params);
+		pageInfo.setTotal(count);
+		params.put("offset", pageInfo.getOffset());
+		List<IndexErrorDataExportDto> dataList = new ArrayList<>();
+		List<String> strings = indexErrDataRecordDao.queryErrStrings(params);
+		if (!CollectionUtils.isEmpty(strings)) {
+			List<IndexErrDataRecord> errRecords = indexErrDataRecordDao.getWithOrganMonthUserStr(strings);
+			List<Integer> organIds = errRecords.stream().map(IndexErrDataRecord::getOrganId).collect(Collectors.toList());
+			List<Organization> organs = organizationDao.findOrgans(organIds);
+			Map<Integer, String> idOrganNameMap = organs.stream().collect(Collectors.toMap(Organization::getId, o -> o.getName()));
+
+			List<Integer> userIds = errRecords.stream().map(IndexErrDataRecord::getDealUserId).collect(Collectors.toList());
+			Map<Integer, SimpleUserDto> idUserMap = new HashMap<>();
+			if(!CollectionUtils.isEmpty(userIds)){
+				List<SimpleUserDto> users = teacherDao.getUsersSimpleInfo(userIds);
+				idUserMap = users.stream().collect(Collectors.toMap(SimpleUserDto::getUserId, u->u, (u1, u2)->u1));
+			}
+			Map<Integer, List<IndexErrDataRecord>> organDataMap = errRecords.stream().collect(Collectors.groupingBy(IndexErrDataRecord::getOrganId));
+			for (Map.Entry<Integer, List<IndexErrDataRecord>> organDataMapEntry : organDataMap.entrySet()) {
+				Map<Date, Map<Integer, List<IndexErrDataRecord>>> dateUserRecordMap = organDataMapEntry.getValue().stream().collect(Collectors.groupingBy(IndexErrDataRecord::getGenerateTime, Collectors.groupingBy(IndexErrDataRecord::getDealUserId)));
+				for (Map.Entry<Date, Map<Integer, List<IndexErrDataRecord>>> dateUserRecordMapEntry : dateUserRecordMap.entrySet()) {
+					String generateTimeStr = DateUtil.dateToString(dateUserRecordMapEntry.getKey(), DateUtil.DATE_FORMAT_MIN);
+					for (Map.Entry<Integer, List<IndexErrDataRecord>> userRecordMapEntry : dateUserRecordMapEntry.getValue().entrySet()) {
+						IndexErrorDataExportDto record = new IndexErrorDataExportDto();
+						record.setGenerateTime(generateTimeStr);
+						record.setOrganName(idOrganNameMap.get(organDataMapEntry.getKey()));
+						if(idUserMap.containsKey(userRecordMapEntry.getKey())){
+							record.setDealUserName(idUserMap.get(userRecordMapEntry.getKey()).getUserName());
+						}
+						Map<IndexErrorType, Long> typeDataNumMap = userRecordMapEntry.getValue().stream().collect(Collectors.groupingBy(IndexErrDataRecord::getDataType, Collectors.counting()));
+						for (Map.Entry<IndexErrorType, Long> typeDataNumMapEntry : typeDataNumMap.entrySet()) {
+							switch (typeDataNumMapEntry.getKey()){
+								case MUSIC_PATROL_ITEM:
+									record.setMusicPatrolItem(typeDataNumMapEntry.getValue().intValue());
+									break;
+								case INSPECTION_ITEM_PLAN:
+									record.setInspectionItemPlan(typeDataNumMapEntry.getValue().intValue());
+									break;
+								case STUDENT_VISIT:
+									record.setStudentVisit(typeDataNumMapEntry.getValue().intValue());
+									break;
+								case TEACHER_EXCEPTION_ATTENDANCE:
+									record.setTeacherExceptionAttendance(typeDataNumMapEntry.getValue().intValue());
+									break;
+								case TEACHER_NOT_A_CLASS:
+									record.setTeacherNotAClass(typeDataNumMapEntry.getValue().intValue());
+									break;
+							}
+						}
+						dataList.add(record);
+					}
+				}
+			}
+		}
+		pageInfo.setRows(dataList);
+		return pageInfo;
+	}
+
+	@Override
 	public PageInfo<InspectionItemPlan> queryErrInspectionData(InspectionItemPlanQueryInfo queryInfo) {
 		PageInfo<InspectionItemPlan> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
 		Map<String, Object> params = new HashMap<String, Object>();

+ 37 - 0
mec-biz/src/main/resources/config/mybatis/IndexErrDataRecordMapper.xml

@@ -267,6 +267,43 @@
 			</if>
 	</select>
 
+	<sql id="queryErrStringsCondition">
+		<where>
+			<if test="queryOrganIds!=null and queryOrganIds.size()>0">
+				AND organ_id_ IN
+				<foreach collection="queryOrganIds" item="organId" open="(" close=")" separator=",">
+					#{organId}
+				</foreach>
+			</if>
+			<if test="generateStartTime!=null and generateStartTime!=''">
+				AND generate_time_&gt;=#{generateStartTime}
+			</if>
+			<if test="generateEndTime!=null and generateEndTime!=''">
+				AND generate_time_&lt;=#{generateEndTime}
+			</if>
+		</where>
+	</sql>
+
+	<select id="queryErrStrings" resultType="string">
+		SELECT CONCAT(generate_time_, organ_id_, deal_user_id_) FROM index_err_data_record
+		<include refid="queryErrStringsCondition"></include>
+		GROUP BY generate_time_,organ_id_,deal_user_id_
+		ORDER BY generate_time_ DESC,organ_id_,deal_user_id_
+		<include refid="global.limit"></include>
+	</select>
+
+	<select id="queryErrStringsCount" resultType="int">
+		SELECT COUNT(DISTINCT CONCAT(generate_time_,organ_id_,deal_user_id_)) FROM index_err_data_record
+		<include refid="queryErrStringsCondition"></include>
+	</select>
+
+	<select id="getWithOrganMonthUserStr" resultMap="IndexErrDataRecord">
+		SELECT * FROM index_err_data_record WHERE CONCAT(generate_time_, organ_id_, deal_user_id_) IN
+		<foreach collection="omuStrings" item="omuString" open="(" close=")" separator=",">
+			#{omuString}
+		</foreach>
+	</select>
+
 	<select id="queryErrInspectionData" resultMap="com.ym.mec.biz.dal.dao.InspectionItemPlanDao.InspectionItemPlan" parameterType="map">
 		SELECT iip.*,su.real_name_ realName,o.name_ organName,co.name_ cooperationName,mg.name_ musicGroupName,
 		       irdr.generate_time_ generateTime,irdr.deal_time_ dealTime

+ 25 - 1
mec-web/src/main/java/com/ym/mec/web/IndexErrDataRecordController.java

@@ -6,9 +6,12 @@ import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.entity.SysUserRole;
 import com.ym.mec.biz.dal.dao.EmployeeDao;
 import com.ym.mec.biz.dal.dto.CourseScheduleEndDto;
+import com.ym.mec.biz.dal.dto.IndexErrorDataExportDto;
 import com.ym.mec.biz.dal.entity.Employee;
 import com.ym.mec.biz.dal.entity.InspectionItem;
+import com.ym.mec.biz.dal.entity.InspectionItemPlan;
 import com.ym.mec.biz.dal.page.EndCourseScheduleQueryInfo;
+import com.ym.mec.biz.dal.page.IndexErrRecordQueryInfo;
 import com.ym.mec.biz.dal.page.InspectionItemPlanQueryInfo;
 import com.ym.mec.biz.dal.page.InspectionQueryInfo;
 import com.ym.mec.biz.service.IndexErrDataRecordService;
@@ -44,9 +47,30 @@ public class IndexErrDataRecordController extends BaseController {
     @Autowired
     private IndexErrDataRecordService indexErrDataRecordService;
 
+    @ApiOperation(value = "历史异常记录")
+    @GetMapping("/queryRecord")
+    public HttpResponseResult<PageInfo<IndexErrorDataExportDto>> queryRecord(IndexErrRecordQueryInfo queryInfo){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        Employee employee = employeeDao.get(sysUser.getId());
+        if (StringUtils.isEmpty(queryInfo.getOrganIds())) {
+            queryInfo.setOrganIds(employee.getOrganIdList());
+        } else if (StringUtils.isEmpty(employee.getOrganIdList())) {
+            return failed("用户所在分部异常");
+        } else {
+            List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
+            if (!list.containsAll(Arrays.asList(queryInfo.getOrganIds().split(",")))) {
+                return failed("非法请求");
+            }
+        }
+        return succeed(indexErrDataRecordService.queryRecord(queryInfo));
+    }
+
     @ApiOperation(value = "乐团巡查事项异常/乐团巡查任务未提交")
     @GetMapping("/queryErrInspectionData")
-    public HttpResponseResult queryErrInspectionData(InspectionItemPlanQueryInfo queryInfo){
+    public HttpResponseResult<PageInfo<InspectionItemPlan>> queryErrInspectionData(InspectionItemPlanQueryInfo queryInfo){
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null) {
             return failed("用户信息获取失败");

+ 5 - 5
mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java

@@ -2894,23 +2894,23 @@ public class ExportController extends BaseController {
     @ApiOperation(value = "首页历史异常统计导出")
     @RequestMapping("export/exportIndexHistoryErrData")
     @PreAuthorize("@pcs.hasPermissions('export/exportIndexHistoryErrData')")
-    public void exportIndexHistoryErrData(String organId, String startDate, String endDate, HttpServletResponse response) throws IOException {
+    public void exportIndexHistoryErrData(IndexErrRecordQueryInfo queryInfo, HttpServletResponse response) throws IOException {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null) {
             throw new BizException("用户信息获取失败");
         }
         Employee employee = employeeService.get(sysUser.getId());
-        if (StringUtils.isBlank(organId)) {
-            organId = employee.getOrganIdList();
+        if (StringUtils.isBlank(queryInfo.getOrganIds())) {
+            queryInfo.setOrganIds(employee.getOrganIdList());
         }else if(StringUtils.isEmpty(employee.getOrganIdList())){
             throw new BizException("用户所在分部异常");
         }else {
             List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
-            if(!list.containsAll(Arrays.asList(organId.split(",")))){
+            if(!list.containsAll(Arrays.asList(queryInfo.getOrganIds().split(",")))){
                 throw new BizException("非法请求");
             }
         }
-        List<IndexErrorDataExportDto> result = indexErrDataRecordService.errRecordExport(organId, startDate, endDate);
+        List<IndexErrorDataExportDto> result = indexErrDataRecordService.queryRecord(queryInfo).getRows();
         if (CollectionUtils.isEmpty(result)) {
             response.setStatus(200);
             response.setContentType("Content-Type: application/json;charset=UTF-8");