林小张 2 месяцев назад
Родитель
Сommit
62e59d6136

+ 10 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteComStaffService.java

@@ -1,5 +1,8 @@
 package org.dromara.system.api;
 
+import org.dromara.system.api.domain.vo.RemoteComStaffVo;
+
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -9,4 +12,11 @@ public interface RemoteComStaffService {
 
     Map<String,String> selectStaffNameAndCode();
 
+    /**
+     * 根据人员ID批量查询人员完整信息
+     * @param ids 人员ID集合
+     * @return 人员信息列表
+     */
+    List<RemoteComStaffVo> selectStaffByIds(Set<Long> ids);
+
 }

+ 64 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteComStaffVo.java

@@ -0,0 +1,64 @@
+package org.dromara.system.api.domain.vo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 远程调用 - 人员信息视图对象
+ *
+ * @author Claude
+ * @date 2026-01-28
+ */
+@Data
+public class RemoteComStaffVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 人员ID
+     */
+    private Long staffId;
+
+    /**
+     * 人员编码
+     */
+    private String staffCode;
+
+    /**
+     * 姓名
+     */
+    private String staffName;
+
+    /**
+     * 所属部门ID
+     */
+    private Long deptId;
+
+    /**
+     * 所属部门名称
+     */
+    private String deptName;
+
+    /**
+     * 联系电话
+     */
+    private String phone;
+
+    /**
+     * 岗位ID
+     */
+    private Long postId;
+
+    /**
+     * 岗位名称
+     */
+    private String postName;
+
+    /**
+     * 状态(0正常 1停用)
+     */
+    private String status;
+}

+ 1 - 1
ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/interceptor/PlatformDataScopeInterceptor.java

