Ver código fonte

Merge branch 'feature/0427-school' of http://git.dayaedu.com/yonge/mec into feature/0427-school

liujc 2 anos atrás
pai
commit
450e19e6d3

+ 9 - 1
cms/src/main/java/com/ym/mec/cms/controller/NewsController.java

@@ -89,7 +89,15 @@ public class NewsController extends BaseController {
             }
         }
 
-        Map<String, Object> params = new HashMap<String, Object>();
+        // 学校端排除部分条件
+        if (queryInfo.getType() == 29) {
+            // 重置分部编号列表
+            queryInfo.setOrganIdList(null);
+            // 重置分部编号
+            queryInfo.setOrganId(null);
+        }
+
+        Map<String, Object> params = new HashMap<>();
         MapUtil.populateMap(params, queryInfo);
         int count = sysNewsInformationDao.queryCount(params);
         if (count == 0) {

+ 21 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherAttendanceDao.java

@@ -3,6 +3,7 @@ package com.ym.mec.biz.dal.dao;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.TeacherAttendance;
 import com.ym.mec.biz.dal.enums.GroupType;
+import com.ym.mec.biz.dal.school.dto.TeacherAttendanceListDto;
 import com.ym.mec.biz.dal.school.dto.TeacherAttendanceSumDto;
 import com.ym.mec.biz.dal.school.page.TeacherAttendanceQueryInfo;
 import com.ym.mec.common.dal.BaseDAO;
@@ -271,4 +272,24 @@ public interface TeacherAttendanceDao extends BaseDAO<Long, TeacherAttendance> {
     List<TeacherAttendanceSumDto> queryTeacherAttendance(@Param("queryInfo") TeacherAttendanceQueryInfo queryInfo);
 
 	List<Map<Integer,Integer>> queryTeacherAttendanceForWeek(@Param("queryInfo") TeacherAttendanceQueryInfo queryInfo);
+
+	/**
+	* @description: 获取班级老师考勤列表
+	 * @param classGroupId
+	 * @param teacherId
+	* @return java.util.List<com.ym.mec.biz.dal.school.dto.TeacherAttendanceListDto>
+	* @author zx
+	* @date 2023/5/10 11:55
+	*/
+    List<TeacherAttendanceListDto> getClassTeacherAttendance(@Param("classGroupId") Integer classGroupId, @Param("teacherId") Integer teacherId);
+
+	/**
+	* @description: 获取课程关联的老师考勤
+	 * @param courseId
+	 * @param teacherId
+	* @return com.ym.mec.biz.dal.dto.TeacherAttendanceDto
+	* @author zx
+	* @date 2023/5/10 14:28
+	*/
+	com.ym.mec.biz.dal.school.dto.TeacherAttendanceDto getCourseTeacherAttendance(@Param("courseId") Long courseId, @Param("teacherId") Integer teacherId);
 }

+ 7 - 9
mec-biz/src/main/java/com/ym/mec/biz/dal/school/dto/TeacherAttendanceDto.java

@@ -10,22 +10,22 @@ import java.util.Date;
 @Data
 public class TeacherAttendanceDto {
     @ApiModelProperty(value = "签到状态:0异常,1正常")
-    private YesOrNoEnum signInStatus;
+    private Boolean signInStatus = false;
 
     @ApiModelProperty(value = "签到时间")
     private Date signInTime;
 
     @ApiModelProperty(value = "签退状态:0异常,1正常")
-    private YesOrNoEnum signOutStatus;
+    private Boolean signOutStatus = false;
 
     @ApiModelProperty(value = "签退时间")
     private Date signOutTime;
 
     @ApiModelProperty(value = "教学点签到状态")
-    private YesOrNoEnum signInAddressStatus;
+    private Boolean signInAddressStatus = false;
 
     @ApiModelProperty(value = "教学点签退状态")
-    private YesOrNoEnum signOutAddressStatus;
+    private Boolean signOutAddressStatus = false;
 
     @ApiModelProperty(value = "签到经纬度")
     private String signInLongitudeLatitude;
@@ -34,11 +34,9 @@ public class TeacherAttendanceDto {
     private String signOutLongitudeLatitude;
 
     @ApiModelProperty(value = "教学模式")
-    private TeachModeEnum teachModeEnum;
-
-    @ApiModelProperty(value = "教学点签退经纬度")
-    private String schoolOutLongitudeLatitude;
+    private TeachModeEnum teachMode;
 
     @ApiModelProperty(value = "教学点签到经纬度")
-    private String schoolInLongitudeLatitude;
+    private String schoolLongitudeLatitude;
+
 }

+ 1 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/SchoolStaffWrapper.java

@@ -38,10 +38,9 @@ public class SchoolStaffWrapper {
         @ApiModelProperty("分页行数")
         private Integer rows;
         
-        @ApiModelProperty("关键字匹配")
+        @ApiModelProperty("老师姓名/编号/手机号")
 		private String keyword;
 
-        @NotNull(message = "合作单位编号不能为空")
         @ApiModelProperty("合作单位编号")
         private Long schoolId;
 

+ 5 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleTeacherSalaryService.java

@@ -66,6 +66,8 @@ public interface CourseScheduleTeacherSalaryService extends BaseService<Long, Co
      */
     void practiceTeacherSalarySettlement(Integer tenantId);
 
+    Boolean getSignRange(String schoolLongitudeLatitude, String longitudeLatitude, String gpsRange);
+
     /**
      * @describe 教师乐团课课酬结算
      * @author Joburgess
@@ -329,4 +331,7 @@ public interface CourseScheduleTeacherSalaryService extends BaseService<Long, Co
     */
     void splitTeacherSalary(List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaryList, List<CourseScheduleTeacherSalary> teacherSalaries);
 
+    List<CourseScheduleTeacherSalary> findByCourseSchedule(Long courseScheduleId);
+
+    List<CourseScheduleTeacherSalary> findByCourseSchedules(List<Long> courseScheduleIds);
 }

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/TeacherAttendanceService.java

@@ -191,7 +191,7 @@ public interface TeacherAttendanceService extends BaseService<Long, TeacherAtten
 	* @author zx
 	* @date 2023/5/5 09:55
 	*/
-	TeacherAttendanceDto getCourseTeacherAttendance(Long courseId);
+	TeacherAttendanceDto getCourseTeacherAttendance(Long courseId, Integer teacherId);
 
     Map<Long,TeacherAttendance> getMapByCourseIds(List<Long> courseIds);
 }

+ 12 - 12
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java

@@ -2,11 +2,9 @@ package com.ym.mec.biz.service.impl;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
-import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.*;
-import com.ym.mec.biz.dal.entity.SalarySettlementDto;
 import com.ym.mec.biz.dal.entity.CourseSchedule.CourseScheduleType;
 import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.page.CourseSalaryQueryInfo4Web;
@@ -15,10 +13,8 @@ import com.ym.mec.biz.dal.page.ExportTeacherSalaryQueryInfo;
 import com.ym.mec.biz.dal.page.TeacherIncomeQueryInfo;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.constant.CommonConstants;
-import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
-import com.ym.mec.common.filters.TenantIdThreadLocal;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.common.tenant.TenantContextHolder;
@@ -27,31 +23,24 @@ import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 
 import org.apache.commons.lang3.StringUtils;
-import org.apache.poi.ss.formula.functions.T;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.http.HttpStatus;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.transaction.interceptor.TransactionAspectSupport;
 import org.springframework.util.CollectionUtils;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
-import java.text.DateFormat;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoField;
 import java.time.temporal.TemporalAdjusters;
 import java.util.*;
-import java.util.function.BiConsumer;
-import java.util.function.BiFunction;
-import java.util.function.Function;
 import java.util.stream.Collectors;
 
 @Service
@@ -659,7 +648,8 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
         return getCutAmount(cutSalary,cutSalaryUnit,salary);
     }
 
