浏览代码

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

zouxuan 5 年之前
父节点
当前提交
0c3b404a35
共有 15 个文件被更改,包括 160 次插入32 次删除
  1. 5 0
      edu-user/edu-user-biz/src/main/java/com/keao/edu/user/dao/ExamRegistrationPaymentDao.java
  2. 9 0
      edu-user/edu-user-biz/src/main/java/com/keao/edu/user/dao/ExamRoomStudentRelationDao.java
  3. 10 0
      edu-user/edu-user-biz/src/main/java/com/keao/edu/user/dto/ExamOrganStatisticsDto.java
  4. 12 1
      edu-user/edu-user-biz/src/main/java/com/keao/edu/user/entity/ExamManualLedger.java
  5. 13 3
      edu-user/edu-user-biz/src/main/java/com/keao/edu/user/service/impl/ExamOrganizationRelationServiceImpl.java
  6. 51 10
      edu-user/edu-user-biz/src/main/java/com/keao/edu/user/service/impl/ExamRoomStudentRelationServiceImpl.java
  7. 1 1
      edu-user/edu-user-biz/src/main/java/com/keao/edu/user/service/impl/ExaminationBasicServiceImpl.java
  8. 1 1
      edu-user/edu-user-biz/src/main/java/com/keao/edu/user/service/impl/StudentExamResultServiceImpl.java
  9. 6 2
      edu-user/edu-user-biz/src/main/resources/config/mybatis/ExamManualLedgerMapper.xml
  10. 18 0
      edu-user/edu-user-biz/src/main/resources/config/mybatis/ExamRegistrationPaymentMapper.xml
  11. 4 12
      edu-user/edu-user-biz/src/main/resources/config/mybatis/ExamRoomMapper.xml
  12. 12 0
      edu-user/edu-user-biz/src/main/resources/config/mybatis/ExamRoomStudentRelationMapper.xml
  13. 1 1
      edu-user/edu-user-biz/src/main/resources/config/mybatis/ExaminationBasicMapper.xml
  14. 1 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamOrganizationRelationController.java
  15. 16 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamRoomStudentRelationController.java

+ 5 - 0
edu-user/edu-user-biz/src/main/java/com/keao/edu/user/dao/ExamRegistrationPaymentDao.java

@@ -75,4 +75,9 @@ public interface ExamRegistrationPaymentDao extends BaseDAO<Long, ExamRegistrati
     List<ExamRegistrationPayment> getWithExamOrganAndDay(@Param("examId") Long examId,
                                                          @Param("organId") Integer organId,
                                                          @Param("days") List<String> days);
+
+
+    List<ExamRegistrationPayment> getWithExamOrgansAndDay(@Param("examId") Long examId,
+                                                         @Param("organIds") List<Integer> organIds,
+                                                         @Param("days") List<String> days);
 }

+ 9 - 0
edu-user/edu-user-biz/src/main/java/com/keao/edu/user/dao/ExamRoomStudentRelationDao.java

@@ -178,6 +178,15 @@ public interface ExamRoomStudentRelationDao extends BaseDAO<Long, ExamRoomStuden
     int countStudentsWithRoom(Long examRoomId);
 
     /**
+     * @describe 根据考场获取考场学员
+     * @author Joburgess
+     * @date 2020.08.06
+     * @param examRoomIds:
+     * @return java.util.List<com.keao.edu.user.api.entity.ExamRoomStudentRelation>
+     */
+    List<ExamRoomStudentRelation> getWithExamRooms(@Param("examRoomIds") List<Long> examRoomIds);
+
+    /**
      * @describe 根据考级项目及声部获取考场学员
      * @author Joburgess
      * @date 2020.08.06

+ 10 - 0
edu-user/edu-user-biz/src/main/java/com/keao/edu/user/dto/ExamOrganStatisticsDto.java

@@ -18,6 +18,8 @@ public class ExamOrganStatisticsDto extends ExamOrganizationRelation {
 
     private Map<String, BigDecimal> dayPaymentAmount;
 
+    private Map<String, BigDecimal> dayTotalPaymentAmount;
+
     public List<ExamLifecycleLogDto> getExamLifecycleLogs() {
         return examLifecycleLogs;
     }
@@ -41,4 +43,12 @@ public class ExamOrganStatisticsDto extends ExamOrganizationRelation {
     public void setDayPaymentAmount(Map<String, BigDecimal> dayPaymentAmount) {
         this.dayPaymentAmount = dayPaymentAmount;
     }
+
+    public Map<String, BigDecimal> getDayTotalPaymentAmount() {
+        return dayTotalPaymentAmount;
+    }
+
+    public void setDayTotalPaymentAmount(Map<String, BigDecimal> dayTotalPaymentAmount) {
+        this.dayTotalPaymentAmount = dayTotalPaymentAmount;
+    }
 }

+ 12 - 1
edu-user/edu-user-biz/src/main/java/com/keao/edu/user/entity/ExamManualLedger.java

@@ -32,6 +32,9 @@ public class ExamManualLedger {
 	
 	@ApiModelProperty(value = "交易时间")
 	private java.util.Date transTime;
+
+	@ApiModelProperty(value = "交易流水号")
+	private String transNo;
 	
 	@ApiModelProperty(value = "备注")
 	private String memo;
@@ -117,7 +120,15 @@ public class ExamManualLedger {
 	public java.util.Date getTransTime(){
 		return this.transTime;
 	}
-			
+
+	public String getTransNo() {
+		return transNo;
+	}
+
+	public void setTransNo(String transNo) {
+		this.transNo = transNo;
+	}
+
 	public void setMemo(String memo){
 		this.memo = memo;
 	}

+ 13 - 3
edu-user/edu-user-biz/src/main/java/com/keao/edu/user/service/impl/ExamOrganizationRelationServiceImpl.java

@@ -229,7 +229,10 @@ public class ExamOrganizationRelationServiceImpl extends BaseServiceImpl<Long, E
 			og.setSelfPaymentAmount(BigDecimal.ZERO);
 		}
 		examOrganizationRelationDao.batchInsert(organizationRelations);
-		sendUrl(examOrganizationRelation.getId().intValue(), selfOrganId);
+		int sendUrlOrgans = examOrganizationRelationDao.countExamIsSendUrlOrgans(examinationBasic.getId());
+		if(sendUrlOrgans>1){
+			sendUrl(examinationBasic.getId().intValue(), selfOrganId);
+		}
 	}
 
 	@Override
@@ -475,6 +478,7 @@ public class ExamOrganizationRelationServiceImpl extends BaseServiceImpl<Long, E
 
 		Map<String, BigDecimal> dayTransAmount=new LinkedHashMap<>();
 		Map<String, BigDecimal> dayPaymentAmount=new LinkedHashMap<>();
+		Map<String, BigDecimal> dayTotalPaymentAmount=new LinkedHashMap<>();
 
 		LocalDate today = LocalDate.now();
 		List<String> days=new ArrayList<>();
@@ -485,9 +489,12 @@ public class ExamOrganizationRelationServiceImpl extends BaseServiceImpl<Long, E
 			days.add(today.plusDays(i).toString());
 			dayTransAmount.put(today.plusDays(i).toString(), BigDecimal.ZERO);
 			dayPaymentAmount.put(today.plusDays(i).toString(), BigDecimal.ZERO);
+			dayTotalPaymentAmount.put(today.plusDays(i).toString(), BigDecimal.ZERO);
 		}
 
-		List<ExamRegistrationPayment> examRegistrationPayments = examRegistrationPaymentDao.getWithExamOrganAndDay(examId, organId, days);
+		List<Integer> childOrganIds = organizationService.getChildOrganIds(organId, true);
+
+		List<ExamRegistrationPayment> examRegistrationPayments = examRegistrationPaymentDao.getWithExamOrgansAndDay(examId, childOrganIds, days);
 		List<ExamManualLedger> examOrganManualLedgers = examManualLedgerDao.getExamOrganManualLedgers(organId, examId, days);
 
 		Map<String, List<ExamRegistrationPayment>> dayPaymentMap = new HashMap<>();
@@ -513,12 +520,15 @@ public class ExamOrganizationRelationServiceImpl extends BaseServiceImpl<Long, E
 			if(CollectionUtils.isEmpty(dayPayments)){
 				continue;
 			}
-			BigDecimal amount = dayPayments.stream().map(ExamRegistrationPayment::getTransAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+			BigDecimal totalAmount = dayPayments.stream().map(ExamRegistrationPayment::getTransAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+			BigDecimal amount = dayPayments.stream().filter(e->organId.equals(e.getOrganId())).map(ExamRegistrationPayment::getTransAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
 			dayPaymentAmount.put(day, amount);
+			dayTotalPaymentAmount.put(day, totalAmount);
 		}
 
 		examOrganStatistics.setDayTransAmount(dayTransAmount);
 		examOrganStatistics.setDayPaymentAmount(dayPaymentAmount);
+		examOrganStatistics.setDayTotalPaymentAmount(dayTotalPaymentAmount);
 		return examOrganStatistics;
 	}
 

+ 51 - 10
edu-user/edu-user-biz/src/main/java/com/keao/edu/user/service/impl/ExamRoomStudentRelationServiceImpl.java

@@ -135,7 +135,6 @@ public class ExamRoomStudentRelationServiceImpl extends BaseServiceImpl<Long, Ex
 
 		List<ExamRoomStudentRelation> studentsWithExamRoom = examRoomStudentRelationDao.findStudentsWithExamRoom(examRoomId);
 		Set<Long> existRegistIds = studentsWithExamRoom.stream().map(ExamRoomStudentRelation::getExamRegistrationId).collect(Collectors.toSet());
-		Set<Integer> existStudentIds = studentsWithExamRoom.stream().map(ExamRoomStudentRelation::getStudentId).collect(Collectors.toSet());
 
 		String[] registIds = registIdsStr.split(",");
 
@@ -143,9 +142,6 @@ public class ExamRoomStudentRelationServiceImpl extends BaseServiceImpl<Long, Ex
 		Map<Integer, ExamRegistration> studentRegistMap = examRegistrations.stream().collect(Collectors.toMap(ExamRegistration::getId, e -> e));
 
 		Set<Integer> studentIds = examRegistrations.stream().map(ExamRegistration::getStudentId).collect(Collectors.toSet());
-		if(studentIds.size()!=registIds.length){
-			throw new BizException("学员重复");
-		}
 
 		List<ExamRoomStudentRelation> examRoomStudentRelations=new ArrayList<>();
 		List<ExamCertification> examCertifications=new ArrayList<>();
@@ -158,9 +154,6 @@ public class ExamRoomStudentRelationServiceImpl extends BaseServiceImpl<Long, Ex
 			if(Objects.isNull(examRegistration)){
 				throw new BizException("学员信息错误");
 			}
-			if(existStudentIds.contains(examRegistration.getStudentId())){
-				throw new BizException("学员重复");
-			}
 
 			ExamRoomStudentRelation e=new ExamRoomStudentRelation();
 			e.setExamRegistrationId(Long.valueOf(registId));
@@ -266,16 +259,64 @@ public class ExamRoomStudentRelationServiceImpl extends BaseServiceImpl<Long, Ex
 		}
 		//未排考学员
 		List<ExamRegistration> notInRoomStudents = examRegistrationDao.getNotInRoomStudents(examId);
+		if(CollectionUtils.isEmpty(notInRoomStudents)){
+			throw new BizException("所有学员都已安排考场");
+		}
 		Map<Integer, List<ExamRegistration>> subjectRegistMap = notInRoomStudents.stream().collect(Collectors.groupingBy(ExamRegistration::getSubjectId));
 		Set<Integer> subjectIds = subjectRegistMap.keySet();
 		//未排考学员可排考考场
 		List<ExamRoom> examRooms = examRoomDao.getWithExamAndSubjects(examId, new ArrayList<>(subjectIds));
+		Set<Long> roomIds = examRooms.stream().map(ExamRoom::getId).collect(Collectors.toSet());
 		//未排考学员可排考考场学员
-		List<ExamRoomStudentRelation> examRoomStudents = examRoomStudentRelationDao.getWithExamAndRoomSubjects(examId, new ArrayList<>(subjectIds));
-		Map<Long, List<ExamRoomStudentRelation>> roomStudentsMap = examRoomStudents.stream().collect(Collectors.groupingBy(ExamRoomStudentRelation::getExamRoomId));
-		Set<Long> roomIds = roomStudentsMap.keySet();
+		List<ExamRoomStudentRelation> examRoomStudents = examRoomStudentRelationDao.getWithExamRooms(new ArrayList<>(roomIds));
 		//考场数量
 		Integer roomNum = roomIds.size();
+		//总学员数量(排除重复学员)
+		Integer allStudentNum = notInRoomStudents.size() + examRoomStudents.size();
+		//每个考场可分配学员数
+		Integer roomStudentNum=allStudentNum/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){
+			int startIndex=0;
+			for (ExamRoom examRoom : examRooms) {
+				List<ExamRegistration> examRegistrations = notInRoomStudents.subList(startIndex, roomStudentNum - examRoom.getExamRoomStudentNum());
+				startIndex = startIndex+examRegistrations.size();
+				for (ExamRegistration examRegistration : examRegistrations) {
+					ExamRoomStudentRelation e=new ExamRoomStudentRelation();
+					e.setExamRegistrationId(examRegistration.getId().longValue());
+					e.setExaminationBasicId(examId);
+					e.setExamRoomId(examRoom.getId());
+					e.setStudentId(examRegistration.getStudentId());
+					e.setTenantId(examinationBasic.getTenantId());
+					newRoomStudents.add(e);
+					inRoomRegistIds.add(examRegistration.getId().longValue());
+				}
+				roomStudentNumMap.put(examRoom.getId(), roomStudentNumMap.get(examRoom.getId()) + examRegistrations.size());
+			}
+		}
+
+		List<ExamRegistration> surplusRegist = notInRoomStudents.stream().filter(e -> !inRoomRegistIds.contains(e.getId())).collect(Collectors.toList());
+
+		for (ExamRegistration examRegistration : surplusRegist) {
+			List<Long> sortedRoomIds=new LinkedList<>();
+			roomStudentNumMap.entrySet().stream().sorted(Map.Entry.comparingByValue()).forEach(e->sortedRoomIds.add(e.getKey()));
+			for (Long sortedRoomId : sortedRoomIds) {
+				ExamRoomStudentRelation e=new ExamRoomStudentRelation();
+				e.setExamRegistrationId(examRegistration.getId().longValue());
+				e.setExaminationBasicId(examId);
+				e.setExamRoomId(sortedRoomId);
+				e.setStudentId(examRegistration.getStudentId());
+				e.setTenantId(examinationBasic.getTenantId());
+				newRoomStudents.add(e);
+			}
+		}
+
+		examRoomStudentRelationDao.batchInsert(newRoomStudents);
 
 	}
 

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

@@ -171,7 +171,7 @@ public class ExaminationBasicServiceImpl extends BaseServiceImpl<Long, Examinati
     @Override
     public void examEndRemind() {
         LocalDate today = LocalDate.now();
-        List<ExaminationBasic> endExams = examinationBasicDao.getEndExamsWithDayAndStatus(today.plusDays(-1).toString());
+        List<ExaminationBasic> endExams = examinationBasicDao.getEndExamsWithDayAndStatus(today.toString());
         if(CollectionUtils.isEmpty(endExams)){
             return;
         }

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

@@ -151,7 +151,7 @@ public class StudentExamResultServiceImpl extends BaseServiceImpl<Long, StudentE
 		Map<Integer, String> subjectIdNameMap = this.getMap("subject", "id_", "name_", new ArrayList(subjectIds), Integer.class, String.class);
 
 
-		String baseUrl = "4?";
+		String baseUrl = "4";
 
 		for (StudentExamResult studentExamResult : studentExamResults) {
 			if(Objects.isNull(studentExamResult.getResult())){

+ 6 - 2
edu-user/edu-user-biz/src/main/resources/config/mybatis/ExamManualLedgerMapper.xml

@@ -14,6 +14,7 @@
 		<result column="trans_direction_" property="transDirection" />
 		<result column="amount_" property="amount" />
 		<result column="trans_time_" property="transTime" />
+		<result column="trans_no_" property="transNo" />
 		<result column="memo_" property="memo" />
 		<result column="operator_user_id_" property="operatorUserId" />
 		<result column="tenant_id_" property="tenantId" />
@@ -39,8 +40,8 @@
 		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
 		</selectKey>
 		-->
-		INSERT INTO exam_manual_ledger (organ_id_,target_organ_id_,examination_basic_id_,trans_direction_,amount_,trans_time_,memo_,operator_user_id_,tenant_id_,create_time_)
-		VALUES(#{organId},#{targetOrganId},#{examinationBasicId},#{transDirection},#{amount},#{transTime},#{memo},#{operatorUserId},#{tenantId},NOW())
+		INSERT INTO exam_manual_ledger (organ_id_,target_organ_id_,examination_basic_id_,trans_direction_,amount_,trans_time_,trans_no_,memo_,operator_user_id_,tenant_id_,create_time_)
+		VALUES(#{organId},#{targetOrganId},#{examinationBasicId},#{transDirection},#{amount},#{transTime},#{transNo},#{memo},#{operatorUserId},#{tenantId},NOW())
 	</insert>
 	
 	<!-- 根据主键查询一条记录 -->
@@ -65,6 +66,9 @@
 			<if test="transTime != null">
 				trans_time_ = #{transTime},
 			</if>
+			<if test="transNo != null">
+				trans_no_ = #{transNo},
+			</if>
 			<if test="memo != null">
 				memo_ = #{memo},
 			</if>

+ 18 - 0
edu-user/edu-user-biz/src/main/resources/config/mybatis/ExamRegistrationPaymentMapper.xml

@@ -215,6 +215,7 @@
         AND trans_status_=#{transStatus,typeHandler=com.keao.edu.common.dal.CustomEnumTypeHandler}
         <![CDATA[ AND create_time_ <= ]]> #{beforeTime}
     </select>
+
     <select id="getWithExamOrganAndDay" resultMap="ExamRegistrationPayment">
         SELECT
             *
@@ -229,6 +230,23 @@
             </foreach>
     </select>
 
+    <select id="getWithExamOrgansAndDay" resultMap="ExamRegistrationPayment">
+        SELECT
+        *
+        FROM
+        exam_registration_payment
+        WHERE
+        examination_basic_id_ = #{examId}
+        AND organ_id_ IN
+        <foreach collection="organIds" item="organId" separator="," open="(" close=")">
+            #{organId}
+        </foreach>
+        AND DATE_FORMAT( create_time_, '%Y-%m-%d' ) IN
+        <foreach collection="days" item="day" separator="," open="(" close=")">
+            #{day}
+        </foreach>
+    </select>
+
     <resultMap id="ExamRegistrationPaymentDto" type="com.keao.edu.user.dto.ExamRegistrationPaymentDto"
                extends="ExamRegistrationPayment">
         <result column="card_no_" property="cardNo"/>

+ 4 - 12
edu-user/edu-user-biz/src/main/resources/config/mybatis/ExamRoomMapper.xml

@@ -110,18 +110,10 @@
 				exam_mode_ = #{examMode,typeHandler=com.keao.edu.common.dal.CustomEnumTypeHandler},
 			</if>
 			exam_location_id_ = #{examLocationId},
-			<if test="mainTeacherUserId != null">
-				main_teacher_user_id_ = #{mainTeacherUserId},
-			</if>
-			<if test="mainTeacherName != null">
-				main_teacher_user_name_ = #{mainTeacherName},
-			</if>
-			<if test="assistantTeacherUserIdList != null">
-				assistant_teacher_user_id_list_ = #{assistantTeacherUserIdList},
-			</if>
-			<if test="assistantTeacherUserNameList != null">
-				assistant_teacher_user_name_list_ = #{assistantTeacherUserNameList},
-			</if>
+			main_teacher_user_id_ = #{mainTeacherUserId},
+			main_teacher_user_name_ = #{mainTeacherName},
+			assistant_teacher_user_id_list_ = #{assistantTeacherUserIdList},
+			assistant_teacher_user_name_list_ = #{assistantTeacherUserNameList},
 			<if test="organId != null">
 				organ_id_ = #{organId},
 			</if>

+ 12 - 0
edu-user/edu-user-biz/src/main/resources/config/mybatis/ExamRoomStudentRelationMapper.xml

@@ -306,4 +306,16 @@
 				#{subjectId}
 			</foreach>
 	</select>
+
+	<select id="getWithExamRooms" resultMap="ExamRoomStudentRelation">
+		SELECT
+			*
+		FROM
+			exam_room_student_relation
+		WHERE
+			exam_room_id_ IN
+			<foreach collection="examRoomIds" item="examRoomId" separator="," open="(" close=")">
+				#{examRoomId}
+			</foreach>
+	</select>
 </mapper>

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

@@ -281,6 +281,6 @@
 	</select>
 
     <select id="getEndExamsWithDayAndStatus" resultMap="ExaminationBasic">
-		SELECT * FROM examination_basic WHERE DATE_FORMAT(actual_exam_end_time_, '%Y-%m-%d') = #{day}
+		SELECT * FROM examination_basic WHERE status_ IN ('EXAM_END') AND DATE_FORMAT(actual_exam_end_time_, '%Y-%m-%d') = #{day}
 	</select>
 </mapper>

+ 1 - 1
edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamOrganizationRelationController.java

@@ -114,7 +114,7 @@ public class ExamOrganizationRelationController extends BaseController {
             return failed("用户异常");
         }
         int sendUrlOrgans = examOrganizationRelationDao.countExamIsSendUrlOrgans(examId.longValue());
-        if(sendUrlOrgans>0){
+        if(sendUrlOrgans>1){
             return failed("已发送过报名链接");
         }
         examOrganizationRelationService.sendUrl(examId,employee.getOrganId());

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

@@ -129,6 +129,22 @@ public class ExamRoomStudentRelationController extends BaseController {
         return succeed();
     }
 
+    @ApiOperation("自动分配学员到考场")
+    @PostMapping(value = "/autoSplitStudentToRoom")
+    public HttpResponseResult autoSplitStudentToRoom(Long examRoomId){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        Integer organId=null;
+        if(!sysUser.getIsSuperAdmin()){
+            Employee employee = employeeService.get(sysUser.getId());
+            if(Objects.isNull(employee)){
+                return failed("用户信息异常");
+            }
+            organId=employee.getOrganId();
+        }
+        examRoomStudentRelationService.autoSplitStudentToRoom(examRoomId, organId);
+        return succeed();
+    }
+
     @ApiOperation("更换学员考场")
     @PostMapping(value = "/changeStudentExamRoom")
     public HttpResponseResult changeStudentExamRoom(Long registId, Long examRoomId){