From fa533ab92bbf35ab3b83bdc4f4c949ec304efff3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=BA=84=E9=94=90=E6=B3=A2?=
<10549902+zhuangruibo@user.noreply.gitee.com>
Date: Fri, 22 May 2026 20:48:12 +0800
Subject: [PATCH] =?UTF-8?q?=E6=89=A7=E6=B3=95=E7=AB=AF-=E8=AE=A1=E5=88=92?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../013-计划任务表设计.sql | 3 +-
.../common/util/CommonUtil.java | 43 +++++++++++++++++++
.../AppEnfCpSettingController.java | 8 ++++
.../enforcement/AppEnfLoginController.java | 11 ++++-
.../service/IEfcodeCpSettingService.java | 17 ++++++++
.../impl/EfcodeCpSettingServiceImpl.java | 8 ++++
.../src/api/enforcement/plan.js | 3 ++
.../src/store/Common.js | 14 +++++-
.../src/views/enforcement/login.vue | 2 +
.../enforcement/my/plan/cp_plan_edit.vue | 35 ++++++++++++++-
10 files changed, 139 insertions(+), 5 deletions(-)
diff --git a/script/sql/zfjd-refactoring-v1/013-计划任务表设计.sql b/script/sql/zfjd-refactoring-v1/013-计划任务表设计.sql
index 5823760c..51df5a85 100644
--- a/script/sql/zfjd-refactoring-v1/013-计划任务表设计.sql
+++ b/script/sql/zfjd-refactoring-v1/013-计划任务表设计.sql
@@ -184,4 +184,5 @@ VALUES ('CP_SETTING_SUBMIT_DEADLINE', '下阶段计划提交最晚时间', '26',
('CP_SETTING_AUTO_MATCH_START', '系统自动推荐匹配开始时间', '26', '系统自动推荐匹配的开始时间(号)>=', '0',
NULL),
('CP_SETTING_MANUAL_MATCH_DAYS', '手工匹配距计划开始天数', '3', '手工匹配距离计划开始的天数>=', '0', NULL),
- ('CP_MAX_UNION_UNIT', '单次联合单位最大数量', '3', '单次联合单位最大数量>=2', '0', NULL);
+ ('CP_MAX_UNION_UNIT', '单次联合单位最大数量', '3', '单次联合单位最大数量>=2', '0', NULL),
+ ('CP_MAX_INNER_UNIT_AC_PERSON_NUM', '单位内部单次计划最多参与人数', '3', '单位内部单次计划最多参与人数<=3', '0', NULL);
diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/common/util/CommonUtil.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/common/util/CommonUtil.java
index 55ae4abb..f853cd9d 100644
--- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/common/util/CommonUtil.java
+++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/common/util/CommonUtil.java
@@ -22,6 +22,49 @@ public class CommonUtil {
return num;
}
+ /**
+ * 判断手机号是否为加密状态
+ *
+ * - 空值 → 返回 false(无法判定,视为未加密)
+ * - 纯数字(如 13800001234) → 返回 false(明文)
+ * - 其他(如 Base64 密文 0d17ehr8XLbrj2kbgeEiDg==) → 返回 true(已加密)
+ *
+ *
+ * @param num 待判断的手机号字符串
+ * @return true=已加密;false=明文或空值
+ */
+ public static boolean isPhoneEncrypted(String num){
+ if(StringUtils.isEmpty(num))return false;
+ // 纯数字视为明文,非纯数字视为密文
+ return !num.matches("^\\d+$");
+ }
+
+ /**
+ * 手机号解密返回明文(不脱敏)
+ *
+ * - 空值 → 原样返回
+ * - 纯数字 → 视为未加密,原样返回
+ * - 其他 → 调用 {@link IdCardCryptoUtil#symmetricDecryptIdCard(String, String)} 解密
+ * - 解密异常 → 返回原值,不抛出
+ *
+ *
+ * @param num 可能是明文或密文的手机号
+ * @return 明文手机号
+ */
+ public static String decryptPhone(String num){
+ if(StringUtils.isEmpty(num))return num;
+ // 纯数字视为未加密明文,直接返回
+ if(num.matches("^\\d+$")){
+ return num;
+ }
+ try {
+ return IdCardCryptoUtil.symmetricDecryptIdCard(KEY, num);
+ } catch (Exception e) {
+ // 解密失败,返回原值,避免调用方报错
+ return num;
+ }
+ }
+
/**
* 两个字名字空格
* @param name
diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnfCpSettingController.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnfCpSettingController.java
index 2314752e..3741cc68 100644
--- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnfCpSettingController.java
+++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnfCpSettingController.java
@@ -57,4 +57,12 @@ public class AppEnfCpSettingController extends EfcodeCpSettingController {
public R getMaxUnionUnit() {
return R.ok(efcodeCpSettingService.getMaxUnionUnit());
}
+
+ /**
+ * 获取单位内部单次计划最多参与人数
+ */
+ @GetMapping("/maxInnerUnitAcPersonNum")
+ public R getMaxInnerUnitAcPersonNum() {
+ return R.ok(efcodeCpSettingService.getMaxInnerUnitAcPersonNum());
+ }
}
diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnfLoginController.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnfLoginController.java
index 4dba0fd4..1252bc41 100644
--- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnfLoginController.java
+++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnfLoginController.java
@@ -1,6 +1,7 @@
package com.zdxt.enforcementcode.controller.app.enforcement;
import cn.dev33.satoken.annotation.SaIgnore;
+import com.zdxt.enforcementcode.common.util.CommonUtil;
import com.zdxt.enforcementcode.service.enforcement.IAppEnfLoginService;
import com.zdxt.enforcementcode.controller.app.LoginController;
import com.zdxt.enforcementcode.domain.vo.SrzDeptVo;
@@ -99,14 +100,20 @@ public class AppEnfLoginController extends LoginController {
return R.fail("部门ID查找错误!");
}
- // 8. 构造返回数据
+ // 8. 手机号解密处理(如是加密存储则返回明文以供前端展示与业务使用)
+ String phonenumber = user.getPhonenumber();
+ if (CommonUtil.isPhoneEncrypted(phonenumber)) {
+ phonenumber = CommonUtil.decryptPhone(phonenumber);
+ }
+
+ // 9. 构造返回数据
Map data = new HashMap<>();
data.put("token", token);
data.put("userId", user.getUserId());
data.put("userName", user.getUserName());
data.put("loginName", user.getLoginName());
data.put("nickName", user.getNickName());
- data.put("phonenumber", user.getPhonenumber() != null ? user.getPhonenumber() : "");
+ data.put("phonenumber", phonenumber != null ? phonenumber : "");
data.put("deptId", user.getDeptId());
data.put("deptName", sysDept.getDeptName());
diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/IEfcodeCpSettingService.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/IEfcodeCpSettingService.java
index 8911fe99..ab7f1471 100644
--- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/IEfcodeCpSettingService.java
+++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/IEfcodeCpSettingService.java
@@ -36,6 +36,11 @@ public interface IEfcodeCpSettingService {
*/
String SETTING_ID_MAX_UNION_UNIT = "CP_MAX_UNION_UNIT";
+ /**
+ * 设置项主键:单位内部单次计划最多参与人数<=3
+ */
+ String SETTING_ID_MAX_INNER_UNIT_AC_PERSON_NUM = "CP_MAX_INNER_UNIT_AC_PERSON_NUM";
+
/**
* 默认值:下阶段计划提交最晚时间
*/
@@ -56,6 +61,11 @@ public interface IEfcodeCpSettingService {
*/
int DEFAULT_MAX_UNION_UNIT = 3;
+ /**
+ * 默认值:单位内部单次计划最多参与人数
+ */
+ int DEFAULT_MAX_INNER_UNIT_AC_PERSON_NUM = 3;
+
/**
* 查询行政执法检查计划-设置
*
@@ -92,6 +102,13 @@ public interface IEfcodeCpSettingService {
*/
Integer getMaxUnionUnit();
+ /**
+ * 获取单位内部单次计划最多参与人数
+ *
+ * @return 数值,未配置或无法解析时返回默认值 {@link #DEFAULT_MAX_INNER_UNIT_AC_PERSON_NUM}
+ */
+ Integer getMaxInnerUnitAcPersonNum();
+
/**
* 分页查询行政执法检查计划-设置列表
*
diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EfcodeCpSettingServiceImpl.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EfcodeCpSettingServiceImpl.java
index 909a2d87..c00765a7 100644
--- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EfcodeCpSettingServiceImpl.java
+++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EfcodeCpSettingServiceImpl.java
@@ -76,6 +76,14 @@ public class EfcodeCpSettingServiceImpl implements IEfcodeCpSettingService {
return getIntSetting(SETTING_ID_MAX_UNION_UNIT, DEFAULT_MAX_UNION_UNIT);
}
+ /**
+ * 获取单位内部单次计划最多参与人数
+ */
+ @Override
+ public Integer getMaxInnerUnitAcPersonNum() {
+ return getIntSetting(SETTING_ID_MAX_INNER_UNIT_AC_PERSON_NUM, DEFAULT_MAX_INNER_UNIT_AC_PERSON_NUM);
+ }
+
/**
* 根据设置主键获取整型配置值,不存在或解析失败时返回默认值
*
diff --git a/zdxt-web-client/zdxt-efcode-enforcement-app/src/api/enforcement/plan.js b/zdxt-web-client/zdxt-efcode-enforcement-app/src/api/enforcement/plan.js
index 5d80c291..2c6e3ec3 100644
--- a/zdxt-web-client/zdxt-efcode-enforcement-app/src/api/enforcement/plan.js
+++ b/zdxt-web-client/zdxt-efcode-enforcement-app/src/api/enforcement/plan.js
@@ -28,6 +28,9 @@ const settingBaseUrl = "/app-enf/cpSetting";
// 下阶段计划提交最晚时间(每月几号前需提交下阶段计划<=)
export const getSubmitDeadline = (success, error) => _get(settingBaseUrl + "/submitDeadline", {}, success, error);
+// 单位内部单次计划最多参与人数(>=3)
+export const getMaxInnerUnitAcPersonNum = (success, error) => _get(settingBaseUrl + "/maxInnerUnitAcPersonNum", {}, success, error);
+
// endregion
// region 企业检索接口
diff --git a/zdxt-web-client/zdxt-efcode-enforcement-app/src/store/Common.js b/zdxt-web-client/zdxt-efcode-enforcement-app/src/store/Common.js
index cf635341..5e727ed2 100644
--- a/zdxt-web-client/zdxt-efcode-enforcement-app/src/store/Common.js
+++ b/zdxt-web-client/zdxt-efcode-enforcement-app/src/store/Common.js
@@ -12,6 +12,10 @@ export default defineStore('useCommon', {
enterpriseId:"",
//当前登录用户ID
userId:"",
+ //当前登录用户名(账号)
+ userName:"",
+ //当前登录用户昵称(姓名)
+ nickName:"",
//部门ID
deptId:"",
//部门名称
@@ -63,6 +67,14 @@ export default defineStore('useCommon', {
SET_USER_ID(data){
this.userId = data;
},
+ //设置用户名(账号)
+ SET_USER_NAME(data){
+ this.userName = data;
+ },
+ //设置用户昵称(姓名)
+ SET_NICK_NAME(data){
+ this.nickName = data;
+ },
//设置部门ID
SET_DEPT_ID(data){
this.deptId = data;
@@ -145,6 +157,6 @@ export default defineStore('useCommon', {
},
persist: {
storage: sessionStorage,
- pick: ['token', 'userId', 'enterpriseNumber', 'enterpriseName', 'enterpriseId', 'phonenumber', 'deptId', 'deptName', 'organId', 'organName', 'bureauUnitId', 'bureauUnitName', 'hasLaw'],
+ pick: ['token', 'userId', 'userName', 'nickName', 'enterpriseNumber', 'enterpriseName', 'enterpriseId', 'phonenumber', 'deptId', 'deptName', 'organId', 'organName', 'bureauUnitId', 'bureauUnitName', 'hasLaw'],
},
});
diff --git a/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/login.vue b/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/login.vue
index ade35062..e5e22852 100644
--- a/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/login.vue
+++ b/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/login.vue
@@ -89,6 +89,8 @@
// 执法端登录成功 → 赋值用户基本信息
useCommon.SET_USER_PHONENUMBER(response.data.phonenumber || "");
useCommon.SET_USER_ID(response.data.userId);
+ useCommon.SET_USER_NAME(response.data.userName || "");
+ useCommon.SET_NICK_NAME(response.data.nickName || "");
useCommon.SET_TOKEN(response.data.token);
useCommon.SET_DEPT_ID(response.data.deptId);
useCommon.SET_DEPT_NAME(response.data.deptName || "");
diff --git a/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/plan/cp_plan_edit.vue b/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/plan/cp_plan_edit.vue
index baa08861..840e1dcf 100644
--- a/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/plan/cp_plan_edit.vue
+++ b/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/plan/cp_plan_edit.vue
@@ -184,7 +184,7 @@