Browse Source

Merge branch 'saas_220228' into saas

# Conflicts:
#	mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleStudentPaymentDao.java
#	mec-biz/src/main/resources/config/mybatis/CourseScheduleStudentPaymentMapper.xml
yonge 3 years ago
parent
commit
e38b7d9bc8
23 changed files with 405 additions and 297 deletions
  1. 3 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleStudentPaymentDao.java
  2. 5 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/OrganizationDao.java
  3. 41 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/OrganizationDto.java
  4. 16 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/HfMember.java
  5. 51 4
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/Organization.java
  6. 0 8
      mec-biz/src/main/java/com/ym/mec/biz/service/ContractService.java
  7. 8 4
      mec-biz/src/main/java/com/ym/mec/biz/service/OrganizationService.java
  8. 3 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CloudCoachPaymentProgramServiceImpl.java
  9. 51 188
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ContractServiceImpl.java
  10. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java
  11. 3 5
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java
  12. 68 13
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/OrganizationServiceImpl.java
  13. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  14. 61 15
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServeServiceImpl.java
  15. 16 0
      mec-biz/src/main/resources/config/mybatis/CourseScheduleStudentPaymentMapper.xml
  16. 11 4
      mec-biz/src/main/resources/config/mybatis/HfMemberMapper.xml
  17. 18 2
      mec-biz/src/main/resources/config/mybatis/OrganizationMapper.xml
  18. 1 1
      mec-biz/src/main/resources/config/mybatis/StudentExtracurricularExercisesSituationMapper.xml
  19. 17 34
      mec-student/src/main/java/com/ym/mec/student/controller/ContractsController.java
  20. 27 5
      mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java
  21. 2 2
      mec-web/src/main/java/com/ym/mec/web/config/ResourceServerConfig.java
  22. 1 1
      mec-web/src/main/java/com/ym/mec/web/controller/OrganizationController.java
  23. 0 2
      mec-web/src/main/java/com/ym/mec/web/controller/TaskController.java

+ 3 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleStudentPaymentDao.java

@@ -571,7 +571,9 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
 
     List<BaseNameDto> queryLastOverTeacher(@Param("studentIds") List<Integer> studentIds, @Param("groupType") String groupType);
 
-    Boolean hasStudentMusicTheoryCourseInfo(@Param("organId") String organId, @Param("tenantId") Integer tenantId, @Param("groupType") String groupType);
+	List<Mapper> queryUserMusicGroupCourseNumByClassTime(@Param("groupType") GroupType groupType, @Param("musicGroupIds") Set<String> musicGroupIds,
+    
+	Boolean hasStudentMusicTheoryCourseInfo(@Param("organId") String organId, @Param("tenantId") Integer tenantId, @Param("groupType") String groupType);
 
     List<ExportStudentCourseInfoDto> queryStudentCourseInfo(@Param("organId") String organId, @Param("tenantId") Integer tenantId, @Param("groupType") String groupType);
 }

+ 5 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/OrganizationDao.java

@@ -1,12 +1,14 @@
 package com.ym.mec.biz.dal.dao;
 
-import com.ym.mec.biz.dal.entity.Organization;
-import com.ym.mec.common.dal.BaseDAO;
-import org.apache.ibatis.annotations.Param;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.ibatis.annotations.Param;
+
+import com.ym.mec.biz.dal.entity.Organization;
+import com.ym.mec.common.dal.BaseDAO;
+
 public interface OrganizationDao extends BaseDAO<Integer, Organization> {
 
     /**

+ 41 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/OrganizationDto.java

@@ -0,0 +1,41 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.biz.dal.entity.Organization;
+
+public class OrganizationDto extends Organization {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -3461575801207273457L;
+
+	private String corporateName;
+	
+	private String corporateCode;
+	
+	private String memberId;
+
+	public String getCorporateName() {
+		return corporateName;
+	}
+
+	public void setCorporateName(String corporateName) {
+		this.corporateName = corporateName;
+	}
+
+	public String getCorporateCode() {
+		return corporateCode;
+	}
+
+	public void setCorporateCode(String corporateCode) {
+		this.corporateCode = corporateCode;
+	}
+
+	public String getMemberId() {
+		return memberId;
+	}
+
+	public void setMemberId(String memberId) {
+		this.memberId = memberId;
+	}
+}

+ 16 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/HfMember.java

@@ -10,8 +10,15 @@ import java.math.BigDecimal;
 import java.util.Date;
 
 public class HfMember extends BaseEntity {
-    @ApiModelProperty(value = "id",required = true)
+    /**
+	 * 
+	 */
+	private static final long serialVersionUID = -490352140698445380L;
+
+	@ApiModelProperty(value = "id",required = true)
     private Integer Id;
+    
+    private Integer organId;
 
     @ApiModelProperty(value = "商户号",required = true)
     private String memberId;
@@ -283,4 +290,12 @@ public class HfMember extends BaseEntity {
     public void setRouteOrganId(Integer routeOrganId) {
         this.routeOrganId = routeOrganId;
     }
+
+	public Integer getOrganId() {
+		return organId;
+	}
+
+	public void setOrganId(Integer organId) {
+		this.organId = organId;
+	}
 }

+ 51 - 4
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/Organization.java

@@ -1,19 +1,26 @@
 package com.ym.mec.biz.dal.entity;
 
-import com.ym.mec.biz.dal.enums.GradeTypeEnum;
-import com.ym.mec.biz.dal.enums.YesOrNoEnum;
-import com.ym.mec.common.entity.BaseEntity;
 import io.swagger.annotations.ApiModelProperty;
-import org.apache.commons.lang3.builder.ToStringBuilder;
 
 import java.util.Date;
 import java.util.List;
 
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+import com.ym.mec.biz.dal.enums.GradeTypeEnum;
+import com.ym.mec.biz.dal.enums.YesOrNoEnum;
+import com.ym.mec.common.entity.BaseEntity;
+
 /**
  * 对应数据库表(organization):
  */
 public class Organization extends BaseEntity {
 
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -8979746516597046410L;
+
 	/**  */
 	private Integer id;
 	
@@ -29,6 +36,14 @@ public class Organization extends BaseEntity {
 	@ApiModelProperty(value = "区域编码",required = false)
 	private Integer areaId;
 	
+	private String corporateName;
+	
+	private String corporateCode;
+	
+	private String corporateSeal;
+	
+	private String corporateFinancialSeal;
+	
 	/** 创建时间 */
 	private Date createTime;
 	
@@ -166,4 +181,36 @@ public class Organization extends BaseEntity {
 		this.gradeType = gradeType;
 	}
 
+	public String getCorporateName() {
+		return corporateName;
+	}
+
+	public void setCorporateName(String corporateName) {
+		this.corporateName = corporateName;
+	}
+
+	public String getCorporateCode() {
+		return corporateCode;
+	}
+
+	public void setCorporateCode(String corporateCode) {
+		this.corporateCode = corporateCode;
+	}
+
+	public String getCorporateSeal() {
+		return corporateSeal;
+	}
+
+	public void setCorporateSeal(String corporateSeal) {
+		this.corporateSeal = corporateSeal;
+	}
+
+	public String getCorporateFinancialSeal() {
+		return corporateFinancialSeal;
+	}
+
+	public void setCorporateFinancialSeal(String corporateFinancialSeal) {
+		this.corporateFinancialSeal = corporateFinancialSeal;
+	}
+
 }

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

@@ -8,7 +8,6 @@ import com.ym.mec.biz.dal.dto.OAFinancialDto;
 import com.ym.mec.biz.dal.entity.SysUserTsign;
 import com.ym.mec.biz.dal.enums.CourseViewTypeEnum;
 import com.ym.mec.biz.dal.enums.KitGroupPurchaseTypeEnum;
-import com.ym.mec.common.entity.HttpResponseResult;
 
 public interface ContractService {
 
@@ -120,13 +119,6 @@ public interface ContractService {
 	void transferProduceContract(Integer userId, String musicGroupId, CourseViewTypeEnum courseViewType);
 
 	/**
-	 * 传递产品协议-仅生成课程协议
-	 * @param userId
-	 * @return
-	 */
-	HttpResponseResult transferProduceContractOnlyWithCourseList(Integer userId);
-
-	/**
 	 * 查询产品协议
 	 * @param userId
 	 * @return

+ 8 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/OrganizationService.java

@@ -1,12 +1,15 @@
 package com.ym.mec.biz.service;
 
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
 import com.ym.mec.biz.dal.entity.Organization;
-import com.ym.mec.biz.dal.enums.SysUserRoleEnum;
 import com.ym.mec.biz.dal.page.EducationBaseQueryInfo;
 import com.ym.mec.common.service.BaseService;
 
-import java.util.*;
-
 public interface OrganizationService extends BaseService<Integer, Organization> {
 
     Set<Integer>  EXCLUDE_ORGAN_IDS = new HashSet<>(Arrays.asList(36,38,39,41,42,43,44,45,46,47,48,49,50,52,54,55,56,2,27,22,24));
@@ -75,5 +78,6 @@ public interface OrganizationService extends BaseService<Integer, Organization>
     * @date 2022/1/6 18:11
     */
     <T extends EducationBaseQueryInfo> T onlyEducation(T queryInfo);
-
+    
+    boolean updateBasicInfo(Organization organization);
 }

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

@@ -94,18 +94,18 @@ public class CloudCoachPaymentProgramServiceImpl extends BaseServiceImpl<Long, C
 			cloudTeacherOrderDao.batchInsert(cloudTeacherOrder,cloudCoachPaymentProgram.getUserIds());
 		}else {
 			//推送缴费消息
-			TenantInfo tenantInfo = tenantInfoDao.selectById(cloudCoachPaymentProgram.getTenantId());
+			//TenantInfo tenantInfo = tenantInfoDao.selectById(cloudCoachPaymentProgram.getTenantId());
 			Map<Integer, String> phoneMaps = MapUtil.convertMybatisMap(teacherDao.queryPhoneByIds(StringUtils.join(userIds,",")));
 			String baseApiUrl = sysConfigDao.findConfigValue(SysConfigService.BASE_API_URL);
 			StringBuffer pushUrl = new StringBuffer(baseApiUrl).append("/#/studentMember?id=").append(cloudCoachPaymentProgram.getId());
 			sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.STUDENT_SMS_CLOUD_PAYMENT,phoneMaps,
-					null,0,"",null,tenantInfo.getName(), HttpUtil.getSortUrl(pushUrl.toString()));
+					null,0,"",null, HttpUtil.getSortUrl(pushUrl.toString()));
 
 			StringBuffer notifyUrl = new StringBuffer("8?").append(baseApiUrl).append("/#/studentMember?id=").append(cloudCoachPaymentProgram.getId());
 			Map<Integer, String> userIdMaps = new HashMap<>(userIds.size());
 			userIds.forEach(e->userIdMaps.put(e,e.toString()));
 			sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PUSH_CLOUD_PAYMENT,userIdMaps,
-					null,0,notifyUrl.toString(),"STUDENT",tenantInfo.getName());
+					null,0,notifyUrl.toString(),"STUDENT");
 		}
 	}
 }

