wuheng 1 năm trước cách đây
mục cha
commit
215abc064e

+ 42 - 0
common/src/test/java/com/koobietech/eas/common/utils/PasswordManagerTest.java

@@ -1,11 +1,53 @@
 package com.koobietech.eas.common.utils;
 
 
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
 class PasswordManagerTest {
 
 
     public static void main(String[] args) {
 
+        /**
+         * 需求是 按照传入的数据为准, 但是数据库已存在的 不能清除, 只能修改.
+         * 以往是 清除数据库的数据, 全部插入新的数据, 这样会丢失之前的数据的配置.
+         *
+         * 取出数据库已存在的数据
+         * 用传入的数据做对比,  存在的 更新, 不存在的 删除!
+         * 之后 新数据 不存在的 插入
+         */
+
+        Integer[] arr1  = {1,2,3,4,5,6};  //数据库的数据
+        Integer[] arr2  = {1,3,5,7,9};    //更新后的数据  135更新  79新增 246 删除
+
+        //insert 从set2中删除在set1中出现的元素
+        Set<Integer> set1 = new HashSet<>(Arrays.asList(arr1));
+        Set<Integer> set2 = new HashSet<>(Arrays.asList(arr2));
+        set2.removeAll(set1);
+        Integer[] studentAdd = set2.toArray(new Integer[0]);
+        for (Integer i : studentAdd) {
+            System.out.println(i);
+        }
+        System.out.println( "-------------------" );
+        //delete 从set1中删除在set2中出现的元素
+        Set<Integer> set11 = new HashSet<>(Arrays.asList(arr1));
+        Set<Integer> set22 = new HashSet<>(Arrays.asList(arr2));
+        set11.removeAll(set22);
+        Integer[] studentDel = set11.toArray(new Integer[0]);
+        for (Integer i : studentDel) {
+            System.out.println(i);
+        }
+        //update
+        System.out.println( "-------------------" );
+        Set<Integer> set111 = new HashSet<>(Arrays.asList(arr1));
+        Set<Integer> set222 = new HashSet<>(Arrays.asList(arr2));
+        set111.retainAll(set222);
+        Integer[] studentUpdate = set111.toArray(new Integer[0]);
+        for (Integer i : studentUpdate) {
+            System.out.println(i);
+        }
 
 
     }

+ 3 - 0
controller/src/main/java/com/koobietech/eas/controller/EasArcTlsAttendanceController.java

@@ -12,6 +12,9 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 
+/**
+ * @author lc
+ */
 @Tag(name = "签到模块")
 @RestController
 @RequestMapping("/attendance")

+ 5 - 1
controller/src/main/java/com/koobietech/eas/controller/EasSysStuProfileController.java

@@ -4,11 +4,13 @@ package com.koobietech.eas.controller;
 import com.koobietech.eas.common.result.JsonPageResult;
 import com.koobietech.eas.common.result.JsonResult;
 import com.koobietech.eas.common.result.PageDataResult;
+import com.koobietech.eas.dao.dto.EasArcTlsStudentsDto;
 import com.koobietech.eas.mbg.model.EasArcTlsStudents;
 import com.koobietech.eas.mbg.model.EasSysStudent;
 import com.koobietech.eas.service.EasStuProfileService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.BeanUtils;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -30,7 +32,9 @@ public class EasSysStuProfileController {
 
     @PostMapping("/add")
     @Operation(summary = "添加学员", description = "添加学员")
-    public JsonResult add(@RequestBody EasArcTlsStudents easArcTlsStudents) {
+    public JsonResult add(@RequestBody EasArcTlsStudentsDto easArcTlsStudentsDto) {
+        EasArcTlsStudents easArcTlsStudents = new EasArcTlsStudents();
+        BeanUtils.copyProperties(easArcTlsStudentsDto, easArcTlsStudents);
         return JsonResult.bool(easStuProfileService.add(easArcTlsStudents));
     }
 

+ 3 - 3
dao/src/main/java/com/koobietech/eas/dao/dto/EasArcTlsStudentsDto.java

@@ -32,7 +32,7 @@ public class EasArcTlsStudentsDto {
 
     @Excel(name = "出生日期")
     @Schema(description = "学生出生日期")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     private Date birthdate;
 
     @Excel(name = "学生居住地")
@@ -49,12 +49,12 @@ public class EasArcTlsStudentsDto {
 
     @Excel(name = "学生入学进入培训班日期", importFormat = "yyyy-MM-dd" )
     @Schema(description = "学生入学进入培训班日期")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     private Date enrollmentDate;
 
     @Schema(description = "学生在培训班毕业日期")
     @Excel(name = "学生在培训班毕业日期", importFormat = "yyyy-MM-dd" )
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     private Date graduationDate;
 
     @Excel(name = "学生培训时年级")

+ 10 - 10
dao/src/main/java/com/koobietech/eas/dao/pojo/EasArcTlsAttendancePojo.java

@@ -12,30 +12,30 @@ import java.util.Date;
 @Data
 public class EasArcTlsAttendancePojo implements Serializable {
 
-    @Excel(name = "签到日期")
+    @Excel(name = "签到日期", format = "yyyy-MM-dd HH:mm:ss", width = 20)
     private Date checkinDate;
 
-    @Excel(name = "学员档案号")
+    @Excel(name = "学员档案号", width = 30)
     private String studentNumber;
 
     //a表示正常出勤, b表示迟到、早退, c表示旷课, d表示请假, e表示无效
-    @Excel(name = "上午出勤状态")
+    @Excel(name = "上午出勤状态", replace = { "正常_a", "迟到、早退_b", "旷课_c", "请假_d", "无效_e"}, width = 15 )
     private String morning;
 
     //a表示正常出勤,   b表示迟到、早退, c 表示旷课, d 表示请假, e表示无效"
-    @Excel(name = "下午出勤状态")
+    @Excel(name = "下午出勤状态", replace = { "正常_a", "迟到、早退_b", "旷课_c", "请假_d", "无效_e" }, width = 15 )
     private String afternoon;
 
-    @Excel(name = "学员姓名")
+    @Excel(name = "学员姓名", width = 20)
     private String studentName;
 
-    @Excel(name = "类别" )
-    private Integer category;
+    @Excel(name = "类别", width = 20 )
+    private String category;
 
-    @Excel(name = "科目" )
-    private Integer subject;
+    @Excel(name = "科目", width = 20 )
+    private String subject;
 
-    @Excel(name = "创建时间" )
+    @Excel(name = "创建时间", format = "yyyy-MM-dd HH:mm:ss", width = 20 )
     private Date createTime;
 
     private static final long serialVersionUID = 1L;

+ 65 - 12
service/src/main/java/com/koobietech/eas/service/impl/EasArcTlsAttendanceServiceImpl.java

@@ -7,9 +7,8 @@ import com.koobietech.eas.common.constant.FileType;
 import com.koobietech.eas.common.exception.EasException;
 import com.koobietech.eas.common.result.PageDataResult;
 import com.koobietech.eas.common.utils.SecurityManager;
-import com.koobietech.eas.dao.pojo.EasArcTlsAttendancePojo;
-import com.koobietech.eas.dao.pojo.EasArcTlsScoresPojo;
 import com.koobietech.eas.dao.dto.ArchivesDto;
+import com.koobietech.eas.dao.pojo.EasArcTlsAttendancePojo;
 import com.koobietech.eas.mbg.mapper.*;
 import com.koobietech.eas.mbg.model.*;
 import com.koobietech.eas.service.EasArcTlsAttendanceService;
@@ -48,12 +47,17 @@ public class EasArcTlsAttendanceServiceImpl implements EasArcTlsAttendanceServic
     @Resource
     EasArcArchivesMapper arcArchivesMapper;
 
+    @Resource
+    EasEduCategoryMapper  easEduCategoryMapper;
+
+    @Resource
+    EasEduSubjectsMapper easEduSubjectsMapper;
+
     @Override
     public PageDataResult query(EasArcTlsAttendance attendance) {
         EasArcTlsAttendanceExample easArcTlsAttendanceExample = new EasArcTlsAttendanceExample();
         EasArcTlsAttendanceExample.Criteria criteria = easArcTlsAttendanceExample.createCriteria();
         if (Objects.nonNull(attendance)) {
-
             if (Objects.nonNull(attendance.getId()) && attendance.getId() != 0) {
                 criteria.andIdEqualTo(attendance.getId());
             }
@@ -85,15 +89,14 @@ public class EasArcTlsAttendanceServiceImpl implements EasArcTlsAttendanceServic
                 criteria.andModifyTimeEqualTo(attendance.getModifyTime());
             }
         }
-
         List<EasArcTlsAttendance> easArcTlsAttendances =
                 easArcTlsAttendanceMapper.selectByExample(easArcTlsAttendanceExample);
         long l = easArcTlsAttendanceMapper.countByExample(easArcTlsAttendanceExample);
+
         PageDataResult ret = new PageDataResult();
         ret.setData(easArcTlsAttendances);
         ret.setTotal(l);
         return ret;
-
     }
 
     @Override
@@ -101,6 +104,7 @@ public class EasArcTlsAttendanceServiceImpl implements EasArcTlsAttendanceServic
         //签到日期前端会自己传 所以就不需要再写一次了
         attendance.setCreateTime(new Date());
         attendance.setModifyTime(new Date());
+        attendance.setCreateUid( SecurityManager.getLoginUid().intValue() );
         int insert = easArcTlsAttendanceMapper.insert(attendance);
         saveStudentAttendanceArchive(attendance);
         return insert == 1;
@@ -124,8 +128,36 @@ public class EasArcTlsAttendanceServiceImpl implements EasArcTlsAttendanceServic
 
     @Override
     public Boolean update(EasArcTlsAttendance attendance) {
-        attendance.setModifyTime(new Date());
-        int i = easArcTlsAttendanceMapper.updateByPrimaryKey(attendance);
+        int i;
+        //有则更新 没有则添加
+        Calendar calender = Calendar.getInstance();
+        calender.setTime(new Date());
+        attendance.setMonth( calender.get(Calendar.MONTH) + 1);
+        EasArcTlsAttendanceExample easArcTlsAttendanceExample = new EasArcTlsAttendanceExample();
+        EasArcTlsAttendanceExample.Criteria criteria = easArcTlsAttendanceExample.createCriteria();
+        criteria.andStudentNumberEqualTo(attendance.getStudentNumber());
+        criteria.andScheduleIdEqualTo(attendance.getScheduleId());
+        long l = easArcTlsAttendanceMapper.countByExample(easArcTlsAttendanceExample);
+        if ( Objects.isNull(attendance.getModifyTime()) ) {
+            attendance.setModifyTime(new Date());
+        }
+        if ( Objects.isNull(attendance.getCreateTime()) ) {
+            attendance.setCreateTime(new Date());
+        }
+        if ( Objects.isNull(attendance.getCreateUid()) ) {
+            attendance.setCreateUid(SecurityManager.getLoginUid().intValue());
+        }
+        if ( l > 0 ) {
+            //修改的清空下 不允许修改更多信息
+            EasArcTlsAttendance easArcTlsAttendance = new EasArcTlsAttendance();
+            easArcTlsAttendance.setModifyTime(new Date());
+            easArcTlsAttendance.setCreateTime(attendance.getCreateTime());
+            easArcTlsAttendance.setAfternoon(attendance.getAfternoon());
+            easArcTlsAttendance.setMorning(attendance.getMorning());
+            i = easArcTlsAttendanceMapper.updateByExampleSelective(easArcTlsAttendance, easArcTlsAttendanceExample);
+        } else {
+            i = easArcTlsAttendanceMapper.insert(attendance);
+        }
         saveStudentAttendanceArchive(attendance);
         return i == 1;
     }
@@ -147,6 +179,13 @@ public class EasArcTlsAttendanceServiceImpl implements EasArcTlsAttendanceServic
 
     @Override
     public List<EasArcTlsAttendance> getStudentList(Long scheduleId) {
+        HashMap<String, EasArcTlsAttendance> attendanceHistory = new HashMap<>();
+        EasArcTlsAttendanceExample easArcTlsAttendanceExample = new EasArcTlsAttendanceExample();
+        easArcTlsAttendanceExample.createCriteria().andScheduleIdEqualTo(scheduleId.intValue());
+        List<EasArcTlsAttendance> easArcTlsAttendances = easArcTlsAttendanceMapper.selectByExample(easArcTlsAttendanceExample);
+        for (EasArcTlsAttendance attendance:  easArcTlsAttendances) {
+            attendanceHistory.put(attendance.getStudentNumber(), attendance);
+        }
         // 根据课表ID查找EasEduSchedule表,获取班级ID
         EasEduSchedule easEduSchedule = easEduScheduleMapper.selectByPrimaryKey(scheduleId);
         Long classId = Optional.ofNullable(easEduSchedule)
@@ -167,13 +206,21 @@ public class EasArcTlsAttendanceServiceImpl implements EasArcTlsAttendanceServic
         EasSysStudentExample easSysStudentExample = new EasSysStudentExample();
         easSysStudentExample.createCriteria().andIdIn(studentIds);
         List<EasSysStudent> easSysStudents = easSysStudentMapper.selectByExample(easSysStudentExample);
-
         // 封装查询结果到PageData对象并返回
         return easSysStudents.stream()
                 .map(s -> {
                     EasArcTlsAttendance easArcTlsAttendance = new EasArcTlsAttendance();
                     easArcTlsAttendance.setStudentNumber(s.getStudentNumber());
                     easArcTlsAttendance.setStudentName(s.getStudentName());
+                    easArcTlsAttendance.setScheduleId( scheduleId.intValue() );
+                    easArcTlsAttendance.setCheckinDate( easEduSchedule.getStartTime() );
+                    if ( !Objects.isNull(attendanceHistory.get(s.getStudentNumber())) ) {
+                        easArcTlsAttendance.setAfternoon(attendanceHistory.get(s.getStudentNumber()).getAfternoon());
+                        easArcTlsAttendance.setMorning(attendanceHistory.get(s.getStudentNumber()).getMorning());
+                        easArcTlsAttendance.setCreateTime(attendanceHistory.get(s.getStudentNumber()).getCreateTime());
+                        easArcTlsAttendance.setModifyTime(attendanceHistory.get(s.getStudentNumber()).getModifyTime());
+                        easArcTlsAttendance.setCreateUid(attendanceHistory.get(s.getStudentNumber()).getCreateUid());
+                    }
                     return easArcTlsAttendance;
                 })
                 .collect(Collectors.toList());
@@ -202,17 +249,23 @@ public class EasArcTlsAttendanceServiceImpl implements EasArcTlsAttendanceServic
     }
 
     private ArchivesDto saveEasArcTlsAttendanceToExcel(List<EasArcTlsAttendance> easArcTlsAttendances, String studentNumber) {
+
         List<EasArcTlsAttendancePojo> arcTlsAttendanceList = new ArrayList<>();
         for (EasArcTlsAttendance tlsAttendance: easArcTlsAttendances) {
+            EasEduSchedule easEduSchedule = easEduScheduleMapper.selectByPrimaryKey(tlsAttendance.getScheduleId().longValue());
+            EasEduCategory easEduCategory = easEduCategoryMapper.selectByPrimaryKey(easEduSchedule.getCategoryId());
+            EasEduSubjects easEduSubjects = easEduSubjectsMapper.selectByPrimaryKey(easEduSchedule.getSubjectsId());
             EasArcTlsAttendancePojo easArcTlsAttendancePojo = new EasArcTlsAttendancePojo();
             BeanUtil.copyProperties(tlsAttendance, easArcTlsAttendancePojo);
+            easArcTlsAttendancePojo.setSubject(easEduSubjects.getName());
+            easArcTlsAttendancePojo.setCategory(easEduCategory.getName());
             arcTlsAttendanceList.add(easArcTlsAttendancePojo);
         }
-        ExportParams params   = new ExportParams("学员签到表", "签到");
+        ExportParams params = new ExportParams("学员签到表", "签到");
+        params.setHeaderHeight(30);
         Workbook workbook = ExcelExportUtil.exportExcel(params,
-                EasArcTlsScoresPojo.class, arcTlsAttendanceList);
-        ArchivesDto archivesDto = easArchivesFilesService.saveArchiveFile(studentNumber, workbook);
-        return archivesDto;
+                EasArcTlsAttendancePojo.class, arcTlsAttendanceList);
+        return easArchivesFilesService.saveArchiveFile(studentNumber, workbook);
     }
 
 }

+ 19 - 9
service/src/main/java/com/koobietech/eas/service/impl/EasEduClassServiceImpl.java

@@ -17,6 +17,7 @@ import org.springframework.util.StringUtils;
 
 import javax.annotation.Resource;
 import java.util.*;
+import java.util.stream.Stream;
 
 @Service
 public class EasEduClassServiceImpl implements EasEduClassService {
@@ -111,22 +112,32 @@ public class EasEduClassServiceImpl implements EasEduClassService {
         EasEduCltRelationExample.Criteria criteria = easEduCltRelationExample.createCriteria();
         criteria.andClassIdEqualTo(groupId.longValue());
         List<EasEduCltRelation> easEduCltRelations = easEduCltRelationMapper.selectByExample(easEduCltRelationExample);
-        ArrayList<Integer> arr1 = new ArrayList<>();
+        ArrayList<Integer> oldArray = new ArrayList<>();
         for (EasEduCltRelation existingStudent : easEduCltRelations) {
-            arr1.add(existingStudent.getStudentId());
+            oldArray.add(existingStudent.getStudentId());
         }
-
         //insert 从set2中删除在set1中出现的元素
-        Set<Integer> set1 = new HashSet<Integer>(arr1);
+        Set<Integer> set1 = new HashSet<>(oldArray);
         Set<Integer> set2 = new HashSet<>(Arrays.asList(studentIds));
         set2.removeAll(set1);
         Integer[] studentList = set2.toArray(new Integer[0]);
-        //delete 从set1中删除在set2中出现的元素
-        Set<Integer> set3 = new HashSet<Integer>(arr1);
+        //delete
+        Set<Integer> set3 = new HashSet<>(oldArray);
         Set<Integer> set4 = new HashSet<>(Arrays.asList(studentIds));
+        set3.removeAll(set4);
+        Integer[] studentDel = set3.toArray(new Integer[0]);
+        //update
+        Set<Integer> set6 = new HashSet<>(oldArray);
+        Set<Integer> set7 = new HashSet<>(Arrays.asList(studentIds));
         set1.removeAll(set2);
-        Integer[] studentDel = set1.toArray(new Integer[0]);
-
+        Integer[] studentUpdate = set1.toArray(new Integer[0]);
+        //更新 实际没啥用, 放这里看着好看
+        for (Integer i : studentUpdate) {
+            Stream<EasEduCltRelation> easEduCltRelationStream = easEduCltRelations.stream().filter(easEduCltRelation -> {
+                return easEduCltRelation.getStudentId().equals(i);
+            });
+            easEduCltRelationMapper.updateByPrimaryKeySelective(easEduCltRelationStream.findFirst().get());
+        }
         //删除
         if (studentDel.length > 0) {
             EasEduCltRelationExample delExample = new EasEduCltRelationExample();
@@ -135,7 +146,6 @@ public class EasEduClassServiceImpl implements EasEduClassService {
             criteriaDel.andStudentIdIn(Arrays.asList(studentDel));
             easEduCltRelationMapper.deleteByExample(delExample);
         }
-
         //新增
         for (Integer studentId: studentList) {
             EasEduCltRelation easEduCltRelation = new EasEduCltRelation();