Ver Fonte

手机号授权和素材分享SOP,一键群发

wjj há 4 dias atrás
pai
commit
458f909a3b

+ 34 - 0
fs-ipad-task/src/main/java/com/fs/app/service/IpadSendServer.java

@@ -16,9 +16,11 @@ import com.fs.course.config.CourseConfig;
 import com.fs.course.domain.FsCoursePlaySourceConfig;
 import com.fs.course.domain.FsCoursePlaySourceConfig;
 import com.fs.course.domain.FsCourseWatchLog;
 import com.fs.course.domain.FsCourseWatchLog;
 import com.fs.course.service.IFsCourseWatchLogService;
 import com.fs.course.service.IFsCourseWatchLogService;
+import com.fs.his.domain.FsShareMaterial;
 import com.fs.his.domain.FsSignArticle;
 import com.fs.his.domain.FsSignArticle;
 import com.fs.his.domain.FsUser;
 import com.fs.his.domain.FsUser;
 import com.fs.his.mapper.FsUserMapper;
 import com.fs.his.mapper.FsUserMapper;
+import com.fs.his.service.IFsShareMaterialService;
 import com.fs.his.service.IFsSignArticleService;
 import com.fs.his.service.IFsSignArticleService;
 import com.fs.ipad.IpadSendUtils;
 import com.fs.ipad.IpadSendUtils;
 import com.fs.ipad.vo.*;
 import com.fs.ipad.vo.*;
@@ -86,6 +88,9 @@ public class IpadSendServer {
     @Autowired
     @Autowired
     private IFsSignArticleService signArticleService;
     private IFsSignArticleService signArticleService;
 
 
+    @Autowired
+    private IFsShareMaterialService shareMaterialService;
+
     //private final LiveWatchLogMapper liveWatchLogMapper;
     //private final LiveWatchLogMapper liveWatchLogMapper;
 
 
 
 
@@ -585,6 +590,35 @@ public class IpadSendServer {
                         qwSopLogsService.updateQwSopLogsByWatchLogType(qwSopLogs.getId(), "打卡文章发放失败,请重新发送!");
                         qwSopLogsService.updateQwSopLogsByWatchLogType(qwSopLogs.getId(), "打卡文章发放失败,请重新发送!");
                     }
                     }
                     break;
                     break;
+                case "16":
+                    log.info("===============进入素材分享===============");
+                    FsShareMaterial shareMaterial = shareMaterialService.selectFsShareMaterialById(content.getShareMaterialId());
+                    if (shareMaterial == null) {
+                        qwSopLogsService.updateQwSopLogsByWatchLogType(qwSopLogs.getId(),"素材不存在");
+                    }
+                    try{
+                        content.setMiniprogramPage(quickProcess(content.getMiniprogramPage(),content.getShareMaterialId()));
+                        //发送小程序
+                        sendMiniProgram(vo, content, miniMap,qwUser.getCompanyId());
+                    }catch (Exception e){
+                        qwSopLogsService.updateQwSopLogsByWatchLogType(qwSopLogs.getId(), "素材发放失败,请重新发送!");
+                    }
+                    break;
+                case "17":
+                    log.info("===============进入手机授权=============");
+                    //发送短信
+                    FsShareMaterial material = shareMaterialService.selectFsShareMaterialById(content.getShareMaterialId());
+                    if (material == null) {
+                        qwSopLogsService.updateQwSopLogsByWatchLogType(qwSopLogs.getId(),"素材不存在");
+                    }
+                    try{
+                        content.setMiniprogramPage(quickProcess(content.getMiniprogramPage(),content.getShareMaterialId()));
+                        //发送小程序
+                        sendMiniProgram(vo, content, miniMap,qwUser.getCompanyId());
+                    }catch (Exception e){
+                        qwSopLogsService.updateQwSopLogsByWatchLogType(qwSopLogs.getId(), "手机授权发放失败,请重新发送!");
+                    }
+                    break;
                 case "21":
                 case "21":
                     content.setSendStatus(0);
                     content.setSendStatus(0);
                     content.setSendRemarks("短信待发送");
                     content.setSendRemarks("短信待发送");