-    public Boolean getSignRange(String schoolLongitudeLatitude,String longitudeLatitude,String gpsRange){
+    @Override
+    public Boolean getSignRange(String schoolLongitudeLatitude, String longitudeLatitude, String gpsRange){
         if(StringUtils.isEmpty(gpsRange)){
             return true;
         }
@@ -2441,4 +2431,14 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
         courseScheduleTeacherSalaryDao.batchInsert(courseScheduleTeacherSalaryList);
     }
 
+    @Override
+    public List<CourseScheduleTeacherSalary> findByCourseSchedule(Long courseScheduleId) {
+        return courseScheduleTeacherSalaryDao.findByCourseSchedule(courseScheduleId);
+    }
+
+    @Override
+    public List<CourseScheduleTeacherSalary> findByCourseSchedules(List<Long> courseScheduleIds) {
+        return courseScheduleTeacherSalaryDao.findByCourseSchedules(courseScheduleIds);
+    }
+
 }

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SchoolStaffServiceImpl.java

@@ -105,6 +105,14 @@ public class SchoolStaffServiceImpl extends ServiceImpl<SchoolStaffMapper, Schoo
             throw new BizException("合作单位编号无效");
         }
 
+        // 合作单位状态判断
+        if (!cooperation.getIsEnable()) {
+            // 删除缓存锁
+            redissonClient.getBucket(submitLockKey).delete();
+
+            throw new BizException("合作单位已禁用");
+        }
+
         // 系统用户信息
         SysUser user = getSysUser(schoolStaff, cooperation);
 

