Compare commits

...

408 Commits
main ... dev_xd

Author SHA1 Message Date
haha 96d727c60f 增加视点管理 2025-06-05 00:31:06 +08:00
姜玉琦 78325d3fbd 提交代码 2025-06-03 01:11:54 +08:00
haha 482a7322bf 自定义视点漫游功能实现 2025-06-02 00:15:10 +08:00
haha 9e3205060a 修改大屏劳务管理 2025-06-01 21:13:55 +08:00
姜玉琦 a01534c6dc Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd 2025-05-31 14:29:45 +08:00
姜玉琦 3c43c688dd 提交代码 2025-05-31 14:29:36 +08:00
haha a706dadaf8 删除无用文件 2025-05-31 13:30:23 +08:00
haha 7a90768240 漫游功能开发 2025-05-31 13:29:44 +08:00
haha 1003b4ea23 漫游 2025-05-31 13:21:41 +08:00
姜玉琦 751aa30884 提交代码 2025-05-28 17:40:31 +08:00
姜玉琦 a7f771da34 Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd 2025-05-28 16:55:10 +08:00
haha b3479543c4 漫游功能开发 2025-05-27 00:14:58 +08:00
姜玉琦 de854e83bf Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd 2025-05-24 23:22:47 +08:00
姜玉琦 acdcd09214 提交代码 2025-05-24 23:22:37 +08:00
haha d329e5cc8c 修改劳务管理大屏 2025-05-24 22:31:33 +08:00
姜玉琦 2b2969e256 Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd 2025-05-23 00:23:22 +08:00
姜玉琦 72a47123b7 提交代码 2025-05-23 00:23:03 +08:00
haha 5f48623204 劳务管理大屏 2025-05-23 00:08:04 +08:00
haha d37d9e4966 修改SQL语句 2025-05-21 23:39:44 +08:00
haha fc82ce3ef9 修改后台生成代码 2025-05-21 23:13:05 +08:00
haha 95d37fab45 劳务管理大屏 2025-05-21 00:47:25 +08:00
姜玉琦 5657b2d806 提交代码 2025-05-20 22:52:02 +08:00
姜玉琦 f5c0d8e28a 提交代码 2025-05-20 22:18:44 +08:00
姜玉琦 06ceddbd15 Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd 2025-05-20 19:49:37 +08:00
姜玉琦 8c578aa707 提交代码 2025-05-20 19:49:27 +08:00
haha 0205552d92 劳务管理后台开发 2025-05-19 00:12:03 +08:00
姜玉琦 d1d003e7f4 提交代码 2025-05-18 10:50:12 +08:00
姜玉琦 2a6abb3ad2 提交代码 2025-05-18 10:49:44 +08:00
haha b9958ebdb1 更新大屏 2025-05-14 23:49:00 +08:00
haha 082e35f9c5 修复问题 2025-05-13 01:06:27 +08:00
haha a14ffac2bd 修改大屏 2025-05-12 00:07:04 +08:00
haha e7b424885a 修复大屏样式 2025-05-11 00:09:30 +08:00
haha 60b880930a Merge remote-tracking branch 'origin/dev_xd' into dev_xd 2025-05-10 01:08:00 +08:00
haha 9864ee43c7 修改大屏和后台前端 2025-05-10 01:07:53 +08:00
姜玉琦 7d14cda64c Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd 2025-05-09 22:25:56 +08:00
姜玉琦 93c5730c4c 提交代码 2025-05-09 22:25:45 +08:00
haha 08df9489a5 大屏增加济工网考勤 2025-05-08 23:56:13 +08:00
haha e26c79cf23 大屏考勤兼容处理 2025-05-08 00:21:11 +08:00
姜玉琦 58e87b2416 提交代码 2025-05-07 23:58:22 +08:00
姜玉琦 f8d55d7c0a 提交代码 2025-05-07 23:57:01 +08:00
姜玉琦 c8541786dd 提交代码 2025-05-07 22:24:37 +08:00
姜玉琦 5c6158377e 提交代码 2025-05-07 22:18:18 +08:00
姜玉琦 7778f37f02 提交 2025-05-07 01:18:16 +08:00
姜玉琦 9155b554da 提交代码 2025-05-07 01:08:13 +08:00
姜玉琦 ea16bd847c Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd 2025-05-07 00:38:20 +08:00
姜玉琦 7c416e34ee 提交代码 2025-05-07 00:38:09 +08:00
haha e440d52ebf 修改大屏升降机 2025-05-06 23:36:48 +08:00
haha 8a01cf3856 修改济工网考勤系统 2025-05-05 20:12:53 +08:00
haha 8f8d4dbb08 处理考勤系统 2025-04-30 00:32:29 +08:00
姜玉琦 ef1f1ff326 交通 2025-04-30 00:05:10 +08:00
姜玉琦 d649f22678 提交代码 2025-04-29 22:44:54 +08:00
姜玉琦 aa121061d5 Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd 2025-04-29 22:36:36 +08:00
姜玉琦 261bfd443e 提交diamagnetic 2025-04-29 22:36:26 +08:00
haha b6971a78d1 解决后台视频监控增加问题 2025-04-29 22:20:39 +08:00
姜玉琦 d9a0c5b99e Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd 2025-04-29 00:39:41 +08:00
姜玉琦 3b3784aa37 提交代码 2025-04-29 00:39:32 +08:00
haha b29e602186 考勤系统迁移 2025-04-29 00:00:22 +08:00
haha ea06236cf9 考勤系统搬迁 2025-04-28 23:35:42 +08:00
姜玉琦 16e131d60e Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd 2025-04-28 00:41:11 +08:00
姜玉琦 f6cc1ecbf8 提交代码 2025-04-28 00:41:03 +08:00
haha fc8226e526 修改考勤配置 2025-04-28 00:03:00 +08:00
haha 70ae89dd70 增加dataway框架 2025-04-27 22:36:00 +08:00
姜玉琦 3604154c1c 提交代码 2025-04-27 01:52:47 +08:00
haha f7213542c0 修改绿能小数问题 2025-04-25 23:14:21 +08:00
haha c345857ce7 BIM设置 2025-04-23 23:43:26 +08:00
haha 8c06e14a40 BIM设置 2025-04-22 00:07:38 +08:00
姜玉琦 cdda19bfae 提交代码 2025-04-20 13:36:37 +08:00
姜玉琦 1fda12bdff Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd
# Conflicts:
#	yanzhu-bigscreen/src/components/header.vue
2025-04-20 13:33:30 +08:00
姜玉琦 e23d807e0f 提交代码 2025-04-20 13:32:10 +08:00
haha 73fd57044f BIM 模型上传界面 2025-04-16 23:58:47 +08:00
haha 85e5da3405 大屏问题修复 2025-04-15 00:53:18 +08:00
haha 5e838368cb Merge remote-tracking branch 'origin/dev_xd' into dev_xd 2025-04-13 23:09:36 +08:00
haha 1b80070208 后台隐藏头部 2025-04-13 23:09:31 +08:00
姜玉琦 6d1663f282 Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd 2025-04-13 22:40:19 +08:00
姜玉琦 c979a4cd92 提交代码 2025-04-13 22:40:10 +08:00
haha c50517a26c 修改大屏问题 2025-04-13 22:28:19 +08:00
姜玉琦 7c736b0fd5 提交代码 2025-04-12 13:05:24 +08:00
姜玉琦 ba6d050b71 提交代码 2025-04-12 12:46:55 +08:00
haha d280db235a bim 2025-04-09 00:27:01 +08:00
haha c127b5019b 后台问题修复 2025-04-07 23:56:54 +08:00
姜玉琦 3d4515c56f 提交代码 2025-04-07 12:51:37 +08:00
haha e5c06edcee bim+gis 2025-04-07 00:55:58 +08:00
haha c486fd61d9 update code 2025-04-06 22:08:54 +08:00
haha 8f69fc9d45 更新代码 2025-04-06 22:05:16 +08:00
haha d9e6d81393 修改大屏报错 2025-04-06 22:01:25 +08:00
姜玉琦 fbcc9d5b85 init 2025-04-05 16:49:30 +08:00
姜玉琦 0183f4e6fd 提交代码 2025-04-05 12:44:12 +08:00
姜玉琦 28904c6768 提交代码 2025-04-05 01:14:57 +08:00
haha d07e2e8129 bim 模型管理 2025-04-04 00:25:29 +08:00
haha 060632dd82 在系统管理添加用户的时候输入完用户名和手机号点查询,会弹出提示框未找到数据,然后数据被清空了,不应该被清空 2025-04-01 23:50:37 +08:00
haha af47403143 Merge remote-tracking branch 'origin/dev_xd' into dev_xd 2025-04-01 22:33:52 +08:00
haha 3d260f7134 修改大屏考勤人员对话框 2025-04-01 00:14:12 +08:00
haha 40cf397199 Merge remote-tracking branch 'origin/dev_xd' into dev_xd 2025-03-31 23:51:57 +08:00
haha b34bf8bb9e 修改大屏项目详情信息 2025-03-31 23:51:54 +08:00
姜玉琦 6d5be9402c 提交代码 2025-03-31 22:36:03 +08:00
姜玉琦 dd32355b98 Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd 2025-03-30 22:04:23 +08:00
姜玉琦 5a580280a7 提交代码 2025-03-30 22:04:15 +08:00
haha 3cdb0d62da 修复塔机大屏 2025-03-26 22:53:46 +08:00
姜玉琦 6443a6e929 提交ok 2025-03-23 00:26:48 +08:00
姜玉琦 871964321d Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd 2025-03-23 00:15:44 +08:00
姜玉琦 3699296e63 提交代码 2025-03-23 00:15:33 +08:00
haha d27ddfe2f8 塔基大屏 2025-03-22 19:04:33 +08:00
姜玉琦 425eca74a2 Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd 2025-03-22 18:49:09 +08:00
姜玉琦 8add9bb887 提交代码 2025-03-22 18:49:00 +08:00
haha c372d4a8dd 塔机大屏后台 2025-03-20 23:15:22 +08:00
haha 3bfbc3d61f 塔机碰撞信息 2025-03-20 22:50:40 +08:00
haha ff7b80ddbf 塔机工作循环功能 2025-03-20 22:07:00 +08:00
haha d00f1c5363 塔机工作循环 2025-03-20 21:50:07 +08:00
姜玉琦 81b0a5244e 提交代码 2025-03-20 10:44:27 +08:00
姜玉琦 0c4a9f260d Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd 2025-03-20 00:53:35 +08:00
姜玉琦 e2dd163efc 提交代码 2025-03-20 00:53:20 +08:00
haha 5880a4c36b 塔吊监测API 2025-03-19 23:26:27 +08:00
haha c9432db452 塔机实时数据 2025-03-19 23:10:37 +08:00
haha 04213e6d91 塔基检测配置开发 2025-03-19 21:59:22 +08:00
haha 002abc4774 塔基后台 2025-03-16 23:29:04 +08:00
haha b22316d993 安全隐患大屏 2025-03-16 21:47:17 +08:00
haha cf6b67bf5a 安全隐患大屏 2025-03-15 00:12:16 +08:00
姜玉琦 4db7c1f325 意见 2025-03-14 00:53:30 +08:00
姜玉琦 ac0c401534 Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd 2025-03-14 00:15:25 +08:00
姜玉琦 b26778ca05 提交 2025-03-14 00:15:16 +08:00
haha cad9b21562 安全隐患大屏 2025-03-14 00:06:46 +08:00
姜玉琦 c0dbc27d5f 提交代码 2025-03-11 17:03:26 +08:00
姜玉琦 d2b8ce4b2c 提交代码 2025-03-10 00:01:08 +08:00
姜玉琦 e5653b4c56 提交 2025-03-09 21:17:00 +08:00
姜玉琦 10f6cad6cb 提交代码 2025-03-09 15:43:29 +08:00
姜玉琦 a9d0d7ad46 提交代码 2025-03-09 15:20:46 +08:00
姜玉琦 75953e6c1f 提交代码 2025-03-09 15:12:11 +08:00
姜玉琦 d5797bdb89 提交代码 2025-03-08 17:00:57 +08:00
姜玉琦 c968a009b3 提交代码 2025-03-08 16:54:27 +08:00
姜玉琦 f598a52789 提交代码 2025-03-08 16:25:28 +08:00
姜玉琦 4635d42aa4 Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd
# Conflicts:
#	yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/controller/SmzSspProblemmodifyController.java
#	yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/ISmzSspProblemmodifyService.java
2025-03-08 16:18:15 +08:00
姜玉琦 bb93a26ed0 提交代码 2025-03-08 16:14:09 +08:00
lj7788@126.com dea174ab73 安全隐患大屏后台 2025-03-08 15:39:41 +08:00
姜玉琦 898e4a5dd4 提交代码 2025-03-08 02:03:38 +08:00
姜玉琦 082acc5ce8 提交代码 2025-03-08 02:01:13 +08:00
姜玉琦 e31a2e2c91 提交dm 2025-03-06 23:05:45 +08:00
姜玉琦 20986f1a1f 提交代碼 2025-03-06 22:36:43 +08:00
姜玉琦 0b340003f3 提交代码 2025-03-05 23:45:45 +08:00
姜玉琦 f3735dbced Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd 2025-03-05 23:22:27 +08:00
姜玉琦 7820a68145 提交代码 2025-03-05 23:22:18 +08:00
haha 9a41479bec 安全隐患整改审批流程处理 2025-03-05 23:20:06 +08:00
haha 411a84e564 更新安全隐患排查-审批流程 2025-03-05 00:14:39 +08:00
姜玉琦 c02f15dc7b Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd 2025-03-04 23:00:14 +08:00
姜玉琦 248f3e1042 提交代码 2025-03-04 22:59:18 +08:00
haha be9e392ec7 安全隐患详情开发 2025-03-04 00:08:06 +08:00
haha 2536e68a0d 安全隐患整改列表处理 2025-03-02 23:21:59 +08:00
姜玉琦 deca8b10fc 提交代码 2025-03-02 11:37:31 +08:00
姜玉琦 f32f647c11 Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd 2025-03-02 11:34:53 +08:00
姜玉琦 bf1d2ce0a7 提交代码 2025-03-02 11:34:35 +08:00
haha 9d129fae53 安全隐患整改前端页面 2025-03-01 16:11:56 +08:00
haha c093e4dd91 安全隐患整改列表 2025-03-01 16:11:25 +08:00
haha 6491e9d05d 安全隐患列表 2025-03-01 00:06:15 +08:00
姜玉琦 e1a8ab5ade 提交代码 2025-02-28 21:42:59 +08:00
haha bc4d6e14ca 安全隐患功能 2025-02-28 00:27:10 +08:00
姜玉琦 2fbf85a62b 提交代码 2025-02-27 00:16:03 +08:00
姜玉琦 5fb316b69f 提交代码 2025-02-23 22:38:45 +08:00
姜玉琦 4c189dd5a4 提交代码 2025-02-23 22:08:16 +08:00
姜玉琦 cb04fa4bca 提交代码 2025-02-22 19:04:58 +08:00
姜玉琦 76d3f1513b 提交代码 2025-02-22 18:09:51 +08:00
姜玉琦 98abe2de96 Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd 2025-02-22 11:19:53 +08:00
姜玉琦 4cbac781bd 提交代码 2025-02-22 11:19:45 +08:00
haha 24e5c71579 修改用户管理的上传图片的验证 2025-02-22 11:10:51 +08:00
haha 8ccb8fefd5 用户管理身份证信息增加 2025-02-22 10:56:47 +08:00
haha c9fb9f9f56 系统用户界面增加身份证上传 2025-02-21 23:55:45 +08:00
姜玉琦 6703fc0bd1 提交代码 2025-02-21 00:44:49 +08:00
haha cfca6bb5c1 修改花名册的性别显示 2025-02-19 23:15:03 +08:00
haha fd1d8c3f27 Merge remote-tracking branch 'origin/dev_xd' into dev_xd 2025-02-19 22:59:26 +08:00
haha 4c06b239d9 修改花名册 2025-02-19 22:59:17 +08:00
姜玉琦 67cc8b2b32 提交代码 2025-02-19 22:58:48 +08:00
姜玉琦 66eb3670f2 提交代码 2025-02-19 22:56:16 +08:00
姜玉琦 b835425aed 提交代码 2025-02-19 22:47:38 +08:00
姜玉琦 94a0c70313 Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd 2025-02-19 22:22:55 +08:00
姜玉琦 b44bfe838c 提交代码 2025-02-19 22:22:47 +08:00
haha 815e830e30 安全问题草稿 2025-02-19 00:28:46 +08:00
haha 9b80dc0edc update code 2025-02-17 22:20:49 +08:00
姜玉琦 71b00ac449 Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd 2025-02-17 00:10:35 +08:00
姜玉琦 8d889e30ea 提交代码 2025-02-17 00:10:27 +08:00
lj7788@126.com e227a1a158 隐患管理 2025-02-16 17:21:39 +08:00
姜玉琦 c9104c62e3 提交代码 2025-02-16 17:20:25 +08:00
姜玉琦 d4fb05d7d1 Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd 2025-02-16 10:30:28 +08:00
姜玉琦 20f9f2864d 提交代码 2025-02-16 10:30:18 +08:00
lj7788@126.com cee68db1d3 隐患安全前端页面-代码生成 2025-02-15 16:57:13 +08:00
lj7788@126.com 5b28d1cbea 隐患管理后台代码-生成器 2025-02-15 16:52:57 +08:00
姜玉琦 849401501a 提交 2025-02-15 14:58:31 +08:00
姜玉琦 25e1882b4c Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd 2025-02-15 14:21:10 +08:00
姜玉琦 a5f0802170 提交 2025-02-15 14:20:56 +08:00
haha c0dc65db73 在合并 "dev_xd" 和 "origin/dev_xd" 前自动存档 2025-02-13 23:25:27 +08:00
姜玉琦 1c6c543523 提交代码 2025-02-13 00:20:27 +08:00
姜玉琦 41f8cfcd35 提交代码 2025-02-12 00:19:52 +08:00
姜玉琦 e6cc6dbf52 Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd 2025-02-11 23:12:01 +08:00
姜玉琦 dc560902e3 提交代码 2025-02-11 23:11:51 +08:00
haha e4479a11ad 修改绿能的导入和导出功能 2025-02-11 23:08:06 +08:00
haha 53193f94bb 修改人员花名册 2025-02-11 22:30:06 +08:00
haha f4ecf0425f Merge remote-tracking branch 'origin/dev_xd' into dev_xd 2025-02-11 22:29:35 +08:00
姜玉琦 44d498c2dc 提交diamagnetic 2025-02-11 15:01:56 +08:00
姜玉琦 04fbf42be4 提交代码 2025-02-10 11:28:21 +08:00
haha 55b1ed0d1e Merge remote-tracking branch 'origin/dev_xd' into dev_xd 2025-02-10 01:16:54 +08:00
姜玉琦 a38dfefa84 提交代码 2025-02-10 00:30:03 +08:00
姜玉琦 acb89e5bc1 提交代码 2025-02-09 23:21:48 +08:00
haha 42f0beb605 修改用户管理和花名册列表增加人员岗位显示 2025-02-09 22:32:13 +08:00
haha 049a04bcc7 人员表中增加人员岗位 2025-02-09 21:56:02 +08:00
姜玉琦 ce126e5682 Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd 2025-02-08 00:21:51 +08:00
姜玉琦 ee3ac9904a 提交 2025-02-08 00:21:43 +08:00
haha 1a9f23ee0b 修复绿碳功能问题 2025-02-06 22:28:43 +08:00
haha 3540ec00ee 修改前端功能 2025-02-05 23:47:15 +08:00
haha dedd2dc535 Merge remote-tracking branch 'origin/dev_xd' into dev_xd 2025-02-05 23:46:45 +08:00
姜玉琦 674595d683 提交 2025-02-05 23:44:23 +08:00
haha 24f70b0efb Merge remote-tracking branch 'origin/dev_xd' into dev_xd 2025-02-05 22:05:04 +08:00
haha 3d0597c252 修改用户查询,增加com_name 2025-02-05 22:05:00 +08:00
姜玉琦 72ff6d6f49 提交代码 2025-02-05 21:56:28 +08:00
姜玉琦 d45a66a2fe 提交代码 2025-02-05 21:34:43 +08:00
haha 9f3b2b35b2 update code 2025-02-02 22:46:26 +08:00
haha b682453d76 解决冲突 2025-01-25 23:33:10 +08:00
haha 7978582c60 Merge remote-tracking branch 'origin/dev_xd' into dev_xd 2025-01-25 23:28:33 +08:00
haha 716b388d46 Revert "更新文件"
This reverts commit 886fe18434.
2025-01-25 23:26:46 +08:00
lj7788@126.com 5a19e81931 修改考勤参数 2025-01-25 14:37:50 +08:00
lj7788@126.com af69e57c4f 修改考勤的保存功能 2025-01-25 13:03:47 +08:00
haha 886fe18434 更新文件 2025-01-24 23:40:35 +08:00
haha 19fb6e61f9 动态从身份证图片中获取数据 2025-01-24 23:37:20 +08:00
haha a8853781c4 增加身份证识别功能 2025-01-24 00:12:27 +08:00
haha c48a9130d7 Merge remote-tracking branch 'origin/dev_xd' into dev_xd 2025-01-23 00:02:20 +08:00
haha 42e7f1f2c0 修改花名册 2025-01-23 00:02:01 +08:00
姜玉琦 a278edbd29 提交代码 2025-01-22 00:21:04 +08:00
haha c7162b09ce 修改花名册的同步 2025-01-21 23:52:57 +08:00
姜玉琦 f04e7b191b 提交代码 2025-01-19 00:59:58 +08:00
haha 4176ed29fc 修改用户列表查询 2025-01-17 22:59:11 +08:00
姜玉琦 45af87f1f6 提交代码 2025-01-15 23:17:01 +08:00
姜玉琦 4dde6b7b36 提交代码 2025-01-15 00:49:37 +08:00
haha 5be1fdd66a 修改用户增加功能 2025-01-15 00:26:09 +08:00
haha 55dc571444 修改用户注册 2025-01-14 23:05:07 +08:00
姜玉琦 946004d476 提交代码 2025-01-14 22:59:52 +08:00
姜玉琦 2aa0013846 Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd 2025-01-14 11:35:08 +08:00
姜玉琦 cba2a35f2f 提交代码 2025-01-14 11:34:45 +08:00
haha f91232d0e0 修改用户管理界面 2025-01-13 23:59:24 +08:00
lj7788@126.com e40e1092e5 修改管理员激活项目 2025-01-11 20:31:06 +08:00
lj7788@126.com 3d7ce9ea79 修改多租户功能 2025-01-11 17:14:40 +08:00
lj7788@126.com 1492f4ce31 修改多租户功能 2025-01-11 12:39:47 +08:00
lj7788@126.com a408dec2ef 修改多租户 2025-01-10 17:45:27 +08:00
lj7788@126.com e892f77673 系统用户改造 2025-01-09 22:20:40 +08:00
lj7788@126.com 9490d7aa7c 修改查询命令 2025-01-09 14:16:11 +08:00
lj7788@126.com b33a2cd67c update code 2025-01-09 13:29:30 +08:00
haha 72cf2d257c update 2025-01-09 12:16:22 +08:00
haha af4cfe9ff8 修改人员增加 2025-01-08 00:24:03 +08:00
姜玉琦 7b08ca2043 Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd 2025-01-08 00:22:29 +08:00
姜玉琦 785a80f661 提交代码 2025-01-08 00:22:22 +08:00
haha abb4acb456 班组修改 2025-01-07 23:07:35 +08:00
haha 80e68aeae4 在合并 "dev_xd" 和 "origin/dev_xd" 前自动存档 2025-01-07 00:34:41 +08:00
姜玉琦 654d6bf001 提交代码 2025-01-07 00:26:43 +08:00
姜玉琦 0d4b0152d3 提交代码 2025-01-06 23:50:29 +08:00
haha 111be9687a 修改花名册bug 2025-01-06 23:33:36 +08:00
姜玉琦 ffc70cbe29 Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd 2025-01-05 23:27:41 +08:00
姜玉琦 757686d4fa 提交代码 2025-01-05 23:27:32 +08:00
haha 1535514b0f 项目详情增加视频切换功能 2025-01-05 22:46:53 +08:00
姜玉琦 6cdfdf8da9 提交代码 2025-01-05 17:09:19 +08:00
haha d7a12c5a2a 花名册管理修改保存 2025-01-05 15:44:13 +08:00
姜玉琦 e88f802800 Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd 2025-01-05 14:51:01 +08:00
姜玉琦 2bd827b5d2 提交代码 2025-01-05 14:50:51 +08:00
haha 9988754739 修改花名册 2025-01-05 01:03:30 +08:00
姜玉琦 c5c077d1cb 提交代码 2025-01-04 19:16:21 +08:00
姜玉琦 5d0e06bc7b 1 2025-01-04 19:07:41 +08:00
姜玉琦 44a2e7fb34 Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd
# Conflicts:
#	yanzhu-common/yanzhu-common-mapper/src/main/resources/mapper/manage/ProProjectInfoSubdeptsUsersMapper.xml
2025-01-04 18:25:06 +08:00
姜玉琦 355f842d06 提交代码 2025-01-04 18:20:57 +08:00
haha 552f768190 大屏问题处理 2025-01-04 00:53:16 +08:00
haha 964a904cc1 修改后台里程碑管理保存的时候如果实际结束日期没有数据保存的时候会自动填充数据,需要改成不填充 2025-01-02 23:34:45 +08:00
haha 0ab4165788 修改图像不能上传问题 2025-01-02 22:40:43 +08:00
haha cee073cbc7 Merge remote-tracking branch 'origin/dev_xd' into dev_xd 2025-01-02 22:34:19 +08:00
haha 011b937191 update .gitignore 2025-01-02 22:33:40 +08:00
haha 4a39d7507b update .gitignore 2025-01-02 22:30:19 +08:00
haha 044fd616b1 Revert "Auxiliary commit to revert individual files from 6235eaf1ec66255731d32b57ae06d81b37593030"
This reverts commit 5c9cc4c94d570cce4146f82df5f847458d3b7ca6.
2025-01-02 22:23:31 +08:00
haha 6235eaf1ec 修改上传文件名,处理文件名 2025-01-02 22:17:00 +08:00
姜玉琦 a1f7d8df78 提交代码 2024-12-30 23:41:40 +08:00
姜玉琦 d07206d57d 提交代码 2024-12-30 23:37:15 +08:00
姜玉琦 a3d00eac91 提交代码 2024-12-30 23:31:50 +08:00
姜玉琦 eaa5ad1167 提交代码 2024-12-30 23:08:35 +08:00
姜玉琦 b02c67b7a3 Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd 2024-12-30 00:31:13 +08:00
姜玉琦 f8ebc6679b 提交代码 2024-12-30 00:31:06 +08:00
haha 467e9755fc 视频监控大屏 2024-12-29 23:00:20 +08:00
haha f312a55d7d Merge remote-tracking branch 'origin/dev_xd' into dev_xd 2024-12-29 22:11:01 +08:00
haha 0b7801b302 视频监控大屏 2024-12-29 22:10:36 +08:00
姜玉琦 7dbe6f0e68 提交代码 2024-12-29 21:36:44 +08:00
姜玉琦 70f43b3973 Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd 2024-12-29 11:48:09 +08:00
姜玉琦 8877bef239 提交代码 2024-12-29 11:47:59 +08:00
haha d3cfe40087 增加监控预览功能 2024-12-28 20:35:20 +08:00
lijun 9d75715d31 add videoMonitor 2024-12-28 09:52:23 +08:00
lijun 72fe8bdc16 增加项目成本产值管理 2024-12-24 23:41:35 +08:00
lj7788@126.com d7bdc1849f update code 2024-12-24 00:52:38 +08:00
lj7788@126.com 8c38750b3b 增加mac 2024-12-24 00:04:30 +08:00
姜玉琦 659f828a27 提交代码 2024-12-22 20:05:33 +08:00
姜玉琦 a58b7b8b03 Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd 2024-12-22 19:56:12 +08:00
姜玉琦 dd887b0496 提交代码 2024-12-22 19:56:04 +08:00
lijun 30fbba6b6b update code 2024-12-22 00:40:50 +08:00
lijun 46650c7b71 update code 2024-12-21 12:53:39 +08:00
姜玉琦 497177d521 提交代码 2024-12-20 20:25:29 +08:00
姜玉琦 26a1acb114 提交代码 2024-12-18 22:38:11 +08:00
姜玉琦 4a80de3acc 提交代码 2024-12-18 22:35:06 +08:00
lijun d563d23b07 update code 2024-12-17 22:57:59 +08:00
姜玉琦 b0ba39d781 提交代码 2024-12-17 22:36:07 +08:00
姜玉琦 7c8e5aac33 提交代码 2024-12-17 20:31:18 +08:00
姜玉琦 355d94c1b5 Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd
# Conflicts:
#	yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/IProProjectInfoSubdeptsUsersService.java
#	yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/impl/ProProjectInfoSubdeptsUsersServiceImpl.java
2024-12-17 20:27:18 +08:00
姜玉琦 ad0b751737 提交daim 2024-12-17 20:25:30 +08:00
lijun 3346e22d2f update code 2024-12-15 23:38:24 +08:00
lijun 234f32caad update code 2024-12-14 22:48:31 +08:00
lijun 05c15aeb9a update code 2024-12-13 22:06:04 +08:00
lijun 1723b7d0ac update code 2024-12-12 00:29:01 +08:00
lijun 13c655fa1c update code 2024-12-11 00:21:00 +08:00
lijun 300608c53e update code 2024-12-09 00:25:42 +08:00
lijun 69e2d0cb35 update 增加碳因子管理 2024-12-09 00:08:09 +08:00
lijun d641a73d5e update code 2024-12-07 12:49:34 +08:00
lijun 732c9c705f update code 2024-12-05 23:19:07 +08:00
lijun 4bd4b8eb20 update code 2024-12-05 23:18:31 +08:00
lijun 685a6db03e update code 2024-12-05 00:17:06 +08:00
lijun f3790e1b68 update code 2024-12-02 00:05:10 +08:00
lijun 692c601235 update code 2024-11-30 00:13:31 +08:00
lijun 909bc281a9 update code 2024-11-29 23:08:39 +08:00
lijun c6596db86c update code 2024-11-28 23:59:43 +08:00
lijun 8ed1dd28e1 增加大屏项目 2024-11-27 23:42:39 +08:00
lijun c62d6d3cc3 update code 2024-11-16 23:17:24 +08:00
Mac 727c7c414c 修改导入Project 2024-11-09 17:40:37 +08:00
lj7788 6b29ab9a30 增加任务管理 2024-11-09 10:05:00 +08:00
姜玉琦 a2ad6bce52 Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd 2024-11-02 11:07:32 +08:00
姜玉琦 6de8e3c413 提交代码 2024-11-02 11:07:14 +08:00
lijun 445908a5e8 update code 2024-10-22 23:22:56 +08:00
lijun 73df61a0a0 update 2024-10-22 01:02:50 +08:00
lijun b8aadddcca update 2024-10-22 01:01:54 +08:00
lijun dcd93473ed update code 2024-10-22 01:00:40 +08:00
lijun 3a494c9bb2 update code 2024-10-22 00:43:37 +08:00
lijun a0094c618a update code 2024-10-19 23:53:44 +08:00
lijun 396c18b2ff update code 2024-10-18 22:16:54 +08:00
姜玉琦 6fa3c1aed7 提交代码 2024-10-18 14:20:19 +08:00
lijun c55ea4a88e Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd 2024-10-16 00:24:58 +08:00
lijun 55070225cc update code 2024-10-16 00:24:46 +08:00
姜玉琦 725f4290c1 Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd 2024-10-15 23:55:21 +08:00
姜玉琦 d39ec4c92f 提交代码 2024-10-15 23:55:13 +08:00
lijun ec14b0557b update code 2024-10-15 23:22:33 +08:00
姜玉琦 181d2e9d53 Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd 2024-10-15 00:33:26 +08:00
姜玉琦 48dda158ad 提交代码 2024-10-15 00:32:34 +08:00
lijun df400f758b update code 2024-10-14 00:01:52 +08:00
lijun 23ad592b40 update code 2024-10-13 23:18:53 +08:00
姜玉琦 a0a14975af 提交 2024-10-13 16:20:02 +08:00
姜玉琦 5c1e1e427b 提交代码 2024-10-13 16:17:49 +08:00
姜玉琦 ea52f8e363 Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd 2024-10-13 15:40:39 +08:00
姜玉琦 4e2416fee1 提交代码 2024-10-13 15:40:28 +08:00
lijun 806f1fe08f Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd 2024-10-13 15:10:40 +08:00
lijun 098dda6c65 update code 2024-10-13 15:10:30 +08:00
姜玉琦 17ae99df01 提交代码 2024-10-13 13:22:00 +08:00
lijun 3fe8f4c6c3 update code 2024-10-13 11:26:52 +08:00
姜玉琦 62b7274548 Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd 2024-10-13 11:26:34 +08:00
姜玉琦 0811adc4a9 Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd
# Conflicts:
#	yanzhu-modules/yanzhu-manage/pom.xml
2024-10-13 11:26:27 +08:00
姜玉琦 3535b0d6a8 提交代码 2024-10-13 11:25:16 +08:00
lijun 1cf74add92 upate code 2024-10-13 00:15:53 +08:00
lijun 953f85ffc8 update code 2024-10-11 00:29:35 +08:00
lijun 7fcd920b52 update code 2024-10-10 00:34:39 +08:00
lijun 822d4add1f update code 2024-10-09 00:34:25 +08:00
lijun 88c5960665 update code 2024-10-08 23:39:19 +08:00
lijun d27312f85b update code 2024-10-08 01:07:33 +08:00
姜玉琦 f618dee734 提交代码 2024-10-08 00:23:10 +08:00
姜玉琦 c7dd2063a6 Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd 2024-10-07 22:44:04 +08:00
姜玉琦 7352d2df76 提交代码 2024-10-07 22:43:53 +08:00
lijun 4e2e4c831f 解决冲突 2024-10-04 18:49:39 +08:00
lijun deeaaa4ff4 update code 2024-10-04 18:47:45 +08:00
姜玉琦 25e37adf01 Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd 2024-10-04 14:41:11 +08:00
姜玉琦 a440b1c265 提交代码 2024-10-04 14:41:00 +08:00
lijun cfe27cd9a6 update code 2024-10-02 00:26:14 +08:00
lijun 7f0d164d4c update code 2024-10-01 23:55:58 +08:00
lijun 2667592b63 花名册管理 2024-10-01 16:35:07 +08:00
姜玉琦 c51bd4bc1e 提交代码 2024-09-29 23:40:15 +08:00
姜玉琦 0d67d70ff4 提交代码 2024-09-25 01:00:37 +08:00
姜玉琦 b9a5b6479d 提交代码 2024-09-23 01:25:06 +08:00
姜玉琦 4bd3fdf5e3 提交代码 2024-09-23 01:21:36 +08:00
姜玉琦 3f24b7a5dd Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd 2024-09-22 21:18:30 +08:00
姜玉琦 b0cd65d526 提交代码 2024-09-22 21:18:23 +08:00
lijun 7664525e84 update code 2024-09-21 23:56:36 +08:00
姜玉琦 31ae5e42a7 提交代码 2024-09-21 21:58:39 +08:00
姜玉琦 cf9af39a16 提交 2024-09-17 23:52:53 +08:00
姜玉琦 286e8abc0a 提交代码 2024-09-17 10:16:44 +08:00
姜玉琦 38419e4369 Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd
# Conflicts:
#	yanzhu-api/yanzhu-api-system/src/main/java/com/yanzhu/system/api/domain/SysUser.java
#	yanzhu-modules/yanzhu-system/src/main/resources/mapper/system/SysUserMapper.xml
#	yanzhu-ui-vue3/src/views/manage/busTrainingVideo/index.vue
#	yanzhu-ui-vue3/src/views/manage/proProjectInfo/index.vue
#	yanzhu-ui-vue3/src/views/tool/gen/index.vue
2024-09-10 00:08:01 +08:00
姜玉琦 ac7ee58db2 提交代码 2024-09-09 23:58:32 +08:00
haha 1c95a50d1c 增加项目管理功能 2024-09-04 00:20:16 +08:00
haha 9519000083 update code 2024-09-01 23:51:18 +08:00
haha 3a787ef690 update code 2024-09-01 22:29:20 +08:00
haha 10063c973d update 增加视频管理 2024-09-01 20:35:00 +08:00
haha b1e743282f update code 2024-09-01 19:22:36 +08:00
haha e2f8f6b72e update code 2024-09-01 19:12:35 +08:00
haha db2da78256 update code 2024-09-01 19:10:18 +08:00
haha 0c877ddfeb update code 2024-09-01 19:08:45 +08:00
haha b0082e87da update code 2024-09-01 17:36:53 +08:00
haha 6f7807a7ac update code 2024-08-30 23:36:24 +08:00
姜玉琦 04384f6dc6 提交代码 2024-08-29 22:50:58 +08:00
姜玉琦 cfa648dbe6 提交代码 2024-08-26 01:11:23 +08:00
姜玉琦 77fa7476d8 提交代码 2024-08-25 21:26:05 +08:00
姜玉琦 589f8e7132 提交代码 2024-08-25 13:54:45 +08:00
姜玉琦 d8f63fa43b 提交代码 2024-08-25 13:31:26 +08:00
姜玉琦 8674561038 提交代码 2024-08-24 11:54:14 +08:00
姜玉琦 fe56d910ae 工作流 2024-08-22 16:28:35 +08:00
haha 72cf76c249 修改flowable 2024-08-21 23:41:28 +08:00
姜玉琦 73f42a722d 提交代码 2024-08-21 21:45:00 +08:00
姜玉琦 ecbb506578 提交 2024-08-20 23:13:34 +08:00
姜玉琦 cafb381e80 提交 2024-08-20 23:12:02 +08:00
姜玉琦 e9d43fbdfa 提交代码 2024-08-20 22:49:01 +08:00
姜玉琦 0bf42f74cf 提交代码 2024-08-20 22:11:40 +08:00
姜玉琦 eb8bb88d26 提交代码 2024-08-20 21:40:15 +08:00
姜玉琦 cd7c5aa52d 提交代码 2024-08-20 00:47:35 +08:00
haha 8d96f8f34f update code 2024-08-20 00:10:20 +08:00
姜玉琦 31f994df3b 提交代码 2024-08-19 23:38:21 +08:00
姜玉琦 8045c5535b 提交代码 2024-08-19 23:37:48 +08:00
姜玉琦 3f0d87a28d 提交代码 2024-08-19 01:45:04 +08:00
姜玉琦 aff4a1f7cc 初始化flowable 2024-08-19 00:41:24 +08:00
姜玉琦 9e4e5b8488 提交代码 2024-08-17 13:13:58 +08:00
3513 changed files with 339373 additions and 97088 deletions