@@ -89,7 +89,7 @@ public class PlatformDataScopeInterceptor implements Interceptor {
         "partner_contacts",
         "partner_contract",
         "partner_warehouse",
-        "partner_qualification"
+        "partner_qualification",
         "address_area",
         "supplier_",
         "supply_area"

+ 6 - 1
ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/utils/LoginHelper.java

@@ -87,7 +87,12 @@ public class LoginHelper {
      * 获取用户id
      */
     public static Long getUserId() {
-        return Convert.toLong(getExtra(USER_KEY));
+        // ⚠️⚠️⚠️ 临时测试代码,登录功能完成后必须删除 ⚠️⚠️⚠️
+        // TODO: 临时返回固定的客户ID用于测试PC端接口,登录功能完成后删除此行
+        return 2009201047173152769L;
+
+        // 原来的代码(登录功能完成后恢复)
+        // return Convert.toLong(getExtra(USER_KEY));
     }
 
     /**

+ 0 - 1
ruoyi-modules/pom.xml

@@ -19,7 +19,6 @@
         <module>ruoyi-customer</module>
 	    <module>ruoyi-external</module>
 	    <module>ruoyi-mall</module>
-        <module>ruoyi-external</module>
         <module>ruoyi-bill</module>
     </modules>
 

+ 118 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/pc/controller/PcServicePersonController.java

@@ -0,0 +1,118 @@
+package org.dromara.customer.pc.controller;
+
+import lombok.RequiredArgsConstructor;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.satoken.utils.LoginHelper;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.customer.domain.vo.CustomerSalesInfoVo;
+import org.dromara.customer.service.ICustomerSalesInfoService;
+import org.dromara.system.api.RemoteComStaffService;
+import org.dromara.system.api.domain.vo.RemoteComStaffVo;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
+
+/**
+ * PC端 - 专属服务人员查询
+ * 前端访问路由地址为:/pc/enterprise/servicePerson
+ *
+ * @author Claude
+ * @date 2026-01-28
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/pc/enterprise/servicePerson")
+public class PcServicePersonController extends BaseController {
+
+    private final ICustomerSalesInfoService customerSalesInfoService;
+
+    @DubboReference
+    private RemoteComStaffService remoteComStaffService;
+
+    /**
+     * 查询当前企业的专属服务人员
+     * 返回:销售人员(专属采购顾问)、服务人员(客服人员)
+     */
+    @GetMapping("/list")
+    public R<List<ServicePersonVO>> getServicePersons() {
+        // 获取当前登录用户的企业ID
+        Long customerId = LoginHelper.getUserId();
+
+        // 查询客户销售信息
+        CustomerSalesInfoVo salesInfo = customerSalesInfoService.queryByCustomerId(customerId);
+        if (salesInfo == null) {
+            return R.ok(Collections.emptyList());
+        }
+
+        // 收集服务人员ID
+        Set<Long> staffIds = new HashSet<>();
+        if (salesInfo.getSalesPersonId() != null) {
+            staffIds.add(salesInfo.getSalesPersonId());
+        }
+        if (salesInfo.getServiceStaffId() != null) {
+            staffIds.add(salesInfo.getServiceStaffId());
+        }
+
+        if (staffIds.isEmpty()) {
+            return R.ok(Collections.emptyList());
+        }
+
+        // 通过Dubbo远程调用获取人员详细信息
+        List<RemoteComStaffVo> staffList = remoteComStaffService.selectStaffByIds(staffIds);
+        if (staffList == null || staffList.isEmpty()) {
+            return R.ok(Collections.emptyList());
+        }
+
+        // 组装返回数据
+        List<ServicePersonVO> result = new ArrayList<>();
+
+        // 添加销售人员(专属采购顾问)
+        if (salesInfo.getSalesPersonId() != null) {
+            staffList.stream()
+                .filter(staff -> salesInfo.getSalesPersonId().equals(staff.getStaffId()))
+                .findFirst()
+                .ifPresent(staff -> {
+                    ServicePersonVO vo = new ServicePersonVO();
+                    vo.setName(staff.getStaffName());
+                    vo.setType("专属采购顾问");
+                    vo.setDepartment(staff.getDeptName());
+                    vo.setPhone(staff.getPhone());
+                    vo.setAvatar("");
+                    result.add(vo);
+                });
+        }
+
+        // 添加服务人员(客服人员)
+        if (salesInfo.getServiceStaffId() != null) {
+            staffList.stream()
+                .filter(staff -> salesInfo.getServiceStaffId().equals(staff.getStaffId()))
+                .findFirst()
+                .ifPresent(staff -> {
+                    ServicePersonVO vo = new ServicePersonVO();
+                    vo.setName(staff.getStaffName());
+                    vo.setType("客服人员");
+                    vo.setDepartment(staff.getDeptName());
+                    vo.setPhone(staff.getPhone());
+                    vo.setAvatar("");
+                    result.add(vo);
+                });
+        }
+
+        return R.ok(result);
+    }
+
+    /**
+     * 服务人员视图对象
+     */
+    @lombok.Data
+    public static class ServicePersonVO {
+        private String name;
+        private String type;
+        private String department;
+        private String phone;
+        private String avatar;
+    }
+}

+ 9 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteComStaffServiceImpl.java

@@ -2,8 +2,10 @@ package org.dromara.system.dubbo;
 
 import lombok.RequiredArgsConstructor;
 import org.apache.dubbo.config.annotation.DubboService;
+import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.system.api.RemoteComStaffService;
-import org.dromara.system.domain.ComStaff;
+import org.dromara.system.api.domain.vo.RemoteComStaffVo;
+import org.dromara.system.domain.vo.ComStaffVo;
 import org.dromara.system.service.IComStaffService;
 import org.springframework.stereotype.Service;
 
@@ -27,4 +29,10 @@ public class RemoteComStaffServiceImpl implements RemoteComStaffService {
     public Map<String, String> selectStaffNameAndCode() {
         return comStaffService.selectStaffNameAndCode();
     }
+
+    @Override
+    public List<RemoteComStaffVo> selectStaffByIds(Set<Long> ids) {
+        List<ComStaffVo> staffList = comStaffService.queryByIds(ids);
+        return MapstructUtils.convert(staffList, RemoteComStaffVo.class);
+    }
 }

+ 8 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/IComStaffService.java

@@ -46,6 +46,14 @@ public interface IComStaffService extends IService<ComStaff> {
      */
     List<ComStaffVo> queryList(ComStaffBo bo);
 
+    /**
+     * 根据人员ID批量查询人员信息
+     *
+     * @param ids 人员ID集合
+     * @return 人员信息列表
+     */
+    List<ComStaffVo> queryByIds(Set<Long> ids);
+
     /**
      * 新增人员信息
      *

+ 44 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/ComStaffServiceImpl.java

@@ -90,6 +90,50 @@ public class ComStaffServiceImpl extends ServiceImpl<ComStaffMapper, ComStaff> i
         return baseMapper.selectVoList(lqw);
     }
 
+    /**
+     * 根据人员ID批量查询人员信息
+     *
+     * @param ids 人员ID集合
+     * @return 人员信息列表
+     */
+    @Override
+    public List<ComStaffVo> queryByIds(Set<Long> ids) {
+        if (ids == null || ids.isEmpty()) {
+            return Collections.emptyList();
+        }
+
+        LambdaQueryWrapper<ComStaff> lqw = Wrappers.lambdaQuery();
+        lqw.in(ComStaff::getStaffId, ids);
+        List<ComStaffVo> records = baseMapper.selectVoList(lqw);
+
+        if (CollUtil.isNotEmpty(records)) {
+            Set<Long> deptIds = records.stream().map(ComStaffVo::getDeptId).filter(Objects::nonNull).collect(Collectors.toSet());
+            Map<Long, String> deptMap = new HashMap<>();
+            if (CollUtil.isNotEmpty(deptIds)) {
+                deptMap = sysDeptMapper.selectList(new LambdaQueryWrapper<SysDept>()
+                        .select(SysDept::getDeptId, SysDept::getDeptName).in(SysDept::getDeptId, deptIds)).stream()
+                    .collect(Collectors.toMap(SysDept::getDeptId, SysDept::getDeptName));
+            }
+
+            Set<Long> postIds = records.stream().map(ComStaffVo::getPostId).filter(Objects::nonNull).collect(Collectors.toSet());
+            Map<Long, String> postMap = new HashMap<>();
+            if (CollUtil.isNotEmpty(postIds)) {
+                postMap = sysPostMapper.selectList(new LambdaQueryWrapper<SysPost>()
+                        .select(SysPost::getPostId, SysPost::getPostName).in(SysPost::getPostId, postIds)).stream()
+                    .collect(Collectors.toMap(SysPost::getPostId, SysPost::getPostName));
+            }
+
+            Map<Long, String> finalDeptMap = deptMap;
+            Map<Long, String> finalPostMap = postMap;
+            records.forEach(item -> {
+                item.setDeptName(finalDeptMap.get(item.getDeptId()));
+                item.setPostName(finalPostMap.get(item.getPostId()));
+            });
+        }
+
+        return records;
+    }
+
     private LambdaQueryWrapper<ComStaff> buildQueryWrapper(ComStaffBo bo) {
         Map<String, Object> params = bo.getParams();
         LambdaQueryWrapper<ComStaff> lqw = Wrappers.lambdaQuery();

+ 5 - 5
ruoyi-modules/ruoyi-system/src/main/resources/application.yml

@@ -13,6 +13,11 @@ spring:
 # 👇 新增:允许 Bean 定义覆盖(解决 Filter/Bean 冲突)
   main:
     allow-bean-definition-overriding: true
+  config:
+    import:
+      - optional:nacos:application-common.yml
+      - optional:nacos:datasource.yml
+      - optional:nacos:${spring.application.name}.yml
 --- # nacos 配置
 spring:
   cloud:
@@ -29,8 +34,3 @@ spring:
         # 配置组
         group: @nacos.config.group@
         namespace: ${spring.profiles.active}
-  config:
-    import:
-      - optional:nacos:application-common.yml
-      - optional:nacos:datasource.yml
-      - optional:nacos:${spring.application.name}.yml