Przeglądaj źródła

Merge branch 'master' of http://git.dayaedu.com/yonge/edu-saas

# Conflicts:
#	edu-user/edu-user-biz/src/main/resources/config/mybatis/TeacherMapper.xml
zouxuan 5 lat temu
rodzic
commit
7df726c1c9
23 zmienionych plików z 297 dodań i 35 usunięć
  1. 17 4
      edu-user/edu-student-server/src/main/java/com/keao/edu/controller/ExaminationBasicController.java
  2. 11 0
      edu-user/edu-user-biz/src/main/java/com/keao/edu/user/dao/ExamManualLedgerDao.java
  3. 10 0
      edu-user/edu-user-biz/src/main/java/com/keao/edu/user/dao/StudentExamResultDao.java
  4. 14 0
      edu-user/edu-user-biz/src/main/java/com/keao/edu/user/dto/ExamOrganizationRelationExtraDto.java
  5. 20 0
      edu-user/edu-user-biz/src/main/java/com/keao/edu/user/dto/ExamTeacherSalaryDto.java
  6. 11 0
      edu-user/edu-user-biz/src/main/java/com/keao/edu/user/dto/StudentBaseExamsDto.java
  7. 20 0
      edu-user/edu-user-biz/src/main/java/com/keao/edu/user/entity/Teacher.java
  8. 1 2
      edu-user/edu-user-biz/src/main/java/com/keao/edu/user/service/ExamRoomStudentRelationService.java
  9. 9 1
      edu-user/edu-user-biz/src/main/java/com/keao/edu/user/service/impl/ExamOrganizationRelationServiceImpl.java
  10. 0 6
      edu-user/edu-user-biz/src/main/java/com/keao/edu/user/service/impl/ExamRoomServiceImpl.java
  11. 9 5
      edu-user/edu-user-biz/src/main/java/com/keao/edu/user/service/impl/ExamRoomStudentRelationServiceImpl.java
  12. 8 1
      edu-user/edu-user-biz/src/main/java/com/keao/edu/user/service/impl/ExamTeacherSalaryServiceImpl.java
  13. 17 4
      edu-user/edu-user-biz/src/main/java/com/keao/edu/user/service/impl/ExaminationBasicServiceImpl.java
  14. 16 0
      edu-user/edu-user-biz/src/main/resources/config/mybatis/ExamManualLedgerMapper.xml
  15. 2 1
      edu-user/edu-user-biz/src/main/resources/config/mybatis/ExamRegistrationMapper.xml
  16. 4 2
      edu-user/edu-user-biz/src/main/resources/config/mybatis/ExamTeacherSalaryMapper.xml
  17. 4 0
      edu-user/edu-user-biz/src/main/resources/config/mybatis/StudentExamResultMapper.xml
  18. 10 2
      edu-user/edu-user-biz/src/main/resources/config/mybatis/TeacherMapper.xml
  19. 2 2
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamRoomStudentRelationController.java
  20. 7 1
      edu-util/pom.xml
  21. 3 4
      edu-util/src/main/java/com/keao/edu/util/collection/MapUtil.java
  22. 41 0
      edu-util/src/main/java/com/keao/edu/util/iniFile/IniFileEntity.java
  23. 61 0
      edu-util/src/main/java/com/keao/edu/util/iniFile/IniFileUtil.java

+ 17 - 4
edu-user/edu-student-server/src/main/java/com/keao/edu/controller/ExaminationBasicController.java

@@ -1,16 +1,21 @@
 package com.keao.edu.controller;
 
-import com.keao.edu.common.controller.BaseController;
-import com.keao.edu.common.entity.HttpResponseResult;
-import com.keao.edu.user.entity.ExaminationBasic;
-import com.keao.edu.user.service.ExaminationBasicService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import com.keao.edu.common.controller.BaseController;
+import com.keao.edu.common.entity.HttpResponseResult;
+import com.keao.edu.common.page.PageInfo;
+import com.keao.edu.common.page.QueryInfo;
+import com.keao.edu.user.entity.ExaminationBasic;
+import com.keao.edu.user.service.ExaminationBasicService;
+
 /**
  * @Author Joburgess
  * @Date 2020.06.18
@@ -28,4 +33,12 @@ public class ExaminationBasicController extends BaseController {
     public HttpResponseResult<ExaminationBasic> getInfo(Integer examId){
         return succeed(examinationBasicService.getInfo(examId));
     }
+
+    @ApiOperation("分页查询")
+    @GetMapping(value = "/queryPage")
+    public HttpResponseResult<PageInfo<ExaminationBasic>> queryPage(String search) {
+    	QueryInfo queryInfo = new QueryInfo();
+    	queryInfo.setSearch(search);
+        return succeed(examinationBasicService.queryPage(queryInfo));
+    }
 }

+ 11 - 0
edu-user/edu-user-biz/src/main/java/com/keao/edu/user/dao/ExamManualLedgerDao.java

@@ -40,4 +40,15 @@ public interface ExamManualLedgerDao extends BaseDAO<Long, ExamManualLedger> {
      */
     BigDecimal countOrganLedgerWithExam(@Param("examId") Long examId,
                                         @Param("organId") Integer organId);
