Kaynağa Gözat

Merge branch 'pre'

dzx 1 yıl önce
ebeveyn
işleme
d7cd26bdbc

+ 2 - 2
src/main/java/com/xjrsoft/common/enums/CourseTimeTypeEnum.java

@@ -46,12 +46,12 @@ public enum CourseTimeTypeEnum {
     }
 
     public static String[] getCodes() {
-        String[] codes = {"CTT001", "CTT002", "CTT003", "CTT004", "CTT005", "周末培优"};
+        String[] codes = {"CTT001", "CTT002", "CTT003", "CTT004", "CTT005", "CTT006"};
         return codes;
     }
 
     public static String[] getValues() {
-        String[] values = {"教研会", "督导听课", "临近三年退休政策", "出题", "阅卷", "CTT006"};
+        String[] values = {"教研会", "督导听课", "临近三年退休政策", "出题", "阅卷", "周末培优"};
         return values;
     }
 }

+ 9 - 0
src/main/java/com/xjrsoft/module/classtime/controller/ClassTimeStatisticsController.java

@@ -202,6 +202,15 @@ public class ClassTimeStatisticsController {
         return RT.ok(record.getAllClassTimeData());
     }
 
+    @PostMapping(value = "/record-detail-export-query")
+    @ApiOperation(value="课时统计详情明细-导出")
+    @SaCheckPermission("classtimestatistics:detail")
+    public ResponseEntity<byte[]> recordDetailExportQuery(@Valid @RequestBody RefreshStatisticsDto dto) throws IOException {
+        String fileName = "recordDetailExportQuery" + ExcelTypeEnum.XLSX.getValue();
+        byte[] bytes = recordService.recordDetailExportQuery(dto.getId());
+        return RT.fileStream(bytes, fileName);
+    }
+
 
     @PostMapping(value = "/record-export-query")
     @ApiOperation(value="课时统计详情导出")

+ 3 - 0
src/main/java/com/xjrsoft/module/classtime/service/IClassTimeStatisticsRecordService.java

@@ -3,6 +3,8 @@ package com.xjrsoft.module.classtime.service;
 import com.github.yulichang.base.MPJBaseService;
 import com.xjrsoft.module.classtime.entity.ClassTimeStatisticsRecord;
 
