diff --git a/doc/庄锐波-工作周报.md b/doc/庄锐波-工作周报.md index dace9f3c..2daa9c29 100644 --- a/doc/庄锐波-工作周报.md +++ b/doc/庄锐波-工作周报.md @@ -138,4 +138,23 @@ **下周工作:** * 暂停后台管理的功能开发,开始进行计划,预约,任务,预告功能的开发. * 预计:计划,预约,任务,预告 app端完成的时间,5-31号前. -* 计划,预约,任务,预告 web端不在初验的验收要求里边,暂不开发. \ No newline at end of file +* 计划,预约,任务,预告 web端不在初验的验收要求里边,暂不开发. + +## 时间:2026-05-18 至 2026-05-24 + +**本周工作:** +* 计划,预约,任务,预告的表设计 +* 提供非现场开发的框架和相关文档 + +**下周工作:** +* (执法端与企业端)计划,预约,任务,预告的功能开发,预计完成时间6-5 + + +## 时间:2026-05-25 至 2026-05-31 + +**本周工作:** +* (执法端与企业端)计划,预约,任务,预告的功能开发 60% + +**下周工作:** +* (执法端与企业端)计划,预约,任务,预告的功能开发及自测,预计完成时间6-5 +* 预计6-8号可以由测试人员进行功能测试. \ No newline at end of file diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnfCpReserveController.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnfCpReserveController.java index 50822b09..4a1cce0c 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnfCpReserveController.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnfCpReserveController.java @@ -12,6 +12,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.util.List; + /** * 行政执法检查计划-预约 * @@ -56,4 +58,18 @@ public class AppEnfCpReserveController extends EfcodeCpReserveController { public R reject(@PathVariable String id) { return cpReserveService.rejectReserve(id); } + + /** + * 查询同组关联计划(同一planGroupId下的其他预约记录关联的计划信息) + * + * @param planGroupId 计划分组ID + * @param excludeId 排除的预约记录ID(当前卡片自身) + */ + @GetMapping("/groupMembers") + public R> getGroupMembers( + @RequestParam String planGroupId, + @RequestParam(required = false) String excludeId) { + List members = cpReserveService.queryGroupMembers(planGroupId, excludeId); + return R.ok(members); + } } diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/IEfcodeCpPlanService.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/IEfcodeCpPlanService.java index a34c3680..f7292734 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/IEfcodeCpPlanService.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/IEfcodeCpPlanService.java @@ -88,4 +88,15 @@ public interface IEfcodeCpPlanService { * @return 按 planGroupId 分组的预约记录列表(key=planGroupId, value=该组预约记录) */ Map> autoMatchReserve(boolean forceMatch, boolean updatePlan, boolean insertReserve); + + /** + * 计划自动匹配预约V2(定时任务调用) + *

扫描待预约状态的计划,按自然周分组匹配,超出最大联合数量时拆分多组