+
+    /**
+     * @describe 统计合作单位在指定项目中的累计支出
+     * @author Joburgess
+     * @date 2020.08.07
+     * @param examId:
+     * @param organIds:
+     * @return java.util.List<java.util.Map<java.lang.Integer,java.math.BigDecimal>>
+     */
+    List<Map<Integer, BigDecimal>> countOrgansLedgerWithExam(@Param("examId") Long examId,
+                                                             @Param("organIds") List<Integer> organIds);
 }

+ 10 - 0
edu-user/edu-user-biz/src/main/java/com/keao/edu/user/dao/StudentExamResultDao.java

@@ -8,6 +8,7 @@ import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 public interface StudentExamResultDao extends BaseDAO<Long, StudentExamResult> {
 
@@ -123,4 +124,13 @@ public interface StudentExamResultDao extends BaseDAO<Long, StudentExamResult> {
      * @return int
      */
     int countExamResultRecordNum(@Param("examId") Long examId);
+
+    /**
+     * @describe 获取考级项目中完成考试的学员
+     * @author Joburgess
+     * @date 2020.08.07
+     * @param examId:
+     * @return java.util.Set<java.lang.Long>
+     */
+    Set<Long> getIsFinishedExamRegistIds(@Param("examId") Long examId);
 }

+ 14 - 0
edu-user/edu-user-biz/src/main/java/com/keao/edu/user/dto/ExamOrganizationRelationExtraDto.java

@@ -1,6 +1,9 @@
 package com.keao.edu.user.dto;
 
 import com.keao.edu.user.entity.ExamOrganizationRelation;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
 
 /**
  * @Author Joburgess
@@ -12,6 +15,9 @@ public class ExamOrganizationRelationExtraDto extends ExamOrganizationRelation {
 
     private int selfOrgan;
 
+    @ApiModelProperty(value = "实际付款金额")
+    private BigDecimal actualPaymentAmount;
+
     public int getSelfOrgan() {
         return selfOrgan;
     }
@@ -27,4 +33,12 @@ public class ExamOrganizationRelationExtraDto extends ExamOrganizationRelation {
     public void setOrganizationName(String organizationName) {
         this.organizationName = organizationName;
     }
+
+    public BigDecimal getActualPaymentAmount() {
+        return actualPaymentAmount;
+    }
+
+    public void setActualPaymentAmount(BigDecimal actualPaymentAmount) {
+        this.actualPaymentAmount = actualPaymentAmount;
+    }
 }

+ 20 - 0
edu-user/edu-user-biz/src/main/java/com/keao/edu/user/dto/ExamTeacherSalaryDto.java

@@ -9,6 +9,10 @@ import com.keao.edu.user.entity.ExamTeacherSalary;
 public class ExamTeacherSalaryDto extends ExamTeacherSalary {
 
     private ExaminationBasicDto examinationBasic;
+    
+    private String city;
+    
+    private String certificateNo;
 
     public ExaminationBasicDto getExaminationBasic() {
         return examinationBasic;
@@ -17,4 +21,20 @@ public class ExamTeacherSalaryDto extends ExamTeacherSalary {
     public void setExaminationBasic(ExaminationBasicDto examinationBasic) {
         this.examinationBasic = examinationBasic;
     }
+
+	public String getCity() {
+		return city;
+	}
+
+	public void setCity(String city) {
+		this.city = city;
+	}
+
+	public String getCertificateNo() {
+		return certificateNo;
+	}
+
+	public void setCertificateNo(String certificateNo) {
+		this.certificateNo = certificateNo;
+	}
 }

+ 11 - 0
edu-user/edu-user-biz/src/main/java/com/keao/edu/user/dto/StudentBaseExamsDto.java

@@ -9,6 +9,9 @@ public class StudentBaseExamsDto {
 
     @ApiModelProperty(value = "机构编号")
     private Integer tenantId;
+    
+    @ApiModelProperty(value = "考级项目编号")
+    private Integer examBasicId;
 
     public String getBaseExamName() {
         return baseExamName;
@@ -25,4 +28,12 @@ public class StudentBaseExamsDto {
     public void setTenantId(Integer tenantId) {
         this.tenantId = tenantId;
     }
+
+	public Integer getExamBasicId() {
+		return examBasicId;
+	}
+
+	public void setExamBasicId(Integer examBasicId) {
+		this.examBasicId = examBasicId;
+	}
 }

+ 20 - 0
edu-user/edu-user-biz/src/main/java/com/keao/edu/user/entity/Teacher.java

@@ -56,6 +56,10 @@ public class Teacher {
 	private String subjectName;
 
 	private Integer organId;
+	
+	private String city;
+	
+	private String certificateNo;
 
 	public BigDecimal getSubsidy() {
 		return subsidy;
@@ -185,6 +189,22 @@ public class Teacher {
 		return this.updateTime;
 	}
 			
+	public String getCity() {
+		return city;
+	}
+
+	public void setCity(String city) {
+		this.city = city;
+	}
+
+	public String getCertificateNo() {
+		return certificateNo;
+	}
+
+	public void setCertificateNo(String certificateNo) {
+		this.certificateNo = certificateNo;
+	}
+
 	@Override
 	public String toString() {
 		return ToStringBuilder.reflectionToString(this);

+ 1 - 2
edu-user/edu-user-biz/src/main/java/com/keao/edu/user/service/ExamRoomStudentRelationService.java

@@ -36,11 +36,10 @@ public interface ExamRoomStudentRelationService extends BaseService<Long, ExamRo
      * @describe 自动分配学员到考场
      * @author Joburgess
      * @date 2020.08.06
-     * @param examRoomId:
      * @param selfOrganId:
      * @return void
      */
-    void autoSplitStudentToRoom(Long examRoomId, Integer selfOrganId);
+    void autoSplitStudentToRoom(Long examId, Integer selfOrganId);
 
     /**
      * @describe 更换学员考场

+ 9 - 1
edu-user/edu-user-biz/src/main/java/com/keao/edu/user/service/impl/ExamOrganizationRelationServiceImpl.java

@@ -90,10 +90,13 @@ public class ExamOrganizationRelationServiceImpl extends BaseServiceImpl<Long, E
 			params.put("offset", pageInfo.getOffset());
 			dataList = examOrganizationRelationDao.queryExamOrgans(params);
 			List<Integer> organIds = dataList.stream().map(ExamOrganizationRelation::getOrganId).collect(Collectors.toList());
+			List<Map<Integer, BigDecimal>> examOrganAmountMaps = examManualLedgerDao.countOrgansLedgerWithExam(queryInfo.getExamId().longValue(), organIds);
+			Map<Integer, BigDecimal> examOrganAmountMap = MapUtil.convertMybatisMap(examOrganAmountMaps, Integer.class, BigDecimal.class);
 			for (ExamOrganizationRelationExtraDto examOrganizationRelation : dataList) {
 				if(examOrganizationRelation.getOrganId().equals(queryInfo.getOrganId())){
 					examOrganizationRelation.setSelfOrgan(1);
 				}
+				examOrganizationRelation.setActualPaymentAmount(examOrganAmountMap.get(examOrganizationRelation.getOrganId()));
 			}
 		}
 		pageInfo.setRows(dataList);
@@ -494,7 +497,12 @@ public class ExamOrganizationRelationServiceImpl extends BaseServiceImpl<Long, E
 
 		List<Integer> childOrganIds = organizationService.getChildOrganIds(organId, true);
 
-		List<ExamRegistrationPayment> examRegistrationPayments = examRegistrationPaymentDao.getWithExamOrgansAndDay(examId, childOrganIds, days);
+		List<ExamRegistrationPayment> examRegistrationPayments;
+		if(!CollectionUtils.isEmpty(childOrganIds)){
+			examRegistrationPayments = examRegistrationPaymentDao.getWithExamOrgansAndDay(examId, childOrganIds, days);
+		}else{
+			examRegistrationPayments = examRegistrationPaymentDao.getWithExamOrganAndDay(examId, organId, days);
+		}
 		List<ExamManualLedger> examOrganManualLedgers = examManualLedgerDao.getExamOrganManualLedgers(organId, examId, days);
 
 		Map<String, List<ExamRegistrationPayment>> dayPaymentMap = new HashMap<>();

+ 0 - 6
edu-user/edu-user-biz/src/main/java/com/keao/edu/user/service/impl/ExamRoomServiceImpl.java

@@ -263,8 +263,6 @@ public class ExamRoomServiceImpl extends BaseServiceImpl<Long, ExamRoom> impleme
 		}
 
 		examinationBasicDao.update(examinationBasic);
-
-		examTeacherSalaryService.teacherSalarySettlementWithExam(examinationBasic.getId());
 	}
 
 	@Override
@@ -368,8 +366,6 @@ public class ExamRoomServiceImpl extends BaseServiceImpl<Long, ExamRoom> impleme
 			List<Long> registIds = examRoomStudents.stream().map(ExamRoomStudentRelation::getExamRegistrationId).collect(Collectors.toList());
 			examCertificationDao.updateExamAddress(examLocation.getAddress(), registIds);
 		}
-
-		examTeacherSalaryService.teacherSalarySettlementWithExam(examRoom.getExaminationBasicId());
 		return examRoom;
 	}
 
@@ -418,8 +414,6 @@ public class ExamRoomServiceImpl extends BaseServiceImpl<Long, ExamRoom> impleme
 			examinationBasic.setActualExamEndTime(DateUtils.ceiling(examRoomExamTime.getExamEndTime(), Calendar.DAY_OF_MONTH));
 		}
 		examinationBasicDao.update(examinationBasic);
-
-		examTeacherSalaryService.teacherSalarySettlementWithExam(examRoom.getExaminationBasicId());
 	}
 
 	@Override

+ 9 - 5
edu-user/edu-user-biz/src/main/java/com/keao/edu/user/service/impl/ExamRoomStudentRelationServiceImpl.java

@@ -190,7 +190,6 @@ public class ExamRoomStudentRelationServiceImpl extends BaseServiceImpl<Long, Ex
 		}
 		if(!CollectionUtils.isEmpty(examRoomStudentRelations)){
 			examRoomStudentRelationDao.batchInsert(examRoomStudentRelations);
-			examTeacherSalaryService.teacherSalarySettlementWithExam(examRoom.getExaminationBasicId());
 			examRoom.setExamRoomStudentNum(examRoomStudentRelationDao.countStudentsWithRoom(examRoom.getId()));
 			examRoomDao.update(examRoom);
 		}
@@ -264,6 +263,9 @@ public class ExamRoomStudentRelationServiceImpl extends BaseServiceImpl<Long, Ex
 		Set<Integer> subjectIds = subjectRegistMap.keySet();
 		//未排考学员可排考考场
 		List<ExamRoom> examRooms = examRoomDao.getWithExamAndSubjects(examId, new ArrayList<>(subjectIds));
+		if(CollectionUtils.isEmpty(examRooms)){
+			throw new BizException("请先建立考场");
+		}
 		Set<Long> roomIds = examRooms.stream().map(ExamRoom::getId).collect(Collectors.toSet());
 		//未排考学员可排考考场学员
 		List<ExamRoomStudentRelation> examRoomStudents = examRoomStudentRelationDao.getWithExamRooms(new ArrayList<>(roomIds));
@@ -274,15 +276,17 @@ public class ExamRoomStudentRelationServiceImpl extends BaseServiceImpl<Long, Ex
 		//每个考场可分配学员数
 		Integer roomStudentNum=allStudentNum/roomNum;
 
+		Integer existRoomStudentAvgNum = examRoomStudents.size()/roomNum;
+
 		Set<Long> inRoomRegistIds=new HashSet<>();
 
 		List<ExamRoomStudentRelation> newRoomStudents = new ArrayList<>();
 		Map<Long, Integer> roomStudentNumMap = examRooms.stream().collect(Collectors.toMap(ExamRoom::getId, e->Objects.isNull(e.getExamRoomStudentNum())?0:e.getExamRoomStudentNum()));
 
-		if(roomStudentNum>0){
+		if(roomStudentNum>existRoomStudentAvgNum){
 			int startIndex=0;
 			for (ExamRoom examRoom : examRooms) {
-				List<ExamRegistration> examRegistrations = notInRoomStudents.subList(startIndex, roomStudentNum - examRoom.getExamRoomStudentNum());
+				List<ExamRegistration> examRegistrations = notInRoomStudents.subList(startIndex, startIndex + roomStudentNum - examRoom.getExamRoomStudentNum());
 				startIndex = startIndex+examRegistrations.size();
 				for (ExamRegistration examRegistration : examRegistrations) {
 					ExamRoomStudentRelation e=new ExamRoomStudentRelation();
@@ -298,7 +302,7 @@ public class ExamRoomStudentRelationServiceImpl extends BaseServiceImpl<Long, Ex
 			}
 		}
 
-		List<ExamRegistration> surplusRegist = notInRoomStudents.stream().filter(e -> !inRoomRegistIds.contains(e.getId())).collect(Collectors.toList());
+		List<ExamRegistration> surplusRegist = notInRoomStudents.stream().filter(e -> !inRoomRegistIds.contains(e.getId().longValue())).collect(Collectors.toList());
 
 		for (ExamRegistration examRegistration : surplusRegist) {
 			List<Long> sortedRoomIds=new LinkedList<>();
@@ -311,6 +315,7 @@ public class ExamRoomStudentRelationServiceImpl extends BaseServiceImpl<Long, Ex
 				e.setStudentId(examRegistration.getStudentId());
 				e.setTenantId(examinationBasic.getTenantId());
 				newRoomStudents.add(e);
+				break;
 			}
 		}
 
@@ -448,7 +453,6 @@ public class ExamRoomStudentRelationServiceImpl extends BaseServiceImpl<Long, Ex
 		studentExamResultDao.deleteWithRegists(registIds);
 		examRoom.setExamRoomStudentNum(examRoomStudentRelationDao.countStudentsWithRoom(examRoom.getId()));
 		examRoomDao.update(examRoom);
-		examTeacherSalaryService.teacherSalarySettlementWithExam(examRoom.getExaminationBasicId());
 	}
 
 	@Override

+ 8 - 1
edu-user/edu-user-biz/src/main/java/com/keao/edu/user/service/impl/ExamTeacherSalaryServiceImpl.java

@@ -38,6 +38,8 @@ public class ExamTeacherSalaryServiceImpl extends BaseServiceImpl<Long, ExamTeac
 	private TeacherDao teacherDao;
 	@Autowired
 	private ExaminationBasicDao examinationBasicDao;
+	@Autowired
+	private StudentExamResultDao studentExamResultDao;
 
 	@Override
 	public BaseDAO<Long, ExamTeacherSalary> getDAO() {
@@ -54,6 +56,9 @@ public class ExamTeacherSalaryServiceImpl extends BaseServiceImpl<Long, ExamTeac
 
 		Map<Integer, List<ExamRoom>> teacherExamRoomMap=new HashMap<>();
 		for (ExamRoom examRoom : examRooms) {
+			if(examRoom.getExamRoomStudentNum()<=0){
+				continue;
+			}
 			if(!teacherExamRoomMap.containsKey(examRoom.getMainTeacherUserId())){
 				teacherExamRoomMap.put(examRoom.getMainTeacherUserId(), new ArrayList<>());
 			}
@@ -71,6 +76,8 @@ public class ExamTeacherSalaryServiceImpl extends BaseServiceImpl<Long, ExamTeac
 
 		List<ExamRoomStudentRelation> examRoomStudentRelations = examRoomStudentRelationDao.getExamRoomStudentRelations(examId, null, null);
 
+		Set<Long> isFinishedExamRegistIds = studentExamResultDao.getIsFinishedExamRegistIds(examId);
+
 		List<ExamTeacherSalary> examTeacherSalaries = examTeacherSalaryDao.queryWithExam(examId);
 		for (ExamTeacherSalary examTeacherSalary : examTeacherSalaries) {
 			List<ExamRoom> teacherExamRooms = teacherExamRoomMap.get(examTeacherSalary.getTeacherId());
@@ -81,7 +88,7 @@ public class ExamTeacherSalaryServiceImpl extends BaseServiceImpl<Long, ExamTeac
 				continue;
 			}
 			Set<Long> examRoomIds = teacherExamRooms.stream().map(ExamRoom::getId).collect(Collectors.toSet());
-			long studentNum = examRoomStudentRelations.stream().filter(e -> examRoomIds.contains(e.getExamRoomId())).count();
+			long studentNum = examRoomStudentRelations.stream().filter(e -> examRoomIds.contains(e.getExamRoomId())&&isFinishedExamRegistIds.contains(e.getExamRegistrationId())).count();
 			examTeacherSalary.setTotalInvigilationNum(examRoomIds.size());
 			examTeacherSalary.setTotalInvigilationStudentNum((int) studentNum);
 			if(TeacherSettlementTypeEnum.SINGLE.equals(examTeacherSalary.getSettlementType())){

+ 17 - 4
edu-user/edu-user-biz/src/main/java/com/keao/edu/user/service/impl/ExaminationBasicServiceImpl.java

@@ -16,10 +16,7 @@ import com.keao.edu.user.dto.ExaminationBasicDto;
 import com.keao.edu.user.entity.*;
 import com.keao.edu.user.enums.ExamStatusEnum;
 import com.keao.edu.user.page.ExaminationQueryInfo;
-import com.keao.edu.user.service.ExamOrganizationRelationService;
-import com.keao.edu.user.service.ExaminationBasicService;
-import com.keao.edu.user.service.OrganizationService;
-import com.keao.edu.user.service.StudentExamResultService;
+import com.keao.edu.user.service.*;
 import com.keao.edu.util.collection.MapUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.time.DateUtils;
@@ -65,6 +62,8 @@ public class ExaminationBasicServiceImpl extends BaseServiceImpl<Long, Examinati
     private ExamRoomDao examRoomDao;
     @Autowired
     private TenantInfoDao tenantInfoDao;
+    @Autowired
+    private ExamTeacherSalaryService examTeacherSalaryService;
 
     @Override
     public BaseDAO<Long, ExaminationBasic> getDAO() {
@@ -232,6 +231,7 @@ public class ExaminationBasicServiceImpl extends BaseServiceImpl<Long, Examinati
             }
             examLifecycleLogDao.insert(new ExamLifecycleLog(existsExam.getId().intValue(), "确认考试结果", operatorId));
             studentExamResultService.examResultConfirmPush(examId);
+            examTeacherSalaryService.teacherSalarySettlementWithExam(examId);
         }else if(ExamStatusEnum.CLOSE.equals(statusEnum)){
             examLifecycleLogDao.insert(new ExamLifecycleLog(existsExam.getId().intValue(), "关闭考级项目", operatorId));
             examOrganizationRelationService.examStatusChangePush(examId, statusEnum);
@@ -382,6 +382,19 @@ public class ExaminationBasicServiceImpl extends BaseServiceImpl<Long, Examinati
         examinationBasic.setActualExamStartTime(existsExam.getActualExamStartTime());
         examinationBasic.setActualExamEndTime(existsExam.getActualExamEndTime());
 
+        if(Objects.isNull(examinationBasic.getPosterBackgroundImg())){
+            examinationBasic.setPosterBackgroundImg(existsExam.getPosterBackgroundImg());
+        }
+        if(Objects.isNull(examinationBasic.getCustomPoster())){
+            examinationBasic.setCustomPoster(existsExam.getCustomPoster());
+        }
+        if(Objects.isNull(examinationBasic.getActualExamStartTime())){
+            examinationBasic.setActualExamStartTime(existsExam.getActualExamStartTime());
+        }
+        if(Objects.isNull(examinationBasic.getActualExamEndTime())){
+            examinationBasic.setActualExamEndTime(existsExam.getActualExamEndTime());
+        }
+
         examinationBasicDao.update(examinationBasic);
         if(examRegistIsChange){
             examOrganizationRelationService.examDateChangePush(examinationBasic.getId());

+ 16 - 0
edu-user/edu-user-biz/src/main/resources/config/mybatis/ExamManualLedgerMapper.xml

@@ -170,4 +170,20 @@
 			AND organ_id_ = #{organId}
 			AND trans_direction_ = 'EXPENDITURE'
 	</select>
+
+    <select id="countOrgansLedgerWithExam" resultType="java.util.Map">
+		SELECT
+			target_organ_id_ AS 'key',
+			SUM( amount_ ) AS 'value'
+		FROM
+			exam_manual_ledger
+		WHERE
+			examination_basic_id_ = #{examId}
+			AND target_organ_id_ IN
+			<foreach collection="organIds" item="organId" separator="," open="(" close=")">
+				#{organId}
+			</foreach>
+		GROUP BY
+			target_organ_id_;
+    </select>
 </mapper>

+ 2 - 1
edu-user/edu-user-biz/src/main/resources/config/mybatis/ExamRegistrationMapper.xml

@@ -598,9 +598,10 @@
 	<resultMap id="StudentBaseExamsDtoMap" type="com.keao.edu.user.dto.StudentBaseExamsDto">
 		<result property="baseExamName" column="examBaseName"/>
 		<result property="tenantId" column="tenant_id_"/>
+		<result property="examBasicId" column="examination_basic_id_"/>
 	</resultMap>
 	<select id="queryStudentBaseExams" resultMap="StudentBaseExamsDtoMap">
-		SELECT eb.name_ examBaseName,eb.tenant_id_ FROM examination_basic eb
+		SELECT eb.name_ examBaseName,eb.tenant_id_,er.examination_basic_id_ FROM examination_basic eb
 		LEFT JOIN exam_registration er ON er.examination_basic_id_ = eb.id_
 		<include refid="queryStudentBaseExamsSql"/>
 		ORDER BY er.update_time_ DESC

+ 4 - 2
edu-user/edu-user-biz/src/main/resources/config/mybatis/ExamTeacherSalaryMapper.xml

@@ -23,7 +23,8 @@
  	</resultMap>
 
 	<resultMap id="ExamTeacherSalaryDto" type="com.keao.edu.user.dto.ExamTeacherSalaryDto" extends="ExamTeacherSalary">
-
+		<result column="city_" property="city" />
+		<result column="certificate_no_" property="certificateNo" />
 	</resultMap>
 	
 	<!-- 根据主键查询一条记录 -->
@@ -169,9 +170,10 @@
 	</sql>
 
 	<select id="queryExamTeacherSalary" resultMap="ExamTeacherSalaryDto" parameterType="map">
-		SELECT ets.*,su.real_name_ teacher_real_name_,su.phone_ teacher_phone_
+		SELECT ets.*,su.real_name_ teacher_real_name_,su.phone_ teacher_phone_,t.city_,t.certificate_no_
 		FROM exam_teacher_salary ets
 		LEFT JOIN sys_user su ON ets.teacher_id_=su.id_
+		left join teacher t on t.user_id_ = ets.teacher_id_
 		<include refid="queryExamTeacherSalaryCondition"/>
 		ORDER BY id_ <include refid="global.limit"/>
 	</select>

+ 4 - 0
edu-user/edu-user-biz/src/main/resources/config/mybatis/StudentExamResultMapper.xml

@@ -302,4 +302,8 @@
 		SELECT COUNT(exam_registration_id_) FROM student_exam_result
 		WHERE examination_basic_id_=#{examId}
 	</select>
+
+    <select id="getIsFinishedExamRegistIds" resultType="Long">
+		SELECT exam_registration_id_ FROM student_exam_result WHERE examination_basic_id_=#{examId} AND is_finished_exam_=5;
+    </select>
 </mapper>

+ 10 - 2
edu-user/edu-user-biz/src/main/resources/config/mybatis/TeacherMapper.xml

@@ -20,6 +20,8 @@
 		<result column="update_time_" property="updateTime" />
 		<result column="tenant_id_" property="tenantId" />
 		<result column="organ_id_" property="organId" />
+		<result column="city_" property="city" />
+		<result column="certificate_no_" property="certificateNo" />
 		<result column="subsidy_" property="subsidy" />
 		<association property="sysUser" columnPrefix="sys_user_" resultMap="com.keao.edu.user.dao.SysUserDao.SysUser"/>
 	</resultMap>
@@ -77,6 +79,12 @@
 			<if test="totalSettlementCost != null">
 				total_settlement_fee_ = #{totalSettlementCost},
 			</if>
+			<if test="city != null">
+				city_ = #{city},
+			</if>
+			<if test="certificateNo != null">
+				certificate_no_ = #{certificateNo},
+			</if>
 			update_time_ = NOW()
 		</set>
 		WHERE user_id_ = #{userId}
@@ -108,8 +116,8 @@
 	
 	<!-- 向数据库增加一条记录 -->
 	<insert id="insert" parameterType="com.keao.edu.user.entity.Teacher" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-		INSERT INTO teacher (user_id_,title_,subject_id_list_,salary_settlement_type_,salary_,create_time_,update_time_,tenant_id_,organ_id_,subsidy_)
-		VALUES(#{userId},#{title},#{subjectIdList},#{salarySettlementType,typeHandler=com.keao.edu.common.dal.CustomEnumTypeHandler},#{salary},NOW(),NOW(),#{tenantId},#{organId},#{subsidy})
+		INSERT INTO teacher (user_id_,title_,subject_id_list_,salary_settlement_type_,salary_,create_time_,update_time_,tenant_id_,organ_id_,city_,certificate_no_,subsidy_)
+		VALUES(#{userId},#{title},#{subjectIdList},#{salarySettlementType,typeHandler=com.keao.edu.common.dal.CustomEnumTypeHandler},#{salary},NOW(),NOW(),#{tenantId},#{organId},#{city},#{certificateNo},#{subsidy})
 	</insert>
 
 	<update id="delete">

+ 2 - 2
edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamRoomStudentRelationController.java

@@ -131,7 +131,7 @@ public class ExamRoomStudentRelationController extends BaseController {
 
     @ApiOperation("自动分配学员到考场")
     @PostMapping(value = "/autoSplitStudentToRoom")
-    public HttpResponseResult autoSplitStudentToRoom(Long examRoomId){
+    public HttpResponseResult autoSplitStudentToRoom(Long examId){
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         Integer organId=null;
         if(!sysUser.getIsSuperAdmin()){
@@ -141,7 +141,7 @@ public class ExamRoomStudentRelationController extends BaseController {
             }
             organId=employee.getOrganId();
         }
-        examRoomStudentRelationService.autoSplitStudentToRoom(examRoomId, organId);
+        examRoomStudentRelationService.autoSplitStudentToRoom(examId, organId);
         return succeed();
     }
 

+ 7 - 1
edu-util/pom.xml

@@ -94,11 +94,17 @@
 			<groupId>javax.servlet</groupId>
 			<artifactId>javax.servlet-api</artifactId>
 		</dependency>
-		
+
 		<dependency>
 			<groupId>net.coobird</groupId>
 			<artifactId>thumbnailator</artifactId>
 			<version>0.4.11</version>
 		</dependency>
+
+		<dependency>
+			<groupId>org.ini4j</groupId>
+			<artifactId>ini4j</artifactId>
+			<version>0.5.4</version>
+		</dependency>
 	</dependencies>
 </project>

+ 3 - 4
edu-util/src/main/java/com/keao/edu/util/collection/MapUtil.java

@@ -9,10 +9,7 @@ import java.beans.PropertyDescriptor;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.math.BigDecimal;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 
 public class MapUtil {
 
@@ -144,6 +141,8 @@ public class MapUtil {
 		int size = 0;
 		if(maps != null){
 			size = maps.size();
+		}else{
+			return Collections.EMPTY_MAP;
 		}
 		Map result=new HashMap(size);
 		try {

+ 41 - 0
edu-util/src/main/java/com/keao/edu/util/iniFile/IniFileEntity.java

@@ -0,0 +1,41 @@
+package com.keao.edu.util.iniFile;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+public class IniFileEntity {
+
+	private String section;
+
+	private String key;
+
+	private String value;
+
+	public String getSection() {
+		return section;
+	}
+
+	public void setSection(String section) {
+		this.section = section;
+	}
+
+	public String getKey() {
+		return key;
+	}
+
+	public void setKey(String key) {
+		this.key = key;
+	}
+
+	public String getValue() {
+		return value;
+	}
+
+	public void setValue(String value) {
+		this.value = value;
+	}
+	
+	@Override
+	public String toString() {
+		return ToStringBuilder.reflectionToString(this);
+	}
+}

+ 61 - 0
edu-util/src/main/java/com/keao/edu/util/iniFile/IniFileUtil.java

@@ -0,0 +1,61 @@
+package com.keao.edu.util.iniFile;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.ini4j.Ini;
+import org.ini4j.InvalidFileFormatException;
+import org.ini4j.Profile.Section;
+
+import com.keao.edu.util.exception.UtilException;
+
+public class IniFileUtil {
+
+	/**
+	 * 读取Ini文件
+	 * @param iniFile 文件绝对路径(文件编码须UTF-8)
+	 * @return 返回所有section以及下面的key/value
+	 * @throws InvalidFileFormatException
+	 * @throws IOException
+	 */
+	public static Map<String, List<IniFileEntity>> readIniFile(File iniFile) throws InvalidFileFormatException, IOException {
+		if (!iniFile.exists()) {
+			throw new UtilException("文件[" + iniFile.getAbsolutePath() + "]不存在");
+		}
+		Ini ini = new Ini();
+		ini.load(iniFile);
+
+		Map<String, List<IniFileEntity>> result = new HashMap<String, List<IniFileEntity>>();
+		IniFileEntity entity = null;
+
+		Collection<Section> sections = ini.values();
+		for (Section section : sections) {
+			List<IniFileEntity> entryList = result.get(section.getName());
+			if (entryList == null) {
+				entryList = new ArrayList<IniFileEntity>();
+			}
+			for (Entry<String, String> entry : section.entrySet()) {
+				entity = new IniFileEntity();
+				entity.setSection(section.getName());
+				entity.setKey(entry.getKey());
+				entity.setValue(entry.getValue());
+
+				entryList.add(entity);
+			}
+			result.put(section.getName(), entryList);
+		}
+
+		return result;
+	}
+	
+	public static void main(String[] args) throws InvalidFileFormatException, IOException {
+		File file = new File("e:/test.ini");
+		System.out.println(IniFileUtil.readIniFile(file));
+	}
+}