Sfoglia il codice sorgente

Merge remote-tracking branch 'origin/master'

yfh 1 settimana fa
parent
commit
1fcbfab713

+ 0 - 37
fs-admin/src/test/java/com/fs/api/controller/IndexStatisticsControllerTest.java

@@ -1,37 +0,0 @@
-package com.fs.api.controller;
-
-import com.fs.FSApplication;
-import com.fs.common.core.domain.R;
-import com.fs.statis.dto.AnalysisPreviewQueryDTO;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.junit.jupiter.api.Test;
-import org.junit.runner.RunWith;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.junit4.SpringRunner;
-
-import static org.junit.jupiter.api.Assertions.*;
-
-@RunWith(SpringRunner.class)
-@SpringBootTest(classes = FSApplication.class)
-@RequiredArgsConstructor
-@Slf4j
-public class IndexStatisticsControllerTest {
-
-    @Autowired
-    private IndexStatisticsController indexStatisticsController;
-
-    @Test
-    public void analysisPreview() {
-        AnalysisPreviewQueryDTO dto = new AnalysisPreviewQueryDTO();
-        dto.setCompanyId(null);
-        dto.setDeptId(1L);
-        dto.setEndTime("2025-10-31 23:59:59");
-        dto.setStartTime("2025-10-01 00:00:00");
-        dto.setType(4);
-        dto.setUserType(1);
-        R r = indexStatisticsController.analysisPreview(dto);
-        log.info("r: {}",r);
-    }
-}

+ 37 - 0
fs-company/src/main/java/com/fs/company/controller/company/CompanyUserController.java

@@ -21,6 +21,7 @@ import com.fs.company.param.CompanyUserAreaParam;
 import com.fs.company.param.CompanyUserCodeParam;
 import com.fs.company.param.CompanyUserQwParam;
 import com.fs.company.service.*;
+import com.fs.company.service.impl.CompanyDeptServiceImpl;
 import com.fs.company.utils.DomainUtil;
 import com.fs.company.utils.QwStatusEnum;
 import com.fs.company.vo.BatchUserRolesVO;
