Compare commits

..

1762 Commits

Author SHA1 Message Date
he 65545dd3e5 修改
continuous-integration/drone/push Build is passing
2024-04-29 15:09:32 +08:00
he 5b92015c98 修改
continuous-integration/drone/push Build is passing
2024-04-29 15:07:29 +08:00
he 64c97b22d5 测试发布
continuous-integration/drone/push Build is passing
2024-04-29 14:43:46 +08:00
he 87adbe9bed 修改
continuous-integration/drone/push Build is pending
2024-04-29 14:43:10 +08:00
he c6ed8b8318 修改
continuous-integration/drone/push Build is passing
2024-04-29 14:39:52 +08:00
he 4d2890976a 修改
continuous-integration/drone/push Build is passing
2024-04-29 13:08:44 +08:00
hang 9cfddf1327 修改打包配置
continuous-integration/drone/push Build is passing
2024-04-29 09:56:00 +08:00
hang 84203d5aa2 修改bug
continuous-integration/drone/push Build encountered an error
2024-04-28 17:50:53 +08:00
hang 4d19fffc5f 修改bug 2024-04-28 17:42:13 +08:00
hang 18683390b7 修改颜色 2024-04-28 17:15:30 +08:00
hang fb137ae840 修改IRC 3个bug 2024-04-28 17:07:59 +08:00
hang c8bc0c4a32 修改中心调研邮件 2024-04-28 13:38:26 +08:00
hang 8ded82fa81 修改统计查询 2024-04-26 15:12:51 +08:00
hang acd1f47f4a IRC 统计数据bug 2024-04-26 14:41:06 +08:00
he 054827bbae 修改 2024-04-25 16:42:44 +08:00
he a5ebe97dc5 问题修改 2024-04-25 14:40:20 +08:00
he 02b2d8f754 问题修改 2024-04-25 13:39:28 +08:00
he cf5da8f55a 修改 2024-04-25 13:22:08 +08:00
he 40947de05a 修改 2024-04-25 13:14:31 +08:00
he 662648691d 修改 2024-04-25 11:48:11 +08:00
he 29836a9c62 修改 2024-04-24 11:19:33 +08:00
he a2b1a0d64b 修改 2024-04-24 11:13:24 +08:00
hang 87fbd2cb59 IRC 没有这个问题 2024-04-22 17:27:07 +08:00
hang c91e21c23a 修改检查获取序列列表 2024-04-22 17:19:47 +08:00
hang 0f25c7db0e 修改排序 2024-04-19 16:10:18 +08:00
hang e5b5cbb8d8 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-04-19 15:08:36 +08:00
hang 9c1af1b8dc 修改排序 2024-04-19 15:08:36 +08:00
he 0da09da45e 问题修复 2024-04-19 13:01:05 +08:00
he 87aaefadf6 修改 2024-04-19 09:21:34 +08:00
he b5b739a5cb 修改 2024-04-18 18:01:09 +08:00
he 1315d5dc29 修改 2024-04-18 17:25:29 +08:00
he 72b70f5311 修改 2024-04-18 17:24:54 +08:00
he fd15a62148 修改 2024-04-18 16:55:25 +08:00
he e9bd625195 修改 2024-04-18 16:52:04 +08:00
he c37fcf588c 问题修改 2024-04-18 16:43:02 +08:00
he 3f8d5027c8 Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-04-18 11:45:10 +08:00
he 972fc32eeb 代码修改 2024-04-18 11:45:08 +08:00
hang 1ba9efe894 修改退出逻辑 2024-04-17 12:26:56 +08:00
hang f85ac8a813 修改状态码 2024-04-17 12:23:38 +08:00
hang 7bf097c127 修改 自动退出用户 2024-04-17 12:20:01 +08:00
hang fc579d9cf4 修改发布参数 2024-04-17 11:35:30 +08:00
hang b1c0933428 x 2024-04-17 11:22:04 +08:00
hang bd7dd906fb Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-04-17 11:21:07 +08:00
hang 3a8e400f33 编译错误 2024-04-17 11:21:06 +08:00
hang c6dd323b80 编译错误 2024-04-17 11:19:11 +08:00
hang dfb45d8391 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-04-16 18:00:52 +08:00
hang 0b0df00525 自动退出逻辑测试 2024-04-16 18:00:51 +08:00
he 96fc5ae78c Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-04-16 17:38:57 +08:00
he a4b2d68995 代码修改 2024-04-16 17:38:57 +08:00
hang 70ababc2d9 自动退出登录 2024-04-16 17:36:48 +08:00
he e57887eba5 问题修改 2024-04-16 14:00:46 +08:00
he aef7fded18 修改 2024-04-16 09:57:54 +08:00
he e0613c1f2d 问题修改 2024-04-15 15:54:46 +08:00
he f6d323cc31 修改 2024-04-15 15:18:01 +08:00
he aa85562076 Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-04-15 15:14:29 +08:00
he 0165688799 问题修改 2024-04-15 15:14:27 +08:00
hang c2aefebedc 修改排序和标准确认生成任务 2024-04-15 11:19:31 +08:00
hang 1c5e4454da Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-04-15 10:29:00 +08:00
hang 65e2a45d74 增加查询条件 2024-04-15 10:28:59 +08:00
he 99026d6483 脾脏状态修改 2024-04-15 10:13:33 +08:00
he 9190783ac4 修改 2024-04-12 16:45:39 +08:00
he ae8f50dc14 修改 2024-04-12 16:36:34 +08:00
he 2a51de03b7 稽查修改 2024-04-12 16:03:30 +08:00
he 2be9daa443 修改 2024-04-12 15:57:06 +08:00
he 2778b3ea7b 修改 2024-04-12 15:43:54 +08:00
he 4cedb9dbcb 修改 2024-04-12 15:42:49 +08:00
he ed6a6fb844 问题修改 2024-04-12 15:39:43 +08:00
he 8daf02246e Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-04-12 14:47:17 +08:00
he b3178e6f8d 修改 2024-04-12 14:47:16 +08:00
hang 00cbde90c7 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-04-12 10:36:20 +08:00
hang 938175c49f 附加评估查询修改 2024-04-12 10:36:19 +08:00
he 146fc916d1 修改 2024-04-12 10:31:23 +08:00
he 87776513fb 修改 2024-04-11 16:30:45 +08:00
he 60d462e5f9 修改 2024-04-11 16:28:23 +08:00
he b39d8dd546 修改 2024-04-11 13:36:10 +08:00
he b65635c41c 修改 2024-04-11 11:41:23 +08:00
he fe2539afba 修改 2024-04-11 11:09:53 +08:00
he d2ff216396 修改 2024-04-11 11:08:34 +08:00
he 4c05da8335 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-04-11 10:41:14 +08:00
he 6061cf5d93 自动计算触发 2024-04-11 10:41:13 +08:00
hang d313b7d8a6 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-04-10 14:54:34 +08:00
hang 71c21ccc00 修改中心调研bug 需要迁移 2024-04-10 14:54:33 +08:00
he f415c03daa Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-04-10 14:54:27 +08:00
he 2bfef364ec 备注 2024-04-10 14:54:24 +08:00
helongjun c822d20d0d 计算条件补充说明 2024-04-10 14:46:28 +08:00
hang 3a996212ed Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-04-09 16:06:03 +08:00
hang 5a3b6a5f93 中心调研,公司名bug 修改 2024-04-09 16:06:02 +08:00
he 3f7227ce32 修改 2024-04-09 10:31:45 +08:00
he af0df80874 修改 2024-04-08 17:44:12 +08:00
he a163d8a785 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-04-08 17:36:02 +08:00
he 70fbf8d352 修改 2024-04-08 17:36:02 +08:00
hang d9a8692be8 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-04-08 17:30:40 +08:00
hang 56fb9c14d1 稽查排序修改,需要迁移 2024-04-08 17:30:39 +08:00
he 8bc0cee81f 修改 2024-04-08 17:25:08 +08:00
he dc86767184 修改 2024-04-08 14:45:58 +08:00
he e1383445e2 修改 2024-04-08 14:45:39 +08:00
he 0a30107859 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-04-08 13:44:58 +08:00
he ba27925409 添加病灶编号 2024-04-08 13:44:57 +08:00
hang 3a52021cdc 修改导表查询 2024-04-08 13:29:37 +08:00
hang aba4fc70c2 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-04-08 11:16:55 +08:00
hang 5b89343192 修改导表 2024-04-08 11:16:55 +08:00
he 20f9e90a69 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-04-08 11:12:40 +08:00
he 5c58171ac3 代码修改 2024-04-08 11:12:38 +08:00
hang e98d80eea6 修改导表错误 2024-04-08 11:02:35 +08:00
hang c14d5be4ac x 2024-04-07 17:39:29 +08:00
hang fea108371f Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-04-07 16:17:42 +08:00
hang dd47bf05f8 修改一致性分析 2024-04-07 16:17:41 +08:00
he 3a160c1913 iRECIST新病灶评估 修改 2024-04-07 15:41:55 +08:00
he c42c26d76a 临床数据不完备提示 2024-04-07 14:54:41 +08:00
he f7117563f7 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-04-07 14:32:59 +08:00
he 39968194b1 问题修改 2024-04-07 14:32:58 +08:00
hang 0d5f7e5673 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-04-07 14:30:44 +08:00
hang 7f4e111f7d 修改导表bug 2024-04-07 14:30:43 +08:00
he 0c92fcb011 修改 2024-04-07 13:20:44 +08:00
hang 2f4418e3ed 修改查询 2024-04-01 17:50:39 +08:00
hang 75a3d7c80f 修改查询条件 2024-04-01 11:32:59 +08:00
hang 4605053e50 x 2024-04-01 11:14:17 +08:00
hang a8da0c0b55 修改展示样式,修改排序,增加查询条件 2024-04-01 11:02:21 +08:00
he ba984f9263 修改 2024-03-29 14:29:44 +08:00
he 451a311142 修改 2024-03-29 14:23:21 +08:00
he f86bc219cf 修改 2024-03-29 13:31:01 +08:00
he 06bd63b6d1 修改 2024-03-29 13:29:29 +08:00
he be088d8ba2 修改 2024-03-29 13:24:57 +08:00
he c718ec8446 修改 2024-03-28 10:45:43 +08:00
he 668e1019f0 修改 2024-03-28 10:39:52 +08:00
he e2f5a7fae1 修改 2024-03-27 13:29:58 +08:00
he f1a141c018 修改 2024-03-27 11:08:31 +08:00
he 30a0f428bc 修改 2024-03-26 16:04:03 +08:00
he 7a8346621d 修改 2024-03-26 15:53:28 +08:00
he 6d93054d3d Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-26 15:13:14 +08:00
he 5c53e78aca 修改 2024-03-26 15:13:13 +08:00
hang 1eeb832b0e Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-26 15:05:45 +08:00
hang c8db9431b2 去除 未生效任务状态 2024-03-26 15:05:44 +08:00
he ce8e0e3972 修改 2024-03-26 14:57:06 +08:00
he ed4192838d Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-25 17:52:54 +08:00
he d900c368e2 修改 2024-03-25 17:52:54 +08:00
hang 6926bb877c Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-25 15:27:54 +08:00
hang cb9b54a089 邮件title 重复 2024-03-25 15:27:53 +08:00
he 57c5d14f5a Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-25 14:57:01 +08:00
he 4f19d1638d 修改 2024-03-25 14:57:00 +08:00
hang ace39a7f94 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-25 13:09:44 +08:00
hang e8e0540cc2 返回modalitys 2024-03-25 13:09:43 +08:00
he a98799daaf 修改 2024-03-25 10:46:20 +08:00
he f2b53cd359 修改 2024-03-25 10:42:09 +08:00
he 960f479b91 修改 2024-03-25 09:30:12 +08:00
he d6dacb93dd 修改 2024-03-22 15:22:49 +08:00
he 8823656231 修改 2024-03-22 15:22:09 +08:00
he 2c859e7186 修改 2024-03-22 15:11:41 +08:00
he 99828dd82e 修改 2024-03-22 13:51:55 +08:00
he 855242e6fe 修改 2024-03-22 13:01:26 +08:00
he 90a1a920fa 修改 2024-03-22 11:08:08 +08:00
he c73968f490 修改 2024-03-21 16:22:43 +08:00
he 282368b9e0 修改 2024-03-21 16:18:42 +08:00
he 726a2be71e 修改 2024-03-21 14:07:04 +08:00
he 510104d0ff 需改 2024-03-21 13:26:46 +08:00
he 12318937f4 修改 2024-03-21 11:37:01 +08:00
he 8f17d4b110 修改还 2024-03-21 11:29:16 +08:00
he 18496246b2 修改 2024-03-21 11:22:04 +08:00
he 55f60e897a 修改 2024-03-21 10:49:24 +08:00
he dd2d142340 问题修复 2024-03-21 09:55:32 +08:00
he 49a0cf3ece 修改 2024-03-20 17:08:26 +08:00
he f0d4a1c075 修改 2024-03-20 16:41:03 +08:00
he 5e6db93250 修改 2024-03-20 16:03:57 +08:00
he 12adf2f3a9 修改 2024-03-20 15:56:40 +08:00
he b08908b1dc 修改 2024-03-20 15:12:05 +08:00
he 8f08746377 修改 2024-03-20 13:16:35 +08:00
he 045e9346ad Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-20 10:20:01 +08:00
he 864ab17ff3 疾病进展计算 2024-03-20 10:20:00 +08:00
hang 700d111011 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-20 10:17:08 +08:00
hang 7168d68997 清理缓存 2024-03-20 10:17:06 +08:00
he 40ec535e8a 修改 2024-03-20 10:02:04 +08:00
he 4dfaf29f3d 修改 2024-03-20 09:39:21 +08:00
he 702cd361fe 修改 2024-03-19 17:34:07 +08:00
he b776103328 添加获取Series信息 2024-03-19 16:43:02 +08:00
he 381e7b5046 修改 2024-03-19 16:04:29 +08:00
he ebdec8dd62 修改 2024-03-19 15:39:55 +08:00
he 6677f2a01e Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-19 14:56:52 +08:00
he 5aaa9043ff 修改 2024-03-19 14:56:52 +08:00
hang 48874adda3 升级nuget 2024-03-19 14:47:58 +08:00
he 0cf5a88d63 修改 2024-03-19 11:43:03 +08:00
he 4b92874ca6 修改 2024-03-19 11:33:34 +08:00
he 2d81b05fba 修改 2024-03-19 11:25:47 +08:00
he 78756aa2f4 获取PT CT 序列 2024-03-19 11:18:58 +08:00
he a15c91ebcb 修改 2024-03-19 10:05:46 +08:00
he 4b389c8293 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-19 09:51:02 +08:00
he 2313b5e907 修改 2024-03-19 09:51:01 +08:00
hang e22941d947 注释服务 2024-03-19 09:13:15 +08:00
hang 3efc173056 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-19 08:58:46 +08:00
hang 6389919cfd 归档预处理1 2024-03-19 08:58:45 +08:00
he 984b840fa7 修改 2024-03-18 18:01:23 +08:00
he 2bf01fbf0c 报告修改 2024-03-18 14:12:13 +08:00
he 116eeb753d 修改 2024-03-18 13:57:08 +08:00
he 82a6237323 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-18 13:39:53 +08:00
he 6220a96666 修改 2024-03-18 13:39:53 +08:00
hang 259ab2c569 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-18 13:06:12 +08:00
hang efda4e0fdd 增加site下拉返回属性 2024-03-18 13:06:11 +08:00
he 968264fe9a 修改 2024-03-18 10:44:53 +08:00
he 57911cf567 修改 2024-03-18 10:32:42 +08:00
he a61d9ae4d1 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-15 10:30:29 +08:00
he 5735383cd7 查询既往信息 2024-03-15 10:30:27 +08:00
hang e3607895b4 修改study 列表 排序 2024-03-14 17:10:25 +08:00
hang 16a2e0b53f 修改site user 时间 2024-03-14 16:36:17 +08:00
hang 41e5f9fd78 修改时区 修改时间 2024-03-14 15:59:13 +08:00
hang 64b750b06e 修改多时区问题解决 2024-03-14 14:18:16 +08:00
hang ca90736366 修改时区问题 2024-03-14 13:48:27 +08:00
hang 664b308e31 暂时屏蔽时区 2024-03-14 13:25:51 +08:00
hang 8de0671d31 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-14 10:37:22 +08:00
hang 19d7192842 修改访视 2024-03-14 10:37:21 +08:00
he c3ed54f05f 修改 2024-03-14 10:19:39 +08:00
he ef6655a014 修改验证 2024-03-14 10:14:09 +08:00
he 234e549b22 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-14 09:31:44 +08:00
he 903f72989a 查询修改 2024-03-14 09:31:43 +08:00
hang 3e9900cc45 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-13 17:42:40 +08:00
hang 78d0cffd3d 分配阅片人查询,增加查询条件 2024-03-13 17:42:40 +08:00
he 658e8d983c Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-13 16:31:22 +08:00
he 8174237a82 修改 2024-03-13 16:31:22 +08:00
hang 39a5e8eade 增加efcore 官方批量更新 2024-03-13 16:13:24 +08:00
hang 54dea66f5f 修改一致性分析提示 2024-03-13 16:12:56 +08:00
hang 86fd9ddc0e 修改规则 2024-03-13 15:57:18 +08:00
hang b071d1126b Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-13 15:37:09 +08:00
hang 139e9daec0 修改一致性分析限制 2024-03-13 15:37:09 +08:00
he 4eeda2b3e7 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-13 13:45:20 +08:00
he fa64b42a84 既往图片 2024-03-13 13:45:19 +08:00
hang ce67f4828f Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-13 13:24:14 +08:00
hang 87e3d953d3 oss私有读预提交 2024-03-13 13:24:14 +08:00
he 5d4668eaee Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-13 10:12:04 +08:00
he cfce8dba1f 计算CTMRI 总体评估 2024-03-13 10:12:03 +08:00
hang c11e319472 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-12 15:37:16 +08:00
hang 7c7a0cd20b 修改统计数字bug 2024-03-12 15:37:15 +08:00
he a66bb42126 病灶融合修改 2024-03-12 15:15:00 +08:00
he 7d63f3f5cb 修改 2024-03-12 14:31:56 +08:00
he b102d23477 代码修改 2024-03-12 14:30:43 +08:00
he e19c03412d 分组修改 2024-03-12 14:13:26 +08:00
he 56cba570bf Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-12 14:05:15 +08:00
he c7abcc153e 查询修改 2024-03-12 14:05:14 +08:00
hang 967a77f371 修改项目文档查询 2024-03-12 13:52:00 +08:00
hang 2060f2c62e Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-12 13:28:38 +08:00
hang 193c107539 增加项目编号 2024-03-12 13:28:37 +08:00
he 2fe0851786 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-12 13:25:46 +08:00
he 46b68ca2c9 添加默认医学审核问题修改 2024-03-12 13:25:45 +08:00
hang 396797dc0c 修改查询 2024-03-12 11:47:21 +08:00
hang 5579f543de 修改统计 2024-03-12 11:41:18 +08:00
hang ce31ab3097 修改文档查询 2024-03-12 10:05:04 +08:00
hang daa4764aac Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-12 09:32:03 +08:00
hang a24c6775e8 测试 dicom 注入服务 2024-03-12 09:32:01 +08:00
he eb9de1769e 问题修改 2024-03-11 17:58:53 +08:00
he d675cc50b3 修改 2024-03-11 16:29:42 +08:00
he 350d089c39 修改 2024-03-11 16:18:01 +08:00
he 116969f4f2 修改 2024-03-11 16:03:02 +08:00
he 112d9f9a63 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-11 15:59:42 +08:00
he 5dae9c5d06 代码修改 2024-03-11 15:59:42 +08:00
hang c0a63ecfed Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-11 15:56:25 +08:00
hang 881a5320a8 废弃之前的接口,增加统计 2024-03-11 15:56:25 +08:00
he 22a254890e Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-11 15:55:42 +08:00
he 0912909b68 修改 2024-03-11 15:55:41 +08:00
hang cd7318dd63 增加统计字段 2024-03-11 15:45:12 +08:00
hang 21cc610095 工作台,增加我的已签署系统、项目文件 2024-03-11 15:36:43 +08:00
hang cc8151caf8 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-11 15:10:38 +08:00
hang 8cce399430 增加c-store-scp 2024-03-11 15:10:37 +08:00
he 99688df446 修改 2024-03-11 14:53:21 +08:00
he de0a278cac 修改 2024-03-11 14:39:27 +08:00
he 7031ea1a04 修改 2024-03-11 14:26:46 +08:00
he 541455a08b x修改 2024-03-11 14:25:53 +08:00
he 814efc4e35 修改排序 2024-03-11 14:20:38 +08:00
he f85bbc41c4 计算修改 2024-03-11 13:23:45 +08:00
he c00e8eb809 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-11 09:32:28 +08:00
he 9dd00170af 修改 2024-03-11 09:32:25 +08:00
hang fdba16de86 修改用户类型排序 2024-03-08 16:05:52 +08:00
hang 38f319b425 修改访视计划默认值 2024-03-08 15:36:10 +08:00
hang d35046b277 修改国际化 2024-03-08 14:45:13 +08:00
hang bdcaf2f2be 修改邮件 2024-03-08 14:01:38 +08:00
hang bba622da0e 邮件修改 2024-03-08 13:46:20 +08:00
hang 0d4f694fcf Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-08 13:37:22 +08:00
hang a41824414e 修改邮件 2024-03-08 13:37:21 +08:00
he c54b0abbd7 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-08 13:14:17 +08:00
he d772ea527a 计算修改 2024-03-08 13:14:15 +08:00
helongjun 62b76220d4 更新邮件模板 2024-03-08 12:51:11 +08:00
he 6aa8628c0c 修改 2024-03-08 11:49:25 +08:00
he 7d9f4864d0 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-08 11:32:11 +08:00
he d149d5a5d5 脾脏状态 2024-03-08 11:32:10 +08:00
hang 7572bf9fb0 [医学审核统计修改2] 2024-03-08 11:03:03 +08:00
hang 40ab925a4e Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-08 10:30:35 +08:00
hang 75a989b4f1 修改医学审核bug 2024-03-08 10:30:34 +08:00
he f98f89a51d 肿瘤学重复生成 2024-03-08 10:15:02 +08:00
he 423ea4bc6f 计算修改 2024-03-08 10:03:24 +08:00
he 3c60dd9ae8 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-08 09:58:47 +08:00
he f9006be79b 靶病灶计算修改
疾病进展计算修改
2024-03-08 09:58:47 +08:00
hang 0492563838 修改医院 site 2024-03-08 09:21:46 +08:00
hang d58089b9ee Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-07 17:18:05 +08:00
hang e17a33a16f 删除 临床数据统计 2024-03-07 17:18:01 +08:00
he c935599fcf 代码修改 2024-03-07 15:00:04 +08:00
he efafdc50b8 医学审核问题修改 2024-03-07 13:26:19 +08:00
he 8846c1d728 修改 2024-03-07 13:02:41 +08:00
he 9bfd89cb9b 计算修改 2024-03-07 10:25:05 +08:00
he 35f01818dd Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-07 10:01:07 +08:00
he 875af7e9f7 医学审核问题修改 2024-03-07 10:01:07 +08:00
hang 7dfce2db55 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-07 09:36:49 +08:00
hang cab5772068 x 2024-03-07 09:36:49 +08:00
he 6319f1e82d 添加截止访视 2024-03-07 09:32:12 +08:00
hang d42c8477aa 自动生成增加验证逻辑 2024-03-07 09:26:48 +08:00
he b559a7882b 阅片标准修复 2024-03-07 09:25:22 +08:00
he 30e1d70099 基线摄取值修改 2024-03-06 17:50:26 +08:00
he 84a8d18519 插入问题修复 2024-03-06 17:20:38 +08:00
he 1fc20e5640 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-06 17:11:10 +08:00
he d8f0fba8e2 修改 2024-03-06 17:11:09 +08:00
hang 2921404540 x 2024-03-06 17:08:32 +08:00
hang df79b7b57b 删除参数 2024-03-06 17:00:43 +08:00
hang 0a45638bac 修改规则 2024-03-06 16:31:11 +08:00
hang 4f725af6cd 修改一致性分析 2024-03-06 15:55:37 +08:00
hang 44ae7bde56 一致性分析修改 2024-03-06 14:08:51 +08:00
hang cd5e0405de 一致性分析修改 2024-03-06 14:02:37 +08:00
hang 5bbf2d3c82 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-06 13:47:54 +08:00
hang 09743f7153 修改更新接口 2024-03-06 13:47:54 +08:00
he f88ef2f3fc lugano修改 2024-03-05 18:05:08 +08:00
he ef032b548e 验证修改 2024-03-05 17:13:38 +08:00
he db2f3cc85a 修改 2024-03-05 14:57:16 +08:00
he 7584f4a5b4 修改 2024-03-05 14:53:23 +08:00
he aac559e221 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-05 14:49:55 +08:00
he aee5c17591 医学审核修改 2024-03-05 14:49:54 +08:00
hang d8248a7973 项目VitrualSiteCode 给默认值 2024-03-05 14:40:39 +08:00
hang b68d060f85 一致性分析规则 列表增加配置信息 2024-03-05 11:43:16 +08:00
hang 74399df5eb 修改一致性分析 2024-03-05 09:06:40 +08:00
hang c3b62137d8 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-04 16:36:18 +08:00
hang 352bd23766 修改统计命名 2024-03-04 16:36:18 +08:00
he 398344854b Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-04 16:01:17 +08:00
he e181c3cc82 医学审核问题配置 2024-03-04 16:01:16 +08:00
hang 24e4008b72 修改统计 2024-03-04 16:00:16 +08:00
hang 50d9ed7e3c Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-04 15:47:51 +08:00
hang 9fd113c95f 修改统计 2024-03-04 15:47:50 +08:00
he 5683ced93d 删除也计算病灶状态 2024-03-04 14:31:44 +08:00
he 4360f4b2cb 计算修改 2024-03-04 14:19:43 +08:00
he 43a873defd Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-04 14:11:18 +08:00
he e5d08cdb3e 医生审核问题一件添加 2024-03-04 14:11:18 +08:00
hang c78b80c679 找回密码禁用没有启用的账户 2024-03-04 11:47:14 +08:00
hang 9cd3ba1c67 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-04 10:06:39 +08:00
hang dd22b206dc spm 统计修改 2024-03-04 10:06:38 +08:00
he 12b668642c Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-01 16:04:36 +08:00
he 77fa881d69 临床数据修改 2024-03-01 16:04:35 +08:00
hang 05dcbfed2e Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-01 16:00:42 +08:00
hang 6471041fad [项目site code 一致性分析验证] 2024-03-01 16:00:40 +08:00
he 69ab56f878 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-01 15:55:23 +08:00
he 97538333c0 临床数据修改 2024-03-01 15:55:22 +08:00
hang a094e1a2b7 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-01 14:08:27 +08:00
hang d0c8df1452 【入组增加一致性分析切换按钮】 2024-03-01 14:08:27 +08:00
he 1b6a31e626 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-01 14:07:44 +08:00
he 2c1cde9f69 x修改临床数据 2024-03-01 14:07:43 +08:00
hang 1aa5e45694 修改模型 2024-03-01 13:34:37 +08:00
hang 9fc04193c7 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-01 12:17:38 +08:00
hang b685b9fa13 修改统计列表 2024-03-01 12:17:37 +08:00
he 59f97d0c2d Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-01 11:46:51 +08:00
he 8f94460537 计算修改 2024-03-01 11:46:50 +08:00
hang 26fe947991 修改签署文档统计 2024-03-01 09:24:58 +08:00
hang 16829f9075 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-03-01 09:16:11 +08:00
hang 246314561b 修改面板统计 2024-03-01 09:16:10 +08:00
he 331a3c4178 肿瘤学阅片 2024-02-29 18:12:45 +08:00
he 35ba7861d1 肿瘤学修改 2024-02-29 17:20:17 +08:00
he 59cb66331e 肿瘤学阅片修改 2024-02-29 17:03:55 +08:00
he 782bfaa6c4 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-02-29 16:09:25 +08:00
he 830af4a164 临床数据修改 2024-02-29 16:09:25 +08:00
hang 994cb73104 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-02-29 16:08:40 +08:00
hang 8e3dc73408 [一致性分析预提交] 2024-02-29 16:08:39 +08:00
he 6792f9e916 临床数据修改 2024-02-29 16:03:28 +08:00
he a350c35f49 融合修改 2024-02-29 14:12:02 +08:00
he fb498b3723 肿瘤学阅片修改 2024-02-29 14:06:17 +08:00
he 7b9c90b77c Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-02-29 14:01:04 +08:00
he f4fd16d8fd 验证检查类型临床数据修改 2024-02-29 14:01:04 +08:00
hang 5656e66c28 [增加其他角色统计-2] 2024-02-29 10:37:31 +08:00
hang 39882e43ce [增加其他角色统计 1] 2024-02-29 09:49:59 +08:00
he e5f2d1cde9 代码提交 2024-02-28 15:15:33 +08:00
he 4f978863e4 分裂修改 2024-02-28 14:52:49 +08:00
he f26aafa8cb 肿瘤学修改 2024-02-28 10:47:39 +08:00
he e444354cf7 分列修改 2024-02-28 10:27:11 +08:00
he 0e4ae72016 肿瘤学阅片修改 2024-02-28 10:15:10 +08:00
he c1121a2d3f Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-02-28 09:43:19 +08:00
he 1737825506 肿瘤学阅片 2024-02-28 09:43:18 +08:00
hang 437c569617 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-02-27 17:27:06 +08:00
hang 9580d77512 [修改IR 医学审核统计] 2024-02-27 17:27:05 +08:00
he f7fb89313c Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-02-27 17:26:18 +08:00
he 721a7d2341 全局阅片修改 2024-02-27 17:26:17 +08:00
hang 3529ab6cb6 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-02-27 15:52:41 +08:00
hang 484bb3ca5b [保证统计,都有TrialId] 2024-02-27 15:52:40 +08:00
he 121b2d5df1 修改 2024-02-27 15:32:10 +08:00
he 472887d627 肿瘤学修改 2024-02-27 15:19:30 +08:00
he 03f514d5fe 肿瘤学修改 2024-02-27 15:05:32 +08:00
he 36d2203e4c Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-02-27 14:44:58 +08:00
he 4e11cc7db3 重置阅片标准 2024-02-27 14:44:58 +08:00
hang f23963896d 【项目签名文档限制】 2024-02-27 14:17:46 +08:00
he fd2b13b391 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-02-27 14:17:01 +08:00
he b90743ded1 肿瘤学修改 2024-02-27 14:16:59 +08:00
hang ee499d9352 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-02-27 14:02:48 +08:00
hang d12f0bddad 【第一层级统计,需要迁移】 2024-02-27 14:02:47 +08:00
he 9eabd9031b 融合修改 2024-02-26 17:15:43 +08:00
he 552e7a430d 字典修改 2024-02-26 13:30:53 +08:00
he b97f9f8f12 融合修改 2024-02-23 15:35:22 +08:00
he 8be0cea193 病灶修改 2024-02-23 15:27:55 +08:00
he bce088bcdf 融合修改 2024-02-23 14:45:10 +08:00
he 6955c42c8b 融合修改 2024-02-23 14:10:44 +08:00
he 07b36279cf 修改 2024-02-23 14:04:07 +08:00
he 5c1dc0754b 融合 2024-02-23 13:39:46 +08:00
he 7eaa644028 融合修改 2024-02-23 13:37:04 +08:00
he 1b29312bef 融合修改 2024-02-23 13:21:59 +08:00
he 930412bf21 融合修改 2024-02-23 13:19:12 +08:00
he 0e1f4931eb 融合修改 2024-02-23 13:15:37 +08:00
he 2e2c4b4397 修改 2024-02-23 13:10:59 +08:00
he 7665cc7f73 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-02-23 13:08:11 +08:00
he c743335d13 融合问题修改 2024-02-23 13:08:10 +08:00
hang e9aeb1c918 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-02-22 17:55:20 +08:00
hang c092e9a8d0 [修改邮件模板 4] 2024-02-22 17:55:18 +08:00
he a55ec01992 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-02-22 15:50:22 +08:00
he 302e503e02 医学审核修改 2024-02-22 15:50:22 +08:00
hang f82639cdf3 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-02-22 15:49:31 +08:00
hang 9172d8c5f8 【国际化,项目配置 空格问题】 2024-02-22 15:49:28 +08:00
he 69fd8ec123 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-02-22 14:51:38 +08:00
he d9c7a512e9 提交 2024-02-22 14:51:37 +08:00
hang 38383f34ff [修改邮件模板 -3] 2024-02-22 14:41:03 +08:00
hang b7585fe022 [修改邮件模板- 替换固定字符串] 2024-02-22 14:31:45 +08:00
hang b7d9009ff4 [邮件发送,配置动态公司名称] 2024-02-22 14:02:51 +08:00
hang 9c26745c2a 关闭 时区 发布aws 2024-02-22 13:28:57 +08:00
hang 67f8e57ab6 编译错误 2024-02-22 09:56:18 +08:00
hang b2ef603729 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-02-21 16:01:37 +08:00
hang 110ea953c4 [国际化-前端也使用code,唯一标识] 2024-02-21 16:01:34 +08:00
hang cef07a5bff 【时区,修改3 前端时间传递“” 问题解决】 2024-02-21 15:28:08 +08:00
hang a5899023b9 [时区修改-调整名称] 2024-02-21 14:33:38 +08:00
hang 61530be208 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-02-21 13:58:36 +08:00
hang 292bcd7100 [服务器处理时区上线测试] 2024-02-21 13:58:34 +08:00
he 8f4a6fcf80 异常修改 2024-02-21 11:20:04 +08:00
he dfdb3b5951 病灶修改 2024-02-21 11:19:33 +08:00
he 0cc7b373b7 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-02-21 09:36:03 +08:00
he 7e5cbd92b4 提示语修改 2024-02-21 09:36:03 +08:00
hang 2594ecd27e [修改启用禁用时,启用时间,增加字段] 2024-02-21 09:30:41 +08:00
he edf8af3e4d 修改 2024-02-20 16:30:20 +08:00
he 5a76275571 修改 2024-02-20 16:23:13 +08:00
he b147ee1c99 修改 2024-02-20 15:13:56 +08:00
he 8b7cc8a220 修改 2024-02-20 14:50:38 +08:00
he 88931a4a56 新加字段 2024-02-20 14:32:39 +08:00
he df187bed58 病灶合并 2024-02-20 14:28:52 +08:00
he 8b86bc6b3f 获取可融合的病灶 2024-02-20 14:12:21 +08:00
he f9ac64023a Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-02-20 13:19:59 +08:00
he 3a710e1e50 病灶分裂计算 2024-02-20 13:19:58 +08:00
hang 1d4f58f362 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-02-20 10:02:41 +08:00
hang abfd0a0a2e [删除site调研 中心查询] 2024-02-20 10:02:39 +08:00
he 98839b15dc Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-02-20 09:52:16 +08:00
he 5b885e98cc 融合 2024-02-20 09:52:16 +08:00
hang 58e29608e5 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-02-20 09:49:35 +08:00
hang db71cfd396 [中心调研-新增查询site 接口] 2024-02-20 09:49:35 +08:00
hang 0de9cfb240 [中心未启用,不用看到] 2024-02-20 09:42:51 +08:00
he 2a8efb246d Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-02-20 09:42:37 +08:00
he 071cf4eed8 病灶融合 修改 2024-02-20 09:42:37 +08:00
hang 87a8d8d490 [时区预备测试] 2024-02-20 09:41:01 +08:00
he d3caa1dda9 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-02-19 10:16:54 +08:00
he f832d44f3a 提交 2024-02-19 10:16:53 +08:00
hang 103ab700fc 修改查询条件 2024-02-19 09:56:48 +08:00
hang 6419fa6e61 [修改bug] 2024-02-16 22:08:52 +08:00
hang 98cf2adf92 [修改签名状态] 2024-02-16 21:39:57 +08:00
hang 5660d2e83b 修改医生自己编辑信息
continuous-integration/drone/push Build is passing
2024-02-02 15:44:54 +08:00
hang 5e3e242981 修改邮件发送bug
continuous-integration/drone/push Build is passing
2024-02-02 15:02:09 +08:00
hang 65c31fb457 修改配置文件
continuous-integration/drone/push Build is passing
2024-02-01 15:37:05 +08:00
hang 0f891075cc Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-02-01 15:09:56 +08:00
hang 6d898367e4 修改gcp bug 2024-02-01 15:09:54 +08:00
he 003e63b7fb 修改查询阅片图像
continuous-integration/drone/push Build is passing
2024-02-01 13:42:59 +08:00
he 73c9e15976 阅片图像查询修改 2024-02-01 13:42:55 +08:00
hang 1dc1d673dd Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-02-01 11:38:36 +08:00
hang 46818d9a02 修改医生bug 2024-02-01 11:38:28 +08:00
he d6a585c6cc 添加修改
continuous-integration/drone/push Build is passing
2024-02-01 10:46:43 +08:00
he c54fcf920c 修改
continuous-integration/drone/push Build is passing
2024-02-01 09:59:07 +08:00
he 467c7f77f5 修改
continuous-integration/drone/push Build is passing
2024-02-01 09:46:45 +08:00
he 3c51287178 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-02-01 09:16:54 +08:00
he 9d8fdcfa12 修改 2024-02-01 09:16:53 +08:00
hang fadd8a7f79 修改yml文件
continuous-integration/drone/push Build is passing
2024-01-31 15:52:58 +08:00
hang f2afb7ab1a 增加本地打包推送上海阿里云镜像仓库
continuous-integration/drone/push Build encountered an error
2024-01-31 15:48:42 +08:00
hang b52d8785bb Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-01-31 13:34:57 +08:00
hang 70846525bf 注释 2024-01-31 13:34:56 +08:00
he abe77916a3 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is passing
2024-01-31 11:22:37 +08:00
he 660846a0d8 修改 2024-01-31 11:22:36 +08:00
hang 8dec77f30a Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-01-31 10:28:35 +08:00
hang 5812c8f939 [修改subject 查询 不依赖系统site] 2024-01-31 10:28:34 +08:00
he 1c673e11ac Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-01-31 10:18:24 +08:00
he bf54bcfd9b 代码修改 2024-01-31 10:18:23 +08:00
hang 33a0b8f11f Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-01-31 09:51:35 +08:00
hang 61ffdabc51 【修改 查询写入dicom的信息】 2024-01-31 09:51:32 +08:00
he 2f224047bc Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-01-30 14:29:31 +08:00
he 2747fa82e3 lugano 修改 2024-01-30 14:29:28 +08:00
hang 5dd80c91cf Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-01-29 16:58:33 +08:00
hang 495e602599 [修改医生限制] 2024-01-29 16:58:30 +08:00
he 545ddd4ec9 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-01-29 14:33:43 +08:00
he 9fff53f137 代码提交 2024-01-29 14:33:41 +08:00
hang 1d38fc0879 x
continuous-integration/drone/push Build is passing
2024-01-29 11:01:49 +08:00
hang 48f44b8920 [修改时间]
continuous-integration/drone/push Build is passing
2024-01-26 14:11:20 +08:00
hang e365818ef5 [修改重传没有检查id...]
continuous-integration/drone/push Build is passing
2024-01-26 14:10:19 +08:00
hang c2bb3010cc [修改一致性核查模板]
continuous-integration/drone/push Build is passing
2024-01-26 10:15:22 +08:00
hang 4ca8003d24 [site搜索三个名字]
continuous-integration/drone/push Build is passing
2024-01-26 09:39:34 +08:00
hang 6a212926e0 [退回bug3 ]
continuous-integration/drone/push Build is passing
2024-01-25 12:24:31 +08:00
hang dae5c0440f 删除测试配置
continuous-integration/drone/push Build is passing
2024-01-25 11:24:21 +08:00
hang 6b1d083faa Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-01-25 11:03:14 +08:00
hang c8510bea2a 增加[RuntimeIdentifiers] 2024-01-25 11:03:07 +08:00
hang a00e84018a [修改导出bug]
continuous-integration/drone/push Build is passing
2024-01-24 17:57:52 +08:00
hang 3435806020 [退回bug2]
continuous-integration/drone/push Build is passing
2024-01-24 14:40:09 +08:00
hang 27f0a0fcfa [修改回退bug]
continuous-integration/drone/push Build is passing
2024-01-24 14:13:15 +08:00
hang 1f4bb0128a [邮件模板启用与否没用bug修复]
continuous-integration/drone/push Build is passing
2024-01-24 09:03:51 +08:00
hang e686b6b7d4 修改正式文件配置
continuous-integration/drone/push Build is passing
2024-01-23 13:38:22 +08:00
hang b74d46b425 修改日志过滤
continuous-integration/drone/push Build is passing
2024-01-23 09:12:19 +08:00
hang aa08628b72 [屏蔽健康检查测试3]
continuous-integration/drone/push Build is passing
2024-01-22 17:35:42 +08:00
hang d4b2c48916 [屏蔽健康检查 测试2]
continuous-integration/drone/push Build is passing
2024-01-22 17:18:12 +08:00
hang 152846cfd5 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-01-22 16:54:15 +08:00
hang 48ef1c8605 [屏蔽健康检查日志测试1] 2024-01-22 16:54:10 +08:00
he de72cdb61a Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-01-22 16:16:06 +08:00
he 4c17101e27 添加LimitShow 限制显示 2024-01-22 16:16:03 +08:00
hang 0c1b3b0175 修改配置文件
continuous-integration/drone/push Build is passing
2024-01-22 10:58:15 +08:00
hang 45b51d9bfa 修改邮件模板
continuous-integration/drone/push Build is passing
2024-01-22 10:50:19 +08:00
hang 127916f03e [上传监控修改,增加搜索条件]
continuous-integration/drone/push Build is passing
2024-01-19 16:32:34 +08:00
hang f94e9c98f9 [AWS 对接上传 需要传递文件大小]
continuous-integration/drone/push Build is passing
2024-01-19 16:22:00 +08:00
hang e52523f1fa 修改测试环境aws
continuous-integration/drone/push Build is passing
2024-01-19 15:39:45 +08:00
hang 2d36f75660 修改美国环境配置
continuous-integration/drone/push Build is passing
2024-01-19 15:37:25 +08:00
hang a541423de5 [修改重传没有检查id]
continuous-integration/drone/push Build is passing
2024-01-19 15:33:52 +08:00
hang 8e98d1710b 修改配置文件
continuous-integration/drone/push Build is passing
2024-01-19 15:29:51 +08:00
hang 7b53756753 [修改医生bug 和site bug]
continuous-integration/drone/push Build is passing
2024-01-19 15:12:47 +08:00
hang e20d7982f4 修改配置文件
continuous-integration/drone/push Build is passing
2024-01-19 14:52:42 +08:00
hang ff8604f44a 切换为aws
continuous-integration/drone/push Build is passing
2024-01-19 13:55:40 +08:00
hang aaddd8e26f 增加美国环境
continuous-integration/drone/push Build is passing
2024-01-19 13:41:31 +08:00
hang 5e7fd398f2 [上传失败过,返回标志]
continuous-integration/drone/push Build is passing
2024-01-18 17:41:36 +08:00
hang 53cc5f129f Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-01-18 14:35:58 +08:00
hang 881e67d3e2 美国环境预修改 2024-01-18 14:35:55 +08:00
he 2c385aba12 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-01-17 15:28:27 +08:00
he b53616addc 肿瘤学修改 2024-01-17 15:28:26 +08:00
hang ff3796b7a0 [修改裁判重阅逻辑 2]
continuous-integration/drone/push Build is passing
2024-01-17 14:49:18 +08:00
hang 9aa061e093 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-01-17 14:33:12 +08:00
hang 9524a31fe6 [重阅裁判任务bug ] 2024-01-17 14:33:09 +08:00
he 9c4f2dcf6b 代码修改
continuous-integration/drone/push Build is passing
2024-01-17 13:28:42 +08:00
he c70120bcaa 代码修改
continuous-integration/drone/push Build is passing
2024-01-17 13:10:20 +08:00
he ea693b3ffc 修改
continuous-integration/drone/push Build is passing
2024-01-17 11:16:39 +08:00
he 62ec7d91a9 撤销修改
continuous-integration/drone/push Build is passing
2024-01-17 11:02:25 +08:00
he 01b6799a31 修改
continuous-integration/drone/push Build is passing
2024-01-17 10:50:36 +08:00
he 52f3a88e36 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-01-17 10:07:59 +08:00
he 35687c01ec 肿瘤学阅片 2024-01-17 10:07:58 +08:00
hang ed01407382 [上传监控增加字段]
continuous-integration/drone/push Build is passing
2024-01-16 11:20:50 +08:00
hang 3dbe92a667 Revert "[上传监控增加字段]"
This reverts commit 3d90eaf32c.
2024-01-16 11:20:43 +08:00
hang 127ae75b5b Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-01-16 11:19:41 +08:00
hang 3d90eaf32c [上传监控增加字段] 2024-01-16 11:19:39 +08:00
he 4bbfacd7de 修改
continuous-integration/drone/push Build is passing
2024-01-16 10:48:30 +08:00
he 5bb0f30c77 修改
continuous-integration/drone/push Build is passing
2024-01-16 10:47:00 +08:00
he b179a2fa49 修改
continuous-integration/drone/push Build is passing
2024-01-16 10:40:35 +08:00
he 3d0f0b0f52 修改
continuous-integration/drone/push Build is running
2024-01-16 10:30:38 +08:00
he c11f4a5dc7 修改
continuous-integration/drone/push Build is passing
2024-01-16 10:23:24 +08:00
he dcb9d7b7fc 修改
continuous-integration/drone/push Build is passing
2024-01-16 09:52:31 +08:00
he 87a39fa264 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-01-15 16:36:34 +08:00
he 24f64e9d59 修改计算 2024-01-15 16:36:32 +08:00
hang d7f380fc73 修改前端暂未修改接口,接口报错
continuous-integration/drone/push Build is passing
2024-01-15 15:37:37 +08:00
hang a37a1a6b95 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-01-15 15:14:41 +08:00
hang 33c3fc158f [遗漏 get set] 2024-01-15 15:14:37 +08:00
he 3a6afd6958 修改PET 5PS评分备注
continuous-integration/drone/push Build is passing
2024-01-15 14:25:53 +08:00
he 378f4e13fb 修改
continuous-integration/drone/push Build is passing
2024-01-15 10:32:45 +08:00
he f4d7e30b5d 修改
continuous-integration/drone/push Build is passing
2024-01-15 10:12:58 +08:00
he 088be2f1a5 修改
continuous-integration/drone/push Build is passing
2024-01-12 16:51:09 +08:00
he 56cab93554 修改
continuous-integration/drone/push Build is passing
2024-01-12 16:33:27 +08:00
he 17734753c8 修改
continuous-integration/drone/push Build is passing
2024-01-12 16:23:31 +08:00
he 36fa5e1d73 代码修改
continuous-integration/drone/push Build is passing
2024-01-12 16:10:24 +08:00
he abc364835c 修改
continuous-integration/drone/push Build is passing
2024-01-12 14:35:57 +08:00
he 061625e474 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-01-12 14:32:57 +08:00
he 0888577cde 修改 2024-01-12 14:32:55 +08:00
hang 906bf18971 [修改上传,失败数量传递不准问题]
continuous-integration/drone/push Build is passing
2024-01-12 13:58:39 +08:00
hang 4398afe298 [增加默认值]
continuous-integration/drone/push Build is passing
2024-01-12 13:49:03 +08:00
hang 7c14e9e7a3 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-01-12 13:42:02 +08:00
hang b6798a3466 [上传增加稽查字段]迁移 2024-01-12 13:41:59 +08:00
he 867c7b1752 修改
continuous-integration/drone/push Build is passing
2024-01-12 10:54:45 +08:00
he 0ef8f62a58 代码修改
continuous-integration/drone/push Build is passing
2024-01-12 10:45:53 +08:00
he 03f1f9f157 代码修改
continuous-integration/drone/push Build is passing
2024-01-12 10:43:32 +08:00
he a5e257a2f1 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-01-12 10:41:30 +08:00
he f550750e30 修改 2024-01-12 10:41:28 +08:00
hang 6865c7f4a1 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-01-12 10:23:45 +08:00
hang 9d2bb15ffd 增加真实名字 2024-01-12 10:23:25 +08:00
hang 336b14a4ce 增加上传人 2024-01-12 10:23:04 +08:00
he 344e8f50ae 阅片时间修改
continuous-integration/drone/push Build is passing
2024-01-12 10:01:37 +08:00
he ba0b7f33bc 阅片时间修改
continuous-integration/drone/push Build is passing
2024-01-12 09:52:18 +08:00
he 49bc2e1762 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-01-12 09:40:37 +08:00
he d3ec067224 阅片休息时间 2024-01-12 09:40:35 +08:00
hang 267d0494d3 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-01-11 16:32:36 +08:00
hang 172f6bc29f 修改OSS 上传通用配置 6 2024-01-11 16:32:35 +08:00
he 4f93db928f 获取脾脏验证
continuous-integration/drone/push Build is passing
2024-01-11 15:36:42 +08:00
he c10ee98076 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-01-11 15:24:44 +08:00
he 0820cffd9d 脾脏验证 2024-01-11 15:24:42 +08:00
hang 7f90d64064 修改配置
continuous-integration/drone/push Build is passing
2024-01-11 15:12:17 +08:00
hang c4c98910e8 port修改为int
continuous-integration/drone/push Build is passing
2024-01-11 14:57:08 +08:00
hang 06f1ca232e Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-01-11 14:54:40 +08:00
hang 90320c2b12 修改配置 2024-01-11 14:54:38 +08:00
he f5885f612a Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-01-11 14:48:31 +08:00
he af74059945 修改 2024-01-11 14:48:28 +08:00
hang 42948185f9 修改OSS 需要迁移4
continuous-integration/drone/push Build is passing
2024-01-11 14:40:25 +08:00
hang 6329778123 修改配置文件
continuous-integration/drone/push Build is passing
2024-01-11 14:40:10 +08:00
he eadf8f5266 修改阅片休息时间验证
continuous-integration/drone/push Build is passing
2024-01-11 14:24:03 +08:00
he c4a0e47a84 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-01-11 13:21:05 +08:00
he f9661e3b72 脾脏长度 修改返回 2024-01-11 13:21:03 +08:00
hang 1715d4d056 统一日志记录信息
continuous-integration/drone/push Build is passing
2024-01-11 11:43:07 +08:00
hang 40fae42a9e 修改oss2 需要迁移
continuous-integration/drone/push Build is passing
2024-01-11 11:29:27 +08:00
hang 19e55c1185 修改OSS 配置需要迁移
continuous-integration/drone/push Build is passing
2024-01-11 11:26:59 +08:00
hang 6443a46abb 修改导入国际化
continuous-integration/drone/push Build is passing
2024-01-11 10:16:00 +08:00
hang 8fb2e4b7f4 对接AWS 需要迁移
continuous-integration/drone/push Build is passing
2024-01-11 09:19:19 +08:00
hang 0be25fa16a 修改默认配置
continuous-integration/drone/push Build is passing
2024-01-10 16:43:05 +08:00
hang 8743c028a3 增加AWS 需要迁移
continuous-integration/drone/push Build is passing
2024-01-10 16:17:53 +08:00
hang 7174fd056a 测试AWS
continuous-integration/drone/push Build is passing
2024-01-10 16:17:38 +08:00
hang cd188691f6 测试OSS 下载完成
continuous-integration/drone/push Build is passing
2024-01-10 15:52:02 +08:00
hang c9586e7320 请求前端国际化增加缓存-需要迁移
continuous-integration/drone/push Build is passing
2024-01-10 15:24:45 +08:00
hang c35da39ba6 OSS 对接代码修改
continuous-integration/drone/push Build is passing
2024-01-10 14:57:41 +08:00
hang e2639b8055 修改配置
continuous-integration/drone/push Build is passing
2024-01-10 14:56:58 +08:00
hang 558ed48874 修改配置文件
continuous-integration/drone/push Build is passing
2024-01-10 14:56:34 +08:00
hang e38a3e5f53 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-01-10 13:37:19 +08:00
hang 1175696590 minio 测试修改 2024-01-10 13:37:16 +08:00
he 95862906a4 查询修改
continuous-integration/drone/push Build is passing
2024-01-10 13:18:31 +08:00
he 44cc8d883d Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-01-10 10:48:23 +08:00
he 4c607302f3 查询验证 2024-01-10 10:48:21 +08:00
hang a37ccac097 修改国际化取消权限限制
continuous-integration/drone/push Build is passing
2024-01-10 10:23:34 +08:00
hang b8c460e252 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-01-09 18:03:10 +08:00
hang 4df35ef8c0 修改配置 2024-01-09 18:03:09 +08:00
he 397ac4a154 查询条件修改
continuous-integration/drone/push Build is passing
2024-01-09 15:35:55 +08:00
he 3e6854053d Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-01-09 15:00:39 +08:00
he e155301b60 ir 查询修改 2024-01-09 15:00:38 +08:00
hang 197c315f07 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-01-09 14:27:17 +08:00
hang 5654125091 增加前端国际化修改 2024-01-09 14:27:13 +08:00
he 3768c22aed 休息时间修改
continuous-integration/drone/push Build is passing
2024-01-09 13:58:52 +08:00
he beb43a785e 查询条件修改
continuous-integration/drone/push Build is passing
2024-01-09 11:14:09 +08:00
hang 34e10ac41e 升级net8 模型要求严格了
continuous-integration/drone/push Build is passing
2024-01-05 17:06:50 +08:00
hang 8e26edabba 修改稽查上传文件路径 2024-01-05 13:05:42 +08:00
hang d6cda6337b 修改任务自动生成
continuous-integration/drone/push Build is passing
2024-01-04 15:59:54 +08:00
hang 5b1638ab42 修改待阅列表 临床数据未签名但是可以做后续访视,生成任务逻辑遗漏 2024-01-04 15:55:25 +08:00
hang 3537ccf3cd 清理旧的写法
continuous-integration/drone/push Build is passing
2024-01-04 13:59:19 +08:00
hang d15a9945de 修改打包路径
continuous-integration/drone/push Build is passing
2024-01-04 13:39:18 +08:00
hang 61fa371fd4 升级到最新版的nuget包 2024-01-04 13:24:51 +08:00
hang 05802ae91c 再升级一版本nuget包 2024-01-04 13:24:05 +08:00
hang b4df799a37 升级net8 Program修改 2024-01-04 13:23:03 +08:00
hang 6553bd70c5 升级项目框架提交 2024-01-04 13:22:59 +08:00
hang f3d0c6f28c 修改导表错误
continuous-integration/drone/push Build encountered an error
2024-01-04 12:16:03 +08:00
he 09e35513b0 再次修改
continuous-integration/drone/push Build is passing
2024-01-03 17:17:11 +08:00
he 381e25cda1 修改状态
continuous-integration/drone/push Build is passing
2024-01-03 17:07:49 +08:00
he c763c174d5 修改状态
continuous-integration/drone/push Build is passing
2024-01-03 16:56:55 +08:00
he d4f3239844 Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2024-01-03 16:46:52 +08:00
he 806e9528f0 代码修改 修改阅片状态 2024-01-03 16:46:51 +08:00
hang aa59d9ecca Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2024-01-03 15:27:24 +08:00
hang 1226af6376 修改中心调研导表 2024-01-03 15:27:11 +08:00
he 596ecba13f 修复
continuous-integration/drone/push Build is passing
2024-01-03 14:26:30 +08:00
he 57290d6a4b 修改
continuous-integration/drone/push Build is passing
2024-01-03 14:26:01 +08:00
he 52251d420f 阅片状态修改
continuous-integration/drone/push Build is passing
2024-01-03 14:24:24 +08:00
he 95e365fe4f Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2024-01-03 14:01:39 +08:00
he 4f37f2fa0a 验证代码修改 2024-01-03 14:01:38 +08:00
hang 716b7833b0 修改 正式【OSS】配置修改sir.extimaging.com
continuous-integration/drone/push Build is passing
2024-01-03 09:18:43 +08:00
hang 84d8d33349 修改国际化邮件代码
continuous-integration/drone/push Build is passing
2023-12-29 10:19:46 +08:00
hang 132f90b28e 自动发布调整测试
continuous-integration/drone/push Build is passing
2023-12-29 09:19:52 +08:00
hang 7caabad651 域名修改配置网址
continuous-integration/drone/push Build is passing
2023-12-28 13:23:58 +08:00
he c4f3b0d653 Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-12-27 11:24:38 +08:00
he ddb9410c60 代码修改 2023-12-27 11:24:26 +08:00
hang f8ca73c164 迁移修改测试服务器连接地址
continuous-integration/drone/push Build is passing
2023-12-27 10:46:45 +08:00
hang 9512846bb0 系统签名文档废除
continuous-integration/drone/push Build is passing
2023-12-26 09:24:29 +08:00
hang 224097311c 修改事件环境oss 配置
continuous-integration/drone/push Build is passing
2023-12-25 14:47:34 +08:00
hang 903718019e 新增事件环境
continuous-integration/drone/push Build is passing
2023-12-23 12:19:34 +08:00
hang a79ae2d6b5 迁移修改发布环境
continuous-integration/drone/push Build is failing
2023-12-22 17:44:29 +08:00
hang 71cc352982 Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-12-22 17:36:28 +08:00
hang 94381dc5c0 迁移修改数据库配置文件 2023-12-22 17:36:27 +08:00
he ac90d678c1 代码统计修改 查询数量
continuous-integration/drone/push Build is passing
2023-12-22 17:28:48 +08:00
he c3959bbe63 Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-12-22 16:12:18 +08:00
he b88b92d884 修改代码 需要发study 2023-12-22 16:12:06 +08:00
hang b05356b8e2 修改生产连接字符串
continuous-integration/drone/push Build is passing
2023-12-22 13:04:41 +08:00
hang 37a9315066 JudgeVisitTaskId 变更
continuous-integration/drone/push Build is passing
2023-12-21 17:50:43 +08:00
he 7324ec72ed 修改
continuous-integration/drone/push Build is passing
2023-12-21 17:29:31 +08:00
he 90e8aa234d 修改
continuous-integration/drone/push Build is passing
2023-12-21 16:25:41 +08:00
he 40669a14fe Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-12-21 16:23:44 +08:00
he f55c52d99e 代码修改 2023-12-21 16:23:34 +08:00
hang a47b94e1a6 Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-12-21 15:27:21 +08:00
hang 505af40b7b 属性和字段有区别 2023-12-21 15:27:16 +08:00
he 1fef1aa500 计算小数位修改 需要同步study
continuous-integration/drone/push Build is passing
2023-12-21 13:47:06 +08:00
he 3aa63675c1 代码修改
continuous-integration/drone/push Build is passing
2023-12-21 13:41:33 +08:00
he 5825a5cd63 代码修改
continuous-integration/drone/push Build is passing
2023-12-21 11:43:11 +08:00
he 01d5b031a9 代码修改
continuous-integration/drone/push Build is passing
2023-12-21 11:25:38 +08:00
he 30b6aae25b 修改
continuous-integration/drone/push Build is passing
2023-12-21 09:32:47 +08:00
he 54ebf14f02 修改肿瘤学
continuous-integration/drone/push Build is passing
2023-12-21 09:27:06 +08:00
he 2654f85c32 Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-12-20 16:56:30 +08:00
he fa9573cf54 代码修改 2023-12-20 16:56:18 +08:00
hang 98ea3d1a92 修改导表 5
continuous-integration/drone/push Build is passing
2023-12-20 16:39:54 +08:00
hang e4b20908dc Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-12-20 16:21:41 +08:00
hang 9b51ca3753 裁判任务失效的时候,清理裁判任务id 需要迁移 2023-12-20 16:21:40 +08:00
he 6d4ce03c10 代码修改
continuous-integration/drone/push Build is passing
2023-12-20 16:04:46 +08:00
he 1316dae035 代码修改
continuous-integration/drone/push Build is passing
2023-12-20 15:53:51 +08:00
he 79a6e43e02 Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-12-20 14:54:08 +08:00
he 625a4819e9 修改 2023-12-20 14:54:04 +08:00
hang 2838b3756f Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-12-20 14:48:58 +08:00
hang 4f9dcfd584 修改模板文件位置 4 2023-12-20 14:48:58 +08:00
he 37200b4ced Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-12-20 14:42:14 +08:00
he 4afbbcde99 修改 2023-12-20 14:42:05 +08:00
hang a05c3725e7 修改路径bug 3
continuous-integration/drone/push Build is passing
2023-12-20 14:40:00 +08:00
hang 7110844c7c 修改文档删除2
continuous-integration/drone/push Build is passing
2023-12-20 14:32:48 +08:00
hang 2a205a9634 修改导表时间格式2
continuous-integration/drone/push Build is passing
2023-12-20 14:17:07 +08:00
hang 1fad2c513c Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is failing
2023-12-20 14:00:29 +08:00
hang 1ad4c16d23 更新模板的时候,清理之前的文档,需要迁移 2023-12-20 14:00:25 +08:00
he affc336f7d Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is failing
2023-12-20 13:18:15 +08:00
he e7f21db79a 代码修改 2023-12-20 13:18:09 +08:00
hang 523dd52567 修改导表时间格式
continuous-integration/drone/push Build is failing
2023-12-20 13:02:45 +08:00
he 3191df85e4 代码提交
continuous-integration/drone/push Build is passing
2023-12-20 12:29:47 +08:00
he 2c37915ef7 肿瘤学修改
continuous-integration/drone/push Build is failing
2023-12-20 10:49:59 +08:00
he 1a8bd17f01 肿瘤学修改
continuous-integration/drone/push Build is passing
2023-12-20 10:08:41 +08:00
he a42907e7c8 修改
continuous-integration/drone/push Build is failing
2023-12-19 17:48:41 +08:00
he 1fc5bc8f3b 修改
continuous-integration/drone/push Build encountered an error
2023-12-19 17:24:56 +08:00
he afebbc294b 代码修改
continuous-integration/drone/push Build is failing
2023-12-19 17:24:14 +08:00
he dd50d9cd12 Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is failing
2023-12-19 14:16:07 +08:00
he 70f682edd6 修改计算 2023-12-19 14:16:03 +08:00
hang 48f7cee0c4 修改jwt key
continuous-integration/drone/push Build is passing
2023-12-19 12:59:11 +08:00
hang 91fddff077 Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is failing
2023-12-19 12:43:32 +08:00
hang c09144690e 修改配置文件 2023-12-19 12:42:47 +08:00
he 5cd4fde48a 修改
continuous-integration/drone/push Build is passing
2023-12-15 15:58:22 +08:00
he fe90438f52 代码修改
continuous-integration/drone/push Build is passing
2023-12-13 14:36:36 +08:00
he a227bfe826 修改
continuous-integration/drone/push Build is passing
2023-12-13 14:27:23 +08:00
he a5f2e3f2e1 修改
continuous-integration/drone/push Build is passing
2023-12-12 17:46:18 +08:00
he 0dead1c4fe 修改Lugano
continuous-integration/drone/push Build is passing
2023-12-12 16:12:39 +08:00
he 2db751bae4 临床数据查询修改
continuous-integration/drone/push Build is passing
2023-12-12 14:11:35 +08:00
he 5d6cd6ab9d 临床数据修改
continuous-integration/drone/push Build is passing
2023-12-12 14:05:28 +08:00
he c93655d199 临床数据修改
continuous-integration/drone/push Build is passing
2023-12-12 13:56:20 +08:00
he 53cb22c474 Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is failing
2023-12-12 13:19:39 +08:00
he b58ab5e692 临床数据统计 2023-12-12 13:19:35 +08:00
hang f98dfb7c52 x
continuous-integration/drone/push Build is passing
2023-12-12 13:16:40 +08:00
hang f7c8178a45 修改正式环境配置
continuous-integration/drone/push Build is passing
2023-12-12 13:03:42 +08:00
hang 336462bc02 Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-12-12 12:53:36 +08:00
hang 7af0b6e6a5 修改正式发布文件 2023-12-12 12:53:32 +08:00
he d1d22660c8 临床数据修改
continuous-integration/drone/push Build is passing
2023-12-11 16:04:59 +08:00
he 8afeeefc51 临床数据查询修改
continuous-integration/drone/push Build is passing
2023-12-11 15:45:33 +08:00
he 7f49a437ad 临床数据修改
continuous-integration/drone/push Build is passing
2023-12-11 14:55:08 +08:00
he 6f1651dfc5 Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-12-11 14:18:40 +08:00
he 5372023651 修改 2023-12-11 14:18:32 +08:00
hang 659e92f95b 修改面板统计
continuous-integration/drone/push Build is passing
2023-12-11 13:47:51 +08:00
hang fd79df810c Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-12-11 13:24:44 +08:00
hang 3f714dd030 上线1.2 数据维护测试 2023-12-11 13:24:41 +08:00
he f39e013eca 修改肿瘤学
continuous-integration/drone/push Build is passing
2023-12-11 10:50:20 +08:00
he d0367ddc36 代码修改
continuous-integration/drone/push Build is passing
2023-12-08 15:56:10 +08:00
he 1ce519673a 修改
continuous-integration/drone/push Build is passing
2023-12-08 15:16:34 +08:00
he 03a96d4fff 修改
continuous-integration/drone/push Build is passing
2023-12-08 15:15:08 +08:00
he 768eeeba1f 医学审核修改
continuous-integration/drone/push Build is passing
2023-12-08 13:47:30 +08:00
he b068d20dd3 修改
continuous-integration/drone/push Build is passing
2023-12-08 13:14:21 +08:00
he 97a61ddfc0 Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-12-08 13:12:21 +08:00
he 4ed45c8616 医学审核加是否有临床数据 2023-12-08 13:12:14 +08:00
hang f4fc3dfab9 windows linux 环境路径修改 迁移
continuous-integration/drone/push Build is passing
2023-12-08 12:44:35 +08:00
hang 4673034737 路径测试windows 和linux
continuous-integration/drone/push Build is passing
2023-12-08 12:39:58 +08:00
hang da155bfca3 继续测试
continuous-integration/drone/push Build is passing
2023-12-08 12:22:52 +08:00
hang b6676b92bf Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-12-08 11:39:56 +08:00
hang 363e0e11b3 测试路径 2023-12-08 11:39:55 +08:00
he 7af5249e9c Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-12-08 11:39:25 +08:00
he ff663a1a9a 修改 2023-12-08 11:39:21 +08:00
hang 860a09f6e8 Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-12-08 11:36:47 +08:00
hang 59262a5c72 获取父目录修改方法 2023-12-08 11:36:45 +08:00
he e10e1f990f Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-12-08 11:26:20 +08:00
he ce8fe53d4d 修改 2023-12-08 11:26:15 +08:00
hang bfad36af3d x
continuous-integration/drone/push Build is passing
2023-12-08 11:25:54 +08:00
hang c909dee4aa Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-12-08 11:24:37 +08:00
hang 6775cfe170 测试linux目录 2023-12-08 11:24:35 +08:00
he 995b612537 Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-12-08 11:22:14 +08:00
he e61b8e9777 修改 2023-12-08 11:22:01 +08:00
hang db0d90c0f0 修改医学审核统计和发送报告bug
continuous-integration/drone/push Build is failing
2023-12-08 10:42:46 +08:00
hang 6edacd4fd4 Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-12-08 10:15:45 +08:00
hang 0df5e56dee 修改医学审核统计,需要迁移01 2023-12-08 10:15:42 +08:00
he 16e0bebc29 Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-12-07 15:22:49 +08:00
he 5be959f4b8 代码修改 2023-12-07 15:22:29 +08:00
hang ea9a5fa3a0 编码
continuous-integration/drone/push Build is passing
2023-12-07 11:36:18 +08:00
hang 2e15cfaed5 修改trial编码
continuous-integration/drone/push Build is passing
2023-12-07 11:34:59 +08:00
hang 57d8673bb2 代码整理
continuous-integration/drone/push Build is passing
2023-12-07 10:55:10 +08:00
hang bd8a8f744c 修改编码格式2
continuous-integration/drone/push Build is passing
2023-12-07 10:20:11 +08:00
hang edc0734f9f 修改编码格式
continuous-integration/drone/push Build is passing
2023-12-07 10:01:01 +08:00
he 0ad9da1076 Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-12-06 17:02:31 +08:00
hang 6a8a005951 修改trigger 注入服务异常
continuous-integration/drone/push Build is passing
2023-12-06 11:47:10 +08:00
hang fc8aaea395 修改警告
continuous-integration/drone/push Build is passing
2023-12-06 10:33:11 +08:00
hang f469ce0227 兼容之前服务的方式启动
continuous-integration/drone/push Build is passing
2023-12-06 10:17:54 +08:00
hang 1fb1b3d563 修改医生信息报错
continuous-integration/drone/push Build is passing
2023-12-06 09:57:45 +08:00
hang 1baa31db04 写法变更 导致windows 服务挂掉,修改测试
continuous-integration/drone/push Build is passing
2023-12-06 09:30:45 +08:00
hang 0e4c972b19 修改program 代码位置
continuous-integration/drone/push Build is passing
2023-12-06 09:09:59 +08:00
hang 8f438ff314 升级常见nuget包,预备升级net8
continuous-integration/drone/push Build is passing
2023-12-06 08:43:53 +08:00
hang 9bb5266d61 修改启动文件
continuous-integration/drone/push Build is passing
2023-12-05 17:50:57 +08:00
hang edbcabace6 Program修改为新版本写法
continuous-integration/drone/push Build is passing
2023-12-05 17:48:38 +08:00
hang bcc9e1c761 一致性核查国际化修改
continuous-integration/drone/push Build is passing
2023-12-05 14:40:30 +08:00
hang c390997f79 清理无用的文件
continuous-integration/drone/push Build is passing
2023-12-05 14:19:21 +08:00
hang adff45de00 一致性核查调整
continuous-integration/drone/push Build is passing
2023-12-05 13:43:37 +08:00
hang a9cf555513 修改后端上传OSS 解析
continuous-integration/drone/push Build is passing
2023-12-05 12:08:37 +08:00
hang 7885e4f80c Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-12-05 11:27:56 +08:00
hang 8cccb5da36 修改一致性核查国际化提示 2023-12-05 11:27:55 +08:00
he 1dc6c60de6 Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-12-05 11:03:10 +08:00
he 8cc9cb8caf 修改警告 2023-12-05 11:03:00 +08:00
hang b718fcf185 修改邮件模板
continuous-integration/drone/push Build is passing
2023-12-05 10:33:28 +08:00
hang 495418cac2 修改启动配置
continuous-integration/drone/push Build is passing
2023-12-05 10:19:42 +08:00
hang 3c031a9065 修改警告
continuous-integration/drone/push Build is passing
2023-12-05 10:05:12 +08:00
hang 5109e84fcb 清理+配置 环境变量
continuous-integration/drone/push Build is passing
2023-12-05 09:38:47 +08:00
hang 7616813537 Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-12-04 18:03:03 +08:00
hang 06230bb14b 传递构建号 2023-12-04 18:03:01 +08:00
he a8e0c1691d 代码修改
continuous-integration/drone/push Build is passing
2023-12-04 17:03:53 +08:00
he 8e9e2670fd Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-12-04 11:15:19 +08:00
hang 95665f0274 修改空提示
continuous-integration/drone/push Build is passing
2023-12-04 11:15:14 +08:00
hang 26dbbd8dc9 禁用一些没必要的警告矫正
continuous-integration/drone/push Build is passing
2023-12-04 11:08:21 +08:00
hang 2c991043ae Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-12-04 10:52:52 +08:00
hang e739925da2 美国演示,AIR修改 2023-12-04 10:52:35 +08:00
he 65ca6be4cd 修改
continuous-integration/drone/push Build is passing
2023-12-04 10:43:03 +08:00
he bddb4eee6d Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-12-01 18:06:11 +08:00
he 8470a5f2ac 代码修改 2023-12-01 18:06:00 +08:00
hang 2509d9cd9b CRA 权限
continuous-integration/drone/push Build is passing
2023-12-01 16:03:48 +08:00
hang 633c2e5b8b Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-12-01 15:58:12 +08:00
hang 9f5ae6f897 CRA 不能签名,需要迁移 2023-12-01 15:58:10 +08:00
hang 06231fe321 Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-12-01 15:41:26 +08:00
hang 76a9a99762 用户登录国际化 2023-12-01 15:41:24 +08:00
he e2f1036ff1 Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build encountered an error
2023-12-01 14:34:31 +08:00
he acd8e1765b 代码修改 2023-12-01 14:34:26 +08:00
hang 79b97f089c 删除无用的服务
continuous-integration/drone/push Build is passing
2023-12-01 14:16:24 +08:00
hang 6a6a314718 x
continuous-integration/drone/push Build is passing
2023-12-01 13:33:34 +08:00
hang 6be556dad2 Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build encountered an error
2023-12-01 13:30:38 +08:00
hang cee45b87ee 测试linux 打包 2023-12-01 13:30:36 +08:00
he 9e47c34449 Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-12-01 11:05:22 +08:00
he ba96432757 缓存时间修改 需要同步 2023-12-01 11:05:16 +08:00
hang 7acd7ec8fb Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-12-01 09:39:58 +08:00
hang 333763b3e1 修改警告7 2023-12-01 09:39:56 +08:00
he 7137064ead Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-12-01 09:34:46 +08:00
hang 9813ab55a7 修改警告6
continuous-integration/drone/push Build is passing
2023-12-01 09:33:41 +08:00
hang a656b0c7dd 修改警告5
continuous-integration/drone/push Build is passing
2023-11-30 18:08:03 +08:00
hang 9cf8ef47bb 修改警告4
continuous-integration/drone/push Build is passing
2023-11-30 17:58:17 +08:00
hang ae6a0faa03 Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-11-30 17:44:49 +08:00
hang 88a000d1d6 修改警告4 2023-11-30 17:44:47 +08:00
he 158c3608a0 Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-11-30 17:36:30 +08:00
he d529d5c52f 修改临床数据需要同步01 2023-11-30 17:36:24 +08:00
hang 2e549869af 修改警告 3
continuous-integration/drone/push Build is passing
2023-11-30 17:27:09 +08:00
hang 5346a12641 警告修改2
continuous-integration/drone/push Build is passing
2023-11-30 16:34:53 +08:00
hang c872f46257 修改警告 1
continuous-integration/drone/push Build is passing
2023-11-30 16:17:21 +08:00
hang 56389be6a0 修改QC统计
continuous-integration/drone/push Build is passing
2023-11-30 16:03:22 +08:00
hang 169b76161f Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-11-30 15:05:07 +08:00
hang 2a56a8490b 修改统计,需要迁移 2023-11-30 15:05:05 +08:00
he 25844c5870 临床数据修改
continuous-integration/drone/push Build is passing
2023-11-30 14:56:31 +08:00
he 8b68fb319f Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-11-30 14:22:35 +08:00
he 3dfae86b00 临床数据维护 2023-11-30 14:20:15 +08:00
he d26da8a4a8 临床数据问题修改 2023-11-30 14:19:20 +08:00
hang 0cbb375a49 linux 下适配 转换pdf
continuous-integration/drone/push Build is passing
2023-11-30 13:33:51 +08:00
hang de1d971e44 验证环境发布
continuous-integration/drone/push Build is passing
2023-11-30 11:41:09 +08:00
hang a031752d33 日志提示当前部署平台
continuous-integration/drone/push Build is passing
2023-11-30 11:23:27 +08:00
hang b3b3cfff57 x
continuous-integration/drone/push Build is passing
2023-11-30 11:10:13 +08:00
hang a730b4485e OSS 大写改为小写
continuous-integration/drone/push Build is passing
2023-11-30 11:07:45 +08:00
hang 897ad8c3eb 阿里云临时token改为直接返回token和秘钥
continuous-integration/drone/push Build is passing
2023-11-30 10:45:36 +08:00
hang 6266146ecb Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-11-30 10:26:41 +08:00
hang 7ed13b2b12 hospital修改 需要迁移 2023-11-30 10:26:39 +08:00
he 13e8ed7b6e Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-11-29 16:33:34 +08:00
he d2e2355673 肿瘤学修改 2023-11-29 16:33:30 +08:00
hang 951b4fde90 Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-11-29 11:46:06 +08:00
hang 0b5cf19078 xx 2023-11-29 11:46:03 +08:00
he 1274eaaec3 稽查5
continuous-integration/drone/push Build is passing
2023-11-29 10:41:32 +08:00
he 638fb12e16 稽查4
continuous-integration/drone/push Build is passing
2023-11-28 17:40:05 +08:00
he aacfbf7178 稽查3
continuous-integration/drone/push Build is passing
2023-11-28 16:51:16 +08:00
he 0f5a1a6335 Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-11-28 16:46:31 +08:00
he 73cbf96a65 稽查2 2023-11-28 16:46:27 +08:00
hang bee4a4b22b 中心调研修改 需要迁移
continuous-integration/drone/push Build is passing
2023-11-28 13:22:32 +08:00
hang 332e39b0fd 修改dockerfile
continuous-integration/drone/push Build is passing
2023-11-28 12:57:08 +08:00
hang 7827fa2846 名称错误
continuous-integration/drone/push Build is passing
2023-11-28 11:50:07 +08:00
hang 9d7c8f9786 测试
continuous-integration/drone/push Build is failing
2023-11-28 11:46:33 +08:00
hang fbe02cd287 修改yml
continuous-integration/drone/push Build is failing
2023-11-28 11:11:44 +08:00
hang 570fd0a27f 禁用clone
continuous-integration/drone/push Build was killed
2023-11-28 11:10:14 +08:00
hang 7164c183ea 修改yml测试
continuous-integration/drone/push Build was killed
2023-11-28 10:59:33 +08:00
hang 094b43e748 修改分支
continuous-integration/drone/push Build was killed
2023-11-28 10:53:36 +08:00
hang d16009272d x
continuous-integration/drone/push Build was killed
2023-11-28 10:51:25 +08:00
hang 3a3212f96c 修改删除的项目查询
continuous-integration/drone/push Build is passing
2023-11-27 16:16:39 +08:00
hang 63b02936b1 1127 稽查修改
continuous-integration/drone/push Build is passing
2023-11-27 13:27:44 +08:00
hang 2eced17ca9 Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-11-24 11:19:43 +08:00
hang c4f0b0d60d OSS 稽查修改 ,新增健康检查 2023-11-24 11:19:41 +08:00
he ec64533b4b 修改
continuous-integration/drone/push Build is passing
2023-11-24 10:56:04 +08:00
he 670cee5923 代码修改
continuous-integration/drone/push Build is passing
2023-11-24 10:51:43 +08:00
he 67091fd72f Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-11-24 10:28:45 +08:00
he a5dee142bf 稽查修改1 2023-11-24 10:28:41 +08:00
hang ade516d188 合并修改
continuous-integration/drone/push Build is passing
2023-11-24 10:01:13 +08:00
hang da746c0e66 统计排序 03
continuous-integration/drone/push Build is passing
2023-11-23 17:07:18 +08:00
hang 14826ee44b 修改稽查和界面统计 需要迁移02
continuous-integration/drone/push Build is passing
2023-11-23 15:08:53 +08:00
hang 767c24dd56 Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-11-23 12:15:21 +08:00
hang 22487c1893 上传文件到OSS 需要迁移 2023-11-23 12:15:17 +08:00
he e6e2e8a91d Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-11-23 10:04:24 +08:00
hang 4ebe354caa 修改重阅稽查
continuous-integration/drone/push Build is passing
2023-11-21 14:51:00 +08:00
hang 3b9c87c172 稽查修改
continuous-integration/drone/push Build is passing
2023-11-21 13:27:49 +08:00
hang c36aac0cdf 医学审核稽查修改
continuous-integration/drone/push Build is passing
2023-11-21 13:18:25 +08:00
he ab04db17f3 Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-11-21 13:10:51 +08:00
he 624cbee901 修改 2023-11-21 13:10:39 +08:00
hang a7891ee323 Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-11-21 11:09:50 +08:00
hang 404c414f76 修改统计bug, 2023-11-21 11:09:48 +08:00
hang bc55b870cb 修改统计bug,医学审核增加最新回复人
continuous-integration/drone/push Build is passing
2023-11-21 10:50:34 +08:00
hang ed282e444d Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-11-21 09:57:10 +08:00
hang 8d3cf31941 1.2 OSS 变更 2023-11-21 09:57:08 +08:00
he bec8720a4d 代码修改
continuous-integration/drone/push Build is failing
2023-11-20 12:53:01 +08:00
he b9121e1468 Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
2023-11-20 09:17:07 +08:00
hang 55b72a9156 对接MinIO
continuous-integration/drone/push Build is passing
2023-11-17 17:55:19 +08:00
hang 2ce78f333b 确认用户类型
continuous-integration/drone/push Build is passing
2023-11-16 09:15:14 +08:00
hang 5834ac7f37 修改导表bug 2023-11-14 10:11:37 +08:00
hang 1aaf5e10f4 增加角色修改 2023-11-13 14:05:02 +08:00
hang 82212aac16 修改统计03 -需迁移 2023-11-10 17:18:49 +08:00
hang a118cbeb1e CRC 影像质疑 2023-11-10 15:52:44 +08:00
hang c7b956344f 修改页面查询结果显示 2023-11-10 14:12:40 +08:00
hang 2fe19dbf0e 医学审核下拉框修改 2023-11-10 09:57:22 +08:00
hang 50e0e3bf98 Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-11-09 16:56:57 +08:00
hang 5be941663b 修改中心调研导入和增加用户类型 2023-11-09 16:56:55 +08:00
he 7a7acfa15c Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-11-09 15:53:04 +08:00
he 15ee30bcdf 修改 2023-11-09 15:53:00 +08:00
hang 70362b8f96 Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-11-09 15:51:48 +08:00
hang b217967d9c 一致性核查同步到测试环境 2023-11-09 15:51:46 +08:00
he eadf2d2cfa 修改 2023-11-09 15:13:44 +08:00
he ba441a826a Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-11-09 14:46:59 +08:00
he 7f063cf626 修改 2023-11-09 14:46:51 +08:00
hang bb2de4cca0 Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-11-08 19:34:44 +08:00
he fae51b4444 领取修改 2023-11-08 18:46:54 +08:00
hang 45438e09e5 合并 2023-11-08 16:47:43 +08:00
hang 1492d5acbb 修改邮件模板 2023-11-08 16:45:52 +08:00
he 8f0dae936b 修改 2023-11-08 15:35:00 +08:00
he cd1222d27f Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-11-08 15:34:33 +08:00
he 71cfaaad63 代码修改 2023-11-08 15:34:25 +08:00
hang 66682260a0 Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-11-08 10:19:14 +08:00
hang a1fdd5de05 修改中心调研 2023-11-08 10:19:10 +08:00
he 5bcba84acb Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-11-08 09:08:23 +08:00
he 2cc362edfc 修改 2023-11-08 09:08:00 +08:00
hang 8e5e638914 删除之前废弃的代码 2023-11-07 17:42:48 +08:00
hang 1c689ccfbd 不去掉前后空格 2023-11-07 17:04:19 +08:00
hang 7b300a97c6 一致性核查国际化修改 2023-11-07 16:31:35 +08:00
hang 3199bea647 修改删除 2023-11-07 13:56:26 +08:00
hang bd31a3a598 Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-11-07 11:42:12 +08:00
hang b3d58c5fa5 修改邮件 2023-11-07 11:42:07 +08:00
he 3457283220 修改 2023-11-07 10:50:13 +08:00
he 33fc733f6d 修改 2023-11-07 10:49:46 +08:00
he 07a600c05f Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-11-06 16:47:21 +08:00
he cf30c49b0e 修改 2023-11-06 16:46:57 +08:00
hang e2fd05db81 Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-11-06 14:09:34 +08:00
hang 9d49ed9e61 文档删除 2023-11-06 14:09:31 +08:00
hang 5d6a44912e Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-11-03 16:20:41 +08:00
hang ad3b0f84c2 x 2023-11-03 16:20:33 +08:00
he ceb111eccd 修改 2023-11-03 16:13:21 +08:00
he 53c56f5c0a Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-11-03 16:12:58 +08:00
hang 15834921a8 ImageResizePath 迁移掉了 2023-11-03 13:41:37 +08:00
hang 8a1970bb3d 修改访问影像文件不存在提示问题 2023-11-03 12:24:00 +08:00
hang 50ce20071a 容器真实ip 2023-11-02 15:53:44 +08:00
hang a8771052f3 修改角色,和admin查看列表 2023-11-02 10:08:56 +08:00
hang c53390beb3 修改超声重传 2023-11-02 09:21:06 +08:00
hang 0ec468becb Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-11-02 09:10:33 +08:00
hang 2c45d4f1a5 修改查询 2023-11-02 09:10:31 +08:00
he 2036c63a59 Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-11-01 13:12:48 +08:00
he e56d3dc632 修改 2023-11-01 13:12:40 +08:00
hang 8dedf719e0 修改邮件发送和稽查 2023-11-01 11:54:46 +08:00
hang c04dfb4b77 稽查查询 2023-11-01 11:47:11 +08:00
hang 281d10f3b4 修改稽查查询 2023-11-01 11:47:07 +08:00
hang e28665fd05 Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-11-01 10:22:42 +08:00
hang cc3b6d7e55 超声接口增加 StudyInstanceUidList 2023-11-01 10:22:39 +08:00
he 37d1c48f2e Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-11-01 09:24:05 +08:00
he 28187aea37 修改 2023-11-01 09:23:48 +08:00
hang 963d0d582f x 2023-10-31 15:22:47 +08:00
hang ce279dda60 拷贝病灶修改 2023-10-31 15:21:48 +08:00
hang ba92a90832 Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-10-31 09:48:14 +08:00
hang 624bec0c88 修改中心调研提示 2023-10-31 09:48:13 +08:00
hang 85934de439 修改中心调研提示 2023-10-31 09:45:35 +08:00
hang 6a56132de9 中心调研映射bug 2023-10-31 09:23:26 +08:00
hang 8075684d1d 修改退回bug 2023-10-30 18:03:18 +08:00
hang 3d3ac28848 Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-10-30 17:53:56 +08:00
hang 5ec879833e 整理代码 2023-10-30 17:53:53 +08:00
he e8d2b494bf 修改 2023-10-30 17:45:18 +08:00
he c271537878 修改 2023-10-30 16:53:24 +08:00
he ae2a3ba8a3 Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-10-30 15:17:19 +08:00
he 72215ad898 修改 2023-10-30 15:16:57 +08:00
hang d36e3c0d91 访视回退拷贝表单 2023-10-30 14:40:10 +08:00
hang 086ca46218 Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-10-30 10:38:29 +08:00
he 6c1288823d 修改 2023-10-30 10:32:06 +08:00
hang 11c83759d2 增加HtmlPath 2023-10-30 10:29:56 +08:00
he 9e2268ce72 修改 2023-10-27 11:30:23 +08:00
he ce2f8ad003 代码修改 2023-10-27 09:52:57 +08:00
he af661212b0 代码修改 2023-10-26 17:16:28 +08:00
he f26db2b523 修改 2023-10-26 14:16:03 +08:00
he 0451ef4190 Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-10-26 14:06:54 +08:00
he 84c5cdeca7 修改 2023-10-26 14:06:47 +08:00
hang ee8014385a Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-10-26 13:53:33 +08:00
hang 27c63202cd 中心调研修改 2023-10-26 13:53:31 +08:00
he 9d446a6e29 Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-10-26 13:45:42 +08:00
he df27d6492f 修改 2023-10-26 13:45:32 +08:00
hang 1d12d8e2ff 修改上传bug 2023-10-26 10:10:16 +08:00
hang 551eb3851b Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-10-26 10:04:52 +08:00
hang cb683b6674 Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-10-26 10:03:13 +08:00
hang 4e5b96b8ea xx 2023-10-26 10:03:10 +08:00
he 1db7b86f89 修改 2023-10-26 10:01:36 +08:00
he 7198962847 影像学整体肿瘤评估计算修改 2023-10-25 16:06:23 +08:00
he c7b32fd29a Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-10-24 17:27:36 +08:00
he 4b9ca6ca25 修改 2023-10-24 17:27:26 +08:00
hang f4a502024d Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-10-24 17:05:07 +08:00
hang a9fd1978e1 修改医生简历上传 2023-10-24 17:05:03 +08:00
he a73f6a4aeb 代码修改 2023-10-24 10:42:06 +08:00
he e34f13bd6a Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-10-23 16:52:55 +08:00
he f39ef0d799 代码提交 2023-10-23 16:52:47 +08:00
hang 66b9f2dd5c 下载接口 2023-10-23 16:07:44 +08:00
hang b9d50179c0 Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-10-23 13:55:22 +08:00
hang 35cac0d7e9 对接返回检查Code 2023-10-23 13:55:19 +08:00
he 46980e6b50 修改 2023-10-20 15:36:42 +08:00
he 7fc93a667d 修改 2023-10-20 15:26:42 +08:00
he e8e9105f5c 修改 2023-10-19 17:22:21 +08:00
he e6cd24065c 代码修改 2023-10-19 17:10:31 +08:00
he 65ae0e06f5 修改 2023-10-19 16:04:38 +08:00
he 04a702fb0e 修改 2023-10-19 15:21:38 +08:00
he 5934178a5f 修改 2023-10-19 14:15:13 +08:00
he e43b28969e 修改 2023-10-19 13:49:38 +08:00
he a1bd7b4815 修改 2023-10-19 13:34:21 +08:00
he baaf5af664 修改 2023-10-19 13:17:26 +08:00
he 1f1500c661 修改 2023-10-19 10:50:07 +08:00
he 3d92fac1d6 代码修改 2023-10-19 09:16:43 +08:00
he 682a5d1c44 修改 2023-10-18 17:57:37 +08:00
he e5f10d052a 修改 2023-10-18 16:28:25 +08:00
he 91bd2ac69f 修改 2023-10-18 16:23:30 +08:00
he e7ec55eb61 Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-10-18 14:41:01 +08:00
he c469b5e506 代码修改 2023-10-18 14:40:55 +08:00
hang e384470705 Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-10-18 13:49:22 +08:00
hang 7c1e91b945 StudyId bug 2023-10-18 13:49:20 +08:00
he 78e9623598 Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-10-18 13:32:08 +08:00
he a0f756a4cb 修改 2023-10-18 13:31:58 +08:00
hang 108be0bc23 修改检查序列层级 2023-10-18 12:18:54 +08:00
hang e772407e38 Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-10-18 11:41:25 +08:00
hang e789c32564 增加阅片标准信息 2023-10-18 11:41:23 +08:00
he 03f7173855 修改 2023-10-18 11:41:06 +08:00
he 61b5a8295c Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-10-18 10:51:09 +08:00
he 665c88a681 修改 2023-10-18 10:50:51 +08:00
hang 53402bdda5 Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-10-18 10:40:37 +08:00
hang 56295b3c98 修改数据库保存异常提示 2023-10-18 10:40:35 +08:00
he 0cbd0f67a1 Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-10-18 10:27:06 +08:00
he 7cf23668af 修改 2023-10-18 10:27:01 +08:00
hang 7465b8b5b9 Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-10-18 10:22:27 +08:00
hang 6019fdbe36 遗漏SubjectId 2023-10-18 10:22:25 +08:00
he 532eb15e3b Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-10-18 10:17:37 +08:00
he 064abbf8dd 修改 2023-10-18 10:17:32 +08:00
hang d88a0412a0 Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-10-18 10:08:24 +08:00
hang 296b510c41 字段名错误 2023-10-18 10:08:20 +08:00
he 473bb64b42 修改 2023-10-18 09:10:20 +08:00
he 6df9099707 代码修改 2023-10-17 17:53:03 +08:00
he b8c7441c92 修改 2023-10-17 17:48:55 +08:00
he 79c21b24cd 修改 2023-10-17 16:57:52 +08:00
he b72e90f0b9 代码修改 2023-10-17 16:46:37 +08:00
he 658ce479eb Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-10-17 16:11:45 +08:00
he 2e316c35fe 修改 2023-10-17 16:11:38 +08:00
hang 3e9546aa10 Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-10-17 15:49:26 +08:00
hang 21bd781468 超声对接接口初步完成 2023-10-17 15:49:24 +08:00
he 2ea9c49b2e 修改 2023-10-17 15:19:49 +08:00
he b926519424 代码修改 2023-10-17 14:11:38 +08:00
he 9e82fd124a Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-10-17 13:48:38 +08:00
he d859def7d6 修改 2023-10-17 13:48:28 +08:00
hang 2d5926913e Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-10-17 13:37:18 +08:00
hang 8bde83bb7b 超声对接准备 2023-10-17 13:37:15 +08:00
he 08f592a9cb 代码修改 2023-10-17 11:17:36 +08:00
he a088071914 修改 2023-10-17 11:07:44 +08:00
he a313f97736 代码修改 2023-10-17 11:06:39 +08:00
he 367a096b8a 修改 2023-10-17 10:38:41 +08:00
hang 363411f57c 迁移Study 中心调研修改 2023-10-17 10:26:52 +08:00
he 3bedd60b72 Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-10-17 09:40:04 +08:00
he bed277f899 代码修改 2023-10-17 09:39:52 +08:00
hang 6131101520 项目标准查询修改 2023-10-17 09:26:27 +08:00
hang b8f5709e65 解决循环依赖 2023-10-16 15:58:32 +08:00
hang 689e8cf259 暂时屏蔽邮件服务提交 2023-10-16 15:51:12 +08:00
hang 4acbe5b560 Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-10-16 15:45:47 +08:00
hang 2c80ca7812 邮件初步调整完毕 2023-10-16 15:45:44 +08:00
he 75b5458c02 代码修改 2023-10-16 11:47:16 +08:00
he 1f446ac60f 代码修改 2023-10-16 11:44:42 +08:00
he 0b59b0a2cb Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-10-16 09:27:07 +08:00
he a13b1d08c4 代码修改 2023-10-16 09:26:55 +08:00
hang 39f5110464 确认nuget 包 2023-10-13 23:43:33 +08:00
hang e67bf63bc5 efcore 6 升级到6版本最新,同时EFCore.BulkExtensions 也是6版本最新,但是projectable 不能升级 2023-10-13 21:34:31 +08:00
hang 2fffaca696 Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-10-13 17:16:44 +08:00
hang be3dde7657 零时方案修改 2023-10-13 17:16:06 +08:00
he 4d94784e88 修改 2023-10-13 17:09:50 +08:00
he 7ea39def40 发布 2023-10-13 15:16:41 +08:00
he 5b202121df 发布 2023-10-13 15:11:26 +08:00
he 1e0278fe72 发布 2023-10-13 15:08:08 +08:00
he fd70a01803 Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-10-13 15:07:35 +08:00
hang e6a909bba0 修改nuget包 2023-10-13 15:05:18 +08:00
hang 7ceb4b264b Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-10-13 14:40:18 +08:00
hang fbaf78d18e 包版本回退 2023-10-13 14:40:15 +08:00
he 7b8189dae2 修改 2023-10-13 14:25:11 +08:00
he f29bdcab3f 修改 2023-10-13 14:20:35 +08:00
he 45de42fc71 代码修改 2023-10-13 13:40:45 +08:00
he b62a1e5d88 Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-10-13 13:39:13 +08:00
he fbf86ab7e3 代码修改 2023-10-13 13:39:02 +08:00
hang 5dec67aa32 修改OSS 上传 2023-10-13 13:27:43 +08:00
hang 6e4d038b38 修改nuget包,清理 2023-10-13 11:57:36 +08:00
hang 9b25cea893 EntityFrameworkCore.Projectables 包问题 导致更新出错 2023-10-13 11:18:26 +08:00
hang 4a2fd0166e 临时修改 2023-10-13 11:03:44 +08:00
hang dfeab8793f Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-10-12 17:23:22 +08:00
hang a867291b51 修改库引用 2023-10-12 17:23:20 +08:00
he 0fdf9a3419 Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-10-12 13:49:21 +08:00
he 796b3cf710 修改缓存 2023-10-12 13:49:13 +08:00
hang 27e9cadf91 升级项目程序包,清理无用的包 2023-10-12 13:26:30 +08:00
hang 89d852f4ed 升级efcore 清理之前的写法 2023-10-12 13:26:06 +08:00
hang 9ad4c96572 删除 quartz 2023-10-12 11:06:16 +08:00
hang ed89bc652e 定时任务修改迁移 2023-10-12 10:51:21 +08:00
hang 746f2ba7e0 Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-10-12 10:26:43 +08:00
hang 09acd12586 Study 上传 迁移 2023-10-12 10:26:41 +08:00
hang a1d8e2237c 删除JsonPatch 2023-10-12 10:12:22 +08:00
hang 86a486b060 分布式缓存组件准备 2023-10-12 10:09:32 +08:00
hang 173f899881 Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC 2023-10-12 09:59:08 +08:00
hang 8436a319f8 分布式锁项目修改 2023-10-12 09:59:06 +08:00
hang a565282a94 分布式锁 sqlserver 05 项目迁移修改 2023-10-12 09:48:48 +08:00
hang 5d7beb71e6 分布式锁 sqlserver 测试 04 增加日志 2023-10-12 09:45:26 +08:00
hang 3218be613d 分布式锁 sqlserver 测试 03 2023-10-12 09:44:53 +08:00
hang 9ade3a7c39 引入分布式锁组件 2023-10-12 09:40:00 +08:00
he 3de5142a5b 测试迁移发布 2023-10-11 16:42:17 +08:00
he ba3319d0cd 修改 2023-10-11 16:11:04 +08:00
he 2c82cf525a 代码修改 2023-10-11 15:52:56 +08:00
hang c4e53d5654 study-邮件发送修改-迁移 2023-10-09 11:27:35 +08:00
he 7591f19707 Merge branch 'Test.IRC' of http://192.168.3.69:3000/XCKJ/irc-netcore-api into Test.IRC 2023-10-09 10:47:54 +08:00
he 7739652e21 修改 2023-10-09 10:47:31 +08:00
hang 40806ffda4 test-study site修改迁移 2023-10-08 16:46:43 +08:00
hang 29783e2f3f Merge branch 'Test.IRC' of http://192.168.3.69:3000/XCKJ/irc-netcore-api into Test.IRC 2023-10-08 13:29:56 +08:00
hang a888ed25ec 上传oss 对比遗漏提交 2023-10-08 13:29:55 +08:00
hang c402878262 Merge branch 'Test.IRC' of http://192.168.3.69:3000/XCKJ/irc-netcore-api into Test.IRC 2023-10-08 10:44:12 +08:00
hang b8cbec9462 oss上传修改 2023-10-08 10:44:08 +08:00
he 3d60c3af49 代码修改 2023-10-08 10:01:47 +08:00
hang 551198b6ec 修改异常提示 2023-09-28 11:38:26 +08:00
he 11395d8e5f 代码修改 2023-09-28 09:46:10 +08:00
he 5c89478ecb 代码修改 2023-09-27 15:36:29 +08:00
he f0a8133b94 Merge branch 'Test.IRC' of http://192.168.3.69:3000/XCKJ/irc-netcore-api into Test.IRC 2023-09-27 15:24:37 +08:00
he 83bdcdad1f 修改 2023-09-27 15:24:27 +08:00
hang f1b5a457df Merge branch 'Test.IRC' of http://192.168.3.69:3000/XCKJ/irc-netcore-api into Test.IRC 2023-09-27 13:57:25 +08:00
hang 8d00a6b2a3 删除全局稽查找第一条过滤 2023-09-27 13:57:24 +08:00
he 8823392846 代码修改 2023-09-27 11:43:46 +08:00
he 70f1faa312 修改 2023-09-27 09:50:56 +08:00
he 61f95bf59b 修改 2023-09-26 17:51:07 +08:00
he 992dfe39fb 修改代码 2023-09-26 17:41:53 +08:00
he 964a95d934 维护临床数据 2023-09-26 11:21:32 +08:00
he 2f1df92dc3 修改 2023-09-25 17:13:15 +08:00
he 71d128a325 修改 2023-09-25 16:42:56 +08:00
he 1c5aa8ce28 代码修改 2023-09-25 14:39:08 +08:00
he 5dab6ef30b 代码修改 2023-09-25 13:13:02 +08:00
he 473dafbb58 修改 2023-09-22 17:52:24 +08:00
he 6020248afc 修改 2023-09-22 17:34:09 +08:00
he 2c119e900c 修改 2023-09-22 16:29:26 +08:00
he 9f08024514 修改 2023-09-22 16:23:04 +08:00
he 6e1c6fbc49 修改 2023-09-22 16:13:39 +08:00
he a8212404ba 修改 2023-09-22 16:07:33 +08:00
he 5399c89d8e 修改 2023-09-22 15:32:39 +08:00
he 52e8e68cfc 代码修改 2023-09-22 14:54:18 +08:00
he b3e5d2924a 修改 2023-09-22 14:39:58 +08:00
he 2161a5d36d 修改 2023-09-22 13:34:08 +08:00
he 4a482adefe 添加标记 2023-09-22 13:33:05 +08:00
he 3c23dfd792 添加问题标记 包括上一条也是 2023-09-21 16:37:13 +08:00
he d644e150ec 修改 2023-09-21 16:34:03 +08:00
he ceda3f8427 预览新增ParentTriggerValueList
RelevanceValueList 字段
2023-09-21 11:36:07 +08:00
he 6ae2e60b33 代码修改 2023-09-21 10:54:46 +08:00
he 56f86b1303 关键序列修改 2023-09-21 10:48:19 +08:00
he e62774bf9a 代码修改 2023-09-19 14:43:48 +08:00
he c97253cb5f 编辑病灶问题修改 2023-09-19 13:54:59 +08:00
he 285992d137 添加字段 2023-09-15 16:29:33 +08:00
he 67f137927d 添加字段 2023-09-15 15:59:28 +08:00
he f96025ae38 添加字段 2023-09-15 15:30:09 +08:00
he 166b46f6a3 添加另一个标记 2023-09-15 15:25:17 +08:00
he 304ad35f29 添加字段 2023-09-15 09:30:08 +08:00
he 8d8b41253e 添加问题分类字段 2023-09-14 15:42:27 +08:00
he 46ad5920de 修改 2023-09-13 14:02:11 +08:00
he 03c824a1c9 代码提交 2023-09-11 16:47:53 +08:00
he 7f3fae5da7 修改 2023-09-11 16:32:54 +08:00
he a9a51a76c7 代码修改 2023-09-11 13:13:16 +08:00
he d887e9fe6a 代码修改 2023-09-11 10:55:41 +08:00
he 1a14eeb39e 代码提交 2023-09-11 10:54:28 +08:00
he c68e1494ac 代码修改 2023-09-07 17:36:14 +08:00
he ad0b3d4c28 计算修改 2023-09-06 17:45:09 +08:00
he 785641cc47 确认的时候再同步标准问题 2023-09-06 16:08:37 +08:00
he ae40f36853 计算修改 2023-09-06 15:49:19 +08:00
he 2cada0fcbe 计算修改 2023-09-06 15:48:39 +08:00
he 1f45a3aa9f 修改 2023-09-06 09:19:27 +08:00
he 2a917ec091 修改 2023-09-05 17:45:21 +08:00
he bad5f32ffc 代码修改 2023-09-05 17:44:29 +08:00
he b006fff6ed 无序阅片随机顺序 2023-09-05 13:39:13 +08:00
he 35f5a362e3 代码提交 2023-09-05 13:34:34 +08:00
he 8924b2ca7a 代码修改 2023-09-04 11:32:33 +08:00
he 46de4000a1 临床数据表格问题添加依赖父问题 2023-09-04 11:32:28 +08:00
he aea09998f9 Merge branch 'Test.IRC' of http://192.168.3.69:3000/XCKJ/irc-netcore-api into Test.IRC 2023-09-04 11:31:02 +08:00
hang 80c001ba9c Merge branch 'Test.IRC' of http://192.168.3.69:3000/XCKJ/irc-netcore-api into Test.IRC 2023-09-01 17:37:15 +08:00
hang eebf08217c 修改中心查询 2023-09-01 17:36:58 +08:00
hang 44ca1ebc9a 修改中心 2023-09-01 17:36:53 +08:00
hang 6854f5c8d3 修改中心 2023-09-01 17:36:48 +08:00
he a362d5a977 修改 2023-09-01 14:45:58 +08:00
he d2aef5df04 Merge branch 'Test.IRC' of http://192.168.3.69:3000/XCKJ/irc-netcore-api into Test.IRC 2023-08-31 15:45:18 +08:00
he 87992a36e1 代码修改 2023-08-31 15:45:02 +08:00
hang 2c6ef0dffe Merge branch 'Test.IRC' of http://192.168.3.69:3000/XCKJ/irc-netcore-api into Test.IRC 2023-08-31 10:12:00 +08:00
hang a94670d6ca 修改日志查询 2023-08-31 10:11:35 +08:00
he 9d876b44cf 提交全局阅片存在重复 需要同步环境 2023-08-24 13:30:07 +08:00
he 32af01c8f4 代码修改 2023-08-23 14:31:51 +08:00
he 803f7f43b4 Merge branch 'Test.IRC' of http://192.168.3.69:3000/XCKJ/irc-netcore-api into Test.IRC 2023-08-23 14:11:11 +08:00
he 2260303876 代码修改 2023-08-23 14:11:02 +08:00
hang 943058b84a Merge branch 'Test.IRC' of http://192.168.3.69:3000/XCKJ/irc-netcore-api into Test.IRC 2023-08-22 13:33:11 +08:00
he 4f8f4fe9b8 代码添加 2023-08-21 17:12:44 +08:00
he 92aa223f3f 修改 2023-08-21 17:02:11 +08:00
he 4dafe15386 排序修改 2023-08-21 16:59:00 +08:00
he 5e70d2ec36 Merge branch 'Test.IRC' of http://192.168.3.69:3000/XCKJ/irc-netcore-api into Test.IRC 2023-08-21 13:29:48 +08:00
he f7f84ef28a 代码修改 2023-08-21 13:29:37 +08:00
hang 1f7ce33643 修改文档废除 2023-08-17 15:50:00 +08:00
hang 22a03ff3df 继续测试 2023-08-17 15:29:06 +08:00
hang a256aec1cc 测试修改了服务器时间自动发布 2023-08-17 15:23:13 +08:00
he 8da1ab2413 代码修改 2023-08-17 14:25:15 +08:00
he 6b6ab9e406 代码修改 2023-08-17 10:36:08 +08:00
he a2c35ba83d 代码修改 2023-08-15 16:43:07 +08:00
he dfb8757719 修改 2023-08-15 16:35:39 +08:00
he 65d68a3116 代码修改 2023-08-15 15:07:34 +08:00
he 13d709c88d Merge branch 'Test.IRC' of http://192.168.3.69:3000/XCKJ/irc-netcore-api into Test.IRC 2023-08-14 15:03:31 +08:00
he 31bbd5295e 代码修改 2023-08-14 15:03:17 +08:00
hang 270bccc432 修改数据库名称 Test.IRC 2023-08-10 13:59:49 +08:00
hang 4915b3c62c powershell 发布测试 2023-08-10 13:14:16 +08:00
hang 8d8f9c166e 显示指定缓存发布尝试 2023-08-10 13:13:04 +08:00
hang 6be7f3e81b test-irc 自动发布测试 2023-08-10 11:23:40 +08:00
he a635360c95 修改加急 2023-08-10 11:15:53 +08:00
he 2d32a5e0de 待阅片颜色 2023-08-10 09:38:09 +08:00
he 3cd37c2be6 自动领取下一个质控 2023-08-09 11:43:47 +08:00
he dc63f1c735 V1.2 需求 2023-08-07 15:52:43 +08:00
he 94462015f2 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-08-07 14:18:00 +08:00
hang 689cce246a Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-08-03 10:25:11 +08:00
hang 5d3ed34a31 修改单重阅片生成任务bug 2023-08-03 10:25:06 +08:00
he 8099ff0fa9 S-102 自定义标记 2023-07-31 13:28:12 +08:00
he c0fd38b03b S-101 自定义标记 2023-07-31 11:44:54 +08:00
he ab1fd89026 S-100 国际化修改 2023-07-28 14:15:36 +08:00
he b1d357956c S-99 临床数据 2023-07-28 13:46:19 +08:00
he 045269d88f S-98 时间修改 2023-07-28 13:46:14 +08:00
he c456045381 S-97 添加分组 2023-07-28 13:46:07 +08:00
he 54a44991fd S-96 添加时间 2023-07-25 17:20:13 +08:00
he 975adba203 S-95 2023-07-21 14:20:45 +08:00
he 0d8091b41a S-94 2023-07-21 14:07:06 +08:00
he 41db19ec01 S-93 2023-07-21 13:49:22 +08:00
he 00be8908ef S-92 2023-07-21 13:43:32 +08:00
he 7c5263415f S-91 2023-07-21 10:54:42 +08:00
he d93da5abd9 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-07-21 10:18:19 +08:00
he 08a7dd9e85 S-90 2023-07-21 10:17:42 +08:00
hang 7476f8a8e9 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-07-21 08:52:01 +08:00
hang 0c04c845b4 修改组国际化 2023-07-21 08:51:57 +08:00
he b4448df047 S-90 2023-07-20 17:25:36 +08:00
he 74502510db S-89 2023-07-20 16:49:19 +08:00
he c5d94eff03 S-88 2023-07-20 14:10:27 +08:00
he 01501b36b5 S-87 2023-07-20 10:07:58 +08:00
he 5e5913255c S-86 2023-07-20 10:07:14 +08:00
he b1cf4dc592 S-85 2023-07-19 17:30:20 +08:00
he ec53815bb0 S-84 2023-07-19 13:40:53 +08:00
he 01c91a6398 S-83 2023-07-18 18:11:22 +08:00
he 6d1c72718b S-82 2023-07-18 18:01:01 +08:00
he 768d936ba9 S-81 2023-07-18 17:44:40 +08:00
he ef8220c236 S-80 2023-07-18 16:35:31 +08:00
he 47a4403cbe S-79 2023-07-18 16:01:55 +08:00
he 09e0187a7d S-78 2023-07-18 14:50:42 +08:00
he 9d4fea4407 S-77 2023-07-18 14:19:21 +08:00
he df508335a0 S-76 2023-07-18 13:55:52 +08:00
he 6900433496 S-75 2023-07-18 13:48:19 +08:00
he fc5f68bd7c S-74 2023-07-18 13:46:46 +08:00
he e9ee41e1a1 S-73 2023-07-18 11:57:44 +08:00
he e1a63b6da5 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-07-18 11:31:00 +08:00
he 45a84a65ec S-72 2023-07-18 11:30:41 +08:00
hang 8550612a8b Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-07-18 11:17:29 +08:00
hang cc02e89e1b hang- 修改CRC 看到的检查列表 2023-07-18 11:16:50 +08:00
he ec808c68f5 S-71 2023-07-17 17:42:39 +08:00
he 644d94ed22 S-70 2023-07-17 16:52:23 +08:00
he b7d50de7d1 S-69 2023-07-17 16:36:03 +08:00
he 6a53aaf010 无序阅片顺序 2023-07-17 15:59:48 +08:00
he edaab02d0b S-68 2023-07-17 14:57:04 +08:00
he 7a03474d07 S-67 2023-07-17 10:59:52 +08:00
he c810f6165f Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-07-17 10:38:45 +08:00
hang 23673ba60c Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-07-17 10:23:12 +08:00
hang 065be00d43 hang-用户登录日志 -04 2023-07-17 10:21:26 +08:00
hang da29b194a7 hang-用户登录日志 -03 2023-07-17 10:21:21 +08:00
hang 010a69f7ad hang-用户登录日志 -02 2023-07-17 10:21:17 +08:00
hang 242bae10d1 hang - 用户登录日志修改-01 2023-07-17 10:21:11 +08:00
he b44f79ab60 S-66 同步 2023-07-14 16:20:19 +08:00
he 4f5d817789 S-65 确认就同步标准 2023-07-14 16:19:17 +08:00
he fd13769010 S-64 2023-07-14 13:40:02 +08:00
he fb94e1cf6c S-63 2023-07-14 11:21:59 +08:00
he b03d539578 S-62 2023-07-14 10:59:05 +08:00
he 9f4582bf27 S-61 2023-07-13 17:18:38 +08:00
he 3a79251b91 S-60 VisitHelper 任务临床状态维护 2023-07-13 14:06:56 +08:00
he b4bc39f0d9 S-59 2023-07-13 13:53:11 +08:00
he 2526ac32fa S-58 2023-07-13 11:40:30 +08:00
he fc71dea8e9 S-57 2023-07-13 11:37:51 +08:00
he 27b51e7ede S-56 2023-07-13 10:55:59 +08:00
he 5511d6339e S-55 2023-07-12 18:11:18 +08:00
he 79a4ad8cfd S-54 2023-07-12 17:53:00 +08:00
he a23325584b S-53 2023-07-12 17:12:28 +08:00
he 61cdb2fada S-52 2023-07-12 16:06:52 +08:00
he 8b96163e37 S-51 2023-07-12 15:55:20 +08:00
he d84e246b23 S-50 2023-07-12 15:19:39 +08:00
he 3dd7da5a39 S-50 2023-07-12 15:19:18 +08:00
he 260e29989c S-49 任务的临床状态维护 2023-07-12 15:13:26 +08:00
he a08cc44cd0 S-48 2023-07-12 14:03:40 +08:00
he 98cc35e614 S-47 2023-07-12 13:55:45 +08:00
he b5e4b7db86 S-46 2023-07-12 11:41:49 +08:00
he a10a9a2255 S-45 2023-07-12 10:31:58 +08:00
he 18f5bcd62f S-44 2023-07-11 18:02:37 +08:00
he c2cbbba637 S-43 2023-07-11 16:30:50 +08:00
he 8e9b9c54fd S-42 2023-07-11 15:39:07 +08:00
he f0a7af4af1 S-41 2023-07-11 12:42:43 +08:00
he 2c262f27ad S-40 2023-07-11 11:49:48 +08:00
he a4819c4016 S-39 2023-07-11 10:10:07 +08:00
he 52e7166177 S-38 2023-07-10 16:50:46 +08:00
he 581f7fcbf3 S-37 2023-07-10 14:52:40 +08:00
he 65da0b877b S-36 2023-07-10 14:46:23 +08:00
he 06e8dc21fa Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-07-10 09:14:51 +08:00
he 03c07cf969 S-35 2023-07-10 09:14:33 +08:00
hang a52aac876a Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-07-07 16:25:30 +08:00
hang 32d8f8b648 国际化修改 2023-07-07 16:25:11 +08:00
he bfeb41fea9 S-34 2023-07-07 13:48:47 +08:00
he fb118d88f1 S-33 2023-07-07 11:32:38 +08:00
he aacce0b453 S-32 2023-07-07 11:16:23 +08:00
he cee382651b S-31 2023-07-07 10:43:32 +08:00
he 64633a1d63 S-30 2023-07-07 09:24:20 +08:00
he 63e5880154 S-29 2023-07-06 17:51:41 +08:00
he 5e383cb7b5 S-28 2023-07-06 17:36:10 +08:00
he 163af3b269 S-27 2023-07-06 17:06:20 +08:00
he c1bfa55ea6 S-26 2023-07-06 16:40:57 +08:00
he 5ffcc21917 S-25 2023-07-06 15:57:05 +08:00
he 790b69d0a6 S-24 2023-07-06 15:13:58 +08:00
he 313e07de43 S-23 2023-07-06 14:58:06 +08:00
he 7b27009d31 S-22 2023-07-06 14:55:07 +08:00
he 6b318f94fd S-21 2023-07-06 14:21:17 +08:00
he 7da1b40a5c S-20 2023-07-06 13:41:22 +08:00
he d90a98c1ef S-19 2023-07-06 13:20:02 +08:00
he 8a174711f4 S-18 2023-07-06 10:11:23 +08:00
he 48f386546e S-17 2023-07-06 09:38:05 +08:00
he 24d7912f1f S-16 2023-07-06 09:16:16 +08:00
he 090868b299 S-15 2023-07-05 18:31:09 +08:00
he 6dbfda36ee S_014 2023-07-05 17:50:31 +08:00
he 4c6315f2a5 S-13 2023-07-05 16:51:11 +08:00
he e2cdbb7580 修改 2023-07-05 16:33:27 +08:00
he 13abd86be0 S-011 2023-07-05 15:51:41 +08:00
he 8364b00d3f S-010 2023-07-05 15:34:14 +08:00
he 274e4fdcce S-009 2023-07-05 14:49:53 +08:00
he 5354d3b9dc S-008 2023-07-05 14:49:19 +08:00
he 560f58a7b3 S-007 2023-07-05 13:51:32 +08:00
he b3697c1e21 S-006 临床数据 2023-07-05 12:57:59 +08:00
hang 051b61b2e8 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-07-05 11:44:58 +08:00
hang fc229fb645 中心调研两个版本修改 2023-07-05 11:44:39 +08:00
hang 93517d90ec 修改中心调研 2023-07-05 11:44:35 +08:00
he 0611e373b8 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-07-05 11:43:51 +08:00
he cadaf368ef 修改 2023-07-05 11:43:33 +08:00
hang ddcd9cb0c1 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-07-05 10:33:57 +08:00
hang d00158fa38 修改用户登录日志 2023-07-05 10:33:52 +08:00
he 4a6dfc9a2a Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-07-05 10:30:50 +08:00
he e0829ffecf S-004 临床数据 2023-07-05 10:30:37 +08:00
hang 02ce0c993d Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-07-05 09:35:47 +08:00
hang ac3eaea3f6 hang-S-002增加枚举,修改密码,重置密码,记录日志 2023-07-05 09:35:38 +08:00
hang 891af745bb 用户日志修改 2023-07-04 17:03:15 +08:00
he 3e49e78dfe S-003 临床数据 2023-07-04 15:48:20 +08:00
he c67dcb1d5c S-002 临床数据修改 2023-07-04 15:24:34 +08:00
hang 0208edb9ed hang_S_1_可逆加密算法增加 2023-07-04 15:24:06 +08:00
he 7f966b0a24 S-01临床数据 2023-07-04 15:03:52 +08:00
he b6f398bd2b 修改 2023-07-04 14:15:26 +08:00
he cb096a1d9b 修改 2023-07-04 13:55:46 +08:00
he 9913ff67ca Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-07-04 13:55:25 +08:00
he 9f4b274985 修改 2023-07-04 13:55:16 +08:00
hang 6903ccb3a6 测试环境修改配置环境,同步中心影像测试 2023-07-04 13:45:17 +08:00
he 020fbf33e5 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-07-04 13:34:40 +08:00
he a7b8cc6307 修改 2023-07-04 13:34:22 +08:00
hang 1e5edd1c4c 医学审核修改,暂时不让报错,需要修改之前的接口,待定 2023-07-04 13:25:09 +08:00
hang faafc8fdfc 修改限制配置时间 2023-07-04 11:59:01 +08:00
hang 75543f9bcf 修改用户类型角色 2023-07-04 11:30:29 +08:00
hang 5f158137dd Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-07-04 09:23:37 +08:00
hang e7f281a03d 修改暂存 2023-07-04 09:23:29 +08:00
he 6813b42ae1 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-07-03 18:02:20 +08:00
he b20d78c102 修改 2023-07-03 18:02:03 +08:00
hang ec3087efc4 测试挑拣 2023-07-03 17:12:40 +08:00
hang bf04562180 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-07-03 17:10:08 +08:00
hang 2faec8513f 启动配置文件修改 2023-07-03 17:10:04 +08:00
he a8b732abb9 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-07-03 16:57:42 +08:00
he fbf90b4efc 修改 2023-07-03 16:57:33 +08:00
hang 34aa515344 暂时不让统计报错 2023-07-03 16:55:29 +08:00
hang 35f8379d65 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-07-03 16:50:40 +08:00
hang 9d752286f4 修改配置文件 2023-07-03 16:50:33 +08:00
he 6b854cc9ad Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-07-03 16:45:27 +08:00
he 58e11f12e1 修改 2023-07-03 16:45:17 +08:00
hang 850c44b12a Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-07-03 16:42:16 +08:00
hang d6a37cbd6b 暂时修改 2023-07-03 16:42:08 +08:00
he f2dee26cdb 修改 2023-07-03 15:58:47 +08:00
he 2ee115a47d 修改 2023-07-03 14:48:05 +08:00
he 849c0be13d 修改 2023-07-03 14:42:45 +08:00
he 9a51c7a3b6 修改 2023-07-03 14:34:59 +08:00
he e9e083d9ee 修改 2023-07-03 14:25:01 +08:00
he bb871a32fd 修改 2023-07-03 14:19:56 +08:00
he 04811681a3 修改 2023-07-03 14:11:44 +08:00
he ec3f4cf121 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-07-03 14:03:54 +08:00
he e2060a1460 删除表单数据 2023-07-03 14:03:29 +08:00
hang 4a70ba0134 角色列表查询增加展示具体的枚举值 2023-07-03 14:00:06 +08:00
hang 630fda3c45 x 2023-07-03 13:35:48 +08:00
hang 04762b3f7e 修改接口名字 2023-07-03 13:34:40 +08:00
hang 00b48695f6 修改接口名字 2023-07-03 13:34:22 +08:00
hang e996557b51 模拟提交2 2023-07-03 11:34:17 +08:00
hang e5faf00df9 模拟提交1 2023-07-03 11:33:54 +08:00
hang 4beca9497b 去掉添加修改项目里面写死的权限控制 2023-07-03 11:10:45 +08:00
he 049c3918a4 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-07-03 10:24:27 +08:00
he d71286b265 修改 2023-07-03 10:24:09 +08:00
hang 80eb9aa036 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-07-03 10:14:33 +08:00
hang 70813984be 删除后端权限认证 2023-07-03 10:14:28 +08:00
he f904ca8f11 测试修改 2023-06-30 17:52:22 +08:00
he 068c347178 修改 2023-06-30 17:32:55 +08:00
he c9f5b2a330 修改 2023-06-30 16:29:21 +08:00
he 529dc52823 修改 2023-06-30 13:48:21 +08:00
he b4b4c82e59 修改 2023-06-30 13:24:00 +08:00
he 276e7ee729 修改 2023-06-30 10:50:12 +08:00
he 808dfe7d31 修改 2023-06-30 10:49:41 +08:00
he 88b800415c Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-06-30 09:27:56 +08:00
he 1679b6b406 修改 2023-06-30 09:27:34 +08:00
hang 748cc495be 修改擦汗寻 2023-06-29 17:50:40 +08:00
hang c3ad6ae8cb Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-06-29 17:45:01 +08:00
hang da44e67d65 修改 2023-06-29 17:44:56 +08:00
he 70be5ae184 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-06-29 17:25:00 +08:00
he fe260a6a06 修改 2023-06-29 17:24:37 +08:00
hang 631afde7b6 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-06-29 14:33:33 +08:00
hang 7a6e4d5f2c 失败的次数和限制时间增加到配置文件里面 2023-06-29 14:33:16 +08:00
he 8683273022 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-06-29 10:52:16 +08:00
he 2c9f691d8e 修改 2023-06-29 10:51:51 +08:00
hang 398a804b41 优化字典添加 2023-06-29 10:49:38 +08:00
hang 79ffa3e29a 修改国际化批量提交触发 更新json 以及内存字典 2023-06-28 17:59:25 +08:00
hang db0319bfba 修改批量添加接口 2023-06-28 17:34:07 +08:00
hang 747ad313e6 批量添加国际化接口 2023-06-28 17:29:03 +08:00
hang 4f5b7be7b8 增加 国际化修改,触发更新json文件 2023-06-28 16:22:28 +08:00
hang e3b9576a2d Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-06-28 16:04:31 +08:00
hang 0dcd74388f 增加前端国际化刷新查询接口 2023-06-28 16:04:24 +08:00
he 302f99172f 修改 2023-06-28 14:54:03 +08:00
he 05adb5ee84 修改 2023-06-28 14:51:29 +08:00
he 013f63b52f 修改 2023-06-28 14:27:25 +08:00
he 640c28a260 修改 2023-06-28 14:27:03 +08:00
he 2c06dfb553 修改 2023-06-28 14:26:40 +08:00
he 63ae52d99c Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-06-28 14:14:19 +08:00
he 03026a84c7 修改 2023-06-28 14:14:07 +08:00
hang fd33e4c3d4 漏提交 2023-06-28 14:12:07 +08:00
hang 4606b3980c Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-06-28 14:10:39 +08:00
hang be6affb2c6 修改国际化查询 2023-06-28 14:10:31 +08:00
he b75fc89011 修改 2023-06-28 14:00:44 +08:00
he 5849309dad Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-06-28 13:56:41 +08:00
he 02dd9aca32 修改 2023-06-28 13:56:11 +08:00
hang 4c4905e60b 修改hospital 2023-06-28 11:59:23 +08:00
hang c63251b832 修改国际化 2023-06-28 10:03:29 +08:00
hang 808ade6e8d 编译错误提交 2023-06-28 09:35:00 +08:00
hang 73fb523b3d Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-06-28 09:24:06 +08:00
hang 0c56b55c2a 修改统计列表错误 2023-06-28 09:23:58 +08:00
he e66b56af58 修改一般 2023-06-28 09:20:38 +08:00
he a718aa9c69 修改 2023-06-28 09:14:08 +08:00
he 49749b3f59 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-06-27 18:05:21 +08:00
he 045c6bfc9f 修改 2023-06-27 18:05:00 +08:00
hang 91a6f20dba 去掉hangfire 增加quartZ 方便部署,免得需要两个数据库 2023-06-27 17:04:14 +08:00
hang 4eb5c97725 修改国际化表 2023-06-27 16:38:20 +08:00
hang 978b230f00 修改请求方式 2023-06-27 16:08:08 +08:00
hang 9d2632106c Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-06-27 16:05:11 +08:00
hang dd73415c00 增加版本号限制 2023-06-27 16:05:07 +08:00
he f0635ba323 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-06-27 16:03:41 +08:00
he 38205b3b97 修改 2023-06-27 16:03:16 +08:00
hang ae7306a3ef 发布日志遗漏 2023-06-27 16:00:47 +08:00
hang 5448216e7a 系统发布日志功能 2023-06-27 16:00:20 +08:00
hang 4f111a710d Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-06-27 15:22:18 +08:00
hang f5df39a971 修改统计查询 2023-06-27 15:22:11 +08:00
he 1866257ff5 修改 2023-06-26 17:55:43 +08:00
he 8d9fbbf7e9 修改 2023-06-26 17:02:03 +08:00
he bcd87dfa6d 修改 2023-06-26 16:33:27 +08:00
he 653aca500f Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-06-26 16:31:33 +08:00
he ca36fd35a6 修改 2023-06-26 16:30:58 +08:00
hang 260b2ad5c9 修改 swagger 提示 2023-06-26 10:48:47 +08:00
hang 230413a5cc 修改命名 2023-06-26 10:33:38 +08:00
hang d9618472cb Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-06-26 10:28:39 +08:00
hang 9d96789302 修改统计 2023-06-26 10:28:29 +08:00
he 0a69979417 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-06-26 09:31:30 +08:00
he ce21c72f37 代码修改 2023-06-26 09:31:14 +08:00
hang b4ade5e956 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-06-25 09:22:43 +08:00
hang c79f387af2 同步 2023-06-25 09:22:27 +08:00
he 9171a62979 修改 2023-06-21 15:49:40 +08:00
he 793704c111 修改 2023-06-21 15:44:10 +08:00
he 0cb5c8ca94 修改 2023-06-21 15:41:55 +08:00
he ca5f50586b 修改 2023-06-21 15:25:23 +08:00
he 6f09c10bd7 修改 2023-06-21 15:06:03 +08:00
he 8205f33ec6 修改 2023-06-21 14:51:15 +08:00
he 5360c577af 修改 2023-06-21 14:01:49 +08:00
he ea48fcac64 修改 2023-06-20 17:09:59 +08:00
he fbc639030a 修改 2023-06-20 15:46:48 +08:00
he eef042b469 修改 2023-06-20 13:17:36 +08:00
he d34bf1ee7d 修改 2023-06-20 10:13:34 +08:00
he 6987f4be83 修改 2023-06-19 16:24:47 +08:00
he 1b443af123 修改 2023-06-19 16:19:15 +08:00
he aa100c2383 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-06-19 15:45:35 +08:00
he e3541d78ce 修改 2023-06-19 15:45:29 +08:00
hang c0b973370c Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-06-19 15:35:20 +08:00
hang 129419df9d 修改排序 2023-06-19 15:35:16 +08:00
he ac635c4b38 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-06-19 14:39:35 +08:00
he f05f7168ac 代码修改 2023-06-19 14:39:17 +08:00
hang 21a5c25760 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-06-19 10:59:42 +08:00
hang 756b44db5e 修改机构名字查询 2023-06-19 10:59:37 +08:00
he 38538ca358 修改 2023-06-16 17:19:53 +08:00
he e22b019147 代码修改 2023-06-16 17:18:47 +08:00
hang 39fab36541 修改查询接口 2023-06-16 16:38:17 +08:00
hang b96a1dcefc 修改列表展示 2023-06-16 15:34:44 +08:00
hang 4ab56202f0 修改返回列表信息 2023-06-16 14:30:21 +08:00
hang 9baa6e3c85 放开登录限制 2023-06-16 13:35:39 +08:00
hang 300b4582ec x 2023-06-16 11:16:25 +08:00
hang 3cdd9b6af2 修改列sql 2023-06-16 11:16:02 +08:00
hang 355d71769a 国际化导致挤账号功能失败 2023-06-15 12:03:55 +08:00
hang 851f785f50 修改统计 2023-06-14 18:20:08 +08:00
hang c462dbb745 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-06-14 14:38:31 +08:00
hang 5706fea2eb 修改reviewer 2023-06-14 14:38:23 +08:00
he c403951050 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-06-14 13:48:06 +08:00
he 214e425796 代码修改 2023-06-14 13:47:47 +08:00
hang 2ea2c037e8 数据库异常处理 2023-06-14 13:35:46 +08:00
hang a20ed9c876 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-06-14 09:54:01 +08:00
hang d995cc01bc 增加异常处理 2023-06-14 09:52:30 +08:00
he 3643693bde Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-06-14 09:45:47 +08:00
he 928c3ea3c2 修改 2023-06-14 09:45:20 +08:00
hang 779b07b1b5 修改限制用户中间件发布 2023-06-13 16:56:13 +08:00
hang 2aea40d26f 测试html修改 2023-06-13 11:56:07 +08:00
hang 7a2a05063b 修改邮件模板 2023-06-13 11:43:14 +08:00
hang fa58ac7419 重阅申请表 增加TrialId 字段冗余 方便查询 2023-06-13 11:11:47 +08:00
hang 44ad83790d 修改邮件模板和统计 2023-06-12 17:12:28 +08:00
hang 48ede05926 重新发布 2023-06-12 15:23:27 +08:00
hang 50ef2e83ce 优化未阅片数字统计查询 2023-06-12 14:45:12 +08:00
hang 1be72c87f2 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-06-12 13:34:22 +08:00
hang 961b76fd1e 修改邮件国际化提示语 2023-06-12 13:34:13 +08:00
he bc6a82a7fe Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-06-12 11:48:18 +08:00
he 1ac81b8f17 代码修改 2023-06-12 11:47:51 +08:00
hang 79e556ac80 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-06-12 11:07:50 +08:00
hang 50fdea4095 修改项目文档角色过滤 完成邮件url语言 2023-06-12 11:07:39 +08:00
he f77c1f0256 修改 2023-06-09 15:25:16 +08:00
he 9775d3b93f Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-06-09 15:20:18 +08:00
he 4fb431f3bd 修改 2023-06-09 15:19:21 +08:00
hang e66edbf2c7 删除sql 2023-06-08 11:28:43 +08:00
hang 8828de9456 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-06-08 10:36:05 +08:00
hang 484ad67152 修改之前的导出国际化 2023-06-08 10:35:57 +08:00
he 97e8ec44cb 修改 2023-06-08 10:29:42 +08:00
he 3454e330f5 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-06-08 10:10:45 +08:00
he e91af9cea4 代码修改 2023-06-08 10:10:11 +08:00
hang 8e1d2855c6 修改国际化 2023-06-08 09:13:03 +08:00
hang 0e01bd167e 修改项目删除 2023-06-07 18:08:00 +08:00
hang ec4952766e 标准自动生成初始化默认值修改 2023-06-07 17:53:15 +08:00
hang e976de18e0 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-06-07 11:31:23 +08:00
hang 81f5b47918 修改服务存储切换bug 2023-06-07 11:31:15 +08:00
he 5e7ddc07db Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-06-07 10:28:50 +08:00
he 11a8e6e565 修改 2023-06-07 10:27:59 +08:00
hang b9f78c5f0b 修改uat 2023-06-07 08:57:27 +08:00
hang af4aec6a69 修改bm重阅影响列表逻辑 2023-06-06 17:18:39 +08:00
hang f8c3064b07 处理生成任务脏数据 2023-06-06 16:08:32 +08:00
hang d3c0e5979a 修改枚举值 2023-06-06 15:11:55 +08:00
hang 43a720e09e 修改枚举值变化 2023-06-06 14:54:05 +08:00
hang 8a232be59f 修改 2023-06-06 14:30:37 +08:00
hang 01018737fd 修改参与类型 2023-06-06 11:54:20 +08:00
hang 0c228fab1f 修改确认 2023-06-06 11:34:11 +08:00
hang 0d0e795faf Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-06-06 10:10:57 +08:00
hang 76965111fe 修改项目属性 单选变为多选 2023-06-06 10:10:49 +08:00
he 67d2067a28 修改 2023-06-05 18:15:07 +08:00
he 4e63395a35 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-06-05 16:59:46 +08:00
he 1d85f49a97 修改 2023-06-05 16:59:27 +08:00
hang bcad91dc18 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-06-05 16:48:31 +08:00
hang d516b8a4dc 修改国际化内容 2023-06-05 16:48:12 +08:00
he 2d651ca51d 修改 2023-06-05 14:57:49 +08:00
he f9b52f9433 修改 2023-06-05 14:38:39 +08:00
he f6f3fcf1d3 修改 2023-06-05 14:35:56 +08:00
he 1d3e324b9a 修改 2023-06-05 14:33:58 +08:00
he 350101091a Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-06-05 13:37:42 +08:00
he 343360cdbe 修改 2023-06-05 13:37:12 +08:00
hang 739c3ad4cb Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-06-02 15:35:05 +08:00
hang ed38a863d4 维护sql修改 2023-06-02 15:34:46 +08:00
he 5d797959e3 修改 2023-06-02 14:23:59 +08:00
he 3626d2e1bf 修改 2023-06-02 14:22:44 +08:00
he 7b272a0b21 修改 2023-06-02 12:08:30 +08:00
he cdd0c52182 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-06-02 10:50:16 +08:00
he 8b490dd4f9 修改 2023-06-02 10:49:37 +08:00
hang f30494ad30 修改国际化 2023-06-02 08:48:14 +08:00
hang 6e6b456115 2023-06-01 17:06:06 +08:00
hang ebc56e5eb7 修改国际化 2023-06-01 16:54:11 +08:00
hang 2b5fb427df 修改国际化 2023-06-01 16:53:38 +08:00
hang 8f62b8cd5f 修改导出模板国际化 2023-06-01 15:51:36 +08:00
hang de673afb9e Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-06-01 15:38:29 +08:00
hang 8bd4ef169c 上传一致性核查国际化文件 2023-06-01 15:38:22 +08:00
he 59ff0f2ad0 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-06-01 14:56:02 +08:00
he fd478715f3 修改 2023-06-01 14:55:40 +08:00
hang 8b21f29978 增加字段 2023-06-01 14:21:47 +08:00
hang 367f698348 增加国际化修改 2023-06-01 14:20:46 +08:00
hang bda31f2ba7 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-06-01 13:23:40 +08:00
hang f9d48272ef 修改入组状态显示问题 2023-06-01 13:23:35 +08:00
he 865412a551 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-06-01 13:20:34 +08:00
he c033ef2d28 修改 2023-06-01 13:19:04 +08:00
hang e1ddb5920f 修改稽查国际化 2023-06-01 10:15:23 +08:00
hang 4f6225047e 删除TNM分期 2023-05-31 18:02:04 +08:00
hang 107e3ec360 修改sql 2023-05-31 17:34:45 +08:00
he 2b766e216c 修改 2023-05-31 16:33:33 +08:00
he 419453a8c5 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-31 16:27:17 +08:00
he 862128abf0 修改 2023-05-31 16:26:51 +08:00
hang 491b0522ab 修改维护sql 2023-05-31 15:54:48 +08:00
hang 5d61780b7c Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-31 14:55:07 +08:00
hang 6bd3956e2e 修改导出国际化 2023-05-31 14:54:27 +08:00
he 3a7963d0f9 修改 2023-05-31 10:45:32 +08:00
he 9cd2c684b5 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-31 10:44:12 +08:00
hang b9a5881333 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-31 10:43:30 +08:00
hang 9bbf81875f 国际化 2023-05-31 10:43:26 +08:00
hang 09a1d06c8d Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-31 10:39:40 +08:00
hang 1e8daafba4 x 2023-05-31 10:38:26 +08:00
he a726021ea9 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-31 10:36:42 +08:00
he 189ed2a22d 提交 2023-05-31 10:36:02 +08:00
he b03397ca87 修改 2023-05-31 10:30:26 +08:00
hang d9bf39acb0 稽查新增编辑 接口修改 2023-05-31 10:22:00 +08:00
hang 21b68e6bb9 修改稽查 2023-05-31 10:09:29 +08:00
hang aa15145765 修改重阅申请 不符合条件,以异常的方式抛出 2023-05-30 11:21:31 +08:00
hang c6b7902eca Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-30 09:40:38 +08:00
hang 72d60bea62 修改退回影响列表 2023-05-30 09:40:20 +08:00
he 1239b1e542 修改 2023-05-29 17:06:13 +08:00
he 420e730003 修改 2023-05-29 09:11:30 +08:00
he 56e682314f 修改 2023-05-26 18:00:03 +08:00
he 8e8fb1cc8c 修改 2023-05-26 17:42:58 +08:00
he cf00e51559 修改 2023-05-26 17:29:35 +08:00
he 8a9b61185e Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-26 17:22:43 +08:00
he ac406ac6f3 修改 2023-05-26 17:22:31 +08:00
hang 9f43bd5294 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-26 16:18:42 +08:00
hang 7b853c74f3 修改bm退回 2023-05-26 16:18:35 +08:00
he 83bd026c4e Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-26 15:08:49 +08:00
he 3fce40b4c9 修改 2023-05-26 15:08:27 +08:00
hang 75056923dc Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-26 14:03:29 +08:00
hang 597d4b7469 去掉临床数据核查状态,签名哪里取消限制 2023-05-26 14:03:18 +08:00
he e7ddec4329 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-26 11:26:19 +08:00
he 5f1a25c2ec 修改 2023-05-26 11:25:58 +08:00
hang 5b8f08f3a3 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-26 11:24:31 +08:00
hang 544ceefef7 修改重阅申请bug 2023-05-26 11:24:14 +08:00
he 33c55db206 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-25 17:14:52 +08:00
he ce12fa0d22 修改 2023-05-25 17:14:40 +08:00
hang 2f50c17320 稽查修改 2023-05-25 16:15:50 +08:00
hang 83b6fe7cb2 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-25 14:18:57 +08:00
hang 63eeb88066 稽查修改代码 2023-05-25 14:18:39 +08:00
he dfeb4204e7 修改 2023-05-25 13:28:16 +08:00
he 2a8f66f360 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-25 10:59:38 +08:00
he d34f047418 修改 2023-05-25 10:59:06 +08:00
hang 56331ea150 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-24 16:10:23 +08:00
hang 482d789870 临床数据接口合并 2023-05-24 16:10:19 +08:00
he 0e6055881a Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-24 15:45:17 +08:00
he f10d1b0a9e 修改 2023-05-24 15:44:59 +08:00
hang a2ef29e75d Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-24 15:44:04 +08:00
hang 6468a6505b 修改稽查 2023-05-24 15:43:56 +08:00
he 0e1655004a 修改 2023-05-24 15:15:31 +08:00
he 26421f78e2 修改 2023-05-24 14:25:58 +08:00
he 22d3d542ae 修改 2023-05-24 11:38:57 +08:00
he 714f48deb7 修改 2023-05-24 11:03:28 +08:00
he dda82466c9 修改 2023-05-24 09:26:55 +08:00
he 1678f9a021 修改 2023-05-23 17:47:03 +08:00
he fc9969570d 修改 2023-05-23 15:20:34 +08:00
he 5c760a83d6 修改 2023-05-23 15:00:46 +08:00
he bed0b41789 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-23 14:55:27 +08:00
he 4859fd301a 修改 2023-05-23 14:55:07 +08:00
hang 957c85d641 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-23 11:27:30 +08:00
hang a1c4c00d1c 阅片标准配置附加评估稽查测试 2023-05-23 11:27:20 +08:00
he 2cd8e25466 修改 2023-05-23 10:58:09 +08:00
he d7829c371f 修改 2023-05-23 10:40:38 +08:00
he 36f236f69f 修改 2023-05-23 10:35:21 +08:00
he 80b877879c 修改 2023-05-23 09:33:17 +08:00
he f698d77719 修改 2023-05-22 18:07:02 +08:00
he bebb76e51a Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-22 17:43:30 +08:00
he af86dd92c5 修改 2023-05-22 17:43:23 +08:00
hang 3ed4d29af3 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-22 17:41:27 +08:00
hang 14f4f66f84 修改 2023-05-22 17:41:17 +08:00
he d4ffe2eadf 修改 2023-05-22 17:09:15 +08:00
he b0c3ba2a11 修改 2023-05-22 16:34:08 +08:00
he 0adf7a5c84 修改 2023-05-22 16:18:02 +08:00
he 2e9a252910 修改 2023-05-22 16:08:35 +08:00
he ecb4854c78 修改 2023-05-22 16:07:07 +08:00
he b8ecc5e591 修改 2023-05-22 16:04:03 +08:00
he 9dc272fd17 修改 2023-05-22 15:39:47 +08:00
he 763430099b 修改 2023-05-22 15:06:34 +08:00
he 28d28cffd7 修改 2023-05-22 14:57:44 +08:00
he 78e9d430bd 修改 2023-05-22 14:37:37 +08:00
he 499fa59b92 修改 2023-05-22 14:19:41 +08:00
he 817164c4f3 修改 2023-05-22 14:15:39 +08:00
he e0ad618d1a 修改 2023-05-22 14:12:20 +08:00
he 9329ef34e2 修改 2023-05-22 14:02:40 +08:00
he 2c7444c15b 修改 2023-05-22 13:56:58 +08:00
he a586b267db 修改 2023-05-22 13:56:08 +08:00
he f665b1f623 修改 2023-05-22 11:56:11 +08:00
he c34425b231 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-22 11:50:34 +08:00
he 7e47e07747 修改 2023-05-22 11:49:54 +08:00
hang 90e1f87fb4 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-22 10:39:28 +08:00
hang 05a9ef9410 修改indication 2023-05-22 10:39:12 +08:00
he c41b6b2eb3 修改 2023-05-19 15:00:18 +08:00
he c8ce49a383 修改 2023-05-19 14:32:18 +08:00
he 919a6c7028 修改 2023-05-19 13:59:42 +08:00
he 8a1a07980d Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-19 11:14:49 +08:00
he 8556f7cdf6 修改 2023-05-19 11:14:40 +08:00
hang 0d82e3e72b Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-19 10:59:45 +08:00
hang 8bbdbc6cf5 修改通用返回 2023-05-19 10:59:41 +08:00
he ac10d4ca70 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-19 10:40:36 +08:00
he 1355688a36 修改 2023-05-19 10:40:29 +08:00
hang 88c8d5e34c Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-19 10:39:20 +08:00
hang b54ebcb0d1 修改附加评估判断 2023-05-19 10:39:16 +08:00
he 3532a8c5c0 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-19 10:28:33 +08:00
he fe28fd355b 修改 2023-05-19 10:28:04 +08:00
hang 9a976022e5 存在附加评估,手动生成任务 2023-05-19 09:31:06 +08:00
hang 240a577361 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-18 15:56:41 +08:00
hang 3851eb0c29 修改影像归档最终提交 2023-05-18 15:56:36 +08:00
he 976f6d8224 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-18 15:46:44 +08:00
he 1461240f27 修改 2023-05-18 15:46:13 +08:00
hang 0c29fcb9bd x 2023-05-18 15:39:05 +08:00
hang a754a4fcc6 允许缩略图为空 2023-05-18 15:27:05 +08:00
hang 0e165a196c 修改路径 2023-05-18 15:09:46 +08:00
hang 53d29fe79d Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-18 14:32:35 +08:00
hang 2854acf146 修改文档上传后不能查看 2023-05-18 14:32:27 +08:00
he 73035a4369 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-18 14:07:55 +08:00
he 1da0435b4e 修改 2023-05-18 14:07:16 +08:00
hang 84ccbe3ac0 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-18 11:35:48 +08:00
hang 4a86ae0bfd 修改重阅申请 2023-05-18 11:35:33 +08:00
he ceb1337cde Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-18 09:49:09 +08:00
he 6013555139 修改 2023-05-18 09:48:49 +08:00
hang 1e533706aa Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-18 09:47:04 +08:00
hang 2fe9e88c52 dicom 影像返回路径 2023-05-18 09:46:50 +08:00
he 2a0b21c8b1 修改 2023-05-17 18:11:49 +08:00
he f8a5e753da 修改 2023-05-17 15:19:26 +08:00
he 559b18ff5a 修改 2023-05-17 14:47:57 +08:00
he b95592db96 修改 2023-05-17 14:18:54 +08:00
he a3c471de38 修改 2023-05-17 13:56:56 +08:00
he 36576d1936 修改 2023-05-17 13:40:10 +08:00
hang e000b7ea6d 动态切换存储中间件修改结束 2023-05-17 11:48:27 +08:00
he 74c3b2c180 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-16 18:05:25 +08:00
he 0b7878b1c6 修改 2023-05-16 18:05:02 +08:00
hang 8cffbd9901 动态切换存储修改路径 2023-05-16 17:26:47 +08:00
hang d32eae030e Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-16 17:09:20 +08:00
hang b991e9950f 修改缩略图切换路径 2023-05-16 17:09:15 +08:00
he 683abe0035 修改 2023-05-16 17:02:43 +08:00
he a77eabd379 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-16 16:56:32 +08:00
he c58913062a Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-16 16:56:08 +08:00
hang e736fe6557 修改缩略图切换存储 2023-05-16 16:55:55 +08:00
he 43464ee4aa 修改一版 2023-05-16 16:55:40 +08:00
hang 26e246e71a 修改文件路径 2023-05-16 16:38:06 +08:00
hang 98a9a62b2d Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-16 16:31:34 +08:00
hang 5210684c50 切换存储 2023-05-16 16:31:25 +08:00
he 7ea2dc7176 修改 2023-05-16 15:12:12 +08:00
he a8c5bf8e34 修改一版 2023-05-16 15:03:11 +08:00
he ff3b0db3ea 修改 2023-05-16 14:52:41 +08:00
he e7917d5ee7 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-16 14:39:27 +08:00
he 2cd3cdaf38 修改 2023-05-16 14:39:12 +08:00
hang d5639a26d6 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-16 14:26:32 +08:00
hang a13cdae4d2 修改导表裁判标志 2023-05-16 14:26:22 +08:00
he 2d53a9e82c Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-16 13:55:19 +08:00
he 57c860a643 修改 2023-05-16 13:54:52 +08:00
hang 744230d7ec Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-16 13:23:11 +08:00
hang 8f4cd8a447 修改数据表导出逻辑 2023-05-16 13:22:24 +08:00
he 9e2d1289c9 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-16 10:58:48 +08:00
he d05e5ed2c0 修改 2023-05-16 10:58:27 +08:00
hang 070b99d6ef 修改请求方法 2023-05-16 10:37:34 +08:00
hang eae1040695 修改名字 2023-05-16 10:34:18 +08:00
hang 06dde739c3 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-16 10:33:08 +08:00
hang 8875595012 上传 心跳包处理 2023-05-16 10:32:53 +08:00
he 1bb95bd1b5 修改 2023-05-16 10:03:12 +08:00
he 40599918ba 修改 2023-05-15 17:29:05 +08:00
he 1b4483dfa5 修改 2023-05-15 16:53:11 +08:00
he e18987f235 修改 2023-05-15 16:39:54 +08:00
he 817089d81b 修改 2023-05-15 16:35:28 +08:00
he 41883ca5da Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-15 16:17:37 +08:00
he 4d71478d50 修改 2023-05-15 16:17:16 +08:00
hang 43ef5bcdd9 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-15 14:48:13 +08:00
hang 55bd30c24d 修改默认值 2023-05-15 14:48:02 +08:00
he 7447b30892 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-15 10:47:18 +08:00
he 18d4ee0dfa 修改 2023-05-15 10:47:02 +08:00
hang f0be7d2e9e Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-15 10:08:45 +08:00
hang a0747230ac 修改序列 2023-05-15 10:08:33 +08:00
he 1df06fc0ee 修改一版 2023-05-15 09:13:45 +08:00
he ece6bb6e0a 修改 2023-05-10 17:07:42 +08:00
he 0d5810a8fb 修改 2023-05-10 16:07:06 +08:00
he 2bae90e339 修改 2023-05-10 15:18:55 +08:00
he 0a994573cd 修改 2023-05-10 14:35:34 +08:00
he e941bd8266 修改 2023-05-10 14:02:13 +08:00
he b167ec794a 修改 2023-05-10 13:56:02 +08:00
he fb3647fc99 修改 2023-05-10 13:45:11 +08:00
he fbe94c0f57 修改 2023-05-09 16:39:22 +08:00
he d87aa2620e 修改 2023-05-09 16:34:32 +08:00
he 83b006c615 修改一版 2023-05-09 15:16:00 +08:00
he 9feba1c570 修改 2023-05-09 09:59:00 +08:00
he 57c4b198f7 修改 2023-05-09 09:33:42 +08:00
he 127b643e44 修改 2023-05-08 17:11:04 +08:00
he 2fbd0b09f6 修改 2023-05-08 17:04:36 +08:00
he 520aa26a11 修改 2023-05-08 15:56:11 +08:00
he d09dae8378 修改 2023-05-08 15:33:45 +08:00
he 8689ac9139 修改 2023-05-08 14:24:22 +08:00
he 212a7ed2b8 修改 2023-05-08 14:23:58 +08:00
he d9b3e56930 修改 2023-05-08 14:23:04 +08:00
he 7fae8de733 修改 2023-05-08 11:23:05 +08:00
he be8af75e61 修改 2023-05-08 11:00:55 +08:00
he b4cf5cd2a3 修改 2023-05-08 09:56:50 +08:00
he 7649e60d28 修改 2023-05-08 09:23:23 +08:00
he 0aa981eea5 Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api 2023-05-06 16:11:47 +08:00
he 122b50e114 修改国际化 2023-05-06 16:11:31 +08:00
430 changed files with 34309 additions and 13359 deletions
+30
View File
@@ -0,0 +1,30 @@
**/.classpath
**/.dockerignore
**/.env
**/.git
**/.gitignore
**/.project
**/.settings
**/.toolstarget
**/.vs
**/.vscode
**/*.*proj.user
**/*.dbmdl
**/*.jfm
**/azds.yaml
**/bin
**/charts
**/docker-compose*
**/Dockerfile*
**/node_modules
**/npm-debug.log
**/obj
**/secrets.dev.yaml
**/values.dev.yaml
LICENSE
README.md
!**/.gitignore
!.git/HEAD
!.git/config
!.git/packed-refs
!.git/refs/heads/**
+9
View File
@@ -126,6 +126,15 @@ csharp_style_deconstructed_variable_declaration = true:suggestion
csharp_style_unused_value_assignment_preference = discard_variable:suggestion
csharp_style_unused_value_expression_statement_preference = discard_variable:silent
dotnet_diagnostic.CS1570.severity = none
dotnet_diagnostic.CS1587.severity = none
dotnet_diagnostic.CS8619.severity = none
dotnet_diagnostic.CS8620.severity = none
dotnet_diagnostic.CS8632.severity = none
dotnet_diagnostic.CS8604.severity = none
dotnet_diagnostic.CS1998.severity = none
[*.vb]
#### 命名样式 ####
-30
View File
@@ -11,25 +11,12 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IRaCIS.Core.Application", "
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IRaCIS.Core.Domain.Share", "IRaCIS.Core.Domain.Share\IRaCIS.Core.Domain.Share.csproj", "{7CBC76F5-3817-46B7-8D9D-79253A89B578}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IRaCIS.JWT.RS256", "ZhiZhunAuthenticationCenter\IRaCIS.JWT.RS256.csproj", "{3EF210EE-D5D1-4C93-A8FA-E0DB1852BD39}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IRaCIS.Core.Test", "IRaCIS.Core.Test\IRaCIS.Core.Test.csproj", "{3292B2B4-6E8A-43AA-84C0-AB4A391E8A2A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IRaCIS.Core.Infra.EFCore", "IRaCIS.Core.Infra.EFCore\IRaCIS.Core.Infra.EFCore.csproj", "{6D8115E5-84D6-424B-8F8D-0C2D40347A8C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IRaCIS.Core.Infrastructure", "IRaCIS.Core.Infrastructure\IRaCIS.Core.Infrastructure.csproj", "{07EED0F8-08E6-46F3-ACBE-17BC1391BD4C}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "IRaCIS.AuthenticationCenter", "IRaCIS.AuthenticationCenter", "{481329D6-B8A0-491F-A398-1DF66A0FBB62}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IRaCIS.Core.IdentityServer4", "IRaCIS.Core.IdentityServer4\IRaCIS.Core.IdentityServer4.csproj", "{C3DD48CF-B8B3-40F6-9BDB-B7C7F0851674}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IRaCIS.Core.IdentityServer4.MVC", "IRaCIS.Core.IdentityServer4.MVC\IRaCIS.Core.IdentityServer4.MVC.csproj", "{F621ADD6-94E8-4A4B-998E-25B8EF15D39C}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{F852ABFB-88AC-48BE-B876-2228BE2373D6}"
ProjectSection(SolutionItems) = preProject
.editorconfig = .editorconfig
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -52,10 +39,6 @@ Global
{7CBC76F5-3817-46B7-8D9D-79253A89B578}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7CBC76F5-3817-46B7-8D9D-79253A89B578}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7CBC76F5-3817-46B7-8D9D-79253A89B578}.Release|Any CPU.Build.0 = Release|Any CPU
{3EF210EE-D5D1-4C93-A8FA-E0DB1852BD39}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3EF210EE-D5D1-4C93-A8FA-E0DB1852BD39}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3EF210EE-D5D1-4C93-A8FA-E0DB1852BD39}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3EF210EE-D5D1-4C93-A8FA-E0DB1852BD39}.Release|Any CPU.Build.0 = Release|Any CPU
{3292B2B4-6E8A-43AA-84C0-AB4A391E8A2A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3292B2B4-6E8A-43AA-84C0-AB4A391E8A2A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3292B2B4-6E8A-43AA-84C0-AB4A391E8A2A}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -68,23 +51,10 @@ Global
{07EED0F8-08E6-46F3-ACBE-17BC1391BD4C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{07EED0F8-08E6-46F3-ACBE-17BC1391BD4C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{07EED0F8-08E6-46F3-ACBE-17BC1391BD4C}.Release|Any CPU.Build.0 = Release|Any CPU
{C3DD48CF-B8B3-40F6-9BDB-B7C7F0851674}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C3DD48CF-B8B3-40F6-9BDB-B7C7F0851674}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C3DD48CF-B8B3-40F6-9BDB-B7C7F0851674}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C3DD48CF-B8B3-40F6-9BDB-B7C7F0851674}.Release|Any CPU.Build.0 = Release|Any CPU
{F621ADD6-94E8-4A4B-998E-25B8EF15D39C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F621ADD6-94E8-4A4B-998E-25B8EF15D39C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F621ADD6-94E8-4A4B-998E-25B8EF15D39C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F621ADD6-94E8-4A4B-998E-25B8EF15D39C}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{3EF210EE-D5D1-4C93-A8FA-E0DB1852BD39} = {481329D6-B8A0-491F-A398-1DF66A0FBB62}
{C3DD48CF-B8B3-40F6-9BDB-B7C7F0851674} = {481329D6-B8A0-491F-A398-1DF66A0FBB62}
{F621ADD6-94E8-4A4B-998E-25B8EF15D39C} = {481329D6-B8A0-491F-A398-1DF66A0FBB62}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {BCC2EB19-3914-489B-B1D7-B7303E0218A3}
EndGlobalSection
-231
View File
@@ -1,231 +0,0 @@
//using Autofac;
//using Autofac.Extensions.DependencyInjection;
//using IRaCIS.Core.API;
//using IRaCIS.Core.Application.Filter;
//using IRaCIS.Core.Application.MediatR.Handlers;
//using LogDashboard;
//using MassTransit;
//using MassTransit.NewIdProviders;
//using MediatR;
//using Microsoft.AspNetCore.Builder;
//using Microsoft.AspNetCore.Http.Features;
//using Microsoft.AspNetCore.HttpOverrides;
//using Microsoft.AspNetCore.SignalR;
//using Microsoft.Extensions.Configuration;
//using Microsoft.Extensions.DependencyInjection;
//using Microsoft.Extensions.Hosting;
//using Serilog;
//using System;
//var builder = WebApplication.CreateBuilder(args);
// //以配置文件为准,否则 从url中取环境值(服务以命令行传递参数启动,配置文件配置了就不需要传递环境参数)
// var config = new ConfigurationBuilder()
// .AddEnvironmentVariables()
// .Build();
// var enviromentName = config["ASPNETCORE_ENVIRONMENT"];
// if (string.IsNullOrWhiteSpace(enviromentName))
// {
// var index = Array.IndexOf(args, "--env");
// enviromentName = index > -1
// ? args[index + 1]
// : "Development";
// }
// NewId.SetProcessIdProvider(new CurrentProcessIdProvider());
//builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory())
// .ConfigureContainer<ContainerBuilder>(containerBuilder =>
// {
// containerBuilder.RegisterModule<AutofacModuleSetup>();
// })
// .UseWindowsService().UseSerilog();
//// Add services to the container.
////本地化
//builder.Services.AddJsonLocalization(options => options.ResourcesPath = "Resources");
//// 异常、参数统一验证过滤器、Json序列化配置、字符串参数绑型统一Trim()
//builder.Services.AddControllers(options =>
//{
// //options.Filters.Add<LogActionFilter>();
// options.Filters.Add<ModelActionFilter>();
// options.Filters.Add<ProjectExceptionFilter>();
// //options.Filters.Add<UnitOfWorkFilter>();
// //if (_configuration.GetSection("BasicSystemConfig").GetValue<bool>("OpenLoginLimit"))
// //{
// // options.Filters.Add<LimitUserRequestAuthorization>();
// //}
//}).AddNewtonsoftJsonSetup(); // NewtonsoftJson 序列化 处理
////动态WebApi + UnifiedApiResultFilter 省掉控制器代码
//builder.Services.AddDynamicWebApiSetup();
////AutoMapper
//builder.Services.AddAutoMapperSetup();
////EF ORM QueryWithNoLock
//builder.Services.AddEFSetup(builder.Configuration);
////Http 响应压缩
//builder.Services.AddResponseCompressionSetup();
////Swagger Api 文档
//builder.Services.AddSwaggerSetup();
////JWT Token 验证
//builder.Services.AddJWTAuthSetup(builder.Configuration);
//// MediatR 进程内消息 事件解耦 从程序集中 注册命令和handler对应关系
//builder.Services.AddMediatR(typeof(ConsistencyVerificationHandler).Assembly);
//// EasyCaching 缓存
//builder.Services.AddEasyCachingSetup();
////services.AddDistributedMemoryCache();
////// hangfire 定时任务框架 有界面,更友好~
//builder.Services.AddhangfireSetup(builder.Configuration);
////// QuartZ 定时任务框架 使用了hangfire 暂时不用,后续需要可以打开,已经配好
////builder.Services.AddQuartZSetup(_configuration);
//// 保护上传文件
////services.AddStaticFileAuthorizationSetup();
//////HttpReports 暂时废弃
////services.AddHttpReports().AddHttpTransport();
////Serilog 日志可视化 LogDashboard日志
//builder.Services.AddLogDashboardSetup();
////上传限制 配置
//builder.Services.Configure<FormOptions>(options =>
//{
// options.MultipartBodyLengthLimit = int.MaxValue;
// options.ValueCountLimit = int.MaxValue;
// options.ValueLengthLimit = int.MaxValue;
//});
////IP 限流 可设置白名单 或者黑名单
////services.AddIpPolicyRateLimitSetup(_configuration);
////用户类型 策略授权
//builder.Services.AddAuthorizationPolicySetup(builder.Configuration);
//builder.Services.AddJsonConfigSetup(builder.Configuration);
////转发头设置 获取真实IP
//builder.Services.Configure<ForwardedHeadersOptions>(options =>
//{
// options.ForwardedHeaders =
// ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
//});
////Dicom影像渲染图片 跨平台
//builder.Services.AddDicomSetup();
//// 实时应用
//builder.Services.AddSignalR();
//builder.Services.AddSingleton<IUserIdProvider, IRaCISUserIdProvider>();
//builder.Services.AddControllers();
//// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
////builder.Services.AddEndpointsApiExplorer();
////builder.Services.AddSwaggerGen();
////SerilogExtension.AddSerilogSetup(enviromentName, builder.Host.confi);
//var app = builder.Build();
//// Configure the HTTP request pipeline.
////本地化
//app.UseLocalization();
//app.UseForwardedHeaders();
////不需要 token 访问的静态文件 wwwroot css, JavaScript, and images don't require authentication.
//app.UseStaticFiles();
//app.UseIRacisHostStaticFileStore(app.Environment);
////LogDashboard
//app.UseLogDashboard("/LogDashboard");
////hangfire
////app.UseHangfireConfig(app.Environment);
//////暂时废弃
////app.UseHttpReports();
//////限流 中间件
////app.UseIpRateLimiting();
////响应压缩
//app.UseResponseCompression();
//if (app.Environment.IsDevelopment())
//{
// app.UseDeveloperExceptionPage();
//}
//else
//{
// //app.UseHsts();
//}
//SwaggerSetup.Configure(app, app.Environment);
//Console.WriteLine("当前环境: " + builder.Environment.EnvironmentName);
////app.UseMiddleware<AuthMiddleware>();
//// 特殊异常处理 比如 404
//app.UseStatusCodePagesWithReExecute("/Error/{0}");
//////serilog 记录请求的用户信息
//app.UseSerilogConfig(app.Environment);
//app.UseRouting();
//app.UseCors(t => t.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());
//app.UseAuthentication();
////app.UseJwtBearerQueryString();
//app.UseAuthorization();
//////文件伺服 必须带Token 访问
//////app.UseIRacisHostStaticFileStore(env);
////app.UseEndpoints(endpoints =>
////{
//// endpoints.MapControllers();
//// endpoints.MapHub<UploadHub>("/UploadHub")/*.RequireCors(t=>t.WithOrigins(new string[] {"null"}).AllowAnyMethod().AllowAnyHeader().AllowCredentials())*/;
////});
//app.MapControllers();
//app.MapHub<UploadHub>("/UploadHub")/*.RequireCors(t=>t.WithOrigins(new string[] {"null"}).AllowAnyMethod().AllowAnyHeader().AllowCredentials())*/;
//app.Run();
//测试同步
-106
View File
@@ -1,106 +0,0 @@
{
"needAnonymizeTag": [
{ //PatientsName
"Group": "0010",
"Element": "0010",
"ReplaceValue": "",
"Enable": true
},
{ // PatientID
"Group": "0010",
"Element": "0020",
"ReplaceValue": "",
"Enable": true
},
{ // IssuerOfPatientID
"Group": "0010",
"Element": "0021",
"ReplaceValue": "",
"Enable": true
},
{ // PatientsBirthDate
"Group": "0010",
"Element": "0030",
"ReplaceValue": "",
"Enable": true
},
{ // PatientsBirthTime
"Group": "0010",
"Element": "0032",
"ReplaceValue": "",
"Enable": false
},
{ // PatientsSex
"Group": "0010",
"Element": "0040",
"ReplaceValue": "",
"Enable": false
},
{ // OtherPatientIDs
"Group": "0010",
"Element": "1000",
"ReplaceValue": "",
"Enable": false
},
{ // OtherPatientNames
"Group": "0010",
"Element": "1001",
"ReplaceValue": "",
"Enable": false
},
{ // OtherPatientNames
"Group": "0010",
"Element": "1005",
"ReplaceValue": "",
"Enable": true
},
{ // PatientBirthName
"Group": "0010",
"Element": "1005",
"ReplaceValue": "",
"Enable": true
},
{ // PatientsAge
"Group": "0010",
"Element": "1010",
"ReplaceValue": "",
"Enable": true
},
{ // PatientsAddress
"Group": "0010",
"Element": "1040",
"ReplaceValue": "",
"Enable": true
},
{ // PatientsMothersBirthName
"Group": "0010",
"Element": "1060",
"ReplaceValue": "",
"Enable": true
},
{
"Group": "0010",
"Element": "2150",
"ReplaceValue": "",
"Enable": true
},
{
"Group": "0010",
"Element": "2152",
"ReplaceValue": "",
"Enable": true
},
{
"Group": "0010",
"Element": "2154",
"ReplaceValue": "",
"Enable": true
},
{
"Group": "0012",
"Element": "0040",
"ReplaceValue": "XXX",
"Enable": true
}
]
}
+131 -7
View File
@@ -1,9 +1,6 @@
using System;
using System.Net.Http;
using EasyCaching.Core;
using gRPC.ZHiZHUN.AuthServer.protos;
using Grpc.Net.Client;
using Grpc.Net.Client.Configuration;
using IRaCIS.Application.Interfaces;
using IRaCIS.Application.Contracts;
using IRaCIS.Core.Application.Auth;
@@ -24,6 +21,15 @@ using IRaCIS.Core.Domain.Models;
using IRaCIS.Core.Infrastructure;
using System.Linq;
using Microsoft.Extensions.Logging;
using MassTransit;
using Microsoft.AspNetCore.Hosting;
using Aliyun.Acs.Core.Profile;
using Aliyun.Acs.Core.Auth.Sts;
using Aliyun.Acs.Core;
using IRaCIS.Core.Application.Helper;
using Microsoft.Extensions.Options;
using IRaCIS.Core.Application.Contracts;
using LoginReturnDTO = IRaCIS.Application.Contracts.LoginReturnDTO;
namespace IRaCIS.Api.Controllers
{
@@ -50,6 +56,7 @@ namespace IRaCIS.Api.Controllers
public async Task<IResponseOutput<DoctorDetailDTO>> GetDoctorDetail([FromServices] IAttachmentService attachmentService, [FromServices] IDoctorService _doctorService,
[FromServices] IEducationService _educationService, [FromServices] ITrialExperienceService _trialExperienceService,
[FromServices] IResearchPublicationService _researchPublicationService, [FromServices] IVacationService _vacationService, Guid doctorId)
{
var education = await _educationService.GetEducation(doctorId);
@@ -90,9 +97,13 @@ namespace IRaCIS.Api.Controllers
[HttpPost, Route("user/login")]
[AllowAnonymous]
public async Task<IResponseOutput<LoginReturnDTO>> Login(UserLoginDTO loginUser, [FromServices] IEasyCachingProvider provider, [FromServices] IUserService _userService,
[FromServices] ITokenService _tokenService, [FromServices] IConfiguration configuration)
[FromServices] ITokenService _tokenService,
[FromServices] IReadingImageTaskService readingImageTaskService,
[FromServices] IConfiguration configuration)
{
var returnModel = await _userService.Login(loginUser.UserName, loginUser.Password);
if (returnModel.IsSuccess)
@@ -160,12 +171,24 @@ namespace IRaCIS.Api.Controllers
returnModel.Data.JWTStr = _tokenService.GetToken(IRaCISClaims.Create(returnModel.Data.BasicInfo));
// 创建一个 CookieOptions 对象,用于设置 Cookie 的属性
var option = new CookieOptions
{
Expires = DateTime.Now.AddMonths(1), // 设置过期时间为 30 分钟之后
HttpOnly = false, // 确保 cookie 只能通过 HTTP 访问
SameSite = Microsoft.AspNetCore.Http.SameSiteMode.None, // 设置 SameSite 属性
Secure = false // 确保 cookie 只能通过 HTTPS 访问
};
HttpContext.Response.Cookies.Append("access_token", returnModel.Data.JWTStr, option);
}
var userId = returnModel.Data.BasicInfo.Id.ToString();
//provider.Set(userId, userId, TimeSpan.FromMinutes(AppSettings.LoginExpiredTimeSpan));
await provider.SetAsync(userId.ToString(), returnModel.Data.JWTStr, TimeSpan.FromDays(7));
// 验证阅片休息时间
await readingImageTaskService.ResetReadingRestTime(returnModel.Data.BasicInfo.Id);
await provider.SetAsync(userId.ToString(), returnModel.Data.JWTStr, TimeSpan.FromDays(7));
return returnModel;
}
@@ -190,7 +213,106 @@ namespace IRaCIS.Api.Controllers
return ResponseOutput.Ok("/showdicom?studyId=f7b67793-8155-0223-2f15-118f2642efb8&type=Share&token=" + token);
}
[HttpGet("user/GetObjectStoreToken")]
public IResponseOutput GetObjectStoreToken([FromServices] IOptionsMonitor<ObjectStoreServiceOptions> options)
{
var serviceOption = options.CurrentValue;
if (Enum.TryParse<ObjectStoreUse>(serviceOption.ObjectStoreUse, out var parsedEnum) && parsedEnum == ObjectStoreUse.AliyunOSS)
{
var ossOptions = serviceOption.AliyunOSS;
return ResponseOutput.Ok(new ObjectStoreDTO() { ObjectStoreUse = serviceOption.ObjectStoreUse, MinIO = serviceOption.MinIO ,AliyunOSS= serviceOption.AliyunOSS,AWS=serviceOption.AWS });
#region token
//IClientProfile profile = DefaultProfile.GetProfile(ossOptions.RegionId, ossOptions.AccessKeyId, ossOptions.AccessKeySecret);
//DefaultAcsClient client = new DefaultAcsClient(profile);
//// 创建一个STS请求
//AssumeRoleRequest request = new AssumeRoleRequest
//{
// RoleArn = ossOptions.RoleArn, // 角色ARN,需要替换为你的角色ARN
// RoleSessionName = $"session-name-{NewId.NextGuid()}", // 角色会话名称,可自定义
// DurationSeconds = 900, // 令牌有效期(单位:秒),这里设置为1小时
//};
//AssumeRoleResponse response = client.GetAcsResponse(request);
//// 返回STS令牌信息给前端
//var stsToken = new ObjectStoreDTO()
//{
// ObjectStoreUse = serviceOption.ObjectStoreUse,
// AliyunOSS = new AliyunOSSTempToken()
// {
// AccessKeyId = response.Credentials.AccessKeyId,
// AccessKeySecret = response.Credentials.AccessKeySecret,
// SecurityToken = response.Credentials.SecurityToken,
// Expiration = response.Credentials.Expiration,
// Region = ossOptions.Region,
// BucketName = ossOptions.BucketName,
// ViewEndpoint = ossOptions.ViewEndpoint,
// },
// MinIO = serviceOption.MinIO
//};
//return ResponseOutput.Ok(stsToken);
#endregion
}
else if(Enum.TryParse<ObjectStoreUse>(serviceOption.ObjectStoreUse, out var parsedValue) && parsedValue == ObjectStoreUse.MinIO)
{
return ResponseOutput.Ok(new ObjectStoreDTO() { ObjectStoreUse=serviceOption.ObjectStoreUse,MinIO=serviceOption.MinIO, AWS = serviceOption.AWS });
}
else
{
return ResponseOutput.Ok(new ObjectStoreDTO() { ObjectStoreUse = serviceOption.ObjectStoreUse, MinIO = serviceOption.MinIO, AWS = serviceOption.AWS });
}
}
[HttpGet("user/GenerateSTS")]
public IResponseOutput GenerateSTS([FromServices]IOptionsMonitor<AliyunOSSOptions> options )
{
var ossOptions = options.CurrentValue;
IClientProfile profile = DefaultProfile.GetProfile(ossOptions.regionId, ossOptions.accessKeyId, ossOptions.accessKeySecret);
DefaultAcsClient client = new DefaultAcsClient(profile);
// 创建一个STS请求
AssumeRoleRequest request = new AssumeRoleRequest
{
RoleArn = ossOptions.roleArn, // 角色ARN,需要替换为你的角色ARN
RoleSessionName = $"session-name-{NewId.NextGuid()}", // 角色会话名称,可自定义
DurationSeconds = 900, // 令牌有效期(单位:秒),这里设置为1小时
};
AssumeRoleResponse response = client.GetAcsResponse(request);
// 返回STS令牌信息给前端
var stsToken = new
{
AccessKeyId = response.Credentials.AccessKeyId,
AccessKeySecret = response.Credentials.AccessKeySecret,
SecurityToken = response.Credentials.SecurityToken,
Expiration = response.Credentials.Expiration,
Region = ossOptions.region ,
BucketName = ossOptions.bucketName ,
ViewEndpoint = ossOptions.viewEndpoint ,
};
return ResponseOutput.Ok(stsToken);
}
@@ -205,6 +327,8 @@ namespace IRaCIS.Api.Controllers
var token = decodeUrl.Substring(decodeUrl.IndexOf("access_token=") + "access_token=".Length);
var lang = decodeUrl.Substring(decodeUrl.IndexOf("lang=") + "lang=".Length, 2);
var domainStrList = decodeUrl.Split("/").ToList().Take(3).ToList();
var errorUrl = domainStrList[0]+"//"+ domainStrList[2]+ "/error";
@@ -212,7 +336,7 @@ namespace IRaCIS.Api.Controllers
if (!await _userRepository.AnyAsync(t => t.Id == Guid.Parse(userId) && t.EmailToken == token && t.IsFirstAdd))
{
decodeUrl = errorUrl+ $"?ErrorMessage={System.Web.HttpUtility.UrlEncode("")} ";
decodeUrl = errorUrl+ $"?lang={lang}&ErrorMessage={System.Web.HttpUtility.UrlEncode(lang=="zh"? "": "ErrorThe initialization link has expired. Return")} ";
}
return Redirect(decodeUrl);
@@ -52,7 +52,7 @@ namespace IRaCIS.Core.API.Controllers.Special
/// <param name="param"></param>
/// <returns>新记录Id</returns>
[HttpPost, Route("trial/addOrUpdateTrial")]
[Authorize(Policy = IRaCISPolicy.PM_APM)]
//[Authorize(Policy = IRaCISPolicy.PM_APM)]
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AddOrUpdateTrial", "BeforeOngoingCantOpt", "AfterStopCannNotOpt" })]
public async Task<IResponseOutput<Trial>> AddOrUpdateTrial(TrialCommand param)
@@ -11,6 +11,7 @@ using IRaCIS.Core.Application.Service;
using IRaCIS.Core.Application.Service.Inspection.DTO;
using IRaCIS.Core.Application.Service.Inspection.Interface;
using IRaCIS.Core.Application.Service.Reading.Dto;
using IRaCIS.Core.Application.Service.Reading.Interface;
using IRaCIS.Core.Application.ViewModel;
using IRaCIS.Core.Domain.Models;
using IRaCIS.Core.Domain.Share;
@@ -36,6 +37,7 @@ namespace IRaCIS.Core.API.Controllers
private readonly IHttpContextAccessor _httpContext;
private readonly ITrialConfigService _trialConfigService;
private readonly INoneDicomStudyService _noneDicomStudyService;
private readonly IClinicalAnswerService _clinicalAnswerService;
private readonly ISubjectService _subjectService;
private readonly IReadingClinicalDataService _readingClinicalDataService;
private readonly ISubjectVisitService _subjectVisitService;
@@ -62,6 +64,7 @@ namespace IRaCIS.Core.API.Controllers
IReadingMedicineQuestionService readingMedicineQuestionService,
ITrialConfigService _trialConfigService,
INoneDicomStudyService noneDicomStudyService,
IClinicalAnswerService clinicalAnswerService,
ISubjectService _subjectService,
IReadingClinicalDataService _readingClinicalDataService,
ISubjectVisitService subjectVisitService,
@@ -82,6 +85,7 @@ namespace IRaCIS.Core.API.Controllers
this._httpContext = httpContext;
this._trialConfigService = _trialConfigService;
this._noneDicomStudyService = noneDicomStudyService;
this._clinicalAnswerService = clinicalAnswerService;
this._subjectService = _subjectService;
this._readingClinicalDataService = _readingClinicalDataService;
this._subjectVisitService = subjectVisitService;
@@ -233,6 +237,94 @@ namespace IRaCIS.Core.API.Controllers
}
/// <summary>
/// CRC签名临床数据
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/ClinicalAnswer/CRCSignClinicalData")]
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
[UnitOfWork]
public async Task<IResponseOutput> CRCSignClinicalData(DataInspectionDto<CRCSignClinicalDataInDto> opt)
{
var singid = await _inspectionService.RecordSing(opt.SignInfo);
var result = await _clinicalAnswerService.CRCSignClinicalData(opt.Data);
await _inspectionService.CompletedSign(singid, result);
return result;
}
/// <summary>
/// CRC确认临床数据
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/ClinicalAnswer/CRCConfirmClinical")]
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
[UnitOfWork]
public async Task<IResponseOutput> CRCConfirmClinical(DataInspectionDto<CRCConfirmClinicalInDto> opt)
{
var singid = await _inspectionService.RecordSing(opt.SignInfo);
var result = await _clinicalAnswerService.CRCConfirmClinical(opt.Data);
await _inspectionService.CompletedSign(singid, result);
return result;
}
/// <summary>
/// CRC撤销临床数据
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/ClinicalAnswer/CRCCancelConfirmClinical")]
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
[UnitOfWork]
public async Task<IResponseOutput> CRCCancelConfirmClinical(DataInspectionDto<CRCCancelConfirmClinicalInDto> opt)
{
var singid = await _inspectionService.RecordSing(opt.SignInfo);
var result = await _clinicalAnswerService.CRCCancelConfirmClinical(opt.Data);
await _inspectionService.CompletedSign(singid, result);
return result;
}
/// <summary>
/// PM确认临床数据
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/ClinicalAnswer/PMConfirmClinical")]
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
[UnitOfWork]
public async Task<IResponseOutput> PMConfirmClinical(DataInspectionDto<CRCConfirmClinicalInDto> opt)
{
var singid = await _inspectionService.RecordSing(opt.SignInfo);
var result = await _clinicalAnswerService.PMConfirmClinical(opt.Data);
await _inspectionService.CompletedSign(singid, result);
return result;
}
/// <summary>
/// 提交结构化录入并签名
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/ClinicalAnswer/SubmitClinicalFormAndSign")]
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
[UnitOfWork]
public async Task<IResponseOutput> SubmitClinicalFormAndSign(DataInspectionDto<SubmitClinicalFormInDto> opt)
{
var singid = await _inspectionService.RecordSing(opt.SignInfo);
var result = await _clinicalAnswerService.SubmitClinicalForm(opt.Data);
await _inspectionService.CompletedSign(singid, result);
return result;
}
/// <summary>
/// 提交阅片裁判问题
/// </summary>
@@ -327,13 +419,30 @@ namespace IRaCIS.Core.API.Controllers
}
/// <summary>
/// 重置并同步项目阅片标准
/// </summary>
/// <returns></returns>
[HttpPost, Route("Inspection/ReadingCriterion/ResetAndAsyncCriterion")]
[UnitOfWork]
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
/// <summary>
/// CRC RequestToQC 批量提交
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/QCOperation/CRCRequestToQC")]
public async Task<IResponseOutput> ResetAndAsyncCriterion(DataInspectionDto<ResetAndAsyncCriterionInDto> opt)
{
var singid = await _inspectionService.RecordSing(opt.SignInfo);
var result = await _trialConfigService.ResetAndAsyncCriterion(opt.Data);
await _inspectionService.CompletedSign(singid, result);
return result;
}
/// <summary>
/// CRC RequestToQC 批量提交
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/QCOperation/CRCRequestToQC")]
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
[UnitOfWork]
public async Task<IResponseOutput> CRCRequestToQC(DataInspectionDto<CRCRequestToQCCommand> opt)
File diff suppressed because it is too large Load Diff
+16 -16
View File
@@ -1,16 +1,16 @@
// 使用的是proto3版本
// 使用的是proto3版本
syntax = "proto3";
// 定义命名空间,后续生成代码时就会生成对应的命名空间
// 定义命名空间,后续生成代码时就会生成对应的命名空间
option csharp_namespace = "gRPC.ZHiZHUN.AuthServer.protos";
/*
每一句需要用分号结尾
message 用来定义请求和返回数据格式
tag message后面的值数字代表是字段的标识(tag),不是赋值,
每一句需要用分号结尾
message 用来定义请求和返回数据格式
tag message后面的值数字代表是字段的标识(tag),不是赋值,
*/
// 新增用户时需要传递数据消息, 可理解为一个类
// 新增用户时需要传递数据消息, 可理解为一个类
message GetTokenReuqest{
string id=1;
string userName=2;
@@ -22,48 +22,48 @@ message GetTokenReuqest{
}
// 新增时返回的消息格式
// 新增时返回的消息格式
message GetTokenResponse {
int32 code=1;
string token =2;
}
// service 用标识定义服务的,里面写对应的方法
// service 用标识定义服务的,里面写对应的方法
service TokenGrpcService{
// 获取token
// 获取token
rpc GetUserToken(GetTokenReuqest) returns (GetTokenResponse);
}
/*
// 新增用户时需要传递数据消息, 可理解为一个类
// 新增用户时需要传递数据消息, 可理解为一个类
message AddUserReuqest{
string name=1;
int32 age=2;
bool isBoy=3;
}
// 新增时返回的消息格式
// 新增时返回的消息格式
message ResultResponse {
int32 code=1;
string msg =2;
}
//传递的查询条件信息格式,可理解为平时传入的查询条件对象
//传递的查询条件信息格式,可理解为平时传入的查询条件对象
message QueryUserReuqest{
string name=1;
}
//查询返回的用户信息格式,可理解为返回的类
//查询返回的用户信息格式,可理解为返回的类
message UserInfoResponse {
string name=1;
int32 age=2;
string gender=3;
}
// service 用标识定义服务的,里面写对应的方法
// service 用标识定义服务的,里面写对应的方法
service UserService{
// 新增用户
// 新增用户
rpc AddUser(AddUserReuqest) returns (ResultResponse);
// 查询用户
// 查询用户
rpc GetAllUser(QueryUserReuqest) returns (UserInfoResponse);
}
*/
Binary file not shown.
+22 -40
View File
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
<SignAssembly>false</SignAssembly>
<UserSecretsId>354572d4-9e15-4099-807c-63a2d29ff9f2</UserSecretsId>
<LangVersion>default</LangVersion>
@@ -14,7 +14,7 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DocumentationFile>.\IRaCIS.Core.API.xml</DocumentationFile>
<NoWarn>1701;1702;1591;</NoWarn>
<NoWarn>1701;1702;1591;1570;</NoWarn>
<OutputPath>..\bin\</OutputPath>
</PropertyGroup>
@@ -24,12 +24,7 @@
<NoWarn>1701;1702;1591</NoWarn>
</PropertyGroup>
<ItemGroup>
<Compile Remove="wwwroot\**" />
<EmbeddedResource Remove="UploadFile\**" />
<EmbeddedResource Remove="wwwroot\**" />
</ItemGroup>
<ItemGroup>
<Content Remove="web.config" />
@@ -66,31 +61,27 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="AspNetCoreRateLimit" Version="4.0.2" />
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="12.0.0" />
<PackageReference Include="EasyCaching.InMemory" Version="1.7.0" />
<PackageReference Include="EasyCaching.Interceptor.Castle" Version="1.7.0" />
<PackageReference Include="EntityFrameworkCore.Triggered.Extensions" Version="3.2.1" />
<PackageReference Include="Google.Protobuf" Version="3.21.8" />
<PackageReference Include="Grpc.Net.Client" Version="2.49.0" />
<PackageReference Include="Grpc.Tools" Version="2.50.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Hangfire.Tags.SqlServer" Version="1.8.1" />
<PackageReference Include="aliyun-net-sdk-sts" Version="3.1.2" />
<PackageReference Include="AspNetCoreRateLimit" Version="5.0.0" />
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="9.0.0" />
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="12.0.1" />
<PackageReference Include="EasyCaching.Interceptor.Castle" Version="1.9.2" />
<PackageReference Include="EasyCaching.Serialization.MessagePack" Version="1.9.2">
<TreatAsUsed>true</TreatAsUsed>
</PackageReference>
<PackageReference Include="Hangfire.AspNetCore" Version="1.8.11" />
<PackageReference Include="Hangfire.Dashboard.BasicAuthorization" Version="1.0.2" />
<PackageReference Include="Hangfire.SqlServer" Version="1.8.11" />
<PackageReference Include="Invio.Extensions.Authentication.JwtBearer" Version="2.0.1" />
<PackageReference Include="LogDashboard" Version="1.4.8" />
<PackageReference Include="MediatR.Extensions.Microsoft.DependencyInjection" Version="11.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.10" />
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="6.0.1" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.17.0" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="6.0.10" />
<PackageReference Include="Serilog.AspNetCore" Version="6.0.1" />
<PackageReference Include="Serilog.Enrichers.ClientInfo" Version="1.2.0" />
<PackageReference Include="Serilog.Sinks.Email" Version="2.4.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="8.0.3" />
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="8.0.0" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.19.6" />
<PackageReference Include="Serilog.AspNetCore" Version="8.0.1" />
<PackageReference Include="Serilog.Enrichers.ClientInfo" Version="2.0.3" />
<PackageReference Include="Serilog.Sinks.Email" Version="3.0.0" />
<PackageReference Include="Serilog.Sinks.File" Version="5.0.0" />
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerUI" Version="6.4.0" />
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerUI" Version="6.5.0" />
</ItemGroup>
<ItemGroup>
@@ -103,9 +94,6 @@
</ItemGroup>
<ItemGroup>
<Content Update="NLog.config">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="wwwroot\EmailTemplate\AdminAddUser_US.html">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
@@ -115,12 +103,6 @@
<Content Update="wwwroot\EmailTemplate\AdminResetUser.html">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="wwwroot\EmailTemplate\EmailConfigTest_US.html">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="wwwroot\EmailTemplate\EmailConfigTest.html">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="wwwroot\EmailTemplate\SubjectEnrollConfirmOrPDProgress_US.html">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
@@ -172,7 +154,7 @@
<Folder Include="Properties\PublishProfiles\" />
</ItemGroup>
<ProjectExtensions><VisualStudio><UserProperties anonymizetagsetting_1json__JsonSchema="http://json.schemastore.org/jovo-language-model" properties_4launchsettings_1json__JsonSchema="" /></VisualStudio></ProjectExtensions>
<ProjectExtensions><VisualStudio><UserProperties properties_4launchsettings_1json__JsonSchema="" /></VisualStudio></ProjectExtensions>
</Project>
+93 -219
View File
@@ -29,7 +29,7 @@
<param name="doctorId"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Api.Controllers.ExtraController.Login(IRaCIS.Application.Contracts.UserLoginDTO,EasyCaching.Core.IEasyCachingProvider,IRaCIS.Application.Services.IUserService,IRaCIS.Core.Application.Auth.ITokenService,Microsoft.Extensions.Configuration.IConfiguration)">
<member name="M:IRaCIS.Api.Controllers.ExtraController.Login(IRaCIS.Application.Contracts.UserLoginDTO,EasyCaching.Core.IEasyCachingProvider,IRaCIS.Application.Services.IUserService,IRaCIS.Core.Application.Auth.ITokenService,IRaCIS.Core.Application.Contracts.IReadingImageTaskService,Microsoft.Extensions.Configuration.IConfiguration)">
<summary> 系统用户登录接口[New] </summary>
</member>
<member name="M:IRaCIS.Core.API.Controllers.Special.FinancialChangeController.AddOrUpdateTrialInspection(IRaCIS.Core.Application.Service.Inspection.DTO.DataInspectionDto{IRaCIS.Application.Contracts.TrialCommand})">
@@ -139,6 +139,41 @@
<param name="opt"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.API.Controllers.InspectionController.CRCSignClinicalData(IRaCIS.Core.Application.Service.Inspection.DTO.DataInspectionDto{IRaCIS.Core.Application.Service.Reading.Dto.CRCSignClinicalDataInDto})">
<summary>
CRC签名临床数据
</summary>
<param name="opt"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.API.Controllers.InspectionController.CRCConfirmClinical(IRaCIS.Core.Application.Service.Inspection.DTO.DataInspectionDto{IRaCIS.Core.Application.Service.Reading.Dto.CRCConfirmClinicalInDto})">
<summary>
CRC确认临床数据
</summary>
<param name="opt"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.API.Controllers.InspectionController.CRCCancelConfirmClinical(IRaCIS.Core.Application.Service.Inspection.DTO.DataInspectionDto{IRaCIS.Core.Application.Service.Reading.Dto.CRCCancelConfirmClinicalInDto})">
<summary>
CRC撤销临床数据
</summary>
<param name="opt"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.API.Controllers.InspectionController.PMConfirmClinical(IRaCIS.Core.Application.Service.Inspection.DTO.DataInspectionDto{IRaCIS.Core.Application.Service.Reading.Dto.CRCConfirmClinicalInDto})">
<summary>
PM确认临床数据
</summary>
<param name="opt"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.API.Controllers.InspectionController.SubmitClinicalFormAndSign(IRaCIS.Core.Application.Service.Inspection.DTO.DataInspectionDto{IRaCIS.Core.Application.Service.Reading.Dto.SubmitClinicalFormInDto})">
<summary>
提交结构化录入并签名
</summary>
<param name="opt"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.API.Controllers.InspectionController.SubmitJudgeVisitTaskResult(IRaCIS.Core.Application.Service.Inspection.DTO.DataInspectionDto{IRaCIS.Core.Application.Service.Reading.Dto.SaveJudgeVisitTaskResult})">
<summary>
提交阅片裁判问题
@@ -173,6 +208,12 @@
</summary>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.API.Controllers.InspectionController.ResetAndAsyncCriterion(IRaCIS.Core.Application.Service.Inspection.DTO.DataInspectionDto{IRaCIS.Core.Application.Service.Reading.Dto.ResetAndAsyncCriterionInDto})">
<summary>
重置并同步项目阅片标准
</summary>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.API.Controllers.InspectionController.CRCRequestToQC(IRaCIS.Core.Application.Service.Inspection.DTO.DataInspectionDto{IRaCIS.Core.Application.Contracts.CRCRequestToQCCommand})">
<summary>
CRC RequestToQC 批量提交
@@ -233,95 +274,49 @@
<member name="M:IRaCIS.Core.API.Controllers.StudyController.ArchiveStudyNew(System.Guid,System.Guid,System.String,System.Nullable{System.Guid},System.Guid,Microsoft.Extensions.Logging.ILogger{IRaCIS.Core.API.Controllers.UploadDownLoadController},EasyCaching.Core.IEasyCachingProvider,IRaCIS.Core.Application.Contracts.IStudyService,Microsoft.AspNetCore.SignalR.IHubContext{IRaCIS.Core.API.UploadHub,IRaCIS.Core.API.IUploadClient},IRaCIS.Core.Application.Contracts.Dicom.IDicomArchiveService,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.StudyMonitor})">
<summary>Dicom 归档</summary>
</member>
<member name="M:IRaCIS.Core.API.Controllers.StudyController.UploadVisitClinicalData(System.Guid)">
<summary>
上传临床数据 多文件
</summary>
<param name="subjectVisitId"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.API.Controllers.StudyController.UploadClinicalTemplate(System.Nullable{System.Guid})">
<summary>
上传临床数据模板
</summary>
<param name="trialId"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.API.Controllers.StudyController.UploadReadClinicalData(System.Guid,System.Guid,System.Guid)">
<summary>
上传阅片临床数据
</summary>
<param name="trialId"></param>
<param name="subjectId"></param>
<param name="readingId"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.API.Controllers.StudyController.UploadPrintscreen(System.Guid)">
<summary>
上传截图
</summary>
<param name="subjectId"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.API.Controllers.StudyController.UploadReadingAnswerImage(System.Guid,System.Guid)">
<summary>
上传Reading问题的图像
</summary>
<param name="trialId"></param>
<param name="visitTaskId"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.API.Controllers.StudyController.UploadJudgeTaskImage(System.Guid,System.Guid)">
<summary>
上传裁判任务的图像
</summary>
<param name="trialId"></param>
<param name="visitTaskId"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.API.Controllers.StudyController.UploadMedicalReviewImage(System.Guid,System.Guid)">
<summary>
上传医学审核图片
</summary>
<param name="trialId"></param>
<param name="taskMedicalReviewId"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.API.Controllers.StudyController.UploadNoneDicomFile(Microsoft.AspNetCore.Http.IFormCollection,System.Guid,System.Guid,System.Guid,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.NoneDicomStudy},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.StudyMonitor})">
<member name="M:IRaCIS.Core.API.Controllers.StudyController.UploadNoneDicomFile(IRaCIS.Core.API.Controllers.StudyController.UploadNoneDicomFileCommand,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.NoneDicomStudy},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.StudyMonitor})">
<summary>
上传非Dicom 文件 支持压缩包 多文件上传
</summary>
<param name="formCollection"></param>
<param name="subjectVisitId"></param>
<param name="noneDicomStudyId"></param>
<param name="studyMonitorId"></param>
<param name="incommand"></param>
<param name="_noneDicomStudyRepository"></param>
<param name="_studyMonitorRepository"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.API.Controllers.StudyController.UploadVisitCheckExcel(System.Guid)">
<member name="M:IRaCIS.Core.API.Controllers.StudyController.UploadVisitCheckExcel(System.Guid,IRaCIS.Core.Application.Helper.IOSSService)">
<summary>
一致性核查 excel上传 支持三种格式
</summary>
<param name="trialId"></param>
<param name="oSSService"></param>
<returns></returns>
<exception cref="T:IRaCIS.Core.Infrastructure.BusinessValidationFailedException"></exception>
</member>
<member name="T:IRaCIS.Core.API.Controllers.FileController">
<summary>医生文件上传下载</summary>
</member>
<member name="M:IRaCIS.Core.API.Controllers.FileController.UploadOrdinaryFile(System.String,System.Guid)">
<member name="M:IRaCIS.Core.API.Controllers.FileController.GetOfficialResume(IRaCIS.Core.API.Controllers.GetDoctorPathCommand,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Attachment})">
<summary>
上传文件[FileUpload]
New 医生首页 多选 获取多个医生信息+文件路径列表 医生压缩包名称 doctorCode + "_" + doctorName _(时间戳或者随机的Guid)
</summary>
<param name="attachmentType">附件类型</param>
<param name="doctorId">医生Id</param>
<returns>返回文件信息</returns>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.API.Controllers.FileController.UploadNonDoctorFile(System.String)">
<member name="M:IRaCIS.Core.API.Controllers.FileController.GetTrialDoctorOfficialResume(IRaCIS.Core.API.Controllers.GetDoctorPathCommand,IRaCIS.Application.Interfaces.IDoctorService,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Attachment})">
<summary>
上传文件( 不是医生个人的文件)[FileUpload]
例如:阅片章程等
New 项目入组 勾选获取简历路径
</summary>
<param name="type">文件类型</param>
<param name="command"></param>
<param name="_doctorService"></param>
<param name="_attachmentrepository"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.API.Controllers.FileController.GetDoctorAttachment(IRaCIS.Core.API.Controllers.GetDoctoreAttachPathCommand,IRaCIS.Application.Interfaces.IDoctorService,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Attachment})">
<summary>
new 医生详情 勾选或者下载文件路径
</summary>
<param name="command"></param>
<param name="_doctorService"></param>
<param name="_attachmentrepository"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.API.Controllers.FileController.DownloadAttachment(System.Guid[])">
@@ -331,14 +326,6 @@
<param name="doctorIds"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.API.Controllers.FileController.DownloadOfficialResume(System.Int32,System.Guid[])">
<summary>
下载医生官方简历
</summary>
<param name="language"></param>
<param name="doctorIds"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.API.Controllers.FileController.DownloadAttachmentById(System.Guid,System.Guid[])">
<summary>
下载指定医生的指定附件
@@ -347,50 +334,35 @@
<param name="attachmentIds">要下载的附件Id</param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.API.Controllers.UploadDownLoadController.LocalFilePreview(System.String)">
<summary> 缩略图 </summary>
<member name="M:IRaCIS.Core.API.Controllers.FileController.DownloadOfficialResume(System.Int32,System.Guid[])">
<summary>
下载医生官方简历 首页 区分 中文和英文
</summary>
<param name="language"></param>
<param name="doctorIds"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.API.Controllers.FileController.DownloadResume(System.Int32,System.Guid,System.Guid[])">
<summary>
入组 项目下载简历
</summary>
<param name="language"></param>
<param name="trialId"></param>
<param name="doctorIdArray"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.API.Controllers.UploadDownLoadController.DownloadCommonFile(System.String,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.CommonDocument})">
<summary> 通用文件下载 </summary>
</member>
<member name="M:IRaCIS.Core.API.Controllers.UploadDownLoadController.DownloadTrialClinicalFile(System.Guid,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ClinicalDataTrialSet})">
<summary>
下载项目临床数据文件
</summary>
<param name="clinicalDataTrialSetId"></param>
<param name="_clinicalDataTrialSetRepository"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.API.Controllers.UploadDownLoadController.DownloadSystemClinicalFile(System.Guid,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ClinicalDataSystemSet})">
<summary>
下载系统临床数据文件
</summary>
<param name="clinicalDataSystemSetId"></param>
<param name="_clinicalDataSystemSetRepository"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.API.Controllers.UploadDownLoadController.UploadTrialDoc(System.Guid)">
<summary>
上传项目签名文档
</summary>
<param name="trialId"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.API.Controllers.UploadDownLoadController.UploadSysTemDoc">
<summary>
上传系统签名文档
</summary>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.API.Controllers.UploadDownLoadController.UploadCommonDoc">
<summary>
上传通用文档 比如一致性核查的 比如导出的excel 模板
</summary>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.API.Controllers.UploadDownLoadController.UploadSystemNoticeDoc">
<member name="M:IRaCIS.Core.API.Controllers.UploadDownLoadController.Upload(IRaCIS.Core.API.Controllers.UploadDownLoadController.UploadFileType)">
<summary>
上传系统通知文档
1:数据上传 2:导出、 3:邮件附件 4:邮件Html 通过 ----new
</summary>
<returns></returns>
</member>
@@ -399,6 +371,11 @@
IPLimit限流 启动服务
</summary>
</member>
<member name="T:IRaCIS.Core.API.JSONTimeZoneConverter">
<summary>
序列化,反序列化的时候,处理时间 时区转换
</summary>
</member>
<member name="M:IRaCIS.Core.API.NullToEmptyStringResolver.CreateProperties(System.Type,Newtonsoft.Json.MemberSerialization)">
<summary>
创建属性
@@ -414,6 +391,11 @@
<param name="httpContext"></param>
<returns></returns>
</member>
<member name="T:TimeZoneAdjustmentMiddleware">
<summary>
废弃,没用
</summary>
</member>
<member name="T:ZhaoXi._001.NET5Demo.Practice.WebApi.Utility.Jwt.CustomHSJWTService">
<summary>
对称可逆加密
@@ -449,113 +431,5 @@
<param name="withPrivate"></param>
<returns></returns>
</member>
<member name="T:gRPC.ZHiZHUN.AuthServer.protos.GrpcTokenReflection">
<summary>Holder for reflection information generated from Protos/GrpcToken.proto</summary>
</member>
<member name="P:gRPC.ZHiZHUN.AuthServer.protos.GrpcTokenReflection.Descriptor">
<summary>File descriptor for Protos/GrpcToken.proto</summary>
</member>
<member name="T:gRPC.ZHiZHUN.AuthServer.protos.GetTokenReuqest">
<summary>
新增用户时需要传递数据消息, 可理解为一个类
</summary>
</member>
<member name="F:gRPC.ZHiZHUN.AuthServer.protos.GetTokenReuqest.IdFieldNumber">
<summary>Field number for the "id" field.</summary>
</member>
<member name="F:gRPC.ZHiZHUN.AuthServer.protos.GetTokenReuqest.UserNameFieldNumber">
<summary>Field number for the "userName" field.</summary>
</member>
<member name="F:gRPC.ZHiZHUN.AuthServer.protos.GetTokenReuqest.RealNameFieldNumber">
<summary>Field number for the "realName" field.</summary>
</member>
<member name="F:gRPC.ZHiZHUN.AuthServer.protos.GetTokenReuqest.ReviewerCodeFieldNumber">
<summary>Field number for the "reviewerCode" field.</summary>
</member>
<member name="F:gRPC.ZHiZHUN.AuthServer.protos.GetTokenReuqest.UserTypeEnumIntFieldNumber">
<summary>Field number for the "userTypeEnumInt" field.</summary>
</member>
<member name="F:gRPC.ZHiZHUN.AuthServer.protos.GetTokenReuqest.UserTypeShortNameFieldNumber">
<summary>Field number for the "userTypeShortName" field.</summary>
</member>
<member name="F:gRPC.ZHiZHUN.AuthServer.protos.GetTokenReuqest.IsAdminFieldNumber">
<summary>Field number for the "isAdmin" field.</summary>
</member>
<member name="T:gRPC.ZHiZHUN.AuthServer.protos.GetTokenResponse">
<summary>
新增时返回的消息格式
</summary>
</member>
<member name="F:gRPC.ZHiZHUN.AuthServer.protos.GetTokenResponse.CodeFieldNumber">
<summary>Field number for the "code" field.</summary>
</member>
<member name="F:gRPC.ZHiZHUN.AuthServer.protos.GetTokenResponse.TokenFieldNumber">
<summary>Field number for the "token" field.</summary>
</member>
<member name="T:gRPC.ZHiZHUN.AuthServer.protos.TokenGrpcService">
<summary>
service 用标识定义服务的,里面写对应的方法
</summary>
</member>
<member name="P:gRPC.ZHiZHUN.AuthServer.protos.TokenGrpcService.Descriptor">
<summary>Service descriptor</summary>
</member>
<member name="T:gRPC.ZHiZHUN.AuthServer.protos.TokenGrpcService.TokenGrpcServiceClient">
<summary>Client for TokenGrpcService</summary>
</member>
<member name="M:gRPC.ZHiZHUN.AuthServer.protos.TokenGrpcService.TokenGrpcServiceClient.#ctor(Grpc.Core.ChannelBase)">
<summary>Creates a new client for TokenGrpcService</summary>
<param name="channel">The channel to use to make remote calls.</param>
</member>
<member name="M:gRPC.ZHiZHUN.AuthServer.protos.TokenGrpcService.TokenGrpcServiceClient.#ctor(Grpc.Core.CallInvoker)">
<summary>Creates a new client for TokenGrpcService that uses a custom <c>CallInvoker</c>.</summary>
<param name="callInvoker">The callInvoker to use to make remote calls.</param>
</member>
<member name="M:gRPC.ZHiZHUN.AuthServer.protos.TokenGrpcService.TokenGrpcServiceClient.#ctor">
<summary>Protected parameterless constructor to allow creation of test doubles.</summary>
</member>
<member name="M:gRPC.ZHiZHUN.AuthServer.protos.TokenGrpcService.TokenGrpcServiceClient.#ctor(Grpc.Core.ClientBase.ClientBaseConfiguration)">
<summary>Protected constructor to allow creation of configured clients.</summary>
<param name="configuration">The client configuration.</param>
</member>
<member name="M:gRPC.ZHiZHUN.AuthServer.protos.TokenGrpcService.TokenGrpcServiceClient.GetUserToken(gRPC.ZHiZHUN.AuthServer.protos.GetTokenReuqest,Grpc.Core.Metadata,System.Nullable{System.DateTime},System.Threading.CancellationToken)">
<summary>
获取token
</summary>
<param name="request">The request to send to the server.</param>
<param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
<param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
<param name="cancellationToken">An optional token for canceling the call.</param>
<returns>The response received from the server.</returns>
</member>
<member name="M:gRPC.ZHiZHUN.AuthServer.protos.TokenGrpcService.TokenGrpcServiceClient.GetUserToken(gRPC.ZHiZHUN.AuthServer.protos.GetTokenReuqest,Grpc.Core.CallOptions)">
<summary>
获取token
</summary>
<param name="request">The request to send to the server.</param>
<param name="options">The options for the call.</param>
<returns>The response received from the server.</returns>
</member>
<member name="M:gRPC.ZHiZHUN.AuthServer.protos.TokenGrpcService.TokenGrpcServiceClient.GetUserTokenAsync(gRPC.ZHiZHUN.AuthServer.protos.GetTokenReuqest,Grpc.Core.Metadata,System.Nullable{System.DateTime},System.Threading.CancellationToken)">
<summary>
获取token
</summary>
<param name="request">The request to send to the server.</param>
<param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
<param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
<param name="cancellationToken">An optional token for canceling the call.</param>
<returns>The call object.</returns>
</member>
<member name="M:gRPC.ZHiZHUN.AuthServer.protos.TokenGrpcService.TokenGrpcServiceClient.GetUserTokenAsync(gRPC.ZHiZHUN.AuthServer.protos.GetTokenReuqest,Grpc.Core.CallOptions)">
<summary>
获取token
</summary>
<param name="request">The request to send to the server.</param>
<param name="options">The options for the call.</param>
<returns>The call object.</returns>
</member>
<member name="M:gRPC.ZHiZHUN.AuthServer.protos.TokenGrpcService.TokenGrpcServiceClient.NewInstance(Grpc.Core.ClientBase.ClientBaseConfiguration)">
<summary>Creates a new instance of client from given <c>ClientBaseConfiguration</c>.</summary>
</member>
</members>
</doc>
@@ -0,0 +1,118 @@
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading.Tasks;
/// <summary>
/// 废弃,没用
/// </summary>
public class TimeZoneAdjustmentMiddleware
{
private readonly RequestDelegate _next;
public TimeZoneAdjustmentMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context)
{
if (string.IsNullOrEmpty(context.Request.ContentType))
{
// 请求没有内容体,可能是一个没有请求体的请求,比如 GET 请求
await _next(context);
return;
}
var timeZoneId = "Asia/Shanghai"; // 客户端默认时区
var timeZoneIdHeaderValue = context.Request.Headers["TimeZoneId"];
if (!string.IsNullOrEmpty(timeZoneIdHeaderValue))
{
timeZoneId = timeZoneIdHeaderValue;
}
var timeZone = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId);
// 处理 JSON 请求体中的时间字段
if (context.Request.ContentType.StartsWith("application/json"))
{
var requestBody = await new StreamReader(context.Request.Body).ReadToEndAsync();
// 使用 JSON.NET 或 System.Text.Json 解析 JSON 请求体
// 假设请求体中有一个名为 "dateTime" 的时间字段
dynamic jsonData = JsonConvert.DeserializeObject(requestBody);
if (jsonData.dateTime != null)
{
if (DateTime.TryParse((string)jsonData.dateTime, out DateTime dateTime))
{
// 将 JSON 请求体中的时间字段转换为服务器时区的时间
var serverTime = TimeZoneInfo.ConvertTime(dateTime, timeZone);
jsonData.dateTime = serverTime;
}
}
// 将修改后的 JSON 请求体重新写入请求流中
var jsonBytes = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(jsonData));
context.Request.Body = new MemoryStream(jsonBytes);
context.Request.ContentLength = jsonBytes.Length;
}
// 处理 URL 表单参数
var modifiedQuery = new Dictionary<string, StringValues>();
foreach (var key in context.Request.Query.Keys)
{
if (DateTime.TryParse(context.Request.Query[key], out DateTime dateTime))
{
// 将 URL 表单参数中的时间转换为服务器时区的时间
var serverTime = TimeZoneInfo.ConvertTime(dateTime, timeZone);
modifiedQuery[key] = new StringValues(serverTime.ToString());
}
else
{
modifiedQuery[key] = context.Request.Query[key];
}
}
context.Request.Query = new QueryCollection(modifiedQuery);
// 处理Form请求体中的参数
if (context.Request.HasFormContentType)
{
var modifiedForm = new Dictionary<string, StringValues>();
foreach (var key in context.Request.Form.Keys)
{
if (DateTime.TryParse(context.Request.Form[key], out DateTime dateTime))
{
// 将请求体中的时间转换为服务器时区的时间
var serverTime = TimeZoneInfo.ConvertTime(dateTime, timeZone);
modifiedForm[key] = new StringValues(serverTime.ToString());
}
else
{
modifiedForm[key] = context.Request.Form[key];
}
}
var newFormCollection = new FormCollection(modifiedForm);
// 将新的表单集合设置回请求对象
context.Request.Form = newFormCollection;
}
await _next(context);
}
}
-18
View File
@@ -1,18 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
autoReload="true"
throwExceptions="false"
internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">
<variable name="myvar" value="myvalue"/>
<targets>
<target xsi:type="file" name="File" fileName="${basedir}/logs/${shortdate}/${level}.log"
layout="${longdate}||${level}||${logger}||${message}||${exception:format=ToString:innerFormat=ToString:maxInnerExceptionLevel=10:separator=\r\n}||end" />
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="file" />
</rules>
</nlog>
-157
View File
@@ -1,157 +0,0 @@
using System;
using Autofac.Extensions.DependencyInjection;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Configuration;
using Serilog;
using MediatR;
using IRaCIS.Core.Application.MediatR.Handlers;
using System.Threading.Tasks;
using MassTransit;
using MassTransit.NewIdProviders;
using System.IO;
using IRaCIS.Core.Domain.Share;
namespace IRaCIS.Core.API
{
public class Program
{
public readonly string environment;
public static async Task Main(string[] args)
{
try
{
//以配置文件为准,否则 从url中取环境值(服务以命令行传递参数启动,配置文件配置了就不需要传递环境参数)
var config = new ConfigurationBuilder()
.AddEnvironmentVariables()
.Build();
var enviromentName = config["ASPNETCORE_ENVIRONMENT"];
if (string.IsNullOrWhiteSpace(enviromentName))
{
var index = Array.IndexOf(args, "--env");
enviromentName = index > -1
? args[index + 1]
: "Development";
}
//Dicom 浏览
//ImageManager.SetImplementation(WinFormsImageManager.Instance);
var host = CreateHostBuilder(args)
.UseEnvironment(enviromentName) //命令行传入环境
.ConfigureAppConfiguration((hostContext, config) =>
{
//Console.WriteLine(hostContext.HostingEnvironment.EnvironmentName);
config.AddJsonFile("appsettings.json", false, true)
.AddJsonFile($"appsettings.{enviromentName}.json", false, true);
})
.Build();
//// Serilog
SerilogExtension.AddSerilogSetup(enviromentName, host.Services);
Log.Logger.Warning($"当前环境:{enviromentName}");
NewId.SetProcessIdProvider(new CurrentProcessIdProvider());
//缓存项目的状态 匿名化数据
await InitCache(host);
WatchJsonFile(Path.Combine(AppContext.BaseDirectory, StaticData.Folder.Resources, StaticData.En_US_Json) );
WatchJsonFile(Path.Combine(AppContext.BaseDirectory, StaticData.Folder.Resources, StaticData.Zh_CN_Json));
host.Run();
}
catch (Exception e)
{
Log.Logger.Error(e.InnerException is null ? e.Message + e.StackTrace : e.InnerException?.Message + e.InnerException?.StackTrace);
}
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseWindowsService()
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.ConfigureKestrel((context, options) =>
{
//设置应用服务器Kestrel请求体最大为1GB // if don't set default value is: 30 MB
options.Limits.MaxRequestBodySize = long.MaxValue;
options.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(30);
options.Limits.RequestHeadersTimeout = TimeSpan.FromMinutes(20);
});
//webBuilder.UseSerilog();//在宿主机启动的时候配置serilog,与微软ILogger进行整合
webBuilder.UseStartup<Startup>();
}).UseSerilog()
.UseServiceProviderFactory(new AutofacServiceProviderFactory());
private static async Task InitCache(IHost host)
{
var _mediator = host.Services.GetService(typeof(IMediator)) as IMediator;
await _mediator.Send(new AnonymizeCacheRequest());
await _mediator.Send(new TrialStateCacheRequest());
}
private static void LoadJsonFile(string filePath)
{
IConfigurationBuilder builder = new ConfigurationBuilder()
.AddJsonFile(filePath);
IConfigurationRoot enConfiguration = builder.Build();
foreach (IConfigurationSection section in enConfiguration.GetChildren())
{
if (filePath.Contains(StaticData.En_US_Json) )
{
StaticData.En_US_Dic[section.Key] = section.Value;
}
else
{
StaticData.Zh_CN_Dic[section.Key] = section.Value;
}
}
}
public static void WatchJsonFile(string filePath)
{
LoadJsonFile(filePath);
FileSystemWatcher watcher = new FileSystemWatcher(Path.GetDirectoryName(filePath), Path.GetFileName(filePath));
watcher.Changed += (sender, e) => LoadJsonFile(filePath);
watcher.EnableRaisingEvents = true;
}
}
}
+311
View File
@@ -0,0 +1,311 @@
using System;
using Autofac.Extensions.DependencyInjection;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Configuration;
using Serilog;
using MediatR;
using IRaCIS.Core.Application.MediatR.Handlers;
using System.Threading.Tasks;
using MassTransit;
using MassTransit.NewIdProviders;
using System.IO;
using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Infra.EFCore;
using IRaCIS.Core.Application.Helper;
using System.Runtime.InteropServices;
using Microsoft.AspNetCore.Builder;
using IRaCIS.Core.API;
using Autofac;
using Microsoft.AspNetCore.Http.Features;
using Microsoft.AspNetCore.SignalR;
using Microsoft.Extensions.DependencyInjection;
using IRaCIS.Core.Application.Filter;
using Microsoft.AspNetCore.HttpOverrides;
using IRaCIS.Application.Services.BackGroundJob;
using LogDashboard;
using OfficeOpenXml.Utils;
using FellowOakDicom.Network;
using IRaCIS.Core.Application.Service.ImageAndDoc;
#region
//以配置文件为准,否则 从url中取环境值(服务以命令行传递参数启动,配置文件配置了就不需要传递环境参数)
var config = new ConfigurationBuilder()
.AddEnvironmentVariables()
.Build();
var enviromentName = config["ASPNETCORE_ENVIRONMENT"];
if (string.IsNullOrWhiteSpace(enviromentName))
{
var index = Array.IndexOf(args, "--env");
enviromentName = index > -1
? args[index + 1]
: "Development";
}
#endregion
var builder = WebApplication.CreateBuilder(new WebApplicationOptions
{
EnvironmentName = enviromentName
});
#region windows
//foreach (var arg in args)
//{
// Console.WriteLine(arg);
//}
int urlsIndex = Array.FindIndex(args, arg => arg != null && arg.StartsWith("--urls"));
if (urlsIndex > -1)
{
var url = args[urlsIndex].Substring("--urls=".Length);
Console.WriteLine(url);
builder.WebHost.UseUrls(url);
}
#endregion
#region
NewId.SetProcessIdProvider(new CurrentProcessIdProvider());
builder.Configuration.AddJsonFile("appsettings.json", false, true)
.AddJsonFile($"appsettings.{enviromentName}.json", false, true);
builder.Host
.UseServiceProviderFactory(new AutofacServiceProviderFactory())
.ConfigureContainer<ContainerBuilder>(containerBuilder =>
{
containerBuilder.RegisterModule<AutofacModuleSetup>();
})
.UseWindowsService().UseSerilog();
#endregion
#region
var _configuration = builder.Configuration;
//健康检查
builder.Services.AddHealthChecks();
//本地化
builder.Services.AddJsonLocalization(options => options.ResourcesPath = "Resources");
// 异常、参数统一验证过滤器、Json序列化配置、字符串参数绑型统一Trim()
builder.Services.AddControllers(options =>
{
//options.Filters.Add<LogActionFilter>();
options.Filters.Add<ModelActionFilter>();
options.Filters.Add<ProjectExceptionFilter>();
options.Filters.Add<UnitOfWorkFilter>();
if (_configuration.GetSection("BasicSystemConfig").GetValue<bool>("OpenLoginLimit"))
{
options.Filters.Add<LimitUserRequestAuthorization>();
}
})
.AddNewtonsoftJsonSetup(builder.Services); // NewtonsoftJson 序列化 处理
builder.Services.AddOptions().Configure<SystemEmailSendConfig>(_configuration.GetSection("SystemEmailSendConfig"));
builder.Services.AddOptions().Configure<ServiceVerifyConfigOption>(_configuration.GetSection("BasicSystemConfig"));
builder.Services.AddOptions().Configure<AliyunOSSOptions>(_configuration.GetSection("AliyunOSS"));
builder.Services.AddOptions().Configure<ObjectStoreServiceOptions>(_configuration.GetSection("ObjectStoreService"));
//动态WebApi + UnifiedApiResultFilter 省掉控制器代码
builder.Services.AddDynamicWebApiSetup();
//AutoMapper
builder.Services.AddAutoMapperSetup();
//EF ORM QueryWithNoLock
builder.Services.AddEFSetup(_configuration);
//Http 响应压缩
builder.Services.AddResponseCompressionSetup();
//Swagger Api 文档
builder.Services.AddSwaggerSetup();
//JWT Token 验证
builder.Services.AddJWTAuthSetup(_configuration);
// MediatR 进程内消息 事件解耦 从程序集中 注册命令和handler对应关系
builder.Services.AddMediatR(cfg => cfg.RegisterServicesFromAssemblyContaining<ConsistencyVerificationHandler>());
// EasyCaching 缓存
builder.Services.AddEasyCachingSetup(_configuration);
// hangfire 定时任务框架 有界面,更友好~
builder.Services.AddhangfireSetup(_configuration);
//Serilog 日志可视化 LogDashboard日志
builder.Services.AddLogDashboardSetup();
builder.Services.AddJsonConfigSetup(_configuration);
//转发头设置 获取真实IP
builder.Services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders =
ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
});
//Dicom影像渲染图片 跨平台
builder.Services.AddDicomSetup();
// 实时应用
builder.Services.AddSignalR();
builder.Services.AddSingleton<IUserIdProvider, IRaCISUserIdProvider>();
#region
//builder.Services.AddMemoryCache();
////上传限制 配置
//builder.Services.Configure<FormOptions>(options =>
//{
// options.MultipartBodyLengthLimit = int.MaxValue;
// options.ValueCountLimit = int.MaxValue;
// options.ValueLengthLimit = int.MaxValue;
//});
//IP 限流 可设置白名单 或者黑名单
//services.AddIpPolicyRateLimitSetup(_configuration);
// 用户类型 策略授权
//services.AddAuthorizationPolicySetup(_configuration);
#endregion
#endregion
var app = builder.Build();
var env = app.Environment;
#region
// Configure the HTTP request pipeline.
//本地化
app.UseLocalization();
app.UseForwardedHeaders();
//响应压缩
app.UseResponseCompression();
//app.UseCors(t => t.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());
//不需要 token 访问的静态文件 wwwroot css, JavaScript, and images don't require authentication.
app.UseStaticFiles();
app.UseMiddleware<MultiDiskStaticFilesMiddleware>();
//LogDashboard
app.UseLogDashboard("/LogDashboard");
//hangfire
app.UseHangfireConfig(env);
////限流 中间件
//app.UseIpRateLimiting();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
//app.UseHsts();
}
// 特殊异常处理 比如 404
app.UseStatusCodePagesWithReExecute("/Error/{0}");
SwaggerSetup.Configure(app, env);
////serilog 记录请求的用户信息
app.UseSerilogConfig(env);
app.UseRouting();
app.UseCors(t => t.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());
//app.UseIRacisHostStaticFileStore(env);
app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();
app.MapHub<UploadHub>("/UploadHub");
app.MapHealthChecks("/health");
// Serilog
SerilogExtension.AddSerilogSetup(enviromentName, app.Services);
var hangfireJobService = app.Services.GetRequiredService<IIRaCISHangfireJob>();
await hangfireJobService.InitHangfireJobTaskAsync();
#endregion
try
{
#region
Log.Logger.Warning($"当前环境:{enviromentName}");
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
Log.Logger.Warning($"当前部署平台环境:windows");
}
else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
{
Log.Logger.Warning($"当前部署平台环境:linux");
}
else
{
Log.Logger.Warning($"当前部署平台环境:OSX or FreeBSD");
}
#endregion
Log.Logger.Warning($"ContentRootPath{env.ContentRootPath}");
string parentDirectory = Path.GetFullPath(Path.Combine(env.ContentRootPath, ".."));
Log.Logger.Warning($"ContentRootPath——parentDirectory{parentDirectory}");
//Log.Logger.Warning($"ContentRootPath——GetParent{Directory.GetParent(env.ContentRootPath).Parent.FullName}");
//Log.Logger.Warning($"ContentRootPath——xx{Path.GetDirectoryName(Path.GetDirectoryName(env.ContentRootPath))}");
var server = DicomServerFactory.Create<CStoreSCPService>(11112,userState: app.Services);
app.Run();
}
catch (Exception e)
{
Log.Logger.Error(e.InnerException is null ? e.Message + e.StackTrace : e.InnerException?.Message + e.InnerException?.StackTrace);
}
+21 -12
View File
@@ -13,46 +13,55 @@
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
"ASPNETCORE_ENVIRONMENT": "Test_IRC"
}
},
"IRaCIS.Development": {
"IRaCIS.Test_IRC": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
"ASPNETCORE_ENVIRONMENT": "Test_IRC"
},
"applicationUrl": "http://localhost:6100"
},
"IRaCIS.Event_IRC": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Event_IRC"
},
"applicationUrl": "http://localhost:6101"
},
"Docker": {
"commandName": "Docker",
"launchBrowser": true,
"launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}",
"publishAllPorts": true
},
"IRaCIS.Staging": {
"IRaCIS.Uat_IRC": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Staging"
"ASPNETCORE_ENVIRONMENT": "Uat_IRC"
},
"applicationUrl": "http://localhost:6200"
"applicationUrl": "http://localhost:6100"
},
"IRaCIS.Production": {
"IRaCIS.Prod_IRC": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Production"
"ASPNETCORE_ENVIRONMENT": "Prod_IRC"
},
"applicationUrl": "http://localhost:6300"
"applicationUrl": "http://localhost:6100"
},
"IRaCIS.CertificateApply": {
"IRaCIS.US_IRC": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "CertificateApply"
"ASPNETCORE_ENVIRONMENT": "US_IRC"
},
"applicationUrl": "http://localhost:6400"
"applicationUrl": "http://localhost:6100"
}
}
}
+16 -16
View File
@@ -1,16 +1,16 @@
// 使用的是proto3版本
// 使用的是proto3版本
syntax = "proto3";
// 定义命名空间,后续生成代码时就会生成对应的命名空间
// 定义命名空间,后续生成代码时就会生成对应的命名空间
option csharp_namespace = "gRPC.ZHiZHUN.AuthServer.protos";
/*
每一句需要用分号结尾
message 用来定义请求和返回数据格式
tag message后面的值数字代表是字段的标识(tag),不是赋值,
每一句需要用分号结尾
message 用来定义请求和返回数据格式
tag message后面的值数字代表是字段的标识(tag),不是赋值,
*/
// 新增用户时需要传递数据消息, 可理解为一个类
// 新增用户时需要传递数据消息, 可理解为一个类
message GetTokenReuqest{
string id=1;
string userName=2;
@@ -22,48 +22,48 @@ message GetTokenReuqest{
}
// 新增时返回的消息格式
// 新增时返回的消息格式
message GetTokenResponse {
int32 code=1;
string token =2;
}
// service 用标识定义服务的,里面写对应的方法
// service 用标识定义服务的,里面写对应的方法
service TokenGrpcService{
// 获取token
// 获取token
rpc GetUserToken(GetTokenReuqest) returns (GetTokenResponse);
}
/*
// 新增用户时需要传递数据消息, 可理解为一个类
// 新增用户时需要传递数据消息, 可理解为一个类
message AddUserReuqest{
string name=1;
int32 age=2;
bool isBoy=3;
}
// 新增时返回的消息格式
// 新增时返回的消息格式
message ResultResponse {
int32 code=1;
string msg =2;
}
//传递的查询条件信息格式,可理解为平时传入的查询条件对象
//传递的查询条件信息格式,可理解为平时传入的查询条件对象
message QueryUserReuqest{
string name=1;
}
//查询返回的用户信息格式,可理解为返回的类
//查询返回的用户信息格式,可理解为返回的类
message UserInfoResponse {
string name=1;
int32 age=2;
string gender=3;
}
// service 用标识定义服务的,里面写对应的方法
// service 用标识定义服务的,里面写对应的方法
service UserService{
// 新增用户
// 新增用户
rpc AddUser(AddUserReuqest) returns (ResultResponse);
// 查询用户
// 查询用户
rpc GetAllUser(QueryUserReuqest) returns (UserInfoResponse);
}
*/
-242
View File
@@ -1,242 +0,0 @@
using Autofac;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http.Features;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;
using IRaCIS.Core.Application.Filter;
using LogDashboard;
using MediatR;
using IRaCIS.Core.Application.MediatR.Handlers;
using Microsoft.Extensions.Logging;
using AspNetCoreRateLimit;
using Microsoft.AspNetCore.HttpOverrides;
using IRaCIS.Core.Infra.EFCore;
using System.Globalization;
using Microsoft.AspNetCore.Localization;
using Localization;
using Magicodes.ExporterAndImporter.Core.Filters;
using IRaCIS.Core.Application.MediatR.CommandAndQueries;
using IRaCIS.Core.Infra.EFCore.Common;
using Invio.Extensions.Authentication.JwtBearer;
using Microsoft.AspNetCore.SignalR;
using IRaCIS.Core.Domain.Share;
using Microsoft.AspNetCore.StaticFiles;
namespace IRaCIS.Core.API
{
public class Startup
{
public Startup(IConfiguration configuration)
{
_configuration = configuration;
}
public ILogger<Startup> _logger { get; }
public IConfiguration _configuration { get; }
//// ConfigureContainer is where you can register things directly
//// with Autofac. This runs after ConfigureServices so the things
//// here will override registrations made in ConfigureServices.
//// Don't build the container; that gets done for you by the factory.
// for castle
public void ConfigureContainer(ContainerBuilder containerBuilder)
{
containerBuilder.RegisterModule<AutofacModuleSetup>();
#region Test
//containerBuilder.RegisterType<ClinicalDataService>().PropertiesAutowired().InstancePerLifetimeScope();//注册仓储
//var container = containerBuilder.Build();
//// Now you can resolve services using Autofac. For example,
//// this line will execute the lambda expression registered
//// to the IConfigReader service.
//using (var scope = container.BeginLifetimeScope())
//{
// var reader = scope.Resolve<BaseService>();
// var test = scope.Resolve<ClinicalDataService>();
// var test2 = scope.Resolve<IClinicalDataService>();
// var test3 = scope.Resolve<IEFUnitOfWork<IRaCISDBContext>>();
//}
#endregion
}
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
//本地化
services.AddJsonLocalization(options => options.ResourcesPath = "Resources");
// 异常、参数统一验证过滤器、Json序列化配置、字符串参数绑型统一Trim()
services.AddControllers(options =>
{
//options.Filters.Add<LogActionFilter>();
options.Filters.Add<ModelActionFilter>();
options.Filters.Add<ProjectExceptionFilter>();
options.Filters.Add<UnitOfWorkFilter>();
if (_configuration.GetSection("BasicSystemConfig").GetValue<bool>("OpenLoginLimit"))
{
options.Filters.Add<LimitUserRequestAuthorization>();
}
})
.AddNewtonsoftJsonSetup(); // NewtonsoftJson 序列化 处理
services.AddOptions().Configure<SystemEmailSendConfig>( _configuration.GetSection("SystemEmailSendConfig"));
services.AddOptions().Configure<ServiceVerifyConfigOption>(_configuration.GetSection("BasicSystemConfig"));
//动态WebApi + UnifiedApiResultFilter 省掉控制器代码
services.AddDynamicWebApiSetup();
//AutoMapper
services.AddAutoMapperSetup();
//EF ORM QueryWithNoLock
services.AddEFSetup(_configuration);
//Http 响应压缩
services.AddResponseCompressionSetup();
//Swagger Api 文档
services.AddSwaggerSetup();
//JWT Token 验证
services.AddJWTAuthSetup(_configuration);
// MediatR 进程内消息 事件解耦 从程序集中 注册命令和handler对应关系
services.AddMediatR(typeof(ConsistencyVerificationHandler).Assembly);
// EasyCaching 缓存
services.AddEasyCachingSetup();
//services.AddDistributedMemoryCache();
// hangfire 定时任务框架 有界面,更友好~
services.AddhangfireSetup(_configuration);
// QuartZ 定时任务框架 使用了hangfire 暂时不用,后续需要可以打开,已经配好
services.AddQuartZSetup(_configuration);
// 保护上传文件
//services.AddStaticFileAuthorizationSetup();
////HttpReports 暂时废弃
//services.AddHttpReports().AddHttpTransport();
//Serilog 日志可视化 LogDashboard日志
services.AddLogDashboardSetup();
//上传限制 配置
services.Configure<FormOptions>(options =>
{
options.MultipartBodyLengthLimit = int.MaxValue;
options.ValueCountLimit = int.MaxValue;
options.ValueLengthLimit = int.MaxValue;
});
//IP 限流 可设置白名单 或者黑名单
//services.AddIpPolicyRateLimitSetup(_configuration);
// 用户类型 策略授权
services.AddAuthorizationPolicySetup(_configuration);
services.AddJsonConfigSetup(_configuration);
//转发头设置 获取真实IP
services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders =
ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
});
//Dicom影像渲染图片 跨平台
services.AddDicomSetup();
// 实时应用
services.AddSignalR();
services.AddSingleton<IUserIdProvider, IRaCISUserIdProvider>();
//services.AddSingleton<IImportResultFilter, ImportResultFilteTest>();
services.AddMemoryCache();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
//本地化
app.UseLocalization();
app.UseForwardedHeaders();
//响应压缩
app.UseResponseCompression();
//app.UseCors(t => t.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());
//不需要 token 访问的静态文件 wwwroot css, JavaScript, and images don't require authentication.
app.UseStaticFiles();
//LogDashboard
app.UseLogDashboard("/LogDashboard");
//hangfire
app.UseHangfireConfig(env);
////暂时废弃
//app.UseHttpReports();
////限流 中间件
//app.UseIpRateLimiting();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
//app.UseHsts();
}
Console.WriteLine("当前环境: " + env.EnvironmentName);
//app.UseMiddleware<AuthMiddleware>();
// 特殊异常处理 比如 404
app.UseStatusCodePagesWithReExecute("/Error/{0}");
SwaggerSetup.Configure(app, env);
////serilog 记录请求的用户信息
app.UseSerilogConfig(env);
app.UseRouting();
app.UseCors(t => t.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());
app.UseIRacisHostStaticFileStore(env);
app.UseAuthentication();
//app.UseJwtBearerQueryString();
app.UseAuthorization();
////文件伺服 必须带Token 访问
////app.UseIRacisHostStaticFileStore(env);
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapHub<UploadHub>("/UploadHub");
});
}
}
}
@@ -1,40 +0,0 @@
using Hangfire;
using Hangfire.Dashboard;
using IRaCIS.Application.Services.BackGroundJob;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
namespace IRaCIS.Core.API
{
public static class HangfireConfig
{
public static void UseHangfireConfig(this IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseHangfireDashboard("/api/hangfire", new DashboardOptions()
{
//直接访问,没有带token 获取不到用户身份信息,所以这种自定义授权暂时没法使用
//Authorization = new[] { new hangfireAuthorizationFilter() }
//本地请求 才能看
Authorization = new[] { new LocalRequestsOnlyAuthorizationFilter() }
});
#region hangfire
//// 延迟任务执行 1秒之后执行 有时启动没运行 换成添加到队列中
//BackgroundJob.Schedule<ICacheTrialStatusJob>(t => t.MemoryCacheTrialStatus(), TimeSpan.FromSeconds(1));
////添加到后台任务队列,
//BackgroundJob.Enqueue<ICacheTrialStatusJob>(t => t.MemoryCacheTrialStatus());
//周期性任务,1天执行一次
RecurringJob.AddOrUpdate<IIRaCISCacheHangfireJob>(t => t.ProjectStartCache(), Cron.Daily);
#endregion
}
}
}
@@ -0,0 +1,66 @@
using Hangfire;
using Hangfire.Dashboard;
using Hangfire.Dashboard.BasicAuthorization;
using IRaCIS.Application.Services.BackGroundJob;
using IRaCIS.Core.API.Filter;
using IRaCIS.Core.Application.Helper;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
namespace IRaCIS.Core.API
{
public static class HangfireConfig
{
public static void UseHangfireConfig(this IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseHangfireDashboard("/back/hangfire", new DashboardOptions()
{
Authorization = new IDashboardAuthorizationFilter[] { /*new hangfireAuthorizationFilter(),*/
new BasicAuthAuthorizationFilter(new BasicAuthAuthorizationFilterOptions(){
SslRedirect=false,
RequireSsl=false,
Users=new BasicAuthAuthorizationUser[]{
new BasicAuthAuthorizationUser(){
Login="admin",
PasswordClear="admin",
}
}
})
},
DashboardTitle ="后台任务管理",
//Authorization = new BasicAuthAuthorizationFilter[] {
// new BasicAuthAuthorizationFilter(new BasicAuthAuthorizationFilterOptions(){
// SslRedirect=false,
// RequireSsl=false,
// Users=new BasicAuthAuthorizationUser[]{
// new BasicAuthAuthorizationUser(){
// Login="admin",
// PasswordClear="test",
// }
// }
// })
//}
});
}
}
}
@@ -1,8 +1,11 @@
using IRaCIS.Core.Application.Helper;
using Azure;
using IRaCIS.Core.Application.Helper;
using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Infrastructure.Extention;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.StaticFiles;
using Microsoft.Extensions.FileProviders;
using Microsoft.Extensions.FileProviders.Physical;
@@ -11,6 +14,8 @@ using Microsoft.Extensions.Hosting.Internal;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Microsoft.VisualBasic;
using Newtonsoft.Json;
using SharpCompress.Common;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
@@ -23,16 +28,14 @@ namespace IRaCIS.Core.API
{
private readonly RequestDelegate _next;
private readonly IWebHostEnvironment _hostingEnv;
private readonly StaticFileOptions _options;
private readonly ILoggerFactory _loggerFactory;
private string iRaCISDefaultDataFolder = string.Empty;
public MultiDiskStaticFilesMiddleware(RequestDelegate next, IWebHostEnvironment hostingEnv, StaticFileOptions options, ILoggerFactory loggerFactory)
public MultiDiskStaticFilesMiddleware(RequestDelegate next, IWebHostEnvironment hostingEnv, ILoggerFactory loggerFactory)
{
_next = next;
_hostingEnv = hostingEnv;
_options = options;
_loggerFactory = loggerFactory;
iRaCISDefaultDataFolder = FileStoreHelper.GetIRaCISRootDataFolder(_hostingEnv);
@@ -48,58 +51,112 @@ namespace IRaCIS.Core.API
var path = context.Request.Path.Value;
var isIRacisFile = path.StartsWith($"/{StaticData.Folder.IRaCISDataFolder}");
var isDicomFile = path.Contains($"{StaticData.Folder.DicomFolder}");
var isDicomFile = isIRacisFile && path.Contains($"{StaticData.Folder.DicomFolder}");
var defaultFileProvider = new PhysicalFileProvider(iRaCISDefaultDataFolder);
var staticFileOptions = new StaticFileOptions
{
FileProvider = defaultFileProvider,
RequestPath = $"/{StaticData.Folder.IRaCISDataFolder}",
ServeUnknownFileTypes = true,
DefaultContentType = "application/octet-stream"
};
var defaultRoot = Path.GetPathRoot(iRaCISDefaultDataFolder);
//先从默认里面去找
if (isIRacisFile)
{
if (defaultFileProvider.GetFileInfo(context.Request.Path).Exists)
#region
//var defaultFileProvider = new PhysicalFileProvider(iRaCISDefaultDataFolder);
//var staticFileOptions = new StaticFileOptions
//{
// FileProvider = defaultFileProvider,
// RequestPath = $"/{StaticData.Folder.IRaCISDataFolder}",
// ServeUnknownFileTypes = true,
// DefaultContentType = "application/octet-stream"
//};
//var a = defaultFileProvider.GetFileInfo(context.Request.Path).Exists;
//var staticFileMiddleware = new StaticFileMiddleware(_next, _hostingEnv, Options.Create(staticFileOptions), _loggerFactory);
//await staticFileMiddleware.Invoke(context);
#endregion
#region wwwroot ...
var defaultFileProvider = new PhysicalFileProvider(FileStoreHelper.GetIRaCISRootPath(_hostingEnv));
if (defaultFileProvider.GetFileInfo(path).Exists)
{
var staticFileMiddleware = new StaticFileMiddleware(_next, _hostingEnv, Options.Create(staticFileOptions), _loggerFactory);
await staticFileMiddleware.Invoke(context);
var actrualPath = defaultFileProvider.GetFileInfo(path).PhysicalPath;
await context.Response.SendFileAsync(new PhysicalFileInfo(new FileInfo(actrualPath)));
return;
}
#endregion
}
//没找到
//dicom影像,从多个文件夹尝试,因为会存在切换磁盘
if (isDicomFile)
{
var disks = GetDisks().Where(t=>!t.Contains(defaultRoot));
var defaultRoot = Path.GetPathRoot(iRaCISDefaultDataFolder);
//除默认部署路径的其他路径
var disks = DriveInfo.GetDrives()
.Where(d => d.IsReady && d.DriveType == DriveType.Fixed)/*.Where(t => !t.Name.Contains("C") && !t.Name.Contains("c"))*/
.OrderBy(d => d.AvailableFreeSpace)
.Select(d => d.RootDirectory.FullName)
.ToArray().Where(t=>!t.Contains(defaultRoot));
foreach (var item in disks)
{
var otherFileStoreFolder = Path.Combine(item, _hostingEnv.EnvironmentName);
if (!Directory.Exists(otherFileStoreFolder))
{
continue;
}
var otherFileProvider= new PhysicalFileProvider(otherFileStoreFolder);
var otherStaticFileOptions = new StaticFileOptions
{
FileProvider = otherFileProvider,
RequestPath = $"/{StaticData.Folder.IRaCISDataFolder}",
ServeUnknownFileTypes = true,
DefaultContentType = "application/octet-stream"
};
if (otherFileProvider.GetFileInfo(context.Request.Path).Exists)
if (otherFileProvider.GetFileInfo(path).Exists)
{
var staticFileMiddleware = new StaticFileMiddleware(_next, _hostingEnv, Options.Create(staticFileOptions), _loggerFactory);
await staticFileMiddleware.Invoke(context);
var actrualPath = otherFileProvider.GetFileInfo(path).PhysicalPath;
//方式一
await context.Response.SendFileAsync( new PhysicalFileInfo(new FileInfo(actrualPath)));
#region otherFileProvider /{StaticData.Folder.IRaCISDataFolder}
//var otherStaticFileOptions = new StaticFileOptions
//{
// FileProvider = otherFileProvider,
// RequestPath = $"/{StaticData.Folder.IRaCISDataFolder}",
// ServeUnknownFileTypes = true,
// DefaultContentType = "application/octet-stream"
//};
//var staticFileMiddleware = new StaticFileMiddleware(_next, _hostingEnv, Options.Create(otherStaticFileOptions), _loggerFactory);
//await staticFileMiddleware.Invoke(context);
#endregion
return;
}
}
// 如果没有找到文件,返回404
context.Response.StatusCode = 404;
context.Response.ContentType = "application/json";
await context.Response.WriteAsync(JsonConvert.SerializeObject(ResponseOutput.NotOk("File not found")));
}
@@ -109,14 +166,7 @@ namespace IRaCIS.Core.API
private string[] GetDisks()
{
// 获取系统中所有可用的磁盘
return DriveInfo.GetDrives()
.Where(d => d.IsReady && d.DriveType == DriveType.Fixed).Where(t => !t.Name.Contains("C") && !t.Name.Contains("c"))
.Select(d => d.RootDirectory.FullName)
.ToArray();
}
//private static string GetContentType(string path)
@@ -19,7 +19,7 @@ namespace IRaCIS.Core.API
app.UseSerilogRequestLogging(opts
=>
{
opts.MessageTemplate = "{TokenUserRealName} {TokenUserType} {ClientIp} {RequestIP} {Host} {Protocol} {RequestMethod} {RequestPath} {RequestBody} responded {StatusCode} in {Elapsed:0.0000} ms";
opts.MessageTemplate = "{TokenUserRealName} {TokenUserTypeShortName} {ClientIp} {LocalIP} {Host} {Protocol} {RequestMethod} {RequestPath} {RequestBody} responded {StatusCode} in {Elapsed:0.0000} ms";
opts.EnrichDiagnosticContext = SerilogHelper.EnrichFromRequest;
});
@@ -1,4 +1,5 @@
using IRaCIS.Core.Infrastructure.Extention;
using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Infrastructure.Extention;
using Microsoft.AspNetCore.Http;
using Serilog;
using System;
@@ -20,7 +21,7 @@ namespace IRaCIS.Core.API
diagnosticContext.Set("Host", request.Host);
//这种获取的Ip不准 配置服务才行
diagnosticContext.Set("RequestIP", httpContext.Connection.RemoteIpAddress.ToString());
//diagnosticContext.Set("RequestIP", httpContext.Connection.RemoteIpAddress.ToString());
//这种方式可以,但是serilog提供了 就不用了
//diagnosticContext.Set("TestIP", httpContext.GetUserIp());
@@ -41,9 +42,9 @@ namespace IRaCIS.Core.API
// Set the content-type of the Response at this point
diagnosticContext.Set("ContentType", httpContext.Response.ContentType);
diagnosticContext.Set("TokenUserRealName", httpContext?.User?.FindFirst("realName")?.Value);
diagnosticContext.Set("TokenUserRealName", httpContext?.User?.FindFirst(JwtIRaCISClaimType.RealName)?.Value);
diagnosticContext.Set("TokenUserType", httpContext?.User?.FindFirst("userTypeEnumName")?.Value);
diagnosticContext.Set("TokenUserTypeShortName", httpContext?.User?.FindFirst(JwtIRaCISClaimType.UserTypeShortName)?.Value);
// Retrieve the IEndpointFeature selected for the request
var endpoint = httpContext.GetEndpoint();
@@ -1,6 +1,7 @@
using IRaCIS.Core.Infrastructure.Extention;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Localization;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Newtonsoft.Json;
@@ -12,9 +13,14 @@ namespace IRaCIS.Core.API
{
public class ApiResponseHandler : AuthenticationHandler<AuthenticationSchemeOptions>
{
public ApiResponseHandler(IOptionsMonitor<AuthenticationSchemeOptions> options, ILoggerFactory logger, UrlEncoder encoder, ISystemClock clock) : base(options, logger, encoder, clock)
public IStringLocalizer _localizer;
public ApiResponseHandler(IOptionsMonitor<AuthenticationSchemeOptions> options,
IStringLocalizer localizer,
ILoggerFactory logger, UrlEncoder encoder) : base(options, logger, encoder)
{
}
_localizer = localizer;
}
protected override Task<AuthenticateResult> HandleAuthenticateAsync()
{
@@ -24,14 +30,16 @@ namespace IRaCIS.Core.API
{
Response.ContentType = "application/json";
Response.StatusCode = StatusCodes.Status401Unauthorized;
await Response.WriteAsync(JsonConvert.SerializeObject(ResponseOutput.NotOk("您无权访问该接口", ApiResponseCodeEnum.NoToken)));
//---您无权访问该接口
await Response.WriteAsync(JsonConvert.SerializeObject(ResponseOutput.NotOk(_localizer["ApiResponse_NoAccess"], ApiResponseCodeEnum.NoToken)));
}
protected override async Task HandleForbiddenAsync(AuthenticationProperties properties)
{
Response.ContentType = "application/json";
Response.StatusCode = StatusCodes.Status403Forbidden;
await Response.WriteAsync(JsonConvert.SerializeObject(ResponseOutput.NotOk("您的权限不允许进行该操作",ApiResponseCodeEnum.HaveTokenNotAccess)));
//---您的权限不允许进行该操作
await Response.WriteAsync(JsonConvert.SerializeObject(ResponseOutput.NotOk(_localizer["ApiResponse_Permission"],ApiResponseCodeEnum.HaveTokenNotAccess)));
}
}
@@ -1,7 +1,6 @@
using Autofac;
using Autofac.Extras.DynamicProxy;
using IRaCIS.Core.Application;
using IRaCIS.Core.Application.AOP;
using IRaCIS.Core.Application.BackGroundJob;
using IRaCIS.Core.Infra.EFCore;
using Microsoft.AspNetCore.Http;
@@ -31,10 +30,6 @@ namespace IRaCIS.Core.API
containerBuilder.RegisterType<Repository>().As<IRepository>().InstancePerLifetimeScope();
//containerBuilder.RegisterType<Mapper>().As<IMapper>().InstancePerLifetimeScope();
//containerBuilder.RegisterGeneric(typeof(EFUnitOfWork<>))
// .As(typeof(IEFUnitOfWork<>)).InstancePerLifetimeScope();//注册仓储
#endregion
@@ -50,8 +45,7 @@ namespace IRaCIS.Core.API
#endregion
//containerBuilder.RegisterType<BaseService>().As<IBaseService>().PropertiesAutowired().InstancePerLifetimeScope();
//containerBuilder.RegisterType<DictionaryService>().As<IDictionaryService>().InstancePerLifetimeScope();
@@ -59,22 +53,13 @@ namespace IRaCIS.Core.API
containerBuilder.RegisterAssemblyTypes(application).Where(t => t.FullName.Contains("Service"))
.PropertiesAutowired().AsImplementedInterfaces().EnableClassInterceptors();
//Assembly infrastructure = Assembly.Load("IRaCIS.Core.Infra.EFCore");
//containerBuilder.RegisterAssemblyTypes(infrastructure).AsImplementedInterfaces();
containerBuilder.RegisterType<HttpContextAccessor>().As<IHttpContextAccessor>().SingleInstance();
containerBuilder.RegisterType<UserInfo>().As<IUserInfo>().InstancePerLifetimeScope();
//containerBuilder.RegisterType<Dictionary>().InstancePerLifetimeScope();
//Autofac 注册拦截器 需要注意的是生成api上服务上的动态代理AOP失效 间接掉用不影响
//containerBuilder.RegisterType<TrialStatusAutofacAOP>();
//containerBuilder.RegisterType<UserAddAOP>();
//containerBuilder.RegisterType<QANoticeAOP>();
//containerBuilder.RegisterType<LogService>().As<ILogService>().SingleInstance();
//注册hangfire任务 依赖注入
//注册hangfire任务 依赖注入
containerBuilder.RegisterType<ObtainTaskAutoCancelJob>().As<IObtainTaskAutoCancelJob>().InstancePerDependency();
+17 -2
View File
@@ -1,8 +1,12 @@
using IRaCIS.Core.Application.Triggers;
using Hangfire.SqlServer;
using IRaCIS.Core.Application.Triggers;
using IRaCIS.Core.Infra.EFCore;
using Medallion.Threading;
using Medallion.Threading.SqlServer;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using StackExchange.Redis;
namespace IRaCIS.Core.API
{
@@ -37,6 +41,7 @@ namespace IRaCIS.Core.API
triggerOptions.AddTrigger<AddSubjectTrigger>();
triggerOptions.AddTrigger<ChallengeStateTrigger>();
triggerOptions.AddTrigger<SubjectStateTrigger>();
triggerOptions.AddTrigger<AddCRCCliniaclDataTrigger>();
triggerOptions.AddTrigger<SubjectVisitCheckPassedTrigger>();
triggerOptions.AddTrigger<SubjectVisitFinalVisitTrigger>();
triggerOptions.AddTrigger<SubjectVisitTrigger>();
@@ -44,16 +49,26 @@ namespace IRaCIS.Core.API
triggerOptions.AddTrigger<TableQuestionRowTrigger>();
//triggerOptions.AddTrigger<AddlTrialUserTrigger>();
triggerOptions.AddTrigger<VisitTaskIsFrontTaskNeedSignButNotSignTrigger>();
triggerOptions.AddTrigger<VisitTaskIbeforeTrigger>();
});
});
//注意区分 easy caching 也有 IDistributedLockProvider
services.AddSingleton<IDistributedLockProvider>(sp =>
{
//var connection = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]!);
return new SqlDistributedSynchronizationProvider(configuration.GetSection("ConnectionStrings:RemoteNew").Value);
});
//services.AddAssemblyTriggers(typeof(SubjectVisitImageDateTrigger).Assembly);
}
@@ -1,17 +1,26 @@
using EasyCaching.Core;
using EasyCaching.Core.Configurations;
using EasyCaching.Interceptor.Castle;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
namespace IRaCIS.Core.API
{
public static class EasyCachingSetup
public static class EasyCachingSetup
{
public static void AddEasyCachingSetup(this IServiceCollection services)
public static void AddEasyCachingSetup(this IServiceCollection services, IConfiguration configuration)
{
services.AddEasyCaching(options =>
{
options.UseInMemory();
//options.UseRedis(configuration, EasyCachingConstValue.DefaultRedisName).WithMessagePack(EasyCachingConstValue.DefaultRedisName);
});
//services.ConfigureCastleInterceptor(options => options.CacheProviderName = EasyCachingConstValue.DefaultRedisName);
services.ConfigureCastleInterceptor(options => options.CacheProviderName = EasyCachingConstValue.DefaultInMemoryName);
}
}
@@ -1,81 +0,0 @@
//using System;
//using Microsoft.Extensions.DependencyInjection;
//using StackExchange.Profiling.Storage;
//namespace IRaCIS.Core.API
//{
// public class MiniProfilerConfigure
// {
// public static void ConfigureMiniProfiler(IServiceCollection services)
// {
// services.AddMiniProfiler(options =>
// {
// // All of this is optional. You can simply call .AddMiniProfiler() for all defaults
// // (Optional) Path to use for profiler URLs, default is /mini-profiler-resources
// options.RouteBasePath = "/profiler";
// //// (Optional) Control storage
// //// (default is 30 minutes in MemoryCacheStorage)
// (options.Storage as MemoryCacheStorage).CacheDuration = TimeSpan.FromMinutes(10);
// //// (Optional) Control which SQL formatter to use, InlineFormatter is the default
// //options.SqlFormatter = new StackExchange.Profiling.SqlFormatters.InlineFormatter();
// //// (Optional) To control authorization, you can use the Func<HttpRequest, bool> options:
// //// (default is everyone can access profilers)
// //options.ResultsAuthorize = request => MyGetUserFunction(request).CanSeeMiniProfiler;
// //options.ResultsListAuthorize = request => MyGetUserFunction(request).CanSeeMiniProfiler;
// //// Or, there are async versions available:
// //options.ResultsAuthorizeAsync = async request => (await MyGetUserFunctionAsync(request)).CanSeeMiniProfiler;
// //options.ResultsAuthorizeListAsync = async request => (await MyGetUserFunctionAsync(request)).CanSeeMiniProfilerLists;
// //// (Optional) To control which requests are profiled, use the Func<HttpRequest, bool> option:
// //// (default is everything should be profiled)
// //options.ShouldProfile = request => MyShouldThisBeProfiledFunction(request);
// //// (Optional) Profiles are stored under a user ID, function to get it:
// //// (default is null, since above methods don't use it by default)
// //options.UserIdProvider = request => MyGetUserIdFunction(request);
// //// (Optional) Swap out the entire profiler provider, if you want
// //// (default handles async and works fine for almost all applications)
// //options.ProfilerProvider = new MyProfilerProvider();
// //// (Optional) You can disable "Connection Open()", "Connection Close()" (and async variant) tracking.
// //// (defaults to true, and connection opening/closing is tracked)
// //options.TrackConnectionOpenClose = true;
// //// (Optional) Use something other than the "light" color scheme.
// //// (defaults to "light")
// //options.ColorScheme = StackExchange.Profiling.ColorScheme.Auto;
// //// The below are newer options, available in .NET Core 3.0 and above:
// //// (Optional) You can disable MVC filter profiling
// //// (defaults to true, and filters are profiled)
// //options.EnableMvcFilterProfiling = true;
// //// ...or only save filters that take over a certain millisecond duration (including their children)
// //// (defaults to null, and all filters are profiled)
// //// options.MvcFilterMinimumSaveMs = 1.0m;
// //// (Optional) You can disable MVC view profiling
// //// (defaults to true, and views are profiled)
// //options.EnableMvcViewProfiling = true;
// //// ...or only save views that take over a certain millisecond duration (including their children)
// //// (defaults to null, and all views are profiled)
// //// options.MvcViewMinimumSaveMs = 1.0m;
// //// (Optional) listen to any errors that occur within MiniProfiler itself
// //// options.OnInternalError = e => MyExceptionLogger(e);
// //// (Optional - not recommended) You can enable a heavy debug mode with stacks and tooltips when using memory storage
// //// It has a lot of overhead vs. normal profiling and should only be used with that in mind
// //// (defaults to false, debug/heavy mode is off)
// ////options.EnableDebugMode = true;
// });
// //.AddEntityFramework();
// }
// }
//}
@@ -1,46 +0,0 @@
using IRaCIS.Core.Domain.Share;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using System;
namespace IRaCIS.Core.API
{
public class JSONCustomDateConverter : DateTimeConverterBase
{
private TimeZoneInfo _timeZoneInfo;
private string _dateFormat;
private IUserInfo _userInfo;
public JSONCustomDateConverter(string dateFormat, TimeZoneInfo timeZoneInfo, IUserInfo userInfo)
{
_dateFormat = dateFormat;
_timeZoneInfo = timeZoneInfo;
_userInfo = userInfo;
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
var timeZoneId = _userInfo.TimeZoneId;
var needConvertUtcDateTime = Convert.ToDateTime(value);
var tz = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId);
var dateTimeOffset = new DateTimeOffset(needConvertUtcDateTime);
var time = TimeZoneInfo.ConvertTimeFromUtc(needConvertUtcDateTime, tz).ToString(_dateFormat);
writer.WriteValue(time);
writer.Flush();
}
}
}
@@ -0,0 +1,103 @@
using IRaCIS.Core.Domain.Share;
using Microsoft.AspNetCore.Http;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using StackExchange.Redis;
using System;
using System.Globalization;
namespace IRaCIS.Core.API
{
/// <summary>
/// 序列化,反序列化的时候,处理时间 时区转换
/// </summary>
public class JSONTimeZoneConverter : DateTimeConverterBase
{
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly TimeZoneInfo _clientTimeZone;
public JSONTimeZoneConverter(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
//默认是UTC
//var timeZoneId = "Etc/UTC";
var timeZoneId = "Asia/Shanghai";
var timeZoneIdHeader = _httpContextAccessor?.HttpContext?.Request?.Headers["TimeZoneId"];
if (timeZoneIdHeader is not null && !string.IsNullOrEmpty(timeZoneIdHeader.Value))
{
timeZoneId = timeZoneIdHeader.Value;
}
_clientTimeZone = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId);
}
public override bool CanConvert(Type objectType)
{
// 仅支持 DateTime 类型的转换
return objectType == typeof(DateTime)|| objectType == typeof(DateTime?);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
if (reader.Value == null)
{
return null;
}
DateTime dateTime;
if (reader.ValueType == typeof(DateTime) || reader.ValueType == typeof(DateTime?))
{
DateTime? nullableDateTime = reader.Value as DateTime?;
if (nullableDateTime != null && nullableDateTime.HasValue)
{
dateTime = nullableDateTime.Value;
}
else
{
return null;
}
}
else
{
if (DateTime.TryParse((string)reader.Value, out dateTime) == false)
{
return null;
}
}
// 将客户端时间转换为服务器时区的时间
var serverZoneTime = TimeZoneInfo.ConvertTime(dateTime, _clientTimeZone, TimeZoneInfo.Local);
return serverZoneTime;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
DateTime? nullableDateTime = value as DateTime?;
if (nullableDateTime != null && nullableDateTime.HasValue)
{
//第一个参数默认使用系统本地时区 也就是应用服务器的时区
DateTime clientZoneTime = TimeZoneInfo.ConvertTime(nullableDateTime.Value, _clientTimeZone);
writer.WriteValue(clientZoneTime);
}
else
{
writer.WriteNull();
}
}
}
}
@@ -1,4 +1,6 @@
using IRaCIS.Core.API._ServiceExtensions.NewtonsoftJson;
using IRaCIS.Core.Application.Helper;
using Microsoft.Extensions.DependencyInjection;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
@@ -8,8 +10,12 @@ namespace IRaCIS.Core.API
{
public static class NewtonsoftJsonSetup
{
public static void AddNewtonsoftJsonSetup(this IMvcBuilder builder)
public static void AddNewtonsoftJsonSetup(this IMvcBuilder builder, IServiceCollection services)
{
services.AddHttpContextAccessor();
services.AddScoped<JSONTimeZoneConverter>();
services.AddScoped<CustomStringConverter>();
services.AddScoped<IOSSService,OSSService>();
builder.AddNewtonsoftJson(options =>
{
@@ -23,8 +29,15 @@ namespace IRaCIS.Core.API
// 设置时间格式
options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.RoundtripKind;
//options.SerializerSettings.Converters.Add(new JSONCustomDateConverter()) ;
options.SerializerSettings.Converters.Add(services.BuildServiceProvider().GetService<JSONTimeZoneConverter>());
//options.SerializerSettings.Converters.Add(services.BuildServiceProvider().GetService<CustomStringConverter>());
//IsoDateTimeConverter
//options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
@@ -28,7 +28,7 @@ namespace IRaCIS.Core.API
if(_MemberInfo.PropertyType == typeof(string))
{
//去掉前后空格
_MemberInfo.SetValue(target, value==null?string.Empty: value.ToString()==string.Empty? value:value.ToString().Trim());
_MemberInfo.SetValue(target, value==null?string.Empty: value.ToString()==string.Empty? value:value/*.ToString().Trim()*/);
}
else
@@ -0,0 +1,65 @@
using IRaCIS.Core.Application.Helper;
using Microsoft.AspNetCore.Http;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;
using System;
using System.Linq;
using System.Text.RegularExpressions;
namespace IRaCIS.Core.API._ServiceExtensions.NewtonsoftJson
{
public class CustomStringConverter : JsonConverter<string>
{
//private readonly IHttpContextAccessor _httpContextAccessor;
private readonly IOSSService _oSSService;
// 构造函数
public CustomStringConverter(/*IHttpContextAccessor httpContextAccessor*/ IOSSService oSSService)
{
//_httpContextAccessor = httpContextAccessor;
_oSSService = oSSService;
}
public override string ReadJson(JsonReader reader, Type objectType, string existingValue, bool hasExistingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.String)
{
return (string)reader.Value;
}
return null;
}
public override void WriteJson(JsonWriter writer, string value, JsonSerializer serializer)
{
if (value != null)
{
// 在这里对字符串进行处理,例如转换大小写、去除空格等
// 这里只是一个示例,您可以根据实际需求进行更改
// 获取当前正在序列化的属性名
string propertyName = writer.Path.Split('.').Last();
Regex guidRegex = new Regex(@"[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}");
if (propertyName.IndexOf("Path") > -1 && value.IndexOf('.')>-1 && guidRegex.IsMatch(value))
{
var tt= _oSSService.GetSignedUrl(value);
writer.WriteValue(tt);
}
else
{
// 将处理后的字符串写入到 JsonWriter 中
writer.WriteValue(value);
}
}
else
{
writer.WriteNull();
}
}
}
}
@@ -1,45 +0,0 @@
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
namespace IRaCIS.Core.API
{
public static class QuartZSetup
{
public static void AddQuartZSetup(this IServiceCollection services, IConfiguration configuration)
{
//services.AddTransient<CacheTrialStatusQuartZJob>();
//services.AddQuartz(q =>
//{
// // base quartz scheduler, job and trigger configuration
// // as of 3.3.2 this also injects scoped services (like EF DbContext) without problems
// q.UseMicrosoftDependencyInjectionJobFactory();
// // 基本Quartz调度器、作业和触发器配置
// var jobKey = new JobKey("RegularTrialWork", "regularWorkGroup");
// q.AddJob<CacheTrialStatusQuartZJob>(jobKey, j => j
// .WithDescription("Trial regular work")
// );
// q.AddTrigger(t => t
// .WithIdentity("TrialStatusTrigger")
// .ForJob(jobKey)
// //.StartNow()
// //.WithSimpleSchedule(x => x.WithInterval(TimeSpan.FromSeconds(15))//开始秒数 15s
// // .RepeatForever())//持续工作
// .WithCronSchedule("0 0 0/2 * * ?")//每小时执行一次
// .WithDescription("My regular trial work trigger")
// );
//});
//// ASP.NET Core hosting
//services.AddQuartzServer(options =>
//{
// // when shutting down we want jobs to complete gracefully
// options.WaitForJobsToComplete = true;
//});
}
}
}
@@ -19,31 +19,33 @@ namespace IRaCIS.Core.API
// Filter out ASP.NET Core infrastructre logs that are Information and below 日志太多了 一个请求 记录好几条
.MinimumLevel.Override("Microsoft.AspNetCore", LogEventLevel.Warning)
.MinimumLevel.Override("Hangfire", LogEventLevel.Warning)
.MinimumLevel.Override("System.Net.Http.HttpClient.HttpReports", LogEventLevel.Warning)
.MinimumLevel.Override("System.Net.Http.HttpClient.HttpReports", LogEventLevel.Warning)
.Enrich.WithClientIp()
.Enrich.WithClientAgent()
.Enrich.FromLogContext()
.Filter.ByExcluding(logEvent =>logEvent.Properties.ContainsKey("RequestPath") && logEvent.Properties["RequestPath"].ToString().Contains("/health"))
//控制台 方便调试 问题 我们显示记录日志 时 获取上下文的ip 和用户名 用户类型
.WriteTo.Console(restrictedToMinimumLevel: LogEventLevel.Warning,
outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3} ] {LocalIP} {ClientIp} {TokenUserRealName} {TokenUserType} {Message:lj} {Properties:j}{NewLine} {Exception}")
outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] {SourceContext:l} || {Message} || {Exception} ||end {NewLine}")
.WriteTo.File($"{AppContext.BaseDirectory}Serilogs/.log", rollingInterval: RollingInterval.Day,
outputTemplate: "{Timestamp:HH:mm:ss} || {Level} || {SourceContext:l} || {Message} ||{Exception} ||end {NewLine}");
outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] {SourceContext:l} || {Message} || {Exception} ||end {NewLine}");
//.WriteTo.MSSqlServer("Data Source=DESKTOP-4TU9A6M;Initial Catalog=CoreFrame;User ID=sa;Password=123456", "logs", autoCreateSqlTable: true, restrictedToMinimumLevel: LogEventLevel.Information)//从左至右四个参数分别是数据库连接字符串、表名、如果表不存在是否创建、最低等级。Serilog会默认创建一些列。
if (environment == "Production")
{
config.WriteTo.Email(new EmailConnectionInfo()
{
EmailSubject = "系统警告,请速速查看!",//邮件标题
FromEmail = "test@extimaging.com",//发件人邮箱
MailServer = "smtp.qiye.aliyun.com",//smtp服务器地址
NetworkCredentials = new NetworkCredential("test@extimaging.com", "SHzyyl2021"),//两个参数分别是发件人邮箱与客户端授权码
Port = 465,//端口号
ToEmail = "872297557@qq.com"//收件人
}, restrictedToMinimumLevel: LogEventLevel.Error,
outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff} [ {Level} {ClientIp} {ClientAgent} {TokenUserRealName} {TokenUserType} ] || [path: {RequestPath} arguments: {RequestBody}] {SourceContext:l} || {Message} || {Exception} ||end {NewLine})");
}
//if (environment == "Production")
//{
// config.WriteTo.Email(new EmailConnectionInfo()
// {
// EmailSubject = "系统警告,请速速查看!",//邮件标题
// FromEmail = "test@extimaging.com",//发件人邮箱
// MailServer = "smtp.qiye.aliyun.com",//smtp服务器地址
// NetworkCredentials = new NetworkCredential("test@extimaging.com", "SHzyyl2021"),//两个参数分别是发件人邮箱与客户端授权码
// Port = 465,//端口号
// ToEmail = "872297557@qq.com"//收件人
// }, restrictedToMinimumLevel: LogEventLevel.Error,
// outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff} [ {Level} {ClientIp} {ClientAgent} {TokenUserRealName} {TokenUserType} ] || [path: {RequestPath} arguments: {RequestBody}] {SourceContext:l} || {Message} || {Exception} ||end {NewLine})");
//}
//扩展方法 获取上下文的ip 用户名 用户类型
Log.Logger = config.Enrich.WithHttpContextInfo(serviceProvider).CreateLogger();
@@ -1,55 +0,0 @@
using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen;
using System.Collections.Generic;
using System.Linq;
namespace IRaCIS.Core.API
{
public class JsonPatchDocumentFilter : IDocumentFilter
{
public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context)
{
var schemas = swaggerDoc.Components.Schemas.ToList();
foreach (var item in schemas)
{
if (item.Key.StartsWith("Operation") || item.Key.StartsWith("JsonPatchDocument"))
swaggerDoc.Components.Schemas.Remove(item.Key);
}
swaggerDoc.Components.Schemas.Add("Operation", new OpenApiSchema
{
Type = "object",
Properties = new Dictionary<string, OpenApiSchema>
{
{ "op", new OpenApiSchema { Type = "string" } },
{"value", new OpenApiSchema{ Type = "object", Nullable = true } },
{ "path", new OpenApiSchema { Type = "string" } }
}
});
swaggerDoc.Components.Schemas.Add("JsonPatchDocument", new OpenApiSchema
{
Type = "array",
Items = new OpenApiSchema
{
Reference = new OpenApiReference { Type = ReferenceType.Schema, Id = "Operation" }
},
Description = "Array of operations to perform"
});
foreach (var path in swaggerDoc.Paths.SelectMany(p => p.Value.Operations)
.Where(p => p.Key == Microsoft.OpenApi.Models.OperationType.Patch))
{
foreach (var item in path.Value.RequestBody.Content.Where(c => c.Key != "application/json-patch+json"))
path.Value.RequestBody.Content.Remove(item.Key);
var response = path.Value.RequestBody.Content.SingleOrDefault(c => c.Key == "application/json-patch+json");
response.Value.Schema = new OpenApiSchema
{
Reference = new OpenApiReference { Type = ReferenceType.Schema, Id = "JsonPatchDocument" }
};
}
}
}
}
@@ -18,7 +18,6 @@ namespace IRaCIS.Core.API
{
public static void AddSwaggerSetup(this IServiceCollection services)
{
services.AddSwaggerExamplesFromAssemblyOf<JsonPatchUserRequestExample>();
services.AddSwaggerGen(options =>
{
@@ -63,7 +62,6 @@ namespace IRaCIS.Core.API
// 在header中添加token,传递到后台
options.OperationFilter<SecurityRequirementsOperationFilter>();
options.DocumentFilter<JsonPatchDocumentFilter>();
// 添加登录按钮
options.AddSecurityDefinition("bearerAuth", new OpenApiSecurityScheme()
@@ -1,13 +1,12 @@
using Hangfire;
using Hangfire.SqlServer;
using Hangfire.Tags.SqlServer;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using System;
namespace IRaCIS.Core.API
{
public static class hangfireSetup
public static class hangfireSetup
{
public static void AddhangfireSetup(this IServiceCollection services, IConfiguration configuration)
{
@@ -15,24 +14,29 @@ namespace IRaCIS.Core.API
services.AddHangfire(hangFireConfig =>
{
//hangFireConfig.UseInMemoryStorage();
//指定存储介质
hangFireConfig.UseSqlServerStorage(hangFireConnStr, new SqlServerStorageOptions()
{
SchemaName = "hangfire",
SchemaName = "dbo",
CommandBatchMaxTimeout = TimeSpan.FromMinutes(5),
SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5),
QueuePollInterval = TimeSpan.Zero,
UseRecommendedIsolationLevel = true,
UsePageLocksOnDequeue = true,
DisableGlobalLocks = true
});
hangFireConfig.UseTagsWithSql(); //nuget引入Hangfire.Tags.SqlServer
//hangFireConfig.UseTagsWithSql(); //nuget引入Hangfire.Tags.SqlServer
//.UseHangfireHttpJob();
});
services.AddHangfireServer();
services.AddHangfireServer(option =>
{
option.Queues = new[] { "immediately_once", "default", "sys_init", "not_immediately_once" };
});
}
}
@@ -1,33 +0,0 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"ConnectionStrings": {
"RemoteNew": "Server=123.56.94.154,1433\\MSSQLSERVER;Database=IRaCIS_Certificate;User ID=sa;Password=dev123456DEV;TrustServerCertificate=true",
"Hangfire": "Server=123.56.94.154,1433\\MSSQLSERVER;Database=Hangfire_IRaCIS;User ID=sa;Password=dev123456DEV;TrustServerCertificate=true"
},
"BasicSystemConfig": {
"OpenUserComplexPassword": false,
"OpenSignDocumentBeforeWork": false,
"OpenTrialRelationDelete": true,
"OpenLoginLimit": false
},
"SystemEmailSendConfig": {
"Port": 465,
"Host": "smtp.qiye.aliyun.com",
"FromEmail": "test@extimaging.com",
"FromName": "Test_IRC",
"AuthorizationCode": "SHzyyl2021"
}
}
@@ -1,33 +0,0 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"ConnectionStrings": {
"RemoteNew": "Server=123.56.94.154,1433\\MSSQLSERVER;Database=IRaCIS_New_Tet;User ID=sa;Password=dev123456DEV;TrustServerCertificate=true",
"Hangfire": "Server=123.56.94.154,1433\\MSSQLSERVER;Database=Hangfire_IRaCIS;User ID=sa;Password=dev123456DEV;TrustServerCertificate=true"
},
"BasicSystemConfig": {
"OpenUserComplexPassword": false,
"OpenSignDocumentBeforeWork": false,
"OpenTrialRelationDelete": true,
"OpenLoginLimit": false
},
"SystemEmailSendConfig": {
"Port": 465,
"Host": "smtp.qiye.aliyun.com",
"FromEmail": "test@extimaging.com",
"FromName": "Test_IRC",
"AuthorizationCode": "SHzyyl2021"
}
}
@@ -0,0 +1,58 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"ConnectionStrings": {
"RemoteNew": "Server=47.117.164.182,1434;Database=Event_IRC;User ID=sa;Password=xc@123456;TrustServerCertificate=true",
"Hangfire": "Server=47.117.164.182,1434;Database=Event_IRC_Hangfire;User ID=sa;Password=xc@123456;TrustServerCertificate=true"
},
"ObjectStoreService": {
"ObjectStoreUse": "AliyunOSS",
"AliyunOSS": {
"regionId": "cn-shanghai",
"endpoint": "https://oss-cn-shanghai.aliyuncs.com",
"accessKeyId": "LTAI5tKvzs7ed3UfSpNk3xwQ",
"accessKeySecret": "zTIceGEShlZDGnLrCFfIGFE7TXVRio",
"bucketName": "zy-irc-store",
"roleArn": "acs:ram::1899121822495495:role/oss-upload",
"viewEndpoint": "https://zy-irc-cache.oss-cn-shanghai.aliyuncs.com",
"region": "oss-cn-shanghai"
},
"MinIO": {
"endpoint": "http://192.168.3.68",
"port": "8001",
"useSSL": false,
"accessKey": "IDFkwEpWej0b4DtiuThL",
"secretKey": "Lhuu83yMhVwu7c1SnjvGY6lq74jzpYqifK6Qtj4h",
"bucketName": "test"
}
},
"BasicSystemConfig": {
"OpenUserComplexPassword": true,
"OpenSignDocumentBeforeWork": true,
"OpenLoginLimit": true,
"LoginMaxFailCount": 5,
"LoginFailLockMinutes": 30,
"AutoLoginOutMinutes": 60
},
"SystemEmailSendConfig": {
"Port": 465,
"Host": "smtp.qiye.aliyun.com",
"FromEmail": "uat@extimaging.com",
"FromName": "UAT_IRC",
"AuthorizationCode": "SHzyyl2021",
"SiteUrl": "http://irc.event.extimaging.com/login"
}
}
+61
View File
@@ -0,0 +1,61 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"ConnectionStrings": {
// "RemoteNew": "Server=47.117.165.18,1434;Database=Prod_IRC;User ID=sa;Password=zhanying@2021;TrustServerCertificate=true",
// "Hangfire": "Server=47.117.165.18,1434;Database=Prod_IRC_Hangfire;User ID=sa;Password=zhanying@2021;TrustServerCertificate=true"
"RemoteNew": "Server=prod_mssql_standard,1433;Database=Prod_IRC;User ID=sa;Password=zhanying@2021;TrustServerCertificate=true",
"Hangfire": "Server=prod_mssql_standard,1433;Database=Prod_IRC_Hangfire;User ID=sa;Password=zhanying@2021;TrustServerCertificate=true"
},
"ObjectStoreService": {
"ObjectStoreUse": "AliyunOSS",
"AliyunOSS": {
"regionId": "cn-shanghai",
"endpoint": "https://oss-cn-shanghai.aliyuncs.com",
"accessKeyId": "LTAI5tKvzs7ed3UfSpNk3xwQ",
"accessKeySecret": "zTIceGEShlZDGnLrCFfIGFE7TXVRio",
"bucketName": "zy-irc-store",
"roleArn": "acs:ram::1899121822495495:role/oss-upload",
"viewEndpoint": "https://zy-irc-cache.oss-cn-shanghai.aliyuncs.com",
"region": "oss-cn-shanghai"
},
"MinIO": {
"endpoint": "http://192.168.3.68",
"port": "8001",
"useSSL": false,
"accessKey": "IDFkwEpWej0b4DtiuThL",
"secretKey": "Lhuu83yMhVwu7c1SnjvGY6lq74jzpYqifK6Qtj4h",
"bucketName": "test"
}
},
"BasicSystemConfig": {
"OpenUserComplexPassword": true,
"OpenSignDocumentBeforeWork": true,
"OpenLoginLimit": true,
"LoginMaxFailCount": 5,
"LoginFailLockMinutes": 30,
"AutoLoginOutMinutes": 60
},
"SystemEmailSendConfig": {
"Port": 465,
"Host": "smtp.qiye.aliyun.com",
"FromEmail": "IRC@extimaging.com",
"FromName": "IRC",
"AuthorizationCode": "ExtImg@2022",
"SiteUrl": "http://irc.extimaging.com/login",
"CompanyName": "Extensive Imaging",
"CompanyNameCN": "上海展影医疗科技有限公司",
"CompanyShortName": "Extensive Imaging",
"CompanyShortNameCN": "展影医疗"
}
}
@@ -1,39 +0,0 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
//"RootUrl": "http://123.56.181.144:8060/",
"ConnectionStrings": {
"RemoteNew": "Server=101.132.193.237,1433;Database=IRaCIS.Production;User ID=sa;Password=zhanying2021;TrustServerCertificate=true",
"Hangfire": "Server=101.132.193.237,1433;Database=Hangfire.IRaCIS.Production;User ID=sa;Password=zhanying2021;TrustServerCertificate=true"
},
"BasicSystemConfig": {
"OpenUserComplexPassword": true,
"OpenSignDocumentBeforeWork": true,
"OpenLoginLimit": true
},
//"SystemEmailSendConfig": {
// "Port": 465,
// "Host": "smtp.163.com",
// "FromEmail": "zhou941003@qq.com",
// "FromName": "hangZhou",
// "AuthorizationCode": "sqfhlpfdvnexbcab"
//}
"SystemEmailSendConfig": {
"Port": 465,
"Host": "smtp.qiye.aliyun.com",
"FromEmail": "IRC@extimaging.com",
"FromName": "IRC",
"AuthorizationCode": "ExtImg@2022"
}
}
-31
View File
@@ -1,31 +0,0 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"ConnectionStrings": {
"RemoteNew": "Server=123.56.94.154,1433\\MSSQLSERVER;Database=IRaCIS_Verify;User ID=sa;Password=dev123456DEV;TrustServerCertificate=true",
"Hangfire": "Server=123.56.94.154,1433\\MSSQLSERVER;Database=Hangfire_IRaCIS;User ID=sa;Password=dev123456DEV;TrustServerCertificate=true"
},
"BasicSystemConfig": {
"OpenUserComplexPassword": true,
"OpenSignDocumentBeforeWork": true,
"OpenLoginLimit": true
},
"SystemEmailSendConfig": {
"Port": 465,
"Host": "smtp.qiye.aliyun.com",
"FromEmail": "uat@extimaging.com",
"FromName": "UAT_IRC",
"AuthorizationCode": "SHzyyl2021"
}
}
+81
View File
@@ -0,0 +1,81 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"ConnectionStrings": {
"RemoteNew": "Server=123.56.94.154,1435;Database=Test_IRC;User ID=sa;Password=xc@123456;TrustServerCertificate=true",
"Hangfire": "Server=123.56.94.154,1435;Database=Test_IRC_Hangfire;User ID=sa;Password=xc@123456;TrustServerCertificate=true"
},
"ObjectStoreService": {
"ObjectStoreUse": "AliyunOSS",
"AliyunOSS": {
"regionId": "cn-shanghai",
"endPoint": "https://oss-cn-shanghai.aliyuncs.com",
"accessKeyId": "LTAI5tKvzs7ed3UfSpNk3xwQ",
"accessKeySecret": "zTIceGEShlZDGnLrCFfIGFE7TXVRio",
"bucketName": "zy-irc-test-store",
"roleArn": "acs:ram::1899121822495495:role/oss-upload",
"viewEndpoint": "https://zy-irc-test-store.oss-cn-shanghai.aliyuncs.com",
"region": "oss-cn-shanghai"
},
"MinIO": {
"endPoint": "192.168.3.68",
"port": "8001",
"useSSL": false,
"accessKey": "IDFkwEpWej0b4DtiuThL",
"secretKey": "Lhuu83yMhVwu7c1SnjvGY6lq74jzpYqifK6Qtj4h",
"bucketName": "test",
"viewEndpoint": "http://192.168.3.68:8001/test/"
},
"AWS": {
"endPoint": "s3.us-east-1.amazonaws.com",
"useSSL": true,
"accessKey": "AKIAZQ3DRSOHFPJJ6FEU",
"secretKey": "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",
"bucketName": "ei-irc-test-store",
"viewEndpoint": "https://ei-irc-test-store.s3.amazonaws.com/"
}
},
"BasicSystemConfig": {
"OpenUserComplexPassword": false,
"OpenSignDocumentBeforeWork": false,
"OpenTrialRelationDelete": true,
"OpenLoginLimit": false,
"LoginMaxFailCount": 5,
"LoginFailLockMinutes": 1,
"AutoLoginOutMinutes": 10
},
"SystemEmailSendConfig": {
"Port": 465,
"Host": "smtp.qiye.aliyun.com",
"FromEmail": "test@extimaging.com",
"FromName": "Test_IRC",
"AuthorizationCode": "SHzyyl2021",
"SiteUrl": "http://irc.test.extimaging.com/login",
"CompanyName": "Extensive Imaging",
"CompanyNameCN": "上海展影医疗科技有限公司",
"CompanyShortName": "Extensive Imaging",
"CompanyShortNameCN": "展影医疗"
}
}
-33
View File
@@ -1,33 +0,0 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"ConnectionStrings": {
"RemoteNew": "Server=47.90.161.85,1433\\MSSQLSERVER;Database=IRaCIS_Demo_US;User ID=sa;Password=zhanying2021;TrustServerCertificate=true",
"Hangfire": "Server=47.90.161.85,1433\\MSSQLSERVER;Database=Hangfire.IRaCIS_Demo_US;User ID=sa;Password=zhanying2021;TrustServerCertificate=true"
},
"BasicSystemConfig": {
"OpenUserComplexPassword": false,
"OpenSignDocumentBeforeWork": false,
"OpenTrialRelationDelete": true,
"OpenLoginLimit": false
},
"SystemEmailSendConfig": {
"Port": 465,
"Host": "smtp.qiye.aliyun.com",
"FromEmail": "test@extimaging.com",
"FromName": "Test_IRC",
"AuthorizationCode": "SHzyyl2021"
}
}
+79
View File
@@ -0,0 +1,79 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"ConnectionStrings": {
"RemoteNew": "Server=us-mssql-service,1433;Database=Prod_US_IRC;User ID=sa;Password=xc@123456;TrustServerCertificate=true",
"Hangfire": "Server=us-mssql-service,1433;Database=Prod_US_IRC_Hangfire;User ID=sa;Password=xc@123456;TrustServerCertificate=true"
//"RemoteNew": "Server=44.218.11.19,1435;Database=Prod_US_IRC;User ID=sa;Password=xc@123456;TrustServerCertificate=true",
//"Hangfire": "Server=44.218.11.19,1435;Database=Prod_US_IRC_Hangfire;User ID=sa;Password=xc@123456;TrustServerCertificate=true"
},
"ObjectStoreService": {
"ObjectStoreUse": "AWS",
"AliyunOSS": {
"regionId": "cn-shanghai",
"endPoint": "https://oss-cn-shanghai.aliyuncs.com",
"accessKeyId": "LTAI5tKvzs7ed3UfSpNk3xwQ",
"accessKeySecret": "zTIceGEShlZDGnLrCFfIGFE7TXVRio",
"bucketName": "zy-irc-test-store",
"roleArn": "acs:ram::1899121822495495:role/oss-upload",
"viewEndpoint": "https://zy-irc-test-store.oss-cn-shanghai.aliyuncs.com",
"region": "oss-cn-shanghai"
},
"MinIO": {
"endPoint": "192.168.3.68",
"port": "8001",
"useSSL": false,
"accessKey": "IDFkwEpWej0b4DtiuThL",
"secretKey": "Lhuu83yMhVwu7c1SnjvGY6lq74jzpYqifK6Qtj4h",
"bucketName": "test",
"viewEndpoint": "http://192.168.3.68:8001/test/"
},
"AWS": {
"endPoint": "s3.us-east-1.amazonaws.com",
"useSSL": true,
"accessKey": "AKIAZQ3DRSOHFPJJ6FEU",
"secretKey": "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",
"bucketName": "ei-irc-test-store",
"viewEndpoint": "https://ei-irc-test-store.s3.amazonaws.com/"
}
},
"BasicSystemConfig": {
"OpenUserComplexPassword": false,
"OpenSignDocumentBeforeWork": false,
"OpenTrialRelationDelete": true,
"OpenLoginLimit": false,
"LoginMaxFailCount": 5,
"LoginFailLockMinutes": 30,
"AutoLoginOutMinutes": 60
},
"SystemEmailSendConfig": {
"Port": 465,
"Host": "smtp.qiye.aliyun.com",
"FromEmail": "test@extimaging.com",
"FromName": "Test_IRC",
"AuthorizationCode": "SHzyyl2021",
"CompanyName": "Elevate Imaging",
"CompanyNameCN": "上海展影医疗科技有限公司",
"CompanyShortName": "Elevate Imaging",
"CompanyShortNameCN": "展影医疗"
}
}
+65
View File
@@ -0,0 +1,65 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"ConnectionStrings": {
"RemoteNew": "Server=47.117.164.182,1434;Database=Uat_IRC;User ID=sa;Password=xc@123456;TrustServerCertificate=true",
"Hangfire": "Server=47.117.164.182,1434;Database=Uat_IRC.Hangfire;User ID=sa;Password=xc@123456;TrustServerCertificate=true"
},
"ObjectStoreService": {
"ObjectStoreUse": "AliyunOSS",
"AliyunOSS": {
"regionId": "cn-shanghai",
"endpoint": "https://oss-cn-shanghai.aliyuncs.com",
"accessKeyId": "LTAI5tKvzs7ed3UfSpNk3xwQ",
"accessKeySecret": "zTIceGEShlZDGnLrCFfIGFE7TXVRio",
"bucketName": "zy-irc-uat-store",
"roleArn": "acs:ram::1899121822495495:role/oss-upload",
"viewEndpoint": "https://zy-irc-uat-store.oss-cn-shanghai.aliyuncs.com",
"region": "oss-cn-shanghai"
},
"MinIO": {
"endpoint": "http://192.168.3.68",
"port": "8001",
"useSSL": false,
"accessKey": "IDFkwEpWej0b4DtiuThL",
"secretKey": "Lhuu83yMhVwu7c1SnjvGY6lq74jzpYqifK6Qtj4h",
"bucketName": "test"
}
},
"BasicSystemConfig": {
"OpenUserComplexPassword": true,
"OpenSignDocumentBeforeWork": true,
"OpenLoginLimit": true,
"LoginMaxFailCount": 5,
"LoginFailLockMinutes": 30,
"AutoLoginOutMinutes": 60
},
"SystemEmailSendConfig": {
"Port": 465,
"Host": "smtp.qiye.aliyun.com",
"FromEmail": "uat@extimaging.com",
"FromName": "UAT_IRC",
"AuthorizationCode": "SHzyyl2021",
"SiteUrl": "http://irc.uat.extimaging.com/login",
"CompanyName": "Extensive Imaging",
"CompanyNameCN": "上海展影医疗科技有限公司",
"CompanyShortName": "Extensive Imaging",
"CompanyShortNameCN": "展影医疗"
}
}
+23 -3
View File
@@ -1,8 +1,8 @@
{
"JwtSetting": {
"SecurityKey": "3e6dbfa227234a03977a2f421bdb7f4f",
"Issuer": "IRaCIS",
"Audience": "ZhiZhun",
"SecurityKey": "SecurityKey_SHzyyl@2021",
"Issuer": "Extimaging",
"Audience": "EICS",
"TokenExpireDays": "7"
},
"IpRateLimiting": {
@@ -55,6 +55,26 @@
"EnableReadDeepClone": true,
"EnableWriteDeepClone": false
}
},
"redis": {
"MaxRdSecond": 120,
"EnableLogging": false,
"LockMs": 5000,
"SleepMs": 300,
"dbconfig": {
"Password": "xc@123456",
"IsSsl": false,
"SslHost": null,
"ConnectionTimeout": 5000,
"AllowAdmin": true,
"Endpoints": [
{
"Host": "47.117.164.182",
"Port": 6379
}
],
"Database": 0
}
}
},
"IRaCISImageStore": {
@@ -11,7 +11,7 @@
尊敬的 {0} ,您好:
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
展影医疗为您添加了账户,账户信息如下:
{company abbreviation}为您添加了账户,账户信息如下:
</div>
<span style="color: #00D1B2"></span>
<div style='border: 1px solid #eee;box-sizing:border-box;width: 50%;background: #fff;padding: 20px;line-height: 40px;font-size: 14px;border-radius: 5px;margin-left: 60px;margin-bottom: 30px;'>
@@ -23,7 +23,7 @@
</div>
<div>
首次登陆前,请通过该链接修改您的账户信息:
<a href='{3}' style='margin-left:30px;font-size:14px;text-decoration: none;display: inline-block;color:#00D1B2;border-radius: 5px;line-height: 40px;text-align: center;'>
<a href='{3}' style='margin-left:1px;font-size:14px;text-decoration: none;display: inline-block;color:#00D1B2;border-radius: 5px;line-height: 40px;text-align: center;'>
初始化账号信息
</a>
</div>
@@ -31,8 +31,8 @@
<div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div>祝您顺利!/Best Regards</div>
<div style="font-size: 14px;">上海展影医疗科技有限公司</div>
<div>祝您顺利!</div>
<div style="font-size: 14px;">{company}</div>
</div>
</div>
</div>
@@ -11,28 +11,28 @@
Dear {0} ,
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
Extimaging has added an account for you. The account information is as follows:
{company abbreviation} has created an account for you. The account information is as follows:
</div>
<span style="color: #00D1B2"></span>
<div style='border: 1px solid #eee;box-sizing:border-box;width: 50%;background: #fff;padding: 20px;line-height: 40px;font-size: 14px;border-radius: 5px;margin-left: 60px;margin-bottom: 30px;'>
<div>
User name: {1}
User ID: {1}
</div>
<div>
Role: {2}
</div>
<div>
Before logging in for the first time, please modify your account information by this link
<a href='{3}' style='margin-left:30px;font-size:14px;text-decoration: none;display: inline-block;color:#00D1B2;border-radius: 5px;line-height: 40px;text-align: center;'>
Initialize the account information
Before logging in for the first time, please modify the account information through this link
<a href='{3}' style='margin-left:1px;font-size:14px;text-decoration: none;display: inline-block;color:#00D1B2;border-radius: 5px;line-height: 40px;text-align: center;'>
Initialize account information
</a>
</div>
</div>
<div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div>Best Regards</div>
<div style="font-size: 14px;">Shanghai Extensive Imaging Medical Technology Co., LTD</div>
<div>Best regards,</div>
<div style="font-size: 14px;">{company}</div>
</div>
</div>
</div>
@@ -11,7 +11,7 @@
尊敬的 {0} ,您好:
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
展影医疗将您的账户密码已重置,账户信息如下:
{company abbreviation}将您的账户密码已重置,账户信息如下:
</div>
<span style="color: #00D1B2"></span>
<div style='border: 1px solid #eee;box-sizing:border-box;width: 50%;background: #fff;padding: 20px;line-height: 40px;font-size: 14px;border-radius: 5px;margin-left: 60px;margin-bottom: 30px;'>
@@ -28,8 +28,8 @@
<div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div>祝您顺利!/Best Regards</div>
<div style="font-size: 14px;">上海展影医疗科技有限公司</div>
<div>祝您顺利!</div>
<div style="font-size: 14px;">{company}</div>
</div>
</div>
</div>
@@ -11,12 +11,12 @@
Dear {0} ,
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
Extimaging has reset your account password, and the account information is as follows:
{company abbreviation} has reset your account password, and the account information is as follows:
</div>
<span style="color: #00D1B2"></span>
<div style='border: 1px solid #eee;box-sizing:border-box;width: 50%;background: #fff;padding: 20px;line-height: 40px;font-size: 14px;border-radius: 5px;margin-left: 60px;margin-bottom: 30px;'>
<div>
User name: {1}
User ID: {1}
</div>
<div>
Role: {2}
@@ -28,8 +28,8 @@
<div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div>Best Regards</div>
<div style="font-size: 14px;">Shanghai Extensive Imaging Medical Technology Co., LTD</div>
<div>Best regards,</div>
<div style="font-size: 14px;">{company}</div>
</div>
</div>
</div>
@@ -1,27 +0,0 @@
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='UTF-8'>
<title>Title</title>
</head>
<body style='font-family: 微软雅黑;padding: 0;margin: 0;'>
<div style='padding-left: 40px;background: #f6f6f6'>
<div style='padding-top: 20px;'>
<div style='line-height: 40px;font-size: 18px'>
您好:
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
感谢您使用展影云平台。
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
{0}。
</div>
<div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div>祝您顺利!/Best Regards</div>
<div style="font-size: 14px;">上海展影医疗科技有限公司</div>
</div>
</div>
</div>
</body>
</html>
@@ -1,27 +0,0 @@
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='UTF-8'>
<title>Title</title>
</head>
<body style='font-family: 微软雅黑;padding: 0;margin: 0;'>
<div style='padding-left: 40px;background: #f6f6f6'>
<div style='padding-top: 20px;'>
<div style='line-height: 40px;font-size: 18px'>
Dear
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
Thank you for using Extensive Imaging Cloud System.
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
{0}。
</div>
<div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div>Best Regards</div>
<div style="font-size: 14px;">Shanghai Extensive Imaging Medical Technology Co., LTD</div>
</div>
</div>
</div>
</body>
</html>
@@ -18,8 +18,8 @@
</div>
<div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div>祝您顺利!/Best Regards</div>
<div style="font-size: 14px;">上海展影医疗科技有限公司</div>
<div>祝您顺利!</div>
<div style="font-size: 14px;">{company}</div>
</div>
</div>
</div>
@@ -11,15 +11,15 @@
Dear
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
Thank you for using Extensive Imaging Cloud System.
Thank you for using {company abbreviation} Cloud System.
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
{0}。
</div>
<div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div>Best Regards</div>
<div style="font-size: 14px;">Shanghai Extensive Imaging Medical Technology Co., LTD</div>
<div>Best regards,</div>
<div style="font-size: 14px;">{company}</div>
</div>
</div>
</div>
@@ -11,7 +11,7 @@
尊敬的 {0} ,您好:
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
展影医疗作为 [{1} (试验方案号:{2 })] 项目的IRC供应商,诚邀您参加该项目IRC阅片相关工作,欢迎您提供指导和建议,非常感谢!
{company abbreviation}作为 [{1} (试验方案号:{2 })] 项目的供应商,诚邀您参加该项目阅片相关工作
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
该项目采用电子化工作流,系统及您的账号信息如下:
@@ -34,14 +34,16 @@
角色: {5}
</div>
<div>
系统登录地址:{6}
系统登录地址:
<a href='{6}' style='margin-left:1px;font-size:14px;text-decoration: none;display: inline-block;color:#00D1B2;border-radius: 5px;line-height: 40px;text-align: center;'>
点击跳转
</a>
</div>
</div>
<div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div>祝您顺利!/Best Regards</div>
<div style="font-size: 14px;">上海展影医疗科技有限公司</div>
<div>祝您顺利!</div>
<div style="font-size: 14px;">{company}</div>
</div>
</div>
</div>
@@ -10,11 +10,11 @@
<div style='line-height: 40px;font-size: 18px'>
Dear {0},
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
Hello, as the IRC supplier of [ {1} (Protocol ID is {2}) ] projectExtiming sincerely invites you to participate in the IRC related work of this project. Your guidance and suggestions are welcome.
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;font-size: 16px'>
{company abbreviation} invites you to participate in the IRC work of a trial ({1} , {2}).
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
This project adopts electronic workflow. The system and your account information are as follows
Your account information is as follows
</div>
<span style="color: #00D1B2"></span>
<div style='border: 1px solid #eee;box-sizing:border-box;width: 50%;background: #fff;padding: 20px;line-height: 40px;font-size: 14px;border-radius: 5px;margin-left: 60px;margin-bottom: 30px;'>
@@ -25,23 +25,26 @@
Protocol ID: {2}
</div>
<div>
Study name: {1}
Study Name: {1}
</div>
<div>
User name: {4}
User ID: {4}
</div>
<div>
Role: {5}
</div>
<div>
System login address:{6}
Login URL:
<a href='{6}' style='margin-left:1px;font-size:14px;text-decoration: none;display: inline-block;color:#00D1B2;border-radius: 5px;line-height: 40px;text-align: center;'>
Click to login
</a>
</div>
</div>
<div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div>Best Regards</div>
<div style="font-size: 14px;">Shanghai Extensive Imaging Medical Technology Co., LTD</div>
<div>Best regards,</div>
<div style="font-size: 14px;">{company}</div>
</div>
</div>
</div>
@@ -11,7 +11,7 @@
尊敬的 {0} ,您好:
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
展影医疗作为 [{1} (试验方案号:{2 })] 项目的IRC供应商,诚邀您参加该项目IRC阅片相关工作,欢迎您提供指导和建议,非常感谢!
{company abbreviation}作为 [{1} (试验方案号:{2 })] 项目的IRC供应商,诚邀您参加该项目IRC阅片相关工作,欢迎您提供指导和建议,非常感谢!
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
该项目采用电子化工作流,系统及您的账号信息如下:
@@ -35,7 +35,7 @@
</div>
<div>
首次登陆前,请通过该链接修改您的账户信息:
<a href='{6}' style='margin-left:30px;font-size:14px;text-decoration: none;display: inline-block;color:#00D1B2;border-radius: 5px;line-height: 40px;text-align: center;'>
<a href='{6}' style='margin-left:1px;font-size:14px;text-decoration: none;display: inline-block;color:#00D1B2;border-radius: 5px;line-height: 40px;text-align: center;'>
初始化账号信息
</a>
</div>
@@ -43,8 +43,8 @@
<div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div>祝您顺利!/Best Regards</div>
<div style="font-size: 14px;">上海展影医疗科技有限公司</div>
<div>祝您顺利!</div>
<div style="font-size: 14px;">{company}</div>
</div>
</div>
</div>
@@ -11,10 +11,10 @@
Dear {0},
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
Hello, as the IRC supplier of [ {1} (Protocol ID is {2}) ] projectExtiming sincerely invites you to participate in the IRC related work of this project. Your guidance and suggestions are welcome.
{company abbreviation} invites you to participate in the IRC work of a trial ({1}, {2}).
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
This project adopts electronic workflow. The system and your account information are as follows
Your account information is as follows
</div>
<span style="color: #00D1B2"></span>
<div style='border: 1px solid #eee;box-sizing:border-box;width: 50%;background: #fff;padding: 20px;line-height: 40px;font-size: 14px;border-radius: 5px;margin-left: 60px;margin-bottom: 30px;'>
@@ -25,26 +25,26 @@
Protocol ID: {2}
</div>
<div>
Study name: {1}
Study Name: {1}
</div>
<div>
User name: {4}
User ID: {4}
</div>
<div>
Role: {5}
</div>
<div>
Before logging in for the first time, please modify your account information by this link
<a href='{6}' style='margin-left:30px;font-size:14px;text-decoration: none;display: inline-block;color:#00D1B2;border-radius: 5px;line-height: 40px;text-align: center;'>
Initialize the account information
Before logging in for the first time, please modify the account information through this link
<a href='{6}' style='margin-left:1px;font-size:14px;text-decoration: none;display: inline-block;color:#00D1B2;border-radius: 5px;line-height: 40px;text-align: center;'>
Initialize account information
</a>
</div>
</div>
<div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div>Best Regards</div>
<div style="font-size: 14px;">Shanghai Extensive Imaging Medical Technology Co., LTD</div>
<div>Best regards,</div>
<div style="font-size: 14px;">{company}</div>
</div>
</div>
</div>
@@ -11,7 +11,7 @@
尊敬的 {0} ,您好:
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
好, 您填写的中心调研表被驳回,详细信息如下:
您填写的中心调研表被驳回,详细信息如下:
</div>
<span style="color: #00D1B2"></span>
<div style='border: 1px solid #eee;box-sizing:border-box;width: 50%;background: #fff;padding: 20px;line-height: 40px;font-size: 14px;border-radius: 5px;margin-left: 60px;margin-bottom: 30px;'>
@@ -40,8 +40,8 @@
</a>
<div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div>祝您顺利!/Best Regards</div>
<div style="font-size: 14px;">上海展影医疗科技有限公司</div>
<div>祝您顺利!</div>
<div style="font-size: 14px;">{company}</div>
</div>
</div>
</div>
@@ -11,7 +11,7 @@
Dear {0} ,
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
Hello, the center survey form you filled in has been rejected. The details are as follows
The site survey form you filled in has been rejected. The details are as follows
</div>
<span style="color: #00D1B2"></span>
<div style='border: 1px solid #eee;box-sizing:border-box;width: 50%;background: #fff;padding: 20px;line-height: 40px;font-size: 14px;border-radius: 5px;margin-left: 60px;margin-bottom: 30px;'>
@@ -22,7 +22,7 @@
Protocol ID: {2}
</div>
<div>
Study name: {3}
Study Name: {3}
</div>
<div>
Site ID: {4}
@@ -40,8 +40,8 @@
</a>
<div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div>Best Regards</div>
<div style="font-size: 14px;">Shanghai Extensive Imaging Medical Technology Co., LTD</div>
<div>Best regards,</div>
<div style="font-size: 14px;">{company}</div>
</div>
</div>
</div>
@@ -11,7 +11,7 @@
尊敬的 {0} ,您好:
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
展影医疗作为 [{1} (试验方案号:{2 })] 项目的IRC供应商,诚邀您参加该项目IRC相关工作,欢迎您提供指导和建议,非常感谢!
{company abbreviation}作为 [{1} (试验方案号:{2 })] 项目的供应商,诚邀您参加该项目相关工作,欢迎您提供指导和建议,非常感谢!
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
该项目采用电子化工作流,系统及您的账号信息如下:
@@ -34,14 +34,17 @@
角色: {5}
</div>
<div>
系统登录地址:{6}
系统登录地址:
<a href='{6}' style='margin-left:5px;font-size:14px;text-decoration: none;display: inline-block;color:#00D1B2;border-radius: 5px;line-height: 40px;text-align: center;'>
点击跳转
</a>
</div>
</div>
<div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div>祝您顺利!/Best Regards</div>
<div style="font-size: 14px;">上海展影医疗科技有限公司</div>
<div>祝您顺利!</div>
<div style="font-size: 14px;">{company}</div>
</div>
</div>
</div>
@@ -10,11 +10,11 @@
<div style='line-height: 40px;font-size: 18px'>
Dear {0},
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
Hello, as the IRC supplier of [ {1} (Protocol ID is {2}) ] projectExtiming sincerely invites you to participate in the IRC related work of this project. Your guidance and suggestions are welcome.
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;font-size: 16px'>
{company abbreviation} invites you to participate in the IRC work of a trial ({1}, {2}).
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
This project adopts electronic workflow. The system and your account information are as follows
Your account information is as follows
</div>
<span style="color: #00D1B2"></span>
<div style='border: 1px solid #eee;box-sizing:border-box;width: 50%;background: #fff;padding: 20px;line-height: 40px;font-size: 14px;border-radius: 5px;margin-left: 60px;margin-bottom: 30px;'>
@@ -25,23 +25,26 @@
Protocol ID: {2}
</div>
<div>
Study name: {1}
Study Name: {1}
</div>
<div>
User name: {4}
User ID: {4}
</div>
<div>
Role: {5}
</div>
<div>
System login address:{6}
Login URL:
<a href='{6}' style='margin-left:1px;font-size:14px;text-decoration: none;display: inline-block;color:#00D1B2;border-radius: 5px;line-height: 40px;text-align: center;'>
Click to login
</a>
</div>
</div>
<div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div>Best Regards</div>
<div style="font-size: 14px;">Shanghai Extensive Imaging Medical Technology Co., LTD</div>
<div>Best regards,</div>
<div style="font-size: 14px;">{company}</div>
</div>
</div>
</div>
@@ -11,7 +11,7 @@
尊敬的 {0} ,您好:
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
展影医疗作为 [{1} (试验方案号:{2 })] 项目的IRC供应商,诚邀您参加该项目IRC相关工作,欢迎您提供指导和建议,非常感谢!
{company abbreviation}作为 [{1} (试验方案号:{2 })] 项目的IRC供应商,诚邀您参加该项目IRC相关工作,欢迎您提供指导和建议,非常感谢!
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
该项目采用电子化工作流,系统及您的账号信息如下:
@@ -35,7 +35,7 @@
</div>
<div>
首次登陆前,请通过该链接修改您的账户信息:
<a href='{6}' style='margin-left:30px;font-size:14px;text-decoration: none;display: inline-block;color:#00D1B2;border-radius: 5px;line-height: 40px;text-align: center;'>
<a href='{6}' style='margin-left:1px;font-size:14px;text-decoration: none;display: inline-block;color:#00D1B2;border-radius: 5px;line-height: 40px;text-align: center;'>
初始化账号信息
</a>
</div>
@@ -43,8 +43,8 @@
<div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div>祝您顺利!/Best Regards</div>
<div style="font-size: 14px;">上海展影医疗科技有限公司</div>
<div>祝您顺利!</div>
<div style="font-size: 14px;">{company}</div>
</div>
</div>
</div>
@@ -11,10 +11,10 @@
Dear {0},
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
Hello, as the IRC supplier of [ {1} (Protocol ID is {2}) ] projectExtiming sincerely invites you to participate in the IRC related work of this project. Your guidance and suggestions are welcome.
{company abbreviation} invites you to participate in the IRC work of a trial ({1}, {2}).
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
This project adopts electronic workflow. The system and your account information are as follows
Your account information is as follows
</div>
<span style="color: #00D1B2"></span>
<div style='border: 1px solid #eee;box-sizing:border-box;width: 50%;background: #fff;padding: 20px;line-height: 40px;font-size: 14px;border-radius: 5px;margin-left: 60px;margin-bottom: 30px;'>
@@ -25,26 +25,26 @@
Protocol ID: {2}
</div>
<div>
Study name: {1}
Study Name: {1}
</div>
<div>
User name: {4}
User ID: {4}
</div>
<div>
Role: {5}
</div>
<div>
Before logging in for the first time, please modify your account information by this link
<a href='{6}' style='margin-left:30px;font-size:14px;text-decoration: none;display: inline-block;color:#00D1B2;border-radius: 5px;line-height: 40px;text-align: center;'>
Initialize the account information
Before logging in for the first time, please modify the account information through this link
<a href='{6}' style='margin-left:1px;font-size:14px;text-decoration: none;display: inline-block;color:#00D1B2;border-radius: 5px;line-height: 40px;text-align: center;'>
Initialize the account information
</a>
</div>
</div>
<div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div>Best Regards</div>
<div style="font-size: 14px;">Shanghai Extensive Imaging Medical Technology Co., LTD</div>
<div>Best regards,</div>
<div style="font-size: 14px;">{company}</div>
</div>
</div>
</div>
@@ -8,18 +8,20 @@
<div style='padding-left: 40px;background: #f6f6f6'>
<div style='padding-top: 20px;'>
<div style='line-height: 40px;font-size: 18px'>
Dear {0},
{0}您好,
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
感谢您使用展影云平台。
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
{1},验证码是: {2},请在3分钟内输入该验证码,进行后续操作。如非本人操作,请忽略该邮件
{1},验证码是: <span style="font-weight:bold">{2}</span>
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
请在3分钟内输入该验证码,进行后续操作
</div>
<div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div>祝您顺利!/Best Regards</div>
<div style="font-size: 14px;">上海展影医疗科技有限公司</div>
<div>祝您顺利!</div>
<div style="font-size: 14px;">{company}</div>
</div>
</div>
</div>
@@ -11,16 +11,18 @@
Dear {0},
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
Thank you for using Extensive Imaging Cloud System.
{1}
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
{1}, the verification code is {2}. Enter the verification code within 3 minutes for subsequent operations. Please ignore this email if not by yourself.
The verification code is <span style="font-weight:bold">{2}</span>.
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
This code will expire in 3 minutes.
</div>
<div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div>Best Regards</div>
<div style="font-size: 14px;">Shanghai Extensive Imaging Medical Technology Co., LTD</div>
<div>Best regards,</div>
<div style="font-size: 14px;">{company}</div>
</div>
</div>
</div>
@@ -276,8 +276,10 @@ var abp = abp || {};
}
var password = document.getElementById('password').value;
if (!password) {
alert('PassWord Can Not Be Null');
var pwdMd5 = document.getElementById('pwdMd5').value;
console.log(pwdMd5);
if (!password && !pwdMd5) {
alert('PassWord And Md5 Can Not Be Null');
return false;
}
@@ -321,6 +323,9 @@ var abp = abp || {};
UserName: usernameOrEmailAddress,
Password: hex_md5(password),
}
if (pwdMd5 != '') {
parm.Password = pwdMd5;
}
xhr.send(JSON.stringify(parm));
//xhr.send("{" + "userName:'" + usernameOrEmailAddress + "'," + "passWord:'" + password + "'}");
@@ -414,8 +419,9 @@ var abp = abp || {};
//Inputs
createInput(modalUxContent, 'tenancyName', 'Tenancy Name (Leave empty for Host)');
createInput(modalUxContent, 'userName', 'Username or email address','text','admin');
createInput(modalUxContent, 'password', 'Password','password');
createInput(modalUxContent, 'userName', 'Username or email address','text','cyldev');
createInput(modalUxContent, 'password', 'Password', 'password', '123456');
createInput(modalUxContent, 'pwdMd5', 'PwdMd5', 'text', '');
//Buttons
var authBtnWrapper = document.createElement('div');
@@ -1,97 +0,0 @@
using Castle.DynamicProxy;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
namespace IRaCIS.Core.Application.AOP
{
public abstract class AsyncInterceptorBase : IInterceptor
{
public AsyncInterceptorBase()
{
}
public void Intercept(IInvocation invocation)
{
BeforeProceed(invocation);
invocation.Proceed();
if (IsAsyncMethod(invocation.MethodInvocationTarget))
{
invocation.ReturnValue = InterceptAsync((dynamic)invocation.ReturnValue, invocation);
}
else
{
AfterProceedSync(invocation);
}
}
private bool CheckMethodReturnTypeIsTaskType(MethodInfo method)
{
var methodReturnType = method.ReturnType;
if (methodReturnType.IsGenericType)
{
if (methodReturnType.GetGenericTypeDefinition() == typeof(Task<>) ||
methodReturnType.GetGenericTypeDefinition() == typeof(ValueTask<>))
return true;
}
else
{
if (methodReturnType == typeof(Task) ||
methodReturnType == typeof(ValueTask))
return true;
}
return false;
}
private bool IsAsyncMethod(MethodInfo method)
{
bool isDefAsync = Attribute.IsDefined(method, typeof(AsyncStateMachineAttribute), false);
bool isTaskType = CheckMethodReturnTypeIsTaskType(method);
bool isAsync = isDefAsync && isTaskType;
return isAsync;
}
protected object ProceedAsyncResult { get; set; }
private async Task InterceptAsync(Task task, IInvocation invocation)
{
await task.ConfigureAwait(false);
await AfterProceedAsync(invocation, false);
}
private async Task<TResult> InterceptAsync<TResult>(Task<TResult> task, IInvocation invocation)
{
ProceedAsyncResult = await task.ConfigureAwait(false);
await AfterProceedAsync(invocation, true);
return (TResult)ProceedAsyncResult;
}
private async ValueTask InterceptAsync(ValueTask task, IInvocation invocation)
{
await task.ConfigureAwait(false);
await AfterProceedAsync(invocation, false);
}
private async ValueTask<TResult> InterceptAsync<TResult>(ValueTask<TResult> task, IInvocation invocation)
{
ProceedAsyncResult = await task.ConfigureAwait(false);
await AfterProceedAsync(invocation, true);
return (TResult)ProceedAsyncResult;
}
protected virtual void BeforeProceed(IInvocation invocation) { }
protected virtual void AfterProceedSync(IInvocation invocation) { }
protected virtual Task AfterProceedAsync(IInvocation invocation, bool hasAsynResult)
{
return Task.CompletedTask;
}
}
}
-499
View File
@@ -1,499 +0,0 @@
//using System;
//using Castle.DynamicProxy;
//using IRaCIS.Core.Application.Contracts.Dicom.DTO;
//using IRaCIS.Core.Infra.EFCore;
//using System.Linq;
//using IRaCIS.Core.Domain.Models;
//using IRaCIS.Core.Domain.Share;
//namespace IRaCIS.Core.API.Utility.AOP
//{
//#pragma warning disable
// public class QANoticeAOP : IInterceptor
// {
// private readonly IRepository<QANotice> _qaNoticeRepository;
// private readonly IRepository<DicomStudy> _studyRepository;
// private readonly IRepository<TrialUser> _userTrialRepository;
// private readonly IRepository<TrialSiteUser> _userTrialSiteRepository;
// private readonly IUserInfo _userInfo;
// public QANoticeAOP(IRepository<QANotice> qaNoticeRepository,
// IUserInfo userInfo, IRepository<DicomStudy> studyRepository, IRepository<TrialUser> userTrialRepository, IRepository<TrialSiteUser> userTrialSiteRepository)
// {
// _qaNoticeRepository = qaNoticeRepository;
// _studyRepository = studyRepository;
// _userTrialRepository = userTrialRepository;
// _userTrialSiteRepository = userTrialSiteRepository;
// _userInfo = userInfo;
// }
// public void Intercept(IInvocation invocation)
// {
// //处理拦截的方法
// invocation.Proceed();
// if (invocation.Method.Name == "UpdateStudyStatus")
// {
// var studyStatus = invocation.Arguments[0] as StudyStatusDetailCommand;
// var study = _studyRepository.FirstOrDefault(t=>t.Id==studyStatus.StudyId);
// if (study.Status == (int)StudyStatus.Uploaded)
// {
// _qaNoticeRepository.Add(new QANotice()
// {
// TrialId = study.TrialId,
// SubjectVisitId = study.Id,
// FromUser = _userInfo.RealName,
// FromUserId = _userInfo.Id,
// FromUserType = _userInfo.UserTypeShortName,
// NoticeTypeEnum = NoticeType.NotNeedNotice,
// NeedDeal = false,
// StudyStatusStr = "Uploaded",
// Message = $"CRC : {_userInfo.RealName} has uploaded {study.StudyCode} ",
// SendTime = DateTime.Now,
// });
// }
// #region 处理QA通知模块
// //查询项目的参与者 和 负责site下CRC用户
// var trialUserList = _userTrialRepository.Where(t => t.TrialId == study.TrialId).ToList();
// // 找到该study 关联Site 下的CRC
// var crcList = _userTrialSiteRepository.Where(t =>
// t.SiteId == study.SiteId && t.User.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator && t.TrialId == study.TrialId).ToList();
// var qaList = trialUserList.Where(t => t.User.UserTypeEnum == UserTypeEnum.IQC).ToList();
// var pm = trialUserList.FirstOrDefault(t => t.User.UserTypeEnum == UserTypeEnum.ProjectManager);
// // CRC =>QA
// if (studyStatus.Status == (int)StudyStatus.QARequested)
// {
// //找出当前操作的CRC
// //PM 或者admin可以代替CRC角色 不能从CRC列表中查询用户
// //var currentCRC = trialUserList.First(t => t.UserId == _userInfo.Id);
// var notice = new QANotice()
// {
// TrialId = study.TrialId,
// SubjectVisitId = study.Id,
// FromUser = _userInfo.RealName,
// FromUserId = _userInfo.Id,
// FromUserType = _userInfo.UserTypeShortName,
// //FromUser = currentCRC.UserRealName,
// //FromUserId = _userInfo.Id,
// //FromUserType = currentCRC.UserType,
// NoticeTypeEnum = NoticeType.CRC_RequestToQA_NoticeQA,
// NeedDeal = true,
// StudyStatusStr = "QA Requested",
// Message =
// $"CRC -> QA : {_userInfo.RealName} request QA {study.StudyCode} , Inquiry can be performed! ",
// SendTime = DateTime.Now,
// };
// qaList.ForEach(t => notice.QANoticeUserList.Add(new QANoticeUser()
// {
// QANoticeId = notice.Id,
// SubjectVisitId = study.Id,
// ToUser = t.User.LastName + " / " + t.User.FirstName,
// ToUserId = t.UserId,
// ToUserType = t.User.UserTypeRole.UserTypeShortName
// }));
// _qaNoticeRepository.Add(notice);
// //DealRequestToQA(study.Id);
// var needDealNoticeList = _qaNoticeRepository.AsQueryable()
// .Where(t => t.SubjectVisitId == study.Id && t.NeedDeal && t.NoticeTypeEnum == NoticeType.CRC_RequestToQA_NoticeQA).ToList();
// needDealNoticeList.ForEach(t =>
// {
// t.NeedDeal = false;
// t.DealTime = DateTime.Now;
// _qaNoticeRepository.Update(t);
// });
// }
// // QA =>CRC 向CRC推送消息影像有问题 同时作为 requestToQA 的边界
// else if (studyStatus.Status == (int)StudyStatus.QAing)
// {
// //找出当前操作的QA 如果是pm 或者admin 代替操作 此时会有问题 所以 谁代替,就以谁的名义执行
// //var currentQA = qaList.First(t => t.UserId == _userInfo.Id);
// //var currentQA = trialUserList.First(t => t.UserId == _userInfo.Id);
// //在项目CRC列表中筛选出 负责该study关联 site的CRC
// var siteCRCList = _userTrialSiteRepository.Where(t =>
// t.SiteId == study.SiteId && t.User.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator && t.TrialId == study.TrialId).ToList();
// //查询项目的参与者 和 负责site下CRC用户
// var notice = new QANotice()
// {
// TrialId = study.TrialId,
// SubjectVisitId = study.Id,
// //FromUser = currentQA.UserRealName,
// //FromUserId = _userInfo.Id,
// //FromUserType = currentQA.UserType,
// FromUser = _userInfo.RealName,
// FromUserId = _userInfo.Id,
// FromUserType = _userInfo.UserTypeShortName,
// NoticeTypeEnum = NoticeType.QA_InQA_NoticeCRC,
// NeedDeal = true,
// StudyStatusStr = "In QA",
// Message = $"QA -> CRC : {_userInfo.RealName} inquiry {study.StudyCode} ",
// SendTime = DateTime.Now,
// };
// siteCRCList.ForEach(t => notice.QANoticeUserList.Add(new QANoticeUser()
// {
// QANoticeId = notice.Id,
// SubjectVisitId = study.Id,
// ToUser = t.User.LastName + " / " + t.User.FirstName,
// ToUserId = t.UserId,
// ToUserType = t.UserTypeRole.UserTypeShortName
// }));
// //添加 发送给CRC的消息 消息和CRC是 一对多
// _qaNoticeRepository.Add(notice);
// //处理 消息 标记已处理
// var needDealNoticeList = _qaNoticeRepository.AsQueryable()
// .Where(t => t.SubjectVisitId == study.Id && t.NeedDeal &&
// (t.NoticeTypeEnum == NoticeType.CRC_RequestToQA_NoticeQA ||
// t.NoticeTypeEnum == NoticeType.CRC_ReUpload_NoticeQA ||
// t.NoticeTypeEnum == NoticeType.CRC_QARecordDialogPost_NoticeQA)).ToList();
// needDealNoticeList.ForEach(t =>
// {
// t.NeedDeal = false;
// t.DealTime = DateTime.Now;
// _qaNoticeRepository.Update(t);
// });
// }
// // QA =>QA 给自己的消息 通知需要匿名化 同时作为 requestToQA 的边界
// else if (studyStatus.Status == (int)StudyStatus.QAFinish)
// {
// //找出当前操作的QA 如果是pm 或者admin 代替操作 此时会有问题 所以 谁代替,就以谁的名义执行
// //var currentQA = qaList.First(t => t.UserId == _userInfo.Id);
// //var currentQA = trialUserList.First(t => t.UserId == _userInfo.Id);
// //发送给当前项目QA列表
// var notice = new QANotice()
// {
// TrialId = study.TrialId,
// SubjectVisitId = study.Id,
// //FromUser = currentQA.UserRealName,
// //FromUserId = _userInfo.Id,
// //FromUserType = currentQA.UserType,
// FromUser = _userInfo.RealName,
// FromUserId = _userInfo.Id,
// FromUserType = _userInfo.UserTypeShortName,
// NoticeTypeEnum = NoticeType.QA_QAPass_NoticeQA,
// NeedDeal = true,
// StudyStatusStr = "QA-Passed",
// Message =
// $"QA -> QA : {_userInfo.RealName} inquiry {study.StudyCode} finishedAnonymization can be performed",
// SendTime = DateTime.Now,
// };
// qaList.ForEach(t => notice.QANoticeUserList.Add(new QANoticeUser()
// {
// QANoticeId = notice.Id,
// SubjectVisitId = study.Id,
// ToUser = t.User.LastName+" / "+t.User.FirstName,
// ToUserId = t.UserId,
// ToUserType = t.User.UserTypeRole.UserTypeShortName
// }));
// _qaNoticeRepository.Add(notice);
// //处理 消息 标记已处理 存在意外情况 qa发给CRC的 但是qa里面设置了 通过或者不通过 此时qa发送的消息也设置为已处理
// var needDealNoticeList = _qaNoticeRepository.AsQueryable()
// .Where(t => t.SubjectVisitId == study.Id && t.NeedDeal &&
// (t.NoticeTypeEnum == NoticeType.CRC_RequestToQA_NoticeQA ||
// t.NoticeTypeEnum == NoticeType.CRC_ReUpload_NoticeQA ||
// t.NoticeTypeEnum == NoticeType.CRC_QARecordDialogPost_NoticeQA ||
// t.NoticeTypeEnum == NoticeType.QA_QARecordDialogPost_NoticeCRC ||
// t.NoticeTypeEnum == NoticeType.QA_InQA_NoticeCRC ||
// t.NoticeTypeEnum == NoticeType.QA_AddQARecord_NoticeCRC)).ToList();
// needDealNoticeList.ForEach(t =>
// {
// t.NeedDeal = false;
// t.DealTime = DateTime.Now;
// _qaNoticeRepository.Update(t);
// });
// }
// // QA =>CRC 暂时不用发送消息给CRC 因为CRC 暂时没有入口回复 同时作为 requestToQA 的边界
// else if (studyStatus.Status == (int)StudyStatus.QAFInishNotPass)
// {
// _qaNoticeRepository.Add(new QANotice()
// {
// TrialId = study.TrialId,
// SubjectVisitId = study.Id,
// FromUser = _userInfo.RealName,
// FromUserId = _userInfo.Id,
// FromUserType = _userInfo.UserTypeShortName,
// NoticeTypeEnum = NoticeType.NotNeedNotice,
// NeedDeal = false,
// StudyStatusStr = "QA-Failed",
// Message = $"QA : {_userInfo.RealName} set {study.StudyCode} QA-Failed ",
// SendTime = DateTime.Now,
// });
// //处理 消息 标记已处理
// var needDealNoticeList = _qaNoticeRepository.AsQueryable()
// .Where(t => t.SubjectVisitId == study.Id && t.NeedDeal &&
// (t.NoticeTypeEnum == NoticeType.CRC_RequestToQA_NoticeQA ||
// t.NoticeTypeEnum == NoticeType.CRC_ReUpload_NoticeQA ||
// t.NoticeTypeEnum == NoticeType.CRC_QARecordDialogPost_NoticeQA ||
// t.NoticeTypeEnum == NoticeType.QA_QARecordDialogPost_NoticeCRC ||
// t.NoticeTypeEnum == NoticeType.QA_InQA_NoticeCRC ||
// t.NoticeTypeEnum == NoticeType.QA_AddQARecord_NoticeCRC)).ToList();
// needDealNoticeList.ForEach(t =>
// {
// t.NeedDeal = false;
// t.DealTime = DateTime.Now;
// _qaNoticeRepository.Update(t);
// });
// }
// #endregion
// }
// else if (invocation.Method.Name == "ReUploadSameStudy")
// {
// var studyId = Guid.Parse(invocation.Arguments[0].ToString());
// var study = _studyRepository.FirstOrDefault(t => t.Id == studyId);
// var status = study.Status;
// //处理CRC 重传时 QA消息
// if (status == (int)StudyStatus.QAing)
// {
// //查询项目的参与者 和 负责site下CRC用户
// var trialUserList = _userTrialRepository.Where(t => t.TrialId == study.TrialId).ToList();
// // 找到该study 关联Site 下的CRC
// var crcList = _userTrialSiteRepository.Where(t =>
// t.SiteId == study.SiteId && t.User.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator && t.TrialId == study.TrialId).ToList();
// var qaList = trialUserList.Where(t => t.User.UserTypeEnum == UserTypeEnum.IQC).ToList();
// //CRC =>QA CRC的职能被PM 或者admin代替
// //if (_userInfo.UserTypeEnumInt == (int)UserType.ClinicalResearchCoordinator)
// {
// //PM 或者admin可以代替CRC角色 不能从CRC列表中查询用户
// //var currentCRC = trialUserList.First(t => t.UserId == _userInfo.Id);
// var notice = new QANotice()
// {
// TrialId = study.TrialId,
// SubjectVisitId = study.Id,
// //FromUser = currentCRC.UserRealName,
// //FromUserId = _userInfo.Id,
// //FromUserType = currentCRC.UserType,
// FromUser = _userInfo.RealName,
// FromUserId = _userInfo.Id,
// FromUserType = _userInfo.UserTypeShortName,
// NoticeTypeEnum = NoticeType.CRC_ReUpload_NoticeQA,
// NeedDeal = true,
// Message = $"CRC -> QA :{_userInfo.RealName} has reuploaded {study.StudyCode} , Need to be inquiry again",
// SendTime = DateTime.Now
// };
// qaList.ForEach(t => notice.QANoticeUserList.Add(new QANoticeUser()
// {
// QANoticeId = notice.Id,
// SubjectVisitId = study.Id,
// ToUser = t.User.LastName+" / "+t.User.FirstName,
// ToUserId = t.UserId,
// ToUserType = t.User.UserTypeRole.UserTypeShortName
// }));
// _qaNoticeRepository.Add(notice);
// //这里作为 QA 设置 Inqa 状态的回复 或者QA和CRC对话的
// var needDealNoticeList = _qaNoticeRepository.Where(t => t.SubjectVisitId == study.Id && t.NeedDeal
// && (t.NoticeTypeEnum == NoticeType.QA_InQA_NoticeCRC || t.NoticeTypeEnum == NoticeType.QA_QARecordDialogPost_NoticeCRC))
// .ToList();
// needDealNoticeList.ForEach(t =>
// {
// t.NeedDeal = false;
// t.DealTime = DateTime.Now;
// _qaNoticeRepository.Update(t);
// });
// }
// }
// else
// {
// //不是QAing 的重传 不发送qa消息
// return;
// }
// }
// else if (invocation.Method.Name == "DicomAnonymize")
// {
// var studyId = Guid.Parse(invocation.Arguments[0].ToString());
// var study = _studyRepository.FirstOrDefault(t => t.Id == studyId);
// #region 处理QA通知 匿名化完毕 通知PM
// //查询项目的参与者 和 负责site下CRC用户
// var trialUserList = _userTrialRepository.Where(t => t.TrialId == study.TrialId).ToList();
// // 找到该study 关联Site 下的CRC
// var crcList = _userTrialSiteRepository.Where(t =>
// t.SiteId == study.SiteId && t.User.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator && t.TrialId == study.TrialId).ToList();
// var qaList = trialUserList.Where(t => t.User.UserTypeEnum == UserTypeEnum.IQC).ToList();
// //
// var pm = trialUserList.FirstOrDefault(t => t.User.UserTypeEnum == UserTypeEnum.ProjectManager);
// //找出当前操作的QA 如果是pm 或者admin 代替操作 此时会有问题 所以 谁代替,就以谁的名义执行
// //var currentQA = trialUserList.First(t =>
// // t.UserTypeEnum == UserType.IQC && t.UserId == _userInfo.Id);
// //var currentQA = trialUserList.First(t => t.UserId == _userInfo.Id);
// var notice = new QANotice()
// {
// TrialId = study.TrialId,
// SubjectVisitId = study.Id,
// //FromUser = currentQA.UserRealName,
// //FromUserId = _userInfo.Id,
// //FromUserType = currentQA.UserType,
// FromUser = _userInfo.RealName,
// FromUserId = _userInfo.Id,
// FromUserType = _userInfo.UserTypeShortName,
// NoticeTypeEnum = NoticeType.QA_Anonymized_NoticeQA,
// NeedDeal = true,
// StudyStatusStr = "Anonymized",
// //Message = $"QA -> PM :{_userInfo.RealName} has anonymized {study.StudyCode} Forward can be performed!!",
// Message = $"QA -> QA :{_userInfo.RealName} has anonymized {study.StudyCode} Forward can be performed!!",
// SendTime = DateTime.Now,
// };
// //notice.QANoticeUserList.Add(new QANoticeUser()
// //{
// // QANoticeId = notice.Id,
// // StudyId = study.Id,
// // ToUser = pm.UserRealName,
// // ToUserId = pm.UserId,
// // ToUserType = pm.UserType
// //});
// qaList.ForEach(t => notice.QANoticeUserList.Add(new QANoticeUser()
// {
// QANoticeId = notice.Id,
// SubjectVisitId = study.Id,
// ToUser = t.User.LastName+" / "+t.User.FirstName,
// ToUserId = t.UserId,
// ToUserType = t.User.UserTypeRole.UserTypeShortName
// }));
// _qaNoticeRepository.Add(notice);
// var needDealNoticeList = _qaNoticeRepository.AsQueryable()
// .Where(t => t.SubjectVisitId == study.Id && t.NeedDeal && (t.NoticeTypeEnum == NoticeType.QA_QAPass_NoticeQA)).ToList();
// needDealNoticeList.ForEach(t =>
// {
// t.NeedDeal = false;
// t.DealTime = DateTime.Now;
// _qaNoticeRepository.Update(t);
// });
// #endregion
// }
// else if (invocation.Method.Name == "ForwardStudy")
// {
// var studyId = Guid.Parse(invocation.Arguments[0].ToString());
// var study = _studyRepository.FirstOrDefault(t => t.Id == studyId);
// //匿名化操作产生的消息 设置为已经处理
// _qaNoticeRepository.Add(new QANotice()
// {
// TrialId = study.TrialId,
// SubjectVisitId = study.Id,
// //FromUser = currentQA.UserRealName,
// //FromUserId = _userInfo.Id,
// //FromUserType = currentQA.UserType,
// FromUser = _userInfo.RealName,
// FromUserId = _userInfo.Id,
// FromUserType = _userInfo.UserTypeShortName,
// NoticeTypeEnum = NoticeType.NotNeedNotice,
// NeedDeal = false,
// StudyStatusStr = "Forwarded",
// //Message = $"PM :{_userInfo.RealName} has forwarded {study.StudyCode} ",
// Message = $"QA :{_userInfo.RealName} has forwarded {study.StudyCode} ",
// SendTime = DateTime.Now,
// });
// var needDealList = _qaNoticeRepository.Where(t =>
// t.SubjectVisitId == study.Id && t.NeedDeal && t.NoticeTypeEnum == NoticeType.QA_Anonymized_NoticeQA).ToList();
// needDealList.ForEach(t =>
// {
// t.NeedDeal = false;
// t.DealTime = DateTime.Now;
// _qaNoticeRepository.Update(t);
// });
// }
// var success = _qaNoticeRepository.SaveChanges();
// if (!success)
// {
// throw new Exception("Send QA message failed");
// }
// }
// }
//}
@@ -1,89 +0,0 @@
using Castle.DynamicProxy;
using EasyCaching.Core;
using IRaCIS.Application.Contracts;
using IRaCIS.Core.Domain.Share;
namespace IRaCIS.Core.Application.AOP
{
public class TrialStatusAutofacAOP : IAsyncInterceptor
{
private readonly IEasyCachingProvider _provider;
public TrialStatusAutofacAOP(IEasyCachingProvider provider)
{
_provider = provider;
}
public void InterceptAsynchronous(IInvocation invocation)
{
invocation.Proceed();
}
//这里AOP 处理两个方法 分别是 项目的添加和更新、项目状态的变更
public void InterceptAsynchronous<TResult>(IInvocation invocation)
{
//处理拦截的方法
invocation.Proceed();
dynamic result = invocation.ReturnValue;
//接口成功了,才修改缓存
if (!result.IsSuccess)
{
return;
}
#region ,
//if (invocation.Method.Name == "GetTrialList")
//{
// //在此 将当前查询的项目Id 和对应的项目状态进行缓存
// dynamic result = invocation.ReturnValue;
// foreach (var item in result.CurrentPageData)
// {
// _provider.Remove(item.Id.ToString());
// _provider.Set(item.Id.ToString(), item.TrialStatusStr.ToString(), TimeSpan.FromDays(1));
// }
//}
#endregion
if (invocation.Method.Name == "AddOrUpdateTrial")
{
//如果是添加 那么将对应的初始状态加进去 更新状态是单独操作的
var trialModel = (invocation.Arguments[0] as TrialCommand).IfNullThrowConvertException();
if (trialModel.Id == null || trialModel.Id == Guid.Empty)
{
_provider.Set(result.Data.Id.ToString(), StaticData.TrialState.TrialOngoing, TimeSpan.FromDays(1));
}
}
// 更新缓存
else if (invocation.Method.Name == "UpdateTrialStatus")
{
//项目状态更新,也需要及时更新
_provider.Set(invocation.Arguments[0].ToString(), invocation.Arguments[1].ToString(), TimeSpan.FromDays(1));
////Test参数是否符合要求
//var tt = invocation.Arguments[0].ToString();
//var cc = _provider.Get<string>(invocation.Arguments[0].ToString());
}
}
public void InterceptSynchronous(IInvocation invocation)
{
invocation.Proceed();
}
}
}
@@ -1,52 +0,0 @@
using System;
using System.Linq;
using System.Threading.Tasks;
using EasyCaching.Core;
using IRaCIS.Core.Domain;
using IRaCIS.Core.Infra.EFCore;
using IRaCIS.Core.Domain.Models;
using Microsoft.Extensions.Logging;
using Quartz;
namespace IRaCIS.Application.Services.BackGroundJob
{
public class CacheTrialStatusQuartZJob: IJob
{
private readonly IRepository<Trial> _trialRepository;
private readonly IEasyCachingProvider _provider;
private readonly ILogger<CacheTrialStatusQuartZJob> _logger;
public CacheTrialStatusQuartZJob(IRepository<Trial> trialRepository, IEasyCachingProvider provider,ILogger<CacheTrialStatusQuartZJob> logger)
{
_trialRepository = trialRepository;
_provider = provider;
_logger = logger;
}
public Task Execute(IJobExecutionContext context)
{
_logger.LogInformation($"开始执行QuartZ定时任务作业");
try
{
var list = _trialRepository.Select(t => new { TrialId = t.Id, TrialStatusStr = t.TrialStatusStr })
.ToList();
list.ForEach(t => _provider.Set(t.TrialId.ToString(), t.TrialStatusStr, TimeSpan.FromDays(1)));
}
catch (Exception e)
{
_logger.LogError($" 查询和缓存过程出现异常"+e.Message);
}
_logger.LogInformation("QuartZ定时任务作业结束");
return Task.CompletedTask;
}
}
}
@@ -0,0 +1,229 @@
using EasyCaching.Core;
using Hangfire;
using Hangfire.Storage;
using IRaCIS.Core.Application.Helper;
using IRaCIS.Core.Application.Service;
using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Infrastructure;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using SharpCompress.Common;
namespace IRaCIS.Application.Services.BackGroundJob
{
public interface IIRaCISHangfireJob
{
Task MemoryCacheTrialStatusAsync();
Task InitHangfireJobTaskAsync();
}
public class IRaCISCHangfireJob : IIRaCISHangfireJob
{
public static string JsonFileFolder = Path.Combine(AppContext.BaseDirectory, StaticData.Folder.Resources);
public static FileSystemWatcher FileSystemWatcher_US { get; set; }
public static FileSystemWatcher FileSystemWatcher_CN { get; set; }
private readonly IRepository<Trial> _trialRepository;
private readonly IEasyCachingProvider _provider;
private readonly ILogger<IRaCISCHangfireJob> _logger;
private readonly IRepository<SystemAnonymization> _systemAnonymizationRepository;
private readonly IRepository<TrialEmailNoticeConfig> _trialEmailNoticeConfigRepository;
private readonly IRepository<Internationalization> _internationalizationRepository;
public IRaCISCHangfireJob(IRepository<Trial> trialRepository, ILogger<IRaCISCHangfireJob> logger, IEasyCachingProvider provider, IRepository<TrialEmailNoticeConfig> trialEmailNoticeConfigRepository, IRepository<Internationalization> internationalizationRepository, IRepository<SystemAnonymization> systemAnonymizationRepository)
{
_trialRepository = trialRepository;
_provider = provider;
_logger = logger;
_trialEmailNoticeConfigRepository = trialEmailNoticeConfigRepository;
_internationalizationRepository = internationalizationRepository;
_systemAnonymizationRepository = systemAnonymizationRepository;
}
public async Task InitHangfireJobTaskAsync()
{
_logger.LogInformation("项目启动 hangfire 任务初始化 执行开始~");
//项目状态 立即加载到缓存中
await MemoryCacheTrialStatusAsync();
await MemoryCacheAnonymizeData();
//创建项目缓存 定时任务
HangfireJobHelper.AddOrUpdateInitCronJob<IIRaCISHangfireJob>("RecurringJob_Cache_TrialState", t => t.MemoryCacheTrialStatusAsync(), Cron.Daily());
//初始化
await InitInternationlizationDataAndWatchJsonFileAsync();
//创建邮件定时任务
await InitSysAndTrialCronJobAsync();
_logger.LogInformation("项目启动 hangfire 任务初始化 执行结束");
}
/// <summary>
/// 缓存项目状态
/// </summary>
/// <returns></returns>
public async Task MemoryCacheTrialStatusAsync()
{
var list = await _trialRepository.Select(t => new { TrialId = t.Id, TrialStatusStr = t.TrialStatusStr })
.ToListAsync();
list.ForEach(t => _provider.Set(t.TrialId.ToString(), t.TrialStatusStr, TimeSpan.FromDays(7)));
}
public async Task MemoryCacheAnonymizeData()
{
var systemAnonymizationList = await _systemAnonymizationRepository.Where(t => t.IsEnable).ToListAsync();
_provider.Set(StaticData.Anonymize.Anonymize_AddFixedFiled, systemAnonymizationList.Where(t => t.IsAdd && t.IsFixed).ToList(), TimeSpan.FromDays(7));
_provider.Set(StaticData.Anonymize.Anonymize_AddIRCInfoFiled, systemAnonymizationList.Where(t => t.IsAdd && t.IsFixed == false).ToList(), TimeSpan.FromDays(7));
_provider.Set(StaticData.Anonymize.Anonymize_FixedField, systemAnonymizationList.Where(t => t.IsAdd == false && t.IsFixed).ToList(), TimeSpan.FromDays(7));
_provider.Set(StaticData.Anonymize.Anonymize_IRCInfoField, systemAnonymizationList.Where(t => t.IsAdd == false && t.IsFixed == false).ToList(), TimeSpan.FromDays(7));
}
#region
public async Task InitInternationlizationDataAndWatchJsonFileAsync()
{
//查询数据库的数据
var toJsonList = await _internationalizationRepository.Where(t => t.InternationalizationType == 1).Select(t => new
{
t.Code,
t.Value,
t.ValueCN
}).ToListAsync();
//组织成json 文件
var usJsonPath = Path.Combine(JsonFileFolder, StaticData.En_US_Json);
var cnJsonPath = Path.Combine(JsonFileFolder, StaticData.Zh_CN_Json);
//本地静态文件国际化需要
foreach (var tojsonItem in toJsonList)
{
StaticData.En_US_Dic[tojsonItem.Code] = tojsonItem.Value;
StaticData.Zh_CN_Dic[tojsonItem.Code] = tojsonItem.ValueCN;
}
File.WriteAllText(usJsonPath, JsonConvert.SerializeObject(StaticData.En_US_Dic));
File.WriteAllText(cnJsonPath, JsonConvert.SerializeObject(StaticData.Zh_CN_Dic));
//监测Json文件变更 实时刷新数据
if (!File.Exists(usJsonPath)|| !File.Exists(cnJsonPath))
{
throw new BusinessValidationFailedException(StaticData.International("IRaCISCHangfireJob_FileNotFound"));
}
FileSystemWatcher_US = new FileSystemWatcher
{
Path = Path.GetDirectoryName(usJsonPath)!,
NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.Size,
Filter = Path.GetFileName(usJsonPath),
EnableRaisingEvents = true,
};
// 添加文件更改事件的处理程序
FileSystemWatcher_US.Changed += (sender, e) => LoadJsonFile(usJsonPath);
FileSystemWatcher_CN = new FileSystemWatcher
{
Path = Path.GetDirectoryName(cnJsonPath)!,
NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.Size,
Filter = Path.GetFileName(cnJsonPath),
EnableRaisingEvents = true,
};
FileSystemWatcher_CN.Changed += (sender, e) => LoadJsonFile(cnJsonPath);
}
private void LoadJsonFile(string filePath)
{
Console.WriteLine("刷新json内存数据");
IConfigurationBuilder builder = new ConfigurationBuilder().AddJsonFile(filePath,false,true);
IConfigurationRoot enConfiguration = builder.Build();
foreach (IConfigurationSection section in enConfiguration.GetChildren())
{
if (filePath.Contains(StaticData.En_US_Json))
{
StaticData.En_US_Dic[section.Key] = section.Value;
}
else
{
StaticData.Zh_CN_Dic[section.Key] = section.Value;
}
}
}
#endregion
public async Task InitSysAndTrialCronJobAsync()
{
//var deleteJobIdList = await _trialEmailNoticeConfigRepository.Where(t => t.Trial.TrialStatusStr != StaticData.TrialState.TrialOngoing && t.EmailCron != string.Empty && t.IsAutoSend)
// .Select(t => t.TrialId + "_" + t.Id)
// .ToListAsync();
//foreach (var jobId in deleteJobIdList)
//{
// HangfireJobHelper.RemoveCronJob(jobId);
//}
var taskInfoList = await _trialEmailNoticeConfigRepository.Where(t => t.Trial.TrialStatusStr == StaticData.TrialState.TrialOngoing && t.EmailCron != string.Empty && t.IsAutoSend)
.Select(t => new { t.Id, t.Code, t.EmailCron, t.BusinessScenarioEnum, t.TrialId })
.ToListAsync();
foreach (var task in taskInfoList)
{
//利用主键作为任务Id
var jobId = $"{task.TrialId}_{task.Id}";
HangfireJobHelper.AddOrUpdateTrialCronJob(jobId, task.TrialId, task.BusinessScenarioEnum, task.EmailCron);
}
var addOrUpdateJobIdList = taskInfoList.Select(t => $"{t.TrialId}_{t.Id}").ToList();
var list = JobStorage.Current.GetConnection().GetRecurringJobs().ToList();
//项目定时任务都在default 队列
//var dbJobIdList = JobStorage.Current.GetConnection().GetRecurringJobs().Where(t => t.Queue == "default").Select(t => t.Id).ToList();
//var deleteList= dbJobIdList.Except(addOrUpdateJobIdList).ToList();
// foreach (var jobId in deleteList)
// {
// HangfireJobHelper.RemoveCronJob(jobId);
// }
}
}
}
@@ -1,99 +0,0 @@
using EasyCaching.Core;
using IRaCIS.Core.Domain.Share;
using Microsoft.EntityFrameworkCore.SqlServer.Query.Internal;
using Microsoft.Extensions.Logging;
namespace IRaCIS.Application.Services.BackGroundJob
{
public interface IIRaCISCacheHangfireJob
{
Task ProjectStartCache();
Task MemoryCacheTrialStatus();
Task MemoryCacheAnonymizeData();
Task CacheUserTypePermission(Guid? cacheUserTypeId);
}
public class IRaCISCacheHangfireJob: IIRaCISCacheHangfireJob
{
private readonly IRepository<Trial> _trialRepository;
private readonly IEasyCachingProvider _provider;
private readonly ILogger<IRaCISCacheHangfireJob> _logger;
private readonly IRepository<SystemAnonymization> _systemAnonymizationRepository;
private readonly IRepository<UserTypeMenu> _userTypeMenuRepository;
public IRaCISCacheHangfireJob(IRepository<Trial> trialRepository,
IRepository<SystemAnonymization> systemAnonymizationRepository, IRepository<UserTypeMenu> userTypeMenuRepository,
IEasyCachingProvider provider,ILogger<IRaCISCacheHangfireJob> logger)
{
_trialRepository = trialRepository;
_provider = provider;
_logger = logger;
_systemAnonymizationRepository = systemAnonymizationRepository;
_userTypeMenuRepository = userTypeMenuRepository;
}
public async Task ProjectStartCache()
{
_logger.LogInformation("hangfire 定时缓存项目状态任务开始~");
try
{
await MemoryCacheTrialStatus();
await MemoryCacheAnonymizeData();
await CacheUserTypePermission();
}
catch (Exception e)
{
_logger.LogError("hangfire 定时任务执行失败" + e.Message);
}
_logger.LogInformation("hangfire 定时任务执行结束");
}
public async Task MemoryCacheTrialStatus()
{
var list = await _trialRepository.Select(t => new { TrialId = t.Id, TrialStatusStr = t.TrialStatusStr })
.ToListAsync();
list.ForEach(t => _provider.Set(t.TrialId.ToString(), t.TrialStatusStr, TimeSpan.FromDays(7)));
}
public async Task MemoryCacheAnonymizeData()
{
var systemAnonymizationList = await _systemAnonymizationRepository.Where(t => t.IsEnable).ToListAsync();
_provider.Set(StaticData.Anonymize.Anonymize_AddFixedFiled, systemAnonymizationList.Where(t => t.IsAdd && t.IsFixed).ToList(), TimeSpan.FromDays(7));
_provider.Set(StaticData.Anonymize.Anonymize_AddIRCInfoFiled, systemAnonymizationList.Where(t => t.IsAdd && t.IsFixed == false).ToList(), TimeSpan.FromDays(7));
_provider.Set(StaticData.Anonymize.Anonymize_FixedField, systemAnonymizationList.Where(t => t.IsAdd == false && t.IsFixed).ToList(), TimeSpan.FromDays(7));
_provider.Set(StaticData.Anonymize.Anonymize_IRCInfoField, systemAnonymizationList.Where(t => t.IsAdd == false && t.IsFixed == false).ToList(), TimeSpan.FromDays(7));
}
public async Task CacheUserTypePermission(Guid? cacheUserTypeId=null)
{
var permissionList = await _userTypeMenuRepository.Where(t => t.Menu.MenuType == "F")
.WhereIf(cacheUserTypeId != null, t => t.UserTypeId == cacheUserTypeId.Value).Select(t => new { t.UserTypeId, t.Menu.PermissionStr }).ToListAsync();
foreach (var userTypeGroup in permissionList.GroupBy(t => t.UserTypeId))
{
_provider.Set($"{StaticData.CacheKey.UserTypeId}_{userTypeGroup.Key}", userTypeGroup.Select(t => t.PermissionStr).ToList(), TimeSpan.FromDays(7));
}
}
}
}
@@ -1,8 +1,11 @@
using EasyCaching.Core;
using IRaCIS.Core.Domain.Share;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.Extensions.Localization;
using Microsoft.Extensions.Options;
using Newtonsoft.Json;
@@ -11,9 +14,9 @@ namespace IRaCIS.Core.Application.Filter;
public class LimitUserRequestAuthorization :BaseService, IAsyncAuthorizationFilter
public class LimitUserRequestAuthorization : IAsyncAuthorizationFilter
{
public IStringLocalizer _localizer { get; set; }
private readonly IEasyCachingProvider _provider;
@@ -21,16 +24,19 @@ public class LimitUserRequestAuthorization :BaseService, IAsyncAuthorizationFilt
private readonly IOptionsMonitor<ServiceVerifyConfigOption> _verifyConfig;
public LimitUserRequestAuthorization(IEasyCachingProvider provider, IUserInfo userInfo, IOptionsMonitor<ServiceVerifyConfigOption> verifyConfig)
public LimitUserRequestAuthorization(IEasyCachingProvider provider, IUserInfo userInfo, IStringLocalizer localizer ,IOptionsMonitor<ServiceVerifyConfigOption> verifyConfig)
{
_provider = provider;
_userInfo = userInfo;
_verifyConfig = verifyConfig;
_localizer = localizer;
}
public async Task OnAuthorizationAsync(AuthorizationFilterContext context)
{
var minutes = _verifyConfig.CurrentValue.AutoLoginOutMinutes;
if (_verifyConfig.CurrentValue.OpenLoginLimit)
{
if (context.ActionDescriptor.EndpointMetadata.Any(item => item is IAllowAnonymous))
@@ -43,33 +49,55 @@ public class LimitUserRequestAuthorization :BaseService, IAsyncAuthorizationFilt
{
//1、用户登陆的时候,设置缓存
//没有从请求中取到token
if (string.IsNullOrWhiteSpace(_userInfo.UserToken))
{
context.HttpContext.Response.ContentType = "application/json";
context.HttpContext.Response.StatusCode = StatusCodes.Status200OK;
//---当前请求未从Header/Url取到用户Token,请联系开发者
await context.HttpContext.Response.WriteAsync(JsonConvert.SerializeObject(ResponseOutput.NotOk(_localizer["LimitUser_AuthTokenMissing"])));
//await context.HttpContext.Response.WriteAsync(JsonConvert.SerializeObject(ResponseOutput.NotOk(_localizer["LimitUser_AuthTokenMissing"])));
context.Result = new JsonResult(ResponseOutput.NotOk(_localizer["LimitUser_AuthTokenMissing"]));
}
//2、在这里取缓存 进行比较 看是否有其他人进行了登陆,如果其他人登陆了,就把之前用户挤掉
var cacheUserToken = (await _provider.GetAsync<string>(_userInfo.Id.ToString())).Value;
//缓存中没有取到Token
if (string.IsNullOrWhiteSpace(cacheUserToken))
{
cacheUserToken = _userInfo.UserToken;
//设置当前用户最新Token
await _provider.SetAsync(_userInfo.Id.ToString(), _userInfo.UserToken, TimeSpan.FromDays(7));
cacheUserToken = _userInfo.UserToken;
//重启应用程序,所有人续期,不一下子踢出所有人
await _provider.SetAsync($"{_userInfo.Id.ToString()}_Online", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), TimeSpan.FromMinutes(minutes));
}
//是同一个人
else if (cacheUserToken == _userInfo.UserToken)
{
var cacheTime = (await _provider.GetAsync<string>($"{_userInfo.Id.ToString()}_Online")).Value;
//过期了 需要自动退出
if (string.IsNullOrEmpty(cacheTime))
{
context.HttpContext.Response.ContentType = "application/json";
context.HttpContext.Response.StatusCode = StatusCodes.Status403Forbidden;
context.Result = new JsonResult(ResponseOutput.NotOk("登录无操作超时自动退出", ApiResponseCodeEnum.AutoLoginOut));
}
else
{
await _provider.SetAsync($"{_userInfo.Id.ToString()}_Online", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), TimeSpan.FromMinutes(minutes));
}
}
else
@@ -77,8 +105,13 @@ public class LimitUserRequestAuthorization :BaseService, IAsyncAuthorizationFilt
context.HttpContext.Response.ContentType = "application/json";
context.HttpContext.Response.StatusCode = StatusCodes.Status403Forbidden;
//---您的账户在其他地方已登陆,您被迫下线。
await context.HttpContext.Response.WriteAsync(JsonConvert.SerializeObject(ResponseOutput.NotOk(_localizer["LimitUser_AccountLoggedInElsewhere"], ApiResponseCodeEnum.LoginInOtherPlace)));
//---您的账户在其他地方已登陆,您被迫下线。
context.Result = new JsonResult(ResponseOutput.NotOk(_localizer["LimitUser_AccountLoggedInElsewhere"], ApiResponseCodeEnum.LoginInOtherPlace));
//await context.HttpContext.Response.WriteAsync(JsonConvert.SerializeObject(ResponseOutput.NotOk(_localizer["LimitUser_AccountLoggedInElsewhere"], ApiResponseCodeEnum.LoginInOtherPlace)));
}
@@ -1,81 +0,0 @@
//using System.Diagnostics;
//using IRaCIS.Application.Interfaces;
//using IRaCIS.Application.Contracts;
//using IRaCIS.Core.Infra.EFCore;
//using IRaCIS.Core.Infrastructure.Extention;
//using Microsoft.AspNetCore.Mvc;
//using Microsoft.AspNetCore.Mvc.Filters;
//using Microsoft.Extensions.Logging;
//using Newtonsoft.Json;
//namespace IRaCIS.Core.Application.Filter
//{
// [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)]
// public class LogFilter : Attribute
// {
// }
// public class LogActionFilter : IAsyncActionFilter
// {
// private readonly ILogService _logService;
// private readonly IUserInfo _userInfo;
// private readonly ILogger<LogActionFilter> _logger;
// public LogActionFilter(ILogService logService, IUserInfo userInfo , ILogger<LogActionFilter> logger)
// {
// _logService = logService;
// _userInfo = userInfo;
// _logger = logger;
// }
// public Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
// {
// if (context.ActionDescriptor.EndpointMetadata!=null&& context.ActionDescriptor.EndpointMetadata.Any(m => m.GetType() == typeof(LogFilter)))
// {
// return LogAsync(context, next);
// }
// return next();
// }
// public async Task LogAsync(ActionExecutingContext context, ActionExecutionDelegate next)
// {
// var sw = new Stopwatch();
// sw.Start();
// dynamic actionResult = (await next()).Result;
// sw.Stop();
// var args = JsonConvert.SerializeObject(context.ActionArguments);
// var result = JsonConvert.SerializeObject(actionResult?.Value);
// var attr = (ApiExplorerSettingsAttribute)context.ActionDescriptor.EndpointMetadata.FirstOrDefault(m => m.GetType() == typeof(ApiExplorerSettingsAttribute));
// var groupName = attr?.GroupName;
// var res = actionResult?.Value as IResponseOutput;
// var input = new SystemLogDTO
// {
// ClientIP = string.Empty,
// OptUserId = _userInfo.Id,
// OptUserName = _userInfo.UserName,
// ApiPath = context.ActionDescriptor.AttributeRouteInfo.Template.ToLower(),
// Params = args,
// Result = result,
// RequestTime = DateTime.Now,
// ElapsedMilliseconds = sw.ElapsedMilliseconds,
// Status =res?.IsSuccess?? false,
// Message = res?.ErrorMessage,
// LogCategory = groupName
// };
// try
// {
// _logService.SaveLog2Db(input);
// }
// catch (Exception ex)
// {
// _logger.LogError(ex.Message);
// }
// }
// }
//}
@@ -11,6 +11,12 @@ namespace IRaCIS.Core.Application.Filter
public class ModelActionFilter : ActionFilterAttribute, IActionFilter
{
public IStringLocalizer _localizer;
public ModelActionFilter(IStringLocalizer localizer)
{
_localizer = localizer;
}
public override void OnActionExecuting(ActionExecutingContext context)
{
if (!context.ModelState.IsValid)
@@ -23,7 +29,7 @@ namespace IRaCIS.Core.Application.Filter
.ToArray();
//---提供给接口的参数无效。
context.Result = new JsonResult(ResponseOutput.NotOk("Invalid parameters provided for the API." + JsonConvert.SerializeObject( validationErrors)));
context.Result = new JsonResult(ResponseOutput.NotOk(_localizer["ModelAction_InvalidAPIParameter"] + JsonConvert.SerializeObject( validationErrors)));
}
}
}
@@ -2,6 +2,7 @@
using IRaCIS.Core.Infrastructure.Extention;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.Extensions.Localization;
using Microsoft.Extensions.Logging;
namespace IRaCIS.Core.Application.Filter
@@ -10,10 +11,13 @@ namespace IRaCIS.Core.Application.Filter
{
private readonly ILogger<ProjectExceptionFilter> _logger;
public ProjectExceptionFilter(ILogger<ProjectExceptionFilter> logger)
public IStringLocalizer _localizer;
public ProjectExceptionFilter(IStringLocalizer localizer, ILogger<ProjectExceptionFilter> logger)
{
_logger = logger;
}
_localizer = localizer;
}
public void OnException(ExceptionContext context)
{
//context.ExceptionHandled;//记录当前这个异常是否已经被处理过了
@@ -23,12 +27,14 @@ namespace IRaCIS.Core.Application.Filter
if (context.Exception.GetType().Name == "DbUpdateConcurrencyException")
{
//---并发更新,当前不允许该操作
context.Result = new JsonResult(ResponseOutput.NotOk("Concurrent update, operation not allowed at this time." + context.Exception.Message));
context.Result = new JsonResult(ResponseOutput.NotOk(_localizer["ProjectException_ConcurrentUpdateNotAllowed"] + context.Exception.Message));
}
if (context.Exception.GetType() == typeof(BusinessValidationFailedException))
{
context.Result = new JsonResult(ResponseOutput.NotOk(context.Exception.Message,ApiResponseCodeEnum.BusinessValidationFailed));
var error = context.Exception as BusinessValidationFailedException;
context.Result = new JsonResult(ResponseOutput.NotOk(context.Exception.Message, error!.Code));
}
else if(context.Exception.GetType() == typeof(QueryBusinessObjectNotExistException))
{
@@ -36,7 +42,7 @@ namespace IRaCIS.Core.Application.Filter
}
else
{
context.Result = new JsonResult(ResponseOutput.NotOk("程序异常,请联系开发人员。" + (context.Exception.InnerException is null ? (context.Exception.Message /*+ context.Exception.StackTrace*/)
context.Result = new JsonResult(ResponseOutput.NotOk(_localizer["Project_ExceptionContactDeveloper"] + (context.Exception.InnerException is null ? (context.Exception.Message /*+ context.Exception.StackTrace*/)
: (context.Exception.InnerException?.Message /*+ context.Exception.InnerException?.StackTrace*/)), ApiResponseCodeEnum.ProgramException));
}
File diff suppressed because it is too large Load Diff
@@ -56,7 +56,7 @@ namespace IRaCIS.Core.Application.Filter
#region
// 后期列举出具体的类型,其他任何用户类型,都不允许操作
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA)
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA && _userInfo.RequestUrl.ToLower()!= "TrialDocument/userConfirm".ToLower())
{
//---对不起,您的账户没有操作权限。
context.Result = new JsonResult(ResponseOutput.NotOk(_localizer["TrialResource_NoAccessPermission"]));
@@ -50,7 +50,7 @@ namespace IRaCIS.Application.Services.BusinessFilter
//OK
var tuple = (dynamic)objectResult.Value;
var apiResponse = ResponseOutput.Ok(tuple.Item1, tuple.Item2);
var apiResponse = ResponseOutput.Ok(tuple!.Item1, tuple!.Item2);
objectResult.Value = apiResponse;
@@ -1,7 +1,11 @@
using DocumentFormat.OpenXml.Drawing.Diagrams;
using DocumentFormat.OpenXml.Spreadsheet;
using DocumentFormat.OpenXml.Wordprocessing;
using IRaCIS.Application.Contracts;
using IRaCIS.Application.Interfaces;
using IRaCIS.Core.Application.Helper;
using IRaCIS.Core.Domain.Share;
using Magicodes.ExporterAndImporter.Excel;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using MiniExcelLibs;
@@ -9,17 +13,23 @@ using MiniExcelLibs.OpenXml;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using NPOI.HSSF.UserModel;
using NPOI.XSSF.UserModel;
using SkiaSharp;
using System.Collections;
using System.IO;
namespace IRaCIS.Core.Application.Service;
public static class ExcelExportHelper
{
//MiniExcel_Export
public static async Task<IActionResult> DataExportAsync(string code, object data, string exportFileNamePrefix, IRepository<CommonDocument> _commonDocumentRepository, IWebHostEnvironment _hostEnvironment, IDictionaryService? _dictionaryService = null, Type? translateType = null, CriterionType? criterionType = null)
public static async Task<IActionResult> DataExportAsync(string code, ExcelExportInfo data, string exportFileNamePrefix, IRepository<CommonDocument> _commonDocumentRepository, IWebHostEnvironment _hostEnvironment, IDictionaryService? _dictionaryService = null, Type? translateType = null, CriterionType? criterionType = null)
{
//判断是否有字典翻译
object translateData = data;
if (_dictionaryService != null && translateType != null)
{
@@ -32,7 +42,7 @@ public static class ExcelExportHelper
var needTranslatePropertyList = translateType.GetProperties().Where(t => t.IsDefined(typeof(DictionaryTranslateAttribute), true))
.SelectMany(c =>
c.GetCustomAttributes(typeof(DictionaryTranslateAttribute), false).Select(f => (DictionaryTranslateAttribute?)f).Where(t => t?.CriterionType == criterionType || t?.CriterionType == null)
.Select(k => new { c.Name, k.DicParentCode ,k.IsTranslateDenpendOtherProperty, k.DependPropertyName,k.DependPropertyValueStr})
.Select(k => new { c.Name, k.DicParentCode, k.IsTranslateDenpendOtherProperty, k.DependPropertyName, k.DependPropertyValueStr })
).ToList();
@@ -42,32 +52,36 @@ public static class ExcelExportHelper
var translateDataList = await _dictionaryService.GetBasicDataSelect(needTranslatePropertyList.Select(t => t.DicParentCode).Distinct().ToArray());
var dic = JsonConvert.DeserializeObject<IDictionary<string, object>>(data.ToJsonNotIgnoreNull());
var dic = data.ConvertToDictionary();
foreach (var key in dic.Keys)
{
//是数组 那么找到对应的属性 进行翻译
if (dic[key].GetType().IsAssignableFrom(typeof(JArray)))
if (dic[key].GetType().GetInterfaces().Any(i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IList<>)))
{
var newObjList = new List<object>();
var no = 1;
foreach (var item in dic[key] as JArray)
foreach (var item in dic[key] as IList )
{
var itemDic = JsonConvert.DeserializeObject<IDictionary<string, object>>(item.ToJsonNotIgnoreNull());
//var itemDic = JsonConvert.DeserializeObject<IDictionary<string, object>>(item.ToJsonNotIgnoreNull());
var itemDic = item.ConvertToDictionary();
foreach (var needTranslateProperty in needTranslatePropertyList)
{
//翻译的属性依赖其他属性
if(needTranslateProperty.IsTranslateDenpendOtherProperty)
if (needTranslateProperty.IsTranslateDenpendOtherProperty)
{
if (item[needTranslateProperty.DependPropertyName]?.ToString().ToLower() == needTranslateProperty.DependPropertyValueStr.ToLower())
if (itemDic[needTranslateProperty.DependPropertyName]?.ToString().ToLower() == needTranslateProperty.DependPropertyValueStr.ToLower())
{
var beforeValue = itemDic[needTranslateProperty.Name]?.ToString();
itemDic[needTranslateProperty.Name] = translateDataList[needTranslateProperty.DicParentCode].Where(t => t.Code.ToLower() == beforeValue?.ToLower()).FirstOrDefault()?.ValueCN ?? String.Empty;
itemDic[needTranslateProperty.Name] = translateDataList[needTranslateProperty.DicParentCode].Where(t => t.Code.ToLower() == beforeValue?.ToLower()).Select(t=>data.IsEn_US?t.Value:t.ValueCN).FirstOrDefault() ?? String.Empty;
}
}
//普通翻译 或者某一标准翻译
@@ -76,9 +90,9 @@ public static class ExcelExportHelper
var beforeValue = itemDic[needTranslateProperty.Name]?.ToString();
itemDic[needTranslateProperty.Name] = translateDataList[needTranslateProperty.DicParentCode].Where(t => t.Code.ToLower() == beforeValue?.ToLower()).FirstOrDefault()?.ValueCN ?? String.Empty;
itemDic[needTranslateProperty.Name] = translateDataList[needTranslateProperty.DicParentCode].Where(t => t.Code.ToLower() == beforeValue?.ToLower()).Select(t => data.IsEn_US ? t.Value : t.ValueCN).FirstOrDefault() ?? String.Empty;
}
}
@@ -89,14 +103,15 @@ public static class ExcelExportHelper
newObjList.Add(itemDic);
}
dic[key] = newObjList ;
dic[key] = newObjList;
}
}
data = dic;
//data = dic;
translateData = dic;
}
@@ -110,22 +125,65 @@ public static class ExcelExportHelper
//模板路径
var tplPath = physicalPath;
#region sheet
// 打开模板文件
var templateFile = new FileStream(tplPath, FileMode.Open, FileAccess.Read);
// 获取文件流
var templateStream = new MemoryStream();
templateFile.CopyTo(templateStream);
templateStream.Seek(0, SeekOrigin.Begin);
var workbook = new XSSFWorkbook(templateStream);
int sheetCount = workbook.NumberOfSheets;
if (sheetCount == 2)
{
if (data.IsEn_US)
{
workbook.RemoveSheetAt(0);
}
else
{
workbook.RemoveSheetAt(1);
}
var memoryStream2 = new MemoryStream();
workbook.Write(memoryStream2,true);
memoryStream2.Seek(0, SeekOrigin.Begin);
templateStream = memoryStream2;
}
// 文件名称 从sheet里面取
fileNmae = workbook.GetSheetName(0);
#endregion
#region MiniExcel
var memoryStream = new MemoryStream();
var memoryStream = new MemoryStream();
var config = new OpenXmlConfiguration()
{
IgnoreTemplateParameterMissing = true,
};
await MiniExcel.SaveAsByTemplateAsync(memoryStream, tplPath, data, config);
await MiniExcel.SaveAsByTemplateAsync(memoryStream, templateStream.ToArray(), translateData, config);
memoryStream.Seek(0, SeekOrigin.Begin);
return new FileStreamResult(memoryStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
{
FileDownloadName = $"{exportFileNamePrefix}_{fileNmae.Substring(0, fileNmae.LastIndexOf('.'))}_{DateTime.Now.ToString("yyyyMMddHHmmss")}.xlsx"
FileDownloadName = $"{exportFileNamePrefix}_{fileNmae/*.Substring(0, fileNmae.LastIndexOf('.'))*/}_{DateTime.Now.ToString("yyyyMMddHHmmss")}.xlsx"
};
#endregion
@@ -146,10 +204,12 @@ public static class ExcelExportHelper
public static async Task<(MemoryStream,string)> DataExport_NpoiTestAsync(string code, object data, IRepository<CommonDocument> _commonDocumentRepository, IWebHostEnvironment _hostEnvironment, IDictionaryService? _dictionaryService = null, Type? translateType = null, CriterionType? criterionType = null)
public static async Task<(MemoryStream, string)> DataExport_NpoiTestAsync(string code, ExcelExportInfo data, IRepository<CommonDocument> _commonDocumentRepository, IWebHostEnvironment _hostEnvironment, IDictionaryService? _dictionaryService = null, Type? translateType = null, CriterionType? criterionType = null)
{
//判断是否有字典翻译
object translateData = data;
if (_dictionaryService != null && translateType != null)
{
@@ -171,33 +231,34 @@ public static class ExcelExportHelper
var translateDataList = await _dictionaryService.GetBasicDataSelect(needTranslatePropertyList.Select(t => t.DicParentCode).Distinct().ToArray());
var dic = JsonConvert.DeserializeObject<IDictionary<string, object>>(data.ToJsonNotIgnoreNull());
var dic = data.ConvertToDictionary();
//var dic = (JsonConvert.DeserializeObject<IDictionary<string, object>>(data.ToJsonNotIgnoreNull())).IfNullThrowException();
foreach (var key in dic.Keys)
{
//是数组 那么找到对应的属性 进行翻译
if (dic[key].GetType().IsAssignableFrom(typeof(JArray)))
if (dic[key].GetType().GetInterfaces().Any(i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IList<>)))
//if (dic[key].GetType().IsAssignableFrom(typeof(JArray)))
{
var newObjList = new List<object>();
var no = 1;
foreach (var item in dic[key] as JArray)
foreach (var item in dic[key] as IList)
//foreach (var item in dic[key] as JArray)
{
var itemDic = JsonConvert.DeserializeObject<IDictionary<string, object>>(item.ToJsonNotIgnoreNull());
//var itemDic = JsonConvert.DeserializeObject<IDictionary<string, object>>(item.ToJsonNotIgnoreNull());
var itemDic = item.ConvertToDictionary();
foreach (var needTranslateProperty in needTranslatePropertyList)
{
//翻译的属性依赖其他属性
if (needTranslateProperty.IsTranslateDenpendOtherProperty)
{
if (item[needTranslateProperty.DependPropertyName]?.ToString().ToLower() == needTranslateProperty.DependPropertyValueStr.ToLower())
if (itemDic[needTranslateProperty.DependPropertyName]?.ToString().ToLower() == needTranslateProperty.DependPropertyValueStr.ToLower())
{
var beforeValue = itemDic[needTranslateProperty.Name]?.ToString();
itemDic[needTranslateProperty.Name] = translateDataList[needTranslateProperty.DicParentCode].Where(t => t.Code.ToLower() == beforeValue?.ToLower()).FirstOrDefault()?.ValueCN ?? String.Empty;
itemDic[needTranslateProperty.Name] = translateDataList[needTranslateProperty.DicParentCode].Where(t => t.Code.ToLower() == beforeValue?.ToLower()).Select(t => data.IsEn_US ? t.Value : t.ValueCN).FirstOrDefault() ?? String.Empty;
}
}
//普通翻译 或者某一标准翻译
@@ -206,7 +267,7 @@ public static class ExcelExportHelper
var beforeValue = itemDic[needTranslateProperty.Name]?.ToString();
itemDic[needTranslateProperty.Name] = translateDataList[needTranslateProperty.DicParentCode].Where(t => t.Code.ToLower() == beforeValue?.ToLower()).FirstOrDefault()?.ValueCN ?? String.Empty;
itemDic[needTranslateProperty.Name] = translateDataList[needTranslateProperty.DicParentCode].Where(t => t.Code.ToLower() == beforeValue?.ToLower()).Select(t => data.IsEn_US ? t.Value : t.ValueCN).FirstOrDefault() ?? String.Empty;
}
@@ -223,18 +284,55 @@ public static class ExcelExportHelper
}
data = dic;
//data = dic;
translateData = dic;
}
var (physicalPath, fileName) = await FileStoreHelper.GetCommonDocPhysicalFilePathAsync(_hostEnvironment, _commonDocumentRepository, code);
//模板路径
var tplPath = physicalPath;
#region sheet
// 打开模板文件
var templateFile = new FileStream(tplPath, FileMode.Open, FileAccess.Read);
// 获取文件流
var templateStream = new MemoryStream();
templateFile.CopyTo(templateStream);
templateStream.Seek(0, SeekOrigin.Begin);
var workbook = new XSSFWorkbook(templateStream);
int sheetCount = workbook.NumberOfSheets;
if (sheetCount == 2)
{
if (data.IsEn_US)
{
workbook.RemoveSheetAt(0);
}
else
{
workbook.RemoveSheetAt(1);
}
var memoryStream2 = new MemoryStream();
workbook.Write(memoryStream2,true);
memoryStream2.Seek(0, SeekOrigin.Begin);
templateStream = memoryStream2;
}
// 文件名称 从sheet里面取
fileName = workbook.GetSheetName(0);
#endregion
#region MiniExcel
var memoryStream = new MemoryStream();
@@ -244,7 +342,7 @@ public static class ExcelExportHelper
IgnoreTemplateParameterMissing = true,
};
await MiniExcel.SaveAsByTemplateAsync(memoryStream, tplPath, data, config);
await MiniExcel.SaveAsByTemplateAsync(memoryStream, templateStream.ToArray(), translateData, config);
memoryStream.Seek(0, SeekOrigin.Begin);
@@ -0,0 +1,39 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IRaCIS.Core.Application.Helper
{
public class FileConvertHelper
{
static public void ConvertWordToPdf(string inputWordFilePath, string outputPdfDir)
{
// 设置 libreoffice 命令行参数
string arguments = $"--headless --invisible --convert-to pdf \"{inputWordFilePath}\" --outdir \"{outputPdfDir}\"";
// 启动 libreoffice 进程
using (Process process = new Process())
{
process.StartInfo.FileName = "libreoffice";
process.StartInfo.Arguments = arguments;
process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = true;
process.Start();
// 等待进程结束
process.WaitForExit();
}
}
}
}
@@ -1,16 +0,0 @@
using DocumentFormat.OpenXml.Bibliography;
using NPOI.XWPF.UserModel;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IRaCIS.Core.Application.Helper
{
public class FileFormatConvertHelper
{
}
}
@@ -1,8 +1,12 @@

using Aliyun.OSS;
using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Infrastructure;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
using Newtonsoft.Json.Linq;
using System.Configuration;
using System.Text.RegularExpressions;
namespace IRaCIS.Core.Application.Helper;
@@ -10,7 +14,6 @@ namespace IRaCIS.Core.Application.Helper;
public static class FileStoreHelper
{
//处理文件名 压缩包,或者目录类的 会带上相对路径
public static (string TrustedFileNameForFileStorage, string RealName) GetStoreFileName(string fileName,bool isChangeToPdfFormat=false)
{
@@ -53,8 +56,9 @@ public static class FileStoreHelper
//API vue 部署目录
public static string GetIRaCISRootPath(IWebHostEnvironment _hostEnvironment)
{
var rootPath = (Directory.GetParent(_hostEnvironment.ContentRootPath.TrimEnd('\\'))).IfNullThrowException().FullName;
return rootPath;
string parentDirectory = Path.GetFullPath(Path.Combine(_hostEnvironment.ContentRootPath, ".."));
return parentDirectory;
}
@@ -74,11 +78,56 @@ public static class FileStoreHelper
{
var rootPath = GetIRaCISRootPath(_hostEnvironment);
var physicalFilePath = Path.Combine(rootPath, relativePath.Trim('/'));
var physicalFilePath = Path.Combine(rootPath, relativePath.TrimStart('/'));
return physicalFilePath;
}
#region
public static (string PhysicalPath, string RelativePath) GetSystemFileUploadPath(IWebHostEnvironment _hostEnvironment, string templateFolderName, string fileName)
{
var rootPath = FileStoreHelper.GetIRaCISRootDataFolder(_hostEnvironment);
//文件类型路径处理
var uploadFolderPath = Path.Combine(rootPath, StaticData.Folder.SystemDataFolder, templateFolderName);
if (!Directory.Exists(uploadFolderPath)) Directory.CreateDirectory(uploadFolderPath);
var (trustedFileNameForFileStorage, fileRealName) = FileStoreHelper.GetStoreFileName(fileName);
var relativePath = $"/{StaticData.Folder.IRaCISDataFolder}/{StaticData.Folder.SystemDataFolder}/{templateFolderName}/{trustedFileNameForFileStorage}";
var serverFilePath = Path.Combine(uploadFolderPath, trustedFileNameForFileStorage);
return (serverFilePath, relativePath);
}
public static (string PhysicalPath, string RelativePath) GetOtherFileUploadPath(IWebHostEnvironment _hostEnvironment, string templateFolderName, string fileName)
{
var rootPath = FileStoreHelper.GetIRaCISRootDataFolder(_hostEnvironment);
//文件类型路径处理
var uploadFolderPath = Path.Combine(rootPath, StaticData.Folder.OtherDataFolder, templateFolderName);
if (!Directory.Exists(uploadFolderPath)) Directory.CreateDirectory(uploadFolderPath);
var (trustedFileNameForFileStorage, fileRealName) = FileStoreHelper.GetStoreFileName(fileName);
var relativePath = $"/{StaticData.Folder.IRaCISDataFolder}/{StaticData.Folder.OtherDataFolder}/{templateFolderName}/{trustedFileNameForFileStorage}";
var serverFilePath = Path.Combine(uploadFolderPath, trustedFileNameForFileStorage);
return (serverFilePath, relativePath);
}
#endregion
/// <summary>
///
/// </summary>
@@ -380,7 +429,6 @@ public static class FileStoreHelper
/// <param name="trialId"></param>
/// <param name="siteid"></param>
/// <param name="subjectId"></param>
/// <param name="type"></param>
/// <returns></returns>
public static (string PhysicalPath, string RelativePath, string FileRealName) GetUploadPrintscreenFilePath(IWebHostEnvironment _hostEnvironment, string fileName, Guid trialId, Guid siteid, Guid subjectId)
{
@@ -495,7 +543,12 @@ public static class FileStoreHelper
public static (string PhysicalPath, string RelativePath) GetDicomInstanceFilePath(IWebHostEnvironment _hostEnvironment, Guid trialId, Guid siteId, Guid subjectId, Guid subjectVisitId, Guid studyId, Guid instanceId)
{
var rootPath = FileStoreHelper.GetIRaCISRootDataFolder(_hostEnvironment);
#region
//var rootPath = FileStoreHelper.GetIRaCISRootDataFolder(_hostEnvironment);
#endregion
var rootPath = Path.Combine(FileStoreHelper.GetBestStoreDisk(_hostEnvironment), StaticData.Folder.IRaCISDataFolder) ;
//加入访视层级 和Data
var path = Path.Combine(rootPath, StaticData.Folder.TrialDataFolder, trialId.ToString(),
@@ -517,8 +570,64 @@ public static class FileStoreHelper
return (physicalPath, relativePath);
}
public static string GetBestStoreDisk(IWebHostEnvironment _hostEnvironment)
{
var json = File.ReadAllText( Path.Combine(_hostEnvironment.ContentRootPath, "appsettings.json"));
JObject jsonObject = (JObject.Parse(json, new JsonLoadSettings() { CommentHandling = CommentHandling.Load })).IfNullThrowException();
int switchingRatio = 80;
try
{
switchingRatio = (int)jsonObject["IRaCISImageStore"]["SwitchingRatio"];
}
catch (Exception e)
{
//---解析Json文件配置出现问题
throw new BusinessValidationFailedException(StaticData.International("SysMon_JsonConfig") + e.Message);
}
//默认存储的路径
var defaultStoreRootFolder = FileStoreHelper.GetIRaCISRootPath(_hostEnvironment);
DriveInfo defaultDrive = new DriveInfo(Path.GetPathRoot(defaultStoreRootFolder));
var drives = DriveInfo.GetDrives().Where(t => !t.Name.Contains("C") && !t.Name.Contains("c"))
.Where(d => d.DriveType == DriveType.Fixed && d.IsReady)
//剩余空间最多的
.OrderByDescending(d => d.AvailableFreeSpace)
//存储空间相同,则按照按照总空间从大到小排序
.ThenByDescending(d => d.TotalSize - d.TotalFreeSpace);
var bestDrive = drives.FirstOrDefault();
var bestStoreRootFolder = string.Empty;
//仅仅只有C 盘
if (bestDrive == null || ((double)(defaultDrive.TotalSize - defaultDrive.TotalFreeSpace) / defaultDrive.TotalSize) * 100 < switchingRatio)
{
bestStoreRootFolder = defaultStoreRootFolder;
}
else
{
bestStoreRootFolder = Path.Combine(bestDrive?.RootDirectory.FullName, _hostEnvironment.EnvironmentName);
}
if (!Directory.Exists(bestStoreRootFolder))
{
Directory.CreateDirectory(bestStoreRootFolder);
}
return bestStoreRootFolder;
}
// 获取医生通用文件存放路径
@@ -0,0 +1,92 @@
using Hangfire;
using IRaCIS.Core.Application.Service;
using IRaCIS.Core.Domain.Share;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using NPOI.SS.Formula.Functions;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
namespace IRaCIS.Core.Application.Helper
{
public static class HangfireJobHelper
{
//public static void AddOrUpdateCronJob(string jobId, string queueName, Expression<Action> methodCall, string cron)
//{
// RecurringJob.AddOrUpdate(jobId, queueName, methodCall, cron);
//}
//添加 或者更新定时任务 Id 要唯一标识一个定义任务
public static void AddOrUpdateCronJob<T>(string jobId, Expression<Action<T>> methodCall, string cron, string queueName = "default")
{
RecurringJob.AddOrUpdate<T>(jobId, queueName, methodCall, cron);
}
public static void AddOrUpdateInitCronJob<T>(string jobId, Expression<Action<T>> methodCall, string cron)
{
RecurringJob.AddOrUpdate<T>(jobId, "sys_init", methodCall, cron);
}
public static void RemoveCronJob(string jobId)
{
RecurringJob.RemoveIfExists(jobId);
}
public static void ImmediatelyOnceOnlyJob(Expression<Action> methodCall)
{
BackgroundJob.Enqueue("immediately_once", methodCall);
}
public static void ImmediatelyOnceOnlyJob<T>(Expression<Action<T>> methodCall)
{
BackgroundJob.Enqueue<T>("immediately_once", methodCall);
}
public static void NotImmediatelyOnceOnlyJob(Expression<Action> methodCall, TimeSpan timeSpan)
{
BackgroundJob.Schedule("not_immediately_once", methodCall, timeSpan);
}
public static void NotImmediatelyOnceOnlyJob<T>(Expression<Action<T>> methodCall, TimeSpan timeSpan)
{
BackgroundJob.Schedule<T>("not_immediately_once", methodCall, timeSpan);
}
public static void AddOrUpdateTrialCronJob (string jobId, Guid trialId, EmailBusinessScenario businessScenario, string emailCron)
{
switch (businessScenario)
{
case EmailBusinessScenario.QCTask:
HangfireJobHelper.AddOrUpdateCronJob<IEmailSendService>(jobId, t => t.SendTrialImageQCTaskEmailAsync(trialId), emailCron);
break;
case EmailBusinessScenario.QCQuestion:
HangfireJobHelper.AddOrUpdateCronJob<IEmailSendService>(jobId, t => t.SendTrialQCQuestionEmailAsync(trialId), emailCron);
break;
case EmailBusinessScenario.ImageQuestion:
HangfireJobHelper.AddOrUpdateCronJob<IEmailSendService>(jobId, t => t.SendTrialImageQuestionAsync(trialId), emailCron);
break;
default:
break;
}
}
}
}
@@ -0,0 +1,179 @@
using IRaCIS.Core.Application.ViewModel;
using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Infrastructure;
using Microsoft.Extensions.Configuration;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static BeetleX.Redis.Commands.HSCAN;
using static IRaCIS.Core.Application.Service.Common.SystemMonitor;
namespace IRaCIS.Core.Application.Helper
{
public static class InternationalizationHelper
{
public static string JsonFileFolder = Path.Combine(AppContext.BaseDirectory, StaticData.Folder.Resources);
private static void VerifyFolder()
{
if (!Directory.Exists(JsonFileFolder) ||
!Directory.GetFiles(JsonFileFolder).Any(filePath => Path.GetExtension(filePath).Equals(".json", StringComparison.OrdinalIgnoreCase)))
{
throw new BusinessValidationFailedException("国际化Json文件目录有误");
}
}
public static async Task BatchAddJsonKeyValueAsync(List<BatchAddInternationalizationDto> batchAddDtos)
{
VerifyFolder();
var usJsonPath = Path.Combine(JsonFileFolder, StaticData.En_US_Json);
var cnJsonPath = Path.Combine(JsonFileFolder, StaticData.Zh_CN_Json);
//更新json 文件 同时更新内存缓存的数据
foreach (var filePath in new string[] { usJsonPath, cnJsonPath })
{
var json = await File.ReadAllTextAsync(filePath);
JObject jsonObject = JObject.Parse(json, new JsonLoadSettings() { CommentHandling = CommentHandling.Load });
// 添加或更新指定的键值对
if (filePath.Contains(StaticData.En_US_Json))
{
foreach (var item in batchAddDtos)
{
jsonObject[item.Code] = item.Value;
StaticData.En_US_Dic[item.Code] = item.Value;
}
}
else
{
foreach (var item in batchAddDtos)
{
jsonObject[item.Code] = item.Value;
StaticData.Zh_CN_Dic[item.Code] = item.Value;
}
}
await File.WriteAllTextAsync(filePath, jsonObject.ToString());
}
}
public static async Task AddOrUpdateJsonKeyValueAsync(string key, string value, string valueCN)
{
VerifyFolder();
var usJsonPath = Path.Combine(JsonFileFolder, StaticData.En_US_Json);
var cnJsonPath = Path.Combine(JsonFileFolder, StaticData.Zh_CN_Json);
//更新json 文件 同时更新内存缓存的数据
foreach (var filePath in new string[] { usJsonPath, cnJsonPath })
{
var json = await File.ReadAllTextAsync(filePath);
JObject jsonObject = JObject.Parse(json, new JsonLoadSettings() { CommentHandling = CommentHandling.Load });
// 添加或更新指定的键值对
if (filePath.Contains(StaticData.En_US_Json))
{
jsonObject[key] = value;
StaticData.En_US_Dic[key] = value;
}
else
{
jsonObject[key] = valueCN;
StaticData.Zh_CN_Dic[key] = valueCN;
}
await File.WriteAllTextAsync(filePath, jsonObject.ToString());
}
}
public static async Task InitInternationlizationDataAndWatchJsonFileAsync(IRepository _repository)
{
//查询数据库的数据
var toJsonList = await _repository.Where<Internationalization>(t => t.InternationalizationType == 1).Select(t => new
{
t.Code,
t.Value,
t.ValueCN
}).ToListAsync();
//组织成json 文件
var usJsonPath = Path.Combine(JsonFileFolder, StaticData.En_US_Json);
var cnJsonPath = Path.Combine(JsonFileFolder, StaticData.Zh_CN_Json);
//本地静态文件国际化需要
foreach (var tojsonItem in toJsonList)
{
StaticData.En_US_Dic[tojsonItem.Code] = tojsonItem.Value;
StaticData.Zh_CN_Dic[tojsonItem.Code] = tojsonItem.ValueCN;
}
File.WriteAllText(usJsonPath, JsonConvert.SerializeObject(StaticData.En_US_Dic));
File.WriteAllText(cnJsonPath, JsonConvert.SerializeObject(StaticData.Zh_CN_Dic));
//监测Json文件变更 实时刷新数据
WatchJsonFile(usJsonPath);
WatchJsonFile(cnJsonPath);
}
public static void WatchJsonFile(string filePath)
{
if (!File.Exists(filePath))
{
throw new BusinessValidationFailedException("国际化Json文件不存在");
}
FileSystemWatcher watcher = new FileSystemWatcher(Path.GetDirectoryName(filePath), Path.GetFileName(filePath));
watcher.Changed += (sender, e) => LoadJsonFile(filePath);
watcher.EnableRaisingEvents = true;
}
private static void LoadJsonFile(string filePath)
{
IConfigurationBuilder builder = new ConfigurationBuilder().AddJsonFile(filePath);
IConfigurationRoot enConfiguration = builder.Build();
foreach (IConfigurationSection section in enConfiguration.GetChildren())
{
if (filePath.Contains(StaticData.En_US_Json))
{
StaticData.En_US_Dic[section.Key] = section.Value;
}
else
{
StaticData.Zh_CN_Dic[section.Key] = section.Value;
}
}
}
}
}
@@ -1,171 +0,0 @@

using IRaCIS.Core.Application.Helper;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using NPOI.OpenXmlFormats.Wordprocessing;
using NPOI.XWPF.UserModel;
using System.Collections;
using System.Reflection;
namespace IRaCIS.Core.Application.Service;
public static class NpoiWordHelper
{
public static async Task<IActionResult> TemplateExportWordAsync(string code, object data, IRepository<CommonDocument>? _commonDocumentRepository, IWebHostEnvironment _hostEnvironment)
{
//var (physicalPath, fileNmae) = await FileStoreHelper.GetCommonDocPhysicalFilePathAsync(_hostEnvironment, _commonDocumentRepository, code);
var physicalPath = code;
using (FileStream stream = File.OpenRead(physicalPath))
{
XWPFDocument doc = new XWPFDocument(stream);
//遍历段落
foreach (var para in doc.Paragraphs)
{
ReplaceKey(para, data);
}
//遍历表格
var tables = doc.Tables;
foreach (var table in tables)
{
//ReplaceTableKey(table, data, "Data");
}
foreach (var table in tables)
{
foreach (var row in table.Rows)
{
foreach (var cell in row.GetTableCells())
{
foreach (var para in cell.Paragraphs)
{
ReplaceKey(para, data);
}
}
}
}
FileStream out1 = new FileStream("table.docx", FileMode.Create);
doc.Write(out1);
out1.Close();
return new FileStreamResult(stream, "application/msword")
{
FileDownloadName = $"replaced_{DateTime.Now.ToString("yyyyMMddHHmmss")}.docx"
};
}
}
private static void ReplaceKey(XWPFParagraph para, object model)
{
string text = para.ParagraphText;
Type t = model.GetType();
PropertyInfo[] pi = t.GetProperties();
foreach (PropertyInfo p in pi)
{
//$$与模板中$$对应,也可以改成其它符号,比如{$name},务必做到唯一
if (text.Contains("$" + p.Name + "$"))
{
text = text.Replace("$" + p.Name + "$", p.GetValue(model)?.ToString());
}
}
//var runs = para.Runs;
//string styleid = para.Style;
//for (int i = 0; i < runs.Count; i++)
//{
// var run = runs[i];
// text = run.ToString();
// Type t = model.GetType();
// PropertyInfo[] pi = t.GetProperties();
// foreach (PropertyInfo p in pi)
// {
// //$$与模板中$$对应,也可以改成其它符号,比如{$name},务必做到唯一
// if (text.Contains("$" + p.Name + "$"))
// {
// text = text.Replace("$" + p.Name + "$", p.GetValue(model)?.ToString());
// }
// }
// runs[i].SetText(text, 0);
//}
}
/// <summary>
/// 替换表格Key
/// </summary>
/// <param name="table"></param>
/// <param name="list"></param>
/// <param name="field"></param>
private static void ReplaceTableKey(XWPFTable table, IList list, String field)
{
List<XWPFParagraph> paras = new List<XWPFParagraph>();
// 获取最后一行数据,最后一行设置值
Int32 iLastRowIndex = 0;
for (int iIndex = 0; iIndex < table.Rows.Count; iIndex++)
{
if (iIndex == table.Rows.Count - 1)
{
iLastRowIndex = iIndex;
foreach (var cell in table.Rows[iIndex].GetTableCells())
{
foreach (var para in cell.Paragraphs)
{
paras.Add(para);
}
}
}
}
// 删除最后一行
table.RemoveRow(iLastRowIndex);
for (int iIndex = 0; iIndex < list.Count; iIndex++)
{
object data = list[iIndex];
Type t = data.GetType();
PropertyInfo[] pi = t.GetProperties();
// 表增加行
XWPFTableRow m_row = table.CreateRow();
CT_Row m_NewRow = new CT_Row();
String text = String.Empty;
Int32 jIndex = 0;
paras.ForEach(para =>
{
text = para.ParagraphText;
foreach (PropertyInfo p in pi)
{
if (text.Contains("$" + field + "." + p.Name + "$"))
{
m_row.GetCell(jIndex).SetText(p.GetValue(data, null).ToString());
}
}
jIndex++;
});
m_row = new XWPFTableRow(m_NewRow, table);
table.AddRow(m_row);
}
}
}
@@ -0,0 +1,420 @@
using Aliyun.OSS;
using IRaCIS.Core.Application.Contracts;
using IRaCIS.Core.Infrastructure;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Options;
using Minio.DataModel.Args;
using Minio;
using NPOI.HPSF;
using SharpCompress.Common;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Security.AccessControl;
using System.Text;
using System.Threading.Tasks;
using SkiaSharp;
namespace IRaCIS.Core.Application.Helper
{
public class MinIOOptions : AWSOptions
{
public int port { get; set; }
}
public class AWSOptions
{
public string endPoint { get; set; }
public bool useSSL { get; set; }
public string accessKey { get; set; }
public string secretKey { get; set; }
public string bucketName { get; set; }
public string viewEndpoint { get; set; }
}
public class AliyunOSSOptions
{
public string regionId { get; set; }
public string accessKeyId { get; set; }
public string accessKeySecret { get; set; }
public string endPoint { get; set; }
public string bucketName { get; set; }
public string roleArn { get; set; }
public string region { get; set; }
public string viewEndpoint { get; set; }
}
public class ObjectStoreServiceOptions
{
public string ObjectStoreUse { get; set; }
public AliyunOSSOptions AliyunOSS { get; set; }
public MinIOOptions MinIO { get; set; }
public AWSOptions AWS { get; set; }
}
public class ObjectStoreDTO
{
public string ObjectStoreUse { get; set; }
public AliyunOSSOptions AliyunOSS { get; set; }
public MinIOOptions MinIO { get; set; }
public AWSOptions AWS { get; set; }
}
public class AliyunOSSTempToken
{
public string AccessKeyId { get; set; }
public string AccessKeySecret { get; set; }
public string SecurityToken { get; set; }
public string Expiration { get; set; }
public string Region { get; set; }
public string BucketName { get; set; }
public string ViewEndpoint { get; set; }
}
public enum ObjectStoreUse
{
AliyunOSS = 0,
MinIO = 1,
AWS = 2,
}
public interface IOSSService
{
public Task<string> UploadToOSSAsync(Stream fileStream, string oosFolderPath, string fileRealName);
public Task<string> UploadToOSSAsync(string localFilePath, string oosFolderPath);
public Task DownLoadFromOSSAsync(string ossRelativePath, string localFilePath);
public ObjectStoreServiceOptions ObjectStoreServiceOptions { get; set; }
public Task<string> GetSignedUrl(string ossRelativePath);
}
public class OSSService : IOSSService
{
public ObjectStoreServiceOptions ObjectStoreServiceOptions { get; set; }
public OSSService(IOptionsMonitor<ObjectStoreServiceOptions> options)
{
ObjectStoreServiceOptions = options.CurrentValue;
}
/// <summary>
/// oosFolderPath 不要 "/ "开头 应该: TempFolder/ChildFolder
/// </summary>
/// <param name="fileStream"></param>
/// <param name="oosFolderPath"></param>
/// <param name="fileRealName"></param>
/// <returns></returns>
public async Task<string> UploadToOSSAsync(Stream fileStream, string oosFolderPath, string fileRealName)
{
var ossRelativePath = $"{oosFolderPath}/{Guid.NewGuid()}_{fileRealName}";
//var ossRelativePath = oosFolderPath + "/" + fileRealName;
using (var memoryStream = new MemoryStream())
{
fileStream.Seek(0, SeekOrigin.Begin);
fileStream.CopyTo(memoryStream);
memoryStream.Seek(0, SeekOrigin.Begin);
if (ObjectStoreServiceOptions.ObjectStoreUse == "AliyunOSS")
{
var aliConfig = ObjectStoreServiceOptions.AliyunOSS;
var _ossClient = new OssClient(aliConfig.endPoint, aliConfig.accessKeyId, aliConfig.accessKeySecret);
// 上传文件
var result = _ossClient.PutObject(aliConfig.bucketName, ossRelativePath, memoryStream);
}
else if (ObjectStoreServiceOptions.ObjectStoreUse == "MinIO")
{
var minIOConfig = ObjectStoreServiceOptions.MinIO;
var minioClient = new MinioClient().WithEndpoint($"{minIOConfig.endPoint}:{minIOConfig.port}")
.WithCredentials(minIOConfig.accessKey, minIOConfig.secretKey).WithSSL(minIOConfig.useSSL)
.Build();
var putObjectArgs = new PutObjectArgs()
.WithBucket(minIOConfig.bucketName)
.WithObject(ossRelativePath)
.WithStreamData(memoryStream)
.WithObjectSize(memoryStream.Length);
await minioClient.PutObjectAsync(putObjectArgs);
}
else if (ObjectStoreServiceOptions.ObjectStoreUse == "AWS")
{
var minIOConfig = ObjectStoreServiceOptions.AWS;
var minioClient = new MinioClient().WithEndpoint($"{minIOConfig.endPoint}")
.WithCredentials(minIOConfig.accessKey, minIOConfig.secretKey).WithSSL(minIOConfig.useSSL)
.Build();
var putObjectArgs = new PutObjectArgs()
.WithBucket(minIOConfig.bucketName)
.WithObject(ossRelativePath)
.WithStreamData(memoryStream)
.WithObjectSize(memoryStream.Length);
await minioClient.PutObjectAsync(putObjectArgs);
}
else
{
throw new BusinessValidationFailedException("未定义的存储介质类型");
}
}
return "/" + ossRelativePath;
}
/// <summary>
/// oosFolderPath 不要 "/ "开头 应该: TempFolder/ChildFolder
/// </summary>
/// <param name="localFilePath"></param>
/// <param name="oosFolderPath"></param>
/// <returns></returns>
/// <exception cref="BusinessValidationFailedException"></exception>
public async Task<string> UploadToOSSAsync(string localFilePath, string oosFolderPath)
{
var localFileName = Path.GetFileName(localFilePath);
var ossRelativePath = $"{oosFolderPath}/{Guid.NewGuid()}_{localFileName}";
//var ossRelativePath = oosFolderPath + "/" + localFileName;
if (ObjectStoreServiceOptions.ObjectStoreUse == "AliyunOSS")
{
var aliConfig = ObjectStoreServiceOptions.AliyunOSS;
var _ossClient = new OssClient(aliConfig.endPoint, aliConfig.accessKeyId, aliConfig.accessKeySecret);
// 上传文件
var result = _ossClient.PutObject(aliConfig.bucketName, ossRelativePath, localFilePath);
}
else if (ObjectStoreServiceOptions.ObjectStoreUse == "MinIO")
{
var minIOConfig = ObjectStoreServiceOptions.MinIO;
var minioClient = new MinioClient().WithEndpoint($"{minIOConfig.endPoint}:{minIOConfig.port}")
.WithCredentials(minIOConfig.accessKey, minIOConfig.secretKey).WithSSL(minIOConfig.useSSL)
.Build();
var putObjectArgs = new PutObjectArgs()
.WithBucket(minIOConfig.bucketName)
.WithObject(ossRelativePath)
.WithFileName(localFilePath);
await minioClient.PutObjectAsync(putObjectArgs);
}
else if (ObjectStoreServiceOptions.ObjectStoreUse == "AWS")
{
var minIOConfig = ObjectStoreServiceOptions.AWS;
var minioClient = new MinioClient().WithEndpoint($"{minIOConfig.endPoint}")
.WithCredentials(minIOConfig.accessKey, minIOConfig.secretKey).WithSSL(minIOConfig.useSSL)
.Build();
var putObjectArgs = new PutObjectArgs()
.WithBucket(minIOConfig.bucketName)
.WithObject(ossRelativePath)
.WithFileName(localFilePath);
await minioClient.PutObjectAsync(putObjectArgs);
}
else
{
throw new BusinessValidationFailedException("未定义的存储介质类型");
}
return "/" + ossRelativePath;
}
public async Task DownLoadFromOSSAsync(string ossRelativePath, string localFilePath)
{
ossRelativePath = ossRelativePath.TrimStart('/');
try
{
if (ObjectStoreServiceOptions.ObjectStoreUse == "AliyunOSS")
{
var aliConfig = ObjectStoreServiceOptions.AliyunOSS;
var _ossClient = new OssClient(aliConfig.endPoint, aliConfig.accessKeyId, aliConfig.accessKeySecret);
// 上传文件
var result = _ossClient.GetObject(aliConfig.bucketName, ossRelativePath);
// 将下载的文件流保存到本地文件
using (var fs = File.OpenWrite(localFilePath))
{
result.Content.CopyTo(fs);
fs.Close();
}
}
else if (ObjectStoreServiceOptions.ObjectStoreUse == "MinIO")
{
var minIOConfig = ObjectStoreServiceOptions.MinIO;
var minioClient = new MinioClient().WithEndpoint($"{minIOConfig.endPoint}:{minIOConfig.port}")
.WithCredentials(minIOConfig.accessKey, minIOConfig.secretKey).WithSSL(minIOConfig.useSSL)
.Build();
var getObjectArgs = new GetObjectArgs()
.WithBucket(minIOConfig.bucketName)
.WithObject(ossRelativePath)
.WithFile(localFilePath);
await minioClient.GetObjectAsync(getObjectArgs);
}
else if (ObjectStoreServiceOptions.ObjectStoreUse == "AWS")
{
var minIOConfig = ObjectStoreServiceOptions.AWS;
var minioClient = new MinioClient().WithEndpoint($"{minIOConfig.endPoint}")
.WithCredentials(minIOConfig.accessKey, minIOConfig.secretKey).WithSSL(minIOConfig.useSSL)
.Build();
var getObjectArgs = new GetObjectArgs()
.WithBucket(minIOConfig.bucketName)
.WithObject(ossRelativePath)
.WithFile(localFilePath);
await minioClient.GetObjectAsync(getObjectArgs);
}
else
{
throw new BusinessValidationFailedException("未定义的存储介质类型");
}
}
catch (Exception ex)
{
throw new BusinessValidationFailedException("oss下载失败!" + ex.Message);
}
}
public async Task<string> GetSignedUrl(string ossRelativePath)
{
ossRelativePath = ossRelativePath.TrimStart('/');
try
{
if (ObjectStoreServiceOptions.ObjectStoreUse == "AliyunOSS")
{
var aliConfig = ObjectStoreServiceOptions.AliyunOSS;
var _ossClient = new OssClient(aliConfig.endPoint, aliConfig.accessKeyId, aliConfig.accessKeySecret);
// 生成签名URL。
var req = new GeneratePresignedUriRequest(aliConfig.bucketName, ossRelativePath, SignHttpMethod.Get)
{
// 设置签名URL过期时间,默认值为3600秒。
Expiration = DateTime.Now.AddHours(1),
};
var uri = _ossClient.GeneratePresignedUri(req);
return uri.PathAndQuery;
}
else if (ObjectStoreServiceOptions.ObjectStoreUse == "MinIO")
{
var minIOConfig = ObjectStoreServiceOptions.MinIO;
var minioClient = new MinioClient().WithEndpoint($"{minIOConfig.endPoint}:{minIOConfig.port}")
.WithCredentials(minIOConfig.accessKey, minIOConfig.secretKey).WithSSL(minIOConfig.useSSL)
.Build();
//var reqParams = new Dictionary<string, string>(StringComparer.Ordinal)
// {
// { "response-content-type", "application/json" }
// };
var args = new PresignedGetObjectArgs()
.WithBucket(minIOConfig.bucketName)
.WithObject(ossRelativePath)
.WithExpiry(3600)
/*.WithHeaders(reqParams)*/;
var presignedUrl = await minioClient.PresignedGetObjectAsync(args);
Uri uri = new Uri(presignedUrl);
string relativePath = uri.PathAndQuery;
return relativePath;
}
else if (ObjectStoreServiceOptions.ObjectStoreUse == "AWS")
{
var minIOConfig = ObjectStoreServiceOptions.AWS;
var minioClient = new MinioClient().WithEndpoint($"{minIOConfig.endPoint}")
.WithCredentials(minIOConfig.accessKey, minIOConfig.secretKey).WithSSL(minIOConfig.useSSL)
.Build();
return string.Empty;
}
else
{
throw new BusinessValidationFailedException("未定义的存储介质类型");
}
}
catch (Exception ex)
{
throw new BusinessValidationFailedException("oss授权url失败!" + ex.Message);
}
}
}
}
@@ -33,22 +33,38 @@ public static class SendEmailHelper
await smtp.AuthenticateAsync(_systemEmailConfig.FromEmail, _systemEmailConfig.AuthorizationCode);
await smtp.SendAsync(messageToSend);
await smtp.DisconnectAsync(true);
}
}
catch (Exception ex)
catch (Exception )
{
//---邮件发送失败,您进行的操作未能成功,请检查邮箱或联系维护人员
//---邮件发送失败,您进行的操作未能成功,请检查邮箱或联系维护人员
throw new Exception(StaticData.International("SendEmail_SendFail"));
}
}
public static async Task<bool> TestEmailConfigAsync(SystemEmailSendConfig _systemEmailConfig)
{
using (var client = new MailKit.Net.Smtp.SmtpClient())
{
await client.ConnectAsync(_systemEmailConfig.Host, _systemEmailConfig.Port, SecureSocketOptions.SslOnConnect);
await client.AuthenticateAsync(_systemEmailConfig.FromEmail, _systemEmailConfig.AuthorizationCode);
await client.DisconnectAsync(true);
}
return true;
}
public static async Task SendEmailAsync(SMTPEmailConfig sMTPEmailConfig, EventHandler<MessageSentEventArgs>? messageSentSuccess = null)
{
var messageToSend = new MimeMessage();
@@ -63,7 +79,7 @@ public static class SendEmailHelper
if (sMTPEmailConfig.ToMailAddressList.Count == 0)
{
//---没有收件人
//---没有收件人
throw new ArgumentException(StaticData.International("SendEmail_NoRecipient"));
}
else
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
<LangVersion>default</LangVersion>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
@@ -63,48 +63,42 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="AutoMapper.Collection.EntityFrameworkCore" Version="9.0.0" />
<PackageReference Include="Aliyun.OSS.SDK.NetCore" Version="2.13.0" />
<PackageReference Include="FreeSpire.Doc" Version="12.2.0" />
<PackageReference Include="Hangfire.Core" Version="1.8.11" />
<PackageReference Include="BeetleX.BNR" Version="1.0.1" />
<PackageReference Include="Castle.Core.AsyncInterceptor" Version="2.1.0" />
<PackageReference Include="EasyCaching.Interceptor.AspectCore" Version="1.7.0" />
<PackageReference Include="EasyCaching.Redis" Version="1.9.2" />
<PackageReference Include="EasyCaching.InMemory" Version="1.9.2" />
<PackageReference Include="ExcelDataReader" Version="3.6.0" />
<PackageReference Include="ExcelDataReader.DataSet" Version="3.6.0" />
<PackageReference Include="fo-dicom.Codecs" Version="5.1.0">
<PackageReference Include="DistributedLock.Redis" Version="1.0.2" />
<PackageReference Include="DistributedLock.SqlServer" Version="1.0.3" />
<PackageReference Include="fo-dicom" Version="5.1.2" />
<PackageReference Include="fo-dicom.Imaging.ImageSharp" Version="5.1.2" />
<PackageReference Include="fo-dicom.Codecs" Version="5.12.0" />
<PackageReference Include="Magicodes.IE.Core" Version="2.7.5.1" />
<PackageReference Include="Magicodes.IE.Csv" Version="2.7.5.1">
<TreatAsUsed>true</TreatAsUsed>
</PackageReference>
<PackageReference Include="fo-dicom.Drawing" Version="4.0.8" />
<PackageReference Include="fo-dicom.Imaging.ImageSharp" Version="5.0.3" />
<PackageReference Include="FreeSpire.Doc" Version="10.8.0" />
<PackageReference Include="Hangfire" Version="1.7.31">
<PackageReference Include="Magicodes.IE.Excel" Version="2.7.5.1">
<TreatAsUsed>true</TreatAsUsed>
</PackageReference>
<PackageReference Include="Magicodes.IE.Core" Version="2.7.4.2" />
<PackageReference Include="Magicodes.IE.Csv" Version="2.7.4.2">
<PackageReference Include="Magicodes.IE.Excel.AspNetCore" Version="2.7.5.1" />
<PackageReference Include="MailKit" Version="4.4.0" />
<PackageReference Include="MediatR" Version="12.2.0" />
<PackageReference Include="MimeKit" Version="4.4.0" />
<PackageReference Include="MiniExcel" Version="1.31.3" />
<PackageReference Include="Minio" Version="6.0.2" />
<PackageReference Include="MiniWord" Version="0.8.0" />
<PackageReference Include="My.Extensions.Localization.Json" Version="3.2.0">
<TreatAsUsed>true</TreatAsUsed>
</PackageReference>
<PackageReference Include="Magicodes.IE.Excel" Version="2.7.4.2">
<TreatAsUsed>true</TreatAsUsed>
</PackageReference>
<PackageReference Include="Magicodes.IE.Excel.AspNetCore" Version="2.7.4.2" />
<PackageReference Include="MailKit" Version="3.4.2" />
<PackageReference Include="MediatR" Version="11.0.0" />
<PackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="6.0.10" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.10">
<TreatAsUsed>true</TreatAsUsed>
</PackageReference>
<PackageReference Include="MimeKit" Version="3.4.2" />
<PackageReference Include="MiniExcel" Version="1.30.1" />
<PackageReference Include="MiniWord" Version="0.6.1" />
<PackageReference Include="My.Extensions.Localization.Json" Version="3.0.0">
<TreatAsUsed>true</TreatAsUsed>
</PackageReference>
<PackageReference Include="Nito.AsyncEx" Version="5.1.2" />
<PackageReference Include="NPOI" Version="2.6.0" />
<PackageReference Include="Panda.DynamicWebApi" Version="1.2.0" />
<PackageReference Include="Quartz" Version="3.5.0" />
<PackageReference Include="SixLabors.ImageSharp" Version="2.1.3" />
<PackageReference Include="Swashbuckle.AspNetCore.Filters" Version="7.0.5" />
<PackageReference Include="WinSCP" Version="5.21.5" />
<PackageReference Include="NPOI" Version="2.6.2" />
<PackageReference Include="Panda.DynamicWebApi" Version="1.2.1" />
<PackageReference Include="SixLabors.ImageSharp" Version="3.1.3" />
<PackageReference Include="Swashbuckle.AspNetCore.Filters" Version="8.0.1" />
<PackageReference Include="WinSCP" Version="6.3.2" />
</ItemGroup>
<ItemGroup>
File diff suppressed because it is too large Load Diff
+266 -223
View File
@@ -2,38 +2,65 @@
"test{0}{1}": "英文本地化{0}{1}",
"RequiredAttribute": "{0} is required",
// ------------------------------------------------------------_ServiceExtensions--------------------------------------------------------------------
//ApiResponseHandler
"ApiResponse_NoAccess": "You do not have access to this API",
"ApiResponse_Permission": "You do not have permission to do this",
// ------------------------------------------------------------Controllers--------------------------------------------------------------------
//FinancialChangeController
"Financial_ChargeSettled": "Expenses have been settled and workload can not be reset.",
"Financial_InvalidParameter": "Invalid parameter.",
//UploadDownLoadController
"UploadDownLoad_UnsupportedMedia": "Unsupported media type.",
"UploadDownLoad_ArchiveInProgress": "Another user is uploading or archiving this inspection.",
"UploadDownLoad_ArchiveInProgress": "Another user is uploading or archiving this study.",
"UploadDownLoad_InvalidData": "Please ensure that the uploaded data conforms to the style of the template file and contains valid data.",
"UploadDownLoad_RequestError": "Request error.",
"UploadDownLoad_RequestError": "Request error, please try again!",
"UploadDownLoad_SupportedFormats": "Supports upload of .xlsx, .xls, and .csv formats.",
// ------------------------------------------------------------_MediatR--------------------------------------------------------------------
//ConsistencyVerificationRequest
"ConsistencyVerification_Tech": "Study Type",
"ConsistencyVerification_Time": "Incorrect time format",
//ConsistencyVerificationHandler
"ConsistencyVerification_Img": "Hello, according to the automatic recognition of this system, the imaging study submitted by the subject in the current visit in the IRC system is as follows:",
"ConsistencyVerification_Of": "Of",
"ConsistencyVerification_ImgC": "Imaging study",
"ConsistencyVerification_EDCA": "Check EDC data, completely consistent, approved",
"ConsistencyVerification_EDCB": "Check EDC data, completely consistent",
"ConsistencyVerification_Auto": "Automatically verified pass",
"ConsistencyVerification_Prob": "The following problems exist:",
"ConsistencyVerification_EdcL": "Image study (EDC missing)",
"ConsistencyVerification_IrcL": "Image study (IRC missing)",
"ConsistencyVerification_Desc": "Description: In order to efficiently solve all the above doubts, please verify the actual image study accurately. Please note that the image date may not be consistent with the actual study date, and multiple modalities of image studys (such as PET-CT) may exist at the same time. After accurate verification, please reply with the correct image study for this visit.",
"ConsistencyVerification_Conf": "According to the imported consistency check data, please confirm the following inconsistent inspection item information of this visit:",
"ConsistencyVerification_Edc": "EDC is lack of:",
"ConsistencyVerification_IrcLi": "IRC is lack of:",
//-------------------------------------------------------------------------------------Reading-----------------------------------------------------------------
//ClinicalDataSetService
"ClinicalDataSet_DupTypeFail": "There are duplicate clinical data of the same type. The operation failed.",
"ClinicalDataSet_Apply": "",
"ClinicalDataSet_DupTypeFail": "The same type of clinical data exists. The operation failed.",
//ClinicalQuestionService
"ClinicalQuestion_Repeat": "",
//ReadingClinicalDataService
"ReadingClinicalData_DupTypeFail": "There are duplicate clinical data of the same type. The operation failed.",
"ReadingClinicalData_DupTypeFail": "The same type of clinical data exists. The operation failed.",
"ReadingClinicalData_Unchecked": "The current clinical data status is not verified and signing is not allowed!",
//ReadingGlobalTaskService
"ReadingGlobal_NotGlobal": "System call error. The current read is not a global review read.",
//ReadingImageTaskService
"ReadingImage_NotVisit": "System call error. The current read is not a timepoint read.",
"ReadingImage_CantSplit": "The current read is a baseline read, and lesion split is not allowed.",
"ReadingImage_BeSigned": "The current read has already been signed off. Please do not submit it again.",
"ReadingImage_BeSigned": "The current read has already been signed. Please do not submit it again.",
"ReadingImage_Beinvalid": "The current read has already been invalidated, and reading is not allowed anymore.",
"ReadingImage_PresenceReview": "The current subject has a review request that has not been processed and is not allowed to operate",
"ReadingImage_NotaTask": "The coalesced lesions are not from the same timepoint. ",
"ReadingImage_PresenceReview": "The current subject has a re-read request that has not been processed and is not allowed to operate",
"ReadingImage_NotaTask": "The coalesced lesions are not from the same timepoint.",
"ReadingImage_DeleteError": "Other lesions have split from or coalesced into the current lesion. Deletion failed.",
"ReadingImage_Idnotcorrespond": "Failed to add the lesion mark. The Instance ID and Series ID of the image do not match.",
"ReadingImage_IsLymphNotbigger": "The short diameter of this nodal non-target lesion on the current visit is smaller than the value on the previous visit, and the state cannot be set to 'Unequivocal progression'.",
"ReadingImage_NotLymphNotbigger": "The long diameter of this non-nodal non-target lesion on the current visit is smaller than the value on the previous visit, and the state cannot be set to 'Unequivocal progression'.",
"ReadingImage_Twice": "System call error. Questions & answers submitted are duplicated.",
"ReadingImage_MaxQuestion": "According to the imaging charter, the number of the current type of lesion cannot exceed {0}.",
"ReadingImage_MaxQuestion": "According to the imaging charter, the number of {0} cannot exceed {1}.",
"ReadingImage_Maxlesion": "According to the imaging charter, the number of target lesions in the same organ cannot exceed {0}. Please confirm.",
"ReadingImage_Maximum": "{0} can only be repeated {1} times, and it has been repeated {2} times so far.",
"ReadingImage_PCWGMaximum": "According to the imaging charter, the number of baseline lesions at the same location should enter only {0} time. Please confirm.",
@@ -44,7 +71,7 @@
"ReadingImage_TaskFinish": "Please note that all reads of the current subject have been completed.",
"ReadingImage_NeedRest": "You have been continuously reading for {0} hours. Please take a break of {1} minutes before resumption.",
//ReadingJudgeTaskService
"ReadingJudge_SouceIdNull": "System call failed. The Source ID of the global review which is being adjudicated currently is 'null'. ",
"ReadingJudge_SouceIdNull": "System call failed. The Source ID of the global review which is being adjudicated currently is 'null'.",
//ReadingOncologyTaskService
"ReadingOncology_TaskError": "System call error. The current read is not an oncology read.",
"ReadingOncology_Abnormal": "System call exception. The result of adjudication is null",
@@ -59,17 +86,18 @@
"MedicalReview_invalid": "This medical review read has already been invalidated, and the operation failed.",
"MedicalReview_SaveQuestion": "Unable to perform the current operation. Please save the medical review questions first.",
"MedicalReview_NeedSave": "Unable to perform the current operation. Please save the medical review questions and conclusions first.",
"MedicalReview_NotClosed": "Unable to perform the current operation. The current medical inquiry conversation has not been closed.",
"MedicalReview_NotClosed": "Unable to perform the current operation. The current medical query conversation has not been closed.",
"MedicalReview_Finish": "The current medical review is the last one.",
//ReadingMedicineQuestionService
"ReadingMed_QNumDup": "Current problem number has duplicates",
"ReadingMed_HasSubQ": "This problem has sub-problems, please delete them first",
"ReadingMed_QNumDup": "Current question number is repeated",
"ReadingMed_HasSubQ": "This question has sub-question, please delete it first",
"ReadingMed_NoMedQ": "Medical review question has not been added yet. Please add it first before confirming",
"ReadingMed_MedQNumDup": "The display number of the medical imaging review question cannot be duplicated",
"ReadingMed_ParentNumSmall": "The display number of the parent problem should be smaller than that of the child problem, please confirm",
"ReadingMed_GlobalQNotConfig": "The global reading is enabled in the current standard, but the global medical review question has not been configured",
"ReadingMed_ArbitrateQNotConfig": "Arbitration reading is enabled in the current standard, but the arbitration medical review question has not been configured",
"ReadingMed_TumorQNotConfig": "Oncology reading is enabled in the current standard, but the oncology medical review question has not been configured",
"ReadingMed_MedQNumDup": "The display number of the medical imaging review question cannot be duplicated.",
"ReadingMed_ParentNumSmall": "The display number of the parent question should be smaller than that of the child question, please confirm.",
"ReadingMed_VisitQNotConfig": "This review criteria has no medical review questions for 'visit'",
"ReadingMed_GlobalQNotConfig": "The global review read is enabled in the current criterion, but has not configured with medical review questions",
"ReadingMed_ArbitrateQNotConfig": "Adjudication review reading is enabled in the current criterion, but has not configured with medical review questions",
"ReadingMed_TumorQNotConfig": "Oncology reading is enabled in the current criterion, but the oncology medical review question has not been configured",
//UserService
"User_CheckNameOrPw": "Please check the username or password.",
//Repository
@@ -78,38 +106,44 @@
//OrganInfoService
"OrganInfo_DuplicateData": "There are duplicate data, operation failed.",
//ReadingCriterionService
"ReadingCriterion_Referenced": "The current standard has been referenced and cannot be deleted.",
"ReadingCriterion_InUse": "This standard has been used in the project and cannot be deleted.",
"ReadingCriterion_Referenced": "The current criterion has been referenced and cannot be deleted.",
"ReadingCriterion_InUse": "This criterion has been used in the project and cannot be deleted.",
"ReadingCriterion_ArbitratorWithoutJudgment": "There is no referee problem but there is an arbitration object, operation failed.",
//ReadingQuestionService
"ReadingQuestion_IdDup": "Duplicate problem ID.",
"ReadingQuestion_ChildrenExist": "This problem has sub-problems, please delete the sub-problems first.",
"ReadingQuestion_GroupReferenced": "This grouping has been referenced, please delete the referenced problems first.",
"ReadingQuestion_JudgmentSet": "The current problem already has a referee standard set, modification failed.",
"ReadingQuestion_ExcludeWithDependency": "The displayed dependent parent problem and the required dependent problem are the same, but the answers are mutually exclusive, operation failed.",
"ReadingQuestion_JudgmentSet": "The current question already has a referee criterion set, modification failed.",
"ReadingQuestion_ExcludeWithDependency": "The displayed dependent parent question and the required dependent question are the same, but the answers are mutually exclusive, operation failed.",
"ReadingQuestion_CircularDependency": "Calculation dependency has looped!",
//ReadingPeriodSetService
"ReadingPeriodSet_NameDup": "Review period name duplicate, operation failed",
"ReadingPeriodSet_Global": "Review period name cannot be Global",
"ReadingPeriodSet_AlreadyAdded": "{0} has already added the review period, cannot set it effective.",
"ReadingPeriodSet_TaskCompletedCannotRevoke": "The current standard review has generated tasks and the review is completed, revoke failed.",
"ReadingPeriodSet_TaskCompletedCannotRevoke": "The current criterion has generated reads and the reads have been completed, revoke failed.",
"ReadingPeriodSet_LastVisit": "Last visit.",
//ReadModuleService
"ReadModule_AlreadyAdded": "The current visit has already added a review period.",
"ReadModule_AddGlobalFirst": "Please add global review first.",
"ReadModule_VisitNotFound": "No visits found that meet the criteria.",
"ReadModule_VisitNotFound": "No qualified visit was found.",
"ReadModule_SignedDataCannotDelete": "Clinical data has been signed and cannot be deleted.",
"ReadModule_TumorExists": "The current visit has a tumor review, please delete the tumor review first.",
"ReadModule_TaskGenerated": "The current review has generated tasks, operation failed.",
"ReadModule_TumorExists": "The current visit has a tumor review, please delete it first.",
"ReadModule_TaskGenerated": "The current review has generated reads, operation failed.",
//UserWLTemplateService
"UserWLTS_MaxTemplate": "The same user can add a maximum of 10 templates.",
"UserWLTS_NameRepeated": "The template name is repeated",
"UserWLTS_ContentRepeated": "The template content is repeated",
// ------------------------------------------------------------Allocation--------------------------------------------------------------------
//TaskAllocationRuleService
"TaskAllocation_DoctorIdNotFound": "Error, the doctor is account Id was not found in the enrollment table.",
"TaskAllocation_DoctorIdNotFound": "Error, the doctor's account Id was not found in the enrollment table.",
"TaskAllocation_DoctorConfigExists": "The doctor configuration is already available, and continued additions cannot be allowed.",
"TaskAllocation_TaskAssigned": "A task has been assigned to the doctor and it cannot be deleted.",
"TaskAllocation_TaskAssigned": "A read has been assigned to the doctor and it cannot be deleted.",
//TaskConsistentRuleService
"TaskConsistent_ConsistencyConfigExists": "Please configure the doctor for consistency analysis.",
"TaskConsistent_TaskGenerated": "The trial configuration is already available, and no continued additions are allowed.",
"TaskConsistent_MedicalAuditTaskExists": "The standard already has tasks generated by the Subject, and configuration modification is not allowed.",
"TaskConsistent_SignedTaskCannotBeInvalidated": "This standard has generated a consistency analysis task and cannot be deleted.",
"TaskConsistent_MedicalAuditTaskExists": "The criterion already has reads generated by the Subject, and configuration modification is not allowed.",
"TaskConsistent_SignedTaskCannotBeInvalidated": "This criterion has generated a consistency analysis task and cannot be deleted.",
//TaskMedicalReviewRuleService
"TaskMedicalRule_TaskAlreadyAssigned": "The doctor configuration is already available, and continued additions cannot be allowed.",
"TaskMedicalRule_TaskStarted": "A medical review task has been generated.",
@@ -117,121 +151,123 @@
"TaskMedical_DirtyData": "Signed files cannot be set to invalid.",
"TaskMedical_SubjectInOtherArm": "A task is currently assigned to someone else,and it cannot be assigned. Please refresh the list.",
//VisitTaskService
"VisitTask_VisitTask_TaskAlreadyApplied": "The project has not confirmed any of the reading criteria.",
"VisitTask_VisitTask_TaskAlreadyApplied": "The trial has not confirmed any of the review criteria.",
"VisitTask_DoctorConfigNotFound": "The current doctor has begun to do the task of this standard of subject, so assignment cannot be canceled.",
"VisitTask_BackendDataError": "One of the tasks has been assigned to the doctor and is not allowed to be assigned.",
"VisitTask_BackendDataError": "One of the reeads has been assigned to the doctor and is not allowed to be assigned.",
"VisitTask_DirtyData": "Dirty data appears, and the task source field has no value.",
"VisitTask_MissingTaskSource": "The subject had a visit and entered the return process, which has not been verified for consistency and is not allowed to be assigned.",
"VisitTask_InconsistentSubjectStatus": "There is a subject that already has the doctor in another Arm group, it is not allowed to add the doctor to a new group.",
"VisitTask_InconsistentSubjectStatus": "There is a subject that already has the doctor in another Arm group. It is not allowed to add the doctor to a new group.",
"VisitTask_DuplicateDoctorInArm": "There is a subject that already has the doctor in another Arm group, so the futher assignment is not allowed. Please refresh the page to confirm whether the data on the page is expired.",
"VisitTask_DoctorAlreadyInArm": "The assignment of a Subject task cannot be canceled because it has been applied.",
"VisitTask_TaskAlreadyApplied": "The configured doctor cannot be found in the configuration table, and the binding cannot be applied. Please check the data.",
"VisitTask_DoctorConfiguration": "",
"VisitTask_BackendData": "Tasks that have not been completed or have not taken effect are not allowed to request re-reading.",
"VisitTask_UnreadTask": "Tasks that re-read has been applied or approved are not allowed to apply for re-read.",
"VisitTask_NoPMRecheck": "",
"VisitTask_Reapply": "PM does not allow apply for re-read of consistency analysis tasks.",
"VisitTask_ConsistencyAnalysis": "PM only allows apply for re-read that the view type is visit.",
"VisitTask_VisitTypeRestriction": "It is currently an ordered read type, and the subject has visit that has applied for re-read, but has not been processed (project team apply for), so it cannot been applied for continuing re-read at this time.",
"VisitTask_SequentialReading": "It is currently an ordered read type, and the subject has visit that has applied for re-read, but has not been processed, so it cannot been applied for re-read for now.",
"VisitTask_ImageProblem": "It is currently an ordered read type that there is something wrong with the image. The trial team has applied for returning, so it cannot been applied for re-read for now.",
"VisitTask_LastReading": "It is an ordered read type, and only the request for re-readinng by the subject reader after completing the global task for the last time is allowed.",
"VisitTask_LastOncologistRecheck": "",
"VisitTask_LastAdjudicatorRecheck": "",
"VisitTask_IRGlobalRecheck": "",
"VisitTask_IRReapply": "It is an disordered read type, only tasks that IR applies for global and visit read type to re-read are allowed.",
"VisitTask_InvalidReapplyStatus": "The current re-read task state is not in the requested state and cannot be processed. Please refresh the page.",
"VisitTask_ReapplyStatusConflict": "The status of the current task requested to be re-read has been affected by another re-read task. The re-read yes/no operation is not allowed for the task in this state",
"VisitTask_ReReadTaskNotApplied": "Only tasks the read type is visit are allowed to be approved of re-read.",
"VisitTask_ReReadTaskAlreadyAffected": "Do not conform to the PM request and SPM / CPM approve | IR request and PM approve.",
"VisitTask_TaskTypeNotApproved": "The current re-read task state is not in the requested state and cannot be processed. Please refresh the page.",
"VisitTask_NoImageReturn": "",
"VisitTask_NonEffectiveTaskCannotBeReturned": "Only effective and unfinished visit tasks can be returned. Please refresh the page data.",
"VisitTask_NoFurtherReturn": "",
"VisitTask_ConsistencyTaskCannotBeReturned": "The consistency analysis task is not allowed to be set return back.",
"VisitTask_PMOnlyAllowedForReturn": "Only the PM can perform the rollback.",
"VisitTask_UnsupportedTaskType": "Re-read task types are not supported.",
"VisitTask_DoctorConfiguration": "Background data error",
"VisitTask_BackendData": "Reads that have not been completed or have not been effective are not allowed to request re-reading.",
"VisitTask_UnreadTask": "Reads that re-read has been applied or approved are not allowed to apply for re-reading.",
"VisitTask_NoPMRecheck": "Additional review reads do not allow the PM to apply for re-reading",
"VisitTask_Reapply": "PM is not allowed to apply for re-reading of consistency analysis reads.",
"VisitTask_ConsistencyAnalysis": "PM is only allowed to apply for re-reading that the view type is visit.",
"VisitTask_VisitTypeRestriction": "This is chronological read, and the subject has visit that has applied for re-read by PM, but has not been processed, so it cannot been applied for continuing re-read at this time.",
"VisitTask_SequentialReading": "This is chronological read, and the subject has visit that has applied for re-read, but has not been processed, so it cannot been applied for re-read for now.",
"VisitTask_ImageProblem": "This is chronological read, and there is something wrong with the image. PM has applied for returning, so it cannot been applied for re-reading now.",
"VisitTask_LastReading": "This is chronological read, and only the request for re-readinng by the subject reader after completing the global task for the last time is allowed.",
"VisitTask_LastOncologistRecheck": "This is chronological read, and the subject will only be allowed to re-read after IR completing the last oncology read ",
"VisitTask_LastAdjudicatorRecheck": "This is chronological read, and the subject will only be allowed to re-read after IR completing the last adjudication read ",
"VisitTask_IRGlobalRecheck": "This is random read, IR is only allowed to apply for re-reading global and visit reads",
"VisitTask_IRReapply": "This is random read, IR is only allowed to apply for re-reading global and visit reads ",
"VisitTask_InvalidReapplyStatus": "The current re-read status is not requested and cannot be processed. Please refresh the page.",
"VisitTask_ReapplyStatusConflict": "The current re-read status has been affected by another re-read reads. The re-read review operation is not allowed for reads in this state",
"VisitTask_ReReadTaskNotApplied": "Only reads with visit type are allowed to approve of re-read.",
"VisitTask_ReReadTaskAlreadyAffected": "Do not conform to the PM request and SPM / CPM approve , or IR request and PM approve.",
"VisitTask_TaskTypeNotApproved": "The current re-read status is not requested and cannot be processed. Please refresh the page.",
"VisitTask_NoImageReturn": "Additional review reads do not allow PM to apply for re-reading",
"VisitTask_NonEffectiveTaskCannotBeReturned": "Only effective and unfinished visit read can be returned. Please refresh the page data.",
"VisitTask_NoFurtherReturn": "The current visit has been returned to image upload, so continuing to return is not allowed!",
"VisitTask_ConsistencyTaskCannotBeReturned": "The consistency analysis read is not allowed to be set return back.",
"VisitTask_PMOnlyAllowedForReturn": "Only PM can perform the return back.",
"VisitTask_UnsupportedTaskType": "Re-read types are not supported.",
"VisitTask_UndefinedList": "The current user view list is not defined.",
"VisitTask_NoConsistencyReturn": "",
"VisitTask_VisitTypeTaskAllowedForPMOnly": "Only visit task type can be returned by PM.",
"VisitTask_NoConsistencyReturn": "The conformance analysis read cannot be returned back",
"VisitTask_VisitTypeTaskAllowedForPMOnly": "Only read with visit type can be returned by PM.",
// ------------------------------------------------------------Common--------------------------------------------------------------------
//CommonDocumentService
"Document_CodeDuplication": "The Code of the document cannot be repeated.",
"Document_SingleTemplate": "Only one template document is allowed per scenario and standard.",
"Document_SingleTemplate": "Only one template file is allowed per scenario and standard.",
"Document_ TemplateRead": "Failed to read the template content, please try saving the file as docx format!",
//DictionaryService
"Dictionary_DictionaryName": "There is already a dictionary with the name {0}.",
"Dictionary_DictionaryDeletion": "The current dictionary is referenced in the standard and cannot be deleted!",
"Dictionary_SubitemDeletion": "There is child data, direct deletion is not allowed!",
"Dictionary_ResumeReference": "The current entry has been referenced in the reader resume.",
"Dictionary_ProjectReference": "The current entry has been referenced in the project information.",
"Dictionary_StandardReference": "The current entry has been referenced in the reading standard.",
"Dictionary_ProjectReference": "The current entry has been referenced in the trial information.",
"Dictionary_StandardReference": "The current entry has been referenced in the review criteria.",
//ExcelExportService
"ExcelExport_UnsupportedExport": "Currently the standard export is not supported.",
"ExcelExport_UnsupportedExport": "Currently the criterion export is not supported.",
//MailService
"Mail_EmailResetReminder": "[from Extensive Imaging IRC] A reminder about resetting email.",
"Mail_EmailResetReminder": "[From Extensive Imaging IRC] A reminder about resetting the email.",
"Mail_Dear": "Dear {0},",
"Mail_ResettingEmail": "You are resetting an email address.",
"Mail_IRCResettingPassword ": "[from Extensive Imaging IRC] A reminder about resetting your password",
"Mail_ResettingPassword ": "You are resetting the email password ",
"Mail_ImagingIRCReminder": "[from Extensive Imaging IRC] A reminder",
"Mail_IRCProject": "You are participating in the Extensive Imaging IRC project",
"Mail_ProjectParticipationReminder": "[from Extensive Imaging IRC] [{0}] A reminder of the site info collection",
"Mail_CenterResearchReminder": "You are participating in the Site information collection of the IRC Program for Extensive Imaging.",
"Mail_AccountCreationReminder": "[from Extensive Imaging IRC] A reminder about creating an account",
"Mail_AccountPasswordResetReminder": "[from Film IRC] A reminder about resetting account passwords",
"Mail_InvitationEmail": "[from Extensive Imaging IRC][{0}]Invitation",
"Mail_IRCResettingPassword ": "[From Extensive Imaging IRC] A reminder about resetting your password",
"Mail_ResettingPassword ": "You are resetting the email password",
"Mail_ImagingIRCReminder": "[From Extensive Imaging IRC] A reminder",
"Mail_IRCProject": "You are participating in the Extensive Imaging IRC trial",
"Mail_ProjectParticipationReminder": "[From Extensive Imaging IRC] [{0}] A reminder of the Site Survey",
"Mail_CenterResearchReminder": "You are participating in the Site Survey of the Extensive Imaging IRC trial.",
"Mail_AccountCreationReminder": "[From Extensive Imaging IRC] A reminder about creating an account",
"Mail_AccountPasswordResetReminder": "[From Extensive Imaging IRC] A reminder about resetting account passwords",
"Mail_InvitationEmail": "[From Extensive Imaging IRC][{0}]Invitation",
//SystemMonitor
"SysMon_JsonConfig": "Parsing the Json file configuration failed",
// ------------------------------------------------------------Doctor--------------------------------------------------------------------
//DoctorService
"Doctor_DupPhoneOrEmail": "current phone or email number already existed",
"Doctor_DupPhone": "The current phone number already existed!",
"Doctor_DupPhoneOrEmail": "The current tel or email number already existed",
"Doctor_DupPhone": "The current tel number already existed!",
"Doctor_DupEmail": "The current email already existed!",
"Doctor_StandardDuplicateFileTypeError": "This type of file has already been added to the current criterion.",
"Doctor_RequiredDocumentsError": "Resume & Consultant Agreement must be upload ",
"Doctor_RequiredDocumentsError": "Resume & Consultant Agreement must be upload",
// ------------------------------------------------------------Document--------------------------------------------------------------------
//SystemDocumentService
"SystemD_DuplicateFile": "A file of the same type and name already exists in the system.",
"SystemD_CannotDeleteSignedFile": "The document has already been read and signed by a user, and not allowed to be deleted.",
"SystemD_DuplicateFile": "A file with the same type and same name already exists in the system.",
"SystemD_CannotDeleteSignedFile": "The file has already been read and signed by a user, and not allowed to be deleted.",
//TrialDocumentService
"TrialD_DuplicateFileInProject": "A file of the same type with the same name already exists in the trial project .",
"TrialD_DocumentHasAlready": "The document has already been read and signed by a user, and not allowed to be deleted.",
"TrialD_DuplicateFileInProject": "A file with the same type and same name already exists in this trial .",
"TrialD_DocumentHasAlready": "The file has already been read and signed by a user, and not allowed to be deleted.",
"TrialD_FileAlreadySigned": "The file has been signed.",
"TrialD_ObsoleteFile": "Document has been annulled. Signature failed!",
"TrialD_ObsoleteFile": "The file has been revoked. Signature failed!",
//TrialEmailNoticeConfigService
"TrialEmailN_TaskNotSigned": "Before sending the email, the task must have been signed and triggered to complete the corresponding task generation.",
"TrialEmailN_NoRecipient": "The message cannot be sent without the recipient.",
"TrialEmailN_InvalidEmailConfig": "The configuration of the sender mailbox of the trial is wrong, please check it.",
"TrialEmailN_EmailTemplateNotFound": "The email template in the standard scenario of this project cannot be found.",
"TrialEmailN_InvalidEmailConfig": "The configuration of the sender mail of the trial is wrong, please check.",
"TrialEmailN_EmailTemplateNotFound": "The email template in the standard scenario of this trial cannot be found.",
"TrialEmailN_EnrollmentConfirmation": "[Enrollment Confirmation Report] About {0} item {1}Subject",
"TrialEmailN_Enrollment": "The attachment is the enrollment confirmation report, please check it.",
"TrialEmailN_PDReport": "[PD Report] About {0} item {1}Subject",
"TrialEmailN_SubjectDiseaseProgression": "The attachment is the confirmation report of disease progress, please check it.",
"TrialEmailN_SingleBlindedSet": "The configuration of the single and ordered reading is incorrect (there should be no adjudicator configuration), please check!",
"TrialEmailN_SingleBlindedSequenced": "The single and ordered reading, this type of task should not enter the logic here, please contact the background developers to check!",
"TrialEmailN_Enrollment": "The attachment is the Enrollment Confirmation Report, please check.",
"TrialEmailN_PDReport": "[PD Confirmation Report] About {0} item {1}Subject",
"TrialEmailN_SubjectDiseaseProgression": "The attachment is the PD Confirmation Report, please check.",
"TrialEmailN_SingleBlindedSet": "The configuration of the single and chronological read is incorrect (there should be no adjudicator configuration), please check!",
"TrialEmailN_SingleBlindedSequenced": "The single and chronological read, should not enter the logic here, please contact the background developers to check!",
"TrialEmailN_PDProgressEmailTask": "Send PD progress email found problem with the task data!",
"TrialEmailN_DoubleBlindedError": "The adjudication rule processing logic for double and ordered reading is not defined, please contact the business and background developers to check!",
"TrialEmailN_InCons": "",
"TrialEmailN_NoBaseLine": "",
"TrialEmailN_IncompBase": "",
"TrialEmailN_EmailFail": "",
"TrialEmailN_NoReader": "",
"TrialEmailN_NoPDConfig": "",
"TrialEmailN_NoPDTasks": "",
"TrialEmailN_PDNotFinished": "",
"TrialEmailN_PDNoImaging": "",
"TrialEmailN_PDPhaseNotFinished": "",
"TrialEmailN_NoRuleDefined": "",
"TrialEmailN_NoDoubleOrder": "",
"TrialEmailN_NoSendLogicDefined": "",
"TrialEmailN_BlindedSequencedReading": "The configuration of the ordered reading is wrong (should be single or double reading), please check!",
"TrialEmailN_UnblindedSequencedReading": "The configuration of unordered reading is wrong (should be single reading without adjudication, or double reading with adjudication for visiting ), please check!",
"TrialEmailN_InvalidTaskTypeForEmailSending": "Do not send emails for other types of tasks except visit, adjudication and global read. Please check the business logic.",
"TrialEmailN_PDLogicNotDefined": "The standard task has not yet defined the PD acquisition logic, please supplement it after consultation with the business and background developer.",
"TrialEmailN_DoubleBlindedError": "The double and chronological read does not defined the adjudication rule logic, please contact the developers to check!",
"TrialEmailN_InCons": "The trial is not configured with the Enrollment Confirmation!",
"TrialEmailN_NoBaseLine": "There is no baseline visit configured with Enrollment Confirmation and IR readedso email failed to send",
"TrialEmailN_IncompBase": "The baseline reads for enrollment confirmation has not been finished for IR!",
"TrialEmailN_EmailFail": "Email failed to generate manuallyplease contact developer to verify the failure cause",
"TrialEmailN_NoReader": "No IR has finished the baseline read at present!",
"TrialEmailN_NoPDConfig": "The trial is not configured with PD Confirmation!",
"TrialEmailN_NoPDTasks": "There is no baseline visit configured with “PD Confirmation” and IR readedso email failed to send",
"TrialEmailN_PDNotFinished": "The completion status of the latest PD interview and film reading task of the current subject does not meet the sending conditions",
"TrialEmailN_PDNoImaging": "The trial is configured with review period adjudication, but the current subject' s latest visit marked 'PD' have no review period",
"TrialEmailN_PDPhaseNotFinished": "The review period status of the current subject's latest PD visit does not meet the sending conditions",
"TrialEmailN_NoRuleDefined": "The sending logic for adjudication rule is not defined! ",
"TrialEmailN_NoDoubleOrder": "The current trial is not double and chronological read, so the sending condition is not met",
"TrialEmailN_NoSendLogicDefined": "The current trial is not defined sending logic",
"TrialEmailN_BlindedSequencedReading": "The configuration of the chronological read is wrong (should be single or double reading), please check!",
"TrialEmailN_UnblindedSequencedReading": "The configuration of random read is wrong (should be single read without adjudication, or double read with adjudication for visiting ), please check!",
"TrialEmailN_InvalidTaskTypeForEmailSending": "Do not send emails for other type except visit, adjudication and global read. Please check the logic.",
"TrialEmailN_PDLogicNotDefined": "Reads for this criterion has not yet defined the PD logic, please supplement it after consultation with the developer.",
"TrialEmailN_MailboxWrong": "The configuration of the sender mailbox of the trial is wrong, please check it.",
"TrialEmailN_InvalidRecipient": "The trial does not have a valid recipient and the message cannot be sent.",
"TrialEmailN_InvalidRecipient": "The trial does not have a valid recipient, so the message cannot be sent.",
"TrialEmailN_EmailTestMessage": "Trial mail test",
"TrialEmailN_ConfigurationCorrect": "If this email is received, the email configuration is correct.",
"TrialEmailN_InvalidSenderEmailConfig": "The sender configuration is incorrect. Please check whether the server address or authorization code is correct or not.",
@@ -251,12 +287,12 @@
// ------------------------------------------------------------ImageAndDoc--------------------------------------------------------------------
//DicomArchiveService
"DAS_NoAnonCacheData": "The cache data for anonymous config is not obtained, and the upload stops. Please contact the developer for verification.",
"DAS_NoAnonCacheData": "The cache data for anonymous config is not obtained, and the upload stops. Please contact the developer to verify.",
//ImageShareService
"ISS_NoImgToShare": "There are no images to share for the current check.",
"ISS_ResNotExists": " The request resource wasnt found.",
"ISS_SharePwdError": "The shared password is incorrect",
"ISS_ShareExpiration": "Resource sharing expires",
"ISS_NoImgToShare": "There are no images to share for the current study.",
"ISS_ResNotExists": "The request resource wasnt found.",
"ISS_SharePwdError": "The shared password is incorrect.",
"ISS_ShareExpiration": "Resource sharing expires.",
//StudyService
"Study_VisitBeforePrevError": "The current visit check time {0} cannot be earlier than the previous visit check time {1}. Please check whether the check data is correct.",
"Study_VisitAfterSubseqError": "The current visit check time {0} cannot be later than the visit check time {1} .Please check whether the check data is correct.",
@@ -268,181 +304,182 @@
//FrontAuditConfigService
"FrontAudit_IdDup": "The identifier is duplicated.",
"FrontAudit_NameDup": "The name is duplicated .",
"FrontAudit_CannotDelSub": "Subclasses existdo not delete.",
"FrontAudit_CannotDelSub": "Subclasses exist, cannot delete.",
//InspectionService
"Inspection_UserDisabled": "The current user has been disabled.",
// ------------------------------------------------------------Institution--------------------------------------------------------------------
//CROService
"CRO_DupName": "CRO with the same name already exists.Please confirm",
"CRO_InProject": "The CRO has participated in the project and cannot be deleted.",
"CRO_DupName": "CRO with the same name already exists. Please confirm.",
"CRO_InProject": "The CRO has participated in the trial and cannot be deleted.",
//HospitalService
"Hospital_DupName": "Hospital with the same name already exists.Please confirm",
"Hospital_SiteAdded": "The current Site has been added to another Hospital",
"Hospital_DupName": "Hospital with the same name already exists. Please confirm.",
"Hospital_SiteAdded": "The current Site has been added to another Hospital.",
"Hospital_HasDoctors": "There are already doctors registered under the hospital's account and cannot be deleted.",
//SiteService
"Site_DupName": "Site with the same name already exists.Please confirm",
"Site_DupName": "Site with the same name already exists. Please confirm.",
"Site_InProject": "This site has been added to the project and cannot be deleted.",
//SponsorService
"Sponsor_DupName": "Sponsor with the same name already exists.Please confirm.",
"Sponsor_InProject": "The sponsor has been added to the project and it is not allowed to delete.",
"Sponsor_DupName": "Sponsor with the same name already exists. Please confirm.",
"Sponsor_InProject": "The sponsor has been added to the trial and it is not allowed to delete.",
// ------------------------------------------------------------Management--------------------------------------------------------------------
//MenuService
"Menu_ParentDupChild": "A child node with the same name already exists under the parent node.",
"Menu_ChildExist": " Child nodes already exists under this node . Delete the child nodes before deleting the node.",
"Menu_ChildExist": "Child nodes already exists under this node . Delete the child nodes before deleting the node.",
//UserService
"User_UsernameExist": "The user name already exists.",
"User_PhoneDup": "A user with the same phone number already exists in this user type.",
"User_EmailDup": "A user with the same email already exists in this user type.",
"User_NewOldPwdSame": "The new password is the same as the old one.",
"User_OldPwdInvalid": "Failed to verify the old password. ",
"User_LegalEmail": "Please input a legal email",
"User_OldPwdInvalid": "Failed to verify the old password.",
"User_LegalEmail": "Please input a legal email.",
"User_VerificationCodeError": "The verification code is wrong.",
"User_VerificationCodeExpired": "The verification code has expired.",
"User_CreateFailed": "Check the email address or contact maintainers. The email fails to be sent and the account cannot be created",
"User_CreateFailed": "Check the email address or contact maintainers. The email fails to be sent and the account cannot be created.",
"User_InvalidEmail": "Please enter a correct E-mail address.",
"User_EmailError": "The email adress is wrong.",
"User_InProject": "The user has participated in the project and cannot be deleted.",
"User_InProject": "The user has participated in the trial and cannot be deleted.",
"User_Disabled": "The user has been disabled.",
//UserTypeService
"UserType_InUse": "User already exists in that user type, and it cannot be deleted.",
// ------------------------------------------------------------QC--------------------------------------------------------------------
//QCCommon
"QCCommon_CannotOperate": "CRC has submitted the image and it cannot be operated.",
"QCCommon_NoPermission": "You are not the current recipient of the quality control task, so no operation authority!",
"QCCommon_CheckTimeEarly": "The current visit check time {0} cannot be earlier than the previous visit check time {1}. Please check whether the check data is correct.",
"QCCommon_CheckTimeLate": "The current visit check time {0} cannot be later than the visit check time {1} .Please check whether the check data is correct.",
"QCCommon_CannotOperate": "CRC has submitted the image. Operation is not allowed.",
"QCCommon_NoPermission": "You are not the current recipient of the image QC. No operation authority!",
"QCCommon_CheckTimeEarly": "The current visit study time {0} cannot be earlier than the previous visit study time {1}. Please check whether the study data is correct.",
"QCCommon_CheckTimeLate": "The current visit study time {0} cannot be later than the visit study time {1} .Please check whether the study data is correct.",
//QCOperationService
"QCOperation_CheckFirst": "Please check the image first and save review questions before inquiry.",
"QCOperation_QuestionExist": "The current visit with unclosed inquiry has been set to allow CRC to reupload the image. After CRC has reuploaded image, please close the original inquiry first and then add a new inquiry.",
"QCOperation_QuestionCannotClose": "CRC has applied for reuploading or QC has agreed to reuploading and to close the inquiry is not allowed. Please do not close the inquiry until the QC rejects the reuploading request or the CRC reuploads the image.",
"QCOperation_CheckFirst": "Please check the image first and save review questions before query.",
"QCOperation_QuestionExist": "The unclosed query of the current visit has been set to approve CRC reupload. After CRC has reuploaded image, please close the original query first and then add a new query.",
"QCOperation_QuestionCannotClose": "CRC has applied for reuploading or QC has agreed to reupload. To close the query is not allowed. Please do not close the query until the QC rejects or the CRC reuploads the image.",
"QCOperation_CloseReason": "Reason for closing:",
"QCOperation_QuestionReplied": "The QC inquiry has been answered.",
"QCOperation_QuestionReplied": "The QC query has been answered.",
"QCOperation_NoPermissionReply": "You do not have permission to reply to the data reconciliation conversation.",
"QCOperation_CannotClose": "The current visit is in the request fallback state, and the inquiry is not allowed to be closed.",
"QCOperation_Reason": "Reason:",
"QCOperation_CannotPass": "The current visit is in the rollback state, and the data reconciliation cannot be set.",
"QCOperation_PassAfterClose": "Please close the data reconciliation inquiry first, and then set the data reconciliation pass.",
"QCOperation_Cannotback": "The current visit has passed the consistency check and cannot be applied for rollback.",
"QCOperation_CRCRollback": "CRC Apples for rollback.",
"QCOperation_CannotClose": "The current visit status is CRC request re-upload. The query is not allowed to be closed.",
"QCOperation_Reason": "Notes:",
"QCOperation_CannotPass": "The current visit is in the return status, and the data reconciliation cannot be set.",
"QCOperation_PassAfterClose": "Please close the data reconciliation query first, and then set the data reconciliation pass.",
"QCOperation_Cannotback": "The current visit has passed the consistency check and cannot be applied for re-upload.",
"QCOperation_CRCRollback": "CRC apples for re-upload.",
"QCOperation_OtherCRC": "Other CRCs have applied for processing. Please refresh the page.",
"QCOperation_PMReject": "PM/APM rejected the data reconciliation rollback.",
"QCOperation_PMReject": "PM/APM rejected the data reconciliation return.",
"QCOperation_NoPermission": "You do not have operation permission.",
"QCOperation_CannotRollback": "If the current visit has not been studied or study has passed, setbacks are not allowed.",
"QCOperation_CannotRollback": "If the current visit has not do reconciliation or has passed, setbacks are not allowed.",
"QCOperation_PMAPMConsistency": "PM/APM agrees to the data reconciliation rollback.",
"QCOperation_NoModifyAfterSubmit": "Once submitted, no modifications are allowed.",
"QCOperation_UnresolvedQCQuery": "This operation is not allowed, because the inquiry of the current visitis is not closed. ",
"QCOperation_UnresolvedQCQuery": "Image query of the current visit is not closed. This operation is not allowed.",
"QCOperation_CrcNoDelete": "The CRC has been committed and cannot be deleted.",
"QCOperation_NoRecipient": "You are not the current recipient of the quality control task, no operation authority!",
"QCOperation_QCImageTaskAlreadyReleased": "The image quality control task of the current visit has been released by the original recipient. You can get it by 'pick up'.",
"QCOperation_QCTaskNoAccess": "The image quality control task of the current visit has been claimed by other QC, so it is not allowed to pick up.",
"QCOperation_QCConfigFirst": "Please configure the image quality control review question before receiving the image quality control task.",
"QCOperation_NoQC": "The project configuration of image QC process was not check, and the QC Task was not picked up.",
"QCOperation_QCImageTaskAlreadyReleased": "The image QC of the current visit has been released by the original recipient. You can get it by 'claime'.",
"QCOperation_QCTaskNoAccess": "The image quality control task of the current visit has been claimed by other QC, so it is not allowed to claim.",
"QCOperation_QCConfigFirst": "Please configure the image QC questions before claiming any image QC work.",
"QCOperation_NoQC": "The trial configuration of image QC was not check, and the QC Task was not be claimed.",
"QCOperation_InitialAuditPassed": "The first review has passed, continue to receive can not be allowed.",
"QCOperation_NoSingleAudit": "The project is configured for single check, does not meet Submmit State: Submitted or Audit State: pending review/ in review, not allowed to collect.Please refresh the page.",
"QCOperation_NoSingleAudit": "The trial is configured with single image QC , does not meet Submmit State: Submitted or Audit State: pending QC/ in QC, not allowed to collect.Please refresh the page.",
"QCOperation_NoSameReviewer": "The secondary QC cannot be the same person as the primary QC.",
"QCOperation_NoSecondaryAudit": "The project is configured for double check, does not meet Submmit State: Submitted or Audit State: pending review/ in QC review, not allowed to collect.Please refresh the page.",
"QCOperation_NoSecondaryAudit": "The trial is configured withr double image QC , does not meet Submmit State: Submitted or Audit State: pending review/ in QC, not allowed to collect.Please refresh the page.",
"QCOperation_NoTaskAccess": "You are not the current recipient of the quality control task, no operation authority!",
"QCOperation_NoQCFunction": "The project configuration of image QC process was not check, so there is no need to cancel the task function.",
"QCOperation_NoTaskOwner": "The current visiting image QC task has not been claimed by anyoneand cannot been released.",
"QCOperation_DiseaseProgressConfirmation": "Current visit required confirmation of PD. Please process the unsubmitted prior visit before submitting the current visit: {0}.",
"QCOperation_UnsubmittedVisits": " After submitting the current visit, please as soon as possible process any prior visits that have not been submitted: {0}.",
"QCOperation_NoBaselineData": "No clinical data at baseline, confirm submission?",
"QCOperation_NoImageData": "Dicom/ non-dicom image data has not been uploaded. Submission is not allowed.",
"QCOperation_ImagesSubmitted": "The image data for the current visit has been submitted by another CRC.",
"QCOperation_BatchImagesSubmitted": "The image data for visiting is currently submitted in batches, part of which has been submitted by other CRCS.",
"QCOperation_MissingBaselineDate": "The project is configured with the visit base time. However, the subject did not fill in the visit base time, which is not allowed to submit.",
"QCOperation_RemoveItem": "You have been removed from the project and have no operation rights.",
"QCOperation_QCNotClosed": "This operation cannot be performed because the image quality control inquiry has not been closed for the current visit.",
"QCOperation_NoQCNeeded": "The project configuration of image QC process was not check, and no need to set to image quality control pass.",
"QCOperation_QCNotSaved": "Image quality control review question is not saved, and cannot be performed.",
"QCOperation_NotChangePass": "The project configuration of image QC process was double check, so the current image QC task cannot change from the current state to pass.",
"QCOperation_CannotChangeToPass": "The project configuration of image QC process was double check. The current audit state is {0}, which cannot be changed to approved.",
"QCOperation_NoQCNeededNotEnd": "The project configuration of image QC process was not check, and setting image quality control termination is not allowed.",
"QCOperation_CannotChangeToStop": "The project configuration of image QC process was single check, and the current review state is not In Primary QC and cannot be changed to the QC termination.",
"QCOperation_CannotChangeStop": "The project configuration of image QC process was double check, and the current review state is {0} and cannot be changed to the QC termination.",
"QCOperation_NoTaskOwner": "The current visiting image QC has not been claimed by anyone, and cannot been released.",
"QCOperation_DiseaseProgressConfirmation": "Current visit required PD Confirmation. Please process the unsubmitted prior visit before submitting the current visit: {0}.",
"QCOperation_UnsubmittedVisits": "After submitting the current visit, please submit any prior visits which have not been submitted as soon as possible. ({0})",
"QCOperation_NoBaselineData": "No clinical data at baseline. Confirm to submit?",
"QCOperation_NoImageData": "Dicom/ Non-dicom image data has not been uploaded. Submission is not allowed.",
"QCOperation_ImagesSubmitted": "The image data of the current visit has been submitted by another CRC.",
"QCOperation_BatchImagesSubmitted": "The visit image data is currently submitted in batches, part of which has been submitted by other CRCs.",
"QCOperation_MissingBaselineDate": "The trial is configured with the visit start date, but the visit start date for the subject is not filled. Submittion is not allowed.",
"QCOperation_RemoveItem": "You have been removed from the trial and have no operation rights.",
"QCOperation_QCNotClosed": "The QC query has not been closed for the current visit. This operation cannot be performed.",
"QCOperation_NoQCNeeded": "The trial configuration of image QC was no. No need to set image QC as pass.",
"QCOperation_QCNotSaved": "Image QC question is not saved. This operation is not allowed.",
"QCOperation_NotChangePass": "The trial configuration of image QC process was double check, so the current image QC task cannot change from the current state to pass.",
"QCOperation_CannotChangeToPass": "The trial configuration of image QC process was double check. The current audit state is {0}, which cannot be changed to approved.",
"QCOperation_NoQCNeededNotEnd": "The trial configuration of image QC process was not check, and setting image quality control termination is not allowed.",
"QCOperation_CannotChangeToStop": "The trial configuration of image QC process was single check, and the current review state is not In Primary QC and cannot be changed to the QC termination.",
"QCOperation_CannotChangeStop": "The trial configuration of image QC process was double check, and the current review state is {0} and cannot be changed to the QC termination.",
"QCOperation_InvalidResend": "The current reupload state is not QC agree, so reuploading is not allowed.",
"QCOperation_NoResendNeeded": "No check operation, there will be no need to reupload!",
"QCOperation_InvalidAgreeResend": "The current reuploading state is not CRC requested and the approve of reuploading cannot be set.",
"QCOperation_CannotAgreeResend": "At the current visit, there is an unclosed inquiry that QC set to agree to reupload, CRC has not completed the upload, currently is not allowed to set again.",
"QCOperation_AgreeResend": "QC agrees to reupload.",
"QCOperation_InvalidCompleteResend": "The current reupload state is not QC agree, setting reuploading completion is not allowed.",
"QCOperation_NoImageNotAllowed": "No image is currently available, setting reuploading completion is not allowed.",
"QCOperation_InvalidAgreeResend": "The current re-upload- status is not CRC requested and the approve of reuploading cannot be set.",
"QCOperation_CannotAgreeResend": "At the current visit, there is an unclosed query that QC set to agree to reupload, CRC has not uploaded, currently is not allowed to set again.",
"QCOperation_AgreeResend": "QC agrees to re-upload.",
"QCOperation_InvalidCompleteResend": "The current reupload status is not QC approved, setting reuploading completion is not allowed.",
"QCOperation_NoImageNotAllowed": "No image is currently available. Setting reuploaded is not allowed.",
"QCOperation_CRCTransferCompleted": "CRC reuploading has been completed. ",
"QCOperation_InvalidTransferStatus": "The current inquiry reupload state is not the initial state| CRC reupload completed state, and requests for reuploading are not allowed",
"QCOperation_InvalidTransferStatus": "The current query re-upload status is not the initial| CRC re-uploaded. Application for re-uploading is not allowed",
"QCOperation_CRCTransfer": "CRC requests to reupload/upload images.",
"QCOperation_CannotModifyConfirmation": "The visit has been submitted, and the enrollment confirmation state cannot be modified.",
"QCOperation_CannotModifyPDStatus": "This visit is regarded as a rollback visit, and modification of PD confirmation status is not allowed.",
"QCOperation_CannotModifyPDStatus": "This visit status is return back. Modification of PD Confirmation status is not allowed.",
"QCOperation_ForwardingFailed": "Failed to forward the image:",
//QCQuestionService
"QCQuestion_DuplicateIndexFailed": "Operation failed because the serial number is repeated.",
"QCQuestion_HasChildQuestion": "The current task has a sub-question and the deletion fails.",
"QCQuestion_HasChildQuestion": "The current task has a sub-question. Deletion failed.",
//TrialQCQuestionService
"TrialQCQuestion_TemplateConfirmed": "Image quality control review question template has been confirmed, and no operation is allowed.",
"TrialQCQuestion_TemplateConfirmed": "Image QC question template has been confirmed. No operation is allowed.",
"TrialQCQuestion_DuplicateIndexFailed": "Operation failed because the serial number is repeated.",
"TrialQCQuestion_DeleteChildFirst": "Before deleting the parent question, delete the child question that references the parent question.",
"TrialQCQuestion_ReferencedByQCProcess": "This review question has been cited by the image quality control process and is not allowed to be deleted.",
"TrialQCQuestion_ReferencedByQCProcess": "This review question has been cited by the image QC. Deletion is not allowed.",
// ------------------------------------------------------------QC--------------------------------------------------------------------
// ------------------------------------------------------------SiteSurvey--------------------------------------------------------------------
//TrialSiteEquipmentSurveyService
"TrialSiteEquipment_Locked": "Locked and not allowed to operate.",
"TrialSiteEquipment_Locked": "Locked and operation is not allowed.",
//TrialSiteSurveyService
"TrialSiteSurvey_InvalidEmail": "Please enter the correct email address.",
"TrialSiteSurvey_WrongVerificationCode": "The verification code is incorrect.",
"TrialSiteSurvey_ExpiredVerificationCode": "The verification code has expired.",
"TrialSiteSurvey_NoRecordToUpdate": "The site does not have a site survey record for the transferor , so it is not allowed to choose to update.",
"TrialSiteSurvey_RecordUnderReview": "Your site survey record is in review and cannot be updated. If you need to update, please do so after rejection.",
"TrialSiteSurvey_LockedByCurrentUser": "In the current site, the survey record form you submitted has been locked, and it is not allowed to update other people's email survey records.",
"TrialSiteSurvey_LockedByOtherUsers": "In the current site, the survey record you submitted has been locked, Currently, the survey record form submitted by other personnel is not locked, so it is not allowed to update the survey record submitted by you before.",
"TrialSiteSurvey_LockedByCurrentUser": "In the current site, the submitted survey record has been locked. Updation of other people's email survey records is not allowed.",
"TrialSiteSurvey_LockedByOtherUsers": "The submitted survey record of the current site has been locked. Currently, the survey record submitted by other personnel is not locked. Updation of the survey submitted before is not allowed.",
"TrialSiteSurvey_UnlockedRecordsExist": "The current site has unlocked survey records. Locked survey records cannot be updated.",
"TrialSiteSurvey_NonLatestLockedRecord": "The site survey corresponding to the mailbox {0} is not the latest locked record and is not allowed to be updated!",
"TrialSiteSurvey_AlreadyFilledByOtherUsers": "There are already survey forms filled out by other users under this site, and you are not allowed to fill them out",
"TrialSiteSurvey_NonLatestLockedRecord": "The site survey corresponding to the mailbox {0} is not the latest. Updation is not allowed",
"TrialSiteSurvey_AlreadyFilledByOtherUsers": "There are already survey filled out by other users under this site. You are not allowed to fill them out",
"TrialSiteSurvey_Locked": "The site survey has been locked, and no operation is allowed.",
"TrialSiteSurvey_IRCNotification": "[from Extensive Imaging IRC] A reminder about the site survey approval.",
"TrialSiteSurvey_CancelUnsubmittedRecord": "Only unsubmitted records are allowed to be repealed.",
"TrialSiteSurvey_NoAdminAcces": "The operation is not allowed by the administrator.",
"TrialSiteSurvey_FailedToGenerateAccountId": "If no value is obtained for the generated account Id, please check.",
"TrialSiteSurvey_FailedToGenerateAccountId": "If no value is obtained for the generated account Id. Please check.",
"TrialSiteSurvey_IRCInvitation": "[from Extensive Imaging IRC][{0}] Invitation letter",
"TrialSiteSurvey_IRCInvitationContent": "Hello, as the IRC supplier of experiment plan No. {0} project, Extensive Imaging sincerely invites you to participate in the IRC related work of this project. Your guidance and suggestions are welcome.",
"TrialSiteSurvey_IRCInvitationContent": "Hello, as the IRC supplier of experiment plan No. {0} trial, Extensive Imaging sincerely invites you to participate in the IRC related work of this project. Your guidance and suggestions are welcome.",
"TrialSiteSurvey_ViewAndConfirm": "Check and confirm",
//TrialSiteUserSurveyService
"TrialSiteUser_Locked": "Locked and not allowed to operate.",
"TrialSiteUser_InconsistentInfo": "The user's account name in the system is{0}, and there are inconsistent items with the information filled in. Now modify the interface information to be consistent with the system and save it.",
"TrialSiteUser_NoTestUserForFormal": "It is Formal and training projects that are not allowed to add test users.",
"TrialSiteUser_InconsistentInfo": "The corresponding user of this email address is {0}, and the phone number is {1}. Please modify the inputted information and make it consistent with that already in the system, and then save.",
"TrialSiteUser_NoTestUserForFormal": "Formal and training triala are not allowed to add test users.",
"TrialSiteUser_NoFormalUserForTest": "It is the test project that regular users are not allowed in.",
// ------------------------------------------------------------Stat--------------------------------------------------------------------
// ------------------------------------------------------------TrialSiteUser--------------------------------------------------------------------
//TrialConfigService
"TrialConfig_JudgeTaskFail": "There are judge questions that the conditions for generating judge reading task are not configured, and the operation has failed!",
"TrialConfig_StdConfigMissing": "Questions are not configured under the current standard.",
"TrialConfig_JudgeTaskFail": "There are adjudication questions that the conditions for generating adjudication review read are not configured. Operation failed!",
"TrialConfig_StdConfigMissing": "Questions are not configured under the current criterion.",
"TrialConfig_AddEvalReq": "Selected additional assessment, must check additional assessment type",
"TrialConfig_SignTemplateMissing": "This operation requires electronic signature confirmation, but the signature template for this scenario is not found in the system.",
"TrialConfig_ProjectEnded": "The trial project has ended or stopped, and configuration changes are not allowed.",
"TrialConfig_NoImageAuditQuestion": "No image quality control review question is currently added. Please add the image quality control review question first, and then confirm.",
"TrialConfig_DuplicateAuditQuestionId": "Image quality control review question display number cannot be repeated.",
"TrialConfig_InvalidParentQuestionId": "Make sure that the display sequence number of the parent question is smaller than that of the child question.",
"TrialConfig_AuditQuestionConfirmed": "The question of image quality control review has been confirmed by other personnel, and it is not allowed to be confirmed again.",
"TrialConfig_ProjectNotInitialized": "This operation is not allowed because the current state of the project is not initialized.",
"TrialConfig_UnconfirmedConfiguration": "There are unconfirmed items in the project configuration (logical configuration, process configuration, expedite configuration) and visit management, so the project state cannot be set to start.",
"TrialConfig_UnconfirmedUNACKD": "Unable to change project status. There are unconfirmed items in the project configuration and visit management.",
"TrialConfig_ProjectNotStarted": "The project is not in the start state and cannot be set to stop or complete.",
"TrialConfig_ProjectEnded": "The trial has ended or stopped. Configuration changes are not allowed.",
"TrialConfig_NoImageAuditQuestion": "No image QC question is currently added. Please add the image QC questions first, and then confirm.",
"TrialConfig_DuplicateAuditQuestionId": "Image QC question display number cannot be repeated.",
"TrialConfig_InvalidParentQuestionId": "Make sure that the display sequence number of the parent question is smaller than that of the child.",
"TrialConfig_AuditQuestionConfirmed": "The image QC questions have been confirmed by other personnel. Cofirmation again is not allowed. ",
"TrialConfig_ProjectNotInitialized": "The current trial status is not initialized. This operation is not allowed.",
"TrialConfig_UnconfirmedConfiguration": "This trials project configuration, & visit management have not been finished, and its status cannot be changed to “Ongoing”.",
"TrialConfig_UnconfirmedUNACKD": "This trials project configuration, & visit management have not been all confirmed, and its status cannot be changed",
"TrialConfig_ProjectNotStarted": "This trial status is not “Ongoing”, and cannot be set to Stoped or Completed.",
//TrialExternalUserService
"TrialExternalUser_Inconsistency": "The user's account name in the system is{0}, and there are inconsistent items with the information filled in. Now modify the interface information to be consistent with the system and save it.",
"TrialExternalUser_Inconsistency": "The corresponding user of this email address is {0}, and the phone number is {1}. Please modify the inputted information and make it consistent with that already in the system, and then save.",
"TrialExternalUser_EmailTypeDuplicate": "Please confirm that the system already has an account with the same email address and user type as the one entered in the list.",
"TrialExternalUser_TestUserNotAllowed": "It is Formal and training projects that are not allowed to add test users.",
"TrialExternalUser_FormalUserNotAllowed": "It is the test project that regular users are not allowed in.",
"TrialExternalUser_NotEditable": "Personnel information cannot be edited. Please delete it and add it again.",
"TrialExternalUser_CannotDelete": "The current user has participated in the project and cannot be deleted.",
"TrialExternalUser_IRCInvitation": "Hello, as the IRC supplier of experiment plan No. {0} project, Extensive Imaging sincerely invites you to participate in the IRC related work of this project. Your guidance and suggestions are welcome.",
"TrialExternalUser_TestUserNotAllowed": "Formal and training trials are not allowed to add test users.",
"TrialExternalUser_FormalUserNotAllowed": "It is a training trial that regular users are not allowed in.",
"TrialExternalUser_NotEditable": "Staff information cannot be edited. Please delete it and add it again.",
"TrialExternalUser_CannotDelete": "The current user has participated in the trial and cannot be deleted.",
"TrialExternalUser_IRCInvitation": "Hello, as the IRC supplier of experiment plan No. {0} trial, Extensive Imaging sincerely invites you to participate in the IRC related work of this project. Your guidance and suggestions are welcome.",
"TrialExternalUser_ViewAndConfirm": "Check and confirm",
"TrialExternalUser_InvitationExpired": "The invitation time has expired. You can only confirm it after you are invited again.",
"TrialExternalUser_AccountInfo": "[from Extensive Imaging IRC][{0}] account information",
"TrialExternalUser_Welcome": "Hello, welcome to participate in the relevant work of trial scheme No. {0}IRC of the project. This project adopts electronic workflow. The system and your account information are as follows:",
"TrialExternalUser_Welcome": "Hello, welcome to participate in the relevant work of trial scheme No. {0}IRC of the project. This trial adopts electronic workflow. The system and your account information are as follows:",
"TrialExternalUser_ProjectNumber": "Trial ID: {0}",
"TrialExternalUser_ExperimentPlanNumber": "Protocol ID: {0}",
"TrialExternalUser_ExperimentName": "Study Name: {0}",
@@ -465,37 +502,37 @@
"TrialSite_ParticipantJoined": "The subjects has been added to this site, and couldn't be disable.",
"TrialSite_CodeDuplicate": "Code is not allowed to be repeated",
"TrialSite_CannotDeleteAssociatedCRC": "The site has been associated with CRC, and couldn't be deleted.",
"TrialSite_CannotDeleteAssociatedSubject": "The subjects has been added to this site, and couldn't be deleted.",
"TrialSite_CannotDeleteUploadedData": "The site has been uploaded study, and couldn't be deleted.",
"TrialSite_CannotDeleteAssociatedSubject": "The subjects has been added, and couldn't be deleted.",
"TrialSite_CannotDeleteUploadedData": "The site has been uploaded survey, and couldn't be deleted.",
// ------------------------------------------------------------Visit--------------------------------------------------------------------
//SubjectService
"Subject_NoConfirmedPlan": "The visit plan of the project is not confirmed. Please contact the program Manager to confirm the visit plan before adding subjects.",
"Subject_NoConfirmedPlan": "The visit plan of the trial is not confirmed. Please contact PM to confirm the visit plan before adding subjects.",
"Subject_DuplicateSubjectNum": "Subjects with the relevant subject ID already exists.",
"Subject_UploadedVisitNoDelete": "The subject has visit that has uploaded the image, so deletion is not allowed.",
"Subject_UploadedVisitNoDelete": "The subject has visit that has uploaded the image. Deletion is not allowed.",
//SubjectVisitService
"Visit_DuplicateVisitNo": "The subject's visit schedule already includes a visit with the same visit ID.",
"Visit_LastVisitNoChange": "The subject has already had a visit set as the last visit, and the current visit is not allowed to be set as the last visit.",
"Visit_LastVisitNoChange": "The subject has already had a visit set as the last, and the current visit cannot be set as the last visit.",
"Visit_DuplicateVisitName": "The subject's visit schedule already includes a visit with the same visit name.",
"Visit_NoExtraVisitAfterLast": "Unplanned visits are not allowed after the last evaluation is set.",
"Visit_FinishedTasksNoAdd": "The subject has already completed the task of reading ( ordered reading standard ) in follow-up visit, which is not allowed to be added here. If necessary, please return.",
"Visit_NoPDStatusChangeAfterSubmission": "The PD confirmation status cannot be modified after the current visit image is submitted.",
"Visit_NoExtraVisitAfterLast": "Unplanned visits cannot be added after the last assessment is set.",
"Visit_FinishedTasksNoAdd": "The subject has reads completed in follow-up visit ( chronological read ) , which is not allowed to be added here. If necessary, please return.",
"Visit_NoPDStatusChangeAfterSubmission": "The PD Confirmation status cannot be modified after the current visit image is submitted.",
"Visit_UploadedNoLost": "The current visit has already uploaded images and cannot be set as visit lost to follow-up.",
"Visit_UploadedNoDelete": "The current visit has already uploaded images and deletion is not allowed.",
"Visit_PlanVisitNoDelete": "Planned visits are not allowed to be deleted.",
"Visit_PreviousVisitNoDelete": "The current visit has been set to the previous visit of another visit and cannot be deleted.",
//VisitPlanService
"VisitPlan_OnlyInitOrOngoing": "Can be operated only when the project state is: Initialization or ongoing.",
"VisitPlan_OnlyInitOrOngoing": "Can be operated only when the trial state is: Initialized or ongoing.",
"VisitPlan_LargerVisitNumLargerInterval": "In the visit plan, the interval between visits with a large number should also be larger than that of a visit with a smaller number.",
"VisitPlan_LargerPlanNumLargerInterval": "In the visit plan, the planned visit with a large number should also have a larger interval than the planned visit with a smaller event number.",
"VisitPlan_ExistNameOrNumTemplate": "A plan visit template with visit name or visit ID of project already exists in the visit plan.",
"VisitPlan_ExistNameOrNumTemplate": "A plan visit template with visit name or visit ID of trial already exists in the visit plan.",
"VisitPlan_ExistBaseline": "A baseline already exists in the visit plan.",
"VisitPlan_ExistBaselineImgNoModify": "Subjects baseline image data has been uploaded, so modification of baseline visits is not allowed.",
"VisitPlan_OnlyInitOrOngoingModifyConfirm": "Modification validation is allowed only when the project is initialized or ongoing.",
"VisitPlan_NoBaselineNotConfirm": "No baseline, no validation allowed.",
"VisitPlan_ConfigNotConfirmNotConfirm": "If the project configuration is not confirmed, the visit plan cannot be confirmed.",
"VisitPlan_BaselineNotMinDayNotConfirm": "Baseline VisitDay is not minimal and does not allow validation.",
"VisitPlan_CheckExport": "Check and export _{0}.xlsx",
"VisitPlan_ExistBaselineImgNoModify": "The subjects baseline image data has been uploaded, so modification of baseline visits is not allowed.",
"VisitPlan_OnlyInitOrOngoingModifyConfirm": "Modification confirmation is allowed only when the trial is initialized or ongoing.",
"VisitPlan_NoBaselineNotConfirm": "No baseline, no confirmation allowed.",
"VisitPlan_ConfigNotConfirmNotConfirm": "If the trial configuration is not confirmed, the visit plan cannot be confirmed.",
"VisitPlan_BaselineNotMinDayNotConfirm": "Baseline's VisitDay is not minimal. Confirmation is not allowed.",
"VisitPlan_CheckExport": "Study export _{0}.xlsx",
"VisitPlan_Assigned": "The visit plan has been assigned to the subjects and executed.",
// ------------------------------------------------------------WorkLoad--------------------------------------------------------------------
@@ -510,10 +547,10 @@
// ------------------------------------------------------------Triggers--------------------------------------------------------------------
//AddlTrialUserTrigger
"AddlTrialUser_NoTestUser": "It is Formal and training projects that are not allowed to add test users.",
"AddlTrialUser_NoFormalUser": "It is the test project that regular users are not allowed in.",
"AddlTrialUser_NoTestUser": "Formal and training trials are not allowed to be added test users.",
"AddlTrialUser_NoFormalUser": "It is a training trial that regular users are not allowed in.",
//SubjectStateTrigger
"SubjectState_CannotSetCurrentAsLastVisit": "The subject has already had a visit set as the last visit, and the current visit is not allowed to be set as the last visit.",
"SubjectState_CannotSetCurrentAsLastVisit": "The subject has already had a visit set as the last, and the current visit cannot be set as the last.",
"SubjectState_CannotSetAsLastVisitWithImage": "The image of the subject's visit after the current visit has been uploaded, and the current visit is not allowed to be set as the last visit.",
//SubjectVisitFinalVisitTrigger
"SubjectVisit_CannotSetAsLastVisit": "The subject's follow-up visits has uploaded images or submitted , and the current visit is not allowed to be set as the last visit.",
@@ -538,13 +575,19 @@
// ------------------------------------------------------------Helper--------------------------------------------------------------------
//FileStoreHelper
"FileStore_TemplateFileNotFound": "Database did not find the corresponding data template file for FileStoreHelper, please contact system maintenance personnel.",
"FileStore_TemplateFileStoragePathInvalid": "No corresponding file was found on the storage path for the data template file of FileStoreHelper, please contact system maintenance personnel.",
"FileStore_TemplateFileStoragePathInvalid": "File doesnt exist. Please contact the system administrator!",
//SendEmailHelper
"SendEmail_SendFail": "Failed to send email in SendEmailHelper. Your operation was unsuccessful, please check your email or contact maintenance personnel.",
"SendEmail_NoRecipient": "No recipient in SendEmailHelper.",
// ------------------------------------------------------------IRaCIS.Core.Domain--------------------------------------------------------------------
//Trial
"Trial_number": "The serial number consists of five digits. The first two digits are the center number and the last three digits are the serial number. The serial number must be the same as that recorded by the EDC"
"Trial_number": "Subject ID is composed of 5 digits. The first 2 are the Site ID, and the following 3 are the order number. Please ensure it is identical to the ID from the EDC system. ",
// ------------------------------------------------------------IRaCIS.Core.Infrastructure--------------------------------------------------------------------
//ResponseOutput
"RO_BizObjNotExistsOrParamIncorrect": "The business object{0} does not exist in the database, or was deleted by someone else, or an incorrect parameter query caused",
"RO_ExpectChangeButNoEffect": "Expect a change, but the database data has not changed",
"RO_SaveFailed": "Saved failed"
}
+66 -23
View File
@@ -2,6 +2,11 @@
"test{0}{1}": "中文本地化{0}{1}",
"RequiredAttribute": "{0} 字段是必须的",
// ------------------------------------------------------------_ServiceExtensions--------------------------------------------------------------------
//ApiResponseHandler
"ApiResponse_NoAccess": "您无权访问该接口",
"ApiResponse_Permission": "您的权限不允许进行该操作",
// ------------------------------------------------------------Controllers--------------------------------------------------------------------
//FinancialChangeController
"Financial_ChargeSettled": "费用已经结算,无法重置工作量",
@@ -13,9 +18,31 @@
"UploadDownLoad_RequestError": "请求异常,请重试!",
"UploadDownLoad_SupportedFormats": "支持.xlsx、.xls、.csv格式的文件上传。",
// ------------------------------------------------------------_MediatR--------------------------------------------------------------------
//ConsistencyVerificationRequest
"ConsistencyVerification_Tech": "检查技术",
"ConsistencyVerification_Time": "时间格式不对",
//ConsistencyVerificationHandler
"ConsistencyVerification_Img": "您好,根据本系统自动识别,该受试者当前访视在IRC系统中已提交的影像检查情况如下:",
"ConsistencyVerification_Of": "的",
"ConsistencyVerification_ImgC": "影像检查",
"ConsistencyVerification_EDCA": "核对EDC数据,完全一致, 审核通过",
"ConsistencyVerification_EDCB": "核对EDC数据,完全一致",
"ConsistencyVerification_Auto": "自动核查通过",
"ConsistencyVerification_Prob": "存在问题如下:",
"ConsistencyVerification_EdcL": "影像检查(EDC 缺少)",
"ConsistencyVerification_IrcL": "影像检查(IRC 缺少)",
"ConsistencyVerification_Desc": "说明:为高效解决/处理以上全部质疑问题,麻烦您准确核实实际影像检查情况。请注意影像日期与实际检查的日期可能会不一致,部分检查(如PET -CT)可能同时存在多种模态影像。准确核实后,请回复该访视正确的影像检查情况。",
"ConsistencyVerification_Conf": "根据导入的一致性核查数据,请确认本访视以下不一致检查项信息:",
"ConsistencyVerification_Edc": "EDC 缺少:",
"ConsistencyVerification_IrcLi": "IRC 缺少:",
// ------------------------------------------------------------Reading--------------------------------------------------------------------
//ClinicalDataSetService
"ClinicalDataSet_Apply": "当前临床数据需要配置一个检查日期才能应用",
"ClinicalDataSet_DupTypeFail": "存在同类型的临床数据,操作失败",
//ClinicalQuestionService
"ClinicalQuestion_Repeat": "存在相同的问题名称!",
//ReadingClinicalDataService
"ReadingClinicalData_DupTypeFail": "存在同类型的临床数据,操作失败",
"ReadingClinicalData_Unchecked": "当前临床数据状态不是已核查状态,不允许签名!",
@@ -33,8 +60,8 @@
"ReadingImage_IsLymphNotbigger": "当前访视该淋巴结非靶病灶的短径小于上一访视的值,不能设置为显著增大。",
"ReadingImage_NotLymphNotbigger": "当前访视该非淋巴结非靶病灶的长径小于上一访视的值,不能设置为显著增大。",
"ReadingImage_Twice": "系统调用错误,提交的问题及答案重复。",
"ReadingImage_MaxQuestion": "按照《独立影像评估章程》的相关规则,当前病灶类型的病灶数量不超过{0}个。",
"ReadingImage_Maxlesion": "按照《独立影像评估章程》的相关规则,同一器官的靶病灶数量不超过{0}个,请确认",
"ReadingImage_MaxQuestion": "按照《独立影像评估章程》的相关规则,当前{0}的病灶数量不超过{1}个。",
"ReadingImage_Maxlesion": "按照《独立影像评估章程》的相关规则,同一器官的靶病灶数量不超过{0}个,请确认",
"ReadingImage_Maximum": "{0}的重复次数限制为{1},目前已重复{2}次。",
"ReadingImage_PCWGMaximum": "按照《独立影像评估章程》的相关规则,同一部位的基线病灶只需录入{0}次,请确认。",
"ReadingImage_NotNewFocus": "转换后的任务不应该存在新病灶",
@@ -67,6 +94,7 @@
"ReadingMed_NoMedQ": "当前未添加医学审核问题。请先添加医学审核问题,再进行确认。",
"ReadingMed_MedQNumDup": "影像医学审核问题显示序号不能重复。",
"ReadingMed_ParentNumSmall": "父问题的显示序号要比子问题的显示序号小,请确认。",
"ReadingMed_VisitQNotConfig": "当前标准未配置访视医学审核问题。",
"ReadingMed_GlobalQNotConfig": "当前标准启用了全局阅片,但未配置全局医学审核问题",
"ReadingMed_ArbitrateQNotConfig": "当前标准启用了仲裁阅片,但未配置仲裁医学审核问题",
"ReadingMed_TumorQNotConfig": "当前标准启用了肿瘤学阅片,但未配置肿瘤学医学审核问题",
@@ -89,6 +117,8 @@
"ReadingQuestion_ExcludeWithDependency": "显示依赖父问题和必填依赖的问题为同一个,但答案互斥,操作失败",
"ReadingQuestion_CircularDependency": "计算依赖循环了!",
//ReadingPeriodSetService
"ReadingPeriodSet_NameDup": "阅片期名称重复,操作失败",
"ReadingPeriodSet_Global": "阅片期名称不能为Global",
"ReadingPeriodSet_AlreadyAdded": "{0}已经添加过阅片期,无法设置生效",
"ReadingPeriodSet_TaskCompletedCannotRevoke": "当前标准阅片已生成任务并且阅片完成,撤销失败。",
"ReadingPeriodSet_LastVisit": "末次访视",
@@ -99,6 +129,10 @@
"ReadModule_SignedDataCannotDelete": "临床资料已签名,不允许删除",
"ReadModule_TumorExists": "当前访视存在肿瘤学阅片,请先删除肿瘤学阅片",
"ReadModule_TaskGenerated": "当前阅片已生成任务,操作失败。",
//UserWLTemplateService
"UserWLTS_MaxTemplate": "同一个用户最多只能添加10个模板",
"UserWLTS_NameRepeated": "模板名称存在重复",
"UserWLTS_ContentRepeated": "模板内容存在重复",
// ------------------------------------------------------------Allocation--------------------------------------------------------------------
//TaskAllocationRuleService
@@ -129,7 +163,7 @@
"VisitTask_DoctorConfiguration": "后台数据有错误",
"VisitTask_BackendData": "未阅片完成,或者未生效的任务不允许申请重阅",
"VisitTask_UnreadTask": "重阅已申请,或者重阅已同意状态下不允许申请重阅",
"VisitTask_NoPMRecheck": "手动生成任务不允许PM 申请影像重阅",
"VisitTask_NoPMRecheck": "附加评估标准任务不允许PM 申请影像重阅",
"VisitTask_Reapply": "PM 不允许对一致性分析任务进行申请重阅",
"VisitTask_ConsistencyAnalysis": "PM 仅仅允许对访视类型的任务申请重阅",
"VisitTask_VisitTypeRestriction": "当前为有序阅片,该受试者已有访视已申请重阅还未处理(项目组申请),暂不能继续申请重阅",
@@ -138,14 +172,14 @@
"VisitTask_LastReading": "有序阅片,只允许申请该受试者阅片人最后一次完成全局任务重阅",
"VisitTask_LastOncologistRecheck": "有序阅片,只允许申请该受试者阅片人最后一次完成肿瘤学任务重阅",
"VisitTask_LastAdjudicatorRecheck": "有序阅片,只允许申请该受试者阅片人最后一次完成裁判的任务重阅",
"VisitTask_IRGlobalRecheck": "无序阅片,仅仅允许IR 申请 全局和访视类型类别的任务进行重阅",
"VisitTask_IRGlobalRecheck": "无序阅片,仅仅允许IR 申请 全局和访视类型类别的任务进行重阅",
"VisitTask_IRReapply": "无序阅片,仅仅允许IR申请全局和访视类型类别的任务进行重阅",
"VisitTask_InvalidReapplyStatus": "当前重阅任务状态不为已申请状态,不允许进行处理,请刷新页面",
"VisitTask_ReapplyStatusConflict": "当前申请重阅任务的状态,已被其他任务重阅已影响,不允许对该状态下的任务进行重阅同意与否操作",
"VisitTask_ReReadTaskNotApplied": "仅允许同意访视类型的任务重阅",
"VisitTask_ReReadTaskAlreadyAffected": "不符合 PM申请 SPM / CPM审批 | IR申请 PM 审批 ",
"VisitTask_TaskTypeNotApproved": "当前重阅任务状态不为已申请状态,不允许进行处理,请刷新页面",
"VisitTask_NoImageReturn": "手动生成任务不允许在此入口影像退回",
"VisitTask_NoImageReturn": "附加评估标准任务不允许在此入口影像退回",
"VisitTask_NonEffectiveTaskCannotBeReturned": "仅仅允许针对生效、未完成的访视任务进行退回操作,请刷新页面数据",
"VisitTask_NoFurtherReturn": "当前访视已回退到影像上传,不允许继续回退!",
"VisitTask_ConsistencyTaskCannotBeReturned": "一致性分析的任务,不允许设置退回",
@@ -182,6 +216,8 @@
"Mail_AccountCreationReminder": "[来自展影IRC] 关于创建账户的提醒",
"Mail_AccountPasswordResetReminder": "[来自展影IRC] 关于重置账户密码的提醒",
"Mail_InvitationEmail": "[来自展影IRC] [{0}]邀请信",
//SystemMonitor
"SysMon_JsonConfig": "解析Json文件配置出现问题",
// ------------------------------------------------------------Doctor--------------------------------------------------------------------
//DoctorService
@@ -214,12 +250,12 @@
"TrialEmailN_PDProgressEmailTask": "发送PD 进展邮件中发现任务数据有问题!",
"TrialEmailN_DoubleBlindedError": "双重有序阅片 没有定义该仲裁规则处理逻辑,请联系业务和后台开发核查!",
"TrialEmailN_InCons": "项目未配置入组确认!",
"TrialEmailN_NoBaseLine": "不存在配置了入组确认的并且生成任务的基线访视",
"TrialEmailN_NoBaseLine": "不存在配置了入组确认的并且已阅的基线访视",
"TrialEmailN_IncompBase": "做入组确认的阅片人基线任务没有阅片完!",
"TrialEmailN_EmailFail": "邮件手动生成失败,请联系开发核实该场景失败原因",
"TrialEmailN_NoReader": "当前未有阅片人读完基线任务!",
"TrialEmailN_NoPDConfig": "项目未配置PD进展!",
"TrialEmailN_NoPDTasks": "不存在配置了PD进展的并且生成任务的访视",
"TrialEmailN_NoPDTasks": "不存在配置了PD进展的并且已阅的访视",
"TrialEmailN_PDNotFinished": "当前受试者最新PD访视阅片任务完成状态不符合发送条件",
"TrialEmailN_PDNoImaging": "项目配置了阅片期仲裁,但是当前受试者最新PD访视没有影像学阅片期",
"TrialEmailN_PDPhaseNotFinished": "当前受试者最新PD访视阅片期任务完成状态不符合发送条件",
@@ -228,7 +264,7 @@
"TrialEmailN_NoSendLogicDefined": "当前项目配置,未定义发送业务逻辑!",
"TrialEmailN_BlindedSequencedReading": "有序阅片配置有误(应为单重或者双重阅片),请核查!",
"TrialEmailN_UnblindedSequencedReading": "无序阅片配置有误(应为单重无仲裁对象,双重针对访视仲裁),请核查!",
"TrialEmailN_InvalidTaskTypeForEmailSending": "不应有 除访视、裁判、全局其他类型的任务进行发送邮件,请核查业务逻辑",
"TrialEmailN_InvalidTaskTypeForEmailSending": "不应有除访视、裁判、全局其他类型的任务进行发送邮件,请核查业务逻辑",
"TrialEmailN_PDLogicNotDefined": "该标准任务还未定义PD获取逻辑,联系业务和后台开发协商后补充",
"TrialEmailN_MailboxWrong": "项目发件邮箱配置有误,请核实",
"TrialEmailN_InvalidRecipient": "项目没有有效的收件人,无法发送邮件",
@@ -278,7 +314,7 @@
"CRO_InProject": "该CRO已经参与项目,不能被删除。",
//HospitalService
"Hospital_DupName": "已经存在同名的医院,请确认。",
"Hospital_SiteAdded": "当前Site已经添加到其他Hospital了",
"Hospital_SiteAdded": "当前Site已经添加到其他Hospital了",
"Hospital_HasDoctors": "该医院下已经注册有医生,不可以删除。",
//SiteService
"Site_DupName": "已经存在同名的中心,请确认。",
@@ -297,10 +333,10 @@
"User_EmailDup": "该用户类型中已存在具有相同邮箱的用户。",
"User_NewOldPwdSame": "新密码与旧密码相同。",
"User_OldPwdInvalid": "旧密码验证失败。",
"User_LegalEmail": "请输入合法的电子邮件",
"User_LegalEmail": "请输入合法的电子邮件",
"User_VerificationCodeError": "验证码错误。",
"User_VerificationCodeExpired": "验证码已经过期。",
"User_CreateFailed": "请检查邮箱地址或者联系维护人员, 邮件发送失败, 未能创建账户成功",
"User_CreateFailed": "请检查邮箱地址或者联系维护人员, 邮件发送失败, 未能创建账户成功",
"User_InvalidEmail": "请输入一个正确的邮箱。",
"User_EmailError": "邮箱错误。",
"User_InProject": "该用户已经参加项目,不能够删除。",
@@ -310,7 +346,7 @@
// ------------------------------------------------------------QC--------------------------------------------------------------------
//QCCommon
"QCCommon_CannotOperate": "CRC 已提交影像,不能进行操作。",
"QCCommon_CannotOperate": "CRC已提交影像,不能进行操作。",
"QCCommon_NoPermission": "您不是该质控任务当前领取人,没有操作权限!",
"QCCommon_CheckTimeEarly": "当前访视检查时间{0}不能早于前序访视检查时间{1},请核对检查数据是否有误",
"QCCommon_CheckTimeLate": "当前访视检查时间{0}不能晚于该访视之后的检查时间{1},请核对检查数据是否有误",
@@ -321,12 +357,12 @@
"QCOperation_CloseReason": "关闭原因: ",
"QCOperation_QuestionReplied": "当前QC质疑已经回复。",
"QCOperation_NoPermissionReply": "您没有权限回复一致性核查对话。",
"QCOperation_CannotClose": "当前访视处于申请回退状态, 不允许关闭质疑。",
"QCOperation_CannotClose": "当前访视处于申请重传状态, 不允许关闭质疑。",
"QCOperation_Reason": "原因:",
"QCOperation_CannotPass": "当前访视处于回退状态,不允许设置一致性核查通过",
"QCOperation_PassAfterClose": "请先关闭一致性核查质疑后,再设置一致性核查通过。",
"QCOperation_Cannotback": "当前访视已通过一致性核查,不允许申请回退",
"QCOperation_CRCRollback": "CRC申请回退",
"QCOperation_Cannotback": "当前访视已通过一致性核查,不允许申请重传",
"QCOperation_CRCRollback": "CRC申请重传",
"QCOperation_OtherCRC": "其他CRC已申请处理,请刷新页面",
"QCOperation_PMReject": "PM/APM拒绝一致性核查回退",
"QCOperation_NoPermission": "您不具备操作权限。",
@@ -343,7 +379,7 @@
"QCOperation_InitialAuditPassed": "初审已通过,不能继续领取",
"QCOperation_NoSingleAudit": "项目配置为单审,不满足Submmit State:已提交 或者 Audit State:待审核/审核中, 不允许领取,请刷新界面",
"QCOperation_NoSameReviewer": "复审不能和初审是同一个人",
"QCOperation_NoSecondaryAudit": "项目配置为复审,不满足提交状态:已提交 或者 审核状态:待审核/QC中, 不允许领取,请刷新界面",
"QCOperation_NoSecondaryAudit": "项目配置为复审,不满足提交状态:已提交或者审核状态:待审核/QC中, 不允许领取,请刷新界面",
"QCOperation_NoTaskAccess": "您不是该质控任务当前领取人,没有操作权限!",
"QCOperation_NoQCFunction": "项目配置影像质控为不审,不需要取消任务功能",
"QCOperation_NoTaskOwner": "当前访视影像质控任务没有当前领取人,不能释放。",
@@ -411,7 +447,7 @@
"TrialSiteSurvey_ViewAndConfirm": "查看并确认",
//TrialSiteUserSurveyService
"TrialSiteUser_Locked": "已锁定,不允许操作",
"TrialSiteUser_InconsistentInfo": "该用户在系统中账户名为:{0} ,与填写信息存在不一致项, 现将界面信息修改为与系统一致,可进行保存",
"TrialSiteUser_InconsistentInfo": "该邮件地址在系统中所对应的用户为 {0}, 电话号码是 {1}。请将所输入的信息修改为与系统一致后,再保存",
"TrialSiteUser_NoTestUserForFormal": "正式类型 、培训类型的项目 不允许加入测试用户",
"TrialSiteUser_NoFormalUserForTest": "测试项目 不允许加入正式用户",
@@ -421,6 +457,7 @@
//TrialConfigService
"TrialConfig_JudgeTaskFail": "有裁判问题未配置产生裁判阅片任务的条件,操作失败!",
"TrialConfig_StdConfigMissing": "当前标准下未配置问题",
"TrialConfig_AddEvalReq": "选择了附加评估,必须勾选附加评估类型",
"TrialConfig_SignTemplateMissing": "该操作需要电子签名确认,但未在系统中找到该场景的签名模板。",
"TrialConfig_ProjectEnded": "该项目已结束或停止,不允许修改配置。",
"TrialConfig_NoImageAuditQuestion": "当前未添加影像质控审核问题。请先添加影像质控审核问题,再进行确认。",
@@ -428,11 +465,11 @@
"TrialConfig_InvalidParentQuestionId": "父问题的显示序号要比子问题的显示序号小,请确认。",
"TrialConfig_AuditQuestionConfirmed": "影像质控审核问题已被其他人员确认,不允许再次确认。",
"TrialConfig_ProjectNotInitialized": "该项目当前状态不是初始化,不允许进行该操作。",
"TrialConfig_UnconfirmedConfiguration": "该项目的项目配置(基础配置、流程配置、加急配置) 、访视管理,有配置未确认,不能设置项目状态启动。",
"TrialConfig_UnconfirmedUNACKD": "无法变更项目状态。该项目的项目配置、访视管理中,有未确认项",
"TrialConfig_UnconfirmedConfiguration": "该项目的项目配置、访视管理尚未完成,无法将项目状态设为”启动。",
"TrialConfig_UnconfirmedUNACKD": "该项目的项目配置、访视管理中,有未确认项,无法变更项目状态。",
"TrialConfig_ProjectNotStarted": "项目没有进入启动状态,不能设置为停止或完成状态",
//TrialExternalUserService
"TrialExternalUser_Inconsistency": "该用户在系统中的用户名为:{0} 电话:{1},与填写信息存在不一致项, 请将界面信息修改为与系统一致,再进行保存",
"TrialExternalUser_Inconsistency": "该邮件地址在系统中所对应的用户为 {0}, 电话号码是 {1}。请将所输入的信息修改为与系统一致,再保存",
"TrialExternalUser_EmailTypeDuplicate": "系统已经存在与列表中填写的邮箱和用户类型相同的账户,请确认。",
"TrialExternalUser_TestUserNotAllowed": "正式类型 、培训类型的项目 不允许加入测试用户 ",
"TrialExternalUser_FormalUserNotAllowed": "测试项目 不允许加入正式用户 ",
@@ -511,7 +548,7 @@
// ------------------------------------------------------------Triggers--------------------------------------------------------------------
//AddlTrialUserTrigger
"AddlTrialUser_NoTestUser": "正式类型 、培训类型的项目 不允许加入测试用户",
"AddlTrialUser_NoFormalUser": "测试项目 不允许加入正式用户",
"AddlTrialUser_NoFormalUser": "测试项目不允许加入正式用户",
//SubjectStateTrigger
"SubjectState_CannotSetCurrentAsLastVisit": "该受试者已经有访视被设置为末次访视,不允许将当前访视设置为末次访视。",
"SubjectState_CannotSetAsLastVisitWithImage": "该受试者当前访视后有访视的影像已上传,当前访视不允许设置为末次访视。",
@@ -538,13 +575,19 @@
// ------------------------------------------------------------Helper--------------------------------------------------------------------
//FileStoreHelper
"FileStore_TemplateFileNotFound": "数据库没有找到对应的数据模板文件,请联系系统运维人员。",
"FileStore_TemplateFileStoragePathInvalid": "数据模板文件存储路径上未找对应文件,请联系系统运维人员。",
"FileStore_TemplateFileStoragePathInvalid": "文件不存在,请联系系统管理员!",
//SendEmailHelper
"SendEmail_SendFail": "邮件发送失败,您进行的操作未能成功,请检查邮箱或联系维护人员",
"SendEmail_NoRecipient": "没有收件人",
// ------------------------------------------------------------IRaCIS.Core.Domain--------------------------------------------------------------------
//Trial
"Trial_number": "编号由5位数字组成,前2位为中心编号,后3位为顺序号,请与EDC录入的编号保持一致"
"Trial_number": "编号由5位数字组成,前2位为中心编号,后3位为顺序号,请与EDC录入的编号保持一致",
// ------------------------------------------------------------IRaCIS.Core.Infrastructure--------------------------------------------------------------------
//ResponseOutput
"RO_BizObjNotExistsOrParamIncorrect": "业务对象{0}在数据库中不存在,或被他人删除,或参数查询不正确导致",
"RO_ExpectChangeButNoEffect": "期望发生更改,但数据库数据没有更改",
"RO_SaveFailed": "保存失败"
}

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