+ 51 - 188
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ContractServiceImpl.java

@@ -24,7 +24,6 @@ import org.springframework.beans.factory.InitializingBean;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Lazy;
-import org.springframework.http.HttpStatus;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Isolation;
@@ -39,7 +38,6 @@ import com.ym.mec.biz.dal.dao.EmployeeDao;
 import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderDao;
 import com.ym.mec.biz.dal.dao.MusicGroupStudentFeeDao;
 import com.ym.mec.biz.dal.dao.StudentDao;
-import java.nio.charset.Charset;
 import com.ym.mec.biz.dal.dao.StudentRegistrationDao;
 import com.ym.mec.biz.dal.dao.SysUserContractsDao;
 import com.ym.mec.biz.dal.dto.CirculationUser;
@@ -52,6 +50,7 @@ import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender;
 import com.ym.mec.biz.dal.entity.MusicGroupStudentFee;
 import com.ym.mec.biz.dal.entity.MusicGroupSubjectGoodsGroup;
 import com.ym.mec.biz.dal.entity.MusicGroupSubjectPlan;
+import com.ym.mec.biz.dal.entity.Organization;
 import com.ym.mec.biz.dal.entity.StudentRegistration;
 import com.ym.mec.biz.dal.entity.Subject;
 import com.ym.mec.biz.dal.entity.SysUserContracts;
@@ -68,6 +67,7 @@ import com.ym.mec.biz.service.GoodsService;
 import com.ym.mec.biz.service.MusicGroupService;
 import com.ym.mec.biz.service.MusicGroupSubjectGoodsGroupService;
 import com.ym.mec.biz.service.MusicGroupSubjectPlanService;
+import com.ym.mec.biz.service.OrganizationService;
 import com.ym.mec.biz.service.StudentRegistrationService;
 import com.ym.mec.biz.service.SubjectService;
 import com.ym.mec.biz.service.SysUserContractsService;
@@ -76,8 +76,6 @@ import com.ym.mec.biz.service.TenantConfigService;
 import com.ym.mec.biz.service.TenantContractTemplateService;
 import com.ym.mec.biz.service.TenantInfoService;
 import com.ym.mec.biz.service.VipGroupService;
-import com.ym.mec.common.controller.BaseController;
-import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.thirdparty.eseal.ESealPlugin;
 import com.ym.mec.thirdparty.storage.StoragePluginContext;
@@ -155,6 +153,10 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
     private TenantConfigService tenantConfigService;
     
     @Autowired
+    @Lazy
+    private OrganizationService organizationService;
+    
+    @Autowired
     private TenantContractTemplateService tenantContractTemplateService;
 
     @Value("${contract.baseDir:/var/pdf}")
@@ -198,9 +200,9 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
 
 		SysUserTsign sysUserTsign = null;
 
-		SysUserTsign orignSysUserTsign = sysUserTsignService.get(-userId);
+		SysUserTsign orignSysUserTsign = sysUserTsignService.queryByCardNo(organCode);
 
