生成时间: 2026-08-02 · 数据来源: xnybw平台需求及工作计划.xlsx(南网在线绿能云缺陷跟踪表)· 仅针对 backup730/730backup 分支代码

① 基本信息

问题描述功能改造,存量场站根据场站已关联的所有项目的"项目创建人电话"进行匹配,如果当前登录人电话是其中之一,则该列表默认展示出来这个场站信息,去除选择调管单位之后才能查询到场站的功能
一级模块项目信息填报
二级模块/(新增场站 > 关联存量场站调度命名)
涉及类型全部类型
所属区域五区
严重性严重
当前状态2.5.待升级
研发处理人陈键泽 / 周小龙
处理说明已调整更新待8.2升级

② 问题截图

关联场站-全网数据无权限控制
项目信息填报列表:不同调管单位的项目均可被任意登录人查询到
关联存量场站调度命名弹窗-必须先选调管单位
"关联场站"弹窗:*调管单位为必填项,选定后展示该调管单位下全部 67 条场站,未按登录人身份做任何过滤

③ 旧代码涉及的项目文件及行数(backup730/730backup 分支,当前仍是此状态)

xnybw5f / src/views/projectNew/components/baseInfo/dialog/plantRelationSelector.vue 第 27-31 行(调管单位 el-select,multiple 必选);第 324-329 行(created 生命周期,仅调用 getSearchType / _getProvinceAndMunicipalList,未获取当前登录人手机号);第 488-500 行(_getDataList,未向后端传递任何身份/手机号参数)
created() {
    this.getSearchType()
    this.selectRelation = {}
    this._getProvinceAndMunicipalList()   // 仅拉取省市字典,无当前登录人手机号获取逻辑
},
...
_getDataList() {
    this.selectRelation = {}
    this.tableLoading = true
    this.searchForm.fbStatus = '1'
    this.searchForm.allCompanyList = this.companyList   // 只传调管单位清单,不含手机号
    projectOrtherApi.getProcessListPlant(this.searchForm).then(res => { ... })
}
xnybw5b / src/main/java/cn/csg/so/oms/in/newenergy/project/appservice/NeDpArcProcAppService.java 第 25-28 行(getListPlant 方法入口)
public Map<String, Object> getListPlant(NewenergyPlantVo plantVO) {
    Map<String, Object> map = new HashMap();
    if (plantVO.getCompanyList() == null || plantVO.getCompanyList().isEmpty()) {
        return null;    // 唯一的准入条件是"必须选了调管单位",全程无 creatorPhone / 登录人身份的过滤
    }
    ...
对照证据:xnybw5b / src/main/java/cn/csg/so/oms/in/newenergy/project/appservice/ProjectImplAppService.java 第 318-327 行显示,"项目基本信息列表"接口已经落地了同类的手机号归属过滤模式——getCapBaseCommonDAO().selectOne("...GreenSaveUserVO_selectGrePhone", fourUserId) 取当前登录人手机号,再用 param.setCreatorPhone(phone) 传入查询条件。这正是本条缺陷要求"存量场站按项目创建人电话匹配"应当复用的既有模式,但 getListPlant 尚未接入。

④ 修复代码涉及的项目文件及行数

xnybw5b / src/main/java/cn/csg/so/oms/in/newenergy/project/appservice/NeDpArcProcAppService.java 第 25-28 行改造 + MyBatis 映射 NeDpArcProcVO_getListPlant 增加 creatorPhone 关联条件
public Map<String, Object> getListPlant(NewenergyPlantVo plantVO) {
    Map<String, Object> map = new HashMap();
-   if (plantVO.getCompanyList() == null || plantVO.getCompanyList().isEmpty()) {
-       return null;
-   }
+   // 复用 ProjectImplAppService 已验证的手机号归属过滤模式
+   String fourUserId = UserUtils.getUser().getUserId();
+   String phone = (String) getCapBaseCommonDAO().selectOne(
+           "cn.csg.so.oms.in.newenergy.project.model.GreenSaveUserVO_selectGrePhone", fourUserId);
+   if (StrUtil.isBlank(phone)) {
+       return map; // 拿不到登录人手机号时返回空列表,而不是继续放行
+   }
+   plantVO.setCreatorPhone(phone);
+   // 调管单位不再是准入前提,改为可选的二次收窄条件
    ...
    List<NeDpArcVO> records = getCapBaseCommonDAO().queryList(
        "cn.csg.so.oms.in.newenergy.project.model.NeDpArcProcVO_getListPlant", plantVO, ...);
xnybw5b / src/main/resources/.../NeDpArcProcVOSQL_*.xml(NeDpArcProcVO_getListPlant 语句) SQL 关联条件新增:AND EXISTS (SELECT 1 FROM ne_pj_impl i WHERE i.plant_id = t.plant_id AND i.creator_phone = #{creatorPhone})
xnybw5f / src/views/projectNew/components/baseInfo/dialog/plantRelationSelector.vue 第 17-31 行:调管单位由"必选"改为"可选二次筛选";created 钩子里不再要求先选调管单位即可查询默认匹配结果
<el-form-item label="调管单位:" ...>
  <el-select multiple v-model="searchForm.companyList" :disabled="companyList.length === 1"
-            filterable clearable placeholder="">
+            filterable clearable placeholder="不选则默认展示与我关联的场站">
  ...
</el-select>

⑤ 修复方案

1. 后端NeDpArcProcAppService.getListPlant 去掉"必须先选调管单位才放行"的硬性前置校验,改为参照 ProjectImplAppService 中已验证生效的做法——通过当前登录人上下文(UserUtils.getUser().getUserId())查出手机号,再用该手机号去关联"场站已挂接的项目创建人电话"做归属过滤;只有匹配上的场站才默认出现在列表里。调管单位下拉框改为可选的二次收窄条件,而不是数据可见性的唯一闸门。

2. 前端plantRelationSelector.vue 弹窗打开时无需强制先选调管单位即可查询(后端已按登录人自动限定范围),仅在用户需要进一步缩小范围时才使用调管单位/省市筛选。

3. 该问题与 row9(Excel第9行,"项目基本信息-添加场站-关联存量场站调度命名")本质是同一个功能点的持续迭代:row9 阶段先以"功能建设中"弹窗+不展示存量数据的方式临时封堵了越权查询风险(已关闭),本行是其后续的正式功能改造,计划随 8.2 版本升级上线(当前处理状态"已调整更新待8.2升级")。

与后端安全基线的一致性:本方案由后端从登录上下文解析手机号做过滤,Controller 不接收 userId/phone 等身份参数,符合项目安全编码基线要求。