4
.gitignore vendored
View File

@ -35,7 +35,6 @@ nbbuild/
dist/
nbdist/
.nb-gradle/
*.css
*.css.map
######################################################################
@ -44,6 +43,7 @@ nbdist/
*.xml.versionsBackup
*.swp
!*/build/*.java
!*/build/*.html
!*/build/*.xml
!*/build/*.xml

View File

@ -29,31 +29,34 @@
## 系统模块
~~~
com.ruoyi
├── ruoyi-ui // 前端框架 [80]
├── ruoyi-gateway // 网关模块 [8080]
├── ruoyi-auth // 认证中心 [9200]
├── ruoyi-rocketMQ // 消息队列 [9204]
├── ruoyi-manage // 分库分表 [9205]
├── ruoyi-api // 接口模块
│ └── ruoyi-api-system // 系统接口
├── ruoyi-common // 通用模块
│ └── ruoyi-common-core // 核心模块
│ └── ruoyi-common-datascope // 权限范围
│ └── ruoyi-common-datasource // 多数据源
│ └── ruoyi-common-log // 日志记录
│ └── ruoyi-common-redis // 缓存服务
│ └── ruoyi-common-seata // 分布式事务
│ └── ruoyi-common-security // 安全模块
│ └── ruoyi-common-swagger // 系统接口
├── ruoyi-modules // 业务模块
│ └── ruoyi-system // 系统模块 [9201]
│ └── ruoyi-gen // 代码生成 [9202]
│ └── ruoyi-job // 定时任务 [9203]
│ └── ruoyi-file // 文件服务 [9300]
├── ruoyi-visual // 图形化管理模块
│ └── ruoyi-visual-monitor // 监控中心 [9100]
├──pom.xml // 公共依赖
com.yanzhu
├── yanzhu-api // 接口模块
│ └── yanzhu-api-system // 系统接口
├── yanzhu-auth // 认证中心 [9200]
├── yanzhu-common // 通用模块
│ └── yanzhu-common-core // 核心模块
│ └── yanzhu-common-datascope // 权限范围
│ └── yanzhu-common-datasource // 多数据源
│ └── yanzhu-common-log // 日志记录
│ └── yanzhu-common-mapper // 数据映射
│ └── yanzhu-common-redis // 缓存服务
│ └── yanzhu-common-seata // 分布式事务
│ └── yanzhu-common-security // 安全模块
│ └── yanzhu-common-swagger // 系统接口
├── yanzhu-gateway // 网关模块 [8080]
├── yanzhu-modules // 业务模块
│ └── yanzhu-system // 系统模块 [9201]
│ └── yanzhu-manage // 业务模块 [9208]
│ └── yanzhu-wechat // 微信模块 [9206]
│ └── yanzhu-gen // 代码生成 [9202]
│ └── yanzhu-job // 定时任务 [9203]
│ └── yanzhu-file // 文件服务 [9300]
│ └── yanzhu-flowable // 工作流服务 [9205]
├── yanzhu-monitor // 监控中心 [9100]
├── yanzhu-rocketMQ // 消息队列 [9207]
├── yanzhu-ui-vue3 // 前端框架 [80]
├── yanzhu-ui-app // 移动端
├──pom.xml // 公共依赖
~~~
由个人原因没有时间写文档 有不明白的地方朋友请加好友

1
bin/clean 100755
View File

@ -0,0 +1 @@
mvn clean

View File

@ -1,6 +1,6 @@
@echo off
echo.
echo [信息] 清理工程target生成路径。
echo [信息] 清理工程target生成路径。
echo.
%~d0

1
bin/mac-auth 100755
View File

@ -0,0 +1 @@
java -Dfile.encoding=utf-8 -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -jar yanzhu-auth/target/yanzhu-auth.jar

1
bin/mac-gateway 100755
View File

@ -0,0 +1 @@
java -Dfile.encoding=utf-8 -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -jar yanzhu-gateway/target/yanzhu-gateway.jar

View File

@ -0,0 +1 @@
java -Dfile.encoding=utf-8 -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -jar yanzhu-modules/yanzhu-file/target/yanzhu-modules-file.jar

View File

@ -0,0 +1 @@
java -Dfile.encoding=utf-8 -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -jar yanzhu-modules/yanzhu-gen/target/yanzhu-modules-gen.jar

View File

@ -0,0 +1 @@
java -Dfile.encoding=utf-8 -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -jar ruoyi-modules/ruoyi-job/target/yanzhu-modules-job.jar

View File

@ -0,0 +1 @@
java -Dfile.encoding=utf-8 -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -jar yanzhu-modules/yanzhu-manage/target/yanzhu-modules-manage.jar

View File

@ -0,0 +1 @@
java -Dfile.encoding=utf-8 -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -jar yanzhu-modules/yanzhu-system/target/yanzhu-modules-system.jar

1
bin/mac-monitor 100755
View File

@ -0,0 +1 @@
java -Dfile.encoding=utf-8 -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -jar ruoyi-visual/ruoyi-monitor/target/yanzhu-visual-monitor.jar

1
bin/package 100755
View File

@ -0,0 +1 @@
mvn clean package -Dmaven.test.skip=true

View File

@ -1,6 +1,6 @@
@echo off
echo.
echo [信息] 打包Web工程生成war/jar包文件。
echo [信息] 打包Web工程生成war/jar包文件。
echo.
%~d0

View File

@ -1,14 +1,12 @@
@echo off
echo.
echo [信息] 使用Jar命令运行Auth工程。
echo.
cd %~dp0
cd ../ruoyi-auth/target
cd ../yanzhu-auth/target
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar ruoyi-auth.jar
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar yanzhu-auth.jar
cd bin
pause

View File

@ -1,14 +1,12 @@
@echo off
echo.
echo [信息] 使用Jar命令运行Gateway工程。
echo.
cd %~dp0
cd ../ruoyi-gateway/target
cd ../yanzhu-gateway/target
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar ruoyi-gateway.jar
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar yanzhu-gateway.jar
cd bin
pause

View File

@ -1,14 +1,12 @@
@echo off
echo.
echo [信息] 使用Jar命令运行Modules-File工程。
echo.
cd %~dp0
cd ../ruoyi-modules/ruoyi-file/target
cd ../yanzhu-modules/yanzhu-file/target
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar ruoyi-modules-file.jar
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar yanzhu-modules-file.jar
cd bin
pause

View File

@ -1,14 +1,11 @@
@echo off
echo.
echo [信息] 使用Jar命令运行Modules-Gen工程。
echo.
cd %~dp0
cd ../ruoyi-modules/ruoyi-gen/target
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar ruoyi-modules-gen.jar
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar yanzhu-modules-gen.jar
cd bin
pause

View File

@ -1,14 +1,12 @@
@echo off
echo.
echo [信息] 使用Jar命令运行Modules-Job工程。
echo.
cd %~dp0
cd ../ruoyi-modules/ruoyi-job/target
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar ruoyi-modules-job.jar
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar yanzhu-modules-job.jar
cd bin
pause

View File

@ -0,0 +1,12 @@
@echo off
cd %~dp0
cd ../yanzhu-modules/yanzhu-manage/target
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar yanzhu-modules-manage.jar
cd bin
pause

View File

@ -1,14 +1,12 @@
@echo off
echo.
echo [信息] 使用Jar命令运行Modules-System工程。
echo.
cd %~dp0
cd ../ruoyi-modules/ruoyi-system/target
cd ../yanzhu-modules/yanzhu-system/target
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar ruoyi-modules-system.jar
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar yanzhu-modules-system.jar
cd bin
pause

View File

@ -1,14 +1,12 @@
@echo off
echo.
echo [信息] 使用Jar命令运行Monitor工程。
echo.
cd %~dp0
cd ../ruoyi-visual/ruoyi-monitor/target
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar ruoyi-visual-monitor.jar
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar yanzhu-visual-monitor.jar
cd bin
pause

4
bin/run.bat 100644
View File

@ -0,0 +1,4 @@
start bin\run-auth.bat
start bin\run-gateway.bat
start bin\run-modules-system.bat
start bin\run-modules-manage.bat

View File

@ -14,28 +14,30 @@ cp ../sql/ry_config_20220510.sql ./mysql/db
# copy html
echo "begin copy html "
cp -r ../ruoyi-ui/dist/** ./nginx/html/dist
cp -r ../yanzhu-ui-vue3/dist/** ./nginx/html/dist
# copy jar
echo "begin copy ruoyi-gateway "
cp ../ruoyi-gateway/target/ruoyi-gateway.jar ./ruoyi/gateway/jar
echo "begin copy yanzhu-gateway "
cp ../yanzhu-gateway/target/yanzhu-gateway.jar ./yanzhu/gateway/jar
echo "begin copy ruoyi-auth "
cp ../ruoyi-auth/target/ruoyi-auth.jar ./ruoyi/auth/jar
echo "begin copy yanzhu-auth "
cp ../yanzhu-auth/target/yanzhu-auth.jar ./yanzhu/auth/jar
echo "begin copy ruoyi-visual "
cp ../ruoyi-visual/ruoyi-monitor/target/ruoyi-visual-monitor.jar ./ruoyi/visual/monitor/jar
echo "begin copy yanzhu-visual "
cp ../yanzhu-visual/yanzhu-monitor/target/yanzhu-visual-monitor.jar ./yanzhu/visual/monitor/jar
echo "begin copy ruoyi-modules-system "
cp ../ruoyi-modules/ruoyi-system/target/ruoyi-modules-system.jar ./ruoyi/modules/system/jar
echo "begin copy yanzhu-modules-system "
cp ../yanzhu-modules/yanzhu-system/target/yanzhu-modules-system.jar ./yanzhu/modules/system/jar
echo "begin copy ruoyi-modules-file "
cp ../ruoyi-modules/ruoyi-file/target/ruoyi-modules-file.jar ./ruoyi/modules/file/jar
echo "begin copy yanzhu-modules-manage "
cp ../yanzhu-modules/yanzhu-manage/target/yanzhu-modules-manage.jar ./yanzhu/modules/manage/jar
echo "begin copy ruoyi-modules-job "
cp ../ruoyi-modules/ruoyi-job/target/ruoyi-modules-job.jar ./ruoyi/modules/job/jar
echo "begin copy yanzhu-modules-file "
cp ../yanzhu-modules/yanzhu-file/target/yanzhu-modules-file.jar ./yanzhu/modules/file/jar
echo "begin copy ruoyi-modules-gen "
cp ../ruoyi-modules/ruoyi-gen/target/ruoyi-modules-gen.jar ./ruoyi/modules/gen/jar
echo "begin copy yanzhu-modules-job "
cp ../yanzhu-modules/yanzhu-job/target/yanzhu-modules-job.jar ./yanzhu/modules/job/jar
echo "begin copy yanzhu-modules-gen "
cp ../yanzhu-modules/yanzhu-gen/target/yanzhu-modules-gen.jar ./yanzhu/modules/gen/jar

246
docsql/yz-views.sql 100644
View File

@ -0,0 +1,246 @@
##全部根据finishTime判断代办已办
DROP view vw_flow_all;
CREATE VIEW vw_flow_all AS (
SELECT
RES.ID_ AS procInsId,
DEF.DEPLOYMENT_ID_ AS deployId,
RES.START_TIME_ AS createTime,
RES.END_TIME_ AS finishTime,
CASE
WHEN RES.END_TIME_ IS NULL THEN
TIMESTAMPDIFF(
MINUTE,
RES.START_TIME_,
DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%S')
)
ELSE
TIMESTAMPDIFF(
MINUTE,
RES.START_TIME_,
RES.END_TIME_
)
END AS duration,
DEF.NAME_ AS procDefName,
DEF.VERSION_ AS procDefVersion,
DEF.CATEGORY_ AS category,
DEF.KEY_ AS procDefKey,
v1.TEXT_ AS startUserId,
v2.TEXT_ AS startUserName,
v3.TEXT_ AS startDeptName,
v4.TEXT_ AS startComId,
v5.TEXT_ AS startComName,
v6.TEXT_ AS startProId,
v7.TEXT_ AS startProName,
v8.TEXT_ AS businessKey,
RES.PROC_INST_ID_,
IFNULL(hr.ID_,ht.taskId) as taskId,
IFNULL(hr.NAME_,ht.taskName) as taskName,
IF(hr.ID_ IS NULL, ht.assigneeId, tu.user_id) as assigneeId,
IF(hr.ID_ IS NULL, ht.assigneeName, tu.nick_name) as assigneeName,
IF(hr.ID_ IS NULL, ht.assigneeDeptName, td.dept_name) as assigneeDeptName,
IF(hr.ID_ IS NULL, ht.taskComType, 0) as taskComType
FROM
ACT_HI_PROCINST RES
LEFT JOIN ACT_RE_PROCDEF DEF ON RES.PROC_DEF_ID_ = DEF.ID_
LEFT JOIN act_hi_varinst v1 ON v1.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v1.NAME_ = 'INITIATOR'
LEFT JOIN act_hi_varinst v2 ON v2.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v2.NAME_ = 'userName'
LEFT JOIN act_hi_varinst v3 ON v3.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v3.NAME_ = 'userDeptName'
LEFT JOIN act_hi_varinst v4 ON v4.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v4.NAME_ = 'comId'
LEFT JOIN act_hi_varinst v5 ON v5.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v5.NAME_ = 'comName'
LEFT JOIN act_hi_varinst v6 ON v6.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v6.NAME_ = 'proId'
LEFT JOIN act_hi_varinst v7 ON v7.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v7.NAME_ = 'proName'
LEFT JOIN act_hi_varinst v8 ON v8.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v8.NAME_ = 'businessKey'
LEFT JOIN act_ru_task hr ON hr.PROC_INST_ID_ = RES.PROC_INST_ID_
LEFT JOIN act_ru_actinst ra ON ra.TASK_ID_ = hr.ID_ AND ra.PROC_INST_ID_ = RES.PROC_INST_ID_
LEFT JOIN sys_user tu ON tu.user_id = ra.ASSIGNEE_
LEFT JOIN sys_dept td ON td.dept_id = tu.dept_id
LEFT JOIN (
SELECT
ht.ID_ AS taskId,
ht.NAME_ AS taskName,
tu.user_id AS assigneeId,
tu.nick_name AS assigneeName,
td.dept_name AS assigneeDeptName,
ht.PROC_INST_ID_,
ahc.TYPE_ as taskComType
FROM
act_hi_taskinst ht
LEFT JOIN sys_user tu ON tu.user_id = ht.ASSIGNEE_
LEFT JOIN sys_dept td ON td.dept_id = tu.dept_id
left join act_hi_comment ahc on ahc.TASK_ID_ = ht.ID_ AND ahc.PROC_INST_ID_ is not NULL
WHERE
ht.ID_ IN (
SELECT
MAX(ID_)
FROM
act_hi_taskinst
GROUP BY
PROC_INST_ID_
)
GROUP BY ht.PROC_INST_ID_
) ht ON ht.PROC_INST_ID_ = RES.PROC_INST_ID_
)
##待办
DROP view vw_flow_await;
CREATE VIEW vw_flow_await AS (
SELECT
RES.ID_ AS taskId,
RES.NAME_ AS taskName,
re.ID_ AS procInsId,
DEF.DEPLOYMENT_ID_ AS deployId,
DATE_FORMAT(re.START_TIME_, '%Y-%m-%d %H:%i:%S') AS createTime,
TIMESTAMPDIFF(
MINUTE,
re.START_TIME_,
DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%S')
) AS duration,
DEF.NAME_ AS procDefName,
DEF.VERSION_ AS procDefVersion,
DEF.CATEGORY_ AS category,
DEF.KEY_ AS procDefKey,
v1.TEXT_ AS startUserId,
v2.TEXT_ AS startUserName,
v3.TEXT_ AS startDeptName,
v4.TEXT_ AS startComId,
v5.TEXT_ AS startComName,
v6.TEXT_ AS startProId,
v7.TEXT_ AS startProName,
v8.TEXT_ AS businessKey,
RES.SUSPENSION_STATE_,
RES.ASSIGNEE_,
LINK.USER_ID_,
LINK.GROUP_ID_
FROM
ACT_RU_TASK RES
LEFT JOIN act_ru_execution re ON re.PARENT_ID_ IS NULL AND re.PROC_INST_ID_ = RES.PROC_INST_ID_
LEFT OUTER JOIN ACT_RE_PROCDEF DEF ON re.PROC_DEF_ID_ = DEF.ID_
LEFT JOIN act_hi_varinst v1 ON v1.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v1.NAME_ = 'INITIATOR'
LEFT JOIN act_hi_varinst v2 ON v2.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v2.NAME_ = 'userName'
LEFT JOIN act_hi_varinst v3 ON v3.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v3.NAME_ = 'userDeptName'
LEFT JOIN act_hi_varinst v4 ON v4.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v4.NAME_ = 'comId'
LEFT JOIN act_hi_varinst v5 ON v5.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v5.NAME_ = 'comName'
LEFT JOIN act_hi_varinst v6 ON v6.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v6.NAME_ = 'proId'
LEFT JOIN act_hi_varinst v7 ON v7.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v7.NAME_ = 'proName'
LEFT JOIN act_hi_varinst v8 ON v8.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v8.NAME_ = 'businessKey'
LEFT JOIN ACT_RU_IDENTITYLINK LINK on LINK.TASK_ID_ = RES.ID_ AND LINK.TYPE_ = 'candidate'
WHERE
RES.SUSPENSION_STATE_ = 1)
##下面是当前登录人代办查询条件
-- AND (
-- RES.ASSIGNEE_ = 1
-- OR (
-- RES.ASSIGNEE_ IS NULL
-- AND EXISTS (
-- SELECT
-- LINK.ID_
-- FROM
-- ACT_RU_IDENTITYLINK LINK
-- WHERE
-- LINK.TASK_ID_ = RES.ID_
-- AND LINK.TYPE_ = 'candidate'
-- AND (
-- LINK.USER_ID_ = 1
-- OR (
-- LINK.GROUP_ID_ IN (1, 42, 45, 46)
-- )
-- )
-- )
-- )
-- )
##审批意见
DROP view vw_flow_comment;
CREATE VIEW vw_flow_comment AS (
SELECT
hc.ID_ AS commentId,
hc.TYPE_ AS commentType,
ht.ID_ AS taskId,
ht.NAME_ AS taskName,
ht.REV_ AS rev,
CASE
WHEN hc.TYPE_ = 1 and ht.NAME_ !='提交申请' THEN
'通过'
WHEN hc.TYPE_ = 2 THEN
'退回'
WHEN hc.TYPE_ = 3 THEN
'驳回'
WHEN hc.TYPE_ = 4 THEN
'委派'
WHEN hc.TYPE_ = 5 THEN
'转办'
WHEN hc.TYPE_ = 6 THEN
'终止'
WHEN hc.TYPE_ = 7 THEN
'撤回'
END AS commentResult,
ht.PROC_INST_ID_ AS procInstId,
ht.TASK_DEF_KEY_ AS taskDefKey,
ht.EXECUTION_ID_ AS executionId,
ht.DELETE_REASON_ AS deleteReason,
DATE_FORMAT(
ht.START_TIME_,
'%Y-%m-%d %H:%i:%S'
) AS startTime,
DATE_FORMAT(
ht.END_TIME_,
'%Y-%m-%d %H:%i:%S'
) AS endTime,
ht.DURATION_ AS duration,
hc.MESSAGE_ AS message,
ru.nick_name AS assigneeName,
IF(ru.dept_id IS NOT NULL, rd.dept_name, ru.remark) as deptName,
sr.role_name as candidate
FROM
act_hi_taskinst ht
LEFT JOIN act_hi_comment hc ON hc.TASK_ID_ = ht.ID_ or (hc.TASK_ID_ is null and hc.PROC_INST_ID_ = ht.PROC_INST_ID_)
LEFT JOIN act_hi_identitylink hi on hi.TASK_ID_ = ht.ID_ and hi.TYPE_ = 'candidate'
left JOIN sys_role sr on sr.role_id = hi.group_Id_
LEFT JOIN sys_user ru ON ru.user_id = ht.ASSIGNEE_
LEFT JOIN sys_dept rd ON rd.dept_id = ru.dept_id
where hc.TYPE_ is null or hc.TYPE_!='event')
##已办
DROP view vw_flow_finished;
CREATE VIEW vw_flow_finished AS (
SELECT
RES.ID_ AS taskId,
RES.NAME_ AS taskName,
RES.PROC_INST_ID_ AS procInsId,
pd.DEPLOYMENT_ID_ as deployId,
DATE_FORMAT(RES.START_TIME_, '%Y-%m-%d %H:%i:%S') AS createTime,
DATE_FORMAT(RES.END_TIME_, '%Y-%m-%d %H:%i:%S') AS endTime,
TIMESTAMPDIFF(
MINUTE,
res.START_TIME_,
RES.END_TIME_
) AS duration,
DEF.END_TIME_ as finishTime,
pd.NAME_ AS procDefName,
pd.CATEGORY_ AS category,
pd.KEY_ AS procDefKey,
v1.TEXT_ AS startUserId,
v2.TEXT_ AS startUserName,
v3.TEXT_ AS startDeptName,
v4.TEXT_ AS startComId,
v5.TEXT_ AS startComName,
v6.TEXT_ AS startProId,
v7.TEXT_ AS startProName,
v8.TEXT_ AS businessKey,
RES.ASSIGNEE_,
ahc.TYPE_ as taskComType
FROM
act_hi_taskinst RES
LEFT OUTER JOIN act_hi_procinst DEF ON RES.PROC_INST_ID_ = DEF.PROC_INST_ID_
LEFT OUTER join act_re_procdef pd on RES.PROC_DEF_ID_ = pd.ID_
LEFT JOIN act_hi_varinst v1 ON v1.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v1.NAME_ = 'INITIATOR'
LEFT JOIN act_hi_varinst v2 ON v2.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v2.NAME_ = 'userName'
LEFT JOIN act_hi_varinst v3 ON v3.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v3.NAME_ = 'userDeptName'
LEFT JOIN act_hi_varinst v4 ON v4.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v4.NAME_ = 'comId'
LEFT JOIN act_hi_varinst v5 ON v5.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v5.NAME_ = 'comName'
LEFT JOIN act_hi_varinst v6 ON v6.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v6.NAME_ = 'proId'
LEFT JOIN act_hi_varinst v7 ON v7.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v7.NAME_ = 'proName'
LEFT JOIN act_hi_varinst v8 ON v8.PROC_INST_ID_ = RES.PROC_INST_ID_ AND v8.NAME_ = 'businessKey'
left join act_hi_comment ahc on ahc.TASK_ID_ = RES.ID_ AND ahc.PROC_INST_ID_ is not NULL
WHERE
RES.ASSIGNEE_ is not null and RES.END_TIME_ is not null)

6
package-lock.json generated 100644
View File

@ -0,0 +1,6 @@
{
"name": "YZProjectCloud",
"lockfileVersion": 2,
"requires": true,
"packages": {}
}

119
pom.xml
View File

@ -28,13 +28,24 @@
<pagehelper.boot.version>1.4.6</pagehelper.boot.version>
<druid.version>1.2.16</druid.version>
<dynamic-ds.version>3.5.2</dynamic-ds.version>
<commons.io.version>2.11.0</commons.io.version>
<commons.io.version>2.16.1</commons.io.version>
<org.projectlombok>1.18.16</org.projectlombok>
<velocity.version>2.3</velocity.version>
<fastjson.version>2.0.23</fastjson.version>
<jjwt.version>0.9.1</jjwt.version>
<minio.version>8.2.2</minio.version>
<poi.version>4.1.2</poi.version>
<poi.version>5.3.0</poi.version>
<pinyin4j.version>2.5.1</pinyin4j.version>
<weixin.mp.version>4.0.6.B</weixin.mp.version>
<weixin.miniapp.version>4.0.6.B</weixin.miniapp.version>
<transmittable-thread-local.version>2.14.2</transmittable-thread-local.version>
<hutool.version>5.8.20</hutool.version>
<aspectjweaver.version>1.9.1</aspectjweaver.version>
<lowagie.version>2.1.7</lowagie.version>
<poi-tl.version>1.12.0</poi-tl.version>
<lowagie.iTextAsian.version>1.0</lowagie.iTextAsian.version>
<itextpdf.version>5.5.13</itextpdf.version>
<aspose.words.version>15.8.0</aspose.words.version>
</properties>
<!-- 依赖声明 -->
@ -115,6 +126,57 @@
<version>${poi.version}</version>
</dependency>
<!-- 生成pdf-->
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>${lowagie.version}</version>
</dependency>
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext-rtf</artifactId>
<version>${lowagie.version}</version>
</dependency>
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>iTextAsian</artifactId>
<version>${lowagie.iTextAsian.version}</version>
</dependency>
<!--根据word模板生成word文件-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>${poi.version}</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>com.deepoove</groupId>
<artifactId>poi-tl</artifactId>
<version>${poi-tl.version}</version>
</dependency>
<!--word文件转化为PDF文件-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspectjweaver.version}</version>
</dependency>
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-words</artifactId>
<version>${aspose.words.version}</version>
</dependency>
<!-- 代码生成使用模板 -->
<dependency>
<groupId>org.apache.velocity</groupId>
@ -143,6 +205,27 @@
<version>${transmittable-thread-local.version}</version>
</dependency>
<!-- Belerweb Pinyin4j -->
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>${pinyin4j.version}</version>
</dependency>
<!-- 微信公众号 -->
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-mp</artifactId>
<version>${weixin.mp.version}</version>
</dependency>
<!-- 微信小程序 -->
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-miniapp</artifactId>
<version>${weixin.miniapp.version}</version>
</dependency>
<!-- 核心模块 -->
<dependency>
<groupId>com.yanzhu</groupId>
@ -178,13 +261,6 @@
<version>${yanzhu.version}</version>
</dependency>
<!-- 分布式事务 -->
<dependency>
<groupId>com.yanzhu</groupId>
<artifactId>yanzhu-common-seata</artifactId>
<version>${yanzhu.version}</version>
</dependency>
<!-- 日志记录 -->
<dependency>
<groupId>com.yanzhu</groupId>
@ -206,6 +282,12 @@
<version>${yanzhu.version}</version>
</dependency>
<dependency>
<groupId>net.sf.mpxj</groupId>
<artifactId>mpxj</artifactId>
<version>13.0.2</version>
</dependency>
</dependencies>
</dependencyManagement>
@ -217,8 +299,6 @@
<module>yanzhu-modules</module>
<module>yanzhu-monitor</module>
<module>yanzhu-rocketmq</module>
<module>yanzhu-modules/yanzhu-wechat</module>
<module>yanzhu-modules/yanzhu-manage</module>
</modules>
<packaging>pom</packaging>
@ -292,6 +372,14 @@
<profiles.active>本地服务器环境</profiles.active>
<discovery.server-addr>62.234.3.186:8848</discovery.server-addr>
</properties>
</profile>
<profile>
<id>测试服务器环境</id>
<properties>
<profiles.active>测试服务器环境</profiles.active>
<discovery.server-addr>62.234.3.186:8848</discovery.server-addr>
</properties>
<!-- 默认环境 -->
<activation>
<activeByDefault>true</activeByDefault>
@ -304,14 +392,7 @@
<discovery.server-addr>0.0.0.0:8848</discovery.server-addr>
</properties>
</profile>
<profile>
<id>测试服务器环境</id>
<properties>
<profiles.active>测试服务器环境</profiles.active>
<discovery.server-addr>62.234.3.186:8848</discovery.server-addr>
</properties>
</profile>
<!-- docker环境打包-->
<!-- docker环境打包 -->
<profile>
<id>docker测试环境1</id>
<properties>

View File

@ -0,0 +1,32 @@
package com.yanzhu.system.api;
import com.yanzhu.common.core.constant.SecurityConstants;
import com.yanzhu.common.core.constant.ServiceNameConstants;
import com.yanzhu.common.core.domain.R;
import com.yanzhu.system.api.domain.SysDept;
import com.yanzhu.system.api.factory.RemoteDeptFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestHeader;
/**
*
*
* @author ruoyi
*/
@FeignClient(contextId = "remoteDeptService", value = ServiceNameConstants.SYSTEM_SERVICE, fallbackFactory = RemoteDeptFallbackFactory.class)
public interface RemoteDeptService
{
/**
*
*
* @param deptId
* @param source
* @return
*/
@GetMapping("/dept/info/{deptId}")
public R<SysDept> getDeptInfo(@PathVariable("deptId") Long deptId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
}

View File

@ -2,6 +2,7 @@ package com.yanzhu.system.api;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.multipart.MultipartFile;
@ -26,4 +27,24 @@ public interface RemoteFileService
*/
@PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public R<SysFile> upload(@RequestPart(value = "file") MultipartFile file);
/**
*
* @param proPackage
* @param dirs
* @param file
* @return
*/
@PostMapping(value = "/upload/{proPackage}/dirs/{dirs}", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public R<SysFile> dirsUploadFile(@PathVariable("proPackage") String proPackage, @PathVariable("dirs") String dirs, @RequestPart(value = "file") MultipartFile file);
/**
*
* @param proPackage
* @param dirs
* @param file
* @return
*/
@PostMapping(value = "/upload/{proPackage}/dirs/{dirs}/date/{datePath}", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public R<SysFile> dirDatePathUploadFile(@PathVariable("proPackage") String proPackage, @PathVariable("dirs") String dirs, @PathVariable("datePath") String datePath, @RequestPart(value = "file") MultipartFile file);
}

View File

@ -0,0 +1,35 @@
package com.yanzhu.system.api;
import com.yanzhu.common.core.constant.SecurityConstants;
import com.yanzhu.common.core.constant.ServiceNameConstants;
import com.yanzhu.common.core.domain.R;
import com.yanzhu.common.core.web.domain.AjaxResult;
import com.yanzhu.system.api.factory.RemoteFlowFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import java.util.Map;
/**
*
*
* @author JiangYuQi
*/
@FeignClient(contextId = "remoteFlowService", value = ServiceNameConstants.FLOWABLE_SERVICE, fallbackFactory = RemoteFlowFallbackFactory.class)
public interface RemoteFlowService {
/**
*
*
* @param procDefId Id
* @param variables
* @param source
* @return
*/
@PostMapping("/definition/startByParams/{procDefId}")
public R<AjaxResult> startDefinitionByParams(@PathVariable("procDefId") String procDefId, @RequestBody Map<String, Object> variables, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
}

View File

@ -0,0 +1,113 @@
package com.yanzhu.system.api;
import com.yanzhu.common.core.constant.SecurityConstants;
import com.yanzhu.common.core.constant.ServiceNameConstants;
import com.yanzhu.common.core.domain.R;
import com.yanzhu.common.core.web.domain.AjaxResult;
import com.yanzhu.system.api.factory.RemoteProFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
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.RequestHeader;
import java.util.Map;
/**
*
*
* @author JiangYuQi
*/
@FeignClient(contextId = "remoteProService", value = ServiceNameConstants.MANAGE_SERVICE, fallbackFactory = RemoteProFallbackFactory.class)
public interface RemoteProService
{
/**
*
*
* @param id
* @return
*/
@GetMapping(value = "/proProjectInfo/info/{id}")
public R<Map<String,Object>> info(@PathVariable("id") Long id, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/**
*
*
* @param busKey
* @param source
* @return
*/
@GetMapping("/proProjectInfoSubdeptsUsers/approveSubDeptsUser/{busKey}")
public R<AjaxResult> approveSubDeptsUser(@PathVariable("busKey") Long busKey, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/**
*
*
* @param busKey
* @param source
* @return
*/
@GetMapping("/proProjectInfoSubdeptsUsers/subDeptsUserComSign/{busKey}")
public R<AjaxResult> subDeptsUserComSign(@PathVariable("busKey") Long busKey, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/**
*
*
* @param busKey
* @param source
* @return
*/
@GetMapping("/proProjectInfoSubdeptsUsers/subDeptsUserProSign/{busKey}")
public R<AjaxResult> subDeptsUserProSign(@PathVariable("busKey") Long busKey, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/**
*
*
* @param busKey
* @param source
* @return
*/
@GetMapping("/proProjectInfoSubdeptsUsers/subDeptsUserGroSign/{busKey}")
public R<AjaxResult> subDeptsUserGroSign(@PathVariable("busKey") Long busKey, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/**
*
*
* @param busKey
* @param source
* @return
*/
@GetMapping("/proProjectInfoSubdeptsUsers/findUserComSign/{busKey}")
public R<Boolean> findUserComSign(@PathVariable("busKey") Long busKey, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/**
*
*
* @param busKey
* @param source
* @return
*/
@GetMapping("/proProjectInfoSubdeptsUsers/findUserProSign/{busKey}")
public R<Boolean> findUserProSign(@PathVariable("busKey") Long busKey, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/**
*
*
* @param busKey
* @param source
* @return
*/
@GetMapping("/proProjectInfoSubdeptsUsers/findUserGroSign/{busKey}")
public R<Boolean> findUserGroSign(@PathVariable("busKey") Long busKey, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/**
*
*
* @param data
* @param source
* @return
*/
@PostMapping("/proProjectInfoSubdeptsUsers/syspushSubDeptsUser")
public R<AjaxResult> syspushSubDeptsUser(Map<String, Object> data, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
}

View File

@ -0,0 +1,32 @@
package com.yanzhu.system.api;
import com.yanzhu.common.core.constant.SecurityConstants;
import com.yanzhu.common.core.constant.ServiceNameConstants;
import com.yanzhu.common.core.domain.R;
import com.yanzhu.system.api.domain.SysRole;
import com.yanzhu.system.api.factory.RemoteRoleFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestHeader;
/**
*
*
* @author ruoyi
*/
@FeignClient(contextId = "remoteRoleService", value = ServiceNameConstants.SYSTEM_SERVICE, fallbackFactory = RemoteRoleFallbackFactory.class)
public interface RemoteRoleService
{
/**
*
*
* @param roleId
* @param source
* @return
*/
@GetMapping("/role/info/{roleId}")
public R<SysRole> getRoleInfo(@PathVariable("roleId") Long roleId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
}

View File

@ -1,18 +1,19 @@
package com.yanzhu.system.api;
import com.yanzhu.system.api.domain.SysUserUniopen;
import com.yanzhu.system.api.domain.vo.WxMaLoginBody;
import com.yanzhu.system.api.model.LoginUser;
import org.springframework.cloud.openfeign.FeignClient;
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.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.*;
import com.yanzhu.common.core.constant.SecurityConstants;
import com.yanzhu.common.core.constant.ServiceNameConstants;
import com.yanzhu.common.core.domain.R;
import com.yanzhu.system.api.domain.SysUser;
import com.yanzhu.system.api.factory.RemoteUserFallbackFactory;
import java.util.List;
import java.util.Map;
/**
*
*
@ -21,6 +22,53 @@ import com.yanzhu.system.api.factory.RemoteUserFallbackFactory;
@FeignClient(contextId = "remoteUserService", value = ServiceNameConstants.SYSTEM_SERVICE, fallbackFactory = RemoteUserFallbackFactory.class)
public interface RemoteUserService
{
/**
*
* @param code
* @param source
* @return
*/
@GetMapping("/sysUserUniopen/getMaOpenId/{code}")
public R<Map<String,Object>> getMaOpenId(@PathVariable("code") String code, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/**
*
* @param body
* @param source
* @return
*/
@PostMapping("/sysUserUniopen/getMaPhoneNumber")
public R<Map<String,Object>> getMaPhoneNumber(@RequestBody WxMaLoginBody body, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/**
*
* @param maOpenId id
* @param source
* @return
*/
@GetMapping("/sysUserUniopen/findByMaOpenId/{maOpenId}")
public R<SysUserUniopen> findByMaOpenId(@PathVariable("maOpenId") String maOpenId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/**
*
*
* @param sysUserUniopen
* @param source
* @return
*/
@PostMapping("/sysUserUniopen/add")
public R<Integer> addSysUserUniopen(@RequestBody SysUserUniopen sysUserUniopen, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/**
*
*
* @param sysUserUniopen
* @param source
* @return
*/
@PutMapping("/sysUserUniopen/edit")
public R<Integer> editSysUserUniopen(@RequestBody SysUserUniopen sysUserUniopen, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/**
*
*
@ -31,6 +79,27 @@ public interface RemoteUserService
@GetMapping("/user/info/{username}")
public R<LoginUser> getUserInfo(@PathVariable("username") String username, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/**
*
*
* @param username
* @param deptId
* @param source
* @return
*/
@GetMapping("/user/infoAndDept/{username}/{deptId}")
public R<LoginUser> getUserInfo(@PathVariable("username") String username,@PathVariable("deptId") Long deptId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/**
*
*
* @param userId
* @param source
* @return
*/
@GetMapping("/user/sysUser/{userId}")
public R<SysUser> getSysUserInfo(@PathVariable("userId") Long userId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/**
*
*
@ -39,5 +108,24 @@ public interface RemoteUserService
* @return
*/
@PostMapping("/user/register")
public R<Boolean> registerUserInfo(@RequestBody SysUser sysUser, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
public R<Long> registerUserInfo(@RequestBody SysUser sysUser, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/**
*
*
* @param sysUser
* @param source
* @return
*/
@PostMapping("/user/removeUserRoles")
public R<Long> removeUserRoles(@RequestBody SysUser sysUser, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/**
*
* @param sysUser
* @param source
* @return
*/
@PutMapping("/user")
public R<Long> updateUserInfo(@RequestBody SysUser sysUser, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
}

View File

@ -19,9 +19,15 @@ public class SysDept extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 项目单位... */
public static final String XMDW = "4";
/** 部门ID */
private Long deptId;
/** 公司编号 */
private Long comId;
/** 父部门ID */
private Long parentId;
@ -31,6 +37,18 @@ public class SysDept extends BaseEntity
/** 部门名称 */
private String deptName;
/** 部门简称 */
private String deptShortName;
/** 部门简称 */
private String deptCode;
/** 部门详情 */
private String deptType;
/** 部门详情 */
private String deptInfos;
/** 显示顺序 */
private Integer orderNum;
@ -65,6 +83,14 @@ public class SysDept extends BaseEntity
this.deptId = deptId;
}
public Long getComId() {
return comId;
}
public void setComId(Long comId) {
this.comId = comId;
}
public Long getParentId()
{
return parentId;
@ -181,13 +207,50 @@ public class SysDept extends BaseEntity
this.children = children;
}
public String getDeptShortName() {
return deptShortName;
}
public void setDeptShortName(String deptShortName) {
this.deptShortName = deptShortName;
}
public String getDeptCode() {
return deptCode;
}
public void setDeptCode(String deptCode) {
this.deptCode = deptCode;
}
public String getDeptType() {
return deptType;
}
public void setDeptType(String deptType) {
this.deptType = deptType;
}
public String getDeptInfos() {
return deptInfos;
}
public void setDeptInfos(String deptInfos) {
this.deptInfos = deptInfos;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("deptId", getDeptId())
.append("comId", getComId())
.append("parentId", getParentId())
.append("ancestors", getAncestors())
.append("deptName", getDeptName())
.append("deptShortName", getDeptShortName())
.append("deptCode", getDeptCode())
.append("deptType", getDeptType())
.append("deptInfos", getDeptInfos())
.append("orderNum", getOrderNum())
.append("leader", getLeader())
.append("phone", getPhone())

View File

@ -1,5 +1,7 @@
package com.yanzhu.system.api.domain;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@ -23,6 +25,12 @@ public class SysRole extends BaseEntity
@Excel(name = "角色序号", cellType = ColumnType.NUMERIC)
private Long roleId;
/** 公司ID */
private Long comId;
/** 项目ID */
private Long projectId;
/** 角色名称 */
@Excel(name = "角色名称")
private String roleName;
@ -58,12 +66,17 @@ public class SysRole extends BaseEntity
/** 菜单组 */
private Long[] menuIds;
/** 部门主键 */
private Long deptId;
/** 部门组(数据权限) */
private Long[] deptIds;
/** 角色菜单权限 */
private Set<String> permissions;
private List<SysRoleDept> roleDeptList;
public SysRole()
{
@ -89,11 +102,22 @@ public class SysRole extends BaseEntity
return isAdmin(this.roleId);
}
public static boolean isAdmin(Long roleId)
{
return roleId != null && 1L == roleId;
}
public static boolean isGsAdmin(String roleKey)
{
return Objects.equals(roleKey,"gsAdmin");
}
public static boolean isGsAdmin(List<String> roleKeys)
{
return roleKeys.contains("gsAdmin");
}
@NotBlank(message = "角色名称不能为空")
@Size(min = 0, max = 30, message = "角色名称长度不能超过30个字符")
public String getRoleName()
@ -219,10 +243,44 @@ public class SysRole extends BaseEntity
this.permissions = permissions;
}
public Long getDeptId() {
return deptId;
}
public void setDeptId(Long deptId) {
this.deptId = deptId;
}
public List<SysRoleDept> getRoleDeptList() {
return roleDeptList;
}
public void setRoleDeptList(List<SysRoleDept> roleDeptList) {
this.roleDeptList = roleDeptList;
}
public Long getComId() {
return comId;
}
public void setComId(Long comId) {
this.comId = comId;
}
public Long getProjectId() {
return projectId;
}
public void setProjectId(Long projectId) {
this.projectId = projectId;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("roleId", getRoleId())
.append("comId", getComId())
.append("projectId", getProjectId())
.append("roleName", getRoleName())
.append("roleKey", getRoleKey())
.append("roleSort", getRoleSort())

View File

@ -1,4 +1,4 @@
package com.yanzhu.system.domain;
package com.yanzhu.system.api.domain;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
@ -16,6 +16,9 @@ public class SysRoleDept
/** 部门ID */
private Long deptId;
/** 部门名称 */
private String deptName;
public Long getRoleId()
{
return roleId;
@ -36,6 +39,14 @@ public class SysRoleDept
this.deptId = deptId;
}
public String getDeptName() {
return deptName;
}
public void setDeptName(String deptName) {
this.deptName = deptName;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

View File

@ -25,6 +25,13 @@ public class SysUser extends BaseEntity
@Excel(name = "用户序号", cellType = ColumnType.NUMERIC, prompt = "用户编号")
private Long userId;
/** 公司编号 */
@Excel(name = "公司编号", type = Type.IMPORT)
private Long comId;
/** 公司名称 */
private String comName;
/** 部门ID */
@Excel(name = "部门编号", type = Type.IMPORT)
private Long deptId;
@ -33,6 +40,14 @@ public class SysUser extends BaseEntity
@Excel(name = "登录名称")
private String userName;
/** 用户类型 */
@Excel(name = "用户类型")
private String userType;
/** 证件号码 */
@Excel(name = "证件号码")
private String cardCode;
/** 用户昵称 */
@Excel(name = "用户名称")
private String nickName;
@ -77,9 +92,19 @@ public class SysUser extends BaseEntity
})
private SysDept dept;
public SysDept getComp() {
return comp;
}
public void setComp(SysDept comp) {
this.comp = comp;
}
private SysDept comp;
/** 角色对象 */
private List<SysRole> roles;
private String userInfos;
/** 角色组 */
private Long[] roleIds;
@ -89,6 +114,47 @@ public class SysUser extends BaseEntity
/** 角色ID */
private Long roleId;
private Long workType;
public Long getWorkType() {
return workType;
}
public String getUserInfos() {
return userInfos;
}
public void setUserInfos(String userInfos) {
this.userInfos = userInfos;
}
public void setWorkType(Long workType) {
this.workType = workType;
}
/**
*
*/
private Long oldComId;
public Long getOldComId() {
return oldComId;
}
public void setOldComId(Long oldComId) {
this.oldComId = oldComId;
}
private Long isActive;
public Long getIsActive() {
return isActive;
}
public void setIsActive(Long isActive) {
this.isActive = isActive;
}
public SysUser()
{
@ -119,6 +185,22 @@ public class SysUser extends BaseEntity
return userId != null && 1L == userId;
}
public Long getComId() {
return comId;
}
public void setComId(Long comId) {
this.comId = comId;
}
public String getComName() {
return comName;
}
public void setComName(String comName) {
this.comName = comName;
}
public Long getDeptId()
{
return deptId;
@ -129,6 +211,18 @@ public class SysUser extends BaseEntity
this.deptId = deptId;
}
@Xss(message = "用户账号不能包含脚本字符")
@Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符")
public String getUserName()
{
return userName;
}
public void setUserName(String userName)
{
this.userName = userName;
}
@Xss(message = "用户昵称不能包含脚本字符")
@Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符")
public String getNickName()
@ -141,17 +235,12 @@ public class SysUser extends BaseEntity
this.nickName = nickName;
}
@Xss(message = "用户账号不能包含脚本字符")
@NotBlank(message = "用户账号不能为空")
@Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符")
public String getUserName()
{
return userName;
public String getUserType() {
return userType;
}
public void setUserName(String userName)
{
this.userName = userName;
public void setUserType(String userType) {
this.userType = userType;
}
@Email(message = "邮箱格式不正确")
@ -296,13 +385,24 @@ public class SysUser extends BaseEntity
{
this.roleId = roleId;
}
public String getCardCode() {
return cardCode;
}
public void setCardCode(String cardCode) {
this.cardCode = cardCode;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("userId", getUserId())
.append("comId", getComId())
.append("deptId", getDeptId())
.append("userName", getUserName())
.append("nickName", getNickName())
.append("userType", getUserType())
.append("email", getEmail())
.append("phonenumber", getPhonenumber())
.append("sex", getSex())

View File

@ -0,0 +1,121 @@
package com.yanzhu.system.api.domain;
import com.yanzhu.common.core.annotation.Excel;
import com.yanzhu.common.core.web.domain.BaseEntity;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* sys_user_uniopen
*
* @author JiangYuQi
* @date 2024-10-13
*/
public class SysUserUniopen extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 主键 */
private Long id;
/** 用户主键 */
@Excel(name = "用户主键")
private Long userId;
/** 用户账号 */
@Excel(name = "用户账号")
private String userName;
/** 用户昵称 */
@Excel(name = "用户昵称")
private String userNick;
/** 唯一关联id */
@Excel(name = "唯一关联id")
private String unionid;
/** 小程序授权id */
@Excel(name = "小程序授权id")
private String maOpenId;
/** 公众号授权id */
@Excel(name = "公众号授权id")
private String mpOpenId;
public void setId(Long id)
{
this.id = id;
}
public Long getId()
{
return id;
}
public void setUserId(Long userId)
{
this.userId = userId;
}
public Long getUserId()
{
return userId;
}
public void setUserName(String userName)
{
this.userName = userName;
}
public String getUserName()
{
return userName;
}
public void setUserNick(String userNick)
{
this.userNick = userNick;
}
public String getUserNick()
{
return userNick;
}
public void setUnionid(String unionid)
{
this.unionid = unionid;
}
public String getUnionid()
{
return unionid;
}
public void setMaOpenId(String maOpenId)
{
this.maOpenId = maOpenId;
}
public String getMaOpenId()
{
return maOpenId;
}
public void setMpOpenId(String mpOpenId)
{
this.mpOpenId = mpOpenId;
}
public String getMpOpenId()
{
return mpOpenId;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("userId", getUserId())
.append("userName", getUserName())
.append("userNick", getUserNick())
.append("unionid", getUnionid())
.append("maOpenId", getMaOpenId())
.append("mpOpenId", getMpOpenId())
.toString();
}
}

View File

@ -0,0 +1,46 @@
package com.yanzhu.system.api.domain.vo;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
*
*
* @author ruoyi
*/
@Data
@ApiModel(description = "微信小程序登录对象")
public class WxMaLoginBody {
/**
*
*/
private Long proId;
/**
*
*/
@NotBlank(message = "授权编号不能为空")
private String openId;
/**
*
*/
@NotBlank(message = "授权密钥不能为空")
private String sessionKey;
/**
*
*/
@NotBlank(message = "加密代码不能为空")
private String encryptedData;
/**
*
*/
@NotBlank(message = "加密方式不能为空")
private String iv;
}

View File

@ -0,0 +1,30 @@
package com.yanzhu.system.api.factory;
import com.yanzhu.common.core.domain.R;
import com.yanzhu.system.api.RemoteDeptService;
import com.yanzhu.system.api.domain.SysDept;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
/**
*
*
* @author JiangYuQi
*/
@Component
public class RemoteDeptFallbackFactory implements FallbackFactory<RemoteDeptService> {
private static final Logger log = LoggerFactory.getLogger(RemoteDeptFallbackFactory.class);
@Override
public RemoteDeptService create(Throwable throwable) {
log.error("部门服务调用失败:{}", throwable.getMessage());
return new RemoteDeptService() {
@Override
public R<SysDept> getDeptInfo(Long deptId, String source) {
return R.fail("获取部门失败:" + throwable.getMessage());
}
};
}
}

View File

@ -30,6 +30,18 @@ public class RemoteFileFallbackFactory implements FallbackFactory<RemoteFileServ
{
return R.fail("上传文件失败:" + throwable.getMessage());
}
@Override
public R<SysFile> dirsUploadFile(String proPackage, String dirs, MultipartFile file)
{
return R.fail("上传文件失败:" + throwable.getMessage());
}
@Override
public R<SysFile> dirDatePathUploadFile(String proPackage, String dirs, String datePath, MultipartFile file)
{
return R.fail("上传文件失败:" + throwable.getMessage());
}
};
}
}

View File

@ -0,0 +1,37 @@
package com.yanzhu.system.api.factory;
import com.yanzhu.common.core.domain.R;
import com.yanzhu.common.core.web.domain.AjaxResult;
import com.yanzhu.system.api.RemoteFlowService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
import java.util.Map;
/**
*
*
* @author JiangYuQi
*/
@Component
public class RemoteFlowFallbackFactory implements FallbackFactory<RemoteFlowService>
{
private static final Logger log = LoggerFactory.getLogger(RemoteFlowFallbackFactory.class);
@Override
public RemoteFlowService create(Throwable throwable)
{
log.error("业务服务调用失败:{}", throwable.getMessage());
return new RemoteFlowService()
{
@Override
public R<AjaxResult> startDefinitionByParams(String procDefId, Map<String, Object> variables, String source)
{
return R.fail("保存分包单位信息失败:" + throwable.getMessage());
}
};
}
}

View File

@ -0,0 +1,85 @@
package com.yanzhu.system.api.factory;
import com.yanzhu.common.core.domain.R;
import com.yanzhu.common.core.web.domain.AjaxResult;
import com.yanzhu.system.api.RemoteProService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
import java.util.Map;
/**
*
*
* @author JiangYuQi
*/
@Component
public class RemoteProFallbackFactory implements FallbackFactory<RemoteProService>
{
private static final Logger log = LoggerFactory.getLogger(RemoteProFallbackFactory.class);
@Override
public RemoteProService create(Throwable throwable)
{
log.error("项目服务调用失败:{}", throwable.getMessage());
return new RemoteProService()
{
@Override
public R<Map<String,Object>> info(Long id, String source)
{
return R.fail("查询项目失败:" + throwable.getMessage());
}
@Override
public R<AjaxResult> approveSubDeptsUser(Long busKey, String source)
{
return R.fail("审批通过信息同步失败:" + throwable.getMessage());
}
@Override
public R<AjaxResult> subDeptsUserComSign(Long busKey, String source)
{
return R.fail("公司承诺书签名章失败:" + throwable.getMessage());
}
@Override
public R<AjaxResult> subDeptsUserProSign(Long busKey, String source)
{
return R.fail("项目承诺书签名章失败:" + throwable.getMessage());
}
@Override
public R<Boolean> findUserGroSign(Long busKey, String source)
{
return R.fail("班组承诺书签名章失败:" + throwable.getMessage());
}
@Override
public R<Boolean> findUserComSign(Long busKey, String source)
{
return R.fail("公司承诺书签名章失败:" + throwable.getMessage());
}
@Override
public R<Boolean> findUserProSign(Long busKey, String source)
{
return R.fail("项目承诺书签名章失败:" + throwable.getMessage());
}
@Override
public R<AjaxResult> subDeptsUserGroSign(Long busKey, String source)
{
return R.fail("班组承诺书签名章失败:" + throwable.getMessage());
}
@Override
public R<AjaxResult> syspushSubDeptsUser(Map<String, Object> data, String source)
{
return R.fail("项目系统人员同步失败:" + throwable.getMessage());
}
};
}
}

View File

@ -0,0 +1,30 @@
package com.yanzhu.system.api.factory;
import com.yanzhu.common.core.domain.R;
import com.yanzhu.system.api.RemoteRoleService;
import com.yanzhu.system.api.domain.SysRole;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
/**
*
*
* @author JiangYuQi
*/
@Component
public class RemoteRoleFallbackFactory implements FallbackFactory<RemoteRoleService> {
private static final Logger log = LoggerFactory.getLogger(RemoteRoleFallbackFactory.class);
@Override
public RemoteRoleService create(Throwable throwable) {
log.error("用户服务调用失败:{}", throwable.getMessage());
return new RemoteRoleService() {
@Override
public R<SysRole> getRoleInfo(Long roleId, String source) {
return R.fail("获取角色失败:" + throwable.getMessage());
}
};
}
}

View File

@ -1,18 +1,22 @@
package com.yanzhu.system.api.factory;
import com.yanzhu.common.core.domain.R;
import com.yanzhu.system.api.RemoteUserService;
import com.yanzhu.system.api.domain.SysUser;
import com.yanzhu.system.api.domain.SysUserUniopen;
import com.yanzhu.system.api.domain.vo.WxMaLoginBody;
import com.yanzhu.system.api.model.LoginUser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
import com.yanzhu.common.core.domain.R;
import com.yanzhu.system.api.domain.SysUser;
import java.util.Map;
/**
*
*
* @author ruoyi
* @author JiangYuQi
*/
@Component
public class RemoteUserFallbackFactory implements FallbackFactory<RemoteUserService>
@ -25,6 +29,36 @@ public class RemoteUserFallbackFactory implements FallbackFactory<RemoteUserServ
log.error("用户服务调用失败:{}", throwable.getMessage());
return new RemoteUserService()
{
@Override
public R<Map<String,Object>> getMaOpenId(String code, String source)
{
return R.fail("获取小程序授权失败:" + throwable.getMessage());
}
@Override
public R<Map<String,Object>> getMaPhoneNumber(WxMaLoginBody body, String source)
{
return R.fail("获取小程序手机号失败:" + throwable.getMessage());
}
@Override
public R<SysUserUniopen> findByMaOpenId(String maOpenId, String source)
{
return R.fail("查询小程序授权失败:" + throwable.getMessage());
}
@Override
public R<Integer> addSysUserUniopen(SysUserUniopen sysUserUniopen, String source)
{
return R.fail("获取小程序手机号失败:" + throwable.getMessage());
}
@Override
public R<Integer> editSysUserUniopen(SysUserUniopen sysUserUniopen, String source)
{
return R.fail("获取小程序手机号失败:" + throwable.getMessage());
}
@Override
public R<LoginUser> getUserInfo(String username, String source)
{
@ -32,10 +66,33 @@ public class RemoteUserFallbackFactory implements FallbackFactory<RemoteUserServ
}
@Override
public R<Boolean> registerUserInfo(SysUser sysUser, String source)
public R<LoginUser> getUserInfo(String username, Long deptId, String source)
{
return R.fail("获取用户失败:" + throwable.getMessage());
}
@Override
public R<SysUser> getSysUserInfo(Long userId, String source)
{
return R.fail("获取用户失败:" + throwable.getMessage());
}
@Override
public R<Long> registerUserInfo(SysUser sysUser, String source)
{
return R.fail("注册用户失败:" + throwable.getMessage());
}
@Override
public R<Long> removeUserRoles(SysUser sysUser, String source)
{
return R.fail("删除用户角色失败:" + throwable.getMessage());
}
@Override
public R<Long> updateUserInfo(SysUser sysUser, String source) {
return R.fail("修改用户失败:" + throwable.getMessage());
}
};
}
}

View File

@ -58,6 +58,26 @@ public class LoginUser implements Serializable
*/
private SysUser sysUser;
/**
*
*/
private Long projectId;
/**
*
*/
private String projectName;
/**
*
*/
private Long projectDeptId;
/**
*
*/
private String projectDeptName;
public String getToken()
{
return token;
@ -147,4 +167,43 @@ public class LoginUser implements Serializable
{
this.sysUser = sysUser;
}
public Long getProjectId() {
return projectId;
}
public void setProjectId(Long projectId) {
this.projectId = projectId;
}
public Long getProjectDeptId() {
return projectDeptId;
}
public void setProjectDeptId(Long projectDeptId) {
this.projectDeptId = projectDeptId;
}
public String getProjectName() {
return projectName;
}
public void setProjectName(String projectName) {
this.projectName = projectName;
}
public String getProjectDeptName() {
return projectDeptName;
}
public void setProjectDeptName(String projectDeptName) {
this.projectDeptName = projectDeptName;
}
/**
*
*/
public LoginUser() {
super();
}
}

View File

@ -1,3 +1,7 @@
com.yanzhu.system.api.factory.RemoteUserFallbackFactory
com.yanzhu.system.api.factory.RemoteLogFallbackFactory
com.yanzhu.system.api.factory.RemoteFileFallbackFactory
com.yanzhu.system.api.factory.RemoteFlowFallbackFactory
com.yanzhu.system.api.factory.RemoteRoleFallbackFactory
com.yanzhu.system.api.factory.RemoteProFallbackFactory
com.yanzhu.system.api.factory.RemoteDeptFallbackFactory

View File

@ -53,13 +53,16 @@
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.5.15</version>
<configuration>
<fork>true</fork> <!-- 如果没有该配置devtools不会生效 -->
</configuration>
<executions>
<execution>
<goals>
@ -68,43 +71,17 @@
</execution>
</executions>
</plugin>
<!-- docker-maven-plugin插件(不带Dockerfile文件) -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.0</version>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<!--用于指定镜像名称-->
<imageName>${project.build.finalName}</imageName>
<imageTags>latest</imageTags>
<!--用于指定基础镜像相当于Dockerfile中的FROM指令-->
<baseImage>openjdk:latest</baseImage>
<!--相当于Dockerfile的ENTRYPOINT指令-->
<entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
<!--是否跳过docker build-->
<!--<skipDockerBuild>true</skipDockerBuild>-->
<dockerHost>${configuration.docker-one-Host}</dockerHost>
<resources>
<resource>
<targetPath>/</targetPath>
<!--用于指定需要复制的根目录,${project.build.directory}表示target目录-->
<directory>${project.build.directory}</directory>
<!--用于指定需要复制的文件。${project.build.finalName}.jar指的是打包后的jar包文件。-->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
<failOnMissingWebXml>false</failOnMissingWebXml>
<warName>${project.artifactId}</warName>
</configuration>
<executions>
<execution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<finalName>${project.artifactId}</finalName>
<!--如果不设置resource 会导致bootstrap.yml中的@@找不到pom文件中的配置-->
<resources>
<resource>
@ -113,5 +90,65 @@
</resource>
</resources>
</build>
<!-- <build>-->
<!-- <finalName>${project.artifactId}</finalName>-->
<!-- <plugins>-->
<!-- <plugin>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-maven-plugin</artifactId>-->
<!-- <executions>-->
<!-- <execution>-->
<!-- <goals>-->
<!-- <goal>repackage</goal>-->
<!-- </goals>-->
<!-- </execution>-->
<!-- </executions>-->
<!-- </plugin>-->
<!-- &lt;!&ndash; docker-maven-plugin插件(不带Dockerfile文件) &ndash;&gt;-->
<!-- <plugin>-->
<!-- <groupId>com.spotify</groupId>-->
<!-- <artifactId>docker-maven-plugin</artifactId>-->
<!-- <version>1.2.0</version>-->
<!-- <configuration>-->
<!-- &lt;!&ndash;用于指定镜像名称&ndash;&gt;-->
<!-- <imageName>${project.build.finalName}</imageName>-->
<!-- <imageTags>latest</imageTags>-->
<!-- &lt;!&ndash;用于指定基础镜像相当于Dockerfile中的FROM指令&ndash;&gt;-->
<!-- <baseImage>openjdk:latest</baseImage>-->
<!-- &lt;!&ndash;相当于Dockerfile的ENTRYPOINT指令&ndash;&gt;-->
<!-- <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>-->
<!-- &lt;!&ndash;是否跳过docker build&ndash;&gt;-->
<!-- <skipDockerBuild>true</skipDockerBuild>-->
<!-- <dockerHost>${configuration.docker-one-Host}</dockerHost>-->
<!-- <resources>-->
<!-- <resource>-->
<!-- <targetPath>/</targetPath>-->
<!-- &lt;!&ndash;用于指定需要复制的根目录,${project.build.directory}表示target目录&ndash;&gt;-->
<!-- <directory>${project.build.directory}</directory>-->
<!-- &lt;!&ndash;用于指定需要复制的文件。${project.build.finalName}.jar指的是打包后的jar包文件。&ndash;&gt;-->
<!-- <include>${project.build.finalName}.jar</include>-->
<!-- </resource>-->
<!-- </resources>-->
<!-- </configuration>-->
<!-- <executions>-->
<!-- <execution>-->
<!-- <id>build-image</id>-->
<!-- <phase>package</phase>-->
<!-- <goals>-->
<!-- <goal>build</goal>-->
<!-- </goals>-->
<!-- </execution>-->
<!-- </executions>-->
<!-- </plugin>-->
<!-- </plugins>-->
<!-- &lt;!&ndash;如果不设置resource 会导致bootstrap.yml中的@@找不到pom文件中的配置&ndash;&gt;-->
<!-- <resources>-->
<!-- <resource>-->
<!-- <directory>src/main/resources</directory>-->
<!-- <filtering>true</filtering>-->
<!-- </resource>-->
<!-- </resources>-->
<!-- </build>-->
</project>

View File

@ -1,21 +1,32 @@
package com.yanzhu.auth.controller;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import com.yanzhu.auth.form.LoginBody;
import com.yanzhu.auth.form.RegisterBody;
import com.yanzhu.common.core.exception.ServiceException;
import com.yanzhu.common.redis.service.RedisService;
import com.yanzhu.system.api.domain.vo.WxMaLoginBody;
import com.yanzhu.auth.form.WxMaOpenIdBody;
import com.yanzhu.auth.service.SysLoginService;
import com.yanzhu.common.core.constant.SecurityConstants;
import com.yanzhu.common.core.domain.R;
import com.yanzhu.common.core.text.Convert;
import com.yanzhu.common.core.utils.JwtUtils;
import com.yanzhu.common.core.utils.StringUtils;
import com.yanzhu.common.security.auth.AuthUtil;
import com.yanzhu.common.security.service.TokenService;
import com.yanzhu.common.security.utils.SecurityUtils;
import com.yanzhu.system.api.RemoteProService;
import com.yanzhu.system.api.RemoteUserService;
import com.yanzhu.system.api.domain.SysUser;
import com.yanzhu.system.api.model.LoginUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
/**
* token
@ -25,12 +36,26 @@ import com.yanzhu.system.api.model.LoginUser;
@RestController
public class TokenController
{
@Autowired
private RedisService redisService;
@Autowired
private TokenService tokenService;
@Autowired
private SysLoginService sysLoginService;
@Autowired
private RemoteProService remoteProService;
@Autowired
private RemoteUserService remoteUserService;
/**
*
* @param form
* @return
*/
@PostMapping("login")
public R<?> login(@RequestBody LoginBody form)
{
@ -40,6 +65,161 @@ public class TokenController
return R.ok(tokenService.createToken(userInfo));
}
/**
*
* @param body
* @return
*/
@PostMapping("getMaOpenId")
public R<?> getMaOpenId(@RequestBody @Valid WxMaOpenIdBody body)
{
Map<String, Object> data = sysLoginService.getMaOpenId(body.getCode());
// 获取授权openId
return R.ok(data);
}
/**
*
* @param body
* @return
*/
@PostMapping("getMaPhoneNumber")
public R<?> getMaPhoneNumber(@RequestBody @Valid WxMaLoginBody body)
{
String maOpenId = sysLoginService.getMaPhoneNumber(body);
// 获取授权openId
return R.ok(maOpenId);
}
/**
*
* @param form
* @return
*/
@PostMapping("wxLogin")
public R<?> wxLogin(@RequestBody LoginBody form)
{
// 用户登录
LoginUser userInfo = sysLoginService.wxLogin(form.getUsername());
// 获取登录token
return R.ok(tokenService.createMobileToken(userInfo));
}
/**
*
* @param form
* @return
*/
@PostMapping("wxNumberLogin")
public R<?> wxNumberLogin(@RequestBody LoginBody form)
{
String openId = Convert.toStr(redisService.getCacheObject("SysUserPhoneNumber::"+form.getUsername()),null);
if(Objects.isNull(openId)){
throw new ServiceException("登录信息异常!!!");
}
// 用户登录
LoginUser userInfo = sysLoginService.wxLogin(form.getUsername());
// 获取登录token
return R.ok(tokenService.createMobileToken(userInfo));
}
/**
*
* @param body
* @return
*/
@PostMapping("maLogin")
public R<?> maLogin(@RequestBody @Valid WxMaLoginBody body)
{
// 微信用户登录
LoginUser userInfo = sysLoginService.maLogin(body);
// 获取登录token
return R.ok(tokenService.createMobileToken(userInfo));
}
/**
*
* @param proId
* @return
*/
@GetMapping("/switchProject/{proId}")
public R<?> switchProject(@PathVariable("proId") Long proId,HttpServletRequest request)
{
if(SecurityUtils.isAdmin(SecurityUtils.getUserId()) || SecurityUtils.isGSAdmin()){
LoginUser loginUser = tokenService.getLoginUser(request);
if (StringUtils.isNotNull(loginUser))
{
R<Map<String, Object>> dataResult = remoteProService.info(proId,SecurityConstants.INNER);
Map<String, Object> proData = dataResult.getData();
SysUser user = loginUser.getSysUser();
user.setActiveComId(Convert.toLong(proData.get("comId")));
user.setActiveComName(Convert.toStr(proData.get("comName")));
user.setActiveProjectId(Convert.toLong(proData.get("id")));
user.setActiveProjectName(Convert.toStr(proData.get("projectName")));
loginUser.setSysUser(user);
loginUser.setProjectId(Convert.toLong(proData.get("id")));
loginUser.setProjectName(Convert.toStr(proData.get("projectName")));
loginUser.setProjectDeptId(Convert.toLong(proData.get("comId")));
loginUser.setProjectDeptName(Convert.toStr(proData.get("comName")));
// 刷新令牌有效期
tokenService.refreshToken(loginUser);
return R.ok();
}
}else{
// 查询用户信息
R<LoginUser> userResult = remoteUserService.getUserInfo(SecurityUtils.getUsername(), proId, SecurityConstants.INNER);
LoginUser userInfo = userResult.getData();
SysUser user = userResult.getData().getSysUser();
// 补充用户项目信息
if(Objects.nonNull(user.getActiveComId())){
userInfo.setProjectDeptId(user.getActiveComId());
}
if(Objects.nonNull(user.getActiveComName())){
userInfo.setProjectDeptName(user.getActiveComName());
}
if(Objects.nonNull(user.getActiveProjectId())){
userInfo.setProjectId(user.getActiveProjectId());
}
if(Objects.nonNull(user.getActiveProjectName())){
userInfo.setProjectName(user.getActiveProjectName());
}
// 刷新令牌有效期
tokenService.refreshToken(userInfo);
return R.ok();
}
return R.fail();
}
/**
*
* @return
*/
@GetMapping("/cancelProject")
public R<?> cancelProject(HttpServletRequest request)
{
LoginUser loginUser = tokenService.getLoginUser(request);
if(SecurityUtils.isAdmin(loginUser.getUserid())){
SysUser user = loginUser.getSysUser();
user.setActiveComId(null);
user.setActiveProjectId(null);
user.setActiveProjectName(null);
loginUser.setSysUser(user);
loginUser.setProjectId(null);
loginUser.setProjectName(null);
loginUser.setProjectDeptId(null);
}else{
SysUser user = loginUser.getSysUser();
user.setActiveProjectId(null);
user.setActiveProjectName(null);
loginUser.setSysUser(user);
loginUser.setProjectId(null);
loginUser.setProjectName(null);
}
// 刷新令牌有效期
tokenService.refreshToken(loginUser);
return R.ok();
}
@DeleteMapping("logout")
public R<?> logout(HttpServletRequest request)
{
@ -55,7 +235,7 @@ public class TokenController
return R.ok();
}
@PostMapping("refresh")
@GetMapping("refresh")
public R<?> refresh(HttpServletRequest request)
{
LoginUser loginUser = tokenService.getLoginUser(request);
@ -65,7 +245,20 @@ public class TokenController
tokenService.refreshToken(loginUser);
return R.ok();
}
return R.ok();
return R.fail();
}
@GetMapping("refreshMobile")
public R<?> refreshMobile(HttpServletRequest request)
{
LoginUser loginUser = sysLoginService.wxLogin(SecurityUtils.getUsername());
if (StringUtils.isNotNull(loginUser))
{
// 刷新令牌有效期
tokenService.refreshToken(loginUser);
return R.ok();
}
return R.fail();
}
@PostMapping("register")

View File

@ -0,0 +1,21 @@
package com.yanzhu.auth.form;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
*
*/
@Data
@ApiModel(description = "微信小程序授权对象")
public class WxMaOpenIdBody {
/**
*
*/
@NotBlank(message = "授权码不能为空")
private String code;
}

View File

@ -1,5 +1,8 @@
package com.yanzhu.auth.service;
import com.yanzhu.system.api.domain.vo.WxMaLoginBody;
import com.yanzhu.system.api.RemoteProService;
import com.yanzhu.system.api.domain.SysUserUniopen;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.yanzhu.common.core.constant.CacheConstants;
@ -18,6 +21,11 @@ import com.yanzhu.system.api.RemoteUserService;
import com.yanzhu.system.api.domain.SysUser;
import com.yanzhu.system.api.model.LoginUser;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
/**
*
*
@ -26,6 +34,13 @@ import com.yanzhu.system.api.model.LoginUser;
@Component
public class SysLoginService
{
@Autowired
private RedisService redisService;
@Autowired
private RemoteProService remoteProService;
@Autowired
private RemoteUserService remoteUserService;
@ -35,16 +50,13 @@ public class SysLoginService
@Autowired
private SysRecordLogService recordLogService;
@Autowired
private RedisService redisService;
/**
*
*/
public LoginUser login(String username, String password)
{
// 用户名或密码为空 错误
if (StringUtils.isAnyBlank(username, password))
if (StringUtils.isAnyBlank(username, password))
{
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户/密码必须填写");
throw new ServiceException("用户/密码必须填写");
@ -75,7 +87,11 @@ public class SysLoginService
if (StringUtils.isNull(userResult) || StringUtils.isNull(userResult.getData()))
{
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "登录用户不存在");
String msg=userResult.getMsg();
if(StringUtils.isBlank(msg)){
msg="登录用户不存在";
}
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, msg);
throw new ServiceException("登录用户:" + username + " 不存在");
}
@ -98,9 +114,141 @@ public class SysLoginService
}
passwordService.validate(user, password);
recordLogService.recordLogininfor(username, Constants.LOGIN_SUCCESS, "登录成功");
// 补充用户项目信息
if(Objects.nonNull(user.getActiveComId())){
userInfo.setProjectDeptId(user.getActiveComId());
}
if(Objects.nonNull(user.getActiveComName())){
userInfo.setProjectDeptName(user.getActiveComName());
}
if(Objects.nonNull(user.getActiveProjectId())){
userInfo.setProjectId(user.getActiveProjectId());
}
if(Objects.nonNull(user.getActiveProjectName())){
userInfo.setProjectName(user.getActiveProjectName());
}
return userInfo;
}
/**
*
*/
public Map<String, Object> getMaOpenId(String code)
{
Map<String,Object> loginResult = remoteUserService.getMaOpenId(code,SecurityConstants.INNER).getData();
return loginResult;
}
/**
*
*/
public String getMaPhoneNumber(WxMaLoginBody loginBody)
{
Map<String,Object> phoneResult = remoteUserService.getMaPhoneNumber(loginBody,SecurityConstants.INNER).getData();
redisService.setCacheObject("SysUserPhoneNumber::"+phoneResult.get("phoneNumber"),loginBody.getOpenId(),12L, TimeUnit.HOURS);
return Convert.toStr(phoneResult.get("phoneNumber"));
}
/**
*
*/
public LoginUser wxLogin(String username)
{
// 查询用户信息
R<LoginUser> userResult = remoteUserService.getUserInfo(username, SecurityConstants.INNER);
if (StringUtils.isNull(userResult) || StringUtils.isNull(userResult.getData()))
{
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "登录用户不存在");
throw new ServiceException("登录用户:" + username + " 不存在");
}
if (R.FAIL == userResult.getCode())
{
throw new ServiceException(userResult.getMsg());
}
LoginUser userInfo = userResult.getData();
SysUser user = userResult.getData().getSysUser();
if (UserStatus.DELETED.getCode().equals(user.getDelFlag()))
{
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "对不起,您的账号已被删除");
throw new ServiceException("对不起,您的账号:" + username + " 已被删除");
}
if (UserStatus.DISABLE.getCode().equals(user.getStatus()))
{
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户已停用,请联系管理员");
throw new ServiceException("对不起,您的账号:" + username + " 已停用");
}
// 补充用户项目信息
if(Objects.nonNull(user.getActiveComId())){
userInfo.setProjectDeptId(user.getActiveComId());
}
if(Objects.nonNull(user.getActiveComName())){
userInfo.setProjectDeptName(user.getActiveComName());
}
if(Objects.nonNull(user.getActiveProjectId())){
userInfo.setProjectId(user.getActiveProjectId());
}
if(Objects.nonNull(user.getActiveProjectName())){
userInfo.setProjectName(user.getActiveProjectName());
}
return userInfo;
}
/**
*
*/
public LoginUser maLogin(WxMaLoginBody loginBody)
{
LoginUser userInfo;
// 查询小程序授权情况
Map<String,Object> phoneResult = remoteUserService.getMaPhoneNumber(loginBody,SecurityConstants.INNER).getData();
if(Objects.nonNull(phoneResult) && Objects.nonNull(phoneResult.get("phoneNumber"))){
// 查询用户信息
R<LoginUser> userResult = remoteUserService.getUserInfo(Convert.toStr(phoneResult.get("phoneNumber")), SecurityConstants.INNER);
userInfo = userResult.getData();
if(Objects.isNull(userResult.getData())){
throw new ServiceException("登录失败,当前手机号未获取项目授权...");
}
redisService.setCacheObject("SysUserUniopen::"+phoneResult.get("phoneNumber"),loginBody.getOpenId(),12L, TimeUnit.HOURS);
}else{
throw new ServiceException("获取授权手机号失败...");
}
SysUser user = userInfo.getSysUser();
if (UserStatus.DELETED.getCode().equals(user.getDelFlag()))
{
recordLogService.recordLogininfor(user.getUserName(), Constants.LOGIN_FAIL, "对不起,您的账号已被删除");
throw new ServiceException("对不起,您的账号:" + user.getUserName() + " 已被删除");
}
if (UserStatus.DISABLE.getCode().equals(user.getStatus()))
{
recordLogService.recordLogininfor(user.getUserName(), Constants.LOGIN_FAIL, "用户已停用,请联系管理员");
throw new ServiceException("对不起,您的账号:" + user.getUserName() + " 已停用");
}
recordLogService.recordLogininfor(user.getUserName(), Constants.LOGIN_SUCCESS, "登录成功");
// 补充用户项目信息
if(Objects.nonNull(user.getActiveComId())){
userInfo.setProjectDeptId(user.getActiveComId());
}
if(Objects.nonNull(user.getActiveComName())){
userInfo.setProjectDeptName(user.getActiveComName());
}
if(Objects.nonNull(user.getActiveProjectId())){
userInfo.setProjectId(user.getActiveProjectId());
}
if(Objects.nonNull(user.getActiveProjectName())){
userInfo.setProjectName(user.getActiveProjectName());
}
return userInfo;
}
/**
* 退
*/
public void logout(String loginName)
{
recordLogService.recordLogininfor(loginName, Constants.LOGOUT, "退出成功");

View File

@ -42,7 +42,7 @@ public class SysPasswordService
public void validate(SysUser user, String password)
{
String username = user.getUserName();
redisService.setCacheObject(getCacheKey(username), 0, lockTime, TimeUnit.MINUTES);
Integer retryCount = redisService.getCacheObject(getCacheKey(username));
if (retryCount == null)

View File

@ -15,9 +15,13 @@ spring:
discovery:
# 服务注册地址
server-addr: @discovery.server-addr@
# 服务分组
group: lijun
config:
# 配置中心地址
server-addr: @discovery.server-addr@
# 工作空间配置
# namespace: a113aa27-4d61-46e0-81d6-9cede0457f0d
# 配置文件格式
file-extension: yml
# 共享配置

View File

@ -0,0 +1,11 @@
# 页面标题
VUE_APP_TITLE = 产发工程数字管理平台
# 开发环境配置
ENV = 'development'
# 产发工程数字管理平台/开发环境
VUE_APP_BASE_API = '/dev-api'
# 路由懒加载
VUE_CLI_BABEL_TRANSPILE_MODULES = true

View File

@ -0,0 +1,8 @@
# 页面标题
VUE_APP_TITLE = 产发工程数字管理平台
# 生产环境配置
ENV = 'production'
# 产发工程数字管理平台/生产环境
VUE_APP_BASE_API = '/prod-api'

View File

@ -0,0 +1,10 @@
# 页面标题
VUE_APP_TITLE = 产发工程数字管理平台
NODE_ENV = production
# 测试环境配置
ENV = 'staging'
# 产发工程数字管理平台/测试环境
VUE_APP_BASE_API = '/stage-api'

View File

@ -0,0 +1,6 @@
/node_modules
/dist
/src/*
/package-lock.json
.DS_Store
vue.config.js

23
yanzhu-bigscreen/.gitignore vendored 100644
View File

@ -0,0 +1,23 @@
.DS_Store
node_modules
/dist
/doc
# local env files
.env.local
.env.*.local
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

View File

@ -0,0 +1,24 @@
# v3
## Project setup
```
yarn install
```
### Compiles and hot-reloads for development
```
yarn serve
```
### Compiles and minifies for production
```
yarn build
```
### Lints and fixes files
```
yarn lint
```
### Customize configuration
See [Configuration Reference](https://cli.vuejs.org/config/).

View File

@ -0,0 +1,5 @@
module.exports = {
presets: [
'@vue/cli-plugin-babel/preset'
]
}

View File

@ -0,0 +1,19 @@
{
"compilerOptions": {
"target": "es5",
"module": "esnext",
"baseUrl": "./",
"moduleResolution": "node",
"paths": {
"@/*": [
"src/*"
]
},
"lib": [
"esnext",
"dom",
"dom.iterable",
"scripthost"
]
}
}

12620
yanzhu-bigscreen/package-lock.json generated 100644

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,63 @@
{
"name": "v3",
"version": "0.1.0",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
"serve:prod": "vue-cli-service serve --mode production",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint"
},
"dependencies": {
"axios": "^1.6.8",
"core-js": "^3.8.3",
"dayjs": "^1.11.9",
"element-ui": "^2.15.13",
"emittery": "^0.8.1",
"file-saver": "2.0.5",
"gsap": "^3.12.2",
"js-cookie": "^3.0.5",
"less": "^4.1.3",
"less-loader": "^11.1.3",
"lodash.debounce": "^4.0.8",
"lodash.throttle": "^4.1.1",
"logt": "^1.4.1",
"nprogress": "0.2.0",
"v3": "file:",
"vue": "^2.6.14",
"vue-router": "^3.1.3",
"vuex": "3.6.0"
},
"devDependencies": {
"@babel/core": "^7.12.16",
"@babel/eslint-parser": "^7.12.16",
"@vue/cli-plugin-babel": "~5.0.0",
"@vue/cli-plugin-eslint": "~5.0.0",
"@vue/cli-service": "~5.0.0",
"svg-sprite-loader": "^6.0.11",
"eslint": "^7.32.0",
"eslint-plugin-vue": "^8.0.3",
"javascript-obfuscator": "^4.1.1",
"vue-template-compiler": "^2.6.14",
"webpack-obfuscator": "^3.5.1"
},
"eslintConfig": {
"root": true,
"env": {
"node": true
},
"extends": [
"plugin:vue/essential",
"eslint:recommended"
],
"parserOptions": {
"parser": "@babel/eslint-parser"
},
"rules": {}
},
"browserslist": [
"> 1%",
"last 2 versions",
"not dead"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

View File

@ -0,0 +1,167 @@
.module-title{
height: 25px;
line-height: 25px;
padding-left: 15px;
font-size: 16px;
}
.module-title span{
white-space: nowrap;
}
.module-title-red{
padding-left: 40px;
}
.screen-one-1-1{
height: 310px;
background: url("../images/one/1x1.png") no-repeat center/100% 100%;
}
.screen-one-1-2{
height: 310px;
background: url("../images/one/1x2.png") no-repeat center/100% 100%;
}
.screen-one-1-3{
height: 310px;
background: url("../images/one/1x3.png") no-repeat center/100% 100%;
}
.screen-one-1-4{
height: 310px;
background: url("../images/one/1x4.png") no-repeat center/100% 100%;
}
.screen-one-2-1{
height: 640px;
background: url("../images/one/2x1.png") no-repeat center/100% 100%;
}
.screen-one-2-2{
height: 640px;
background: url("../images/one/2x2.png") no-repeat center/100% 100%;
}
.screen-one-2-3{
height: 640px;
background: url("../images/one/2x3.png") no-repeat center/100% 100%;
}
.screen-one-2-4{
height: 640px;
background: url("../images/one/2x4.png") no-repeat center/100% 100%;
}
.screen-one-3-1{
height: 970px;
background: url("../images/one/3x1.png") no-repeat center/100% 100%;
}
.screen-one-3-1.no-border{
background: none;
}
.screen-one-3-1.no-lable .module-title{
display: none;
}
.screen-one-3-2{
height: 970px;
background: url("../images/one/3x2.png") no-repeat center/100% 100%;
}
.screen-one-3-3{
height: 970px;
background: url("../images/one/3x3.png") no-repeat center/100% 100%;
}
.screen-one-3-3.no-title{
background: url("../images/one/3x32.png") no-repeat center/100% 100%;
}
.screen-one-3-4{
height: 970px;
background: url("../images/one/3x4.png") no-repeat center/100% 100%;
}
.screen-two-1-1{
height: 290px;
background: url("../images/two/1x1.png") no-repeat center/100% 100%;
}
.screen-two-1-2{
height: 290px;
background: url("../images/two/1x2.png") no-repeat center/100% 100%;
}
.screen-two-1-3{
height: 290px;
background: url("../images/two/1x3.png") no-repeat center/100% 100%;
}
.screen-two-1-4{
height: 290px;
background: url("../images/two/1x3.png") no-repeat center/100% 100%;
}
.screen-two-2-1{
height: 600px;
background: url("../images/two/2x1.png") no-repeat center/100% 100%;
}
.screen-two-2-2{
height: 600px;
background: url("../images/two/2x2.png") no-repeat center/100% 100%;
}
.screen-two-2-3{
height: 600px;
background: url("../images/two/2x3.png") no-repeat center/100% 100%;
}
.screen-two-2-4{
height: 600px;
background: url("../images/two/2x4.png") no-repeat center/100% 100%;
}
.screen-two-3-1{
height: 920px;
background: url("../images/two/3x1.png") no-repeat center/100% 100%;
}
.screen-two-3-2{
height: 920px;
background: url("../images/two/3x2.png") no-repeat center/100% 100%;
}
.screen-two-3-3{
height: 920px;
background: url("../images/two/3x3.png") no-repeat center/100% 100%;
}
.screen-two-3-4{
height: 920px;
background: url("../images/two/3x4.png") no-repeat center/100% 100%;
}
.screen-red-1-1{
height: 310px;
background: url("../images/red/1x1.png") no-repeat center/100% 100%;
}
.screen-red-1-2{
height: 310px;
background: url("../images/red/1x2.png") no-repeat center/100% 100%;
}
.screen-red-2-2{
height: 640px;
background: url("../images/red/2x2.png") no-repeat center/100% 100%;
}
.screen-big{
height: 310px;
background: url("../images/red/big_bgd.png") no-repeat center/100% 100%;
}
.screen-one-0-5{
height: 475px;
background: url("../images/red/0x5.png") no-repeat center/100% 100%;
}
.screen-one-video{
height: 970px;
background: url("../images/red/video.png") no-repeat center/100% 100%;
}
.div-header{
height: 129px;
}
.header-title-user-info{
text-align: right;
padding-right: 60px;
}
.command{
cursor: pointer;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,176 @@
*{
margin: 0;
padding: 0;
}
@font-face {
font-family: "title-font";
src:url(../fonts/HYLXTJ.eot),url(../fonts/HYLXTJ.svg),url(../fonts/HYLXTJ.ttf),url(../fonts/HYLXTJ.woff),url(../fonts/HYLXTJ.woff2)
}
@font-face {
font-family: "number-font";
src:url(../fonts/PUTHIAfont.eot),url(../fonts/PUTHIAfont.svg),url(../fonts/PUTHIAfont.ttf),url(../fonts/PUTHIAfont.woff),url(../fonts/PUTHIAfont.woff2)
}
p,label,ul{
margin: 0;
font-weight: 400;
}
table{
width: 100%;
}
body{
min-width: 1500px;
min-height: 800px;
}
[v-cloak] {
display: none;
}
#app{
height: 100vh;
min-height: 800px;
width: 100%;
position: relative;
overflow: auto;
}
.login-bgd{
position: relative;
height: 100%;
width:1400px;
background: url("../images/login_bgd.png") no-repeat 50%;
background-size: cover;
}
.login-max{
height: 100%;
position: relative;
display: flex;
}
.login-content{
width: 520px;
}
.login-content-max{
padding: 100px 50px;
}
.login-logo{
text-align: center;
}
.login-title{
padding: 20px;
font-weight: bold;
color: #000000;
font-size: 28px;
text-align: center;
}
.login-content-form{
padding:30px;
position: relative;
}
.login-mode-max{
display: flex;
border-bottom: 1px solid #aaaaaa;
}
.login-mode{
width: 50%;
text-align: center;
padding: 15px 0;
cursor: pointer;
color: #aaaaaa;
}
.login-mode.active{
color: #0063b1;
font-weight: bold;
}
.login-mode-hr-max{
position: relative;
top: -2px;
}
.login-mode-hr {
border-top: 3px solid #0162b1;
width: 50%;
position: absolute;
left: 0;
transition: left 0.3s;
}
.login-form-fill{
padding:0 30px;
}
.login-form-text{
padding: 15px 0 20px 5px;
color: #888888;
}
.login-form-fill-min{
padding: 10px 0;
}
.login-form-fill-min input{
height: 50px;
font-size: 16px;
}
.login-form-state{
padding: 15px 0;
display: flex;
align-items: center;
justify-content: space-between;
}
.login-forgot-password{
font-size: 14px;
color: #3da2ff;
cursor: pointer;
}
.login-form-btn{
padding: 15px 0;
}
.login-tips{
height: 40px;
color: #ff0000;
text-align: center;
}
.login-submit-btn{
background: #0162b1;
text-align: center;
height: 45px;
line-height: 45px;
color: #ffffff;
cursor: pointer;
}
.login-submit-btn:hover{
background: #0274d1;
}
.login-submit-btn:active{
background: #0162b1;
}
.login-form-code{
display: flex;
align-items: center;
}
.login-form-code button{
width: 150px;
height: 50px;
border: 0;
background: #0162b1;
cursor: pointer;
color: #ffffff;
}
.login-form-code button:hover{
background: #0274d1;
}
.login-form-code button:active{
background: #0162b1;
}
.left-enter,
.left-leave-to {
opacity: 0;
transform: translateX(-100px);
}
.left-enter-active,
.left-leave-active{
transition: all 0.5s ease;
}
.right-enter,
.right-leave-to {
opacity: 0;
transform: translateX(100px);
}
.right-enter-active,
.right-leave-active{
transition: all 0.5s ease;
}

View File

@ -0,0 +1,31 @@
.scroll::-webkit-scrollbar {
width: 8px;
height: 8px;
}
.scroll::-webkit-scrollbar-thumb {
background-color: rgb(1, 169, 255);
border-radius: 4px;
}
.bg-date-picker-pop{
background-image: url('../images/list_bgd.png');
border:solid 1px rgb(1, 169, 255);
}
.div-no-data{
display: flex;
align-items: center;
justify-content: center;
flex-flow: column;
}
.my-module-title{
background: url(../images/one/2x1.png) no-repeat;background-size: 100%;
}
.mytable.is-scroll .el-table__body-wrapper::-webkit-scrollbar{
width: 8px;
height: 8px;
}
.mytable.is-scroll .el-table__body-wrapper::-webkit-scrollbar-thumb {
background-color: rgb(1, 169, 255);
border-radius: 4px;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 3.2 MiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,310 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
<defs>
<font id="PUTHIAfontRegular" horiz-adv-x="962" >
<font-face
font-family="PUTHIAfont"
font-weight="5"
font-stretch="normal"
units-per-em="1750"
panose-1="0 0 0 0 0 0 0 0 0 0"
ascent="1556"
descent="-194"
x-height="681"
cap-height="1269"
bbox="-73 -149 1459 1556"
underline-thickness="17"
underline-position="-122"
unicode-range="U+0020-00D7"
/>
<missing-glyph horiz-adv-x="1556"
d="M97 0v1556h1362v-1556h-1362zM1362 97v1362h-1168v-1362h1168z" />
<glyph glyph-name=".notdef" horiz-adv-x="1556"
d="M97 0v1556h1362v-1556h-1362zM1362 97v1362h-1168v-1362h1168z" />
<glyph glyph-name=".null" unicode="&#xd7;" horiz-adv-x="0"
/>
<glyph glyph-name=".null" unicode="&#x141;" horiz-adv-x="0"
/>
<glyph glyph-name=".null" unicode="&#xfd;" horiz-adv-x="0"
/>
<glyph glyph-name="nonmarkingreturn"
/>
<glyph glyph-name="space" unicode=" "
/>
<glyph glyph-name="exclam" unicode="!"
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22
l65 51h390l46 -45q31 -31 31 -41zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22
t10 -18z" />
<glyph glyph-name="quotedbl" unicode="&#x22;"
d="M162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18z" />
<glyph glyph-name="quotesingle" unicode="'"
d="M162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16z" />
<glyph glyph-name="parenleft" unicode="("
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137
q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16z" />
<glyph glyph-name="parenright" unicode=")"
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5
t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
<glyph glyph-name="plus" unicode="+"
d="M756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327
l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16z" />
<glyph glyph-name="comma" unicode="," horiz-adv-x="114"
d="M-52 33q-16 18 -16 44q0 37 28.5 66.5t67.5 29.5q47 0 79 -38q15 -21 15 -53q0 -49 -25 -92l-33 -52q-11 -19 -33.5 -39.5t-37.5 -29t-38 -18.5l36 61q10 19 15.5 38t5.5 35q0 9 -5 22l-30 8q-18 7 -29 18z" />
<glyph glyph-name="hyphen" unicode="-"
d="M756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41z" />
<glyph glyph-name="hyphen" unicode="&#xad;"
d="M756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41z" />
<glyph glyph-name="period" unicode="." horiz-adv-x="114"
d="M-73 -7l6 154h176l-14 -154h-168z" />
<glyph glyph-name="slash" unicode="/"
d="M756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55
l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18z" />
<glyph glyph-name="zero" unicode="0"
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137
q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22
t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
<glyph glyph-name="one" unicode="1"
d="M861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
<glyph glyph-name="two" unicode="2"
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22
l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18z" />
<glyph glyph-name="three" unicode="3"
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22
l65 51h390l46 -45q31 -31 31 -41zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z
" />
<glyph glyph-name="four" unicode="4"
d="M756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32q-23 -18 -32 -20
q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
<glyph glyph-name="five" unicode="5"
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22
l65 51h390l46 -45q31 -31 31 -41zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
<glyph glyph-name="six" unicode="6"
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22
l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM812 150l-9 -22
q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
<glyph glyph-name="seven" unicode="7"
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41
q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
<glyph glyph-name="eight" unicode="8"
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22
l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32
q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
<glyph glyph-name="nine" unicode="9"
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22
l65 51h390l46 -45q31 -31 31 -41zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22
t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
<glyph glyph-name="colon" unicode=":" horiz-adv-x="431"
d="M132 847l13 175h189l-20 -175h-182zM103 371l14 175h189l-21 -175h-182z" />
<glyph glyph-name="semicolon" unicode=";"
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58z" />
<glyph glyph-name="less" unicode="&#x3c;"
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369
l-131 -137q-11 7 -27 35q-14 29 -21 58z" />
<glyph glyph-name="equal" unicode="="
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41z" />
<glyph glyph-name="greater" unicode="&#x3e;"
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54
q32 30 44 32q13 -3 38 -22l39 -33z" />
<glyph glyph-name="question" unicode="?"
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60
l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18z" />
<glyph glyph-name="A" unicode="A"
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60
l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5
q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
<glyph glyph-name="B" unicode="B"
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369
l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
<glyph glyph-name="C" unicode="C"
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369
l-131 -137q-11 7 -27 35q-14 29 -21 58z" />
<glyph glyph-name="D" unicode="D"
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369
l-131 -137q-11 7 -27 35q-14 29 -21 58zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22
l39 -33z" />
<glyph glyph-name="E" unicode="E"
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22
l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16z" />
<glyph glyph-name="F" unicode="F"
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60
l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16z" />
<glyph glyph-name="G" unicode="G"
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137
q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
<glyph glyph-name="H" unicode="H"
d="M756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327
l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
<glyph glyph-name="I" unicode="I"
d="M861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
<glyph glyph-name="J" unicode="J"
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51
l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
<glyph glyph-name="K" unicode="K"
d="M756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327
l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54
q32 30 44 32q13 -3 38 -22l39 -33z" />
<glyph glyph-name="L" unicode="L"
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34
q-10 3 -22.5 22.5t-18 30.5t-8.5 16z" />
<glyph glyph-name="M" unicode="M"
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57
q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18z" />
<glyph glyph-name="N" unicode="N"
d="M756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77
l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
<glyph glyph-name="O" unicode="O"
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369
l-131 -137q-11 7 -27 35q-14 29 -21 58zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
<glyph glyph-name="P" unicode="P"
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60
l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5
q10 -1 27 -27q8 -10 15 -22t10 -18z" />
<glyph glyph-name="Q" unicode="Q"
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM162 1219q12 35 23 47l14 15l127 -137l-37 -327
l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54
q32 30 44 32q13 -3 38 -22l39 -33z" />
<glyph glyph-name="R" unicode="R"
d="M756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58z" />
<glyph glyph-name="S" unicode="S"
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22
l65 51h390l46 -45q31 -31 31 -41zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
<glyph glyph-name="T" unicode="T"
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369
l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16z" />
<glyph glyph-name="U" unicode="U"
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34
q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22
l39 -33z" />
<glyph glyph-name="V" unicode="V"
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32
q13 -3 38 -22l39 -33z" />
<glyph glyph-name="W" unicode="W"
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34
q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
<glyph glyph-name="X" unicode="X"
d="M756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327
l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54
q32 30 44 32q13 -3 38 -22l39 -33z" />
<glyph glyph-name="Y" unicode="Y"
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57
q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32
q13 -3 38 -22l39 -33z" />
<glyph glyph-name="Z" unicode="Z"
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22
l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18z" />
<glyph glyph-name="bracketleft" unicode="["
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137
q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16z" />
<glyph glyph-name="backslash" unicode="\"
d="M756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM812 150l-9 -22q-8 -16 -33 -41
q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
<glyph glyph-name="bracketright" unicode="]"
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5
t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
<glyph glyph-name="asciicircum" unicode="^"
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55
l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18z" />
<glyph glyph-name="underscore" unicode="_"
d="M756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41z" />
<glyph glyph-name="grave" unicode="`"
d="M162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16z" />
<glyph glyph-name="a" unicode="a"
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60
l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5
q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
<glyph glyph-name="b" unicode="b"
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369
l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
<glyph glyph-name="c" unicode="c"
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369
l-131 -137q-11 7 -27 35q-14 29 -21 58z" />
<glyph glyph-name="d" unicode="d"
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369
l-131 -137q-11 7 -27 35q-14 29 -21 58zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22
l39 -33z" />
<glyph glyph-name="e" unicode="e"
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22
l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16z" />
<glyph glyph-name="f" unicode="f"
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60
l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16z" />
<glyph glyph-name="g" unicode="g"
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137
q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
<glyph glyph-name="h" unicode="h"
d="M756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327
l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
<glyph glyph-name="i" unicode="i"
d="M861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
<glyph glyph-name="j" unicode="j"
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51
l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
<glyph glyph-name="k" unicode="k"
d="M756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327
l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54
q32 30 44 32q13 -3 38 -22l39 -33z" />
<glyph glyph-name="l" unicode="l"
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34
q-10 3 -22.5 22.5t-18 30.5t-8.5 16z" />
<glyph glyph-name="m" unicode="m"
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57
q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18z" />
<glyph glyph-name="n" unicode="n"
d="M756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77
l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
<glyph glyph-name="o" unicode="o"
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369
l-131 -137q-11 7 -27 35q-14 29 -21 58zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
<glyph glyph-name="p" unicode="p"
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60
l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5
q10 -1 27 -27q8 -10 15 -22t10 -18z" />
<glyph glyph-name="q" unicode="q"
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM162 1219q12 35 23 47l14 15l127 -137l-37 -327
l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54
q32 30 44 32q13 -3 38 -22l39 -33z" />
<glyph glyph-name="r" unicode="r"
d="M756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58z" />
<glyph glyph-name="s" unicode="s"
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22
l65 51h390l46 -45q31 -31 31 -41zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
<glyph glyph-name="t" unicode="t"
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369
l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16z" />
<glyph glyph-name="u" unicode="u"
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34
q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22
l39 -33z" />
<glyph glyph-name="v" unicode="v"
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32
q13 -3 38 -22l39 -33z" />
<glyph glyph-name="w" unicode="w"
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57q-43 -33 -48 -34
q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32q13 -3 38 -22l39 -33z" />
<glyph glyph-name="x" unicode="x"
d="M756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM162 1219q12 35 23 47l14 15l127 -137l-37 -327
l-73 -57q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54
q32 30 44 32q13 -3 38 -22l39 -33z" />
<glyph glyph-name="y" unicode="y"
d="M749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22l65 51h390l46 -45q31 -31 31 -41zM162 1219q12 35 23 47l14 15l127 -137l-37 -327l-73 -57
q-43 -33 -48 -34q-10 3 -22.5 22.5t-18 30.5t-8.5 16zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18zM812 150l-9 -22q-8 -16 -33 -41q-10 5 -56 51l-70 77l42 380l56 54q32 30 44 32
q13 -3 38 -22l39 -33z" />
<glyph glyph-name="z" unicode="z"
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346zM749 62q-2 -3 -9 -10t-15.5 -14.5t-21.5 -9.5h-518q-19 0 -39 12l-26 18l129 133h377zM756 702q0 -8 -34 -39l-55 -49h-392l-56 49q-34 32 -34 39q5 6 12.5 13t26.5 22
l65 51h390l46 -45q31 -31 31 -41zM107 641l30 25q20 15 28 15q7 -2 43 -38l59 -60l-36 -369l-131 -137q-11 7 -27 35q-14 29 -21 58zM861 768l-39 -32q-23 -18 -32 -20q-13 3 -46 36l-51 55l44 334q14 18 27 33.5t47.5 54t46.5 40.5q10 -1 27 -27q8 -10 15 -22t10 -18z" />
<glyph glyph-name="asciitilde" unicode="~"
d="M224 1304l18 15q8 6 15.5 8.5t19.5 2.5h489q16 -3 37 -13q23 -8 23 -22q0 -8 -45 -59l-74 -81h-346z" />
<glyph glyph-name="nonbreakingspace" unicode="&#xa0;"
/>
<glyph glyph-name="Otilde" unicode="&#xd5;" horiz-adv-x="77"
d="M14 1272q-16 17 -16 44q0 35 30 68q28 28 67 28q46 0 70 -29t24 -62q0 -48 -28.5 -97t-55 -80.5t-84.5 -53.5q15 21 30.5 50.5t21.5 48t6 35.5q0 10 -6 22l-30 8q-19 8 -29 18z" />
<hkern u1="M" u2="&#x37;" k="339" />
<hkern u1="W" u2="j" k="329" />
<hkern u1="W" u2="J" k="329" />
<hkern u1="m" u2="&#x37;" k="339" />
<hkern u1="w" u2="j" k="331" />
<hkern u1="w" u2="J" k="329" />
</font>
</defs></svg>

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 285 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 289 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 307 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 294 KiB

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