+ 38 - 7
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java

@@ -65,7 +65,7 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 	@Autowired
 	private SendMessageSource sendMessageSource;
 	@Autowired
-	private CourseScheduleTeacherSalaryDao courseScheduleTeacherSalaryDao;
+	private CourseScheduleTeacherSalaryService courseScheduleTeacherSalaryService;
 	@Autowired
 	private ClassGroupDao classGroupDao;
 	@Autowired
@@ -723,7 +723,7 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 		List<CourseSchedule> courseSchedules = courseScheduleDao.findByCourseScheduleIds(courseScheduleIds);
 		Map<Long, CourseSchedule> idCourseMap = courseSchedules.stream().collect(Collectors.toMap(CourseSchedule::getId, c -> c, (c1, c2) -> c1));
 
-		List<CourseScheduleTeacherSalary> courseScheduleTeacherSalarys = courseScheduleTeacherSalaryDao.findByCourseSchedules(courseScheduleIds);
+		List<CourseScheduleTeacherSalary> courseScheduleTeacherSalarys = courseScheduleTeacherSalaryService.findByCourseSchedules(courseScheduleIds);
 		Map<Long, List<CourseScheduleTeacherSalary>> courseTeacherSalaryMap = new HashMap<>();
 		if(!CollectionUtils.isEmpty(courseScheduleTeacherSalarys)){
 			courseTeacherSalaryMap = courseScheduleTeacherSalarys.stream().collect(Collectors.groupingBy(CourseScheduleTeacherSalary::getCourseScheduleId));
@@ -795,7 +795,7 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 			throw new BizException("课程不存在");
 		}
 
-		List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries = courseScheduleTeacherSalaryDao.findByCourseSchedule(teacherAttendanceInfo.getCourseScheduleId());
+		List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries = courseScheduleTeacherSalaryService.findByCourseSchedule(teacherAttendanceInfo.getCourseScheduleId());
 		if(!CollectionUtils.isEmpty(courseScheduleTeacherSalaries)&&Objects.nonNull(courseScheduleTeacherSalaries.get(0).getSettlementTime())){
 			throw new BizException("此课程已结算");
 		}
