diff --git a/doc/打包命令/命令 b/doc/打包命令/命令 new file mode 100644 index 00000000..4e6fd96f --- /dev/null +++ b/doc/打包命令/命令 @@ -0,0 +1,14 @@ +后端 +1、进入目录:cd /usr/local/project/ +2、查看目录下文件:ls +3、查看系统运行java 进程:ps -ef | grep java +4、杀死进程:kill 9 31888 +5、清空终端屏幕:clear +6、后台启动 Java 项目 + 关闭终端不退出 + 日志全部写入 app.log 文件:nohup java -jar zdxt-admin-web-server.jar > app.log 2>&1 & +7、实时盯紧 Java 程序的运行日志:tail -f app.log + +前端 +文件命名:监督端:admin-plus-dev 执法端:enforcement-dev 企业端:enterprise-dev +1、前端地址: /usr/local/nginx/html +2、解压:unzip xxx.zip +3、删除文件 rm -f admin-plus-dev.zip diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/EnforcementInspectionProgramMapper.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/EnforcementInspectionProgramMapper.java index 7b18578f..1bb6e71d 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/EnforcementInspectionProgramMapper.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/EnforcementInspectionProgramMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.zdxt.enforcementcode.domain.EnforcementInspectionProgram; import com.zdxt.enforcementcode.domain.bo.EnforcementInspectionProgramBo; import com.zdxt.enforcementcode.domain.vo.EnforcementInspectionProgramVo; +import org.apache.ibatis.annotations.Param; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import java.util.List; @@ -50,4 +51,24 @@ public interface EnforcementInspectionProgramMapper extends BaseMapperPlus selectPlanPage(Page page, EnforcementInspectionProgramBo bo); + /** + * 分页查询计划列表(包含权限控制) - 优化版本 + * + * @param page 分页参数 + * @param bo 查询条件 + * @param accessibleDeptIds 可访问的部门ID列表 + * @return 计划分页列表 + */ + Page selectPlanPageOptimized(Page page, + EnforcementInspectionProgramBo bo, + @Param("accessibleDeptIds") List accessibleDeptIds); + + /** + * 查询可访问的部门ID列表 + * + * @param currentDeptId 当前部门ID + * @return 部门ID列表 + */ + List selectAccessibleDeptIds(@Param("currentDeptId") String currentDeptId); + } diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnforcementInspectionProgramServiceImpl.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnforcementInspectionProgramServiceImpl.java index c15ae2ea..a0346362 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnforcementInspectionProgramServiceImpl.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnforcementInspectionProgramServiceImpl.java @@ -202,7 +202,7 @@ public class EnforcementInspectionProgramServiceImpl implements IEnforcementInsp } /** - * 分页查询计划列表(包含权限控制) + * 分页查询计划列表(包含权限控制) * * @param bo 查询条件 * @param pageQuery 分页参数 @@ -210,9 +210,13 @@ public class EnforcementInspectionProgramServiceImpl implements IEnforcementInsp */ @Override public TableDataInfo selectPlanPage(EnforcementInspectionProgramBo bo, PageQuery pageQuery) { - Page result = baseMapper.selectPlanPage(pageQuery.build(), bo); + // 1. 先查询当前部门及其所有下级部门的ID列表 + List accessibleDeptIds = getAccessibleDeptIds(bo.getDeptId()); - // 批量查询关联的文件列表(优化 N+1 查询问题) + // 2. 将部门ID列表传入查询 + Page result = baseMapper.selectPlanPageOptimized(pageQuery.build(), bo, accessibleDeptIds); + + // 批量查询关联的文件列表(优化 N+1 查询问题) if (result.getRecords() != null && !result.getRecords().isEmpty()) { // 1. 收集所有计划ID List planIds = result.getRecords().stream() @@ -227,7 +231,7 @@ public class EnforcementInspectionProgramServiceImpl implements IEnforcementInsp fileLqw.eq(ZdxtFile::getIsDelete2, 0); // 只查询未删除的文件 List allFiles = zdxtFileMapper.selectVoList(fileLqw); - // 3. 按 businessId 分组,构建 Map + // 3. 按 businessId 分组,构建 Map Map> filesByPlanId = allFiles.stream() .collect(Collectors.groupingBy(ZdxtFileVo::getBusinessId)); @@ -242,6 +246,23 @@ public class EnforcementInspectionProgramServiceImpl implements IEnforcementInsp return TableDataInfo.build(result); } + /** + * 获取可访问的部门ID列表(包括当前部门和所有下级部门) + * + * @param currentDeptId 当前部门ID + * @return 可访问的部门ID列表 + */ + private List getAccessibleDeptIds(String currentDeptId) { + if (StringUtils.isBlank(currentDeptId)) { + return Collections.emptyList(); + } + + // 查询当前部门及其所有下级部门的ID + // 这里需要注入 SysDeptMapper 或者调用现有的部门服务 + // 示例代码,需要根据实际项目调整 + return baseMapper.selectAccessibleDeptIds(currentDeptId); + } + private LambdaQueryWrapper buildQueryWrapper(EnforcementInspectionProgramBo bo) { Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnforcementRegistrationServiceImpl.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnforcementRegistrationServiceImpl.java index f3e8774e..05a6ef86 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnforcementRegistrationServiceImpl.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnforcementRegistrationServiceImpl.java @@ -645,8 +645,8 @@ public class EnforcementRegistrationServiceImpl implements IEnforcementRegistrat district = extract(bo.getEnterpriseAddress(), "([^\\s市]+?区)"); street = extract(bo.getEnterpriseAddress(), "([^\\s区]+?街道)"); } - vo.setDistrict(district); - vo.setStreet(street); + bo.setDistrict(district); + bo.setStreet(street); resNum = baseMapper.insertEnforcementRegistration(bo); // unionNo 上来不等于null, 那么说明关联了联合检查, 则直接新增, 并且将之前的所有 uninoNo相同的 hasUnion更新为 1 diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EnforcementInspectionProgramMapper.xml b/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EnforcementInspectionProgramMapper.xml index fab64e3e..bb195737 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EnforcementInspectionProgramMapper.xml +++ b/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EnforcementInspectionProgramMapper.xml @@ -161,15 +161,63 @@ order by create_time desc - + + + + + + + diff --git a/zdxt-web-client/zdxt-efcode-enforcement-app/src/api/enforcement/index.js b/zdxt-web-client/zdxt-efcode-enforcement-app/src/api/enforcement/index.js index bb44fd8f..d8a033e9 100644 --- a/zdxt-web-client/zdxt-efcode-enforcement-app/src/api/enforcement/index.js +++ b/zdxt-web-client/zdxt-efcode-enforcement-app/src/api/enforcement/index.js @@ -72,6 +72,9 @@ export const queryEnforcementNoticeList = (params, success, error) => _post(base // 执法预告列表 export const getLawNoticeList = (params, success, error) => _post(baseUrl + "/enforcement/queryList", params, success, error); +//计划通知列表 +export const queryListNoPermission = (params, success, error) => _get(baseUrl + "/inspectionProgram/queryListNoPermission", params, success, error); + // 执法评价列表 export const queryEvaluateList = (params, success, error) => _get("/app-ent/evaluate/queryEvaluateList", params, success, error); diff --git a/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/message/planNoticeList.vue b/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/message/planNoticeList.vue index fdf2a67f..19c8e204 100644 --- a/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/message/planNoticeList.vue +++ b/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/message/planNoticeList.vue @@ -24,7 +24,7 @@
- {{ item.checkItemText || item.checkItem }} + {{ item.planName || item.planName }}
@@ -33,15 +33,27 @@
执法区域: - {{ item.unitCheck }} + {{ item.enforcementAreaName || item.enforcementArea }}
发布时间: - {{ item.checkTime }} + {{ item.enforcementTime }}
附件: - + + + 无 +
@@ -56,7 +68,7 @@ import { ref, onMounted } from 'vue'; import { useRouter } from 'vue-router'; import { showToast } from 'vant'; import 'vant/es/toast/style'; -import { getLawNoticeList } from '@/api/enforcement/index'; +import { queryListNoPermission } from '@/api/enforcement/index'; const router = useRouter(); @@ -76,7 +88,7 @@ const fetchList = () => { pageSize: pageSize.value, queryParam: searchText.value || undefined, }; - getLawNoticeList(params, (res) => { + queryListNoPermission(params, (res) => { if (res.code === 200) { const rows = res.rows || []; const total = res.total; @@ -143,6 +155,21 @@ const onClickLeft = () => { router.back(); }; +// ========== 下载附件 ========== +const downloadAttachment = (file) => { + if (!file || !file.guid) { + showToast('无法下载该附件'); + return; + } + const downloadUrl = `/api/enf-ep/app-enf/common/file/download?guid=${file.guid}`; + const link = document.createElement('a'); + link.href = downloadUrl; + link.download = file.fileName || file.fileSaveName; + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); +}; + // ========== 组件挂载时加载数据 ========== onMounted(() => { // fetchList(); @@ -259,6 +286,16 @@ onMounted(() => { .value { flex: 1; color: #999; + display: flex; + flex-wrap: wrap; + gap: 8px; + } + + .attachment-link { + color: #2d94fa; + text-decoration: underline; + word-break: break-all; + cursor: pointer; } } diff --git a/zdxt-web-client/zdxt-efcode-enterprise-app/src/views/enterprise/enforcement/enforcementEvaluateDetail.vue b/zdxt-web-client/zdxt-efcode-enterprise-app/src/views/enterprise/enforcement/enforcementEvaluateDetail.vue index 82e6adb6..d4ea8251 100644 --- a/zdxt-web-client/zdxt-efcode-enterprise-app/src/views/enterprise/enforcement/enforcementEvaluateDetail.vue +++ b/zdxt-web-client/zdxt-efcode-enterprise-app/src/views/enterprise/enforcement/enforcementEvaluateDetail.vue @@ -46,7 +46,7 @@
执法事项 - {{ detail.lawEnforcementItem }} + {{ detail.lawEnforcementItemText }}
执法时间 diff --git a/zdxt-web-server/zdxt-admin-web-server/src/main/resources/application-dev.yml b/zdxt-web-server/zdxt-admin-web-server/src/main/resources/application-dev.yml index 1c6cfc7e..06e58e91 100644 --- a/zdxt-web-server/zdxt-admin-web-server/src/main/resources/application-dev.yml +++ b/zdxt-web-server/zdxt-admin-web-server/src/main/resources/application-dev.yml @@ -342,3 +342,12 @@ srnwg: # integrationKey: ENC(8RZtrfL4t5tsEk7lfrw00+4hSxbjxcVM) # paasId: szsfj_zhifajianduma_001 # paasToken: ENC(0Cg8Vtpay+3hwRm+vJB0utikr4dXcEguwSaxlbTWkgQ4parB8pN2rL2xrhQ8eUd5) + +--- # XSS过滤配置 +xss: + # 开启XSS过滤 + enabled: true + # 排除链接(不进行XSS过滤的URL,这些接口需要接收富文本HTML内容) + excludeUrls: + - /web/enforcementcode/educationServices/add + - /web/enforcementcode/educationServices/edit diff --git a/zdxt-web-server/zdxt-admin-web-server/src/main/resources/application-prod.yml b/zdxt-web-server/zdxt-admin-web-server/src/main/resources/application-prod.yml index 59c1404f..082a2935 100644 --- a/zdxt-web-server/zdxt-admin-web-server/src/main/resources/application-prod.yml +++ b/zdxt-web-server/zdxt-admin-web-server/src/main/resources/application-prod.yml @@ -274,3 +274,12 @@ justauth: client-id: 10**********6 client-secret: 1f7d08**********5b7**********29e redirect-uri: ${justauth.address}/social-callback?source=gitea + +--- # XSS过滤配置 +xss: + # 开启XSS过滤 + enabled: true + # 排除链接(不进行XSS过滤的URL,这些接口需要接收富文本HTML内容) + excludeUrls: + - /web/enforcementcode/educationServices/add + - /web/enforcementcode/educationServices/edit diff --git a/zdxt-web-server/zdxt-admin-web-server/src/main/resources/application.yml b/zdxt-web-server/zdxt-admin-web-server/src/main/resources/application.yml index 13d41076..3d1c99fe 100644 --- a/zdxt-web-server/zdxt-admin-web-server/src/main/resources/application.yml +++ b/zdxt-web-server/zdxt-admin-web-server/src/main/resources/application.yml @@ -281,9 +281,11 @@ springdoc: xss: # 过滤开关 enabled: true - # 排除链接 + # 排除链接(不进行XSS过滤的URL,这些接口需要接收富文本HTML内容) excludeUrls: - /system/notice + - /web/enforcementcode/educationServices/add + - /web/enforcementcode/educationServices/edit --- # 分布式锁 lock4j 全局配置 lock4j: