Browse Source

Merge remote-tracking branch 'origin/master'

周箭河 5 years ago
parent
commit
dafb605806
20 changed files with 453 additions and 22 deletions
  1. 13 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java
  2. 14 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleTeacherSalaryDao.java
  3. 110 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherSalaryDto.java
  4. 5 5
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/VipGroupCategory.java
  5. 64 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/CourseScheduleTeacherSalaryQueryInfo.java
  6. 11 3
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java
  7. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleTeacherSalaryService.java
  8. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ContractServiceImpl.java
  9. 16 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  10. 23 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java
  11. 10 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentAttendanceServiceImpl.java
  12. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java
  13. 6 0
      mec-biz/src/main/resources/config/contracts/courses.ftl
  14. 6 0
      mec-biz/src/main/resources/config/contracts/goods.ftl
  15. 12 1
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  16. 57 3
      mec-biz/src/main/resources/config/mybatis/CourseScheduleTeacherSalaryMapper.xml
  17. 2 2
      mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml
  18. 2 2
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/eseal/provider/TsignPlugin.java
  19. 8 0
      mec-web/src/main/java/com/ym/mec/web/controller/CourseScheduleController.java
  20. 72 0
      mec-web/src/main/java/com/ym/mec/web/controller/CourseScheduleTeacherSalaryController.java

+ 13 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java

@@ -22,7 +22,8 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      * @param courseID
      * @param courseID
      * @return
      * @return
      */
      */
-    TeacherAttendanceDto getCurrentCourseDetail(@Param("courseID") Long courseID);
+    TeacherAttendanceDto getCurrentCourseDetail(@Param("courseID") Long courseID,
+                                                @Param("teacherId") Integer teacherId);
 
 
     /**
     /**
      * @param startTime:
      * @param startTime:
@@ -58,6 +59,17 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
     int batchDeleteCourseSchedules(@Param("courseScheduleIds") List<Long> courseScheduleIds);
     int batchDeleteCourseSchedules(@Param("courseScheduleIds") List<Long> courseScheduleIds);
 
 
     /**
     /**
+     * @describe 获取指定乐团下对应状态的课程编号列表
+     * @author Joburgess
+     * @date 2019/11/16
+     * @param musicGroupId:乐团编号
+     * @param status: 状态
+     * @return java.util.List<java.lang.Integer>
+     */
+    List<CourseSchedule> findMusicGroupCourseSchedules(@Param("musicGroupId") String musicGroupId,
+                                               @Param("status") String status);
+
+    /**
      * @param teacherId: 教师编号
      * @param teacherId: 教师编号
      * @param classDate: 上课日期
      * @param classDate: 上课日期
      * @param startTime: 开始时间
      * @param startTime: 开始时间

+ 14 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleTeacherSalaryDao.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.dal.dao;
 package com.ym.mec.biz.dal.dao;
 
 
 import com.ym.mec.biz.dal.dto.CourseScheduleTeachersDto;
 import com.ym.mec.biz.dal.dto.CourseScheduleTeachersDto;
+import com.ym.mec.biz.dal.dto.TeacherSalaryDto;
 import com.ym.mec.biz.dal.dto.VipGroupSalaryDto;
 import com.ym.mec.biz.dal.dto.VipGroupSalaryDto;
 import com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary;
 import com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.dal.BaseDAO;
@@ -142,4 +143,17 @@ public interface CourseScheduleTeacherSalaryDao extends BaseDAO<Long, CourseSche
 	 */
 	 */
 	List<Map<String, BigDecimal>> countTeacherOnlineOfflineSalaryByClass(@Param("classGroupId") Integer classGroupId);
 	List<Map<String, BigDecimal>> countTeacherOnlineOfflineSalaryByClass(@Param("classGroupId") Integer classGroupId);
 
 
+	/**
+	 * count教师薪酬
+	 * @param params
+	 * @return
+	 */
+	int countSalaries(Map<String, Object> params);
+
+	/**
+	 * query教师薪酬
+	 * @param params
+	 * @return
+	 */
+	List<TeacherSalaryDto> querySalaries(Map<String, Object> params);
 }
 }

+ 110 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherSalaryDto.java

@@ -0,0 +1,110 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.biz.dal.entity.CourseSchedule;
+import com.ym.mec.biz.dal.enums.TeachTypeEnum;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+public class TeacherSalaryDto{
+
+    @ApiModelProperty(value = "用户名编号",required = false)
+    private Integer userId;
+
+    @ApiModelProperty(value = "用户名",required = false)
+    private String username;
+
+    @ApiModelProperty(value = "手机号",required = false)
+    private String phone;
+
+    @ApiModelProperty(value = "课程类型",required = false)
+    private CourseSchedule.CourseScheduleType type;
+
+    @ApiModelProperty(value = "课程名",required = false)
+    private String name;
+
+    @ApiModelProperty(value = "实际薪水",required = false)
+    private BigDecimal actualSalary;
+
+    @ApiModelProperty(value = "补助",required = false)
+    private BigDecimal subsidy;
+
+    @ApiModelProperty(value = "结算时间",required = false)
+    private Date settlementTime;
+
+    @ApiModelProperty(value = "教师类型",required = false)
+    private TeachTypeEnum teacherRole;
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
+    public CourseSchedule.CourseScheduleType getType() {
+        return type;
+    }
+
+    public void setType(CourseSchedule.CourseScheduleType type) {
+        this.type = type;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public BigDecimal getActualSalary() {
+        return actualSalary;
+    }
+
+    public void setActualSalary(BigDecimal actualSalary) {
+        this.actualSalary = actualSalary;
+    }
+
+    public BigDecimal getSubsidy() {
+        return subsidy;
+    }
+
+    public void setSubsidy(BigDecimal subsidy) {
+        this.subsidy = subsidy;
+    }
+
+    public Date getSettlementTime() {
+        return settlementTime;
+    }
+
+    public void setSettlementTime(Date settlementTime) {
+        this.settlementTime = settlementTime;
+    }
+
+    public TeachTypeEnum getTeacherRole() {
+        return teacherRole;
+    }
+
+    public void setTeacherRole(TeachTypeEnum teacherRole) {
+        this.teacherRole = teacherRole;
+    }
+}

+ 5 - 5
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/VipGroupCategory.java

@@ -1,11 +1,11 @@
 package com.ym.mec.biz.dal.entity;
 package com.ym.mec.biz.dal.entity;
 
 
-import com.fasterxml.jackson.annotation.JsonInclude;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
-import org.apache.commons.lang3.builder.ToStringBuilder;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 
 
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
 /**
 /**
  * 对应数据库表(vip_group_category):
  * 对应数据库表(vip_group_category):
  */
  */
@@ -27,7 +27,7 @@ public class VipGroupCategory {
 	private java.util.Date updateTime;
 	private java.util.Date updateTime;
 	
 	
 	@ApiModelProperty(value = "单节课时",required = false)
 	@ApiModelProperty(value = "单节课时",required = false)
-	private Integer singleClassMinutes;
+	private String singleClassMinutes;
 	
 	
 	@ApiModelProperty(value = "学生数",required = false)
 	@ApiModelProperty(value = "学生数",required = false)
 	private Integer studentNum;
 	private Integer studentNum;
@@ -94,11 +94,11 @@ public class VipGroupCategory {
 		return this.updateTime;
 		return this.updateTime;
 	}
 	}
 			
 			
-	public void setSingleClassMinutes(Integer singleClassMinutes){
+	public void setSingleClassMinutes(String singleClassMinutes){
 		this.singleClassMinutes = singleClassMinutes;
 		this.singleClassMinutes = singleClassMinutes;
 	}
 	}
 	
 	
-	public Integer getSingleClassMinutes(){
+	public String getSingleClassMinutes(){
 		return this.singleClassMinutes;
 		return this.singleClassMinutes;
 	}
 	}
 			
 			

+ 64 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/CourseScheduleTeacherSalaryQueryInfo.java

@@ -0,0 +1,64 @@
+package com.ym.mec.biz.dal.page;
+
+import com.ym.mec.common.page.QueryInfo;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.Date;
+
+public class CourseScheduleTeacherSalaryQueryInfo extends QueryInfo {
+
+    @ApiModelProperty(value = "分部编号",required = false)
+    private Integer organId;
+
+    @ApiModelProperty(value = "结算开始时间",required = false)
+    private Date startTime;
+
+    @ApiModelProperty(value = "结算结束时间",required = false)
+    private Date endTime;
+
+    @ApiModelProperty(value = "教师编号",required = false)
+    private Integer teacherId;
+
+    @ApiModelProperty(value = "课程类型",required = false)
+    private String courseScheduleType;
+
+    public Integer getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(Integer organId) {
+        this.organId = organId;
+    }
+
+    public Date getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(Date startTime) {
+        this.startTime = startTime;
+    }
+
+    public Date getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(Date endTime) {
+        this.endTime = endTime;
+    }
+
+    public Integer getTeacherId() {
+        return teacherId;
+    }
+
+    public void setTeacherId(Integer teacherId) {
+        this.teacherId = teacherId;
+    }
+
+    public String getCourseScheduleType() {
+        return courseScheduleType;
+    }
+
+    public void setCourseScheduleType(String courseScheduleType) {
+        this.courseScheduleType = courseScheduleType;
+    }
+}

+ 11 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java

@@ -13,7 +13,6 @@ import com.ym.mec.biz.dal.page.StudentCourseScheduleRecordQueryInfo;
 import com.ym.mec.biz.dal.page.VipGroupQueryInfo;
 import com.ym.mec.biz.dal.page.VipGroupQueryInfo;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
 import com.ym.mec.common.service.BaseService;
-import org.apache.commons.collections.iterators.ObjectGraphIterator;
 
 
 import java.util.Date;
 import java.util.Date;
 import java.util.List;
 import java.util.List;
@@ -29,15 +28,24 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
 	TeacherAttendanceDto getCurrentCourseDetail(Long courseID);
 	TeacherAttendanceDto getCurrentCourseDetail(Long courseID);
 
 
 	/**
 	/**
-	 * @describe 根据课程编号删除课程计划及对应的学生缴费、教师课酬记录
+	 * @describe 根据课程编号删除课程计划及对应的学生缴费、教师课酬记录、教师签到记录
 	 * @author Joburgess
 	 * @author Joburgess
 	 * @date 2019/10/31
 	 * @date 2019/10/31
-	 * @param courseScheduleIds:
+	 * @param courseScheduleIds: 课程计划编号列表
 	 * @return int
 	 * @return int
 	 */
 	 */
 	void deleteCourseSchedules(List<Long> courseScheduleIds);
 	void deleteCourseSchedules(List<Long> courseScheduleIds);
 
 
 	/**
 	/**
+	 * @describe 删除乐团下所有未上的课时
+	 * @author Joburgess
+	 * @date 2019/11/16
+	 * @param musicGroupId:
+	 * @return void
+	 */
+	void batchDeleteMusicGroupNotStartCourse(String musicGroupId);
+
+	/**
 	 * @describe 判断该课程是否只能进行正常签到
 	 * @describe 判断该课程是否只能进行正常签到
 	 * @author Joburgess
 	 * @author Joburgess
 	 * @date 2019/11/5
 	 * @date 2019/11/5

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

@@ -1,8 +1,11 @@
 package com.ym.mec.biz.service;
 package com.ym.mec.biz.service;
 
 
+import com.ym.mec.biz.dal.dto.TeacherSalaryDto;
 import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary;
 import com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary;
 import com.ym.mec.biz.dal.entity.VipGroup;
 import com.ym.mec.biz.dal.entity.VipGroup;
+import com.ym.mec.biz.dal.page.CourseScheduleTeacherSalaryQueryInfo;
+import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
 import com.ym.mec.common.service.BaseService;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
@@ -51,4 +54,10 @@ public interface CourseScheduleTeacherSalaryService extends BaseService<Long, Co
      */
      */
     void musicGroupTeacherSalarySettlement();
     void musicGroupTeacherSalarySettlement();
 
 
+    /**
+     * 获取教师薪酬列表
+     * @param queryInfo
+     * @return
+     */
+    PageInfo<TeacherSalaryDto> querySalaries(CourseScheduleTeacherSalaryQueryInfo queryInfo);
 }
 }

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

