فهرست منبع

打卡文章一键群发和SOP自动发送

wjj 1 هفته پیش
والد
کامیت
4b42a25a25

+ 27 - 0
fs-company/src/main/java/com/fs/company/controller/qw/FsSignArticleController.java

@@ -0,0 +1,27 @@
+package com.fs.company.controller.qw;
+
+
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.his.service.IFsSignArticleService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@Slf4j
+@RestController
+@RequestMapping("/qw/signArticle")
+public class FsSignArticleController extends BaseController {
+
+    @Autowired
+    private IFsSignArticleService signArticleService;
+
+
+    @GetMapping("/secondNameOptions")
+    public AjaxResult selectSecondNameOptionList(){
+        return AjaxResult.success(signArticleService.selectSecondNameOptionList());
+    }
+
+}

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

@@ -16,8 +16,10 @@ import com.fs.course.config.CourseConfig;
 import com.fs.course.domain.FsCoursePlaySourceConfig;
 import com.fs.course.domain.FsCourseWatchLog;
 import com.fs.course.service.IFsCourseWatchLogService;
+import com.fs.his.domain.FsSignArticle;
 import com.fs.his.domain.FsUser;
 import com.fs.his.mapper.FsUserMapper;
+import com.fs.his.service.IFsSignArticleService;
 import com.fs.ipad.IpadSendUtils;
 import com.fs.ipad.vo.*;
 import com.fs.qw.domain.BindPhoneRedPacketRecord;