+ * + * @param forceMatch 是否强制匹配(忽略 CP_SETTING_AUTO_MATCH_START 日期校验) + * @param updatePlan 是否更新计划记录(system_reserved、reserve_status) + * @param insertReserve 是否将预约记录插入数据库;为false时仅计算匹配结果不落库 + * @return 按 planGroupId 分组的预约记录列表 + */ + Map> autoMatchReserveV2(boolean forceMatch, boolean updatePlan, boolean insertReserve); } diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/IEfcodeCpReserveService.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/IEfcodeCpReserveService.java index fb8fd872..bd9f80b2 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/IEfcodeCpReserveService.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/IEfcodeCpReserveService.java @@ -100,4 +100,13 @@ public interface IEfcodeCpReserveService { * @return 操作结果 */ R rejectReserve(String reserveId); + + /** + * 查询同组关联计划(同一planGroupId下的其他预约记录关联的计划信息) + * + * @param planGroupId 计划分组ID + * @param excludeId 排除的预约记录ID + * @return 同组其他预约记录(关联计划信息) + */ + List queryGroupMembers(String planGroupId, String excludeId); } diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EfcodeCpPlanServiceImpl.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EfcodeCpPlanServiceImpl.java index d5c049b4..4c7f186c 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EfcodeCpPlanServiceImpl.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EfcodeCpPlanServiceImpl.java @@ -23,6 +23,8 @@ import com.zdxt.enforcementcode.service.IEfcodeCpPlanService; import java.time.LocalDate; import java.time.ZoneId; import java.time.temporal.ChronoUnit; +import java.time.DayOfWeek; +import java.time.temporal.TemporalAdjusters; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; @@ -626,8 +628,8 @@ public class EfcodeCpPlanServiceImpl implements IEfcodeCpPlanService { } log.info("[CpPlan] 共查询到{}条待匹配计划", pendingPlans.size()); - // 4. 已处理过的企业信用代码集合(同一轮中已匹配过的不再重复处理) - Set processedEnterprises = new HashSet<>(); + // 4. 已处理过的“企业+周”组合(同一轮中同企业同周不重复处理,但不同周分别匹配) + Set processedKeys = new HashSet<>(); int matchedCount = 0; for (EfcodeCpPlan plan : pendingPlans) { @@ -635,15 +637,19 @@ public class EfcodeCpPlanServiceImpl implements IEfcodeCpPlanService { if (StringUtils.isBlank(enterpriseNumber)) { continue; } - // 跳过本轮已处理的企业 - if (processedEnterprises.contains(enterpriseNumber)) { - continue; - } - // 5. 查找一周内同企业、不同执法单位的其他待匹配计划 + // 5. 查找计划所在自然周(周一~周日)内同企业、不同执法单位的其他待匹配计划 LocalDate planLocalDate = plan.getPlanDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); - Date weekStart = Date.from(planLocalDate.minusDays(3).atStartOfDay(ZoneId.systemDefault()).toInstant()); - Date weekEnd = Date.from(planLocalDate.plusDays(4).atStartOfDay(ZoneId.systemDefault()).toInstant()); + LocalDate weekStartDate = planLocalDate.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)); + LocalDate weekEndDate = planLocalDate.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY)); + + // 按“企业+周起始日”去重,同企业同周只处理一次 + String processKey = enterpriseNumber + "_" + weekStartDate; + if (processedKeys.contains(processKey)) { + continue; + } + Date weekStart = Date.from(weekStartDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); + Date weekEnd = Date.from(weekEndDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); LambdaQueryWrapper weekLqw = Wrappers.lambdaQuery(); weekLqw.ge(EfcodeCpPlan::getPlanDate, weekStart); @@ -682,6 +688,13 @@ public class EfcodeCpPlanServiceImpl implements IEfcodeCpPlanService { Date reserveTime = new Date(); List groupReserves = new ArrayList<>(); + // 拼接参与单位名称,用于 opMessage + String unitNames = distinctUnitPlans.stream() + .map(EfcodeCpPlan::getBureauDeptName) + .filter(StringUtils::isNotBlank) + .collect(Collectors.joining(",")); + String opMessage = "由于计划执法时间安排较近,系统推荐进行联合,参与单位为:" + unitNames + ".请确认."; + for (int i = 0; i < distinctUnitPlans.size(); i++) { EfcodeCpPlan matchedPlan = distinctUnitPlans.get(i); EfcodeCpReserve reserve = new EfcodeCpReserve(); @@ -689,8 +702,8 @@ public class EfcodeCpPlanServiceImpl implements IEfcodeCpPlanService { reserve.setPlanGroupId(planGroupId); reserve.setReserveTime(reserveTime); reserve.setOpStatus(3L); // 待确认 - reserve.setOpOrder((long) (i + 1)); - reserve.setOpMessage(""); + reserve.setOpOrder(0L); // 系统匹配默认为0 + reserve.setOpMessage(opMessage); reserve.setOpSetDate(matchedPlan.getPlanDate()); reserve.setOpSetTime(matchedPlan.getPlanTime()); reserve.setResFrom(1L); // 系统匹配 @@ -701,12 +714,20 @@ public class EfcodeCpPlanServiceImpl implements IEfcodeCpPlanService { efcodeCpReserveMapper.insert(reserve); } groupReserves.add(reserve); + } - // 9. 更新计划: system_reserved=1, reserve_status=2 - if (updatePlan) { + // 9. 更新计划: 将同企业一周内所有待匹配计划标记为已系统匹配,防止重复匹配 + if (updatePlan) { + for (EfcodeCpPlan sp : samePlans) { EfcodeCpPlan planUpdate = new EfcodeCpPlan(); - planUpdate.setId(matchedPlan.getId()); + planUpdate.setId(sp.getId()); planUpdate.setSystemReserved(1L); + baseMapper.updateById(planUpdate); + } + // 被选中参与联合的计划额外更新 reserve_status=2(预约中) + for (EfcodeCpPlan dp : distinctUnitPlans) { + EfcodeCpPlan planUpdate = new EfcodeCpPlan(); + planUpdate.setId(dp.getId()); planUpdate.setReserveStatus(2L); baseMapper.updateById(planUpdate); } @@ -715,7 +736,7 @@ public class EfcodeCpPlanServiceImpl implements IEfcodeCpPlanService { resultMap.put(planGroupId, groupReserves); // 标记该企业已处理 - processedEnterprises.add(enterpriseNumber); + processedKeys.add(enterpriseNumber); matchedCount++; log.info("[CpPlan] 企业[{}]匹配成功,联合{}个单位,planGroupId={}", enterpriseNumber, distinctUnitPlans.size(), planGroupId); @@ -725,6 +746,201 @@ public class EfcodeCpPlanServiceImpl implements IEfcodeCpPlanService { return resultMap; } + /** + * 计划自动匹配预约V2(定时任务调用) + *

