Browse Source

Merge remote-tracking branch 'origin/master'

lmx 2 days ago
parent
commit
3f1de9f11b
22 changed files with 290 additions and 211 deletions
  1. 10 0
      fs-company/src/main/java/com/fs/company/controller/course/FsUserCourseVideoController.java
  2. 1 1
      fs-ipad-task/src/main/java/com/fs/app/service/IpadSendServer.java
  3. 1 1
      fs-ipad-task/src/test/java/com/fs/app/task/SendMsgTest.java
  4. 2 2
      fs-qw-api-msg/src/main/java/com/fs/app/controller/QwMsgController.java
  5. 1 1
      fs-service/src/main/java/com/fs/company/mapper/CompanyMapper.java
  6. 26 0
      fs-service/src/main/java/com/fs/course/domain/FsUserCourseVideo.java
  7. 1 1
      fs-service/src/main/java/com/fs/course/mapper/FsUserCourseVideoMapper.java
  8. 30 6
      fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java
  9. 39 0
      fs-service/src/main/java/com/fs/course/vo/FsUserCourseVideoVO.java
  10. 2 0
      fs-service/src/main/java/com/fs/fastGpt/service/AiHookService.java
  11. 65 14
      fs-service/src/main/java/com/fs/fastGpt/service/impl/AiHookServiceImpl.java
  12. 1 1
      fs-service/src/main/java/com/fs/hisStore/config/StoreConfig.java
  13. 39 19
      fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderScrmServiceImpl.java
  14. 1 1
      fs-service/src/main/java/com/fs/hisStore/service/impl/FsStorePaymentScrmServiceImpl.java
  15. 3 1
      fs-service/src/main/java/com/fs/qw/mapper/QwExternalContactMapper.java
  16. 1 1
      fs-service/src/main/java/com/fs/qw/service/impl/QwExternalContactServiceImpl.java
  17. 26 0
      fs-service/src/main/java/com/fs/tag/domain/FsTagUpdateQueue.java
  18. 3 2
      fs-service/src/main/java/com/fs/tag/mapper/FsTagUpdateQueueMapper.java
  19. 18 157
      fs-service/src/main/java/com/fs/tag/service/impl/FsTagUpdateServiceImpl.java
  20. 1 1
      fs-service/src/main/resources/mapper/company/CompanyUserMapper.xml
  21. 6 0
      fs-service/src/main/resources/mapper/course/FsUserCourseVideoMapper.xml
  22. 13 2
      fs-user-app/src/main/java/com/fs/app/controller/store/CompanyUserScrmController.java

+ 10 - 0
fs-company/src/main/java/com/fs/company/controller/course/FsUserCourseVideoController.java

@@ -86,7 +86,17 @@ public class FsUserCourseVideoController extends BaseController
         }
         return toAjax(fsUserCourseVideoService.insertFsUserCourseVideo(fsUserCourseVideo));
     }
+    /**
+     * 更新课堂视频
+     */
+    @PreAuthorize("@ss.hasPermi('course:userCourseVideo:update')")
+    @Log(title = "更新课堂视频", businessType = BusinessType.UPDATE)
+    @PostMapping("/update")
+    public AjaxResult update(@RequestBody FsUserCourseVideo fsUserCourseVideo)
+    {
 
+        return toAjax(fsUserCourseVideoService.updateFsUserCourseVideo(fsUserCourseVideo));
+    }
     /**
      * 修改课堂视频
      */

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

