Przeglądaj źródła

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

zouxuan 5 lat temu
rodzic
commit
b826a0fd24
41 zmienionych plików z 626 dodań i 75 usunięć
  1. 3 1
      edu-common/src/main/java/com/keao/edu/common/service/impl/SysMessageServiceImpl.java
  2. 1 1
      edu-datasource/src/main/java/com/keao/edu/datasource/interceptor/DataSourceInterceptor.java
  3. 3 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamManualLedgerController.java
  4. 35 3
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamOrganizationRelationController.java
  5. 3 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamRegistrationController.java
  6. 1 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamRoomController.java
  7. 1 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamSubjectSongController.java
  8. 4 2
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExaminationBasicController.java
  9. 13 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamLifecycleLogDao.java
  10. 8 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamManualLedgerDao.java
  11. 2 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamOrganizationRelationDao.java
  12. 13 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamRegistrationPaymentDao.java
  13. 2 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamSubjectDao.java
  14. 2 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamSubjectSongDao.java
  15. 45 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/ExamOrganStatisticsDto.java
  16. 98 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/entity/ExamLifecycleLog.java
  17. 11 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/entity/ExamManualLedger.java
  18. 2 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/enums/ExamStatusEnum.java
  19. 8 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/ExamLifecycleLogService.java
  20. 1 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/ExamManualLedgerService.java
  21. 13 2
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/ExamOrganizationRelationService.java
  22. 1 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/ExamRoomService.java
  23. 1 2
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/ExamSubjectSongService.java
  24. 3 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/ExaminationBasicService.java
  25. 22 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamLifecycleLogServiceImpl.java
  26. 2 2
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamManualLedgerServiceImpl.java
  27. 112 32
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamOrganizationRelationServiceImpl.java
  28. 6 1
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamRoomServiceImpl.java
  29. 6 2
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamSubjectSongServiceImpl.java
  30. 61 6
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExaminationBasicServiceImpl.java
  31. 79 0
      edu-user/edu-user-server/src/main/resources/config/mybatis/ExamLifecycleLogMapper.xml
  32. 1 1
      edu-user/edu-user-server/src/main/resources/config/mybatis/ExamLocationMapper.xml
  33. 26 3
      edu-user/edu-user-server/src/main/resources/config/mybatis/ExamManualLedgerMapper.xml
  34. 5 1
      edu-user/edu-user-server/src/main/resources/config/mybatis/ExamOrganizationRelationMapper.xml
  35. 5 1
      edu-user/edu-user-server/src/main/resources/config/mybatis/ExamRegistrationMapper.xml
  36. 13 0
      edu-user/edu-user-server/src/main/resources/config/mybatis/ExamRegistrationPaymentMapper.xml
  37. 6 2
      edu-user/edu-user-server/src/main/resources/config/mybatis/ExamSubjectMapper.xml
  38. 3 0
      edu-user/edu-user-server/src/main/resources/config/mybatis/ExamSubjectSongMapper.xml
  39. 3 2
      edu-user/edu-user-server/src/main/resources/config/mybatis/ExaminationBasicMapper.xml
  40. 1 1
      edu-user/edu-user-server/src/main/resources/config/mybatis/OrganizationMapper.xml
  41. 1 0
      edu-user/edu-user-server/src/main/resources/config/mybatis/StudentExamResultMapper.xml

+ 3 - 1
edu-common/src/main/java/com/keao/edu/common/service/impl/SysMessageServiceImpl.java

@@ -15,7 +15,9 @@ import com.keao.edu.common.service.SysMessageConfigService;
 import com.keao.edu.common.service.SysMessageService;
 import com.keao.edu.thirdparty.message.MessageSenderPlugin;
 import com.keao.edu.thirdparty.message.MessageSenderPluginContext;
+import com.keao.edu.thirdparty.message.provider.YimeiSmsPlugin;
 import com.keao.edu.util.string.MessageFormatter;
+
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -297,7 +299,7 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 		}
 		Map<Integer, String> receivers = new HashMap<>(1);
 		receivers.put(userId, receiver);
-		batchSendMessage(messageType, receivers, null, 1, "","", code);
+		batchSendMessage(messageType, receivers, null, 1, "",YimeiSmsPlugin.PLUGIN_NAME, code);
 		redisCache.put(key, code + "", CODE_EXPIRE);
 		redisCache.put(key1, code + "", CODE_INTERVAL_TIME);
 		return true;

+ 1 - 1
edu-datasource/src/main/java/com/keao/edu/datasource/interceptor/DataSourceInterceptor.java

@@ -10,7 +10,7 @@ import com.keao.edu.datasource.DataSourceContextHolder;
 
 public class DataSourceInterceptor extends HandlerInterceptorAdapter {
 
-	private static final String TENANT_ID = "tenantId";
+	private static final String TENANT_ID = "datasourceId";
 
 	@Override
 	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

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

@@ -5,6 +5,7 @@ import com.keao.edu.auth.api.entity.SysUser;
 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.tenant.OrganContextHolder;
 import com.keao.edu.common.tenant.TenantContextHolder;
 import com.keao.edu.user.dto.ExamManualLedgerStatisticsDto;
 import com.keao.edu.user.entity.ExamManualLedger;
@@ -43,6 +44,7 @@ public class ExamManualLedgerController extends BaseController {
         examManualLedger.setTransDirection(TransDirectionEnum.EXPENDITURE);
         examManualLedger.setTenantId(TenantContextHolder.getTenantId());
         examManualLedger.setOperatorUserId(sysUser.getId());
+        examManualLedger.setOrganId(OrganContextHolder.getOrganId());
         examManualLedgerService.addExamManualLedger(examManualLedger);
         return succeed();
     }
@@ -65,7 +67,7 @@ public class ExamManualLedgerController extends BaseController {
     @ApiOperation("获取考级项目支出统计信息")
     @GetMapping(value = "/getExamManualLedgerStatistics")
     public HttpResponseResult<ExamManualLedgerStatisticsDto> getExamManualLedgerStatistics(Long examId){
-        return succeed(examManualLedgerService.getExamManualLedgerStatistics(examId));
+        return succeed(examManualLedgerService.getExamManualLedgerStatistics(OrganContextHolder.getOrganId(),examId));
     }
 
 }

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

@@ -8,7 +8,6 @@ import com.keao.edu.common.page.PageInfo;
 import com.keao.edu.user.dto.ExamOrganizationRelationExtraDto;
 import com.keao.edu.user.entity.Employee;
 import com.keao.edu.user.entity.ExamOrganizationRelation;
-import com.keao.edu.user.entity.Organization;
 import com.keao.edu.user.page.ExamOrganizationRelationQueryInfo;
 import com.keao.edu.user.service.EmployeeService;
 import com.keao.edu.user.service.ExamOrganizationRelationService;
@@ -18,6 +17,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 
 /**
@@ -56,7 +56,15 @@ public class ExamOrganizationRelationController extends BaseController {
     @ApiOperation("添加合作单位")
     @PostMapping(value = "/addExamOrganizations")
     public HttpResponseResult addExamOrganizations(@RequestBody List<ExamOrganizationRelation> organizationRelations){
-        examOrganizationRelationService.addExamOrganizations(organizationRelations);
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(Objects.isNull(sysUser)){
+            return failed("请重新登录");
+        }
+        Employee employee = employeeService.get(sysUser.getId());
+        if(Objects.isNull(employee)){
+            return failed("用户异常");
+        }
+        examOrganizationRelationService.addExamOrganizations(organizationRelations,employee.getOrganId());
         return succeed();
     }
 
@@ -74,9 +82,33 @@ public class ExamOrganizationRelationController extends BaseController {
         return succeed();
     }
 
+    @ApiOperation("删除")
+    @PostMapping(value = "/del")
+    public HttpResponseResult del(Long id){
+        examOrganizationRelationService.delete(id);
+        return succeed();
+    }
+
+    @ApiOperation("获取本单位项目信息")
+    @GetMapping(value = "/getExamOrganStatistics")
+    public HttpResponseResult getExamOrganStatistics(Long examId){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(Objects.isNull(sysUser)){
+            return failed("请重新登录");
+        }
+        Integer organId=null;
+        if(!sysUser.getIsSuperAdmin()){
+            Employee employee = employeeService.get(sysUser.getId());
+            if(Objects.nonNull(employee)){
+                organId = employee.getOrganId();
+            }
+        }
+        return succeed(examOrganizationRelationService.getExamOrganStatistics(organId, examId));
+    }
+
     @ApiOperation("获取未关联到考级项目的合作单位")
     @GetMapping(value = "/queryUnRelatedOrgans")
-    public HttpResponseResult<PageInfo<Organization>> queryUnRelatedOrgans(ExamOrganizationRelationQueryInfo queryInfo){
+    public HttpResponseResult<Map<String, Object>> queryUnRelatedOrgans(ExamOrganizationRelationQueryInfo queryInfo){
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if(Objects.isNull(sysUser)){
             return failed("请重新登录");

+ 3 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamRegistrationController.java

@@ -59,6 +59,9 @@ public class ExamRegistrationController extends BaseController {
         }else if(sysUser.getIsSuperAdmin()){
             queryInfo.setOrganId(null);
         }
+        if(Objects.nonNull(queryInfo.getOrganizationId())){
+            queryInfo.setOrganId(queryInfo.getOrganizationId());
+        }
         return succeed(examRegistrationService.queryExamRegistrationStudents(queryInfo));
     }
 

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

@@ -58,7 +58,7 @@ public class ExamRoomController extends BaseController {
         if(Objects.isNull(employee)){
             return failed("用户信息异常");
         }
-        examRoomService.sendExamPlan(employee.getOrganId(), examId);
+        examRoomService.sendExamPlan(employee.getOrganId(), examId, sysUser.getId());
         return succeed();
     }
 

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

@@ -52,7 +52,7 @@ public class ExamSubjectSongController extends BaseController {
     @ApiOperation(value = "删除考试内容")
     @PostMapping(value = "del")
     public HttpResponseResult del(Long id) {
-        examSubjectSongService.delete(id);
+        examSubjectSongService.deleteExamSubjectSong(id);
         return succeed();
     }
 

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

@@ -71,14 +71,16 @@ public class ExaminationBasicController extends BaseController {
     @ApiOperation("更新考级项目")
     @PostMapping(value = "/update")
     public HttpResponseResult update(@RequestBody ExaminationBasic examinationBasic){
-        examinationBasicService.update(examinationBasic);
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        examinationBasicService.updateExam(examinationBasic,sysUser.getId());
         return succeed();
     }
 
     @ApiOperation("更新考级项目状态")
     @PostMapping(value = "/updateExamBasicStatus")
     public HttpResponseResult updateExamBasicStatus(Long examId, ExamStatusEnum statusEnum){
-        examinationBasicService.updateExamBasicStatus(examId, statusEnum);
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        examinationBasicService.updateExamBasicStatus(examId, statusEnum, sysUser.getId());
         return succeed();
     }
 

+ 13 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamLifecycleLogDao.java

@@ -0,0 +1,13 @@
+package com.keao.edu.user.dao;
+
+import com.keao.edu.common.dal.BaseDAO;
+import com.keao.edu.user.entity.ExamLifecycleLog;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface ExamLifecycleLogDao extends BaseDAO<Long, ExamLifecycleLog> {
+
+    List<ExamLifecycleLog> findWithExam(@Param("examId") Long examId);
+	
+}

+ 8 - 1
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamManualLedgerDao.java

@@ -20,6 +20,13 @@ public interface ExamManualLedgerDao extends BaseDAO<Long, ExamManualLedger> {
      * @param examId:
      * @return com.keao.edu.user.dto.ExamManualLedgerStatisticsDto
      */
-    ExamManualLedgerStatisticsDto getExamManualLedgerStatistics(@Param("examId") Long examId);
+    ExamManualLedgerStatisticsDto getExamManualLedgerStatistics(@Param("organId") Integer organId,
+                                                                @Param("examId") Long examId);
+
+
+    List<ExamManualLedger> getExamOrganManualLedgers(@Param("organId") Integer organId,
+                                                     @Param("examId") Long examId,
+                                                     @Param("days") List<String> days);
+
 
 }

+ 2 - 1
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamOrganizationRelationDao.java

@@ -1,6 +1,7 @@
 package com.keao.edu.user.dao;
 
 import com.keao.edu.common.dal.BaseDAO;
+import com.keao.edu.user.dto.ExamOrganStatisticsDto;
 import com.keao.edu.user.dto.ExamOrganizationRelationExtraDto;
 import com.keao.edu.user.entity.ExamOrganizationRelation;
 import com.keao.edu.user.entity.Organization;
@@ -104,7 +105,7 @@ public interface ExamOrganizationRelationDao extends BaseDAO<Long, ExamOrganizat
      * @param OrganId
      * @return
      */
-    ExamOrganizationRelation getExamOrganizationRelation(@Param("examId") Long examId, @Param("OrganId") Integer OrganId);
+    ExamOrganStatisticsDto getExamOrganizationRelation(@Param("examId") Long examId, @Param("OrganId") Integer OrganId);
 
     /**
      * 获取考级项目关联合作单位信息

+ 13 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamRegistrationPaymentDao.java

@@ -62,4 +62,17 @@ public interface ExamRegistrationPaymentDao extends BaseDAO<Long, ExamRegistrati
      * @return
      */
     Integer getOrderListCount(Map<String, Object> params);
+
+    /**
+     * @describe 获取指定日期中分部考级项目的报名费用
+     * @author Joburgess
+     * @date 2020.07.16
+     * @param examId:
+     * @param organId:
+     * @param days:
+     * @return java.util.List<com.keao.edu.user.entity.ExamRegistrationPayment>
+     */
+    List<ExamRegistrationPayment> getWithExamOrganAndDay(@Param("examId") Long examId,
+                                                         @Param("organId") Integer organId,
+                                                         @Param("days") List<String> days);
 }

+ 2 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamSubjectDao.java