@@ -1167,13 +1167,44 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 
 	@Override
 	public List<TeacherAttendanceListDto> getClassTeacherAttendance(Integer classGroupId, Integer teacherId) {
-
-		return null;
+		List<TeacherAttendanceListDto> attendanceDtos = teacherAttendanceDao.getClassTeacherAttendance(classGroupId,teacherId);
+		Integer tenantId = TenantContextHolder.getTenantId();
+		//计算考勤范围
+		//定位范围
+		String attendanceRange = sysTenantConfigService.getTenantConfigValue(SysConfigService.ATTENDANCE_RANGE,tenantId);
+		if(CollectionUtils.isNotEmpty(attendanceDtos)){
+			for (TeacherAttendanceListDto attendanceDto : attendanceDtos) {
+				if(attendanceDto.getTeachMode() == TeachModeEnum.OFFLINE){
+					if(StringUtils.isNotEmpty(attendanceDto.getSignInLongitudeLatitude())){
+						boolean signRange = courseScheduleTeacherSalaryService.getSignRange(attendanceDto.getSchoolLongitudeLatitude(), attendanceDto.getSignInLongitudeLatitude(), attendanceRange);
+						attendanceDto.setSignInAddressStatus(signRange);
+					}
+					if(StringUtils.isNotEmpty(attendanceDto.getSignOutLongitudeLatitude())){
+						boolean signRange1 = courseScheduleTeacherSalaryService.getSignRange(attendanceDto.getSchoolLongitudeLatitude(), attendanceDto.getSignOutLongitudeLatitude(), attendanceRange);
+						attendanceDto.setSignOutAddressStatus(signRange1);
+					}
+				}
+			}
+		}
+		return attendanceDtos;
 	}
 
 	@Override
