| 
					
				 | 
			
			
				@@ -5,6 +5,9 @@ import cn.hutool.json.JSONUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.alibaba.fastjson.JSON; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.fs.common.core.domain.R; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.fs.common.utils.DateUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.common.utils.StringUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.company.domain.CompanyUser; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.company.mapper.CompanyUserMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.fs.course.config.CourseConfig; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.fs.course.domain.FsCourseDomainName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.fs.course.domain.FsCourseLink; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -12,14 +15,12 @@ import com.fs.course.domain.FsCourseRealLink; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.fs.course.domain.FsUserCourseVideo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.fs.course.mapper.FsCourseDomainNameMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.fs.course.mapper.FsCourseLinkMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.fs.course.mapper.FsCourseSopAppLinkMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.fs.course.mapper.FsUserCourseVideoMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.fs.course.param.FsCourseLinkCreateParam; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.fs.course.service.IFsCourseDomainNameService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.fs.course.service.IFsCourseLinkService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.fs.qw.domain.QwUser; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.fs.qw.mapper.QwUserMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.fs.qw.vo.QwSopCourseFinishTempSetting; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.fs.system.service.ISysConfigService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import lombok.Synchronized; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import lombok.extern.slf4j.Slf4j; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -51,10 +52,6 @@ public class FsCourseLinkServiceImpl implements IFsCourseLinkService 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private FsCourseLinkMapper fsCourseLinkMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private  FsCourseSopAppLinkMapper fsCourseSopAppLinkMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private ISysConfigService configService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -64,6 +61,8 @@ public class FsCourseLinkServiceImpl implements IFsCourseLinkService 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private QwUserMapper qwUserMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private FsUserCourseVideoMapper courseVideoMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private CompanyUserMapper companyUserMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -141,7 +140,6 @@ public class FsCourseLinkServiceImpl implements IFsCourseLinkService 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private static final String realLink = "/courseh5/pages/course/learning?course="; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private static final String miniappRealLink = "/pages_course/video?course="; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private static final String appRealLink = "/pages/courseAnswer/index?link="; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -179,19 +177,6 @@ public class FsCourseLinkServiceImpl implements IFsCourseLinkService 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Date updateTime = Date.from(expireDateTime.atZone(ZoneId.systemDefault()).toInstant()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         link.setUpdateTime(updateTime); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//        Date now = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//        // 获取明天的日期 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//        Date tomorrow = new Date(now.getTime() + 24 * 60 * 60 * 1000); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//        // 设置时间为0点 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//        Date tomorrowMidnight = new Date(tomorrow.getYear(), tomorrow.getMonth(), tomorrow.getDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//        LocalDateTime now = LocalDateTime.now(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//        // 增加十天,并设置时间为午夜 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//        LocalDateTime tenDaysLater = now.plusDays(10).withHour(0).withMinute(0).withSecond(0).withNano(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//        // 转换为 Date 类型 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//        Date tenDaysMidnight = Date.from(tenDaysLater.atZone(ZoneId.systemDefault()).toInstant()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 设置过期时间 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         link.setUpdateTime(updateTime); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -202,8 +187,8 @@ public class FsCourseLinkServiceImpl implements IFsCourseLinkService 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             String course = JSON.toJSONString(courseMap); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             link.setRealLink(realLink+course); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (fsCourseLinkMapper.updateFsCourseLink(link)>0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                FsCourseDomainName fsCourseDomainName = fsCourseDomainNameMapper.selectFsCourseDomainNameByRandom(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                String sortLink = "https://"+fsCourseDomainName.getDomainName() + "/s/" + link.getLink(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                String domainName = getDomainName(param.getCompanyUserId(), config); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                String sortLink = domainName + "/s/" + link.getLink(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 return R.ok("短链生成").put("url",sortLink); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -245,8 +230,8 @@ public class FsCourseLinkServiceImpl implements IFsCourseLinkService 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         calendar.add(Calendar.DAY_OF_MONTH, expireDays); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         link.setUpdateTime(calendar.getTime()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (fsCourseLinkMapper.insertFsCourseLink(link)>0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            FsCourseDomainName fsCourseDomainName = fsCourseDomainNameMapper.selectFsCourseDomainNameByRandom(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            String sortLink = "https://"+fsCourseDomainName.getDomainName() + "/s/" + link.getLink(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String domainName = getDomainName(param.getCompanyUserId(), config); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String sortLink = domainName + "/s/" + link.getLink(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return R.ok("短链生成").put("url",sortLink); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return R.error("短链生成失败!"); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -254,7 +239,6 @@ public class FsCourseLinkServiceImpl implements IFsCourseLinkService 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public String createLinkUrlWcmini(FsCourseLinkCreateParam param) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         String json = configService.selectConfigByKey("course.config"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         CourseConfig config = JSONUtil.toBean(json, CourseConfig.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -278,6 +262,7 @@ public class FsCourseLinkServiceImpl implements IFsCourseLinkService 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return link.getRealLink(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public FsCourseLink createFsCourseLink(String corpId, Date sendTime,Long courseId,Long videoId, String qwUserId, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                            Long companyUserId, Long companyId,Long externalId,Integer type){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 手动创建 FsCourseLink 对象,避免使用 BeanUtils.copyProperties 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -297,6 +282,14 @@ public class FsCourseLinkServiceImpl implements IFsCourseLinkService 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return link; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private String getDomainName(Long companyUserId,CourseConfig config){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String domainName = companyUserMapper.selectDomainByUserId(companyUserId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isEmpty(domainName)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            domainName = config.getRealLinkDomainName(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return domainName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private Date createUpdateTime(Integer expiresDays, Date sendTime, CourseConfig config){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Integer expireDays = (expiresDays == null || expiresDays == 0) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -335,7 +328,6 @@ public class FsCourseLinkServiceImpl implements IFsCourseLinkService 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // 从数据库中查找短链对应的真实链接 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             FsCourseLink courseLink = fsCourseLinkMapper.selectFsCourseLinkByLink(sLink); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (courseLink != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 // 获取当前时间 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 Date currentTime = new Date(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -354,9 +346,13 @@ public class FsCourseLinkServiceImpl implements IFsCourseLinkService 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         return R.error("真实链接不存在").put("realLink", sLink); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     log.info("链接仍然有效: {}", sLink); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    String json = configService.selectConfigByKey("course.config"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    CourseConfig config = JSONUtil.toBean(json, CourseConfig.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    String realLink = config.getRealLinkDomainName()+courseLink.getRealLink(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    String domainName = companyUserMapper.selectDomainByUserId(courseLink.getCompanyUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (StringUtils.isEmpty(domainName)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        String json = configService.selectConfigByKey("course.config"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        CourseConfig config = JSONUtil.toBean(json, CourseConfig.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        domainName = config.getRealLinkDomainName(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    String realLink = domainName+courseLink.getRealLink(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     return R.ok().put("realLink",realLink ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } else { 
			 |