diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnfCpTaskController.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnfCpTaskController.java index 4d1af96e..7b36f279 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnfCpTaskController.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnfCpTaskController.java @@ -12,6 +12,8 @@ import org.springframework.web.bind.annotation.*; import java.util.Date; import java.util.List; +import java.util.Map; +import java.util.Arrays; /** * 行政执法检查计划-任务 @@ -70,4 +72,18 @@ public class AppEnfCpTaskController extends EfcodeCpTaskController { EfcodeCpTaskVo detail = cpTaskService.queryMyTaskDetail(planId); return R.ok(detail); } + + /** + * 批量查询任务列表中联合执法任务的关联单位信息(第二次请求) + * + * @param planIds 计划ID列表,逗号分隔 + * @return Map: key=planId, value=关联的其他单位计划信息 + */ + @GetMapping("/myListAssociatedPlans") + public R>> myListAssociatedPlans( + @RequestParam String planIds) { + List planIdList = Arrays.asList(planIds.split(",")); + Map> result = cpTaskService.queryAssociatedPlansBatch(planIdList); + return R.ok(result); + } } diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/EfcodeCpTaskVo.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/EfcodeCpTaskVo.java index d2841009..98e2c47e 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/EfcodeCpTaskVo.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/EfcodeCpTaskVo.java @@ -103,6 +103,12 @@ public class EfcodeCpTaskVo implements Serializable { @com.baomidou.mybatisplus.annotation.TableField(exist = false) private String enforceUserNames; + /** + * 执法人员电话(多个逗号分隔) + */ + @com.baomidou.mybatisplus.annotation.TableField(exist = false) + private String enforceUserTels; + /** * 被检查企业/机构信用代码 */ diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/IEfcodeCpTaskService.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/IEfcodeCpTaskService.java index 0b6d7909..3e3ce9b1 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/IEfcodeCpTaskService.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/IEfcodeCpTaskService.java @@ -95,6 +95,14 @@ public interface IEfcodeCpTaskService { */ EfcodeCpTaskVo queryMyTaskDetail(String planId); + /** + * 批量查询关联计划信息(用于列表页第二次请求加载联合执法关联单位信息) + * + * @param planIds 计划ID列表(通常为isUnion=1的任务对应的planId) + * @return Map: key=planId, value=该计划关联的其他单位信息 + */ + java.util.Map> queryAssociatedPlansBatch(List planIds); + /** * 强制创建任务(忽略其他条件),根据计划信息直接生成任务记录并回写 plan.task_id * diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EfcodeCpTaskServiceImpl.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EfcodeCpTaskServiceImpl.java index 6cd89991..9f51f32d 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EfcodeCpTaskServiceImpl.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EfcodeCpTaskServiceImpl.java @@ -21,8 +21,10 @@ import com.zdxt.enforcementcode.service.IEfcodeCpTaskService; import java.util.Date; import java.util.List; import java.util.Map; +import java.util.HashMap; import java.util.ArrayList; import java.util.Collection; +import java.util.stream.Collectors; /** * 行政执法检查计划-任务Service业务层处理 @@ -180,6 +182,68 @@ public class EfcodeCpTaskServiceImpl implements IEfcodeCpTaskService { return detail; } + /** + * 批量查询关联计划信息(用于列表页第二次请求加载联合执法关联单位信息) + */ + @Override + public Map> queryAssociatedPlansBatch(List planIds) { + Map> result = new HashMap<>(); + if (planIds == null || planIds.isEmpty()) { + return result; + } + // 1. 查询这些planId对应的计划,获取各自的taskId + List sourcePlans = cpPlanMapper.selectList( + Wrappers.lambdaQuery() + .in(EfcodeCpPlan::getId, planIds) + .eq(EfcodeCpPlan::getIsDelete, 0L) + .isNotNull(EfcodeCpPlan::getTaskId) + ); + if (sourcePlans == null || sourcePlans.isEmpty()) { + return result; + } + // 2. 收集所有taskId,并建立 planId -> taskId 的映射 + Map planToTask = new HashMap<>(); + List taskIds = new ArrayList<>(); + for (EfcodeCpPlan p : sourcePlans) { + planToTask.put(p.getId(), p.getTaskId()); + if (!taskIds.contains(p.getTaskId())) { + taskIds.add(p.getTaskId()); + } + } + // 3. 查询所有相关taskId下的计划(排除当前用户的planId) + List allRelatedPlans = cpPlanMapper.selectList( + Wrappers.lambdaQuery() + .in(EfcodeCpPlan::getTaskId, taskIds) + .notIn(EfcodeCpPlan::getId, planIds) + .eq(EfcodeCpPlan::getIsDelete, 0L) + ); + if (allRelatedPlans == null || allRelatedPlans.isEmpty()) { + return result; + } + // 4. 按taskId分组 + Map> groupedByTask = allRelatedPlans.stream() + .collect(Collectors.groupingBy(EfcodeCpPlan::getTaskId)); + // 5. 映射回各planId + for (Map.Entry entry : planToTask.entrySet()) { + String planId = entry.getKey(); + String taskId = entry.getValue(); + List otherPlans = groupedByTask.get(taskId); + if (otherPlans != null && !otherPlans.isEmpty()) { + List associated = new ArrayList<>(); + for (EfcodeCpPlan p : otherPlans) { + EfcodeCpTaskVo.AssociatedPlan ap = new EfcodeCpTaskVo.AssociatedPlan(); + ap.setBureauDeptName(p.getBureauDeptName()); + ap.setEnforceUserNames(p.getEnforceUserNames()); + ap.setEnforceUserTels(p.getEnforceUserTels()); + ap.setEnforceContent(p.getEnforceContent()); + associated.add(ap); + } + result.put(planId, associated); + } + } + return result; + } + /** * 强制创建任务(忽略其他条件),根据计划信息直接生成任务记录并回写 plan.task_id * diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EfcodeCpTaskMapper.xml b/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EfcodeCpTaskMapper.xml index 5d776672..4fd185fe 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EfcodeCpTaskMapper.xml +++ b/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EfcodeCpTaskMapper.xml @@ -16,7 +16,9 @@ p.enforce_content, p.enterprise_name, p.is_union, - p.bureau_dept_name + p.bureau_dept_name, + p.enforce_user_names, + p.enforce_user_tels FROM efcode_cp_task t INNER JOIN efcode_cp_plan p ON p.task_id = t.id diff --git a/zdxt-web-client/zdxt-efcode-enforcement-app/src/api/enforcement/task.js b/zdxt-web-client/zdxt-efcode-enforcement-app/src/api/enforcement/task.js index 4b42f453..1b276b10 100644 --- a/zdxt-web-client/zdxt-efcode-enforcement-app/src/api/enforcement/task.js +++ b/zdxt-web-client/zdxt-efcode-enforcement-app/src/api/enforcement/task.js @@ -13,4 +13,7 @@ export const getMyTaskDates = (yearMonth, success, error) => _get(taskBaseUrl + // 我的任务详情(通过 planId 查询) export const getMyTaskDetail = (planId, success, error) => _get(taskBaseUrl + "/myDetail", { planId }, success, error); +// 批量查询联合执法任务的关联单位信息(第二次请求) +export const getMyTaskAssociatedPlans = (planIds, success, error) => _get(taskBaseUrl + "/myListAssociatedPlans", { planIds }, success, error); + // endregion diff --git a/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/reserve/cp_reserve_manual.vue b/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/reserve/cp_reserve_manual.vue index 942cedb0..9a97e618 100644 --- a/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/reserve/cp_reserve_manual.vue +++ b/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/reserve/cp_reserve_manual.vue @@ -25,8 +25,7 @@ v-for="item in reserveList" :key="item.id" class="reserve-card" - :class="{ 'approved-card': item.opStatus === 1, 'rejected-card': item.opStatus === 2, 'pending-card': item.opStatus === 3, 'selected-card': selectedId === item.id }" - @click="onSelectCard(item)" + :class="{ 'approved-card': item.opStatus === 1, 'rejected-card': item.opStatus === 2, 'pending-card': item.opStatus === 3 }" >
@@ -38,76 +37,60 @@
-
-
预约单位
-
-
-
执法单位:
-
{{ item.bureauDeptName || '-' }}
-
-
-
执法人员:
-
{{ item.enforceUserNames || '-' }}
-
-
-
联系电话:
-
{{ item.enforceUserTels || '-' }}
-
-
-
计划时间:
-
{{ formatPlanDate(item.planDate) }} {{ getPlanTimeText(item.planTime) }}
-
-
-
企业名称:
-
{{ item.enterpriseName || '-' }}
-
-
-
执法事项:
-
{{ item.enforceContent || '-' }}
-
-
+
+
+ 预约单位 +
+
{{ item.enterpriseName || item.bureauDeptName || '-' }}
+
{{ formatPlanDate(item.planDate) }} {{ getPlanTimeText(item.planTime) }}
+
+
+
执法单位:
+
{{ item.bureauDeptName || '-' }}
+
+
+
执法人员:
+
{{ item.enforceUserNames || '-' }}
+
+
+
执法事项:
+
{{ item.enforceContent || '-' }}
-
-
被约单位
-
-
-
执法单位:
-
{{ item.targetBureauDeptName || '-' }}
-
-
-
执法人员:
-
{{ item.targetEnforceUserNames || '-' }}
-
-
-
联系电话:
-
{{ item.targetEnforceUserTels || '-' }}
-
-
-
计划时间:
-
{{ formatPlanDate(item.targetPlanDate) }} {{ getPlanTimeText(item.targetPlanTime) }}
-
-
-
企业名称:
-
{{ item.targetEnterpriseName || '-' }}
-
-
-
执法事项:
-
{{ item.targetEnforceContent || '-' }}
-
-
+
+
+ 被约单位 +
+
{{ item.targetEnterpriseName || item.targetBureauDeptName || '-' }}
+
联合单位
+
+
+
执法单位:
+
{{ item.targetBureauDeptName || '-' }}
+
+
+
执法人员:
+
{{ item.targetEnforceUserNames || '-' }}
+
+
+
执法事项:
+
{{ item.targetEnforceContent || '-' }}
+
+
+
计划时间:
+
{{ formatPlanDate(item.targetPlanDate) }} {{ getPlanTimeText(item.targetPlanTime) }}
-
+
预约时间:
{{ formatDate(item.reserveTime) }}
- -
+ +
@@ -141,7 +124,6 @@ import { getReserveList, approveReserveByManual, rejectReserveByManual } from '@ import useCommon from '@/store/Common.js'; const commonStore = useCommon(); -const selectedId = ref(null); const reserveList = ref([]); const loading = ref(false); const finished = ref(false); @@ -205,13 +187,10 @@ const isSentByMe = (item) => { return String(item.senderId) === String(commonStore.userId); }; -// 选中卡片(再次点击取消选中) -const onSelectCard = (item) => { - if (item.opStatus !== 3 || isSentByMe(item)) return; // 非待确认或我发起的不可选 - selectedId.value = selectedId.value === item.id ? null : item.id; +// 操作后置处理 +const afterOperate = (item, action) => { + onRefresh(); }; - -// 下拉刷新 const onRefresh = () => { pageNum.value = 1; finished.value = false; @@ -304,13 +283,6 @@ const onReject = (item) => { }); }).catch(() => {}); }; - -// 操作后置处理 -const afterOperate = (item, action) => { - // TODO: 可在此处扩展后置逻辑,如通知、跳转等 - selectedId.value = null; - onRefresh(); -}; diff --git a/zdxt-web-server/zdxt-gateway-web-server/src/main/resources/application-prod.yml b/zdxt-web-server/zdxt-gateway-web-server/src/main/resources/application-prod.yml index cff7af61..0cd1e35e 100644 --- a/zdxt-web-server/zdxt-gateway-web-server/src/main/resources/application-prod.yml +++ b/zdxt-web-server/zdxt-gateway-web-server/src/main/resources/application-prod.yml @@ -30,14 +30,14 @@ spring: - StripPrefix=0 - DedupeResponseHeader=Access-Control-Allow-Credentials Access-Control-Allow-Origin, RETAIN_UNIQUE - id: supervision-service - uri: http://10.76.108.9:18001 + uri: http://10.76.108.9:18000 predicates: - Path=/sup-ep/** filters: - StripPrefix=0 - DedupeResponseHeader=Access-Control-Allow-Credentials Access-Control-Allow-Origin, RETAIN_UNIQUE - id: enforcement-service - uri: http://10.76.108.8:18002 + uri: http://10.76.108.8:18000 predicates: - Path=/enf-ep/** filters: