diff --git a/web/src/main/java/com/example/web/mapper/UsersMapper.java b/web/src/main/java/com/example/web/mapper/UsersMapper.java index 8cf7b00..5fcfba8 100644 --- a/web/src/main/java/com/example/web/mapper/UsersMapper.java +++ b/web/src/main/java/com/example/web/mapper/UsersMapper.java @@ -63,4 +63,7 @@ public interface UsersMapper { @DataSource("wechat") Users findByUserId(String userId); + + @DataSource("wechat") + int updateSyncStatusWithValue(Map params); } diff --git a/web/src/main/java/com/example/web/service/impl/UserServiceImpl.java b/web/src/main/java/com/example/web/service/impl/UserServiceImpl.java index 0018e31..0252567 100644 --- a/web/src/main/java/com/example/web/service/impl/UserServiceImpl.java +++ b/web/src/main/java/com/example/web/service/impl/UserServiceImpl.java @@ -2,8 +2,10 @@ package com.example.web.service.impl; import com.example.web.entity.InformationTra; import com.example.web.entity.Managers; +import com.example.web.entity.Personnel; import com.example.web.entity.Users; import com.example.web.entity.UsersManagements; +import com.example.web.mapper.PersonnelMapper; import com.example.web.mapper.UsersMapper; import com.example.web.mapper.ManagersMapper; import com.example.web.mapper.UsersManagementsMapper; @@ -12,6 +14,7 @@ import com.example.web.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.time.LocalDateTime; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -25,6 +28,9 @@ public class UserServiceImpl implements UserService { @Autowired private ManagersMapper managersMapper; + @Autowired + private PersonnelMapper personnelMapper; + @Autowired private UsersManagementsMapper usersManagementsMapper; @@ -177,6 +183,13 @@ public class UserServiceImpl implements UserService { return result; } + // 检查客户是否是第一次跟进 + Users user = usersMapper.findByUserId(userId); + if (user != null && user.getFollowup_at() != null) { + // 不是第一次跟进,设置followup_at参数为非空,避免更新跟进时间 + params.put("followup_at", user.getFollowup_at()); + } + // 更新跟进信息 usersMapper.updateFollowup(params); @@ -271,24 +284,97 @@ public class UserServiceImpl implements UserService { return result; } - // 1. 更新 users 表,修改 type 字段并清空 followup 字段 - usersMapper.updateUserTypeAndClearFollowup(params); - - // 2. 清除 usermanagements 表中的记录 - usersMapper.clearUsersManagements(params); + // 获取客户信息 + Users user = usersMapper.findByUserId(userId); + if (user == null) { + result.put("success", false); + result.put("message", "客户不存在"); + return result; + } - // 记录归还操作 - InformationTra tra = createInformationTra( - managercompany, - managerdepartment, - organization, - role, - userName, - assistant, - userId, - "归还客户到" + type - ); - informationTraService.recordUserOperation(tra); + // 根据用户选择的类型进行不同的归还处理 + // type参数是用户选择的类型,可能值包括:buyer(大贸易客户)、seller(供应商)、both(两者都是)、smalls(小品种客户) + if ("seller".equals(type) || "both".equals(type)) { + // 随机分配给指定的人员 + String[] assignUsers = {"刘琴", "何佳芹", "汤敏", "李真音"}; + int randomIndex = (int) (Math.random() * assignUsers.length); + String assignedUser = assignUsers[randomIndex]; + + // 1. 更新 users 表,修改 type 字段 + usersMapper.updateUserTypeAndClearFollowup(params); + + // 从primary数据源的personnel表查询业务员信息 + Personnel personnel = personnelMapper.findByName(assignedUser); + + // 创建UsersManagements对象,将personnel表中的信息写入usermanagements表 + UsersManagements usersManagements = new UsersManagements(); + usersManagements.setUserId(userId); + usersManagements.setAssistant(assistant); + + if (personnel != null) { + // 如果找到业务员信息,使用查询到的信息 + usersManagements.setManagerId(personnel.getManagerId()); + usersManagements.setManagercompany(personnel.getManagercompany()); + usersManagements.setManagerdepartment(personnel.getManagerdepartment()); + usersManagements.setOrganization(personnel.getOrganization()); + usersManagements.setRole(personnel.getProjectName()); // projectName对应role + usersManagements.setUserName(personnel.getName()); // name对应userName + } else { + // 如果未找到业务员信息,使用默认值 + usersManagements.setManagerId(userId); + usersManagements.setManagercompany(managercompany); + usersManagements.setManagerdepartment(managerdepartment); + usersManagements.setOrganization(organization); + usersManagements.setRole(role); + usersManagements.setUserName(assignedUser); + } + + // 更新或插入usermanagements表 + UsersManagements existing = usersManagementsMapper.findByUserId(userId); + if (existing != null) { + usersManagements.setId(existing.getId()); + usersManagements.setCreated_at(existing.getCreated_at()); + usersManagements.setUpdated_at(LocalDateTime.now()); + usersManagementsMapper.update(usersManagements); + } else { + usersManagements.setCreated_at(LocalDateTime.now()); + usersManagements.setUpdated_at(LocalDateTime.now()); + usersManagementsMapper.insert(usersManagements); + } + + // 记录归还操作 + InformationTra tra = createInformationTra( + managercompany, + managerdepartment, + organization, + role, + userName, + assistant, + userId, + "归还客户并分配给" + assignedUser + ); + informationTraService.recordUserOperation(tra); + } else { + // 正常放入公海池 + // 1. 更新 users 表,修改 type 字段 + usersMapper.updateUserTypeAndClearFollowup(params); + + // 2. 清除 usermanagements 表中的记录 + usersMapper.clearUsersManagements(params); + + // 记录归还操作 + InformationTra tra = createInformationTra( + managercompany, + managerdepartment, + organization, + role, + userName, + assistant, + userId, + "归还客户到" + type + ); + informationTraService.recordUserOperation(tra); + } result.put("success", true); result.put("message", "归还成功"); @@ -306,6 +392,7 @@ public class UserServiceImpl implements UserService { try { String userId = (String) params.get("userId"); + String systemType = (String) params.get("systemType"); // 大贸易系统或小品种系统 String userName = (String) params.get("userName"); String managercompany = (String) params.get("managercompany"); String managerdepartment = (String) params.get("managerdepartment"); @@ -313,14 +400,41 @@ public class UserServiceImpl implements UserService { String role = (String) params.get("role"); String assistant = (String) params.get("assistant"); - if (userId == null) { + if (userId == null || systemType == null) { result.put("success", false); result.put("message", "缺少必要参数"); return result; } - // 更新 users 表,设置 sync_statuss 字段值为 0 - usersMapper.updateSyncStatusToZero(params); + // 获取客户信息,判断客户类型 + Users user = usersMapper.findByUserId(userId); + if (user == null) { + result.put("success", false); + result.put("message", "客户不存在"); + return result; + } + + String userType = user.getType(); + Integer syncStatus = 0; + + // 根据系统类型和客户类型设置sync_statuss值 + if ("大贸易系统".equals(systemType)) { + if ("seller".equals(userType) || "both".equals(userType)) { + syncStatus = 1; + } else { + syncStatus = 0; + } + } else if ("小品种系统".equals(systemType)) { + if ("seller".equals(userType) || "both".equals(userType)) { + syncStatus = 3; + } else { + syncStatus = 2; + } + } + + // 更新sync_statuss值 + params.put("syncStatus", syncStatus); + usersMapper.updateSyncStatusWithValue(params); // 记录操作 InformationTra tra = createInformationTra( @@ -331,7 +445,7 @@ public class UserServiceImpl implements UserService { userName, assistant, userId, - "简道云操作" + "简道云操作 - " + systemType ); informationTraService.recordUserOperation(tra); diff --git a/web/src/main/resources/mapper/UsersMapper.xml b/web/src/main/resources/mapper/UsersMapper.xml index e28706e..ed19e07 100644 --- a/web/src/main/resources/mapper/UsersMapper.xml +++ b/web/src/main/resources/mapper/UsersMapper.xml @@ -206,7 +206,10 @@ UPDATE users SET followup = #{followup}, - followup_at = NOW(), + updated_at = NOW(), + + followup_at = NOW(), + type = #{type}, level = #{level}, detailedaddress = #{detailedaddress}, @@ -240,6 +243,12 @@ WHERE userId = #{userId} + + UPDATE users + SET sync_statuss = #{syncStatus} + WHERE userId = #{userId} + + UPDATE users SET type = #{type}, diff --git a/web/src/main/resources/static/index.html b/web/src/main/resources/static/index.html index 3686fe5..9d7677f 100644 --- a/web/src/main/resources/static/index.html +++ b/web/src/main/resources/static/index.html @@ -1043,7 +1043,7 @@ // 只有管理员显示复选框 var checkboxCell = isAdmin ? '' : ''; - var row = '' + + var row = '' + checkboxCell + '' + (user.nickName || '-') + '' + '' + (user.phoneNumber || '-') + '' + @@ -1052,7 +1052,7 @@ '' + (user.followup || '-') + '' + '' + responseTime + '' + managerCell + - ' ' + jianDaoYunButton + '' + + ' ' + jianDaoYunButton + '' + ''; personalBody.innerHTML += row; @@ -2231,7 +2231,15 @@

简道云

-

是否将客户拉入你的简道云?

+

选择要拉入的系统:

+
+ + +
@@ -2818,7 +2826,7 @@ managerCell = ''; } - var row = '' + + var row = '' + '' + '' + (user.nickName || '-') + '' + '' + (user.phoneNumber || '-') + '' + @@ -2827,7 +2835,7 @@ '' + (user.followup || '-') + '' + '' + responseTime + '' + managerCell + - '' + + ' ' + ''; publicBody.innerHTML += row; @@ -2847,36 +2855,39 @@ } function claimCustomer(userId, userName, phone) { - var usersManagements = userInfo.usersManagements; - - var params = { - userId: userId, - userName: usersManagements.userName || '', - managercompany: usersManagements.managercompany || '', - managerdepartment: usersManagements.managerdepartment || '', - organization: usersManagements.organization || '', - role: usersManagements.role || '' - }; - - var url = '/KH/api/users/claim'; - - var xhr = new XMLHttpRequest(); - xhr.open('POST', url, true); - xhr.setRequestHeader('Content-Type', 'application/json'); - xhr.onreadystatechange = function() { - if (xhr.readyState == 4 && xhr.status == 200) { - var data = JSON.parse(xhr.responseText); - if (data.success) { - showAlert('认领成功'); - // 重新加载数据 - loadPublicData(); - loadPersonalData(); - } else { - showAlert('认领失败: ' + data.message); + // 显示确认弹窗 + if (confirm('确认认领该客户吗?')) { + var usersManagements = userInfo.usersManagements; + + var params = { + userId: userId, + userName: usersManagements.userName || '', + managercompany: usersManagements.managercompany || '', + managerdepartment: usersManagements.managerdepartment || '', + organization: usersManagements.organization || '', + role: usersManagements.role || '' + }; + + var url = '/KH/api/users/claim'; + + var xhr = new XMLHttpRequest(); + xhr.open('POST', url, true); + xhr.setRequestHeader('Content-Type', 'application/json'); + xhr.onreadystatechange = function() { + if (xhr.readyState == 4 && xhr.status == 200) { + var data = JSON.parse(xhr.responseText); + if (data.success) { + showAlert('认领成功'); + // 重新加载数据 + loadPublicData(); + loadPersonalData(); + } else { + showAlert('认领失败: ' + data.message); + } } - } - }; - xhr.send(JSON.stringify(params)); + }; + xhr.send(JSON.stringify(params)); + } } function openFollowupModal(userId, userName, phone) { @@ -3205,8 +3216,12 @@ var userId = document.getElementById('jianDaoYunUserId').value; var usersManagements = userInfo.usersManagements; + // 获取选中的系统类型 + var systemType = document.querySelector('input[name="systemType"]:checked').value; + var params = { userId: userId, + systemType: systemType, userName: usersManagements.userName || '', managercompany: usersManagements.managercompany || '', managerdepartment: usersManagements.managerdepartment || '', @@ -3247,7 +3262,8 @@ managercompany: usersManagements.managercompany || '', managerdepartment: usersManagements.managerdepartment || '', organization: usersManagements.organization || '', - role: usersManagements.role || '' + role: usersManagements.role || '', + assistant: usersManagements.assistant || '' }; var url = '/KH/api/users/return';