@@ -265,6 +265,8 @@ public class ContractServiceImpl implements ContractService {
 		} else {
 		} else {
 			params.put("paymentcalender", calenders.stream().map(cal -> cal.getPaymentMonth().toString()).collect(Collectors.joining(",")));
 			params.put("paymentcalender", calenders.stream().map(cal -> cal.getPaymentMonth().toString()).collect(Collectors.joining(",")));
 		}
 		}
+		
+		params.put("isShowVisualSeal", false);
 
 
 		templateEngine.render(params, "courses.ftl", srcFile);
 		templateEngine.render(params, "courses.ftl", srcFile);
 
 
@@ -340,6 +342,8 @@ public class ContractServiceImpl implements ContractService {
 		} else {
 		} else {
 			params.put("paymentcalender", calenders.stream().map(cal -> cal.getPaymentMonth().toString()).collect(Collectors.joining(",")));
 			params.put("paymentcalender", calenders.stream().map(cal -> cal.getPaymentMonth().toString()).collect(Collectors.joining(",")));
 		}
 		}
+		
+		params.put("isShowVisualSeal", true);
 
 
 		templateEngine.render(params, "courses.ftl", srcFile);
 		templateEngine.render(params, "courses.ftl", srcFile);
 
 
@@ -397,6 +401,8 @@ public class ContractServiceImpl implements ContractService {
 
 
 		// 收费形式
 		// 收费形式
 		params.put("paymentcalender", "一次性");
 		params.put("paymentcalender", "一次性");
+		
+		params.put("isShowVisualSeal", false);
 
 
 		templateEngine.render(params, "courses.ftl", srcFile);
 		templateEngine.render(params, "courses.ftl", srcFile);
 
 
@@ -461,6 +467,8 @@ public class ContractServiceImpl implements ContractService {
 
 
 		// 收费形式
 		// 收费形式
 		params.put("paymentcalender", "一次性");
 		params.put("paymentcalender", "一次性");
+		
+		params.put("isShowVisualSeal", true);
 
 
 		templateEngine.render(params, "courses.ftl", srcFile);
 		templateEngine.render(params, "courses.ftl", srcFile);
 
 
@@ -521,6 +529,8 @@ public class ContractServiceImpl implements ContractService {
 		}
 		}
 		params.put("depositFee", musicGroupSubjectPlan.getDepositFee().doubleValue());
 		params.put("depositFee", musicGroupSubjectPlan.getDepositFee().doubleValue());
 		params.put("depositFeeFmt", MoneyUtil.toChinese(musicGroupSubjectPlan.getDepositFee().toString()));
 		params.put("depositFeeFmt", MoneyUtil.toChinese(musicGroupSubjectPlan.getDepositFee().toString()));
+		
+		params.put("isShowVisualSeal", false);
 
 
 		templateEngine.render(params, "goods.ftl", srcFile);
 		templateEngine.render(params, "goods.ftl", srcFile);
 
 
@@ -589,6 +599,8 @@ public class ContractServiceImpl implements ContractService {
 		}
 		}
 		params.put("depositFee", musicGroupSubjectPlan.getDepositFee().doubleValue());
 		params.put("depositFee", musicGroupSubjectPlan.getDepositFee().doubleValue());
 		params.put("depositFeeFmt", MoneyUtil.toChinese(musicGroupSubjectPlan.getDepositFee().toString()));
 		params.put("depositFeeFmt", MoneyUtil.toChinese(musicGroupSubjectPlan.getDepositFee().toString()));
+		
+		params.put("isShowVisualSeal", true);
 
 
 		templateEngine.render(params, "goods.ftl", srcFile);
 		templateEngine.render(params, "goods.ftl", srcFile);
 
 

+ 16 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -92,7 +92,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 		if(Objects.isNull(courseID)){
 		if(Objects.isNull(courseID)){
 			throw new BizException("参数错误!");
 			throw new BizException("参数错误!");
 		}
 		}
-		TeacherAttendanceDto currentCourseDetail = courseScheduleDao.getCurrentCourseDetail(courseID);
+		TeacherAttendanceDto currentCourseDetail = courseScheduleDao.getCurrentCourseDetail(courseID,user.getId());
 		if(Objects.isNull(currentCourseDetail)){
 		if(Objects.isNull(currentCourseDetail)){
 		    throw new BizException("课程不存在");
 		    throw new BizException("课程不存在");
         }
         }
@@ -118,6 +118,21 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 	}
 	}
 
 
 	@Override
 	@Override
+	public void batchDeleteMusicGroupNotStartCourse(String musicGroupId) {
+		if(StringUtils.isBlank(musicGroupId)){
+			throw new BizException("请指定乐团");
+		}
+		List<CourseSchedule> musicGroupCourseSchedules = courseScheduleDao.findMusicGroupCourseSchedules(musicGroupId, CourseStatusEnum.NOT_START.getCode());
+		if(CollectionUtils.isEmpty(musicGroupCourseSchedules)){
+			throw new BizException("此乐团不存在未上课程");
+		}
+		List<Long> courseScheduleIds = musicGroupCourseSchedules.stream()
+								.map(CourseSchedule::getId)
+								.collect(Collectors.toList());
+		deleteCourseSchedules(courseScheduleIds);
+	}
+
+	@Override
 	public YesOrNoEnum enableOnlyNormalAttendance(Date startClassTime,Long userId,boolean checkSchool,Integer schoolId){
 	public YesOrNoEnum enableOnlyNormalAttendance(Date startClassTime,Long userId,boolean checkSchool,Integer schoolId){
 		Date endTime=startClassTime;
 		Date endTime=startClassTime;
 		Date startTime=DateUtil.addHours(endTime,-1);
 		Date startTime=DateUtil.addHours(endTime,-1);

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

@@ -1,11 +1,14 @@
 package com.ym.mec.biz.service.impl;
 package com.ym.mec.biz.service.impl;
 
 
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dao.*;
+import com.ym.mec.biz.dal.dto.TeacherSalaryDto;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.enums.*;
+import com.ym.mec.biz.dal.page.CourseScheduleTeacherSalaryQueryInfo;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.date.DateUtil;
@@ -467,4 +470,24 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
         });
         });
         sysUserCashAccountDetailDao.batchInsert(userCashAccountDetails);
         sysUserCashAccountDetailDao.batchInsert(userCashAccountDetails);
     }
     }
+
+    @Override
+    public PageInfo<TeacherSalaryDto> querySalaries(CourseScheduleTeacherSalaryQueryInfo queryInfo) {
+        PageInfo<TeacherSalaryDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+        Map<String, Object> params = new HashMap<>();
+        MapUtil.populateMap(params, queryInfo);
+
+        List<TeacherSalaryDto> dataList = null;
+        int count = courseScheduleTeacherSalaryDao.countSalaries(params);
+        if (count > 0) {
+            pageInfo.setTotal(count);
+            params.put("offset", pageInfo.getOffset());
+            dataList = courseScheduleTeacherSalaryDao.querySalaries(params);
+        }
+        if (count == 0) {
+            dataList = new ArrayList<>();
+        }
+        pageInfo.setRows(dataList);
+        return pageInfo;
+    }
 }
 }

+ 10 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentAttendanceServiceImpl.java

@@ -199,7 +199,10 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
 			throw new BizException("开课2个小时之前才可以请假");
 			throw new BizException("开课2个小时之前才可以请假");
 		}
 		}
 		
 		
-		StudentAttendance studentAttendance  = new StudentAttendance();
+		StudentAttendance studentAttendance  = studentAttendanceDao.findByStatusAndCourseScheduleId(userId,courseScheduleId.intValue());
+		if(Objects.isNull(studentAttendance)){
+			studentAttendance=new StudentAttendance();
+		}
 		studentAttendance.setClassGroupId(courseSchedule.getClassGroupId());
 		studentAttendance.setClassGroupId(courseSchedule.getClassGroupId());
 		studentAttendance.setCourseScheduleId(courseScheduleId);
 		studentAttendance.setCourseScheduleId(courseScheduleId);
 		studentAttendance.setCreateTime(date);
 		studentAttendance.setCreateTime(date);
@@ -207,8 +210,12 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
 		studentAttendance.setRemark(remark);
 		studentAttendance.setRemark(remark);
 		studentAttendance.setStatus(StudentAttendanceStatusEnum.LEAVE);
 		studentAttendance.setStatus(StudentAttendanceStatusEnum.LEAVE);
 		studentAttendance.setUserId(userId);
 		studentAttendance.setUserId(userId);