-		if (orignSysUserTsign == null || !StringUtils.equals(orignSysUserTsign.getCardNo(), organCode)) {
+		if (orignSysUserTsign == null) {
 
 			String accountId = eSealPlugin.createOrganAccount(orgName, organCode);
 			if (StringUtils.isBlank(accountId)) {
@@ -213,16 +215,7 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
 			}
 
 			sysUserTsign = new SysUserTsign(-userId, accountId, sealData, orgName, organCode, tenantId);
-
-			if (orignSysUserTsign == null) {
-				sysUserTsignService.insert(sysUserTsign);
-			} else {
-				orignSysUserTsign.setAccountId(accountId);
-				orignSysUserTsign.setSealData(sealData);
-				orignSysUserTsign.setName(orgName);
-				orignSysUserTsign.setCardNo(organCode);
-				sysUserTsignService.update(orignSysUserTsign);
-			}
+			sysUserTsignService.insert(sysUserTsign);
 
 		} else if (!StringUtils.equals(orignSysUserTsign.getName(), orgName)) {
 			if (eSealPlugin.updateOrganAccount(orignSysUserTsign.getAccountId(), orgName, organCode)) {
@@ -987,18 +980,21 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
             return;
         }
         
-		TenantInfo tenantInfo = tenantInfoService.get(studentInfo.getTenantId());
-		if(tenantInfo == null){
-			throw new BizException("机构信息不存在");
-		}
-		
-		TenantConfig tenantConfig = tenantConfigService.queryByTenantId(studentInfo.getTenantId());
-		if(tenantConfig == null){
-			throw new BizException("机构配置信息查询失败");
+        //如果分部有企业信息,就用分部上的企业信息,否则用机构上的企业信息
+        String companyName = null;
+        TenantInfo tenantInfo = null;
+        Organization organizationDto = organizationService.get(user.getOrganId());
+		if (organizationDto == null || StringUtils.isBlank(organizationDto.getCorporateName()) || StringUtils.isBlank(organizationDto.getCorporateCode())) {
+
+			tenantInfo = tenantInfoService.get(studentInfo.getTenantId());
+			if (tenantInfo == null) {
+				throw new BizException("机构信息不存在");
+			}
+			companyName = tenantInfo.getTsignName();
+		} else {
+			companyName = organizationDto.getCorporateName();
 		}
-		
-		params.put("companyName", tenantInfo.getTsignName());
-		params.put("sealPicture", tenantConfig.getCorporateChops());
+		params.put("companyName", companyName);
         
 		if (studentInfo.getTenantId() == 1) {
 			if (OwnershipType.OWN.name().equals(params.get("ownershipType"))) {
@@ -1020,22 +1016,17 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
             return;
         }
 
-
-        String organCode = "";
+        String organCode = tenantInfo == null ? organizationDto.getCorporateCode() : tenantInfo.getTsignCode();
         
 		if (user.getTenantId() == 1) {
-			if (OwnershipType.OWN.name().equals(params.get("ownershipType"))) {
-				organCode = "91440300326364429H";
-			} else {
+			if (!OwnershipType.OWN.name().equals(params.get("ownershipType"))) {
 				organCode = "91420106333619290A";
 			}
-		} else {
-			organCode = tenantInfo.getTsignCode();
 		}
         SysUserTsign organTsign = sysUserTsignService.queryByCardNo(organCode);
         if (organTsign == null) {
-            logger.error("甲方未创建签章");
-            return;
+            //创建企业签章
+            addTsign(tenantInfo.getUserId(), organCode, companyName, user.getTenantId());
         }
 
         eSealPlugin.organSign(organTsign.getSealData(), srcPdfPath, srcPdfPath);
@@ -1054,6 +1045,7 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
         sysUserContracts.setUrl(pdfFilePath);
         sysUserContracts.setUserId(userId);
         sysUserContracts.setVersion(tenantContractTemplate.getVersion());
+        sysUserContracts.setTenantId(user.getTenantId());
 
         sysUserContractsService.insert(sysUserContracts);
 
@@ -1113,18 +1105,31 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
             ownershipType = courseViewType;
         }
         
-		TenantInfo tenantInfo = tenantInfoService.get(studentInfo.getTenantId());
-		if(tenantInfo == null){
-			throw new BizException("机构信息不存在");
-		}
-		
-		TenantConfig tenantConfig = tenantConfigService.queryByTenantId(studentInfo.getTenantId());
-		if(tenantConfig == null){
-			throw new BizException("机构配置信息查询失败");
+        //如果分部有企业信息,就用分部上的企业信息,否则用机构上的企业信息
+        String companyName = null, sealPicture = null;
+        TenantInfo tenantInfo = null;
+        Organization organizationDto = organizationService.get(studentInfo.getOrganId());
+		if (organizationDto == null || StringUtils.isBlank(organizationDto.getCorporateName()) || StringUtils.isBlank(organizationDto.getCorporateCode())) {
+
+			tenantInfo = tenantInfoService.get(studentInfo.getTenantId());
+			if (tenantInfo == null) {
+				throw new BizException("机构信息不存在");
+			}
+	        
+			TenantConfig tenantConfig = tenantConfigService.queryByTenantId(studentInfo.getTenantId());
+			if(tenantConfig == null){
+				throw new BizException("机构配置信息查询失败");
+			}
+			
+			companyName = tenantInfo.getTsignName();
+			sealPicture = tenantConfig.getCorporateChops();
+		} else {
+			companyName = organizationDto.getCorporateName();
+			sealPicture = organizationDto.getCorporateSeal();
 		}
 		
-		params.put("companyName", tenantInfo.getTsignName());
-		params.put("sealPicture", tenantConfig.getCorporateChops());
+		params.put("companyName", companyName);
+		params.put("sealPicture", sealPicture);
         
 		if (studentInfo.getTenantId() == 1) {
 			if (OwnershipType.OWN.name().equals(params.get("ownershipType"))) {
@@ -1162,148 +1167,6 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
     }
 
     @Override
-    @Transactional(rollbackFor = Exception.class)
-    public HttpResponseResult transferProduceContractOnlyWithCourseList(Integer userId) {
-        SysUser user = studentDao.lockUserReturnInfo(userId);
-        if (user == null) {
-            logger.error("用户不存在({})", userId);
-            return BaseController.failed("用户不存在");
-        }
-
-        int validContactNum = sysUserContractsDao.countUserValidContact(userId);
-        if (validContactNum > 0) {
-            return BaseController.succeed();
-        }
-
-        if (StringUtils.isBlank(user.getRealName()) || StringUtils.isBlank(user.getIdCardNo())) {
-            return BaseController.failed(HttpStatus.PARTIAL_CONTENT, user, "");
-        }
-
-        SysUserTsign sysUserTsign = sysUserTsignService.get(userId);
-        if (sysUserTsign == null) {
-            try {
-                sysUserTsign = register(userId, user.getRealName(), user.getIdCardNo(), user.getPhone());
-            } catch (Exception e) {
-                logger.error("用户电子签章注册失败", e);
-                return BaseController.failed("用户电子签章注册失败");
-            }
-        }
-        Date date = new Date();
-
-        // 合成freemarker
-        String srcPdfPath = contractBaseDir + "/product/" + dateFormat1.format(date) + "/" + userId + "_" + LocalDateTime.now().getSecond() + ".pdf";
-
-        File srcFile = new File(srcPdfPath);
-
-        File debtFile = new File(srcFile.getParent());
-        if (!debtFile.exists()) {
-            debtFile.mkdirs();
-        }
-
-        FreemarkerTemplateEngine templateEngine = FreemarkerTemplateEngine.getInstance();
-        templateEngine.setClassForTemplateLoading(ContractServiceImpl.class, "/config/contracts/");
-
-        Map<String, Object> params = new HashMap<String, Object>();
-
-        // 查询参数信息
-        StudentInfo studentInfo = studentRegistrationService.queryStudentInfo(userId);
-        params.put("studentInfo", studentInfo);
-
-        params.put("isShowVisualSeal", false);
-
-        params.put("ownershipType", "OWN");
-		
-        // 查询最新协议模板
-		TenantContractTemplate tenantContractTemplate = tenantContractTemplateService.queryLatestContractTemplate(user.getTenantId(), null, null);
-		if(tenantContractTemplate == null){
-			logger.error("最新协议模板查询失败");
-            return BaseController.succeed();
-		}
-		String mainContent = tenantContractTemplate.getContractTemplateContent();
-		params.put("contractMainContent", mainContent);
-
-        // 查询是否已生成协议
-        List<SysUserContracts> userContracts = sysUserContractsService.getUserContractWithType(userId, ContractType.PRODUCT, tenantContractTemplate.getVersion());
-        if (!CollectionUtils.isEmpty(userContracts)) {
-            return BaseController.succeed();
-        }
-        
-		TenantInfo tenantInfo = tenantInfoService.get(studentInfo.getTenantId());
-		if(tenantInfo == null){
-			throw new BizException("机构信息不存在");
-		}
-		
-		TenantConfig tenantConfig = tenantConfigService.queryByTenantId(studentInfo.getTenantId());
-		if(tenantConfig == null){
-			throw new BizException("机构配置信息查询失败");
-		}
-		
-		params.put("companyName", tenantInfo.getTsignName());
-		params.put("sealPicture", tenantConfig.getCorporateChops());
-        
-		if (studentInfo.getTenantId() == 1) {
-			if (OwnershipType.OWN.name().equals(params.get("ownershipType"))) {
-				//params.put("companyName", "深圳大雅乐盟网络教育股份有限公司");
-				//params.put("sealPicture", "https://daya-online.oss-cn-beijing.aliyuncs.com/website/cachet.png");
-			} else {
-				params.put("companyName", "武汉长乐长风乐器销售有限公司");
-				params.put("sealPicture", "https://daya-online.oss-cn-beijing.aliyuncs.com/website/clcf.png");
-			}
-		}
-
-        templateEngine.render(params, "latest_contract_template.ftl", srcFile);
-
-        // 生成借款协议PDF
-        try {
-            PDFUtil.renderToPDFByData(ContractServiceImpl.class.getResource("/").getFile(), FileUtils.readFileToString(srcFile, Charset.defaultCharset()), srcPdfPath, "simsun.ttc");
-        } catch (IOException e) {
-            logger.error("生成产品协议失败", e);
-            return BaseController.failed("生成产品协议失败");
-        }
-
-        String organCode = "";
-        
-		if (user.getTenantId() == 1) {
-			if (OwnershipType.OWN.name().equals(params.get("ownershipType"))) {
-				organCode = "91440300326364429H";
-			} else {
-				organCode = "91420106333619290A";
-			}
-		} else {
-			organCode = tenantInfo.getTsignCode();
-		}
-
-        SysUserTsign organTsign = sysUserTsignService.queryByCardNo(organCode);
-        if (organTsign == null) {
-            logger.error("甲方未创建签章");
-            return BaseController.failed("甲方未创建签章");
-        }
-
-        eSealPlugin.organSign(organTsign.getSealData(), srcPdfPath, srcPdfPath);
-        if (sysUserTsign != null && CertificateTypeEnum.IDENTITY.getCode().equals(user.getCertificateType())) {
-            eSealPlugin.userSign(sysUserTsign.getAccountId(), sysUserTsign.getSealData(), srcPdfPath, srcPdfPath);
-        }
-
-        // 上传到oss
-        String dateStrOss = dateFormatOss.format(date);
-        dateStrOss = "product/" + dateStrOss + "/" + DateUtil.getHour(date);
-        String pdfFilePath = storagePluginContext.uploadFile(KS3StoragePlugin.PLUGIN_NAME, dateStrOss, srcFile);
-
-        SysUserContracts sysUserContracts = new SysUserContracts();
-        sysUserContracts.setCreateTime(date);
-        sysUserContracts.setType(ContractType.PRODUCT);
-        sysUserContracts.setUrl(pdfFilePath);
-        sysUserContracts.setUserId(userId);
-        sysUserContracts.setVersion(2);
-        sysUserContracts.setTenantId(user.getTenantId());
-
-        sysUserContractsService.insert(sysUserContracts);
-
-        FileUtils.deleteQuietly(srcFile);
-        return BaseController.succeed();
-    }
-
-    @Override
     public String transferOaFinancial(OAFinancialDto financialDto) {
         List<Integer> circulationUserIds = financialDto.getCirculationUsers().stream().map(CirculationUser::getUserId).collect(Collectors.toList());
         List<Integer> executorIds = financialDto.getExecutors().stream().map(CirculationUser::getUserId).collect(Collectors.toList());

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

@@ -209,7 +209,7 @@ public class ExportServiceImpl implements ExportService {
             throw new BizException("请登录");
         }
         if(exportEnum == ExportEnum.ORDER_LIST1 || exportEnum == ExportEnum.ORDER_LIST2){
-            if(sysUser.getTenantId() <= 0){
+            if(sysUser.getTenantId() <= 1){
                 exportEnum = ExportEnum.ORDER_LIST1;
             }else {
                 exportEnum = ExportEnum.ORDER_LIST2;

+ 3 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java

@@ -321,10 +321,8 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 		LocalDate nowDate = LocalDate.now();
 		
 		List<Organization> allOrgans = organizationService.findAllOrgans(tenantId);
-		if(CollectionUtils.isEmpty(this.organIds.get())){
-			this.organIds.get().clear();
-			this.organIds.get().addAll(allOrgans.stream().map(Organization::getId).collect(Collectors.toSet()));
-		}
+		this.organIds.get().clear();
+		this.organIds.get().addAll(allOrgans.stream().map(Organization::getId).collect(Collectors.toSet()));
 
 		if(StringUtils.isBlank(dayStr)){
 			dayStr = nowDate.plusDays(-1).toString();
@@ -580,7 +578,7 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 		boolean specialType = IndexDataType.NEWLY_STUDENT_NUM.equals(indexDataType)||IndexDataType.QUIT_MUSIC_GROUP_STUDENT_NUM.equals(indexDataType);
 		Set<Integer> ignoreOrganIds = new HashSet<>();
 		if(specialType){
-			List<IndexBaseMonthData> indexBaseDatas = indexBaseMonthDataDao.getWithDayAndDataType(dayStr, indexDataType,TenantContextHolder.getTenantId());
+			List<IndexBaseMonthData> indexBaseDatas = indexBaseMonthDataDao.getWithDayAndDataType(dayStr, indexDataType, tenantId);
 			if(!CollectionUtils.isEmpty(indexBaseDatas)) {
 				ignoreOrganIds = indexBaseDatas.stream().map(IndexBaseMonthData::getOrganId).collect(Collectors.toSet());
 			}

+ 68 - 13
mec-biz/src/main/java/com/ym/mec/biz/service/impl/OrganizationServiceImpl.java

@@ -1,19 +1,37 @@
 package com.ym.mec.biz.service.impl;
 
+import static com.ym.mec.biz.dal.enums.SysUserRoleEnum.EDUCATION;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dao.ClassGroupDao;
 import com.ym.mec.biz.dal.dao.EmployeeDao;
 import com.ym.mec.biz.dal.dao.OrganizationDao;
 import com.ym.mec.biz.dal.dao.TeacherDao;
+import com.ym.mec.biz.dal.dao.TenantContractTemplateDao;
+import com.ym.mec.biz.dal.dao.TenantInfoDao;
 import com.ym.mec.biz.dal.entity.Employee;
 import com.ym.mec.biz.dal.entity.Organization;
 import com.ym.mec.biz.dal.entity.Teacher;
+import com.ym.mec.biz.dal.entity.TenantContractTemplate;
 import com.ym.mec.biz.dal.entity.TenantInfo;
 import com.ym.mec.biz.dal.enums.FivePlusGradeEnum;
 import com.ym.mec.biz.dal.enums.GradeTypeEnum;
 import com.ym.mec.biz.dal.enums.SixPlusGradeEnum;
 import com.ym.mec.biz.dal.page.EducationBaseQueryInfo;
+import com.ym.mec.biz.service.ContractService;
 import com.ym.mec.biz.service.OrganizationService;
 import com.ym.mec.biz.service.SysEmployeePositionService;
 import com.ym.mec.biz.service.TenantInfoService;
@@ -21,17 +39,6 @@ import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.common.tenant.TenantContextHolder;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.stream.Collectors;
-
-import static com.ym.mec.biz.dal.enums.SysUserRoleEnum.EDUCATION;
 
 @Service
 public class OrganizationServiceImpl extends BaseServiceImpl<Integer, Organization> implements OrganizationService {
@@ -48,6 +55,14 @@ public class OrganizationServiceImpl extends BaseServiceImpl<Integer, Organizati
 	private SysUserFeignService sysUserFeignService;
 	@Autowired
 	private SysEmployeePositionService employeePositionService;
+	@Autowired
+    @Lazy
+	private ContractService contractService;
+	@Autowired
+	private TenantInfoDao tenantInfoDao;
+	
+	@Autowired
+	private TenantContractTemplateDao tenantContractTemplateDao;
 
 	@Override
 	public BaseDAO<Integer, Organization> getDAO() {
@@ -155,7 +170,6 @@ public class OrganizationServiceImpl extends BaseServiceImpl<Integer, Organizati
 		return organizationDao.getOrgans(organIds,tenantId);
 	}
 
-
     @Override
     public <T extends EducationBaseQueryInfo> T onlyEducation(T queryInfo) {
 		SysUser sysUser = sysUserFeignService.queryUserInfo();
@@ -170,4 +184,45 @@ public class OrganizationServiceImpl extends BaseServiceImpl<Integer, Organizati
 		}
 		return queryInfo;
     }
+
+	@Override
+	@Transactional
+	public boolean updateBasicInfo(Organization organization) {
+		
+		Organization orginOrgan = get(organization.getId());
+		
+		if(orginOrgan == null){
+			throw new BizException("分部原始信息查询失败");
+		}
+		
+		update(organization);
+		
+		//是否修改了机构名称或机构编码
+        if (!StringUtils.equals(orginOrgan.getCorporateName(), organization.getCorporateName()) || !StringUtils.equals(orginOrgan.getCorporateCode(), organization.getCorporateCode())) {
+        	
+        	Integer tenantId = organization.getTenantId();
+            //升级机构协议版本号
+            TenantContractTemplate tenantContractTemplate = tenantContractTemplateDao.queryLatestContractTemplate(null, null, tenantId);
+            if (tenantContractTemplate != null) {
+            	tenantInfoDao.getLocked(tenantId);
+
+                Integer maxVersion = tenantContractTemplateDao.queryMaxVersion();
+                int version = maxVersion == null ? 1 : maxVersion + 1;
+
+                tenantContractTemplate.setVersion(version);
+                Date date = new Date();
+                tenantContractTemplate.setUpdateTime(date);
+
+                tenantContractTemplateDao.update(tenantContractTemplate);
+            }
+            
+			if (StringUtils.isNotBlank(organization.getCorporateName()) && StringUtils.isNotBlank(organization.getCorporateCode())) {
+				// 添加签章信息
+				contractService.addTsign(organization.getId(), organization.getCorporateCode(), organization.getCorporateName(), tenantId);
+			}
+        }
+		
+		return true;
+	}
+
 }

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

@@ -768,6 +768,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                 studentPaymentOrder.setClassGroupId(206);
             }
             studentPaymentOrderService.update(studentPaymentOrder);
+            studentPaymentOrder.setVersion(studentPaymentOrder.getVersion() + 1);
         }
         return studentPaymentOrder;
     }

+ 61 - 15
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServeServiceImpl.java

@@ -21,8 +21,10 @@ import org.springframework.util.CollectionUtils;
 
 import java.math.BigDecimal;
 import java.time.DayOfWeek;
+import java.time.Instant;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.ZoneId;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -341,15 +343,20 @@ public class StudentServeServiceImpl implements StudentServeService {
 //            return;
 //        }
 
+        //查询需要生成服务指标的学员
         List<StudentServeCourseDto> studentFutureCourseInfo = studentDao.getStudentFutureCourseInfo(monDayDate.toString(), DateUtil.dateToString(nextMonday, "yyyy-MM-dd"), studentIds, tenantId);
         if(CollectionUtils.isEmpty(studentFutureCourseInfo)){
             return;
         }
         Map<Integer, List<StudentServeCourseDto>> studentCourseMap = studentFutureCourseInfo.stream().collect(Collectors.groupingBy(StudentServeCourseDto::getStudentId));
+        //有单技课或合奏课,且需要服务的学员
         Set<Integer> musicCourseStudentIds = studentFutureCourseInfo.stream().filter(s -> CourseSchedule.CourseScheduleType.SINGLE.equals(s.getType()) || CourseSchedule.CourseScheduleType.MIX.equals(s.getType())).map(StudentServeCourseDto::getStudentId).collect(Collectors.toSet());
 
+        //有课且被服务的学生
         Set<Integer> haveCourseBeServeStudentIds = studentCourseMap.keySet();
+        //查询所有开启了服务状态的学员
         List<Integer> allServeStudentIds = studentDao.getServeStudentIds(tenantId);
+        //没课但需要服务的学员
         Set<Integer> noCourseServeStudentIds = allServeStudentIds.stream().filter(id -> !haveCourseBeServeStudentIds.contains(id)).collect(Collectors.toSet());
 
         Set<Integer> musicStudentIds = new HashSet<>();
@@ -361,6 +368,7 @@ public class StudentServeServiceImpl implements StudentServeService {
         }
         List<StudentServeCourseDto> noCourseBeServeStudentInfo = new ArrayList<>();
         if(!CollectionUtils.isEmpty(musicStudentIds)){
+        	//查询进行中的乐团,且需要服务的学生、老师、乐团信息
             noCourseBeServeStudentInfo = studentDao.getNoCourseBeServeStudentInfo(new ArrayList<>(musicStudentIds), tenantId);
         }
 
@@ -371,22 +379,48 @@ public class StudentServeServiceImpl implements StudentServeService {
 
         for (Map.Entry<Integer, List<StudentServeCourseDto>> studentCourseMapEntry : studentCourseMap.entrySet()) {
             Map<CourseSchedule.CourseScheduleType, List<StudentServeCourseDto>> typeCourseMap = studentCourseMapEntry.getValue().stream().collect(Collectors.groupingBy(StudentServeCourseDto::getType));
-
-            if(typeCourseMap.containsKey(CourseSchedule.CourseScheduleType.SINGLE)){
-                Set<String> musicGroupIds = noCourseStudentMusicIdsMap.get(studentCourseMapEntry.getKey());
-                if(Objects.isNull(musicGroupIds)){
-                    musicGroupIds = new HashSet<>();
-                }
-
+            
+            Integer userId = studentCourseMapEntry.getKey();
+            
+            Set<String> musicGroupIds = noCourseStudentMusicIdsMap.get(studentCourseMapEntry.getKey());
+            if(Objects.isNull(musicGroupIds)){
+                musicGroupIds = new HashSet<>();
+            }
+            //查询用户在指定乐团截止本周末的课程数
+            List<Mapper> mapperList = new ArrayList<Mapper>();
+            if(musicGroupIds.size() > 0){
+            	mapperList = courseScheduleStudentPaymentDao.queryUserMusicGroupCourseNumByClassTime(GroupType.MUSIC, musicGroupIds, userId, new Date(0, 1, 1), LocalDateToUdate(sunDayDate));
+            }
+            Map<Object, Object> map = mapperList.stream().collect(Collectors.toMap(Mapper :: getKey, Mapper :: getValue));
+            
+            //是否在乐团生成服务指标
+            boolean isServiceWithMusicGroup = false;
+            //判断截止本周末是否有乐团课
+            for(Mapper m : mapperList){
+            	if((long)m.getValue() > 0){
+            		isServiceWithMusicGroup = true;
+            	}
+            }
+            
+            //有未上的单技课
+            if(typeCourseMap.containsKey(CourseSchedule.CourseScheduleType.SINGLE) && isServiceWithMusicGroup){
+                
                 List<StudentServeCourseDto> weekCourseInfo = typeCourseMap.get(CourseSchedule.CourseScheduleType.SINGLE).stream().filter(c -> c.getCourseStartTime().compareTo(nextMonday) < 0).collect(Collectors.toList());
                 if(!CollectionUtils.isEmpty(weekCourseInfo)){
                     Map<String, List<StudentServeCourseDto>> groupCourseInfo = weekCourseInfo.stream().collect(Collectors.groupingBy(StudentServeCourseDto::getMusicGroupId));
                     Map<Integer, Set<Long>> teacherNotOverCourseIds = new HashMap<>();
                     Map<Integer, Set<Long>> teacherServiceCourseIdMap = new HashMap<>();
                     for (Map.Entry<String, List<StudentServeCourseDto>> groupCourseInfoEntry : groupCourseInfo.entrySet()) {
+                    	
                         if(musicGroupIds.contains(groupCourseInfoEntry.getKey())) {
                             musicGroupIds.remove(groupCourseInfoEntry.getKey());
                         }
+                        
+                        //学生在当前乐团没有上过课,就不需要生成服务指标
+                        if(map.get(groupCourseInfoEntry.getKey()) != null && (long)map.get(groupCourseInfoEntry.getKey()) == 0){
+                        	continue;
+                        }
+                        
                         StudentServeCourseDto courseInfo = groupCourseInfoEntry.getValue().stream().min(Comparator.comparing(StudentServeCourseDto::getCourseStartTime)).get();
                         if(!teacherServiceCourseIdMap.containsKey(courseInfo.getActualTeacherId())){
                             teacherServiceCourseIdMap.put(courseInfo.getActualTeacherId(), new HashSet<>());
@@ -443,7 +477,7 @@ public class StudentServeServiceImpl implements StudentServeService {
                     studentExtracurricularExercisesSituation.setExpectExercisesNum(teacherNumMapEntry.getValue());
                     results.add(studentExtracurricularExercisesSituation);
                 }
-            }else if(typeCourseMap.containsKey(CourseSchedule.CourseScheduleType.VIP)){
+            }else if(typeCourseMap.containsKey(CourseSchedule.CourseScheduleType.VIP)){ //有未上的VIP
                 List<StudentServeCourseDto> futureCourseInfo = typeCourseMap.get(CourseSchedule.CourseScheduleType.VIP);
                 List<StudentServeCourseDto> weekCourseInfo = typeCourseMap.get(CourseSchedule.CourseScheduleType.VIP).stream().filter(c -> c.getCourseStartTime().compareTo(nextMonday) < 0).collect(Collectors.toList());
                 if(CollectionUtils.isEmpty(weekCourseInfo)){
@@ -478,13 +512,16 @@ public class StudentServeServiceImpl implements StudentServeService {
                         results.add(studentExtracurricularExercisesSituation);
                     }
                 }
-            }else if(typeCourseMap.containsKey(CourseSchedule.CourseScheduleType.MIX)){
-                Set<String> musicGroupIds = noCourseStudentMusicIdsMap.get(studentCourseMapEntry.getKey());
-                if(CollectionUtils.isEmpty(musicGroupIds)){
-                    continue;
-                }
+            }else if(typeCourseMap.containsKey(CourseSchedule.CourseScheduleType.MIX)){//有未上的合奏课
+                
                 Map<Integer, Integer> teacherNumMap = new HashMap<>();
                 for (String groupId : musicGroupIds) {
+                	
+                    //学生在当前乐团没有上过课,就不需要生成服务指标
+                    if(map.get(groupId) == null || (long)map.get(groupId) == 0){
+                    	continue;
+                    }
+                    
                     Integer teacherId = null;
                     List<BaseMapDto<Integer, Integer>> studentTeacherIdList = classGroupStudentMapperDao.getStudentClassGroupBishopTeacherMap(Arrays.asList(studentCourseMapEntry.getKey()), groupId);
                     if(!CollectionUtils.isEmpty(studentTeacherIdList)){
@@ -512,7 +549,7 @@ public class StudentServeServiceImpl implements StudentServeService {
                     studentExtracurricularExercisesSituation.setExpectExercisesNum(teacherNumMapEntry.getValue());
                     results.add(studentExtracurricularExercisesSituation);
                 }
-            }else if(typeCourseMap.containsKey(CourseSchedule.CourseScheduleType.PRACTICE)){
+            }else if(typeCourseMap.containsKey(CourseSchedule.CourseScheduleType.PRACTICE)){//有未上的陪练课
                 List<StudentServeCourseDto> futureCourseInfo = typeCourseMap.get(CourseSchedule.CourseScheduleType.PRACTICE);
                 List<StudentServeCourseDto> weekCourseInfo = typeCourseMap.get(CourseSchedule.CourseScheduleType.PRACTICE).stream().filter(c -> c.getCourseStartTime().compareTo(nextMonday) < 0).collect(Collectors.toList());
                 if(CollectionUtils.isEmpty(weekCourseInfo)){
@@ -561,8 +598,10 @@ public class StudentServeServiceImpl implements StudentServeService {
             if(CollectionUtils.isEmpty(musicGroupIds)){
                 continue;
             }
+            
             Map<Integer, Integer> teacherNumMap = new HashMap<>();
             for (String groupId : musicGroupIds) {
+            	
                 Integer teacherId = null;
                 List<BaseMapDto<Integer, Integer>> studentTeacherIdList = classGroupStudentMapperDao.getStudentClassGroupBishopTeacherMap(Arrays.asList(noCourseServeStudentId), groupId);
                 if(!CollectionUtils.isEmpty(studentTeacherIdList)){
@@ -627,7 +666,6 @@ public class StudentServeServiceImpl implements StudentServeService {
                         .collect(Collectors.groupingBy(StudentServeCourseHomeworkDto::getUserId));
             }
 
-
             List<ExtracurricularExercisesReply> allStudentExercises = extracurricularExercisesReplyDao.getStudentExercisesWithTimeZone(monDayDate.toString(), sunDayDate.toString(), new ArrayList<>(allStudentIds), TenantContextHolder.getTenantId());
             if(!CollectionUtils.isEmpty(allStudentExercises)){
                 studentExercisesMap = allStudentExercises.stream().collect(Collectors.groupingBy(ExtracurricularExercisesReply::getUserId));
@@ -1182,4 +1220,12 @@ public class StudentServeServiceImpl implements StudentServeService {
         }
         return result;
     }
+    
+
+    
+	private Date LocalDateToUdate(LocalDate localDate) {
+		ZoneId zone = ZoneId.systemDefault();
+		Instant instant = localDate.atStartOfDay().atZone(zone).toInstant();
+		return Date.from(instant);
+	}
 }

+ 16 - 0
mec-biz/src/main/resources/config/mybatis/CourseScheduleStudentPaymentMapper.xml

@@ -36,6 +36,11 @@
 		<result column="course_status_" property="courseStatus" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
 		<result column="course_start_time_" property="courseStartTime"/>
 	</resultMap>
+	
+	<resultMap type="com.ym.mec.biz.dal.dto.Mapper" id="Mapper">
+		<result column="key_" property="key" />
+		<result column="value_" property="value" />
+	</resultMap>
 
 	<!-- 根据主键查询一条记录 -->
 	<select id="get" resultMap="CourseScheduleStudentPayment" >
@@ -930,4 +935,15 @@
 			</if>
 		</where>
 	</sql>
+	
+	<select id="queryUserMusicGroupCourseNumByClassTime" resultMap="Mapper" parameterType="map">
+		select cssp.music_group_id_ key_,count(cssp.id_) value_ from course_schedule_student_payment cssp left join course_schedule cs on cssp.course_schedule_id_ = cs.id_
+		where cssp.group_type_ = #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler} and 
+		cssp.music_group_id_ IN
+                <foreach collection="musicGroupIds" separator="," item="musicGroupId" open="(" close=")">
+                    #{musicGroupId}
+                </foreach>
+		and cssp.user_id_ = #{userId} and cs.class_date_ between #{startDate} and #{endDate}
+		group by cssp.music_group_id_
+	</select>
 </mapper>

+ 11 - 4
mec-biz/src/main/resources/config/mybatis/HfMemberMapper.xml

@@ -26,6 +26,7 @@
         <result column="route_organ_id_" property="routeOrganId"/>
         <result column="create_time_" property="createTime"/>
         <result column="update_time_" property="updateTime"/>
+        <result column="organ_id_" property="organId"/>
 		<result column="tenant_id_" property="tenantId" />
     </resultMap>
     <sql id="Base_Column_List">
@@ -34,7 +35,7 @@
         business_scope_, legal_person_, legal_cert_id_, legal_cert_id_expires_, legal_mp_,
         address_, zip_code_, card_no_,
         bank_code_,settle_account_id_,status_,month_max_receipt_,route_member_id_,route_organ_id_, create_time_,
-        update_time_,tenant_id_
+        update_time_,tenant_id_,organ_id_
     </sql>
     <select id="get" parameterType="java.lang.Integer" resultMap="hfMember">
         <!--@mbg.generated-->
@@ -56,13 +57,13 @@
         business_scope_, legal_person_, legal_cert_id_,
         legal_cert_id_expires_, legal_mp_, address_,
         zip_code_, card_no_, bank_code_,status_,
-        create_time_, update_time_,tenant_id_)
+        create_time_, update_time_,organ_id_,tenant_id_)
         values (#{name}, #{memberId}, #{provCode},
         #{areaCode}, #{socialCreditCode}, #{socialCreditCodeExpires},
         #{businessScope}, #{legalPerson}, #{legalCertId},
         #{legalCertIdExpires}, #{legalMp}, #{address},
         #{zipCode}, #{cardNo}, #{bankCode},#{status},
-        #{createTime}, #{updateTime},#{tenantId})
+        #{createTime}, #{updateTime},#{organId},#{tenantId})
     </insert>
     <update id="update" parameterType="com.ym.mec.biz.dal.entity.HfMember">
         <!--@mbg.generated-->
@@ -137,8 +138,11 @@
             <if test="updateTime != null">
                 update_time_ = #{updateTime},
             </if>
+            <if test="organId != null">
+                organ_id_ = #{organId},
+            </if>
         </set>
-        where id_ = #{id,jdbcType=INTEGER} and tenant_id_ = #{tennatId}
+        where id_ = #{id,jdbcType=INTEGER} and tenant_id_ = #{tenantId}
     </update>
 
     <!-- 分页查询 -->
@@ -161,6 +165,9 @@
             <if test="status != null">
                 AND status_ = #{status}
             </if>
+            <if test="organId != null">
+                AND organ_id_ = #{organId}
+            </if>
         </where>
     </sql>
 

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

@@ -18,6 +18,10 @@
         <result column="linkman_" property="linkman"/>
         <result column="mobile_" property="mobile"/>
         <result column="address_" property="address"/>
+        <result column="corporate_name_" property="corporateName"/>
+        <result column="corporate_code_" property="corporateCode"/>
+        <result column="corporate_seal_" property="corporateSeal"/>
+        <result column="corporate_financial_seal_" property="corporateFinancialSeal"/>
         <result column="tenant_id_" property="tenantId"/>
         <result column="grade_type_" property="gradeType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
     </resultMap>
@@ -36,9 +40,9 @@
     <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.Organization" useGeneratedKeys="true" keyColumn="id"
             keyProperty="id">
         INSERT INTO organization (id_,name_,area_id_,create_time_,update_time_,
-                                  register_date_,linkman_,mobile_,address_,grade_type_,tenant_id_)
+                                  register_date_,linkman_,mobile_,address_,grade_type_,tenant_id_,corporate_name_,corporate_code_,corporate_seal_,corporate_financial_seal_)
         VALUES(#{id},#{name},#{areaId},now(),now(),#{registerDate},#{linkman},#{mobile},#{address},
-               #{gradeType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{tenantId})
+               #{gradeType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{tenantId},#{corporateName},#{corporateCode},#{corporateSeal},#{corporateFinancialSeal})
     </insert>
 
     <!-- 根据主键查询一条记录 -->
@@ -69,6 +73,18 @@
             <if test="address != null">
                 address_ = #{address},
             </if>
+            <if test="corporateName != null">
+                corporate_name_ = #{corporateName},
+            </if>
+            <if test="corporateCode != null">
+                corporate_code_ = #{corporateCode},
+            </if>
+            <if test="corporateSeal != null">
+                corporate_seal_ = #{corporateSeal},
+            </if>
+            <if test="corporateFinancialSeal != null">
+                corporate_financial_seal_ = #{corporateFinancialSeal},
+            </if>
             <if test="gradeType != null">
                 grade_type_ = #{gradeType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             </if>

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

@@ -536,7 +536,7 @@
 
 	<sql id="queryTeacherServeInfoCondition">
 		<where>
-			sees.tenant_id_ = #{tenantId}
+			sees.tenant_id_ = #{tenantId} 
 			<if test="organIds != null and organIds.size()>0">
 				AND tea.organ_id_ IN
 				<foreach collection="organIds" item="organId" open="(" close=")" separator=",">

+ 17 - 34
mec-student/src/main/java/com/ym/mec/student/controller/ContractsController.java

@@ -1,28 +1,29 @@
 package com.ym.mec.student.controller;
 
-import java.math.BigDecimal;
-import java.util.*;
-import java.util.stream.Collectors;
-
-import com.ym.mec.biz.dal.entity.SysUserContracts;
-import com.ym.mec.biz.dal.enums.CourseViewTypeEnum;
-import com.ym.mec.biz.service.SysUserContractsService;
-import com.ym.mec.common.entity.HttpResponseResult;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 
+import java.math.BigDecimal;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.entity.SysUserContracts;
+import com.ym.mec.biz.dal.enums.CourseViewTypeEnum;
 import com.ym.mec.biz.dal.enums.KitGroupPurchaseTypeEnum;
 import com.ym.mec.biz.service.ContractService;
+import com.ym.mec.biz.service.SysUserContractsService;
 import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
 
 @RequestMapping("contracts")
 @Api(tags = "协议服务")
@@ -101,22 +102,9 @@ public class ContractsController extends BaseController {
 		return succeed(contractService.queryProductContract(userId,musicGroupId, courseViewType));
 	}
 
-	@ApiOperation(value = "生成学生课程协议")
-	@GetMapping("/transferProduceContractOnlyWithCourseList")
-	public HttpResponseResult transferProduceContractOnlyWithCourseList(Integer userId){
-		if(Objects.isNull(userId)){
-			SysUser sysUser = sysUserFeignService.queryUserInfo();
-			if (sysUser == null) {
-				return failed("获取用户信息失败");
-			}
-			userId = sysUser.getId();
-		}
-		return contractService.transferProduceContractOnlyWithCourseList(userId);
-	}
-
 	@ApiOperation(value = "查询学生最新协议")
 	@GetMapping("/getLatest")
-	public HttpResponseResult<List<SysUserContracts>> getLatest(Integer userId) {
+	public HttpResponseResult<SysUserContracts> getLatest(Integer userId) {
 		if(Objects.isNull(userId)){
 			SysUser sysUser = sysUserFeignService.queryUserInfo();
 			if (sysUser == null) {
@@ -126,18 +114,13 @@ public class ContractsController extends BaseController {
 		}
 		List<SysUserContracts> sysUserContracts = sysUserContractsService.getUserAllContracts(userId);
 
-		if(CollectionUtils.isEmpty(sysUserContracts)){
-			return succeed(Collections.EMPTY_LIST);
+		if(sysUserContracts == null || sysUserContracts.size() == 0){
+			return succeed();
 		}
+		
+		sysUserContracts = sysUserContracts.stream().sorted(Comparator.comparing(SysUserContracts::getCreateTime).reversed()).collect(Collectors.toList());
 
-		Map<Integer, List<SysUserContracts>> versionContractMap = sysUserContracts.stream().collect(Collectors.groupingBy(SysUserContracts::getVersion));
-
-		List<SysUserContracts> result = new ArrayList<>();
-		for (Map.Entry<Integer, List<SysUserContracts>> versionContractMapEntry : versionContractMap.entrySet()) {
-			versionContractMapEntry.getValue().sort(Comparator.comparing(SysUserContracts::getCreateTime).reversed());
-			result.add(versionContractMapEntry.getValue().get(0));
-		}
 
-		return succeed(result);
+		return succeed(sysUserContracts.get(0));
 	}
 }

+ 27 - 5
mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java

@@ -12,16 +12,19 @@ import com.ym.mec.biz.dal.page.StudentPaymentOrderQueryInfo;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.tenant.TenantContextHolder;
 import com.ym.mec.thirdparty.adapay.Payment;
 import com.ym.mec.thirdparty.yqpay.Msg;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.http.HttpUtil;
+
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
+
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
@@ -33,6 +36,7 @@ import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
+
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.net.URLEncoder;
@@ -99,6 +103,9 @@ public class StudentOrderController extends BaseController {
     private MusicGroupPaymentCalenderActivityService musicGroupPaymentCalenderActivityService;
     @Autowired
     private TenantConfigService tenantConfigService;
+    
+    @Autowired
+    private OrganizationService organizationService;
 
     @Value("${spring.profiles.active:dev}")
     private String profiles;
@@ -164,11 +171,26 @@ public class StudentOrderController extends BaseController {
         HashMap<String, Object> orderDetail = new HashMap<>();
         orderDetail.put("order", orderByOrderNo);
         orderDetail.put("groupType", orderByOrderNo.getGroupType());
-        TenantConfig tenantConfig = tenantConfigService.getOne(new QueryWrapper<TenantConfig>()
-                .eq("tenant_id_", orderByOrderNo.getTenantId()));
-        if (Objects.nonNull(tenantConfig)) {
-            orderDetail.put("financeChops", tenantConfig.getCorporateFinanceChops());
-        }
+        
+        //查询财务章
+        //如果分部有企业信息,就用分部上的企业信息,否则用机构上的企业信息
+        String financeChops = null;
+        Organization organizationDto = organizationService.get(orderByOrderNo.getOrganId());
+		if (organizationDto == null || StringUtils.isBlank(organizationDto.getCorporateName()) || StringUtils.isBlank(organizationDto.getCorporateCode())) {
+
+			TenantConfig tenantConfig = tenantConfigService.queryByTenantId(orderByOrderNo.getTenantId());
+			if(tenantConfig == null){
+				throw new BizException("机构配置信息查询失败");
+			}
+			
+			financeChops = tenantConfig.getCorporateFinanceChops();
+		} else {
+			financeChops = organizationDto.getCorporateFinancialSeal();
+		}
+		if(StringUtils.isNotBlank(financeChops)){
+			orderDetail.put("financeChops", financeChops);
+		}
+		
         if (OrderTypeEnum.APPLY.equals(orderByOrderNo.getType())) {
             StudentRegistration studentRegistration = studentRegistrationDao.getStudentRegister(orderByOrderNo.getMusicGroupId(), orderByOrderNo.getUserId());
             if (studentRegistration.getPayingStatus().equals(2)) {

+ 2 - 2
mec-web/src/main/java/com/ym/mec/web/config/ResourceServerConfig.java

@@ -30,8 +30,8 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
                 .authenticationEntryPoint(baseAuthenticationEntryPoint)
                 .and()
                 .authorizeRequests()
-                .antMatchers("/task/**")
-                .hasIpAddress("0.0.0.0/0")
+                /*.antMatchers("/task/**")
+                .hasIpAddress("0.0.0.0/0")*/
                 .antMatchers("/v2/api-docs", "/classGroup/highClassGroups", "/code/*", "/api/*", "/appVersionInfo/queryByPlatform", "/eduDegree/*",
                         "/uploadFile", "/eduContracts/queryProduceContract", "/activity/doubleEleven2020Statis", "/replacementInstrument/queryPage",
                         "/replacementInstrumentActivity/queryReplacementsStat", "/eduStudentRegistration/queryPreApplyList",

+ 1 - 1
mec-web/src/main/java/com/ym/mec/web/controller/OrganizationController.java

@@ -71,7 +71,7 @@ public class OrganizationController extends BaseController {
     @PreAuthorize("@pcs.hasPermissions('organization/update')")
     public Object update(Organization organization){
         organization.setUpdateTime(new Date());
-        return succeed(organizationService.update(organization));
+        return succeed(organizationService.updateBasicInfo(organization));
     }
 
     @ApiOperation(value = "根据分部编号查询分部详情")

+ 0 - 2
mec-web/src/main/java/com/ym/mec/web/controller/TaskController.java

@@ -460,9 +460,7 @@ public class TaskController extends BaseController {
 		List<TenantInfo> tenantInfos = tenantInfoService.list(new QueryWrapper<TenantInfo>().eq("state_",1));
 		if(tenantInfos != null && tenantInfos.size() > 0){
 			for (TenantInfo tenantInfo : tenantInfos) {
-				TenantContextHolder.setTenantId(tenantInfo.getId());
 				indexBaseMonthDataService.indexBaseDataTask(tenantInfo.getId(), month, dataTypeSet);
-				TenantContextHolder.clearTenantId();
 			}
 		}
 	}