|
|
@@ -8,6 +8,7 @@ import com.etotem.cfc.dto.ServiceRoleApplyDTO;
|
|
|
import com.etotem.cfc.entity.*;
|
|
|
import com.etotem.cfc.mapper.*;
|
|
|
import com.etotem.cfc.service.ServiceRoleApplicationService;
|
|
|
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
@@ -15,6 +16,7 @@ import javax.annotation.Resource;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.Collections;
|
|
|
+import java.util.Date;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.LinkedHashMap;
|
|
|
import java.util.List;
|
|
|
@@ -37,6 +39,9 @@ public class ServiceRoleApplicationServiceImpl
|
|
|
@Resource
|
|
|
private ButlerProfileMapper butlerProfileMapper;
|
|
|
|
|
|
+ @Resource
|
|
|
+ private AdminMapper adminMapper;
|
|
|
+
|
|
|
@Override
|
|
|
public Result submit(Long userId, ServiceRoleApplyDTO dto) {
|
|
|
ServiceRoleApplication existing = this.getOne(
|
|
|
@@ -91,60 +96,16 @@ public class ServiceRoleApplicationServiceImpl
|
|
|
|
|
|
List<String> roles = JSON.parseArray(app.getRoles(), String.class);
|
|
|
User user = userMapper.selectById(app.getUserId());
|
|
|
+ if (user == null) {
|
|
|
+ return Result.error("用户不存在");
|
|
|
+ }
|
|
|
|
|
|
// 初始化已有角色集合(保持一人多角色)
|
|
|
- List<String> ownedRoles = user.getRoles() != null ? new java.util.ArrayList<>(user.getRoles()) : new java.util.ArrayList<>();
|
|
|
+ List<String> ownedRoles = user.getRoles() != null ? new ArrayList<>(user.getRoles()) : new ArrayList<>();
|
|
|
|
|
|
- for (String role : roles) {
|
|
|
- // 申请角色 → 后台角色枚举映射,审核通过即回写 users.roles(B-2)
|
|
|
- switch (role) {
|
|
|
- case "planner":
|
|
|
- Guide guide = new Guide();
|
|
|
- guide.setUserId(app.getUserId());
|
|
|
- guide.setStatus("active");
|
|
|
- guide.setProvince(app.getProvince());
|
|
|
- guide.setCity(app.getCity());
|
|
|
- guide.setDistrict(app.getDistrict());
|
|
|
- guide.setStreet(app.getStreet());
|
|
|
- guideMapper.insert(guide);
|
|
|
- if (!ownedRoles.contains("teacher")) {
|
|
|
- ownedRoles.add("teacher");
|
|
|
- }
|
|
|
- break;
|
|
|
- case "nutritionist":
|
|
|
- user.setNutritionistStatus("approved");
|
|
|
- if (!ownedRoles.contains("nutritionist")) {
|
|
|
- ownedRoles.add("nutritionist");
|
|
|
- }
|
|
|
- break;
|
|
|
- case "butler":
|
|
|
- user.setButlerStatus("approved");
|
|
|
- ButlerProfile bp = new ButlerProfile();
|
|
|
- bp.setUserId(app.getUserId());
|
|
|
- bp.setStatus("active");
|
|
|
- butlerProfileMapper.insert(bp);
|
|
|
- if (!ownedRoles.contains("butler")) {
|
|
|
- ownedRoles.add("butler");
|
|
|
- }
|
|
|
- break;
|
|
|
- case "vendor":
|
|
|
- user.setVendorStatus("approved");
|
|
|
- if (!ownedRoles.contains("supplier")) {
|
|
|
- ownedRoles.add("supplier");
|
|
|
- }
|
|
|
- break;
|
|
|
- case "article_admin":
|
|
|
- user.setArticleAdminStatus("approved");
|
|
|
- if (!ownedRoles.contains("knowledge_admin")) {
|
|
|
- ownedRoles.add("knowledge_admin");
|
|
|
- }
|
|
|
- break;
|
|
|
- case "activity_provider":
|
|
|
- user.setActivityProviderStatus("approved");
|
|
|
- if (!ownedRoles.contains("activity_manager")) {
|
|
|
- ownedRoles.add("activity_manager");
|
|
|
- }
|
|
|
- break;
|
|
|
+ if (roles != null) {
|
|
|
+ for (String role : roles) {
|
|
|
+ applyApprovedRole(role, app, user, ownedRoles);
|
|
|
}
|
|
|
}
|
|
|
user.setRoles(ownedRoles);
|
|
|
@@ -153,6 +114,115 @@ public class ServiceRoleApplicationServiceImpl
|
|
|
return Result.success("审核通过");
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 按申请角色回写用户状态/角色集合,并做必要的关联表写入。审核通过时逐角色调用。
|
|
|
+ */
|
|
|
+ public void applyApprovedRole(String role, ServiceRoleApplication app, User user, List<String> ownedRoles) {
|
|
|
+ if (role == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ switch (role) {
|
|
|
+ case "planner": {
|
|
|
+ Guide guide = new Guide();
|
|
|
+ guide.setUserId(app.getUserId());
|
|
|
+ guide.setStatus("active");
|
|
|
+ guide.setProvince(app.getProvince());
|
|
|
+ guide.setCity(app.getCity());
|
|
|
+ guide.setDistrict(app.getDistrict());
|
|
|
+ guide.setStreet(app.getStreet());
|
|
|
+ guideMapper.insert(guide);
|
|
|
+ user.setTeacherStatus("approved");
|
|
|
+ if (!ownedRoles.contains("teacher")) {
|
|
|
+ ownedRoles.add("teacher");
|
|
|
+ }
|
|
|
+ upsertTeacherAdmin(user);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ case "nutritionist":
|
|
|
+ user.setNutritionistStatus("approved");
|
|
|
+ if (!ownedRoles.contains("nutritionist")) {
|
|
|
+ ownedRoles.add("nutritionist");
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "butler":
|
|
|
+ user.setButlerStatus("approved");
|
|
|
+ upsertButlerProfile(app.getUserId());
|
|
|
+ if (!ownedRoles.contains("butler")) {
|
|
|
+ ownedRoles.add("butler");
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "vendor":
|
|
|
+ user.setVendorStatus("approved");
|
|
|
+ if (!ownedRoles.contains("supplier")) {
|
|
|
+ ownedRoles.add("supplier");
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "article_admin":
|
|
|
+ user.setArticleAdminStatus("approved");
|
|
|
+ if (!ownedRoles.contains("knowledge_admin")) {
|
|
|
+ ownedRoles.add("knowledge_admin");
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "activity_provider":
|
|
|
+ user.setActivityProviderStatus("approved");
|
|
|
+ if (!ownedRoles.contains("activity_manager")) {
|
|
|
+ ownedRoles.add("activity_manager");
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 规划师审核通过后创建/更新 admins 记录,使其可登录 Web 管理端。
|
|
|
+ */
|
|
|
+ private void upsertTeacherAdmin(User user) {
|
|
|
+ Admin admin = adminMapper.selectOne(new LambdaQueryWrapper<Admin>()
|
|
|
+ .eq(Admin::getPhone, user.getPhone()));
|
|
|
+ if (admin == null) {
|
|
|
+ admin = new Admin();
|
|
|
+ String usernameVal = user.getPhone() != null ? user.getPhone() : ("teacher_" + user.getId());
|
|
|
+ admin.setPhone(user.getPhone());
|
|
|
+ admin.setUsername(usernameVal);
|
|
|
+ admin.setRealName(user.getRealName());
|
|
|
+ admin.setNickname(user.getNickname());
|
|
|
+ admin.setRole("teacher");
|
|
|
+ admin.setStatus(1);
|
|
|
+ admin.setPassword(new BCryptPasswordEncoder().encode(usernameVal));
|
|
|
+ admin.setCreatedAt(new Date());
|
|
|
+ admin.setUpdatedAt(new Date());
|
|
|
+ adminMapper.insert(admin);
|
|
|
+ } else {
|
|
|
+ admin.setRole("teacher");
|
|
|
+ admin.setUpdatedAt(new Date());
|
|
|
+ adminMapper.updateById(admin);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 管家审核通过后创建/更新 butler_profiles,状态统一为 approved。
|
|
|
+ */
|
|
|
+ private void upsertButlerProfile(Long userId) {
|
|
|
+ ButlerProfile bp = butlerProfileMapper.selectOne(new LambdaQueryWrapper<ButlerProfile>()
|
|
|
+ .eq(ButlerProfile::getUserId, userId));
|
|
|
+ Date now = new Date();
|
|
|
+ if (bp == null) {
|
|
|
+ bp = new ButlerProfile();
|
|
|
+ bp.setUserId(userId);
|
|
|
+ bp.setStatus("approved");
|
|
|
+ bp.setApprovedAt(now);
|
|
|
+ bp.setCreatedAt(now);
|
|
|
+ bp.setUpdatedAt(now);
|
|
|
+ butlerProfileMapper.insert(bp);
|
|
|
+ } else {
|
|
|
+ bp.setStatus("approved");
|
|
|
+ bp.setApprovedAt(now);
|
|
|
+ bp.setUpdatedAt(now);
|
|
|
+ butlerProfileMapper.updateById(bp);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public List<ServiceRoleApplication> listApplications(Integer status) {
|
|
|
return this.list(new LambdaQueryWrapper<ServiceRoleApplication>()
|