@@ -12,6 +12,8 @@ public interface ExamSubjectDao extends BaseDAO<Long, ExamSubject> {
 
     int batchInsert(@Param("examSubjects") List<ExamSubject> examSubjects);
 
+    int deleteWithExamSubject(@Param("examId") Long examId, @Param("subjectId") Integer subjectId);
+
     /**
      * @param examId: 考级项目编号
      * @return java.util.List<com.keao.edu.user.entity.ExamSubject>

+ 2 - 1
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamSubjectSongDao.java

@@ -2,7 +2,6 @@ package com.keao.edu.user.dao;
 
 import com.keao.edu.common.dal.BaseDAO;
 import com.keao.edu.user.dto.ExamSubjectSongDto;
-import com.keao.edu.user.entity.ExamSong;
 import com.keao.edu.user.entity.ExamSubjectSong;
 import org.apache.ibatis.annotations.Param;
 
@@ -43,4 +42,6 @@ public interface ExamSubjectSongDao extends BaseDAO<Long, ExamSubjectSong> {
     List<ExamSubjectSongDto> queryExamSubjectSongs(Map<String, Object> params);
     int countExamSubjectSongs(Map<String, Object> params);
 
+    int countExamSongsWithSubject(@Param("examId") Long examId,@Param("subjectId") Integer subjectId);
+
 }

+ 45 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dto/ExamOrganStatisticsDto.java

@@ -0,0 +1,45 @@
+package com.keao.edu.user.dto;
+
+import com.keao.edu.user.entity.ExamLifecycleLog;
+import com.keao.edu.user.entity.ExamOrganizationRelation;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Author Joburgess
+ * @Date 2020.07.16
+ */
+public class ExamOrganStatisticsDto extends ExamOrganizationRelation {
+
+    private List<ExamLifecycleLog> examLifecycleLogs;
+
+    private Map<String, BigDecimal> dayTransAmount;
+
+    private Map<String, BigDecimal> dayPaymentAmount;
+
+    public List<ExamLifecycleLog> getExamLifecycleLogs() {
+        return examLifecycleLogs;
+    }
+
+    public void setExamLifecycleLogs(List<ExamLifecycleLog> examLifecycleLogs) {
+        this.examLifecycleLogs = examLifecycleLogs;
+    }
+
+    public Map<String, BigDecimal> getDayTransAmount() {
+        return dayTransAmount;
+    }
+
+    public void setDayTransAmount(Map<String, BigDecimal> dayTransAmount) {
+        this.dayTransAmount = dayTransAmount;
+    }
+
+    public Map<String, BigDecimal> getDayPaymentAmount() {
+        return dayPaymentAmount;
+    }
+
+    public void setDayPaymentAmount(Map<String, BigDecimal> dayPaymentAmount) {
+        this.dayPaymentAmount = dayPaymentAmount;
+    }
+}

+ 98 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/entity/ExamLifecycleLog.java

@@ -0,0 +1,98 @@
+package com.keao.edu.user.entity;
+
+import io.swagger.annotations.ApiModelProperty;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * 对应数据库表(exam_lifecycle_log):
+ */
+public class ExamLifecycleLog {
+
+	/**  */
+	private Long id;
+	
+	@ApiModelProperty(value = "考级项目编号")
+	private Integer examinationBasicId;
+	
+	@ApiModelProperty(value = "事件名称")
+	private String eventName;
+	
+	@ApiModelProperty(value = "操作人编号")
+	private Integer operatorUserId;
+	
+	@ApiModelProperty(value = "备注")
+	private String memo;
+	
+	@ApiModelProperty(value = "事件发生事件")
+	private java.util.Date createTime;
+
+	public ExamLifecycleLog() {
+	}
+
+	public ExamLifecycleLog(Integer examinationBasicId, String eventName, Integer operatorUserId) {
+		this.examinationBasicId = examinationBasicId;
+		this.eventName = eventName;
+		this.operatorUserId = operatorUserId;
+	}
+
+	public ExamLifecycleLog(Integer examinationBasicId, String eventName, Integer operatorUserId, String memo) {
+		this.examinationBasicId = examinationBasicId;
+		this.eventName = eventName;
+		this.operatorUserId = operatorUserId;
+		this.memo = memo;
+	}
+
+	public void setId(Long id){
+		this.id = id;
+	}
+	
+	public Long getId(){
+		return this.id;
+	}
+			
+	public void setExaminationBasicId(Integer examinationBasicId){
+		this.examinationBasicId = examinationBasicId;
+	}
+	
+	public Integer getExaminationBasicId(){
+		return this.examinationBasicId;
+	}
+			
+	public void setEventName(String eventName){
+		this.eventName = eventName;
+	}
+	
+	public String getEventName(){
+		return this.eventName;
+	}
+			
+	public void setOperatorUserId(Integer operatorUserId){
+		this.operatorUserId = operatorUserId;
+	}
+	
+	public Integer getOperatorUserId(){
+		return this.operatorUserId;
+	}
+			
+	public void setMemo(String memo){
+		this.memo = memo;
+	}
+	
+	public String getMemo(){
+		return this.memo;
+	}
+			
+	public void setCreateTime(java.util.Date createTime){
+		this.createTime = createTime;
+	}
+	
+	public java.util.Date getCreateTime(){
+		return this.createTime;
+	}
+			
+	@Override
+	public String toString() {
+		return ToStringBuilder.reflectionToString(this);
+	}
+
+}

+ 11 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/entity/ExamManualLedger.java

@@ -18,6 +18,9 @@ public class ExamManualLedger {
 	@ApiModelProperty(value = "合作单位基本信息")
 	private Organization organization;
 
+	@ApiModelProperty(value = "目标合作单位")
+	private Integer targetOrganId;
+
 	@ApiModelProperty(value = "考级项目编号")
 	private Long examinationBasicId;
 	
@@ -59,6 +62,14 @@ public class ExamManualLedger {
 		this.organId = organId;
 	}
 
+	public Integer getTargetOrganId() {
+		return targetOrganId;
+	}
+
+	public void setTargetOrganId(Integer targetOrganId) {
+		this.targetOrganId = targetOrganId;
+	}
+
 	public Long getExaminationBasicId() {
 		return examinationBasicId;
 	}

+ 2 - 1
edu-user/edu-user-server/src/main/java/com/keao/edu/user/enums/ExamStatusEnum.java

@@ -14,7 +14,8 @@ public enum ExamStatusEnum implements BaseEnum<String, ExamStatusEnum> {
     EXAM_ING("EXAM_ING", "考试中"),
     EXAM_END("EXAM_END", "考试结束"),
     RESULT_CONFIRM("RESULT_CONFIRM", "确认考试结果"),
-    CLOSE("CLOSE", "关闭");
+    CLOSE("CLOSE", "关闭"),
+    DELETE("DELETE", "删除");
 
     private String code;
 

+ 8 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/ExamLifecycleLogService.java

@@ -0,0 +1,8 @@
+package com.keao.edu.user.service;
+
+import com.keao.edu.common.service.BaseService;
+import com.keao.edu.user.entity.ExamLifecycleLog;
+
+public interface ExamLifecycleLogService extends BaseService<Long, ExamLifecycleLog> {
+
+}

+ 1 - 1
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/ExamManualLedgerService.java

@@ -22,6 +22,6 @@ public interface ExamManualLedgerService extends BaseService<Long, ExamManualLed
      * @param examId:
      * @return com.keao.edu.user.dto.ExamManualLedgerStatisticsDto
      */
-    ExamManualLedgerStatisticsDto getExamManualLedgerStatistics(Long examId);
+    ExamManualLedgerStatisticsDto getExamManualLedgerStatistics(Integer organId,Long examId);
 
 }

+ 13 - 2
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/ExamOrganizationRelationService.java

@@ -2,12 +2,14 @@ package com.keao.edu.user.service;
 
 import com.keao.edu.common.page.PageInfo;
 import com.keao.edu.common.service.BaseService;
+import com.keao.edu.user.dto.ExamOrganStatisticsDto;
 import com.keao.edu.user.dto.ExamOrganizationRelationExtraDto;
 import com.keao.edu.user.entity.ExamOrganizationRelation;
 import com.keao.edu.user.entity.Organization;
 import com.keao.edu.user.page.ExamOrganizationRelationQueryInfo;
 
 import java.util.List;
+import java.util.Map;
 
 public interface ExamOrganizationRelationService extends BaseService<Long, ExamOrganizationRelation> {
 
@@ -38,7 +40,7 @@ public interface ExamOrganizationRelationService extends BaseService<Long, ExamO
      * @param orgainIdsStr:
      * @return void
      */
-    void addExamOrganizations(List<ExamOrganizationRelation> organizationRelations);
+    void addExamOrganizations(List<ExamOrganizationRelation> organizationRelations, Integer selfOrganId);
 
     /**
      * @describe 更新考级项目与合作单位关联信息
@@ -60,12 +62,21 @@ public interface ExamOrganizationRelationService extends BaseService<Long, ExamO
     void sendUrl(Integer examId);
 
     /**
+     * @describe 获取本单位统计信息
+     * @author Joburgess
+     * @date 2020.07.16
+     * @param examId:
+     * @return com.keao.edu.user.dto.ExamOrganStatisticsDto
+     */
+    ExamOrganStatisticsDto getExamOrganStatistics(Integer organId, Long examId);
+
+    /**
      * @describe 获取未关联到考级项目的合作单位
      * @author Joburgess
      * @date 2020.07.03
      * @param queryInfo:
      * @return org.springframework.data.domain.Page<com.keao.edu.user.entity.Organization>
      */
-    PageInfo<Organization> queryUnRelatedOrgans(ExamOrganizationRelationQueryInfo queryInfo);
+    Map<String, Object> queryUnRelatedOrgans(ExamOrganizationRelationQueryInfo queryInfo);
 
 }

+ 1 - 1
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/ExamRoomService.java

@@ -60,7 +60,7 @@ public interface ExamRoomService extends BaseService<Long, ExamRoom> {
      * @date 2020.06.29
      * @return void
      */
-    void sendExamPlan(Integer organId, Integer examId);
+    void sendExamPlan(Integer organId, Integer examId, Integer operatorId);
 
     /**
      * @describe 获取考场统计信息

+ 1 - 2
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/ExamSubjectSongService.java

@@ -2,14 +2,12 @@ package com.keao.edu.user.service;
 
 import com.keao.edu.common.page.PageInfo;
 import com.keao.edu.common.service.BaseService;
-import com.keao.edu.user.dao.ExamSubjectSongDao;
 import com.keao.edu.user.dto.ExamSubjectSongDto;
 import com.keao.edu.user.entity.ExamSong;
 import com.keao.edu.user.entity.ExamSubjectSong;
 import com.keao.edu.user.page.ExamSubjectSongQueryInfo;
 
 import java.util.List;
-import java.util.Map;
 
 public interface ExamSubjectSongService extends BaseService<Long, ExamSubjectSong> {
 
@@ -24,6 +22,7 @@ public interface ExamSubjectSongService extends BaseService<Long, ExamSubjectSon
 
     PageInfo<ExamSubjectSongDto> queryExamSubjectSongs(ExamSubjectSongQueryInfo queryInfo);
 
+    void deleteExamSubjectSong(Long id);
 
     /**
      * 获取考试对应科目对应级别的曲目

+ 3 - 1
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/ExaminationBasicService.java

@@ -18,6 +18,8 @@ public interface ExaminationBasicService extends BaseService<Long, ExaminationBa
      */
     ExaminationBasic addExaminationBasic(ExaminationBasic examinationBasic);
 
+    void updateExam(ExaminationBasic examinationBasic, Integer operatorId);
+
     /**
      * @describe 更新考级项目状态
      * @author Joburgess
@@ -34,7 +36,7 @@ public interface ExaminationBasicService extends BaseService<Long, ExaminationBa
      * @param statusEnum:
      * @return
      */
-    void updateExamBasicStatus(Long examId, ExamStatusEnum statusEnum);
+    void updateExamBasicStatus(Long examId, ExamStatusEnum statusEnum, Integer operatorId);
 
     /**
      * @describe 获取考级项目

+ 22 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamLifecycleLogServiceImpl.java

@@ -0,0 +1,22 @@
+package com.keao.edu.user.service.impl;
+
+import com.keao.edu.common.dal.BaseDAO;
+import com.keao.edu.common.service.impl.BaseServiceImpl;
+import com.keao.edu.user.dao.ExamLifecycleLogDao;
+import com.keao.edu.user.entity.ExamLifecycleLog;
+import com.keao.edu.user.service.ExamLifecycleLogService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class ExamLifecycleLogServiceImpl extends BaseServiceImpl<Long, ExamLifecycleLog> implements ExamLifecycleLogService {
+	
+	@Autowired
+	private ExamLifecycleLogDao examLifecycleLogDao;
+
+	@Override
+	public BaseDAO<Long, ExamLifecycleLog> getDAO() {
+		return examLifecycleLogDao;
+	}
+	
+}

+ 2 - 2
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamManualLedgerServiceImpl.java

@@ -97,10 +97,10 @@ public class ExamManualLedgerServiceImpl extends BaseServiceImpl<Long, ExamManua
 	}
 
 	@Override
-	public ExamManualLedgerStatisticsDto getExamManualLedgerStatistics(Long examId) {
+	public ExamManualLedgerStatisticsDto getExamManualLedgerStatistics(Integer organId, Long examId) {
 		if(Objects.isNull(examId)){
 			throw new BizException("请指定考级项目");
 		}
-		return examManualLedgerDao.getExamManualLedgerStatistics(examId);
+		return examManualLedgerDao.getExamManualLedgerStatistics(organId, examId);
 	}
 }

+ 112 - 32
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamOrganizationRelationServiceImpl.java

@@ -1,43 +1,22 @@
 package com.keao.edu.user.service.impl;
 
-import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-import com.keao.edu.common.service.SysMessageService;
-import com.keao.edu.thirdparty.message.provider.JiguangPushPlugin;
-import com.keao.edu.user.dao.*;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Isolation;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.CollectionUtils;
-
-import com.keao.edu.auth.api.client.SysMessageFeignService;
 import com.keao.edu.auth.api.client.SysUserFeignService;
-import com.keao.edu.auth.api.entity.SysMessageParams;
 import com.keao.edu.auth.api.entity.SysUser;
 import com.keao.edu.common.dal.BaseDAO;
 import com.keao.edu.common.entity.SysConfig;
 import com.keao.edu.common.enums.MessageTypeEnum;
 import com.keao.edu.common.exception.BizException;
 import com.keao.edu.common.page.PageInfo;
+import com.keao.edu.common.service.SysMessageService;
 import com.keao.edu.common.service.impl.BaseServiceImpl;
 import com.keao.edu.common.tenant.TenantContextHolder;
+import com.keao.edu.thirdparty.message.provider.JiguangPushPlugin;
+import com.keao.edu.user.dao.*;
+import com.keao.edu.user.dto.ExamOrganStatisticsDto;
 import com.keao.edu.user.dto.ExamOrganizationRelationExtraDto;
-import com.keao.edu.user.entity.ExamOrganizationRelation;
-import com.keao.edu.user.entity.ExaminationBasic;
-import com.keao.edu.user.entity.Organization;
-import com.keao.edu.user.entity.TenantInfo;
+import com.keao.edu.user.entity.*;
 import com.keao.edu.user.enums.ExamStatusEnum;
+import com.keao.edu.user.enums.TransStatusEnum;
 import com.keao.edu.user.enums.YesOrNoEnum;
 import com.keao.edu.user.page.ExamOrganizationRelationQueryInfo;
 import com.keao.edu.user.service.ExamOrganizationRelationService;
@@ -46,6 +25,19 @@ import com.keao.edu.user.service.ShortUrlService;
 import com.keao.edu.user.service.SysConfigService;
 import com.keao.edu.util.collection.MapUtil;
 import com.keao.edu.util.date.DateUtil;
+import org.apache.commons.beanutils.BeanUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Isolation;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import java.lang.reflect.InvocationTargetException;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.util.*;
+import java.util.stream.Collectors;
 
 @Service
 public class ExamOrganizationRelationServiceImpl extends BaseServiceImpl<Long, ExamOrganizationRelation> implements ExamOrganizationRelationService {
@@ -70,6 +62,12 @@ public class ExamOrganizationRelationServiceImpl extends BaseServiceImpl<Long, E
 	private SysUserDao sysUserDao;
 	@Autowired
 	private SysMessageService sysMessageService;
+	@Autowired
+	private ExamLifecycleLogDao examLifecycleLogDao;
+	@Autowired
+	private ExamRegistrationPaymentDao examRegistrationPaymentDao;
+	@Autowired
+	private ExamManualLedgerDao examManualLedgerDao;
 
 	public static final Set<ExamStatusEnum> EDIT_ABLE_EXAM_STATUS=new HashSet<>(Arrays.asList(ExamStatusEnum.SETTING,ExamStatusEnum.NOT_START,ExamStatusEnum.APPLYING,ExamStatusEnum.APPLIED));
 
@@ -84,7 +82,7 @@ public class ExamOrganizationRelationServiceImpl extends BaseServiceImpl<Long, E
 		Map<String, Object> params = new HashMap<String, Object>();
 		MapUtil.populateMap(params, queryInfo);
 
-		List<Integer> nextLevelOrganIds = organizationService.getChildOrganIds(queryInfo.getOrganId(), false);
+		List<Integer> nextLevelOrganIds = organizationService.getNextLevelOrganIds(queryInfo.getOrganId(), false);
 		params.put("organIds", nextLevelOrganIds);
 
 		List<ExamOrganizationRelationExtraDto> dataList = new ArrayList<>();
@@ -175,7 +173,7 @@ public class ExamOrganizationRelationServiceImpl extends BaseServiceImpl<Long, E
 
 	@Override
 	@Transactional(rollbackFor = Exception.class)
-	public void addExamOrganizations(List<ExamOrganizationRelation> organizationRelations) {
+	public void addExamOrganizations(List<ExamOrganizationRelation> organizationRelations, Integer selfOrganId) {
 		if(CollectionUtils.isEmpty(organizationRelations)){
 			throw new BizException("请指定考级项目");
 		}
@@ -190,6 +188,11 @@ public class ExamOrganizationRelationServiceImpl extends BaseServiceImpl<Long, E
 			throw new BizException("当前状态暂不可添加合作单位");
 		}
 
+		ExamOrganStatisticsDto examOrganizationRelation = examOrganizationRelationDao.getExamOrganizationRelation(examinationBasic.getId(), selfOrganId);
+		if(Objects.isNull(examOrganizationRelation)){
+			throw new BizException("操作异常");
+		}
+
 		Set<Integer> organIdsWithExam = examOrganizationRelationDao.getOrganIdsWithExam(examinationBasic.getId().intValue());
 		List<Integer> organIds = organizationRelations.stream().filter(e->Objects.nonNull(e.getOrganId())).map(ExamOrganizationRelation::getOrganId).collect(Collectors.toList());
 		if(organIds.size()!=organizationRelations.size()){
@@ -222,6 +225,10 @@ public class ExamOrganizationRelationServiceImpl extends BaseServiceImpl<Long, E
 				throw new BizException("参数错误");
 			}
 
+			if(examOrganizationRelation.getIsAllowArrangeExam()==0){
+				og.setIsAllowArrangeExam(0);
+			}
+
 			og.setTenantId(TenantContextHolder.getTenantId());
 			og.setExaminationBasicId(examinationBasic.getId().intValue());
 
@@ -234,7 +241,6 @@ public class ExamOrganizationRelationServiceImpl extends BaseServiceImpl<Long, E
 			String registrationUrl = baseUrl + "examId=" + examinationBasic.getId() + "&organId=" + og.getOrganId();
 			String registShortUrl = shortUrlService.createShortUrl(registrationUrl);
 			og.setUrl(registShortUrl);
-			organizationRelations.add(og);
 		}
 		examOrganizationRelationDao.batchInsert(organizationRelations);
 	}
@@ -295,6 +301,8 @@ public class ExamOrganizationRelationServiceImpl extends BaseServiceImpl<Long, E
 
 		if(!CollectionUtils.isEmpty(needUpdate)){
 			examOrganizationRelationDao.batchUpdate(needUpdate);
+
+			examLifecycleLogDao.insert(new ExamLifecycleLog(examinationBasic.getId().intValue(), "发送考级连接", examinationBasic.getCreatorId()));
 		}
 
 		if(examinationBasic.getStatus().equals(ExamStatusEnum.SETTING)){
@@ -304,7 +312,71 @@ public class ExamOrganizationRelationServiceImpl extends BaseServiceImpl<Long, E
 	}
 
 	@Override
-	public PageInfo<Organization> queryUnRelatedOrgans(ExamOrganizationRelationQueryInfo queryInfo) {
+	public ExamOrganStatisticsDto getExamOrganStatistics(Integer organId, Long examId) {
+		if(Objects.isNull(examId)){
+			throw new BizException("请指定考级项目");
+		}
+		ExaminationBasic examinationBasic = examinationBasicDao.get(examId);
+		if(Objects.isNull(examinationBasic)){
+			throw new BizException("考级项目不存在");
+		}
+		ExamOrganStatisticsDto examOrganStatistics = examOrganizationRelationDao.getExamOrganizationRelation(examId, organId);
+		if(Objects.isNull(examOrganStatistics)){
+			examOrganStatistics=new ExamOrganStatisticsDto();
+		}
+
+		examOrganStatistics.setExamLifecycleLogs(examLifecycleLogDao.findWithExam(examId));
+
+		Map<String, BigDecimal> dayTransAmount=new LinkedHashMap<>();
+		Map<String, BigDecimal> dayPaymentAmount=new LinkedHashMap<>();
+
+		LocalDate today = LocalDate.now();
+		List<String> days=new ArrayList<>();
+		dayTransAmount.put(today.toString(), BigDecimal.ZERO);
+		dayPaymentAmount.put(today.toString(), BigDecimal.ZERO);
+		for (int i=-1;i>-7;i--){
+			days.add(today.plusDays(i).toString());
+			dayTransAmount.put(today.plusDays(i).toString(), BigDecimal.ZERO);
+			dayPaymentAmount.put(today.plusDays(i).toString(), BigDecimal.ZERO);
+		}
+
+		List<ExamRegistrationPayment> examRegistrationPayments = examRegistrationPaymentDao.getWithExamOrganAndDay(examId, organId, days);
+		List<ExamManualLedger> examOrganManualLedgers = examManualLedgerDao.getExamOrganManualLedgers(organId, examId, days);
+
+		Map<String, List<ExamRegistrationPayment>> dayPaymentMap = new HashMap<>();
+		if(!CollectionUtils.isEmpty(examRegistrationPayments)){
+			dayPaymentMap = examRegistrationPayments.stream().filter(e-> TransStatusEnum.SUCCESS.equals(e.getTransStatus())).collect(Collectors.groupingBy(e -> DateUtil.dateToString(e.getTransSuccessedTime())));
+		}
+		Map<String, List<ExamManualLedger>> dayLedgerMap = new HashMap<>();
+		if(!CollectionUtils.isEmpty(examOrganManualLedgers)){
+			dayLedgerMap = examOrganManualLedgers.stream().collect(Collectors.groupingBy(e -> DateUtil.dateToString(e.getTransTime())));
+		}
+
+		for (String day : dayTransAmount.keySet()) {
+			List<ExamManualLedger> dayLeders = dayLedgerMap.get(day);
+			if(CollectionUtils.isEmpty(dayLeders)){
+				continue;
+			}
+			BigDecimal amount = dayLeders.stream().map(ExamManualLedger::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+			dayTransAmount.put(day, amount);
+		}
+
+		for (String day : dayPaymentAmount.keySet()) {
+			List<ExamRegistrationPayment> dayPayments = dayPaymentMap.get(day);
+			if(CollectionUtils.isEmpty(dayPayments)){
+				continue;
+			}
+			BigDecimal amount = dayPayments.stream().map(ExamRegistrationPayment::getTransAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+			dayPaymentAmount.put(day, amount);
+		}
+
+		examOrganStatistics.setDayTransAmount(dayTransAmount);
+		examOrganStatistics.setDayPaymentAmount(dayPaymentAmount);
+		return examOrganStatistics;
+	}
+
+	@Override
+	public Map<String, Object> queryUnRelatedOrgans(ExamOrganizationRelationQueryInfo queryInfo) {
 		PageInfo<Organization> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
 		Map<String, Object> params = new HashMap<String, Object>();
 		MapUtil.populateMap(params, queryInfo);
@@ -319,7 +391,15 @@ public class ExamOrganizationRelationServiceImpl extends BaseServiceImpl<Long, E
 			params.put("offset", pageInfo.getOffset());
 			dataList = examOrganizationRelationDao.queryUnRelatedOrgans(params);
 		}
+		ExamOrganStatisticsDto examOrganizationRelation = examOrganizationRelationDao.getExamOrganizationRelation(queryInfo.getExamId().longValue(), queryInfo.getOrganId());
 		pageInfo.setRows(dataList);
-		return pageInfo;
+		Map<String, Object> result=new HashMap<>();
+		result.put("pageInfo", pageInfo);
+		if(Objects.nonNull(examOrganizationRelation)){
+			result.put("isAllowArrangeExam",examOrganizationRelation.getIsAllowArrangeExam());
+		}else{
+			result.put("isAllowArrangeExam",0);
+		}
+		return result;
 	}
 }

+ 6 - 1
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamRoomServiceImpl.java

@@ -16,6 +16,7 @@ import com.keao.edu.user.api.enums.ExamModeEnum;
 import com.keao.edu.user.dao.*;
 import com.keao.edu.user.dto.ExamRoomDto;
 import com.keao.edu.user.dto.ExamRoomStatisticsDto;
+import com.keao.edu.user.entity.ExamLifecycleLog;
 import com.keao.edu.user.entity.ExamOrganizationRelation;
 import com.keao.edu.user.entity.ExamRegistration;
 import com.keao.edu.user.entity.ExaminationBasic;
@@ -59,6 +60,8 @@ public class ExamRoomServiceImpl extends BaseServiceImpl<Long, ExamRoom> impleme
 	private StudentExamResultDao studentExamResultDao;
 	@Autowired
 	private ExamOrganizationRelationDao examOrganizationRelationDao;
+	@Autowired
+	private ExamLifecycleLogDao examLifecycleLogDao;
 
 	@Override
 	public BaseDAO<Long, ExamRoom> getDAO() {
@@ -266,12 +269,14 @@ public class ExamRoomServiceImpl extends BaseServiceImpl<Long, ExamRoom> impleme
 	}
 
 	@Override
-	public void sendExamPlan(Integer organId, Integer examId) {
+	public void sendExamPlan(Integer organId, Integer examId, Integer operatorId) {
 		List<Integer> nextLevelOrganIds = organizationService.getNextLevelOrganIds(organId, true);
 		int withoutExamRoomStudentNum = examRegistrationDao.countWithoutExamRoomStudentNum(nextLevelOrganIds, examId);
 		if(withoutExamRoomStudentNum>0){
 			throw new BizException("存在未安排教室的学员");
 		}
+
+		examLifecycleLogDao.insert(new ExamLifecycleLog(examId, "确认考试安排", operatorId));
 	}
 
 	@Override

+ 6 - 2
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamSubjectSongServiceImpl.java

@@ -177,7 +177,7 @@ public class ExamSubjectSongServiceImpl extends BaseServiceImpl<Long, ExamSubjec
 	}
 
 	@Override
-	public int delete(Long id) {
+	public void deleteExamSubjectSong(Long id) {
 		if(Objects.isNull(id)){
 			throw new BizException("参数错误");
 		}
@@ -193,7 +193,11 @@ public class ExamSubjectSongServiceImpl extends BaseServiceImpl<Long, ExamSubjec
 			&&!ExamStatusEnum.NOT_START.equals(examinationBasic.getStatus())){
 			throw new BizException("此状态无法删除");
 		}
-		return super.delete(id);
+		int i = examSubjectSongDao.countExamSongsWithSubject(examSubjectSong.getExaminationBasicId().longValue(),examSubjectSong.getExamSubjectId().intValue());
+		examSubjectSongDao.delete(id);
+		if(i<=1){
+			examSubjectDao.deleteWithExamSubject(examSubjectSong.getExaminationBasicId().longValue(), examSubjectSong.getExamSubjectId().intValue());
+		}
 	}
 
 	@Override

+ 61 - 6
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExaminationBasicServiceImpl.java

@@ -47,6 +47,8 @@ public class ExaminationBasicServiceImpl extends BaseServiceImpl<Long, Examinati
     private SysUserDao sysUserDao;
     @Autowired
     private OrganizationService organizationService;
+    @Autowired
+    private ExamLifecycleLogDao examLifecycleLogDao;
 
     @Override
     public BaseDAO<Long, ExaminationBasic> getDAO() {
@@ -105,6 +107,9 @@ public class ExaminationBasicServiceImpl extends BaseServiceImpl<Long, Examinati
         }
 
         examMusicTheoryDao.batchInsert(examMusicTheories);
+
+        examLifecycleLogDao.insert(new ExamLifecycleLog(examinationBasic.getId().intValue(), "创建项目", examinationBasic.getCreatorId()));
+
         return examinationBasic;
     }
 
@@ -118,9 +123,11 @@ public class ExaminationBasicServiceImpl extends BaseServiceImpl<Long, Examinati
         for (ExaminationBasic needUpdateStatusExam : needUpdateStatusExams) {
             if (now.compareTo(needUpdateStatusExam.getEnrollStartTime()) >= 0) {
                 needUpdateStatusExam.setStatus(ExamStatusEnum.APPLYING);
+                examLifecycleLogDao.insert(new ExamLifecycleLog(needUpdateStatusExam.getId().intValue(), "报名已开启", null, "定时任务自动更新"));
             }
             if (now.compareTo(needUpdateStatusExam.getEnrollEndTime()) >= 0) {
                 needUpdateStatusExam.setStatus(ExamStatusEnum.APPLIED);
+                examLifecycleLogDao.insert(new ExamLifecycleLog(needUpdateStatusExam.getId().intValue(), "报名已结束", null,"定时任务自动更新"));
             }
             if (Objects.nonNull(needUpdateStatusExam.getActualExamEndTime())
                     &&now.compareTo(needUpdateStatusExam.getActualExamEndTime()) >= 0) {
@@ -132,7 +139,7 @@ public class ExaminationBasicServiceImpl extends BaseServiceImpl<Long, Examinati
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void updateExamBasicStatus(Long examId, ExamStatusEnum statusEnum) {
+    public void updateExamBasicStatus(Long examId, ExamStatusEnum statusEnum, Integer operatorId) {
         if(Objects.isNull(examId)){
             throw new BizException("请指定考级项目");
         }
@@ -143,6 +150,27 @@ public class ExaminationBasicServiceImpl extends BaseServiceImpl<Long, Examinati
         if(ExamStatusEnum.RESULT_CONFIRM.equals(existsExam.getStatus())){
             throw new BizException("考级项目结果已确认");
         }
+        if(ExamStatusEnum.DELETE.equals(statusEnum)&&!ExamStatusEnum.SETTING.equals(existsExam.getStatus())){
+            throw new BizException("此状态不支持删除");
+        }
+        if(ExamStatusEnum.DELETE.equals(statusEnum)){
+            examLifecycleLogDao.insert(new ExamLifecycleLog(existsExam.getId().intValue(), "删除考级项目", operatorId));
+        }else if(ExamStatusEnum.RESULT_CONFIRM.equals(statusEnum)){
+            examLifecycleLogDao.insert(new ExamLifecycleLog(existsExam.getId().intValue(), "确认考试结果", operatorId));
+        }else if(ExamStatusEnum.CLOSE.equals(statusEnum)){
+            examLifecycleLogDao.insert(new ExamLifecycleLog(existsExam.getId().intValue(), "关闭考级项目", operatorId));
+        }
+        if(ExamStatusEnum.CLOSE.equals(existsExam.getStatus())){
+            examLifecycleLogDao.insert(new ExamLifecycleLog(existsExam.getId().intValue(), "开启考级项目", operatorId));
+        }
+        if(ExamStatusEnum.NOT_START.equals(existsExam.getStatus())&&ExamStatusEnum.APPLYING.equals(statusEnum)){
+            existsExam.setEnrollStartTime(new Date());
+            examLifecycleLogDao.insert(new ExamLifecycleLog(existsExam.getId().intValue(), "报名已开启", operatorId));
+        }
+        if(ExamStatusEnum.APPLYING.equals(existsExam.getStatus())&&ExamStatusEnum.APPLIED.equals(statusEnum)){
+            existsExam.setEnrollEndTime(new Date());
+            examLifecycleLogDao.insert(new ExamLifecycleLog(existsExam.getId().intValue(), "关闭报名连接", operatorId));
+        }
         existsExam.setStatus(statusEnum);
         examinationBasicDao.update(existsExam);
     }
@@ -210,7 +238,7 @@ public class ExaminationBasicServiceImpl extends BaseServiceImpl<Long, Examinati
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public int update(ExaminationBasic examinationBasic) {
+    public void updateExam(ExaminationBasic examinationBasic,Integer operatorId) {
         if(Objects.isNull(examinationBasic.getId())){
             throw new BizException("请指定考级项目");
         }
@@ -218,16 +246,43 @@ public class ExaminationBasicServiceImpl extends BaseServiceImpl<Long, Examinati
         if(Objects.isNull(existsExam)){
             throw new BizException("考级项目不存在");
         }
-        if(!ExamStatusEnum.SETTING.equals(existsExam.getStatus())){
-            throw new BizException("无法修改");
-        }
         if(ExamStatusEnum.RESULT_CONFIRM.equals(existsExam.getStatus())){
             throw new BizException("考级项目结果已确认");
         }
         if(ExamStatusEnum.CLOSE.equals(existsExam.getStatus())){
             throw new BizException("考级项目已关闭");
         }
-        return examinationBasicDao.update(examinationBasic);
+        if(Objects.nonNull(examinationBasic.getEnrollStartTime())
+                &&examinationBasic.getEnrollStartTime().compareTo(existsExam.getEnrollStartTime())!=0){
+            if(ExamStatusEnum.EXAM_ING.equals(existsExam.getStatus())||
+                    ExamStatusEnum.EXAM_END.equals(existsExam.getStatus())){
+                throw new BizException("无法修改");
+            }
+            examLifecycleLogDao.insert(new ExamLifecycleLog(existsExam.getId().intValue(), "修改报名时间", operatorId));
+        }
+        if(Objects.nonNull(examinationBasic.getEnrollEndTime())
+                &&examinationBasic.getEnrollEndTime().compareTo(existsExam.getEnrollEndTime())!=0){
+            if(ExamStatusEnum.EXAM_ING.equals(existsExam.getStatus())||
+                    ExamStatusEnum.EXAM_END.equals(existsExam.getStatus())){
+                throw new BizException("无法修改");
+            }
+            examLifecycleLogDao.insert(new ExamLifecycleLog(existsExam.getId().intValue(), "修改报名时间", operatorId));
+        }
+        if(Objects.nonNull(examinationBasic.getEnrollStartTime())&&Objects.nonNull(examinationBasic.getEnrollEndTime())&&!ExamStatusEnum.SETTING.equals(existsExam.getStatus())){
+            if(examinationBasic.getEnrollStartTime().compareTo(examinationBasic.getEnrollEndTime())>=0){
+                throw new BizException("参数错误");
+            }
+            Date now=new Date();
+            if(examinationBasic.getEnrollStartTime().compareTo(now)>0){
+                examinationBasic.setStatus(ExamStatusEnum.NOT_START);
+            }else if(examinationBasic.getEnrollEndTime().compareTo(now)<0){
+                examinationBasic.setStatus(ExamStatusEnum.CLOSE);
+            }else{
+                examinationBasic.setStatus(ExamStatusEnum.APPLYING);
+            }
+        }
+
+        examinationBasicDao.update(examinationBasic);
     }
 
     @Override

+ 79 - 0
edu-user/edu-user-server/src/main/resources/config/mybatis/ExamLifecycleLogMapper.xml

@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<!--
+这个文件是自动生成的。
+不要修改此文件。所有改动将在下次重新自动生成时丢失。
+-->
+<mapper namespace="com.keao.edu.user.dao.ExamLifecycleLogDao">
+	
+	<resultMap type="com.keao.edu.user.entity.ExamLifecycleLog" id="ExamLifecycleLog">
+		<result column="id_" property="id" />
+		<result column="examination_basic_id_" property="examinationBasicId" />
+		<result column="event_name_" property="eventName" />
+		<result column="operator_user_id_" property="operatorUserId" />
+		<result column="memo_" property="memo" />
+		<result column="create_time_" property="createTime" />
+	</resultMap>
+	
+	<!-- 根据主键查询一条记录 -->
+	<select id="get" resultMap="ExamLifecycleLog" >
+		SELECT * FROM exam_lifecycle_log WHERE id_ = #{id} 
+	</select>
+	
+	<!-- 全查询 -->
+	<select id="findAll" resultMap="ExamLifecycleLog">
+		SELECT * FROM exam_lifecycle_log ORDER BY id_
+	</select>
+	
+	<!-- 向数据库增加一条记录 -->
+	<insert id="insert" parameterType="com.keao.edu.user.entity.ExamLifecycleLog" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		<!--
+		<selectKey resultClass="int" keyProperty="id" > 
+		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
+		</selectKey>
+		-->
+		INSERT INTO exam_lifecycle_log (id_,examination_basic_id_,event_name_,operator_user_id_,memo_,create_time_)
+		VALUES(#{id},#{examinationBasicId},#{eventName},#{operatorUserId},#{memo},NOW())
+	</insert>
+	
+	<!-- 根据主键查询一条记录 -->
+	<update id="update" parameterType="com.keao.edu.user.entity.ExamLifecycleLog">
+		UPDATE exam_lifecycle_log
+		<set>
+			<if test="examinationBasicId != null">
+				examination_basic_id_ = #{examinationBasicId},
+			</if>
+			<if test="id != null">
+				id_ = #{id},
+			</if>
+			<if test="memo != null">
+				memo_ = #{memo},
+			</if>
+			<if test="operatorUserId != null">
+				operator_user_id_ = #{operatorUserId},
+			</if>
+			<if test="eventName != null">
+				event_name_ = #{eventName},
+			</if>
+		</set> WHERE id_ = #{id}
+	</update>
+	
+	<!-- 根据主键删除一条记录 -->
+	<delete id="delete" >
+		DELETE FROM exam_lifecycle_log WHERE id_ = #{id} 
+	</delete>
+	
+	<!-- 分页查询 -->
+	<select id="queryPage" resultMap="ExamLifecycleLog" parameterType="map">
+		SELECT * FROM exam_lifecycle_log ORDER BY id_ <include refid="global.limit"/>
+	</select>
+	
+	<!-- 查询当前表的总记录数 -->
+	<select id="queryCount" resultType="int">
+		SELECT COUNT(*) FROM exam_lifecycle_log
+	</select>
+
+    <select id="findWithExam" resultMap="ExamLifecycleLog">
+		SELECT * FROM exam_lifecycle_log WHERE examination_basic_id_=#{examId} ORDER BY id_ DESC
+	</select>
+</mapper>

+ 1 - 1
edu-user/edu-user-server/src/main/resources/config/mybatis/ExamLocationMapper.xml

@@ -77,7 +77,7 @@
 			<if test="search!=null">
 				AND (id_=#{search} OR name_ LIKE CONCAT('%', #{serch}, '%'))
 			</if>
-			<if test="tenantId != null">
+			<if test="tenantId != null and tenantId!=0">
 				AND tenant_id_ = #{tenantId}
 			</if>
 		</where>

+ 26 - 3
edu-user/edu-user-server/src/main/resources/config/mybatis/ExamManualLedgerMapper.xml

@@ -9,6 +9,7 @@
 	<resultMap type="com.keao.edu.user.entity.ExamManualLedger" id="ExamManualLedger">
 		<result column="id_" property="id" />
 		<result column="organ_id_" property="organId"/>
+		<result column="target_organ_id_" property="targetOrganId"/>
 		<result column="examination_basic_id_" property="examinationBasicId" />
 		<result column="trans_direction_" property="transDirection" />
 		<result column="amount_" property="amount" />
@@ -38,8 +39,8 @@
 		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
 		</selectKey>
 		-->
-		INSERT INTO exam_manual_ledger (organ_id_,examination_basic_id_,trans_direction_,amount_,trans_time_,memo_,operator_user_id_,tenant_id_,create_time_)
-		VALUES(#{organId},#{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_,memo_,operator_user_id_,tenant_id_,create_time_)
+		VALUES(#{organId},#{targetOrganId},#{examinationBasicId},#{transDirection},#{amount},#{transTime},#{memo},#{operatorUserId},#{tenantId},NOW())
 	</insert>
 	
 	<!-- 根据主键查询一条记录 -->
@@ -49,6 +50,9 @@
 			<if test="organId!=null">
 				organ_id_=#{organId},
 			</if>
+			<if test="targetOrganId!=null">
+				target_organ_id_=#{targetOrganId},
+			</if>
 			<if test="examinationBasicId != null">
 				examination_basic_id_ = #{examinationBasicId},
 			</if>
@@ -92,6 +96,9 @@
 	<sql id="queryExamManualLedgersCondition">
 		<where>
 			examination_basic_id_=#{examId}
+			<if test="organId!=null and organId!=0">
+				AND organ_id_=#{organId}
+			</if>
 		</where>
 	</sql>
 
@@ -102,7 +109,7 @@
 			su.real_name_ user_real_name_
 		FROM
 			exam_manual_ledger eml
-		LEFT JOIN organization o ON eml.organ_id_ = o.id_
+		LEFT JOIN organization o ON eml.target_organ_id_ = o.id_
 		LEFT JOIN sys_user su ON eml.operator_user_id_ = su.id_
 		<include refid="queryExamManualLedgersCondition"/>
 		ORDER BY id_
@@ -122,6 +129,22 @@
 			exam_manual_ledger
 		WHERE
 			examination_basic_id_ = #{examId}
+			<if test="organId!=null and organId!=0">
+				AND organ_id_=#{organId}
+			</if>
 			AND trans_direction_ = 'EXPENDITURE'
 	</select>
+    <select id="getExamOrganManualLedgers" resultMap="ExamManualLedger">
+		SELECT
+			*
+		FROM
+			exam_manual_ledger
+		WHERE
+			examination_basic_id_ = #{examId}
+			AND organ_id_ = #{organId}
+			AND DATE_FORMAT( trans_time_, '%Y-%m-%d' ) IN
+			<foreach collection="days" item="day" separator="," open="(" close=")">
+				#{day}
+			</foreach>
+    </select>
 </mapper>

+ 5 - 1
edu-user/edu-user-server/src/main/resources/config/mybatis/ExamOrganizationRelationMapper.xml

@@ -28,6 +28,10 @@
 	<resultMap id="ExamOrganizationRelationExtraDto" type="com.keao.edu.user.dto.ExamOrganizationRelationExtraDto" extends="ExamOrganizationRelation">
 		<result column="organ_name_" property="organizationName"/>
 	</resultMap>
+
+	<resultMap id="ExamOrganStatisticsDto" type="com.keao.edu.user.dto.ExamOrganStatisticsDto" extends="ExamOrganizationRelation">
+
+	</resultMap>
 	
 	<!-- 根据主键查询一条记录 -->
 	<select id="get" resultMap="ExamOrganizationRelation" >
@@ -319,7 +323,7 @@
     </select>
 
 	<!-- 获取项目合作机构关联信息 -->
-    <select id="getExamOrganizationRelation" resultMap="ExamOrganizationRelation">
+    <select id="getExamOrganizationRelation" resultMap="ExamOrganStatisticsDto">
 		SELECT * FROM exam_organization_relation WHERE examination_basic_id_=#{examId} AND organ_id_=#{OrganId} FOR UPDATE
 	</select>
 	<select id="getExamOrganizationRelations" resultMap="ExamOrganizationRelation">

+ 5 - 1
edu-user/edu-user-server/src/main/resources/config/mybatis/ExamRegistrationMapper.xml

@@ -212,6 +212,9 @@
 					#{organId}
 				</foreach>
 			</if>
+			<if test="studentId!=null">
+				AND er.student_id_=#{studentId}
+			</if>
 			<if test="examId!=null">
 				AND er.examination_basic_id_ = #{examId}
 			</if>
@@ -385,7 +388,7 @@
 		FROM
 			exam_registration er
 		WHERE
-			er.status_ NOT IN ('CANCEL')
+			er.status_ IN ('AUDIT_PASS', 'AUDIT_WAIT')
 			AND er.examination_basic_id_ = #{examId}
 			<if test="organIds!=null">
 				AND er.organ_id_ IN
@@ -401,6 +404,7 @@
 		FROM
 		exam_registration er
 		WHERE 1=1
+		AND er.status_ IN ('AUDIT_PASS', 'AUDIT_WAIT')
 		<if test="organIds!=null">
 			AND er.organ_id_ IN
 			<foreach collection="organIds" item="organI" separator="," open="(" close=")">

+ 13 - 0
edu-user/edu-user-server/src/main/resources/config/mybatis/ExamRegistrationPaymentMapper.xml

@@ -213,6 +213,19 @@
         AND trans_status_=#{transStatus,typeHandler=com.keao.edu.common.dal.CustomEnumTypeHandler}
         <![CDATA[ AND create_time_ <= ]]> #{beforeTime}
     </select>
+    <select id="getWithExamOrganAndDay" resultMap="ExamRegistrationPayment">
+        SELECT
+            *
+        FROM
+            exam_registration_payment
+        WHERE
+            examination_basic_id_ = #{examId}
+            AND organ_id_ = #{organId}
+            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">

+ 6 - 2
edu-user/edu-user-server/src/main/resources/config/mybatis/ExamSubjectMapper.xml

@@ -62,8 +62,12 @@
 	<delete id="delete" >
 		DELETE FROM exam_subject WHERE id_ = #{id} 
 	</delete>
-	
-	<!-- 分页查询 -->
+
+    <delete id="deleteWithExamSubject">
+		DELETE FROM exam_subject WHERE examination_basic_id_=#{examId} AND subject_id_=#{subjectId}
+    </delete>
+
+    <!-- 分页查询 -->
 	<select id="queryPage" resultMap="ExamSubject" parameterType="map">
 		SELECT * FROM exam_subject ORDER BY id_
 		<include refid="global.limit"/>

+ 3 - 0
edu-user/edu-user-server/src/main/resources/config/mybatis/ExamSubjectSongMapper.xml

@@ -162,4 +162,7 @@
 	<select id="getExamSubjectLevels" resultMap="ExamSubjectSong">
 		SELECT * FROM exam_subject_song WHERE examination_basic_id_=#{examinationBasicId} AND exam_subject_id_ = #{examSubjectId} ORDER BY level_ ASC
 	</select>
+    <select id="countExamSongsWithSubject" resultType="int">
+		SELECT COUNT(id_) FROM exam_subject_song WHERE examination_basic_id_=#{examId} AND exam_subject_id_=#{subjectId}
+    </select>
 </mapper>

+ 3 - 2
edu-user/edu-user-server/src/main/resources/config/mybatis/ExaminationBasicMapper.xml

@@ -101,7 +101,7 @@
 				poster_profile_ = #{posterProfile},
 			</if>
 			<if test="posterBackgroundImg != null">
-				poster_profile_ = #{posterBackgroundImg},
+				poster_background_img_ = #{posterBackgroundImg},
 			</if>
 			<if test="tenantId != null">
 				tenant_id_ = #{tenantId},
@@ -160,7 +160,7 @@
 					poster_profile_ = #{exam.posterProfile},
 				</if>
 				<if test="exam.posterBackgroundImg != null">
-					poster_profile_ = #{exam.posterBackgroundImg},
+					poster_background_img_ = #{exam.posterBackgroundImg},
 				</if>
 				<if test="exam.tenantId != null">
 					tenant_id_ = #{exam.tenantId},
@@ -213,6 +213,7 @@
 
 	<sql id="findExaminationBasicsCondition">
 		<where>
+			eb.status_!='DELETE'
 			<if test="organId!=null">
 				AND eor.organ_id_ = #{organId}
 			</if>

+ 1 - 1
edu-user/edu-user-server/src/main/resources/config/mybatis/OrganizationMapper.xml

@@ -148,7 +148,7 @@
 	</select>
 
 	<select id="getNextLevelOrganIds" resultType="int">
-		SELECT id_ FROM organization WHERE parent_organ_id_ =#{organId};
+		SELECT id_ FROM organization WHERE parent_organ_id_ =#{organId} AND id_!=#{organId};
 	</select>
     <select id="getOrgans" resultMap="Organization">
 		SELECT <include refid="organizationColumn"/> FROM organization o WHERE id_ IN

+ 1 - 0
edu-user/edu-user-server/src/main/resources/config/mybatis/StudentExamResultMapper.xml

@@ -217,6 +217,7 @@
 			AND er.student_id_ = ser.student_id_
 		WHERE
 			er.examination_basic_id_ = #{examId}
+			AND er.status_ IN ('AUDIT_PASS', 'AUDIT_WAIT')
 			<if test="organIds!=null">
 				AND er.organ_id_ IN
 				<foreach collection="organIds" item="organId" separator="," open="(" close=")">