Explorar el Código

Merge branch 'pre'

dzx hace 1 año
padre
commit
a481b9af87
Se han modificado 46 ficheros con 1180 adiciones y 95 borrados
  1. 0 1
      src/main/java/com/xjrsoft/module/attendance/controller/AttendanceStatisticsController.java
  2. 0 1
      src/main/java/com/xjrsoft/module/attendance/service/impl/AttendanceStatisticsServiceImpl.java
  3. 3 0
      src/main/java/com/xjrsoft/module/courseTable/service/ICourseTableService.java
  4. 267 0
      src/main/java/com/xjrsoft/module/courseTable/service/impl/CourseTableServiceImpl.java
  5. 6 0
      src/main/java/com/xjrsoft/module/evaluate/dto/AddEvaluateItemDto.java
  6. 3 0
      src/main/java/com/xjrsoft/module/evaluate/dto/AddEvaluateResultDto.java
  7. 6 0
      src/main/java/com/xjrsoft/module/evaluate/entity/EvaluateItem.java
  8. 6 0
      src/main/java/com/xjrsoft/module/evaluate/entity/EvaluateManageItem.java
  9. 3 0
      src/main/java/com/xjrsoft/module/evaluate/entity/EvaluateResult.java
  10. 4 0
      src/main/java/com/xjrsoft/module/evaluate/vo/EvaluateItemVo.java
  11. 9 0
      src/main/java/com/xjrsoft/module/evaluate/vo/EvaluateManageItemVo.java
  12. 3 0
      src/main/java/com/xjrsoft/module/evaluate/vo/EvaluateResultDetailPageDetailList.java
  13. 194 49
      src/main/java/com/xjrsoft/module/form/controller/FormExecuteController.java
  14. 4 0
      src/main/java/com/xjrsoft/module/form/service/IFormExecuteService.java
  15. 15 2
      src/main/java/com/xjrsoft/module/form/service/impl/FormExecuteServiceImpl.java
  16. 5 0
      src/main/java/com/xjrsoft/module/generator/entity/ButtonConfig.java
  17. 38 0
      src/main/java/com/xjrsoft/module/generator/entity/ImportConfig.java
  18. 10 0
      src/main/java/com/xjrsoft/module/generator/entity/ListConfig.java
  19. 81 0
      src/main/java/com/xjrsoft/module/liteflow/node/WfUpdateStateNode.java
  20. 35 1
      src/main/java/com/xjrsoft/module/material/service/impl/MaterialTaskAssignServiceImpl.java
  21. 3 0
      src/main/java/com/xjrsoft/module/organization/dto/UpdateDepartmentDto.java
  22. 9 1
      src/main/java/com/xjrsoft/module/personnel/controller/BasePersonnelLabourCapitalController.java
  23. 3 0
      src/main/java/com/xjrsoft/module/personnel/dto/BasePersonnelLabourCapitalMonthPageDto.java
  24. 6 0
      src/main/java/com/xjrsoft/module/personnel/dto/BasePersonnelLabourCapitalYearPageDto.java
  25. 31 21
      src/main/java/com/xjrsoft/module/personnel/service/impl/BasePersonnelLabourCapitalServiceImpl.java
  26. 1 1
      src/main/java/com/xjrsoft/module/personnel/vo/BasePersonnelLabourCapitalMonthPageVo.java
  27. 3 3
      src/main/java/com/xjrsoft/module/personnel/vo/BasePersonnelLabourCapitalYearPageVo.java
  28. 3 3
      src/main/java/com/xjrsoft/module/schedule/controller/ScheduleController.java
  29. 3 0
      src/main/java/com/xjrsoft/module/student/dto/BaseStudentUserPageDto.java
  30. 170 0
      src/main/java/com/xjrsoft/module/teacher/controller/TeacherAwardController.java
  31. 22 0
      src/main/java/com/xjrsoft/module/teacher/dto/TeacherAwardFileListDto.java
  32. 9 0
      src/main/java/com/xjrsoft/module/teacher/mapper/TeacherAwardItemMapper.java
  33. 4 0
      src/main/java/com/xjrsoft/module/teacher/service/ITeacherAwardItemService.java
  34. 7 0
      src/main/java/com/xjrsoft/module/teacher/service/ITeacherAwardService.java
  35. 6 0
      src/main/java/com/xjrsoft/module/teacher/service/impl/TeacherAwardItemServiceImpl.java
  36. 7 0
      src/main/java/com/xjrsoft/module/teacher/service/impl/TeacherAwardServiceImpl.java
  37. 62 0
      src/main/java/com/xjrsoft/module/teacher/vo/TeacherAwardDetailExcelVo.java
  38. 28 0
      src/main/java/com/xjrsoft/module/teacher/vo/TeacherAwardFileListVo.java
  39. 40 0
      src/main/java/com/xjrsoft/module/teacher/vo/TeacherAwardStatisticsExcelVo.java
  40. 13 0
      src/main/java/com/xjrsoft/module/workflow/utils/DataHandleUtil.java
  41. 4 1
      src/main/resources/mapper/evaluate/EvaluateManageMapper.xml
  42. 4 2
      src/main/resources/mapper/evaluate/EvaluateResultMapper.xml
  43. 8 7
      src/main/resources/mapper/personnel/BasePersonnelLabourCapitalMapper.xml
  44. 3 1
      src/main/resources/mapper/student/BaseStudentMapper.xml
  45. 38 0
      src/main/resources/mapper/teacher/TeacherAwardItemMapper.xml
  46. 1 1
      src/test/java/com/xjrsoft/module/job/JianyuekbScheduleTaskTest2.java

+ 0 - 1
src/main/java/com/xjrsoft/module/attendance/controller/AttendanceStatisticsController.java

@@ -146,7 +146,6 @@ public class AttendanceStatisticsController {
     @SaCheckPermission("attendancestatistics:detail")
     public RT<Boolean> refreshStatistics(@Valid @RequestBody RefreshStatisticsDto dto){
         Boolean aBoolean = attendanceStatisticsService.refreshRecord(dto.getId());
-
         return RT.ok(aBoolean);
     }
 

+ 0 - 1
src/main/java/com/xjrsoft/module/attendance/service/impl/AttendanceStatisticsServiceImpl.java

@@ -475,7 +475,6 @@ public class AttendanceStatisticsServiceImpl extends MPJBaseServiceImpl<Attendan
                     weekList.add(daysJson.get("week").getAsString());
                 }
             }
-
             dataList.add(data);
         }
 

+ 3 - 0
src/main/java/com/xjrsoft/module/courseTable/service/ICourseTableService.java

@@ -52,4 +52,7 @@ public interface ICourseTableService extends IService<CourseTable> {
     void deleteBakData(Long wfCourseAdjustId);
 
 
+    ByteArrayOutputStream scheduleWeekExportQuery(CourseTableDto dto);
+
+
 }

+ 267 - 0
src/main/java/com/xjrsoft/module/courseTable/service/impl/CourseTableServiceImpl.java

@@ -64,10 +64,19 @@ import com.xjrsoft.module.teacher.entity.BaseTeacher;
 import com.xjrsoft.module.teacher.entity.XjrUser;
 import com.xjrsoft.module.teacher.service.ITeacherbaseManagerService;
 import lombok.AllArgsConstructor;
+import me.zhyd.oauth.log.Log;
 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.Font;
 import org.apache.poi.ss.usermodel.HorizontalAlignment;
 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.VerticalAlignment;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.apache.poi.xwpf.usermodel.XWPFDocument;
 import org.apache.poi.xwpf.usermodel.XWPFParagraph;
 import org.apache.poi.xwpf.usermodel.XWPFTable;