@@ -334,7 +334,7 @@ public class IpadSendServer {
     public void send(QwSopCourseFinishTempSetting.Setting content, QwUser qwUser, QwSopLogs qwSopLogs, Map<String, FsCoursePlaySourceConfig> miniMap, BaseVo parentVo) {
         BaseVo vo = new BaseVo();
         vo.setId(Long.parseLong(qwSopLogs.getId()));
-        vo.setRoom(qwSopLogs.getSendType() == 6);
+        vo.setRoom(qwSopLogs.getSendType() == 6 || qwSopLogs.getSendType() == 12);
         vo.setUuid(qwUser.getUid());
         vo.setExId(qwSopLogs.getExternalUserId());
         vo.setServerId(qwUser.getServerId());

+ 1 - 1
fs-ipad-task/src/test/java/com/fs/app/task/SendMsgTest.java

@@ -41,7 +41,7 @@ public class SendMsgTest {
 
         for(Long logId : testLogIds){
             FsCourseWatchLog fsCourseWatchLog = fsCourseWatchLogMapper.selectFsCourseWatchLogByLogId(logId);
-            fsTagUpdateService.onCourseWatchFinishedBatch(Collections.singletonList(fsCourseWatchLog));
+            fsTagUpdateService.onCourseWatchingBatch(Collections.singletonList(fsCourseWatchLog));
         }
     }
 

+ 2 - 2
fs-qw-api-msg/src/main/java/com/fs/app/controller/QwMsgController.java

@@ -376,8 +376,8 @@ public class QwMsgController {
                         log.info("id:{}, 客户发送", id);
                         aiHookService.qwHookNotifyAiReply(id,sender,content,wxWorkMsgResp.getUuid(),wxWorkMessageDTO.getMsgtype());
                     }else {
-                        log.info("id:{}, 销售发送", id);
-                        aiHookService.qwHookNotifyAddMsg(id,receiver,content,wxWorkMsgResp.getUuid());
+                        log.info("销售发送");
+                        aiHookService.qwHookNotifyAddMsgNew(id,receiver,content,wxWorkMsgResp.getUuid(),1);
                     }
 
                 }

+ 1 - 1
fs-service/src/main/java/com/fs/company/mapper/CompanyMapper.java

@@ -155,7 +155,7 @@ public interface CompanyMapper
 
     @Select({"<script> " +
             "select c.*,cu.user_name,qu.used_num FROM company c LEFT JOIN company_user cu ON c.user_id =cu.user_id  " +
-            "LEFT JOIN (select company_id, count(id) as used_num from qw_user where server_id is not null group by company_id) qu ON qu.company_id = c.company_id " +
+            "LEFT JOIN (select company_id, count(id) as used_num from qw_user where server_id is not null and server_status = 1 group by company_id) qu ON qu.company_id = c.company_id " +
             "where c.is_del=0 " +
             "            <if test=\"companyName != null  and companyName != ''\"> and c.company_name like concat('%', #{companyName}, '%')</if>\n" +
             "            <if test=\"companyMobile != null  and companyMobile != ''\"> and c.company_mobile = #{companyMobile}</if>\n" +

+ 26 - 0
fs-service/src/main/java/com/fs/course/domain/FsUserCourseVideo.java

@@ -113,4 +113,30 @@ public class FsUserCourseVideo extends BaseEntity
     private Long listingEndTime;//商品结束售卖时间
 
 
+    /**
+     * 看课中标签ID
+     */
+    private String watchingTagId;
+    /**
+     * 完课标签ID
+     */
+    private String watchedTagId;
+    /**
+     * 标签组ID
+     */
+    private String tagGroupId;
+
+    /**
+     * 标签组表中的ID
+     */
+    private Long tgId;
+    /**
+     * 看课标签 表中的ID
+     */
+    private Long watchingTgId;
+    /**
+     * 完课标签 表中的ID
+     */
+    private Long watchedTgId;
+
 }

+ 1 - 1
fs-service/src/main/java/com/fs/course/mapper/FsUserCourseVideoMapper.java

@@ -257,7 +257,7 @@ public interface FsUserCourseVideoMapper
 
     FsUserCourseVO selectFsUserCourseVideoVoByVideoIdAndCourdeId(@Param("videoId") Long videoId,@Param("courseId") Long courseId);
 
-    @Select("select video_id,is_first,course_sort from fs_user_course_video")
+    @Select("select video_id,is_first,course_sort,tg_id,watching_tg_id,watched_tg_id,watching_tag_id,watched_tag_id,tag_group_id from fs_user_course_video")
     @MapKey("videoId")
     Map<Long, FsUserCourseVideo> selectAllMap();
 }

+ 30 - 6
fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java

@@ -54,10 +54,7 @@ import com.fs.his.service.IFsUserWxService;
 import com.fs.his.utils.ConfigUtil;
 import com.fs.his.vo.OptionsVO;
 import com.fs.qw.domain.*;
-import com.fs.qw.mapper.QwExternalContactMapper;
-import com.fs.qw.mapper.QwGroupChatMapper;
-import com.fs.qw.mapper.QwGroupChatUserMapper;
-import com.fs.qw.mapper.QwUserMapper;
+import com.fs.qw.mapper.*;
 import com.fs.qw.param.FsUserCourseRedPageParam;
 import com.fs.qw.service.IQwCompanyService;
 import com.fs.qw.service.IQwExternalContactService;
@@ -256,7 +253,10 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
 
     @Autowired
     private IFsUserIntegralLogsService iFsUserIntegralLogsService;
-
+    @Autowired
+    private QwTagGroupMapper qwTagGroupMapper;
+    @Autowired
+    private QwTagMapper qwTagMapper;
 
 
 
@@ -922,9 +922,33 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
         return R.error(400,msg).put("qrcode",contactWay);
     }
 
+
     @Override
     public List<FsUserCourseVideoVO> selectFsUserCourseVideoListByCourseIdAndCompany(FsUserCourseVideoParam fsUserCourseVideo) {
-        return fsUserCourseVideoMapper.selectFsUserCourseVideoListByCourseIdAndCompany(fsUserCourseVideo);
+        List<FsUserCourseVideoVO> fsUserCourseVideoVOS = fsUserCourseVideoMapper.selectFsUserCourseVideoListByCourseIdAndCompany(fsUserCourseVideo);
+        for (FsUserCourseVideoVO item : fsUserCourseVideoVOS) {
+            if(ObjectUtils.isNotNull(item.getTgId())){
+                QwTagGroup qwTagGroup = qwTagGroupMapper.selectQwTagGroupById(item.getTgId());
+                if(ObjectUtils.isNotNull(qwTagGroup)){
+                    item.setTagGroupName(qwTagGroup.getName());
+                }
+            }
+
+            if(ObjectUtils.isNotNull(item.getWatchingTgId())){
+                QwTag qwTag = qwTagMapper.selectQwTagById(item.getWatchingTgId());
+                if(ObjectUtils.isNotNull(qwTag)){
+                    item.setWatchingTagName(qwTag.getName());
+                }
+            }
+
+            if(ObjectUtils.isNotNull(item.getWatchedTgId())) {
+                QwTag qwTag = qwTagMapper.selectQwTagById(item.getWatchedTgId());
+                if(ObjectUtils.isNotNull(qwTag)){
+                    item.setWatchedTagName(qwTag.getName());
+                }
+            }
+        }
+        return fsUserCourseVideoVOS;
     }
 
     @Override

+ 39 - 0
fs-service/src/main/java/com/fs/course/vo/FsUserCourseVideoVO.java

@@ -68,4 +68,43 @@ public class FsUserCourseVideoVO extends BaseEntity {
     private String redPacketMoney;
 
     private String companyRedPacketMoney;
+    /**
+     * 标签组表中的ID
+     */
+    private Long tgId;
+    /**
+     * 看课标签 表中的ID
+     */
+    private Long watchingTgId;
+    /**
+     * 完课标签 表中的ID
+     */
+    private Long watchedTgId;
+
+    /**
+     * 看课中标签ID
+     */
+    private String watchingTagId;
+    /**
+     * 完课标签ID
+     */
+    private String watchedTagId;
+    /**
+     * 标签组ID
+     */
+    private String tagGroupId;
+
+    /**
+     * 标签组名称
+     */
+    private String tagGroupName;
+    /**
+     * 看课标签
+     */
+    private String watchingTagName;
+    /**
+     * 完课标签
+     */
+    private String watchedTagName;
+
 }