@@ -81,6 +83,9 @@ public class IpadSendServer {
     @Autowired
     private FsUserMapper fsUserMapper;
 
+    @Autowired
+    private IFsSignArticleService signArticleService;
+
     //private final LiveWatchLogMapper liveWatchLogMapper;
 
 
@@ -566,6 +571,20 @@ public class IpadSendServer {
                         qwSopLogsService.updateQwSopLogsByWatchLogType(qwSopLogs.getId(), "手机号授权红包发放失败,请重新发送!");
                     }
                     break;
+                case "15":
+                    log.info("===============进入打卡文章=============");
+                    FsSignArticle signArticle = signArticleService.selectFsSignArticleById(content.getSignArticleId());
+                    if (signArticle == null) {
+                        qwSopLogsService.updateQwSopLogsByWatchLogType(qwSopLogs.getId(),"打卡文章不存在");
+                    }
+                    try{
+                        content.setMiniprogramPage(quickProcess(content.getMiniprogramPage(),content.getSignArticleId()));
+                        //发送小程序
+                        sendMiniProgram(vo, content, miniMap,qwUser.getCompanyId());
+                    }catch (Exception e){
+                        qwSopLogsService.updateQwSopLogsByWatchLogType(qwSopLogs.getId(), "打卡文章发放失败,请重新发送!");
+                    }
+                    break;
                 case "21":
                     content.setSendStatus(0);
                     content.setSendRemarks("短信待发送");

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

@@ -79,6 +79,7 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
 
 
     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 SHORT_LINK_PREFIX = "/courseH5/pages/course/learning?s=";
     private static final String appActivityLink = "/pages_course/luckybag.html?link=";
     private static final String miniappRealLink = "/pages_course/video.html?course=";
@@ -1144,6 +1145,15 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
                     setting.setMiniprogramPage(linkBy);
                     setting.setContentType("14");
                     break;
+                case "15" :
+                    //打卡文章
+                    String signLinkBy = createSignArticleLinkByMiniApp(setting, sopLogs, sopLogs.getCorpId(), new Date(), courseId, videoId
+                            , qwUserId, companyUserId, companyId, cachedCourseConfig, logVo.getChatId());
+                    setting.setMiniprogramAppid(miniAppId);
+                    setting.setMiniprogramTitle("打卡文章");
+                    setting.setMiniprogramPage(signLinkBy);
+                    setting.setContentType("15");
+                    break;
                 case "21"://短信看课
                     if (sopLogs.getFsUserId() != null && !Long.valueOf(0L).equals(sopLogs.getFsUserId())) {
                         addWatchLogIfNeeded(sopLogs, videoId, courseId, sendTime, qwUserId, companyUserId, companyId, externalId, logVo);
@@ -2337,6 +2347,32 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
         return link.getRealLink();
     }
 
+    public String createSignArticleLinkByMiniApp(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 link = createActivityByLink(corpId, sendTime, courseId, videoId, qwUserId.toString(),
+                companyUserId, companyId, null, 3);
+        link.setChatId(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.getSignArticleImgUrl());
+
+        courseMap.setQwExternalId(sopLogs.getExternalId());
+
+        String realLinkFull = signArticleLink + JSON.toJSONString(courseMap);
+        link.setRealLink(realLinkFull);
+
+        //存短链-
+        enqueueCourseLink(link);
+        return link.getRealLink();
+    }
+
     public FsCourseLink createActivityByLink(String corpId, Date sendTime, Long courseId, Long videoId, String qwUserId,
                                              String companyUserId, String companyId, String externalId, Integer type) {
         // 手动创建 FsCourseLink 对象,避免使用 BeanUtils.copyProperties

+ 10 - 0
fs-service/src/main/java/com/fs/his/mapper/FsSignArticleMapper.java

@@ -3,6 +3,7 @@ package com.fs.his.mapper;
 import java.util.List;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.fs.his.domain.FsSignArticle;
+import org.apache.ibatis.annotations.Select;
 
 /**
  * 打卡文章Mapper接口
@@ -58,4 +59,13 @@ public interface FsSignArticleMapper extends BaseMapper<FsSignArticle>{
      * @return 结果
      */
     int deleteFsSignArticleByIds(Long[] ids);
+
+
+    /**
+     * 获取打卡文章别名数据集合
+     *
+     * @return 结果
+     */
+    @Select(" SELECT second_name,id,image_url FROM fs_sign_article ")
+    List<FsSignArticle> selectSecondNameOptionList();
 }

+ 7 - 0
fs-service/src/main/java/com/fs/his/service/IFsSignArticleService.java

@@ -58,4 +58,11 @@ public interface IFsSignArticleService extends IService<FsSignArticle>{
      * @return 结果
      */
     int deleteFsSignArticleById(Long id);
+
+    /**
+     * 获取打卡文章别名数据集合
+     *
+     * @return 结果
+     */
+    List<FsSignArticle> selectSecondNameOptionList();
 }

+ 8 - 0
fs-service/src/main/java/com/fs/his/service/impl/FsSignArticleServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fs.his.service.impl;
 
+import java.util.Collections;
 import java.util.List;
 import com.fs.common.utils.DateUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -18,6 +19,8 @@ import com.fs.his.service.IFsSignArticleService;
 @Service
 public class FsSignArticleServiceImpl extends ServiceImpl<FsSignArticleMapper, FsSignArticle> implements IFsSignArticleService {
 
+    @Autowired
+    private FsSignArticleMapper fsSignArticleMapper;
     /**
      * 查询打卡文章
      * 
@@ -91,4 +94,9 @@ public class FsSignArticleServiceImpl extends ServiceImpl<FsSignArticleMapper, F
     {
         return baseMapper.deleteFsSignArticleById(id);
     }
+
+    @Override
+    public List<FsSignArticle> selectSecondNameOptionList() {
+        return fsSignArticleMapper.selectSecondNameOptionList();
+    }
 }

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

@@ -115,6 +115,11 @@ public class QwSopCourseFinishTempSetting implements Serializable,Cloneable{
         //授权红包id
         private Long redPacketId;
 
+        //打卡红包id
+        private Long signArticleId;
+        //打卡文章封面图
+        private String signArticleImgUrl;
+
         // 短信CODE
         private String smsTemplateCode;
 

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

@@ -153,6 +153,12 @@ public class QwSopTempSetting implements Serializable{
             //授权红包id
             private Long redPacketId;
 
+            //打卡红包id
+            private Long signArticleId;
+
+            //打卡文章封面图
+            private String signArticleImgUrl;
+
             // 短信CODE
             private String smsTemplateCode;
 

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

@@ -23,6 +23,15 @@ public class SendWelcomeMsgParam {
         private FileAttachment file; // 文件附件详情
 
         private RedPacketAttachment redPacket; // 文件附件详情
+        private SignArticleAttachment signArticle; // 文件附件详情
+
+
+        @Data
+        // 内部类,用于图片附件
+        public static class SignArticleAttachment {
+            private Long id; // 打卡文章id
+            private String name; // 打卡文章别名
+        }
         @Data
         // 内部类,用于图片附件
         public static class RedPacketAttachment {

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

@@ -87,6 +87,7 @@ import static com.fs.course.utils.LinkUtil.generateRandomStringWithLock;
 public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
 
     private static final String appActivityLink = "/pages_course/luckybag.html?link=";
+    private static final String signArticleLink = "/pages_course/article.html?link=";
     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 miniappRealLink = "/pages_course/video.html?course=";
@@ -646,6 +647,14 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
                                 st.setMiniprogramTitle("手机授权");
                                 st.setMiniprogramPage(linkByMiniApp);
                                 break;
+                            //打卡文章
+                            case "15":
+                                linkByMiniApp = createSignArticleLinkByMiniApp(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(qwCompany.getMiniAppId());
+                                st.setMiniprogramTitle("打卡文章");
+                                st.setMiniprogramPage(linkByMiniApp);
+                                break;
                         }
                     }
                     setting.setSetting(list);
@@ -761,6 +770,14 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
                                 st.setMiniprogramTitle("手机授权");
                                 st.setMiniprogramPage(linkByMiniApp);
                                 break;
+                            //打卡文章
+                            case "15":
+                                linkByMiniApp = createSignArticleLinkByMiniApp(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(qwCompany.getMiniAppId());
+                                st.setMiniprogramTitle("打卡文章");
+                                st.setMiniprogramPage(linkByMiniApp);
+                                break;
                         }
                     }
                     setting.setSetting(list);
@@ -983,6 +1000,14 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
                             st.setMiniprogramTitle("手机授权");
                             st.setMiniprogramPage(linkByMiniApp);
                             break;
+                        case "15":
+                            linkByMiniApp = createSignArticleLinkByMiniApp(st,sopLogs, param.getCorpId(), createTime, param.getCourseId(), param.getVideoId(),
+                                    qwUserId, companyUserId, companyId, config,null);
+                            st.setMiniprogramAppid(qwCompany.getMiniAppId());
+                            st.setMiniprogramTitle("打卡文章");
+                            st.setMiniprogramPage(linkByMiniApp);
+                            break;
+
                         case "21":
                             if (sopLogs.getFsUserId() != null && !Long.valueOf(0L).equals(sopLogs.getFsUserId())) {
                                 addWatchLogIfNeeded(item.getSopId(), param.getVideoId(), param.getCourseId(), item.getFsUserId(), qwUserId, companyUserId, companyId,
@@ -1557,6 +1582,15 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
                     st.setMiniprogramPage(linkByMiniApp);
                     break;
 
+                case "15":
+                    //授权红包
+                    linkByMiniApp = createSignArticleLinkByMiniApp(st,sopLogs, param.getCorpId(), dataTime, param.getCourseId(), param.getVideoId(),
+                            String.valueOf(qwUser.getId()), companyUserId, companyId,  config,null);
+                    st.setMiniprogramAppid(qwCompany.getMiniAppId());
+                    st.setMiniprogramTitle("打卡文章");
+                    st.setMiniprogramPage(linkByMiniApp);
+                    break;
+
                 case "21":
                     if (sopLogs.getFsUserId() != null && !Long.valueOf(0L).equals(sopLogs.getFsUserId())) {
                         addWatchLogIfNeeded(item.getSopId(), param.getVideoId(), param.getCourseId(), item.getFsUserId(), String.valueOf(qwUser.getId()), companyUserId, companyId,
@@ -1935,5 +1969,29 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
         return link.getRealLink();
     }
 
+    public String createSignArticleLinkByMiniApp(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.getSignArticleImgUrl());
+        courseMap.setQwExternalId(sopLogs.getExternalId());
+        String realLinkFull = signArticleLink + JSON.toJSONString(courseMap);
+        link.setRealLink(realLinkFull);
+        log.error("存入fs_course_link:" + registeredRealLink );
+        log.error("QwSopCourseFinishTempSetting.Setting:{}" ,st );
+        //存短链-
+        fsCourseLinkMapper.insertFsCourseLink(link);
+        return link.getRealLink();
+    }
+
 
 }