@@ -87,10 +96,12 @@ import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.stream.Collectors;
 
 /**
@@ -982,4 +993,260 @@ public class CourseTableServiceImpl extends ServiceImpl<CourseTableMapper, Cours
     public void deleteBakData(Long wfCourseAdjustId) {
         courseTableBakMapper.delete(new QueryWrapper<CourseTableBak>().lambda().eq(CourseTableBak::getWfCourseAdjustId, wfCourseAdjustId));
     }
+
+
+    @Override
+    public ByteArrayOutputStream scheduleWeekExportQuery(CourseTableDto dto){
+        try {
+            CourseTableVo data = this.getList(dto);
+
+            Workbook workbook = new XSSFWorkbook();
+            // 创建一个工作表(sheet)
+            String sheetName = "课表";
+            Sheet sheet = workbook.createSheet(sheetName);
+
+            createFirstTitle(workbook, sheet, data, dto);
+
+            createSecondTitle(workbook, sheet);
+
+            Map<Integer, ClassTime> timeNumberMap = data.getClassTimeList().stream().collect(Collectors.toMap(ClassTime::getNumber, x -> x));
+            Map<String, List<CourseDetailVo>> timeNumberDataMap = data.getCourseList().stream().collect(Collectors.groupingBy(CourseDetailVo::getTimeNumber));
+
+            List<Integer> weekList = new ArrayList<>();
+            weekList.add(1);weekList.add(2);weekList.add(3);
+            weekList.add(4);weekList.add(5);weekList.add(6);
+            weekList.add(7);
+            Collections.sort(weekList);
+
+            List<Integer> timeNumberList = data.getClassTimeList().stream().map(ClassTime::getNumber).collect(Collectors.toList());
+            Collections.sort(timeNumberList);
+
+            Map<Integer, Integer> timePeriodMap = data.getClassTimeList().stream().collect(Collectors.toMap(ClassTime::getNumber, ClassTime::getTimePeriod));
+
+            ArrayList<ArrayList<String>> dataList = new ArrayList<>();
+
+            for (Integer timeNumber : timeNumberList) {
+                ArrayList<String> rowData = new ArrayList<>();
+                Integer timePeriod = timePeriodMap.get(timeNumber);
+                String timePeriodStr = "";
+                if(timePeriod == 1){
+                    timePeriodStr = "上午";
+                }else if(timePeriod == 2){
+                    timePeriodStr = "下午";
+                }else if(timePeriod == 3){
+                    timePeriodStr = "晚上";
+                }
+                rowData.add(timePeriodStr);
+                ClassTime classTime = timeNumberMap.get(timeNumber);
+                String timeNumberStr = classTime.getShortName() + "\r\n" + classTime.getSummerStartTime() + "-" + classTime.getSummerEndTime();
+                rowData.add(timeNumberStr);
+                List<CourseDetailVo> list1 = timeNumberDataMap.get(timeNumber.toString());
+                if(list1 == null){
+                    continue;
+                }
+                Map<Integer, List<CourseDetailVo>> weeksMap = list1.stream().collect(Collectors.groupingBy(CourseDetailVo::getWeeks));
+                for (Integer week : weekList) {
+                    String content = "";
+                    List<CourseDetailVo> list = weeksMap.get(week);
+                    if(list != null && !list.isEmpty()){
+                        if(list.size() == 1){
+                            CourseDetailVo courseDetailVo = list.get(0);
+                            content += courseDetailVo.getCourseName() + "\r\n";
+                            content += courseDetailVo.getClassroomName() + "\r\n";
+                            if("teacher".equals(dto.getCourseType())){
+                                content += courseDetailVo.getTeacherName();
+                            }else if("class".equals(dto.getCourseType())){
+                                content += courseDetailVo.getClassName() ;
+                            }
+                        }else{
+                            CourseDetailVo courseDetailVo = list.get(0);
+                            content += courseDetailVo.getCourseName() + "\r\n";
+                            content += courseDetailVo.getClassroomName() + "\r\n";
+                            if("teacher".equals(dto.getCourseType())){
+                                content += courseDetailVo.getTeacherName();
+                            }else if("class".equals(dto.getCourseType())){
+                                Set<String> classNames = list.stream().map(CourseDetailVo::getClassName).collect(Collectors.toSet());
+                                content += classNames.toString().replace("]", "").replace("[", "").replace(" ","") ;
+                            }
+                        }
+                    }
+                    rowData.add(content);
+                }
+                dataList.add(rowData);
+            }
+
+            Font font = workbook.createFont();
+            font.setFontName("宋体");
+            font.setFontHeightInPoints((short)9);
+
+            // 创建一个单元格样式对象
+            CellStyle cellStyle = workbook.createCellStyle();
+            cellStyle.setFont(font); // 将字体应用到样式
+            cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
+            cellStyle.setAlignment(HorizontalAlignment.CENTER);
+            cellStyle.setWrapText(true);
+            cellStyle.setBorderTop(BorderStyle.THIN);
+            cellStyle.setBorderBottom(BorderStyle.THIN);
+            cellStyle.setBorderLeft(BorderStyle.THIN);
+            cellStyle.setBorderRight(BorderStyle.THIN);
+
+            int rowNumber = 2;
+            for (ArrayList<String> strings : dataList) {
+                Row row = sheet.createRow(rowNumber);
+                int cellNumber = 0;
+                for (String string : strings) {
+                    Cell row1cell1 = row.createCell(cellNumber);
+                    row1cell1.setCellValue(string);
+                    row1cell1.setCellStyle(cellStyle);
+                    cellNumber ++;
+                }
+                rowNumber ++;
+                row.setHeightInPoints(48);
+            }
+            //合并
+            Map<Integer, List<Integer>> collect = data.getClassTimeList().stream()
+                    .collect(Collectors.groupingBy(ClassTime::getTimePeriod, Collectors.mapping(ClassTime::getNumber, Collectors.toList())));
+            int firstRow = 2;
+            for (Integer i : collect.keySet()) {
+                int lastRow = firstRow + collect.get(i).size() - 1;
+                if(lastRow == firstRow){
+                    continue;
+                }
+                sheet.addMergedRegion(new CellRangeAddress(firstRow, lastRow, 0, 0));
+
+                firstRow = firstRow + collect.get(i).size();
+            }
+
+            ByteArrayOutputStream bot = new ByteArrayOutputStream();
+            workbook.write(bot);
+            return bot;
+        }catch (Exception e){
+            Log.error(e.getMessage(), e);
+            throw new MyException("导出报错,请联系管理员");
+        }
+    }
+
+    void createSecondTitle(Workbook workbook, Sheet sheet) {
+        // 创建一个字体对象
+        Font font = workbook.createFont();
+        font.setBold(true);// 设置为粗体
+        font.setFontName("宋体");
+        //font.setColor(IndexedColors.RED.getIndex()); // 设置字体颜色为红色
+        font.setFontHeightInPoints((short)12);
+
+        // 创建一个单元格样式对象
+        CellStyle cellStyle = workbook.createCellStyle();
+        cellStyle.setFont(font); // 将字体应用到样式
+        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
+        cellStyle.setAlignment(HorizontalAlignment.CENTER);
+        cellStyle.setBorderTop(BorderStyle.THIN);
+        cellStyle.setBorderBottom(BorderStyle.THIN);
+        cellStyle.setBorderLeft(BorderStyle.THIN);
+        cellStyle.setBorderRight(BorderStyle.THIN);
+
+        int rowNumber = 1;
+        Row row = sheet.createRow(rowNumber);
+
+        int cellNumber = 0;
+        Cell row1cell1 = row.createCell(cellNumber);
+        row1cell1.setCellValue("时间");
+        row1cell1.setCellStyle(cellStyle);
+        sheet.setColumnWidth(0, 4*256);
+        cellNumber ++;
+
+        row1cell1 = row.createCell(cellNumber);
+        row1cell1.setCellValue("");
+        row1cell1.setCellStyle(cellStyle);
+
+        //合并
+        sheet.addMergedRegion(new CellRangeAddress(rowNumber, rowNumber, 0, 1));
+        cellNumber ++;
+        sheet.setColumnWidth(1, 12*256);
+
+        row1cell1 = row.createCell(cellNumber);
+        row1cell1.setCellValue("周一");
+        row1cell1.setCellStyle(cellStyle);
+        sheet.setColumnWidth(2, 16*256);
+        cellNumber ++;
+
+
+        row1cell1 = row.createCell(cellNumber);
+        row1cell1.setCellValue("周二");
+        row1cell1.setCellStyle(cellStyle);
+        sheet.setColumnWidth(cellNumber, 16*256);
+        cellNumber ++;
+
+        row1cell1 = row.createCell(cellNumber);
+        row1cell1.setCellValue("周三");
+        row1cell1.setCellStyle(cellStyle);
+        sheet.setColumnWidth(cellNumber, 16*256);
+        cellNumber ++;
+
+        row1cell1 = row.createCell(cellNumber);
+        row1cell1.setCellValue("周四");
+        row1cell1.setCellStyle(cellStyle);
+        sheet.setColumnWidth(cellNumber, 16*256);
+        cellNumber ++;
+
+        row1cell1 = row.createCell(cellNumber);
+        row1cell1.setCellValue("周五");
+        row1cell1.setCellStyle(cellStyle);
+        sheet.setColumnWidth(cellNumber, 16*256);
+        cellNumber ++;
+
+        row1cell1 = row.createCell(cellNumber);
+        row1cell1.setCellValue("周六");
+        row1cell1.setCellStyle(cellStyle);
+        sheet.setColumnWidth(cellNumber, 16*256);
+        cellNumber ++;
+
+        row1cell1 = row.createCell(cellNumber);
+        row1cell1.setCellValue("周日");
+        row1cell1.setCellStyle(cellStyle);
+        sheet.setColumnWidth(cellNumber, 16*256);
+    }
+
+    void createFirstTitle(Workbook workbook, Sheet sheet, CourseTableVo data, CourseTableDto dto) {
+        // 创建一个字体对象
+        Font font = workbook.createFont();
+        font.setBold(true);// 设置为粗体
+        font.setFontName("宋体");
+        //font.setColor(IndexedColors.RED.getIndex()); // 设置字体颜色为红色
+        font.setFontHeightInPoints((short)18);
+
+        // 创建一个单元格样式对象
+        CellStyle cellStyle = workbook.createCellStyle();
+        cellStyle.setFont(font); // 将字体应用到样式
+        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
+        cellStyle.setAlignment(HorizontalAlignment.CENTER);
+        cellStyle.setBorderTop(BorderStyle.THIN);
+        cellStyle.setBorderBottom(BorderStyle.THIN);
+        cellStyle.setBorderLeft(BorderStyle.THIN);
+        cellStyle.setBorderRight(BorderStyle.THIN);
+
+        Row row = sheet.createRow(0);
+        String title = data.getSemesterName();
+        if("class".equals(dto.getCourseType())){
+            title += " " + data.getClassName() + " ";
+        }else if("teacher".equals(dto.getCourseType())){
+            title += " " + data.getTeacherName() + " ";
+        }
+        title += data.getWeek() + " 课程表";
+
+        int cellNumber = 0;
+        Cell row1cell1 = row.createCell(cellNumber);
+        row1cell1.setCellValue(title);
+        row1cell1.setCellStyle(cellStyle);
+
+        for (int i = 1; i < 9; i ++){
+            row1cell1 = row.createCell(i);
+            row1cell1.setCellValue("");
+            row1cell1.setCellStyle(cellStyle);
+        }
+
+        //合并
+        sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 8));
+//        sheet.setColumnWidth(0, 335 * 256);
+    }
+
 }

+ 6 - 0
src/main/java/com/xjrsoft/module/evaluate/dto/AddEvaluateItemDto.java

@@ -49,4 +49,10 @@ public class AddEvaluateItemDto implements Serializable {
     @ApiModelProperty("输入框是否为空")
     private Integer inputNotNull;
 
+    @ApiModelProperty("题目类型")
+    private String type;
+
+    @ApiModelProperty("选项内容")
+    private String optionJson;
+
 }

+ 3 - 0
src/main/java/com/xjrsoft/module/evaluate/dto/AddEvaluateResultDto.java

@@ -34,4 +34,7 @@ public class AddEvaluateResultDto implements Serializable {
     @ApiModelProperty("建议/意见")
     private String opinion;
 
+    @ApiModelProperty("选项")
+    private String optionContent;
+
 }

+ 6 - 0
src/main/java/com/xjrsoft/module/evaluate/entity/EvaluateItem.java

@@ -100,5 +100,11 @@ public class EvaluateItem implements Serializable {
     @ApiModelProperty("输入框是否为空")
     private Integer inputNotNull;
 
+    @ApiModelProperty("题目类型")
+    private String type;
+
+    @ApiModelProperty("选项内容")
+    private String optionJson;
+
 
 }

+ 6 - 0
src/main/java/com/xjrsoft/module/evaluate/entity/EvaluateManageItem.java

@@ -105,4 +105,10 @@ public class EvaluateManageItem implements Serializable {
      */
     @ApiModelProperty("评价项编号")
     private Long evaluateItemId;
+
+    @ApiModelProperty("题目类型")
+    private String type;
+
+    @ApiModelProperty("选项内容")
+    private String optionJson;
 }

+ 3 - 0
src/main/java/com/xjrsoft/module/evaluate/entity/EvaluateResult.java

@@ -104,4 +104,7 @@ public class EvaluateResult implements Serializable {
      */
     @ApiModelProperty("提交记录主键编号")
     private String submitRecordId;
+
+    @ApiModelProperty("选项内容")
+    private String optionContent;
 }

+ 4 - 0
src/main/java/com/xjrsoft/module/evaluate/vo/EvaluateItemVo.java

@@ -49,5 +49,9 @@ public class EvaluateItemVo {
     private Integer inputNotNull;
 
 
+    @ApiModelProperty("题目类型")
+    private String type;
 
+    @ApiModelProperty("选项内容")
+    private String optionJson;
 }

+ 9 - 0
src/main/java/com/xjrsoft/module/evaluate/vo/EvaluateManageItemVo.java

@@ -63,4 +63,13 @@ public class EvaluateManageItemVo {
     @ApiModelProperty("建议/意见")
     private String opinion;
 
+    @ApiModelProperty("题目类型")
+    private String type;
+
+    @ApiModelProperty("选项内容")
+    private String optionJson;
+
+    @ApiModelProperty("选项")
+    private String optionContent;
+
 }

+ 3 - 0
src/main/java/com/xjrsoft/module/evaluate/vo/EvaluateResultDetailPageDetailList.java

@@ -43,4 +43,7 @@ public class EvaluateResultDetailPageDetailList {
     @ApiModelProperty("建议/意见")
     private String opinion;
 
+    @ApiModelProperty("选项内容")
+    private String optionJson;
+
 }

+ 194 - 49
src/main/java/com/xjrsoft/module/form/controller/FormExecuteController.java

@@ -16,18 +16,9 @@ import com.xjrsoft.common.model.result.RT;
 import com.xjrsoft.common.mybatis.SqlRunnerAdapter;
 import com.xjrsoft.common.utils.DatasourceUtil;
 import com.xjrsoft.common.utils.LocalDateTimeUtil;
+import com.xjrsoft.module.attendance.entity.AttendanceStatistics;
 import com.xjrsoft.module.authority.dto.BatchSetDataAuthDto;
-import com.xjrsoft.module.form.dto.AppFormExecuteAddOrUpdateDto;
-import com.xjrsoft.module.form.dto.AppFormExecuteDeleteDto;
-import com.xjrsoft.module.form.dto.AppFormExecuteInfoDto;
-import com.xjrsoft.module.form.dto.AppFormExecuteListDto;
-import com.xjrsoft.module.form.dto.AppFormExecutePageDto;
-import com.xjrsoft.module.form.dto.FormExecuteAddOrUpdateDto;
-import com.xjrsoft.module.form.dto.FormExecuteDeleteDto;
-import com.xjrsoft.module.form.dto.FormExecuteInfoDto;
-import com.xjrsoft.module.form.dto.FormExecuteListDto;
-import com.xjrsoft.module.form.dto.FormExecutePageDto;
-import com.xjrsoft.module.form.dto.FormExecuteWorkflowInfoDto;
+import com.xjrsoft.module.form.dto.*;
 import com.xjrsoft.module.form.entity.FormDesignConfig;
 import com.xjrsoft.module.form.entity.FormRelease;
 import com.xjrsoft.module.form.entity.FormReleaseConfig;
@@ -37,6 +28,7 @@ import com.xjrsoft.module.form.service.IFormReleaseService;
 import com.xjrsoft.module.form.service.IFormTemplateService;
 import com.xjrsoft.module.generator.constant.ComponentTypeConstant;
 import com.xjrsoft.module.generator.entity.ColumnConfig;
