Просмотр исходного кода

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

wjj 1 неделя назад
Родитель
Сommit
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.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.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.IFsSignArticleService;
 import com.fs.ipad.IpadSendUtils;
 import com.fs.ipad.IpadSendUtils;
 import com.fs.ipad.vo.*;
 import com.fs.ipad.vo.*;
 import com.fs.qw.domain.BindPhoneRedPacketRecord;
 import com.fs.qw.domain.BindPhoneRedPacketRecord;
@@ -81,6 +83,9 @@ public class IpadSendServer {
     @Autowired
     @Autowired
     private FsUserMapper fsUserMapper;
     private FsUserMapper fsUserMapper;
 
 
+    @Autowired
+    private IFsSignArticleService signArticleService;
+
     //private final LiveWatchLogMapper liveWatchLogMapper;
     //private final LiveWatchLogMapper liveWatchLogMapper;
 
 
 
 
@@ -566,6 +571,20 @@ public class IpadSendServer {
                         qwSopLogsService.updateQwSopLogsByWatchLogType(qwSopLogs.getId(), "手机号授权红包发放失败,请重新发送!");
                         qwSopLogsService.updateQwSopLogsByWatchLogType(qwSopLogs.getId(), "手机号授权红包发放失败,请重新发送!");
                     }
                     }
                     break;
                     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":
                 case "21":
                     content.setSendStatus(0);
                     content.setSendStatus(0);
                     content.setSendRemarks("短信待发送");
                     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 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 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=";
@@ -1144,6 +1145,15 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
                     setting.setMiniprogramPage(linkBy);
                     setting.setMiniprogramPage(linkBy);
                     setting.setContentType("14");
                     setting.setContentType("14");
                     break;
                     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"://短信看课
                 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);
@@ -2337,6 +2347,32 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
         return link.getRealLink();
         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,
     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

+ 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 java.util.List;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.fs.his.domain.FsSignArticle;
 import com.fs.his.domain.FsSignArticle;
+import org.apache.ibatis.annotations.Select;
 
 
 /**
 /**
  * 打卡文章Mapper接口
  * 打卡文章Mapper接口
@@ -58,4 +59,13 @@ public interface FsSignArticleMapper extends BaseMapper<FsSignArticle>{
      * @return 结果
      * @return 结果
      */
      */
     int deleteFsSignArticleByIds(Long[] ids);
     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 结果
      * @return 结果
      */
      */
     int deleteFsSignArticleById(Long id);
     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;
 package com.fs.his.service.impl;
 
 
+import java.util.Collections;
 import java.util.List;
 import java.util.List;
 import com.fs.common.utils.DateUtils;
 import com.fs.common.utils.DateUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -18,6 +19,8 @@ import com.fs.his.service.IFsSignArticleService;
 @Service
 @Service
 public class FsSignArticleServiceImpl extends ServiceImpl<FsSignArticleMapper, FsSignArticle> implements IFsSignArticleService {
 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);
         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
         //授权红包id
         private Long redPacketId;
         private Long redPacketId;
 
 
+        //打卡红包id
+        private Long signArticleId;
+        //打卡文章封面图
+        private String signArticleImgUrl;
+
         // 短信CODE
         // 短信CODE
         private String smsTemplateCode;
         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
             //授权红包id
             private Long redPacketId;
             private Long redPacketId;
 
 
+            //打卡红包id
+            private Long signArticleId;
+
+            //打卡文章封面图
+            private String signArticleImgUrl;
+
             // 短信CODE
             // 短信CODE
             private String smsTemplateCode;
             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 FileAttachment file; // 文件附件详情
 
 
         private RedPacketAttachment redPacket; // 文件附件详情
         private RedPacketAttachment redPacket; // 文件附件详情
+        private SignArticleAttachment signArticle; // 文件附件详情
+
+
+        @Data
+        // 内部类,用于图片附件
+        public static class SignArticleAttachment {
+            private Long id; // 打卡文章id
+            private String name; // 打卡文章别名
+        }
         @Data
         @Data
         // 内部类,用于图片附件
         // 内部类,用于图片附件
         public static class RedPacketAttachment {
         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 {
 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 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=";
@@ -646,6 +647,14 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
                                 st.setMiniprogramTitle("手机授权");
                                 st.setMiniprogramTitle("手机授权");
                                 st.setMiniprogramPage(linkByMiniApp);
                                 st.setMiniprogramPage(linkByMiniApp);
                                 break;
                                 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);
                     setting.setSetting(list);
@@ -761,6 +770,14 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
                                 st.setMiniprogramTitle("手机授权");
                                 st.setMiniprogramTitle("手机授权");
                                 st.setMiniprogramPage(linkByMiniApp);
                                 st.setMiniprogramPage(linkByMiniApp);
                                 break;
                                 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);
                     setting.setSetting(list);
@@ -983,6 +1000,14 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
                             st.setMiniprogramTitle("手机授权");
                             st.setMiniprogramTitle("手机授权");
                             st.setMiniprogramPage(linkByMiniApp);
                             st.setMiniprogramPage(linkByMiniApp);
                             break;
                             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":
                         case "21":
                             if (sopLogs.getFsUserId() != null && !Long.valueOf(0L).equals(sopLogs.getFsUserId())) {
                             if (sopLogs.getFsUserId() != null && !Long.valueOf(0L).equals(sopLogs.getFsUserId())) {
                                 addWatchLogIfNeeded(item.getSopId(), param.getVideoId(), param.getCourseId(), item.getFsUserId(), qwUserId, companyUserId, companyId,
                                 addWatchLogIfNeeded(item.getSopId(), param.getVideoId(), param.getCourseId(), item.getFsUserId(), qwUserId, companyUserId, companyId,
@@ -1557,6 +1582,15 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
                     st.setMiniprogramPage(linkByMiniApp);
                     st.setMiniprogramPage(linkByMiniApp);
                     break;
                     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":
                 case "21":
                     if (sopLogs.getFsUserId() != null && !Long.valueOf(0L).equals(sopLogs.getFsUserId())) {
                     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,
                         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();
         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();
+    }
+
 
 
 }
 }