-		
-		studentAttendanceDao.insert(studentAttendance);
+
+		if(Objects.nonNull(studentAttendance.getId())){
+			studentAttendanceDao.update(studentAttendance);
+		}else{
+			studentAttendanceDao.insert(studentAttendance);
+		}
 		
 		
 		ClassGroupStudentMapper classGroupStudentMapper = classGroupStudentMapperDao.query(courseSchedule.getClassGroupId(), userId);
 		ClassGroupStudentMapper classGroupStudentMapper = classGroupStudentMapperDao.query(courseSchedule.getClassGroupId(), userId);
 		if(Objects.isNull(classGroupStudentMapper)){
 		if(Objects.isNull(classGroupStudentMapper)){

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

@@ -85,7 +85,7 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 			isAttendance=true;
 			isAttendance=true;
 		}
 		}
 
 
-		TeacherAttendanceDto currentCourseDetail = courseScheduleDao.getCurrentCourseDetail(teacherSignOutDto.getTeacherAttendanceInfo().getCourseScheduleId());
+		TeacherAttendanceDto currentCourseDetail = courseScheduleDao.getCurrentCourseDetail(teacherSignOutDto.getTeacherAttendanceInfo().getCourseScheduleId(),user.getId());
 		if(Objects.isNull(currentCourseDetail)){
 		if(Objects.isNull(currentCourseDetail)){
 			throw new BizException("课程不存在");
 			throw new BizException("课程不存在");
 		}
 		}

+ 6 - 0
mec-biz/src/main/resources/config/contracts/courses.ftl

@@ -156,9 +156,15 @@
         6、双方因履行本协议而相互发出或者提供的所有通知、文件、资料,均以本协议中所列明的电话、APP推送消息送达,乙方如果变更电话号码的,应当自变更后1日内通知甲方且获得甲方确认,甲方通过电话、APP方式无法联系乙方或者甲方认为必要时,甲方也可以通过特快专递至乙方住址的方式向乙方发出上述任何通知、文件、资料等,并在甲方寄出特快专递后第5日视为送达成功。
         6、双方因履行本协议而相互发出或者提供的所有通知、文件、资料,均以本协议中所列明的电话、APP推送消息送达,乙方如果变更电话号码的,应当自变更后1日内通知甲方且获得甲方确认,甲方通过电话、APP方式无法联系乙方或者甲方认为必要时,甲方也可以通过特快专递至乙方住址的方式向乙方发出上述任何通知、文件、资料等,并在甲方寄出特快专递后第5日视为送达成功。
         
         
         <div class="signature">
         <div class="signature">
+        	<#if isShowVisualSeal>
             <div class="sign">甲方签章:深圳大雅乐盟网络教育股份有限公司<img class="cachet" src="https://daya-online.oss-cn-beijing.aliyuncs.com/website/cachet.png" alt="" />
             <div class="sign">甲方签章:深圳大雅乐盟网络教育股份有限公司<img class="cachet" src="https://daya-online.oss-cn-beijing.aliyuncs.com/website/cachet.png" alt="" />
                 <span>日期:${.now?string("yyyy年MM月dd日")}</span>
                 <span>日期:${.now?string("yyyy年MM月dd日")}</span>
             </div>
             </div>
+        	<#else>
+            <div class="sign">甲方签章:深圳大雅乐盟网络教育股份有限公司
+                <span>日期:${.now?string("yyyy年MM月dd日")}</span>
+            </div>
+        	</#if>
             <div class="sign">乙方签字:${studentInfo.realName!}
             <div class="sign">乙方签字:${studentInfo.realName!}
                 <span>日期:${.now?string("yyyy年MM月dd日")} </span>
                 <span>日期:${.now?string("yyyy年MM月dd日")} </span>
             </div>
             </div>

+ 6 - 0
mec-biz/src/main/resources/config/contracts/goods.ftl

@@ -135,9 +135,15 @@
         3、本协议未尽事宜或对本协议的任何修改、补充,由双方另行协商后以签订补充协议的方式解决,补充协议与本协议具有同等法律效力;双方没有约定也没有协商一致的,遵照相关法律法规规定执行。<br/>
         3、本协议未尽事宜或对本协议的任何修改、补充,由双方另行协商后以签订补充协议的方式解决,补充协议与本协议具有同等法律效力;双方没有约定也没有协商一致的,遵照相关法律法规规定执行。<br/>
         4、双方因履行本协议而相互发出或者提供的所有通知、文件、资料,均以本协议中所列明的电话、APP推送消息送达,乙方如果变更电话号码的,应当自变更后1日内通知甲方且获得甲方确认,甲方通过电话、APP方式无法联系乙方或者甲方认为必要时,甲方也可以通过特快专递至乙方住址的方式向乙方发出上述任何通知、文件、资料等,并在甲方寄出特快专递后第5日视为送达成功。
         4、双方因履行本协议而相互发出或者提供的所有通知、文件、资料,均以本协议中所列明的电话、APP推送消息送达,乙方如果变更电话号码的,应当自变更后1日内通知甲方且获得甲方确认,甲方通过电话、APP方式无法联系乙方或者甲方认为必要时,甲方也可以通过特快专递至乙方住址的方式向乙方发出上述任何通知、文件、资料等,并在甲方寄出特快专递后第5日视为送达成功。
         <div class="signature">
         <div class="signature">