+import com.xjrsoft.module.generator.entity.ImportConfig;
 import com.xjrsoft.module.generator.entity.TableConfig;
 import com.xjrsoft.module.student.service.IStudentConsumeDateService;
 import com.xjrsoft.module.system.entity.XjrTipsMessage;
@@ -45,13 +37,11 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import oracle.sql.INTERVALDS;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.validation.Valid;
@@ -64,12 +54,14 @@ import java.sql.Timestamp;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -243,42 +235,65 @@ public class FormExecuteController {
         return R.ok(formExecuteService.workFlowInfo(dto));
     }
 
+//    @GetMapping(value = "/export")
+//    @ApiOperation(value = "导出")
+//    @XjrLog(value = "导出表单数据")
+//    public ResponseEntity<byte[]> export(@Valid FormExecuteListDto dto) throws IOException {
     @PostMapping(value = "/export")
     @ApiOperation(value = "导出")
     @XjrLog(value = "导出表单数据")
-    public ResponseEntity<byte[]> export(@Valid @RequestBody FormExecuteListDto dto) {
+    public ResponseEntity<byte[]> export(@Valid @RequestBody FormExecuteListDto dto) throws IOException {
         FormRelease formRelease = formReleaseService.getById(dto.getReleaseId());
         FormReleaseConfig formReleaseConfig = JSONUtil.toBean(formRelease.getConfigJson(), FormReleaseConfig.class);
         // 配置excel第一行字段名
-        List<List<String>> head = new ArrayList<>();
         List<ColumnConfig> columnConfigs = formReleaseConfig.getListConfig().getColumnConfigs();
-        for (ColumnConfig config : columnConfigs) {
-            head.add(Collections.singletonList(config.getLabel()));
+        Map<String, ColumnConfig> columnConfigMap = columnConfigs.stream()
+                .collect(Collectors.toMap(ColumnConfig::getColumnName, c -> c));
+        List<ImportConfig> importConfigs = formReleaseConfig.getListConfig().getImportConfigs();
+
+        // 开始写入
+        Workbook workbook = new XSSFWorkbook();
+        // 创建一个工作表(sheet)
+        String sheetName = "sheet1";
+        Sheet sheet = workbook.createSheet(sheetName);
+
+        // 设置第每列的列宽度
+        for (ImportConfig importConfig : importConfigs) {
+            if(importConfig.getWidth() == 0){
+                sheet.setColumnWidth(importConfig.getSortCode(), importConfig.getLabel().length() * 4 * 256);
+//                sheet.autoSizeColumn(importConfig.getSortCode());
+            }else {
+                sheet.setColumnWidth(importConfig.getSortCode(), importConfig.getWidth() * 256);
+            }
         }
 
-        List<Map<Integer, Object>> exportList = new ArrayList<>();
+        // 表头
+        createHead(workbook, sheet, importConfigs);
+        //生成数据
+        int dataRowNumber = 1;
+
         if (!dto.getIsTemplate()) {
-            // 构建导出数据格式
-//            dto.setIsTrans(false);
-//            Boolean isPage = formReleaseConfig.getListConfig().getIsPage();
-            List<Entity> dataList = formExecuteService.list(dto);
-//            if (isPage) {
-//                dataList = formExecuteService.page(dto).getList();
-//            } else {
-//                dataList = formExecuteService.list(BeanUtil.toBean(dto, FormExecuteListDto.class));
-//            }
-            // 时间日期格式转换
+            // 字体内容格式
+            Font font = workbook.createFont();
+            font.setBold(false);// 设置为粗体
+            font.setFontName("宋体");
+            font.setFontHeightInPoints((short)12);
+            CellStyle cellStyle = workbook.createCellStyle();
+            cellStyle.setFont(font); // 将字体应用到样式
+//            cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
 
+            List<Entity> dataList = formExecuteService.list(dto);
             for (Entity entity : dataList) {
-                Map<Integer, Object> exportData = new HashMap<>(entity.size());
-                for (int i = 0; i < columnConfigs.size(); i++) {
-                    ColumnConfig config = columnConfigs.get(i);
-                    Object value = entity.get(config.getColumnName());
-                    String componentType = config.getComponentType();
+                Row dataRow = sheet.createRow(dataRowNumber);
+                for (int i = 0; i < importConfigs.size(); i++) {
+                    ImportConfig importConfig = importConfigs.get(i);
+                    ColumnConfig columnConfig = columnConfigMap.get(importConfig.getFieldName());
+                    Object value = entity.get(importConfig.getFieldName());
+                    String componentType = columnConfig.getComponentType();
                     // 日期时间字段格式化
                     if ((StrUtil.equalsIgnoreCase(ComponentTypeConstant.DATE, componentType)
                             || StrUtil.equalsIgnoreCase(ComponentTypeConstant.DATE_RANGE, componentType))) {
-                        String format = LocalDateTimeUtil.convertFontFormat(config.getFormat());
+                        String format = LocalDateTimeUtil.convertFontFormat(columnConfig.getFormat());
                         LocalDateTime dateTime = null;
                         if (value instanceof Date) {
                             dateTime = ((Date) value).toLocalDate().atStartOfDay();
@@ -298,22 +313,144 @@ public class FormExecuteController {
                         }
                         value = LocalDateTimeUtil.format(time);
                     }
-                    exportData.put(i, value);
+
+                    Cell cell = dataRow.createCell(i);
+                    cell.setCellValue((String)value);
+                    cell.setCellStyle(cellStyle);
                 }
-                exportList.add(exportData);
+                dataRowNumber ++;
             }
+        }else {
+            // 提示必填
+            createCautionHead(workbook, sheet);
         }
+
+        //写入文件
         ByteArrayOutputStream bot = new ByteArrayOutputStream();
-        EasyExcel.write(bot).head(head).automaticMergeHead(false)
-                .registerWriteHandler(new FormContentStyleStrategy())
-                .excelType(ExcelTypeEnum.XLSX).sheet().doWrite(exportList);
+        workbook.write(bot);
         return R.fileStream(bot.toByteArray(), formReleaseConfig.getMenuConfig().getName() + ExcelTypeEnum.XLSX.getValue());
+//        FormRelease formRelease = formReleaseService.getById(dto.getReleaseId());
+//        FormReleaseConfig formReleaseConfig = JSONUtil.toBean(formRelease.getConfigJson(), FormReleaseConfig.class);
+//        // 配置excel第一行字段名
+//        List<List<String>> head = new ArrayList<>();
+//        List<ColumnConfig> columnConfigs = formReleaseConfig.getListConfig().getColumnConfigs();
+//        for (ColumnConfig config : columnConfigs) {
+//            head.add(Collections.singletonList(config.getLabel()));
+//        }
+//
+//        List<Map<Integer, Object>> exportList = new ArrayList<>();
+//        if (!dto.getIsTemplate()) {
+//            // 构建导出数据格式
+////            dto.setIsTrans(false);
+////            Boolean isPage = formReleaseConfig.getListConfig().getIsPage();
+//            List<Entity> dataList = formExecuteService.list(dto);
+////            if (isPage) {
+////                dataList = formExecuteService.page(dto).getList();
+////            } else {
+////                dataList = formExecuteService.list(BeanUtil.toBean(dto, FormExecuteListDto.class));
+////            }
+//            // 时间日期格式转换
+//
+//            for (Entity entity : dataList) {
+//                Map<Integer, Object> exportData = new HashMap<>(entity.size());
+//                for (int i = 0; i < columnConfigs.size(); i++) {
+//                    ColumnConfig config = columnConfigs.get(i);
+//                    Object value = entity.get(config.getColumnName());
+//                    String componentType = config.getComponentType();
+//                    // 日期时间字段格式化
+//                    if ((StrUtil.equalsIgnoreCase(ComponentTypeConstant.DATE, componentType)
+//                            || StrUtil.equalsIgnoreCase(ComponentTypeConstant.DATE_RANGE, componentType))) {
+//                        String format = LocalDateTimeUtil.convertFontFormat(config.getFormat());
+//                        LocalDateTime dateTime = null;
+//                        if (value instanceof Date) {
+//                            dateTime = ((Date) value).toLocalDate().atStartOfDay();
+//                        } else if (value instanceof Timestamp) {
+//                            dateTime = ((Timestamp)value).toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
+//                        }else if(value instanceof LocalDateTime){
+//                            dateTime = (LocalDateTime)value;
+//                        }
+//                        value = LocalDateTimeUtil.format(dateTime, format);
+//                    } else if ((StrUtil.equalsIgnoreCase(ComponentTypeConstant.TIME, componentType)
+//                            || StrUtil.equalsIgnoreCase(ComponentTypeConstant.TIME_RANGE, componentType))) {
+//                        LocalTime time = null;
+//                        if (value instanceof Time) {
+//                            time = ((Time) value).toLocalTime();
+//                        } else if (value instanceof INTERVALDS) {
+//                            time = LocalDateTimeUtil.convertIntervalToLocalTime((INTERVALDS)value);
+//                        }
+//                        value = LocalDateTimeUtil.format(time);
+//                    }
+//                    exportData.put(i, value);
+//                }
+//                exportList.add(exportData);
+//            }
+//        }
+//        ByteArrayOutputStream bot = new ByteArrayOutputStream();
+//        EasyExcel.write(bot).head(head).automaticMergeHead(false)
+//                .registerWriteHandler(new FormContentStyleStrategy())
+//                .excelType(ExcelTypeEnum.XLSX).sheet().doWrite(exportList);
+//        return R.fileStream(bot.toByteArray(), formReleaseConfig.getMenuConfig().getName() + ExcelTypeEnum.XLSX.getValue());
+    }
+
+    private void createHead(Workbook workbook, Sheet sheet, List<ImportConfig> importConfigs) {
+        int rowNumber = 0;
+        Font font = workbook.createFont();
+        font.setFontName("宋体");
+        font.setFontHeightInPoints((short)12);
+
+        // 正常样式
+        CellStyle normalCellStyle = workbook.createCellStyle();
+        normalCellStyle.setFont(font); // 将字体应用到样式
+        normalCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
+        normalCellStyle.setAlignment(HorizontalAlignment.CENTER);
+
+        // 必填样式
+        CellStyle requiredCellStyle = workbook.createCellStyle();
+        requiredCellStyle.setFont(font); // 将字体应用到样式
+        requiredCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
+        requiredCellStyle.setAlignment(HorizontalAlignment.CENTER);
+        requiredCellStyle.setFillForegroundColor(IndexedColors.RED.getIndex());//设置背景颜色
+        requiredCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);//设置填充模式
+
+        // 所在行
+        Row row = sheet.createRow(rowNumber);
+
+        // 每一列
+        for (ImportConfig importConfig : importConfigs){
+            Cell cell = row.createCell(importConfig.getSortCode());
+            String content = importConfig.getLabel();
+            cell.setCellValue(content);
+            if(importConfig.getRequired()){
+                cell.setCellStyle(requiredCellStyle);
+            }else {
+                cell.setCellStyle(normalCellStyle);
+            }
+        }
+    }
+
+    private void createCautionHead(Workbook workbook, Sheet sheet) {
+        int rowNumber = 1;
+        Font font = workbook.createFont();
+        font.setFontName("宋体");
+        font.setFontHeightInPoints((short)12);
+        font.setColor(IndexedColors.RED.getIndex());
+
+        CellStyle cellStyle = workbook.createCellStyle();
+        cellStyle.setFont(font); // 将字体应用到样式
+//        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
+//        cellStyle.setAlignment(HorizontalAlignment.CENTER);
+
+        Row row = sheet.createRow(rowNumber);
+        Cell cell = row.createCell(0);
+        String content = "红色背景为必填项,导入时请删除本行。";
+        cell.setCellValue(content);
+        cell.setCellStyle(cellStyle);
+        sheet.addMergedRegion(new CellRangeAddress(rowNumber, rowNumber, 0, 5));
     }
 
     @PostMapping("/import")
     @ApiOperation(value = "导入")
     public R importData(@RequestParam String releaseId, @RequestParam MultipartFile file) throws IOException {
-
         String sql = "SELECT id,code,value,remark FROM base_system_config WHERE code= 'studentConsumeDate' ";
         Map<String, Object> systemConfigMap = SqlRunnerAdapter.db().selectOne(sql);
         if (systemConfigMap != null && systemConfigMap.get("value") != null) {
@@ -331,8 +468,12 @@ public class FormExecuteController {
         FormReleaseConfig formReleaseConfig = JSONUtil.toBean(formRelease.getConfigJson(), FormReleaseConfig.class);
         // 配置excel第一行字段名
         List<List<String>> head = new ArrayList<>();
-        List<ColumnConfig> columnConfigs = formReleaseConfig.getListConfig().getColumnConfigs();
-        for (ColumnConfig config : columnConfigs) {
+//        List<ColumnConfig> columnConfigs = formReleaseConfig.getListConfig().getColumnConfigs();
+        List<ImportConfig> importConfigs = formReleaseConfig.getListConfig().getImportConfigs();
+//        for (ColumnConfig config : columnConfigs) {
+//            head.add(Collections.singletonList(config.getLabel()));
+//        }
+        for (ImportConfig config : importConfigs) {
             head.add(Collections.singletonList(config.getLabel()));
         }
         List<Map<Integer, Object>> dataList = EasyExcel.read(file.getInputStream()).head(head).sheet().doReadSync();
@@ -340,9 +481,13 @@ public class FormExecuteController {
         List<Map<String, Object>> savedDataList = new ArrayList<>(dataList.size());
         for (Map<Integer, Object> data : dataList) {
             Map<String, Object> saveData = new HashMap<>(data.size());
-            for (int i = 0; i < columnConfigs.size(); i++) {
-                ColumnConfig columnConfig = columnConfigs.get(i);
-                saveData.put(columnConfig.getColumnName(), data.get(i));
+//            for (int i = 0; i < columnConfigs.size(); i++) {
+//                ColumnConfig columnConfig = columnConfigs.get(i);
+//                saveData.put(columnConfig.getColumnName(), data.get(i));
+//            }
+            for (int i = 0; i < importConfigs.size(); i++) {
+                ImportConfig importConfig = importConfigs.get(i);
+                saveData.put(importConfig.getFieldName(), data.get(i));
             }
             savedDataList.add(saveData);
         }

+ 4 - 0
src/main/java/com/xjrsoft/module/form/service/IFormExecuteService.java

@@ -18,7 +18,11 @@ import com.xjrsoft.module.form.dto.FormExecuteWorkflowInfoDto;
 import com.xjrsoft.module.form.dto.FormExecuteWorkflowUpdateDto;
 import com.xjrsoft.module.form.vo.DeskTableInfoVo;
 import org.apache.commons.lang3.tuple.Triple;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.RequestBody;
 
+import javax.validation.Valid;
+import java.io.ByteArrayOutputStream;
 import java.util.List;
 import java.util.Map;
 

+ 15 - 2
src/main/java/com/xjrsoft/module/form/service/impl/FormExecuteServiceImpl.java

@@ -40,6 +40,7 @@ import com.xjrsoft.module.form.entity.FormTemplate;
 import com.xjrsoft.module.form.mapper.FormReleaseMapper;
 import com.xjrsoft.module.form.mapper.FormTemplateMapper;
 import com.xjrsoft.module.form.service.IFormExecuteService;
+import com.xjrsoft.module.form.service.IFormReleaseService;
 import com.xjrsoft.module.form.utils.FormDataTransUtil;
 import com.xjrsoft.module.form.vo.DeskColumnsVo;
 import com.xjrsoft.module.form.vo.DeskTableInfoVo;
@@ -58,11 +59,13 @@ import net.sf.jsqlparser.expression.operators.relational.EqualsTo;
 import net.sf.jsqlparser.expression.operators.relational.GreaterThanEquals;
 import net.sf.jsqlparser.expression.operators.relational.LikeExpression;
 import net.sf.jsqlparser.expression.operators.relational.MinorThanEquals;
+import net.sf.jsqlparser.statement.select.OrderByElement;
 import net.sf.jsqlparser.statement.select.PlainSelect;
 import net.sf.jsqlparser.statement.select.Select;
 import net.sf.jsqlparser.util.SelectUtils;
 import org.apache.commons.collections.MapUtils;
 import org.apache.commons.lang3.BooleanUtils;
+import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.tuple.ImmutableTriple;
 import org.apache.commons.lang3.tuple.Triple;
 import org.camunda.bpm.engine.impl.calendar.DateTimeUtil;
@@ -93,6 +96,8 @@ public class FormExecuteServiceImpl implements IFormExecuteService {
 
     private final IAppFuncDesignService appFuncDesignService;
 
+    private final IFormReleaseService formReleaseService;
+
     /**
      * 需要模糊查询的
      */
@@ -1887,7 +1892,16 @@ public class FormExecuteServiceImpl implements IFormExecuteService {
         }
         plainSelect.setWhere(queryExpression);
 
-        com.baomidou.mybatisplus.extension.plugins.pagination.Page mybatisPage = new com.baomidou.mybatisplus.extension.plugins.pagination.Page(page.getPageNumber() + 1, page.getPageSize());
+        // 排序字段
+        for (Order order :page.getOrders()){
+            OrderByElement orderByElement = new OrderByElement();
+            orderByElement.setExpression(new net.sf.jsqlparser.schema.Column(order.getField()));
+            orderByElement.setAsc(order.getDirection().equals(Direction.ASC));
+            if (ObjectUtils.isEmpty(plainSelect.getOrderByElements())){
+                plainSelect.setOrderByElements(new ArrayList<>());
+            }
+            plainSelect.getOrderByElements().add(orderByElement);
+        }
 
         IPage<Map<String, Object>> pageResult = SqlRunnerAdapter.db().
                 selectPage(new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(page.getPageNumber() + 1, page.getPageSize()), plainSelect.toString());
@@ -2464,5 +2478,4 @@ public class FormExecuteServiceImpl implements IFormExecuteService {
         }
         return deskTableInfoVo;
     }
-
 }

+ 5 - 0
src/main/java/com/xjrsoft/module/generator/entity/ButtonConfig.java

@@ -19,4 +19,9 @@ public class ButtonConfig {
     private Boolean isDefault;
 
     private Boolean isUse;
+
+    /**
+     * 接口地址
+     */
+    private String redirectUrl;
 }

+ 38 - 0
src/main/java/com/xjrsoft/module/generator/entity/ImportConfig.java

@@ -0,0 +1,38 @@
+package com.xjrsoft.module.generator.entity;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.hibernate.validator.constraints.Length;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+public class ImportConfig {
+    /**
+     * 字段
+     */
+    @NotNull(message = "字段不能为空!")
+    @Length(max = 30, message = "字段长度不能超过30!")
+    private String fieldName;
+
+    /**
+     * 字段名称
+     */
+    @NotNull(message = "字段名称不能为空!")
+    @Length(max = 20, message = "字段名称不能超过20!")
+    private String label;
+
+    /**
+     * 宽度
+     */
+    private Integer width;
+
+    /**
+     * 是否必填
+     */
+    @ApiModelProperty("是否必填")
+    private Boolean required;
+
+    @ApiModelProperty("排序码")
+    private Integer sortCode;
+}

+ 10 - 0
src/main/java/com/xjrsoft/module/generator/entity/ListConfig.java

@@ -29,6 +29,11 @@ public class ListConfig {
      */
     private Integer pageSize;
 
+    /**
+     * 导入模版名称
+     */
+    private String importTemplateName;
+
     /**
      * 左侧菜单配置
      */
@@ -44,6 +49,11 @@ public class ListConfig {
      */
     private List<ColumnConfig> columnConfigs;
 
+    /**
+     * 导入模版配置
+     */
+    private List<ImportConfig> importConfigs;
+
     /**
      * 按钮配置
      */

+ 81 - 0
src/main/java/com/xjrsoft/module/liteflow/node/WfUpdateStateNode.java

@@ -0,0 +1,81 @@
+package com.xjrsoft.module.liteflow.node;
+
+import cn.hutool.core.convert.Convert;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.xjrsoft.common.enums.WorkflowApproveType;
+import com.xjrsoft.module.schedule.entity.WfCourseAdjust;
+import com.xjrsoft.module.student.service.IBaseStudentAssessmentClassRelationService;
+import com.xjrsoft.module.workflow.entity.WorkflowRecord;
+import com.xjrsoft.module.workflow.mapper.WorkflowRecordMapper;
+import com.xjrsoft.module.workflow.service.IWorkflowExecuteService;
+import com.yomahub.liteflow.core.NodeComponent;
+import org.apache.commons.lang.StringUtils;
+import org.camunda.bpm.engine.history.HistoricProcessInstance;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.support.TransactionSynchronization;
+import org.springframework.transaction.support.TransactionSynchronizationManager;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.concurrent.CompletableFuture;
+
+/**
+ * 学生班级巡查考核流程结束处理
+ */
+@Component("wf_approve_type_node")
+public class WfUpdateStateNode extends NodeComponent {
+
+    @Autowired
+    private WorkflowRecordMapper workflowRecordMapper;
+
+    @Autowired
+    private IWorkflowExecuteService workflowExecuteService;
+
+
+    @Override
+    public void process() throws Exception {
+        // 获取表单中数据编号
+        Map<String, Object> params = this.getFirstContextBean();
+        Object value = util.getFormDatKey(params, "id");
+        Long formId = Convert.toLong(value);
+        Object processInstanceId = params.get("processInstanceId");
+        if (processInstanceId == null) {
+            return;
+        }
+        String processInstanceIdStr = Convert.toStr(processInstanceId);
+        if (formId != null && StringUtils.isNotEmpty(processInstanceIdStr)) {
+            TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
+                @Override
+                public void afterCommit() {
+                    CompletableFuture.runAsync(() -> {
+                        Optional<HistoricProcessInstance> historicProcessInstanceOptional = workflowExecuteService.getHistoricProcessInstance(processInstanceId.toString());
+
+                        if (historicProcessInstanceOptional.isEmpty()) {
+                            return;
+                        }
+                        HistoricProcessInstance historicProcessInstance = historicProcessInstanceOptional.get();
+                        if (!historicProcessInstance.getState().equals(HistoricProcessInstance.STATE_ACTIVE)) {
+                            // 获取流程记录中的非正常结束
+                            LambdaQueryWrapper<WorkflowRecord> workflowRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
+                            workflowRecordLambdaQueryWrapper
+                                    .and(wq -> wq.eq(WorkflowRecord::getWorkflowApproveType, WorkflowApproveType.DISAGREE.getCode())
+                                            .or()
+                                            .eq(WorkflowRecord::getWorkflowApproveType, WorkflowApproveType.WITHDRAW.getCode())
+                                    )
+                                    .eq(WorkflowRecord::getProcessId, processInstanceId)
+                            ;
+                            List<WorkflowRecord> workflowRecordList = workflowRecordMapper.selectList(workflowRecordLambdaQueryWrapper);
+
+                            if (!workflowRecordList.isEmpty()) {
+                                return;
+                            }
+                        }
+
+                    });
+                }
+            });
+        }
+    }
+}

+ 35 - 1
src/main/java/com/xjrsoft/module/material/service/impl/MaterialTaskAssignServiceImpl.java

@@ -1,5 +1,6 @@
 package com.xjrsoft.module.material.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.github.yulichang.base.MPJBaseServiceImpl;
@@ -13,10 +14,16 @@ import com.xjrsoft.module.material.mapper.MaterialTaskAppendixMapper;
 import com.xjrsoft.module.material.mapper.MaterialTaskAssignMapper;
 import com.xjrsoft.module.material.mapper.MaterialTaskMapper;
 import com.xjrsoft.module.material.service.IMaterialTaskAssignService;
+import com.xjrsoft.module.organization.dto.WeChatSendMessageDto;
+import com.xjrsoft.module.organization.entity.User;
+import com.xjrsoft.module.organization.service.IUserService;
+import com.xjrsoft.module.organization.service.IWeChatService;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.List;
 import java.util.Optional;
 
@@ -26,6 +33,8 @@ public class MaterialTaskAssignServiceImpl extends MPJBaseServiceImpl<MaterialTa
     private final MaterialTaskAssignMapper materialTaskAssignMapper;
     private final MaterialTaskMapper materialTaskMapper;
     private final MaterialTaskAppendixMapper appendixMapper;
+    private final IWeChatService weChatService;
+    private final IUserService userService;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -84,6 +93,7 @@ public class MaterialTaskAssignServiceImpl extends MPJBaseServiceImpl<MaterialTa
     @Transactional(rollbackFor = Exception.class)
     public Boolean approved(List<MaterialTaskAssignApprovedDto> dtos) {
         MaterialTask materialTask = null;
+        String time = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
         for (MaterialTaskAssignApprovedDto dto : dtos) {
             MaterialTaskAssign materialTaskAssign = materialTaskAssignMapper.selectByIdDeep(dto.getId());
             if (materialTaskAssign != null && materialTaskAssign.getStatus() == 2) {
@@ -104,12 +114,36 @@ public class MaterialTaskAssignServiceImpl extends MPJBaseServiceImpl<MaterialTa
 //                        }
                     }
                     if (dto.getStatus() == 2) {//重做
-                        materialTaskAssign.setStatus(4);
+                        materialTaskAssign.setStatus(1);
 
                         appendixMapper.delete(
                                 new QueryWrapper<MaterialTaskAppendix>().lambda()
                                         .eq(MaterialTaskAppendix::getMaterialTaskId, materialTaskAssign.getId())
                         );
+
+                        User user = userService.getById(materialTaskAssign.getUserId());
+                        if(user.getOpenId() != null){
+                            WeChatSendMessageDto weChatSendMessageDto = new WeChatSendMessageDto();
+                            weChatSendMessageDto.setUserId(user.getOpenId());
+                            weChatSendMessageDto.setTemplateId("qmpXORPM1Cocqn503Qa4On6BJhR92UZ00eod2-6IcGo");
+                            //weChatSendMessageDto.setUrl(StrUtil.format("{}/pages/message/notice/detail?id={}", commonPropertiesConfig.getDomainApp(), id));
+                            weChatSendMessageDto.setMsgId(materialTask.getId().toString());
+                            JSONObject data = new JSONObject();
+
+                            JSONObject data1 = new JSONObject();
+                            data1.put("value", materialTask.getName() + "提交材料被拒绝");
+                            data.put("thing23", data1);
+
+                            JSONObject data2 = new JSONObject();
+                            data2.put("value", user.getName());
+                            data.put("thing29", data2);
+
+                            JSONObject data3 = new JSONObject();
+                            data3.put("value", time);
+                            data.put("time17", data3);
+                            weChatSendMessageDto.setContent(data);
+                            weChatService.sendTemplateMessage(weChatSendMessageDto);
+                        }
                     }
 
                     materialTaskAssignMapper.updateById(materialTaskAssign);

+ 3 - 0
src/main/java/com/xjrsoft/module/organization/dto/UpdateDepartmentDto.java

@@ -67,4 +67,7 @@ public class UpdateDepartmentDto  implements Serializable {
     @ApiModelProperty("组织类别,1:公司,0:部门")
     private Integer departmentType;
 
+    @ApiModelProperty("是否专业部(1:是 0:否)")
+    private Integer isMajor;
+
 }

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

@@ -182,7 +182,15 @@ public class BasePersonnelLabourCapitalController {
             data.setIdType(datatMap.get(0) == null?null:datatMap.get(0).toString());
             data.setAmountTo(datatMap.get(4) == null?null:datatMap.get(4).toString());
             data.setJobNumber(datatMap.get(2) == null?null:datatMap.get(2).toString());
-            data.setExtendJson(JsonUtil.toJsonString(datatMap));
+            for (Integer integer : datatMap.keySet()) {
+                Object o = datatMap.get(integer);
+                if(o != null && o.toString().startsWith("(") && o.toString().endsWith(")")){
+                    datatMap.put(integer, "-" + o.toString().replace("(", "").replace(")", ""));
+                }
+            }
+            String jsonString = JsonUtil.toJsonString(datatMap);
+            jsonString = jsonString.replaceAll("- 0", "-");
+            data.setExtendJson(jsonString);
             resultList.add(data);
         }
 

+ 3 - 0
src/main/java/com/xjrsoft/module/personnel/dto/BasePersonnelLabourCapitalMonthPageDto.java

@@ -19,4 +19,7 @@ public class BasePersonnelLabourCapitalMonthPageDto extends PageInput {
 
     @ApiModelProperty("月份")
     public int month;
+
+    @ApiModelProperty("工号")
+    public String jobNumber;
 }

+ 6 - 0
src/main/java/com/xjrsoft/module/personnel/dto/BasePersonnelLabourCapitalYearPageDto.java

@@ -19,4 +19,10 @@ public class BasePersonnelLabourCapitalYearPageDto extends PageInput {
 
     @ApiModelProperty("发放项目")
     public String project;
+
+    @ApiModelProperty("工号")
+    public String jobNumber;
+
+    @ApiModelProperty("姓名")
+    public String name;
 }

+ 31 - 21
src/main/java/com/xjrsoft/module/personnel/service/impl/BasePersonnelLabourCapitalServiceImpl.java

@@ -1,10 +1,13 @@
 package com.xjrsoft.module.personnel.service.impl;
 
+import cn.dev33.satoken.stp.StpUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.xjrsoft.module.organization.entity.User;
+import com.xjrsoft.module.organization.service.IUserService;
 import com.xjrsoft.module.personnel.dto.BasePersonnelLabourCapitalMonthPageDto;
 import com.xjrsoft.module.personnel.dto.BasePersonnelLabourCapitalYearPageDto;
 import com.xjrsoft.module.personnel.entity.BasePersonnelLabourCapital;
@@ -35,14 +38,18 @@ import java.util.stream.Collectors;
 @Service
 @AllArgsConstructor
 public class BasePersonnelLabourCapitalServiceImpl extends MPJBaseServiceImpl<BasePersonnelLabourCapitalMapper, BasePersonnelLabourCapital> implements IBasePersonnelLabourCapitalService {
-    private final BasePersonnelLabourCapitalMapper basePersonnelLabourCapitalBasePersonnelLabourCapitalMapper;
+    private final BasePersonnelLabourCapitalMapper labourCapitalMapper;
 
-    private final BasePersonnelLabourCapitalDataMapper basePersonnelLabourCapitalBasePersonnelLabourCapitalDataMapper;
-    private final BasePersonnelLabourCapitalTitleMapper basePersonnelLabourCapitalBasePersonnelLabourCapitalTitleMapper;
+    private final BasePersonnelLabourCapitalDataMapper capitalDataMapper;
+    private final BasePersonnelLabourCapitalTitleMapper capitalTitleMapper;
+    private final IUserService userService;
 
     @Override
     public Page<BasePersonnelLabourCapitalMonthPageVo> getMonthPage(Page<BasePersonnelLabourCapitalMonthPageDto> page, BasePersonnelLabourCapitalMonthPageDto dto) {
-        Page<BasePersonnelLabourCapitalMonthPageVo> resultPage = basePersonnelLabourCapitalBasePersonnelLabourCapitalMapper.getMonthPage(page, dto);
+        long userId = StpUtil.getLoginIdAsLong();
+        User user = userService.getById(userId);
+        dto.setJobNumber(user.getUserName());
+        Page<BasePersonnelLabourCapitalMonthPageVo> resultPage = labourCapitalMapper.getMonthPage(page, dto);
 
         for (BasePersonnelLabourCapitalMonthPageVo record : resultPage.getRecords()) {
             JSONObject extendJsonObj = JSON.parseObject(record.getPendingJson());
@@ -63,11 +70,14 @@ public class BasePersonnelLabourCapitalServiceImpl extends MPJBaseServiceImpl<Ba
 
     @Override
     public Page<BasePersonnelLabourCapitalYearPageVo> getYearPage(Page<BasePersonnelLabourCapitalYearPageDto> page, BasePersonnelLabourCapitalYearPageDto dto) {
-        return basePersonnelLabourCapitalBasePersonnelLabourCapitalMapper.getYearPage(page, dto);
+        long userId = StpUtil.getLoginIdAsLong();
+        User user = userService.getById(userId);
+        dto.setJobNumber(user.getUserName());
+        return labourCapitalMapper.getYearPage(page, dto);
     }
 
     private String getBpName(String columnNumber) {
-        List<BasePersonnelLabourCapitalTitle> bpTitles = basePersonnelLabourCapitalBasePersonnelLabourCapitalTitleMapper.selectList(Wrappers.<BasePersonnelLabourCapitalTitle>lambdaQuery().eq(BasePersonnelLabourCapitalTitle::getColumnNumber, columnNumber));
+        List<BasePersonnelLabourCapitalTitle> bpTitles = capitalTitleMapper.selectList(Wrappers.<BasePersonnelLabourCapitalTitle>lambdaQuery().eq(BasePersonnelLabourCapitalTitle::getColumnNumber, columnNumber));
         if (bpTitles != null && !bpTitles.isEmpty()) {
             return bpTitles.get(0).getName();
         } else {
@@ -78,14 +88,14 @@ public class BasePersonnelLabourCapitalServiceImpl extends MPJBaseServiceImpl<Ba
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean add(BasePersonnelLabourCapital basePersonnelLabourCapital) {
-        basePersonnelLabourCapitalBasePersonnelLabourCapitalMapper.insert(basePersonnelLabourCapital);
+        labourCapitalMapper.insert(basePersonnelLabourCapital);
         for (BasePersonnelLabourCapitalData basePersonnelLabourCapitalData : basePersonnelLabourCapital.getBasePersonnelLabourCapitalDataList()) {
             basePersonnelLabourCapitalData.setLabourCapitalId(basePersonnelLabourCapital.getId());
-            basePersonnelLabourCapitalBasePersonnelLabourCapitalDataMapper.insert(basePersonnelLabourCapitalData);
+            capitalDataMapper.insert(basePersonnelLabourCapitalData);
         }
         for (BasePersonnelLabourCapitalTitle basePersonnelLabourCapitalTitle : basePersonnelLabourCapital.getBasePersonnelLabourCapitalTitleList()) {
             basePersonnelLabourCapitalTitle.setLabourCapitalId(basePersonnelLabourCapital.getId());
-            basePersonnelLabourCapitalBasePersonnelLabourCapitalTitleMapper.insert(basePersonnelLabourCapitalTitle);
+            capitalTitleMapper.insert(basePersonnelLabourCapitalTitle);
         }
 
         return true;
@@ -94,11 +104,11 @@ public class BasePersonnelLabourCapitalServiceImpl extends MPJBaseServiceImpl<Ba
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean update(BasePersonnelLabourCapital basePersonnelLabourCapital) {
-        basePersonnelLabourCapitalBasePersonnelLabourCapitalMapper.updateById(basePersonnelLabourCapital);
+        labourCapitalMapper.updateById(basePersonnelLabourCapital);
         //********************************* BasePersonnelLabourCapitalData  增删改  开始 *******************************************/
         {
             // 查出所有子级的id
-            List<BasePersonnelLabourCapitalData> basePersonnelLabourCapitalDataList = basePersonnelLabourCapitalBasePersonnelLabourCapitalDataMapper.selectList(Wrappers.lambdaQuery(BasePersonnelLabourCapitalData.class).eq(BasePersonnelLabourCapitalData::getLabourCapitalId, basePersonnelLabourCapital.getId()).select(BasePersonnelLabourCapitalData::getId));
+            List<BasePersonnelLabourCapitalData> basePersonnelLabourCapitalDataList = capitalDataMapper.selectList(Wrappers.lambdaQuery(BasePersonnelLabourCapitalData.class).eq(BasePersonnelLabourCapitalData::getLabourCapitalId, basePersonnelLabourCapital.getId()).select(BasePersonnelLabourCapitalData::getId));
             List<Long> basePersonnelLabourCapitalDataIds = basePersonnelLabourCapitalDataList.stream().map(BasePersonnelLabourCapitalData::getId).collect(Collectors.toList());
             //原有子表单 没有被删除的主键
             List<Long> basePersonnelLabourCapitalDataOldIds = basePersonnelLabourCapital.getBasePersonnelLabourCapitalDataList().stream().map(BasePersonnelLabourCapitalData::getId).filter(Objects::nonNull).collect(Collectors.toList());
@@ -108,18 +118,18 @@ public class BasePersonnelLabourCapitalServiceImpl extends MPJBaseServiceImpl<Ba
             for (BasePersonnelLabourCapitalData basePersonnelLabourCapitalData : basePersonnelLabourCapital.getBasePersonnelLabourCapitalDataList()) {
                 //如果不等于空则修改
                 if (basePersonnelLabourCapitalData.getId() != null) {
-                    basePersonnelLabourCapitalBasePersonnelLabourCapitalDataMapper.updateById(basePersonnelLabourCapitalData);
+                    capitalDataMapper.updateById(basePersonnelLabourCapitalData);
                 }
                 //如果等于空 则新增
                 else {
                     //已经不存在的id 删除
                     basePersonnelLabourCapitalData.setLabourCapitalId(basePersonnelLabourCapital.getId());
-                    basePersonnelLabourCapitalBasePersonnelLabourCapitalDataMapper.insert(basePersonnelLabourCapitalData);
+                    capitalDataMapper.insert(basePersonnelLabourCapitalData);
                 }
             }
             //已经不存在的id 删除
             if(basePersonnelLabourCapitalDataRemoveIds.size() > 0){
-                basePersonnelLabourCapitalBasePersonnelLabourCapitalDataMapper.deleteBatchIds(basePersonnelLabourCapitalDataRemoveIds);
+                capitalDataMapper.deleteBatchIds(basePersonnelLabourCapitalDataRemoveIds);
             }
         }
         //********************************* BasePersonnelLabourCapitalData  增删改  结束 *******************************************/
@@ -127,7 +137,7 @@ public class BasePersonnelLabourCapitalServiceImpl extends MPJBaseServiceImpl<Ba
         //********************************* BasePersonnelLabourCapitalTitle  增删改  开始 *******************************************/
         {
             // 查出所有子级的id
-            List<BasePersonnelLabourCapitalTitle> basePersonnelLabourCapitalTitleList = basePersonnelLabourCapitalBasePersonnelLabourCapitalTitleMapper.selectList(Wrappers.lambdaQuery(BasePersonnelLabourCapitalTitle.class).eq(BasePersonnelLabourCapitalTitle::getLabourCapitalId, basePersonnelLabourCapital.getId()).select(BasePersonnelLabourCapitalTitle::getId));
+            List<BasePersonnelLabourCapitalTitle> basePersonnelLabourCapitalTitleList = capitalTitleMapper.selectList(Wrappers.lambdaQuery(BasePersonnelLabourCapitalTitle.class).eq(BasePersonnelLabourCapitalTitle::getLabourCapitalId, basePersonnelLabourCapital.getId()).select(BasePersonnelLabourCapitalTitle::getId));
             List<Long> basePersonnelLabourCapitalTitleIds = basePersonnelLabourCapitalTitleList.stream().map(BasePersonnelLabourCapitalTitle::getId).collect(Collectors.toList());
             //原有子表单 没有被删除的主键
             List<Long> basePersonnelLabourCapitalTitleOldIds = basePersonnelLabourCapital.getBasePersonnelLabourCapitalTitleList().stream().map(BasePersonnelLabourCapitalTitle::getId).filter(Objects::nonNull).collect(Collectors.toList());
@@ -137,18 +147,18 @@ public class BasePersonnelLabourCapitalServiceImpl extends MPJBaseServiceImpl<Ba
             for (BasePersonnelLabourCapitalTitle basePersonnelLabourCapitalTitle : basePersonnelLabourCapital.getBasePersonnelLabourCapitalTitleList()) {
                 //如果不等于空则修改
                 if (basePersonnelLabourCapitalTitle.getId() != null) {
-                    basePersonnelLabourCapitalBasePersonnelLabourCapitalTitleMapper.updateById(basePersonnelLabourCapitalTitle);
+                    capitalTitleMapper.updateById(basePersonnelLabourCapitalTitle);
                 }
                 //如果等于空 则新增
                 else {
                     //已经不存在的id 删除
                     basePersonnelLabourCapitalTitle.setLabourCapitalId(basePersonnelLabourCapital.getId());
-                    basePersonnelLabourCapitalBasePersonnelLabourCapitalTitleMapper.insert(basePersonnelLabourCapitalTitle);
+                    capitalTitleMapper.insert(basePersonnelLabourCapitalTitle);
                 }
             }
             //已经不存在的id 删除
             if(basePersonnelLabourCapitalTitleRemoveIds.size() > 0){
-                basePersonnelLabourCapitalBasePersonnelLabourCapitalTitleMapper.deleteBatchIds(basePersonnelLabourCapitalTitleRemoveIds);
+                capitalTitleMapper.deleteBatchIds(basePersonnelLabourCapitalTitleRemoveIds);
             }
         }
         //********************************* BasePersonnelLabourCapitalTitle  增删改  结束 *******************************************/
@@ -159,9 +169,9 @@ public class BasePersonnelLabourCapitalServiceImpl extends MPJBaseServiceImpl<Ba
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean delete(List<Long> ids) {
-        basePersonnelLabourCapitalBasePersonnelLabourCapitalMapper.deleteBatchIds(ids);
-        basePersonnelLabourCapitalBasePersonnelLabourCapitalDataMapper.delete(Wrappers.lambdaQuery(BasePersonnelLabourCapitalData.class).in(BasePersonnelLabourCapitalData::getLabourCapitalId, ids));
-        basePersonnelLabourCapitalBasePersonnelLabourCapitalTitleMapper.delete(Wrappers.lambdaQuery(BasePersonnelLabourCapitalTitle.class).in(BasePersonnelLabourCapitalTitle::getLabourCapitalId, ids));
+        labourCapitalMapper.deleteBatchIds(ids);
+        capitalDataMapper.delete(Wrappers.lambdaQuery(BasePersonnelLabourCapitalData.class).in(BasePersonnelLabourCapitalData::getLabourCapitalId, ids));
+        capitalTitleMapper.delete(Wrappers.lambdaQuery(BasePersonnelLabourCapitalTitle.class).in(BasePersonnelLabourCapitalTitle::getLabourCapitalId, ids));
 
         return true;
     }

+ 1 - 1
src/main/java/com/xjrsoft/module/personnel/vo/BasePersonnelLabourCapitalMonthPageVo.java

@@ -33,7 +33,7 @@ public class BasePersonnelLabourCapitalMonthPageVo {
     @ContentStyle(dataFormat = 49)
     @ExcelProperty("总计")
     @ApiModelProperty("总计")
-    private float amount;
+    private String amount;
 
     @ContentStyle(dataFormat = 49)
     @ExcelProperty("待处理json")

+ 3 - 3
src/main/java/com/xjrsoft/module/personnel/vo/BasePersonnelLabourCapitalYearPageVo.java

@@ -41,15 +41,15 @@ public class BasePersonnelLabourCapitalYearPageVo {
     @ContentStyle(dataFormat = 49)
     @ExcelProperty("金额")
     @ApiModelProperty("金额")
-    private float amount;
+    private String amount;
 
     @ContentStyle(dataFormat = 49)
     @ExcelProperty("月金额")
     @ApiModelProperty("月金额")
-    private float monthAmount;
+    private String monthAmount;
 
     @ContentStyle(dataFormat = 49)
     @ExcelProperty("年金额")
     @ApiModelProperty("年金额")
-    private float yearAmount;
+    private String yearAmount;
 }

+ 3 - 3
src/main/java/com/xjrsoft/module/schedule/controller/ScheduleController.java

@@ -326,12 +326,12 @@ public class ScheduleController {
 
     @PostMapping("/schedule-week-export-query")
     @ApiOperation(value = "按周导出课表")
-    public ResponseEntity<byte[]> scheduleWeekExportQuery(@Valid @RequestBody ScheduleWeekExportQueryDto dto) {
+    public ResponseEntity<byte[]> scheduleWeekExportQuery(@Valid @RequestBody CourseTableDto dto) {
 //    @GetMapping("/schedule-week-export-query")
 //    @ApiOperation(value = "按周导出课表")
-//    public ResponseEntity<byte[]> textbookClaimExportQuery(@Valid ScheduleWeekExportQueryDto dto) {
+//    public ResponseEntity<byte[]> textbookClaimExportQuery(ScheduleWeekExportQueryDto dto) {
 
-        ByteArrayOutputStream bot = courseTableService.listScheduleWeekExportQuery(dto);
+        ByteArrayOutputStream bot = courseTableService.scheduleWeekExportQuery(dto);
         return RT.fileStream(bot.toByteArray(), "scheduleWeek" + ExcelTypeEnum.XLSX.getValue());
     }
 

+ 3 - 0
src/main/java/com/xjrsoft/module/student/dto/BaseStudentUserPageDto.java

@@ -53,4 +53,7 @@ public class BaseStudentUserPageDto extends PageInput {
     @ApiModelProperty("身份证号")
     private String credentialNumber;
 
+    @ApiModelProperty("年级id")
+    private Long gradeId;
+
 }

+ 170 - 0
src/main/java/com/xjrsoft/module/teacher/controller/TeacherAwardController.java

@@ -1,13 +1,22 @@
 package com.xjrsoft.module.teacher.controller;
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.hutool.core.bean.BeanUtil;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.support.ExcelTypeEnum;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import com.xjrsoft.common.enums.DeleteMark;
+import com.xjrsoft.common.exception.MyException;
 import com.xjrsoft.common.model.result.RT;
 import com.xjrsoft.common.page.ConventPage;
 import com.xjrsoft.common.page.PageOutput;
+import com.xjrsoft.common.utils.FileZipUtil;
 import com.xjrsoft.common.utils.VoToColumnUtil;
+import com.xjrsoft.module.system.entity.File;
+import com.xjrsoft.module.system.service.IFileService;
 import com.xjrsoft.module.teacher.dto.TeacherAwardDetailPageDto;
 import com.xjrsoft.module.teacher.dto.TeacherAwardStatisticsPageDto;
 import com.xjrsoft.module.teacher.entity.TeacherAward;
@@ -15,16 +24,32 @@ import com.xjrsoft.module.teacher.entity.TeacherAwardItem;
 import com.xjrsoft.module.teacher.entity.XjrUser;
 import com.xjrsoft.module.teacher.service.ITeacherAwardItemService;
 import com.xjrsoft.module.teacher.service.ITeacherAwardService;
+import com.xjrsoft.module.teacher.vo.TeacherAwardDetailExcelVo;
 import com.xjrsoft.module.teacher.vo.TeacherAwardDetailPageVo;
+import com.xjrsoft.module.teacher.vo.TeacherAwardStatisticsExcelVo;
 import com.xjrsoft.module.teacher.vo.TeacherAwardStatisticsPageVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
+import me.zhyd.oauth.log.Log;
+import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.validation.Valid;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.net.URLConnection;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
 * @title: 教师奖项
@@ -43,6 +68,8 @@ public class TeacherAwardController {
 
     private final ITeacherAwardService teacherAwardService;
 
+    private final IFileService fileService;
+
     @GetMapping(value = "/statistics-page")
     @ApiOperation(value="教师获奖统计")
     @SaCheckPermission("teacheraward:detail")
@@ -77,4 +104,147 @@ public class TeacherAwardController {
         PageOutput<TeacherAwardDetailPageVo> pageOutput = ConventPage.getPageOutput(page, TeacherAwardDetailPageVo.class);
         return RT.ok(pageOutput);
     }
+
+    @PostMapping(value = "/export-query")
+    @ApiOperation(value="导出")
+    @SaCheckPermission("teacheraward:detail")
+    public ResponseEntity<byte[]> exportQuery(@Valid @RequestBody TeacherAwardStatisticsPageDto dto){
+        List<TeacherAwardStatisticsPageVo> list = teacherAwardItemService.getStatisticsList(dto);
+
+        ByteArrayOutputStream bot = new ByteArrayOutputStream();
+        EasyExcel.write(bot, TeacherAwardStatisticsExcelVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(list);
+
+        return RT.fileStream(bot.toByteArray(), "教师获奖登记" + ExcelTypeEnum.XLSX.getValue());
+    }
+
+
+    @PostMapping(value = "/detail-export-query")
+    @ApiOperation(value="教师获奖详情页")
+    @SaCheckPermission("teacheraward:detail")
+    public ResponseEntity<byte[]> detailExportQuery(@Valid @RequestBody TeacherAwardDetailPageDto dto){
+        try {
+            MPJLambdaWrapper<TeacherAward> teacherAwardMPJLambdaWrapper = new MPJLambdaWrapper<>();
+            teacherAwardMPJLambdaWrapper
+                    .disableSubLogicDel()
+                    .selectAs(TeacherAwardItem::getIsThesis, TeacherAwardDetailPageVo::getIsThesis)
+                    .selectAs(XjrUser::getName, TeacherAwardDetailPageVo::getApplicantUserIdCn)
+                    .select(TeacherAward.class,x -> VoToColumnUtil.fieldsToColumns(TeacherAwardDetailPageVo.class).contains(x.getProperty()))
+                    .leftJoin(TeacherAwardItem.class, TeacherAwardItem::getId, TeacherAward::getTeacherAwardItemId)
+                    .leftJoin(XjrUser.class, XjrUser::getId, TeacherAward::getApplicantUserId)
+                    .eq(dto.getApplicantUserId() != null && dto.getApplicantUserId() > 0,TeacherAward::getApplicantUserId, dto.getApplicantUserId())
+                    .eq(dto.getIsThesis() != null,TeacherAwardItem::getIsThesis, dto.getIsThesis())
+                    .like(dto.getApplicantUserIdCn() != null && !dto.getApplicantUserIdCn().equals(""), XjrUser::getName, dto.getApplicantUserIdCn())
+                    .like(dto.getWholeCompetitionName() != null && !dto.getWholeCompetitionName().equals(""),TeacherAward::getWholeCompetitionName, dto.getWholeCompetitionName())
+                    .eq(TeacherAward::getStatus, 1)
+                    .orderByDesc(TeacherAward::getCreateDate)
+            ;
+            List<TeacherAwardDetailPageVo> list = teacherAwardService.selectJoinList(TeacherAwardDetailPageVo.class, teacherAwardMPJLambdaWrapper);
+            List<TeacherAwardDetailExcelVo> excelList = new ArrayList<>();
+            int index = 1;
+            Map<String, byte[]> byteAryMap = new HashMap<>();
+            String folderName = "附件材料";
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            for (TeacherAwardDetailPageVo el : list) {
+                TeacherAwardDetailExcelVo rowData = BeanUtil.toBean(el, TeacherAwardDetailExcelVo.class);
+                if(el.getIssueDate() == null){
+                    rowData.setIssueDate("");
+                }else{
+                    rowData.setIssueDate(sdf.format(el.getIssueDate()));
+                }
+                if(rowData.getRemark() == null){
+                    rowData.setRemark("");
+                }
+                if(rowData.getJournalLevel() == null){
+                    rowData.setJournalLevel("");
+                }
+                if(rowData.getJournalNumber() == null){
+                    rowData.setJournalNumber("");
+                }
+                if(rowData.getApplicantUserIdCn() == null){
+                    rowData.setApplicantUserIdCn("");
+                }
+                if(rowData.getIsThesis() == null){
+                    rowData.setIsThesis("");
+                }
+                if(rowData.getCompetitionName() == null){
+                    rowData.setCompetitionName("");
+                }
+                if(rowData.getMediaType() == null){
+                    rowData.setMediaType("");
+                }
+
+
+                if(el.getIsThesis() == 1){
+                    rowData.setIsThesis("是");
+                }else if(el.getIsThesis() == 0){
+                    rowData.setIsThesis("否");
+                }
+                List<File> fileList = fileService.list(
+                        new QueryWrapper<File>().lambda()
+                                .eq(File::getFolderId, el.getFileId())
+                                .eq(File::getDeleteMark, DeleteMark.NODELETE.getCode())
+                );
+
+                if(fileList.isEmpty()){
+                    excelList.add(rowData);
+                    continue;
+                }
+                String fileName = "佐证材料" + index;
+                if(fileList.size() == 1){
+                    try {
+                        File file = fileList.get(0);
+                        URL url = new URL(file.getFileUrl());
+                        URLConnection conn = url.openConnection();
+                        InputStream in = conn.getInputStream();
+                        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+                        byte[] buffer = new byte[1024];
+                        int bytesRead;
+                        while ((bytesRead = in.read(buffer)) != -1) {
+                            outputStream.write(buffer, 0, bytesRead);
+                        }
+                        byte[] byteArray = outputStream.toByteArray();
+                        byteAryMap.put(folderName + "\\" + fileName + file.getFileType(), byteArray);
+                        in.close();
+                        outputStream.close();
+                    } catch (IOException e) {
+                        throw new RuntimeException(e);
+                    }
+                }else{
+                    for (int i = 0; i < fileList.size(); i++) {
+                        try {
+                            URL url = new URL(fileList.get(i).getFileUrl());
+                            URLConnection conn = url.openConnection();
+                            InputStream in = conn.getInputStream();
+                            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+                            byte[] buffer = new byte[1024];
+                            int bytesRead;
+                            while ((bytesRead = in.read(buffer)) != -1) {
+                                outputStream.write(buffer, 0, bytesRead);
+                            }
+                            byte[] byteArray = outputStream.toByteArray();
+                            byteAryMap.put(folderName + "\\" + fileName + "\\佐证材料" + (i + 1) + fileList.get(i).getFileType(), byteArray);
+                            in.close();
+                            outputStream.close();
+                        } catch (IOException e) {
+                            throw new RuntimeException(e);
+                        }
+                    }
+                }
+
+                rowData.setFileName(fileName);
+                excelList.add(rowData);
+                index ++;
+            }
+
+            ByteArrayOutputStream bot = new ByteArrayOutputStream();
+            EasyExcel.write(bot, TeacherAwardDetailExcelVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(excelList);
+            byteAryMap.put("教师获奖登记" + ExcelTypeEnum.XLSX.getValue(), bot.toByteArray());
+
+            byte[] bytes = FileZipUtil.byteAryMap2Zip(byteAryMap);
+            return RT.fileStream(bytes, "detailExportQuery.zip");
+        }catch (Exception e){
+            Log.error(e.getMessage(), e);
+            throw new MyException("导出出错,请联系管理员");
+        }
+    }
 }

+ 22 - 0
src/main/java/com/xjrsoft/module/teacher/dto/TeacherAwardFileListDto.java

@@ -0,0 +1,22 @@
+package com.xjrsoft.module.teacher.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+
+/**
+* @title: 教师奖项分页查询入参
+* @Author dzx
+* @Date: 2024-06-04
+* @Version 1.0
+*/
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class TeacherAwardFileListDto {
+
+    @ApiModelProperty("申请人ids")
+    private List<Long> applicantUserIds;
+}

+ 9 - 0
src/main/java/com/xjrsoft/module/teacher/mapper/TeacherAwardItemMapper.java

@@ -2,12 +2,17 @@ package com.xjrsoft.module.teacher.mapper;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.base.MPJBaseMapper;
+import com.xjrsoft.module.teacher.dto.TeacherAwardFileListDto;
 import com.xjrsoft.module.teacher.dto.TeacherAwardStatisticsPageDto;
 import com.xjrsoft.module.teacher.entity.TeacherAwardItem;
+import com.xjrsoft.module.teacher.vo.TeacherAwardFileListVo;
+import com.xjrsoft.module.teacher.vo.TeacherAwardStatisticsExcelVo;
 import com.xjrsoft.module.teacher.vo.TeacherAwardStatisticsPageVo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 /**
 * @title: 教师奖项
 * @Author dzx
@@ -18,4 +23,8 @@ import org.apache.ibatis.annotations.Param;
 public interface TeacherAwardItemMapper extends MPJBaseMapper<TeacherAwardItem> {
 
     Page<TeacherAwardStatisticsPageVo> getStatisticsPage(Page<TeacherAwardStatisticsPageVo> page, @Param("dto") TeacherAwardStatisticsPageDto dto);
+
+    List<TeacherAwardStatisticsPageVo> getStatisticsList(@Param("dto") TeacherAwardStatisticsPageDto dto);
+
+    List<TeacherAwardFileListVo> getAwardFileList(@Param("dto") TeacherAwardFileListDto dto);
 }

+ 4 - 0
src/main/java/com/xjrsoft/module/teacher/service/ITeacherAwardItemService.java

@@ -5,7 +5,9 @@ import com.github.yulichang.base.MPJBaseService;
 import com.xjrsoft.module.teacher.dto.TeacherAwardStatisticsPageDto;
 import com.xjrsoft.module.teacher.entity.TeacherAwardItem;
 import com.xjrsoft.module.teacher.vo.TeacherAwardItemVo;
+import com.xjrsoft.module.teacher.vo.TeacherAwardStatisticsExcelVo;
 import com.xjrsoft.module.teacher.vo.TeacherAwardStatisticsPageVo;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -22,4 +24,6 @@ public interface ITeacherAwardItemService extends MPJBaseService<TeacherAwardIte
 
     List<TeacherAwardItemVo> getTeacherAwardItemTree(Integer isThesis);
 
+    List<TeacherAwardStatisticsPageVo> getStatisticsList(@Param("dto") TeacherAwardStatisticsPageDto dto);
+
 }

+ 7 - 0
src/main/java/com/xjrsoft/module/teacher/service/ITeacherAwardService.java

@@ -1,7 +1,12 @@
 package com.xjrsoft.module.teacher.service;
 
 import com.github.yulichang.base.MPJBaseService;
+import com.xjrsoft.module.teacher.dto.TeacherAwardFileListDto;
 import com.xjrsoft.module.teacher.entity.TeacherAward;
+import com.xjrsoft.module.teacher.vo.TeacherAwardFileListVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
 * @title: 教师获奖登记
@@ -18,4 +23,6 @@ public interface ITeacherAwardService extends MPJBaseService<TeacherAward> {
      * @return
      */
     Boolean dataHandleAddTeacherAwardNode(Long dataId);
+
+    List<TeacherAwardFileListVo> getAwardFileList(TeacherAwardFileListDto dto);
 }

+ 6 - 0
src/main/java/com/xjrsoft/module/teacher/service/impl/TeacherAwardItemServiceImpl.java

@@ -12,6 +12,7 @@ import com.xjrsoft.module.teacher.mapper.TeacherAwardItemMapper;
 import com.xjrsoft.module.teacher.service.ITeacherAwardItemService;
 import com.xjrsoft.module.teacher.vo.TeacherAwardItemPageVo;
 import com.xjrsoft.module.teacher.vo.TeacherAwardItemVo;
+import com.xjrsoft.module.teacher.vo.TeacherAwardStatisticsExcelVo;
 import com.xjrsoft.module.teacher.vo.TeacherAwardStatisticsPageVo;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
@@ -48,4 +49,9 @@ public class TeacherAwardItemServiceImpl extends MPJBaseServiceImpl<TeacherAward
         return TreeUtil.build(itemVos);
     }
 
+    @Override
+    public List<TeacherAwardStatisticsPageVo> getStatisticsList(TeacherAwardStatisticsPageDto dto) {
+        return this.baseMapper.getStatisticsList(dto);
+    }
+
 }

+ 7 - 0
src/main/java/com/xjrsoft/module/teacher/service/impl/TeacherAwardServiceImpl.java

@@ -4,11 +4,13 @@ import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.xjrsoft.common.utils.VoToColumnUtil;
+import com.xjrsoft.module.teacher.dto.TeacherAwardFileListDto;
 import com.xjrsoft.module.teacher.entity.TeacherAward;
 import com.xjrsoft.module.teacher.entity.TeacherAwardItem;
 import com.xjrsoft.module.teacher.mapper.TeacherAwardItemMapper;
 import com.xjrsoft.module.teacher.mapper.TeacherAwardMapper;
 import com.xjrsoft.module.teacher.service.ITeacherAwardService;
+import com.xjrsoft.module.teacher.vo.TeacherAwardFileListVo;
 import com.xjrsoft.module.teacher.vo.TeacherAwardItemPageVo;
 import com.xjrsoft.module.teacher.vo.TeacherAwardItemVo;
 import lombok.AllArgsConstructor;
@@ -68,6 +70,11 @@ public class TeacherAwardServiceImpl extends MPJBaseServiceImpl<TeacherAwardMapp
         return this.updateById(updateTeacherAward);
     }
 
+    @Override
+    public List<TeacherAwardFileListVo> getAwardFileList(TeacherAwardFileListDto dto) {
+        return teacherAwardItemMapper.getAwardFileList(dto);
+    }
+
     private List<TeacherAwardItemVo> findAncestors(List<TeacherAwardItemVo> itemVos, Long targetId) {
         List<TeacherAwardItemVo> ancestors = new ArrayList<>();
         Map<Long, TeacherAwardItemVo> itemMap = itemVos.stream()

+ 62 - 0
src/main/java/com/xjrsoft/module/teacher/vo/TeacherAwardDetailExcelVo.java

@@ -0,0 +1,62 @@
+package com.xjrsoft.module.teacher.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+* @title: 教师奖项分页列表出参
+* @Author dzx
+* @Date: 2024年11月13日
+* @Version 1.0
+*/
+@Data
+public class TeacherAwardDetailExcelVo {
+
+
+    @ExcelProperty("教师名称")
+    @ApiModelProperty("教师名称")
+    private String applicantUserIdCn;
+
+    @ExcelProperty("奖项名称")
+    @ApiModelProperty("奖项名称")
+    private String competitionName;
+
+    @ExcelProperty("是否论文")
+    @ApiModelProperty("是否论文")
+    private String isThesis;
+
+    @ExcelProperty("作品名称")
+    @ApiModelProperty("作品名称")
+    private String paperName;
+
+    @ExcelProperty("媒体名称")
+    @ApiModelProperty("媒体名称")
+    private String journalName;
+
+    @ExcelProperty("媒体类型")
+    @ApiModelProperty("媒体类型")
+    private String mediaType;
+
+    @ExcelProperty("国内统一刊号")
+    @ApiModelProperty("国内统一刊号CN")
+    private String journalNumber;
+
+    @ExcelProperty("期刊级别")
+    @ApiModelProperty("期刊级别(核心期刊、一般期刊、(校级、内部论文))")
+    private String journalLevel;
+
+    @ExcelProperty("发表/获奖时间")
+    @ApiModelProperty("发表时间")
+    private String issueDate;
+
+    @ExcelProperty("备注")
+    @ApiModelProperty("备注")
+    private String remark;
+
+    @ExcelProperty("附件名称")
+    @ApiModelProperty("附件名称")
+    private String fileName;
+}

+ 28 - 0
src/main/java/com/xjrsoft/module/teacher/vo/TeacherAwardFileListVo.java

@@ -0,0 +1,28 @@
+package com.xjrsoft.module.teacher.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+* @title: 教师奖项分页列表出参
+* @Author dzx
+* @Date: 2024-06-04
+* @Version 1.0
+*/
+@Data
+public class TeacherAwardFileListVo {
+
+    @ApiModelProperty("用户id")
+    private Long applicantUserId;
+
+    @ApiModelProperty("文件名字")
+    private String fileName;
+
+    @ApiModelProperty("文件类型")
+    private String fileType;
+
+    @ApiModelProperty("文件路径")
+    private String fileUrl;
+
+}

+ 40 - 0
src/main/java/com/xjrsoft/module/teacher/vo/TeacherAwardStatisticsExcelVo.java

@@ -0,0 +1,40 @@
+package com.xjrsoft.module.teacher.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+* @title: 教师奖项分页列表出参
+* @Author dzx
+* @Date: 2024-06-04
+* @Version 1.0
+*/
+@Data
+public class TeacherAwardStatisticsExcelVo {
+
+    @ExcelProperty("用户名")
+    @ApiModelProperty("用户名")
+    private String userName;
+
+    @ExcelProperty("姓名")
+    @ApiModelProperty("姓名")
+    private String name;
+
+    @ExcelProperty("编号")
+    @ApiModelProperty("编号")
+    private String code;
+
+    @ExcelProperty("性别")
+    @ApiModelProperty("性别")
+    private String genderCn;
+
+    @ExcelProperty("手机号")
+    @ApiModelProperty("手机号")
+    private String mobile;
+
+    @ExcelProperty("分数")
+    @ApiModelProperty("分数")
+    private Double score;
+
+}

+ 13 - 0
src/main/java/com/xjrsoft/module/workflow/utils/DataHandleUtil.java

@@ -0,0 +1,13 @@
+package com.xjrsoft.module.workflow.utils;
+
+/**
+ * @author dzx
+ * @date 2024/11/13
+ * 流程撤回后处理相关数据
+ */
+public class DataHandleUtil {
+
+    public static void execute(){
+
+    }
+}

+ 4 - 1
src/main/resources/mapper/evaluate/EvaluateManageMapper.xml

@@ -172,7 +172,10 @@
                t1.score,
                t2.score AS actualScore,
                t2.opinion,
-               t1.input_not_null
+               t1.input_not_null,
+               t1.option_json,
+               t1.type,
+            t2.option_content
         FROM evaluate_submit_record t
                  LEFT JOIN evaluate_result t2 ON t2.submit_record_id = t.id
                  left join evaluate_manage_item t1 on t1.id = t2.evaluate_item_id

+ 4 - 2
src/main/resources/mapper/evaluate/EvaluateResultMapper.xml

@@ -51,7 +51,7 @@
         t.status,
         ifnull(t5.comprehensiveScore, 0) as comprehensiveScore
         from evaluate_executer t
-        left join evaluate_object t3 on t3.id = t.evaluate_object_id
+        inner join evaluate_object t3 on t3.id = t.evaluate_object_id
         left join xjr_user t1 on t1.id = t3.object_id
         left join base_class t2 on t2.id = t3.object_id
         left join xjr_user t4 on t4.id = t.user_id
@@ -60,6 +60,8 @@
         from evaluate_result t
         group by t.evaluated_object_id, t.user_id) t5 on t5.evaluated_object_id = t.evaluate_object_id and t5.user_id = t.id
         where t.evaluate_manage_id = #{dto.evaluateManageId}
+        AND t3.delete_mark = 0
+        AND t.delete_mark = 0
         <if test="dto.baseGradeId != null and dto.baseGradeId > 0">
             AND t3.base_grade_id = #{dto.baseGradeId}
         </if>
@@ -123,7 +125,7 @@
             t.problem,
             t.topic,
             t1.score as actualScore,
-            t1.opinion
+            t1.opinion,t1.option_content
         from evaluate_manage_item t
                  left join evaluate_result t1 on t1.evaluate_item_id = t.id
         where t.delete_mark = 0

+ 8 - 7
src/main/resources/mapper/personnel/BasePersonnelLabourCapitalMapper.xml

@@ -16,12 +16,13 @@
             base_personnel_labour_capital t
                 LEFT JOIN base_personnel_labour_capital_data t1 ON t1.labour_capital_id = t.id
                 LEFT JOIN xjr_user u ON t1.job_number = u.user_name
-                LEFT JOIN wf_teacher_depart w ON u.id = w.create_user_id
-                LEFT JOIN xjr_department d ON w.dept_name = d.id
+                LEFT JOIN xjr_user_dept_relation w ON u.id = w.user_id
+                LEFT JOIN xjr_department d ON w.dept_id = d.id
         WHERE t.delete_mark = 0
         <if test="dto.year != null and dto.month != null">
             and YEAR(t.date_of_issue) = #{dto.year}
             and MONTH(t.date_of_issue) = #{dto.month}
+            and t1.job_number = #{dto.jobNumber}
         </if>
     </select>
 
@@ -33,18 +34,18 @@
             d.name as dept,
             month(t1.date_of_issue) as month,
             t.amount_to as amount,
-            SUM(t.amount_to) OVER (PARTITION BY t.create_user_id, MONTH(t1.date_of_issue)) as monthAmount,
-            (SELECT SUM(amount_to) FROM base_personnel_labour_capital_data WHERE name = t.name) as yearAmount
+            SUM(replace(t.amount_to,',','')) OVER (PARTITION BY t.create_user_id, MONTH(t1.date_of_issue)) as monthAmount,
+            (SELECT SUM(REPLACE(amount_to,',','')) FROM base_personnel_labour_capital_data WHERE NAME = t.name AND job_number = t.job_number AND delete_mark = 0) AS yearAmount
         from base_personnel_labour_capital_data t
                  LEFT JOIN base_personnel_labour_capital t1 ON t.labour_capital_id = t1.id
                  LEFT JOIN xjr_user u ON t.job_number = u.user_name
-                 LEFT JOIN wf_teacher_depart w ON u.id = w.create_user_id
-                 LEFT JOIN xjr_department d ON w.dept_name = d.id
+                 LEFT JOIN xjr_user_dept_relation w ON u.id = w.user_id
+                 LEFT JOIN xjr_department d ON w.dept_id = d.id
                  LEFT JOIN base_personnel_labour_capital_title bp ON bp.labour_capital_id = t.id
         WHERE
             t.delete_mark = 0
         and YEAR(t1.date_of_issue) = #{dto.year}
-        and t1.name = #{dto.project}
+        and t.job_number = #{dto.jobNumber}
     </select>
 </mapper>
         <!--    SELECT-->

+ 3 - 1
src/main/resources/mapper/student/BaseStudentMapper.xml

@@ -93,7 +93,9 @@
                 and t4.id = #{dto.queryId}
             </if>
         </if>
-
+        <if test="dto.gradeId != null">
+            and t4.grade_id = #{dto.gradeId}
+        </if>
         <if test="dto.order == null">
             order by t1.id
         </if>

+ 38 - 0
src/main/resources/mapper/teacher/TeacherAwardItemMapper.xml

@@ -28,4 +28,42 @@
         </if>
 
     </select>
+
+    <select id="getStatisticsList" parameterType="com.xjrsoft.module.teacher.dto.TeacherAwardStatisticsPageDto" resultType="com.xjrsoft.module.teacher.vo.TeacherAwardStatisticsPageVo">
+        SELECT t1.id, t1.user_name, t1.name,t1.code,t3.name AS gender_cn,t1.mobile,
+        (SELECT SUM(a2.score) FROM teacher_award a1
+        INNER JOIN teacher_award_item a2 ON a1.teacher_award_item_id = a2.id
+        WHERE a1.status = 1 AND a1.delete_mark = 0 AND a2.delete_mark = 0
+        AND a1.applicant_user_id = t1.id
+        <if test="dto.awardDateStart != null and dto.awardDateEnd != null">
+            and a1.award_date between #{dto.awardDateStart} and #{dto.awardDateEnd}
+        </if>
+        ) AS score FROM xjr_user t1
+        INNER JOIN base_teacher t2 ON t1.id = t2.user_id
+        left join xjr_user_dept_relation t4 on t4.user_id = t1.id
+        LEFT JOIN xjr_dictionary_detail t3 ON t1.gender = t3.code
+        WHERE t1.delete_mark = 0 AND t2.delete_mark = 0
+        <if test="dto.userName != null and dto.userName != '' ">
+            and t1.user_name like concat('%', #{dto.userName}, '%')
+        </if>
+        <if test="dto.name != null and dto.name != '' ">
+            and t1.name like concat('%', #{dto.name}, '%')
+        </if>
+        <if test="dto.deptId != null">
+            and t4.dept_id = #{dto.deptId}
+        </if>
+    </select>
+
+    <select id="getAwardFileList" parameterType="com.xjrsoft.module.teacher.dto.TeacherAwardFileListDto" resultType="com.xjrsoft.module.teacher.vo.TeacherAwardFileListVo">
+        SELECT t1.applicant_user_id,t3.file_name,t3.file_type,t3.file_url FROM teacher_award t1
+        INNER JOIN xjr_workflow_form_relation t2 ON t1.id = t2.form_key_value
+        INNER JOIN xjr_file t3 ON t1.file_id = t3.folder_id
+        WHERE t1.delete_mark = 0 AND t2.current_state = 'COMPLETED'
+        <if test="dto.applicantUserIds != null and dto.applicantUserIds.size() > 0">
+            and t1.applicant_user_id in
+            <foreach item="userId" index="index" collection="dto.applicantUserIds" open="(" separator="," close=")">
+                #{userId}
+            </foreach>
+        </if>
+    </select>
 </mapper>

+ 1 - 1
src/test/java/com/xjrsoft/module/job/JianyuekbScheduleTaskTest2.java

@@ -137,7 +137,7 @@ class JianyuekbScheduleTaskTest2 {
         doExecute();
     }
     public void doExecute() {
-        String sql = "SELECT * FROM course_receive_msg WHERE delete_mark = 0 AND is_callback = -1";
+        String sql = "SELECT * FROM course_receive_msg WHERE delete_mark = 0 AND is_callback = null";
         List<Map<String, Object>> receiveMsgs = SqlRunnerAdapter.db().selectList(sql);
         if(receiveMsgs.isEmpty()){
             return;