+ 102 - 0
fs-qw-task/src/main/java/com/fs/app/taskService/impl/SopLogsTaskServiceImpl.java

@@ -1,5 +1,7 @@
 package com.fs.app.taskService.impl;
 package com.fs.app.taskService.impl;
 
 
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -80,6 +82,8 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
 
 
     private static final String REAL_LINK_PREFIX = "/courseH5/pages/course/learning?course=";
     private static final String REAL_LINK_PREFIX = "/courseH5/pages/course/learning?course=";
     private static final String signArticleLink = "/pages_course/article.html?link=";
     private static final String signArticleLink = "/pages_course/article.html?link=";
+    private static final String shareMaterialLink = "/pages_course/customerStatistics.html?link=";
+    private static final String phoneNumberLink = "/pages_course/getPhoneNumber.html?link=";
     private static final String SHORT_LINK_PREFIX = "/courseH5/pages/course/learning?s=";
     private static final String SHORT_LINK_PREFIX = "/courseH5/pages/course/learning?s=";
     private static final String appActivityLink = "/pages_course/luckybag.html?link=";
     private static final String appActivityLink = "/pages_course/luckybag.html?link=";
     private static final String miniappRealLink = "/pages_course/video.html?course=";
     private static final String miniappRealLink = "/pages_course/video.html?course=";
@@ -92,6 +96,10 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
     private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
     private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
     private static final DateTimeFormatter OUTPUT_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd 07:00:00");
     private static final DateTimeFormatter OUTPUT_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd 07:00:00");
 
 
+    //商城小程序appId配置常量
+    private static final String APP_ID_CONFIG_KEY = "appStore.appId.config";
+    private static final String DEFAULT_APP_ID = "wx50bcb040b4963a7e";
+
 
 
     // Cached configurations and domain names
     // Cached configurations and domain names
     private CourseConfig cachedCourseConfig;
     private CourseConfig cachedCourseConfig;
@@ -202,6 +210,9 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
     @Autowired
     @Autowired
     private AsyncCourseWatchFinishService asyncCourseWatchFinishService;
     private AsyncCourseWatchFinishService asyncCourseWatchFinishService;
 
 
+    @Autowired
+    private ISysConfigService sysConfigService;
+
 
 
 
 
     @PostConstruct
     @PostConstruct
@@ -1154,6 +1165,24 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
                     setting.setMiniprogramPage(signLinkBy);
                     setting.setMiniprogramPage(signLinkBy);
                     setting.setContentType("15");
                     setting.setContentType("15");
                     break;
                     break;
+                case "16" :
+                    //素材分享
+                    String shareLinkBy = createShareMaterialLinkByMiniApp(setting, sopLogs, sopLogs.getCorpId(), new Date(), courseId, videoId
+                            , qwUserId, companyUserId, companyId, cachedCourseConfig, logVo.getChatId());
+                    setting.setMiniprogramAppid(getAppId());
+                    setting.setMiniprogramTitle("每日分享");
+                    setting.setMiniprogramPage(shareLinkBy);
+                    setting.setContentType("16");
+                    break;
+                case "17" :
+                    //手机授权
+                    String phoneLinkBy = createPhoneNumberLinkByMiniApp(setting, sopLogs, sopLogs.getCorpId(), new Date(), courseId, videoId
+                            , qwUserId, companyUserId, companyId, cachedCourseConfig, logVo.getChatId());
+                    setting.setMiniprogramAppid(getAppId());
+                    setting.setMiniprogramTitle("领取开箱密码");
+                    setting.setMiniprogramPage(phoneLinkBy);
+                    setting.setContentType("17");
+                    break;
                 case "21"://短信看课
                 case "21"://短信看课
                     if (sopLogs.getFsUserId() != null && !Long.valueOf(0L).equals(sopLogs.getFsUserId())) {
                     if (sopLogs.getFsUserId() != null && !Long.valueOf(0L).equals(sopLogs.getFsUserId())) {
                         addWatchLogIfNeeded(sopLogs, videoId, courseId, sendTime, qwUserId, companyUserId, companyId, externalId, logVo);
                         addWatchLogIfNeeded(sopLogs, videoId, courseId, sendTime, qwUserId, companyUserId, companyId, externalId, logVo);
@@ -2373,6 +2402,54 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
         return link.getRealLink();
         return link.getRealLink();
     }
     }
 
 
