Quellcode durchsuchen

Merge remote-tracking branch 'origin/master'

ct vor 2 Tagen
Ursprung
Commit
2e8cbacf47

+ 127 - 18
fs-company/src/main/java/com/fs/company/controller/qw/SopUserLogsInfoController.java

@@ -33,6 +33,8 @@ import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import java.io.IOException;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.function.Predicate;
 import java.util.stream.Collectors;
@@ -87,7 +89,7 @@ public class SopUserLogsInfoController extends BaseController
                 Map<Long, SopExternalContactInfo> externalContactInfoMap = qwExternalContactVOTimes.stream()
                         .collect(Collectors.toMap(
                                 QwExternalContactVOTime::getId,
-                                item -> new SopExternalContactInfo(item.getCreateTime(), item.getTagIds(), item.getRemark())
+                                item -> new SopExternalContactInfo(item.getCreateTime(), item.getTagIds(), item.getRemark(),item.getLevel())
                         ));
                 List<String> tagIds = qwExternalContactVOTimes.stream().map(QwExternalContactVOTime::getTagIds).filter(StringUtils::isNotEmpty).flatMap(e -> JSON.parseArray(e, String.class).stream()).collect(Collectors.toList());
                 if(!tagIds.isEmpty()){
@@ -103,10 +105,12 @@ public class SopUserLogsInfoController extends BaseController
                 list.forEach(item -> {
                     SopExternalContactInfo info = externalContactInfoMap.getOrDefault(
                             item.getExternalId(),
-                            new SopExternalContactInfo("无进线时间", "无标签", "无备注"));
+                            new SopExternalContactInfo("无进线时间", "无标签", "无备注",0));
                     item.setInComTime(info.getCreateTime());
                     item.setTagIds(info.getTagIds());
                     item.setRemark(info.getRemark());
+                    item.setLevel(info.getLevel());
+
                 });
             }
 
@@ -136,9 +140,35 @@ public class SopUserLogsInfoController extends BaseController
                     isRemarkEmpty ||
                             item.getRemark().contains(sopUserLogsInfo.getRemark());
 
-            if (sopUserLogsInfo.getTagIds() != null || !isRemarkEmpty) {
+
+            boolean isLevelEmpty = sopUserLogsInfo.getLevel() == null;
+            Predicate<SopUserLogsInfo> levelFilter = item ->
+                    isLevelEmpty ||
+                            (item.getLevel() != null && Objects.equals(item.getLevel(), sopUserLogsInfo.getLevel()) );
+
+
+            Predicate<SopUserLogsInfo> timeFilter = item -> {
+                if (StringUtil.strIsNullOrEmpty(sopUserLogsInfo.getEntryTime())) {
+                    return true;
+                }
+                try {
+                    LocalDate entryDate = LocalDate.parse(
+                            sopUserLogsInfo.getEntryTime(),
+                            DateTimeFormatter.ofPattern("yyyy-MM-dd")
+                    );
+                    LocalDate createDate = LocalDate.parse(
+                            item.getInComTime().substring(0, 10),
+                            DateTimeFormatter.ofPattern("yyyy-MM-dd")
+                    );
+                    return entryDate.equals(createDate);
+                } catch (Exception e) {
+                    return false;
+                }
+            };
+
+            if (sopUserLogsInfo.getTagIds() != null || !isRemarkEmpty || !StringUtil.strIsNullOrEmpty(sopUserLogsInfo.getEntryTime()) ||!isLevelEmpty) {
                 list = list.stream()
-                        .filter(tagFilter.and(remarkFilter))
+                        .filter(tagFilter.and(remarkFilter).and(timeFilter).and(levelFilter))
                         .collect(Collectors.toList());
             }
 
@@ -150,9 +180,15 @@ public class SopUserLogsInfoController extends BaseController
                     param.setTagIds(tagIds);
                     item.setTagIdsName(iQwTagService.selectQwTagListByTagIds(param));
                 }
