|
|
@@ -17,6 +17,7 @@ import com.fs.company.domain.CompanyUser;
|
|
|
import com.fs.company.service.ICompanyUserService;
|
|
|
import com.fs.course.domain.FsUserCompanyUser;
|
|
|
import com.fs.course.mapper.FsUserCompanyUserMapper;
|
|
|
+import com.fs.course.mapper.FsCourseWatchLogMapper;
|
|
|
import com.fs.course.domain.FsUserCoursePeriod;
|
|
|
import com.fs.course.dto.BatchSendCourseDTO;
|
|
|
import com.fs.course.param.FsCourseLinkCreateParam;
|
|
|
@@ -54,6 +55,7 @@ import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
import java.util.Objects;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
import static com.fs.his.utils.PhoneUtil.encryptPhone;
|
|
|
|
|
|
@@ -91,6 +93,9 @@ public class FsUserAdminController extends BaseController {
|
|
|
@Autowired
|
|
|
private FsUserCompanyUserMapper fsUserCompanyUserMapper;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private FsCourseWatchLogMapper fsCourseWatchLogMapper;
|
|
|
+
|
|
|
@Autowired
|
|
|
private IFsUserCoursePeriodService fsUserCoursePeriodService;
|
|
|
|
|
|
@@ -396,6 +401,7 @@ public class FsUserAdminController extends BaseController {
|
|
|
int successCount = 0;
|
|
|
int failCount = 0;
|
|
|
StringBuilder failReasons = new StringBuilder();
|
|
|
+ List<UserProjectDTO> userProjectList = new ArrayList<>();
|
|
|
|
|
|
// 先查询源营期和源销售下的所有有效会员ID(通过观看记录表关联)
|
|
|
List<Long> validUserIds = fsUserCompanyUserMapper
|
|
|
@@ -414,40 +420,41 @@ public class FsUserAdminController extends BaseController {
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- // 仅删除当前公司下源营期+源销售的关系,不影响其他营期/销售/公司
|
|
|
- FsUserCompanyUser deleteParam = new FsUserCompanyUser();
|
|
|
- deleteParam.setUserId(userId);
|
|
|
- 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("在源营期和源销售下不存在; ");
|
|
|
+ // 从观看记录获取该营期下关联的项目ID(project_id 存的是项目ID,不是营期ID)
|
|
|
+ List<Long> projectIds = fsCourseWatchLogMapper.selectProjectIdsByUserPeriodAndCompanyUser(
|
|
|
+ userId, param.getSourcePeriodId(), param.getSourceCompanyUserId(), companyId);
|
|
|
+ if (projectIds.isEmpty()) {
|
|
|
+ FsUserCompanyUser queryParam = new FsUserCompanyUser();
|
|
|
+ queryParam.setUserId(userId);
|
|
|
+ queryParam.setCompanyUserId(param.getSourceCompanyUserId());
|
|
|
+ queryParam.setCompanyId(companyId);
|
|
|
+ projectIds = fsUserCompanyUserService.selectFsUserCompanyUserList(queryParam).stream()
|
|
|
+ .map(FsUserCompanyUser::getProjectId)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .distinct()
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ }
|
|
|
+ if (projectIds.isEmpty()) {
|
|
|
+ failReasons.append("会员ID:").append(userId).append("未找到可转移的项目关系; ");
|
|
|
failCount++;
|
|
|
continue;
|
|
|
}
|
|
|
- for (FsUserCompanyUser record : sourceRecords) {
|
|
|
- fsUserCompanyUserService.deleteFsUserCompanyUserById(record.getId());
|
|
|
- log.info("删除源营期关系 - 会员ID:{}, 记录ID:{}, 营期ID:{}, 销售ID:{}",
|
|
|
- userId, record.getId(), record.getProjectId(), record.getCompanyUserId());
|
|
|
- }
|
|
|
|
|
|
- // 创建目标营期记录(已存在则跳过,避免重复绑定)
|
|
|
- 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());
|
|
|
+ // 更新会员-项目-销售关系:保持项目ID不变,仅变更销售
|
|
|
+ for (Long projectId : projectIds) {
|
|
|
+ fsUserCompanyUserService.changeRelationship(
|
|
|
+ userId, projectId, companyId, param.getTargetCompanyUserId());
|
|
|
+ log.info("更新会员项目销售关系 - 会员ID:{}, 项目ID:{}, 源销售ID:{}, 目标销售ID:{}",
|
|
|
+ userId, projectId, param.getSourceCompanyUserId(), param.getTargetCompanyUserId());
|
|
|
}
|
|
|
|
|
|
+ // 更新观看记录中的营期和销售
|
|
|
+ int watchLogCount = fsCourseWatchLogMapper.transferPeriodWatchLog(
|
|
|
+ userId, param.getSourcePeriodId(), param.getSourceCompanyUserId(),
|
|
|
+ param.getTargetPeriodId(), param.getTargetCompanyUserId(), companyId);
|
|
|
+ log.info("更新观看记录 - 会员ID:{}, 源营期ID:{}, 目标营期ID:{}, 更新条数:{}",
|
|
|
+ userId, param.getSourcePeriodId(), param.getTargetPeriodId(), watchLogCount);
|
|
|
+
|
|
|
// 仅当会员主归属属于当前公司时,更新fs_user表
|
|
|
FsUser fsUser = fsUserService.selectFsUserById(userId);
|
|
|
if (fsUser != null && Objects.equals(fsUser.getCompanyId(), companyId)) {
|
|
|
@@ -457,6 +464,13 @@ public class FsUserAdminController extends BaseController {
|
|
|
userId, companyId, param.getTargetCompanyUserId());
|
|
|
}
|
|
|
|
|
|
+ for (Long projectId : projectIds) {
|
|
|
+ UserProjectDTO dto = new UserProjectDTO();
|
|
|
+ dto.setUserId(userId);
|
|
|
+ dto.setProjectId(projectId);
|
|
|
+ userProjectList.add(dto);
|
|
|
+ }
|
|
|
+
|
|
|
successCount++;
|
|
|
log.info("会员ID:{} 从营期ID:{} 销售ID:{} 转移到 营期ID:{} 销售ID:{} 成功",
|
|
|
userId, param.getSourcePeriodId(), param.getSourceCompanyUserId(),
|
|
|
@@ -470,13 +484,6 @@ public class FsUserAdminController extends BaseController {
|
|
|
}
|
|
|
|
|
|
// 6. 创建审批记录并记录到审批列表
|
|
|
- List<UserProjectDTO> userProjectList = new ArrayList<>();
|
|
|
- for (Long userId : param.getUserIds()) {
|
|
|
- UserProjectDTO dto = new UserProjectDTO();
|
|
|
- dto.setUserId(userId);
|
|
|
- dto.setProjectId(param.getTargetPeriodId()); // 使用目标营期ID
|
|
|
- userProjectList.add(dto);
|
|
|
- }
|
|
|
|
|
|
CustomerTransferApproval approval = new CustomerTransferApproval();
|
|
|
approval.setCorpId(String.valueOf(companyId));
|