+    public String createShareMaterialLinkByMiniApp(QwSopTempSetting.Content.Setting st, QwSopLogs sopLogs, String corpId, Date sendTime, Long courseId, Long videoId, String qwUserId, String companyUserId, String companyId, CourseConfig config, String chatId) {
+        FsCourseLink activityByLink = createActivityByLink(corpId, sendTime, courseId, videoId, qwUserId.toString()
+                , companyUserId, companyId, null, 3);
+        activityByLink.setChatId(st.getChatId());
+
+        Date updateTime = createUpdateTime(st, sendTime, config);
+        activityByLink.setUpdateTime(updateTime);
+
+        FsCourseRealLink courseMap = new FsCourseRealLink();
+        BeanUtils.copyProperties(activityByLink, courseMap);
+
+        st.setExternalUserId(sopLogs.getExternalUserId());
+        st.setChatId(activityByLink.getChatId());
+        st.setMiniprogramPicUrl(st.getShareMaterialUrl());
+
+        courseMap.setQwExternalId(sopLogs.getExternalId());
+
+        String realLinkFull = shareMaterialLink + JSON.toJSONString(courseMap);
+        activityByLink.setRealLink(realLinkFull);
+        //存短链-
+        enqueueCourseLink(activityByLink);
+        return activityByLink.getRealLink();
+    }
+
+    public String createPhoneNumberLinkByMiniApp(QwSopTempSetting.Content.Setting st, QwSopLogs sopLogs, String corpId, Date sendTime, Long courseId, Long videoId, String qwUserId, String companyUserId, String companyId, CourseConfig config, String chatId) {
+        FsCourseLink activityByLink = createActivityByLink(corpId, sendTime, courseId, videoId, qwUserId.toString()
+                , companyUserId, companyId, null, 3);
+        activityByLink.setChatId(st.getChatId());
+
+        Date updateTime = createUpdateTime(st, sendTime, config);
+        activityByLink.setUpdateTime(updateTime);
+
+        FsCourseRealLink courseMap = new FsCourseRealLink();
+        BeanUtils.copyProperties(activityByLink, courseMap);
+
+        st.setExternalUserId(sopLogs.getExternalUserId());
+        st.setChatId(activityByLink.getChatId());
+        st.setMiniprogramPicUrl(st.getShareMaterialUrl());
+
+        courseMap.setQwExternalId(sopLogs.getExternalId());
+
+        String realLinkFull = phoneNumberLink + JSON.toJSONString(courseMap);
+        activityByLink.setRealLink(realLinkFull);
+        //存短链-
+        enqueueCourseLink(activityByLink);
+        return activityByLink.getRealLink();
+    }
+
     public FsCourseLink createActivityByLink(String corpId, Date sendTime, Long courseId, Long videoId, String qwUserId,
     public FsCourseLink createActivityByLink(String corpId, Date sendTime, Long courseId, Long videoId, String qwUserId,
                                              String companyUserId, String companyId, String externalId, Integer type) {
                                              String companyUserId, String companyId, String externalId, Integer type) {
         // 手动创建 FsCourseLink 对象,避免使用 BeanUtils.copyProperties
         // 手动创建 FsCourseLink 对象,避免使用 BeanUtils.copyProperties
@@ -2398,4 +2475,29 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
 
 
         return link;
         return link;
     }
     }
+
+    /**
+     * 获取 appId 的私有方法
+     */
+    private String getAppId() {
+        try {
+            String configValue = sysConfigService.selectConfigByKey(APP_ID_CONFIG_KEY);
+            if (org.apache.commons.lang3.StringUtils.isNotEmpty(configValue)) {
+                JSONObject json = JSONUtil.parseObj(configValue);
+                String appId = json.getStr("appId");
+                if (org.apache.commons.lang3.StringUtils.isNotEmpty(appId)) {
+                    return appId;
+                } else {
+                    log.warn("配置 {} 中 appId 字段为空,使用默认值", APP_ID_CONFIG_KEY);
+                }
+            } else {
+                log.warn("未找到配置 {},使用默认值", APP_ID_CONFIG_KEY);
+            }
+        } catch (Exception e) {
+            log.error("解析 appId 配置异常,configValue={}",
+                    sysConfigService.selectConfigByKey(APP_ID_CONFIG_KEY), e);
+        }
+        //默认值
+        return DEFAULT_APP_ID;
+    }
 }
 }