+ 2 - 0
fs-service/src/main/java/com/fs/fastGpt/service/AiHookService.java

@@ -20,6 +20,8 @@ public interface AiHookService {
 
     R qwHookNotifyAddMsg(Long qwUserID, Long sender,String count,String uid);
 
+    R qwHookNotifyAddMsgNew(Long qwUserID, Long sender,String count,String uid,Integer type);
+
     void expireAiMsg();
 
     WxWorkResponseDTO<String> getFileUrl(String uuid, String fileId, String aesKey, String authKey, String fileName, Integer fileSize, Long serverId);

+ 65 - 14
fs-service/src/main/java/com/fs/fastGpt/service/impl/AiHookServiceImpl.java

@@ -1937,8 +1937,9 @@ public class AiHookServiceImpl implements AiHookService {
         sendAIParam.setKey(user.getAppKey());
         redisTemplate.opsForList().leftPush("AiMsg:"+user.getAppKey(), JSON.toJSONString(sendAIParam));
     }
+
     @Override
-    public R qwHookNotifyAddMsg(Long qwUserID, Long sender,String count,String uid) {
+    public R qwHookNotifyAddMsgNew(Long qwUserID, Long sender,String count,String uid,Integer type) {
         QwUser sendUser = qwUserMapper.selectQwUserById(qwUserID);
 
 
@@ -1952,6 +1953,25 @@ public class AiHookServiceImpl implements AiHookService {
             FastGptChatSession fastGptChatSession = fastGptChatSessionMapper.selectFastGptChatSessionByQwExternalContactsAndUserId(qwExternalContacts.getId(), sendUser.getId());
             if (fastGptChatSession!=null){
                 saveQwUserMsg(fastGptChatSession,2,count);
+                // 客服进行回复后就转人工10分钟
+                if(type == 1){
+                    Calendar calendar = Calendar.getInstance();
+                    calendar.add(Calendar.MINUTE, -5);
+                    Date lastTime = calendar.getTime();
+                    if(lastTime.after(fastGptChatSession.getCreateTime())){
+                        Calendar calendar1 = Calendar.getInstance();
+                        //定时任务会处理10分钟以内的,所以设置20分钟
+                        calendar1.add(Calendar.MINUTE, 10);
+                        Date expireTime = calendar1.getTime();
+
+                        FastGptChatSession chatSession = new FastGptChatSession();
+                        chatSession.setLastTime(expireTime);
+                        chatSession.setIsArtificial(1);
+                        chatSession.setSessionId(fastGptChatSession.getSessionId());
+
+                        fastGptChatSessionMapper.updateFastGptChatSession(chatSession);
+                    }
+                }
             }else {
 
                 if(qwExternalContacts.getType()!=null&&qwExternalContacts.getType()==1){
@@ -1978,19 +1998,50 @@ public class AiHookServiceImpl implements AiHookService {
                     }
                 }
             }
-            // 客服进行回复后就转人工10分钟
-            if(fastGptChatSession != null){
-                Calendar calendar = Calendar.getInstance();
-                //定时任务会处理10分钟以内的,所以设置20分钟
-                calendar.add(Calendar.MINUTE, 30);
-                Date expireTime = calendar.getTime();
-
-                FastGptChatSession chatSession = new FastGptChatSession();
-                chatSession.setLastTime(expireTime);
-                chatSession.setIsArtificial(1);
-                chatSession.setSessionId(fastGptChatSession.getSessionId());
-
-                fastGptChatSessionMapper.updateFastGptChatSession(chatSession);
+        }
+        return R.ok();
+    }
+
+    @Override
+    public R qwHookNotifyAddMsg(Long qwUserID, Long sender,String count,String uid) {
+        QwUser sendUser = qwUserMapper.selectQwUserById(qwUserID);
+
+
+        if (sendUser!=null){
+
+            String extId = getExtId(sender, uid, sendUser.getServerId());
+            QwExternalContact qwExternalContacts = qwExternalContactMapper.selectQwExternalContactByExternalUserIdAndQwUserId(extId, sendUser.getCorpId(),sendUser.getQwUserId());
+            if (qwExternalContacts==null){
+                return R.ok();
+            }
+            FastGptChatSession fastGptChatSession = fastGptChatSessionMapper.selectFastGptChatSessionByQwExternalContactsAndUserId(qwExternalContacts.getId(), sendUser.getId());
+            if (fastGptChatSession!=null){
+                saveQwUserMsg(fastGptChatSession,2,count);
+            }else {
+
+                if(qwExternalContacts.getType()!=null&&qwExternalContacts.getType()==1){
+                    if(sendUser.getFastGptRoleId()!=null){
+                        fastGptChatSession = new FastGptChatSession();
+                        String chatId = UUID.randomUUID().toString();
+                        fastGptChatSession.setChatId(chatId);
+                        fastGptChatSession.setKfId(sendUser.getFastGptRoleId().toString());
+                        fastGptChatSession.setStatus(1);
+                        fastGptChatSession.setRemindCount(0);
+                        fastGptChatSession.setRemindStatus(0);
+                        fastGptChatSession.setCreateTime(new Date());
+                        fastGptChatSession.setQwExtId(qwExternalContacts.getId());
+                        fastGptChatSession.setQwUserId(sendUser.getId());
+                        fastGptChatSession.setIsArtificial(0);
+                        fastGptChatSession.setAvatar(qwExternalContacts.getAvatar());
+                        fastGptChatSession.setNickName(qwExternalContacts.getName());
+                        fastGptChatSession.setCompanyId(sendUser.getCompanyId());
+                        fastGptChatSession.setLastTime(new Date());
+                        fastGptChatSession.setIsReply(0);
+                        fastGptChatSessionMapper.insertFastGptChatSession(fastGptChatSession);
+                        addUserSex(qwExternalContacts);
+                        saveQwUserMsg(fastGptChatSession,2,count);
+                    }
+                }
             }
         }
         return R.ok();

+ 1 - 1
fs-service/src/main/java/com/fs/hisStore/config/StoreConfig.java

@@ -24,5 +24,5 @@ public class StoreConfig implements Serializable {
     private Integer auditSwitch; // 订单审核开关
     private Integer createSalesOrderType; // 订单改价方式 1 商品改价 2总价改价
     private Boolean isBrushOrders;//是否开启刷单按钮
-
+    private Integer orderAttribution; // 下单归属 1 多销售 2单销售
 }

+ 39 - 19
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderScrmServiceImpl.java

@@ -33,13 +33,11 @@ import com.fs.common.utils.StringUtils;
 import com.fs.common.utils.poi.ExcelUtil;
 import com.fs.common.utils.ip.IpUtils;
 import com.fs.common.utils.spring.SpringUtils;
-import com.fs.company.domain.Company;
-import com.fs.company.domain.CompanyDept;
-import com.fs.company.domain.CompanyMoneyLogs;
-import com.fs.company.domain.CompanyUser;
+import com.fs.company.domain.*;
 import com.fs.company.mapper.CompanyDeptMapper;
 import com.fs.company.mapper.CompanyMapper;
 import com.fs.company.mapper.CompanyMoneyLogsMapper;
+import com.fs.company.mapper.CompanyUserUserMapper;
 import com.fs.company.service.ICompanyDeptService;
 import com.fs.company.service.ICompanyService;
 import com.fs.company.service.ICompanyUserService;
@@ -170,6 +168,9 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
     Logger logger = LoggerFactory.getLogger(getClass());
     @Autowired
     private CompanyMoneyLogsMapper moneyLogsMapper;
+
+    @Autowired
+    private CompanyUserUserMapper companyUserUserMapper;
     @Autowired
     private IFsStoreOrderStatusScrmService orderStatusService;
     @Autowired
@@ -740,23 +741,42 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
             storeOrder.setStoreHouseCode("CK01");
             storeOrder.setCompanyId(param.getCompanyId());
             storeOrder.setCompanyUserId(param.getCompanyUserId());
+
+            String json = configService.selectConfigByKey("store.config");
+            StoreConfig config= JSONUtil.toBean(json, StoreConfig.class);
             //绑定销售
-            FsUserScrm fsuser = userService.selectFsUserById(userId);
-            if (param.getCompanyUserId() != null) {
-                if (!CloudHostUtils.hasCloudHostName("鸿森堂") && ObjectUtil.isNotEmpty(fsuser.getCompanyUserId()) && !Objects.equals(fsuser.getCompanyUserId(), param.getCompanyUserId())) {
-                    CompanyUser companyUser = companyUserService.selectCompanyUserById(fsuser.getCompanyUserId());
-                    return R.error(String.format("请联系%s销售进行购买商品!", companyUser.getNickName()));
-                } else {
-                    fsuser.setCompanyUserId(param.getCompanyUserId());
-                    userService.updateFsUser(fsuser);
+            FsUserScrm fsuser= userService.selectFsUserById(userId);
+            if(ObjectUtil.isEmpty(config.getOrderAttribution())
+                    ||!config.getOrderAttribution().equals(1)){
+                if(param.getCompanyUserId()!=null){
+                    if (ObjectUtil.isNotEmpty(fsuser.getCompanyUserId())&&fsuser.getCompanyUserId()!=param.getCompanyUserId()){
+                        CompanyUser companyUser=companyUserService.selectCompanyUserById(fsuser.getCompanyUserId());
+                        return R.error(String.format("请联系%s销售进行购买商品!",companyUser.getNickName()));
+                    }else {
+                        fsuser.setCompanyUserId(param.getCompanyUserId());
+                        userService.updateFsUser(fsuser);
+                    }
+                    CompanyUser companyUser=companyUserService.selectCompanyUserById(param.getCompanyUserId());
+                    if(companyUser!=null){
+                        storeOrder.setDeptId(companyUser.getDeptId());
+                    }
+                }else {
+                    storeOrder.setCompanyUserId(fsuser.getCompanyUserId());
                 }
-                CompanyUser companyUser = companyUserService.selectCompanyUserById(param.getCompanyUserId());
-                if (companyUser != null) {
-                    storeOrder.setDeptId(companyUser.getDeptId());
+            }
+
+            CompanyUserUser map=new CompanyUserUser();
+            map.setCompanyUserId(param.getCompanyUserId());
+            map.setUserId(userId);
+            List<CompanyUserUser> list= companyUserUserMapper.selectCompanyUserUserList(map);
+            if(list==null||list.size()==0){
+                CompanyUser companyUser=companyUserService.selectCompanyUserById(param.getCompanyUserId());
+                if(companyUser!=null&&companyUser.getStatus().equals("0")){
+                    map.setCompanyId(companyUser.getCompanyId());
+                    companyUserUserMapper.insertCompanyUserUser(map);
                 }
-            } else {
-                storeOrder.setCompanyUserId(fsuser.getCompanyUserId());
             }
+
             storeOrder.setUserId(userId);
             storeOrder.setOrderCode(orderSn);
             storeOrder.setRealName(address.getRealName());
@@ -810,8 +830,8 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
             storeOrder.setShippingType(1);
             storeOrder.setCreateTime(new Date());
 
-            String json = configService.selectConfigByKey("store.config");
-            StoreConfig config = JSONUtil.toBean(json, StoreConfig.class);
+//            String json = configService.selectConfigByKey("store.config");
+//            StoreConfig config = JSONUtil.toBean(json, StoreConfig.class);
             if (config.getServiceFee() != null) {
                 storeOrder.setServiceFee(config.getServiceFee());
             }

+ 1 - 1
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStorePaymentScrmServiceImpl.java

@@ -878,7 +878,7 @@ public class FsStorePaymentScrmServiceImpl implements IFsStorePaymentScrmService
         storePayment.setPayMoney(param.getPayMoney());
         storePayment.setCreateTime(new Date());
         storePayment.setPayTypeCode("weixin");
-        storePayment.setBusinessType(7);//微信收款
+        storePayment.setBusinessType(1);//微信收款
         storePayment.setRemark("商城收款订单支付");
         storePayment.setOpenId(user.getMaOpenId());
         storePayment.setUserId(user.getUserId());

+ 3 - 1
fs-service/src/main/java/com/fs/qw/mapper/QwExternalContactMapper.java

@@ -400,8 +400,10 @@ public interface QwExternalContactMapper extends BaseMapper<QwExternalContact> {
 
     @Select("SELECT id,external_user_id,name,avatar,remark,description,fs_user_id FROM  qw_external_contact " +
             " WHERE user_id = #{map.userId}   " +
-            "AND external_user_id = #{map.externalUserId} " +
             "AND corp_id =#{map.corpId} " +
+            "AND external_user_id = #{map.externalUserId}" +
+            "AND `status` != 4 " +
+            "ORDER BY id desc " +
             "limit 1 ")
     QwExternalContact getQwExternalContactDetails(@Param("map")QwExternalContactHParam param);
 

+ 1 - 1
fs-service/src/main/java/com/fs/qw/service/impl/QwExternalContactServiceImpl.java

@@ -2230,7 +2230,7 @@ public class QwExternalContactServiceImpl extends ServiceImpl<QwExternalContactM
         QwContactWay wayId = null;
         //先入客户
         QwExternalContact qwExternalContact = qwExternalContactMapper.selectQwExternalByExternalIdAndCompanyIdToIdAndFs(externalUserID, userID, corpId);
-        boolean isNewQwExternalContact = qwExternalContact == null ? true : false;
+        boolean isNewQwExternalContact = qwExternalContact == null;
         qwExternalContact = qwExternalContact == null ? new QwExternalContact() : qwExternalContact;
         qwExternalContact.setUserId(userID); // 设置属于用户ID
         qwExternalContact.setExternalUserId(externalUserID); // 设置外部联系人ID

+ 26 - 0
fs-service/src/main/java/com/fs/tag/domain/FsTagUpdateQueue.java

@@ -86,4 +86,30 @@ public class FsTagUpdateQueue {
      */
     private LocalDateTime nextExecuteTime;
 
+
+    /**
+     * 看课中标签ID
+     */
+    private String watchingTagId;
+    /**
+     * 完课标签ID
+     */
+    private String watchedTagId;
+    /**
+     * 标签组ID
+     */
+    private String tagGroupId;
+
+    /**
+     * 标签组表中的ID
+     */
+    private Long tgId;
+    /**
+     * 看课标签 表中的ID
+     */
+    private Long watchingTgId;
+    /**
+     * 完课标签 表中的ID
+     */
+    private Long watchedTgId;
 }

+ 3 - 2
fs-service/src/main/java/com/fs/tag/mapper/FsTagUpdateQueueMapper.java

@@ -87,12 +87,13 @@ public interface FsTagUpdateQueueMapper {
     @Insert("<script>" +
             "INSERT IGNORE INTO fs_tag_update_queue (" +
             "course_log_id, is_first, course_id, tag_id, tag_name, operation_type, video_id, status, retry_count, " +
-            "corp_id, qw_user_id, qw_external_contact_id, fail_msg, payload, response, create_time, update_time, update_by, create_by, log_type" +
+            "corp_id, qw_user_id, qw_external_contact_id, fail_msg, payload, response, create_time, update_time, update_by, create_by, log_type,tg_id,watching_tg_id,watched_tg_id,watching_tag_id,watched_tag_id,tag_group_id" +
             ") VALUES " +
             "<foreach collection='list' item='item' separator=','>" +
             "(" +
             "#{item.courseLogId}, #{item.isFirst}, #{item.courseId}, #{item.tagId}, #{item.tagName}, #{item.operationType}, #{item.videoId}, #{item.status}, #{item.retryCount}, " +
-            "#{item.corpId}, #{item.qwUserId}, #{item.qwExternalContactId}, #{item.failMsg}, #{item.payload}, #{item.response}, #{item.createTime}, #{item.updateTime}, #{item.updateBy}, #{item.createBy}, #{item.logType}" +
+            "#{item.corpId}, #{item.qwUserId}, #{item.qwExternalContactId}, #{item.failMsg}, #{item.payload}, #{item.response}, #{item.createTime}," +
+            " #{item.updateTime}, #{item.updateBy}, #{item.createBy}, #{item.logType},#{item.tgId},#{item.watchingTgId},#{item.watchedTgId},#{item.watchingTagId},#{item.watchedTagId},#{item.tagGroupId}" +
             ")" +
             "</foreach>" +
             "</script>")

+ 18 - 157
fs-service/src/main/java/com/fs/tag/service/impl/FsTagUpdateServiceImpl.java

@@ -132,13 +132,11 @@ public class FsTagUpdateServiceImpl implements FsTagUpdateService {
             task.setQwExternalContactId(item.getQwExternalContactId());
             task.setQwUserId(item.getQwUserId());
 
+            FsUserCourseVideo fsUserCourseVideo = courseVideoMap.get(task.getVideoId());
             String corpId = qwUserCacheService.queryCorpIdByQwUserId(item.getQwUserId());
             if(StringUtils.isNotNull(corpId)){
                 task.setCorpId(corpId);
             }
-
-            FsUserCourseVideo fsUserCourseVideo = courseVideoMap.get(task.getVideoId());
-
             if(ObjectUtils.isNull(fsUserCourseVideo)) {
                 String errorMsg = String.format("该条记录 %d 找不到对应的课堂视频", task.getVideoId());
                 log.error(errorMsg);
@@ -148,6 +146,13 @@ public class FsTagUpdateServiceImpl implements FsTagUpdateService {
                 batchData.add(task);
                 continue;
             }
+            task.setTagGroupId(fsUserCourseVideo.getTagGroupId());
+            task.setTgId(fsUserCourseVideo.getTgId());
+            task.setWatchingTagId(fsUserCourseVideo.getWatchingTagId());
+            task.setWatchedTagId(fsUserCourseVideo.getWatchedTagId());
+            task.setWatchingTgId(fsUserCourseVideo.getWatchingTgId());
+            task.setWatchedTgId(fsUserCourseVideo.getWatchedTgId());
+
             if(ObjectUtil.equal(fsUserCourseVideo.getIsFirst(),1)) {
                 task.setIsFirst(1);
             } else {
@@ -185,12 +190,10 @@ public class FsTagUpdateServiceImpl implements FsTagUpdateService {
             task.setQwExternalContactId(item.getQwExternalContactId());
             task.setQwUserId(item.getQwUserId());
             task.setLogType(1);
-
             String corpId = qwUserCacheService.queryCorpIdByQwUserId(item.getQwUserId());
             if(StringUtils.isNotNull(corpId)){
                 task.setCorpId(corpId);
             }
-
             FsUserCourseVideo fsUserCourseVideo = courseVideoMap.get(task.getVideoId());
             if(ObjectUtils.isNull(fsUserCourseVideo)) {
                 String errorMsg = String.format("该条记录 %d 找不到对应的课堂视频", task.getVideoId());
@@ -201,6 +204,13 @@ public class FsTagUpdateServiceImpl implements FsTagUpdateService {
                 batchData.add(task);
                 continue;
             }
+            task.setTagGroupId(fsUserCourseVideo.getTagGroupId());
+            task.setTgId(fsUserCourseVideo.getTgId());
+            task.setWatchingTagId(fsUserCourseVideo.getWatchingTagId());
+            task.setWatchedTagId(fsUserCourseVideo.getWatchedTagId());
+            task.setWatchingTgId(fsUserCourseVideo.getWatchingTgId());
+            task.setWatchedTgId(fsUserCourseVideo.getWatchedTgId());
+
             if(ObjectUtil.equal(fsUserCourseVideo.getIsFirst(),1)) {
                 task.setIsFirst(1);
             } else {
@@ -265,63 +275,6 @@ public class FsTagUpdateServiceImpl implements FsTagUpdateService {
 
     private void processSingleTask(FsTagUpdateQueue fsTagUpdateQueue) {
         try {
-            String courseName = getCourseName(fsTagUpdateQueue.getCourseId());
-            String tagGroupName = String.format("%s-看课标签组(自动创建)",courseName);
-            String tagName01 = String.format("%d上", fsTagUpdateQueue.getVideoId());
-            String tagName02 = String.format("%d完", fsTagUpdateQueue.getVideoId());
-            String corpId = fsTagUpdateQueue.getCorpId();
-
-            // 是否存在该标签
-            QwTagVO qwTagVO = qwTagMapper.selectQwTagByName(tagName01, corpId);
-            if(ObjectUtil.isNull(qwTagVO)){
-                // 是否存在标签组
-                QwTagGroup qwTagGroup = qwTagGroupMapper.selectQwTagGroupByName(tagGroupName, corpId);
-                // 创建标签组 & 标签
-                if(ObjectUtil.isNull(qwTagGroup)) {
-                    log.info("当前标签组不存在 建标签组 & 标签");
-                    QwTagGroupAddParam qwTagGroupAddParam = buildQwTagGroupAndTags(tagGroupName, fsTagUpdateQueue);
-                    qwTagGroupService.insertQwTagGroupParam(qwTagGroupAddParam);
-
-                } else {
-                    // 这个标签组满了吗?
-                    List<QwTagVO> qwTags = getQwTags(qwTagGroup);
-                    // 如果满了,找下一个标签
-                    if(CollectionUtils.isNotEmpty(qwTags) && qwTags.size() >= TAG_MAX_NUM){
-                        log.info("标签组1 {}满了,查找标签组2",tagGroupName);
-                        tagGroupName = String.format("%s-看课标签组2(自动创建)",courseName);
-                        qwTagGroup = qwTagGroupMapper.selectQwTagGroupByName(tagGroupName, corpId);
-                        // 判断是否满了
-                        if(ObjectUtil.isNotNull(qwTagGroup)) {
-                            List<QwTagVO> qwTags1 = getQwTags(qwTagGroup);
-                            if(CollectionUtils.isNotEmpty(qwTags1) && qwTags1.size() >= TAG_MAX_NUM){
-                                log.info("标签组2 {} 满了,查找标签组3",courseName);
-                                tagGroupName = String.format("%s-看课标签组3(自动创建)",courseName);
-                                qwTagGroup = qwTagGroupMapper.selectQwTagGroupByName(tagGroupName, corpId);
-                                List<QwTagVO> qwTags2 = getQwTags(qwTagGroup);
-                                if(CollectionUtils.isNotEmpty(qwTags2) && qwTags2.size() >= TAG_MAX_NUM){
-                                    log.error("最大支持3个标签组! tagGroupName={}",tagGroupName);
-                                    throw new UnsupportedOperationException("最大支持分成3个组!");
-                                }
-                            }
-                        }
-                    }
-                    // 创建标签
-                    log.info("当前标签 {}、{} 在标签组 {}不存在,正在创建标签",tagName01,tagName02,qwTagGroup);
-                    createNotExistLabel(fsTagUpdateQueue, qwTagGroup, tagName01, tagName02);
-                }
-            }
-
-            QwTagVO qwTagVO1 = qwTagMapper.selectQwTagByName(tagName01, corpId);
-            QwTagVO qwTagVO2 = qwTagMapper.selectQwTagByName(tagName02, corpId);
-
-            if(ObjectUtil.isNull(qwTagVO1)){
-                throw new IllegalArgumentException(String.format("标签 %s-%s 未添加成功!",tagName01,corpId));
-            }
-            if(ObjectUtil.isNull(qwTagVO2)){
-                throw new IllegalArgumentException(String.format("标签 %s-%s 未添加成功!",tagName02,corpId));
-            }
-
-
             // 调用企微API更新标签
             QwEditUserTagParam qwEditUserTagParam = new QwEditUserTagParam();
             QwExternalContact qwExternalContact = qwExternalContactMapper
@@ -336,17 +289,16 @@ public class FsTagUpdateServiceImpl implements FsTagUpdateService {
 
             // 如果是看课中
             if(ObjectUtil.equal(fsTagUpdateQueue.getLogType(),0)){
-                qwEditUserTagParam.setAdd_tag(Collections.singletonList(qwTagVO1.getTagId()));
+                qwEditUserTagParam.setAdd_tag(Collections.singletonList(fsTagUpdateQueue.getWatchingTagId()));
             } else {
                 // 已完课
-                qwEditUserTagParam.setAdd_tag(Collections.singletonList(qwTagVO2.getTagId()));
+                qwEditUserTagParam.setAdd_tag(Collections.singletonList(fsTagUpdateQueue.getWatchedTagId()));
+                qwEditUserTagParam.setRemove_tag(Collections.singletonList(fsTagUpdateQueue.getWatchingTagId()));
             }
 
             QwResult qwResult = qwApiService.editUserTag(qwEditUserTagParam, fsTagUpdateQueue.getCorpId());
             fsTagUpdateQueue.setPayload(JSON.toJSONString(qwEditUserTagParam));
             fsTagUpdateQueue.setResponse(JSON.toJSONString(qwResult));
-            fsTagUpdateQueue.setTagName(tagGroupName);
-            fsTagUpdateQueue.setTagId(qwTagVO1.getGroupId());
             // 打标签成功
             if(ObjectUtil.equal(qwResult.getErrcode(),0)) {
                 fsTagUpdateQueue.setStatus(2);
@@ -362,96 +314,5 @@ public class FsTagUpdateServiceImpl implements FsTagUpdateService {
         }
     }
 
-    private void createNotExistLabel(FsTagUpdateQueue fsTagUpdateQueue, QwTagGroup qwTagGroup, String tagName01, String tagName02) {
-        QwAddTagParam qwAddTagParam = buildQwTagGroupAndTags(qwTagGroup, tagName01, tagName02);
-        QwAddTagResult qwAddTagResult = qwApiService.addTag(qwAddTagParam, fsTagUpdateQueue.getCorpId());
-        if(ObjectUtil.equal(qwAddTagResult.getErrcode(),0)){
-            List<InTag> addTag = qwAddTagResult.getTag_group().getTag();
-            if (CollectionUtils.isNotEmpty(addTag)) {
-                for (InTag inTag : addTag) {
-                    QwTag addQwTag = new QwTag();
-                    addQwTag.setGroupId(qwTagGroup.getGroupId());
-                    addQwTag.setTagId(inTag.getId());
-                    addQwTag.setOrder(inTag.getOrder());
-                    addQwTag.setName(inTag.getName());
-                    addQwTag.setCorpId(qwTagGroup.getCorpId());
-                    addQwTag.setCreateTime(new Date(inTag.getCreate_time()));
-                    addQwTag.setTagFrom(1);
-                    qwTagMapper.insertQwTag(addQwTag);
-                }
-            }
-            log.info("创建标签完成 {}",JSON.toJSON(qwAddTagResult));
-        } else {
-            throw new RuntimeException(String.format("创建标签失败!%s",JSON.toJSONString(qwAddTagResult)));
-        }
-    }
 
-    private List<QwTagVO> getQwTags(QwTagGroup qwTagGroup) {
-        QwTag qwTag = new QwTag();
-        qwTag.setGroupId(qwTagGroup.getGroupId());
-        qwTag.setCompanyId(qwTagGroup.getCompanyId());
-        List<QwTagVO> qwTags = qwTagMapper.selectQwTagListVO(qwTag);
-        return qwTags;
-    }
-
-    private QwAddTagParam buildQwTagGroupAndTags(QwTagGroup qwTagGroup, String tagName01, String tagName02) {
-        QwAddTagParam qwTagGroupAddParam = new QwAddTagParam();
-        qwTagGroupAddParam.setGroup_name(qwTagGroup.getName());
-        qwTagGroupAddParam.setOrder(qwTagGroup.getOrder());
-        qwTagGroupAddParam.setStrategy_id(1);
-        qwTagGroupAddParam.setGroup_id(qwTagGroup.getGroupId());
-        List<TagData> tags = new ArrayList<>();
-
-        TagData qwTag1 = new TagData();
-        qwTag1.setName(tagName01);
-        qwTag1.setOrder(0);
-        tags.add(qwTag1);
-
-        TagData qwTag2 = new TagData();
-        qwTag2.setName(tagName02);
-        qwTag2.setOrder(0);
-        tags.add(qwTag2);
-
-        qwTagGroupAddParam.setTag(tags);
-
-        return qwTagGroupAddParam;
-    }
-
-
-    private QwTagGroupAddParam buildQwTagGroupAndTags(String tagGroupName, FsTagUpdateQueue fsTagUpdateQueue) {
-        QwTagGroupAddParam qwTagGroupAddParam = new QwTagGroupAddParam();
-        qwTagGroupAddParam.setCorpId(fsTagUpdateQueue.getCorpId());
-        qwTagGroupAddParam.setName(tagGroupName);
-        qwTagGroupAddParam.setOrder(0);
-
-
-        List<QwTag> tags = new ArrayList<>();
-        QwTag qwTag = new QwTag();
-        qwTag.setName(String.format("%d上",fsTagUpdateQueue.getVideoId()));
-        qwTag.setTagFrom(1);
-        qwTag.setOrder(0);
-        tags.add(qwTag);
-
-        QwTag qwTagFinish = new QwTag();
-        qwTagFinish.setName(String.format("%d完",fsTagUpdateQueue.getVideoId()));
-        qwTagFinish.setTagFrom(1);
-        qwTagFinish.setOrder(0);
-        tags.add(qwTagFinish);
-
-        qwTagGroupAddParam.setTag(tags);
-        return qwTagGroupAddParam;
-    }
-
-    /**
-     * 获取课程名称
-     * @param courseId 课程id
-     * @return 课程名称
-     */
-    private String getCourseName(Long courseId){
-        FsUserCourse course = fsUserCourseMapper.selectFsUserCourseByCourseId(courseId);
-        if(ObjectUtil.isNotNull(course)){
-            return course.getCourseName();
-        }
-        return null;
-    }
 }

+ 1 - 1
fs-service/src/main/resources/mapper/company/CompanyUserMapper.xml

@@ -93,7 +93,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         u.qw_status, u.phonenumber, u.create_time, u.dept_id,
         u.qr_code_weixin, u.user_type, u.qr_code_wecom, u.jpush_id,
         u.is_need_register_member,u.is_allowed_all_register,
-        u.avatar,
+        u.avatar,u.address_id,
         u.qw_user_id,
         d.dept_name,
         d.leader

+ 6 - 0
fs-service/src/main/resources/mapper/course/FsUserCourseVideoMapper.xml

@@ -233,6 +233,12 @@
             <if test="listingEndTime != null">listing_end_time = #{listingEndTime},</if>
             <if test="projectId != null">project_id = #{projectId},</if>
             <if test="isFirst != null">is_first = #{isFirst},</if>
+            <if test="tagGroupId != null">tag_group_id = #{tagGroupId},</if>
+            <if test="watchingTagId != null">watching_tag_id = #{watchingTagId},</if>
+            <if test="watchedTagId != null">watched_tag_id = #{watchedTagId},</if>
+            <if test="tgId != null">tg_id = #{tgId},</if>
+            <if test="watchingTgId != null">watching_tg_id = #{watchingTgId},</if>
+            <if test="watchedTgId != null">watched_tg_id = #{watchedTgId},</if>
         </trim>
         where video_id = #{videoId}
     </update>

+ 13 - 2
fs-user-app/src/main/java/com/fs/app/controller/store/CompanyUserScrmController.java

@@ -4,6 +4,7 @@ package com.fs.app.controller.store;
 import cn.hutool.core.img.ImgUtil;
 import cn.hutool.core.io.FileUtil;
 import cn.hutool.extra.qrcode.QrCodeUtil;
+import cn.hutool.json.JSONUtil;
 import com.fs.app.annotation.Login;
 import com.fs.app.controller.AppBaseController;
 import com.fs.app.param.FsBindCompanyUserParam;
@@ -21,6 +22,8 @@ import com.fs.company.service.ICompanyUserCardService;
 import com.fs.company.service.ICompanyUserService;
 import com.fs.company.service.ICompanyUserUserService;
 import com.fs.framework.security.SecurityUtils;
+import com.fs.his.dto.PayConfigDTO;
+import com.fs.system.service.ISysConfigService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.io.FileUtils;
@@ -40,11 +43,13 @@ import java.util.concurrent.TimeUnit;
 @RestController
 @RequestMapping(value="/store/app/companyUser")
 public class CompanyUserScrmController extends AppBaseController {
-
+    @Autowired
+    private ISysConfigService configService;
     @Autowired
     private FSConfig fsConfig;
     @Autowired
     RedisCache redisCache;
+
     @Autowired
     private ICompanyUserService companyUserService;
     @Autowired
@@ -201,7 +206,13 @@ public class CompanyUserScrmController extends AppBaseController {
 
     @ApiOperation("获取公司收款码")
     @GetMapping("/getCompanyWxaCodeByPayment")
-    public R getCompanyWxaCodeByPayment(@RequestParam("companyId")Long companyId,@RequestParam("appId")String appId,HttpServletRequest request){
+    public R getCompanyWxaCodeByPayment(@RequestParam("companyId")Long companyId,@RequestParam(value = "appId", required = false) String appId,HttpServletRequest request){
+
+        String json = configService.selectConfigByKey("his.pay");
+        PayConfigDTO payConfigDTO = JSONUtil.toBean(json, PayConfigDTO.class);
+        if (appId == null || appId.trim().isEmpty()) {
+            appId = payConfigDTO.getAppId();
+        }
         //获取用户码
         String WxaCode = redisCache.getCacheObject("company-wxa-code:"+companyId+":"+appId);
         return R.ok().put("data",WxaCode);