Browse Source

Merge branch 'master' of http://git.dayaedu.com/yonge/mec

zouxuan 5 years ago
parent
commit
612a8107e9

+ 6 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysUserTsignDao.java

@@ -5,5 +5,10 @@ import com.ym.mec.common.dal.BaseDAO;
 
 public interface SysUserTsignDao extends BaseDAO<Integer, SysUserTsign> {
 
-	
+	/**
+	 * 根据证件号码查询
+	 * @param cardNo
+	 * @return
+	 */
+	SysUserTsign queryByCardNo(String cardNo);
 }

+ 24 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysUserTsign.java

@@ -18,17 +18,23 @@ public class SysUserTsign {
 	/** 电子印章数据 */
 	private String sealData;
 
+	private String name;
+
+	private String cardNo;
+
 	/**  */
 	private java.util.Date createTime = new Date();
-	
+
 	public SysUserTsign() {
 		// TODO Auto-generated constructor stub
 	}
 
-	public SysUserTsign(Integer userId, String accountId, String sealData) {
+	public SysUserTsign(Integer userId, String accountId, String sealData, String name, String cardNo) {
 		this.userId = userId;
 		this.accountId = accountId;
 		this.sealData = sealData;
+		this.name = name;
+		this.cardNo = cardNo;
 	}
 
 	public void setUserId(Integer userId) {
@@ -55,6 +61,22 @@ public class SysUserTsign {
 		return this.sealData;
 	}
 
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getCardNo() {
+		return cardNo;
+	}
+
+	public void setCardNo(String cardNo) {
+		this.cardNo = cardNo;
+	}
+
 	public void setCreateTime(java.util.Date createTime) {
 		this.createTime = createTime;
 	}

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/SysUserTsignService.java

@@ -5,4 +5,10 @@ import com.ym.mec.common.service.BaseService;
 
 public interface SysUserTsignService extends BaseService<Integer, SysUserTsign> {
 
+	/**
+	 * 根据证件号码查询
+	 * @param cardNo
+	 * @return
+	 */
+	SysUserTsign queryByCardNo(String cardNo);
 }

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

@@ -175,7 +175,7 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
                     baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary();
                 }
 
-                salary = baseSalary.multiply(classTimeDuty).setScale(2, BigDecimal.ROUND_HALF_UP);
+                salary = baseSalary.multiply(classTimeDuty).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
 
                 //课程与老师薪水表
                 CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();

+ 55 - 25
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ContractServiceImpl.java

@@ -12,6 +12,7 @@ import java.util.stream.Collectors;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.InitializingBean;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
@@ -51,7 +52,7 @@ import com.ym.mec.util.money.MoneyUtil;
 import com.ym.mec.util.pdf.PDFUtil;
 
 @Service
-public class ContractServiceImpl implements ContractService {
+public class ContractServiceImpl implements ContractService, InitializingBean {
 
 	@Autowired
 	private SysUserTsignService sysUserTsignService;
@@ -73,7 +74,7 @@ public class ContractServiceImpl implements ContractService {
 
 	@Autowired
 	private MusicGroupPaymentCalenderDao musicGroupPaymentCalenderDao;
-	
+
 	@Autowired
 	private MusicGroupStudentFeeDao musicGroupStudentFeeDao;
 
@@ -94,7 +95,7 @@ public class ContractServiceImpl implements ContractService {
 
 	@Autowired
 	private GoodsService goodsService;
-	
+
 	@Autowired
 	private MusicGroupService musicGroupService;
 
@@ -104,6 +105,35 @@ public class ContractServiceImpl implements ContractService {
 	private DateFormat dateFormatOss = new SimpleDateFormat("yyyy/MM/dd");
 
 	@Override
+	public void afterPropertiesSet() throws Exception {
+		// 注册企业账户
+		String orgName = "武汉长乐长风乐器销售有限公司";
+		String organCode = "91420106333619290A";
+
+		SysUserTsign sysUserTsign = sysUserTsignService.queryByCardNo(organCode);
+
+		if (sysUserTsign == null) {
+
+			String accountId = eSealPlugin.createOrganAccount(orgName, organCode);
+
+			if (StringUtils.isBlank(accountId)) {
+				throw new BizException("创建企业电子存证账户失败");
+			}
+
+			String sealData = eSealPlugin.createOrganSeal(accountId, "", "");
+
+			if (StringUtils.isBlank(sealData)) {
+				throw new BizException("创建电子存证印章失败");
+			}
+
+			sysUserTsign = new SysUserTsign(-1, accountId, sealData, orgName, organCode);
+
+			sysUserTsignService.insert(sysUserTsign);
+
+		}
+	}
+
+	@Override
 	public SysUserTsign register(Integer userId, String realName, String idCardNo, String mobileNo) {
 
 		SysUserTsign sysUserTsign = sysUserTsignService.get(userId);
@@ -116,13 +146,13 @@ public class ContractServiceImpl implements ContractService {
 				throw new BizException("创建电子存证账户失败");
 			}
 
-			String sealData = eSealPlugin.createSeal(accountId);
+			String sealData = eSealPlugin.createUserSeal(accountId);
 
 			if (StringUtils.isBlank(sealData)) {
 				throw new BizException("创建电子存证印章失败");
 			}
 
-			sysUserTsign = new SysUserTsign(userId, accountId, sealData);
+			sysUserTsign = new SysUserTsign(userId, accountId, sealData, realName, idCardNo);
 
 			sysUserTsignService.insert(sysUserTsign);
 
@@ -281,14 +311,14 @@ public class ContractServiceImpl implements ContractService {
 		} else {
 			params.put("paymentcalender", calenders.stream().map(cal -> cal.getPaymentMonth().toString()).collect(Collectors.joining("月,")));
 		}
-		
+
 		params.put("isShowVisualSeal", false);
-		
+
 		MusicGroup musicGroup = musicGroupService.get(musicGroupId);
-		if(musicGroup == null){
+		if (musicGroup == null) {
 			throw new BizException("乐团信息没找到");
 		}
-		
+
 		params.put("ownershipType", musicGroup.getOwnershipType().name());
 
 		templateEngine.render(params, "courses.ftl", srcFile);
@@ -371,14 +401,14 @@ public class ContractServiceImpl implements ContractService {
 		} else {
 			params.put("paymentcalender", calenders.stream().map(cal -> cal.getPaymentMonth().toString()).collect(Collectors.joining("月,")));
 		}
-		
+
 		params.put("isShowVisualSeal", true);
-		
+
 		MusicGroup musicGroup = musicGroupService.get(musicGroupId);
-		if(musicGroup == null){
+		if (musicGroup == null) {
 			throw new BizException("乐团信息没找到");
 		}
-		
+
 		params.put("ownershipType", musicGroup.getOwnershipType().name());
 
 		templateEngine.render(params, "courses.ftl", srcFile);
@@ -437,9 +467,9 @@ public class ContractServiceImpl implements ContractService {
 
 		// 收费形式
 		params.put("paymentcalender", "一次性");
-		
+
 		params.put("isShowVisualSeal", false);
-		
+
 		params.put("ownershipType", "OWN");
 
 		templateEngine.render(params, "courses.ftl", srcFile);
@@ -505,9 +535,9 @@ public class ContractServiceImpl implements ContractService {
 
 		// 收费形式
 		params.put("paymentcalender", "一次性");
-		
+
 		params.put("isShowVisualSeal", true);
-		
+
 		params.put("ownershipType", "OWN");
 
 		templateEngine.render(params, "courses.ftl", srcFile);
@@ -569,14 +599,14 @@ public class ContractServiceImpl implements ContractService {
 		}
 		params.put("depositFee", musicGroupSubjectPlan.getDepositFee().doubleValue());
 		params.put("depositFeeFmt", MoneyUtil.toChinese(musicGroupSubjectPlan.getDepositFee().toString()));
-		
+
 		params.put("isShowVisualSeal", false);
-		
+
 		MusicGroup musicGroup = musicGroupService.get(musicGroupId);
-		if(musicGroup == null){
+		if (musicGroup == null) {
 			throw new BizException("乐团信息没找到");
 		}
-		
+
 		params.put("ownershipType", musicGroup.getOwnershipType().name());
 
 		templateEngine.render(params, "goods.ftl", srcFile);
@@ -646,14 +676,14 @@ public class ContractServiceImpl implements ContractService {
 		}
 		params.put("depositFee", musicGroupSubjectPlan.getDepositFee().doubleValue());
 		params.put("depositFeeFmt", MoneyUtil.toChinese(musicGroupSubjectPlan.getDepositFee().toString()));
-		
+
 		params.put("isShowVisualSeal", true);
-		
+
 		MusicGroup musicGroup = musicGroupService.get(musicGroupId);
-		if(musicGroup == null){
+		if (musicGroup == null) {
 			throw new BizException("乐团信息没找到");
 		}
-		
+
 		params.put("ownershipType", musicGroup.getOwnershipType().name());
 
 		templateEngine.render(params, "goods.ftl", srcFile);

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

@@ -64,9 +64,9 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 
     @Override
     public void createCourseScheduleTeacherVipSalary(VipGroup vipGroup,
-                                                    List<CourseSchedule> vipCourseSchedules,
-                                                    BigDecimal onlineTeacherSalary,
-                                                    BigDecimal offlineTeacherSalary) {
+                                                     List<CourseSchedule> vipCourseSchedules,
+                                                     BigDecimal onlineTeacherSalary,
+                                                     BigDecimal offlineTeacherSalary) {
 
         School school = schoolService.get(vipGroup.getTeacherSchoolId());
         if (Objects.isNull(school)) {
@@ -85,8 +85,8 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                     .sorted(Comparator.comparing(CourseSchedule::getStartClassTime)).collect(Collectors.toList());
             for (int i = 0; i < courseSchedules.size(); i++) {
                 //创建教师课程薪水记录
-                CourseScheduleTeacherSalary courseScheduleTeacherSalary = courseScheduleTeacherSalaryDao.queryByCourseScheduleIdAndUserId(courseSchedules.get(i).getId(),courseSchedules.get(i).getActualTeacherId());
-                if(Objects.isNull(courseScheduleTeacherSalary)){
+                CourseScheduleTeacherSalary courseScheduleTeacherSalary = courseScheduleTeacherSalaryDao.queryByCourseScheduleIdAndUserId(courseSchedules.get(i).getId(), courseSchedules.get(i).getActualTeacherId());
+                if (Objects.isNull(courseScheduleTeacherSalary)) {
                     courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
                 }
                 courseScheduleTeacherSalary.setCourseScheduleId(courseSchedules.get(i).getId());
@@ -109,14 +109,14 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                         courseScheduleTeacherSalary.setExpectSalary(offlineTeacherSalary);
                     }
                 }
-                if(Objects.isNull(courseScheduleTeacherSalary.getId())){
+                if (Objects.isNull(courseScheduleTeacherSalary.getId())) {
                     courseScheduleTeacherSalaries.add(courseScheduleTeacherSalary);
-                }else{
+                } else {
                     courseScheduleTeacherSalaryDao.update(courseScheduleTeacherSalary);
                 }
             }
         }
-        if(courseScheduleTeacherSalaries.size()>0){
+        if (courseScheduleTeacherSalaries.size() > 0) {
             batchInsert(courseScheduleTeacherSalaries);
         }
     }
@@ -129,35 +129,35 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                 .map(CourseScheduleTeacherSalary::getCourseScheduleId)
                 .collect(Collectors.toList());
         List<ClassGroup> byCourseSchedules = classGroupDao.findByCourseSchedules(courseScheduleIds);
-        
-		Map<Integer, ClassGroup> classGroupMap = new HashMap<Integer, ClassGroup>();
-		for (ClassGroup classGroup : byCourseSchedules) {
-			if (!classGroupMap.containsKey(classGroup.getId())) {
-				classGroupMap.put(classGroup.getId(), classGroup);
-			}
-		}
-        
+
+        Map<Integer, ClassGroup> classGroupMap = new HashMap<Integer, ClassGroup>();
+        for (ClassGroup classGroup : byCourseSchedules) {
+            if (!classGroupMap.containsKey(classGroup.getId())) {
+                classGroupMap.put(classGroup.getId(), classGroup);
+            }
+        }
+
         List<TeacherAttendance> teacherIdByCourseSchedule = teacherAttendanceDao.findTeacherIdByCourseSchedule(courseScheduleIds);
         Map<Long, List<TeacherAttendance>> courseScheduleTeacherAttendanceMap = teacherIdByCourseSchedule.stream()
                 .collect(Collectors.groupingBy(TeacherAttendance::getCourseScheduleId));
-        List<TeacherAttendance> teacherAttendances=new ArrayList<>();
+        List<TeacherAttendance> teacherAttendances = new ArrayList<>();
         courseScheduleTeacherSalaries.forEach(courseScheduleTeacherSalary -> {
-            List<TeacherAttendance> teacherAttendancesTemp=courseScheduleTeacherAttendanceMap.get(courseScheduleTeacherSalary.getCourseScheduleId());
+            List<TeacherAttendance> teacherAttendancesTemp = courseScheduleTeacherAttendanceMap.get(courseScheduleTeacherSalary.getCourseScheduleId());
             List<Integer> collect = new ArrayList<>();
-            if(!CollectionUtils.isEmpty(teacherAttendancesTemp)){
+            if (!CollectionUtils.isEmpty(teacherAttendancesTemp)) {
                 collect = teacherAttendancesTemp.stream().map(TeacherAttendance::getTeacherId).collect(Collectors.toList());
             }
-            TeacherAttendance teacherAttendance=new TeacherAttendance();
+            TeacherAttendance teacherAttendance = new TeacherAttendance();
             teacherAttendance.setGroupType(courseScheduleTeacherSalary.getGroupType());
             teacherAttendance.setClassGroupId(courseScheduleTeacherSalary.getClassGroupId());
             teacherAttendance.setMusicGroupId(courseScheduleTeacherSalary.getMusicGroupId());
-            if(CollectionUtils.isEmpty(collect)||!collect.contains(courseScheduleTeacherSalary.getUserId())){
+            if (CollectionUtils.isEmpty(collect) || !collect.contains(courseScheduleTeacherSalary.getUserId())) {
                 teacherAttendance.setTeacherId(courseScheduleTeacherSalary.getUserId());
                 teacherAttendance.setCourseScheduleId(courseScheduleTeacherSalary.getCourseScheduleId());
                 teacherAttendances.add(teacherAttendance);
             }
         });
-        if(!CollectionUtils.isEmpty(teacherAttendances)){
+        if (!CollectionUtils.isEmpty(teacherAttendances)) {
             teacherAttendanceDao.batchInsert(teacherAttendances);
         }
     }
@@ -200,12 +200,12 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             //获取当前课程学生缴费记录
             List<CourseScheduleStudentPayment> studentPaymentsWithCourse = studentPaymentGroupByCourse.get(courseScheduleTeacherSalary.getCourseScheduleId());
 
-            if(CollectionUtils.isEmpty(studentPaymentsWithCourse)){
+            if (CollectionUtils.isEmpty(studentPaymentsWithCourse)) {
                 return;
             }
 
             //当前课程缴费学生数量
-            BigDecimal courseStudentNum=new BigDecimal(studentPaymentsWithCourse.size());
+            BigDecimal courseStudentNum = new BigDecimal(studentPaymentsWithCourse.size());
 
             //教师预计课酬
             BigDecimal expectSalary = courseScheduleTeacherSalary.getExpectSalary();
@@ -226,7 +226,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                     return;
                 }
                 //计算教师责任总占比
-                double teacherLiabilityRatioSum = courseStudentComplaints.stream().mapToDouble(courseScheduleComplaint->Objects.isNull(courseScheduleComplaint.getTeacherLiabilityRatio())?0:courseScheduleComplaint.getTeacherLiabilityRatio()).sum();
+                double teacherLiabilityRatioSum = courseStudentComplaints.stream().mapToDouble(courseScheduleComplaint -> Objects.isNull(courseScheduleComplaint.getTeacherLiabilityRatio()) ? 0 : courseScheduleComplaint.getTeacherLiabilityRatio()).sum();
                 teacherLiabilityAllratio = new BigDecimal(teacherLiabilityRatioSum);
             } else {
                 //如果没有投诉,则教师和学生的责任占比为0
@@ -236,9 +236,9 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             //教师应扣除费用
             BigDecimal deductPrice = avgSalary.multiply(teacherLiabilityAllratio);
             //教师实际课酬
-            BigDecimal schoolSubsidy=new BigDecimal(0);
-            if(Objects.nonNull(courseScheduleTeacherSalary.getSubsidy())){
-                schoolSubsidy=courseScheduleTeacherSalary.getSubsidy();
+            BigDecimal schoolSubsidy = new BigDecimal(0);
+            if (Objects.nonNull(courseScheduleTeacherSalary.getSubsidy())) {
+                schoolSubsidy = courseScheduleTeacherSalary.getSubsidy();
             }
             BigDecimal actualSalary = expectSalary.subtract(deductPrice).add(schoolSubsidy);
 
@@ -263,7 +263,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 
             //根据学生进行投诉分组
             Map<Integer, List<CourseScheduleComplaints>> complainsGroupByStudent = null;
-            if(Objects.nonNull(courseStudentComplaints)){
+            if (Objects.nonNull(courseStudentComplaints)) {
                 complainsGroupByStudent = courseStudentComplaints.stream().collect(Collectors.groupingBy(CourseScheduleComplaints::getUserId));
             }
 
@@ -271,19 +271,19 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             for (CourseScheduleStudentPayment studentPayment : studentPaymentsWithCourse) {
                 //当前课程学生应缴费用
                 BigDecimal studentExpectPrice = studentPayment.getExpectPrice();
-                if(Objects.isNull(studentExpectPrice)){
-                    studentExpectPrice=new BigDecimal(0);
+                if (Objects.isNull(studentExpectPrice)) {
+                    studentExpectPrice = new BigDecimal(0);
                 }
                 //当前课程学生责任占比
                 BigDecimal studentLiabilityRatio;
                 List<CourseScheduleComplaints> currentCourseScheduleComplaints = null;
-                if(!CollectionUtils.isEmpty(complainsGroupByStudent)){
+                if (!CollectionUtils.isEmpty(complainsGroupByStudent)) {
                     currentCourseScheduleComplaints = complainsGroupByStudent.get(studentPayment.getUserId());
                 }
                 if (!CollectionUtils.isEmpty(currentCourseScheduleComplaints)) {
                     Double temp = currentCourseScheduleComplaints.get(0).getStudentLiabilityRatio();
-                    if(Objects.isNull(temp)){
-                        temp=0.0;
+                    if (Objects.isNull(temp)) {
+                        temp = 0.0;
                     }
                     studentLiabilityRatio = new BigDecimal(temp);
                 } else {
@@ -329,7 +329,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
         List<CourseSchedule> yesterdayCourseSchedules = courseScheduleDao.findCourseScheduleWithDate(yesterday);
         //课程编号列表
         List<Long> courseScheduleIds = yesterdayCourseSchedules.stream().map(CourseSchedule::getId).collect(Collectors.toList());
-        if(CollectionUtils.isEmpty(courseScheduleIds)){
+        if (CollectionUtils.isEmpty(courseScheduleIds)) {
             return;
         }
         //获取课程对应教学点补贴
@@ -343,7 +343,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
         //课程教师课酬
         List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries = courseScheduleTeacherSalaryDao.findByCourseSchedulesWithNoSettlement(courseScheduleIds);
 
-        if(CollectionUtils.isEmpty(courseScheduleTeacherSalaries)){
+        if (CollectionUtils.isEmpty(courseScheduleTeacherSalaries)) {
             return;
         }
 
@@ -400,6 +400,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
         List<SysUserCashAccountDetail> userCashAccountDetails = new ArrayList<>();
         //计算课酬
         courseScheduleTeacherSalaries.forEach(courseScheduleTeacherSalary -> {
+            boolean durationIsChange = false;
             //当前课酬对应的课程信息
             CourseSchedule courseSchedule = courseScheduleIdMap.get(courseScheduleTeacherSalary.getCourseScheduleId());
             Map<Integer, Integer> schoolClassMinutesMap = teacherClassMinutesMap.get(courseScheduleTeacherSalary.getUserId());
@@ -411,54 +412,62 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                     || courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.MIX)) {
                 if (schoolClassMinutes >= settlementClassMinutes && duration < singleClassTime) {
                     duration = singleClassTime;
+                    durationIsChange = true;
                 }
             }
-            //根据课程类型获取对应的默认课酬设置列表
-            List<TeacherDefaultMusicGroupSalary> teacherDefaultMusicGroupSalariesWithCourseType = teacherDefaultMusicGroupSalariesGroupByCourseType.get(courseSchedule.getType());
-            if (CollectionUtils.isEmpty(teacherDefaultMusicGroupSalariesWithCourseType)) {
-                throw new BizException("存在未指定结算方式的课程类型");
-            }
-
-            //根据教师编号将对应结算方式下的默认课酬设置分组
-            Map<Integer, TeacherDefaultMusicGroupSalary> teacherDefaultMusicGroupSalariesGroupByTeacherId = teacherDefaultMusicGroupSalariesWithCourseType.stream().collect(Collectors.toMap(TeacherDefaultMusicGroupSalary::getUserId,teacherDefaultMusicGroupSalary -> teacherDefaultMusicGroupSalary));
-
-            TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalaryWithTeacherId=teacherDefaultMusicGroupSalariesGroupByTeacherId.get(courseScheduleTeacherSalary.getUserId());
 
             //教师课酬
             BigDecimal teacherSalary = new BigDecimal(0);
 
-            String settlementType=musicGroupSettlementsMap.get(courseScheduleTeacherSalary.getCourseScheduleId());
-            //如果结算方式是教师默认课酬
-            if (settlementType.equals(SalarySettlementTypeEnum.TEACHER_DEFAULT.getCode())) {
-                //课程时长与结算单位时长占比
-                BigDecimal classTimeDuty = new BigDecimal(duration);
-                if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.HIGH)) {
-                    classTimeDuty=classTimeDuty.divide(new BigDecimal(45),CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
-                }else  if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.CLASSROOM)) {
-                    classTimeDuty=classTimeDuty.divide(new BigDecimal(40),CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
-                }else{
-                    classTimeDuty=classTimeDuty.divide(new BigDecimal(30), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
+            if(durationIsChange){
+
+                //根据课程类型获取对应的默认课酬设置列表
+                List<TeacherDefaultMusicGroupSalary> teacherDefaultMusicGroupSalariesWithCourseType = teacherDefaultMusicGroupSalariesGroupByCourseType.get(courseSchedule.getType());
+                if (CollectionUtils.isEmpty(teacherDefaultMusicGroupSalariesWithCourseType)) {
+                    throw new BizException("存在未指定结算方式的课程类型");
                 }
-                BigDecimal teacherDefaultSalary = courseScheduleTeacherSalary.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalaryWithTeacherId.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalaryWithTeacherId.getAssistantTeacher30MinSalary();
-                teacherSalary = teacherDefaultSalary.multiply(classTimeDuty).setScale(2, BigDecimal.ROUND_HALF_UP);
-            } else if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY.getCode())) {
-                //课程时长与结算单位时长占比
-                BigDecimal classTimeDuty = new BigDecimal(duration);
-                if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.HIGH)) {
-                    classTimeDuty=classTimeDuty.divide(new BigDecimal(45),CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
-                }else  if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.CLASSROOM)) {
-                    classTimeDuty=classTimeDuty.divide(new BigDecimal(40),CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
-                }else{
-                    classTimeDuty=classTimeDuty.divide(new BigDecimal(90),CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
+
+                //根据教师编号将对应结算方式下的默认课酬设置分组
+                Map<Integer, TeacherDefaultMusicGroupSalary> teacherDefaultMusicGroupSalariesGroupByTeacherId = teacherDefaultMusicGroupSalariesWithCourseType.stream().collect(Collectors.toMap(TeacherDefaultMusicGroupSalary::getUserId, teacherDefaultMusicGroupSalary -> teacherDefaultMusicGroupSalary));
+
+                TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalaryWithTeacherId = teacherDefaultMusicGroupSalariesGroupByTeacherId.get(courseScheduleTeacherSalary.getUserId());
+
+                String settlementType = musicGroupSettlementsMap.get(courseScheduleTeacherSalary.getCourseScheduleId());
+                //如果结算方式是教师默认课酬
+                if (settlementType.equals(SalarySettlementTypeEnum.TEACHER_DEFAULT.getCode())) {
+                    //课程时长与结算单位时长占比
+                    BigDecimal classTimeDuty = new BigDecimal(duration);
+                    if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.HIGH)) {
+                        classTimeDuty = classTimeDuty.divide(new BigDecimal(45), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
+                    } else if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.CLASSROOM)) {
+                        classTimeDuty = classTimeDuty.divide(new BigDecimal(40), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
+                    } else {
+                        classTimeDuty = classTimeDuty.divide(new BigDecimal(30), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
+                    }
+                    BigDecimal teacherDefaultSalary = courseScheduleTeacherSalary.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalaryWithTeacherId.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalaryWithTeacherId.getAssistantTeacher30MinSalary();
+                    teacherSalary = teacherDefaultSalary.multiply(classTimeDuty).setScale(2, BigDecimal.ROUND_HALF_UP);
+                } else if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY.getCode())) {
+                    //课程时长与结算单位时长占比
+                    BigDecimal classTimeDuty = new BigDecimal(duration);
+                    if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.HIGH)) {
+                        classTimeDuty = classTimeDuty.divide(new BigDecimal(45), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
+                    } else if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.CLASSROOM)) {
+                        classTimeDuty = classTimeDuty.divide(new BigDecimal(40), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
+                    } else {
+                        classTimeDuty = classTimeDuty.divide(new BigDecimal(90), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
+                    }
+                    BigDecimal teacherDefaultSalary = courseScheduleTeacherSalary.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalaryWithTeacherId.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalaryWithTeacherId.getAssistantTeacher90MinSalary();
+                    teacherSalary = teacherDefaultSalary.multiply(classTimeDuty).setScale(2, BigDecimal.ROUND_HALF_UP);
                 }
-                BigDecimal teacherDefaultSalary = courseScheduleTeacherSalary.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalaryWithTeacherId.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalaryWithTeacherId.getAssistantTeacher90MinSalary();
-                teacherSalary = teacherDefaultSalary.multiply(classTimeDuty).setScale(2, BigDecimal.ROUND_HALF_UP);
+            }else{
+                teacherSalary=courseScheduleTeacherSalary.getExpectSalary();
             }
+
             BigDecimal subsidy = courseSubsidyMap.get(courseSchedule.getSchoolId());
-            if(Objects.isNull(subsidy)){
-                subsidy=new BigDecimal(0);
+            if (Objects.isNull(subsidy)) {
+                subsidy = new BigDecimal(0);
             }
-            teacherSalary=teacherSalary.add(subsidy);
+            teacherSalary = teacherSalary.add(subsidy);
             //更新教师结算信息
             courseScheduleTeacherSalary.setActualSalary(teacherSalary);
             courseScheduleTeacherSalary.setSettlementTime(now);

+ 2 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -21,10 +21,8 @@ import com.ym.mec.thirdparty.message.MessageSenderPluginContext.MessageSender;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.http.HttpUtil;
-
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
@@ -309,6 +307,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         String channelType = "";
 
         StudentPaymentOrder studentPaymentOrder = studentRegistrationService.addOrder(studentRegistration, amount, orderNo, channelType, courseFee, goodsGroups, goodsList, otherGoodsList);
+        studentPaymentOrder.setVersion(0);
 
         Date date = new Date();
         
@@ -323,6 +322,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 studentPaymentOrder.setStatus(DealStatusEnum.SUCCESS);
                 studentPaymentOrder.setUpdateTime(date);
                 studentPaymentOrderService.update(studentPaymentOrder);
+                studentPaymentOrder.setVersion(studentPaymentOrder.getVersion()+1);
                 
         		sysUserCashAccountService.updateBalance(userId, amount.negate(),PlatformCashAccountDetailTypeEnum.PAY_FEE,"乐团续费");
         		

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

@@ -19,5 +19,10 @@ public class SysUserTsignServiceImpl extends BaseServiceImpl<Integer, SysUserTsi
 	public BaseDAO<Integer, SysUserTsign> getDAO() {
 		return sysUserTsignDao;
 	}
+
+	@Override
+	public SysUserTsign queryByCardNo(String cardNo) {
+		return sysUserTsignDao.queryByCardNo(cardNo);
+	}
 	
 }

+ 26 - 14
mec-biz/src/main/resources/config/mybatis/SysUserTsignMapper.xml

@@ -10,6 +10,8 @@
 		<result column="user_id_" property="userId" />
 		<result column="account_id_" property="accountId" />
 		<result column="seal_data_" property="sealData" />
+		<result column="name_" property="name" />
+		<result column="card_no_" property="cardNo" />
 		<result column="create_time_" property="createTime" />
 	</resultMap>
 	
@@ -30,25 +32,31 @@
 		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
 		</selectKey>
 		-->
-		INSERT INTO sys_user_tsign (user_id_,account_id_,seal_data_,create_time_) VALUES(#{userId},#{accountId},#{sealData},#{createTime})
+		INSERT INTO sys_user_tsign (user_id_,account_id_,seal_data_,name_,card_no_,create_time_) VALUES(#{userId},#{accountId},#{sealData},#{name},#{cardNo},now())
 	</insert>
 	
 	<!-- 根据主键查询一条记录 -->
 	<update id="update" parameterType="com.ym.mec.biz.dal.entity.SysUserTsign">
 		UPDATE sys_user_tsign <set>
-<if test="userId != null">
-user_id_ = #{userId},
-</if>
-<if test="accountId != null">
-account_id_ = #{accountId},
-</if>
-<if test="sealData != null">
-seal_data_ = #{sealData},
-</if>
-<if test="createTime != null">
-create_time_ = #{createTime},
-</if>
-</set> WHERE user_id_ = #{userId} 
+		<if test="userId != null">
+		user_id_ = #{userId},
+		</if>
+		<if test="accountId != null">
+		account_id_ = #{accountId},
+		</if>
+		<if test="sealData != null">
+		seal_data_ = #{sealData},
+		</if>
+		<if test="name != null">
+		name_ = #{name},
+		</if>
+		<if test="cardNo != null">
+		card_no_ = #{cardNo},
+		</if>
+		<if test="createTime != null">
+		create_time_ = #{createTime},
+		</if>
+		</set> WHERE user_id_ = #{userId} 
 	</update>
 	
 	<!-- 根据主键删除一条记录 -->
@@ -65,4 +73,8 @@ create_time_ = #{createTime},
 	<select id="queryCount" resultType="int">
 		SELECT COUNT(*) FROM sys_user_tsign
 	</select>
+	
+	<select id="queryByCardNo" resultMap="SysUserTsign">
+		SELECT * FROM sys_user_tsign where card_no_ = #{cardNo}
+	</select>
 </mapper>

+ 1 - 0
mec-common/common-core/src/main/java/com/ym/mec/common/service/impl/RedisIdGeneratorService.java

@@ -3,6 +3,7 @@ package com.ym.mec.common.service.impl;
 import com.google.common.base.Strings;
 import com.ym.mec.common.redis.service.RedisCache;
 import com.ym.mec.common.service.IdGeneratorService;
+
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;

+ 11 - 2
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/eseal/ESealPlugin.java

@@ -20,11 +20,20 @@ public interface ESealPlugin {
 	public String createOrganAccount(String orgName, String organCode);
 
 	/**
-	 * 创建印章
+	 * 创建个人印章
 	 * @param accountId 账户唯一标识
 	 * @return 电子印章数据
 	 */
-	public String createSeal(String accountId);
+	public String createUserSeal(String accountId);
+
+	/**
+	 * 创建企业印章
+	 * @param accountId 账户唯一标识
+	 * @param hText 生成印章中的横向文内容
+	 * @param qText 生成印章中的下弦文内容
+	 * @return 电子印章数据
+	 */
+	public String createOrganSeal(String accountId, String hText, String qText);
 
 	/**
 	 * 平台自身PDF摘要签署(印章标识)

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

@@ -15,6 +15,7 @@ import com.timevale.esign.sdk.tech.bean.result.AddSealResult;
 import com.timevale.esign.sdk.tech.bean.result.FileDigestSignResult;
 import com.timevale.esign.sdk.tech.bean.result.GetAccountProfileResult;
 import com.timevale.esign.sdk.tech.bean.result.Result;
+import com.timevale.esign.sdk.tech.bean.seal.OrganizeTemplateType;
 import com.timevale.esign.sdk.tech.bean.seal.PersonTemplateType;
 import com.timevale.esign.sdk.tech.bean.seal.SealColor;
 import com.timevale.esign.sdk.tech.impl.constants.LegalAreaType;
@@ -89,7 +90,7 @@ public class TsignPlugin implements ESealPlugin, InitializingBean, DisposableBea
 		AddAccountResult result = service.addAccount(personbean);
 		if (result.getErrCode() == 0) {
 			return result.getAccountId();
-		}else if(result.getErrCode() == 1500012){
+		} else if (result.getErrCode() == 1500012) {
 			return queryAccountIdByIdNo(idcard);
 		}
 		throw new ThirdpartyException(result.getMsg());
@@ -121,19 +122,29 @@ public class TsignPlugin implements ESealPlugin, InitializingBean, DisposableBea
 	 * @param accountId e签宝账户唯一标识
 	 * @return 电子印章数据
 	 */
-	public String createSeal(String accountId) {
-		// 创建模板类型
-		PersonTemplateType templateType = PersonTemplateType.RECTANGLE;
+	public String createUserSeal(String accountId) {
 		// 生成模板印章的颜色
-		SealColor color = SealColor.BLUE;
+		SealColor color = SealColor.RED;
 		SealService service = serviceClient.sealService();
-		AddSealResult result = service.addTemplateSeal(accountId, templateType, color);
+		AddSealResult result = service.addTemplateSeal(accountId, PersonTemplateType.RECTANGLE, color);
 		if (0 == result.getErrCode()) {
 			return result.getSealData();
 		}
 		throw new ThirdpartyException("个人模板印章接口调用失败code=" + result.getErrCode() + "msg=" + result.getMsg());
 	}
 
+	@Override
+	public String createOrganSeal(String accountId, String hText, String qText) {
+		// 生成模板印章的颜色
+		SealColor color = SealColor.RED;
+		SealService service = serviceClient.sealService();
+		AddSealResult result = service.addTemplateSeal(accountId, OrganizeTemplateType.STAR, color, hText, qText);
+		if (0 == result.getErrCode()) {
+			return result.getSealData();
+		}
+		throw new ThirdpartyException("企业模板印章接口调用失败code=" + result.getErrCode() + "msg=" + result.getMsg());
+	}
+
 	/**
 	 * 平台自身PDF摘要签署(印章标识)
 	 * @param srcPdfPath 源文件
@@ -230,20 +241,20 @@ public class TsignPlugin implements ESealPlugin, InitializingBean, DisposableBea
 		}
 		throw new ThirdpartyException("平台用户PDF摘要签署接口调用失败" + result.getErrCode() + "msg=" + result.getMsg());
 	}
-	
-	private String queryAccountIdByIdNo(String idcardNo){
-		
+
+	private String queryAccountIdByIdNo(String idcardNo) {
+
 		AccountService service = serviceClient.accountService();
-		
+
 		GetAccountProfileResult result = service.getAccountInfoByIdNo(idcardNo, LicenseQueryType.MAINLAND);
-		
-		if(result != null){
+
+		if (result != null) {
 			AccountProfile accountProfile = result.getAccountInfo();
-			if(accountProfile != null){
+			if (accountProfile != null) {
 				return accountProfile.getAccountUid();
 			}
 		}
-		
+
 		return null;
 	}
 }