+        	<#if isShowVisualSeal>
             <div class="sign">甲方签章:深圳大雅乐盟网络教育股份有限公司<img class="cachet" src="https://daya-online.oss-cn-beijing.aliyuncs.com/website/cachet.png" alt="" />
             <div class="sign">甲方签章:深圳大雅乐盟网络教育股份有限公司<img class="cachet" src="https://daya-online.oss-cn-beijing.aliyuncs.com/website/cachet.png" alt="" />
                 <span>日期:${.now?string("yyyy年MM月dd日")}</span>
                 <span>日期:${.now?string("yyyy年MM月dd日")}</span>
             </div>
             </div>
+        	<#else>
+            <div class="sign">甲方签章:深圳大雅乐盟网络教育股份有限公司
+                <span>日期:${.now?string("yyyy年MM月dd日")}</span>
+            </div>
+            </#if>
             <div class="sign">乙方签字:${studentInfo.realName!}
             <div class="sign">乙方签字:${studentInfo.realName!}
                 <span>日期:${.now?string("yyyy年MM月dd日")} </span>
                 <span>日期:${.now?string("yyyy年MM月dd日")} </span>
             </div>
             </div>

+ 12 - 1
mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -248,7 +248,7 @@
         LEFT JOIN school s ON mg.school_id_=s.id_
         LEFT JOIN school s ON mg.school_id_=s.id_
         LEFT JOIN sys_user su ON cs.actual_teacher_id_=su.id_
         LEFT JOIN sys_user su ON cs.actual_teacher_id_=su.id_
         LEFT JOIN teacher_attendance ta ON cs.id_=ta.course_schedule_id_
         LEFT JOIN teacher_attendance ta ON cs.id_=ta.course_schedule_id_
-        WHERE cs.id_= #{courseID}
+        WHERE cs.id_= #{courseID} AND ta.teacher_id_=#{teacherId}
     </select>
     </select>
 
 
     <select id="getTeacherCourseByDateSpeed"
     <select id="getTeacherCourseByDateSpeed"
@@ -1258,6 +1258,7 @@
         <foreach collection="classGroupIds" item="classGroupId" open="(" close=")" separator=",">
         <foreach collection="classGroupIds" item="classGroupId" open="(" close=")" separator=",">
             #{classGroupId}
             #{classGroupId}
         </foreach>
         </foreach>
+        AND csts.teacher_role_='BISHOP'
         ORDER BY start_class_time_
         ORDER BY start_class_time_
     </select>
     </select>
     <select id="findStudentMap" resultType="java.util.Map">
     <select id="findStudentMap" resultType="java.util.Map">
@@ -1310,6 +1311,16 @@
 
 
         GROUP BY class_group_id_
         GROUP BY class_group_id_
     </select>
     </select>
+    <select id="findMusicGroupCourseSchedules" resultMap="CourseSchedule">
+        SELECT
+            cs.*
+        FROM
+            course_schedule cs
+            LEFT JOIN class_group cg ON cs.class_group_id_=cg.id_
+        WHERE
+            cg.music_group_id_=#{musicGroupId}
+            AND status_ = #{status}
+    </select>
     <delete id="deleteCourseSchedulesByClassGroupIds">
     <delete id="deleteCourseSchedulesByClassGroupIds">
         DELETE FROM course_schedule WHERE class_group_id_ IN
         DELETE FROM course_schedule WHERE class_group_id_ IN
         <foreach collection="classGroupIds" item="classGroupId" open="(" close=")" separator=",">
         <foreach collection="classGroupIds" item="classGroupId" open="(" close=")" separator=",">

+ 57 - 3
mec-biz/src/main/resources/config/mybatis/CourseScheduleTeacherSalaryMapper.xml

@@ -94,14 +94,68 @@
 		</foreach>
 		</foreach>
 	</delete>
 	</delete>
 
 