+import java.io.IOException;
+
 /**
 * @title: 课时统计
 * @Author dzx
@@ -12,4 +14,5 @@ import com.xjrsoft.module.classtime.entity.ClassTimeStatisticsRecord;
 
 public interface IClassTimeStatisticsRecordService extends MPJBaseService<ClassTimeStatisticsRecord> {
 
+    byte[] recordDetailExportQuery(Long id) throws IOException;
 }

+ 3 - 0
src/main/java/com/xjrsoft/module/classtime/service/impl/ClassTimeCalendarServiceImpl.java

@@ -20,6 +20,7 @@ import java.time.DayOfWeek;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
 * @title: 节假日调课设置
@@ -59,6 +60,8 @@ public class ClassTimeCalendarServiceImpl extends MPJBaseServiceImpl<ClassTimeCa
             }
             courseTableBakService.saveBatch(bakList);
 
+            courseTableService.removeBatchByIds(deleteList.stream().map(CourseTable::getId).collect(Collectors.toList()));
+
             //3、将补课日期的数据查询出来,将日期改为补班日期进行新增
             List<CourseTable> insertList = new ArrayList<>();
             for (CourseTable courseTable : list) {

+ 3 - 2
src/main/java/com/xjrsoft/module/classtime/service/impl/ClassTimeStatisticsServiceImpl.java

@@ -53,6 +53,7 @@ import java.util.Arrays;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -160,7 +161,7 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
 
             //费用设置jsonArray
             JsonArray costSetArray = parser.parse(statistics.getCostSetJson()).getAsJsonArray();
-            Map<String, Double> costSetMap = new HashMap<>();
+            Map<String, Double> costSetMap = new LinkedHashMap<>();
             for (JsonElement jsonElement : costSetArray) {
                 JsonObject object = jsonElement.getAsJsonObject();
                 costSetMap.put(object.get("field").getAsString(), object.get("value").getAsDouble());
@@ -168,7 +169,7 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
 
             //权重设置jsonArray
             JsonArray weightSetArray = parser.parse(statistics.getWeightSetJson()).getAsJsonArray();
-            Map<String, Double> weightSetMap = new HashMap<>();
+            Map<String, Double> weightSetMap = new LinkedHashMap<>();
             for (JsonElement jsonElement : weightSetArray) {
                 JsonObject object = jsonElement.getAsJsonObject();
                 weightSetMap.put(object.get("label").getAsString(), object.get("value").getAsDouble());

+ 235 - 0
src/main/java/com/xjrsoft/module/classtime/service/impl/ClassTimeStatisticsServiceRecordImpl.java

@@ -1,12 +1,37 @@
 package com.xjrsoft.module.classtime.service.impl;
 
 import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+import com.xjrsoft.common.exception.MyException;
+import com.xjrsoft.module.classtime.entity.ClassTimeStatistics;
 import com.xjrsoft.module.classtime.entity.ClassTimeStatisticsRecord;
 import com.xjrsoft.module.classtime.mapper.ClassTimeStatisticsRecordMapper;
 import com.xjrsoft.module.classtime.service.IClassTimeStatisticsRecordService;
+import com.xjrsoft.module.classtime.service.IClassTimeStatisticsService;
 import lombok.AllArgsConstructor;
+import org.apache.poi.ss.usermodel.BorderStyle;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.CellStyle;
+import org.apache.poi.ss.usermodel.FillPatternType;
+import org.apache.poi.ss.usermodel.Font;
+import org.apache.poi.ss.usermodel.IndexedColors;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFColor;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.springframework.stereotype.Service;
 
+import java.awt.*;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
 /**
 * @title: 课时统计
 * @Author dzx
@@ -16,5 +41,215 @@ import org.springframework.stereotype.Service;
 @Service
 @AllArgsConstructor
 public class ClassTimeStatisticsServiceRecordImpl extends MPJBaseServiceImpl<ClassTimeStatisticsRecordMapper, ClassTimeStatisticsRecord> implements IClassTimeStatisticsRecordService {
+    private final IClassTimeStatisticsService statisticsService;
+    /**
+     * 导出教师的明细
+     * @return
+     */
+    @Override
+    public byte[] recordDetailExportQuery(Long id) throws IOException {
+        try {
+
+        }catch(Exception e){
+            log.error(e.getMessage());
+            throw new MyException("导出失败,请联系管理员");
+        }
+
+        ClassTimeStatisticsRecord record = this.getById(id);
+        ClassTimeStatistics statistics = statisticsService.getById(record.getClassTimeStatisticsId());
+
+        String allClassTimeData = record.getAllClassTimeData();
+        JsonParser parser = new JsonParser();
+        JsonObject allClassTimeDataJson = parser.parse(allClassTimeData).getAsJsonObject();
+        JsonArray data = allClassTimeDataJson.get("data").getAsJsonArray();
+        JsonArray rowTitle = allClassTimeDataJson.get("rowTitle").getAsJsonArray();
+        int allColumnNumber = rowTitle.size() + 2;//表格最大列号
+        //总的数据
+        Map<Integer, Map<Integer, JsonObject>> dataMap = new LinkedHashMap<>();
+
+        //1、组装execel表头
+        Map<Integer, JsonObject> cellJsonMap = new LinkedHashMap<>();//表头第一行
+        Map<Integer, JsonObject> lastRowMap = new LinkedHashMap<>();//最后一行数据
+        int rowNumber = 0;
+
+        JsonObject cellJson = new JsonObject();
+        cellJson.addProperty("content", "课程名称(计算课时)");
+        cellJson.addProperty("adjustType", "title");
+        cellJsonMap.put(rowNumber, cellJson);
+
+        JsonObject lastRowJson = new JsonObject();
+        lastRowJson.addProperty("content", "合计(课时)");
+        lastRowJson.addProperty("adjustType", "");
+        lastRowMap.put(rowNumber, lastRowJson);
+        rowNumber ++;
+
+        Map<Integer, String> columnNumberMap = new LinkedHashMap<>();
+
+        for (JsonElement jsonElement : rowTitle) {
+            JsonObject rowTitleJson = jsonElement.getAsJsonObject();
+            String scheduleDate = rowTitleJson.get("scheduleDate").getAsString();
+            cellJson = new JsonObject();
+            cellJson.addProperty("content", scheduleDate);
+            cellJson.addProperty("adjustType", "title");
+            cellJsonMap.put(rowNumber, cellJson);
+
+            lastRowJson = new JsonObject();
+            lastRowJson.addProperty("content", rowTitleJson.get("content").getAsString());
+            lastRowJson.addProperty("adjustType", "");
+            lastRowMap.put(rowNumber, lastRowJson);
+
+
+            columnNumberMap.put(rowNumber, statistics.getYear() +"-" + scheduleDate.replace(".", "-"));
+            rowNumber ++;
+        }
+
+        cellJson = new JsonObject();
+        cellJson.addProperty("content", "合计(课时)");
+        cellJson.addProperty("adjustType", "title");
+        cellJsonMap.put(rowNumber, cellJson);
+        dataMap.put(0, cellJsonMap);
+
+        lastRowJson = new JsonObject();
+        lastRowJson.addProperty("content", allClassTimeDataJson.get("allClassTime").getAsString());
+        lastRowJson.addProperty("adjustType", "");
+        lastRowMap.put(rowNumber, lastRowJson);
+
+
+        //数据
+        JsonArray columnTitle = allClassTimeDataJson.get("columnTitle").getAsJsonArray();
+        int allRowNumber = columnTitle.size() + 2;//表格最大行号
+        dataMap.put(allRowNumber - 1, lastRowMap);
+
+        for (int i = 0; i < columnTitle.size(); i ++){
+            JsonElement columnElement = columnTitle.get(i);
+            JsonObject columnJson = columnElement.getAsJsonObject();
+
+            Map<Integer, JsonObject> dataCellJsonMap = new LinkedHashMap<>();
+            //左边第一列
+            JsonObject dataCellJson = new JsonObject();
+            String type = columnJson.get("type").getAsString();
+            dataCellJson.addProperty("content", type);
+            dataCellJson.addProperty("adjustType", "");
+            dataCellJsonMap.put(0, dataCellJson);
+
+            for (Integer j : columnNumberMap.keySet()) {
+                String scheduleDate = columnNumberMap.get(j);
+                for (JsonElement datum : data) {
+                    JsonObject dataJson = datum.getAsJsonObject();
+                    if(type.equals(dataJson.get("type").getAsString()) && scheduleDate.equals(dataJson.get("scheduleDate").getAsString())){
+                        dataCellJson = new JsonObject();
+                        dataCellJson.addProperty("content", dataJson.get("content").getAsString());
+                        dataCellJson.addProperty("adjustType", dataJson.get("adjustType").getAsString());
+                        dataCellJsonMap.put(j, dataCellJson);
+                    }
+                }
+            }
+
+            //右边最后一列
+            dataCellJson = new JsonObject();
+            dataCellJson.addProperty("content", columnJson.get("content").getAsString());
+            dataCellJson.addProperty("adjustType", "");
+            dataCellJsonMap.put(allColumnNumber - 1, dataCellJson);
+
+            dataMap.put(i + 1, dataCellJsonMap);
+        }
+
+        // 创建一个新的工作簿
+        Workbook workbook = new XSSFWorkbook();
+        // 创建一个工作表(sheet)
+        String sheetName = "数据";
+        Sheet sheet = workbook.createSheet(sheetName);
+
+
+        // 创建一个字体对象
+        Font font = workbook.createFont();
+        font.setFontName("宋体");
+        font.setFontHeightInPoints((short)12);
+
+        CellStyle cellStyle = workbook.createCellStyle();
+        cellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());//设置背景颜色
+        cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);//设置填充模式
+        cellStyle.setFont(font);
+        cellStyle.setBorderTop(BorderStyle.THIN);
+        cellStyle.setBorderBottom(BorderStyle.THIN);
+        cellStyle.setBorderLeft(BorderStyle.THIN);
+        cellStyle.setBorderRight(BorderStyle.THIN);
+
+        //最一个合计的代码
+        CellStyle lastCellStyle = workbook.createCellStyle();
+        lastCellStyle.setFillForegroundColor(IndexedColors.SKY_BLUE.getIndex());//设置背景颜色
+        lastCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);//设置填充模式
+        lastCellStyle.setBorderTop(BorderStyle.THIN);
+        lastCellStyle.setBorderBottom(BorderStyle.THIN);
+        lastCellStyle.setBorderLeft(BorderStyle.THIN);
+        lastCellStyle.setBorderRight(BorderStyle.THIN);
+        lastCellStyle.setFont(font);
+
+        for (Integer i : dataMap.keySet()) {
+            Row row = sheet.createRow(i);
+            Map<Integer, JsonObject> rowData = dataMap.get(i);
+            for (int j = 0; j < allColumnNumber; j ++) {
+                sheet.autoSizeColumn(j);
+                Cell cell = row.createCell(j);
+                JsonObject jsonObject = rowData.get(j);
+                if(jsonObject == null){
+                    cell.setCellValue("");
+                    CellStyle contentCellStyle = workbook.createCellStyle();
+                    contentCellStyle.setFont(font);
+                    contentCellStyle.setWrapText(true);
+                    contentCellStyle.setBorderTop(BorderStyle.THIN);
+                    contentCellStyle.setBorderBottom(BorderStyle.THIN);
+                    contentCellStyle.setBorderLeft(BorderStyle.THIN);
+                    contentCellStyle.setBorderRight(BorderStyle.THIN);
+                    cell.setCellStyle(contentCellStyle);
+                }else{
+                    cell.setCellValue(jsonObject.get("content").getAsString().replace(",","\r\n"));
+                    String adjustType = jsonObject.get("adjustType").getAsString();
+                    if("title".equals(adjustType)){
+                        cell.setCellStyle(cellStyle);
+                    }else if("course_substitute".equals(adjustType)){
+                        CellStyle contentCellStyle = workbook.createCellStyle();
+                        contentCellStyle.setFont(font);
+                        contentCellStyle.setWrapText(true);
+                        contentCellStyle.setBorderTop(BorderStyle.THIN);
+                        contentCellStyle.setBorderBottom(BorderStyle.THIN);
+                        contentCellStyle.setBorderLeft(BorderStyle.THIN);
+                        contentCellStyle.setBorderRight(BorderStyle.THIN);
+                        contentCellStyle.setFillForegroundColor(IndexedColors.RED1.getIndex());
+                        contentCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);//设置填充模式
+                        cell.setCellStyle(contentCellStyle);
+                    }else if("course_exchange".equals(adjustType)){
+                        CellStyle contentCellStyle = workbook.createCellStyle();
+                        contentCellStyle.setFont(font);
+                        contentCellStyle.setWrapText(true);
+                        contentCellStyle.setBorderTop(BorderStyle.THIN);
+                        contentCellStyle.setBorderBottom(BorderStyle.THIN);
+                        contentCellStyle.setBorderLeft(BorderStyle.THIN);
+                        contentCellStyle.setBorderRight(BorderStyle.THIN);
+                        contentCellStyle.setFillForegroundColor(IndexedColors.YELLOW1.getIndex());
+                        contentCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);//设置填充模式
+                        cell.setCellStyle(contentCellStyle);
+                    }else{
+                        CellStyle contentCellStyle = workbook.createCellStyle();
+                        contentCellStyle.setFont(font);
+                        contentCellStyle.setWrapText(true);
+                        contentCellStyle.setBorderTop(BorderStyle.THIN);
+                        contentCellStyle.setBorderBottom(BorderStyle.THIN);
+                        contentCellStyle.setBorderLeft(BorderStyle.THIN);
+                        contentCellStyle.setBorderRight(BorderStyle.THIN);
+                        cell.setCellStyle(contentCellStyle);
+                    }
+                }
+
+                if(i == allRowNumber - 1 &&  j == allColumnNumber - 1){
+                    cell.setCellStyle(lastCellStyle);
+                }
+            }
+        }
 