@@ -100,6 +101,10 @@ public class CompanyUserController extends BaseController {
     @Autowired
     IQwCompanyService iQwCompanyService;
 
+    @Autowired
+    private CompanyDeptServiceImpl companyDeptService;
+
+
     @Autowired
     private IQwUserService qwUserService;
 
@@ -475,6 +480,38 @@ public class CompanyUserController extends BaseController {
         return  R.ok().put("data",list);
     }
 
+    @GetMapping("/getQwMyUserList/{id}")
+    public R getQwMyUserList(@PathVariable("id") String corpId)
+    {
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        List<QwUserVO> list = companyUserService.selectCompanyQwUserListByMy(corpId,loginUser.getCompany().getCompanyId(),loginUser.getUser().getUserId());
+        return  R.ok().put("data",list);
+    }
+
+    @GetMapping("/getQwDeptUserList/{id}")
+    public R getQwDeptUserList(@PathVariable("id") String corpId)
+    {
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+
+        List<Long> combinedList = new ArrayList<>();
+        //本部门
+        Long deptId = loginUser.getUser().getDeptId();
+        if (deptId!=null){
+            combinedList.add(deptId);
+        }
+        //本部门的下级部门
+        List<Long> deptList = companyDeptService.selectCompanyDeptByParentId(deptId);
+        if (!deptList.isEmpty()){
+            combinedList.addAll(deptList);
+        }
+        String userType = loginUser.getUser().getUserType();
+
+        List<QwUserVO> list = companyUserService.selectCompanyQwUserListByDept(corpId,loginUser.getCompany().getCompanyId(),combinedList,userType);
+        return  R.ok().put("data",list);
+    }
+
+
+
     /**
      * 根据部门的id获取到企业微信的qwuserid
      */

+ 19 - 0
fs-service/src/main/java/com/fs/company/mapper/CompanyUserMapper.java

@@ -151,6 +151,25 @@ public interface CompanyUserMapper
     @Select("select * from  qw_user  where corp_id=#{corpId} and company_id=#{companyId}")
     List<QwUserVO> selectCompanyQwUserList(@Param("corpId") String corpId,@Param("companyId")Long companyId);
 
+    @Select("select * from  qw_user  where corp_id=#{corpId} and company_id=#{companyId} and company_user_id=#{userId}")
+    List<QwUserVO> selectCompanyQwUserListByMy(@Param("corpId") String corpId,@Param("companyId")Long companyId,@Param("userId")Long userId);
+
+    @Select("<script>" +
+            "select qu.* from qw_user qu " +
+            "left join company_user cu on cu.user_id = qu.company_user_id " +
+            "where 1=1 " +
+            "and qu.corp_id = #{corpId} " +
+            "and qu.company_id = #{companyId} " +
+            "<if test=\"combinedList != null and !combinedList.isEmpty() and  userType != '00' \">" +
+            "and cu.dept_id IN " +
+            "<foreach collection='combinedList' item='deptId' open='(' separator=',' close=')'>" +
+            "#{deptId}" +
+            "</foreach>" +
+            "</if>" +
+            "</script>")
+    List<QwUserVO> selectCompanyQwUserListByDept(@Param("corpId") String corpId,@Param("companyId")Long companyId,
+                                                 @Param("combinedList") List<Long> combinedList,@Param("userType")String userType);
+
 
     List<CompanyUserQwListVO> selectCompanyUserQwListVO(CompanyUserQwParam user);
 

+ 2 - 0
fs-service/src/main/java/com/fs/company/service/ICompanyUserService.java

@@ -129,6 +129,8 @@ public interface ICompanyUserService {
     List<CitysAreaVO> getCitysAreaList();
 
     List<QwUserVO> selectCompanyQwUserList(String corpId,Long companyId);
+    List<QwUserVO> selectCompanyQwUserListByMy(String corpId,Long companyId,Long userId);
+    List<QwUserVO> selectCompanyQwUserListByDept(String corpId,Long companyId,List<Long> combinedList,String userType);
 
     List<CompanyUserQwListVO> selectCompanyUserQwListVO(CompanyUserQwParam user);
 

+ 11 - 0
fs-service/src/main/java/com/fs/company/service/impl/CompanyUserServiceImpl.java

@@ -663,6 +663,17 @@ public class CompanyUserServiceImpl implements ICompanyUserService
     public List<QwUserVO> selectCompanyQwUserList(String corpId,Long companyId) {
         return companyUserMapper.selectCompanyQwUserList(corpId,companyId);
     }
+
+    @Override
+    public List<QwUserVO> selectCompanyQwUserListByMy(String corpId, Long companyId, Long userId) {
+        return companyUserMapper.selectCompanyQwUserListByMy(corpId,companyId,userId);
+    }
+
+    @Override
+    public List<QwUserVO> selectCompanyQwUserListByDept(String corpId, Long companyId, List<Long> combinedList, String userType) {
+        return companyUserMapper.selectCompanyQwUserListByDept(corpId,companyId,combinedList,userType);
+    }
+
     @Override
     @DataScope(deptAlias = "u", userAlias = "u")
     public List<CompanyUserQwListVO> selectCompanyUserQwListVO(CompanyUserQwParam user) {

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

@@ -1511,7 +1511,7 @@ public class AiHookServiceImpl implements AiHookService {
                             }
                             if (value != null) {
                                 str += fieldName + ": " + value.toString() + "\n";
-                            }else {
+                            }else if("交流状态".equals(fieldName) || "学习到的章节".equals(fieldName)){
                                 str += fieldName + ":  \n";
                             }
                         }

+ 5 - 2
fs-service/src/main/java/com/fs/qw/mapper/QwExternalContactMapper.java

@@ -251,8 +251,11 @@ public interface QwExternalContactMapper extends BaseMapper<QwExternalContact> {
             "    </foreach>\n" +
             "    )"+
             "</if> " +
-
-//            "            <if test=\"remarkMobiles != null  and remarkMobiles != ''\"> and ec.remark_mobiles like concat( #{remarkMobiles}, '%')</if>\n" +
+            "<if test='outTagIds !=null'>\n" +
+            "    AND <foreach collection=\"outTagIds\" item=\"item\" open=\"(\" separator=\" AND \" close=\")\">\n" +
+            "        NOT find_in_set(#{item}, REGEXP_REPLACE(ec.tag_ids, '[\\\"\\\\[\\\\]]', ''))\n" +
+            "    </foreach>\n" +
+            "</if>"+
             "<if test=\"remarkMobiles != null and remarkMobiles != ''\">\n" +
             "    AND ec.search_mobile LIKE concat(#{remarkMobiles}, '%')\n" +
             "</if>" +

+ 5 - 0
fs-service/src/main/java/com/fs/qw/param/QwExternalContactParam.java

@@ -70,6 +70,11 @@ public class QwExternalContactParam {
     @Excel(name = "标签id")
     private List<String> tagIds;
 
+
+    /** 排除的标签id */
+    @Excel(name = "排除标签id")
+    private List<String> outTagIds;
+
     private String remark;
 
     /** 备注电话号码 */

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

@@ -4337,9 +4337,9 @@ public class QwExternalContactServiceImpl extends ServiceImpl<QwExternalContactM
     @Override
     public void deletefollowUserByExternalUserId(String externalUserID, String userID, String corpId) {
 
-        //客户删除销售-找这个销售的sop任务中所有的营期里有没有这个客户,删了(暂时不要删-这种流失的有些一样能发消息)
-//        sopUserLogsInfoMapper.deleteByQwUserIdAndCorpIdToContactId(userID,corpId, externalUserID);
-//        logger.error("客户删除销售-"+"|"+externalUserID+"|"+userID+"|"+corpId);
+        //客户删除销售-找这个销售的sop任务中所有的营期里有没有这个客户-流失客户删除
+        sopUserLogsInfoMapper.deleteByQwUserIdAndCorpIdToContactId(userID,corpId, externalUserID);
+        logger.error("客户删除销售-"+"|"+externalUserID+"|"+userID+"|"+corpId);
 
         QwExternalContact qwExternalContact = qwExternalContactMapper.selectQwExternalContactUserIdAndExternalIdAndCompanyId(externalUserID, userID, corpId);
         if (qwExternalContact != null) {

+ 10 - 2
fs-service/src/main/java/com/fs/tag/service/impl/FsVideoCourseTagServiceImpl.java

@@ -13,7 +13,9 @@ import com.fs.qw.mapper.QwTagMapper;
 import com.fs.tag.domain.FsVideoCourseTag;
 import com.fs.tag.mapper.FsVideoCourseTagMapper;
 import com.fs.tag.service.IFsVideoCourseTagService;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.dao.DuplicateKeyException;
 import org.springframework.stereotype.Service;
 
 /**
@@ -22,6 +24,7 @@ import org.springframework.stereotype.Service;
  * @author fs
  * @date 2025-11-05
  */
+@Slf4j
 @Service
 public class FsVideoCourseTagServiceImpl extends ServiceImpl<FsVideoCourseTagMapper, FsVideoCourseTag> implements IFsVideoCourseTagService {
 
@@ -94,8 +97,13 @@ public class FsVideoCourseTagServiceImpl extends ServiceImpl<FsVideoCourseTagMap
     @Override
     public int insertFsVideoCourseTag(FsVideoCourseTag fsVideoCourseTag)
     {
-        fsVideoCourseTag.setCreateTime(DateUtils.getNowDate());
-        return baseMapper.insertFsVideoCourseTag(fsVideoCourseTag);
+        try{
+            fsVideoCourseTag.setCreateTime(DateUtils.getNowDate());
+            return baseMapper.insertFsVideoCourseTag(fsVideoCourseTag);
+        }catch (DuplicateKeyException e){
+            log.info("同一主体的小节添加标签不允许重复!");
+            throw new RuntimeException("同一主体的小节添加标签不允许重复!");
+        }
     }
 
     /**

+ 1 - 1
fs-service/src/main/resources/application-config-druid-hat.yml

@@ -91,7 +91,7 @@ cloud_host:
 headerImg:
   imgUrl: https://hat-1323137866.cos.ap-chongqing.myqcloud.com/fs/20250928/hatlogo.png
 ipad:
-  ipadUrl: http://ipad.****.cn
+  ipadUrl: http://hatipad.ylrzcloud.com
   aiApi: http://62:3000/api
   voiceApi:
   commonApi:

+ 0 - 1
fs-service/src/main/resources/mapper/hisStore/FsStoreProductScrmMapper.xml

@@ -92,7 +92,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                p.unit_price,p.batch_number,p.mah,p.mah_address,p.manufacturer,p.manufacturer_address,p.indications,p.dosage,
                p.adverse_reactions,p.contraindications,p.precautions,p.is_audit,p.store_id
         from fs_store_product_scrm p
-        select product_id, video, image, slider_image, product_name, product_info, keyword, bar_code, cate_id, price, vip_price, ot_price, agent_price, postage, unit_name, sort, sales, stock, is_show, is_hot, is_benefit, is_best, is_new, description, create_time, update_time, is_postage, is_del, give_integral, cost, is_good, browse, code_path, temp_id, spec_type, is_integral, integral, product_type, prescribe_code, prescribe_spec, prescribe_factory, prescribe_name, is_display, tui_cate_id, company_ids, store_id, is_drug, drug_image, drug_reg_cert_no, common_name, dosage_form, unit_price, batch_number, mah, mah_address, manufacturer, manufacturer_address, indications, dosage, adverse_reactions, contraindications, precautions, is_audit from fs_store_product_scrm
     </sql>
 
     <select id="selectFsStoreProductByProductId" parameterType="Long" resultMap="FsStoreProductResult">