+	<sql id="courseScheduleTeacherSalaryQueryPage">
+		<where>
+			csts.settlement_time_ IS NOT NULL AND csts.teacher_role_ IS NOT NULL AND cs.type_ IS NOT NULL
+			<if test="organId != null">
+				AND su.organ_id_ = #{organId}
+			</if>
+			<if test="search != null">
+				AND (su.username_ LIKE CONCAT('%',#{search},'%') OR su.phone_ LIKE CONCAT('%',#{search},'%'))
+			</if>
+			<if test="startTime != null">
+				AND csts.settlement_time_ &gt;= DATE_FORMAT(#{startTime},'%Y-%m-%d')
+			</if>
+			<if test="endTime != null">
+				AND csts.settlement_time_ &lt;= DATE_FORMAT(#{endTime},'%Y-%m-%d')
+			</if>
+			<if test="courseScheduleType != null">
+				AND cs.type_ = #{courseScheduleType}
+			</if>
+			<if test="teacherId != null">
+				AND csts.user_id_ = #{teacherId}
+			</if>
+		</where>
+	</sql>
+
     <!-- 分页查询 -->
     <!-- 分页查询 -->
 	<select id="queryPage" resultMap="CourseScheduleTeacherSalary" parameterType="map">
 	<select id="queryPage" resultMap="CourseScheduleTeacherSalary" parameterType="map">
-		SELECT * FROM course_schedule_teacher_salary ORDER BY id_ <include refid="global.limit"/>
+		SELECT * FROM course_schedule_teacher_salary
+		<include refid="global.limit"/>
 	</select>
 	</select>
 	
 	
 	<!-- 查询当前表的总记录数 -->
 	<!-- 查询当前表的总记录数 -->
 	<select id="queryCount" resultType="int">
 	<select id="queryCount" resultType="int">
-		SELECT COUNT(*) FROM course_schedule_teacher_salary
+		SELECT COUNT(id_) FROM course_schedule_teacher_salary
+	</select>
+
+	<select id="countSalaries" resultType="java.lang.Integer">
+		SELECT COUNT(csts.id_) FROM course_schedule_teacher_salary csts
+		LEFT JOIN sys_user su ON su.id_ = csts.user_id_
+		LEFT JOIN course_schedule cs ON csts.course_schedule_id_ = cs.id_
+		<include refid="courseScheduleTeacherSalaryQueryPage"/>
+	</select>
+
+	<resultMap id="TeacherSalaryDtoMap" type="com.ym.mec.biz.dal.dto.TeacherSalaryDto">
+		<result property="username" column="username"/>
+		<result property="userId" column="user_id_"/>
+		<result property="phone" column="phone_"/>
+		<result property="type" column="type_" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+		<result property="name" column="name_"/>
+		<result property="actualSalary" column="actual_salary_"/>
+		<result property="subsidy" column="subsidy_"/>
+		<result property="settlementTime" column="settlement_time_"/>
+		<result property="teacherRole" column="teacher_role_" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+	</resultMap>
+
+	<select id="querySalaries" resultMap="TeacherSalaryDtoMap">
+		SELECT su.id_ user_id_,su.username_,su.phone_,cs.type_,cs.name_,csts.actual_salary_,csts.subsidy_,csts.settlement_time_,csts.teacher_role_
+		FROM course_schedule_teacher_salary csts
+		LEFT JOIN sys_user su ON su.id_ = csts.user_id_
+		LEFT JOIN course_schedule cs ON csts.course_schedule_id_ = cs.id_
+		<include refid="courseScheduleTeacherSalaryQueryPage"/>
+		ORDER BY csts.settlement_time_ DESC
+		<include refid="global.limit"/>
 	</select>
 	</select>
 
 
 	<resultMap id="VipGroupSalaryDto" type="com.ym.mec.biz.dal.dto.VipGroupSalaryDto" extends="CourseScheduleTeacherSalary">
 	<resultMap id="VipGroupSalaryDto" type="com.ym.mec.biz.dal.dto.VipGroupSalaryDto" extends="CourseScheduleTeacherSalary">
@@ -244,7 +298,7 @@
 		GROUP BY cs.teach_mode_
 		GROUP BY cs.teach_mode_
     </select>
     </select>
 
 
-    <update id="batchUpdateWages" parameterType="map">
+	<update id="batchUpdateWages" parameterType="map">
 		UPDATE course_schedule_teacher_salary set
 		UPDATE course_schedule_teacher_salary set
 			subsidy_ = #{subsidy},
 			subsidy_ = #{subsidy},
 			expect_salary_ = #{salary},
 			expect_salary_ = #{salary},

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

@@ -427,7 +427,7 @@
         FROM student_attendance sa
         FROM student_attendance sa
         LEFT JOIN sys_user su ON sa.user_id_ = su.id_
         LEFT JOIN sys_user su ON sa.user_id_ = su.id_
         LEFT JOIN course_schedule cs ON sa.course_schedule_id_ = cs.id_
         LEFT JOIN course_schedule cs ON sa.course_schedule_id_ = cs.id_
-        WHERE (cs.type_ = 'NORMAL' OR cs.type_ = 'MIX') AND sa.music_group_id_ = #{search}
+        WHERE sa.music_group_id_ = #{search}
         <include refid="global.limit"/>
         <include refid="global.limit"/>
     </select>
     </select>
     <select id="countMusicGroupStudentsSign" resultType="java.lang.Integer">
     <select id="countMusicGroupStudentsSign" resultType="java.lang.Integer">
@@ -435,7 +435,7 @@
         FROM student_attendance sa
         FROM student_attendance sa
         LEFT JOIN sys_user su ON sa.user_id_ = su.id_
         LEFT JOIN sys_user su ON sa.user_id_ = su.id_
         LEFT JOIN course_schedule cs ON sa.course_schedule_id_ = cs.id_
         LEFT JOIN course_schedule cs ON sa.course_schedule_id_ = cs.id_
-        WHERE (cs.type_ = 'NORMAL' OR cs.type_ = 'MIX') AND sa.music_group_id_ = #{search}
+        WHERE sa.music_group_id_ = #{search}
     </select>
     </select>
 
 
 </mapper>
 </mapper>

+ 2 - 2
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/eseal/provider/TsignPlugin.java

@@ -180,7 +180,7 @@ public class TsignPlugin implements ESealPlugin, InitializingBean, DisposableBea
 		SignType signType = SignType.Key;
 		SignType signType = SignType.Key;
 		// 设置接口调用方(平台方)签章位置信息
 		// 设置接口调用方(平台方)签章位置信息
 		posBean.setPosPage("1");// 签署页码,若为多页签章,支持页码格式“1-3,5,8“,若为坐标定位时,不可空
 		posBean.setPosPage("1");// 签署页码,若为多页签章,支持页码格式“1-3,5,8“,若为坐标定位时,不可空
-		posBean.setKey("甲方(签字)");
+		posBean.setKey("甲方签章");
 		// 签署位置X坐标,默认值为0,以pdf页面的左下角作为原点,控制距离页面左端的横向移动距离,单位为px
 		// 签署位置X坐标,默认值为0,以pdf页面的左下角作为原点,控制距离页面左端的横向移动距离,单位为px
 		posBean.setPosX(100);
 		posBean.setPosX(100);
 		// 签署位置Y坐标,默认值为0,以pdf页面的左下角作为原点,控制距离页面底端的纵向移动距离,单位为px
 		// 签署位置Y坐标,默认值为0,以pdf页面的左下角作为原点,控制距离页面底端的纵向移动距离,单位为px
@@ -217,7 +217,7 @@ public class TsignPlugin implements ESealPlugin, InitializingBean, DisposableBea
 		posBean.setPosPage("1");
 		posBean.setPosPage("1");
 		posBean.setPosType(1);
 		posBean.setPosType(1);
 		posBean.setWidth(80);
 		posBean.setWidth(80);
-		posBean.setKey("乙方签字");
+		posBean.setKey("乙方签字");
 		posBean.setPosX(100);
 		posBean.setPosX(100);
 		posBean.setPosY(0);
 		posBean.setPosY(0);
 
 

+ 8 - 0
mec-web/src/main/java/com/ym/mec/web/controller/CourseScheduleController.java

@@ -210,6 +210,14 @@ public class CourseScheduleController extends BaseController {
 		return succeed();
 		return succeed();
 	}
 	}
 
 
+    @ApiOperation(value = "删除乐团下所有未上的课时")
+    @GetMapping("/batchDeleteMusicGroupNotStartCourse")
+    @PreAuthorize("@pcs.hasPermissions('courseSchedule/batchDeleteMusicGroupNotStartCourse')")
+	public Object batchDeleteMusicGroupNotStartCourse(String musicGroupId){
+        scheduleService.batchDeleteMusicGroupNotStartCourse(musicGroupId);
+        return succeed();
+    }
+
 	@ApiOperation(value = "乐团详情--课酬调整--课程教师列表")
 	@ApiOperation(value = "乐团详情--课酬调整--课程教师列表")
 	@GetMapping("/queryTeacherSalary")
 	@GetMapping("/queryTeacherSalary")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/queryTeacherSalary')")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/queryTeacherSalary')")

+ 72 - 0
mec-web/src/main/java/com/ym/mec/web/controller/CourseScheduleTeacherSalaryController.java

@@ -0,0 +1,72 @@
+package com.ym.mec.web.controller;
+
+import com.ym.mec.biz.dal.dto.TeacherSalaryDto;
+import com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary;
+import com.ym.mec.biz.dal.page.CourseScheduleTeacherSalaryQueryInfo;
+import com.ym.mec.biz.service.CourseScheduleTeacherSalaryService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.util.collection.MapUtil;
+import com.ym.mec.util.date.DateUtil;
+import com.ym.mec.util.excel.POIUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@RequestMapping("courseScheduleTeacherSalary")
+@Api(tags = "教师薪酬服务")
+@RestController
+public class CourseScheduleTeacherSalaryController extends BaseController {
+
+    @Autowired
+    private CourseScheduleTeacherSalaryService courseScheduleTeacherSalaryService;
+
+    @ApiOperation(value = "分页导出教师薪酬列表")
+    @GetMapping("/export")
+    @PreAuthorize("@pcs.hasPermissions('courseScheduleTeacherSalary/export')")
+    public void export(CourseScheduleTeacherSalaryQueryInfo queryInfo, HttpServletResponse response) {
+        List<TeacherSalaryDto> teacherSalaries = courseScheduleTeacherSalaryService.querySalaries(queryInfo).getRows();
+        OutputStream ouputStream = null;
+        try {
+            HSSFWorkbook workbook = POIUtil.exportExcel(new String[] { "用户编号","用户名", "手机号", "课程类型", "实际薪水", "补助", "结算时间", "教师角色"}, new String[] {
+                    "userId","username", "phone", "type.msg", "name", "actualSalary", "subsidy", "settlementTime", "teacherRole.msg"}, teacherSalaries);
+            response.setContentType("application/msexcel");
+            response.setHeader("Content-disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
+            ouputStream = response.getOutputStream();
+            workbook.write(ouputStream);
+            ouputStream.flush();
+        } catch (Exception e) {
+            e.printStackTrace();
+//            LOGGER.error("导出借款人列表出现异常", e);
+        } finally {
+            if (ouputStream != null) {
+                try {
+                    ouputStream.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+//                    LOGGER.error("输出流关闭异常", e);
+                }
+            }
+        }
+    }
+
+    @ApiOperation(value = "分页查询教师薪酬列表")
+    @GetMapping("/queryPage")
+    @PreAuthorize("@pcs.hasPermissions('courseScheduleTeacherSalary/queryPage')")
+    public Object queryPage(CourseScheduleTeacherSalaryQueryInfo queryInfo) {
+        return succeed(courseScheduleTeacherSalaryService.querySalaries(queryInfo));
+    }
+}