+        //写入文件
+        ByteArrayOutputStream bot = new ByteArrayOutputStream();
+        workbook.write(bot);
+        return bot.toByteArray();
+    }
 }

+ 28 - 0
src/main/java/com/xjrsoft/module/classtime/vo/ClassTimeStatisticsRecordDetailVo.java

@@ -0,0 +1,28 @@
+package com.xjrsoft.module.classtime.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+* @title: 课时统计-教师详情表单出参
+* @Author dzx
+* @Date: 2024-09-26
+* @Version 1.0
+*/
+@Data
+public class ClassTimeStatisticsRecordDetailVo {
+
+
+    @ApiModelProperty("类别")
+    private String type;
+
+    @ApiModelProperty("内容")
+    private String content;
+
+    @ApiModelProperty("日期")
+    private String scheduleDate;
+
+    @ApiModelProperty("调整类型")
+    private String adjustType;
+
+}

+ 8 - 3
src/main/java/com/xjrsoft/module/job/JianyuekbScheduleTask.java

@@ -90,10 +90,11 @@ public class JianyuekbScheduleTask {
             if(today.isAfter(startDateObj)){
                 startDateStr = today.format(formatter);
             }
-            //删除课表信息
+            //删除课表信息;
+            String classIds = gradeClassMaps.get(eduYearSerialNo).toString().replace("[", "").replace("]", "");
             String delSql = "delete from course_table where schedule_date between '" + startDateStr + "'" +
-                    " and '" + endDateStr + "' and adjust_type is null" +
-                    " and class_id in (" + gradeClassMaps.get(eduYearSerialNo).toString().replace("[","").replace("]","")+ ")";
+                    " and '" + endDateStr +
+                    " and class_id in (" + classIds + ")";
             SqlRunnerAdapter.db().delete(delSql);
 
             long between = ChronoUnit.DAYS.between(startDateObj, endDateObj);
@@ -115,6 +116,10 @@ public class JianyuekbScheduleTask {
 
             updSql = "update course_receive_msg set is_callback = 1 where id = " + receiveMsg.get("id").toString();
             SqlRunnerAdapter.db().update(updSql);
+            //作废调课和顶课
+            updSql = "UPDATE wf_course_adjust SET enabled_mark = 0 WHERE adjust_type BETWEEN '" + startDateStr + "'" +
+                    " and '" + endDateStr + " and class_id in (" + classIds + ")";
+            SqlRunnerAdapter.db().update(updSql);
         }
         doExecute(allScheduleInfo);
     }

+ 1 - 1
src/main/java/com/xjrsoft/module/personnel/controller/CarMessageApplyController.java

@@ -132,7 +132,7 @@ public class CarMessageApplyController {
     @ApiOperation(value = "删除车辆信息审核")
     @SaCheckPermission("carmessageapply:delete")
     public RT<Boolean> delete(@Valid @RequestBody List<Long> ids){
-        return RT.ok(carMessageApplyService.removeBatchByIds(ids));
+        return RT.ok(carMessageApplyService.deleteBatchByIds(ids));
 
     }
 

+ 4 - 0
src/main/java/com/xjrsoft/module/personnel/service/ICarMessageApplyService.java

@@ -3,6 +3,8 @@ package com.xjrsoft.module.personnel.service;
 import com.github.yulichang.base.MPJBaseService;
 import com.xjrsoft.module.personnel.entity.CarMessageApply;
 
+import java.util.List;
+
 /**
 * @title: 车辆信息审核
 * @Author dzx
@@ -11,4 +13,6 @@ import com.xjrsoft.module.personnel.entity.CarMessageApply;
 */
 
 public interface ICarMessageApplyService extends MPJBaseService<CarMessageApply> {
+
+    Boolean deleteBatchByIds(List<Long> ids);
 }

+ 51 - 0
src/main/java/com/xjrsoft/module/personnel/service/impl/CarMessageApplyServiceImpl.java

@@ -1,11 +1,25 @@
 package com.xjrsoft.module.personnel.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+import com.xjrsoft.module.hikvision.entity.HikvisionData;
+import com.xjrsoft.module.hikvision.mapper.HikvisionDataMapper;
+import com.xjrsoft.module.hikvision.util.ApiUtil;
 import com.xjrsoft.module.personnel.entity.CarMessageApply;
 import com.xjrsoft.module.personnel.mapper.CarMessageApplyMapper;
 import com.xjrsoft.module.personnel.service.ICarMessageApplyService;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
 * @title: 车辆信息审核
@@ -16,4 +30,41 @@ import org.springframework.stereotype.Service;
 @Service
 @AllArgsConstructor
 public class CarMessageApplyServiceImpl extends MPJBaseServiceImpl<CarMessageApplyMapper, CarMessageApply> implements ICarMessageApplyService {
+
+    private final HikvisionDataMapper hikvisionDataMapper;
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean deleteBatchByIds(List<Long> ids) {
+        List<HikvisionData> hikvisionData = hikvisionDataMapper.selectList(
+                new QueryWrapper<HikvisionData>().lambda()
+                        .in(HikvisionData::getSourceId, ids)
+        );
+        JsonObject paramJson = new JsonObject();
+        JsonArray vehicleIds = new JsonArray();
+        Map<String, String> idsMap = new HashMap<>();
+        for (HikvisionData el : hikvisionData) {
+            vehicleIds.add(el.getHikvisionId());
+            idsMap.put(el.getHikvisionId(), el.getSourceId());
+        }
+        paramJson.add("vehicleIds", vehicleIds);
+
+        ApiUtil apiUtil = new ApiUtil();
+        String apiUrl = "/api/resource/v1/vehicle/batch/delete";
+        String result = apiUtil.doPost(apiUrl, paramJson.toString(), null);
+
+        JsonParser parser = new JsonParser();
+        JsonObject resultJson = parser.parse(result).getAsJsonObject();
+        if(resultJson.get("code").getAsInt() == 0 && !resultJson.get("data").isJsonNull()){
+            JsonArray data = resultJson.get("data").getAsJsonArray();
+            for (JsonElement datum : data) {
+                JsonObject object = datum.getAsJsonObject();
+                idsMap.remove(object.get("vehicleId").getAsString());
+            }
+            Collection<String> values = idsMap.values();
+            this.removeBatchByIds(values);
+        }else{
+            this.removeBatchByIds(ids);
+        }
+        return true;
+    }
 }