+
+                // 处理 level
+                item.setLevelName(getLevel(item.getLevel()));
             });
+
             return getDataTable(list);
-        } else {
+        }
+        else {
+
             List<QwGroupChatUser> list = qwGroupChatUserService.selectByChatId(sopUserLogsInfo);
 
 
@@ -171,15 +207,14 @@ public class SopUserLogsInfoController extends BaseController
                 Map<String, SopExternalContactInfo> externalContactInfoMap = qwExternalContactVOTimes.stream()
                         .collect(Collectors.toMap(
                                 QwExternalContactVOTime::getExternalUserId,
-                                item -> new SopExternalContactInfo(item.getCreateTime(), item.getTagIdsName(), item.getTagIds(), item.getRemark())
+                                item -> new SopExternalContactInfo(item.getCreateTime(), item.getTagIds(), item.getRemark(),item.getLevel())
                         ));
 
                 // 遍历 list,赋值 inComTime 和 tagIds
                 list.forEach(item -> {
-                    SopExternalContactInfo info = externalContactInfoMap.getOrDefault(item.getUserId(), new SopExternalContactInfo("无进线时间", "无标签", "无备注"));
+                    SopExternalContactInfo info = externalContactInfoMap.getOrDefault(item.getUserId(), new SopExternalContactInfo("无进线时间", "无标签", "无备注",0));
                     item.setInComTime(info.getCreateTime());
                     item.setTagIds(info.getTagIds());
-                    item.setTagNames(info.getTagNames());
                     item.setRemark(info.getRemark());
                 });
 
@@ -194,21 +229,95 @@ public class SopUserLogsInfoController extends BaseController
                         )
                         .collect(Collectors.toList());
             }
+
+            // 处理标签名称
+            list.parallelStream().forEach(item -> {
+                if (item.getTagIds() != null && !item.getTagIds().equals("[]") && !item.getTagIds().equals("无标签")) {
+                    List<String> tagIds = GSON.fromJson(item.getTagIds(), new TypeToken<List<String>>() {}.getType());
+                    QwTagSearchParam param = new QwTagSearchParam();
+                    param.setTagIds(tagIds);
+                    item.setTagIdsName(iQwTagService.selectQwTagListByTagIds(param));
+                }
+            });
             return getDataTable(list);
+//            List<QwGroupChatUser> list = qwGroupChatUserService.selectByChatId(sopUserLogsInfo);
+//
+//
+//            if (!list.isEmpty()) {
+//
+//                List<String> externalIdList = list.stream()
+//                        .map(QwGroupChatUser::getUserId) // 提取 externalId
+//                        .filter(StringUtils::isNotEmpty) // 过滤掉 null 值,防止 NullPointerException
+//                        .distinct()
+//                        .collect(Collectors.toList()); // 收集到 List
+//
+//                List<QwExternalContactVOTime> qwExternalContactVOTimes = iQwExternalContactService.selectQwExternalContactListVOByUserIds(externalIdList);
+//
+//
+//                // 先将 qwExternalContactVOTimes 转换为 Map,key 为 id,value 为 ExternalContactInfo(包含 createTime 和 tagIds)
+//                Map<String, SopExternalContactInfo> externalContactInfoMap = qwExternalContactVOTimes.stream()
+//                        .collect(Collectors.toMap(
+//                                QwExternalContactVOTime::getExternalUserId,
+//                                item -> new SopExternalContactInfo(item.getCreateTime(), item.getTagIdsName(), item.getTagIds(), item.getRemark())
+//                        ));
+//
+//                // 遍历 list,赋值 inComTime 和 tagIds
+//                list.forEach(item -> {
+//                    SopExternalContactInfo info = externalContactInfoMap.getOrDefault(item.getUserId(), new SopExternalContactInfo("无进线时间", "无标签", "无备注"));
+//                    item.setInComTime(info.getCreateTime());
+//                    item.setTagIds(info.getTagIds());
+//                    item.setTagNames(info.getTagNames());
+//                    item.setRemark(info.getRemark());
+//                });
+//
+//            }
+//
+//            if ((sopUserLogsInfo.getTagIds() != null && !sopUserLogsInfo.getTagIds().isEmpty())
+//                    || !StringUtil.strIsNullOrEmpty(sopUserLogsInfo.getRemark())) {
+//                list = list.stream()
+//                        .filter(item ->
+//                                (sopUserLogsInfo.getTagIds() == null || sopUserLogsInfo.getTagIds().isEmpty() || item.getTagIds().contains(sopUserLogsInfo.getTagIds()))
+//                                        && (StringUtil.strIsNullOrEmpty(sopUserLogsInfo.getRemark()) || item.getRemark().contains(sopUserLogsInfo.getRemark()))
+//                        )
+//                        .collect(Collectors.toList());
+//            }
+//            return getDataTable(list);
         }
 
-//        if (sopUserLogsInfo.getTagIds() != null && !sopUserLogsInfo.getTagIds().isEmpty()) {
-//            list = list.stream()
-//                    .filter(item -> item.getTagIds().contains(sopUserLogsInfo.getTagIds()))
-//                    .collect(Collectors.toList());
-//        }
-//        if (!StringUtil.strIsNullOrEmpty(sopUserLogsInfo.getRemark())) {
-//            list = list.stream()
-//                    .filter(item -> item.getRemark().contains(sopUserLogsInfo.getRemark()))
-//                    .collect(Collectors.toList());
-//        }
     }
 
+
+    private String getLevel(Integer level){
+
+        String levelName = "无";
+
+        if (level != null) {
+
+            switch (level) {
+                case 0:
+                    levelName = "无";
+                    break;
+                case 1:
+                    levelName = "A";
+                    break;
+                case 2:
+                    levelName = "B";
+                    break;
+                case 3:
+                    levelName = "C";
+                    break;
+                case 4:
+                    levelName = "D";
+                    break;
+                case 5:
+                    levelName = "E";
+                    break;
+                default:
+                    levelName = "无";
+            }
+        }
+        return  levelName;
+    }
     private List<String> parseTagIds(String jsonTagIds) {
         if (jsonTagIds == null || jsonTagIds.trim().isEmpty() || jsonTagIds.equals("[]")) {
             return Collections.emptyList();

+ 6 - 13
fs-qw-task/src/main/java/com/fs/app/taskService/impl/SopLogsTaskServiceImpl.java

@@ -777,14 +777,6 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
         sopLogs.setCorpId(logVo.getCorpId());
         sopLogs.setLogType(ruleTimeVO.getType());
         sopLogs.setTakeRecords(0);
-        try {
-            if(StringUtils.isNotEmpty(logVo.getUserId())){
-                String[] split = logVo.getUserId().split("\\|");
-                sopLogs.setQwUserKey(Long.parseLong(split[0]));
-            }
-        }catch (Exception e){
-            log.error("设置qwUserId异常", e);
-        }
 
         if (isOfficial == 1) {
 
@@ -820,6 +812,9 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
 
         String[] userKey = logVo.getUserId().split("\\|");
         sopLogs.setCompanyId(Long.valueOf(userKey[2].trim()));
+        if (StringUtils.isNotEmpty(userKey[0].trim())){
+            sopLogs.setQwUserKey(Long.valueOf(userKey[0].trim()));
+        }
         sopLogs.setSopId(logVo.getSopId());
         sopLogs.setSort(Integer.valueOf(logVo.getStartTime().replaceAll("-","")));
         sopLogs.setExternalUserId(externalContactId);
@@ -1854,11 +1849,9 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
         sopLogs.setExternalUserName(externalContact.getName());
         sopLogs.setFsUserId(finishLog.getUserId() != null ? finishLog.getUserId() : null );
         sopLogs.setUserLogsId("-");
-        try {
-            sopLogs.setQwUserKey(finishLog.getQwUserId());
-        }catch (Exception e){
-            log.error("设置qwUserId异常", e);
-        }
+
+        sopLogs.setQwUserKey(finishLog.getQwUserId() != null ? finishLog.getQwUserId() : null);
+
         // 解析模板设置
         List<QwSopCourseFinishTempSetting.Setting> settings = parseSettings(finishTemp.getSetting());
         if (settings == null) {

+ 2 - 0
fs-service/src/main/java/com/fs/course/param/FsCourseSendRewardUParam.java

@@ -27,4 +27,6 @@ public class FsCourseSendRewardUParam implements Serializable
     private Integer sendType;
     private Long periodId;
 
+    private String appId;
+
 }

+ 1 - 1
fs-service/src/main/java/com/fs/course/param/newfs/FsUserCourseAddCompanyUserParam.java

@@ -33,7 +33,7 @@ public class FsUserCourseAddCompanyUserParam implements Serializable {
     @ApiModelProperty(value = "营期id")
     private Long periodId;
 
-    @NotNull(message = "项目id不能为空")
+//    @NotNull(message = "项目id不能为空")
     @ApiModelProperty(value = "项目ID")
     private Long projectId;
 

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

@@ -1421,7 +1421,7 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
         }
 
         // 逻辑调整:如果会员已经绑定了销售,直接提示,不添加重粉数据了-2025年6月16日14点53分
-        if (fsUser.getCompanyUserId() != null && !param.getCompanyUserId().equals(fsUser.getCompanyUserId())){
+        if (!param.getCompanyUserId().equals(fsUser.getCompanyUserId())){
             return ResponseResult.fail(406,"该用户已成为其他销售会员");
         }
 

+ 3 - 0
fs-service/src/main/java/com/fs/qw/domain/QwGroupChatUser.java

@@ -99,4 +99,7 @@ public class QwGroupChatUser extends BaseEntity
     private String fsUserId;
     @TableField(exist = false)
     private List<GroupUserExternalVo> userList;
+
+    @TableField(exist = false)
+    private List<String> tagIdsName;
 }

+ 2 - 0
fs-service/src/main/java/com/fs/qw/param/QwExternalContactVOTime.java

@@ -25,4 +25,6 @@ public class QwExternalContactVOTime {
     private String createTime;
 
     private String name;
+
+    private Integer level;
 }

+ 16 - 9
fs-service/src/main/java/com/fs/qw/param/SopExternalContactInfo.java

@@ -7,24 +7,31 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 
-@Data
+
 public class SopExternalContactInfo {
     private String createTime;
     private String tagIds;
-    private List<String> tagNames;
     private String remark;
+    private Integer level;
 
-    public SopExternalContactInfo(String createTime, List<String> tagNames, String tagIds,String remark) {
+    public SopExternalContactInfo(String createTime, String tagIds,String remark,Integer level) {
         this.createTime = createTime != null ? createTime : "无进线时间";
-        this.tagNames = (tagNames != null && !tagNames.isEmpty()) ? tagNames : Collections.singletonList("无标签");
         this.tagIds = (tagIds != null && !tagIds.equals("[]")) ? tagIds : "无标签";
         this.remark = remark != null ? remark : "无备注";
+        this.level = level != null ? level : 0;
     }
-    public SopExternalContactInfo(String createTime, String tagIds,String remark) {
-        this.createTime = createTime != null ? createTime : "无进线时间";
-        this.tagNames = Collections.singletonList("无标签");
-        this.tagIds = (tagIds != null && !tagIds.equals("[]")) ? tagIds : "无标签";
-        this.remark = remark != null ? remark : "无备注";
+
+    public String getCreateTime() {
+        return createTime;
     }
 
+    public String getTagIds() {
+        return tagIds;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+    public Integer getLevel() {return level;
+    }
 }

+ 16 - 0
fs-service/src/main/java/com/fs/sop/domain/SopUserLogsInfo.java

@@ -52,4 +52,20 @@ public class SopUserLogsInfo implements Serializable {
     @TableField(exist = false)
     private List<String> tagNames;
 
+
+    @TableField(exist = false)
+    private Integer fsUserIdStatus;
+
+    private Integer isDaysNotStudy;
+
+    //进线时间
+    @TableField(exist = false)
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private String entryTime;
+
+    @TableField(exist = false)
+    private Integer level;
+
+    @TableField(exist = false)
+    private String levelName;
 }

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

@@ -198,8 +198,8 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
 
     @Override
     public List<SopUserLogsInfo> selectSopUserLogsInfoList(SopUserLogsInfo info) {
-        List<SopUserLogsInfo> list = sopUserLogsInfoMapper.selectSopUserLogsInfoList(info);
-        return list;
+
+        return sopUserLogsInfoMapper.selectSopUserLogsInfoList(info);
     }
     @Override
     public List<SopUserLogsInfoVOE> selectSopUserLogsInfoListVO(SopUserLogsInfo info) {
@@ -543,7 +543,7 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
                                     createParam.setCompanyUserId(Long.parseLong(companyUserId));
                                     createParam.setCompanyId(Long.parseLong(companyId));
                                     createParam.setChatId(groupUser.getChatId());
-                                    createParam.setQwUserId(Long.parseLong(qwUser.getQwUserId()));
+                                    createParam.setQwUserId(qwUser.getId());
                                     createParam.setDays(st.getExpiresDays());
                                     R createLink = courseLinkService.createRoomLinkUrl(createParam);
                                     if (createLink.get("code").equals(500)) {
@@ -570,7 +570,7 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
                             //小程序单独
                             case "4":
                                 String linkByMiniApp = createLinkByMiniApp(st, param.getCorpId(), new Date(), param.getCourseId(), param.getVideoId(),
-                                        qwUser.getQwUserId(), qwUser.getCompanyUserId().toString(), qwUser.getCompanyId().toString(), null, config);
+                                        String.valueOf(qwUser.getId()), qwUser.getCompanyUserId().toString(), qwUser.getCompanyId().toString(), null, config);
 
                                 if (StringUtil.strIsNullOrEmpty(config.getMiniprogramAppid())) {
                                     log.error("配置中无小程序id,采用默认的");
@@ -639,7 +639,7 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
                                     createParam.setCompanyUserId(qwUser.getCompanyUserId());
                                     createParam.setCompanyId(qwUser.getCompanyId());
                                     createParam.setChatId(groupChat.getChatId());
-                                    createParam.setQwUserId(Long.parseLong(qwUser.getQwUserId()));
+                                    createParam.setQwUserId(qwUser.getId());
                                     createParam.setDays(st.getExpiresDays());
                                     R createLink = courseLinkService.createRoomLinkUrl(createParam);
                                     if (createLink.get("code").equals(500)) {
@@ -668,7 +668,7 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
                             //小程序单独
                             case "4":
                                 String linkByMiniApp = createLinkByMiniApp(st, param.getCorpId(), new Date(), param.getCourseId(), param.getVideoId(),
-                                        qwUser.getQwUserId(), qwUser.getCompanyUserId().toString(), qwUser.getCompanyId().toString(), null, config);
+                                        String.valueOf(qwUser.getId()), qwUser.getCompanyUserId().toString(), qwUser.getCompanyId().toString(), null, config);
 
                                 if (StringUtil.strIsNullOrEmpty(config.getMiniprogramAppid())) {
                                     log.error("配置中无小程序id,采用默认的");

+ 3 - 0
fs-service/src/main/resources/mapper/sop/SopUserLogsInfoMapper.xml

@@ -19,6 +19,7 @@
         <result property="crtTime" column="crt_Time"  />
         <result property="updateTime" column="update_time" jdbcType="VARCHAR" />
         <result property="tagIds" column="tag_ids" jdbcType="VARCHAR" />
+        <result property="isDaysNotStudy" column="is_days_not_study"/>
     </resultMap>
 
     <sql id="selectSopUserLogsInfoVo">
@@ -200,6 +201,8 @@
             <if test="corpId != null">and corp_id = #{corpId}</if>
             <if test="externalId != null">and external_id = #{externalId}</if>
             <if test="fsUserId != null">and fs_user_id = #{fsUserId}</if>
+            <if test="fsUserIdStatus != null and fsUserIdStatus==1 ">and fs_user_id is not null and fs_user_id !=0 </if>
+            <if test="fsUserIdStatus != null and fsUserIdStatus==2 ">and (fs_user_id is null or fs_user_id =0)</if>
             <if test="externalUserName != null">and external_user_name like CONCAT('%', #{externalUserName}, '%')</if>
             <if test="createTime != null">and create_time = #{createTime}</if>
             <if test="crtTime != null">and crt_Time = #{crtTime}</if>

+ 16 - 0
fs-user-course/src/main/java/com/fs/course/controller/UserController.java

@@ -40,6 +40,7 @@ import java.net.URL;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.TimeUnit;
 
 import static com.fs.common.utils.SecurityUtils.getUserId;
 import static com.fs.his.utils.PhoneUtil.decryptPhoneMk;
@@ -62,6 +63,21 @@ public class UserController extends  AppBaseController {
     @Autowired
     private IQwAppContactWayService qwAppContactWayService;
 
+
+    @PostMapping("/loginTest")
+    public R loginTest(@RequestBody String userId) {
+        FsUser user = userService.selectFsUserByUserId(Long.parseLong(userId));
+        if (user!=null){
+            String token = jwtUtils.generateToken(user.getUserId());
+            redisCache.setCacheObject("userToken:" + user.getUserId(), token, 604800, TimeUnit.SECONDS);
+            Map<String, Object> map = new HashMap<>();
+            map.put("token", token);
+            map.put("user", user);
+            return R.ok(map);
+        }
+        return R.error("用户不存在!");
+    }
+
     /**
      * 获取用户信息
      * @param request

+ 7 - 4
fs-user-course/src/main/java/com/fs/course/controller/WxCompanyUserController.java

@@ -125,6 +125,10 @@ public class WxCompanyUserController extends AppBaseController {
             // 2. 获取销售信息
             CompanyUser companyUser = getCompanyUser(param);
 
+            if (user!=null && user.getCompanyUserId() != null && !param.getCompanyUserId().equals(user.getCompanyUserId())) {
+                return R.error("该用户已成为其他销售会员");
+            }
+
             // 3. 处理用户注册或更新
             String ip = IpUtil.getRequestIp();
             user = handleUserRegisterOrUpdate(user, param, session, phoneNoInfo, company, companyUser, ip);
@@ -182,6 +186,8 @@ public class WxCompanyUserController extends AppBaseController {
             return createUser(param, session, phoneNoInfo, company, companyUser);
 //            }
         } else {
+            // 逻辑调整:如果会员已经绑定了销售,直接提示,不让注册-2025年6月16日14点53分
+
             // 已存在用户,更新信息
             return updateUser(user, param, session, phoneNoInfo, company, companyUser);
 //            return user;
@@ -224,10 +230,7 @@ public class WxCompanyUserController extends AppBaseController {
         if (param.getAuthType() == 1 && phoneNoInfo != null) {
             userMap.setPhone(phoneNoInfo.getPhoneNumber());
         }
-        // 逻辑调整:如果会员已经绑定了销售,直接提示,不让注册-2025年6月16日14点53分
-        if (user.getCompanyUserId() != null && !param.getCompanyUserId().equals(user.getCompanyUserId())) {
-            throw new RuntimeException("该用户已成为其他销售会员");
-        }
+
         if (companyUser != null && companyUser.getIsNeedRegisterMember() != null && companyUser.getIsNeedRegisterMember() != 1) {
             userMap.setCompanyId(param.getCompanyId());
             userMap.setCompanyUserId(param.getCompanyUserId());