+ 1 - 1
fs-service/src/main/java/com/fs/his/domain/FsKdzlCallRecord.java

@@ -76,7 +76,7 @@ public class FsKdzlCallRecord {
     @TableField(fill = FieldFill.INSERT_UPDATE)
     @TableField(fill = FieldFill.INSERT_UPDATE)
     private Date updateTime;
     private Date updateTime;
 
 
-
+    
 
 
     /** 拨打时间开始(时间戳) */
     /** 拨打时间开始(时间戳) */
     @JsonIgnore
     @JsonIgnore

+ 1 - 1
fs-service/src/main/java/com/fs/his/mapper/FsShareMaterialMapper.java

@@ -65,7 +65,7 @@ public interface FsShareMaterialMapper extends BaseMapper<FsShareMaterial>{
     /**
     /**
      * 查询分享素材选项
      * 查询分享素材选项
      */
      */
-    @Select("select id as dictValue,material_name as dictLabel,material_url as dictImgUrl, type as dictValue1 from fs_share_material")
+    @Select("select id as dictValue,material_name as dictLabel,cover_img_url as dictImgUrl, type as dictValue1 from fs_share_material")
     List<OptionsVO> listOptions();
     List<OptionsVO> listOptions();
 
 
     /**
     /**

+ 6 - 0
fs-service/src/main/java/com/fs/qw/vo/QwSopCourseFinishTempSetting.java

@@ -120,6 +120,12 @@ public class QwSopCourseFinishTempSetting implements Serializable,Cloneable{
         //打卡文章封面图
         //打卡文章封面图
         private String signArticleImgUrl;
         private String signArticleImgUrl;
 
 
+        //分享素材id
+        private Long shareMaterialId;
+
+        //分享素材url
+        private String shareMaterialUrl;
+
         // 短信CODE
         // 短信CODE
         private String smsTemplateCode;
         private String smsTemplateCode;
 
 

+ 6 - 0
fs-service/src/main/java/com/fs/qw/vo/QwSopTempSetting.java

@@ -159,6 +159,12 @@ public class QwSopTempSetting implements Serializable{
             //打卡文章封面图
             //打卡文章封面图
             private String signArticleImgUrl;
             private String signArticleImgUrl;
 
 
+            //分享素材id
+            private Long shareMaterialId;
+
+            //分享素材url
+            private String shareMaterialUrl;
+
             // 短信CODE
             // 短信CODE
             private String smsTemplateCode;
             private String smsTemplateCode;
 
 

+ 6 - 0
fs-service/src/main/java/com/fs/qwApi/param/SendWelcomeMsgParam.java

@@ -24,7 +24,13 @@ public class SendWelcomeMsgParam {
 
 
         private RedPacketAttachment redPacket; // 文件附件详情
         private RedPacketAttachment redPacket; // 文件附件详情
         private SignArticleAttachment signArticle; // 文件附件详情
         private SignArticleAttachment signArticle; // 文件附件详情
+        private ShareMaterialAttachment shareMaterial;//分享素材附件详情
 
 
+        @Data
+        private static class ShareMaterialAttachment {
+            private Long id;//分享素材id
+            private String name;//素材名称
+        }
 
 
         @Data
         @Data
         // 内部类,用于图片附件
         // 内部类,用于图片附件

+ 145 - 0
fs-service/src/main/java/com/fs/sop/service/impl/SopUserLogsInfoServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fs.sop.service.impl;
 package com.fs.sop.service.impl;
 
 
+import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONArray;
@@ -88,6 +89,8 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
 
 
     private static final String appActivityLink = "/pages_course/luckybag.html?link=";
     private static final String appActivityLink = "/pages_course/luckybag.html?link=";
     private static final String signArticleLink = "/pages_course/article.html?link=";
     private static final String signArticleLink = "/pages_course/article.html?link=";
+    private static final String shareMaterialLink = "/pages_course/customerStatistics.html?link=";
+    private static final String phoneNumberLink = "/pages_course/getPhoneNumber.html?link=";
     private static final String REAL_LINK_PREFIX = "/courseH5/pages/course/learning?course=";
     private static final String REAL_LINK_PREFIX = "/courseH5/pages/course/learning?course=";
     private static final String SHORT_LINK_PREFIX = "/courseH5/pages/course/learning?s=";
     private static final String SHORT_LINK_PREFIX = "/courseH5/pages/course/learning?s=";
     private static final String miniappRealLink = "/pages_course/video.html?course=";
     private static final String miniappRealLink = "/pages_course/video.html?course=";
@@ -96,6 +99,10 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
     private static final String appLink = "https://jump.ylrztop.com/jumpapp/pages/index/index?link=";
     private static final String appLink = "https://jump.ylrztop.com/jumpapp/pages/index/index?link=";
 //    private static final String miniappRealLink = "/pages/index/index?course=";
 //    private static final String miniappRealLink = "/pages/index/index?course=";
 
 
+    //商城小程序appId配置常量
+    private static final String APP_ID_CONFIG_KEY = "appStore.appId.config";
+    private static final String DEFAULT_APP_ID = "wx50bcb040b4963a7e";
+
     @Autowired
     @Autowired
     private ISysConfigService configService;
     private ISysConfigService configService;
 
 
@@ -179,6 +186,9 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
     @Lazy
     @Lazy
     private IQwSopTempVoiceService sopTempVoiceService;
     private IQwSopTempVoiceService sopTempVoiceService;
 
 
+    @Autowired
+    private ISysConfigService sysConfigService;
+
 
 
     @Override
     @Override
     public void save(SopUserLogsInfo sopUserLogsInfo) {
     public void save(SopUserLogsInfo sopUserLogsInfo) {
@@ -655,6 +665,22 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
                                 st.setMiniprogramTitle("打卡文章");
                                 st.setMiniprogramTitle("打卡文章");
                                 st.setMiniprogramPage(linkByMiniApp);
                                 st.setMiniprogramPage(linkByMiniApp);
                                 break;
                                 break;
+                            //素材分享
+                            case "16":
+                                linkByMiniApp = createShareMaterialLinkByMiniApp(st,sopLogs, qwUser.getCorpId(), new Date(), param.getCourseId(), param.getVideoId(),
+                                        String.valueOf(qwUser.getId()), qwUser.getCompanyUserId().toString(), qwUser.getCompanyId().toString(), config,groupUser.getChatId());
+                                st.setMiniprogramAppid(getAppId());
+                                st.setMiniprogramTitle("每日一享");
+                                st.setMiniprogramPage(linkByMiniApp);
+                                break;
+                            //素材分享
+                            case "17":
+                                linkByMiniApp = createPhoneNumberLinkByMiniApp(st,sopLogs, qwUser.getCorpId(), new Date(), param.getCourseId(), param.getVideoId(),
+                                        String.valueOf(qwUser.getId()), qwUser.getCompanyUserId().toString(), qwUser.getCompanyId().toString(), config,groupUser.getChatId());
+                                st.setMiniprogramAppid(getAppId());
+                                st.setMiniprogramTitle("领取开箱密码");
+                                st.setMiniprogramPage(linkByMiniApp);
+                                break;
                         }
                         }
                     }
                     }
                     setting.setSetting(list);
                     setting.setSetting(list);
@@ -778,6 +804,22 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
                                 st.setMiniprogramTitle("打卡文章");
                                 st.setMiniprogramTitle("打卡文章");
                                 st.setMiniprogramPage(linkByMiniApp);
                                 st.setMiniprogramPage(linkByMiniApp);
                                 break;
                                 break;
+                            //素材分享
+                            case "16":
+                                linkByMiniApp = createShareMaterialLinkByMiniApp(st,sopLogs, qwUser.getCorpId(), new Date(), param.getCourseId(), param.getVideoId(),
+                                        String.valueOf(qwUser.getId()), qwUser.getCompanyUserId().toString(), qwUser.getCompanyId().toString(), config,groupChat.getChatId());
+                                st.setMiniprogramAppid(getAppId());
+                                st.setMiniprogramTitle("每日一享");
+                                st.setMiniprogramPage(linkByMiniApp);
+                                break;
+                            //素材分享
+                            case "17":
+                                linkByMiniApp = createPhoneNumberLinkByMiniApp(st,sopLogs, qwUser.getCorpId(), new Date(), param.getCourseId(), param.getVideoId(),
+                                        String.valueOf(qwUser.getId()), qwUser.getCompanyUserId().toString(), qwUser.getCompanyId().toString(), config,groupChat.getChatId());
+                                st.setMiniprogramAppid(getAppId());
+                                st.setMiniprogramTitle("领取开箱密码");
+                                st.setMiniprogramPage(linkByMiniApp);
+                                break;
                         }
                         }
                     }
                     }
                     setting.setSetting(list);
                     setting.setSetting(list);
@@ -1007,6 +1049,22 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
                             st.setMiniprogramTitle("打卡文章");
                             st.setMiniprogramTitle("打卡文章");
                             st.setMiniprogramPage(linkByMiniApp);
                             st.setMiniprogramPage(linkByMiniApp);
                             break;
                             break;
+                        //素材分享
+                        case "16":
+                            linkByMiniApp = createShareMaterialLinkByMiniApp(st,sopLogs, qwUser.getCorpId(), new Date(), param.getCourseId(), param.getVideoId(),
+                                    String.valueOf(qwUser.getId()), qwUser.getCompanyUserId().toString(), qwUser.getCompanyId().toString(), config,null);
+                            st.setMiniprogramAppid(getAppId());
+                            st.setMiniprogramTitle("每日一享");
+                            st.setMiniprogramPage(linkByMiniApp);
+                            break;
+                        //素材分享
+                        case "17":
+                            linkByMiniApp = createPhoneNumberLinkByMiniApp(st,sopLogs, qwUser.getCorpId(), new Date(), param.getCourseId(), param.getVideoId(),
+                                    String.valueOf(qwUser.getId()), qwUser.getCompanyUserId().toString(), qwUser.getCompanyId().toString(), config,null);
+                            st.setMiniprogramAppid(getAppId());
+                            st.setMiniprogramTitle("领取开箱密码");
+                            st.setMiniprogramPage(linkByMiniApp);
+                            break;
 
 
                         case "21":
                         case "21":
                             if (sopLogs.getFsUserId() != null && !Long.valueOf(0L).equals(sopLogs.getFsUserId())) {
                             if (sopLogs.getFsUserId() != null && !Long.valueOf(0L).equals(sopLogs.getFsUserId())) {
@@ -1590,6 +1648,22 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
                     st.setMiniprogramTitle("打卡文章");
                     st.setMiniprogramTitle("打卡文章");
                     st.setMiniprogramPage(linkByMiniApp);
                     st.setMiniprogramPage(linkByMiniApp);
                     break;
                     break;
+                //素材分享
+                case "16":
+                    linkByMiniApp = createShareMaterialLinkByMiniApp(st,sopLogs, qwUser.getCorpId(), new Date(), param.getCourseId(), param.getVideoId(),
+                            String.valueOf(qwUser.getId()), qwUser.getCompanyUserId().toString(), qwUser.getCompanyId().toString(), config,null);
+                    st.setMiniprogramAppid(getAppId());
+                    st.setMiniprogramTitle("每日一享");
+                    st.setMiniprogramPage(linkByMiniApp);
+                    break;
+                //素材分享
+                case "17":
+                    linkByMiniApp = createPhoneNumberLinkByMiniApp(st,sopLogs, qwUser.getCorpId(), new Date(), param.getCourseId(), param.getVideoId(),
+                            String.valueOf(qwUser.getId()), qwUser.getCompanyUserId().toString(), qwUser.getCompanyId().toString(), config,null);
+                    st.setMiniprogramAppid(getAppId());
+                    st.setMiniprogramTitle("领取开箱密码");
+                    st.setMiniprogramPage(linkByMiniApp);
+                    break;
 
 
                 case "21":
                 case "21":
                     if (sopLogs.getFsUserId() != null && !Long.valueOf(0L).equals(sopLogs.getFsUserId())) {
                     if (sopLogs.getFsUserId() != null && !Long.valueOf(0L).equals(sopLogs.getFsUserId())) {
@@ -1993,5 +2067,76 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
         return link.getRealLink();
         return link.getRealLink();
     }
     }
 
 
+    public String createShareMaterialLinkByMiniApp(QwSopCourseFinishTempSetting.Setting st, QwSopLogs sopLogs, String corpId, Date sendTime, Integer courseId, Integer videoId, String qwUserId, String companyUserId, String companyId,  CourseConfig config, String chatId) {
+        FsCourseLink link = createFsCourseLink(corpId, sendTime, courseId, videoId, Long.parseLong(qwUserId),
+                companyUserId, companyId, null, 3, chatId);
+
+        Date updateTime = createUpdateTime(st, sendTime, config);
+        link.setUpdateTime(updateTime);
+
+        FsCourseRealLink courseMap = new FsCourseRealLink();
+        BeanUtils.copyProperties(link, courseMap);
 
 
+        st.setExternalUserId(sopLogs.getExternalUserId());
+        st.setChatId(chatId);
+
+        st.setMiniprogramPicUrl(st.getShareMaterialUrl());
+        courseMap.setQwExternalId(sopLogs.getExternalId());
+        String realLinkFull = shareMaterialLink + JSON.toJSONString(courseMap);
+        link.setRealLink(realLinkFull);
+        log.error("存入fs_course_link:" + registeredRealLink );
+        log.error("QwSopCourseFinishTempSetting.Setting:{}" ,st );
+        //存短链-
+        fsCourseLinkMapper.insertFsCourseLink(link);
+        return link.getRealLink();
+    }
+
+    public String createPhoneNumberLinkByMiniApp(QwSopCourseFinishTempSetting.Setting st, QwSopLogs sopLogs, String corpId, Date sendTime, Integer courseId, Integer videoId, String qwUserId, String companyUserId, String companyId,  CourseConfig config, String chatId) {
+        FsCourseLink link = createFsCourseLink(corpId, sendTime, courseId, videoId, Long.parseLong(qwUserId),
+                companyUserId, companyId, null, 3, chatId);
+
+        Date updateTime = createUpdateTime(st, sendTime, config);
+        link.setUpdateTime(updateTime);
+
+        FsCourseRealLink courseMap = new FsCourseRealLink();
+        BeanUtils.copyProperties(link, courseMap);
+
+        st.setExternalUserId(sopLogs.getExternalUserId());
+        st.setChatId(chatId);
+
+        st.setMiniprogramPicUrl(st.getShareMaterialUrl());
+        courseMap.setQwExternalId(sopLogs.getExternalId());
+        String realLinkFull = phoneNumberLink + JSON.toJSONString(courseMap);
+        link.setRealLink(realLinkFull);
+        log.error("存入fs_course_link:" + registeredRealLink );
+        log.error("QwSopCourseFinishTempSetting.Setting:{}" ,st );
+        //存短链-
+        fsCourseLinkMapper.insertFsCourseLink(link);
+        return link.getRealLink();
+    }
+
+    /**
+     * 获取 appId 的私有方法
+     */
+    private String getAppId() {
+        try {
+            String configValue = sysConfigService.selectConfigByKey(APP_ID_CONFIG_KEY);
+            if (org.apache.commons.lang3.StringUtils.isNotEmpty(configValue)) {
+                JSONObject json = JSONUtil.parseObj(configValue);
+                String appId = json.getStr("appId");
+                if (org.apache.commons.lang3.StringUtils.isNotEmpty(appId)) {
+                    return appId;
+                } else {
+                    log.warn("配置 {} 中 appId 字段为空,使用默认值", APP_ID_CONFIG_KEY);
+                }
+            } else {
+                log.warn("未找到配置 {},使用默认值", APP_ID_CONFIG_KEY);
+            }
+        } catch (Exception e) {
+            log.error("解析 appId 配置异常,configValue={}",
+                    sysConfigService.selectConfigByKey(APP_ID_CONFIG_KEY), e);
+        }
+        //默认值
+        return DEFAULT_APP_ID;
+    }
 }
 }