扫描待预约状态的计划,按自然周分组匹配,超出最大联合数量时拆分多组

+ * + * @param forceMatch 是否强制匹配(忽略 CP_SETTING_AUTO_MATCH_START 日期校验) + * @param updatePlan 是否更新计划记录(system_reserved、reserve_status) + * @param insertReserve 是否将预约记录插入数据库;为false时仅计算匹配结果不落库 + * @return 按 planGroupId 分组的预约记录列表 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public Map> autoMatchReserveV2(boolean forceMatch, boolean updatePlan, boolean insertReserve) { + log.info("[CpPlan-V2] 开始执行计划自动匹配预约, forceMatch={}, updatePlan={}, insertReserve={}", forceMatch, updatePlan, insertReserve); + Map> resultMap = new HashMap<>(); + + // 1. 日期校验:如果不是强制匹配,则判断当前天数是否等于 CP_SETTING_AUTO_MATCH_START + if (!forceMatch) { + String autoMatchStartDay = getSettingValue("CP_SETTING_AUTO_MATCH_START"); + int today = LocalDate.now().getDayOfMonth(); + if (StringUtils.isNotBlank(autoMatchStartDay)) { + int settingDay = Integer.parseInt(autoMatchStartDay.trim()); + if (today != settingDay) { + log.info("[CpPlan-V2] 当前日期{}号,不等于设定的自动匹配日期{}号,跳过执行", today, settingDay); + return resultMap; + } + } + } + + // 2. 获取最大联合单位数量 + int maxUnionUnit = 3; // 默认值 + String maxUnionStr = getSettingValue("CP_MAX_UNION_UNIT"); + if (StringUtils.isNotBlank(maxUnionStr)) { + maxUnionUnit = Integer.parseInt(maxUnionStr.trim()); + } + + // 3. 查询待匹配的计划:plan_date > 当前时间 且 system_reserved=0, manual_reserved=0, reserve_status=1, is_public=1, is_union=1 + Date now = new Date(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.gt(EfcodeCpPlan::getPlanDate, now); + lqw.eq(EfcodeCpPlan::getSystemReserved, 0L); + lqw.eq(EfcodeCpPlan::getManualReserved, 0L); + lqw.eq(EfcodeCpPlan::getReserveStatus, 1L); + lqw.eq(EfcodeCpPlan::getIsPublic, 1L); + lqw.eq(EfcodeCpPlan::getIsUnion, 1L); + lqw.eq(EfcodeCpPlan::getIsDelete, 0L); + lqw.orderByAsc(EfcodeCpPlan::getPlanDate); + List pendingPlans = baseMapper.selectList(lqw); + + if (pendingPlans.isEmpty()) { + log.info("[CpPlan-V2] 没有找到待匹配的计划记录,执行结束"); + return resultMap; + } + log.info("[CpPlan-V2] 共查询到{}条待匹配计划", pendingPlans.size()); + + // 4. 已处理过的"企业+周"组合,同企业同周只处理一次 + Set processedKeys = new HashSet<>(); + int matchedCount = 0; + + for (EfcodeCpPlan plan : pendingPlans) { + String enterpriseNumber = plan.getEnterpriseNumber(); + if (StringUtils.isBlank(enterpriseNumber)) { + continue; + } + + // 5. 计算计划所在的自然周(周一~周日) + LocalDate planLocalDate = plan.getPlanDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + LocalDate weekStartDate = planLocalDate.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)); + LocalDate weekEndDate = planLocalDate.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY)); + + // 按"企业+周起始日"去重,同企业同周只处理一次 + String processKey = enterpriseNumber + "_" + weekStartDate; + if (processedKeys.contains(processKey)) { + continue; + } + processedKeys.add(processKey); + + // 6. 查找该自然周内同企业的所有待匹配计划 + Date weekStart = Date.from(weekStartDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); + Date weekEnd = Date.from(weekEndDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); + + LambdaQueryWrapper weekLqw = Wrappers.lambdaQuery(); + weekLqw.ge(EfcodeCpPlan::getPlanDate, weekStart); + weekLqw.le(EfcodeCpPlan::getPlanDate, weekEnd); + weekLqw.eq(EfcodeCpPlan::getEnterpriseNumber, enterpriseNumber); + weekLqw.eq(EfcodeCpPlan::getSystemReserved, 0L); + weekLqw.eq(EfcodeCpPlan::getManualReserved, 0L); + weekLqw.eq(EfcodeCpPlan::getReserveStatus, 1L); + weekLqw.eq(EfcodeCpPlan::getIsPublic, 1L); + weekLqw.eq(EfcodeCpPlan::getIsUnion, 1L); + weekLqw.eq(EfcodeCpPlan::getIsDelete, 0L); + weekLqw.orderByAsc(EfcodeCpPlan::getPlanDate); + List samePlans = baseMapper.selectList(weekLqw); + + // 7. 按不同执法单位去重,取每个 bureau_dept_id 的第一条计划作为代表 + List distinctUnitPlans = new ArrayList<>(); + Set seenBureauDeptIds = new HashSet<>(); + for (EfcodeCpPlan sp : samePlans) { + String deptId = sp.getBureauDeptId(); + if (StringUtils.isNotBlank(deptId) && !seenBureauDeptIds.contains(deptId)) { + seenBureauDeptIds.add(deptId); + distinctUnitPlans.add(sp); + } + } + + // 8. 如果只有一个单位的计划,说明没有可联合的,跳过 + if (distinctUnitPlans.size() <= 1) { + log.debug("[CpPlan-V2] 企业[{}] 周[{}~{}]内只有1个单位的计划,跳过", enterpriseNumber, weekStartDate, weekEndDate); + continue; + } + + // 9. 按最大联合单位数量分组:如果不同单位数 > maxUnionUnit,则拆分成多组 + List> groups = new ArrayList<>(); + for (int i = 0; i < distinctUnitPlans.size(); i += maxUnionUnit) { + int end = Math.min(i + maxUnionUnit, distinctUnitPlans.size()); + List group = distinctUnitPlans.subList(i, end); + // 每组至少需要2个不同单位才有联合意义 + if (group.size() >= 2) { + groups.add(new ArrayList<>(group)); + } + } + + if (groups.isEmpty()) { + continue; + } + + // 10. 为每组生成预约记录 + for (List group : groups) { + String planGroupId = "Temp" + "_" + UUID.randomUUID().toString().replace("-", ""); + Date reserveTime = new Date(); + List groupReserves = new ArrayList<>(); + + // 拼接参与单位名称,用于 opMessage + String unitNames = group.stream() + .map(EfcodeCpPlan::getBureauDeptName) + .filter(StringUtils::isNotBlank) + .collect(Collectors.joining(",")); + String opMessage = "由于计划执法时间安排较近,系统推荐进行联合,参与单位为:" + unitNames + ".请确认."; + + for (EfcodeCpPlan matchedPlan : group) { + EfcodeCpReserve reserve = new EfcodeCpReserve(); + reserve.setPlanId(matchedPlan.getId()); + reserve.setPlanGroupId(planGroupId); + reserve.setReserveTime(reserveTime); + reserve.setOpStatus(3L); // 待确认 + reserve.setOpOrder(0L); // 系统匹配默认为0 + reserve.setOpMessage(opMessage); + reserve.setOpSetDate(matchedPlan.getPlanDate()); + reserve.setOpSetTime(matchedPlan.getPlanTime()); + reserve.setResFrom(1L); // 系统匹配 + reserve.setSenderId("from_system"); + reserve.setReceiverId(String.valueOf(matchedPlan.getCreateBy())); + + if (insertReserve) { + efcodeCpReserveMapper.insert(reserve); + } + groupReserves.add(reserve); + } + + // 更新被选中参与联合的计划: reserve_status=2(预约中) + if (updatePlan) { + for (EfcodeCpPlan dp : group) { + EfcodeCpPlan planUpdate = new EfcodeCpPlan(); + planUpdate.setId(dp.getId()); + planUpdate.setReserveStatus(2L); + planUpdate.setSystemReserved(1L); + baseMapper.updateById(planUpdate); + } + } + + resultMap.put(planGroupId, groupReserves); + matchedCount++; + log.info("[CpPlan-V2] 企业[{}] 周[{}~{}] 分组匹配成功,联合{}个单位,planGroupId={}", + enterpriseNumber, weekStartDate, weekEndDate, group.size(), planGroupId); + } + + // 11. 将该企业该周所有待匹配计划的 system_reserved 标记为1,防止重复匹配 + if (updatePlan) { + for (EfcodeCpPlan sp : samePlans) { + // 已在上面group循环中更新过的(reserve_status=2)跳过,避免覆盖 + if (seenBureauDeptIds.contains(sp.getBureauDeptId())) { + // 该计划对应的单位已经参与联合,在group循环中已处理 + continue; + } + EfcodeCpPlan planUpdate = new EfcodeCpPlan(); + planUpdate.setId(sp.getId()); + planUpdate.setSystemReserved(1L); + baseMapper.updateById(planUpdate); + } + } + } + + log.info("[CpPlan-V2] 计划自动匹配预约执行完毕,共匹配{}组联合预约", matchedCount); + return resultMap; + } + /** * 获取 efcode_cp_setting 配置值 * diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EfcodeCpReserveServiceImpl.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EfcodeCpReserveServiceImpl.java index c329e488..eb74e59f 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EfcodeCpReserveServiceImpl.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EfcodeCpReserveServiceImpl.java @@ -473,4 +473,67 @@ public class EfcodeCpReserveServiceImpl implements IEfcodeCpReserveService { } } } + + /** + * 查询同组关联计划(同一planGroupId下的其他预约记录关联的计划信息) + */ + @Override + public List queryGroupMembers(String planGroupId, String excludeId) { + if (StringUtils.isBlank(planGroupId)) { + return new ArrayList<>(); + } + // 查询同组的所有预约记录 + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(EfcodeCpReserve::getPlanGroupId, planGroupId); + if (StringUtils.isNotBlank(excludeId)) { + lqw.ne(EfcodeCpReserve::getId, excludeId); + } + lqw.orderByAsc(EfcodeCpReserve::getOpOrder); + List reserves = baseMapper.selectList(lqw); + if (reserves.isEmpty()) { + return new ArrayList<>(); + } + + // 查询关联的计划详情 + Set planIds = reserves.stream() + .map(EfcodeCpReserve::getPlanId) + .filter(StringUtils::isNotBlank) + .collect(Collectors.toSet()); + Map planMap = new HashMap<>(); + if (!planIds.isEmpty()) { + List plans = cpPlanMapper.selectByIds(new ArrayList<>(planIds)); + for (EfcodeCpPlan p : plans) { + planMap.put(p.getId(), p); + } + } + + // 组装返回结果 + List result = new ArrayList<>(); + for (EfcodeCpReserve r : reserves) { + EfcodeCpReserveVo vo = new EfcodeCpReserveVo(); + vo.setId(r.getId()); + vo.setPlanId(r.getPlanId()); + vo.setPlanGroupId(r.getPlanGroupId()); + vo.setReserveTime(r.getReserveTime()); + vo.setOpStatus(r.getOpStatus()); + vo.setOpOrder(r.getOpOrder()); + vo.setOpMessage(r.getOpMessage()); + vo.setOpSetDate(r.getOpSetDate()); + vo.setOpSetTime(r.getOpSetTime()); + vo.setResFrom(r.getResFrom()); + // 填充计划信息 + EfcodeCpPlan plan = planMap.get(r.getPlanId()); + if (plan != null) { + vo.setPlanDate(plan.getPlanDate()); + vo.setPlanTime(plan.getPlanTime()); + vo.setEnterpriseName(plan.getEnterpriseName()); + vo.setEnforceContent(plan.getEnforceContent()); + vo.setBureauDeptName(plan.getBureauDeptName()); + vo.setEnforceUserNames(plan.getEnforceUserNames()); + vo.setEnforceUserTels(plan.getEnforceUserTels()); + } + result.add(vo); + } + return result; + } } diff --git a/zdxt-web-client/zdxt-efcode-enforcement-app/src/api/enforcement/reserve.js b/zdxt-web-client/zdxt-efcode-enforcement-app/src/api/enforcement/reserve.js index 81d1bbcd..2b997385 100644 --- a/zdxt-web-client/zdxt-efcode-enforcement-app/src/api/enforcement/reserve.js +++ b/zdxt-web-client/zdxt-efcode-enforcement-app/src/api/enforcement/reserve.js @@ -13,4 +13,7 @@ export const approveReserve = (id, success, error) => _put(reserveBaseUrl + "/ap // 预约处理:拒绝 export const rejectReserve = (id, success, error) => _put(reserveBaseUrl + "/reject/" + id, {}, success, error); +// 查询同组关联计划(同planGroupId下的其他预约记录关联的计划信息) +export const getReserveGroupMembers = (planGroupId, excludeId, success, error) => _get(reserveBaseUrl + "/groupMembers", { planGroupId, excludeId }, success, error); + // endregion diff --git a/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/reserve/cp_reserve_system.vue b/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/reserve/cp_reserve_system.vue index dd933b99..ecb7d66f 100644 --- a/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/reserve/cp_reserve_system.vue +++ b/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/reserve/cp_reserve_system.vue @@ -56,6 +56,27 @@
{{ formatDate(item.reserveTime) }}
+ +
+
关联计划
+
+
+ 执法单位: + {{ member.bureauDeptName || '-' }} +
+
+ 执法事项: + {{ member.enforceContent || '-' }} +
+
+ 计划时间: + {{ formatDate(member.planDate) }} {{ getPlanTimeText(member.planTime) }} +
+
+
+
+
加载中...
+
@@ -87,9 +108,11 @@