Compare commits

...

220 Commits

Author SHA1 Message Date
zhangxiongfeng 3274e7e1bd 临时车辆审批修改 2026-08-05 14:05:27 +08:00
zhangxiongfeng 5ea394a7b4 Merge remote-tracking branch 'origin/dev_dahua_department' into dev_dahua_department 2026-08-05 11:21:02 +08:00
zhangxiongfeng b0801e7122 大华微服务修改微服务 2026-08-05 11:19:36 +08:00
zhangxiongfeng bbd77af32f 大华微服务修改微服务 2026-08-05 11:15:07 +08:00
zhangxiongfeng c4ae60c686 大华微服务修改微服务 2026-08-05 10:50:08 +08:00
zhangxiongfeng cd4b1be635 大华微服务修改微服务 2026-08-05 10:47:40 +08:00
zhangxiongfeng 63e7b0fe69 Merge remote-tracking branch 'origin/dev' into dev 2026-08-05 10:39:36 +08:00
zhangxiongfeng d4a7f92806 Merge branch 'dev_dahua_department' into dev 2026-08-05 10:27:43 +08:00
zhangxiongfeng e81b45fcd1 大华微服务修改1.0 2026-08-05 10:25:41 +08:00
shenzhidan 113fadfe8a 1.临时访客同步大华 2026-08-05 10:07:36 +08:00
shenzhidan 77f915192d 1.优化人脸同步大华 2026-08-05 10:07:31 +08:00
shenzhidan bf0c288063 1.上传人脸修复 2026-08-05 10:07:23 +08:00
shenzhidan 56e01d59b4 新增相关方人员车辆大华同步执行器 2026-08-05 10:07:08 +08:00
shenzhidan 04f9106abd 1、新增车辆人员同步大华 2026-08-05 10:06:26 +08:00
shenzhidan d7c6c82bb8 集成大华通行记录增量同步与定时任务 2026-08-05 10:05:49 +08:00
shenzhidan 9502b52bf6 1.优化人脸同步大华 2026-08-05 10:02:11 +08:00
shenzhidan 2934139574 1.同步大华平台设备 组织架构信息 2026-08-05 10:01:00 +08:00
shenzhidan aabba19ec9 1.同步大华平台设备 组织架构信息 2026-08-05 10:00:05 +08:00
zhangxiongfeng 2f3c4eefd9 大华微服务修改1.0 2026-08-05 08:45:21 +08:00
zhangxiongfeng 93cf3cbbdc 大华微服务修改1.0 2026-08-05 08:44:22 +08:00
zhangxiongfeng 12b39d78d0 Merge remote-tracking branch 'origin/dev_dahua_department' into dev 2026-08-04 13:54:10 +08:00
zhangxiongfeng 6dc735e057 大华微服务修改 2026-08-04 11:30:49 +08:00
zhangxiongfeng 92b48e7d5f 5 2026-08-04 09:14:51 +08:00
zhangxiongfeng 5eb8642399 Merge remote-tracking branch 'origin/dev' into dev_dahua_department 2026-08-03 17:55:17 +08:00
zhangxiongfeng 1998cbeda7 Merge branch 'dev_dahua_department' into dev 2026-08-03 14:31:47 +08:00
zhangxiongfeng 3084892564 Merge remote-tracking branch 'origin/dev' into dev 2026-08-03 14:31:04 +08:00
zhangxiongfeng 224385bb12 Merge branch 'koumen' into dev_dahua_department 2026-08-03 14:28:32 +08:00
zhangxiongfeng ca0ebda107 2026.8.3 2026-08-03 14:24:21 +08:00
zhaokai 5a7a62f7ad Merge branch 'dev_visual_page' into dev 2026-08-01 09:55:03 +08:00
zhaokai 19fb2f0d43 refactor(dashboard): 优化控制器代码结构并添加注释
- 为
2026-08-01 09:54:14 +08:00
zhaokai 1ba3106787 Merge branch 'dev_visual_page' into dev 2026-07-30 08:38:44 +08:00
zhaokai b2cbf09902 fix(dashboard): 修正仪表板数据查询逻辑 2026-07-30 08:38:21 +08:00
zhangxiongfeng e0401dc004 Merge remote-tracking branch 'origin/dev' into dev 2026-07-30 08:33:46 +08:00
shenzhidan 1d93c0a201 1.临时访客同步大华 2026-07-29 17:55:00 +08:00
zhangxiongfeng d999973b22 Merge remote-tracking branch 'origin/dev' into dev 2026-07-29 17:18:50 +08:00
shenzhidan 11e495a15a 1.优化人脸同步大华 2026-07-29 16:52:12 +08:00
shenzhidan dc1432e092 Merge remote-tracking branch 'origin/dev' into dev 2026-07-29 11:05:00 +08:00
shenzhidan 00de04fd98 1.上传人脸修复 2026-07-29 11:03:56 +08:00
zhaokai 79c8688642 Merge branch 'koumen' into dev 2026-07-29 11:03:33 +08:00
zhaokai 93a36cd433 Merge branch 'dev_visual_page' into dev 2026-07-29 10:59:03 +08:00
zhaokai 481fe91e7f feat(dashboard): 添加可视化大屏数据统计功能 2026-07-29 10:58:37 +08:00
shenzhidan 1366309b02 Merge branch 'dev' of http://47.92.113.182:3000/zcloud_gbs/zcloud-gbs-primeport into koumen 2026-07-29 10:31:23 +08:00
zhangxiongfeng f8e1dcaa39 Merge remote-tracking branch 'origin/dev' into koumen 2026-07-29 08:43:07 +08:00
zhangxiongfeng 8e6ea56f4f Merge remote-tracking branch 'origin/koumen' into dev 2026-07-29 08:42:27 +08:00
zhaokai 4106f40aa0 config(spring): 切换配置文件加载顺序 2026-07-28 18:11:32 +08:00
shenzhidan 857efdb611 新增相关方人员车辆大华同步执行器 2026-07-28 17:43:58 +08:00
shenzhidan 3277481dc1 Merge branch 'dev' of http://47.92.113.182:3000/zcloud_gbs/zcloud-gbs-primeport into koumen
# Conflicts:
#	web-domain/src/main/java/com/zcloud/primeport/domain/gateway/DaHuaGateway.java
#	web-infrastructure/src/main/java/com/zcloud/primeport/dahua/api/DaHuaPersonApi.java
#	web-infrastructure/src/main/java/com/zcloud/primeport/gatewayimpl/DaHuaGatewayImpl.java
2026-07-28 17:09:54 +08:00
shenzhidan 0d36024105 1、新增车辆人员同步大华 2026-07-28 17:08:43 +08:00
zhangxiongfeng 946a0aa2a5 人脸上传 2026-07-28 10:26:33 +08:00
zhangxiongfeng 6bf56c1cc4 Merge remote-tracking branch 'origin/dev' into dev
# Conflicts:
#	web-app/src/main/java/com/zcloud/primeport/service/DaHuaServiceImpl.java
#	web-client/src/main/java/com/zcloud/primeport/api/DaHuaServiceI.java
#	web-infrastructure/src/main/java/com/zcloud/primeport/gatewayimpl/DaHuaGatewayImpl.java
2026-07-27 19:10:16 +08:00
zhangxiongfeng 1d8809bbdf 获取新增人员id 2026-07-27 19:08:47 +08:00
zhangxiongfeng 8509c92af8 Merge pull request '口门接口' (#4) from koumen into dev
Reviewed-on: #4
2026-07-27 10:24:06 +08:00
zhangxiongfeng 3cbc28e17f 口门接口
# Conflicts:
#	start/src/main/resources/bootstrap.yml
2026-07-27 10:18:34 +08:00
zhangxiongfeng 81d4242c31 Merge branch 'dev' of http://47.92.113.182:3000/zcloud_gbs/zcloud-gbs-primeport into koumen
# Conflicts:
#	start/src/main/resources/bootstrap.yml
2026-07-27 10:07:51 +08:00
zhaokai a81c46c457 feat(closedArea): 添加封闭区域可视化大屏功能 2026-07-27 09:45:38 +08:00
zhangxiongfeng d243fe5ed3 口门接口 2026-07-27 08:47:38 +08:00
zhangxiongfeng 83d0b39672 大华接口对接 2026-07-22 16:42:11 +08:00
zhaokai d5a23f9768 chore(build): 更新.gitignore配置并移除前端静态资源文件 2026-07-15 13:43:19 +08:00
tianxinlei 316bed23a4 0713 - bug修复 2026-07-13 15:37:43 +08:00
tianxinlei 77b4764810 0713 - bug修复 2026-07-13 10:33:12 +08:00
tianxinlei c88b59b805 0710 - bug修复 2026-07-10 17:59:23 +08:00
tianxinlei 608c51aa0a 0709 - bug修复 2026-07-09 16:35:23 +08:00
tianxinlei 897c0e43cf 0708 - bug修复 2026-07-08 16:43:55 +08:00
tianxinlei d75f433fc2 0707 - 完善消息通知模板 2026-07-07 16:56:54 +08:00
tianxinlei 5df6cb909b 0707 - 增加消息推送 2026-07-07 09:34:21 +08:00
tianxinlei 7667276c30 0706 - bug修改+增加消息推送和待办的公共执行器 2026-07-07 08:32:54 +08:00
tianxinlei 2847068115 0703 - bug修改 2026-07-03 15:01:43 +08:00
tianxinlei 5620914fb1 0701 - bug修改 2026-07-02 08:47:43 +08:00
tianxinlei 3c49092b13 0701 - bug修改 2026-07-01 14:33:02 +08:00
tianxinlei 3327942642 0627 - bug修改 2026-06-27 15:18:53 +08:00
tianxinlei a5fc467659 625 - bug修改 2026-06-25 12:18:31 +08:00
zhaokai 9201f401bc fix(close): 修正临时关闭申请中的用户证件号码字段映射 2026-06-15 18:23:41 +08:00
dearLin 7e6bb4d60a fixed:补充一级口门车辆进出信息 2026-05-28 14:12:55 +08:00
dearLin d1a1590752 fixed:补充一级口门车辆进出信息 2026-05-27 18:16:55 +08:00
dearLin cabeab57dc fixed:补充一级口门车辆进出信息 2026-05-27 17:59:23 +08:00
dearLin b697d8990d fixed: 17182 没有显示驳回状态数据 所有申请页面都需要有驳回状态的数据 监管端和企业端都有 2026-05-27 08:45:03 +08:00
dearLin d4c2779336 fix: 审批人重复校验、查询过滤补全及车辆统计修正
- 新增 GET /checkExistByUserId/{userId} 审批人重复检查接口
- 新增 save 时审批人重复校验,存在则抛 BizException
- personnelVehicleManagementList 查询支持 name/projectName 过滤
- vehicleApply/list 支持 gateLevelAuthAreaId 港区 JSON 筛选
- personnelVehicleManagementList 车辆数统计去掉 audit_flag=2 限制

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-26 18:03:54 +08:00
dearLin 3304e16943 feat: video/list接口支持isOnline在线状态查询和筛选
- VideoDO/VideoCO 新增 isOnline、type 字段
- VideoPageQry 新增 eqIsOnline 查询参数
- 查询改为 LEFT JOIN vi_video 视图,通过 video_resource_id 关联
- xgfPersonAuditList 新增 employeePersonUserName 姓名查询
- 新增 VideoQueryExe 单元测试

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-26 15:30:45 +08:00
lishiwei acd4efe71a 补充视频名称和摄像头数量字段 2026-05-22 17:37:25 +08:00
lishiwei ded8ee64d7 每日00:25二级门禁车辆定时任务 2026-05-14 17:22:05 +08:00
lishiwei 6a16b9484a 每日00:20二级门禁人员定时任务(含手机号变更 身份证兜底查询逻辑) 2026-05-14 17:20:28 +08:00
lishiwei a84d04a9bc 修改二级车辆查询语句别名错误 2026-05-14 17:08:12 +08:00
lishiwei f2b0ea637a refactor: 优化二级门禁车辆审批流程
增加内部车和临时车的一级门禁查询逻辑
2026-05-14 10:46:36 +08:00
lishiwei 74a55d82b2 feat: 同步门禁权限到一级系统 2026-05-11 14:10:56 +08:00
lishiwei b3dffc6577 refactor: 优化闭区人员申请表映射字段命名
- user_face_url -> user_face_images
- apply_person_user_name -> user_name
2026-05-09 17:06:31 +08:00
lishiwei e2c3007c1f feat: 更新车辆黑名单查询字段 2026-05-06 08:51:41 +08:00
dearLin 75419ffd05 feat:接入海康二级口门进出记录 2026-04-30 16:47:35 +08:00
dearLin 145235c9de feat:接入海康二级口门进出记录 2026-04-30 14:30:19 +08:00
lishiwei 74b7259593 Merge remote-tracking branch 'origin/koumen' into koumen 2026-04-29 18:16:12 +08:00
lishiwei 056678d640 1、车辆申请分页列表增加非驳回条件
2、部门车辆录入字段补充
3、移除黑名单补充名称&违规状态补充
4、车牌号唯一性校验增加非驳回条件
5、审批&申请记录按时间倒排
2026-04-29 18:16:05 +08:00
lishiwei b7d7e65f28 1、封闭区域随行人员增加人资标志
2、封闭区域列表不查询全部区域
2026-04-29 18:12:08 +08:00
dearLin 0126a0587f feat:接入海康二级口门进出记录 2026-04-29 18:05:46 +08:00
dearLin 84d835abc8 feat:接入海康二级口门进出记录 2026-04-29 16:30:41 +08:00
dearLin 3009e4edcf feat:接入海康二级口门进出记录 2026-04-29 15:48:01 +08:00
dearLin 6fda8745fe feat:接入大华一级口门进出记录 2026-04-23 09:39:18 +08:00
dearLin a16262165f feat:接入大华一级口门进出记录 2026-04-23 09:02:56 +08:00
dearLin 1dc1f2e7da feat:一级人员门禁设备对接 2026-04-21 09:44:59 +08:00
dearLin 94dffef375 feat:临时访客一级口门申请 2026-04-20 14:34:37 +08:00
dearLin 6e331ede6f feat:临时访客一级口门申请 2026-04-17 15:35:07 +08:00
dearLin a033bba12b feat:临时访客一级口门申请 2026-04-17 15:10:04 +08:00
dearLin a12523db72 feat:一级口门车辆对接 2026-04-16 11:36:11 +08:00
dearLin 9eb2cf2d87 feat:一级口门车辆对接 2026-04-16 08:44:09 +08:00
dearLin 2d57f7fec2 feat:对接一级口门相关方、临时车辆 2026-04-15 18:11:49 +08:00
dearLin b1a0c69d9a feat:对接一级口门相关方、临时车辆 2026-04-15 17:22:53 +08:00
dearLin 6eabea95a5 feat:对接一级口门车辆 2026-04-14 15:01:54 +08:00
dearLin fef4ee37f1 fixed:内测问题修复 2026-04-14 09:39:44 +08:00
dearLin 7c3f37a0cb feat:口门对接设备 2026-04-13 16:49:57 +08:00
dearLin 74bcd9c715 feat:app角标统计 2026-04-01 16:15:45 +08:00
dearLin 77f3c6a716 feat:app角标统计 2026-04-01 15:29:50 +08:00
dearLin feb79c9153 feat:app角标统计 2026-04-01 10:34:33 +08:00
dearLin 1487be91fd feat:车牌号校验 2026-04-01 09:39:35 +08:00
dearLin 11c49d669c feat:口门对接待办 2026-03-31 16:32:02 +08:00
dearLin de642e6322 feat:口门对接待办 2026-03-31 15:25:14 +08:00
dearLin ead8b19773 feat:临时人员门禁列表 2026-03-31 09:01:08 +08:00
dearLin 3fbfde4be7 feat:临时人员门禁列表 2026-03-28 14:54:09 +08:00
dearLin e42df97073 feat:临时人员门禁列表 2026-03-28 13:47:16 +08:00
dearLin 3b79c52000 feat:相关方人员申请通过过进出港权限显示不对的bug 2026-03-27 17:04:06 +08:00
dearLin af5ec666f1 feat:相关方人员申请通过过进出港权限显示不对的bug 2026-03-27 11:42:14 +08:00
dearLin 67dd0c63be feat:黑名单车辆删除报错问题 2026-03-27 10:16:41 +08:00
dearLin d038170c90 feat:分公司统计bug修复 2026-03-27 10:10:48 +08:00
dearLin 35efb01188 feat:驻港单位权限配置 2026-03-26 18:05:01 +08:00
dearLin e685c2566a feat:违规与拉黑移除多余信息 2026-03-26 17:25:32 +08:00
dearLin 2103679364 feat:违规与拉黑移除多余信息 2026-03-26 16:34:46 +08:00
dearLin 129a192a91 feat:完善单位车辆的发起人与发起时间 2026-03-26 15:37:52 +08:00
dearLin faab3a5c5d feat:完善单位车辆的发起人与发起时间 2026-03-26 11:24:17 +08:00
dearLin 0fc4c88c1b feat:完善数据权限 2026-03-26 09:18:38 +08:00
dearLin 5ea22e72d2 feat:完善数据权限 2026-03-25 17:07:08 +08:00
dearLin afb1ce0bc9 feat:补充权限标识 2026-03-25 15:59:39 +08:00
dearLin 81d4f9bb97 feat:相关方申请补充驾驶人 2026-03-24 17:57:09 +08:00
dearLin af163bb0e7 feat:临时申请补充驾驶人 2026-03-24 17:53:48 +08:00
dearLin 5eb1436646 feat:补充查询分公司里的人授权范围 2026-03-24 17:27:22 +08:00
dearLin a65cd9e8cc feat:补充查询分公司里的人授权范围 2026-03-24 17:18:28 +08:00
dearLin be85e4c374 feat:补充查询分公司里的人授权范围 2026-03-24 09:24:46 +08:00
dearLin f4037f3f8b feat:二级封闭区域申请详情 2026-03-23 11:43:39 +08:00
dearLin 2e15919054 feat:二级封闭区域申请,一级临时车 2026-03-23 11:21:11 +08:00
dearLin 16b88246a0 feat:二级封闭区域申请,一级临时车 2026-03-23 10:10:25 +08:00
dearLin 4b130ccbc0 feat:二级封闭区域申请,一级临时车 2026-03-23 10:00:18 +08:00
dearLin 4b7207820e feat:二级封闭区域申请,一级临时人 2026-03-23 09:46:18 +08:00
dearLin 7c5765e0c8 feat:二级封闭区域申请,临时 2026-03-23 08:42:19 +08:00
dearLin 9aad4222fe feat:二级封闭区域申请,临时 2026-03-23 08:32:08 +08:00
dearLin 1fc8255b1b feat:参数问题 2026-03-20 16:35:50 +08:00
dearLin cf787542b3 feat:参数问题 2026-03-20 16:30:58 +08:00
dearLin 222b27abf7 feat:参数问题 2026-03-20 16:16:30 +08:00
dearLin 65d664b12a feat:参数问题 2026-03-20 16:14:27 +08:00
dearLin 4779ade9fd feat:封闭车辆的审批 2026-03-20 13:36:34 +08:00
dearLin 74c1eda8be feat:封闭车辆的申请与分页 2026-03-20 11:24:54 +08:00
dearLin 95f9fba705 feat:封闭车辆的申请与分页 2026-03-20 11:21:07 +08:00
dearLin 6a4e893873 feat(closedArea): add currentUserCanAudit logic for car apply 2026-03-20 11:00:08 +08:00
dearLin 211b07cdff feat(closedArea): refactor ClosedAreaCarApplyRepositoryImpl listPage with menuPerms 2026-03-20 10:53:40 +08:00
dearLin 87d6e2fb97 feat:封闭车辆的申请审批初始化 2026-03-20 10:39:51 +08:00
dearLin b1f1532c92 feat(closedArea): add currentUserCanAudit logic in query 2026-03-20 10:06:07 +08:00
dearLin c3b0bc977c feat:封闭区域人员申请、审批、授权 2026-03-20 09:57:32 +08:00
dearLin e724eadebb feat:封闭区域人员申请、审批、授权 2026-03-20 09:22:59 +08:00
dearLin 9e4ac5e95e feat:封闭区域人员申请、审批、授权 2026-03-19 18:00:55 +08:00
dearLin 677c5bfa76 feat:相关方人员权限记录 2026-03-18 16:08:14 +08:00
dearLin 461d186534 feat:相关方人员权限记录 2026-03-18 16:06:05 +08:00
dearLin bb7aa15f73 feat:临时访客车辆,二维码扫码查询审批进度 2026-03-18 09:24:16 +08:00
dearLin 38a4991c61 feat:黑名单功能完善 2026-03-17 18:08:59 +08:00
dearLin 169e601dd1 feat:审批时间 2026-03-17 17:14:33 +08:00
dearLin b971c628e2 feat:审批时间 2026-03-17 14:39:33 +08:00
dearLin fc928f1f11 feat:审批时间 2026-03-17 13:56:03 +08:00
dearLin 33fd3ce749 feat:分公司统计 2026-03-17 13:41:43 +08:00
dearLin 5e8c2d8772 feat:分公司统计 2026-03-16 18:12:56 +08:00
dearLin 52ede3a50e feat:口门相关管理 2026-03-16 17:43:25 +08:00
dearLin 6cfd3a6fcf feat:口门相关管理 2026-03-16 17:17:49 +08:00
dearLin ae80b0fb4f feat:股份人员及车辆管理 2026-03-16 15:20:28 +08:00
dearLin 8c83eac37e feat:个人车辆申请 2026-03-16 15:00:54 +08:00
dearLin 539797753c feat:个人车辆申请 2026-03-16 14:51:02 +08:00
dearLin c1c9b19302 feat:个人车辆详情 2026-03-16 11:16:04 +08:00
dearLin c7cf2ecabc feat:相关方、临时人员门禁申请 审批 2026-03-16 10:39:47 +08:00
dearLin 45c25c8c01 feat:相关方、临时人员门禁申请 审批 2026-03-13 11:18:26 +08:00
dearLin 4cc55b5e55 feat:相关方、临时访客人员门禁申请 2026-03-13 09:12:38 +08:00
dearLin 53bad7cf41 feat:相关方人员门禁申请 2026-03-12 11:23:47 +08:00
dearLin c9a9541e96 feat:相关方人员门禁申请 2026-03-12 11:21:27 +08:00
dearLin bc3016fe0a feat:车辆拉黑与违规登记搜索条件 2026-03-11 16:14:25 +08:00
dearLin b629000901 feat:车辆拉黑与违规登记搜索条件 2026-03-11 15:30:47 +08:00
dearLin 9bfe085ebb feat:车辆拉黑与违规登记 2026-03-11 15:19:17 +08:00
dearLin 6eb57bfcbe feat:车辆申请与审批完善搜索条件 2026-03-10 17:06:01 +08:00
dearLin 2a64522502 feat:车辆申请与审批 2026-03-10 15:55:35 +08:00
dearLin 8ab65b0da3 feat:一级口门信息管理 2026-03-09 13:32:34 +08:00
dearLin 3a8bd3361c feat:初始化门禁 2026-03-09 11:44:40 +08:00
dearLin eae5d090a0 feat:初始化门禁 2026-03-09 09:43:40 +08:00
dearLin b2538a5032 feat:初始化门禁 2026-03-06 16:44:41 +08:00
dearLin d0b74ef993 feat:初始化门禁 2026-03-06 16:21:51 +08:00
dearLin 5dadfc06f1 feat:完善门禁审批人功能 2026-01-06 13:51:12 +08:00
guoyuepeng 429446edb7 1.一级口门审批 2025-12-31 08:42:04 +08:00
guoyuepeng 679297530d 1.一级口门审批 2025-12-19 09:24:38 +08:00
guoyuepeng 414f481fce 1.一级口门审批 2025-12-19 09:24:27 +08:00
guoyuepeng 2f155e0957 1.一级口门审批 2025-12-19 08:51:34 +08:00
guoyuepeng 6ad47732ee 1.一级审批.1 2025-12-18 16:46:57 +08:00
guoyuepeng 80755ced13 1.口门门禁审批人管理 2025-12-18 14:09:33 +08:00
guoyuepeng c2b52adacc Merge pull request 'master' (#3) from master into koumen
Reviewed-on: #3
2025-12-18 09:45:16 +08:00
guoyuepeng c768c040cb 1.提交 2025-12-17 09:04:52 +08:00
guoyuepeng 910d36317b 1.提交 2025-12-16 17:59:27 +08:00
guoyuepeng 512280c5aa 1.口门门禁-优化黑名单管理 2025-11-27 11:07:05 +08:00
guoyuepeng 1988e09c62 1.口门门禁-测试1 2025-11-26 16:25:17 +08:00
guoyuepeng 809c3b7ffe 1.口门门禁-黑名单管理 2025-11-22 09:41:07 +08:00
guoyuepeng e5c0e4f9ba 1.口门门禁-违规记录 2025-11-22 09:21:42 +08:00
guoyuepeng b050ca0bd6 1.口门门禁-违规记录和黑名单初始化 2025-11-21 17:01:08 +08:00
guoyuepeng 8c52107808 1.口门门禁-增加车辆类型 2025-11-21 09:53:29 +08:00
guoyuepeng 2d753fc63b 1.口门门禁-增加车辆类型 2025-11-21 09:22:24 +08:00
guoyuepeng ccd008d33c 1.口门门禁-检查部门获取详情信息 2025-11-21 09:16:18 +08:00
guoyuepeng fd8e03cabb 1.口门门禁-检查部门初始化-新增部门修改,删除 2025-11-20 18:27:36 +08:00
guoyuepeng 30403abd28 1.口门门禁-检查部门初始化-新增部门车辆信息 2025-11-20 16:30:59 +08:00
guoyuepeng 3c84472af5 1.口门门禁-检查部门初始化,错误修改 2025-11-20 15:43:48 +08:00
guoyuepeng 96d1c364df 1.口门门禁-检查部门初始化 2025-11-20 15:30:44 +08:00
guoyuepeng 4324babb91 1.口门门禁-获取登录人的审批列表 2025-11-20 14:47:09 +08:00
guoyuepeng f3b1043092 1.口门门禁-调试接口 2025-11-19 18:23:15 +08:00
guoyuepeng d2aedbf4a5 1.口门门禁-开启和禁用 2025-11-19 16:54:50 +08:00
guoyuepeng 8cb2294b0d 1.口门门禁-审核和审核记录 2025-11-19 15:32:07 +08:00
guoyuepeng dcb0643a03 1.口门门禁-车辆信息查询等接口 2025-11-19 13:49:41 +08:00
guoyuepeng b5a5405836 1.口门门禁-审批流程申请1 2025-11-18 17:07:31 +08:00
guoyuepeng 9599de6232 1.口门门禁-审批流程初始化 2025-11-18 14:18:42 +08:00
guoyuepeng 2929a7fc31 Merge pull request 'feat(web): 新增车辆和刷卡记录统计功能- 在 MkmjAreaController 和 MkmjPassageController 中添加 statistics 接口' (#2) from master into koumen
Reviewed-on: #2
2025-11-18 14:16:15 +08:00
guoyuepeng 2b4b8694d2 1.口门门禁监-审批修改 2025-11-18 11:39:14 +08:00
guoyuepeng 2b927c7fd0 1.口门门禁监管端的新增和逻辑删除 2025-11-18 11:36:54 +08:00
guoyuepeng d6c197873e Merge pull request 'refactor(core):重构门禁系统相关模块' (#1) from master into koumen
Reviewed-on: #1
2025-11-17 17:59:51 +08:00
guoyuepeng 2a881522f6 1.口门门禁车辆审批人初始化 2025-11-17 17:57:20 +08:00
guoyuepeng 0b4ef50484 1.车辆信息维护. 2025-11-17 10:52:29 +08:00
guoyuepeng 33a992429e 1.口门门禁的审批人管理 2025-11-15 11:42:01 +08:00
727 changed files with 36685 additions and 5885 deletions

6
.gitignore vendored
View File

@ -4,6 +4,7 @@ target/
!**/src/test/**/target/
### IntelliJ IDEA ###
.idea
.idea/modules.xml
.idea/jarRepositories.xml
.idea/compiler.xml
@ -11,7 +12,7 @@ target/
*.iws
*.iml
*.ipr
.sisyphus
### Eclipse ###
.apt_generated
.classpath
@ -35,4 +36,5 @@ build/
.vscode/
### Mac OS ###
.DS_Store
.DS_Store
/start/src/main/resources/templates/

8
.idea/.gitignore vendored Normal file
View File

@ -0,0 +1,8 @@
# 默认忽略的文件
/shelf/
/workspace.xml
# 基于编辑器的 HTTP 客户端请求
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

8
.idea/ProjectStorage.xml Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectStorage">
<option name="folderId" value="17b381cfb15336" />
<option name="path" value="海神女的私有团队-&gt;Gbs港务局-&gt;可视化大屏-&gt;口门门禁" />
<option name="projectId" value="35be46" />
</component>
</project>

17
.idea/dataSources.xml Normal file
View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DataSourceManagerImpl" format="xml" multifile-model="true">
<data-source source="LOCAL" name="@nlb-kd2xz70qhllfet2koj.cn-beijing.nlb.aliyuncsslb.com" uuid="bae719c6-3357-4872-a8b5-26488c89acf2">
<driver-ref>mysql.8</driver-ref>
<synchronize>true</synchronize>
<jdbc-driver>com.mysql.cj.jdbc.Driver</jdbc-driver>
<jdbc-url>jdbc:mysql://nlb-kd2xz70qhllfet2koj.cn-beijing.nlb.aliyuncsslb.com:33068</jdbc-url>
<jdbc-additional-properties>
<property name="com.intellij.clouds.kubernetes.db.host.port" />
<property name="com.intellij.clouds.kubernetes.db.enabled" value="false" />
<property name="com.intellij.clouds.kubernetes.db.container.port" />
</jdbc-additional-properties>
<working-dir>$ProjectFileDir$</working-dir>
</data-source>
</component>
</project>

View File

@ -0,0 +1,585 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="EasyCodeTableSetting">
<option name="tableInfoMap">
<map>
<entry key="integrated_yjb.tb_iron_monitoring_target">
<value>
<TableInfoDTO>
<option name="comment" value="监控指标表" />
<option name="fullColumn">
<list>
<ColumnInfoDTO>
<option name="comment" value="主键" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="monitoringId" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="指标编码" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="targetCode" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="所属设备编码" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="equipCode" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="设备id" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="equipmentId" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="指标名称" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="targetName" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="指标类别" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="targetType" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="指标采集点位置" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="targetPlace" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="计量单位 模拟量必填" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="targetUnit" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="高报阈值" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="thresholdUpLimit" />
<option name="type" value="java.lang.Double" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="高高报阈值" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="thresholdUpUpLimit" />
<option name="type" value="java.lang.Double" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="低报阈值" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="thresholdDownLimit" />
<option name="type" value="java.lang.Double" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="低低报阈值" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="thresholdDownDownLimit" />
<option name="type" value="java.lang.Double" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="量程上限 模拟量指标需要填写" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="rangeUp" />
<option name="type" value="java.lang.Double" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="量程下限 模拟量指标需要填写" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="rangeDown" />
<option name="type" value="java.lang.Double" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="描述" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="targetDescription" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="位号" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="bitNo" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="信号类型1:模拟量; 2:开关量" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="signalType" />
<option name="type" value="java.lang.Integer" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="开关量报警值" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="alarmValue" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="指标停用状态0:停用 ;1 正常使用" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="targetStatus" />
<option name="type" value="java.lang.Integer" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="企业id" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="corpinfoId" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="添加人" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="creator" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="添加时间" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="creattime" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="修改人" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="operator" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="修改时间" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="operattime" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="是否删除(0:有效 1删除)" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="isdelete" />
<option name="type" value="java.lang.Integer" />
</ColumnInfoDTO>
</list>
</option>
<option name="name" value="TbIronMonitoringTarget" />
<option name="preName" value="" />
<option name="saveModelName" value="integrated_yjb" />
<option name="savePackageName" value="com.zcloud" />
<option name="savePath" value="./src/main/java/com/zcloud/e2myBatisP" />
<option name="templateGroupName" value="zcloud" />
</TableInfoDTO>
</value>
</entry>
<entry key="new_template.sys_user2">
<value>
<TableInfoDTO>
<option name="fullColumn">
<list>
<ColumnInfoDTO>
<option name="comment" value="用户ID" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="userId" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="用户名" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="username" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="密码" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="password" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="姓名" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="name" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="角色ID" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="roleId" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="最近登录时间" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="lastLogin" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="IP" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="ip" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="状态0.正常 99.锁定 2密码错误次数超过当天限制" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="status" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="备注" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="bz" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="皮肤" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="skin" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="邮箱" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="email" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="编码" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="number" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="电话" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="phone" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="副职角色ID组" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="roleIds" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="部门ID" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="departmentId" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="企业" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="corpinfoId" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="小程序菜单ID组" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="funIds" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="微信码" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="appid" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="岗位" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="postId" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="是否主账号" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="ismain" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="登录错误次数" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="errorCount" />
<option name="type" value="java.lang.Integer" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="人员在部门中的排序" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="sort" />
<option name="type" value="java.lang.Integer" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="在线学习人员类别" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="learnercategory" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="人员头像数据前缀" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="useravatarprefix" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="人员头像数据" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="useravatarurl" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="倒班类型-1级" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="shiftdutyone" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="倒班类型-2级" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="shiftdutytwo" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="工作状态持续时间(天)(上班或休班)" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="duration" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="工作状态 1-上班 2-休班" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="workstatus" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="当前工作周期数" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="workperiod" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="isRecorder" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="人员类型" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="personnelType" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="是否为隐患确认人0否1是" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="isHazardconfirmer" />
<option name="type" value="java.lang.Integer" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="是否为临时访问审核人(01是)" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="isAccessauditor" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="是否在线学习人员" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="isOnlinelearning" />
<option name="type" value="java.lang.Integer" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="人员类型" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="personType" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="emis对接人员" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="jcr" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="推送id" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="pushCid" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="工号(人员定位使用)" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="empno" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="曹妃甸数据人员状态 0企业端 1监管端 此字段用于港务局给曹妃甸发起安全环保检查选择人员 只选曹妃甸该字段值为1的人员" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="cfdStatus" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="卡号(人员定位使用)" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="cardno" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="人员标识用作手机app登录12.15新加如需删除请联系王轩)" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="userIdentity" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="baseimgpath" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="backendaddr" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="门口门禁人员编号(门口门禁使用)" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="mkmjcard" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="是否推送到中台" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="ispush" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="1监管2企业3相关方" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="userType" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="是否在人资系统存在(0未确认1通过姓名和手机号确认2用户已手动确认3人资修改人员)" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="inHrUser" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="是否删除0否1是" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="isDelete" />
<option name="type" value="java.lang.Integer" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="创建人" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="creator" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="创建时间" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="createTime" />
<option name="type" value="java.util.Date" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="修改人" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="operat" />
<option name="type" value="java.lang.String" />
</ColumnInfoDTO>
<ColumnInfoDTO>
<option name="comment" value="修改时间" />
<option name="custom" value="false" />
<option name="ext" value="{}" />
<option name="name" value="operatTime" />
<option name="type" value="java.util.Date" />
</ColumnInfoDTO>
</list>
</option>
<option name="name" value="SysUser2" />
<option name="preName" value="" />
<option name="saveModelName" value="regulatory_gwj_2.0" />
<option name="savePackageName" value="com.zcloud.modules.sys.entity" />
<option name="savePath" value="./src/main/java/com/zcloud/modules/sys/entity" />
<option name="templateGroupName" value="zcloud" />
</TableInfoDTO>
</value>
</entry>
</map>
</option>
</component>
</project>

15
.idea/encodings.xml Normal file
View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding" native2AsciiForPropertiesFiles="true" defaultCharsetForPropertiesFiles="UTF-8">
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/start/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/start/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/web-adapter/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/web-app/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/web-client/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/web-domain/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/web-infrastructure/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/web-infrastructure/src/main/resources" charset="UTF-8" />
</component>
</project>

View File

@ -0,0 +1,73 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="AliAccessStaticViaInstance" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AliArrayNamingShouldHaveBracket" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AliControlFlowStatementWithoutBraces" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AliDeprecation" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AliEqualsAvoidNull" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AliLongLiteralsEndingWithLowercaseL" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AliMissingOverrideAnnotation" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AliWrapperTypeEquality" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAbstractClassShouldStartWithAbstractNaming" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAbstractMethodOrInterfaceMethodMustUseJavadoc" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAvoidApacheBeanUtilsCopy" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAvoidCallStaticSimpleDateFormat" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAvoidCommentBehindStatement" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAvoidComplexCondition" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAvoidConcurrentCompetitionRandom" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAvoidDoubleOrFloatEqualCompare" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAvoidManuallyCreateThread" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAvoidMissUseOfMathRandom" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAvoidNegationOperator" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAvoidNewDateGetTime" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAvoidPatternCompileInMethod" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAvoidReturnInFinally" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAvoidStartWithDollarAndUnderLineNaming" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAvoidUseTimer" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaBigDecimalAvoidDoubleConstructor" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaBooleanPropertyShouldNotStartWithIs" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaClassCastExceptionWithSubListToArrayList" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaClassCastExceptionWithToArray" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaClassMustHaveAuthor" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaClassNamingShouldBeCamel" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaCollectionInitShouldAssignCapacity" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaCommentsMustBeJavadocFormat" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaConcurrentExceptionWithModifyOriginSubList" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaConstantFieldShouldBeUpperCase" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaCountDownShouldInFinally" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaDontModifyInForeachCircle" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaEnumConstantsMustHaveComment" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaExceptionClassShouldEndWithException" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaIbatisMethodQueryForList" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaLockShouldWithTryFinally" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaLowerCamelCaseVariableNaming" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaMethodReturnWrapperType" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaMethodTooLong" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaPackageNaming" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaPojoMustOverrideToString" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaPojoMustUsePrimitiveField" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaPojoNoDefaultValue" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaRemoveCommentedCode" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaServiceOrDaoClassShouldEndWithImpl" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaSneakyThrowsWithoutExceptionType" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaStringConcat" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaSwitchExpression" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaSwitchStatement" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaTestClassShouldEndWithTestNaming" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaThreadLocalShouldRemove" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaThreadPoolCreation" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaThreadShouldSetName" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaTransactionMustHaveRollback" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaUndefineMagicConstant" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaUnsupportedExceptionWithModifyAsList" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaUseQuietReferenceNotation" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaUseRightCaseForDateFormat" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AutoCloseableResource" enabled="true" level="WARNING" enabled_by_default="true">
<option name="METHOD_MATCHER_CONFIG" value="java.util.Formatter,format,java.io.Writer,append,com.google.common.base.Preconditions,checkNotNull,org.hibernate.Session,close,java.io.PrintWriter,printf,java.io.PrintStream,printf,java.lang.foreign.Arena,ofAuto,java.lang.foreign.Arena,global,cn.hutool.http.HttpRequest,execute" />
</inspection_tool>
<inspection_tool class="Eslint" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="MapOrSetKeyShouldOverrideHashCodeEquals" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="SpringJavaInjectionPointsAutowiringInspection" enabled="false" level="ERROR" enabled_by_default="false" />
</profile>
</component>

12
.idea/misc.xml Normal file
View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="MavenProjectsManager">
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/pom.xml" />
</list>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK" />
</project>

124
.idea/uiDesigner.xml Normal file
View File

@ -0,0 +1,124 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Palette2">
<group name="Swing">
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
</item>
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
</item>
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.svg" removable="false" auto-create-binding="false" can-attach-label="true">
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
</item>
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
<initial-values>
<property name="text" value="Button" />
</initial-values>
</item>
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="RadioButton" />
</initial-values>
</item>
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="CheckBox" />
</initial-values>
</item>
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
<initial-values>
<property name="text" value="Label" />
</initial-values>
</item>
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
</item>
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
</item>
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
<preferred-size width="-1" height="20" />
</default-constraints>
</item>
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
</item>
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
</item>
</group>
</component>
</project>

6
.idea/vcs.xml Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

1832
api-doc.md Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,3 @@
2026-07-23 00:09:57 [com.xxl.job.core.thread.JobThread#run]-[130]-[Thread-176] <br>----------- xxl-job job execute start -----------<br>----------- Param:null
2026-07-23 00:09:58 [com.xxl.job.core.thread.JobThread#run]-[176]-[Thread-176] <br>----------- xxl-job job execute end(finish) -----------<br>----------- Result: handleCode=200, handleMsg = null
2026-07-23 00:09:58 [com.xxl.job.core.thread.TriggerCallbackThread#callbackLog]-[197]-[xxl-job, executor TriggerCallbackThread] <br>----------- xxl-job job callback finish.

View File

@ -0,0 +1,3 @@
2026-07-23 00:13:57 [com.xxl.job.core.thread.JobThread#run]-[130]-[Thread-177] <br>----------- xxl-job job execute start -----------<br>----------- Param:null
2026-07-23 00:13:57 [com.xxl.job.core.thread.JobThread#run]-[176]-[Thread-177] <br>----------- xxl-job job execute end(finish) -----------<br>----------- Result: handleCode=200, handleMsg = null
2026-07-23 00:13:57 [com.xxl.job.core.thread.TriggerCallbackThread#callbackLog]-[197]-[xxl-job, executor TriggerCallbackThread] <br>----------- xxl-job job callback finish.

View File

@ -0,0 +1,3 @@
2026-07-23 00:19:57 [com.xxl.job.core.thread.JobThread#run]-[130]-[Thread-178] <br>----------- xxl-job job execute start -----------<br>----------- Param:null
2026-07-23 00:19:57 [com.xxl.job.core.thread.JobThread#run]-[176]-[Thread-178] <br>----------- xxl-job job execute end(finish) -----------<br>----------- Result: handleCode=200, handleMsg = null
2026-07-23 00:19:57 [com.xxl.job.core.thread.TriggerCallbackThread#callbackLog]-[197]-[xxl-job, executor TriggerCallbackThread] <br>----------- xxl-job job callback finish.

View File

@ -0,0 +1,3 @@
2026-07-23 00:24:57 [com.xxl.job.core.thread.JobThread#run]-[130]-[Thread-179] <br>----------- xxl-job job execute start -----------<br>----------- Param:null
2026-07-23 00:24:57 [com.xxl.job.core.thread.JobThread#run]-[176]-[Thread-179] <br>----------- xxl-job job execute end(finish) -----------<br>----------- Result: handleCode=200, handleMsg = null
2026-07-23 00:24:57 [com.xxl.job.core.thread.TriggerCallbackThread#callbackLog]-[197]-[xxl-job, executor TriggerCallbackThread] <br>----------- xxl-job job callback finish.

View File

@ -0,0 +1,3 @@
2026-07-23 00:59:57 [com.xxl.job.core.thread.JobThread#run]-[130]-[Thread-180] <br>----------- xxl-job job execute start -----------<br>----------- Param:null
2026-07-23 00:59:57 [com.xxl.job.core.thread.JobThread#run]-[176]-[Thread-180] <br>----------- xxl-job job execute end(finish) -----------<br>----------- Result: handleCode=200, handleMsg = null
2026-07-23 00:59:57 [com.xxl.job.core.thread.TriggerCallbackThread#callbackLog]-[197]-[xxl-job, executor TriggerCallbackThread] <br>----------- xxl-job job callback finish.

View File

@ -0,0 +1,3 @@
2026-07-25 00:09:57 [com.xxl.job.core.thread.JobThread#run]-[130]-[Thread-179] <br>----------- xxl-job job execute start -----------<br>----------- Param:null
2026-07-25 00:09:58 [com.xxl.job.core.thread.JobThread#run]-[176]-[Thread-179] <br>----------- xxl-job job execute end(finish) -----------<br>----------- Result: handleCode=200, handleMsg = null
2026-07-25 00:09:58 [com.xxl.job.core.thread.TriggerCallbackThread#callbackLog]-[197]-[xxl-job, executor TriggerCallbackThread] <br>----------- xxl-job job callback finish.

View File

@ -0,0 +1,3 @@
2026-07-25 00:13:57 [com.xxl.job.core.thread.JobThread#run]-[130]-[Thread-180] <br>----------- xxl-job job execute start -----------<br>----------- Param:null
2026-07-25 00:13:57 [com.xxl.job.core.thread.JobThread#run]-[176]-[Thread-180] <br>----------- xxl-job job execute end(finish) -----------<br>----------- Result: handleCode=200, handleMsg = null
2026-07-25 00:13:57 [com.xxl.job.core.thread.TriggerCallbackThread#callbackLog]-[197]-[xxl-job, executor TriggerCallbackThread] <br>----------- xxl-job job callback finish.

View File

@ -0,0 +1,3 @@
2026-07-25 00:19:57 [com.xxl.job.core.thread.JobThread#run]-[130]-[Thread-181] <br>----------- xxl-job job execute start -----------<br>----------- Param:null
2026-07-25 00:19:57 [com.xxl.job.core.thread.JobThread#run]-[176]-[Thread-181] <br>----------- xxl-job job execute end(finish) -----------<br>----------- Result: handleCode=200, handleMsg = null
2026-07-25 00:19:57 [com.xxl.job.core.thread.TriggerCallbackThread#callbackLog]-[197]-[xxl-job, executor TriggerCallbackThread] <br>----------- xxl-job job callback finish.

View File

@ -0,0 +1,3 @@
2026-07-25 00:24:57 [com.xxl.job.core.thread.JobThread#run]-[130]-[Thread-182] <br>----------- xxl-job job execute start -----------<br>----------- Param:null
2026-07-25 00:24:57 [com.xxl.job.core.thread.JobThread#run]-[176]-[Thread-182] <br>----------- xxl-job job execute end(finish) -----------<br>----------- Result: handleCode=200, handleMsg = null
2026-07-25 00:24:57 [com.xxl.job.core.thread.TriggerCallbackThread#callbackLog]-[197]-[xxl-job, executor TriggerCallbackThread] <br>----------- xxl-job job callback finish.

View File

@ -0,0 +1,3 @@
2026-07-25 00:59:57 [com.xxl.job.core.thread.JobThread#run]-[130]-[Thread-183] <br>----------- xxl-job job execute start -----------<br>----------- Param:null
2026-07-25 00:59:57 [com.xxl.job.core.thread.JobThread#run]-[176]-[Thread-183] <br>----------- xxl-job job execute end(finish) -----------<br>----------- Result: handleCode=200, handleMsg = null
2026-07-25 00:59:57 [com.xxl.job.core.thread.TriggerCallbackThread#callbackLog]-[197]-[xxl-job, executor TriggerCallbackThread] <br>----------- xxl-job job callback finish.

View File

@ -0,0 +1,3 @@
2026-07-26 00:09:58 [com.xxl.job.core.thread.JobThread#run]-[130]-[Thread-184] <br>----------- xxl-job job execute start -----------<br>----------- Param:null
2026-07-26 00:09:58 [com.xxl.job.core.thread.JobThread#run]-[176]-[Thread-184] <br>----------- xxl-job job execute end(finish) -----------<br>----------- Result: handleCode=200, handleMsg = null
2026-07-26 00:09:58 [com.xxl.job.core.thread.TriggerCallbackThread#callbackLog]-[197]-[xxl-job, executor TriggerCallbackThread] <br>----------- xxl-job job callback finish.

View File

@ -0,0 +1,3 @@
2026-07-26 00:13:58 [com.xxl.job.core.thread.JobThread#run]-[130]-[Thread-185] <br>----------- xxl-job job execute start -----------<br>----------- Param:null
2026-07-26 00:13:58 [com.xxl.job.core.thread.JobThread#run]-[176]-[Thread-185] <br>----------- xxl-job job execute end(finish) -----------<br>----------- Result: handleCode=200, handleMsg = null
2026-07-26 00:13:58 [com.xxl.job.core.thread.TriggerCallbackThread#callbackLog]-[197]-[xxl-job, executor TriggerCallbackThread] <br>----------- xxl-job job callback finish.

View File

@ -0,0 +1,3 @@
2026-07-26 00:19:58 [com.xxl.job.core.thread.JobThread#run]-[130]-[Thread-186] <br>----------- xxl-job job execute start -----------<br>----------- Param:null
2026-07-26 00:19:58 [com.xxl.job.core.thread.JobThread#run]-[176]-[Thread-186] <br>----------- xxl-job job execute end(finish) -----------<br>----------- Result: handleCode=200, handleMsg = null
2026-07-26 00:19:58 [com.xxl.job.core.thread.TriggerCallbackThread#callbackLog]-[197]-[xxl-job, executor TriggerCallbackThread] <br>----------- xxl-job job callback finish.

View File

@ -0,0 +1,3 @@
2026-07-26 00:24:58 [com.xxl.job.core.thread.JobThread#run]-[130]-[Thread-187] <br>----------- xxl-job job execute start -----------<br>----------- Param:null
2026-07-26 00:24:58 [com.xxl.job.core.thread.JobThread#run]-[176]-[Thread-187] <br>----------- xxl-job job execute end(finish) -----------<br>----------- Result: handleCode=200, handleMsg = null
2026-07-26 00:24:58 [com.xxl.job.core.thread.TriggerCallbackThread#callbackLog]-[197]-[xxl-job, executor TriggerCallbackThread] <br>----------- xxl-job job callback finish.

View File

@ -0,0 +1,3 @@
2026-07-26 00:59:57 [com.xxl.job.core.thread.JobThread#run]-[130]-[Thread-188] <br>----------- xxl-job job execute start -----------<br>----------- Param:null
2026-07-26 00:59:57 [com.xxl.job.core.thread.JobThread#run]-[176]-[Thread-188] <br>----------- xxl-job job execute end(finish) -----------<br>----------- Result: handleCode=200, handleMsg = null
2026-07-26 00:59:57 [com.xxl.job.core.thread.TriggerCallbackThread#callbackLog]-[197]-[xxl-job, executor TriggerCallbackThread] <br>----------- xxl-job job callback finish.

View File

@ -0,0 +1,3 @@
2026-07-27 00:09:54 [com.xxl.job.core.thread.JobThread#run]-[130]-[Thread-189] <br>----------- xxl-job job execute start -----------<br>----------- Param:null
2026-07-27 00:09:54 [com.xxl.job.core.thread.JobThread#run]-[176]-[Thread-189] <br>----------- xxl-job job execute end(finish) -----------<br>----------- Result: handleCode=200, handleMsg = null
2026-07-27 00:09:54 [com.xxl.job.core.thread.TriggerCallbackThread#callbackLog]-[197]-[xxl-job, executor TriggerCallbackThread] <br>----------- xxl-job job callback finish.

View File

@ -0,0 +1,3 @@
2026-07-27 00:13:53 [com.xxl.job.core.thread.JobThread#run]-[130]-[Thread-190] <br>----------- xxl-job job execute start -----------<br>----------- Param:null
2026-07-27 00:13:53 [com.xxl.job.core.thread.JobThread#run]-[176]-[Thread-190] <br>----------- xxl-job job execute end(finish) -----------<br>----------- Result: handleCode=200, handleMsg = null
2026-07-27 00:13:53 [com.xxl.job.core.thread.TriggerCallbackThread#callbackLog]-[197]-[xxl-job, executor TriggerCallbackThread] <br>----------- xxl-job job callback finish.

View File

@ -0,0 +1,3 @@
2026-07-27 00:19:53 [com.xxl.job.core.thread.JobThread#run]-[130]-[Thread-191] <br>----------- xxl-job job execute start -----------<br>----------- Param:null
2026-07-27 00:19:53 [com.xxl.job.core.thread.JobThread#run]-[176]-[Thread-191] <br>----------- xxl-job job execute end(finish) -----------<br>----------- Result: handleCode=200, handleMsg = null
2026-07-27 00:19:53 [com.xxl.job.core.thread.TriggerCallbackThread#callbackLog]-[197]-[xxl-job, executor TriggerCallbackThread] <br>----------- xxl-job job callback finish.

View File

@ -0,0 +1,3 @@
2026-07-27 00:24:53 [com.xxl.job.core.thread.JobThread#run]-[130]-[Thread-192] <br>----------- xxl-job job execute start -----------<br>----------- Param:null
2026-07-27 00:24:53 [com.xxl.job.core.thread.JobThread#run]-[176]-[Thread-192] <br>----------- xxl-job job execute end(finish) -----------<br>----------- Result: handleCode=200, handleMsg = null
2026-07-27 00:24:53 [com.xxl.job.core.thread.TriggerCallbackThread#callbackLog]-[197]-[xxl-job, executor TriggerCallbackThread] <br>----------- xxl-job job callback finish.

View File

@ -0,0 +1,3 @@
2026-07-27 00:59:53 [com.xxl.job.core.thread.JobThread#run]-[130]-[Thread-193] <br>----------- xxl-job job execute start -----------<br>----------- Param:null
2026-07-27 00:59:54 [com.xxl.job.core.thread.JobThread#run]-[176]-[Thread-193] <br>----------- xxl-job job execute end(finish) -----------<br>----------- Result: handleCode=200, handleMsg = null
2026-07-27 00:59:54 [com.xxl.job.core.thread.TriggerCallbackThread#callbackLog]-[197]-[xxl-job, executor TriggerCallbackThread] <br>----------- xxl-job job callback finish.

24
pom.xml
View File

@ -15,11 +15,35 @@
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rocketmq</artifactId>
<version>${spring-cloud-alibaba.version}</version>
</dependency>
<dependency>
<groupId>com.zcloud.gbscommon</groupId>
<artifactId>zcloud_gbscommon</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.25</version>
</dependency>
<dependency>
<groupId>com.jjb.saas</groupId>
<artifactId>jjb-saas-framework-job</artifactId>
</dependency>
<!-- 大华 SDK -->
<dependency>
<groupId>com.dahuatech.icc</groupId>
<artifactId>java-sdk-oauth</artifactId>
<version>1.0.13.15</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>

373
project-analysis.md Normal file
View File

@ -0,0 +1,373 @@
# zcloud-gbs-primeport 项目梳理文档
## 一、项目概览
**系统名称**港口口门门禁管理系统primeport应用名 `zcloud-gbs-primeport`,网关前缀 `/primeport`
**技术栈**
- Spring Boot 2.6.6 + Spring Cloud AlibabaNacos 配置中心/服务发现)
- COLA 4.0 分层架构 + MyBatis-Plus + Druid + MySQL/PostgreSQL 双数据源
- Redis、RocketMQ、XXL-JOB、Flyway、Swagger、Hutool、fastjson
- 自研 jjb-saas 框架(网关/认证/系统客户端)
- 大华 ICC SDK`com.dahuatech.icc:java-sdk-oauth:1.0.13.15`
**分层架构**6 个 Maven 模块):
```
start(启动) ──> web-adapter(控制器) ──> web-app(业务编排) ──> web-client(API契约+DTO) ──> web-domain(领域模型)
│ │ │
└──────────────────────┴──> web-infrastructure(基础设施+第三方对接) ──> web-domain
```
调用链路示例:`Controller → ServiceImpl → Exe(命令执行器) → Gateway(领域接口) → GatewayImpl(基础设施) → Repository → Mapper → DB`
---
## 二、业务模块总览
系统按 **三类角色** 组织功能监管端JGD、分公司端FGS、相关方/驻港单位端XGF/ZGDW通过 `MenuEnum` 控制约 60 项菜单权限。
### 1. 一级口门基础管理
| 模块 | Controller | 核心职责 |
|------|-----------|---------|
| 口门信息 | MkmjController | 口门名称、级别(1一级/2二级)、类型(人行/车行/综合)、所属港区、经纬度 |
| 门禁通道 | MkmjPassageController | 通道类型、所属口门、状态 |
| 闸机管理 | MkmjGateController | 闸机标识、型号、所属通道 |
| 审批人 | MkmjApprovalUserController | 审批人企业/部门/岗位,人员/车辆/临时三类审核权限 |
| 摄像头 | VideoController | 绑定口门或闸机,移动/平台类型 |
| 刷卡记录 | MkmjSwipeCardRecordController | 接收大华推送的刷卡记录(`/dockSave`),分页查询 |
### 2. 封闭区域管理(二级口门)
| 模块 | Controller | 核心职责 |
|------|-----------|---------|
| 封闭区域 | ClosedAreaController | 树级结构(parentId)、按港区/管辖单位查询、统计 |
| 人员申请 | ClosedAreaPersonApplyController | 申请/审批/授权(含二级门禁)、随行人员管理 |
| 车辆申请 | ClosedAreaCarApplyController | 新增/分页/审批(auditFlag=2通过/3驳回) |
| 临时申请 | ClosedTmpApplyController | 统一入口,按 TmpApplyEnum 路由到4种申请类型 |
### 3. 车辆管理
| 模块 | Controller | 核心职责 |
|------|-----------|---------|
| 车辆申请 | VehicleApplyController | 9种车辆归属、长期录入、车牌校验、相关方授权 |
| 车辆审批 | VehicleAuditController | 待审批/审批记录/审批操作 |
| 车辆黑名单 | VehicleBlackController | 新增/分页/删除 |
| 车辆违规 | VehicleViolationsController | 违规记录,超阈值自动拉黑 |
| 车辆门禁信息 | VehicleMessageController | 审批通过的固化信息,用于门禁对接 |
| 车辆对接日志 | VehicleDockLogController | 一级/二级口门对接日志 |
### 4. 人员管理
| 模块 | Controller | 核心职责 |
|------|-----------|---------|
| 人员申请 | PersonApplyController | 相关方人员申请/审批/授权、临时访客H5申请、分公司人员管理 |
| 人员门禁信息 | PersonMessageController | 审批通过的人员信息,用于门禁对接 |
### 5. 电动车数据接入
| 模块 | Controller | 核心职责 |
|------|-----------|---------|
| 电动车基础信息 | EVehicleBasicInfoController | 车辆备案(长期/一次性/内部/临时)、EDW数据溯源 |
| 到离港信息 | EVehicleArrivalDepartureInfoController | 到达/离开闸口与时间记录 |
### 6. App 统计
| 模块 | Controller | 核心职责 |
|------|-----------|---------|
| App角标 | AppCountController | App端统计角标数据 |
---
## 三、核心业务流程
### 流程 A口门车辆申请全链路
```
申请提交 → VehicleApplyAddExe
├─ 按归属类型回填(股份个人车直接 mkmjPermission=1)
├─ 初始状态: auditFlag=1(待审), mkmjPermission=2(无权限)
├─ 插入 VehicleAuditE 审批记录(changeAfter快照)
└─ 推待办给审批人(RocketMQ)
修改 → VehicleApplyUpdateExe (锁定车型/车牌/归属不可改, 重置auditFlag=1, 记录变更对比)
审核 → VehicleAuditUpdateExe.audit
├─ 通过(2): mkmjPermission=1 → CarDockUtil同步一级车行
│ ├─ 临时/相关方车 → tmpVehicleSave(按港区portId)
│ └─ 内部车 → executeInternalVehicle(先删后存)
└─ 驳回(3): mkmjPermission=2
```
### 流程 B封闭区域车辆通行全链路
```
申请 → ClosedAreaCarApplyAddExe (回填用户信息, auditFlag=1, 推待办)
审批 → ClosedAreaCarApplyUpdateExe.auditCarApply
└─ 通过时 → TwoCarUtil.levelTwoCarCompanyByApplyId
├─ 二级海康: HKDeviceUtil.saveOrUpdCar + vehicleTopUp(当日有效)
└─ 一级车行: 先查vehicle_apply是否已有有效权限无则新增(不覆盖)
```
### 流程 C封闭区域人员授权链路最复杂
```
申请 → ClosedAreaPersonApplyAddExe (auditFlag=1, 推待办)
审核 → ClosedAreaPersonApplyUpdateExe.auditPersonApply
└─ 通过时 → TwoPersonUtil.levelTwoPeopleCompanyByApplyId (海康+大华同步)
授权 → ClosedAreaPersonApplyUpdateExe.authPerson
├─ 删旧auth+area重建auth+area(区域关联)
└─ mkmjPermission=1时 → OnePersonUtil:
├─ 查大华是否已有该身份证用户
├─ 无 → dockLongTermUserByUserCardAndFaceImg (账号hbqa+身份证, 当日有效)
└─ 有 → 保留不覆盖
```
### 流程 D车辆违规自动拉黑链路
```
违规录入 → VehicleViolationsAddExe
├─ 查历史违规数,若 (历史+1) >= 配置上限 → 自动拉黑
│ ├─ vehicleBlackGateway.saveIfAbsent
│ └─ vehicleApplyGateway.updateEvehicleBlockedByLicenceNo(...,1)
└─ 新增违规记录(处理状态=2未处理)
```
### 流程 E相关方人员申请链路
```
PersonApplyAddExe.xgfPersonSave
├─ personBelongType∈{1,2} → auditFlag=2(自动通过) + mkmjPermission=1
├─ 其他 → auditFlag=1(待审) + mkmjPermission=2
├─ 推待办
└─ 子表PersonApplyE批量保存(绑定主表XgfApplyPersonE)
```
---
## 四、第三方接口对接
### 对接系统总览
| # | 第三方系统 | 对接方式 | 用途 | 级别 |
|---|----------|---------|------|-----|
| 1 | 大华 ICC 门禁 | SDK + HTTP(RSA加密) | 一级人员门禁:用户创建/有效期/冻结 | 一级 |
| 2 | 海康威视门禁 | SDK(静态工具类) | 二级口门人员/车辆授权 | 二级 |
| 3 | 秦皇岛港车行系统 | Hutool HTTP POST | 一级口门车辆(内部/临时/黑名单) | 一级 |
| 4 | zcloud 用户中心 | Dubbo RPC | 用户信息、人脸图片base64 | 平台内 |
| 5 | 待办列表 MQ | RocketMQ | 审批待办推送/完成 | 平台内 |
| 6 | 大华刷卡推送 | HTTP 被动接收 | 刷卡记录入库 | 一级 |
### 1. 大华 ICC 对接(一级人员门禁)
**配置类**
- `web-domain/.../config/DaHuaOauthProperties.java``@ConfigurationProperties(prefix = "dahua.oauth")`host / clientId / clientSecret / username / password / http / port
- `web-domain/.../config/DaHuaSdkConfig.java`(注入 `OauthConfigUserPwdInfo` Bean
- `start/src/main/resources/sdk.yml``dahua.oauth` 配置
**对接工具类**
- `web-infrastructure/.../plan/mjDevice/OnePersonUtil.java`
- `web-infrastructure/.../plan/mjDevice/TwoPersonUtil.java`
- `web-infrastructure/.../plan/mjDevice/OauthUtil.java`
**核心方法**
- `dockLongTermUserByUserCardAndFaceImg` - 按身份证查用户,不存在则新增(含人脸图片、有效期)
- `expirationDateRefreshedUserCard` - 刷新用户门禁有效期
- `freezeByUserCard` - 用户冻结(2)/解冻(1)
- `getMkmjUserInfoByUserCard` - 按身份证批量查询用户
**OauthUtil 调用流程**
1. `getPublicKey()` - GET 公钥接口忽略SSL证书的 RestTemplate
2. `getToken()` - POST 获取 Token密码通过 RSA 加密)
3. `getGenerateId() / getGenerateIdList(idCount)` - 获取全局用户ID单个/批量)
4. `getDepartmentId() / getDepartmentIdList(idCount)` - 获取部门ID
5. `imgInspect(map)` - 图片质量检测,支持文件/URL/base64 三种格式
**配置项**Nacos 下发,`icc.*`
- `icc.clientId` / `icc.clientSecret` / `icc.username` / `icc.password`
- `icc.url` - ICC 基础地址
- `icc.publicKeyUrl` - 公钥获取地址
- `icc.request.getGenerateIdUrl` / `icc.request.getGenerateIdListUrl` - 全局用户ID接口
- `icc.request.imgInspectUrl` - 图片质检接口
- `icc.request.getDepartmentIdUrl` - 部门ID接口
### 2. 海康威视对接(二级口门)
**对接工具类**
- `web-infrastructure/.../plan/mjDevice/TwoCarUtil.java`
- `web-infrastructure/.../plan/mjDevice/TwoPersonUtil.java`
**核心方法**
- 车辆:
- `HKDeviceUtil.saveOrUpdCar(licenceNo, 0)` - 新增/更新车辆
- `HKDeviceUtil.vehicleTopUp(licenceNo, 0, hkIndexCode, khParkSysCode, startDate, endDate)` - 车辆授权充值
- 人员:
- `HKDeviceUtil.getUserListByPhone(phoneList)` - 按手机号查人限20人/次)
- `HKDeviceUtil.getUserListByUserCard(userCard)` - 按身份证查人
- `HKDeviceUtil.saveUser(name, cardNo, faceBase64, phone)` - 新增人员
- `HKDeviceUtil.authPersonArea(personIds, resourceInfos, startTime, endTime)` - 授权门禁范围限1000人/次)
**业务要点**
- 同步前通过 Dubbo `listBase64ByUrl` 把人脸URL转base64
- 随行人员一并同步授权
- 手机号查不到再用身份证查(处理手机号变更场景)
### 3. 秦皇岛港车行系统对接(一级口门车辆)
**对接工具类**
- `web-infrastructure/.../plan/mjDevice/OneLevelCarUtil.java`
- `web-infrastructure/.../plan/mjDevice/CarDockUtil.java`
**配置**
- `${kmmj.dockflag}` - 对接开关1=启用)
- `${oneLevelCar.prefix}` - 服务前缀
**接口列表**HTTP POST前缀 `HD_QHD_IGATE_1.0`
| 方法 | URL后缀 | 用途 |
|------|--------|------|
| internalVehicleSave | `/webresources/login/CTruck/qaSaveInternal` | 内部车辆保存 |
| internalVehicleRemove | `/webresources/login/CTruck/qaDeleteInternal` | 内部车辆删除 |
| tmpVehicleSave | `/webresources/login/CTruck/qaSaveTemp` | 临时车辆保存 |
| tmpVehicleRemove | `/webresources/login/CTruck/qaDeleTemp` | 临时车辆删除 |
| blackVehicleSave | `/webresources/login/CTruck/qaSaveBlack` | 黑名单新增 |
| blackVehicleRemove | `/webresources/login/CTruck/qaDeleteBlack` | 黑名单删除 |
**CarDockUtil 协调器**
- `execute(licenceNo)` - 临时/相关方车走 `tmpVehicleSave`
- `executeInternalVehicle(applyE)` - 内部车先 `internalVehicleRemove``internalVehicleSave`(覆盖更新)
- `executeBlackSave / executeBlackRemove` - 黑名单新增/删除
每次对接写入 `VehicleDockLogDO` 日志表level=1一级、dockFlag=2已对接、dockStatus=返回code、reasonsRefusal=返回msg
### 4. zcloud 用户中心Dubbo
通过 `@DubboReference ZcloudUserFacade`
| 调用位置 | 方法 | 用途 |
|---------|------|------|
| TwoPersonUtil | `listBase64ByUrl(zcloudUserImgQry)` | 根据人脸URL列表批量获取 base64 |
| ClosedAreaCarApplyAddExe | Dubbo 引用 | 闭区车辆申请新增时回填用户信息 |
| ClosedAreaPersonApplyAddExe | Dubbo 引用 | 闭区人员申请新增时回填用户信息 |
| ClosedAreaPersonApplyUpdateExe.authPerson | `getInfoByUserId(userId)` | 授权时获取用户身份证/姓名/人脸URL |
### 5. 待办列表 MQRocketMQ
依赖:`spring-cloud-starter-stream-rocketmq`,工具类 `TodoListEventPusherUtil`
| 触发时机 | 事件类型 | 场景 |
|---------|---------|------|
| 申请提交 | TodoListAddEvent | 车辆/闭区车辆/闭区人员申请 |
| 审批完成 | TodoListCompleteEvent | 车辆/闭区车辆/闭区人员审批 |
### 6. 大华刷卡记录推送(被动接收)
- **接收入口**`POST /primeport/mkmjSwipeCardRecord/dockSave`
- **数据结构**`SwipeRecordPushVo`(外层)→ `SwipeRecordPushInfo`info含节点编码/设备编号/报警时间/报警状态)→ `SwipeRecordPushExtend`extend含刷卡人详细信息/进出/开门结果/抓拍图/卡信息)
- **处理逻辑**Controller 将三层嵌套结构扁平化为 `MkmjSwipeCardRecordAddCmd`,调用 Service 入库到 `mkmj_swipe_card_record`
---
## 五、定时任务XXL-JOB
全部位于 `web-infrastructure/plan/` 目录,每日凌晨执行:
| 任务类 | Cron | 职责 | 调用 |
|-------|------|------|------|
| VehicleExpiredExpirationXxlJob | `0 10 0 * * ?` | 车辆过期处理(更新状态+关闭门禁权限) | 仅更新数据库,门禁移除已注释 |
| OneLevelUserXxlJon | `0 14 0 * * ?` | 一级人员门禁当日授权(相关方/临时访客) | `onePersonUtil.execute()` |
| VehicleXgfVehicleXxlJob | `0 15 0 * * ?` | 相关方/临时车辆当日可进港区判断+推送一级门禁 | `carDockUtil.execute(param)` |
| TwoLevelPersonXxlJob | `0 20 0 * * ?` | 二级门禁人员同步(含一级大华) | `twoPersonUtil.scheduledPeopleCompany()` |
| TwoLevelCarXxlJob | `0 25 0 * * ?` | 二级门禁车辆同步(含一级车行) | `twoCarUtil.scheduledCarCompany()` |
> 二级任务支持"单个异常跳过不影响其他"模式。
---
## 六、领域模型
| 实体 | 中文 | 关键字段 |
|------|------|---------|
| MkmjE | 门口信息 | mkmjName、mkmjLevel(1一级/2二级)、mkmjType(人行/车行/综合)、hgAuthArea、出入方向区域、经纬度、closedAreaId |
| MkmjPassageE | 通道 | passageName、passageType、mkmjId |
| MkmjGateE | 闸机 | gateNumber、gateName、gateType、passageId、mkmjId |
| MkmjApprovalUserE | 门禁审批人 | corpId/deptId/userId、人员/车辆/临时审核权限 |
| MkmjSwipeCardRecordE | 刷卡记录 | 节点/报警/通道/人员/卡号/进出/开门结果/抓拍图 |
| ClosedAreaE | 封闭区域 | parentId、hgAuthArea、closedAreaName、jurisdictionalCorpId、location |
| ClosedAreaPersonApplyE | 封闭区域人员申请 | personBelongType、一级/二级口门、closedAreaId、申请/审批信息、随行人员 |
| ClosedAreaCarApplyE | 封闭区域车辆申请 | carBelongType、车牌、一级/二级口门、行驶证、随行人员 |
| ClosedAreaFgsPersonAreaE | 分公司人员区域授权 | fgsPersonAuthId、closedAreaId |
| ClosedAreaFgsPersonAuthE | 分公司人员授权 | corpId、departmentId、userId、mkmjPermission |
| VehicleApplyE | 车辆申请 | 车牌/类型/所属类型(1-9)、授权范围、审核状态、访问时间、企业/部门/申请人/审批人 |
| VehicleAuditE | 车辆审批 | vehicleApplyId、batchType(普通/危化)、审批人、审批状态、变更前后 |
| VehicleBlackE | 车辆黑名单 | licenceNo、blockReason |
| VehicleViolationsE | 车辆违规 | vehicleId、violationType、location、illegalImagesId、processingStatus |
| VehicleMessageE | 车辆门禁对接信息 | vehicleApplyId、syncStatus、syncRemarks |
| VehicleDockLogE | 车辆对接日志 | level(1一级/2二级)、portArea(0全部/1东港/2西港)、dockFlag/dockStatus |
| PersonApplyE | 人员申请 | 企业/部门/人员、头像/手机/身份证 |
| XgfApplyPersonE | 相关方人员申请 | personBelongType、mkmjId、gateLevelAuthArea、审批/驳回信息 |
| PersonMessageE | 人员门禁对接信息 | personApplyId、syncStatus、syncRemarks |
| VideoE | 摄像头 | foreignId、deviceType(1口门/2闸机)、videoType(移动/平台) |
| EVehicleBasicInfoE | 一级口门车辆基础信息 | vehicleRecordId、备案字段、EDW数据溯源字段 |
| EVehicleArrivalDepartureInfoE | 一级口门车辆到离信息 | 到达/离开闸口与时间、车辆序列号 |
---
## 七、关键状态枚举
| 枚举类 | 值 | 说明 |
|-------|---|------|
| **AuditEnum** | 1审核中 / 2通过 / 3驳回 / 4无需审批(检查部门车) | 审批状态 |
| **VehicleBelongTypeEnum** | 1股份员工 / 2股份单位 / 3分公司员工 / 4分公司单位 / 5相关方 / 6临时 / 7检查部门 / 8驻港单位员工 / 9驻港单位公车 | 车辆归属类型 |
| **CloseCarBelongTypeEnum** | 1股份 / 2分公司 / 3相关方 / 4临时车 / 5分公司内部车 | 封闭区域车辆申请归属 |
| **TmpApplyEnum** | CAR_APPLY/PERSON_APPLY × 一级/二级 | 临时申请类型 |
| **FileTypeEnum** | File / url / base64 | 文件格式 |
| **SaveTypeEnum** | 保留 / 删除 / 检测通过保留 | 图片保存策略 |
| **MenuEnum** | 约60项JGD_*/FGS_*/XGS_*/ZGDW_* | 菜单与权限枚举 |
---
## 八、审批触发对接入口汇总
| 执行类 | 方法 | 触发对接 |
|-------|------|---------|
| VehicleAuditUpdateExe.audit | 车辆审批通过(auditStatus=2) | 临时/相关方车 → `carDockUtil.execute`;其他 → `carDockUtil.executeInternalVehicle` |
| VehicleBlackAddExe.execute | 车辆拉黑 | `carDockUtil.executeBlackSave` |
| VehicleBlackRemoveExe.execute | 车辆解除黑名单 | `carDockUtil.executeBlackRemove` |
| ClosedAreaCarApplyUpdateExe.auditCarApply | 闭区车辆审批通过 | `twoCarUtil.levelTwoCarCompanyByApplyId`(先二级海康,再一级车行) |
| ClosedAreaPersonApplyUpdateExe.auditPersonApply | 闭区人员审批通过 | `twoPersonUtil.levelTwoPeopleCompanyByApplyId`(二级海康+一级大华) |
| ClosedAreaPersonApplyUpdateExe.authPerson | 人员授权开启(mkmjPermission=1) | 查大华已有权限,没有则 `onePersonUtil.dockLongTermUserByUserCardAndFaceImg` |
---
## 九、配置文件结构
| 文件 | 作用 |
|------|------|
| bootstrap.yml | 主入口import prodnacos.yml + sdk.yml + swagger.yml |
| prodnacos.yml | 生产 Nacos 配置prod-nacos:8848namespace=jjb-dragonprofile=prod |
| nacos.yml | 测试 Nacos 配置192.168.20.100:30290profile=test |
| ds.yml | 多数据源配置MySQL(Druid) + PostgreSQL |
| sdk.yml | SDK网关路由、开放平台OpenAPI(SM2加密)、大华oauth配置 |
| swagger.yml | Swagger 文档开关与路径 |
**Nacos 共享配置**`config-common.yml`、`config-port.yml`、`config-mq.yml`、`config-log.yml`、`config-sdk-server.yml`、`config-actuator.yml`、`config-job.yml`、`config-mysql.yml`、`config-redis.yml`、`config-cache.yml`、`config-spring.yml`、`config-mybatis.yml`、`config-sdk.yml`、`config-flyway.yml` 以及 `${application.name}-conf.yml`
---
## 十、关键风险点
1. **硬编码凭据**OnePersonUtil/TwoPersonUtil 中大华 URL、用户名、密码、clientId/clientSecret 全部硬编码(`https://skqhdg.porthebei.com:9008/yjkmRy/`、`shuangkong`、`qinan@202604`),存在安全隐患
2. **对接开关失效**`dockFlag` 是 static 字段且默认 0`@Value` 注解被注释掉,无法通过配置切换对接开关
3. **有效期仅当日**:大华用户新增时有效期仅 `今天 00:00~23:59`,依赖每日定时任务刷新,任务中断则权限失效
4. **事务边界风险**外部调用Dubbo/HK/大华/MQ`@Transactional` 内执行,外部系统已写入的数据无法回滚,存在数据不一致风险
5. **不覆盖策略**:一级门禁对接普遍采用"先查再决定是否新增",避免覆盖已有长期权限;但二级海康按当日有效期充值
6. **电动车模块薄弱**:两个 Exe 均为纯 CRUD到离港记录未与基本信息做关联校验无状态机
7. **残留代码**ClosedAreaPersonApplyAddExe 含 main 方法Base64 测试ClosedAreaCountExe 的 corpId 过滤被注释
8. **架构不一致**MkmjApprovalUserAddExe 直接注入 Repository 而非 Gateway绕过了领域层抽象
9. **硬编码状态值**:部分 Exe 使用字面量(如 `1`、`equals(2)`)而非 AuditEnum 枚举,可读性差
10. **DaHuaSdkUtil 是占位类**login() 返回 null实际大华调用走的是 gbscommon 包中的 DaHuaDeviceCommon

View File

@ -30,6 +30,11 @@
<groupId>com.jjb.saas</groupId>
<artifactId>jjb-saas-framework-web</artifactId>
</dependency>
<dependency>
<groupId>com.dahuatech.icc</groupId>
<artifactId>java-sdk-oauth</artifactId>
<version>1.0.13.15</version>
</dependency>
</dependencies>
<build>

View File

@ -12,8 +12,8 @@ import org.springframework.boot.SpringApplication;
mapperPackages = {"com.zcloud.primeport.persistence.mapper"}
)
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}

View File

@ -0,0 +1,14 @@
dahua:
resource:
sync-enabled: true
sync-page-size: 200
subsystem: evo-accesscontrol
auto-match-by-name: true
oauth:
host: 123.183.159.35
client-id: 123.183.159.35
client-secret: 4edfdcd2-67e6-41db-a1ae-b98d47a70266
username: system
password: zcloud88888
http: false
port: 4443

View File

@ -2,5 +2,7 @@ spring:
config:
import:
- classpath:nacos.yml
# - classpath:prodnacos.yml
- classpath:sdk.yml
- classpath:swagger.yml
# - classpath:ds.yml

View File

@ -0,0 +1,54 @@
spring:
datasource:
mysql:
url: jdbc:mysql://${mysql.host}:${mysql.port}/${mysql.db}?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&allowMultiQueries=true&serverTimezone=Asia/Shanghai
username: ${mysql.username}
password: ${mysql.password}
type: com.alibaba.druid.pool.DruidDataSource
# 降级
# driver-class-name: com.mysql.cj.jdbc.Driver
driver-class-name: com.mysql.jdbc.Driver
initial-size: 6
min-idle: 1
maxActive: 100
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 300000
#Oracle需要打开注释
#validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
# 打开PSCache并且指定每个连接上PSCache的大小
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
# 配置监控统计拦截的filters去掉后监控界面sql无法统计'wall'用于防火墙
filters: stat,slf4j
# 通过connectProperties属性来打开mergeSql功能慢SQL记录
connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
wall:
multi-statement-allow: true
pgsql:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: org.postgresql.Driver # PG专属驱动
url: jdbc:postgresql://39.100.115.58:15431/postgres?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
username: postgres
password: DjIGYM8k0h
# PG专属Druid配置适配PG特性统一为驼峰格式匹配原有风格
initial-size: 6
min-idle: 1
maxActive: 100
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
validationQuery: SELECT 1 # PG必须配置连接检测语句MySQL可省略
filters: stat,slf4j # PG不兼容wall过滤器需移除
connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000

View File

@ -6,12 +6,16 @@ application:
version:
gateway: primeport
cn-name: 一级口门管理
server:
port: 80
debug: true
spring:
application:
name: ${application.name}${application.version}
profiles:
# 环境配置
active: test
active: test,local
cloud:
nacos:
config:
@ -20,13 +24,15 @@ spring:
file-extension: yml
shared-configs:
- config-common.yml
- config-port.yml
# - config-port.yml
- config-mq.yml
- config-log.yml
- config-sdk-server.yml
- config-actuator.yml
- config-job.yml
- config-mysql.yml
# - config-pgsql.yml
# - config-mysql-copy.yml
- config-redis.yml
- config-cache.yml
- config-spring.yml
@ -35,4 +41,4 @@ spring:
- config-flyway.yml
discovery:
server-addr: ${spring.cloud.nacos.config.server-addr}
namespace: ${spring.cloud.nacos.config.namespace}
namespace: ${spring.cloud.nacos.config.namespace}

View File

@ -1,36 +0,0 @@
management:
endpoints:
web:
base-path: /${application.gateway}${application.version}/actuator
enabled-by-default: true
endpoint:
health:
enabled: true
info:
enabled: false
auditevents:
enabled: false
metrics:
enabled: false
loggers:
enabled: false
logfile:
enabled: false
httptrace:
enabled: false
env:
enabled: false
flyway:
enabled: false
liquidbase:
enabled: false
shutdown:
enabled: false
mappings:
enabled: false
scheduledtasks:
enabled: false
threaddump:
enabled: false
heapdump:
enabled: false

View File

@ -1,39 +0,0 @@
spring:
cache:
redis:
time-to-live: 1800s
# 二级缓存配置
# 注caffeine 不适用于数据量大,并且缓存命中率极低的业务场景,如用户维度的缓存。请慎重选择。
l2cache:
config:
# 是否存储空值默认true防止缓存穿透
allowNullValues: true
# 组合缓存配置
composite:
# 是否全部启用一级缓存默认false
l1AllOpen: false
# 一级缓存
caffeine:
# 是否自动刷新过期缓存 true 是 false 否
autoRefreshExpireCache: false
# 缓存刷新调度线程池的大小
refreshPoolSize: 2
# 缓存刷新的频率(秒)
refreshPeriod: 10
# 写入后过期时间(秒)
expireAfterWrite: 180
# 访问后过期时间(秒)
expireAfterAccess: 180
# 初始化大小
initialCapacity: 1
# 最大缓存对象个数,超过此数量时之前放入的缓存将失效
maximumSize: 3
# 二级缓存
redis:
# 全局过期时间,单位毫秒,默认不过期
defaultExpiration: 1800000
# 缓存更新时通知其他节点的topic名称 默认 cache:redis:caffeine:topic
topic: cache:redis:caffeine:topic

View File

@ -1,44 +0,0 @@
common:
mysql:
host: 192.168.2.166
port: 3306
username: root
password: root
redis:
host: 10.43.253.4
password: jjb123456
port: 6379
mq:
host: 10.43.163.23:9876
xxl-job:
address: http://10.43.98.135:8080/xxl-job-admin/
username: admin
password: jjb123456
gateway:
network:
http:
#网关的外网访问地址 必须配置为HTTPS协议
external: https://testdragon.cqjjb.cn
#网关的内网访问地址 固定配置为http://jjb-saas-gateway
intranet: http://10.43.250.65
wx:
#webSocket外网地址
external: wx://testdragon.cqjjb.cn
swagger:
#是否打开swagger 测试及UAT配置为true,生产环境配置为false
enabled: true
base:
# base应用访问外网访问地址
host-url: http://10.43.12.158
desk:
# desk工程的外网地址
host-url: http://10.43.12.158
login:
# login工程的外网访问地址
host-url: http://10.43.12.158
#所有的前端域名配置 避免iframe跨域
x-frame-options: ${common.desk.host-url}/ ${common.login.host-url}/ ${common.base.host-url}/ ${common.gateway.network.http.external}/ http://10.43.250.65/
k8s:
namespace: test-dragon

View File

@ -1,8 +0,0 @@
# JOB 配置
xxl-job:
admin:
address: ${common.xxl-job.address}
username: ${common.xxl-job.username}
password: ${common.xxl-job.password}
executor:
app-name: ${spring.application.name}

View File

@ -1,11 +0,0 @@
common:
log:
jjb-saas-system:
- com.jjb:info
jjb-saas-auth1:
- com.jjb:info
jjb-saas-user:
- com.jjb:info
gray:
log:
host: 192.168.1.1

View File

@ -1,21 +0,0 @@
mq:
topic: springcloudStream-jjb-dragon-test
server: ${common.mq.host}
spring:
cloud:
stream:
bindings:
input:
destination: springcloudStream-jjb-dragon-test
group: ${spring.application.name}-${spring.profiles.active}
output:
destination: springcloudStream-jjb-dragon-test
group: ${spring.application.name}-${spring.profiles.active}
rocketmq:
binder:
name-server: ${common.mq.host}
group: ${spring.application.name}-${spring.profiles.active}
bindings:
input:
consumer:
tags: a

View File

@ -1,11 +0,0 @@
mybatis-plus:
mapper-locations: classpath*:mapper/*.xml,classpath*:mapper/**/*Mapper.xml
type-handlers-package: com.jjb.saas.framework.datascope.handler
global-config:
banner: false
db-config:
id-type: assign_id
logic-delete-value: 1
logic-not-delete-value: 0
configuration:
log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl

View File

@ -1,79 +0,0 @@
mysql:
db: ${spring.application.name}
spring:
shardingsphere:
druid:
username: admin
password: jjb123456
allows:
denys:
props:
sql:
show: true
enabled: true
masterslave:
name: ms # 名字,任意,需要保证唯一
master-data-source-name: master # 主库数据源
slave-data-source-names: slave-1 # 从库数据源
datasource:
names: master,slave-1
master:
#url: jdbc:mysql://10.43.123.226:3306/${spring.application.name}?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&allowMultiQueries=true&serverTimezone=Asia/Shanghai
url: jdbc:mysql://${common.mysql.host}:${common.mysql.port}/${mysql.db}?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&allowMultiQueries=true&serverTimezone=Asia/Shanghai
username: ${common.mysql.username}
password: ${common.mysql.password}
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
initial-size: 6
min-idle: 4
maxActive: 40
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 300000
#Oracle需要打开注释
#validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
# 打开PSCache并且指定每个连接上PSCache的大小
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
# 配置监控统计拦截的filters去掉后监控界面sql无法统计'wall'用于防火墙
filters: slf4j
# 通过connectProperties属性来打开mergeSql功能慢SQL记录
connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
wall:
multi-statement-allow: true
slave-1:
# url: jdbc:mysql://10.43.123.226:3306/${spring.application.name}?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&allowMultiQueries=true&serverTimezone=Asia/Shanghai
url: jdbc:mysql://${common.mysql.host}:${common.mysql.port}/${mysql.db}?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&allowMultiQueries=true&serverTimezone=Asia/Shanghai
username: ${common.mysql.username}
password: ${common.mysql.password}
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
initial-size: 6
min-idle: 4
maxActive: 20
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 300000
#Oracle需要打开注释
#validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
# 打开PSCache并且指定每个连接上PSCache的大小
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
# 配置监控统计拦截的filters去掉后监控界面sql无法统计'wall'用于防火墙,stat已去掉
filters: slf4j
# 通过connectProperties属性来打开mergeSql功能慢SQL记录
connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
wall:
multi-statement-allow: true

View File

@ -1,3 +0,0 @@
server:
port: 80
debug: true

View File

@ -1,14 +0,0 @@
spring:
redis:
host: ${common.redis.host}
password: ${common.redis.password}
port: ${common.redis.port}
timeout: 15000
database: 0
prefix: dragon
jedis:
pool:
max-active: 600
max-idle: 300
max-wait: 15000
min-idle: 10

View File

@ -1,19 +0,0 @@
sdk:
server:
symmetry-url: jjb-saas-application/application/applications/server/secure/
app-key: jjb-saas-dragon
client:
security:
gateway: ${gateway.network.http.external}
appKey: ${sdk.client.app-key}
desensitization:
symmetric-key: 1234567887654321
logging:
gateway: ${sdk.client.security.gateway}
appKey: ${sdk.client.security.app-key}
clientLoggingEnable: true
level: debug
username: user
password: 123456
showConsoleLog: true
formatConsoleLogJson: true

View File

@ -1,89 +0,0 @@
spring:
zipkin:
#zipkin服务所在地址
base-url: http://jjb-saas-zipkin/
sender:
type: web #使用http的方式传输数据
#配置采样百分比
sleuth:
sampler:
probability: 1 # 将采样比例设置为 1.0也就是全部都需要。默认是0.1也就是10%一般情况下10%就够用了
web:
resources:
cache:
cachecontrol:
no-store: false
max-age: 10000
no-cache: false
autoconfigure:
exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
main:
allow-bean-definition-overriding: true
mvc:
pathmatch:
matching-strategy: ant_path_matcher
messages:
basename: i18n.message
encoding: UTF-8
flyway:
# 是否启用flyway
enabled: true
# 编码格式默认UTF-8
encoding: UTF-8
# 迁移sql脚本文件存放路径默认db/migration
locations: classpath:db/migration
# 迁移sql脚本文件名称的前缀默认V
sql-migration-prefix: V
# 迁移sql脚本文件名称的分隔符默认2个下划线__
sql-migration-separator: __
# 迁移sql脚本文件名称的后缀
sql-migration-suffixes: .sql
# 迁移时是否进行校验默认true
validate-on-migrate: true
# 当迁移发现数据库非空且存在没有元数据的表时自动执行基准迁移新建schema_version表
baseline-on-migrate: true
server:
tomcat:
max-http-post-size: 200MB
connection-timeout: 180000
fastjson:
parser:
safeMode: true
mvc:
pathmatch:
matching-strategy: ANT_PATH_MATCHER
thymeleaf:
prefix: classpath:/templates/
cache: false
dubbo:
application:
name: ${spring.application.name}
registry:
timeout: 20000
address: nacos://${spring.cloud.nacos.config.server-addr}?namespace=${spring.cloud.nacos.config.namespace}-facade
check: false
filter: providerContextFilter
protocol:
port: -1
name: dubbo
consumer:
timeout: 20000
check: false
filter: consumerContextFilter
logging:
config: classpath:jjb-saas-logback-spring.xml
level:
com.alibaba.nacos.client.naming: OFF
com.alibaba.nacos.client.config.impl: OFF
com.alibaba.nacos.common.remote.client: OFF
datapermssion:
tenantcondition:
defaultversion: NEWERSION
easy-retry:
server:
host: http://jjb-saas-config
port: 1788

View File

@ -1,18 +0,0 @@
sdk:
client:
app-key: e6ab3c9abda747b39d7cc12b6dc0f5a0
gateway:
url: ${common.gateway.network.http.intranet}
swagger:
enabled: ${common.swagger.enabled}
title: 例子
description: 这是例子项目
version: ${application.version}
group-name: 例子
springfox:
documentation:
swagger-ui:
base-url: ${application.gateway}
swagger:
v2:
path: /${application.gateway}/v2/api-docs

View File

@ -0,0 +1,44 @@
nacos:
url: prod-nacos:8848
namespace: jjb-dragon
application:
name: zcloud-gbs-primeport
version:
gateway: primeport
cn-name: 口门门禁管理
spring:
application:
name: ${application.name}${application.version}
profiles:
# 环境配置
active: prod
cloud:
nacos:
config:
namespace: ${nacos.namespace}
server-addr: ${nacos.url}
username: nacos
password: u9Hc7tLFBY
file-extension: yml
shared-configs:
- config-common.yml
- config-port.yml
- config-mq.yml
- config-log.yml
- config-sdk-server.yml
- config-actuator.yml
- config-job.yml
- config-mysql.yml
- config-redis.yml
- config-cache.yml
- config-spring.yml
- config-mybatis.yml
- config-sdk.yml
- config-flyway.yml
# 这个配置文件需要放到nacos里边
- ${application.name}-conf.yml
discovery:
server-addr: ${spring.cloud.nacos.config.server-addr}
namespace: ${spring.cloud.nacos.config.namespace}
username: nacos
password: u9Hc7tLFBY

View File

@ -1,6 +1,8 @@
sdk:
server:
app-key: 722091ff53dd4abba078c2a00efd4a42
app-key: bbab676d39e443cfacc037ee15fdad37
# app-key: c7fbb137c1a0484c8b0cca8ac9937c55
#港务局线上appKey c7fbb137c1a0484c8b0cca8ac9937c55
client:
gateway:
url: ${common.gateway.network.http.external}
@ -14,7 +16,7 @@ sdk:
name: ${application.cn-name}-后端
group-code: public_api
strip-prefix: 0
uri: lb://${application.name}
uri: http://${application.name}
path: /${application.gateway}/**
- client:
system-code: ${application.name}-container
@ -25,9 +27,21 @@ sdk:
name: ${application.cn-name}-前端
group-code: public_api
strip-prefix: 0
uri: lb://jjb-saas-base
uri: http://jjb-saas-base
path: /${application.gateway}/container/**
order: -2
- client:
system-code: ${application.name}-h5
name: ${application.cn-name}-h5-前端
group-code: public_api
service:
system-code: ${application.name}-h5
name: ${application.cn-name}-h5-前端
group-code: public_api
strip-prefix: 0
uri: http://${application.name}
path: /${application.gateway}-h5/**
order: -3
openapi:
appId: 1871106785124999168
appKey: 7314ecfc11ff4d5fad1ac19284ed2ac3
@ -49,3 +63,44 @@ openapi:
apiCode: test:01
#多个可以逗号隔开,可以为空
tenantIds: 1838408702262321152
archives:
async:
pool:
maxPoolSize: 2
corePoolSize: 1
queueCapacity: 60
namePrefix: async-task-
keepAliveSeconds: 60
message:
template:
firstLevelApplyReceiveAudit: MS000152
closedAreaApplyReceiveAudit: MS000153
firstLevelApplyReceiveCarAudit: MS000154
firstLevelApplyReceiveCarAuditReject: MS000155
firstLevelPersonReceiveAudit: MS000156
firstLevelPersonReceiveAuditReject: MS000157
closedAreaApplyReceiveCarAudit: MS000158
closedAreaApplyReceiveCarAuditReject: MS000159
closedAreaPersonReceiveAudit: MS000160
closedAreaPersonReceiveAuditReject: MS000161
# 大华平台配置
dahua:
access-record:
sync-enabled: true
sync-page-size: 1000
sync-delay-minutes: 5
sync-overlap-minutes: 10
initial-lookback-minutes: 1440
resource:
sync-enabled: true
sync-page-size: 200
subsystem: evo-accesscontrol
auto-match-by-name: true
oauth:
host: 123.183.159.35
client-id: 123.183.159.35
client-secret: 4edfdcd2-67e6-41db-a1ae-b98d47a70266
username: system
password: zcloud88888
http: false
port: 4443

View File

@ -1,23 +0,0 @@
<!doctype html><html lang="zh"><head data-built-info="@cqsjjb/scripts@2.0.0-alpha-1 Env/production (2025/10/17 11:07:53) App/risk"><meta charset="UTF-8"/><meta name="renderer" content="webkit"/><meta http-equiv="X-UA-Compatible" content="IE=edge,Chrome=1"/><meta name="viewport" content="width=device-width,minimum-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover"><title>--</title><script>(function () {
const APP_ENV = {
antd: {
'ant-prefix': 'micro-temp',
fontFamily: 'PingFangSC-Regular',
colorPrimary: '#1677ff',
borderRadius: parseInt('2')
},
appKey: '',
basename: 'risk',
API_HOST: ''
};
APP_ENV.API_HOST = sessionStorage.API_HOST || APP_ENV.API_HOST || window.location.origin;
window.process = {
env: { app: APP_ENV },
NODE_ENV: 'production'
};
window.__JJB_ENVIRONMENT__ = {
API_HOST: APP_ENV.API_HOST,
redirect: '',
FRAMEWORK: APP_ENV.antd
};
})();</script><script defer="defer" src="/risk/static/js/295.21df88c875577274cecb.js"></script><script defer="defer" src="/risk/static/js/main.4c0885586ad9a06ab444.js"></script><link href="/risk/static/css/main.40fc518bb0818fe8b8ea.css" rel="stylesheet"></head><body style="overflow: hidden"><noscript>此网页需要开启JavaScript功能。</noscript><div id="root" style="width: 100%; height: 100%; position: relative"></div><script type="text/javascript">/* @cqsjjb/script 输出当前应用基本信息、构建时间 */console.log("%c@cqsjjb/scripts@2.0.0-alpha-1 Env/production (2025/10/17 11:07:53) App/risk Version/master Java/<branch-name>", "color: #1890ff; border-radius: 2px; padding: 0 4px; border: 1px solid #1890ff; background: #f9fcff")</script></body></html>

View File

@ -1 +0,0 @@
body,html{height:100%;width:100%}input::-ms-clear,input::-ms-reveal{display:none}*,:after,:before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:rgba(0,0,0,0)}@-ms-viewport{width:device-width}body{margin:0}[tabindex="-1"]:focus{outline:none}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{font-weight:500;margin-bottom:.5em;margin-top:0}p{margin-bottom:1em;margin-top:0}abbr[data-original-title],abbr[title]{border-bottom:0;cursor:help;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}address{font-style:normal;line-height:inherit;margin-bottom:1em}input[type=number],input[type=password],input[type=text],textarea{-webkit-appearance:none}dl,ol,ul{margin-bottom:1em;margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:500}dd{margin-bottom:.5em;margin-left:0}blockquote{margin:0 0 1em}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}code,kbd,pre,samp{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:1em}pre{margin-bottom:1em;margin-top:0;overflow:auto}figure{margin:0 0 1em}img{border-style:none;vertical-align:middle}[role=button],a,area,button,input:not([type=range]),label,select,summary,textarea{touch-action:manipulation}table{border-collapse:collapse}caption{caption-side:bottom;padding-bottom:.3em;padding-top:.75em;text-align:left}button,input,optgroup,select,textarea{color:inherit;font-family:inherit;font-size:inherit;line-height:inherit;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{border:0;margin:0;min-width:0;padding:0}legend{color:inherit;display:block;font-size:1.5em;line-height:inherit;margin-bottom:.5em;max-width:100%;padding:0;white-space:normal;width:100%}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:none;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}output{display:inline-block}summary{display:list-item}template{display:none}[hidden]{display:none!important}mark{background-color:#feffe6;padding:.2em}

View File

@ -1 +0,0 @@
module.exports={compact:!1,plugins:[["@babel/plugin-proposal-decorators",{legacy:!0}]],presets:[["@babel/preset-env",{targets:{browsers:["ie >= 10"]}}],["@babel/preset-react",{runtime:"automatic"}]]};

View File

@ -1 +0,0 @@
module.exports={javaGit:"<git-url>",javaGitName:"<git-name>",environment:{development:{javaGitBranch:"<branch-name>",API_HOST:"http://192.168.20.100:30140/demo2"},production:{javaGitBranch:"<branch-name>",API_HOST:""}},appIdentifier:"risk",contextInject:{appKey:""},windowInject:{title:"微应用模板",links:[],element:{root:{id:"root"}},scripts:[]},server:{port:"8080",host:"127.0.0.1",open:!0},framework:{antd:{"ant-prefix":"micro-temp",fontFamily:"PingFangSC-Regular",colorPrimary:"#1677ff",borderRadius:2}},webpackConfig:{htmlWebpackPluginOption:{inject:!0}}};

File diff suppressed because one or more lines are too long

View File

@ -1,135 +0,0 @@
/*!
Copyright (c) 2018 Jed Watson.
Licensed under the MIT License (MIT), see
http://jedwatson.github.io/classnames
*/
/*!
* is-plain-object <https://github.com/jonschlinkert/is-plain-object>
*
* Copyright (c) 2014-2017, Jon Schlinkert.
* Released under the MIT License.
*/
/*!
* isobject <https://github.com/jonschlinkert/isobject>
*
* Copyright (c) 2014-2017, Jon Schlinkert.
* Released under the MIT License.
*/
/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
/**
* @license React
* react-dom.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/**
* @license React
* react-is.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/**
* @license React
* react-jsx-runtime.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/**
* @license React
* react.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/**
* @license React
* scheduler.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/** @license React v16.13.1
* react-is.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/** @license React v17.0.2
* react-is.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/** @preserve
* Counter block mode compatible with Dr Brian Gladman fileenc.c
* derived from CryptoJS.mode.CTR
* Jan Hruby jhruby.web@gmail.com
*/
/** @preserve
(c) 2012 by Cédric Mesnil. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**![caret-down](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjAgMCAxMDI0IDEwMjQiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTg0MC40IDMwMEgxODMuNmMtMTkuNyAwLTMwLjcgMjAuOC0xOC41IDM1bDMyOC40IDM4MC44YzkuNCAxMC45IDI3LjUgMTAuOSAzNyAwTDg1OC45IDMzNWMxMi4yLTE0LjIgMS4yLTM1LTE4LjUtMzV6IiAvPjwvc3ZnPg==) */
/**![caret-up](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjAgMCAxMDI0IDEwMjQiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTg1OC45IDY4OUw1MzAuNSAzMDguMmMtOS40LTEwLjktMjcuNS0xMC45LTM3IDBMMTY1LjEgNjg5Yy0xMi4yIDE0LjItMS4yIDM1IDE4LjUgMzVoNjU2LjhjMTkuNyAwIDMwLjctMjAuOCAxOC41LTM1eiIgLz48L3N2Zz4=) */
/**![check](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTkxMiAxOTBoLTY5LjljLTkuOCAwLTE5LjEgNC41LTI1LjEgMTIuMkw0MDQuNyA3MjQuNSAyMDcgNDc0YTMyIDMyIDAgMDAtMjUuMS0xMi4ySDExMmMtNi43IDAtMTAuNCA3LjctNi4zIDEyLjlsMjczLjkgMzQ3YzEyLjggMTYuMiAzNy40IDE2LjIgNTAuMyAwbDQ4OC40LTYxOC45YzQuMS01LjEuNC0xMi44LTYuMy0xMi44eiIgLz48L3N2Zz4=) */
/**![double-left](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTI3Mi45IDUxMmwyNjUuNC0zMzkuMWM0LjEtNS4yLjQtMTIuOS02LjMtMTIuOWgtNzcuM2MtNC45IDAtOS42IDIuMy0xMi42IDYuMUwxODYuOCA0OTIuM2EzMS45OSAzMS45OSAwIDAwMCAzOS41bDI1NS4zIDMyNi4xYzMgMy45IDcuNyA2LjEgMTIuNiA2LjFINTMyYzYuNyAwIDEwLjQtNy43IDYuMy0xMi45TDI3Mi45IDUxMnptMzA0IDBsMjY1LjQtMzM5LjFjNC4xLTUuMi40LTEyLjktNi4zLTEyLjloLTc3LjNjLTQuOSAwLTkuNiAyLjMtMTIuNiA2LjFMNDkwLjggNDkyLjNhMzEuOTkgMzEuOTkgMCAwMDAgMzkuNWwyNTUuMyAzMjYuMWMzIDMuOSA3LjcgNi4xIDEyLjYgNi4xSDgzNmM2LjcgMCAxMC40LTcuNyA2LjMtMTIuOUw1NzYuOSA1MTJ6IiAvPjwvc3ZnPg==) */
/**![double-right](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTUzMy4yIDQ5Mi4zTDI3Ny45IDE2Ni4xYy0zLTMuOS03LjctNi4xLTEyLjYtNi4xSDE4OGMtNi43IDAtMTAuNCA3LjctNi4zIDEyLjlMNDQ3LjEgNTEyIDE4MS43IDg1MS4xQTcuOTggNy45OCAwIDAwMTg4IDg2NGg3Ny4zYzQuOSAwIDkuNi0yLjMgMTIuNi02LjFsMjU1LjMtMzI2LjFjOS4xLTExLjcgOS4xLTI3LjkgMC0zOS41em0zMDQgMEw1ODEuOSAxNjYuMWMtMy0zLjktNy43LTYuMS0xMi42LTYuMUg0OTJjLTYuNyAwLTEwLjQgNy43LTYuMyAxMi45TDc1MS4xIDUxMiA0ODUuNyA4NTEuMUE3Ljk4IDcuOTggMCAwMDQ5MiA4NjRoNzcuM2M0LjkgMCA5LjYtMi4zIDEyLjYtNi4xbDI1NS4zLTMyNi4xYzkuMS0xMS43IDkuMS0yNy45IDAtMzkuNXoiIC8+PC9zdmc+) */
/**![ellipsis](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTE3NiA1MTFhNTYgNTYgMCAxMDExMiAwIDU2IDU2IDAgMTAtMTEyIDB6bTI4MCAwYTU2IDU2IDAgMTAxMTIgMCA1NiA1NiAwIDEwLTExMiAwem0yODAgMGE1NiA1NiAwIDEwMTEyIDAgNTYgNTYgMCAxMC0xMTIgMHoiIC8+PC9zdmc+) */
/**![eye](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTk0Mi4yIDQ4Ni4yQzg0Ny40IDI4Ni41IDcwNC4xIDE4NiA1MTIgMTg2Yy0xOTIuMiAwLTMzNS40IDEwMC41LTQzMC4yIDMwMC4zYTYwLjMgNjAuMyAwIDAwMCA1MS41QzE3Ni42IDczNy41IDMxOS45IDgzOCA1MTIgODM4YzE5Mi4yIDAgMzM1LjQtMTAwLjUgNDMwLjItMzAwLjMgNy43LTE2LjIgNy43LTM1IDAtNTEuNXpNNTEyIDc2NmMtMTYxLjMgMC0yNzkuNC04MS44LTM2Mi43LTI1NEMyMzIuNiAzMzkuOCAzNTAuNyAyNTggNTEyIDI1OGMxNjEuMyAwIDI3OS40IDgxLjggMzYyLjcgMjU0Qzc5MS41IDY4NC4yIDY3My40IDc2NiA1MTIgNzY2em0tNC00MzBjLTk3LjIgMC0xNzYgNzguOC0xNzYgMTc2czc4LjggMTc2IDE3NiAxNzYgMTc2LTc4LjggMTc2LTE3Ni03OC44LTE3Ni0xNzYtMTc2em0wIDI4OGMtNjEuOSAwLTExMi01MC4xLTExMi0xMTJzNTAuMS0xMTIgMTEyLTExMiAxMTIgNTAuMSAxMTIgMTEyLTUwLjEgMTEyLTExMiAxMTJ6IiAvPjwvc3ZnPg==) */
/**![file](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTg1NC42IDI4OC42TDYzOS40IDczLjRjLTYtNi0xNC4xLTkuNC0yMi42LTkuNEgxOTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjgzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmg2NDBjMTcuNyAwIDMyLTE0LjMgMzItMzJWMzExLjNjMC04LjUtMy40LTE2LjctOS40LTIyLjd6TTc5MC4yIDMyNkg2MDJWMTM3LjhMNzkwLjIgMzI2em0xLjggNTYySDIzMlYxMzZoMzAydjIxNmE0MiA0MiAwIDAwNDIgNDJoMjE2djQ5NHoiIC8+PC9zdmc+) */
/**![filter](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTM0OSA4MzhjMCAxNy43IDE0LjIgMzIgMzEuOCAzMmgyNjIuNGMxNy42IDAgMzEuOC0xNC4zIDMxLjgtMzJWNjQySDM0OXYxOTZ6bTUzMS4xLTY4NEgxNDMuOWMtMjQuNSAwLTM5LjggMjYuNy0yNy41IDQ4bDIyMS4zIDM3NmgzNDguOGwyMjEuMy0zNzZjMTIuMS0yMS4zLTMuMi00OC0yNy43LTQ4eiIgLz48L3N2Zz4=) */
/**![folder-open](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTkyOCA0NDRIODIwVjMzMC40YzAtMTcuNy0xNC4zLTMyLTMyLTMySDQ3M0wzNTUuNyAxODYuMmE4LjE1IDguMTUgMCAwMC01LjUtMi4ySDk2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnY1OTJjMCAxNy43IDE0LjMgMzIgMzIgMzJoNjk4YzEzIDAgMjQuOC03LjkgMjkuNy0yMGwxMzQtMzMyYzEuNS0zLjggMi4zLTcuOSAyLjMtMTIgMC0xNy43LTE0LjMtMzItMzItMzJ6TTEzNiAyNTZoMTg4LjVsMTE5LjYgMTE0LjRINzQ4VjQ0NEgyMzhjLTEzIDAtMjQuOCA3LjktMjkuNyAyMEwxMzYgNjQzLjJWMjU2em02MzUuMyA1MTJIMTU5bDEwMy4zLTI1Nmg2MTIuNEw3NzEuMyA3Njh6IiAvPjwvc3ZnPg==) */
/**![folder](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTg4MCAyOTguNEg1MjFMNDAzLjcgMTg2LjJhOC4xNSA4LjE1IDAgMDAtNS41LTIuMkgxNDRjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjU5MmMwIDE3LjcgMTQuMyAzMiAzMiAzMmg3MzZjMTcuNyAwIDMyLTE0LjMgMzItMzJWMzMwLjRjMC0xNy43LTE0LjMtMzItMzItMzJ6TTg0MCA3NjhIMTg0VjI1NmgxODguNWwxMTkuNiAxMTQuNEg4NDBWNzY4eiIgLz48L3N2Zz4=) */
/**![holder](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTMwMCAyNzYuNWE1NiA1NiAwIDEwNTYtOTcgNTYgNTYgMCAwMC01NiA5N3ptMCAyODRhNTYgNTYgMCAxMDU2LTk3IDU2IDU2IDAgMDAtNTYgOTd6TTY0MCAyMjhhNTYgNTYgMCAxMDExMiAwIDU2IDU2IDAgMDAtMTEyIDB6bTAgMjg0YTU2IDU2IDAgMTAxMTIgMCA1NiA1NiAwIDAwLTExMiAwek0zMDAgODQ0LjVhNTYgNTYgMCAxMDU2LTk3IDU2IDU2IDAgMDAtNTYgOTd6TTY0MCA3OTZhNTYgNTYgMCAxMDExMiAwIDU2IDU2IDAgMDAtMTEyIDB6IiAvPjwvc3ZnPg==) */
/**![left](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTcyNCAyMTguM1YxNDFjMC02LjctNy43LTEwLjQtMTIuOS02LjNMMjYwLjMgNDg2LjhhMzEuODYgMzEuODYgMCAwMDAgNTAuM2w0NTAuOCAzNTIuMWM1LjMgNC4xIDEyLjkuNCAxMi45LTYuM3YtNzcuM2MwLTQuOS0yLjMtOS42LTYuMS0xMi42bC0zNjAtMjgxIDM2MC0yODEuMWMzLjgtMyA2LjEtNy43IDYuMS0xMi42eiIgLz48L3N2Zz4=) */
/**![minus-square](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTMyOCA1NDRoMzY4YzQuNCAwIDgtMy42IDgtOHYtNDhjMC00LjQtMy42LTgtOC04SDMyOGMtNC40IDAtOCAzLjYtOCA4djQ4YzAgNC40IDMuNiA4IDggOHoiIC8+PHBhdGggZD0iTTg4MCAxMTJIMTQ0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnY3MzZjMCAxNy43IDE0LjMgMzIgMzIgMzJoNzM2YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjE0NGMwLTE3LjctMTQuMy0zMi0zMi0zMnptLTQwIDcyOEgxODRWMTg0aDY1NnY2NTZ6IiAvPjwvc3ZnPg==) */
/**![plus-square](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTMyOCA1NDRoMTUydjE1MmMwIDQuNCAzLjYgOCA4IDhoNDhjNC40IDAgOC0zLjYgOC04VjU0NGgxNTJjNC40IDAgOC0zLjYgOC04di00OGMwLTQuNC0zLjYtOC04LThINTQ0VjMyOGMwLTQuNC0zLjYtOC04LThoLTQ4Yy00LjQgMC04IDMuNi04IDh2MTUySDMyOGMtNC40IDAtOCAzLjYtOCA4djQ4YzAgNC40IDMuNiA4IDggOHoiIC8+PHBhdGggZD0iTTg4MCAxMTJIMTQ0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnY3MzZjMCAxNy43IDE0LjMgMzIgMzIgMzJoNzM2YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjE0NGMwLTE3LjctMTQuMy0zMi0zMi0zMnptLTQwIDcyOEgxODRWMTg0aDY1NnY2NTZ6IiAvPjwvc3ZnPg==) */
/**![right](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIGZpbGw9IiNjYWNhY2EiIHZpZXdCb3g9IjY0IDY0IDg5NiA4OTYiIGZvY3VzYWJsZT0iZmFsc2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTc2NS43IDQ4Ni44TDMxNC45IDEzNC43QTcuOTcgNy45NyAwIDAwMzAyIDE0MXY3Ny4zYzAgNC45IDIuMyA5LjYgNi4xIDEyLjZsMzYwIDI4MS4xLTM2MCAyODEuMWMtMy45IDMtNi4xIDcuNy02LjEgMTIuNlY4ODNjMCA2LjcgNy43IDEwLjQgMTIuOSA2LjNsNDUwLjgtMzUyLjFhMzEuOTYgMzEuOTYgMCAwMDAtNTAuNHoiIC8+PC9zdmc+) */

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */

View File

@ -1,44 +0,0 @@
{
"name": "micro-app",
"version": "2.0.0",
"description": "建教帮微应用模板",
"author": "JJB",
"license": "MIT",
"main": "index.js",
"scripts": {
"serve": "node node_modules/@cqsjjb/scripts/webpack.dev.server.js",
"build": "node node_modules/@cqsjjb/scripts/webpack.build.js",
"push": "jjb-cmd push java production",
"clean-cache": "rimraf node_modules/.cache/webpack",
"serve:development": "cross-env NODE_ENV=development npm run serve",
"serve:production": "cross-env NODE_ENV=production npm run serve",
"build:development": "cross-env NODE_ENV=development npm run build",
"build:production": "cross-env NODE_ENV=production npm run build",
"code-optimization": "node node_modules/@cqsjjb/scripts/code-optimization.js",
"lint": "eslint --ext .js,.jsx,.tsx --fix src"
},
"dependencies": {
"@ant-design/icons": "latest",
"@cqsjjb/jjb-common-decorator": "latest",
"@cqsjjb/jjb-common-lib": "latest",
"@cqsjjb/jjb-dva-runtime": "latest",
"@cqsjjb/jjb-react-admin-component": "latest",
"ahooks": "^3.9.5",
"antd": "latest",
"dayjs": "^1.11.7",
"react": "^18.2.0",
"react-dom": "^18.2.0"
},
"devDependencies": {
"@antfu/eslint-config": "^5.4.1",
"@babel/plugin-proposal-decorators": "^7.19.3",
"@cqsjjb/scripts": "latest",
"@eslint-react/eslint-plugin": "^2.2.2",
"cross-env": "^7.0.3",
"eslint": "^9.37.0",
"eslint-plugin-format": "^1.0.2",
"eslint-plugin-react-hooks": "^7.0.0",
"eslint-plugin-react-refresh": "^0.4.23",
"typescript": "^5.9.3"
}
}

View File

@ -0,0 +1,142 @@
package com.zcloud.primeport.web;
import com.alibaba.cola.dto.SingleResponse;
import com.zcloud.primeport.api.DaHuaServiceI;
import com.zcloud.primeport.domain.model.DaHuaAccessRecordCmd;
import com.zcloud.primeport.domain.model.DaHuaCarAddCmd;
import com.zcloud.primeport.domain.model.DaHuaCarPageCmd;
import com.zcloud.primeport.domain.model.DaHuaPersonSyncCmd;
import com.zcloud.primeport.domain.model.DaHuaTempVehicleSaveCmd;
import com.zcloud.primeport.dto.DaHuaAccessRecordSyncCmd;
import com.zcloud.primeport.dto.DaHuaCarDeleteCmd;
import com.zcloud.primeport.dto.DaHuaPersonDeleteCmd;
import com.zcloud.primeport.dto.DaHuaResourceSyncCmd;
import com.zcloud.primeport.dto.clientobject.DaHuaAccessRecordSyncResultCO;
import com.zcloud.primeport.dto.clientobject.DaHuaResourceSyncResultCO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
import javax.validation.Valid;
@Api(tags = "大华平台对接")
@RequestMapping("/${application.gateway}/dahua")
@RestController
public class DaHuaController {
@Autowired(required = false)
private DaHuaServiceI daHuaService;
@ApiOperation("生成人员全局ID")
@GetMapping("/person/generate-id")
public SingleResponse<Long> generatePersonId() {
if (daHuaService == null) {
throw new RuntimeException("大华服务未配置");
}
return daHuaService.generatePersonId();
}
@ApiOperation("同步人员到大华平台-新增")
@PostMapping("/person/sync")
public SingleResponse<Object> syncPerson(@Validated @RequestBody DaHuaPersonSyncCmd cmd) {
if (daHuaService == null) {
throw new RuntimeException("大华服务未配置");
}
return daHuaService.syncPerson(cmd);
}
@ApiOperation("修改人员")
@PutMapping("/person/update")
public SingleResponse<Boolean> updatePerson(@Validated @RequestBody DaHuaPersonSyncCmd cmd) {
if (daHuaService == null) {
throw new RuntimeException("大华服务未配置");
}
return daHuaService.updatePerson(cmd);
}
@ApiOperation("新增车辆")
@PostMapping("/car/add")
public SingleResponse<Boolean> addCar(@Validated @RequestBody DaHuaCarAddCmd cmd) {
if (daHuaService == null) {
throw new RuntimeException("大华服务未配置");
}
return daHuaService.addCar(cmd);
}
@ApiOperation("修改车辆")
@PutMapping("/car/update")
public SingleResponse<Boolean> updateCar(@Validated @RequestBody DaHuaCarAddCmd cmd) {
if (daHuaService == null) {
throw new RuntimeException("大华服务未配置");
}
return daHuaService.updateCar(cmd);
}
@ApiOperation("车辆分页查询根据车牌查carCode")
@PostMapping("/car/page")
public SingleResponse<Map<String, Object>> pageCar(@Validated @RequestBody DaHuaCarPageCmd cmd) {
if (daHuaService == null) {
throw new RuntimeException("大华服务未配置");
}
return daHuaService.pageCar(cmd);
}
@ApiOperation("删除车辆")
@PostMapping("/car/delete")
public SingleResponse<Boolean> deleteCar(@Validated @RequestBody DaHuaCarDeleteCmd cmd) {
if (daHuaService == null) {
throw new RuntimeException("大华服务未配置");
}
return daHuaService.deleteCar(cmd);
}
@ApiOperation("门禁事件查询(刷卡记录分页)")
@PostMapping("/access/record")
public SingleResponse<Map<String, Object>> queryAccessRecord(@Validated @RequestBody DaHuaAccessRecordCmd cmd) {
if (daHuaService == null) {
throw new RuntimeException("大华服务未配置");
}
return daHuaService.queryAccessRecord(cmd);
}
@ApiOperation("同步大华门禁通行记录并落库")
@PostMapping("/access/record/sync")
public SingleResponse<DaHuaAccessRecordSyncResultCO> syncAccessRecords(
@Valid @RequestBody DaHuaAccessRecordSyncCmd cmd) {
if (daHuaService == null) {
throw new RuntimeException("大华服务未配置");
}
return daHuaService.syncAccessRecords(cmd);
}
@ApiOperation("删除人员")
@PostMapping("/person/delete")
public SingleResponse<Boolean> deletePerson(@Validated @RequestBody DaHuaPersonDeleteCmd cmd) {
if (daHuaService == null) {
throw new RuntimeException("大华服务未配置");
}
return daHuaService.deletePerson(cmd);
}
@ApiOperation("临时车辆全量保存(人员+车辆+卡片+人脸)")
@PostMapping("/temp-vehicle/save")
public SingleResponse<Object> saveTempVehicle(@Validated @RequestBody DaHuaTempVehicleSaveCmd cmd) {
if (daHuaService == null) {
throw new RuntimeException("大华服务未配置");
}
return daHuaService.saveTempVehicle(cmd);
}
@PostMapping("/resource/sync")
public SingleResponse<DaHuaResourceSyncResultCO> syncResources(
@Valid @RequestBody(required = false) DaHuaResourceSyncCmd cmd) {
if (daHuaService == null) {
throw new RuntimeException("大华服务未配置");
}
return daHuaService.syncResources(cmd);
}
}

View File

@ -0,0 +1,41 @@
package com.zcloud.primeport.web;
import com.alibaba.cola.dto.MultiResponse;
import com.alibaba.cola.dto.SingleResponse;
import com.zcloud.primeport.api.DashboardServiceI;
import com.zcloud.primeport.dto.DashboardMkmjRecordCmd;
import com.zcloud.primeport.dto.DashboardRecordStatCmd;
import com.zcloud.primeport.dto.clientobject.DashboardMkmjRecordCO;
import com.zcloud.primeport.dto.clientobject.DashboardRecordStatCO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Api(tags = "可视化大屏-信息统计")
@RequestMapping("/${application.gateway}/dashboard")
@RestController
@AllArgsConstructor
public class DashboardController {
private final DashboardServiceI dashboardService;
//统计当天的进出数量 人和车
@ApiOperation("可视化大屏-记录统计")
@PostMapping("/recordStat")
public SingleResponse<DashboardRecordStatCO> recordStat(@RequestBody DashboardRecordStatCmd cmd) {
return dashboardService.recordStat(cmd);
}
// 统计当天的口门进入进出记录数量,根据口门统计
@ApiOperation("可视化大屏-口门进入进出记录统计")
@PostMapping("/mkmjRecord")
public MultiResponse<DashboardMkmjRecordCO> mkmjRecord(@RequestBody DashboardMkmjRecordCmd cmd) {
return dashboardService.mkmjRecord(cmd);
}
//口门进出记录,人员通道和车辆通道
//一个或多个企业的,进入了,没有出去的车数量和人的数量
}

View File

@ -0,0 +1,88 @@
package com.zcloud.primeport.web;
import com.zcloud.primeport.api.EVehicleArrivalDepartureInfoServiceI;
import com.zcloud.primeport.dto.EVehicleArrivalDepartureInfoAddCmd;
import com.zcloud.primeport.dto.EVehicleArrivalDepartureInfoPageQry;
import com.zcloud.primeport.dto.EVehicleArrivalDepartureInfoUpdateCmd;
import com.zcloud.primeport.dto.clientobject.EVehicleArrivalDepartureInfoCO;
import com.alibaba.cola.dto.MultiResponse;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.Response;
import com.alibaba.cola.dto.SingleResponse;
import com.jjb.saas.framework.auth.model.SSOUser;
import com.jjb.saas.framework.auth.utils.AuthContext;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* web-adapter
*
* @Author dearLin
* @Date 2026-05-27 17:45:43
*/
@Api(tags = "一级口门车辆数据接入")
@RequestMapping("/${application.gateway}/eVehicleArrivalDepartureInfo")
@RestController
@AllArgsConstructor
public class EVehicleArrivalDepartureInfoController {
private final EVehicleArrivalDepartureInfoServiceI eVehicleArrivalDepartureInfoService;
@ApiOperation("新增")
@PostMapping("/save")
public SingleResponse<EVehicleArrivalDepartureInfoCO> add(@Validated @RequestBody EVehicleArrivalDepartureInfoAddCmd cmd) {
SSOUser ssoUser = AuthContext.getCurrentUser();
return eVehicleArrivalDepartureInfoService.add(cmd);
}
@ApiOperation("分页")
@PostMapping("/list")
public PageResponse<EVehicleArrivalDepartureInfoCO> page(@RequestBody EVehicleArrivalDepartureInfoPageQry qry) {
return eVehicleArrivalDepartureInfoService.listPage(qry);
}
@ApiOperation("所有数据")
@GetMapping("/listAll")
public MultiResponse<EVehicleArrivalDepartureInfoCO> listAll() {
return MultiResponse.of(new ArrayList<EVehicleArrivalDepartureInfoCO>());
}
@ApiOperation("详情")
@GetMapping("/{id}")
public SingleResponse<EVehicleArrivalDepartureInfoCO> getInfoById(@PathVariable("id") Long id) {
return SingleResponse.of(eVehicleArrivalDepartureInfoService.queryById(id));
}
@ApiOperation("删除")
@DeleteMapping("/{id}")
public Response remove(@PathVariable("id") Long id) {
eVehicleArrivalDepartureInfoService.remove(id);
return SingleResponse.buildSuccess();
}
@ApiOperation("删除多个")
@DeleteMapping("/ids")
public Response removeBatch(@RequestParam("ids") String ids) {
List<Long> idsList = Arrays.stream(ids.split(","))
.map(Long::valueOf)
.collect(Collectors.toList());
eVehicleArrivalDepartureInfoService.removeBatch(idsList);
return SingleResponse.buildSuccess();
}
@ApiOperation("修改")
@PutMapping("/edit")
public SingleResponse edit(@Validated @RequestBody EVehicleArrivalDepartureInfoUpdateCmd eVehicleArrivalDepartureInfoUpdateCmd) {
eVehicleArrivalDepartureInfoService.edit(eVehicleArrivalDepartureInfoUpdateCmd);
return SingleResponse.buildSuccess();
}
}

View File

@ -0,0 +1,87 @@
package com.zcloud.primeport.web;
import com.zcloud.primeport.api.EVehicleBasicInfoServiceI;
import com.zcloud.primeport.dto.EVehicleBasicInfoAddCmd;
import com.zcloud.primeport.dto.EVehicleBasicInfoPageQry;
import com.zcloud.primeport.dto.EVehicleBasicInfoUpdateCmd;
import com.zcloud.primeport.dto.clientobject.EVehicleBasicInfoCO;
import com.alibaba.cola.dto.MultiResponse;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.Response;
import com.alibaba.cola.dto.SingleResponse;
import com.jjb.saas.framework.auth.model.SSOUser;
import com.jjb.saas.framework.auth.utils.AuthContext;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* web-adapter
*
* @Author dearLin
* @Date 2026-04-23 10:04:31
*/
@Api(tags = "一级口门车辆出入信息")
@RequestMapping("/${application.gateway}/eVehicleBasicInfo")
@RestController
@AllArgsConstructor
public class EVehicleBasicInfoController {
private final EVehicleBasicInfoServiceI eVehicleBasicInfoService;
@ApiOperation("新增")
@PostMapping("/save")
public SingleResponse<EVehicleBasicInfoCO> add(@Validated @RequestBody EVehicleBasicInfoAddCmd cmd) {
return eVehicleBasicInfoService.add(cmd);
}
@ApiOperation("分页")
@PostMapping("/list")
public PageResponse<EVehicleBasicInfoCO> page(@RequestBody EVehicleBasicInfoPageQry qry) {
return eVehicleBasicInfoService.listPage(qry);
}
@ApiOperation("所有数据")
@GetMapping("/listAll")
public MultiResponse<EVehicleBasicInfoCO> listAll() {
return MultiResponse.of(new ArrayList<EVehicleBasicInfoCO>());
}
@ApiOperation("详情")
@GetMapping("/{id}")
public SingleResponse<EVehicleBasicInfoCO> getInfoById(@PathVariable("id") Long id) {
return SingleResponse.of(eVehicleBasicInfoService.queryById(id));
}
@ApiOperation("删除")
@DeleteMapping("/{id}")
public Response remove(@PathVariable("id") Long id) {
eVehicleBasicInfoService.remove(id);
return SingleResponse.buildSuccess();
}
@ApiOperation("删除多个")
@DeleteMapping("/ids")
public Response removeBatch(@RequestParam("ids") String ids) {
List<Long> idsList = Arrays.stream(ids.split(","))
.map(Long::valueOf)
.collect(Collectors.toList());
eVehicleBasicInfoService.removeBatch(idsList);
return SingleResponse.buildSuccess();
}
@ApiOperation("修改")
@PutMapping("/edit")
public SingleResponse edit(@Validated @RequestBody EVehicleBasicInfoUpdateCmd eVehicleBasicInfoUpdateCmd) {
eVehicleBasicInfoService.edit(eVehicleBasicInfoUpdateCmd);
return SingleResponse.buildSuccess();
}
}

View File

@ -1,91 +0,0 @@
package com.zcloud.primeport.web;
import com.alibaba.cola.dto.MultiResponse;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.Response;
import com.alibaba.cola.dto.SingleResponse;
import com.jjb.saas.framework.auth.model.SSOUser;
import com.jjb.saas.framework.auth.utils.AuthContext;
import com.zcloud.primeport.api.EnclosedAreaServiceI;
import com.zcloud.primeport.dto.EnclosedAreaAddCmd;
import com.zcloud.primeport.dto.EnclosedAreaPageQry;
import com.zcloud.primeport.dto.EnclosedAreaUpdateCmd;
import com.zcloud.primeport.dto.clientobject.EnclosedAreaCO;
import com.zcloud.primeport.dto.clientobject.EnclosedAreaTreeCO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
/**
* web-adapter
*
* @Author fangjiakai
* @Date 2025-12-12 16:49:31
*/
@Api(tags = "封闭区域")
@RequestMapping("/${application.gateway}/enclosedArea")
@RestController
@AllArgsConstructor
public class EnclosedAreaController {
private final EnclosedAreaServiceI enclosedAreaService;
@ApiOperation("新增")
@PostMapping("/save")
public SingleResponse<EnclosedAreaCO> add(@Validated @RequestBody EnclosedAreaAddCmd cmd) {
SSOUser ssoUser = AuthContext.getCurrentUser();
cmd.setCorpinfoId(ssoUser.getTenantId());
cmd.setCorpinfoName(ssoUser.getTenantName());
return enclosedAreaService.add(cmd);
}
@ApiOperation("分页")
@PostMapping("/list")
public PageResponse<EnclosedAreaCO> page(@RequestBody EnclosedAreaPageQry qry) {
return enclosedAreaService.listPage(qry);
}
@ApiOperation("所有数据")
@GetMapping("/listAll")
public MultiResponse<EnclosedAreaCO> listAll() {
return MultiResponse.of(new ArrayList<EnclosedAreaCO>());
}
@ApiOperation("所有数据")
@GetMapping("/listAllTree")
public MultiResponse<EnclosedAreaTreeCO> listAllTree() {
return MultiResponse.of(enclosedAreaService.listAllTree());
}
@ApiOperation("详情")
@GetMapping("/{id}")
public SingleResponse<EnclosedAreaCO> getInfoById(@PathVariable("id") Long id) {
return SingleResponse.of(enclosedAreaService.queryById(id));
}
@ApiOperation("删除")
@DeleteMapping("/{id}")
public Response remove(@PathVariable("id") Long id) {
enclosedAreaService.remove(id);
return SingleResponse.buildSuccess();
}
@ApiOperation("删除多个")
@DeleteMapping("/ids")
public Response removeBatch(@RequestParam Long[] ids) {
enclosedAreaService.removeBatch(ids);
return SingleResponse.buildSuccess();
}
@ApiOperation("修改")
@PutMapping("/edit")
public SingleResponse edit(@Validated @RequestBody EnclosedAreaUpdateCmd enclosedAreaUpdateCmd) {
enclosedAreaService.edit(enclosedAreaUpdateCmd);
return SingleResponse.buildSuccess();
}
}

View File

@ -0,0 +1,81 @@
package com.zcloud.primeport.web;
import com.alibaba.cola.dto.MultiResponse;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.Response;
import com.alibaba.cola.dto.SingleResponse;
import com.jjb.saas.framework.auth.model.SSOUser;
import com.jjb.saas.framework.auth.utils.AuthContext;
import com.zcloud.primeport.api.MkmjApprovalUserServiceI;
import com.zcloud.primeport.dto.MkmjApprovalUserAddCmd;
import com.zcloud.primeport.dto.MkmjApprovalUserPageQry;
import com.zcloud.primeport.dto.MkmjApprovalUserUpdateCmd;
import com.zcloud.primeport.dto.clientobject.AvailableResultCO;
import com.zcloud.primeport.dto.clientobject.MkmjApprovalUserCO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
/**
* web-adapter
*
* @Author makejava
* @Date 2026-03-05 11:33:16
*/
@Api(tags = "一级口门门禁审批人")
@RequestMapping("/${application.gateway}/mkmjApprovalUser")
@RestController
@AllArgsConstructor
public class MkmjApprovalUserController {
private final MkmjApprovalUserServiceI mkmjApprovalUserService;
@ApiOperation("新增")
@PostMapping("/save")
public SingleResponse<MkmjApprovalUserCO> add(@Validated @RequestBody MkmjApprovalUserAddCmd cmd) {
return mkmjApprovalUserService.add(cmd);
}
@ApiOperation("分页")
@PostMapping("/list")
public PageResponse<MkmjApprovalUserCO> page(@RequestBody MkmjApprovalUserPageQry qry) {
qry.setCorpId(AuthContext.getTenantId());
return mkmjApprovalUserService.listPage(qry);
}
@ApiOperation("所有数据")
@GetMapping("/listAll")
public MultiResponse<MkmjApprovalUserCO> listAll(MkmjApprovalUserPageQry qry) {
return MultiResponse.of(mkmjApprovalUserService.listAll(qry));
}
@ApiOperation("详情")
@GetMapping("/{id}")
public SingleResponse<MkmjApprovalUserCO> getInfoById(@PathVariable("id") Long id) {
return SingleResponse.of(mkmjApprovalUserService.getInfoById(id));
}
@ApiOperation("删除")
@DeleteMapping("/{id}")
public Response remove(@PathVariable("id") Long id) {
mkmjApprovalUserService.remove(id);
return SingleResponse.buildSuccess();
}
@ApiOperation("校验审批人是否已录入")
@GetMapping("/checkExistByUserId/{userId}")
public SingleResponse<AvailableResultCO> checkExistByUserId(@PathVariable("userId") Long userId) {
return mkmjApprovalUserService.checkExistByUserId(userId);
}
@ApiOperation("修改")
@PutMapping("/edit")
public SingleResponse edit(@Validated @RequestBody MkmjApprovalUserUpdateCmd mkmjApprovalUserUpdateCmd) {
mkmjApprovalUserService.edit(mkmjApprovalUserUpdateCmd);
return SingleResponse.buildSuccess();
}
}

View File

@ -1,95 +0,0 @@
package com.zcloud.primeport.web;
import cn.hutool.core.util.ObjectUtil;
import com.zcloud.primeport.api.MkmjAreaServiceI;
import com.zcloud.primeport.domain.model.MkmjStatisticsE;
import com.zcloud.primeport.dto.MkmjAreaAddCmd;
import com.zcloud.primeport.dto.MkmjAreaPageQry;
import com.zcloud.primeport.dto.MkmjAreaUpdateCmd;
import com.zcloud.primeport.dto.StatisticsByAreaCmd;
import com.zcloud.primeport.dto.clientobject.MkmjAreaCO;
import com.alibaba.cola.dto.MultiResponse;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.Response;
import com.alibaba.cola.dto.SingleResponse;
import com.jjb.saas.framework.auth.model.SSOUser;
import com.jjb.saas.framework.auth.utils.AuthContext;
import com.zcloud.primeport.dto.clientobject.MkmjStatisticsCO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
/**
* web-adapter
*
* @Author fangjiakai
* @Date 2025-11-14 08:57:41
*/
@Api(tags = "门口门禁区域表")
@RequestMapping("/${application.gateway}/mkmjArea")
@RestController
@AllArgsConstructor
public class MkmjAreaController {
private final MkmjAreaServiceI mkmjAreaService;
@ApiOperation("新增")
@PostMapping("/save")
public SingleResponse<MkmjAreaCO> add(@Validated @RequestBody MkmjAreaAddCmd cmd) {
SSOUser ssoUser = AuthContext.getCurrentUser();
if(ObjectUtil.isEmpty(cmd.getCorpinfoId())){
cmd.setCorpinfoId(ssoUser.getTenantId());
cmd.setCorpinfoName(ssoUser.getTenantName());
}
return mkmjAreaService.add(cmd);
}
@ApiOperation("分页")
@PostMapping("/list")
public PageResponse<MkmjAreaCO> page(@RequestBody MkmjAreaPageQry qry) {
return mkmjAreaService.listPage(qry);
}
@ApiOperation("所有数据")
@GetMapping("/listAll")
public MultiResponse<MkmjAreaCO> listAll() {
return MultiResponse.of(new ArrayList<MkmjAreaCO>());
}
@ApiOperation("详情")
@GetMapping("/{id}")
public SingleResponse<MkmjAreaCO> getInfoById(@PathVariable("id") Long id) {
return SingleResponse.of(mkmjAreaService.queryById(id));
}
@ApiOperation("删除")
@DeleteMapping("/{id}")
public Response remove(@PathVariable("id") Long id) {
mkmjAreaService.remove(id);
return SingleResponse.buildSuccess();
}
@ApiOperation("删除多个")
@DeleteMapping("/ids")
public Response removeBatch(@RequestParam Long[] ids) {
mkmjAreaService.removeBatch(ids);
return SingleResponse.buildSuccess();
}
@ApiOperation("修改")
@PutMapping("/edit")
public SingleResponse edit(@Validated @RequestBody MkmjAreaUpdateCmd mkmjAreaUpdateCmd) {
mkmjAreaService.edit(mkmjAreaUpdateCmd);
return SingleResponse.buildSuccess();
}
@ApiOperation("统计")
@PostMapping("/statistics")
public MultiResponse<MkmjStatisticsCO> statistics(@RequestBody StatisticsByAreaCmd qry) {
return MultiResponse.of(mkmjAreaService.statistics(qry.getIds()));
}
}

View File

@ -1,82 +0,0 @@
package com.zcloud.primeport.web;
import com.zcloud.primeport.api.MkmjAreaGateServiceI;
import com.zcloud.primeport.dto.MkmjAreaGateAddCmd;
import com.zcloud.primeport.dto.MkmjAreaGatePageQry;
import com.zcloud.primeport.dto.MkmjAreaGateUpdateCmd;
import com.zcloud.primeport.dto.clientobject.MkmjAreaGateCO;
import com.alibaba.cola.dto.MultiResponse;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.Response;
import com.alibaba.cola.dto.SingleResponse;
import com.jjb.saas.framework.auth.model.SSOUser;
import com.jjb.saas.framework.auth.utils.AuthContext;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
/**
* web-adapter
*
* @Author fangjiakai
* @Date 2025-11-14 08:57:43
*/
@Api(tags = "门口门禁区域闸机表")
@RequestMapping("/${application.gateway}/mkmjAreaGate")
@RestController
@AllArgsConstructor
public class MkmjAreaGateController {
private final MkmjAreaGateServiceI mkmjAreaGateService;
@ApiOperation("新增")
@PostMapping("/save")
public SingleResponse<MkmjAreaGateCO> add(@Validated @RequestBody MkmjAreaGateAddCmd cmd) {
SSOUser ssoUser = AuthContext.getCurrentUser();
return mkmjAreaGateService.add(cmd);
}
@ApiOperation("分页")
@PostMapping("/list")
public PageResponse<MkmjAreaGateCO> page(@RequestBody MkmjAreaGatePageQry qry) {
return mkmjAreaGateService.listPage(qry);
}
@ApiOperation("所有数据")
@GetMapping("/listAll")
public MultiResponse<MkmjAreaGateCO> listAll() {
return MultiResponse.of(new ArrayList<MkmjAreaGateCO>());
}
@ApiOperation("详情")
@GetMapping("/{id}")
public SingleResponse<MkmjAreaGateCO> getInfoById(@PathVariable("id") Long id) {
return SingleResponse.of(mkmjAreaGateService.queryById(id));
}
@ApiOperation("删除")
@DeleteMapping("/{id}")
public Response remove(@PathVariable("id") Long id) {
mkmjAreaGateService.remove(id);
return SingleResponse.buildSuccess();
}
@ApiOperation("删除多个")
@DeleteMapping("/ids")
public Response removeBatch(@RequestParam Long[] ids) {
mkmjAreaGateService.removeBatch(ids);
return SingleResponse.buildSuccess();
}
@ApiOperation("修改")
@PutMapping("/edit")
public SingleResponse edit(@Validated @RequestBody MkmjAreaGateUpdateCmd mkmjAreaGateUpdateCmd) {
mkmjAreaGateService.edit(mkmjAreaGateUpdateCmd);
return SingleResponse.buildSuccess();
}
}

View File

@ -0,0 +1,114 @@
package com.zcloud.primeport.web;
import com.alibaba.cola.dto.MultiResponse;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.Response;
import com.alibaba.cola.dto.SingleResponse;
import com.zcloud.primeport.api.MkmjServiceI;
import com.zcloud.primeport.dto.MkmjAddCmd;
import com.zcloud.primeport.dto.MkmjPageQry;
import com.zcloud.primeport.dto.MkmjScreenPageQry;
import com.zcloud.primeport.dto.MkmjUpdateCmd;
import com.zcloud.primeport.dto.MkmjUpdateStatusCmd;
import com.zcloud.primeport.dto.clientobject.MkmjCO;
import com.zcloud.primeport.dto.clientobject.MkmjScreenCO;
import com.zcloud.primeport.dto.clientobject.MkmjStatisticsCO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
@Api(tags = "口门信息管理")
@RequestMapping("/${application.gateway}/mkmj")
@RestController
@AllArgsConstructor
public class MkmjController {
private final MkmjServiceI mkmjService;
@ApiOperation("新增")
@PostMapping("/save")
public SingleResponse<MkmjCO> add(@Validated @RequestBody MkmjAddCmd cmd) {
return mkmjService.add(cmd);
}
@ApiOperation("分页")
@PostMapping("/listNoToken")
public PageResponse<MkmjCO> listNoToken(@RequestBody MkmjPageQry qry) {
return mkmjService.listPage(qry);
}
@ApiOperation("分页")
@PostMapping("/list")
public PageResponse<MkmjCO> page(@RequestBody MkmjPageQry qry) {
return mkmjService.listPage(qry);
}
@ApiOperation("所有数据")
@GetMapping("/listAll")
public MultiResponse<MkmjCO> listAll(MkmjPageQry qry) {
return MultiResponse.of(mkmjService.listAll(qry));
}
@ApiOperation("详情")
@GetMapping("/{id}")
public SingleResponse<MkmjCO> getInfoById(@PathVariable("id") Long id) {
return SingleResponse.of(mkmjService.getInfoById(id));
}
@ApiOperation("删除")
@DeleteMapping("/{id}")
public Response remove(@PathVariable("id") Long id) {
mkmjService.remove(id);
return SingleResponse.buildSuccess();
}
@ApiOperation("停用启用")
@PutMapping("/editStatus")
public SingleResponse editStatus(@Validated @RequestBody MkmjUpdateStatusCmd mkmjUpdateCmd) {
MkmjUpdateCmd mkmjUpdateCmd1 = new MkmjUpdateCmd();
mkmjUpdateCmd1.setId(mkmjUpdateCmd.getId());
mkmjUpdateCmd1.setMkmjStatus(mkmjUpdateCmd.getMkmjStatus());
mkmjService.edit(mkmjUpdateCmd1);
return SingleResponse.buildSuccess();
}
@ApiOperation("修改")
@PutMapping("/edit")
public SingleResponse edit(@Validated @RequestBody MkmjUpdateCmd mkmjUpdateCmd) {
mkmjService.edit(mkmjUpdateCmd);
return SingleResponse.buildSuccess();
}
@ApiOperation("名称唯一性校验")
@GetMapping("/check-name")
public SingleResponse<Map<String, Boolean>> checkName(@RequestParam String mkmjName, @RequestParam(required = false) Long id) {
Boolean available = mkmjService.checkName(mkmjName, id);
Map<String, Boolean> result = new HashMap<>();
result.put("available", available);
return SingleResponse.of(result);
}
@ApiOperation("可视化大屏-口门统计")
@GetMapping("/statistics")
public MultiResponse<MkmjStatisticsCO> statistics() {
return mkmjService.statistics();
}
@ApiOperation("可视化大屏-口门列表")
@PostMapping("/screenList")
public PageResponse<MkmjScreenCO> screenList(@RequestBody MkmjScreenPageQry qry) {
return mkmjService.screenList(qry);
}
}

View File

@ -0,0 +1,89 @@
package com.zcloud.primeport.web;
import com.alibaba.cola.dto.MultiResponse;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.Response;
import com.alibaba.cola.dto.SingleResponse;
import com.jjb.saas.framework.auth.model.SSOUser;
import com.jjb.saas.framework.auth.utils.AuthContext;
import com.zcloud.primeport.api.MkmjGateServiceI;
import com.zcloud.primeport.dto.MkmjGateAddCmd;
import com.zcloud.primeport.dto.MkmjGatePageQry;
import com.zcloud.primeport.dto.MkmjGateScreenPageQry;
import com.zcloud.primeport.dto.MkmjGateUpdateCmd;
import com.zcloud.primeport.dto.clientobject.MkmjGateCO;
import com.zcloud.primeport.dto.clientobject.MkmjGateScreenCO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
/**
* web-adapter
*
* @Author makejava
* @Date 2026-03-05 11:33:17
*/
@Api(tags = "门口闸机表")
@RequestMapping("/${application.gateway}/mkmjGate")
@RestController
@AllArgsConstructor
public class MkmjGateController {
private final MkmjGateServiceI mkmjGateService;
@ApiOperation("新增")
@PostMapping("/save")
public SingleResponse<MkmjGateCO> add(@Validated @RequestBody MkmjGateAddCmd cmd) {
return mkmjGateService.add(cmd);
}
@ApiOperation("分页")
@PostMapping("/list")
public PageResponse<MkmjGateCO> page(@RequestBody MkmjGatePageQry qry) {
return mkmjGateService.listPage(qry);
}
@ApiOperation("详情")
@GetMapping("/{id}")
public SingleResponse<MkmjGateCO> getInfoById(@PathVariable("id") Long id) {
return SingleResponse.of(mkmjGateService.getInfoById(id));
}
@ApiOperation("删除")
@DeleteMapping("/{id}")
public Response remove(@PathVariable("id") Long id) {
mkmjGateService.remove(id);
return SingleResponse.buildSuccess();
}
@ApiOperation("修改")
@PutMapping("/edit")
public SingleResponse edit(@Validated @RequestBody MkmjGateUpdateCmd mkmjGateUpdateCmd) {
mkmjGateService.edit(mkmjGateUpdateCmd);
return SingleResponse.buildSuccess();
}
@ApiOperation("名称唯一性校验")
@GetMapping("/check-name")
public SingleResponse<Map<String, Boolean>> checkName(
@RequestParam String gateName,
@RequestParam Long passageId,
@RequestParam(required = false) Long id) {
Boolean available = mkmjGateService.checkName(gateName, passageId, id);
Map<String, Boolean> result = new HashMap<>();
result.put("available", available);
return SingleResponse.of(result);
}
@ApiOperation("可视化大屏-人员车辆闸机列表")
@PostMapping("/screenList")
public PageResponse<MkmjGateScreenCO> screenList(@RequestBody MkmjGateScreenPageQry qry) {
return mkmjGateService.screenList(qry);
}
}

View File

@ -1,82 +0,0 @@
package com.zcloud.primeport.web;
import com.zcloud.primeport.api.MkmjGateVideoServiceI;
import com.zcloud.primeport.dto.MkmjGateVideoAddCmd;
import com.zcloud.primeport.dto.MkmjGateVideoPageQry;
import com.zcloud.primeport.dto.MkmjGateVideoUpdateCmd;
import com.zcloud.primeport.dto.clientobject.MkmjGateVideoCO;
import com.alibaba.cola.dto.MultiResponse;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.Response;
import com.alibaba.cola.dto.SingleResponse;
import com.jjb.saas.framework.auth.model.SSOUser;
import com.jjb.saas.framework.auth.utils.AuthContext;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
/**
* web-adapter
*
* @Author fangjiakai
* @Date 2025-11-14 08:57:44
*/
@Api(tags = "门口门禁闸机摄像头表")
@RequestMapping("/${application.gateway}/mkmjGateVideo")
@RestController
@AllArgsConstructor
public class MkmjGateVideoController {
private final MkmjGateVideoServiceI mkmjGateVideoService;
@ApiOperation("新增")
@PostMapping("/save")
public SingleResponse<MkmjGateVideoCO> add(@Validated @RequestBody MkmjGateVideoAddCmd cmd) {
SSOUser ssoUser = AuthContext.getCurrentUser();
return mkmjGateVideoService.add(cmd);
}
@ApiOperation("分页")
@PostMapping("/list")
public PageResponse<MkmjGateVideoCO> page(@RequestBody MkmjGateVideoPageQry qry) {
return mkmjGateVideoService.listPage(qry);
}
@ApiOperation("所有数据")
@GetMapping("/listAll")
public MultiResponse<MkmjGateVideoCO> listAll() {
return MultiResponse.of(new ArrayList<MkmjGateVideoCO>());
}
@ApiOperation("详情")
@GetMapping("/{id}")
public SingleResponse<MkmjGateVideoCO> getInfoById(@PathVariable("id") Long id) {
return SingleResponse.of(mkmjGateVideoService.queryById(id));
}
@ApiOperation("删除")
@DeleteMapping("/{id}")
public Response remove(@PathVariable("id") Long id) {
mkmjGateVideoService.remove(id);
return SingleResponse.buildSuccess();
}
@ApiOperation("删除多个")
@DeleteMapping("/ids")
public Response removeBatch(@RequestParam Long[] ids) {
mkmjGateVideoService.removeBatch(ids);
return SingleResponse.buildSuccess();
}
@ApiOperation("修改")
@PutMapping("/edit")
public SingleResponse edit(@Validated @RequestBody MkmjGateVideoUpdateCmd mkmjGateVideoUpdateCmd) {
mkmjGateVideoService.edit(mkmjGateVideoUpdateCmd);
return SingleResponse.buildSuccess();
}
}

View File

@ -1,33 +1,22 @@
package com.zcloud.primeport.web;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.Response;
import com.alibaba.cola.dto.SingleResponse;
import com.zcloud.primeport.api.MkmjPassageServiceI;
import com.zcloud.primeport.dto.MkmjPassageAddCmd;
import com.zcloud.primeport.dto.MkmjPassagePageQry;
import com.zcloud.primeport.dto.MkmjPassageUpdateCmd;
import com.zcloud.primeport.dto.StatisticsByAreaCmd;
import com.zcloud.primeport.dto.clientobject.MkmjPassageCO;
import com.alibaba.cola.dto.MultiResponse;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.Response;
import com.alibaba.cola.dto.SingleResponse;
import com.jjb.saas.framework.auth.model.SSOUser;
import com.jjb.saas.framework.auth.utils.AuthContext;
import com.zcloud.primeport.dto.clientobject.MkmjStatisticsCO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
/**
* web-adapter
*
* @Author fangjiakai
* @Date 2025-11-14 08:57:45
*/
@Api(tags = "口门门禁通道表")
@RequestMapping("/${application.gateway}/mkmjPassage")
@RestController
@ -38,7 +27,6 @@ public class MkmjPassageController {
@ApiOperation("新增")
@PostMapping("/save")
public SingleResponse<MkmjPassageCO> add(@Validated @RequestBody MkmjPassageAddCmd cmd) {
SSOUser ssoUser = AuthContext.getCurrentUser();
return mkmjPassageService.add(cmd);
}
@ -48,21 +36,10 @@ public class MkmjPassageController {
return mkmjPassageService.listPage(qry);
}
@ApiOperation("所有数据")
@GetMapping("/listAll")
public MultiResponse<MkmjPassageCO> listAll() {
return MultiResponse.of(new ArrayList<MkmjPassageCO>());
}
@ApiOperation("详情")
@GetMapping("/{id}")
public SingleResponse<MkmjPassageCO> getInfoById(@PathVariable("id") Long id) {
return SingleResponse.of(mkmjPassageService.queryById(id));
}
@ApiOperation("是否重名")
@GetMapping("/hasName/{name}")
public SingleResponse<MkmjPassageCO> hasName(@PathVariable("name") String name) {
return SingleResponse.of(mkmjPassageService.queryByName(name));
return SingleResponse.of(mkmjPassageService.getInfoById(id));
}
@ApiOperation("删除")
@ -72,13 +49,6 @@ public class MkmjPassageController {
return SingleResponse.buildSuccess();
}
@ApiOperation("删除多个")
@DeleteMapping("/ids")
public Response removeBatch(@RequestParam Long[] ids) {
mkmjPassageService.removeBatch(ids);
return SingleResponse.buildSuccess();
}
@ApiOperation("修改")
@PutMapping("/edit")
public SingleResponse edit(@Validated @RequestBody MkmjPassageUpdateCmd mkmjPassageUpdateCmd) {
@ -86,10 +56,17 @@ public class MkmjPassageController {
return SingleResponse.buildSuccess();
}
@ApiOperation("统计")
@PostMapping("/statistics")
public MultiResponse<MkmjStatisticsCO> statistics(@RequestBody StatisticsByAreaCmd qry) {
return MultiResponse.of(mkmjPassageService.statistics(qry.getIds()));
@ApiOperation("名称唯一性校验")
@GetMapping("/check-name")
public SingleResponse<Map<String, Boolean>> checkName(
@RequestParam String passageName,
@RequestParam Long mkmjId,
@RequestParam(required = false) Long id) {
Boolean available = mkmjPassageService.checkName(passageName, mkmjId, id);
Map<String, Boolean> result = new HashMap<>();
result.put("available", available);
return SingleResponse.of(result);
}
}

View File

@ -1,17 +1,20 @@
package com.zcloud.primeport.web;
import com.zcloud.primeport.api.MkmjSwipeCardRecordServiceI;
import com.zcloud.primeport.dto.MkmjSwipeCardRecordAddCmd;
import com.zcloud.primeport.dto.MkmjSwipeCardRecordPageQry;
import com.zcloud.primeport.dto.MkmjSwipeCardRecordUpdateCmd;
import com.zcloud.primeport.dto.clientobject.MkmjSwipeCardRecordCO;
import com.alibaba.cola.dto.MultiResponse;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.Response;
import com.alibaba.cola.dto.SingleResponse;
import com.jjb.saas.framework.auth.model.SSOUser;
import com.jjb.saas.framework.auth.utils.AuthContext;
import com.zcloud.primeport.api.MkmjSwipeCardRecordServiceI;
import com.zcloud.primeport.dto.MkmjSwipeCardRecordAddCmd;
import com.zcloud.primeport.dto.MkmjSwipeCardRecordPageQry;
import com.zcloud.primeport.dto.MkmjSwipeCardRecordUpdateCmd;
import com.zcloud.primeport.dto.clientobject.MkmjSwipeCardRecordCO;
import com.zcloud.primeport.dto.mjDock.SwipeRecordPushExtend;
import com.zcloud.primeport.dto.mjDock.SwipeRecordPushInfo;
import com.zcloud.primeport.dto.mjDock.SwipeRecordPushVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
@ -19,12 +22,15 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* web-adapter
*
* @Author fangjiakai
* @Date 2025-11-17 13:42:10
* @Author dearLin
* @Date 2026-04-22 17:04:00
*/
@Api(tags = "")
@RequestMapping("/${application.gateway}/mkmjSwipeCardRecord")
@ -33,10 +39,36 @@ import java.util.ArrayList;
public class MkmjSwipeCardRecordController {
private final MkmjSwipeCardRecordServiceI mkmjSwipeCardRecordService;
@ApiOperation("新增")
@PostMapping("/dockSave")
public SingleResponse dockSave(@Validated @RequestBody SwipeRecordPushVo cmd) {
SwipeRecordPushInfo info = cmd.getInfo();
SwipeRecordPushExtend extend = info.getExtend();
MkmjSwipeCardRecordAddCmd cardRecordEntity = new MkmjSwipeCardRecordAddCmd();
cardRecordEntity
.setNodeCode(info.getNodeCode()).setAlarmCode(info.getAlarmCode()).setAlarmPicture(info.getAlarmPicture())
.setNodeType(info.getNodeType()).setAlarmDate(info.getAlarmDate()).setAlarmGrade(info.getAlarmGrade())
.setUnitType(info.getUnitType()).setAlarmType(info.getAlarmType()).setChannelSeq(info.getChannelSeq())
.setChannelName(info.getChannelName()).setAlarmStat(info.getAlarmStat()).setDeptName(extend.getDeptName())
.setAcsChannelCode(extend.getAcsChannelCode()).setMaskState(extend.getMaskState()).setEnterOrExit(extend.getEnterOrExit())
.setOpenTypeStr(extend.getOpenTypeStr()).setSwingTime(extend.getSwingTime()).setDeviceName(extend.getDeviceName())
.setPersonCode(extend.getPersonCode()).setOpenType(extend.getOpenType()).setOrgCode(extend.getOrgCode())
.setPaperType(extend.getPaperType()).setPaperNumber(extend.getPaperNumber()).setErrorDetail(extend.getErrorDetail())
.setOpenFailedCod(extend.getOpenFailedCode()).setExtendId(extend.getId()).setBeginTime(extend.getBeginTime())
.setAcsChannelName(extend.getAcsChannelName()).setCardStatus(extend.getCardStatus()).setOrgName(extend.getOrgName())
.setSex(extend.getSex()).setDeptId(extend.getDeptId()).setCardType(extend.getCardType()).setDeviceCode(extend.getDeviceCode())
.setPersonName(extend.getPersonName()).setPersonImg(extend.getPersonImg()).setOpenResult(extend.getOpenResult())
.setPersonId(extend.getPersonId()).setRecordImage1(extend.getRecordImage1()).setCategory(extend.getCategory())
.setCardNumber(extend.getCardNumber()).setRfidType(extend.getRfidType()).setAge(extend.getAge()).setVRecordFlag(extend.getVRecordFlag());
return mkmjSwipeCardRecordService.add(cardRecordEntity);
// return SingleResponse.buildSuccess();
}
@ApiOperation("新增")
@PostMapping("/save")
public SingleResponse<MkmjSwipeCardRecordCO> add(@Validated @RequestBody MkmjSwipeCardRecordAddCmd cmd) {
SSOUser ssoUser = AuthContext.getCurrentUser();
return mkmjSwipeCardRecordService.add(cmd);
}
@ -46,11 +78,6 @@ public class MkmjSwipeCardRecordController {
return mkmjSwipeCardRecordService.listPage(qry);
}
@ApiOperation("所有数据")
@GetMapping("/listAll")
public MultiResponse<MkmjSwipeCardRecordCO> listAll() {
return MultiResponse.of(new ArrayList<MkmjSwipeCardRecordCO>());
}
@ApiOperation("详情")
@GetMapping("/{id}")
@ -67,16 +94,19 @@ public class MkmjSwipeCardRecordController {
@ApiOperation("删除多个")
@DeleteMapping("/ids")
public Response removeBatch(@RequestParam Long[] ids) {
mkmjSwipeCardRecordService.removeBatch(ids);
return SingleResponse.buildSuccess();
}
@ApiOperation("修改")
@PutMapping("/edit")
public SingleResponse edit(@Validated @RequestBody MkmjSwipeCardRecordUpdateCmd mkmjSwipeCardRecordUpdateCmd) {
mkmjSwipeCardRecordService.edit(mkmjSwipeCardRecordUpdateCmd);
public Response removeBatch(@RequestParam("ids") String ids) {
List<Long> idsList = Arrays.stream(ids.split(","))
.map(Long::valueOf)
.collect(Collectors.toList());
mkmjSwipeCardRecordService.removeBatch(idsList);
return SingleResponse.buildSuccess();
}
//
// @ApiOperation("修改")
// @PutMapping("/edit")
// public SingleResponse edit(@Validated @RequestBody MkmjSwipeCardRecordUpdateCmd mkmjSwipeCardRecordUpdateCmd) {
// mkmjSwipeCardRecordService.edit(mkmjSwipeCardRecordUpdateCmd);
// return SingleResponse.buildSuccess();
// }
}

View File

@ -0,0 +1,136 @@
package com.zcloud.primeport.web;
import com.alibaba.cola.dto.MultiResponse;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.Response;
import com.alibaba.cola.dto.SingleResponse;
import com.alibaba.cola.exception.BizException;
import com.jjb.saas.framework.auth.model.SSOUser;
import com.jjb.saas.framework.auth.utils.AuthContext;
import com.zcloud.primeport.api.PersonApplyServiceI;
import com.zcloud.primeport.dto.*;
import com.zcloud.primeport.dto.clientobject.PersonApplyCO;
import com.zcloud.primeport.dto.clientobject.PersonCountCO;
import com.zcloud.primeport.dto.clientobject.XgfPersonApplyCO;
import com.zcloud.primeport.dto.clientobject.XgfPersonCountCO;
import com.zcloud.primeport.persistence.dataobject.XgfApplyPersonDO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
/**
* web-adapter
*
* @Author makejava
* @Date 2026-03-05 11:33:21
*/
@Api(tags = "人员申请审批信息")
@RequestMapping("/${application.gateway}/personApply")
@RestController
@AllArgsConstructor
public class PersonApplyController {
private final PersonApplyServiceI personApplyService;
@ApiOperation("相关方-人员权限记录-列表")
@PostMapping("/xgfPersonPermissionsList")
public PageResponse<PersonApplyCO> xgfPersonPermissionsList(@RequestBody XgfApplyPersonPageQry qry) {
if (qry.getApplyCorpId() == null) {
qry.setApplyCorpId(AuthContext.getTenantId());
}
return personApplyService.xgfPersonPermissionsList(qry);
}
@ApiOperation("相关方-人员权限记录-详情")
@GetMapping("/xgfPersonPermissionsInfo/{id}")
public SingleResponse<PersonApplyCO> xgfPersonPermissionsInfo(@PathVariable("id") Long id) {
return personApplyService.xgfPersonPermissionsInfo(id);
}
@ApiOperation("相关方-人员申请-详情")
@GetMapping("/xgfPersonApplyInfoById/{id}")
public SingleResponse<XgfPersonApplyCO> xgfPersonApplyInfoById(@PathVariable("id") Long id) {
return SingleResponse.of(personApplyService.xgfPersonApplyInfoById(id));
}
@ApiOperation("待审批的相关方申请人员入场列表-同已审批记录")
@PostMapping("/xgfPersonAuditList")
public PageResponse<XgfPersonApplyCO> xgfPersonAuditList(@RequestBody XgfApplyPersonPageQry qry) {
return personApplyService.xgfPersonAuditList(qry);
}
@ApiOperation("相关方人员入场申请列表")
@PostMapping("/xgfPersonApplyList")
public PageResponse<XgfPersonApplyCO> xgfPersonApplyList(@RequestBody XgfApplyPersonPageQry qry) {
return personApplyService.xgfPersonApplyList(qry);
}
@ApiOperation("临时访客人员入场申请列表-H5")
@PostMapping("/tmpPersonApplyH5List")
public PageResponse<PersonApplyCO> tmpPersonApplyH5List(@RequestBody XgfApplyPersonPageQry qry) {
return personApplyService.tmpPersonApplyH5List(qry);
}
@ApiOperation("相关方、临时-人员申请审批")
@PostMapping("/xgfPersonAudit")
public Response xgfPersonAudit(@Validated @RequestBody XgfPersonApplyAuditCmd cmd) throws Exception {
if (!(cmd.getAuditFlag().equals(2) || cmd.getAuditFlag().equals(3))) {
throw new BizException("审批状态必须是通过或不通过");
}
personApplyService.xgfPersonAudit(cmd);
return SingleResponse.buildSuccess();
}
@ApiOperation("相关方-人员申请新增")
@PostMapping("/xgfPersonSave")
public Response xgfPersonSave(@Validated @RequestBody XgfPersonApplyAddCmd cmd) {
personApplyService.xgfPersonSave(cmd);
return SingleResponse.buildSuccess();
}
@ApiOperation("人员临时申请-审批待审批分页列表")
@PostMapping("/pendingApprovalList")
public PageResponse<XgfPersonApplyCO> page(@RequestBody PersonApplyPageQry qry) {
return personApplyService.listPage(qry);
}
@ApiOperation("详情")
@GetMapping("/{id}")
public SingleResponse<PersonApplyCO> getInfoById(@PathVariable("id") Long id) {
return SingleResponse.of(new PersonApplyCO());
}
@ApiOperation("删除")
@DeleteMapping("/{id}")
public Response remove(@PathVariable("id") Long id) {
personApplyService.remove(id);
return SingleResponse.buildSuccess();
}
@ApiOperation("相关方人员及车辆管理-首页分页")
@GetMapping("/xgfPersonnelVehicleManagementList")
public PageResponse<XgfPersonCountCO> xgfPersonnelVehicleManagementList(PersonCountPageQry qry) {
return personApplyService.xgfPersonnelVehicleManagementList(qry);
}
@ApiOperation("股份,分公司-人员及车辆管理-分页")
@GetMapping("/personnelVehicleManagementList")
public PageResponse<PersonCountCO> personnelVehicleManagementList(PersonCountPageQry qry) {
if (qry.getCorpId() == null) {
qry.setCorpId(AuthContext.getTenantId());
}
return personApplyService.personnelVehicleManagementList(qry);
}
@ApiOperation("相关方-人员授权")
@PostMapping("/xgfPersonAuthorization")
public Response xgfPersonAuthorization(@RequestBody PersonAuthCmd cmd) {
personApplyService.xgfPersonAuthorization(cmd);
return Response.buildSuccess();
}
@ApiOperation("股份,分公司-人员授权")
@PostMapping("/authorization")
public Response authorization(@RequestBody PersonAuthCmd cmd) throws Exception {
personApplyService.authorization(cmd);
return Response.buildSuccess();
}
}

View File

@ -7,11 +7,11 @@ import com.alibaba.cola.dto.Response;
import com.alibaba.cola.dto.SingleResponse;
import com.jjb.saas.framework.auth.model.SSOUser;
import com.jjb.saas.framework.auth.utils.AuthContext;
import com.zcloud.primeport.api.MkmjCarRecordServiceI;
import com.zcloud.primeport.dto.MkmjCarRecordAddCmd;
import com.zcloud.primeport.dto.MkmjCarRecordPageQry;
import com.zcloud.primeport.dto.MkmjCarRecordUpdateCmd;
import com.zcloud.primeport.dto.clientobject.MkmjCarRecordCO;
import com.zcloud.primeport.api.PersonMessageServiceI;
import com.zcloud.primeport.dto.PersonMessageAddCmd;
import com.zcloud.primeport.dto.PersonMessagePageQry;
import com.zcloud.primeport.dto.PersonMessageUpdateCmd;
import com.zcloud.primeport.dto.clientobject.PersonMessageCO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
@ -23,59 +23,59 @@ import java.util.ArrayList;
/**
* web-adapter
*
* @Author fangjiakai
* @Date 2025-11-17 13:42:09
* @Author makejava
* @Date 2026-03-05 11:33:20
*/
@Api(tags = "车辆进出港记录")
@RequestMapping("/${application.gateway}/mkmjCarRecord")
@Api(tags = "审批通过的人员信息用于与门禁系统对接")
@RequestMapping("/${application.gateway}/personMessage")
@RestController
@AllArgsConstructor
public class MkmjCarRecordController {
private final MkmjCarRecordServiceI mkmjCarRecordService;
public class PersonMessageController {
private final PersonMessageServiceI personMessageService;
@ApiOperation("新增")
@PostMapping("/save")
public SingleResponse<MkmjCarRecordCO> add(@Validated @RequestBody MkmjCarRecordAddCmd cmd) {
public SingleResponse<PersonMessageCO> add(@Validated @RequestBody PersonMessageAddCmd cmd) {
SSOUser ssoUser = AuthContext.getCurrentUser();
return mkmjCarRecordService.add(cmd);
return personMessageService.add(cmd);
}
@ApiOperation("分页")
@PostMapping("/list")
public PageResponse<MkmjCarRecordCO> page(@RequestBody MkmjCarRecordPageQry qry) {
return mkmjCarRecordService.listPage(qry);
public PageResponse<PersonMessageCO> page(@RequestBody PersonMessagePageQry qry) {
return personMessageService.listPage(qry);
}
@ApiOperation("所有数据")
@GetMapping("/listAll")
public MultiResponse<MkmjCarRecordCO> listAll() {
return MultiResponse.of(new ArrayList<MkmjCarRecordCO>());
public MultiResponse<PersonMessageCO> listAll() {
return MultiResponse.of(new ArrayList<PersonMessageCO>());
}
@ApiOperation("详情")
@GetMapping("/{id}")
public SingleResponse<MkmjCarRecordCO> getInfoById(@PathVariable("id") Long id) {
return SingleResponse.of(mkmjCarRecordService.queryById(id));
public SingleResponse<PersonMessageCO> getInfoById(@PathVariable("id") Long id) {
return SingleResponse.of(new PersonMessageCO());
}
@ApiOperation("删除")
@DeleteMapping("/{id}")
public Response remove(@PathVariable("id") Long id) {
mkmjCarRecordService.remove(id);
personMessageService.remove(id);
return SingleResponse.buildSuccess();
}
@ApiOperation("删除多个")
@DeleteMapping("/ids")
public Response removeBatch(@RequestParam Long[] ids) {
mkmjCarRecordService.removeBatch(ids);
personMessageService.removeBatch(ids);
return SingleResponse.buildSuccess();
}
@ApiOperation("修改")
@PutMapping("/edit")
public SingleResponse edit(@Validated @RequestBody MkmjCarRecordUpdateCmd mkmjCarRecordUpdateCmd) {
mkmjCarRecordService.edit(mkmjCarRecordUpdateCmd);
public SingleResponse edit(@Validated @RequestBody PersonMessageUpdateCmd personMessageUpdateCmd) {
personMessageService.edit(personMessageUpdateCmd);
return SingleResponse.buildSuccess();
}
}

View File

@ -0,0 +1,128 @@
package com.zcloud.primeport.web;
import com.alibaba.cola.dto.MultiResponse;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.Response;
import com.alibaba.cola.dto.SingleResponse;
import com.jjb.saas.framework.auth.model.SSOUser;
import com.jjb.saas.framework.auth.utils.AuthContext;
import com.zcloud.primeport.api.VehicleApplyServiceI;
import com.zcloud.primeport.domain.model.VehicleApplyE;
import com.zcloud.primeport.dto.*;
import com.zcloud.primeport.dto.clientobject.FgsVehicleCountCo;
import com.zcloud.primeport.dto.clientobject.VehicleApplyCO;
import com.zcloud.primeport.dto.clientobject.VehicleAuditCO;
import com.zcloud.primeport.dto.clientobject.XgfPersonApplyCO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
/**
* web-adapter
*
* @Author makejava
* @Date 2026-03-05 11:33:23
*/
@Api(tags = "车辆申请信息")
@RequestMapping("/${application.gateway}/vehicleApply")
@RestController
@AllArgsConstructor
public class VehicleApplyController {
private final VehicleApplyServiceI vehicleApplyService;
@ApiOperation("新增-长期车辆录入")
@PostMapping("/save")
public SingleResponse<VehicleApplyE> add(@Validated @RequestBody VehicleApplyAddCmd cmd) {
return vehicleApplyService.add(cmd);
}
@ApiOperation("新增-检查部门车辆录入")
@PostMapping("/inspectCarSave")
public Response inspectCarSave(@Validated @RequestBody VehicleApplyInspectAddCmd cmd) {
vehicleApplyService.inspectCarSave(cmd);
return Response.buildSuccess();
}
@ApiOperation("检查部门车辆修改")
@PutMapping("/inspectCarEdit")
public Response inspectCarEdit(@Validated @RequestBody VehicleApplyInspectUpdateCmd cmd) {
cmd.setRemarks(cmd.getCheckDepartmentName());
vehicleApplyService.inspectCarEdit(cmd);
return Response.buildSuccess();
}
// @ApiOperation("新增-临时访客")
// @PostMapping("/saveTemporaryVisitors")
// public SingleResponse<VehicleApplyCO> saveTemporaryVisitors(@Validated @RequestBody VehicleApplyAddCmd cmd) {
// return null;
// }
@ApiOperation("分页")
@PostMapping("/list")
public PageResponse<VehicleApplyCO> page(@RequestBody VehicleApplyPageQry qry) {
return vehicleApplyService.listPage(qry);
}
@ApiOperation("股份、相关方、临时车辆审批-详情")
@GetMapping("/{id}")
public SingleResponse<VehicleApplyCO> getInfoById(@PathVariable("id") Long id) {
return SingleResponse.of(vehicleApplyService.getInfoById(id));
}
@ApiOperation("删除")
@DeleteMapping("/{id}")
public Response remove(@PathVariable("id") Long id) {
vehicleApplyService.remove(id);
return SingleResponse.buildSuccess();
}
@ApiOperation("修改")
@PutMapping("/edit")
public SingleResponse edit(@Validated @RequestBody VehicleApplyUpdateCmd vehicleApplyUpdateCmd) {
vehicleApplyService.edit(vehicleApplyUpdateCmd);
return SingleResponse.buildSuccess();
}
@ApiOperation("车牌号唯一性校验")
@GetMapping("/check-licence-no")
public SingleResponse<Map<String, Object>> checkLicenceNo(@RequestParam String licenceNo,
@RequestParam(required = false) Long id) {
Map<String, Object> result = vehicleApplyService.checkLicenceNo(licenceNo, id);
// Map<String, Boolean> result = new HashMap<>();
// result.put("available", available);
return SingleResponse.of(result);
}
@ApiOperation("车牌号黑名单校验")
@GetMapping("/check-licence-no-black")
public SingleResponse<Map<String, Object>> checkLicenceNoBlack(@RequestParam String licenceNo) {
Map<String, Object> result = vehicleApplyService.checkLicenceNoBlack(licenceNo);
return SingleResponse.of(result);
}
@ApiOperation("分公司统计")
@GetMapping("/fgsCount")
public PageResponse<FgsVehicleCountCo> fgsCount(@RequestParam HashMap<String,Object> qry) {
return vehicleApplyService.fgsCount(qry);
}
@ApiOperation("跟据车辆归属查询车辆分页")
@GetMapping("/getCarByVehicleBelongType")
public PageResponse<VehicleApplyCO> getCarByVehicleBelongType(VehicleApplyPageQry qry) {
return vehicleApplyService.getCarByVehicleBelongType(qry);
}
@ApiOperation("相关方-车辆授权")
@PostMapping("/xgfCarAuthorization")
public Response xgfCarAuthorization(@RequestBody CarAuthCmd cmd) {
vehicleApplyService.xgfCarAuthorization(cmd);
return Response.buildSuccess();
}
}

View File

@ -0,0 +1,69 @@
package com.zcloud.primeport.web;
import com.alibaba.cola.dto.MultiResponse;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.Response;
import com.alibaba.cola.dto.SingleResponse;
import com.jjb.saas.framework.auth.model.SSOUser;
import com.jjb.saas.framework.auth.utils.AuthContext;
import com.zcloud.primeport.api.VehicleAuditServiceI;
import com.zcloud.primeport.dto.VehicleAuditAddCmd;
import com.zcloud.primeport.dto.VehicleAuditPageQry;
import com.zcloud.primeport.dto.VehicleAuditUpdateCmd;
import com.zcloud.primeport.dto.clientobject.VehicleAuditCO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
/**
* web-adapter
*
* @Author makejava
* @Date 2026-03-05 11:33:24
*/
@Api(tags = "车辆审批")
@RequestMapping("/${application.gateway}/vehicleAudit")
@RestController
@AllArgsConstructor
public class VehicleAuditController {
private final VehicleAuditServiceI vehicleAuditService;
// @ApiOperation("新增")
// @PostMapping("/save")
// public SingleResponse<VehicleAuditCO> add(@Validated @RequestBody VehicleAuditAddCmd cmd) {
// SSOUser ssoUser = AuthContext.getCurrentUser();
// return vehicleAuditService.add(cmd);
// }
@ApiOperation("待审批数据分页")
@PostMapping("/pendingApprovalList")
public PageResponse<VehicleAuditCO> page(@RequestBody VehicleAuditPageQry qry) {
return vehicleAuditService.listPage(qry);
}
@ApiOperation("车辆审批记录")
@PostMapping("/carApprovalLogByvehicleApplyIdList")
public PageResponse<VehicleAuditCO> carApprovalLogByvehicleApplyIdList(@RequestBody VehicleAuditPageQry qry) {
return vehicleAuditService.carApprovalLogByvehicleApplyIdList(qry);
}
@ApiOperation("审批人审批")
@PostMapping("/audit")
public Response audit(@RequestBody VehicleAuditUpdateCmd cmd) {
vehicleAuditService.audit(cmd);
return Response.buildSuccess();
}
@ApiOperation("详情")
@GetMapping("/{id}")
public SingleResponse<VehicleAuditCO> getInfoById(@PathVariable("id") Long id) {
return SingleResponse.of(vehicleAuditService.getInfoById(id));
}
}

View File

@ -0,0 +1,81 @@
package com.zcloud.primeport.web;
import com.alibaba.cola.dto.MultiResponse;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.Response;
import com.alibaba.cola.dto.SingleResponse;
import com.jjb.saas.framework.auth.model.SSOUser;
import com.jjb.saas.framework.auth.utils.AuthContext;
import com.zcloud.primeport.api.VehicleBlackServiceI;
import com.zcloud.primeport.dto.VehicleBlackAddCmd;
import com.zcloud.primeport.dto.VehicleBlackPageQry;
import com.zcloud.primeport.dto.VehicleBlackUpdateCmd;
import com.zcloud.primeport.dto.clientobject.VehicleBlackCO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
/**
* web-adapter
*
* @Author makejava
* @Date 2026-03-05 11:33:26
*/
@Api(tags = "车辆黑名单管理")
@RequestMapping("/${application.gateway}/vehicleBlack")
@RestController
@AllArgsConstructor
public class VehicleBlackController {
private final VehicleBlackServiceI vehicleBlackService;
@ApiOperation("新增")
@PostMapping("/save")
public SingleResponse<VehicleBlackCO> add(@Validated @RequestBody VehicleBlackAddCmd cmd) {
return vehicleBlackService.add(cmd);
}
@ApiOperation("分页")
@PostMapping("/list")
public PageResponse<VehicleBlackCO> page(@RequestBody VehicleBlackPageQry qry) {
return vehicleBlackService.listPage(qry);
}
// @ApiOperation("所有数据")
// @GetMapping("/listAll")
// public MultiResponse<VehicleBlackCO> listAll() {
// return MultiResponse.of(new ArrayList<VehicleBlackCO>());
// }
@ApiOperation("详情")
@GetMapping("/{id}")
public SingleResponse<VehicleBlackCO> getInfoById(@PathVariable("id") Long id) {
return SingleResponse.of(vehicleBlackService.getInfoById(id));
}
@ApiOperation("删除")
@DeleteMapping("/{id}")
public Response remove(@PathVariable("id") Long id) {
vehicleBlackService.remove(id);
return SingleResponse.buildSuccess();
}
// @ApiOperation("删除多个")
// @DeleteMapping("/ids")
// public Response removeBatch(@RequestParam Long[] ids) {
// vehicleBlackService.removeBatch(ids);
// return SingleResponse.buildSuccess();
// }
// @ApiOperation("修改")
// @PutMapping("/edit")
// public SingleResponse edit(@Validated @RequestBody VehicleBlackUpdateCmd vehicleBlackUpdateCmd) {
// vehicleBlackService.edit(vehicleBlackUpdateCmd);
// return SingleResponse.buildSuccess();
// }
}

View File

@ -0,0 +1,88 @@
package com.zcloud.primeport.web;
import com.zcloud.primeport.api.VehicleDockLogServiceI;
import com.zcloud.primeport.dto.VehicleDockLogAddCmd;
import com.zcloud.primeport.dto.VehicleDockLogPageQry;
import com.zcloud.primeport.dto.VehicleDockLogUpdateCmd;
import com.zcloud.primeport.dto.clientobject.VehicleDockLogCO;
import com.alibaba.cola.dto.MultiResponse;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.Response;
import com.alibaba.cola.dto.SingleResponse;
import com.jjb.saas.framework.auth.model.SSOUser;
import com.jjb.saas.framework.auth.utils.AuthContext;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* web-adapter
*
* @Author dearLin
* @Date 2026-04-14 14:53:29
*/
@Api(tags = "车辆对接记录")
@RequestMapping("/${application.gateway}/vehicleDockLog")
@RestController
@AllArgsConstructor
public class VehicleDockLogController {
private final VehicleDockLogServiceI vehicleDockLogService;
@ApiOperation("新增")
@PostMapping("/save")
public SingleResponse<VehicleDockLogCO> add(@Validated @RequestBody VehicleDockLogAddCmd cmd) {
SSOUser ssoUser = AuthContext.getCurrentUser();
return vehicleDockLogService.add(cmd);
}
@ApiOperation("分页")
@PostMapping("/list")
public PageResponse<VehicleDockLogCO> page(@RequestBody VehicleDockLogPageQry qry) {
return vehicleDockLogService.listPage(qry);
}
@ApiOperation("所有数据")
@GetMapping("/listAll")
public MultiResponse<VehicleDockLogCO> listAll() {
return MultiResponse.of(new ArrayList<VehicleDockLogCO>());
}
@ApiOperation("详情")
@GetMapping("/{id}")
public SingleResponse<VehicleDockLogCO> getInfoById(@PathVariable("id") Long id) {
return SingleResponse.of(vehicleDockLogService.queryById(id));
}
@ApiOperation("删除")
@DeleteMapping("/{id}")
public Response remove(@PathVariable("id") Long id) {
vehicleDockLogService.remove(id);
return SingleResponse.buildSuccess();
}
@ApiOperation("删除多个")
@DeleteMapping("/ids")
public Response removeBatch(@RequestParam("ids") String ids) {
List<Long> idsList = Arrays.stream(ids.split(","))
.map(Long::valueOf)
.collect(Collectors.toList());
vehicleDockLogService.removeBatch(idsList);
return SingleResponse.buildSuccess();
}
@ApiOperation("修改")
@PutMapping("/edit")
public SingleResponse edit(@Validated @RequestBody VehicleDockLogUpdateCmd vehicleDockLogUpdateCmd) {
vehicleDockLogService.edit(vehicleDockLogUpdateCmd);
return SingleResponse.buildSuccess();
}
}

View File

@ -0,0 +1,82 @@
package com.zcloud.primeport.web;
import com.alibaba.cola.dto.MultiResponse;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.Response;
import com.alibaba.cola.dto.SingleResponse;
import com.jjb.saas.framework.auth.model.SSOUser;
import com.jjb.saas.framework.auth.utils.AuthContext;
import com.zcloud.primeport.api.VehicleMessageServiceI;
import com.zcloud.primeport.dto.VehicleMessageAddCmd;
import com.zcloud.primeport.dto.VehicleMessagePageQry;
import com.zcloud.primeport.dto.VehicleMessageUpdateCmd;
import com.zcloud.primeport.dto.clientobject.VehicleMessageCO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
/**
* web-adapter
*
* @Author makejava
* @Date 2026-03-05 11:33:27
*/
@Api(tags = "审批通过的固化车辆信息用于与门禁系统对接")
@RequestMapping("/${application.gateway}/vehicleMessage")
@RestController
@AllArgsConstructor
public class VehicleMessageController {
private final VehicleMessageServiceI vehicleMessageService;
@ApiOperation("新增")
@PostMapping("/save")
public SingleResponse<VehicleMessageCO> add(@Validated @RequestBody VehicleMessageAddCmd cmd) {
SSOUser ssoUser = AuthContext.getCurrentUser();
return vehicleMessageService.add(cmd);
}
@ApiOperation("分页")
@PostMapping("/list")
public PageResponse<VehicleMessageCO> page(@RequestBody VehicleMessagePageQry qry) {
return vehicleMessageService.listPage(qry);
}
@ApiOperation("所有数据")
@GetMapping("/listAll")
public MultiResponse<VehicleMessageCO> listAll() {
return MultiResponse.of(new ArrayList<VehicleMessageCO>());
}
@ApiOperation("详情")
@GetMapping("/{id}")
public SingleResponse<VehicleMessageCO> getInfoById(@PathVariable("id") Long id) {
return SingleResponse.of(new VehicleMessageCO());
}
@ApiOperation("删除")
@DeleteMapping("/{id}")
public Response remove(@PathVariable("id") Long id) {
vehicleMessageService.remove(id);
return SingleResponse.buildSuccess();
}
@ApiOperation("删除多个")
@DeleteMapping("/ids")
public Response removeBatch(@RequestParam Long[] ids) {
vehicleMessageService.removeBatch(ids);
return SingleResponse.buildSuccess();
}
@ApiOperation("修改")
@PutMapping("/edit")
public SingleResponse edit(@Validated @RequestBody VehicleMessageUpdateCmd vehicleMessageUpdateCmd) {
vehicleMessageService.edit(vehicleMessageUpdateCmd);
return SingleResponse.buildSuccess();
}
}

View File

@ -0,0 +1,72 @@
package com.zcloud.primeport.web;
import com.alibaba.cola.dto.MultiResponse;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.Response;
import com.alibaba.cola.dto.SingleResponse;
import com.jjb.saas.framework.auth.model.SSOUser;
import com.jjb.saas.framework.auth.utils.AuthContext;
import com.zcloud.primeport.api.VehicleViolationsServiceI;
import com.zcloud.primeport.dto.VehicleViolationsAddCmd;
import com.zcloud.primeport.dto.VehicleViolationsPageQry;
import com.zcloud.primeport.dto.VehicleViolationsUpdateCmd;
import com.zcloud.primeport.dto.clientobject.VehicleViolationsCO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
/**
* web-adapter
*
* @Author makejava
* @Date 2026-03-05 11:33:29
*/
@Api(tags = "车辆违规记录")
@RequestMapping("/${application.gateway}/vehicleViolations")
@RestController
@AllArgsConstructor
public class VehicleViolationsController {
private final VehicleViolationsServiceI vehicleViolationsService;
@ApiOperation("新增")
@PostMapping("/save")
public SingleResponse<VehicleViolationsCO> add(@Validated @RequestBody VehicleViolationsAddCmd cmd) {
return vehicleViolationsService.add(cmd);
}
@ApiOperation("违规记录分页")
@PostMapping("/list")
public PageResponse<VehicleViolationsCO> page(@RequestBody VehicleViolationsPageQry qry) {
return vehicleViolationsService.violationRecordslistPage(qry);
}
@ApiOperation("违规详情记录分页")
@PostMapping("/detailsRecordList")
public PageResponse<VehicleViolationsCO> detailsRecordList(@RequestBody VehicleViolationsPageQry qry) {
return vehicleViolationsService.listPage(qry);
}
@ApiOperation("详情")
@GetMapping("/{id}")
public SingleResponse<VehicleViolationsCO> getInfoById(@PathVariable("id") Long id) {
return SingleResponse.of(vehicleViolationsService.getInfoById(id));
}
@ApiOperation("删除")
@DeleteMapping("/{id}")
public Response remove(@PathVariable("id") Long id) {
vehicleViolationsService.remove(id);
return SingleResponse.buildSuccess();
}
@ApiOperation("修改")
@PutMapping("/edit")
public SingleResponse edit(@Validated @RequestBody VehicleViolationsUpdateCmd vehicleViolationsUpdateCmd) {
vehicleViolationsService.edit(vehicleViolationsUpdateCmd);
return SingleResponse.buildSuccess();
}
}

View File

@ -0,0 +1,76 @@
package com.zcloud.primeport.web;
import com.alibaba.cola.dto.MultiResponse;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.Response;
import com.alibaba.cola.dto.SingleResponse;
import com.jjb.saas.framework.auth.model.SSOUser;
import com.jjb.saas.framework.auth.utils.AuthContext;
import com.zcloud.primeport.api.VideoServiceI;
import com.zcloud.primeport.dto.VideoAddCmd;
import com.zcloud.primeport.dto.VideoPageQry;
import com.zcloud.primeport.dto.VideoScreenPageQry;
import com.zcloud.primeport.dto.VideoUpdateCmd;
import com.zcloud.primeport.dto.clientobject.VideoCO;
import com.zcloud.primeport.dto.clientobject.VideoScreenCO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
/**
* web-adapter
*
* @Author makejava
* @Date 2026-03-05 11:33:30
*/
@Api(tags = "摄像头表")
@RequestMapping("/${application.gateway}/video")
@RestController
@AllArgsConstructor
public class VideoController {
private final VideoServiceI videoService;
@ApiOperation("新增")
@PostMapping("/save")
public SingleResponse<VideoCO> add(@Validated @RequestBody VideoAddCmd cmd) {
return videoService.add(cmd);
}
@ApiOperation("分页")
@PostMapping("/list")
public PageResponse<VideoCO> page(@RequestBody VideoPageQry qry) {
return videoService.listPage(qry);
}
@ApiOperation("详情")
@GetMapping("/{id}")
public SingleResponse<VideoCO> getInfoById(@PathVariable("id") Long id) {
return SingleResponse.of(videoService.getInfoById(id));
}
@ApiOperation("删除")
@DeleteMapping("/{id}")
public Response remove(@PathVariable("id") Long id) {
videoService.remove(id);
return SingleResponse.buildSuccess();
}
@ApiOperation("修改")
@PutMapping("/edit")
public SingleResponse edit(@Validated @RequestBody VideoUpdateCmd videoUpdateCmd) {
videoService.edit(videoUpdateCmd);
return SingleResponse.buildSuccess();
}
@ApiOperation("可视化大屏-摄像头列表不区分企业")
@PostMapping("/screenList")
public PageResponse<VideoScreenCO> screenList(@RequestBody VideoScreenPageQry qry) {
return videoService.screenList(qry);
}
}

View File

@ -0,0 +1,24 @@
package com.zcloud.primeport.web.app;
import com.alibaba.cola.dto.MultiResponse;
import com.alibaba.cola.dto.SingleResponse;
import com.zcloud.primeport.api.VehicleApplyServiceI;
import com.zcloud.primeport.dto.clientobject.AppCountCO;
import io.swagger.annotations.Api;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@Api(tags = "App统计角标")
@RequestMapping("/${application.gateway}/appStatisticsCorner")
@RestController
@AllArgsConstructor
public class AppCountController {
private final VehicleApplyServiceI vehicleApplyService;
@RequestMapping("/getAppCount")
public MultiResponse<AppCountCO> getAppCount() {
return vehicleApplyService.getAppCount();
}
}

View File

@ -0,0 +1,76 @@
package com.zcloud.primeport.web.close;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.Response;
import com.alibaba.cola.dto.SingleResponse;
import com.alibaba.cola.exception.BizException;
import com.zcloud.primeport.api.ClosedAreaCarApplyServiceI;
import com.zcloud.primeport.dto.ClosedAreaCarApplyAddCmd;
import com.zcloud.primeport.dto.ClosedAreaCarApplyAuditCmd;
import com.zcloud.primeport.dto.ClosedAreaCarApplyPageQry;
import com.zcloud.primeport.dto.ClosedAreaCarApplyScreenPageQry;
import com.zcloud.primeport.dto.ClosedAreaCarApplyUpdateCmd;
import com.zcloud.primeport.dto.clientobject.ClosedAreaCarApplyCO;
import com.zcloud.primeport.dto.clientobject.ClosedAreaCarApplyScreenCO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* web-adapter
*
* @Author dearLin
* @Date 2026-03-20 10:07:13
*/
@Api(tags = "封闭区域-车辆申请")
@RequestMapping("/${application.gateway}/closedAreaCarApply")
@RestController
@AllArgsConstructor
public class ClosedAreaCarApplyController {
private final ClosedAreaCarApplyServiceI closedAreaCarApplyService;
@ApiOperation("新增")
@PostMapping("/save")
public SingleResponse<ClosedAreaCarApplyCO> add(@Validated @RequestBody ClosedAreaCarApplyAddCmd cmd) {
return closedAreaCarApplyService.add(cmd);
}
@ApiOperation("分页")
@PostMapping("/list")
// todo 完善申请人查询,审批人查询,数据权限
public PageResponse<ClosedAreaCarApplyCO> page(@RequestBody ClosedAreaCarApplyPageQry qry) {
return closedAreaCarApplyService.listPage(qry);
}
@ApiOperation("详情")
@GetMapping("/{id}")
public SingleResponse<ClosedAreaCarApplyCO> getInfoById(@PathVariable("id") Long id) {
return SingleResponse.of(closedAreaCarApplyService.queryById(id));
}
@ApiOperation("删除")
@DeleteMapping("/{id}")
public Response remove(@PathVariable("id") Long id) {
closedAreaCarApplyService.remove(id);
return SingleResponse.buildSuccess();
}
@ApiOperation("审批车辆申请")
@PostMapping("/auditCarApply")
public Response auditCarApply(@RequestBody ClosedAreaCarApplyAuditCmd auditCmd) {
if (!(auditCmd.getAuditFlag().equals(2) || auditCmd.getAuditFlag().equals(3))) {
throw new BizException("只能是通过或者不通过");
}
closedAreaCarApplyService.auditCarApply(auditCmd);
return Response.buildSuccess();
}
@ApiOperation("可视化大屏-车申请记录")
@PostMapping("/screenList")
public PageResponse<ClosedAreaCarApplyScreenCO> screenList(@RequestBody ClosedAreaCarApplyScreenPageQry qry) {
return closedAreaCarApplyService.screenList(qry);
}
}

View File

@ -0,0 +1,114 @@
package com.zcloud.primeport.web.close;
import com.alibaba.cola.dto.MultiResponse;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.Response;
import com.alibaba.cola.dto.SingleResponse;
import com.jjb.saas.framework.auth.utils.AuthContext;
import com.zcloud.primeport.api.ClosedAreaServiceI;
import com.zcloud.primeport.dto.ClosedAreaAddCmd;
import com.zcloud.primeport.dto.ClosedAreaCorpStatCmd;
import com.zcloud.primeport.dto.ClosedAreaCountCmd;
import com.zcloud.primeport.dto.ClosedAreaPageQry;
import com.zcloud.primeport.dto.ClosedAreaUpdateCmd;
import com.zcloud.primeport.dto.clientobject.ClosedAreaCO;
import com.zcloud.primeport.dto.clientobject.ClosedAreaCorpStatCO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@Api(tags = "封闭区域")
@RequestMapping("/${application.gateway}/closedArea")
@RestController
@AllArgsConstructor
public class ClosedAreaController {
private final ClosedAreaServiceI closedAreaService;
@ApiOperation("树级结构")
@GetMapping("/listTree")
public MultiResponse<ClosedAreaCO> listTree(ClosedAreaPageQry qry) {
return closedAreaService.listTree(qry);
}
@ApiOperation("统计港区里所有的封闭区域数与管辖单位数")
@GetMapping("/getCountByHgAuthArea")
public MultiResponse<ClosedAreaCO> getCountByHgAuthArea() {
return closedAreaService.getCountByHgAuthArea();
}
@ApiOperation("新增")
@PostMapping("/save")
public SingleResponse<ClosedAreaCO> add(@Validated @RequestBody ClosedAreaAddCmd cmd) {
return closedAreaService.add(cmd);
}
@ApiOperation("分页")
@PostMapping("/list")
public PageResponse<ClosedAreaCO> page(@RequestBody ClosedAreaPageQry qry) {
return closedAreaService.listPage(qry);
}
@ApiOperation("根据港区选择对应的封闭区域")
@GetMapping("/listAllByhgAuthArea")
public MultiResponse<ClosedAreaCO> listAllByhgAuthArea(@RequestParam("hgAuthArea") String hgAuthArea) {
return closedAreaService.listAllByhgAuthArea(hgAuthArea);
}
@ApiOperation("根据管辖单位查询封闭区域")
@GetMapping("/listAllByJurisdictionalCorpId/{id}")
public MultiResponse<ClosedAreaCO> listAllByJurisdictionalCorpId(@PathVariable("id") Long id) {
if (id == null) {
id = AuthContext.getTenantId();
}
return closedAreaService.listAllByJurisdictionalCorpId(id);
}
@ApiOperation("详情")
@GetMapping("/{id}")
public SingleResponse<ClosedAreaCO> getInfoById(@PathVariable("id") Long id) {
return SingleResponse.of(closedAreaService.queryById(id));
}
@ApiOperation("删除")
@DeleteMapping("/{id}")
public Response remove(@PathVariable("id") Long id) {
closedAreaService.remove(id);
return SingleResponse.buildSuccess();
}
@ApiOperation("删除多个")
@DeleteMapping("/ids")
public Response removeBatch(@RequestParam Long[] ids) {
closedAreaService.removeBatch(ids);
return SingleResponse.buildSuccess();
}
@ApiOperation("修改")
@PutMapping("/edit")
public SingleResponse edit(@Validated @RequestBody ClosedAreaUpdateCmd closedAreaUpdateCmd) {
closedAreaService.edit(closedAreaUpdateCmd);
return SingleResponse.buildSuccess();
}
@ApiOperation("区域人员和车辆统计")
@PostMapping("/count")
public MultiResponse count(@RequestBody ClosedAreaCountCmd closedAreaCountCmd) {
return closedAreaService.count(closedAreaCountCmd);
}
@ApiOperation("可视化大屏-封闭区域统计")
@PostMapping("/corpStat")
public SingleResponse<ClosedAreaCorpStatCO> corpStat( @RequestBody ClosedAreaCorpStatCmd cmd) {
return closedAreaService.corpStat(cmd);
}
}

View File

@ -0,0 +1,111 @@
package com.zcloud.primeport.web.close;
import com.alibaba.cola.dto.*;
import com.alibaba.cola.exception.BizException;
import com.zcloud.primeport.api.ClosedAreaPersonApplyServiceI;
import com.zcloud.primeport.dto.ClosedAreaPersonApplyAddCmd;
import com.zcloud.primeport.dto.ClosedAreaPersonApplyAuditCmd;
import com.zcloud.primeport.dto.ClosedAreaPersonApplyAuthCmd;
import com.zcloud.primeport.dto.ClosedAreaPersonApplyPageQry;
import com.zcloud.primeport.dto.ClosedAreaPersonApplyScreenPageQry;
import com.zcloud.primeport.dto.clientobject.ClosedAreaPersonApplyCO;
import com.zcloud.primeport.dto.clientobject.ClosedAreaPersonApplyDeptCO;
import com.zcloud.primeport.dto.clientobject.ClosedAreaPersonApplyScreenCO;
import com.zcloud.primeport.dto.clientobject.UserCo;
import com.zcloud.primeport.persistence.dataobject.UserDto;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
/**
* web-adapter
*
* @Author dearLin
* @Date 2026-03-19 13:59:16
*/
@Api(tags = "人员封闭区域申请审批")
@RequestMapping("/${application.gateway}/closedAreaPersonApply")
@RestController
@AllArgsConstructor
public class ClosedAreaPersonApplyController {
private final ClosedAreaPersonApplyServiceI closedAreaPersonApplyService;
@ApiOperation("查询分公司里的人授权范围")
@GetMapping("/getAuthorizationPersonInfo/{id}")
public SingleResponse<ClosedAreaPersonApplyCO> getAuthorizationPersonInfo(@PathVariable("id") Long id) {
return closedAreaPersonApplyService.getAuthorizationPersonInfo(id);
}
@ApiOperation("给分公司里的人授权二级门禁")
@PostMapping("/authorizationPerson")
public Response authPerson(@RequestBody ClosedAreaPersonApplyAuthCmd cmd) {
closedAreaPersonApplyService.authPerson(cmd);
return Response.buildSuccess();
}
@ApiOperation("审批人员审批")
@PostMapping("/auditPersonApply")
public Response auditPersonApply(@RequestBody ClosedAreaPersonApplyAuditCmd auditCmd) {
if (!(auditCmd.getAuditFlag().equals(2) || auditCmd.getAuditFlag().equals(3))) {
throw new BizException("只能是通过或者不通过");
}
closedAreaPersonApplyService.auditPersonApply(auditCmd);
return Response.buildSuccess();
}
@ApiOperation("获取本单位人员信息数据,用于随行人员,企业人员权限列表")
@PostMapping("/getCorpUserList")
public PageResponse<UserCo> getCorpUserList(@RequestBody ClosedAreaPersonApplyPageQry qry) {
return closedAreaPersonApplyService.getCorpUserList(qry);
}
@ApiOperation("新增")
@PostMapping("/save")
public SingleResponse<ClosedAreaPersonApplyCO> add(@Validated @RequestBody ClosedAreaPersonApplyAddCmd cmd) {
return closedAreaPersonApplyService.add(cmd);
}
@ApiOperation("待审批-已审批|申请中-申请记录分页")
// todo 需配置审批,申请的不同数据 权限
@PostMapping("/pendingApprovalRecordList")
public PageResponse<ClosedAreaPersonApplyCO> pendingApprovalRecordList(@RequestBody ClosedAreaPersonApplyPageQry qry) {
return closedAreaPersonApplyService.listPage(qry);
}
@ApiOperation("申请记录部门分页")
@GetMapping("/pendingApprovalDeptList")
public MultiResponse<ClosedAreaPersonApplyDeptCO> pendingApprovalDeptList() {
return closedAreaPersonApplyService.deptList();
}
// @ApiOperation("所有数据")
// @GetMapping("/listAll")
// public MultiResponse<ClosedAreaPersonApplyCO> listAll() {
// return MultiResponse.of(new ArrayList<ClosedAreaPersonApplyCO>());
// }
@ApiOperation("详情")
@GetMapping("/{id}")
public SingleResponse<ClosedAreaPersonApplyCO> getInfoById(@PathVariable("id") Long id) {
return SingleResponse.of(closedAreaPersonApplyService.queryById(id));
}
// @ApiOperation("删除")
// @DeleteMapping("/{id}")
// public Response remove(@PathVariable("id") Long id) {
// closedAreaPersonApplyService.remove(id);
// return SingleResponse.buildSuccess();
// }
@ApiOperation("可视化大屏-人申请记录")
@PostMapping("/screenList")
public PageResponse<ClosedAreaPersonApplyScreenCO> screenList(@RequestBody ClosedAreaPersonApplyScreenPageQry qry) {
return closedAreaPersonApplyService.screenList(qry);
}
}

View File

@ -0,0 +1,174 @@
package com.zcloud.primeport.web.close;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.Response;
import com.alibaba.cola.dto.SingleResponse;
import com.alibaba.cola.exception.BizException;
import com.alibaba.fastjson.JSON;
import com.zcloud.primeport.api.ClosedAreaCarApplyServiceI;
import com.zcloud.primeport.api.ClosedAreaPersonApplyServiceI;
import com.zcloud.primeport.api.PersonApplyServiceI;
import com.zcloud.primeport.api.VehicleApplyServiceI;
import com.zcloud.primeport.domain.enums.TmpApplyEnum;
import com.zcloud.primeport.domain.model.VehicleApplyE;
import com.zcloud.primeport.dto.*;
import com.zcloud.primeport.dto.clientobject.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.HashMap;
/**
* web-adapter
*
* @Author dearLin
* @Date 2026-03-20 10:07:13
*/
@Api(tags = "封闭区域-临时人员-车辆申请")
@RequestMapping("/${application.gateway}/closedTmpApply")
@RestController
@AllArgsConstructor
public class ClosedTmpApplyController {
private final ClosedAreaCarApplyServiceI closedAreaCarApplyService;
private final ClosedAreaPersonApplyServiceI closedAreaPersonApplyServiceI;
private final PersonApplyServiceI personApplyServiceI;
private final VehicleApplyServiceI vehicleApplyServiceI;
@ApiOperation("新增")
@PostMapping("/save")
public SingleResponse<HashMap<String, Object>> add(@Validated @RequestBody ClosedTmpApplyAddCmd cmd) {
Long id = 0L;
if (cmd.getTmpApplyType().equals(TmpApplyEnum.PERSON_APPLY.getCode())) {
if (cmd.getTmpMkmjType().equals(TmpApplyEnum.TWO_LEVEL_PERSON_APPLY.getCode())) {
id = closedAreaPersonApplyServiceI.saveTmpPersonApply(cmd);
}
if (cmd.getTmpMkmjType().equals(TmpApplyEnum.ONE_LEVEL_PERSON_APPLY.getCode())) {
XgfPersonApplyAddCmd xgf = new XgfPersonApplyAddCmd();
BeanUtils.copyProperties(cmd, xgf);
xgf.setPersonBelongType(4);
HashMap<String, Object> stringObjectHashMap = new HashMap<>();
ArrayList<HashMap<String, Object>> hashMaps = new ArrayList<>();
stringObjectHashMap.put("bianma", cmd.getHgAuthArea());
stringObjectHashMap.put("value", cmd.getHgAuthAreaName());
hashMaps.add(stringObjectHashMap);
HashMap<String, Object> stringObjectHashMap2 = new HashMap<>();
stringObjectHashMap2.put("area", hashMaps);
xgf.setGateLevelAuthArea(JSON.toJSONString(stringObjectHashMap2));
xgf.setAuditCorpId(cmd.getAuditPersonCorpId());
xgf.setAuditCorpName(cmd.getAuditPersonCorpName());
xgf.setAuditDeptId(cmd.getAuditPersonDepartmentId());
xgf.setAuditDeptName(cmd.getAuditPersonDepartmentName());
xgf.setAuditUserId(cmd.getAuditPersonUserId());
xgf.setAuditUserName(cmd.getAuditPersonUserName());
xgf.setReasonVisit(cmd.getApplyReason());
xgf.setMkmjId(cmd.getLevelOneMkmjId());
xgf.setMkmjName(cmd.getLevelOneMkmjName());
XgfPersonApplyAddCmd.PersonApplyAddCmdExt personApplyAddCmdExt = new XgfPersonApplyAddCmd.PersonApplyAddCmdExt();
personApplyAddCmdExt.setEmployeePersonUserName(cmd.getApplyPersonUserName());
personApplyAddCmdExt.setUserFaceUrl(cmd.getUserFaceUrl());
personApplyAddCmdExt.setUserPhone(cmd.getUserPhone());
personApplyAddCmdExt.setUserCard(cmd.getUserCard());
ArrayList<XgfPersonApplyAddCmd.PersonApplyAddCmdExt> personApplyAddCmdExts = new ArrayList<>();
personApplyAddCmdExts.add(personApplyAddCmdExt);
xgf.setPersonApplyList(personApplyAddCmdExts);
id = personApplyServiceI.xgfPersonSave(xgf);
}
}
if (cmd.getTmpApplyType().equals(TmpApplyEnum.CAR_APPLY.getCode())) {
if (cmd.getApplyPersonUserName() == null) {
cmd.setApplyPersonUserName(cmd.getDrivingUserName());
}
if (cmd.getTmpMkmjType().equals(TmpApplyEnum.ONE_LEVEL_CAR_APPLY.getCode())) {
VehicleApplyAddCmd vehicleApplyAddCmd = new VehicleApplyAddCmd();
BeanUtils.copyProperties(cmd, vehicleApplyAddCmd);
vehicleApplyAddCmd.setVehicleBelongType("6");
HashMap<String, Object> stringObjectHashMap = new HashMap<>();
ArrayList<HashMap<String, Object>> hashMaps = new ArrayList<>();
stringObjectHashMap.put("bianma", cmd.getHgAuthArea());
stringObjectHashMap.put("value", cmd.getHgAuthAreaName());
hashMaps.add(stringObjectHashMap);
HashMap<String, Object> stringObjectHashMap2 = new HashMap<>();
stringObjectHashMap2.put("area", hashMaps);
vehicleApplyAddCmd.setGateLevelAuthArea(JSON.toJSONString(stringObjectHashMap2));
vehicleApplyAddCmd.setAuditCorpId(cmd.getAuditPersonCorpId());
vehicleApplyAddCmd.setAuditCorpName(cmd.getAuditPersonCorpName());
vehicleApplyAddCmd.setAuditDeptId(cmd.getAuditPersonDepartmentId());
vehicleApplyAddCmd.setAuditDeptName(cmd.getAuditPersonDepartmentName());
vehicleApplyAddCmd.setAuditUserId(cmd.getAuditPersonUserId());
vehicleApplyAddCmd.setAuditUserName(cmd.getAuditPersonUserName());
vehicleApplyAddCmd.setMkmjId(cmd.getLevelOneMkmjId());
vehicleApplyAddCmd.setMkmjName(cmd.getLevelOneMkmjName());
vehicleApplyAddCmd.setLsUserIdcard(cmd.getUserCard());
vehicleApplyAddCmd.setLsUserPhone(cmd.getUserPhone());
vehicleApplyAddCmd.setEmployeeVehicleUserName(cmd.getApplyPersonUserName());
vehicleApplyAddCmd.setDrivingUserName(cmd.getDrivingUserName());
vehicleApplyAddCmd.setRemarks(cmd.getApplyReason());
SingleResponse<VehicleApplyE> add = vehicleApplyServiceI.add(vehicleApplyAddCmd);
id = add.getData().getId();
}
if (cmd.getTmpMkmjType().equals(TmpApplyEnum.TWO_LEVEL_CAR_APPLY.getCode())) {
id = closedAreaCarApplyService.saveTmpCarApply(cmd);
}
}
HashMap<String, Object> stringLongHashMap = new HashMap<>();
stringLongHashMap.put("id", id);
stringLongHashMap.put("tmpApplyType", cmd.getTmpApplyType());
stringLongHashMap.put("tmpMkmjType", cmd.getTmpMkmjType());
return SingleResponse.of(stringLongHashMap);
}
@ApiOperation("详情")
@GetMapping("/getInfoById")
public SingleResponse<TmpApplyCO> getInfoById(@RequestParam("id") Long id,
@RequestParam("tmpApplyType") String tmpApplyType, @RequestParam("tmpMkmjType") String tmpMkmjType) {
TmpApplyCO tmpApplyCO = new TmpApplyCO();
if (TmpApplyEnum.PERSON_APPLY.getCode().equals(tmpApplyType)) {
if (TmpApplyEnum.ONE_LEVEL_PERSON_APPLY.getCode().equals(tmpMkmjType)) {
XgfPersonApplyCO xgfPersonApplyCO = personApplyServiceI.xgfPersonApplyInfoById(id);
tmpApplyCO.setApplyReason(xgfPersonApplyCO.getReasonVisit());
tmpApplyCO.setAuditFlag(xgfPersonApplyCO.getAuditFlag());
tmpApplyCO.setRefusalReason(xgfPersonApplyCO.getReasonsRefusal());
tmpApplyCO.setAuditPersonUserId(xgfPersonApplyCO.getAuditUserId());
tmpApplyCO.setAuditPersonUserName(xgfPersonApplyCO.getAuditUserName());
tmpApplyCO.setVisitStartTime(xgfPersonApplyCO.getVisitStartTime());
tmpApplyCO.setVisitEndTime(xgfPersonApplyCO.getVisitEndTime());
tmpApplyCO.setLevelOneMkmjId(xgfPersonApplyCO.getMkmjId());
tmpApplyCO.setLevelOneMkmjName(xgfPersonApplyCO.getMkmjName());
tmpApplyCO.setUserPhone(xgfPersonApplyCO.getPersonApplyList().get(0).getUserPhone());
tmpApplyCO.setApplyPersonUserName(xgfPersonApplyCO.getPersonApplyList().get(0).getEmployeePersonUserName());
}
if (TmpApplyEnum.TWO_LEVEL_PERSON_APPLY.getCode().equals(tmpMkmjType)) {
ClosedAreaPersonApplyCO closedAreaPersonApplyCO = closedAreaPersonApplyServiceI.queryById(id);
BeanUtils.copyProperties(closedAreaPersonApplyCO, tmpApplyCO);
}
}
if (TmpApplyEnum.CAR_APPLY.getCode().equals(tmpApplyType)) {
if (TmpApplyEnum.ONE_LEVEL_CAR_APPLY.getCode().equals(tmpMkmjType)) {
VehicleApplyCO infoById = vehicleApplyServiceI.getInfoById(id);
BeanUtils.copyProperties(infoById, tmpApplyCO);
tmpApplyCO.setLevelOneMkmjName(infoById.getMkmjName());
tmpApplyCO.setLevelOneMkmjId(infoById.getMkmjId());
tmpApplyCO.setUserPhone(infoById.getLsUserPhone());
tmpApplyCO.setApplyPersonUserName(infoById.getEmployeeVehicleUserName());
tmpApplyCO.setRefusalReason(infoById.getCurrentRemarks());
}
if (TmpApplyEnum.TWO_LEVEL_CAR_APPLY.getCode().equals(tmpMkmjType)) {
ClosedAreaCarApplyCO closedAreaCarApplyCO = closedAreaCarApplyService.queryById(id);
BeanUtils.copyProperties(closedAreaCarApplyCO, tmpApplyCO);
}
}
tmpApplyCO.setId(id);
tmpApplyCO.setTmpApplyType(tmpApplyType);
return SingleResponse.of(tmpApplyCO);
}
}

View File

@ -21,6 +21,30 @@
<groupId>com.zcloud.primeport</groupId>
<artifactId>web-infrastructure</artifactId>
</dependency>
<dependency>
<groupId>com.zcloud.primeport</groupId>
<artifactId>web-domain</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>net.bytebuddy</groupId>
<artifactId>byte-buddy</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>net.bytebuddy</groupId>
<artifactId>byte-buddy</artifactId>
<version>1.12.23</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rocketmq</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,41 @@
package com.zcloud.primeport.command;
import com.zcloud.primeport.domain.gateway.ClosedAreaGateway;
import com.zcloud.primeport.domain.model.ClosedAreaE;
import com.zcloud.primeport.dto.ClosedAreaAddCmd;
import com.alibaba.cola.exception.BizException;
import lombok.AllArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
/**
* web-app
* @Author dearLin
* @Date 2026-03-19 10:27:50
*/
@Component
@AllArgsConstructor
public class ClosedAreaAddExe {
private final ClosedAreaGateway closedAreaGateway;
@Transactional(rollbackFor = Exception.class)
public boolean execute(ClosedAreaAddCmd cmd) {
ClosedAreaE closedAreaE = new ClosedAreaE();
BeanUtils.copyProperties(cmd, closedAreaE);
boolean res = false;
try {
res = closedAreaGateway.add(closedAreaE);
} catch (Exception e) {
throw new RuntimeException(e);
}
if (!res) {
throw new BizException("保存失败");
}
return true;
}
}

View File

@ -0,0 +1,86 @@
package com.zcloud.primeport.command;
import com.alibaba.cola.dto.SingleResponse;
import com.jjb.saas.framework.auth.model.SSOUser;
import com.jjb.saas.framework.auth.utils.AuthContext;
import com.zcloud.gbscommon.todolistmq.TodoListEventPusherUtil;
import com.zcloud.gbscommon.todolistmq.event.TodoListAddEvent;
import com.zcloud.gbscommon.zclouduser.facade.ZcloudUserFacade;
import com.zcloud.gbscommon.zclouduser.response.ZcloudUserCo;
import com.zcloud.primeport.domain.config.MessageTemplateConfig;
import com.zcloud.primeport.domain.enums.AuditEnum;
import com.zcloud.primeport.domain.enums.CloseCarBelongTypeEnum;
import com.zcloud.primeport.domain.gateway.ClosedAreaCarApplyGateway;
import com.zcloud.primeport.domain.model.ClosedAreaCarApplyE;
import com.zcloud.primeport.dto.ClosedAreaCarApplyAddCmd;
import com.alibaba.cola.exception.BizException;
import jodd.util.Base64;
import lombok.AllArgsConstructor;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.HashMap;
import java.util.Map;
/**
* web-app
*
* @Author dearLin
* @Date 2026-03-20 10:07:13
*/
@Component
@AllArgsConstructor
public class ClosedAreaCarApplyAddExe {
private final ClosedAreaCarApplyGateway closedAreaCarApplyGateway;
private final MessageNoticeExe messageNoticeExe;
private final MessageTemplateConfig messageTemplateConfig;
@DubboReference
private ZcloudUserFacade zcloudUserFacade;
@Transactional(rollbackFor = Exception.class)
public Long execute(ClosedAreaCarApplyAddCmd cmd) {
ClosedAreaCarApplyE closedAreaCarApplyE = new ClosedAreaCarApplyE();
BeanUtils.copyProperties(cmd, closedAreaCarApplyE);
closedAreaCarApplyE.setAuditFlag(AuditEnum.WAITING.getCode());
closedAreaCarApplyE.setExpiredExpiration("2");
if (!cmd.getCarBelongType().equals(CloseCarBelongTypeEnum.TEMPORARY_VEHICLES.getCode())) {
SingleResponse<ZcloudUserCo> infoByUserId = zcloudUserFacade.getInfoByUserId(AuthContext.getUserId());
ZcloudUserCo userData = infoByUserId.getData();
SSOUser currentUser = AuthContext.getCurrentUser();
if (cmd.getCarBelongType().equals(CloseCarBelongTypeEnum.FGS_INSIDE_VEHICLES.getCode())) {
closedAreaCarApplyE.setJurisdictionalCorpId(currentUser.getTenantId());
closedAreaCarApplyE.setJurisdictionalCorpName(currentUser.getTenantName());
}
closedAreaCarApplyE.setApplyPersonCorpId(currentUser.getTenantId());
closedAreaCarApplyE.setApplyPersonCorpName(currentUser.getTenantName());
closedAreaCarApplyE.setApplyPersonDepartmentId(currentUser.getOrgId());
closedAreaCarApplyE.setApplyPersonDepartmentName(currentUser.getOrgName());
closedAreaCarApplyE.setApplyPersonUserId(currentUser.getUserId());
closedAreaCarApplyE.setApplyPersonUserName(userData.getName());
closedAreaCarApplyE.setUserPhone(userData.getPhone());
closedAreaCarApplyE.setUserCard(userData.getUserIdCard());
closedAreaCarApplyE.setUserFaceUrl(userData.getUserAvatarUrl());
} else {
// closedAreaCarApplyE.setUserCard(Base64.encodeToString(cmd.getUserCard()));
}
boolean res = closedAreaCarApplyGateway.add(closedAreaCarApplyE);
if (!res) {
throw new BizException("保存失败");
}
// 发送消息通知 和 待办
if (cmd.getAuditPersonUserId() != null) {
// 发送消息提醒
Map <String, Object> sendParams = new HashMap <>();
messageNoticeExe.sendMessageNotice(cmd.getAuditPersonUserId(), messageTemplateConfig.getClosedAreaApplyReceiveAudit(), sendParams);
// 发送待办
messageNoticeExe.sendMessageTodoEvent(cmd.getAuditPersonUserId(), "您有一条封闭区域审核,请及时进行审核。", "待审核", closedAreaCarApplyE.getId(), closedAreaCarApplyE.getId(), 1, 1);
}
return closedAreaCarApplyE.getId();
}
}

View File

@ -0,0 +1,39 @@
package com.zcloud.primeport.command;
import com.zcloud.primeport.domain.gateway.ClosedAreaCarApplyGateway;
import com.alibaba.cola.exception.BizException;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
/**
* web-app
*
* @Author dearLin
* @Date 2026-03-20 10:07:14
*/
@Component
@AllArgsConstructor
public class ClosedAreaCarApplyRemoveExe {
private final ClosedAreaCarApplyGateway closedAreaCarApplyGateway;
@Transactional(rollbackFor = Exception.class)
public boolean execute(Long id) {
boolean res = closedAreaCarApplyGateway.deletedClosedAreaCarApplyById(id);
if (!res) {
throw new BizException("删除失败");
}
return true;
}
@Transactional(rollbackFor = Exception.class)
public boolean execute(Long[] ids) {
boolean res = closedAreaCarApplyGateway.deletedClosedAreaCarApplyByIds(ids);
if (!res) {
throw new BizException("删除失败");
}
return true;
}
}

View File

@ -0,0 +1,84 @@
package com.zcloud.primeport.command;
import com.alibaba.cola.exception.BizException;
import com.zcloud.gbscommon.todolistmq.TodoListEventPusherUtil;
import com.zcloud.gbscommon.todolistmq.event.TodoListCompleteEvent;
import com.zcloud.gbscommon.utils.DateUtil;
import com.zcloud.primeport.domain.config.MessageTemplateConfig;
import com.zcloud.primeport.domain.gateway.ClosedAreaCarApplyGateway;
import com.zcloud.primeport.domain.model.ClosedAreaCarApplyE;
import com.zcloud.primeport.dto.ClosedAreaCarApplyAuditCmd;
import com.zcloud.primeport.dto.ClosedAreaCarApplyUpdateCmd;
import com.zcloud.primeport.plan.mjDevice.TwoCarUtil;
import lombok.AllArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* web-app
*
* @Author dearLin
* @Date 2026-03-20 10:07:15
*/
@Component
@AllArgsConstructor
public class ClosedAreaCarApplyUpdateExe {
private final ClosedAreaCarApplyGateway closedAreaCarApplyGateway;
private final MessageNoticeExe messageNoticeExe;
private final MessageTemplateConfig messageTemplateConfig;
private final TwoCarUtil twoCarUtil;
@Transactional(rollbackFor = Exception.class)
public void execute(ClosedAreaCarApplyUpdateCmd closedAreaCarApplyUpdateCmd) {
ClosedAreaCarApplyE closedAreaCarApplyE = new ClosedAreaCarApplyE();
BeanUtils.copyProperties(closedAreaCarApplyUpdateCmd, closedAreaCarApplyE);
boolean res = closedAreaCarApplyGateway.update(closedAreaCarApplyE);
if (!res) {
throw new BizException("修改失败");
}
}
@Transactional(rollbackFor = Exception.class)
public void auditCarApply(ClosedAreaCarApplyAuditCmd auditCmd) {
ClosedAreaCarApplyE closedAreaCarApplyE = closedAreaCarApplyGateway.queryById(auditCmd.getId());
if (closedAreaCarApplyE == null) {
throw new BizException("车辆申请记录不存在");
}
closedAreaCarApplyE.setId(auditCmd.getId());
closedAreaCarApplyE.setAuditFlag(auditCmd.getAuditFlag());
closedAreaCarApplyE.setRefusalReason(auditCmd.getRefusalReason());
closedAreaCarApplyE.setAuditTime(DateUtil.date2Str(new Date()));
closedAreaCarApplyGateway.update(closedAreaCarApplyE);
// 完成待办
messageNoticeExe.sendMessageCompleteEvent(auditCmd.getId());
// 发送通知
if (closedAreaCarApplyE.getApplyPersonUserId() != null) {
Map <String, Object> sendParams = new HashMap <>();
String sourceCode = "您提交的一级口门车辆审批已通过";
if (auditCmd.getAuditFlag().equals(2)) {
// 通过
sourceCode = messageTemplateConfig.getClosedAreaApplyReceiveCarAudit();
}else {
// 驳回
sourceCode = messageTemplateConfig.getClosedAreaApplyReceiveCarAuditReject();
}
messageNoticeExe.sendMessageNotice(closedAreaCarApplyE.getApplyPersonUserId(), sourceCode, sendParams);
}
// 审批通过 → 同步门禁权限(二级海康 + 一级车行)
// 根据carBelongType判断车辆类型内部车不走临时接口不覆盖一级原有权限
if (auditCmd.getAuditFlag().equals(2)) {
twoCarUtil.levelTwoCarCompanyByApplyId(auditCmd.getId());
}
}
}

View File

@ -0,0 +1,87 @@
package com.zcloud.primeport.command;
import com.alibaba.cola.dto.SingleResponse;
import com.jjb.saas.framework.auth.model.SSOUser;
import com.jjb.saas.framework.auth.utils.AuthContext;
import com.zcloud.gbscommon.todolistmq.TodoListEventPusherUtil;
import com.zcloud.gbscommon.todolistmq.event.TodoListAddEvent;
import com.zcloud.gbscommon.zclouduser.facade.ZcloudUserFacade;
import com.zcloud.gbscommon.zclouduser.response.ZcloudUserCo;
import com.zcloud.primeport.domain.config.MessageTemplateConfig;
import com.zcloud.primeport.domain.gateway.ClosedAreaPersonApplyGateway;
import com.zcloud.primeport.domain.model.ClosedAreaPersonApplyE;
import com.zcloud.primeport.dto.ClosedAreaPersonApplyAddCmd;
import com.alibaba.cola.exception.BizException;
import jodd.util.Base64;
import lombok.AllArgsConstructor;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.HashMap;
import java.util.Map;
/**
* web-app
*
* @Author dearLin
* @Date 2026-03-19 13:59:15
*/
@Component
@AllArgsConstructor
public class ClosedAreaPersonApplyAddExe {
private final ClosedAreaPersonApplyGateway closedAreaPersonApplyGateway;
private final MessageNoticeExe messageNoticeExe;
private final MessageTemplateConfig messageTemplateConfig;
@DubboReference
private ZcloudUserFacade zcloudUserFacade;
@Transactional(rollbackFor = Exception.class)
public Long execute(ClosedAreaPersonApplyAddCmd cmd) {
ClosedAreaPersonApplyE closedAreaPersonApplyE = new ClosedAreaPersonApplyE();
BeanUtils.copyProperties(cmd, closedAreaPersonApplyE);
closedAreaPersonApplyE.setAuditFlag(1);
if (!cmd.getPersonBelongType().equals(4)) {
SingleResponse<ZcloudUserCo> infoByUserId = zcloudUserFacade.getInfoByUserId(AuthContext.getUserId());
ZcloudUserCo userData = infoByUserId.getData();
SSOUser currentUser = AuthContext.getCurrentUser();
closedAreaPersonApplyE.setApplyPersonCorpId(currentUser.getTenantId());
closedAreaPersonApplyE.setApplyPersonCorpName(currentUser.getTenantName());
closedAreaPersonApplyE.setApplyPersonDepartmentId(currentUser.getOrgId());
closedAreaPersonApplyE.setApplyPersonDepartmentName(currentUser.getOrgName());
closedAreaPersonApplyE.setApplyPersonUserId(currentUser.getUserId());
closedAreaPersonApplyE.setApplyPersonUserName(userData.getName());
closedAreaPersonApplyE.setUserPhone(userData.getPhone());
closedAreaPersonApplyE.setUserCard(userData.getUserIdCard());
closedAreaPersonApplyE.setUserFaceUrl(userData.getUserAvatarUrl());
}else {
// closedAreaPersonApplyE.setUserCard(Base64.encodeToString(cmd.getUserCard()));
}
boolean res = closedAreaPersonApplyGateway.add(closedAreaPersonApplyE);
if (!res) {
throw new BizException("保存失败");
}
// 发送 消息通知 和 待办
// 发送消息通知 和 待办
if (cmd.getAuditPersonUserId() != null) {
// 发送消息提醒
Map <String, Object> sendParams = new HashMap <>();
messageNoticeExe.sendMessageNotice(cmd.getAuditPersonUserId(), messageTemplateConfig.getClosedAreaApplyReceiveAudit(), sendParams);
// 发送待办
messageNoticeExe.sendMessageTodoEvent(cmd.getAuditPersonUserId(), "您有一条封闭区域审核,请及时进行审核。", "待审核", closedAreaPersonApplyE.getId(), closedAreaPersonApplyE.getId(), 1, 1);
}
return closedAreaPersonApplyE.getId();
}
public static void main(String[] args) {
System.out.println(Base64.encodeToString("130323199504189999"));
System.out.println(Base64.decodeToString("MTMwMzIzMTk5NTA0MTg5OTk5"));
System.out.println(Base64.decodeToString("MTMwMzU0MTk5NzA0MDQyMDEw"));
}
}

View File

@ -0,0 +1,40 @@
package com.zcloud.primeport.command;
import com.zcloud.primeport.domain.gateway.ClosedAreaPersonApplyGateway;
import com.alibaba.cola.exception.BizException;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
/**
* web-app
* @Author dearLin
* @Date 2026-03-19 13:59:16
*/
@Component
@AllArgsConstructor
public class ClosedAreaPersonApplyRemoveExe {
private final ClosedAreaPersonApplyGateway closedAreaPersonApplyGateway;
@Transactional(rollbackFor = Exception.class)
public boolean execute(Long id) {
boolean res = closedAreaPersonApplyGateway.deletedClosedAreaPersonApplyById(id);
if(!res){
throw new BizException("删除失败");
}
return true;
}
@Transactional(rollbackFor = Exception.class)
public boolean execute(Long[] ids) {
boolean res = closedAreaPersonApplyGateway.deletedClosedAreaPersonApplyByIds(ids);
if(!res){
throw new BizException("删除失败");
}
return true;
}
}

View File

@ -0,0 +1,156 @@
package com.zcloud.primeport.command;
import com.alibaba.cola.dto.SingleResponse;
import com.alibaba.cola.exception.BizException;
import com.zcloud.gbscommon.todolistmq.TodoListEventPusherUtil;
import com.zcloud.gbscommon.todolistmq.event.TodoListCompleteEvent;
import com.zcloud.gbscommon.utils.DateUtil;
import com.zcloud.gbscommon.utils.Tools;
import com.zcloud.gbscommon.zclouduser.facade.ZcloudUserFacade;
import com.zcloud.gbscommon.zclouduser.response.ZcloudUserCo;
import com.zcloud.primeport.domain.config.MessageTemplateConfig;
import com.zcloud.primeport.domain.gateway.ClosedAreaFgsPersonAreaGateway;
import com.zcloud.primeport.domain.gateway.ClosedAreaFgsPersonAuthGateway;
import com.zcloud.primeport.domain.gateway.ClosedAreaPersonApplyGateway;
import com.zcloud.primeport.domain.model.ClosedAreaCarApplyE;
import com.zcloud.primeport.domain.model.ClosedAreaFgsPersonAreaE;
import com.zcloud.primeport.domain.model.ClosedAreaFgsPersonAuthE;
import com.zcloud.primeport.domain.model.ClosedAreaPersonApplyE;
import com.zcloud.primeport.dto.ClosedAreaPersonApplyAuditCmd;
import com.zcloud.primeport.dto.ClosedAreaPersonApplyAuthCmd;
import com.zcloud.primeport.dto.ClosedAreaPersonApplyUpdateCmd;
import com.zcloud.primeport.plan.mjDevice.OnePersonUtil;
import com.zcloud.primeport.plan.mjDevice.TwoPersonUtil;
import lombok.AllArgsConstructor;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
/**
* web-app
*
* @Author dearLin
* @Date 2026-03-19 13:59:16
*/
@Component
@AllArgsConstructor
public class ClosedAreaPersonApplyUpdateExe {
private final ClosedAreaPersonApplyGateway closedAreaPersonApplyGateway;
private final ClosedAreaFgsPersonAuthGateway areaFgsPersonAuthGateway;
private final ClosedAreaFgsPersonAreaGateway areaFgsPersonAreaGateway;
private final MessageNoticeExe messageNoticeExe;
private final MessageTemplateConfig messageTemplateConfig;
private final TwoPersonUtil twoPersonUtil;
private final OnePersonUtil onePersonUtil;
@DubboReference
private ZcloudUserFacade zcloudUserFacade;
@Transactional(rollbackFor = Exception.class)
public void execute(ClosedAreaPersonApplyUpdateCmd closedAreaPersonApplyUpdateCmd) {
ClosedAreaPersonApplyE closedAreaPersonApplyE = new ClosedAreaPersonApplyE();
BeanUtils.copyProperties(closedAreaPersonApplyUpdateCmd, closedAreaPersonApplyE);
boolean res = closedAreaPersonApplyGateway.update(closedAreaPersonApplyE);
if (!res) {
throw new BizException("修改失败");
}
}
@Transactional(rollbackFor = Exception.class)
public void auditPersonApply(ClosedAreaPersonApplyAuditCmd auditCmd) {
ClosedAreaPersonApplyE closedAreaPersonApplyE = closedAreaPersonApplyGateway.queryById(auditCmd.getId());
if (closedAreaPersonApplyE == null) {
throw new BizException("车辆申请记录不存在");
};
closedAreaPersonApplyE.setId(auditCmd.getId());
closedAreaPersonApplyE.setAuditFlag(auditCmd.getAuditFlag());
closedAreaPersonApplyE.setRefusalReason(auditCmd.getRefusalReason());
closedAreaPersonApplyE.setAuditTime(DateUtil.date2Str(new Date()));
closedAreaPersonApplyGateway.update(closedAreaPersonApplyE);
// 完成待办
messageNoticeExe.sendMessageCompleteEvent(auditCmd.getId());
// 发送通知
if (closedAreaPersonApplyE.getApplyPersonUserId() != null) {
Map <String, Object> sendParams = new HashMap <>();
if (closedAreaPersonApplyE.getProjectName() != null) {
sendParams.put("projectName", closedAreaPersonApplyE.getProjectName());
}
String sourceCode = "您提交的一级口门车辆审批已通过";
if (auditCmd.getAuditFlag().equals(2)) {
// 通过
sourceCode = messageTemplateConfig.getClosedAreaPersonReceiveAudit();
}else {
// 驳回
sourceCode = messageTemplateConfig.getClosedAreaPersonReceiveAuditReject();
}
messageNoticeExe.sendMessageNotice(closedAreaPersonApplyE.getApplyPersonUserId(), sourceCode, sendParams);
}
// 审批通过 → 同步门禁权限(二级海康 + 一级大华)
// 内部会先查大华系统判断是否已有权限,不覆盖原有权限
if (auditCmd.getAuditFlag().equals(2)) {
twoPersonUtil.levelTwoPeopleCompanyByApplyId(auditCmd.getId());
}
}
@Transactional(rollbackFor = Exception.class)
public void authPerson(ClosedAreaPersonApplyAuthCmd cmd) {
areaFgsPersonAuthGateway.removeByUserId(cmd.getUserId());
ClosedAreaFgsPersonAuthE closedAreaFgsPersonAuthE = new ClosedAreaFgsPersonAuthE();
closedAreaFgsPersonAuthE.setUserId(cmd.getUserId());
closedAreaFgsPersonAuthE.setCorpId(cmd.getCorpId());
closedAreaFgsPersonAuthE.setMkmjPermission(cmd.getMkmjPermission());
closedAreaFgsPersonAuthE.setDepartmentId(cmd.getDepartmentId());
areaFgsPersonAuthGateway.addOrUpdate(closedAreaFgsPersonAuthE);
areaFgsPersonAreaGateway.removeByFgspersonAuthId(cmd.getUserId());
ArrayList<ClosedAreaFgsPersonAreaE> objects = new ArrayList<>();
List<ClosedAreaPersonApplyAuthCmd.FgsPersonArea> areaList = cmd.getAreaList();
for (ClosedAreaPersonApplyAuthCmd.FgsPersonArea fgsPersonArea : areaList) {
ClosedAreaFgsPersonAreaE closedAreaFgsPersonAreaE = new ClosedAreaFgsPersonAreaE();
closedAreaFgsPersonAreaE.setClosedAreaId(fgsPersonArea.getClosedAreaId());
closedAreaFgsPersonAreaE.setClosedAreaName(fgsPersonArea.getClosedAreaName());
closedAreaFgsPersonAreaE.setFgsPersonAuthId(fgsPersonArea.getFgsPersonAuthId());
objects.add(closedAreaFgsPersonAreaE);
}
areaFgsPersonAreaGateway.saveBatch(objects);
// 开启门禁权限时,查一级大华是否有已有权限,不覆盖
if (cmd.getMkmjPermission() != null && cmd.getMkmjPermission().equals(1)) {
// 获取人员身份证号
SingleResponse<ZcloudUserCo> userInfo = zcloudUserFacade.getInfoByUserId(cmd.getUserId());
if (userInfo != null && userInfo.getData() != null) {
String userCard = userInfo.getData().getUserIdCard();
String userName = userInfo.getData().getName();
String userFaceUrl = userInfo.getData().getUserAvatarUrl();
if (Tools.notEmpty(userCard)) {
// 查询一级门禁(大华)是否已有权限
try {
cn.hutool.json.JSONArray dahuaUsers = onePersonUtil.getMkmjUserInfoByUserCard(Collections.singletonList(userCard));
if (dahuaUsers == null || dahuaUsers.isEmpty()) {
// 大华没有该用户 → 新增(有效期按每日任务刷新)
onePersonUtil.dockLongTermUserByUserCardAndFaceImg(
userCard,
"hbqa" + userCard,
userName,
userFaceUrl,
DateUtil.date2Str(new Date(), "yyyy-MM-dd") + " 00:00:00",
DateUtil.date2Str(new Date(), "yyyy-MM-dd") + " 23:59:59"
);
}
// 已有大华权限 → 保留,不覆盖
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
}
}
}

View File

@ -0,0 +1,40 @@
package com.zcloud.primeport.command;
import com.zcloud.primeport.domain.gateway.ClosedAreaGateway;
import com.alibaba.cola.exception.BizException;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
/**
* web-app
* @Author dearLin
* @Date 2026-03-19 10:27:51
*/
@Component
@AllArgsConstructor
public class ClosedAreaRemoveExe {
private final ClosedAreaGateway closedAreaGateway;
@Transactional(rollbackFor = Exception.class)
public boolean execute(Long id) {
boolean res = closedAreaGateway.deletedClosedAreaById(id);
if(!res){
throw new BizException("删除失败");
}
return true;
}
@Transactional(rollbackFor = Exception.class)
public boolean execute(Long[] ids) {
boolean res = closedAreaGateway.deletedClosedAreaByIds(ids);
if(!res){
throw new BizException("删除失败");
}
return true;
}
}

Some files were not shown because too many files have changed in this diff Show More