소스 검색

优化会员营期转移加上公司判断

xw 1 일 전
부모
커밋
78ff35b30f

+ 40 - 13
fs-company/src/main/java/com/fs/user/FsUserAdminController.java

@@ -298,7 +298,7 @@ public class FsUserAdminController extends BaseController {
 
             // 3. 查询该营期和销售下的会员ID列表
             List<Long> userIds = fsUserCompanyUserMapper
-                    .selectUserIdsByPeriodIdAndCompanyUserId(sourcePeriodId, sourceCompanyUserId);
+                    .selectUserIdsByPeriodIdAndCompanyUserId(sourcePeriodId, sourceCompanyUserId, companyId);
 
             log.info("查询营期ID:{}, 销售ID:{} 下的会员数量:{}",
                     sourcePeriodId, sourceCompanyUserId, userIds.size());
@@ -384,6 +384,14 @@ public class FsUserAdminController extends BaseController {
                 return R.error("目标销售不存在");
             }
 
+            if (!companyId.equals(sourceCompanyUser.getCompanyId())) {
+                return R.error("源销售不属于当前公司");
+            }
+
+            if (!companyId.equals(targetCompanyUser.getCompanyId())) {
+                return R.error("目标销售不属于当前公司");
+            }
+
             // 5. 批量转移会员营期关系
             int successCount = 0;
             int failCount = 0;
@@ -391,7 +399,8 @@ public class FsUserAdminController extends BaseController {
 
             // 先查询源营期和源销售下的所有有效会员ID(通过观看记录表关联)
             List<Long> validUserIds = fsUserCompanyUserMapper
-                    .selectUserIdsByPeriodIdAndCompanyUserId(param.getSourcePeriodId(), param.getSourceCompanyUserId());
+                    .selectUserIdsByPeriodIdAndCompanyUserId(
+                            param.getSourcePeriodId(), param.getSourceCompanyUserId(), companyId);
 
             log.info("源营期ID:{}, 源销售ID:{} 下查询到有效会员数:{}",
                     param.getSourcePeriodId(), param.getSourceCompanyUserId(), validUserIds.size());
@@ -405,25 +414,43 @@ public class FsUserAdminController extends BaseController {
                         continue;
                     }
 
-                    // 先删除该会员的所有fs_user_company_user记录(不管哪个营期)
+                    // 仅删除当前公司下源营期+源销售的关系,不影响其他营期/销售/公司
                     FsUserCompanyUser deleteParam = new FsUserCompanyUser();
                     deleteParam.setUserId(userId);
-                    List<FsUserCompanyUser> existingRecords = fsUserCompanyUserService.selectFsUserCompanyUserList(deleteParam);
-                    for (FsUserCompanyUser record : existingRecords) {
+                    deleteParam.setProjectId(param.getSourcePeriodId());
+                    deleteParam.setCompanyUserId(param.getSourceCompanyUserId());
+                    deleteParam.setCompanyId(companyId);
+                    List<FsUserCompanyUser> sourceRecords = fsUserCompanyUserService.selectFsUserCompanyUserList(deleteParam);
+                    if (sourceRecords.isEmpty()) {
+                        failReasons.append("会员ID:").append(userId).append("在源营期和源销售下不存在; ");
+                        failCount++;
+                        continue;
+                    }
+                    for (FsUserCompanyUser record : sourceRecords) {
                         fsUserCompanyUserService.deleteFsUserCompanyUserById(record.getId());
-                        log.info("删除旧的fs_user_company_user记录 - 会员ID:{}, 记录ID:{}, 营期ID:{}, 销售ID:{}",
+                        log.info("删除源营期关系 - 会员ID:{}, 记录ID:{}, 营期ID:{}, 销售ID:{}",
                                 userId, record.getId(), record.getProjectId(), record.getCompanyUserId());
                     }
 
-                    // 创建新的目标营期记录
-                    fsUserCompanyUserService.bindRelationship(userId, param.getTargetPeriodId(), companyId, param.getTargetCompanyUserId(), 1);
-                    log.info("创建目标营期新记录 - 会员ID:{}, 营期ID:{}, 公司ID:{}, 销售ID:{}",
-                            userId, param.getTargetPeriodId(), companyId, param.getTargetCompanyUserId());
+                    // 创建目标营期记录(已存在则跳过,避免重复绑定)
+                    FsUserCompanyUser targetQuery = new FsUserCompanyUser();
+                    targetQuery.setUserId(userId);
+                    targetQuery.setProjectId(param.getTargetPeriodId());
+                    targetQuery.setCompanyUserId(param.getTargetCompanyUserId());
+                    targetQuery.setCompanyId(companyId);
+                    List<FsUserCompanyUser> targetRecords = fsUserCompanyUserService.selectFsUserCompanyUserList(targetQuery);
+                    if (targetRecords.isEmpty()) {
+                        fsUserCompanyUserService.bindRelationship(userId, param.getTargetPeriodId(), companyId, param.getTargetCompanyUserId(), 1);
+                        log.info("创建目标营期新记录 - 会员ID:{}, 营期ID:{}, 公司ID:{}, 销售ID:{}",
+                                userId, param.getTargetPeriodId(), companyId, param.getTargetCompanyUserId());
+                    } else {
+                        log.info("目标营期关系已存在,跳过创建 - 会员ID:{}, 营期ID:{}, 销售ID:{}",
+                                userId, param.getTargetPeriodId(), param.getTargetCompanyUserId());
+                    }
 
-                    // 更新fs_user表的companyId和companyUserId
+                    // 仅当会员主归属属于当前公司时,更新fs_user表
                     FsUser fsUser = fsUserService.selectFsUserById(userId);
-                    if (fsUser != null) {
-                        fsUser.setCompanyId(companyId);
+                    if (fsUser != null && Objects.equals(fsUser.getCompanyId(), companyId)) {
                         fsUser.setCompanyUserId(param.getTargetCompanyUserId());
                         fsUserService.updateFsUser(fsUser);
                         log.info("更新fs_user表 - 会员ID:{}, 公司ID:{}, 销售ID:{}",

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

@@ -112,6 +112,7 @@ public interface FsUserCompanyUserMapper extends BaseMapper<FsUserCompanyUser>{
      * @return 会员ID列表
      */
     List<Long> selectUserIdsByPeriodIdAndCompanyUserId(@Param("periodId") Long periodId,
-                                                        @Param("companyUserId") Long companyUserId);
+                                                        @Param("companyUserId") Long companyUserId,
+                                                        @Param("companyId") Long companyId);
      List<FsUserCompanyUser> getFsUserCompanyUserByIds(@Param("ids") Long[] ids);
 }

+ 4 - 1
fs-service/src/main/resources/mapper/course/FsUserCompanyUserMapper.xml

@@ -204,9 +204,12 @@
         FROM
             fs_user_company_user a
             INNER JOIN fs_course_watch_log b ON a.user_id = b.user_id
+                AND b.company_user_id = a.company_user_id
+                AND b.period_id = #{periodId}
         WHERE
             a.company_user_id = #{companyUserId}
-            AND b.period_id = #{periodId}
+            AND a.project_id = #{periodId}
+            AND a.company_id = #{companyId}
         GROUP BY
             a.user_id
     </select>