-	public com.ym.mec.biz.dal.school.dto.TeacherAttendanceDto getCourseTeacherAttendance(Long courseId) {
-		return null;
+	public com.ym.mec.biz.dal.school.dto.TeacherAttendanceDto getCourseTeacherAttendance(Long courseId, Integer teacherId) {
+		com.ym.mec.biz.dal.school.dto.TeacherAttendanceDto attendanceDto = teacherAttendanceDao.getCourseTeacherAttendance(courseId,teacherId);
+		if(attendanceDto.getTeachMode() == TeachModeEnum.OFFLINE){
+			Integer tenantId = TenantContextHolder.getTenantId();
+			String attendanceRange = sysTenantConfigService.getTenantConfigValue(SysConfigService.ATTENDANCE_RANGE,tenantId);
+			if(StringUtils.isNotEmpty(attendanceDto.getSignInLongitudeLatitude())){
+				boolean signRange = courseScheduleTeacherSalaryService.getSignRange(attendanceDto.getSchoolLongitudeLatitude(), attendanceDto.getSignInLongitudeLatitude(), attendanceRange);
+				attendanceDto.setSignInAddressStatus(signRange);
+			}
+			if(StringUtils.isNotEmpty(attendanceDto.getSignOutLongitudeLatitude())){
+				boolean signRange1 = courseScheduleTeacherSalaryService.getSignRange(attendanceDto.getSchoolLongitudeLatitude(), attendanceDto.getSignOutLongitudeLatitude(), attendanceRange);
+				attendanceDto.setSignOutAddressStatus(signRange1);
+			}
+		}
+		return attendanceDto;
 	}
 
     @Override

+ 2 - 2
mec-biz/src/main/resources/config/mybatis/CooperationOrganLinkmanMapper.xml

@@ -38,10 +38,10 @@
 	
 	<insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
 		INSERT INTO cooperation_organ_linkman
-		(id_,cooperation_organ_id_,linkman_,mobile_no_,job_,create_time_,tenant_id_)
+		(id_,cooperation_organ_id_,linkman_,mobile_no_,job_,create_time_,tenant_id_,logo_)
 		VALUES
 		<foreach collection="list" item="item" separator=",">
-		(#{item.id},#{item.cooperationOrganId},#{item.linkman},#{item.mobileNo},#{item.job},#{item.createTime},#{item.tenantId})
+		(#{item.id},#{item.cooperationOrganId},#{item.linkman},#{item.mobileNo},#{item.job},#{item.createTime},#{item.tenantId},#{item.logo})
 		</foreach>
 	</insert>
 

+ 20 - 0
mec-biz/src/main/resources/config/mybatis/TeacherAttendanceMapper.xml

@@ -666,6 +666,26 @@
         <include refid="queryTeacherAttendanceSql"/>
         group by cs.actual_teacher_id_
     </select>
+    <select id="getClassTeacherAttendance" resultType="com.ym.mec.biz.dal.school.dto.TeacherAttendanceListDto">
+        select cs.type_ courseScheduleType,CONCAT(cs.class_date_,' ',cs.start_class_time_,'~',cs.end_class_time_) classDate,
+               ta.sign_in_time_ signInTime,ta.sign_in_status_ signInStatus,ta.sign_in_longitude_latitude_ signInLongitudeLatitude,
+               ta.sign_out_time_ signOutTime,ta.sign_out_status_ signOutStatus,ta.sign_out_longitude_latitude_ signOutLongitudeLatitude,
+               s.longitude_latitude_ schoolLongitudeLatitude,cs.teach_mode_ teachMode
+        from course_schedule cs
+        left join teacher_attendance ta ON cs.id_ = ta.course_schedule_id_ AND ta.teacher_id_ = cs.actual_teacher_id_
+        left join school s ON s.id_ = cs.schoole_id_
+        where cs.class_group_id_ = #{classGroupId} and cs.actual_teacher_id_ = #{teacherId} AND CONCAT(cs.class_date_,' ',cs.start_class_time_) &lt; NOW()
+        AND cs.is_lock_ = 0 AND cs.del_flag_ = 0 AND cs.pre_course_flag_ = 0 AND cs.new_course_id_ IS NULL
+    </select>
+    <select id="getCourseTeacherAttendance" resultType="com.ym.mec.biz.dal.school.dto.TeacherAttendanceDto">
+        select ta.sign_in_time_ signInTime,ta.sign_in_status_ signInStatus,ta.sign_in_longitude_latitude_ signInLongitudeLatitude,
+               ta.sign_out_time_ signOutTime,ta.sign_out_status_ signOutStatus,ta.sign_out_longitude_latitude_ signOutLongitudeLatitude,
+               s.longitude_latitude_ schoolLongitudeLatitude,cs.teach_mode_ teachMode
+        from course_schedule cs
+                 left join teacher_attendance ta ON cs.id_ = ta.course_schedule_id_ AND ta.teacher_id_ = cs.actual_teacher_id_
+                 left join school s ON s.id_ = cs.schoole_id_
+        where cs.id_ = #{courseId} and cs.actual_teacher_id_ = #{teacherId}
+    </select>
     <update id="updateViPSignOutStatus" parameterType="string">
     	UPDATE teacher_attendance SET sign_out_status_ = 1,sign_out_time_= now()
     	WHERE FIND_IN_SET(course_schedule_id_,#{courseScheduleIdList}) AND sign_in_status_ = 1

+ 3 - 2
mec-web/src/main/java/com/ym/mec/web/controller/school/SchoolTeacherAttendanceController.java

@@ -49,11 +49,12 @@ public class SchoolTeacherAttendanceController extends BaseController {
 
     @ApiImplicitParams({
             @ApiImplicitParam(name = "courseId", dataType = "Long", required = true, value = "课程编号"),
+            @ApiImplicitParam(name = "teacherId", dataType = "Integer", required = true, value = "老师编号"),
     })
     @ApiOperation(value = "课时获取单节课老师考勤详情----获取课程老师考勤")
     @GetMapping("/getCourseTeacherAttendance")
-    public HttpResponseResult<TeacherAttendanceDto> getCourseTeacherAttendance(Long courseId) {
-        return succeed(teacherAttendanceService.getCourseTeacherAttendance(courseId));
+    public HttpResponseResult<TeacherAttendanceDto> getCourseTeacherAttendance(Long courseId, Integer teacherId) {
+        return succeed(teacherAttendanceService.getCourseTeacherAttendance(courseId,teacherId));
     }