Compare commits

..

1985 Commits

Author SHA1 Message Date
he 30e71b11e8 Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is failing
2024-08-21 17:15:01 +08:00
he 2de504005e 一致性分析完全随机自动生效 2024-08-21 17:15:01 +08:00
hang 6a41c33d34 pacs 验证写反了
continuous-integration/drone/push Build is passing
2024-08-21 14:51:57 +08:00
hang 3b48dfae31 项目缓存状态逻辑,全局修改
continuous-integration/drone/push Build is passing
2024-08-21 14:37:33 +08:00
hang c7fd9a6bcb 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-08-21 13:38:21 +08:00
hang 169ef180ff 修改pacs 反馈提示+中心调研bug 2024-08-21 13:38:20 +08:00
he f33d3d474b Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-08-21 13:26:46 +08:00
he 63e1331bd1 验证签名信息 2024-08-21 13:26:43 +08:00
hang 418cc9b4b9 修改pacs 验证
continuous-integration/drone/push Build is passing
2024-08-21 12:24:30 +08:00
hang 71fb1eac6b 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-08-21 12:18:36 +08:00
hang 0804a05925 准备新缓存临时工作 2024-08-21 12:18:36 +08:00
hang de6098013d 导表签名bug
continuous-integration/drone/push Build is passing
2024-08-21 10:46:33 +08:00
hang f8cd361415 添加FusionCache
continuous-integration/drone/push Build is passing
2024-08-21 00:06:36 +08:00
hang 0b1a640c3e 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-08-20 17:58:24 +08:00
hang aa9df5838c 修改添加pacs 影像 2024-08-20 17:58:24 +08:00
he 2edacc9ff5 Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-08-20 16:03:18 +08:00
he a9a0a9d307 修改 2024-08-20 16:03:17 +08:00
hang 1937804e47 修改scp bug
continuous-integration/drone/push Build is passing
2024-08-20 15:08:03 +08:00
hang 8e8b55fa46 修改分页列表bug
continuous-integration/drone/push Build is passing
2024-08-20 14:58:35 +08:00
hang 3096671595 数组给默认参数
continuous-integration/drone/push Build is passing
2024-08-20 14:09:01 +08:00
hang a6102490c8 修改项目导表-指定项目导出
continuous-integration/drone/push Build is passing
2024-08-20 14:03:42 +08:00
hang 9e1cc1521f 修改分页参数
continuous-integration/drone/push Build is passing
2024-08-20 13:59:52 +08:00
he a579c26ada Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-08-20 13:50:04 +08:00
he 754da2c7fc 代码修改 2024-08-20 13:50:03 +08:00
hang 995bdee1f6 领域事件添加到测试环境-测试
continuous-integration/drone/push Build is passing
2024-08-20 13:14:06 +08:00
hang a70f661e86 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-08-20 11:17:50 +08:00
hang 8312bfb78b 修改scp 配置文件 2024-08-20 11:17:50 +08:00
he 7194796841 Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-08-20 10:56:00 +08:00
he c6918cca46 代码修改 2024-08-20 10:56:00 +08:00
hang be7b38c6ce 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-08-20 10:42:16 +08:00
hang a7ebd50536 修改引用包 2024-08-20 10:42:16 +08:00
he 05f9b81e04 测试发布
continuous-integration/drone/push Build is failing
2024-08-20 10:37:58 +08:00
he 1f9eb9e36b Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is failing
2024-08-20 10:35:39 +08:00
he af46eb2d65 修改 2024-08-20 10:35:37 +08:00
hang d1e54629e7 x
continuous-integration/drone/push Build is failing
2024-08-20 10:25:45 +08:00
hang 78dbe23d0e 修改实体
continuous-integration/drone/push Build is running
2024-08-20 10:25:06 +08:00
hang 4bf93d10b0 暂时屏蔽事件分发
continuous-integration/drone/push Build is failing
2024-08-20 09:39:44 +08:00
hang 00827e9975 增加领域事件定义,增加MassTransit 发布事件
continuous-integration/drone/push Build is failing
2024-08-19 23:32:53 +08:00
hang 021b32587a 修改模板
continuous-integration/drone/push Build is passing
2024-08-19 21:18:28 +08:00
hang 5ffe1675db 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-08-19 17:49:11 +08:00
hang d34eca2cb8 增加 MassTransit 移除 MediatR 2024-08-19 17:49:08 +08:00
hang 12ac7af11e 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-08-19 17:36:45 +08:00
hang a19eb2abca 修改uat scp 数据库配置 2024-08-19 17:36:33 +08:00
hang 4c9a8aadab 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-08-19 16:00:10 +08:00
hang 034058999d 清理后端医生下载接口 2024-08-19 16:00:08 +08:00
he 34ea39e764 修改
continuous-integration/drone/push Build is passing
2024-08-19 15:33:52 +08:00
he 7caf00bd75 修改
continuous-integration/drone/push Build is passing
2024-08-19 15:27:51 +08:00
he aabe604e18 Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-08-19 15:22:20 +08:00
he f2bc281e2b 修改 2024-08-19 15:22:19 +08:00
hang 4187a568f8 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-08-19 15:14:38 +08:00
hang 1611554c00 生成全局任务,没有设置VisitTaskNum 2024-08-19 15:14:36 +08:00
he 60fc8f9bce 修改
continuous-integration/drone/push Build is running
2024-08-19 15:14:23 +08:00
he 48eb20fa66 Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-08-19 14:22:19 +08:00
he 9e7bc09f84 修改 2024-08-19 14:22:18 +08:00
hang ec9e35180b crc 上传控制pacs
continuous-integration/drone/push Build is passing
2024-08-19 14:03:16 +08:00
hang c757212c07 修改上传配置文件 2024-08-19 14:03:11 +08:00
hang 8415dd2be1 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-08-19 13:56:02 +08:00
he 17d734ba11 修改
continuous-integration/drone/push Build is passing
2024-08-19 13:24:41 +08:00
he 476387b468 修改
continuous-integration/drone/push Build is passing
2024-08-19 13:19:54 +08:00
he 3a2cb138ab 修改
continuous-integration/drone/push Build is passing
2024-08-19 13:12:04 +08:00
he fa763e6341 修改
continuous-integration/drone/push Build is passing
2024-08-19 11:32:41 +08:00
he c988ca0bca Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-08-19 11:28:05 +08:00
he c257dd4171 字典修改 2024-08-19 11:28:02 +08:00
hang ff026f45fc 优化分页排序和生成模板
continuous-integration/drone/push Build is passing
2024-08-17 20:33:21 +08:00
hang cd2166f11b 数据记录审计方法调整
continuous-integration/drone/push Build is passing
2024-08-17 16:06:35 +08:00
hang 33cfacec84 发布文件 2024-08-16 16:19:58 +08:00
hang 5c2bebf96c 修改验证scp 配置文件
continuous-integration/drone/push Build is passing
2024-08-16 15:56:12 +08:00
hang ef5ae76907 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-08-16 15:42:13 +08:00
hang 7546ba412c dicom ae 提示修改 2024-08-16 15:42:12 +08:00
he 6b536f4a4f 修改IP
continuous-integration/drone/push Build is passing
2024-08-16 15:38:15 +08:00
he a540326031 Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-08-16 11:27:52 +08:00
he 45dd2e90c5 修改ip不一样提醒 2024-08-16 11:27:52 +08:00
hang e3188c0419 清理没用的存储代码
continuous-integration/drone/push Build is passing
2024-08-16 10:15:50 +08:00
hang 423fa4001b 修改T4模板
continuous-integration/drone/push Build is passing
2024-08-16 09:54:06 +08:00
hang 3701d8bcd9 精简实体准备
continuous-integration/drone/push Build is passing
2024-08-15 23:53:25 +08:00
hang 0689f731b7 测试修改配置文件拷贝是否生效
continuous-integration/drone/push Build is passing
2024-08-15 17:41:38 +08:00
hang d97025aeca 项目AE修改
continuous-integration/drone/push Build is passing
2024-08-15 17:08:03 +08:00
hang fa929ebde4 邮件配置5s超时
continuous-integration/drone/push Build is passing
2024-08-15 15:29:25 +08:00
hang 32c4d634ed 内部人员 直接pm 可以加pm
continuous-integration/drone/push Build is passing
2024-08-15 14:37:04 +08:00
hang 8d4a791a1c 修改一致性分析增加首次截止全局访视名字
continuous-integration/drone/push Build is passing
2024-08-15 14:02:09 +08:00
hang 59f376e720 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-08-15 11:36:21 +08:00
hang a5017c1571 修改导表文件名处理 2024-08-15 11:36:20 +08:00
he 8767911a16 Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-08-15 09:39:27 +08:00
he f1170244da 修改 2024-08-15 09:39:25 +08:00
hang 921c66140f 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-08-15 09:26:49 +08:00
hang 0f2a73cb3c 修改临床数据签名bug 2024-08-15 09:26:46 +08:00
he a16f567ade 修改
continuous-integration/drone/push Build is passing
2024-08-14 17:38:44 +08:00
hang 5e8b5eed9f 取字典的值的时候进行判断
continuous-integration/drone/push Build is passing
2024-08-14 16:52:03 +08:00
hang 682e40febd 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-08-14 16:36:29 +08:00
hang 568ef07438 修改提示错误 2024-08-14 16:36:29 +08:00
he cafdbaac57 修改
continuous-integration/drone/push Build is passing
2024-08-14 16:06:00 +08:00
he 505184b200 Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-08-14 15:12:21 +08:00
he 1d7e1be641 修改 2024-08-14 15:12:20 +08:00
hang 8ba22a343a 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-08-14 14:43:51 +08:00
hang ab34c947ca 后端国际化支持,日志记录的信息和返回前端的国际化不一致 2024-08-14 14:43:48 +08:00
he 062387e6a8 修改
continuous-integration/drone/push Build is running
2024-08-14 14:43:25 +08:00
he 161213f2af 修改
continuous-integration/drone/push Build is passing
2024-08-14 13:58:50 +08:00
he c1fcb4f6e3 修改
continuous-integration/drone/push Build is passing
2024-08-14 13:37:22 +08:00
he a9d81f5af5 修改
continuous-integration/drone/push Build is passing
2024-08-14 13:05:35 +08:00
he 2900f2fa7f Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-08-14 11:21:35 +08:00
he 4e44d163f3 修改 2024-08-14 11:21:33 +08:00
hang ffa6d62d3d 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-08-13 17:44:29 +08:00
hang d9ba6a7a89 一致性分析原阅片人修改 2024-08-13 17:44:27 +08:00
he 8e0105b71f Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-08-13 15:26:23 +08:00
he c45461937d 修改 2024-08-13 15:26:23 +08:00
hang b9c9088de2 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-08-13 15:24:18 +08:00
hang a6cfe19139 修改用户类型过滤 2024-08-13 15:24:17 +08:00
he 1f11de4a20 Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-08-13 14:53:11 +08:00
he 871333b9e9 修改 2024-08-13 14:53:10 +08:00
hang 47d8ec7576 清理一致性分析任务和配置
continuous-integration/drone/push Build is passing
2024-08-13 09:08:04 +08:00
hang 46a304b5a6 用户 性别可为空
continuous-integration/drone/push Build is passing
2024-08-12 17:42:54 +08:00
hang 098ade3c8a subject 软删除,导致任务列表统计数字问题
continuous-integration/drone/push Build is passing
2024-08-12 16:40:20 +08:00
hang 86489b2117 前端国际化状态修改
continuous-integration/drone/push Build is passing
2024-08-12 15:40:13 +08:00
hang 64b5206f86 项目邮件列表修改
continuous-integration/drone/push Build is passing
2024-08-12 13:35:38 +08:00
hang ea0b7f1eca 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-08-12 13:21:54 +08:00
hang 7e8dd1c6a7 影像质控备注 2024-08-12 13:21:53 +08:00
he d3b8716a66 代码修改
continuous-integration/drone/push Build is passing
2024-08-12 13:01:45 +08:00
hang af77baba60 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-08-09 17:53:40 +08:00
hang 2f1cfc3e67 修改导出逻辑 2024-08-09 17:53:40 +08:00
he 37d15736e2 Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-08-09 17:13:07 +08:00
he 5f8045c611 修改全局阅片 2024-08-09 17:13:06 +08:00
hang d62562149c 修改dicomAE 测试状态
continuous-integration/drone/push Build is passing
2024-08-09 15:24:40 +08:00
hang 63e2ca07b5 修改dicomAE 测试
continuous-integration/drone/push Build is passing
2024-08-09 15:01:22 +08:00
he ed94423f32 Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-08-09 14:07:57 +08:00
he e705e12656 代码修改 2024-08-09 14:07:56 +08:00
hang 035ce2ae4e 修改邮件
continuous-integration/drone/push Build is pending
2024-08-09 14:07:29 +08:00
hang a1778d836b 设置连接超时时间
continuous-integration/drone/push Build is pending
2024-08-09 13:46:08 +08:00
hang cebcf908f9 修改裁判标价判定
continuous-integration/drone/push Build is passing
2024-08-09 13:12:05 +08:00
hang 202a3c26d1 修改取消分配验证生效的是否开始阅片
continuous-integration/drone/push Build is passing
2024-08-08 14:53:29 +08:00
hang fbbda8c0d1 是否可以取消分配bug
continuous-integration/drone/push Build is passing
2024-08-08 14:49:06 +08:00
hang 7954bdeca8 脑转移 未分配的退回也失效
continuous-integration/drone/push Build is passing
2024-08-08 14:39:53 +08:00
hang d8a0c80ca4 修改模板删除,导表显示名称国际哈
continuous-integration/drone/push Build is passing
2024-08-08 13:49:10 +08:00
hang 100faa3b9f 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-08-08 13:24:18 +08:00
hang 7894a4991c 修改全局导表 2024-08-08 13:24:17 +08:00
he 0405ba4b13 Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-08-08 10:31:15 +08:00
he ca6e96929f 修改开始阅片时间 2024-08-08 10:31:14 +08:00
hang b832a66abf 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-08-08 10:14:36 +08:00
hang 168c7447bb 修改bug 2024-08-08 10:14:36 +08:00
he 891c442da4 Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-08-07 17:26:03 +08:00
he 74098641f6 休息时间改到配置文件 2024-08-07 17:25:58 +08:00
hang eedfa2add8 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-08-07 16:35:53 +08:00
hang 2838f09268 导表修改 2024-08-07 16:35:52 +08:00
hang ab800d09ca 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-08-07 15:37:52 +08:00
hang 44e4fe3a29 修改中心调研bug 2024-08-07 15:02:20 +08:00
hang d279bad2d0 用户反馈增加查询条件
continuous-integration/drone/push Build is passing
2024-08-07 13:23:50 +08:00
hang a5737073c4 邮件反馈类型错误
continuous-integration/drone/push Build is passing
2024-08-07 10:41:46 +08:00
hang 4a82812b4e 修改导表
continuous-integration/drone/push Build is passing
2024-08-07 10:37:06 +08:00
hang 8ec67d72f1 打开系统反馈
continuous-integration/drone/push Build is passing
2024-08-06 18:04:14 +08:00
hang 405db77dea 修改邮件查询
continuous-integration/drone/push Build is passing
2024-08-06 17:41:40 +08:00
hang 8b8ed1fee3 系统邮件配置修改
continuous-integration/drone/push Build is passing
2024-08-06 16:39:11 +08:00
hang c1e496530d excel 增加英文名字字段
continuous-integration/drone/push Build is passing
2024-08-06 16:07:47 +08:00
hang a43ba04bf3 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-08-06 14:38:31 +08:00
hang 7b78e4b399 20240806 导表修改代码 2024-08-06 14:38:30 +08:00
hang e92ea3ea0c lili 生成任务bug
continuous-integration/drone/push Build is passing
2024-08-06 12:24:19 +08:00
hang 2bb4630351 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-08-05 17:59:27 +08:00
hang ef63c19c93 完成邮件基本逻辑 2024-08-05 17:59:26 +08:00
he cda134e92c 修改
continuous-integration/drone/push Build is passing
2024-08-05 17:09:05 +08:00
he 75d162b353 修改
continuous-integration/drone/push Build is running
2024-08-05 17:08:39 +08:00
he 9cbfb2c7e4 修改
continuous-integration/drone/push Build is running
2024-08-05 17:08:06 +08:00
he a47e20ff74 修改
continuous-integration/drone/push Build is passing
2024-08-05 16:54:59 +08:00
he 36a63d7628 修改
continuous-integration/drone/push Build is passing
2024-08-05 16:20:30 +08:00
he 2217ae0353 修改
continuous-integration/drone/push Build is passing
2024-08-05 15:41:39 +08:00
he 31a444508b Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-08-05 15:35:03 +08:00
he 37c898ea0c 修改 2024-08-05 15:35:02 +08:00
hang 03c2a67fe4 一致性分析任务生成bug
continuous-integration/drone/push Build is passing
2024-08-05 14:55:13 +08:00
hang 795caf19e7 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-08-05 14:41:30 +08:00
hang 99ef28be99 加密方法准备测试 2024-08-05 14:41:30 +08:00
he 97a5eda8f8 一致性分析修改
continuous-integration/drone/push Build is passing
2024-08-05 13:51:20 +08:00
he 2d8cb0c818 Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-08-05 13:32:17 +08:00
he 2d1325ca52 代码修改 2024-08-05 13:32:13 +08:00
hang 9f5b8e9858 响应压缩修改压缩级别
continuous-integration/drone/push Build is passing
2024-08-05 10:41:42 +08:00
hang 4eaf070243 撤回 dbcontext 连接池
continuous-integration/drone/push Build is passing
2024-08-02 17:44:45 +08:00
hang c353ae645b dbcontext 上下文池,提高性能测试
continuous-integration/drone/push Build is passing
2024-08-02 17:03:23 +08:00
hang e1038c27f6 修改审核时间修改 2024-08-02 15:41:58 +08:00
hang 994a770fef 用户反馈增加项目过滤
continuous-integration/drone/push Build is passing
2024-08-02 13:58:54 +08:00
hang 1875b56b37 修改用户反馈
continuous-integration/drone/push Build is passing
2024-08-02 13:50:16 +08:00
hang 99eef31202 用户反馈增加数字
continuous-integration/drone/push Build is passing
2024-08-02 13:31:57 +08:00
hang 826f8a670d 邮件模板修改调整
continuous-integration/drone/push Build is passing
2024-08-02 13:25:44 +08:00
hang cb53dbefcf CRC 上传导表
continuous-integration/drone/push Build is passing
2024-08-02 11:48:34 +08:00
hang 9b4e29a812 x
continuous-integration/drone/push Build is passing
2024-08-02 11:28:58 +08:00
hang fa9c9de12c 质控增加字段
continuous-integration/drone/push Build is running
2024-08-02 11:27:51 +08:00
hang c98db93ecb 一致性分析 全局任务 SouceReadModuleId 处理
continuous-integration/drone/push Build is passing
2024-08-02 10:30:33 +08:00
hang eb1dcc9f0a 增加反馈字段
continuous-integration/drone/push Build is passing
2024-08-02 09:54:31 +08:00
hang 63c6c2f67b QCAgreeUpload 才允许修改 2024-08-01 17:24:18 +08:00
hang 62f37a4bb4 crc 重传允许修改部位编辑
continuous-integration/drone/push Build is passing
2024-08-01 17:05:28 +08:00
hang 02a8289ad4 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-08-01 16:57:27 +08:00
hang 7c5f3323de 增加下载信息的接口 2024-08-01 16:57:25 +08:00
he 2149bfa782 Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-08-01 16:12:49 +08:00
he 3561df7574 代码修改 2024-08-01 16:12:48 +08:00
hang 9cd4e272c7 遗漏await
continuous-integration/drone/push Build is passing
2024-08-01 13:36:46 +08:00
hang 7069a17d8e 修改参数必传
continuous-integration/drone/push Build is passing
2024-08-01 13:31:53 +08:00
hang 3e5d0b650d 截图给默认值
continuous-integration/drone/push Build is passing
2024-08-01 13:17:23 +08:00
hang a6b8db30c3 scp 传输增加备注
continuous-integration/drone/push Build is passing
2024-08-01 11:48:24 +08:00
hang 613f2d8c6c 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-08-01 10:50:12 +08:00
hang b8e0c74d45 用户反馈增加字段 2024-08-01 10:50:11 +08:00
he 13acd950ad 代码修改
continuous-integration/drone/push Build is failing
2024-08-01 10:39:21 +08:00
he 8ec86017f0 Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-08-01 10:35:59 +08:00
he ee43a5dc9d 代码修改 2024-08-01 10:35:57 +08:00
hang e3ee1a42fb 修改dicom 获取tag值 patientId为空
continuous-integration/drone/push Build is passing
2024-08-01 10:12:09 +08:00
hang 9fa24a35ef 记录传输日志
continuous-integration/drone/push Build is passing
2024-07-31 17:42:40 +08:00
hang 0e631e6f29 传递logger
continuous-integration/drone/push Build is passing
2024-07-31 17:36:46 +08:00
hang 622d598392 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-07-31 17:35:03 +08:00
hang 3ab411578e 日志写入到文件 2024-07-31 17:35:03 +08:00
he d1e21a9f4b Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-07-31 16:49:24 +08:00
he cd2ebe700b 代码修改 2024-07-31 16:49:23 +08:00
hang 7f5a3bffd1 完成机构名称默认值
continuous-integration/drone/push Build is passing
2024-07-31 16:11:55 +08:00
hang cdbe74f1d9 根据配置设置用户的机构名称
continuous-integration/drone/push Build is passing
2024-07-31 15:51:38 +08:00
hang de01da975e CalledAE 名字错误
continuous-integration/drone/push Build is passing
2024-07-31 15:13:00 +08:00
hang aae243e36e 项目dicom ae 修改
continuous-integration/drone/push Build is passing
2024-07-31 15:08:28 +08:00
hang d3f7c199c7 防止前端重复上传
continuous-integration/drone/push Build is passing
2024-07-31 14:05:38 +08:00
hang ca41fac53d 有问题,撤回修改
continuous-integration/drone/push Build is passing
2024-07-31 13:44:50 +08:00
hang 6ccbfc466f 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 running
2024-07-31 13:42:50 +08:00
hang 81aa7fb8ef 上传再次增加判断 2024-07-31 13:42:49 +08:00
he da102dfed2 Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-07-31 10:40:44 +08:00
he 63c225fb9b 代码修改 2024-07-31 10:40:40 +08:00
hang f0f6f0bd23 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-07-31 10:01:48 +08:00
hang 52b60338c3 修改隐藏邮箱的算法 2024-07-31 10:01:48 +08:00
hang d3e7b3a8d8 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-07-31 09:35:34 +08:00
hang 48cba94995 邮件称呼修改 2024-07-31 09:35:33 +08:00
hang a2ca3a8245 修改邮件
continuous-integration/drone/push Build is passing
2024-07-31 09:25:54 +08:00
hang d602238f82 hangfire 任务调度隐患排除
continuous-integration/drone/push Build is passing
2024-07-30 16:03:35 +08:00
hang 5f141212f4 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-07-30 15:12:12 +08:00
hang 8b05c01e42 通过配置api 接口,自动将Result 进行加密返回,同时code返回12标注 目前使用base64 2024-07-30 15:12:11 +08:00
he 307ed2ca7f Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-07-30 14:15:51 +08:00
he e9a90a4c3a 修改 2024-07-30 14:15:50 +08:00
hang a9407c3290 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-07-30 11:50:34 +08:00
hang f9fc79d3aa 用户反馈接口初步完成 2024-07-30 11:50:33 +08:00
he ee4b4a62ac 修改
continuous-integration/drone/push Build is passing
2024-07-30 11:30:16 +08:00
he 7d7027a753 Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-07-30 11:19:19 +08:00
he e36dd04d3e 修改 2024-07-30 11:19:17 +08:00
hang fd9af47606 验证码修改
continuous-integration/drone/push Build is passing
2024-07-30 09:51:48 +08:00
hang 633507d4cd k8s docker 挂载配置文件热更新问题解决
continuous-integration/drone/push Build is passing
2024-07-29 17:59:01 +08:00
hang 8c94e17c14 删除提示语
continuous-integration/drone/push Build is passing
2024-07-29 16:33:35 +08:00
hang 942f3adfe0 修改scp 上传bug
continuous-integration/drone/push Build is running
2024-07-29 16:33:00 +08:00
hang 3b92aaf61c 修改国际化 和 scp 缩略图日志
continuous-integration/drone/push Build is passing
2024-07-29 16:24:34 +08:00
he 4f5d89732d 代码提交
continuous-integration/drone/push Build is passing
2024-07-29 15:13:15 +08:00
he 55bb70179c 代码修改
continuous-integration/drone/push Build is passing
2024-07-29 14:19:03 +08:00
he 6c9c8ee5dc 修改
continuous-integration/drone/push Build is passing
2024-07-29 14:00:40 +08:00
hang 73e9e3239a 修改us配置文件
continuous-integration/drone/push Build is passing
2024-07-29 11:47:32 +08:00
he 8d67a3be5f Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-07-29 10:43:26 +08:00
he 5175c857ec 代码提交 2024-07-29 10:43:24 +08:00
hang d2a9f478e4 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-07-26 15:26:29 +08:00
hang 9f32b92af3 邮件上线到系统配置 2024-07-26 15:26:28 +08:00
he 880525b015 Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-07-26 10:16:11 +08:00
he 0536a57075 代码修改 2024-07-26 10:16:08 +08:00
hang abb3b02e74 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-07-26 09:04:34 +08:00
hang cad7132b0a 通过相对路径获取授权签名 2024-07-26 09:04:34 +08:00
hang c6e5d31244 重阅自动失效,错误消息位置改变
continuous-integration/drone/push Build is passing
2024-07-25 17:05:52 +08:00
hang b0302d0e6d 同意重阅,成功,但是给出自动失效的提示 2024-07-25 17:05:49 +08:00
hang 9a958276db 修改项目部位bug
continuous-integration/drone/push Build is passing
2024-07-25 16:41:42 +08:00
hang 44bcdf7973 系统邮件上线到配置预修改
continuous-integration/drone/push Build is passing
2024-07-25 14:46:13 +08:00
hang 6311884a5c dicom AE 浏览器推荐 发布记录 国际化
continuous-integration/drone/push Build is passing
2024-07-25 12:22:56 +08:00
hang de5fc7c277 修改,无序重阅 和审批
continuous-integration/drone/push Build is passing
2024-07-25 10:12:09 +08:00
he 3414c50975 Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-07-24 16:05:29 +08:00
he 39736c3ce4 修改 2024-07-24 16:05:27 +08:00
hang 14fb158e13 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-07-24 15:05:09 +08:00
hang 81f55a9e07 医学审核列表,查询优化 2024-07-24 15:05:07 +08:00
he 94e942e344 代码修改
continuous-integration/drone/push Build is passing
2024-07-24 14:46:49 +08:00
he 95fbe6085a Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-07-24 13:33:49 +08:00
he 4f4dda7a09 格式化 2024-07-24 13:33:48 +08:00
hang 8021d6a860 防止生成sql生成GETDATE() 时区导致的问题
continuous-integration/drone/push Build is passing
2024-07-24 09:54:43 +08:00
hang 3cdfd3a771 修改dicom ae 接口
continuous-integration/drone/push Build is passing
2024-07-23 15:35:49 +08:00
hang 76792a127f 整体肿瘤评估导表修改
continuous-integration/drone/push Build is passing
2024-07-23 14:58:40 +08:00
hang fc36cbcb75 修改Dicom 推送
continuous-integration/drone/push Build is passing
2024-07-23 10:35:38 +08:00
hang 3fab377454 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-07-22 15:41:17 +08:00
hang 5246c10e32 处理检查删除、添加、维护绑定关系 2024-07-22 15:41:16 +08:00
he 63530b7847 Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-07-22 15:20:21 +08:00
he 99be08dc20 修改 2024-07-22 15:20:18 +08:00
hang 9898673dbf 修改study查询bug
continuous-integration/drone/push Build is passing
2024-07-22 14:04:56 +08:00
hang d7f0fdd0e7 oss 下载走内网地址
continuous-integration/drone/push Build is passing
2024-07-19 16:12:59 +08:00
hang 795cb0aba2 修改非dicom 监控上传 2024-07-19 13:17:54 +08:00
hang 32ba46206b 增加ACC number
continuous-integration/drone/push Build is passing
2024-07-18 15:18:40 +08:00
hang 22c9386101 修改测试AE
continuous-integration/drone/push Build is passing
2024-07-18 10:55:47 +08:00
hang ff4136e02d 修改AE 配置文件
continuous-integration/drone/push Build is passing
2024-07-18 10:32:27 +08:00
hang 04cccf1174 Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-07-18 10:10:13 +08:00
he ab9203eef0 Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-07-18 10:05:29 +08:00
he 924ba90384 添加高亮 2024-07-18 10:05:26 +08:00
hang 353b2c99cb url 解码下载修改 2024-07-17 18:00:39 +08:00
hang 0b3542e9c3 自动计算患者年龄
continuous-integration/drone/push Build is passing
2024-07-17 14:52:53 +08:00
hang 425bd7bf9a 修改查询列表
continuous-integration/drone/push Build is passing
2024-07-17 14:44:37 +08:00
hang e0aa9fb1d9 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-07-17 14:20:38 +08:00
hang c65a484b13 增加患者信息查询,和Modality查询 2024-07-17 14:20:36 +08:00
he d9fc5e3646 添加上一次任务的答案
continuous-integration/drone/push Build is passing
2024-07-17 13:37:01 +08:00
he d72f3e89a2 代码修改
continuous-integration/drone/push Build is passing
2024-07-17 11:06:47 +08:00
he 85a303171c 修改
continuous-integration/drone/push Build is passing
2024-07-17 10:52:54 +08:00
he 4026eca656 修改 2024-07-17 10:52:20 +08:00
he 74aec46a94 返回值修改 2024-07-17 10:52:02 +08:00
he 49e21a6342 加返回参数 2024-07-17 10:51:58 +08:00
he 0e0dd0c7d3 跳过阅片修改 2024-07-17 10:51:26 +08:00
hang 8fedcdaf00 检查列表增加查询 区分是否来自Pacs
continuous-integration/drone/push Build is passing
2024-07-16 17:30:01 +08:00
hang 9924375f82 下拉框增加参数
continuous-integration/drone/push Build is passing
2024-07-16 16:13:57 +08:00
hang a60661aaa5 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-07-16 16:09:23 +08:00
hang 5041ebd58b 增加项目Id 查询条件 2024-07-16 16:09:22 +08:00
he 594574c846 添加基线的长径短径
continuous-integration/drone/push Build is passing
2024-07-16 15:43:04 +08:00
hang 6e7545be65 返回配置字段
continuous-integration/drone/push Build is passing
2024-07-16 15:28:04 +08:00
hang b77d2d9160 减少压缩包访视层级,同时处理单个非dicom 特殊情况压缩包处理
continuous-integration/drone/push Build is passing
2024-07-15 17:12:01 +08:00
hang 0c94ef86b0 增加打包下载验证
continuous-integration/drone/push Build is passing
2024-07-15 16:27:06 +08:00
hang e0c6e9aabf 修改ivus影像下载功能
continuous-integration/drone/push Build is passing
2024-07-15 15:52:52 +08:00
hang 814f1e576a 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-07-12 13:52:46 +08:00
hang d62d2770f4 修改scp 配置文件 2024-07-12 13:52:45 +08:00
he cec678a24b 提示语修改
continuous-integration/drone/push Build is failing
2024-07-12 10:31:53 +08:00
he 7baf301785 配置文件修改 2024-07-12 10:31:51 +08:00
he ded0dbaa2d 阅片时间修改到配置文件 2024-07-12 10:31:47 +08:00
hang 8c16bc2ac5 修改管道名字
continuous-integration/drone/push Build is passing
2024-07-11 17:01:50 +08:00
hang 0827ede4b6 增加irc-scp发布配置 2024-07-11 16:59:58 +08:00
hang 239e0b84c2 study net8 自动打包配置 2024-07-11 16:12:19 +08:00
hang 73b77a477a 修改发布文件 2024-07-11 15:29:40 +08:00
hang c032c42321 增加用户机构默认值修改
continuous-integration/drone/push Build is passing
2024-07-11 10:16:02 +08:00
hang cb7140ad38 修改国际化查询
continuous-integration/drone/push Build is passing
2024-07-11 09:20:15 +08:00
hang 29ea2a0ef1 增加国际化
continuous-integration/drone/push Build is passing
2024-07-10 17:42:39 +08:00
hang 46af71e3df 增加uat irc 自动打包成镜像
continuous-integration/drone/push Build is passing
2024-07-10 16:47:25 +08:00
hang 67819fc85d 组件一致性分析筛选条件修改
continuous-integration/drone/push Build is passing
2024-07-10 14:00:04 +08:00
hang 4b15bcdc55 打开后端正式环境验证
continuous-integration/drone/push Build is passing
2024-07-10 10:48:20 +08:00
hang 0ba439e5bd 修改发件箱配置
continuous-integration/drone/push Build is passing
2024-07-10 09:10:10 +08:00
hang c25c855b46 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 running
2024-07-10 09:08:42 +08:00
hang 003b227f7d 修改发送邮件提示 2024-07-10 09:08:41 +08:00
he 461976f6d3 Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-07-09 17:21:17 +08:00
he 7636c82b11 代码修改 2024-07-09 17:21:16 +08:00
hang d1e4863e01 修改签名bug
continuous-integration/drone/push Build is passing
2024-07-09 17:03:20 +08:00
hang d483aca73b 增加映射
continuous-integration/drone/push Build is passing
2024-07-09 16:27:07 +08:00
hang cf45169de2 修改返回
continuous-integration/drone/push Build is passing
2024-07-09 16:16:10 +08:00
hang 0075c18cd8 修改返回的信息
continuous-integration/drone/push Build is passing
2024-07-09 14:56:47 +08:00
hang e55bc5fe7a 增加查询映射
continuous-integration/drone/push Build is passing
2024-07-09 14:25:34 +08:00
hang e6bd7ad0ea 修改pacs 配置
continuous-integration/drone/push Build is passing
2024-07-09 14:20:00 +08:00
hang a98bc37045 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-07-09 13:14:13 +08:00
hang 06209a945d 修改发送邮件配置 2024-07-09 13:13:50 +08:00
hang d5c628d916 修改发件箱 2024-07-09 13:13:46 +08:00
hang 905fdd9861 修改美国irc uat 数据库名称 2024-07-09 13:13:41 +08:00
he 3ff95ede2c Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-07-08 16:21:59 +08:00
he f9734dc5cc 修改 2024-07-08 16:21:58 +08:00
hang c32ec2f132 美国验证增加配置文件
continuous-integration/drone/push Build is passing
2024-07-08 11:38:47 +08:00
hang 28c3adaf64 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-07-05 10:24:11 +08:00
hang 6435746660 修改配置文件 2024-07-05 10:24:11 +08:00
he c6531e9249 代码修改
continuous-integration/drone/push Build is passing
2024-07-05 10:00:35 +08:00
hang b1be0e2a98 修改配置文件 2024-07-05 09:19:00 +08:00
hang 31d22e2b4f 增加美国生产环境配置文件 2024-07-05 09:18:56 +08:00
he 1e5f01fdeb Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-07-05 09:09:08 +08:00
he 213787bbcf 代码修改 2024-07-05 09:08:54 +08:00
hang 933a43f4ea 返回推荐的版本
continuous-integration/drone/push Build is passing
2024-07-04 17:24:29 +08:00
hang 6264d105ab 浏览器推荐修改
continuous-integration/drone/push Build is passing
2024-07-04 17:22:54 +08:00
hang 0c7495870b pacs 直连 增加修改
continuous-integration/drone/push Build is passing
2024-07-04 13:12:10 +08:00
hang a615b5cefd site dicomAE 提交
continuous-integration/drone/push Build is passing
2024-07-03 14:45:24 +08:00
hang 9f66a932fc 增加pacs 直连 scp项目
continuous-integration/drone/push Build is passing
2024-07-03 14:00:29 +08:00
hang d094f22ab2 pacs 直连修改
continuous-integration/drone/push Build is passing
2024-07-02 17:20:32 +08:00
hang 5cc41b3b0f 修改一致性核查颜色 2024-07-02 17:20:05 +08:00
hang 27b99eb3be 增加接口返回路径信息
continuous-integration/drone/push Build is passing
2024-07-02 11:08:11 +08:00
hang e324850811 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-07-02 09:45:19 +08:00
hang 7c3b0e9e72 浏览器版本推荐 --迁移 2024-07-02 09:45:18 +08:00
he 709529da87 关键序列修改
continuous-integration/drone/push Build is passing
2024-07-02 09:36:15 +08:00
hang 2354ee9174 修改一致性分析和临床数据
continuous-integration/drone/push Build is passing
2024-07-01 15:40:13 +08:00
hang f158f092ce 修改一致性分析 以及项目部位编辑
continuous-integration/drone/push Build is passing
2024-07-01 14:54:15 +08:00
he f446d400a1 修改
continuous-integration/drone/push Build is passing
2024-07-01 13:46:54 +08:00
he 5b0026f30f 修改
continuous-integration/drone/push Build is passing
2024-07-01 13:41:55 +08:00
he 1efd41e7ac Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-07-01 11:50:24 +08:00
he 76c6e8442a 修改 2024-07-01 11:50:23 +08:00
hang f92ace1894 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-06-28 11:30:22 +08:00
hang 4585b7b732 一致性分析筛选+ 退回和重阅增加APM角色 2024-06-28 11:30:20 +08:00
he ae2907ad5d 修改
continuous-integration/drone/push Build is passing
2024-06-28 10:19:34 +08:00
he 1a3ad4f602 修改
continuous-integration/drone/push Build is passing
2024-06-28 09:35:54 +08:00
he 9c95928add Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-06-27 16:02:31 +08:00
he 10380994a4 修改 2024-06-27 16:02:29 +08:00
hang 49993edb37 修改国际化查询
continuous-integration/drone/push Build is passing
2024-06-27 15:38:00 +08:00
hang 3efc40e9ae 修改发布版本降序排
continuous-integration/drone/push Build is passing
2024-06-27 15:33:18 +08:00
hang 4922ffa5c3 国际化增加 版本字段展示
continuous-integration/drone/push Build is passing
2024-06-27 15:31:03 +08:00
hang c7935ee90f 修改限制当前版本
continuous-integration/drone/push Build is passing
2024-06-27 15:25:48 +08:00
hang a91a706e0b 修改数据库模型
continuous-integration/drone/push Build is passing
2024-06-27 15:17:32 +08:00
hang a16fbc187a 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-06-27 14:34:09 +08:00
hang 4a314f2070 修改BM 统计 2024-06-27 14:34:09 +08:00
he 27d9104607 修改
continuous-integration/drone/push Build is passing
2024-06-27 14:25:20 +08:00
he acad258319 Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-06-27 14:21:33 +08:00
he ba8f22f260 修改 2024-06-27 14:21:32 +08:00
hang f524aa5e57 发布测试环境对接
continuous-integration/drone/push Build is passing
2024-06-27 13:18:41 +08:00
he 5c9664ec7d Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-06-26 09:10:21 +08:00
he be27376dde 添加 Lugano 2014 Without PET 2024-06-26 09:10:20 +08:00
hang 452535b561 中心调研修改
continuous-integration/drone/push Build is passing
2024-06-25 10:52:16 +08:00
hang 9048963ea5 修改字段名
continuous-integration/drone/push Build is passing
2024-06-25 10:28:18 +08:00
hang d3ab051a39 spm cpm 返回增加字段
continuous-integration/drone/push Build is passing
2024-06-25 10:26:30 +08:00
hang 73edbe8fd3 删掉邮件日志组件
continuous-integration/drone/push Build is passing
2024-06-25 09:17:48 +08:00
hang de70f68640 发送邮件版本退回
continuous-integration/drone/push Build is passing
2024-06-24 17:46:37 +08:00
hang 97b97a164d 修改发送邮件版本
continuous-integration/drone/push Build is passing
2024-06-24 17:37:35 +08:00
hang fb87f4d06a 版本退回
continuous-integration/drone/push Build is passing
2024-06-24 17:26:20 +08:00
hang 20092d6757 升级邮件发送包
continuous-integration/drone/push Build is passing
2024-06-24 17:21:15 +08:00
hang 96c4165cda 修改 界面控制bug
continuous-integration/drone/push Build is passing
2024-06-24 16:54:11 +08:00
hang a4226d4e2f 修改筛选条件
continuous-integration/drone/push Build is passing
2024-06-24 16:28:20 +08:00
hang f97565d9d8 医生入组,没有spm修改逻辑
continuous-integration/drone/push Build is passing
2024-06-24 16:07:41 +08:00
hang ab84e66fe4 国际化修改,增加批量更新接口
continuous-integration/drone/push Build is passing
2024-06-24 10:51:23 +08:00
hang 1f9d29e005 版本历史功能增加
continuous-integration/drone/push Build is passing
2024-06-24 10:13:03 +08:00
hang 8521b0c28c 增加清理跟踪的方法
continuous-integration/drone/push Build is passing
2024-06-20 17:50:17 +08:00
hang 26a62426f0 修改发布方式
continuous-integration/drone/push Build is passing
2024-06-20 15:08:47 +08:00
hang 1246413e30 修改nonedicom过滤
continuous-integration/drone/push Build is passing
2024-06-19 19:38:16 +08:00
hang f50b5819c0 修改过滤规则
continuous-integration/drone/push Build is passing
2024-06-19 18:40:32 +08:00
hang 6db8d61b7c 修改 非dicom 检查过滤
continuous-integration/drone/push Build is passing
2024-06-19 17:57:40 +08:00
hang 58250fe993 非dicom zip过滤
continuous-integration/drone/push Build is passing
2024-06-19 16:57:08 +08:00
hang 6cae7a1ae4 修改非dicom 文件上传 增加文件类型
continuous-integration/drone/push Build is passing
2024-06-19 15:17:55 +08:00
hang 73541efbf4 uat 截图修改配置文件
continuous-integration/drone/push Build is passing
2024-06-19 14:17:35 +08:00
hang f4bd891deb 记录最新登录时间
continuous-integration/drone/push Build is passing
2024-06-19 13:48:59 +08:00
hang a9831657cc 修改Uat IRC 配置
continuous-integration/drone/push Build is passing
2024-06-19 13:11:20 +08:00
hang 500a9fbaca 修改配置文件
continuous-integration/drone/push Build is passing
2024-06-19 09:08:17 +08:00
hang 5f11c3a602 修改site 启用时间逻辑
continuous-integration/drone/push Build is passing
2024-06-18 19:36:57 +08:00
hang 7680e90d65 修改添加trialSite逻辑
continuous-integration/drone/push Build is passing
2024-06-18 19:28:26 +08:00
hang 06a57cd056 修改中心调样cpm bug
continuous-integration/drone/push Build is passing
2024-06-18 15:09:52 +08:00
hang 7626d17540 记录邮件异常
continuous-integration/drone/push Build is passing
2024-06-18 13:28:40 +08:00
hang 344b92c427 修改配置文件
continuous-integration/drone/push Build is passing
2024-06-18 13:16:26 +08:00
hang 4719177009 时间环境配置修改
continuous-integration/drone/push Build is passing
2024-06-18 11:53:17 +08:00
hang c1461633ce 修改中心调研国际化
continuous-integration/drone/push Build is passing
2024-06-18 11:10:18 +08:00
hang 6be7aa1ad9 修改默认值
continuous-integration/drone/push Build is passing
2024-06-18 10:28:10 +08:00
hang 4da7c2f960 irc minio 修改配置文件
continuous-integration/drone/push Build is passing
2024-06-17 11:48:09 +08:00
hang 47a45df610 修改mfa 配置
continuous-integration/drone/push Build is passing
2024-06-17 10:38:42 +08:00
hang 1a44e48b2d 删除备注
continuous-integration/drone/push Build is passing
2024-06-17 08:59:53 +08:00
hang c566a703eb 修改trialSitte Id 问题
continuous-integration/drone/push Build is passing
2024-06-14 16:04:12 +08:00
hang 001c248cb8 中心调研返回项目modality
continuous-integration/drone/push Build is passing
2024-06-14 15:35:08 +08:00
hang 654462fe6b 插入字符串efbug
continuous-integration/drone/push Build is passing
2024-06-14 14:34:18 +08:00
hang ab6642ce33 过滤检查
continuous-integration/drone/push Build is passing
2024-06-14 14:29:55 +08:00
hang 946386ad43 检查技术修改
continuous-integration/drone/push Build is passing
2024-06-14 13:46:30 +08:00
hang cf9c79a928 过滤失效的任务
continuous-integration/drone/push Build is passing
2024-06-14 13:28:42 +08:00
hang 493e4e8dca 枚举不能识别
continuous-integration/drone/push Build is passing
2024-06-14 11:05:07 +08:00
hang ecbe8434f3 修改编译问题
continuous-integration/drone/push Build is passing
2024-06-14 10:55:52 +08:00
he 644fe1bd3c Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is failing
2024-06-14 10:52:02 +08:00
he 870fca2e93 修改 2024-06-14 10:52:01 +08:00
hang 6207fb5006 修改MFA 接口
continuous-integration/drone/push Build is failing
2024-06-14 10:38:58 +08:00
hang ae913d8213 修改中心调研国际化
continuous-integration/drone/push Build is passing
2024-06-14 09:18:06 +08:00
hang ce969822a0 字段名错误
continuous-integration/drone/push Build is passing
2024-06-13 17:42:49 +08:00
hang 4fc311d4a5 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 running
2024-06-13 17:42:05 +08:00
hang 2b424ff45c site 调研增加配置字段 2024-06-13 17:42:04 +08:00
he e5d9cfc50e Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-06-13 17:35:19 +08:00
he ac3552818b 修改 2024-06-13 17:35:18 +08:00
hang c004741f95 上传下载 改为不为空
continuous-integration/drone/push Build is passing
2024-06-13 17:08:09 +08:00
hang 2bdc0c7704 修改siteName 国际化
continuous-integration/drone/push Build is passing
2024-06-13 14:57:38 +08:00
hang 35d90d56dd 修改过滤
continuous-integration/drone/push Build is passing
2024-06-13 09:25:26 +08:00
hang f14525ea95 减少赋值字段
continuous-integration/drone/push Build is failing
2024-06-12 17:24:51 +08:00
hang c2350f1418 影像筛选逻辑增加
continuous-integration/drone/push Build is passing
2024-06-12 17:10:22 +08:00
hang 4b8b02fa55 重构检查列表
continuous-integration/drone/push Build is passing
2024-06-12 16:14:14 +08:00
hang 62102b8b03 重构检查列表
continuous-integration/drone/push Build is failing
2024-06-12 16:10:49 +08:00
hang 0655318d2d 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-06-12 15:44:00 +08:00
hang 0bd2a10091 修改受试者无序阅片 2024-06-12 15:44:00 +08:00
he ce11788878 修改
continuous-integration/drone/push Build is passing
2024-06-12 15:32:17 +08:00
he 0cb74296c3 修改
continuous-integration/drone/push Build is passing
2024-06-12 15:01:23 +08:00
hang def08b72ca 修改返回列表
continuous-integration/drone/push Build is passing
2024-06-12 14:22:01 +08:00
hang 1ef8d2913b 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 failing
2024-06-12 14:11:12 +08:00
hang 7e18b1287e 优化代码 2024-06-12 14:11:11 +08:00
he fdcb6ad12f 修改
continuous-integration/drone/push Build is failing
2024-06-12 14:08:18 +08:00
hang 988bf0e92c 修改任务查询
continuous-integration/drone/push Build is passing
2024-06-12 14:03:38 +08:00
he f6612286d9 Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-06-12 13:45:18 +08:00
he c21845c60d 修改 2024-06-12 13:45:17 +08:00
hang 867ef0ef97 任务名称修改逻辑变更
continuous-integration/drone/push Build is passing
2024-06-12 13:25:34 +08:00
hang f27bee83b7 修改任务列表
continuous-integration/drone/push Build is passing
2024-06-12 13:17:48 +08:00
hang e3b6feb4da 修改待阅列表
continuous-integration/drone/push Build is passing
2024-06-12 13:03:50 +08:00
hang d727703075 返回标准Id
continuous-integration/drone/push Build is passing
2024-06-12 10:56:00 +08:00
hang c49cf0ed12 修改登录逻辑
continuous-integration/drone/push Build is passing
2024-06-12 10:50:18 +08:00
hang f324d207dd 编译错误
continuous-integration/drone/push Build is passing
2024-06-12 09:50:09 +08:00
hang c9bda275f5 生成任务名称修改
continuous-integration/drone/push Build is failing
2024-06-12 09:48:07 +08:00
hang 62ed1a408d 影响筛选逻辑修改
continuous-integration/drone/push Build is passing
2024-06-12 09:13:59 +08:00
hang 25efb34f1f 增加MFA认证
continuous-integration/drone/push Build is passing
2024-06-11 17:58:06 +08:00
he eb0f13c075 Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-06-07 17:59:54 +08:00
he 7ca92a7675 代码修改 2024-06-07 17:59:53 +08:00
hang e313f88bca site列表增加创建时间
continuous-integration/drone/push Build is passing
2024-06-07 15:59:08 +08:00
hang 4823eb29d5 修改bug
continuous-integration/drone/push Build is passing
2024-06-07 15:25:27 +08:00
hang 43ec332f61 修改随机阅片逻辑
continuous-integration/drone/push Build is passing
2024-06-07 15:04:41 +08:00
hang cac0652120 修改项目site 添加问题
continuous-integration/drone/push Build is passing
2024-06-07 13:55:01 +08:00
hang cc088900b6 项目中心改为分页
continuous-integration/drone/push Build is passing
2024-06-07 10:52:50 +08:00
hang 824b165723 修改site 代码
continuous-integration/drone/push Build is passing
2024-06-07 10:32:43 +08:00
hang 443b94b332 siteCode 添加
continuous-integration/drone/push Build is passing
2024-06-06 18:03:00 +08:00
hang dc116d3a6f 修改site参数不必传
continuous-integration/drone/push Build is passing
2024-06-06 17:28:06 +08:00
he bbc8859a16 Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-06-06 17:20:01 +08:00
he 09e388b01a 修改 2024-06-06 17:20:01 +08:00
hang e5fcb75b9f 修改查询接口
continuous-integration/drone/push Build is failing
2024-06-06 17:15:03 +08:00
hang 8e104e133f 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 failing
2024-06-06 16:51:25 +08:00
hang e2a77537f0 增加查询site 2024-06-06 16:51:25 +08:00
he a73a79b627 Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is failing
2024-06-06 16:37:29 +08:00
he e79c3a8f37 代码修改 2024-06-06 16:37:28 +08:00
hang ca9a2dad18 自定义添加项目Site
continuous-integration/drone/push Build is passing
2024-06-06 16:34:29 +08:00
hang cd03f5f31d 修改MIM查询
continuous-integration/drone/push Build is failing
2024-06-06 14:37:18 +08:00
hang 33e25de801 修复查询bug
continuous-integration/drone/push Build is passing
2024-06-06 14:25:10 +08:00
hang 9cd60e9575 修改部位初始化
continuous-integration/drone/push Build is passing
2024-06-06 13:48:25 +08:00
hang 4da4a4de89 x
continuous-integration/drone/push Build is passing
2024-06-06 11:03:46 +08:00
hang ec0a88a5ec 修改默认值
continuous-integration/drone/push Build is passing
2024-06-06 10:25:49 +08:00
hang a52a00e58c 增加标准查询字段
continuous-integration/drone/push Build is passing
2024-06-06 09:57:54 +08:00
hang 0a6ffbba07 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-06-06 09:31:34 +08:00
hang 8cb5423b0b 添加修改 2024-06-06 09:31:33 +08:00
he 5a6411c6c3 Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-06-06 09:28:23 +08:00
he b97a8b5a68 代码修改 2024-06-06 09:28:22 +08:00
hang 91794266e7 修改bug
continuous-integration/drone/push Build is running
2024-06-06 09:27:56 +08:00
hang 2f86e2dae1 修改CRO Sponsor
continuous-integration/drone/push Build is passing
2024-06-06 09:22:39 +08:00
he fb76c5af6c Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-06-05 17:13:14 +08:00
he 3f6ec5b7ea 修改 2024-06-05 17:13:13 +08:00
hang c95ea8c547 修改 CRO Sponsor 部位
continuous-integration/drone/push Build is passing
2024-06-05 14:54:37 +08:00
hang facd9e0e5f 修改项目部位
continuous-integration/drone/push Build is passing
2024-06-05 13:49:22 +08:00
hang 9d0c3d3fc5 返回提示
continuous-integration/drone/push Build is passing
2024-06-05 10:28:07 +08:00
hang 907d0d39a1 取消医生,增加标准
continuous-integration/drone/push Build is passing
2024-06-05 09:48:56 +08:00
hang 4d689100ee 修改导航属性bug
continuous-integration/drone/push Build is passing
2024-06-04 16:21:06 +08:00
hang 818d9d6f62 导航属性bug
continuous-integration/drone/push Build is passing
2024-06-04 15:51:20 +08:00
hang 9a2059726f 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-06-04 15:50:15 +08:00
hang 8bcac405e5 项目bodypart 以及bug 2024-06-04 15:50:14 +08:00
he 19661c5e82 修改
continuous-integration/drone/push Build is passing
2024-06-04 13:59:58 +08:00
hang 9875d9622d 修改中心
continuous-integration/drone/push Build is passing
2024-06-04 11:42:44 +08:00
hang 7573ffe941 修改nodicom 查询bug
continuous-integration/drone/push Build is passing
2024-06-03 15:51:54 +08:00
hang 47166ab2eb 修改trialsiteId
continuous-integration/drone/push Build is passing
2024-06-03 15:33:05 +08:00
hang 0295b7d919 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-06-03 15:25:41 +08:00
hang 3653072497 统计数字修改 2024-06-03 15:25:41 +08:00
he 0e7f203a1b 修改
continuous-integration/drone/push Build is passing
2024-06-03 15:21:13 +08:00
he ab99265c88 Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is running
2024-06-03 15:20:55 +08:00
he f774d95f5c 修改 2024-06-03 15:20:54 +08:00
hang 9e1e32f16d 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-06-03 15:13:53 +08:00
hang 0accb453e5 上传监控bug 2024-06-03 15:13:52 +08:00
he e2b285c792 Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-06-03 14:54:18 +08:00
he 935f95fa3b 代码提交 2024-06-03 14:54:15 +08:00
hang a4d20d9f08 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-06-03 14:37:42 +08:00
hang 0e23719c7b 修改site关联 2024-06-03 14:37:38 +08:00
hang eb1f06658d 放开cro sponsor 和去掉国际化缓存
continuous-integration/drone/push Build is passing
2024-06-03 11:15:02 +08:00
hang 1e177a2530 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-06-03 11:06:17 +08:00
hang 49031b0e48 国际化修改 2024-06-03 11:06:16 +08:00
hang ca5bbb3064 irc 邮箱验证修改
continuous-integration/drone/push Build is passing
2024-05-31 17:42:12 +08:00
hang b338188c5f 返回 SliceThickness
continuous-integration/drone/push Build is passing
2024-05-31 15:52:33 +08:00
hang 9cbe4cc36e 修改配置
continuous-integration/drone/push Build is passing
2024-05-31 14:58:00 +08:00
hang 6f5f521803 打开限制的配置
continuous-integration/drone/push Build is passing
2024-05-31 13:49:23 +08:00
hang a6db30280b 修改退出接口
continuous-integration/drone/push Build is passing
2024-05-31 13:40:03 +08:00
hang 4db3860ade 修改自动退出时间
continuous-integration/drone/push Build is passing
2024-05-31 11:11:01 +08:00
hang 57837cfe1d CRO Sponsor修改
continuous-integration/drone/push Build is passing
2024-05-31 11:03:13 +08:00
hang b51fdc5769 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-05-30 14:37:39 +08:00
hang 5038d7ad53 修改上传重传bug 2024-05-30 14:37:38 +08:00
he c1d618326b Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-05-30 14:31:20 +08:00
he db1a0195fe 代码修改 2024-05-30 14:31:20 +08:00
hang 238def8089 修改判断
continuous-integration/drone/push Build is passing
2024-05-30 11:23:22 +08:00
hang 59e969c2a8 修改逻辑
continuous-integration/drone/push Build is passing
2024-05-30 11:18:05 +08:00
hang 029a288be2 修改多帧的逻辑
continuous-integration/drone/push Build is passing
2024-05-30 10:34:59 +08:00
hang 11e5448acf 用户列表修改
continuous-integration/drone/push Build is passing
2024-05-29 17:43:54 +08:00
hang 71577d0346 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-05-29 16:39:15 +08:00
hang 681e559cb4 增加邮箱查询和创建时间查询 2024-05-29 16:39:15 +08:00
hang 862390ae78 增加邮箱查询条件 2024-05-29 16:39:11 +08:00
hang f210799c4d 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-05-29 16:38:02 +08:00
hang d7700c3c77 添加备注 2024-05-29 16:38:01 +08:00
he 44fa4d3fc4 Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-05-29 14:59:26 +08:00
he f0c57c643b 修改 2024-05-29 14:59:26 +08:00
hang 5e48ed1e23 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-05-28 10:00:32 +08:00
hang a3f12b2a53 增加医生用户名 2024-05-28 10:00:31 +08:00
he cc00cce704 Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-05-27 16:48:16 +08:00
he 9c244c6750 修改 2024-05-27 16:48:16 +08:00
hang ffb5d46ca3 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-05-27 16:39:15 +08:00
hang 7376732b1a 项目 sponsor cro 修改 2024-05-27 16:39:14 +08:00
he 1caf4ff8e6 修改
continuous-integration/drone/push Build is passing
2024-05-27 16:11:20 +08:00
he 22147483c1 Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-05-27 15:09:25 +08:00
he c7dbf7ba92 修改 2024-05-27 15:09:24 +08:00
hang fd3f76d35c 超窗导出影响列表修改
continuous-integration/drone/push Build is passing
2024-05-24 10:02:44 +08:00
hang e10bca6892 移除 Magicodes 导入excel
continuous-integration/drone/push Build is passing
2024-05-24 09:17:30 +08:00
hang 4a01960426 修改映射
continuous-integration/drone/push Build is passing
2024-05-23 17:22:58 +08:00
hang 318364e70b 修改nuget 包
continuous-integration/drone/push Build is passing
2024-05-23 17:10:38 +08:00
hang 383064a7b7 重传监控
continuous-integration/drone/push Build is passing
2024-05-23 16:02:00 +08:00
hang 78bbfb5f41 一致性核查通过自动关闭质疑
continuous-integration/drone/push Build is passing
2024-05-23 11:15:45 +08:00
hang 9aec1f5f50 修改一致性核查导表
continuous-integration/drone/push Build is passing
2024-05-23 09:12:40 +08:00
hang 66beb43daf 修改邮箱正则
continuous-integration/drone/push Build is passing
2024-05-23 09:03:19 +08:00
hang b02589a957 修改正则
continuous-integration/drone/push Build is passing
2024-05-22 17:49:45 +08:00
hang d4a1d83851 临床数据维护
continuous-integration/drone/push Build is passing
2024-05-22 17:39:52 +08:00
hang 53aee1020d 去掉siteId
continuous-integration/drone/push Build is passing
2024-05-22 13:45:28 +08:00
hang 010c106879 增加删除接口
continuous-integration/drone/push Build is passing
2024-05-22 11:22:15 +08:00
hang fb43e38c7d 测试删除属性
continuous-integration/drone/push Build is passing
2024-05-22 10:34:06 +08:00
hang ca96c67e96 修改多帧接口
continuous-integration/drone/push Build is passing
2024-05-22 10:06:38 +08:00
hang 1fbf635582 增加返回instance 信息
continuous-integration/drone/push Build is passing
2024-05-21 16:00:48 +08:00
hang 44d62b187f Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-05-21 14:29:15 +08:00
hang 57600cbad1 IR上传接口修改 2024-05-21 14:29:13 +08:00
he 311d6507ce 修改 2024-05-21 14:11:50 +08:00
he 8e520ce579 Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-05-21 13:53:40 +08:00
he 5a97e15885 代码修改 2024-05-21 13:53:33 +08:00
hang bb36c67159 修改上传列表 2024-05-21 11:01:23 +08:00
hang 7a33edc7a6 修改上传监控导航属性bug
continuous-integration/drone/push Build is passing
2024-05-20 13:38:16 +08:00
hang a7d6303da4 处理返回的信息
continuous-integration/drone/push Build is passing
2024-05-17 16:58:01 +08:00
hang 704c201c33 修改逻辑
continuous-integration/drone/push Build is passing
2024-05-17 16:52:52 +08:00
hang c69d3eec36 修改展示
continuous-integration/drone/push Build is passing
2024-05-17 16:27:45 +08:00
hang 6e5a3a0078 修改下载展示列表
continuous-integration/drone/push Build is running
2024-05-17 15:21:06 +08:00
hang ed62de9135 修改bug
continuous-integration/drone/push Build is passing
2024-05-17 14:53:11 +08:00
hang a8b218ce95 多帧修改2
continuous-integration/drone/push Build is passing
2024-05-17 14:40:55 +08:00
hang f6d2b1e7f1 增加新的影像归档检查表
continuous-integration/drone/push Build is passing
2024-05-17 14:14:51 +08:00
hang 85439213b2 增加打包状态 crc列表增加字段,影像下载打包迁移
continuous-integration/drone/push Build is passing
2024-05-17 10:51:30 +08:00
hang 2933d100f7 标准增加字段
continuous-integration/drone/push Build is passing
2024-05-17 09:56:19 +08:00
hang ac799688d3 增加多帧展示字段
continuous-integration/drone/push Build is passing
2024-05-17 09:38:46 +08:00
hang a4b9c44cfa 多帧配合玲姐修改模块1
continuous-integration/drone/push Build is passing
2024-05-17 09:16:07 +08:00
hang af282d2bb8 自定义标准扩充字段
continuous-integration/drone/push Build is passing
2024-05-17 09:01:29 +08:00
hang a93bbebb61 无序修改字段类型
continuous-integration/drone/push Build is passing
2024-05-16 14:54:34 +08:00
hang 4552a24caa 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-05-16 14:16:58 +08:00
hang fc22ec0672 修改保存bug 2024-05-16 14:16:57 +08:00
he 963fbcb5e8 Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
2024-05-16 13:59:12 +08:00
he 3da3b9de45 修改 2024-05-16 13:59:11 +08:00
hang a055d1c668 阅片单元配置修改
continuous-integration/drone/push Build is passing
2024-05-16 10:40:47 +08:00
hang 0b130bbc01 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-05-16 10:13:04 +08:00
hang 9f9bc9c747 稽查搜索条件修改 2024-05-16 10:13:03 +08:00
he 75367ae727 修改
continuous-integration/drone/push Build is passing
2024-05-16 09:49:48 +08:00
hang bd9d78622f 增加搜索条件
continuous-integration/drone/push Build is passing
2024-05-15 16:35:57 +08:00
hang 6b807f419b 修改项目中心查询,文档查询
continuous-integration/drone/push Build is passing
2024-05-15 16:17:17 +08:00
hang f58ee6f63a 医学审核搜索条件增加
continuous-integration/drone/push Build is passing
2024-05-15 14:43:50 +08:00
hang 7510d86a52 修改医学审核bug
continuous-integration/drone/push Build is passing
2024-05-15 14:24:09 +08:00
hang 65fba6ca41 重阅跟踪修改
continuous-integration/drone/push Build is passing
2024-05-15 11:17:35 +08:00
hang 3e2198b7ba 日志查看时间
continuous-integration/drone/push Build is passing
2024-05-15 10:51:27 +08:00
hang 535c0fc419 阅片界面调整-查询条件
continuous-integration/drone/push Build is passing
2024-05-15 09:42:48 +08:00
hang 1c5d30b673 王总界面优化 新增查询条件以及列
continuous-integration/drone/push Build is passing
2024-05-14 16:02:00 +08:00
hang 3bf26dbbef 修改查询
continuous-integration/drone/push Build is passing
2024-05-14 15:01:18 +08:00
hang 329437411d 增加项目用户接口
continuous-integration/drone/push Build is passing
2024-05-14 14:38:35 +08:00
hang 090cdaf2e4 日志增加区域
continuous-integration/drone/push Build is passing
2024-05-14 14:29:38 +08:00
hang 7c257f261c x
continuous-integration/drone/push Build is passing
2024-05-14 14:19:17 +08:00
hang 477bc7baf7 日志格式测试
continuous-integration/drone/push Build is passing
2024-05-14 14:16:49 +08:00
hang 32d6ebef9c 日志修改
continuous-integration/drone/push Build is passing
2024-05-14 10:25:05 +08:00
he 51e0676ce5 修改
continuous-integration/drone/push Build is passing
2024-05-10 17:24:36 +08:00
he 53156e210f 修改
continuous-integration/drone/push Build is passing
2024-05-10 13:44:48 +08:00
he 84f76c09f7 修改
continuous-integration/drone/push Build is passing
2024-05-10 13:36:37 +08:00
he 74e0765d7a 修改 2024-05-10 13:20:04 +08:00
he 51cfadbc77 Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8 2024-05-10 13:19:25 +08:00
he 01e047f639 问题修改 2024-05-10 13:19:24 +08:00
hang 4050d7e4a3 修改肿瘤学有序阅片 2024-05-10 10:26:56 +08:00
he adab66172d 修改
continuous-integration/drone/push Build is passing
2024-05-09 16:21:16 +08:00
hang 7c850c969e 修改 错误用户名也展示在项目日志
continuous-integration/drone/push Build is passing
2024-05-08 14:26:14 +08:00
he f55fa98dec 修改
continuous-integration/drone/push Build is passing
2024-05-07 14:45:32 +08:00
hang 7f28c984e1 修改打包配置
continuous-integration/drone/push Build is running
2024-05-06 13:40:05 +08:00
hang 6220e53d8f 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-05-06 13:13:39 +08:00
hang 5bb0231354 服务器更换,地址修改 2024-05-06 13:13:38 +08:00
XCKJ 58eec48af7 添加 README.md
continuous-integration/drone/push Build is passing
2024-05-02 12:18:54 +00:00
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
586 changed files with 54949 additions and 13835 deletions
+6 -1
View File
@@ -22,4 +22,9 @@
**/secrets.dev.yaml
**/values.dev.yaml
LICENSE
README.md
README.md
!**/.gitignore
!.git/HEAD
!.git/config
!.git/packed-refs
!.git/refs/heads/**
+5 -37
View File
@@ -126,46 +126,14 @@ 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
# SA0001: XML comment analysis disabled
dotnet_diagnostic.SA0001.severity = suggestion
# SA1002: Semicolons should be spaced correctly
dotnet_diagnostic.SA1002.severity = suggestion
# SA1005: Single line comments should begin with single space
dotnet_diagnostic.SA1005.severity = none
dotnet_diagnostic.CS8618.severity = none
dotnet_diagnostic.CS8604.severity = none
dotnet_diagnostic.CS8600.severity = none
dotnet_diagnostic.CS1570.severity = none
dotnet_diagnostic.CS8601.severity = none
dotnet_diagnostic.CS8632.severity = none
dotnet_diagnostic.CS8625.severity = none
dotnet_diagnostic.CS8603.severity = none
dotnet_diagnostic.CS8602.severity = none
dotnet_diagnostic.CS1998.severity = none
dotnet_diagnostic.CS0168.severity = none
dotnet_diagnostic.CS0219.severity = none
dotnet_diagnostic.CS0108.severity = none
dotnet_diagnostic.CS0120.severity = none
dotnet_diagnostic.CS8620.severity = none
dotnet_diagnostic.CS1587.severity = none
dotnet_diagnostic.CS8619.severity = none
dotnet_diagnostic.CS0162.severity = none
dotnet_diagnostic.CS0472.severity = none
dotnet_diagnostic.CS8629.severity = none
dotnet_diagnostic.CS8073.severity = none
dotnet_diagnostic.CS0414.severity = none
dotnet_diagnostic.CS1573.severity = none
dotnet_diagnostic.CS0109.severity = none
csharp_style_prefer_method_group_conversion = true:silent
csharp_style_prefer_top_level_statements = true:silent
dotnet_diagnostic.SA1003.severity = silent
dotnet_diagnostic.SA1108.severity = silent
dotnet_diagnostic.SA1107.severity = silent
dotnet_diagnostic.CS8620.severity = none
dotnet_diagnostic.CS8632.severity = none
dotnet_diagnostic.CS8604.severity = none
dotnet_diagnostic.CS1998.severity = none
[*.vb]
#### 命名样式 ####
+4 -26
View File
@@ -1,26 +1,4 @@
#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["IRaCIS.Core.API/IRaCIS.Core.API.csproj", "IRaCIS.Core.API/"]
COPY ["IRaCIS.Core.Application/IRaCIS.Core.Application.csproj", "IRaCIS.Core.Application/"]
COPY ["IRaCIS.Core.Infra.EFCore/IRaCIS.Core.Infra.EFCore.csproj", "IRaCIS.Core.Infra.EFCore/"]
COPY ["IRaCIS.Core.Domain/IRaCIS.Core.Domain.csproj", "IRaCIS.Core.Domain/"]
COPY ["IRaCIS.Core.Domain.Share/IRaCIS.Core.Domain.Share.csproj", "IRaCIS.Core.Domain.Share/"]
COPY ["IRaCIS.Core.Infrastructure/IRaCIS.Core.Infrastructure.csproj", "IRaCIS.Core.Infrastructure/"]
RUN dotnet restore "IRaCIS.Core.API/IRaCIS.Core.API.csproj"
COPY . .
WORKDIR "/src/IRaCIS.Core.API"
RUN dotnet build "IRaCIS.Core.API.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "IRaCIS.Core.API.csproj" -c Release -o /app/publish /p:UseAppHost=false
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "IRaCIS.Core.API.dll"]
FROM registry.cn-shanghai.aliyuncs.com/extimaging/aspnetcore:v8.2
WORKDIR /app
COPY publish .
ENTRYPOINT ["dotnet", "IRaCIS.Core.API.dll"]
@@ -0,0 +1,37 @@
using IRaCIS.Core.Infrastructure.Extention;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.Extensions.Localization;
using Newtonsoft.Json;
namespace IRaCIS.Core.SCP.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)
{
var validationErrors = context.ModelState
.Keys
.SelectMany(k => context.ModelState[k]!.Errors)
.Select(e => e.ErrorMessage)
.ToArray();
//---提供给接口的参数无效。
context.Result = new JsonResult(ResponseOutput.NotOk(_localizer["ModelAction_InvalidAPIParameter"] + JsonConvert.SerializeObject( validationErrors)));
}
}
}
}
@@ -0,0 +1,28 @@
using System;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.AspNetCore.Mvc.ModelBinding;
namespace IRaCIS.Core.SCP.Filter
{
#region snippet_DisableFormValueModelBindingAttribute
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class DisableFormValueModelBindingAttribute : Attribute, IResourceFilter
{
public void OnResourceExecuting(ResourceExecutingContext context)
{
var factories = context.ValueProviderFactories;
//factories.RemoveType<FormValueProviderFactory>();
factories.RemoveType<FormFileValueProviderFactory>();
factories.RemoveType<JQueryFormValueProviderFactory>();
context.HttpContext.Request.EnableBuffering();
}
public void OnResourceExecuted(ResourceExecutedContext context)
{
}
}
#endregion
}
@@ -0,0 +1,61 @@
using IRaCIS.Core.Infrastructure;
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.SCP.Filter
{
public class ProjectExceptionFilter : Attribute, IExceptionFilter
{
private readonly ILogger<ProjectExceptionFilter> _logger;
public IStringLocalizer _localizer;
public ProjectExceptionFilter(IStringLocalizer localizer, ILogger<ProjectExceptionFilter> logger)
{
_logger = logger;
_localizer = localizer;
}
public void OnException(ExceptionContext context)
{
//context.ExceptionHandled;//记录当前这个异常是否已经被处理过了
if (!context.ExceptionHandled)
{
if (context.Exception.GetType().Name == "DbUpdateConcurrencyException")
{
//---并发更新,当前不允许该操作
context.Result = new JsonResult(ResponseOutput.NotOk(_localizer["ProjectException_ConcurrentUpdateNotAllowed"] + context.Exception.Message));
}
if (context.Exception.GetType() == typeof(BusinessValidationFailedException))
{
var error = context.Exception as BusinessValidationFailedException;
context.Result = new JsonResult(ResponseOutput.NotOk(context.Exception.Message, error!.Code));
}
else if(context.Exception.GetType() == typeof(QueryBusinessObjectNotExistException))
{
context.Result = new JsonResult(ResponseOutput.NotOk( context.Exception.Message, ApiResponseCodeEnum.DataNotExist));
}
else
{
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));
}
_logger.LogError(context.Exception.InnerException is null ? (context.Exception.Message + context.Exception.StackTrace) : (context.Exception.InnerException?.Message + context.Exception.InnerException?.StackTrace));
}
else
{
//继续
}
context.ExceptionHandled = true;//标记当前异常已经被处理过了
}
}
}
@@ -0,0 +1,120 @@
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.AspNetCore.Mvc;
using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Infrastructure.Extention;
namespace IRaCIS.Application.Services.BusinessFilter
{
/// <summary>
/// 统一返回前端数据包装,之前在控制器包装,现在修改为动态Api 在ResultFilter这里包装,减少重复冗余代码
/// by zhouhang 2021.09.12 周末
/// </summary>
public class UnifiedApiResultFilter : Attribute, IAsyncResultFilter
{
/// <summary>
/// 异步版本
/// </summary>
/// <param name="context"></param>
/// <param name="next"></param>
/// <returns></returns>
public async Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next)
{
if (context.Result is ObjectResult objectResult)
{
var statusCode = objectResult.StatusCode ?? context.HttpContext.Response.StatusCode;
//是200 并且没有包装 那么包装结果
if (statusCode == 200 && !(objectResult.Value is IResponseOutput))
{
//if (objectResult.Value == null)
//{
// var apiResponse = ResponseOutput.DBNotExist();
// objectResult.Value = apiResponse;
// objectResult.DeclaredType = apiResponse.GetType();
//}
//else
//{
var type = objectResult.Value?.GetType();
if ( type!=null&& type.IsGenericType&&(type.GetGenericTypeDefinition()==typeof(ValueTuple<,>)|| type.GetGenericTypeDefinition()==typeof(Tuple<,>)))
{
//报错
//var tuple = (object, object))objectResult.Value;
//var (val1, val2) = ((dynamic, dynamic))objectResult.Value;
//var apiResponse = ResponseOutput.Ok(val1, val2);
//OK
var tuple = (dynamic)objectResult.Value;
var apiResponse = ResponseOutput.Ok(tuple.Item1, tuple.Item2);
objectResult.Value = apiResponse;
objectResult.DeclaredType = apiResponse.GetType();
}
else
{
var apiResponse = ResponseOutput.Ok(objectResult.Value);
objectResult.Value = apiResponse;
objectResult.DeclaredType = apiResponse.GetType();
}
//}
}
//如果不是200 是IResponseOutput 不处理
else if (statusCode != 200 && (objectResult.Value is IResponseOutput))
{
}
else if(statusCode != 200&&!(objectResult.Value is IResponseOutput))
{
//---程序错误,请联系开发人员。
var apiResponse = ResponseOutput.NotOk(StaticData.International("UnifiedAPI_ProgramError"));
objectResult.Value = apiResponse;
objectResult.DeclaredType = apiResponse.GetType();
}
}
await next.Invoke();
}
public static bool IsTupleType(Type type, bool checkBaseTypes = false)
{
if (type == null)
throw new ArgumentNullException(nameof(type));
if (type == typeof(Tuple))
return true;
while (type != null)
{
if (type.IsGenericType)
{
var genType = type.GetGenericTypeDefinition();
if (genType == typeof(Tuple<>)
|| genType == typeof(Tuple<,>)
|| genType == typeof(Tuple<,>))
return true;
}
if (!checkBaseTypes)
break;
type = type.BaseType;
}
return false;
}
}
}
+62
View File
@@ -0,0 +1,62 @@
using FellowOakDicom.Imaging;
using SixLabors.ImageSharp.Formats.Jpeg;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Processing;
using System.Security.Cryptography;
using System.Text;
namespace IRaCIS.Core.Application.Helper;
public static class ImageHelper
{
// 采用ImageSharp组件 跨平台,不依赖windows 平台图像处理组件,这里大坑(net 6 下,之前由于Dicom处理最新组件 依赖了这个库的一个旧版本,导致缩略图bug,单独升级依赖组件才解决)
public static void ResizeSave(string filePath, string? fileStorePath)
{
fileStorePath = fileStorePath ?? filePath + ".preview.jpeg";
using (var image = SixLabors.ImageSharp.Image.Load(filePath))
{
image.Mutate(x => x.Resize(500, 500));
image.Save(fileStorePath);
}
}
public static Stream RenderPreviewJpeg(string filePath)
{
string jpegPath = filePath + ".preview.jpg";
if (!File.Exists(jpegPath))
{
using (Stream stream = new FileStream(jpegPath, FileMode.Create))
{
DicomImage image = new DicomImage(filePath);
var sharpimage = image.RenderImage().AsSharpImage();
sharpimage.Save(stream, new JpegEncoder());
}
}
return new FileStream(jpegPath, FileMode.Open);
}
public static void RemovePreviewJpeg(string filePath)
{
string jpegPath = filePath + ".preview.jpg";
if (File.Exists(jpegPath)) File.Delete(jpegPath);
}
}
@@ -0,0 +1,57 @@
using Autofac;
using IRaCIS.Core.Infra.EFCore;
using Microsoft.AspNetCore.Http;
using Panda.DynamicWebApi;
using System;
using System.Linq;
using System.Reflection;
using IRaCIS.Core.Domain.Models;
using IRaCIS.Core.Domain.Share;
using IRaCIS.Application.Services;
using AutoMapper;
using IRaCIS.Core.SCP.Service;
namespace IRaCIS.Core.SCP
{
// ReSharper disable once IdentifierTypo
public class AutofacModuleSetup : Autofac.Module
{
protected override void Load(ContainerBuilder containerBuilder)
{
#region byzhouhang 20210917 Domain层 Infra.EFcore
containerBuilder.RegisterGeneric(typeof(Repository<>))
.As(typeof(IRepository<>)).InstancePerLifetimeScope();//注册泛型仓储
containerBuilder.RegisterType<Repository>().As<IRepository>().InstancePerLifetimeScope();
#endregion
#region autofac https://www.cnblogs.com/xwhqwer/p/15320838.html
//获取所有控制器类型并使用属性注入
containerBuilder.RegisterAssemblyTypes(typeof(BaseService).Assembly)
.Where(type => typeof(IDynamicWebApi).IsAssignableFrom(type))
.PropertiesAutowired();
#endregion
Assembly application = Assembly.LoadFrom(AppDomain.CurrentDomain.BaseDirectory + typeof(BaseService).Assembly.GetName().Name+".dll");
containerBuilder.RegisterAssemblyTypes(application).Where(t => t.FullName.Contains("Service"))
.PropertiesAutowired().AsImplementedInterfaces();
//containerBuilder.RegisterType<HttpContextAccessor>().As<IHttpContextAccessor>().SingleInstance();
//containerBuilder.RegisterType<UserInfo>().As<IUserInfo>().InstancePerLifetimeScope();
}
}
}
+64
View File
@@ -0,0 +1,64 @@
using EntityFramework.Exceptions.SqlServer;
using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Infra.EFCore;
using Medallion.Threading;
using Medallion.Threading.SqlServer;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Diagnostics;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
namespace IRaCIS.Core.SCP
{
public static class EFSetup
{
public static void AddEFSetup( this IServiceCollection services, IConfiguration configuration)
{
services.AddHttpContextAccessor();
services.AddScoped<IUserInfo, UserInfo>();
services.AddScoped<ISaveChangesInterceptor, AuditEntityInterceptor>();
//这个注入没有成功--注入是没问题的,构造函数也只是支持参数就好,错在注入的地方不能写DbContext
//Web程序中通过重用池中DbContext实例可提高高并发场景下的吞吐量, 这在概念上类似于ADO.NET Provider原生的连接池操作方式,具有节省DbContext实例化成本的优点
services.AddDbContext<IRaCISDBContext>((sp, options) =>
{
// 在控制台
//public static readonly ILoggerFactory MyLoggerFactory = LoggerFactory.Create(builder => { builder.AddConsole(); });
var logFactory = LoggerFactory.Create(builder => { builder.AddDebug(); });
options.UseSqlServer(configuration.GetSection("ConnectionStrings:RemoteNew").Value,
contextOptionsBuilder => contextOptionsBuilder.EnableRetryOnFailure());
options.UseLoggerFactory(logFactory);
options.UseExceptionProcessor();
options.EnableSensitiveDataLogging();
options.AddInterceptors(new QueryWithNoLockDbCommandInterceptor());
options.AddInterceptors(sp.GetServices<ISaveChangesInterceptor>());
options.UseProjectables();
});
//// Register an additional context factory as a Scoped service, which gets a pooled context from the Singleton factory we registered above,
//services.AddScoped<IRaCISDBScopedFactory>();
//// Finally, arrange for a context to get injected from our Scoped factory:
//services.AddScoped(sp => sp.GetRequiredService<IRaCISDBScopedFactory>().CreateDbContext());
//注意区分 easy caching 也有 IDistributedLockProvider
services.AddSingleton<IDistributedLockProvider>(sp =>
{
//var connection = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]!);
return new SqlDistributedSynchronizationProvider(configuration.GetSection("ConnectionStrings:RemoteNew").Value);
});
}
}
}
@@ -0,0 +1,59 @@
using Microsoft.Extensions.DependencyInjection;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using System;
namespace IRaCIS.Core.SCP
{
public static class NewtonsoftJsonSetup
{
public static void AddNewtonsoftJsonSetup(this IMvcBuilder builder, IServiceCollection services)
{
services.AddHttpContextAccessor();
services.AddScoped<IOSSService,OSSService>();
builder.AddNewtonsoftJson(options =>
{
//options.SerializerSettings.PreserveReferencesHandling = PreserveReferencesHandling.Objects;
// 忽略循环引用
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
//options.SerializerSettings.TypeNameHandling = TypeNameHandling.All;
//处理返回给前端 可空类型 给出默认值 比如in? 为null 设置 默认值0
options.SerializerSettings.ContractResolver = new NullToEmptyStringResolver(); //new DefaultContractResolver();// new NullToEmptyStringResolver();
// 设置时间格式
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>());
})
.AddControllersAsServices()//动态webApi属性注入需要
.ConfigureApiBehaviorOptions(o =>
{
o.SuppressModelStateInvalidFilter = true; //自己写验证
});
Newtonsoft.Json.JsonSerializerSettings setting = new Newtonsoft.Json.JsonSerializerSettings();
JsonConvert.DefaultSettings = new Func<JsonSerializerSettings>(() =>
{
//日期类型默认格式化处理
setting.DateFormatString = "yyyy-MM-dd HH:mm:ss";
setting.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
return setting;
});
}
}
}
@@ -0,0 +1,36 @@
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using System;
using System.Collections.Generic;
using System.Linq;
namespace IRaCIS.Core.SCP
{
public class NullToEmptyStringResolver : DefaultContractResolver
{
protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
{
IList<JsonProperty> properties = base.CreateProperties(type, memberSerialization);
var list= type.GetProperties()
.Select(p =>
{
var jp = base.CreateProperty(p, memberSerialization);
jp.ValueProvider = new NullToEmptyStringValueProvider(p);
return jp;
}).ToList();
var uu = list.Select(t => t.PropertyName).ToList();
//获取复杂对象属性
properties = properties.TakeWhile(t => !uu.Contains(t.PropertyName)).ToList();
list.AddRange(properties);
return list;
}
}
}
@@ -0,0 +1,42 @@
using System;
using System.Reflection;
using Newtonsoft.Json.Serialization;
namespace IRaCIS.Core.SCP
{
public class NullToEmptyStringValueProvider : IValueProvider
{
PropertyInfo _MemberInfo;
public NullToEmptyStringValueProvider(PropertyInfo memberInfo)
{
_MemberInfo = memberInfo;
}
public object GetValue(object target)
{
object result = _MemberInfo.GetValue(target);
if (_MemberInfo.PropertyType == typeof(string) && result == null) result = "";
else if (_MemberInfo.PropertyType == typeof(String[]) && result == null) result = new string[] { };
//else if (_MemberInfo.PropertyType == typeof(Nullable<Int32>) && result == null) result = 0;
else if (_MemberInfo.PropertyType == typeof(Nullable<Decimal>) && result == null) result = 0.00M;
return result;
}
public void SetValue(object target, object value)
{
if(_MemberInfo.PropertyType == typeof(string))
{
//去掉前后空格
_MemberInfo.SetValue(target, value==null?string.Empty: value.ToString()==string.Empty? value:value.ToString().Trim());
}
else
{
_MemberInfo.SetValue(target, value);
}
}
}
}
+37
View File
@@ -0,0 +1,37 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Aliyun.OSS.SDK.NetCore" Version="2.13.0" />
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="9.0.0" />
<PackageReference Include="DistributedLock.Core" Version="1.0.6" />
<PackageReference Include="DistributedLock.SqlServer" Version="1.0.4" />
<PackageReference Include="fo-dicom" Version="5.1.2" />
<PackageReference Include="fo-dicom.Codecs" Version="5.12.0" />
<PackageReference Include="fo-dicom.Imaging.ImageSharp" Version="5.1.2" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="8.0.4" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.20.1" />
<PackageReference Include="AutoMapper" Version="13.0.1" />
<PackageReference Include="Minio" Version="6.0.2" />
<PackageReference Include="My.Extensions.Localization.Json" Version="3.3.0">
<TreatAsUsed>true</TreatAsUsed>
</PackageReference>
<PackageReference Include="Panda.DynamicWebApi" Version="1.2.2" />
<PackageReference Include="Serilog.Enrichers.ClientInfo" Version="2.0.3" />
<PackageReference Include="Serilog.Extensions.Hosting" Version="8.0.0" />
<PackageReference Include="Serilog.Sinks.Console" Version="5.0.1" />
<PackageReference Include="Serilog.Sinks.File" Version="5.0.0" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\IRaCIS.Core.Domain\IRaCIS.Core.Domain.csproj" />
<ProjectReference Include="..\IRaCIS.Core.Infra.EFCore\IRaCIS.Core.Infra.EFCore.csproj" />
</ItemGroup>
</Project>
+214
View File
@@ -0,0 +1,214 @@
using Autofac;
using Autofac.Extensions.DependencyInjection;
using AutoMapper.EquivalencyExpression;
using FellowOakDicom;
using FellowOakDicom.Imaging;
using FellowOakDicom.Imaging.NativeCodec;
using FellowOakDicom.Network;
using IRaCIS.Core.Infra.EFCore;
using IRaCIS.Core.SCP;
using IRaCIS.Core.SCP.Filter;
using IRaCIS.Core.SCP.Service;
using MassTransit;
using MassTransit.NewIdProviders;
using Microsoft.AspNetCore.HttpOverrides;
using Microsoft.Extensions.DependencyInjection;
using Panda.DynamicWebApi;
using Serilog;
using Serilog.Events;
using System.Runtime.InteropServices;
//以配置文件为准,否则 从url中取环境值(服务以命令行传递参数启动,配置文件配置了就不需要传递环境参数)
var config = new ConfigurationBuilder()
.AddEnvironmentVariables()
.Build();
var enviromentName = config["ASPNETCORE_ENVIRONMENT"];
var builder = WebApplication.CreateBuilder(new WebApplicationOptions
{
EnvironmentName = enviromentName
});
#region windows
int urlsIndex = Array.FindIndex(args, arg => arg != null && arg.StartsWith("--port"));
if (urlsIndex > -1)
{
var port = args[urlsIndex].Substring("--port=".Length);
Console.WriteLine(port);
builder.WebHost.UseUrls($"http://0.0.0.0:{port}");
}
#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>();
})
.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<ModelActionFilter>();
options.Filters.Add<ProjectExceptionFilter>();
options.Filters.Add<UnitOfWorkFilter>();
})
.AddNewtonsoftJsonSetup(builder.Services); // NewtonsoftJson 序列化 处理
builder.Services.AddOptions().Configure<AliyunOSSOptions>(_configuration.GetSection("AliyunOSS"));
builder.Services.AddOptions().Configure<ObjectStoreServiceOptions>(_configuration.GetSection("ObjectStoreService"));
builder.Services.AddOptions().Configure<DicomSCPServiceOption>(_configuration.GetSection("DicomSCPServiceConfig"));
//动态WebApi + UnifiedApiResultFilter 省掉控制器代码
//动态webApi 目前存在的唯一小坑是生成api上服务上的动态代理AOP失效 间接掉用不影响
builder.Services
.AddDynamicWebApi(dynamicWebApiOption =>
{
//默认是 api
dynamicWebApiOption.DefaultApiPrefix = "";
//首字母小写
dynamicWebApiOption.GetRestFulActionName = (actionName) => char.ToLower(actionName[0]) + actionName.Substring(1);
//删除 Service后缀
dynamicWebApiOption.RemoveControllerPostfixes.Add("Service");
});
//AutoMapper
builder.Services.AddAutoMapper(automapper =>
{
automapper.AddCollectionMappers();
}, typeof(BaseService).Assembly);
//EF ORM QueryWithNoLock
builder.Services.AddEFSetup(_configuration);
//转发头设置 获取真实IP
builder.Services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders =
ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
});
//Dicom影像渲染图片 跨平台
//builder.Services.AddDicomSetup();
new DicomSetupBuilder()
.RegisterServices(s =>
s.AddFellowOakDicom()
.AddTranscoderManager<NativeTranscoderManager>()
//.AddTranscoderManager<FellowOakDicom.Imaging.NativeCodec.NativeTranscoderManager>()
.AddImageManager<ImageSharpImageManager>())
.SkipValidation()
.Build();
#endregion
// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
// Configure the HTTP request pipeline.
//if (app.Environment.IsDevelopment())
//{
app.UseSwagger();
app.UseSwaggerUI();
//}
app.UseAuthorization();
app.MapControllers();
#region
//Log.Logger = new LoggerConfiguration()
// .MinimumLevel.Information()
// .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
// // 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)
// .Enrich.WithClientIp()
// .Enrich.FromLogContext()
// //控制台 方便调试 问题 我们显示记录日志 时 获取上下文的ip 和用户名 用户类型
// .WriteTo.Console(restrictedToMinimumLevel: LogEventLevel.Warning,
// 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:u3}] {SourceContext:l} || {Message} || {Exception} ||end {NewLine}")
// .CreateLogger();
Log.Logger = new LoggerConfiguration()
//.MinimumLevel.Information()
.MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
.WriteTo.Console()
.WriteTo.File($"{AppContext.BaseDirectory}Serilogs/.log", rollingInterval: RollingInterval.Day)
.CreateLogger();
#endregion
#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
var logger = app.Services.GetService<Microsoft.Extensions.Logging.ILogger<Program>>();
var server = DicomServerFactory.Create<CStoreSCPService>(_configuration.GetSection("DicomSCPServiceConfig").GetValue<int>("ServerPort"), userState: app.Services,logger: logger);
app.Run();
@@ -0,0 +1,25 @@
{
"$schema": "http://json.schemastore.org/launchsettings.json",
"profiles": {
"Test_IRC_SCP": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"launchUrl": "swagger",
"applicationUrl": "http://localhost:6200",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Test_IRC_SCP"
}
},
"Uat_IRC_SCP": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"launchUrl": "swagger",
"applicationUrl": "http://localhost:6200",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Uat_IRC_SCP"
}
}
}
}
+118
View File
@@ -0,0 +1,118 @@
using AutoMapper;
using IRaCIS.Application.Services.BusinessFilter;
using IRaCIS.Core.Infra.EFCore;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Localization;
using Panda.DynamicWebApi;
using Panda.DynamicWebApi.Attributes;
using System.Diagnostics.CodeAnalysis;
using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Infrastructure.Extention;
using IRaCIS.Core.Domain.Models;
namespace IRaCIS.Core.SCP.Service
{
#pragma warning disable CS8618
#region
[Authorize, DynamicWebApi, UnifiedApiResultFilter]
public class BaseService : IBaseService, IDynamicWebApi
{
public IMapper _mapper { get; set; }
public IUserInfo _userInfo { get; set; }
public IRepository _repository { get; set; }
public IStringLocalizer _localizer { get; set; }
public IWebHostEnvironment _hostEnvironment { get; set; }
public static IResponseOutput Null404NotFound<TEntity>(TEntity? businessObject) where TEntity : class
{
return new ResponseOutput<string>()
.NotOk($"The query object {typeof(TEntity).Name} does not exist , or was deleted by someone else, or an incorrect parameter query caused", code: ApiResponseCodeEnum.DataNotExist);
}
}
public interface IBaseService
{
[MemberNotNull(nameof(_mapper))]
public IMapper _mapper { get; set; }
[MemberNotNull(nameof(_userInfo))]
public IUserInfo _userInfo { get; set; }
[MemberNotNull(nameof(_repository))]
public IRepository _repository { get; set; }
[MemberNotNull(nameof(_localizer))]
public IStringLocalizer _localizer { get; set; }
[MemberNotNull(nameof(_hostEnvironment))]
public IWebHostEnvironment _hostEnvironment { get; set; }
}
#endregion
#region
public interface IBaseServiceTest<T> where T : Entity
{
[MemberNotNull(nameof(_mapper))]
public IMapper _mapper { get; set; }
[MemberNotNull(nameof(_userInfo))]
public IUserInfo _userInfo { get; set; }
[MemberNotNull(nameof(_repository))]
public IRepository _repository { get; set; }
[MemberNotNull(nameof(_localizer))]
public IStringLocalizer _localizer { get; set; }
}
[Authorize, DynamicWebApi, UnifiedApiResultFilter]
public class BaseServiceTest<T> : IBaseServiceTest<T>, IDynamicWebApi where T : Entity
{
public IMapper _mapper { get; set; }
public IUserInfo _userInfo { get; set; }
public IRepository _repository { get; set; }
public IStringLocalizer _localizer { get; set; }
public static IResponseOutput Null404NotFound<TEntity>(TEntity? businessObject) where TEntity : class
{
return new ResponseOutput<string>()
.NotOk($"The query object {typeof(TEntity).Name} does not exist , or was deleted by someone else, or an incorrect parameter query caused", code: ApiResponseCodeEnum.DataNotExist);
}
}
#endregion
}
+370
View File
@@ -0,0 +1,370 @@
using FellowOakDicom.Network;
using FellowOakDicom;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using IRaCIS.Core.SCP.Service;
using IRaCIS.Core.Domain.Models;
using IRaCIS.Core.Infra.EFCore;
using Medallion.Threading;
using IRaCIS.Core.Domain.Share;
using Serilog;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion.Internal;
using Microsoft.Extensions.Options;
using System.Data;
using FellowOakDicom.Imaging;
using SharpCompress.Common;
using SixLabors.ImageSharp.Formats.Jpeg;
using IRaCIS.Core.Infrastructure;
namespace IRaCIS.Core.SCP.Service
{
public class DicomSCPServiceOption
{
public List<string> CalledAEList { get; set; }
public string ServerPort { get; set; }
}
public class CStoreSCPService : DicomService, IDicomServiceProvider, IDicomCStoreProvider, IDicomCEchoProvider
{
private IServiceProvider _serviceProvider { get; set; }
private List<Guid> _SCPStudyIdList { get; set; } = new List<Guid>();
private SCPImageUpload _upload { get; set; }
private Guid _trialId { get; set; }
private Guid _trialSiteId { get; set; }
private static readonly DicomTransferSyntax[] _acceptedTransferSyntaxes = new DicomTransferSyntax[]
{
DicomTransferSyntax.ExplicitVRLittleEndian,
DicomTransferSyntax.ExplicitVRBigEndian,
DicomTransferSyntax.ImplicitVRLittleEndian
};
private static readonly DicomTransferSyntax[] _acceptedImageTransferSyntaxes = new DicomTransferSyntax[]
{
// Lossless
DicomTransferSyntax.JPEGLSLossless, //1.2.840.10008.1.2.4.80
DicomTransferSyntax.JPEG2000Lossless, //1.2.840.10008.1.2.4.90
DicomTransferSyntax.JPEGProcess14SV1, //1.2.840.10008.1.2.4.70
DicomTransferSyntax.JPEGProcess14, //1.2.840.10008.1.2.4.57 JPEG Lossless, Non-Hierarchical (Process 14)
DicomTransferSyntax.RLELossless, //1.2.840.10008.1.2.5
// Lossy
DicomTransferSyntax.JPEGLSNearLossless,//1.2.840.10008.1.2.4.81"
DicomTransferSyntax.JPEG2000Lossy, //1.2.840.10008.1.2.4.91
DicomTransferSyntax.JPEGProcess1, //1.2.840.10008.1.2.4.50
DicomTransferSyntax.JPEGProcess2_4, //1.2.840.10008.1.2.4.51
// Uncompressed
DicomTransferSyntax.ExplicitVRLittleEndian, //1.2.840.10008.1.2.1
DicomTransferSyntax.ExplicitVRBigEndian, //1.2.840.10008.1.2.2
DicomTransferSyntax.ImplicitVRLittleEndian //1.2.840.10008.1.2
};
public CStoreSCPService(INetworkStream stream, Encoding fallbackEncoding, Microsoft.Extensions.Logging.ILogger log, DicomServiceDependencies dependencies)
: base(stream, fallbackEncoding, log, dependencies)
{
}
public Task OnReceiveAssociationRequestAsync(DicomAssociation association)
{
_upload = new SCPImageUpload() { StartTime = DateTime.Now, CallingAE = association.CallingAE, CalledAE = association.CalledAE, CallingAEIP = association.RemoteHost };
Log.Logger.Warning($"接收到来自{association.CallingAE}的连接");
_serviceProvider = (IServiceProvider)this.UserState;
var _trialDicomAERepository = _serviceProvider.GetService<IRepository<TrialDicomAE>>();
var trialDicomAEList = _trialDicomAERepository.Select(t => new { t.CalledAE, t.TrialId }).ToList();
var trialCalledAEList = trialDicomAEList.Select(t => t.CalledAE).ToList();
Log.Logger.Information("当前系统配置:", string.Join('|', trialDicomAEList));
var findCalledAE = trialDicomAEList.Where(t => t.CalledAE == association.CalledAE).FirstOrDefault();
var isCanReceiveIamge = false;
if (findCalledAE != null)
{
_trialId = findCalledAE.TrialId;
var _trialSiteDicomAERepository = _serviceProvider.GetService<IRepository<TrialSiteDicomAE>>();
var findTrialSiteAE = _trialSiteDicomAERepository.Where(t => t.CallingAE == association.CallingAE && t.TrialId==_trialId).FirstOrDefault();
if (findTrialSiteAE != null)
{
_trialSiteId = findTrialSiteAE.TrialSiteId;
isCanReceiveIamge = true;
}
}
if (association.CallingAE == "test-callingAE")
{
isCanReceiveIamge = true;
}
if (!trialCalledAEList.Contains(association.CalledAE) || isCanReceiveIamge == false)
{
Log.Logger.Warning($"拒绝CallingAE:{association.CallingAE} CalledAE:{association.CalledAE}的连接");
return SendAssociationRejectAsync(
DicomRejectResult.Permanent,
DicomRejectSource.ServiceUser,
DicomRejectReason.CalledAENotRecognized);
}
foreach (var pc in association.PresentationContexts)
{
if (pc.AbstractSyntax == DicomUID.Verification)
{
pc.AcceptTransferSyntaxes(_acceptedTransferSyntaxes);
}
else if (pc.AbstractSyntax.StorageCategory != DicomStorageCategory.None)
{
pc.AcceptTransferSyntaxes(_acceptedImageTransferSyntaxes);
}
}
return SendAssociationAcceptAsync(association);
}
public async Task OnReceiveAssociationReleaseRequestAsync()
{
await DataMaintenanceAsaync();
//记录监控
var _SCPImageUploadRepository = _serviceProvider.GetService<IRepository<SCPImageUpload>>();
_upload.EndTime = DateTime.Now;
_upload.StudyCount = _SCPStudyIdList.Count;
_upload.TrialId = _trialId;
_upload.TrialSiteId = _trialSiteId;
await _SCPImageUploadRepository.AddAsync(_upload, true);
await SendAssociationReleaseResponseAsync();
}
private async Task DataMaintenanceAsaync()
{
Log.Logger.Warning($"CallingAE:{Association.CallingAE} CalledAE:{Association.CalledAE}传输结束:开始维护数据,处理检查Modality");
//处理检查Modality
var _dictionaryRepository = _serviceProvider.GetService<IRepository<Dictionary>>();
var _seriesRepository = _serviceProvider.GetService<IRepository<SCPSeries>>();
var _studyRepository = _serviceProvider.GetService<IRepository<SCPStudy>>();
var dicModalityList = _dictionaryRepository.Where(t => t.Code == "Modality").SelectMany(t => t.ChildList.Select(c => c.Value)).ToList();
var seriesModalityList = _seriesRepository.Where(t => _SCPStudyIdList.Contains(t.StudyId)).Select(t => new { SCPStudyId = t.StudyId, t.Modality }).ToList();
foreach (var g in seriesModalityList.GroupBy(t => t.SCPStudyId))
{
var modality = string.Join('、', g.Select(t => t.Modality).Distinct().ToList());
//特殊逻辑
var modalityForEdit = dicModalityList.Contains(modality) ? modality : String.Empty;
if (modality == "MR")
{
modalityForEdit = "MRI";
}
if (modality == "PT")
{
modalityForEdit = "PET";
}
if (modality == "PT、CT" || modality == "CT、PT")
{
modalityForEdit = "PET-CT";
}
await _studyRepository.BatchUpdateNoTrackingAsync(t => t.Id == g.Key, u => new SCPStudy() { Modalities = modality, ModalityForEdit = modalityForEdit });
}
Log.Logger.Warning($"CallingAE:{Association.CallingAE} CalledAE:{Association.CalledAE}维护数据结束");
}
public void OnReceiveAbort(DicomAbortSource source, DicomAbortReason reason)
{
Log.Logger.Warning($"CallingAE:{Association.CallingAE} CalledAE:{Association.CalledAE}接收中断,中断原因:{source.ToString() + reason.ToString()}");
/* nothing to do here */
}
public async void OnConnectionClosed(Exception exception)
{
/* nothing to do here */
//奇怪的bug 上传的时候,用王捷修改的影像,会关闭,重新连接,导致检查id 丢失,然后状态不一致
if (exception == null)
{
var _studyRepository = _serviceProvider.GetService<IRepository<SCPStudy>>();
//将检查设置为传输结束
await _studyRepository.BatchUpdateNoTrackingAsync(t => _SCPStudyIdList.Contains(t.Id), u => new SCPStudy() { IsUploadFinished = true });
await _studyRepository.SaveChangesAndClearAllTrackingAsync();
}
Log.Logger.Warning($"连接关闭 {exception?.Message} {exception?.InnerException?.Message}");
}
public async Task<DicomCStoreResponse> OnCStoreRequestAsync(DicomCStoreRequest request)
{
string studyInstanceUid = request.Dataset.GetString(DicomTag.StudyInstanceUID);
string seriesInstanceUid = request.Dataset.GetString(DicomTag.SeriesInstanceUID);
string sopInstanceUid = request.Dataset.GetString(DicomTag.SOPInstanceUID);
//Guid studyId = IdentifierHelper.CreateGuid(studyInstanceUid, trialId.ToString());
Guid seriesId = IdentifierHelper.CreateGuid(studyInstanceUid, seriesInstanceUid, _trialId.ToString());
Guid instanceId = IdentifierHelper.CreateGuid(studyInstanceUid, seriesInstanceUid, sopInstanceUid, _trialId.ToString());
var ossService = _serviceProvider.GetService<IOSSService>();
var dicomArchiveService = _serviceProvider.GetService<IDicomArchiveService>();
var _seriesRepository = _serviceProvider.GetService<IRepository<SCPSeries>>();
var _distributedLockProvider = _serviceProvider.GetService<IDistributedLockProvider>();
var storeRelativePath = string.Empty;
var ossFolderPath = $"{_trialId}/Image/PACS/{_trialSiteId}{studyInstanceUid}";
long fileSize = 0;
try
{
using (MemoryStream ms = new MemoryStream())
{
await request.File.SaveAsync(ms);
//irc 从路径最后一截取Guid
storeRelativePath = await ossService.UploadToOSSAsync(ms, ossFolderPath, instanceId.ToString(), false);
fileSize = ms.Length;
}
Log.Logger.Information($"CallingAE:{Association.CallingAE} CalledAE:{Association.CalledAE} {request.SOPInstanceUID} 上传完成 ");
}
catch (Exception ec)
{
Log.Logger.Warning($"CallingAE:{Association.CallingAE} CalledAE:{Association.CalledAE} 上传异常 {ec.Message}");
}
var @lock = _distributedLockProvider.CreateLock($"{studyInstanceUid}");
using (await @lock.AcquireAsync())
{
try
{
var scpStudyId = await dicomArchiveService.ArchiveDicomFileAsync(request.Dataset, _trialId, _trialSiteId, storeRelativePath, Association.CallingAE, Association.CalledAE);
if (!_SCPStudyIdList.Contains(scpStudyId))
{
_SCPStudyIdList.Add(scpStudyId);
}
var series = await _seriesRepository.FindAsync(seriesId);
//没有缩略图
if (series != null && string.IsNullOrEmpty(series.ImageResizePath))
{
// 生成缩略图
using (var memoryStream = new MemoryStream())
{
DicomImage image = new DicomImage(request.Dataset);
var sharpimage = image.RenderImage().AsSharpImage();
sharpimage.Save(memoryStream, new JpegEncoder());
// 上传缩略图到 OSS
var seriesPath = await ossService.UploadToOSSAsync(memoryStream, ossFolderPath, seriesId.ToString() + ".preview.jpg", false);
Console.WriteLine(seriesPath + " Id: " + seriesId);
series.ImageResizePath = seriesPath;
}
}
await _seriesRepository.SaveChangesAsync();
}
catch (Exception ex)
{
Log.Logger.Warning($"CallingAE:{Association.CallingAE} CalledAE:{Association.CalledAE} 传输处理异常:{ex.ToString()}");
}
}
//监控信息设置
_upload.FileCount++;
_upload.FileSize = _upload.FileSize + fileSize;
return new DicomCStoreResponse(request, DicomStatus.Success);
}
public Task OnCStoreRequestExceptionAsync(string tempFileName, Exception e)
{
// let library handle logging and error response
return Task.CompletedTask;
}
public Task<DicomCEchoResponse> OnCEchoRequestAsync(DicomCEchoRequest request)
{
return Task.FromResult(new DicomCEchoResponse(request, DicomStatus.Success));
}
}
}
+352
View File
@@ -0,0 +1,352 @@
using IRaCIS.Core.Domain.Share;
using System.Text;
using Microsoft.AspNetCore.Hosting;
using IRaCIS.Core.Infrastructure;
using Medallion.Threading;
using FellowOakDicom;
using FellowOakDicom.Imaging.Codec;
using System.Data;
using IRaCIS.Core.Domain.Models;
using FellowOakDicom.Network;
using IRaCIS.Core.SCP.Service;
using IRaCIS.Core.Infra.EFCore;
using MassTransit;
using System.Runtime.Intrinsics.X86;
namespace IRaCIS.Core.SCP.Service
{
public class DicomArchiveService : BaseService, IDicomArchiveService
{
private readonly IRepository<SCPPatient> _patientRepository;
private readonly IRepository<SCPStudy> _studyRepository;
private readonly IRepository<SCPSeries> _seriesRepository;
private readonly IRepository<SCPInstance> _instanceRepository;
private readonly IRepository<Dictionary> _dictionaryRepository;
private readonly IDistributedLockProvider _distributedLockProvider;
private List<Guid> _instanceIdList = new List<Guid>();
public DicomArchiveService(IRepository<SCPPatient> patientRepository, IRepository<SCPStudy> studyRepository,
IRepository<SCPSeries> seriesRepository,
IRepository<SCPInstance> instanceRepository,
IRepository<Dictionary> dictionaryRepository,
IDistributedLockProvider distributedLockProvider)
{
_distributedLockProvider = distributedLockProvider;
_studyRepository = studyRepository;
_patientRepository = patientRepository;
_seriesRepository = seriesRepository;
_instanceRepository = instanceRepository;
_dictionaryRepository = dictionaryRepository;
}
/// <summary>
/// 单个文件接收 归档
/// </summary>
/// <param name="dataset"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public async Task<Guid> ArchiveDicomFileAsync(DicomDataset dataset, Guid trialId, Guid trialSiteId, string fileRelativePath, string callingAE, string calledAE)
{
string studyInstanceUid = dataset.GetString(DicomTag.StudyInstanceUID);
string seriesInstanceUid = dataset.GetString(DicomTag.SeriesInstanceUID);
string sopInstanceUid = dataset.GetString(DicomTag.SOPInstanceUID);
string patientIdStr = dataset.GetSingleValueOrDefault(DicomTag.PatientID,string.Empty);
//Guid patientId= IdentifierHelper.CreateGuid(patientIdStr);
Guid studyId = IdentifierHelper.CreateGuid(studyInstanceUid,trialId.ToString());
Guid seriesId = IdentifierHelper.CreateGuid(studyInstanceUid, seriesInstanceUid, trialId.ToString());
Guid instanceId = IdentifierHelper.CreateGuid(studyInstanceUid, seriesInstanceUid, sopInstanceUid, trialId.ToString());
var isStudyNeedAdd = false;
var isSeriesNeedAdd = false;
var isInstanceNeedAdd = false;
var isPatientNeedAdd = false;
//var @lock = _distributedLockProvider.CreateLock($"{studyInstanceUid}");
//using (@lock.Acquire())
{
var findPatient = await _patientRepository.FirstOrDefaultAsync(t => t.PatientIdStr == patientIdStr && t.TrialSiteId==trialSiteId );
var findStudy = await _studyRepository.FindAsync(studyId);
var findSerice = await _seriesRepository.FindAsync(seriesId);
var findInstance = await _instanceRepository.FindAsync(instanceId);
DateTime? studyTime = dataset.GetSingleValueOrDefault(DicomTag.StudyDate, string.Empty) == string.Empty ? null : dataset.GetSingleValue<DateTime>(DicomTag.StudyDate).Add(dataset.GetSingleValueOrDefault(DicomTag.StudyTime, string.Empty) == string.Empty ? TimeSpan.Zero : dataset.GetSingleValue<DateTime>(DicomTag.StudyTime).TimeOfDay);
//先传输了修改了患者编号的,又传输了没有修改患者编号的,导致后传输的没有修改患者编号的下面的检查为0
if (findPatient == null && findStudy==null)
{
isPatientNeedAdd = true;
findPatient = new SCPPatient()
{
Id = NewId.NextSequentialGuid(),
TrialId=trialId,
TrialSiteId=trialSiteId,
PatientIdStr = dataset.GetSingleValueOrDefault(DicomTag.PatientID, string.Empty),
PatientName = dataset.GetSingleValueOrDefault(DicomTag.PatientName, string.Empty),
PatientAge = dataset.GetSingleValueOrDefault(DicomTag.PatientAge, string.Empty),
PatientSex = dataset.GetSingleValueOrDefault(DicomTag.PatientSex, string.Empty),
PatientBirthDate = dataset.GetSingleValueOrDefault(DicomTag.PatientBirthDate, string.Empty),
EarliestStudyTime = studyTime,
LatestStudyTime = studyTime,
LatestPushTime = DateTime.Now,
};
if (findPatient.PatientBirthDate.Length == 8)
{
var birthDateStr = $"{findPatient.PatientBirthDate[0]}{findPatient.PatientBirthDate[1]}{findPatient.PatientBirthDate[2]}{findPatient.PatientBirthDate[3]}-{findPatient.PatientBirthDate[4]}{findPatient.PatientBirthDate[5]}-{findPatient.PatientBirthDate[6]}{findPatient.PatientBirthDate[7]}";
var yearStr = $"{findPatient.PatientBirthDate[0]}{findPatient.PatientBirthDate[1]}{findPatient.PatientBirthDate[2]}{findPatient.PatientBirthDate[3]}";
int year = 0;
var canParse = int.TryParse(yearStr, out year);
if (canParse && year > 1900)
{
findPatient.PatientBirthDate = birthDateStr;
DateTime birthDate;
if (findPatient.PatientAge == string.Empty && studyTime.HasValue && DateTime.TryParse(findPatient.PatientBirthDate,out birthDate))
{
var patientAge = studyTime.Value.Year - birthDate.Year;
// 如果生日还未到,年龄减去一岁
if (studyTime.Value < birthDate.AddYears(patientAge))
{
patientAge--;
}
findPatient.PatientAge = patientAge.ToString();
}
}
else
{
findPatient.PatientBirthDate = string.Empty;
}
}
}
else
{
if (studyTime < findPatient.EarliestStudyTime)
{
findPatient.EarliestStudyTime = studyTime;
}
if (studyTime > findPatient.LatestStudyTime)
{
findPatient.LatestStudyTime = studyTime;
}
findPatient.LatestPushTime = DateTime.Now;
}
if (findStudy == null)
{
isStudyNeedAdd = true;
findStudy = new SCPStudy
{
CalledAE = calledAE,
CallingAE = callingAE,
PatientId = findPatient.Id,
Id = studyId,
TrialId = trialId,
TrialSiteId = trialSiteId,
StudyInstanceUid = studyInstanceUid,
StudyTime = studyTime,
Modalities = dataset.GetSingleValueOrDefault(DicomTag.Modality, string.Empty),
//ModalityForEdit = modalityForEdit,
Description = dataset.GetSingleValueOrDefault(DicomTag.StudyDescription, string.Empty),
InstitutionName = dataset.GetSingleValueOrDefault(DicomTag.InstitutionName, string.Empty),
PatientIdStr = dataset.GetSingleValueOrDefault(DicomTag.PatientID, string.Empty),
PatientName = dataset.GetSingleValueOrDefault(DicomTag.PatientName, string.Empty),
PatientAge = dataset.GetSingleValueOrDefault(DicomTag.PatientAge, string.Empty),
PatientSex = dataset.GetSingleValueOrDefault(DicomTag.PatientSex, string.Empty),
BodyPartExamined = dataset.GetSingleValueOrDefault(DicomTag.BodyPartExamined, string.Empty),
StudyId = dataset.GetSingleValueOrDefault(DicomTag.StudyID, string.Empty),
AccessionNumber = dataset.GetSingleValueOrDefault(DicomTag.AccessionNumber, string.Empty),
//需要特殊处理
PatientBirthDate = dataset.GetSingleValueOrDefault(DicomTag.PatientBirthDate, string.Empty),
AcquisitionTime = dataset.GetSingleValueOrDefault(DicomTag.AcquisitionTime, string.Empty),
AcquisitionNumber = dataset.GetSingleValueOrDefault(DicomTag.AcquisitionNumber, string.Empty),
TriggerTime = dataset.GetSingleValueOrDefault(DicomTag.TriggerTime, string.Empty),
//IsDoubleReview = addtionalInfo.IsDoubleReview,
SeriesCount = 0,
InstanceCount = 0
};
if (findStudy.PatientBirthDate.Length == 8)
{
findStudy.PatientBirthDate = $"{findStudy.PatientBirthDate[0]}{findStudy.PatientBirthDate[1]}{findStudy.PatientBirthDate[2]}{findStudy.PatientBirthDate[3]}-{findStudy.PatientBirthDate[4]}{findStudy.PatientBirthDate[5]}-{findStudy.PatientBirthDate[6]}{findStudy.PatientBirthDate[7]}";
}
}
if (findSerice == null)
{
isSeriesNeedAdd = true;
findSerice = new SCPSeries
{
Id = seriesId,
StudyId = findStudy.Id,
StudyInstanceUid = findStudy.StudyInstanceUid,
SeriesInstanceUid = seriesInstanceUid,
SeriesNumber = dataset.GetSingleValueOrDefault(DicomTag.SeriesNumber, 1),
//SeriesTime = dataset.GetSingleValueOrDefault(DicomTag.SeriesDate, DateTime.Now).Add(dataset.GetSingleValueOrDefault(DicomTag.SeriesTime, DateTime.Now).TimeOfDay),
//SeriesTime = DateTime.TryParse(dataset.GetSingleValue<string>(DicomTag.SeriesDate) + dataset.GetSingleValue<string>(DicomTag.SeriesTime), out DateTime dt) ? dt : null,
SeriesTime = dataset.GetSingleValueOrDefault(DicomTag.SeriesDate, string.Empty) == string.Empty ? null : dataset.GetSingleValue<DateTime>(DicomTag.SeriesDate).Add(dataset.GetSingleValueOrDefault(DicomTag.SeriesTime, string.Empty) == string.Empty ? TimeSpan.Zero : dataset.GetSingleValue<DateTime>(DicomTag.SeriesTime).TimeOfDay),
Modality = dataset.GetSingleValueOrDefault(DicomTag.Modality, string.Empty),
Description = dataset.GetSingleValueOrDefault(DicomTag.SeriesDescription, string.Empty),
SliceThickness = dataset.GetSingleValueOrDefault(DicomTag.SliceThickness, string.Empty),
ImagePositionPatient = dataset.GetSingleValueOrDefault(DicomTag.ImagePositionPatient, string.Empty),
ImageOrientationPatient = dataset.GetSingleValueOrDefault(DicomTag.ImageOrientationPatient, string.Empty),
BodyPartExamined = dataset.GetSingleValueOrDefault(DicomTag.BodyPartExamined, string.Empty),
SequenceName = dataset.GetSingleValueOrDefault(DicomTag.SequenceName, string.Empty),
ProtocolName = dataset.GetSingleValueOrDefault(DicomTag.ProtocolName, string.Empty),
ImagerPixelSpacing = dataset.GetSingleValueOrDefault(DicomTag.ImagerPixelSpacing, string.Empty),
AcquisitionTime = dataset.GetSingleValueOrDefault(DicomTag.AcquisitionTime, string.Empty),
AcquisitionNumber = dataset.GetSingleValueOrDefault(DicomTag.AcquisitionNumber, string.Empty),
TriggerTime = dataset.GetSingleValueOrDefault(DicomTag.TriggerTime, string.Empty),
InstanceCount = 0
};
++findStudy.SeriesCount;
}
if (findInstance == null)
{
isInstanceNeedAdd = true;
findInstance = new SCPInstance
{
Id = instanceId,
StudyId = findStudy.Id,
SeriesId = findSerice.Id,
StudyInstanceUid = findStudy.StudyInstanceUid,
SeriesInstanceUid = findSerice.SeriesInstanceUid,
SopInstanceUid = sopInstanceUid,
InstanceNumber = dataset.GetSingleValueOrDefault(DicomTag.InstanceNumber, 1),
InstanceTime = dataset.GetSingleValueOrDefault(DicomTag.ContentDate, string.Empty) == string.Empty ? null : dataset.GetSingleValue<DateTime>(DicomTag.ContentDate).Add(dataset.GetSingleValueOrDefault(DicomTag.ContentTime, string.Empty) == string.Empty ? TimeSpan.Zero : dataset.GetSingleValue<DateTime>(DicomTag.ContentTime).TimeOfDay),
//InstanceTime = DateTime.TryParse(dataset.GetSingleValue<string>(DicomTag.ContentDate) + dataset.GetSingleValue<string>(DicomTag.ContentTime), out DateTime dt) ? dt : null,
//InstanceTime = dataset.GetSingleValueOrDefault(DicomTag.ContentDate,(DateTime?)null)?.Add(dataset.GetSingleValueOrDefault(DicomTag.ContentTime, TimeSpan.Zero)),
//dataset.GetSingleValueOrDefault(DicomTag.ContentDate,DateTime.Now);//, DicomTag.ContentTime)
CPIStatus = false,
ImageRows = dataset.GetSingleValueOrDefault(DicomTag.Rows, 0),
ImageColumns = dataset.GetSingleValueOrDefault(DicomTag.Columns, 0),
SliceLocation = dataset.GetSingleValueOrDefault(DicomTag.SliceLocation, 0),
SliceThickness = dataset.GetSingleValueOrDefault(DicomTag.SliceThickness, string.Empty),
NumberOfFrames = dataset.GetSingleValueOrDefault(DicomTag.NumberOfFrames, 0),
PixelSpacing = dataset.GetSingleValueOrDefault(DicomTag.PixelSpacing, string.Empty),
ImagerPixelSpacing = dataset.GetSingleValueOrDefault(DicomTag.ImagerPixelSpacing, string.Empty),
FrameOfReferenceUID = dataset.GetSingleValueOrDefault(DicomTag.FrameOfReferenceUID, string.Empty),
WindowCenter = dataset.GetSingleValueOrDefault(DicomTag.WindowCenter, string.Empty),
WindowWidth = dataset.GetSingleValueOrDefault(DicomTag.WindowWidth, string.Empty),
Path = fileRelativePath
};
++findStudy.InstanceCount;
++findSerice.InstanceCount;
}
if (isPatientNeedAdd)
{
var ss = await _patientRepository.AddAsync(findPatient);
}
if (isStudyNeedAdd)
{
var dd = await _studyRepository.AddAsync(findStudy);
}
else
{
await _studyRepository.BatchUpdateNoTrackingAsync(t => t.Id == findStudy.Id, t => new SCPStudy() { IsUploadFinished = false });
}
if (isSeriesNeedAdd)
{
await _seriesRepository.AddAsync(findSerice);
}
if (isInstanceNeedAdd)
{
await _instanceRepository.AddAsync(findInstance);
}
else
{
await _instanceRepository.BatchUpdateNoTrackingAsync(t => t.Id == instanceId, u => new SCPInstance() { Path = fileRelativePath });
}
//await _studyRepository.SaveChangesAsync();
return findStudy.Id;
}
}
// 从DICOM文件中获取使用的字符集
private string GetEncodingVaulueFromDicomFile(DicomDataset dataset, DicomTag dicomTag)
{
// 获取DICOM文件的特定元素,通常用于指示使用的字符集
var charset = dataset.GetSingleValueOrDefault(DicomTag.SpecificCharacterSet, string.Empty);
var dicomEncoding = DicomEncoding.GetEncoding(charset);
var dicomStringElement = dataset.GetDicomItem<DicomStringElement>(dicomTag);
var bytes = dicomStringElement.Buffer.Data;
return dicomEncoding.GetString(bytes);
//// 从DICOM文件中获取使用的字符集
//string filePath = "C:\\Users\\hang\\Documents\\WeChat Files\\wxid_r2imdzb7j3q922\\FileStorage\\File\\2024-05\\1.2.840.113619.2.80.169103990.5390.1271401378.4.dcm";
//DicomFile dicomFile = DicomFile.Open(filePath);
//// 获取DICOM文件的特定元素,通常用于指示使用的字符集
//var charset = dicomFile.Dataset.GetSingleValueOrDefault(DicomTag.SpecificCharacterSet, string.Empty);
//var dicomEncoding = DicomEncoding.GetEncoding(charset);
//var value = dicomFile.Dataset.GetSingleValueOrDefault(DicomTag.PatientName, string.Empty);
//var dicomStringElement = dicomFile.Dataset.GetDicomItem<DicomStringElement>(DicomTag.PatientName);
//var bytes = dicomStringElement.Buffer.Data;
//var aa= dicomEncoding.GetString(bytes);
}
}
}
@@ -0,0 +1,11 @@
using FellowOakDicom;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion.Internal;
namespace IRaCIS.Core.SCP.Service
{
public interface IDicomArchiveService
{
Task<Guid> ArchiveDicomFileAsync(DicomDataset dicomDataset,Guid trialId,Guid trialSiteId, string fileRelativePath,string callingAE,string calledAE);
}
}
+442
View File
@@ -0,0 +1,442 @@
using Aliyun.OSS;
using IRaCIS.Core.Infrastructure;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Options;
using Minio.DataModel.Args;
using Minio;
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 System.Runtime.InteropServices;
namespace IRaCIS.Core.SCP
{
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 internalEndpoint { 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, bool isFileNameAddGuid = true);
public Task<string> UploadToOSSAsync(string localFilePath, string oosFolderPath, bool isFileNameAddGuid = true);
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>
/// <param name="isFileNameAddGuid"></param>
/// <returns></returns>
public async Task<string> UploadToOSSAsync(Stream fileStream, string oosFolderPath, string fileRealName, bool isFileNameAddGuid = true)
{
var ossRelativePath = isFileNameAddGuid ? $"{oosFolderPath}/{Guid.NewGuid()}_{fileRealName}" : $"{oosFolderPath}/{fileRealName}";
//var ossRelativePath = $"{oosFolderPath}/{Guid.NewGuid()}_{fileRealName}";
//var ossRelativePath = oosFolderPath + "/" + fileRealName;
try
{
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(RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? aliConfig.endPoint : aliConfig.internalEndpoint, 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("未定义的存储介质类型");
}
}
}
catch (Exception ex)
{
throw new BusinessValidationFailedException($"上传发生异常:{ex.Message}");
}
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, bool isFileNameAddGuid = true)
{
var localFileName = Path.GetFileName(localFilePath);
var ossRelativePath = isFileNameAddGuid ? $"{oosFolderPath}/{Guid.NewGuid()}_{localFileName}" : $"{oosFolderPath}/{localFileName}";
//var ossRelativePath = oosFolderPath + "/" + localFileName;
if (ObjectStoreServiceOptions.ObjectStoreUse == "AliyunOSS")
{
var aliConfig = ObjectStoreServiceOptions.AliyunOSS;
var _ossClient = new OssClient(RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? aliConfig.endPoint : aliConfig.internalEndpoint, 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(RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? aliConfig.endPoint : aliConfig.internalEndpoint, 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(RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? aliConfig.endPoint : aliConfig.internalEndpoint, 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 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();
var args = new PresignedGetObjectArgs()
.WithBucket(minIOConfig.bucketName)
.WithObject(ossRelativePath)
.WithExpiry(3600);
var presignedUrl = await minioClient.PresignedGetObjectAsync(args);
Uri uri = new Uri(presignedUrl);
string relativePath = uri.PathAndQuery;
return relativePath;
}
else
{
throw new BusinessValidationFailedException("未定义的存储介质类型");
}
}
catch (Exception ex)
{
throw new BusinessValidationFailedException("oss授权url失败!" + ex.Message);
}
}
}
}
@@ -10,12 +10,13 @@
"ObjectStoreUse": "AliyunOSS",
"AliyunOSS": {
"regionId": "cn-shanghai",
"internalEndpoint": "https://oss-cn-shanghai-internal.aliyuncs.com",
"endpoint": "https://oss-cn-shanghai.aliyuncs.com",
"accessKeyId": "LTAI5tKvzs7ed3UfSpNk3xwQ",
"accessKeySecret": "zTIceGEShlZDGnLrCFfIGFE7TXVRio",
"bucketName": "zy-sir-store",
"bucketName": "zy-irc-store",
"roleArn": "acs:ram::1899121822495495:role/oss-upload",
"viewEndpoint": "https://zy-sir-cache.oss-cn-shanghai.aliyuncs.com",
"viewEndpoint": "https://zy-irc-cache.oss-cn-shanghai.aliyuncs.com",
"region": "oss-cn-shanghai"
},
@@ -30,10 +31,8 @@
},
"ConnectionStrings": {
//"RemoteNew": "Server=47.117.165.18,1434;Database=Prod_Study;User ID=sa;Password=zhanying@2021;TrustServerCertificate=true",
//"Hangfire": "Server=47.117.165.18,1434;Database=Prod_Study_Hangfire;User ID=sa;Password=zhanying@2021;TrustServerCertificate=true",
"RemoteNew": "Server=prod_mssql_standard,1433;Database=Prod_Study;User ID=sa;Password=zhanying@2021;TrustServerCertificate=true",
"Hangfire": "Server=prod_mssql_standard,1433;Database=Prod_Study_Hangfire;User ID=sa;Password=zhanying@2021;TrustServerCertificate=true"
"RemoteNew": "Server=us-prod-mssql-service,1433;Database=US_IRC;User ID=sa;Password=xc@123456;TrustServerCertificate=true",
"Hangfire": "Server=us-prod-mssql-service,1433;Database=US_IRC_Hangfire;User ID=sa;Password=xc@123456;TrustServerCertificate=true"
},
"BasicSystemConfig": {
@@ -10,23 +10,24 @@
"ObjectStoreUse": "AliyunOSS",
"AliyunOSS": {
"regionId": "cn-shanghai",
"endpoint": "https://oss-cn-shanghai.aliyuncs.com",
"internalEndpoint": "https://oss-cn-shanghai-internal.aliyuncs.com",
"endPoint": "https://oss-cn-shanghai.aliyuncs.com",
"accessKeyId": "LTAI5tKvzs7ed3UfSpNk3xwQ",
"accessKeySecret": "zTIceGEShlZDGnLrCFfIGFE7TXVRio",
"bucketName": "zy-sir-test-store",
"bucketName": "zy-irc-test-store",
"roleArn": "acs:ram::1899121822495495:role/oss-upload",
"viewEndpoint": "https://zy-sir-test-store.oss-cn-shanghai.aliyuncs.com",
"viewEndpoint": "https://zy-irc-test-store.oss-cn-shanghai.aliyuncs.com",
"region": "oss-cn-shanghai"
},
"MinIO": {
"endPoint": "123.56.94.154",
"endPoint": "106.14.89.110",
"port": "9001",
"useSSL": true,
"useSSL": false,
"accessKey": "fbStsVYCIPKHQneeqMwD",
"secretKey": "TzgvyA3zGXMUnpilJNUlyMYHfosl1hBMl6lxPmjy",
"bucketName": "study-test",
"viewEndpoint": "http://study.test.extimaging.com/oss/study-test"
"bucketName": "hir-test",
"viewEndpoint": "http://106.14.89.110:9001/hir-test/"
},
"AWS": {
@@ -40,8 +41,8 @@
},
"ConnectionStrings": {
"RemoteNew": "Server=106.14.89.110,1435;Database=Test_Study;User ID=sa;Password=xc@123456;TrustServerCertificate=true",
"Hangfire": "Server=106.14.89.110,1435;Database=Test_Study_Hangfire;User ID=sa;Password=xc@123456;TrustServerCertificate=true"
"RemoteNew": "Server=106.14.89.110,1435;Database=Test_IRC;User ID=sa;Password=xc@123456;TrustServerCertificate=true",
"Hangfire": "Server=106.14.89.110,1435;Database=Test_IRC_Hangfire;User ID=sa;Password=xc@123456;TrustServerCertificate=true"
},
"BasicSystemConfig": {
@@ -66,6 +67,14 @@
"AuthorizationCode": "zhanying123",
"SiteUrl": "http://study.test.extimaging.com/login"
},
"DicomSCPServiceConfig": {
"CalledAEList": [
"STORESCP",
"Value1",
"Value2",
"Value3"
],
"ServerPort": 11112
}
}
+67
View File
@@ -0,0 +1,67 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"ObjectStoreService": {
"ObjectStoreUse": "AliyunOSS",
"AliyunOSS": {
"regionId": "cn-shanghai",
"internalEndpoint": "https://oss-cn-shanghai-internal.aliyuncs.com",
"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"
},
"AWS": {
"endPoint": "s3.us-east-1.amazonaws.com",
"useSSL": false,
"accessKey": "AKIAZQ3DRSOHFPJJ6FEU",
"secretKey": "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",
"bucketName": "ei-irc-test-store",
"viewEndpoint": "https://ei-irc-test-store.s3.amazonaws.com/"
}
},
"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"
},
"BasicSystemConfig": {
"OpenUserComplexPassword": false,
"OpenSignDocumentBeforeWork": false,
"OpenTrialRelationDelete": true,
"OpenLoginLimit": false,
"LoginMaxFailCount": 5,
"LoginFailLockMinutes": 30
},
"SystemEmailSendConfig": {
"Port": 465,
"Host": "smtp.qiye.aliyun.com",
"FromEmail": "uat-study@extimaging.com",
"FromName": "Uat_Study",
"AuthorizationCode": "zhanying123",
"SiteUrl": "http://study.uat.extimaging.com/login"
},
"DicomSCPServiceConfig": {
"CalledAEList": [
"STORESCP",
"Value1",
"Value2",
"Value3"
],
"ServerPort": 11112
}
}
+9
View File
@@ -0,0 +1,9 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}
+6
View File
@@ -17,6 +17,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IRaCIS.Core.Infra.EFCore",
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IRaCIS.Core.Infrastructure", "IRaCIS.Core.Infrastructure\IRaCIS.Core.Infrastructure.csproj", "{07EED0F8-08E6-46F3-ACBE-17BC1391BD4C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IRC.Core.SCP", "IRC.Core.SCP\IRC.Core.SCP.csproj", "{ECD08F47-DC1A-484E-BB91-6CDDC8823CC5}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -51,6 +53,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
{ECD08F47-DC1A-484E-BB91-6CDDC8823CC5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{ECD08F47-DC1A-484E-BB91-6CDDC8823CC5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{ECD08F47-DC1A-484E-BB91-6CDDC8823CC5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{ECD08F47-DC1A-484E-BB91-6CDDC8823CC5}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
+99
View File
@@ -0,0 +1,99 @@
using System;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using Microsoft.EntityFrameworkCore;
namespace EFSaving.Concurrency
{
public class Sample
{
public static void Run()
{
// Ensure database is created and has a person in it
using (var setupContext = new PersonContext())
{
setupContext.Database.EnsureDeleted();
setupContext.Database.EnsureCreated();
setupContext.People.Add(new Person { FirstName = "John", LastName = "Doe" });
setupContext.SaveChanges();
}
#region ConcurrencyHandlingCode
using var context = new PersonContext();
// Fetch a person from database and change phone number
var person = context.People.Single(p => p.PersonId == 1);
person.PhoneNumber = "555-555-5555";
// Change the person's name in the database to simulate a concurrency conflict
context.Database.ExecuteSqlRaw(
"UPDATE dbo.People SET FirstName = 'Jane' WHERE PersonId = 1");
var saved = false;
while (!saved)
{
try
{
// Attempt to save changes to the database
context.SaveChanges();
saved = true;
}
catch (DbUpdateConcurrencyException ex)
{
foreach (var entry in ex.Entries)
{
if (entry.Entity is Person)
{
var proposedValues = entry.CurrentValues;
var databaseValues = entry.GetDatabaseValues();
foreach (var property in proposedValues.Properties)
{
var proposedValue = proposedValues[property];
var databaseValue = databaseValues[property];
// TODO: decide which value should be written to database
// proposedValues[property] = <value to be saved>;
}
// Refresh original values to bypass next concurrency check
entry.OriginalValues.SetValues(databaseValues);
}
else
{
throw new NotSupportedException(
"Don't know how to handle concurrency conflicts for "
+ entry.Metadata.Name);
}
}
}
}
#endregion
}
public class PersonContext : DbContext
{
public DbSet<Person> People { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
// Requires NuGet package Microsoft.EntityFrameworkCore.SqlServer
optionsBuilder.UseSqlServer(
@"Server=(localdb)\mssqllocaldb;Database=EFSaving.Concurrency;Trusted_Connection=True");
}
}
public class Person
{
public int PersonId { get; set; }
[ConcurrencyCheck]
public string FirstName { get; set; }
[ConcurrencyCheck]
public string LastName { get; set; }
public string PhoneNumber { get; set; }
}
}
}
-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
}
]
}
+233 -101
View File
@@ -21,13 +21,18 @@ using IRaCIS.Core.Domain.Models;
using IRaCIS.Core.Infrastructure;
using System.Linq;
using Microsoft.Extensions.Logging;
using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Profile;
using Aliyun.Acs.Sts.Model.V20150401;
using Microsoft.AspNetCore.Hosting;
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;
using DocumentFormat.OpenXml.Spreadsheet;
using AutoMapper.QueryableExtensions;
using NetTopologySuite.Algorithm;
namespace IRaCIS.Api.Controllers
{
@@ -39,101 +44,252 @@ namespace IRaCIS.Api.Controllers
{
/// <summary>
/// 获取医生详情
/// </summary>
/// <param name="attachmentService"></param>
/// <param name="_doctorService"></param>
/// <param name="_educationService"></param>
/// <param name="_trialExperienceService"></param>
/// <param name="_researchPublicationService"></param>
/// <param name="_vacationService"></param>
/// <param name="doctorId"></param>
/// <returns></returns>
[HttpGet, Route("doctor/getDetail/{doctorId:guid}")]
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);
var sowList = _doctorService.GetDoctorSowList(doctorId);
var ackSowList = _doctorService.GetDoctorAckSowList(doctorId);
var doctorDetail = new DoctorDetailDTO
{
AuditView = await _doctorService.GetAuditState(doctorId),
BasicInfoView = await _doctorService.GetBasicInfo(doctorId),
EmploymentView = await _doctorService.GetEmploymentInfo(doctorId),
AttachmentList = await attachmentService.GetAttachments(doctorId),
EducationList = education.EducationList,
PostgraduateList = education.PostgraduateList,
TrialExperienceView = await _trialExperienceService.GetTrialExperience(doctorId),
ResearchPublicationView = await _researchPublicationService.GetResearchPublication(doctorId),
SpecialtyView = await _doctorService.GetSpecialtyInfo(doctorId),
InHoliday = (await _vacationService.OnVacation(doctorId)).IsSuccess,
IntoGroupInfo = _doctorService.GetDoctorIntoGroupInfo(doctorId),
SowList = sowList,
AckSowList = ackSowList
};
return ResponseOutput.Ok(doctorDetail);
}
/// <summary> 系统用户登录接口[New] </summary>
[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)
public async Task<IResponseOutput> Login(UserLoginDTO loginUser,
[FromServices] IEasyCachingProvider provider,
[FromServices] IUserService _userService,
[FromServices] ITokenService _tokenService,
[FromServices] IReadingImageTaskService readingImageTaskService,
IOptionsMonitor<ServiceVerifyConfigOption> _verifyConfig,
IMailVerificationService _mailVerificationService)
{
var returnModel = await _userService.Login(loginUser.UserName, loginUser.Password);
if (returnModel.IsSuccess)
//MFA 邮箱验证 前端传递用户Id 和MFACode
if (loginUser.UserId != null && _verifyConfig.CurrentValue.OpenLoginMFA)
{
#region GRPC IIS问题 http/2 使
Guid userId = (Guid)loginUser.UserId;
////重试策略
//var defaultMethodConfig = new MethodConfig
//{
// Names = { MethodName.Default },
// RetryPolicy = new RetryPolicy
// {
// MaxAttempts = 3,
// InitialBackoff = TimeSpan.FromSeconds(1),
// MaxBackoff = TimeSpan.FromSeconds(5),
// BackoffMultiplier = 1.5,
// RetryableStatusCodes = { Grpc.Core.StatusCode.Unavailable }
// }
//};
//验证MFA 编码是否有问题 ,前端要拆开,自己调用验证的逻辑
//await _userService.VerifyMFACodeAsync(userId, loginUser.MFACode);
//#region unable to trust the certificate then the gRPC client can be configured to ignore the invalid certificate
//var loginUser = await _userRepository.Where(u => u.UserName.Equals(userName) && u.Password == password).ProjectTo<UserBasicInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync();
//var httpHandler = new HttpClientHandler();
//// Return `true` to allow certificates that are untrusted/invalid
//httpHandler.ServerCertificateCustomValidationCallback =
// HttpClientHandler.DangerousAcceptAnyServerCertificateValidator;
var basicInfo = await _userService.GetUserBasicInfo(userId, loginUser.Password);
var loginReturn = new LoginReturnDTO() { BasicInfo = basicInfo };
//////这一句是让grpc支持本地 http 如果本地访问部署在服务器上,那么是访问不成功的
//AppContext.SetSwitch(
// "System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
loginReturn.JWTStr = _tokenService.GetToken(IRaCISClaims.Create(loginReturn.BasicInfo));
//#endregion
//var grpcAdress = configuration.GetValue<string>("GrpcAddress");
////var grpcAdress = "http://localhost:7200";
//var channel = GrpcChannel.ForAddress(grpcAdress, new GrpcChannelOptions
//{
// HttpHandler = httpHandler,
// ServiceConfig = new ServiceConfig { MethodConfigs = { defaultMethodConfig } }
//});
////var channel = GrpcChannel.ForAddress(grpcAdress);
//var grpcClient = new TokenGrpcService.TokenGrpcServiceClient(channel);
//var userInfo = returnModel.Data.BasicInfo;
//var tokenResponse = grpcClient.GetUserToken(new GetTokenReuqest()
//{
// Id = userInfo.Id.ToString(),
// ReviewerCode = userInfo.ReviewerCode,
// IsAdmin = userInfo.IsAdmin,
// RealName = userInfo.RealName,
// UserTypeEnumInt = (int)userInfo.UserTypeEnum,
// UserTypeShortName = userInfo.UserTypeShortName,
// UserName = userInfo.UserName
//});
//returnModel.Data.JWTStr = tokenResponse.Token;
#endregion
returnModel.Data.JWTStr = _tokenService.GetToken(IRaCISClaims.Create(returnModel.Data.BasicInfo));
// 创建一个 CookieOptions 对象,用于设置 Cookie 的属性
var option = new CookieOptions
{
Expires = DateTime.Now.AddMonths(1),
HttpOnly = true, // 确保 cookie 只能通过 HTTP 访问
SameSite = Microsoft.AspNetCore.Http.SameSiteMode.Unspecified, // 设置 SameSite 属性
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);
HttpContext.Response.Cookies.Append("access_token", loginReturn.JWTStr, option);
// 验证阅片休息时间
await readingImageTaskService.ResetReadingRestTime(userId);
await provider.SetAsync(userId.ToString(), loginReturn.JWTStr, TimeSpan.FromDays(7));
await provider.SetAsync($"{userId.ToString()}_Online", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), TimeSpan.FromMinutes(_verifyConfig.CurrentValue.AutoLoginOutMinutes));
return ResponseOutput.Ok(loginReturn);
}
else
{
var returnModel = await _userService.Login(loginUser.UserName, loginUser.Password);
if (returnModel.IsSuccess)
{
#region GRPC IIS问题 http/2 使
////重试策略
//var defaultMethodConfig = new MethodConfig
//{
// Names = { MethodName.Default },
// RetryPolicy = new RetryPolicy
// {
// MaxAttempts = 3,
// InitialBackoff = TimeSpan.FromSeconds(1),
// MaxBackoff = TimeSpan.FromSeconds(5),
// BackoffMultiplier = 1.5,
// RetryableStatusCodes = { Grpc.Core.StatusCode.Unavailable }
// }
//};
//#region unable to trust the certificate then the gRPC client can be configured to ignore the invalid certificate
//var httpHandler = new HttpClientHandler();
//// Return `true` to allow certificates that are untrusted/invalid
//httpHandler.ServerCertificateCustomValidationCallback =
// HttpClientHandler.DangerousAcceptAnyServerCertificateValidator;
//////这一句是让grpc支持本地 http 如果本地访问部署在服务器上,那么是访问不成功的
//AppContext.SetSwitch(
// "System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
//#endregion
//var grpcAdress = configuration.GetValue<string>("GrpcAddress");
////var grpcAdress = "http://localhost:7200";
//var channel = GrpcChannel.ForAddress(grpcAdress, new GrpcChannelOptions
//{
// HttpHandler = httpHandler,
// ServiceConfig = new ServiceConfig { MethodConfigs = { defaultMethodConfig } }
//});
////var channel = GrpcChannel.ForAddress(grpcAdress);
//var grpcClient = new TokenGrpcService.TokenGrpcServiceClient(channel);
//var userInfo = returnModel.Data.BasicInfo;
//var tokenResponse = grpcClient.GetUserToken(new GetTokenReuqest()
//{
// Id = userInfo.Id.ToString(),
// ReviewerCode = userInfo.ReviewerCode,
// IsAdmin = userInfo.IsAdmin,
// RealName = userInfo.RealName,
// UserTypeEnumInt = (int)userInfo.UserTypeEnum,
// UserTypeShortName = userInfo.UserTypeShortName,
// UserName = userInfo.UserName
//});
//returnModel.Data.JWTStr = tokenResponse.Token;
#endregion
var userId = returnModel.Data.BasicInfo.Id;
if (_verifyConfig.CurrentValue.OpenLoginMFA)
{
//发版屏蔽
//returnModel.Data.JWTStr = _tokenService.GetToken(IRaCISClaims.Create(returnModel.Data.BasicInfo));
//MFA 发送邮件
returnModel.Data.IsMFA = true;
var email = returnModel.Data.BasicInfo.EMail;
var hiddenEmail = EmailMaskHelper.MaskEmail(email);
returnModel.Data.BasicInfo.EMail = hiddenEmail;
await _userService.SendMFAEmail(userId);
}
else
{
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);
// 验证阅片休息时间
await readingImageTaskService.ResetReadingRestTime(returnModel.Data.BasicInfo.Id);
await provider.SetAsync(userId.ToString(), returnModel.Data.JWTStr, TimeSpan.FromDays(7));
await provider.SetAsync($"{userId.ToString()}_Online", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), TimeSpan.FromMinutes(_verifyConfig.CurrentValue.AutoLoginOutMinutes));
}
}
return returnModel;
}
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));
return returnModel;
}
[HttpGet, Route("imageShare/ShareImage")]
[AllowAnonymous]
public IResponseOutput ShareImage([FromServices] ITokenService _tokenService)
{
var token = _tokenService.GetToken(IRaCISClaims.Create(new UserBasicInfo()
{
Id = Guid.Empty,
IsReviewer = false,
IsAdmin = false,
RealName = "Share001",
UserName = "Share001",
Sex = 0,
//UserType = "ShareType",
UserTypeEnum = UserTypeEnum.ShareImage,
Code = "ShareCode001",
}));
return ResponseOutput.Ok("/showdicom?studyId=f7b67793-8155-0223-2f15-118f2642efb8&type=Share&token=" + token);
}
[HttpGet("user/GetObjectStoreToken")]
@@ -227,9 +383,9 @@ namespace IRaCIS.Api.Controllers
SecurityToken = response.Credentials.SecurityToken,
Expiration = response.Credentials.Expiration,
Region = ossOptions.region ,
BucketName = ossOptions.bucketName ,
ViewEndpoint = ossOptions.viewEndpoint ,
Region = ossOptions.region,
BucketName = ossOptions.bucketName,
ViewEndpoint = ossOptions.viewEndpoint,
};
@@ -239,30 +395,6 @@ namespace IRaCIS.Api.Controllers
[HttpGet, Route("imageShare/ShareImage")]
[AllowAnonymous]
public IResponseOutput ShareImage([FromServices] ITokenService _tokenService)
{
var token = _tokenService.GetToken(IRaCISClaims.Create(new UserBasicInfo()
{
Id = Guid.Empty,
IsReviewer = false,
IsAdmin = false,
RealName = "Share001",
UserName = "Share001",
Sex = 0,
//UserType = "ShareType",
UserTypeEnum = UserTypeEnum.ShareImage,
Code = "ShareCode001",
}));
return ResponseOutput.Ok("/showdicom?studyId=f7b67793-8155-0223-2f15-118f2642efb8&type=Share&token=" + token);
}
[HttpGet("User/UserRedirect")]
[AllowAnonymous]
public async Task<IActionResult> UserRedirect([FromServices] IRepository<User> _userRepository, string url, [FromServices] ILogger<ExtraController> _logger)
@@ -22,14 +22,14 @@ namespace IRaCIS.Core.API.Controllers.Special
public class FinancialChangeController : ControllerBase
{
private readonly ITrialService _trialService;
private readonly ICalculateService _calculateService;
private IStringLocalizer _localizer { get; set; }
public FinancialChangeController(ITrialService trialService, IStringLocalizer localizer
public FinancialChangeController(ITrialService trialService, ICalculateService calculateService, IStringLocalizer localizer
)
{
_localizer = localizer;
_trialService = trialService;
_calculateService = calculateService;
}
@@ -60,28 +60,268 @@ namespace IRaCIS.Core.API.Controllers.Special
var userId = Guid.Parse(User.FindFirst("id").Value);
var result = await _trialService.AddOrUpdateTrial(param);
if (_trialService.TrialExpeditedChange)
{
var needCalReviewerIds = await _trialService.GetTrialEnrollmentReviewerIds(param.Id.Value);
var calcList = await _calculateService.GetNeedCalculateReviewerList(Guid.Empty, string.Empty);
calcList.ForEach(t =>
{
if (needCalReviewerIds.Contains(t.DoctorId))
{
_calculateService.CalculateMonthlyPayment(new CalculateDoctorAndMonthDTO()
{
NeedCalculateReviewers = new List<Guid>()
{
t.DoctorId
},
CalculateMonth = DateTime.Parse(t.YearMonth)
}, User.FindFirst("id").Value);
}
});
}
return result;
}
/// <summary>
/// 添加或更新工作量[AUTH]
/// </summary>
/// <param name="_trialWorkloadService"></param>
/// <param name="workLoadAddOrUpdateModel"></param>
/// <returns></returns>
[HttpPost, Route("doctorWorkload/workLoadAddOrUpdate")]
[TypeFilter(typeof(TrialResourceFilter),Arguments = new object[] { "AfterStopCannNotOpt" })]
public async Task<IResponseOutput> WorkLoadAddOrUpdate([FromServices] IDoctorWorkloadService _trialWorkloadService, WorkloadCommand workLoadAddOrUpdateModel)
{
var userId = Guid.Parse(User.FindFirst("id").Value);
var result = await _trialWorkloadService.AddOrUpdateWorkload(workLoadAddOrUpdateModel, userId);
if (result.IsSuccess && workLoadAddOrUpdateModel.DataFrom == 2)
{
await _calculateService.CalculateMonthlyPayment(new CalculateDoctorAndMonthDTO()
{
NeedCalculateReviewers = new List<Guid>()
{
workLoadAddOrUpdateModel.DoctorId
},
CalculateMonth = workLoadAddOrUpdateModel.WorkTime
}, User.FindFirst("id").Value);
}
return result;
}
[HttpDelete, Route("doctorWorkload/deleteWorkLoad/{id:guid}/{trialId:guid}")]
[TypeFilter(typeof(TrialResourceFilter),Arguments = new object[] { "AfterStopCannNotOpt" })]
public async Task<IResponseOutput> DeleteWorkLoad([FromServices] IDoctorWorkloadService _trialWorkloadService, Guid id)
{
//先判断该工作量的费用是否被锁定,如果被锁定,则不能删除
var workload = await _trialWorkloadService.GetWorkloadDetailById(id);
var yearMonth = workload.WorkTime.ToString("yyyy-MM");
var isLock = await _calculateService.IsLock(workload.DoctorId, yearMonth);
if (isLock)
{
//---Expenses have been settled and workload can not be reset.
return ResponseOutput.NotOk(_localizer["Financial_ChargeSettled"]);
}
var deleteResult = await _trialWorkloadService.DeleteWorkload(id);
if (workload.DataFrom == (int)Domain.Share.WorkLoadFromStatus.FinalConfirm)
{
await _calculateService.CalculateMonthlyPayment(new CalculateDoctorAndMonthDTO()
{
NeedCalculateReviewers = new List<Guid>()
{
workload.DoctorId
},
CalculateMonth = workload.WorkTime
}, User.FindFirst("id").Value);
}
return deleteResult;
}
/// <summary>
/// 添加或更新汇率(会触发没有对锁定的费用计算)
/// </summary>
[HttpPost, Route("exchangeRate/addOrUpdateExchangeRate")]
public async Task<IResponseOutput> AddOrUpdateExchangeRate([FromServices] IExchangeRateService _exchangeRateService, [FromServices] IPaymentAdjustmentService _costAdjustmentService, ExchangeRateCommand addOrUpdateModel)
{
var result = await _exchangeRateService.AddOrUpdateExchangeRate(addOrUpdateModel);
var calcList = await _calculateService.GetNeedCalculateReviewerList(Guid.Empty, addOrUpdateModel.YearMonth);
foreach (var item in calcList)
{
if (item != null)
{
await _calculateService.CalculateMonthlyPayment(new CalculateDoctorAndMonthDTO()
{
NeedCalculateReviewers = new List<Guid>()
{
item.DoctorId
},
CalculateMonth = DateTime.Parse(item.YearMonth)
}, User.FindFirst("id").Value);
}
}
await _costAdjustmentService.CalculateCNY(addOrUpdateModel.YearMonth, addOrUpdateModel.Rate);
return result;
}
/// <summary>
/// 添加或更新 职称单价[AUTH]
/// </summary>
[HttpPost, Route("rankPrice/addOrUpdateRankPrice")]
public async Task<IResponseOutput> AddOrUpdateRankPrice([FromServices] IReviewerPayInfoService _reviewerPayInfoService, [FromServices] IRankPriceService _rankPriceService, RankPriceCommand addOrUpdateModel)
{
if (addOrUpdateModel.Id != Guid.Empty && addOrUpdateModel.Id != null)
{
var needCalReviewerIds =await _reviewerPayInfoService.GetReviewerIdByRankId(Guid.Parse(addOrUpdateModel.Id.ToString()));
var calcList = await _calculateService.GetNeedCalculateReviewerList(Guid.Empty, string.Empty);
foreach (var item in calcList)
{
if (item != null && needCalReviewerIds.Contains(item.DoctorId))
{
await _calculateService.CalculateMonthlyPayment(new CalculateDoctorAndMonthDTO()
{
NeedCalculateReviewers = new List<Guid>()
{
item.DoctorId
},
CalculateMonth = DateTime.Parse(item.YearMonth)
}, User.FindFirst("id").Value);
}
}
}
var userId = Guid.Parse(User.FindFirst("id").Value);
return await _rankPriceService.AddOrUpdateRankPrice(addOrUpdateModel, userId);
}
/// <summary>
/// 添加或更新(替换)医生支付展信息[AUTH]
/// </summary>
[HttpPost, Route("reviewerPayInfo/addOrUpdateReviewerPayInfo")]
public async Task<IResponseOutput> AddOrUpdateReviewerPayInfo([FromServices] IReviewerPayInfoService _doctorPayInfoService, ReviewerPayInfoCommand addOrUpdateModel)
{
var userId = Guid.Parse(User.FindFirst("id").Value);
var result =await _doctorPayInfoService.AddOrUpdateReviewerPayInfo(addOrUpdateModel, userId);
var calcList = await _calculateService.GetNeedCalculateReviewerList(addOrUpdateModel.DoctorId, string.Empty);
foreach (var item in calcList)
{
if (item != null)
{
await _calculateService.CalculateMonthlyPayment(new CalculateDoctorAndMonthDTO()
{
NeedCalculateReviewers = new List<Guid>()
{
item.DoctorId
},
CalculateMonth = DateTime.Parse(item.YearMonth)
}, User.FindFirst("id").Value);
}
}
return result;
}
/// <summary>
/// 保存(替换)项目支付价格信息(会触发没有被锁定的费用计算)[AUTH]
/// </summary>
[HttpPost, Route("trialPaymentPrice/addOrUpdateTrialPaymentPrice")]
public async Task<IResponseOutput> AddOrUpdateTrialPaymentPrice([FromServices] ITrialPaymentPriceService _trialPaymentPriceService, TrialPaymentPriceCommand addOrUpdateModel)
{
var userId = Guid.Parse(User.FindFirst("id").Value);
var result =await _trialPaymentPriceService.AddOrUpdateTrialPaymentPrice(addOrUpdateModel);
var needCalReviewerIds = await _trialService.GetTrialEnrollmentReviewerIds(addOrUpdateModel.TrialId);
var calcList = await _calculateService.GetNeedCalculateReviewerList(Guid.Empty, string.Empty);
foreach (var item in calcList)
{
if (item != null && needCalReviewerIds.Contains(item.DoctorId))
{
await _calculateService.CalculateMonthlyPayment(new CalculateDoctorAndMonthDTO()
{
NeedCalculateReviewers = new List<Guid>()
{
item.DoctorId
},
CalculateMonth = DateTime.Parse(item.YearMonth)
}, User.FindFirst("id").Value);
}
}
return result;
}
/// <summary>
/// 批量更新奖励费用[AUTH]
/// </summary>
[HttpPost, Route("volumeReward/addOrUpdatevolumeRewardPriceList")]
public async Task<IResponseOutput> AddOrUpdateAwardPriceList([FromServices] IVolumeRewardService _volumeRewardService, IEnumerable<AwardPriceCommand> addOrUpdateModel)
{
var result =await _volumeRewardService.AddOrUpdateVolumeRewardPriceList(addOrUpdateModel);
var calcList = await _calculateService.GetNeedCalculateReviewerList(Guid.Empty, string.Empty);
foreach (var item in calcList)
{
if (item != null)
{
await _calculateService.CalculateMonthlyPayment(new CalculateDoctorAndMonthDTO()
{
NeedCalculateReviewers = new List<Guid>()
{
item.DoctorId
},
CalculateMonth = DateTime.Parse(item.YearMonth)
}, User.FindFirst("id").Value);
}
}
return result;
}
/// <summary>
/// 计算医生月度费用,并将计算的结果存入费用表
/// </summary>
[HttpPost, Route("financial/calculateMonthlyPayment")]
public async Task<IResponseOutput> CalculateMonthlyPayment(CalculateDoctorAndMonthDTO param)
{
if (!ModelState.IsValid)
{
//---Invalid parameter.
return ResponseOutput.NotOk(_localizer["Financial_InvalidParameter"]);
}
return await _calculateService.CalculateMonthlyPayment(param, User.FindFirst("id").Value);
}
/// <summary>
/// Financials /Monthly Payment 列表查询接口
/// </summary>
[HttpPost, Route("financial/getMonthlyPaymentList")]
public async Task<IResponseOutput<PaymentDTO>> GetMonthlyPaymentList([FromServices] IPaymentService _paymentService, [FromServices] IExchangeRateService _exchangeRateService, MonthlyPaymentQueryDTO queryParam)
{
return ResponseOutput.Ok(new PaymentDTO
{
CostList = await _paymentService.GetMonthlyPaymentList(queryParam),
ExchangeRate = await _exchangeRateService.GetExchangeRateByMonth(queryParam.StatisticsDate.ToString("yyyy-MM"))
});
}
}
}
@@ -308,11 +308,28 @@ namespace IRaCIS.Core.API.Controllers
}
/// <summary>
/// 提交结构化录入并签名
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
/// <summary>
/// PM签名一致性分析临床数据
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/ReadingClinicalData/SignConsistencyAnalysisReadingClinicalData")]
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
[UnitOfWork]
public async Task<IResponseOutput> SignConsistencyAnalysisReadingClinicalData(DataInspectionDto<SignConsistencyAnalysisReadingClinicalDataInDto> opt)
{
var singid = await _inspectionService.RecordSing(opt.SignInfo);
var result = await _readingClinicalDataService.SignConsistencyAnalysisReadingClinicalData(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" })]
@@ -402,6 +419,19 @@ namespace IRaCIS.Core.API.Controllers
return result;
}
[HttpPost, Route("Inspection/configTrialBasicInfo/ConfigTrialPACSInfoConfirm")]
[UnitOfWork]
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "BeforeOngoingCantOpt" })]
public async Task<IResponseOutput> ConfigTrialPACSInfoConfirm(DataInspectionDto<TrialPACSConfig> opt)
{
opt.Data.IsTrialPACSConfirmed = true;
var singid = await _inspectionService.RecordSing(opt.SignInfo);
var result = await _trialConfigService.ConfigTrialPACSInfo(opt.Data);
await _inspectionService.CompletedSign(singid, result);
return result;
}
/// <summary>
/// 签名确认
/// </summary>
@@ -419,13 +449,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)
@@ -10,8 +10,7 @@ using IRaCIS.Core.Application.Contracts.Dicom;
using IRaCIS.Core.Application.Contracts.Dicom.DTO;
using IRaCIS.Core.Application.Filter;
using IRaCIS.Core.Application.Helper;
using IRaCIS.Core.Application.MediatR.CommandAndQueries;
using IRaCIS.Core.Application.MediatR.Handlers;
using IRaCIS.Core.Application.MassTransit.Command;
using IRaCIS.Core.Application.Service;
using IRaCIS.Core.Application.Service.ImageAndDoc;
using IRaCIS.Core.Application.Service.Reading.Dto;
@@ -20,9 +19,8 @@ using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Infra.EFCore;
using IRaCIS.Core.Infrastructure;
using IRaCIS.Core.Infrastructure.Extention;
using Magicodes.ExporterAndImporter.Excel;
using MassTransit;
using MediatR;
using MassTransit.Mediator;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Cors.Infrastructure;
using Microsoft.AspNetCore.Hosting;
@@ -33,12 +31,12 @@ using Microsoft.AspNetCore.SignalR;
using Microsoft.AspNetCore.StaticFiles;
using Microsoft.AspNetCore.WebUtilities;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Localization;
using Microsoft.Extensions.Logging;
using Microsoft.Net.Http.Headers;
using MiniExcelLibs;
using Newtonsoft.Json;
using SharpCompress.Archives;
using SkiaSharp;
using System;
using System.Collections.Generic;
using System.Data;
@@ -233,15 +231,22 @@ namespace IRaCIS.Core.API.Controllers
{
public IMapper _mapper { get; set; }
public IUserInfo _userInfo { get; set; }
private readonly IMediator _mediator;
public IStringLocalizer _localizer { get; set; }
private readonly IWebHostEnvironment _hostEnvironment;
private readonly IRepository _repository;
private readonly IEasyCachingProvider _provider;
private readonly QCCommon _qCCommon;
public StudyController(IMapper mapper, IUserInfo userInfo, IWebHostEnvironment hostEnvironment, IMediator mediator, IEasyCachingProvider provider,
public StudyController(IMapper mapper, IStringLocalizer localizer, IUserInfo userInfo, IWebHostEnvironment hostEnvironment, IMediator mediator, IEasyCachingProvider provider,
QCCommon qCCommon,
IRepository repository)
{
@@ -249,12 +254,13 @@ namespace IRaCIS.Core.API.Controllers
_provider = provider;
_hostEnvironment = hostEnvironment;
_mediator = mediator;
_localizer = localizer;
_mapper = mapper;
_userInfo = userInfo;
_repository = repository;
}
[HttpPost, Route("Study/PreArchiveStudy")]
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
public async Task<IResponseOutput> PreArchiveStudy(PreArchiveStudyCommand preArchiveStudyCommand,
@@ -262,17 +268,11 @@ namespace IRaCIS.Core.API.Controllers
[FromServices] IRepository<StudyMonitor> _studyMonitorRepository)
{
if (_provider.Get<List<SystemAnonymization>>(StaticData.Anonymize.Anonymize_AddFixedFiled).Value == null)
{
await _mediator.Send(new AnonymizeCacheRequest());
}
var savedInfo = _studyService.GetSaveToDicomInfo(preArchiveStudyCommand.SubjectVisitId);
var studyMonitor = new StudyMonitor()
{
TrialId = savedInfo.TrialId,
SiteId = savedInfo.SiteId,
SubjectId = savedInfo.SubjectId,
SubjectVisitId = savedInfo.SubjectVisitId,
@@ -312,7 +312,7 @@ namespace IRaCIS.Core.API.Controllers
string.IsNullOrEmpty(mediaTypeHeader.Boundary.Value))
{
//---不支持的MediaType
return ResponseOutput.NotOk(StaticData.International("UploadDownLoad_UnsupportedMedia"));
return ResponseOutput.NotOk(_localizer["UploadDownLoad_UnsupportedMedia"]);
}
var archiveStudyCommand = new ArchiveStudyCommand() { AbandonStudyId = abandonStudyId, StudyInstanceUid = studyInstanceUid, SubjectVisitId = subjectVisitId };
@@ -401,12 +401,12 @@ namespace IRaCIS.Core.API.Controllers
}
catch (Exception ex)
catch (Exception)
{
_provider.Remove($"StudyUid_{trialId}_{archiveStudyCommand.StudyInstanceUid}");
//---请求异常,请重试!
throw new BusinessValidationFailedException(StaticData.International("UploadDownLoad_RequestError"));
throw new BusinessValidationFailedException(_localizer["UploadDownLoad_RequestError"]);
}
studyMonitor.FileSize = (decimal)HttpContext.Request.ContentLength;
@@ -460,248 +460,6 @@ namespace IRaCIS.Core.API.Controllers
}
#region
///// <summary>
///// 上传临床数据 多文件
///// </summary>
///// <param name="subjectVisitId"></param>
///// <returns></returns>
//[HttpPost("ClinicalData/UploadVisitClinicalData/{trialId:guid}/{subjectVisitId:guid}")]
//[DisableRequestSizeLimit]
////[Authorize(Policy = IRaCISPolicy.CRC)]
//[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
//public async Task<IResponseOutput> UploadVisitClinicalData(Guid subjectVisitId)
//{
// await _qCCommon.VerifyIsCRCSubmmitAsync(_repository, _userInfo, subjectVisitId);
// var sv = _repository.Where<SubjectVisit>(t => t.Id == subjectVisitId).Select(t => new { t.TrialId, t.SiteId, t.SubjectId }).FirstOrDefault().IfNullThrowException();
// await FileUploadAsync(async (fileName) =>
// {
// var (serverFilePath, relativePath, fileRealName) = FileStoreHelper.GetClinicalDataPath(_hostEnvironment, fileName, sv.TrialId, sv.SiteId, sv.SubjectId, subjectVisitId);
// //插入临床pdf 路径
// await _repository.AddAsync(new PreviousPDF()
// {
// SubjectVisitId = subjectVisitId,
// IsVisist = true,
// DataType = ClinicalDataType.MedicalHistory,
// UploadType = ClinicalUploadType.PDF,
// SubjectId = sv.SubjectId,
// TrialId = sv.TrialId,
// ClinicalLevel = ClinicalLevel.Subject,
// Path = relativePath,
// FileName = fileRealName
// });
// return serverFilePath;
// });
// await _repository.SaveChangesAsync();
// return ResponseOutput.Ok();
//}
///// <summary>
///// 上传临床数据模板
///// </summary>
///// <param name="trialId"></param>
///// <returns></returns>
//[HttpPost("ClinicalData/UploadClinicalTemplate")]
//[DisableRequestSizeLimit]
//[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "BeforeOngoingCantOpt", "AfterStopCannNotOpt" })]
//public async Task<IResponseOutput<List<FileDto>>> UploadClinicalTemplate(Guid? trialId)
//{
// if (trialId == null)
// trialId = default(Guid);
// var filerelativePath = string.Empty;
// List<FileDto> fileDtos = new List<FileDto>();
// await FileUploadAsync(async (fileName) =>
// {
// var (serverFilePath, relativePath, fileRealName) = FileStoreHelper.GetClinicalTemplatePath(_hostEnvironment, fileName, trialId.Value);
// //插入临床pdf 路径
// filerelativePath = relativePath;
// fileDtos.Add(new FileDto()
// {
// FileName = fileName,
// Path = relativePath
// });
// await Task.CompletedTask;
// return serverFilePath;
// });
// return ResponseOutput.Ok(fileDtos);
//}
///// <summary>
///// 上传阅片临床数据
///// </summary>
///// <param name="trialId"></param>
///// <param name="subjectId"></param>
///// <param name="readingId"></param>
///// <returns></returns>
//[HttpPost("ClinicalData/UploadClinicalData/{trialId:guid}/{subjectId:guid}/{readingId:guid}")]
//[DisableRequestSizeLimit]
//[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
//public async Task<IResponseOutput<List<FileDto>>> UploadReadClinicalData(Guid trialId, Guid subjectId, Guid readingId)
//{
// var filerelativePath = string.Empty;
// List<FileDto> fileDtos = new List<FileDto>();
// var siteid = await _repository.Where<Subject>(x => x.Id == subjectId).Select(x => x.SiteId).FirstOrDefaultAsync();
// await FileUploadAsync(async (fileName) =>
// {
// var (serverFilePath, relativePath, fileRealName) = FileStoreHelper.GetReadClinicalDataPath(_hostEnvironment, fileName, trialId, siteid, subjectId, readingId);
// //插入临床pdf 路径
// filerelativePath = relativePath;
// fileDtos.Add(new FileDto()
// {
// FileName = fileName,
// Path = relativePath
// });
// await Task.CompletedTask;
// return serverFilePath;
// });
// return ResponseOutput.Ok(fileDtos);
//}
///// <summary>
///// 上传截图
///// </summary>
///// <param name="subjectId"></param>
///// <returns></returns>
//[HttpPost("Printscreen/UploadPrintscreen/{subjectId:guid}")]
//[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
//public async Task<IResponseOutput<FileDto>> UploadPrintscreen(Guid subjectId)
//{
// var subjectInfo = await this._repository.Where<Subject>(x => x.Id == subjectId).FirstNotNullAsync();
// FileDto fileDto = new FileDto();
// await FileUploadAsync(async (fileName) =>
// {
// var (serverFilePath, relativePath, fileRealName) = FileStoreHelper.GetUploadPrintscreenFilePath(_hostEnvironment, fileName, subjectInfo.TrialId, subjectInfo.SiteId, subjectInfo.Id);
// fileDto.Path = relativePath;
// fileDto.FileName = fileName;
// await Task.CompletedTask;
// return serverFilePath;
// });
// return ResponseOutput.Ok(fileDto);
//}
///// <summary>
///// 上传Reading问题的图像
///// </summary>
///// <param name="trialId"></param>
///// <param name="visitTaskId"></param>
///// <returns></returns>
//[HttpPost("VisitTask/UploadReadingAnswerImage/{trialId:guid}/{visitTaskId:guid}")]
//[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
//public async Task<IResponseOutput<FileDto>> UploadReadingAnswerImage(Guid trialId, Guid visitTaskId)
//{
// FileDto fileDto = new FileDto();
// await FileUploadAsync(async (fileName) =>
// {
// var (serverFilePath, relativePath, fileRealName) = FileStoreHelper.GetFilePath(_hostEnvironment, fileName, trialId, visitTaskId, StaticData.Folder.JudgeTask);
// fileDto.Path = relativePath;
// fileDto.FileName = fileName;
// await Task.CompletedTask;
// return serverFilePath;
// });
// return ResponseOutput.Ok(fileDto);
//}
///// <summary>
///// 上传裁判任务的图像
///// </summary>
///// <param name="trialId"></param>
///// <param name="visitTaskId"></param>
///// <returns></returns>
//[HttpPost("VisitTask/UploadJudgeTaskImage/{trialId:guid}/{visitTaskId:guid}")]
//[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
//public async Task<IResponseOutput<FileDto>> UploadJudgeTaskImage(Guid trialId, Guid visitTaskId)
//{
// FileDto fileDto = new FileDto();
// await FileUploadAsync(async (fileName) =>
// {
// var (serverFilePath, relativePath, fileRealName) = FileStoreHelper.GetFilePath(_hostEnvironment, fileName, trialId, visitTaskId, StaticData.Folder.JudgeTask);
// fileDto.Path = relativePath;
// fileDto.FileName = fileName;
// await Task.CompletedTask;
// return serverFilePath;
// });
// return ResponseOutput.Ok(fileDto);
//}
///// <summary>
///// 上传医学审核图片
///// </summary>
///// <param name="trialId"></param>
///// <param name="taskMedicalReviewId"></param>
///// <returns></returns>
//[HttpPost("TaskMedicalReview/UploadMedicalReviewImage/{trialId:guid}/{taskMedicalReviewId:guid}")]
//[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
//public async Task<IResponseOutput<FileDto>> UploadMedicalReviewImage(Guid trialId, Guid taskMedicalReviewId)
//{
// string path = string.Empty;
// FileDto fileDto = new FileDto();
// await FileUploadAsync(async (fileName) =>
// {
// var (serverFilePath, relativePath, fileRealName) = FileStoreHelper.GetMedicalReviewImage(_hostEnvironment, fileName, trialId, taskMedicalReviewId);
// //await _repository.UpdatePartialFromQueryAsync<TaskMedicalReview>(x => x.Id == taskMedicalReviewId, x => new TaskMedicalReview()
// //{
// // ImagePath = relativePath,
// // FileName = fileName,
// //});
// path = relativePath;
// fileDto.Path = relativePath;
// fileDto.FileName = fileName;
// return serverFilePath;
// });
// await _repository.SaveChangesAsync();
// return ResponseOutput.Ok(fileDto);
//}
#endregion
public class UploadNoneDicomFileCommand
{
public Guid TrialId { get; set; }
@@ -718,18 +476,21 @@ namespace IRaCIS.Core.API.Controllers
public string FilePath { get; set; }
public string FileName { get; set; }
public int FileFize { get; set; }
public string FileType { get; set; }
}
}
/// <summary>
/// 上传非Dicom 文件 支持压缩包 多文件上传
/// </summary>
/// <param name="incommand"></param>
/// <param name="_noneDicomStudyRepository"></param>
/// <param name="_studyMonitorRepository"></param>
/// <returns></returns>
//[DisableRequestSizeLimit]
[HttpPost("NoneDicomStudy/UploadNoneDicomFile")]
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
//[Authorize(Policy = IRaCISPolicy.CRC)]
public async Task<IResponseOutput> UploadNoneDicomFile(UploadNoneDicomFileCommand incommand,
[FromServices] IRepository<NoneDicomStudy> _noneDicomStudyRepository, [FromServices] IRepository<StudyMonitor> _studyMonitorRepository)
{
@@ -741,7 +502,7 @@ namespace IRaCIS.Core.API.Controllers
await _qCCommon.VerifyIsCRCSubmmitAsync(_repository, _userInfo, subjectVisitId);
var sv = (await _repository.Where<SubjectVisit>(t => t.Id == subjectVisitId).Select(t => new { t.TrialId, t.SiteId, t.SubjectId }).FirstOrDefaultAsync()).IfNullThrowConvertException();
var sv = (await _repository.Where<SubjectVisit>(t => t.Id == subjectVisitId).Select(t => new { t.TrialId, t.TrialSiteId, t.SubjectId }).FirstOrDefaultAsync()).IfNullThrowConvertException();
var studyMonitor = await _studyMonitorRepository.FirstOrDefaultAsync(t => t.Id == studyMonitorId);
@@ -749,7 +510,7 @@ namespace IRaCIS.Core.API.Controllers
foreach (var item in incommand.UploadedFileList)
{
await _repository.AddAsync(new NoneDicomStudyFile() { FileName = item.FileName, Path = item.FilePath, NoneDicomStudyId = noneDicomStudyId });
await _repository.AddAsync(new NoneDicomStudyFile() { FileName = item.FileName, Path = item.FilePath, NoneDicomStudyId = noneDicomStudyId,FileType=item.FileType });
}
var uploadFinishedTime = DateTime.Now;
@@ -766,20 +527,27 @@ namespace IRaCIS.Core.API.Controllers
studyMonitor.StudyCode = noneDicomStudy.StudyCode;
studyMonitor.ArchiveFinishedTime = DateTime.Now;
studyMonitor.IP = _userInfo.IP;
studyMonitor.IsSuccess = true;
await _repository.SaveChangesAsync();
return ResponseOutput.Ok();
}
/// <summary>
/// 一致性核查 excel上传 支持三种格式
/// </summary>
/// <param name="trialId"></param>
/// <param name="oSSService"></param>
/// <returns></returns>
/// <exception cref="BusinessValidationFailedException"></exception>
[HttpPost("QCOperation/UploadVisitCheckExcel/{trialId:guid}")]
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
//[Authorize(Policy = IRaCISPolicy.PM_APM)]
public async Task<IResponseOutput> UploadVisitCheckExcel(Guid trialId, [FromServices] IOSSService oSSService)
{
@@ -793,14 +561,14 @@ namespace IRaCIS.Core.API.Controllers
if (!fileName.EndsWith(".xlsx") && !fileName.EndsWith(".csv") && !fileName.EndsWith(".xls"))
{
//---支持.xlsx、.xls、.csv格式的文件上传。
throw new BusinessValidationFailedException(StaticData.International("UploadDownLoad_SupportedFormats"));
throw new BusinessValidationFailedException(_localizer["UploadDownLoad_SupportedFormats"]);
}
fileStream.CopyTo(templateFileStream);
templateFileStream.Seek(0, SeekOrigin.Begin);
var ossRelativePath = await oSSService.UploadToOSSAsync(fileStream, "InspectionUpload/Check", realFileName);
var ossRelativePath = await oSSService.UploadToOSSAsync(fileStream, "InspectionUpload/Check", realFileName);
await _repository.AddAsync(new InspectionFile() { FileName = realFileName, RelativePath = ossRelativePath, TrialId = trialId });
@@ -814,9 +582,22 @@ namespace IRaCIS.Core.API.Controllers
var etcCheckList = new List<CheckViewModel>();
#region MiniExcel
if (fileName.EndsWith(".xlsx"))
{
etcCheckList = MiniExcel.Query<CheckViewModel>(templateFileStream, excelType: ExcelType.XLSX).ToList();
}
else if (fileName.EndsWith(".csv"))
{
//因为csv 需要加配置文件 不然都是null
etcCheckList = MiniExcel.Query<CheckViewModel>(templateFileStream, null, configuration: new MiniExcelLibs.Csv.CsvConfiguration()
{
StreamReaderFunc = (stream) => new StreamReader(stream, Encoding.GetEncoding("gb2312"))
}).ToList();
}
//if (fileName.EndsWith(".csv"))
//{
// //因为csv 需要加配置文件 不然都是null
@@ -832,67 +613,72 @@ namespace IRaCIS.Core.API.Controllers
#endregion
#region net8
//Magicodes 支持自定义特性验证
if (fileName.EndsWith(".xlsx"))
{
var Importer = new ExcelImporter();
// if (fileName.EndsWith(".xlsx"))
//{
// var Importer = new ExcelImporter();
var import = await Importer.Import<CheckViewModel>(templateFileStream);
// var import = await Importer.Import<CheckViewModel>(templateFileStream);
if (import.Exception != null) return ResponseOutput.NotOk(import.Exception.ToString());
// if (import.Exception != null) return ResponseOutput.NotOk(import.Exception.ToString());
//if (import.RowErrors.Count > 0) return ResponseOutput.NotOk(JsonConvert.SerializeObject(import.RowErrors));
// //if (import.RowErrors.Count > 0) return ResponseOutput.NotOk(JsonConvert.SerializeObject(import.RowErrors));
if (import.TemplateErrors.Count > 0) return ResponseOutput.NotOk(JsonConvert.SerializeObject(import.TemplateErrors));
// if (import.TemplateErrors.Count > 0) return ResponseOutput.NotOk(_localizer["UploadDownLoad_TemplateErrors"]);
etcCheckList = import.Data.ToList();
}
else if (fileName.EndsWith(".csv"))
{
#region MiniExcel读取 xlsx Magicodes验证数据
// etcCheckList = import.Data.ToList();
//}
//else if (fileName.EndsWith(".csv"))
//{
// #region 临时方案 MiniExcel读取 然后保存为xlsx 再用 Magicodes验证数据
//因为csv 需要加配置文件 不然都是null
etcCheckList = MiniExcel.Query<CheckViewModel>(templateFileStream, null, configuration: new MiniExcelLibs.Csv.CsvConfiguration()
{
StreamReaderFunc = (stream) => new StreamReader(stream, Encoding.GetEncoding("gb2312"))
}).ToList();
// //因为csv 需要加配置文件 不然都是null
// etcCheckList = MiniExcel.Query<CheckViewModel>(templateFileStream, null, configuration: new MiniExcelLibs.Csv.CsvConfiguration()
// {
// StreamReaderFunc = (stream) => new StreamReader(stream, Encoding.GetEncoding("gb2312"))
// }).ToList();
var (csVToXlsxPath, csVToXlsxRelativePath) = FileStoreHelper.GetTrialCheckFilePath(_hostEnvironment, Path.GetFileNameWithoutExtension(fileName) + ".xlsx", trialId);
// var (csVToXlsxPath, csVToXlsxRelativePath) = FileStoreHelper.GetTrialCheckFilePath(_hostEnvironment, Path.GetFileNameWithoutExtension(fileName) + ".xlsx", trialId);
await MiniExcel.SaveAsAsync(csVToXlsxPath, etcCheckList, excelType: ExcelType.XLSX);
// await MiniExcel.SaveAsAsync(csVToXlsxPath, etcCheckList, excelType: ExcelType.XLSX);
var Importer = new ExcelImporter();
// var Importer = new ExcelImporter();
var import = await Importer.Import<CheckViewModel>(System.IO.File.OpenRead(csVToXlsxPath));
// var import = await Importer.Import<CheckViewModel>(System.IO.File.OpenRead(csVToXlsxPath));
if (import.Exception != null) return ResponseOutput.NotOk(import.Exception.ToString());
// if (import.Exception != null) return ResponseOutput.NotOk(import.Exception.ToString());
//if (import.RowErrors.Count > 0) return ResponseOutput.NotOk(JsonConvert.SerializeObject(import.RowErrors));
// //if (import.RowErrors.Count > 0) return ResponseOutput.NotOk(JsonConvert.SerializeObject(import.RowErrors));
if (import.TemplateErrors.Count > 0) return ResponseOutput.NotOk(JsonConvert.SerializeObject(import.TemplateErrors));
// if (import.TemplateErrors.Count > 0) return ResponseOutput.NotOk(JsonConvert.SerializeObject(import.TemplateErrors));
etcCheckList = import.Data.ToList();
// etcCheckList = import.Data.ToList();
#endregion
// #endregion
#region excel编码格式
//var Importer = new CsvImporter();
// #region 导入组件有问题 excel编码格式
// //var Importer = new CsvImporter();
//var import = await Importer.Import<CheckViewModel>(File.OpenRead(filePath));
// //var import = await Importer.Import<CheckViewModel>(File.OpenRead(filePath));
//if (import.Exception != null) return ResponseOutput.NotOk(import.Exception.ToString());
// //if (import.Exception != null) return ResponseOutput.NotOk(import.Exception.ToString());
//if (import.RowErrors.Count > 0) return ResponseOutput.NotOk(JsonConvert.SerializeObject(import.RowErrors));
// //if (import.RowErrors.Count > 0) return ResponseOutput.NotOk(JsonConvert.SerializeObject(import.RowErrors));
//if (import.TemplateErrors.Count > 0) return ResponseOutput.NotOk(JsonConvert.SerializeObject(import.TemplateErrors));
// //if (import.TemplateErrors.Count > 0) return ResponseOutput.NotOk(JsonConvert.SerializeObject(import.TemplateErrors));
//etcCheckList = import.Data.ToList();
#endregion
// //etcCheckList = import.Data.ToList();
// #endregion
}
//}
#endregion
//ExcelReaderFactory 需要自己验证数据 并且从固定列取数据
else
{
@@ -931,7 +717,7 @@ namespace IRaCIS.Core.API.Controllers
if (etcCheckList == null || etcCheckList.Count == 0)
{
//---请保证上传数据符合模板文件中的样式,且存在有效数据。
return ResponseOutput.NotOk(StaticData.International("UploadDownLoad_InvalidData"));
return ResponseOutput.NotOk(_localizer["UploadDownLoad_InvalidData"]);
}
else
{
@@ -952,13 +738,18 @@ namespace IRaCIS.Core.API.Controllers
if (etcCheckList.Count == 0)
{
//---请保证上传数据符合模板文件中的样式,且存在有效数据。
return ResponseOutput.NotOk(StaticData.International("UploadDownLoad_InvalidData"));
return ResponseOutput.NotOk(_localizer["UploadDownLoad_InvalidData"]);
}
}
await _mediator.Send(new ConsistencyVerificationRequest() { ETCList = etcCheckList, TrialId = trialId });
// 适合获取结果的
//var client = _mediator.CreateRequestClient<ConsistenCheckCommand>();
//await client.GetResponse<ConsistenCheckResult>(new ConsistenCheckCommand() { ETCList = etcCheckList, TrialId = trialId });
//不获取结果,不用定义返回类型
await _mediator.Send(new ConsistenCheckCommand() { ETCList = etcCheckList, TrialId = trialId });
return ResponseOutput.Ok();
@@ -968,8 +759,140 @@ namespace IRaCIS.Core.API.Controllers
#endregion
#region
#region DTO
public class DoctorDownloadInfo
{
public Guid Id { get; set; }
public string Name { get; set; }
public string ReviewerCode { get; set; }
public List<DownloadFileInfo> FileList { get; set; }
}
public class DownloadFileInfo
{
public string FileName { get; set; }
public string Path { get; set; }
}
public class GetDoctorPathCommand
{
public int Language { get; set; }
public List<Guid> DoctorIdList { get; set; }
}
public class GetDoctoreAttachPathCommand
{
public Guid DoctorId { get; set; }
public List<Guid> AttachmentIdList { get; set; }
}
#endregion
/// <summary>医生文件上传下载</summary>
[ApiExplorerSettings(GroupName = "Common")]
[ApiController]
public class FileController : UploadBaseController
{
public IMapper _mapper { get; set; }
public IUserInfo _userInfo { get; set; }
private readonly IWebHostEnvironment _hostEnvironment;
private readonly IFileService _fileService;
public FileController(IMapper mapper, IUserInfo userInfo, IWebHostEnvironment hostEnvironment, IFileService fileService)
{
_fileService = fileService;
_hostEnvironment = hostEnvironment;
_mapper = mapper;
_userInfo = userInfo;
}
/// <summary>
/// New 医生首页 多选 获取多个医生信息+文件路径列表 医生压缩包名称 doctorCode + "_" + doctorName _(时间戳或者随机的Guid)
/// </summary>
/// <returns></returns>
[HttpPost, Route("file/GetOfficialResume")]
public async Task<IResponseOutput<List<DoctorDownloadInfo>>> GetOfficialResume(GetDoctorPathCommand command,
[FromServices] IRepository<Attachment> _attachmentrepository)
{
var list = await _attachmentrepository.Where(t => command.DoctorIdList.Contains(t.DoctorId) && command.Language == t.Language).GroupBy(t => new { Name = t.Doctor.FirstName + "_" + t.Doctor.LastName, ReviewerCode = t.Doctor.ReviewerCode, t.DoctorId })
.Select(g => new DoctorDownloadInfo()
{
Id = g.Key.DoctorId,
Name = g.Key.Name,
ReviewerCode = g.Key.ReviewerCode,
FileList = g.Select(t => new DownloadFileInfo() { FileName = t.FileName, Path = t.Path }).ToList()
}).ToListAsync();
return ResponseOutput.Ok(list);
}
/// <summary>
/// New 项目入组 勾选获取简历路径
/// </summary>
/// <param name="command"></param>
/// <param name="_doctorService"></param>
/// <param name="_attachmentrepository"></param>
/// <returns></returns>
[HttpPost, Route("file/GetTrialDoctorOfficialResume")]
public async Task<IResponseOutput<List<DoctorDownloadInfo>>> GetTrialDoctorOfficialResume(GetDoctorPathCommand command,
[FromServices] IDoctorService _doctorService,
[FromServices] IRepository<Attachment> _attachmentrepository)
{
var list = await _attachmentrepository.Where(t => command.DoctorIdList.Contains(t.DoctorId) && command.Language == t.Language && t.IsOfficial && t.Type.Equals("Resume")).GroupBy(t => new { Name = t.Doctor.FirstName + "_" + t.Doctor.LastName, ReviewerCode = t.Doctor.ReviewerCode, t.DoctorId })
.Select(g => new DoctorDownloadInfo()
{
Id = g.Key.DoctorId,
Name = g.Key.Name,
ReviewerCode = g.Key.ReviewerCode,
FileList = g.Select(t => new DownloadFileInfo() { FileName = t.FileName, Path = t.Path }).ToList()
}).ToListAsync();
return ResponseOutput.Ok(list);
}
/// <summary>
/// new 医生详情 勾选或者下载文件路径
/// </summary>
/// <param name="command"></param>
/// <param name="_doctorService"></param>
/// <param name="_attachmentrepository"></param>
/// <returns></returns>
[HttpPost, Route("file/GetDoctorAttachment")]
public async Task<IResponseOutput<DoctorDownloadInfo>> GetDoctorAttachment(GetDoctoreAttachPathCommand command,
[FromServices] IDoctorService _doctorService,
[FromServices] IRepository<Attachment> _attachmentrepository)
{
var find = await _attachmentrepository.Where(t => command.DoctorId == t.DoctorId && command.AttachmentIdList.Contains(t.Id)).GroupBy(t => new { Name = t.Doctor.FirstName + "_" + t.Doctor.LastName, ReviewerCode = t.Doctor.ReviewerCode, t.DoctorId })
.Select(g => new DoctorDownloadInfo()
{
Id = g.Key.DoctorId,
Name = g.Key.Name,
ReviewerCode = g.Key.ReviewerCode,
FileList = g.Select(t => new DownloadFileInfo() { FileName = t.FileName, Path = t.Path }).ToList()
}).FirstOrDefaultAsync();
return ResponseOutput.Ok(find);
}
}
#endregion
#region
@@ -981,25 +904,18 @@ namespace IRaCIS.Core.API.Controllers
public IMapper _mapper { get; set; }
public IUserInfo _userInfo { get; set; }
private readonly IMediator _mediator;
public IStringLocalizer _localizer { get; set; }
private readonly IWebHostEnvironment _hostEnvironment;
public UploadDownLoadController(IMapper mapper, IUserInfo userInfo, IMediator mediator, IWebHostEnvironment hostEnvironment)
public UploadDownLoadController(IMapper mapper, IUserInfo userInfo, IStringLocalizer localizer, IMediator mediator, IWebHostEnvironment hostEnvironment)
{
_hostEnvironment = hostEnvironment;
_localizer = localizer;
_mediator = mediator;
_mapper = mapper;
_userInfo = userInfo;
}
[HttpPost, Route("TrialSiteSurvey/TestOOS")]
public string TestUploadFileToOOS(string path)
{
return FileStoreHelper.UploadOOS(path, "testc/test", true);
}
[HttpPost, Route("TrialSiteSurvey/UploadTrialSiteSurveyUser")]
[DisableFormValueModelBinding]
[UnitOfWork]
@@ -1021,28 +937,28 @@ namespace IRaCIS.Core.API.Controllers
if (!realFileName.EndsWith(".xlsx", StringComparison.OrdinalIgnoreCase))
{
// 请用提供格式的模板excel上传需要处理的数据
throw new BusinessValidationFailedException(StaticData.International("UploadDownLoad_TemplateUploadData"));
throw new BusinessValidationFailedException(_localizer["UploadDownLoad_TemplateUploadData"]);
}
var ossRelativePath = await oSSService.UploadToOSSAsync(fileStream, "InspectionUpload/SiteSurvey", realFileName);
var ossRelativePath = await oSSService.UploadToOSSAsync(fileStream, "InspectionUpload/SiteSurvey", realFileName);
await _inspectionFileRepository.AddAsync(new InspectionFile() { FileName = realFileName, RelativePath = ossRelativePath, TrialId = trialId });
return ossRelativePath;
});
//去掉空白行
var excelList = MiniExcel.Query<SiteSurveyUserImportDto>(templateFileStream,excelType:ExcelType.XLSX).ToList()
var excelList = MiniExcel.Query<SiteSurveyUserImportDto>(templateFileStream, excelType: ExcelType.XLSX).ToList()
.Where(t => !(string.IsNullOrWhiteSpace(t.TrialSiteCode) && string.IsNullOrWhiteSpace(t.FirstName) && string.IsNullOrWhiteSpace(t.LastName) && string.IsNullOrWhiteSpace(t.Email)
&& string.IsNullOrWhiteSpace(t.Phone) && string.IsNullOrWhiteSpace(t.UserTypeStr) && string.IsNullOrWhiteSpace(t.OrganizationName))).ToList();
if (excelList.Any(t => string.IsNullOrWhiteSpace(t.TrialSiteCode) || string.IsNullOrWhiteSpace(t.FirstName) || string.IsNullOrWhiteSpace(t.LastName) || string.IsNullOrWhiteSpace(t.Email) || string.IsNullOrWhiteSpace(t.UserTypeStr)))
{
//请确保Excel中 每一行的 中心编号,姓名,邮箱,用户类型数据记录完整再进行上传
throw new BusinessValidationFailedException(StaticData.International("UploadDownLoad_EnsureCompleteData"));
throw new BusinessValidationFailedException(_localizer["UploadDownLoad_EnsureCompleteData"]);
}
var siteCodeList = excelList.Select(t => t.TrialSiteCode.Trim().ToUpper()).Distinct().ToList();
@@ -1050,35 +966,35 @@ namespace IRaCIS.Core.API.Controllers
if (_trialSiteRepository.Where(t => t.TrialId == trialId && siteCodeList.Contains(t.TrialSiteCode.ToUpper())).Count() != siteCodeList.Count)
{
//在项目中未找到该Excel中部分或全部中心
throw new BusinessValidationFailedException(StaticData.International("UploadDownLoad_InvalidCenters"));
throw new BusinessValidationFailedException(_localizer["UploadDownLoad_InvalidCenters"]);
}
if (excelList.GroupBy(t => new {t.TrialSiteCode, t.UserTypeStr, t.Email }).Any(g => g.Count() > 1))
if (excelList.GroupBy(t => new { t.TrialSiteCode, t.UserTypeStr, t.Email }).Any(g => g.Count() > 1))
{
// 同一邮箱,同一用户类型,只能生成一个账户,请核查Excel数据
throw new BusinessValidationFailedException(StaticData.International("UploadDownLoad_CheckDuplicateAccounts"));
throw new BusinessValidationFailedException(_localizer["UploadDownLoad_CheckDuplicateAccounts"]);
}
if (excelList.Any(t => !t.Email.Contains("@")))
{
//有邮箱不符合邮箱格式,请核查Excel数据
throw new BusinessValidationFailedException(StaticData.International("UploadDownLoad_InvalidEmail"));
throw new BusinessValidationFailedException(_localizer["UploadDownLoad_InvalidEmail"]);
}
var generateUserTypeList = new List<string>() { "CRC", "CRA","SR" };
var generateUserTypeList = new List<string>() { "CRC", "CRA" };
if (excelList.Any(t => !generateUserTypeList.Contains(t.UserTypeStr.ToUpper())))
{
//用户类型仅能为 CRC,SR,CRA 请核查Excel数据
throw new BusinessValidationFailedException(StaticData.International("UploadDownLoad_InvalidUserType"));
throw new BusinessValidationFailedException(_localizer["UploadDownLoad_InvalidUserType"]);
}
if (excelList.Count == 0)
{
throw new BusinessValidationFailedException(StaticData.International("UploadDownLoad_NoValiddata"));
throw new BusinessValidationFailedException(_localizer["UploadDownLoad_NoValiddata"]);
}
//处理好 用户类型 和用户类型枚举
var sysUserTypeList = _usertypeRepository.Where(t => t.UserTypeEnum == UserTypeEnum.CRA || t.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator || t.UserTypeEnum == UserTypeEnum.SR).Select(t => new { UserTypeId = t.Id, t.UserTypeEnum }).ToList();
var siteList = _trialSiteRepository.Where(t => t.TrialId == trialId && siteCodeList.Contains(t.TrialSiteCode)).Select(t => new { t.TrialSiteCode, t.SiteId }).ToList();
var sysUserTypeList = _usertypeRepository.Where(t => t.UserTypeEnum == UserTypeEnum.CRA || t.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).Select(t => new { UserTypeId = t.Id, t.UserTypeEnum }).ToList();
var siteList = _trialSiteRepository.Where(t => t.TrialId == trialId && siteCodeList.Contains(t.TrialSiteCode)).Select(t => new { t.TrialSiteCode, TrialSiteId= t.Id }).ToList();
foreach (var item in excelList)
{
@@ -1095,14 +1011,11 @@ namespace IRaCIS.Core.API.Controllers
item.UserTypeEnum = UserTypeEnum.CRA;
break;
case "SR":
item.UserTypeId = sysUserTypeList.FirstOrDefault(t => t.UserTypeEnum == UserTypeEnum.SR).UserTypeId;
item.UserTypeEnum = UserTypeEnum.SR;
break;
}
item.SiteId = siteList.FirstOrDefault(t => t.TrialSiteCode.ToUpper() == item.TrialSiteCode.ToUpper()).SiteId;
item.TrialSiteId = siteList.FirstOrDefault(t => t.TrialSiteCode.ToUpper() == item.TrialSiteCode.ToUpper()).TrialSiteId;
}
@@ -1137,12 +1050,12 @@ namespace IRaCIS.Core.API.Controllers
[DisableFormValueModelBinding]
public async Task<IResponseOutput> UploadCommonDoc()
{
return await SingleFileUploadAsync((fileName) => FileStoreHelper.GetCommonDocPath(_hostEnvironment, fileName));
}
public enum UploadFileType
{
DataUpload = 1,
@@ -1196,8 +1109,6 @@ namespace IRaCIS.Core.API.Controllers
}
}
#endregion
+20 -38
View File
@@ -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" />
@@ -68,25 +63,25 @@
<ItemGroup>
<PackageReference Include="aliyun-net-sdk-sts" Version="3.1.2" />
<PackageReference Include="AspNetCoreRateLimit" Version="5.0.0" />
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
<PackageReference Include="EasyCaching.Interceptor.Castle" Version="1.9.1" />
<PackageReference Include="EasyCaching.Serialization.MessagePack" Version="1.9.1" />
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="12.0.1" />
<PackageReference Include="EasyCaching.InMemory" Version="1.9.1" />
<PackageReference Include="Hangfire.AspNetCore" Version="1.8.5" />
<PackageReference Include="Hangfire.Dashboard.BasicAuthorization" Version="1.0.2" />
<PackageReference Include="Hangfire.SqlServer" Version="1.8.5" />
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="9.0.0" />
<PackageReference Include="ConfigMapFileProvider" Version="2.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.14" />
<PackageReference Include="Hangfire.Dashboard.BasicAuthorization" Version="1.0.2" />
<PackageReference Include="Hangfire.InMemory" Version="0.10.3" />
<PackageReference Include="Hangfire.SqlServer" Version="1.8.14" />
<PackageReference Include="Invio.Extensions.Authentication.JwtBearer" Version="2.0.1" />
<PackageReference Include="LogDashboard" Version="1.4.8" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.23" />
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="7.0.1" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.17.2" />
<PackageReference Include="Quartz.Extensions.DependencyInjection" Version="3.7.0" />
<PackageReference Include="Quartz.Extensions.Hosting" Version="3.7.0" />
<PackageReference Include="Serilog.AspNetCore" Version="7.0.0" />
<PackageReference Include="Serilog.Enrichers.ClientInfo" Version="2.0.1" />
<PackageReference Include="Serilog.Sinks.File" Version="5.0.0" />
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerUI" Version="6.5.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="8.0.6" />
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="8.0.0" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.20.1" />
<PackageReference Include="Serilog.AspNetCore" Version="8.0.1" />
<PackageReference Include="Serilog.Enrichers.ClientInfo" Version="2.0.3" />
<PackageReference Include="Serilog.Sinks.File" Version="6.0.0" />
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerUI" Version="6.6.2" />
</ItemGroup>
<ItemGroup>
@@ -99,11 +94,6 @@
</ItemGroup>
<ItemGroup>
<Content Update="appsettings.Uat_Study.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</Content>
<Content Update="wwwroot\EmailTemplate\AdminAddUser_US.html">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
@@ -164,15 +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>
<ItemGroup>
<None Remove="..\.dockerignore" />
</ItemGroup>
<ItemGroup>
<None Remove="..\.dockerignore" />
</ItemGroup>
<ProjectExtensions><VisualStudio><UserProperties properties_4launchsettings_1json__JsonSchema="" /></VisualStudio></ProjectExtensions>
</Project>
+111 -1
View File
@@ -16,7 +16,20 @@
医生基本信息 、工作信息 专业信息、审核状态
</summary>
</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.GetDoctorDetail(IRaCIS.Application.Interfaces.IAttachmentService,IRaCIS.Application.Interfaces.IDoctorService,IRaCIS.Application.Interfaces.IEducationService,IRaCIS.Application.Interfaces.ITrialExperienceService,IRaCIS.Application.Interfaces.IResearchPublicationService,IRaCIS.Application.Interfaces.IVacationService,System.Guid)">
<summary>
获取医生详情
</summary>
<param name="attachmentService"></param>
<param name="_doctorService"></param>
<param name="_educationService"></param>
<param name="_trialExperienceService"></param>
<param name="_researchPublicationService"></param>
<param name="_vacationService"></param>
<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,IRaCIS.Core.Application.Contracts.IReadingImageTaskService,Microsoft.Extensions.Options.IOptionsMonitor{IRaCIS.Core.Domain.Share.ServiceVerifyConfigOption},IRaCIS.Application.Services.IMailVerificationService)">
<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})">
@@ -28,6 +41,49 @@
<param name="param"></param>
<returns>新记录Id</returns>
</member>
<member name="M:IRaCIS.Core.API.Controllers.Special.FinancialChangeController.WorkLoadAddOrUpdate(IRaCIS.Application.Services.IDoctorWorkloadService,IRaCIS.Application.Contracts.WorkloadCommand)">
<summary>
添加或更新工作量[AUTH]
</summary>
<param name="_trialWorkloadService"></param>
<param name="workLoadAddOrUpdateModel"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.API.Controllers.Special.FinancialChangeController.AddOrUpdateExchangeRate(IRaCIS.Application.Interfaces.IExchangeRateService,IRaCIS.Application.Interfaces.IPaymentAdjustmentService,IRaCIS.Application.Contracts.ExchangeRateCommand)">
<summary>
添加或更新汇率(会触发没有对锁定的费用计算)
</summary>
</member>
<member name="M:IRaCIS.Core.API.Controllers.Special.FinancialChangeController.AddOrUpdateRankPrice(IRaCIS.Application.Interfaces.IReviewerPayInfoService,IRaCIS.Application.Interfaces.IRankPriceService,IRaCIS.Application.Contracts.RankPriceCommand)">
<summary>
添加或更新 职称单价[AUTH]
</summary>
</member>
<member name="M:IRaCIS.Core.API.Controllers.Special.FinancialChangeController.AddOrUpdateReviewerPayInfo(IRaCIS.Application.Interfaces.IReviewerPayInfoService,IRaCIS.Application.Contracts.ReviewerPayInfoCommand)">
<summary>
添加或更新(替换)医生支付展信息[AUTH]
</summary>
</member>
<member name="M:IRaCIS.Core.API.Controllers.Special.FinancialChangeController.AddOrUpdateTrialPaymentPrice(IRaCIS.Application.Interfaces.ITrialPaymentPriceService,IRaCIS.Application.Contracts.TrialPaymentPriceCommand)">
<summary>
保存(替换)项目支付价格信息(会触发没有被锁定的费用计算)[AUTH]
</summary>
</member>
<member name="M:IRaCIS.Core.API.Controllers.Special.FinancialChangeController.AddOrUpdateAwardPriceList(IRaCIS.Application.Interfaces.IVolumeRewardService,System.Collections.Generic.IEnumerable{IRaCIS.Application.Interfaces.AwardPriceCommand})">
<summary>
批量更新奖励费用[AUTH]
</summary>
</member>
<member name="M:IRaCIS.Core.API.Controllers.Special.FinancialChangeController.CalculateMonthlyPayment(IRaCIS.Application.Contracts.CalculateDoctorAndMonthDTO)">
<summary>
计算医生月度费用,并将计算的结果存入费用表
</summary>
</member>
<member name="M:IRaCIS.Core.API.Controllers.Special.FinancialChangeController.GetMonthlyPaymentList(IRaCIS.Application.Interfaces.IPaymentService,IRaCIS.Application.Interfaces.IExchangeRateService,IRaCIS.Application.Contracts.MonthlyPaymentQueryDTO)">
<summary>
Financials /Monthly Payment 列表查询接口
</summary>
</member>
<member name="M:IRaCIS.Core.API.Controllers.InspectionController.GetInspectionList(IRaCIS.Core.Application.Service.Inspection.DTO.GetDataInspectionDto)">
<summary>
获取稽查数据
@@ -111,6 +167,13 @@
<param name="opt"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.API.Controllers.InspectionController.SignConsistencyAnalysisReadingClinicalData(IRaCIS.Core.Application.Service.Inspection.DTO.DataInspectionDto{IRaCIS.Core.Application.Service.Reading.Dto.SignConsistencyAnalysisReadingClinicalDataInDto})">
<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>
提交结构化录入并签名
@@ -152,6 +215,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 批量提交
@@ -216,7 +285,9 @@
<summary>
上传非Dicom 文件 支持压缩包 多文件上传
</summary>
<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,IRaCIS.Core.Application.Helper.IOSSService)">
@@ -224,6 +295,35 @@
一致性核查 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.GetOfficialResume(IRaCIS.Core.API.Controllers.GetDoctorPathCommand,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Attachment})">
<summary>
New 医生首页 多选 获取多个医生信息+文件路径列表 医生压缩包名称 doctorCode + "_" + doctorName _(时间戳或者随机的Guid)
</summary>
<returns></returns>
</member>
<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>
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.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.UploadDownLoadController.DownloadCommonFile(System.String,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.CommonDocument})">
@@ -246,6 +346,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>
创建属性
@@ -261,6 +366,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>
对称可逆加密
@@ -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);
}
}
+111 -29
View File
@@ -4,8 +4,6 @@ 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;
@@ -24,10 +22,17 @@ 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;
using IP2Region.Net.Abstractions;
using IP2Region.Net.XDB;
using IRaCIS.Core.Application.BusinessFilter;
using Microsoft.AspNetCore.Http;
using IRaCIS.Core.Infrastructure.Extention;
using Newtonsoft.Json;
using Microsoft.AspNetCore.Diagnostics;
using IRaCIS.Core.Application.MassTransit.Command;
using IRaCIS.Core.Application.MassTransit.Consumer;
#region
@@ -76,8 +81,8 @@ if (urlsIndex > -1)
NewId.SetProcessIdProvider(new CurrentProcessIdProvider());
builder.Configuration.AddJsonFile("appsettings.json", false, true)
.AddJsonFile($"appsettings.{enviromentName}.json", false, true);
builder.Configuration.AddJsonFile(ConfigMapFileProvider.FromRelativePath(""), "appsettings.json", false, true)
.AddJsonFile(ConfigMapFileProvider.FromRelativePath(""), $"appsettings.{enviromentName}.json", false, true);
builder.Host
.UseServiceProviderFactory(new AutofacServiceProviderFactory())
@@ -104,19 +109,19 @@ builder.Services.AddControllers(options =>
options.Filters.Add<ModelActionFilter>();
options.Filters.Add<ProjectExceptionFilter>();
options.Filters.Add<UnitOfWorkFilter>();
options.Filters.Add<EncreptApiResultFilter>(10);
options.Filters.Add<LimitUserRequestAuthorization>();
if (_configuration.GetSection("BasicSystemConfig").GetValue<bool>("OpenLoginLimit"))
{
options.Filters.Add<LimitUserRequestAuthorization>();
}
})
.AddNewtonsoftJsonSetup(); // NewtonsoftJson 序列化 处理
.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"));
builder.Services.AddOptions().Configure<EncreptResponseOption>(_configuration.GetSection("EncrypteResponseConfig"));
builder.Services.AddOptions().Configure<SystemPacsConfig>(_configuration.GetSection("SystemPacsConfig"));
//动态WebApi + UnifiedApiResultFilter 省掉控制器代码
@@ -133,15 +138,34 @@ builder.Services.AddSwaggerSetup();
builder.Services.AddJWTAuthSetup(_configuration);
// MediatR 进程内消息 事件解耦 从程序集中 注册命令和handler对应关系
builder.Services.AddMediatR(cfg => cfg.RegisterServicesFromAssemblyContaining<ConsistencyVerificationHandler>());
//builder.Services.AddMediatR(cfg => cfg.RegisterServicesFromAssemblyContaining<ConsistencyVerificationHandler>());
#region MassTransit
//masstransit组件 也支持MediatR 中介者模式,但是支持分布式,考虑后续,所以在次替代MediatR
builder.Services.AddMediator(cfg =>
{
cfg.AddConsumer<ConsistencyCheckConsumer>();
});
builder.Services.AddMassTransit(cfg =>
{
cfg.UsingInMemory();
});
#endregion
#region FusionCache
builder.Services.AddFusionCache();
#endregion
// EasyCaching 缓存
builder.Services.AddEasyCachingSetup(_configuration);
// hangfire 定时任务框架 有界面,更友好~
builder.Services.AddhangfireSetup(_configuration);
//
builder.Services.AddQuartZSetup(_configuration);
//Serilog 日志可视化 LogDashboard日志
builder.Services.AddLogDashboardSetup();
@@ -162,12 +186,14 @@ builder.Services.AddSignalR();
builder.Services.AddSingleton<IUserIdProvider, IRaCISUserIdProvider>();
//builder.Services.AddMemoryCache();
builder.Services.AddSingleton<ISearcher>(new Searcher(CachePolicy.Content, Path.Combine(AppContext.BaseDirectory, StaticData.Folder.Resources, "ip2region.xdb")));
//builder.Services.AddExceptionHandler<GlobalExceptionHandler>();
//builder.Services.AddProblemDetails();
#region
//builder.Services.AddMemoryCache();
////上传限制 配置
//builder.Services.Configure<FormOptions>(options =>
//{
@@ -181,7 +207,6 @@ builder.Services.AddSingleton<IUserIdProvider, IRaCISUserIdProvider>();
//services.AddAuthorizationPolicySetup(_configuration);
#endregion
builder.Services.AddSingleton<ISearcher>(new Searcher(CachePolicy.Content, Path.Combine(AppContext.BaseDirectory, StaticData.Folder.Resources, "ip2region.xdb")));
#endregion
var app = builder.Build();
@@ -192,6 +217,56 @@ var env = app.Environment;
// Configure the HTTP request pipeline.
#region 400 -500
//app.UseStatusCodePagesWithReExecute("/Error/{0}");
app.UseStatusCodePages(async context =>
{
var code = context.HttpContext.Response.StatusCode;
context.HttpContext.Response.ContentType = "application/json";
if (code < 500)
{
await context.HttpContext.Response.WriteAsync(JsonConvert.SerializeObject(ResponseOutput.NotOk($"Client error, actual request error status code({code})")));
}
else
{
//ResultFilter 里面的异常并不会到这里
await context.HttpContext.Response.WriteAsync(JsonConvert.SerializeObject((ResponseOutput.NotOk($"Server error , actual request error status code({code})"))));
}
});
//app.UseExceptionHandler(o => { });
//这里没生效,原因未知,官方文档也是这种写法,也用了GlobalExceptionHandler 尝试,还是不行,怀疑框架bug
//app.UseExceptionHandler(configure =>
//{
// configure.Run(async context =>
// {
// var exceptionHandlerPathFeature = context.Features.Get<IExceptionHandlerPathFeature>();
//var ex = exceptionHandlerPathFeature?.Error;
//context.Response.ContentType = "application/json";
//if (ex != null)
//{
// var errorInfo = $"Exception: {ex.Message}[{ex.StackTrace}]" + (ex.InnerException != null ? $" InnerException: {ex.InnerException.Message}[{ex.InnerException.StackTrace}]" : "");
// await context.Response.WriteAsync(JsonConvert.SerializeObject(ResponseOutput.NotOk($"{ex?.Message}")));
// Log.Logger.Error(errorInfo);
//}
// });
//});
#endregion
//本地化
app.UseLocalization();
@@ -200,12 +275,11 @@ 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");
@@ -213,22 +287,24 @@ app.UseLogDashboard("/LogDashboard");
//hangfire
app.UseHangfireConfig(env);
#region
//app.UseMiddleware<MultiDiskStaticFilesMiddleware>();
////限流 中间件
//app.UseIpRateLimiting();
//if (env.IsDevelopment())
//{
// app.UseDeveloperExceptionPage();
//}
//else
//{
// //app.UseHsts();
//}
#endregion
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
//app.UseHsts();
}
// 特殊异常处理 比如 404
app.UseStatusCodePagesWithReExecute("/Error/{0}");
SwaggerSetup.Configure(app, env);
@@ -261,6 +337,7 @@ var hangfireJobService = app.Services.GetRequiredService<IIRaCISHangfireJob>();
await hangfireJobService.InitHangfireJobTaskAsync();
#endregion
try
@@ -296,6 +373,11 @@ try
//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();
}
+51 -5
View File
@@ -1,21 +1,67 @@
{
"$schema": "http://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:3305",
"sslPort": 0
}
},
"profiles": {
"Test_Study": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Test_IRC"
}
},
"IRaCIS.Test_IRC": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Test_Study"
"ASPNETCORE_ENVIRONMENT": "Test_IRC"
},
"applicationUrl": "http://localhost:6100"
},
"Uat_Study": {
"IRaCIS.Event_IRC": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Uat_Study"
"ASPNETCORE_ENVIRONMENT": "Event_IRC"
},
"applicationUrl": "http://localhost:6101"
"applicationUrl": "http://localhost:6100"
},
"Docker": {
"commandName": "Docker",
"launchBrowser": true,
"launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}",
"publishAllPorts": true
},
"IRaCIS.Uat_IRC": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Uat_IRC"
},
"applicationUrl": "http://localhost:6100"
},
"IRaCIS.Prod_IRC": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Prod_IRC"
},
"applicationUrl": "http://localhost:6100"
},
"IRaCIS.US_Uat_IRC": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "US_Uat_IRC"
},
"applicationUrl": "http://localhost:6100"
}
}
}
@@ -1,39 +0,0 @@
using Hangfire.Dashboard;
using System.IdentityModel.Tokens.Jwt;
using System;
using System.Linq;
using IRaCIS.Core.Domain.Share;
namespace IRaCIS.Core.API.Filter
{
//从cookie 中取值
public class hangfireAuthorizationFilter : IDashboardAuthorizationFilter
{
public bool Authorize(DashboardContext context)
{
var httpContext = context.GetHttpContext();
// Allow all authenticated users to see the Dashboard (potentially dangerous).
//return httpContext.User.Identity.IsAuthenticated;
var jwtToken = httpContext.Request.Cookies["access_token"]?.ToString();
var handler = new JwtSecurityTokenHandler();
if (handler.CanReadToken(jwtToken))
{
var jwtSecurityToken = handler.ReadJwtToken(jwtToken);
return jwtSecurityToken.Claims.Any(t => t.Type == JwtIRaCISClaimType.UserTypeEnum && (t.Value == UserTypeEnum.Admin.ToString()|| t.Value== UserTypeEnum.SuperAdmin.ToString()));
}
else
{
return false;
}
}
}
}
@@ -0,0 +1,17 @@
using Hangfire.Dashboard;
namespace IRaCIS.Core.API.Filter
{
public class hangfireAuthorizationFilter : IDashboardAuthorizationFilter
{
public bool Authorize(DashboardContext context)
{
var httpContext = context.GetHttpContext();
// Allow all authenticated users to see the Dashboard (potentially dangerous).
return httpContext.User.Identity.IsAuthenticated;
//return true;
}
}
}
@@ -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,7 @@ 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;
@@ -47,7 +51,7 @@ 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}");
@@ -147,6 +151,12 @@ namespace IRaCIS.Core.API
return;
}
}
// 如果没有找到文件,返回404
context.Response.StatusCode = 404;
context.Response.ContentType = "application/json";
await context.Response.WriteAsync(JsonConvert.SerializeObject(ResponseOutput.NotOk("File not found")));
}
@@ -1,4 +1,5 @@
using Microsoft.AspNetCore.Builder;
using IRaCIS.Core.Domain.Share;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Localization;
using System.Collections.Generic;
using System.Globalization;
@@ -12,8 +13,9 @@ namespace IRaCIS.Core.API
{
var supportedCultures = new List<CultureInfo>
{
new CultureInfo("en-US"),
new CultureInfo("zh-CN")
new CultureInfo(StaticData.CultureInfo.en_US),
new CultureInfo(StaticData.CultureInfo.zh_CN)
};
var options = new RequestLocalizationOptions
@@ -1,4 +1,6 @@
using IRaCIS.Core.API._PipelineExtensions.Serilog;
using Hangfire;
using Hangfire.Dashboard;
using IRaCIS.Core.API._PipelineExtensions.Serilog;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Serilog;
@@ -21,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());
@@ -16,7 +16,7 @@ namespace IRaCIS.Core.API
public IStringLocalizer _localizer;
public ApiResponseHandler(IOptionsMonitor<AuthenticationSchemeOptions> options,
IStringLocalizer localizer,
ILoggerFactory logger, UrlEncoder encoder, ISystemClock clock) : base(options, logger, encoder, clock)
ILoggerFactory logger, UrlEncoder encoder) : base(options, logger, encoder)
{
_localizer = localizer;
@@ -0,0 +1,86 @@
using IRaCIS.Core.Application.Auth;
using IRaCIS.Core.Domain.Share;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
namespace IRaCIS.Core.API
{
public static class AuthorizationPolicySetup
{
public static void AddAuthorizationPolicySetup(this IServiceCollection services, IConfiguration configuration)
{
services.AddAuthorization(options =>
{
//影像质控策略 只允许 CRC IQC进行操作
options.AddPolicy(IRaCISPolicy.CRC_IQC, policyBuilder =>
{
policyBuilder.RequireClaim("userTypeEnumInt", ((int)UserTypeEnum.ClinicalResearchCoordinator).ToString(), ((int)UserTypeEnum.IQC).ToString());
});
//一致性核查策略 只允许 CRC PM APM 进行操作
options.AddPolicy(IRaCISPolicy.PM_APM_CRC, policyBuilder =>
{
policyBuilder.RequireClaim("userTypeEnumInt", ((int)UserTypeEnum.ProjectManager).ToString(), ((int)UserTypeEnum.ClinicalResearchCoordinator).ToString(), ((int)UserTypeEnum.APM).ToString());
});
options.AddPolicy(IRaCISPolicy.PM_APM, policyBuilder =>
{
policyBuilder.RequireClaim("userTypeEnumInt", ((int)UserTypeEnum.ProjectManager).ToString(), ((int)UserTypeEnum.APM).ToString());
});
options.AddPolicy(IRaCISPolicy.PM_IQC, policyBuilder =>
{
policyBuilder.RequireClaim("userTypeEnumInt", ((int)UserTypeEnum.ProjectManager).ToString(), ((int)UserTypeEnum.IQC).ToString());
});
options.AddPolicy(IRaCISPolicy.PM, policyBuilder =>
{
policyBuilder.RequireClaim("userTypeEnumInt", ((int)UserTypeEnum.ProjectManager).ToString());
});
options.AddPolicy(IRaCISPolicy.IQC, policyBuilder =>
{
policyBuilder.RequireClaim("userTypeEnumInt", ((int)UserTypeEnum.IQC).ToString());
});
options.AddPolicy(IRaCISPolicy.CRC, policyBuilder =>
{
policyBuilder.RequireClaim("userTypeEnumInt", ((int)UserTypeEnum.ClinicalResearchCoordinator).ToString());
});
options.AddPolicy(IRaCISPolicy.PM_APM_CRC_QC, policyBuilder =>
{
policyBuilder.RequireClaim("userTypeEnumInt", ((int)UserTypeEnum.ProjectManager).ToString(),((int)UserTypeEnum.ClinicalResearchCoordinator).ToString(), ((int)UserTypeEnum.APM).ToString(), ((int)UserTypeEnum.IQC).ToString());
});
options.AddPolicy(IRaCISPolicy.SPM_CPM, policyBuilder =>
{
policyBuilder.RequireClaim("userTypeEnumInt", ((int)UserTypeEnum.SPM).ToString(), ((int)UserTypeEnum.CPM).ToString());
});
options.AddPolicy(IRaCISPolicy.PM_APM_SPM_CPM, policyBuilder =>
{
policyBuilder.RequireClaim("userTypeEnumInt", ((int)UserTypeEnum.ProjectManager).ToString(), ((int)UserTypeEnum.APM).ToString(),((int)UserTypeEnum.SPM).ToString(), ((int)UserTypeEnum.CPM).ToString());
});
options.AddPolicy(IRaCISPolicy.PM_APM_SPM_CPM_SMM_CMM, policyBuilder =>
{
policyBuilder.RequireClaim("userTypeEnumInt", ((int)UserTypeEnum.ProjectManager).ToString(), ((int)UserTypeEnum.APM).ToString(), ((int)UserTypeEnum.SPM).ToString(),
((int)UserTypeEnum.CPM).ToString(), ((int)UserTypeEnum.SMM).ToString(), ((int)UserTypeEnum.CMM).ToString());
});
});
}
}
}
@@ -1,5 +1,6 @@
using AutoMapper.EquivalencyExpression;
using IRaCIS.Core.Application.Service;
using IRaCIS.Core.Domain.Models;
using Microsoft.Extensions.DependencyInjection;
namespace IRaCIS.Core.API
@@ -14,11 +15,15 @@ namespace IRaCIS.Core.API
//AutoMapper.Collection.EntityFrameworkCore
automapper.AddCollectionMappers();
// 全局忽略 DomainEvents 属性
automapper.AddGlobalIgnore(nameof(Entity.DomainEvents));
#region 使 IncludeMembers 使
//mapping an EntityFramework Core DbContext-object.
//automapper.UseEntityFrameworkCoreModel<IRaCISDBContext>(services);
//automapper.ForAllMaps((a, b) => b.ForAllMembers(opt => opt.Condition((src, dest, srcMember, desMenber) =>
//{
// //// Can test When Guid? -> Guid if source is null will change to Guid.Empty
@@ -27,7 +32,7 @@ namespace IRaCIS.Core.API
// // not want to map a null Guid? value to db Guid value
//})));
#endregion
}, typeof(QCConfig).Assembly);
@@ -10,11 +10,9 @@ using System.Linq;
using System.Reflection;
using IRaCIS.Core.Domain.Models;
using IRaCIS.Core.Domain.Share;
using MediatR;
using IRaCIS.Application.Services;
using IRaCIS.Application.Interfaces;
using AutoMapper;
using Quartz;
namespace IRaCIS.Core.API
{
@@ -31,10 +29,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 +44,7 @@ namespace IRaCIS.Core.API
#endregion
//containerBuilder.RegisterType<BaseService>().As<IBaseService>().PropertiesAutowired().InstancePerLifetimeScope();
//containerBuilder.RegisterType<DictionaryService>().As<IDictionaryService>().InstancePerLifetimeScope();
@@ -59,21 +52,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任务 依赖注入
//containerBuilder.RegisterType<HttpContextAccessor>().As<IHttpContextAccessor>().SingleInstance();
//containerBuilder.RegisterType<UserInfo>().As<IUserInfo>().InstancePerLifetimeScope();
//注册hangfire任务 依赖注入
containerBuilder.RegisterType<ObtainTaskAutoCancelJob>().As<IObtainTaskAutoCancelJob>().InstancePerDependency();
+38 -4
View File
@@ -1,11 +1,17 @@
using Hangfire.SqlServer;
using Castle.Core.Logging;
using EntityFramework.Exceptions.SqlServer;
using Hangfire.SqlServer;
using IRaCIS.Core.Application.Triggers;
using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Infra.EFCore;
using IRaCIS.Core.Infra.EFCore.Interceptor;
using Medallion.Threading;
using Medallion.Threading.SqlServer;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Diagnostics;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using StackExchange.Redis;
namespace IRaCIS.Core.API
@@ -14,18 +20,35 @@ namespace IRaCIS.Core.API
{
public static void AddEFSetup( this IServiceCollection services, IConfiguration configuration)
{
//services.AddScoped<DbContext, IRaCISDBContext>();
services.AddHttpContextAccessor();
services.AddScoped<IUserInfo, UserInfo>();
services.AddScoped<ISaveChangesInterceptor, AuditEntityInterceptor>();
services.AddScoped<ISaveChangesInterceptor, DispatchDomainEventsInterceptor>();
// First, register a pooling context factory as a Singleton service, as usual:
//这个注入没有成功--注入是没问题的,构造函数也只是支持参数就好,错在注入的地方不能写DbContext
//Web程序中通过重用池中DbContext实例可提高高并发场景下的吞吐量, 这在概念上类似于ADO.NET Provider原生的连接池操作方式,具有节省DbContext实例化成本的优点
services.AddDbContext<IRaCISDBContext>(options =>
services.AddDbContext<IRaCISDBContext>((sp, options) =>
{
// 在控制台
//public static readonly ILoggerFactory MyLoggerFactory = LoggerFactory.Create(builder => { builder.AddConsole(); });
var logFactory = LoggerFactory.Create(builder => { builder.AddDebug(); });
options.UseSqlServer(configuration.GetSection("ConnectionStrings:RemoteNew").Value,
contextOptionsBuilder => contextOptionsBuilder.EnableRetryOnFailure());
options.UseLoggerFactory(logFactory);
options.UseExceptionProcessor();
options.EnableSensitiveDataLogging();
options.AddInterceptors(new QueryWithNoLockDbCommandInterceptor());
options.AddInterceptors(sp.GetServices<ISaveChangesInterceptor>());
options.UseProjectables();
@@ -49,14 +72,25 @@ namespace IRaCIS.Core.API
triggerOptions.AddTrigger<TableQuestionRowTrigger>();
//triggerOptions.AddTrigger<AddlTrialUserTrigger>();
triggerOptions.AddTrigger<VisitTaskIsFrontTaskNeedSignButNotSignTrigger>();
triggerOptions.AddTrigger<VisitTaskIAfterSignTrigger>();
triggerOptions.AddTrigger<VisitTaskIbeforeTrigger>();
triggerOptions.AddTrigger<UserLogTrigger>();
});
});
// Register an additional context factory as a Scoped service, which gets a pooled context from the Singleton factory we registered above,
//services.AddScoped<IRaCISDBScopedFactory>();
//// Finally, arrange for a context to get injected from our Scoped factory:
//services.AddScoped(sp => sp.GetRequiredService<IRaCISDBScopedFactory>().CreateDbContext());
//注意区分 easy caching 也有 IDistributedLockProvider
services.AddSingleton<IDistributedLockProvider>(sp =>
{
@@ -6,7 +6,7 @@ using Microsoft.Extensions.DependencyInjection;
namespace IRaCIS.Core.API
{
public static class EasyCachingSetup
public static class EasyCachingSetup
{
public static void AddEasyCachingSetup(this IServiceCollection services, IConfiguration configuration)
{
@@ -16,7 +16,7 @@ namespace IRaCIS.Core.API
//options.UseRedis(configuration, EasyCachingConstValue.DefaultRedisName).WithMessagePack(EasyCachingConstValue.DefaultRedisName);
});
//services.ConfigureCastleInterceptor(options => options.CacheProviderName = EasyCachingConstValue.DefaultRedisName);
@@ -13,14 +13,12 @@ namespace IRaCIS.Core.API
services.AddLogDashboard(opt =>
{
//opt.PathMatch = "/api/LogDashboard";
opt.PathMatch = "/back/logs";
opt.PathMatch = "/LogDashboard";
//opt.AddAuthorizationFilter(new LogDashboardBasicAuthFilter("admin", "zhizhun2018"));
//opt.AddAuthorizationFilter(new LogDashBoardAuthFilter());
});
}
@@ -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,49 +0,0 @@
using IRaCIS.Application.Services.BackGroundJob;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Quartz;
namespace IRaCIS.Core.API
{
public static class QuartZSetup
{
public static void AddQuartZSetup(this IServiceCollection services, IConfiguration configuration)
{
services.AddTransient<CancelTaskQuartZJob>();
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)
// .WithCronSchedule("0 0 * * * ?")
// .WithDescription("My regular trial work trigger")
//);
});
// ASP.NET Core hosting
services.AddQuartzHostedService(options =>
{
// when shutting down we want jobs to complete gracefully
options.WaitForJobsToComplete = true;
});
}
}
}
@@ -1,18 +1,30 @@
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.ResponseCompression;
using Microsoft.Extensions.DependencyInjection;
using System.IO.Compression;
namespace IRaCIS.Core.API
{
public static class ResponseCompressionSetup
public static class ResponseCompressionSetup
{
public static void AddResponseCompressionSetup(this IServiceCollection services)
{
services.AddResponseCompression(options =>
{
options.EnableForHttps = true;
options.Providers.Add<BrotliCompressionProvider>();
options.Providers.Add<GzipCompressionProvider>();
});
services.Configure<BrotliCompressionProviderOptions>(options =>
{
options.Level = CompressionLevel.Optimal;
});
services.Configure<GzipCompressionProviderOptions>(options =>
{
options.Level = CompressionLevel.Optimal;
});
}
}
}
@@ -19,11 +19,11 @@ 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.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}] {SourceContext:l} || {Message} || {Exception} ||end {NewLine}")
@@ -3,6 +3,7 @@ using Hangfire.SqlServer;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Runtime.InteropServices;
namespace IRaCIS.Core.API
{
@@ -14,19 +15,29 @@ namespace IRaCIS.Core.API
services.AddHangfire(hangFireConfig =>
{
//hangFireConfig.UseInMemoryStorage();
//指定存储介质
hangFireConfig.UseSqlServerStorage(hangFireConnStr, new SqlServerStorageOptions()
//本地window 调试 使用内存,服务器部署使用数据库,防止服务器任务调度到本地
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
SchemaName = "dbo",
CommandBatchMaxTimeout = TimeSpan.FromMinutes(5),
SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5),
QueuePollInterval = TimeSpan.Zero,
UseRecommendedIsolationLevel = true,
DisableGlobalLocks = true
});
hangFireConfig.UseInMemoryStorage();
}
else
{
//指定存储介质
hangFireConfig.UseSqlServerStorage(hangFireConnStr, new SqlServerStorageOptions()
{
SchemaName = "dbo",
CommandBatchMaxTimeout = TimeSpan.FromMinutes(5),
SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5),
QueuePollInterval = TimeSpan.Zero,
UseRecommendedIsolationLevel = true,
DisableGlobalLocks = true
});
}
//hangFireConfig.UseTagsWithSql(); //nuget引入Hangfire.Tags.SqlServer
//.UseHangfireHttpJob();
@@ -35,7 +46,7 @@ namespace IRaCIS.Core.API
services.AddHangfireServer(option =>
{
option.Queues = new[] { "immediately_once","default","sys_init" , "not_immediately_once" };
option.Queues = new[] { "immediately_once", "default", "sys_init", "not_immediately_once" };
});
}
@@ -0,0 +1,70 @@
{
"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",
"internalEndpoint": "https://oss-cn-shanghai-internal.aliyuncs.com",
"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,
"ContinuousReadingTimeMin": 120,
"ReadingRestTimeMin": 10,
"IsNeedChangePassWord": true,
"ChangePassWordDays": 90
},
"SystemEmailSendConfig": {
"Port": 465,
"Host": "smtp.qiye.aliyun.com",
"FromEmail": "uat@extimaging.com",
"FromName": "UAT_IRC",
"AuthorizationCode": "SHzyyl2021",
"SiteUrl": "http://irc.event.extimaging.com/login",
"CompanyName": "Extensive Imaging",
"CompanyNameCN": "上海展影医疗科技有限公司",
"CompanyShortName": "Extensive Imaging",
"CompanyShortNameCN": "展影医疗"
}
}
+72
View File
@@ -0,0 +1,72 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"ConnectionStrings": {
//"RemoteNew": "Server=101.132.193.237,1434;Database=Prod_IRC;User ID=sa;Password=zhanying@2021;TrustServerCertificate=true",
//"Hangfire": "Server=101.132.193.237,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",
"internalEndpoint": "https://oss-cn-shanghai-internal.aliyuncs.com",
"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": 360,
"OpenLoginMFA": false,
"ContinuousReadingTimeMin": 120,
"ReadingRestTimeMin": 10,
"IsNeedChangePassWord": true,
"ChangePassWordDays": 90
},
"SystemEmailSendConfig": {
"Port": 465,
"Host": "smtp.qiye.aliyun.com",
"FromEmail": "IRC@extimaging.com",
"FromName": "IRC",
"AuthorizationCode": "ExtImg@2022",
"SiteUrl": "http://irc.extimaging.com/login",
"OrganizationName": "Extlmaging",
"OrganizationNameCN": "Extlmaging",
"CompanyName": "Extensive Imaging",
"CompanyNameCN": "上海展影医疗科技有限公司",
"CompanyShortName": "Extensive Imaging",
"CompanyShortNameCN": "展影医疗"
}
}
+94
View File
@@ -0,0 +1,94 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"ConnectionStrings": {
"RemoteNew": "Server=106.14.89.110,1435;Database=Test_IRC;User ID=sa;Password=xc@123456;TrustServerCertificate=true",
"Hangfire": "Server=106.14.89.110,1435;Database=Test_IRC_Hangfire;User ID=sa;Password=xc@123456;TrustServerCertificate=true"
},
"ObjectStoreService": {
"ObjectStoreUse": "AliyunOSS",
"AliyunOSS": {
"regionId": "cn-shanghai",
"internalEndpoint": "https://oss-cn-shanghai-internal.aliyuncs.com",
"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": "hir-oss.test.extimaging.com",
"port": "443",
"useSSL": true,
"accessKey": "fbStsVYCIPKHQneeqMwD",
"secretKey": "TzgvyA3zGXMUnpilJNUlyMYHfosl1hBMl6lxPmjy",
"bucketName": "irc-test",
"viewEndpoint": "https://hir-oss.test.extimaging.com/irc-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": 1,
"OpenLoginMFA": false,
"ContinuousReadingTimeMin": 120,
"ReadingRestTimeMin": 10,
"IsNeedChangePassWord": true,
"ChangePassWordDays": 90
},
"SystemEmailSendConfig": {
"Port": 465,
"Host": "smtp.qiye.aliyun.com",
"FromEmail": "test@extimaging.com",
"FromName": "Test_IRC",
"AuthorizationCode": "SHzyyl2021",
"SiteUrl": "http://irc.test.extimaging.com/login",
"OrganizationName": "Extlmaging",
"OrganizationNameCN": "Extlmaging",
"CompanyName": "Extensive Imaging",
"CompanyNameCN": "上海展影医疗科技有限公司",
"CompanyShortName": "Extensive Imaging",
"CompanyShortNameCN": "展影医疗"
},
"SystemPacsConfig": {
"Port": "11113",
"IP": "106.14.89.110"
}
}
@@ -0,0 +1,88 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"ConnectionStrings": {
"RemoteNew": "Server=us-prod-mssql-service,1433;Database=US_IRC;User ID=sa;Password=xc@123456;TrustServerCertificate=true",
"Hangfire": "Server=us-prod-mssql-service,1433;Database=US_IRC_Hangfire;User ID=sa;Password=xc@123456;TrustServerCertificate=true"
//"RemoteNew": "Server=44.210.231.169,1435;Database=US_IRC;User ID=sa;Password=xc@123456;TrustServerCertificate=true",
//"Hangfire": "Server=44.210.231.169,1435;Database=US_IRC_Hangfire;User ID=sa;Password=xc@123456;TrustServerCertificate=true",
},
"ObjectStoreService": {
"ObjectStoreUse": "AWS",
"AliyunOSS": {
"regionId": "cn-shanghai",
"internalEndpoint": "https://oss-cn-shanghai-internal.aliyuncs.com",
"endPoint": "https://oss-cn-shanghai.aliyuncs.com",
"accessKeyId": "",
"accessKeySecret": "",
"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": "44.210.231.169",
"port": "9001",
"useSSL": false,
"accessKey": "e9bT1isTOqSAUxb6wd4n",
"secretKey": "b5TaDzNdQCBtCvfm8eZ3dR6yY7tfZu2JYze2Po1i",
"bucketName": "prod-irc-us",
"viewEndpoint": "http://44.210.231.169:9001/prod-irc-us/"
},
"AWS": {
"endPoint": "s3.us-east-1.amazonaws.com",
"useSSL": true,
"accessKey": "AKIAW3MEAFJX5P32P6NA",
"secretKey": "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",
"bucketName": "ei-med-s3-lili-store",
"viewEndpoint": "https://ei-med-s3-lili-store.s3.amazonaws.com/"
}
},
"BasicSystemConfig": {
"OpenUserComplexPassword": false,
"OpenSignDocumentBeforeWork": false,
"OpenTrialRelationDelete": true,
"OpenLoginLimit": false,
"LoginMaxFailCount": 5,
"LoginFailLockMinutes": 30,
"AutoLoginOutMinutes": 60,
"ContinuousReadingTimeMin": 120,
"ReadingRestTimeMin": 10,
"IsNeedChangePassWord": true,
"ChangePassWordDays": 90
},
"SystemEmailSendConfig": {
"Port": 587,
"Host": "smtp-mail.outlook.com",
"FromEmail": "donotreply@elevateimaging.ai",
"FromName": "LiLi",
"AuthorizationCode": "Q#669869497420ul",
"OrganizationName": "Elevate Imaging",
"OrganizationNameCN": "Elevate Imaging",
"CompanyName": "Elevate Imaging Inc.",
"CompanyNameCN": "上海展影医疗科技有限公司",
"CompanyShortName": "Elevate Imaging",
"CompanyShortNameCN": "展影医疗",
"SiteUrl": "https://lili.elevateimaging.ai/login"
}
}
@@ -0,0 +1,94 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"ConnectionStrings": {
"RemoteNew": "Server=106.14.89.110,1435;Database=Test_IRC;User ID=sa;Password=xc@123456;TrustServerCertificate=true",
"Hangfire": "Server=106.14.89.110,1435;Database=Test_IRC_Hangfire;User ID=sa;Password=xc@123456;TrustServerCertificate=true"
},
"ObjectStoreService": {
"ObjectStoreUse": "MinIO",
"AliyunOSS": {
"regionId": "cn-shanghai",
"internalEndpoint": "https://oss-cn-shanghai-internal.aliyuncs.com",
"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": "hir-oss.uat.extimaging.com",
//"port": "443",
//"useSSL": true,
//"viewEndpoint": "https://hir-oss.uat.extimaging.com/hir-uat",
"endPoint": "47.117.164.182",
"port": "9001",
"useSSL": false,
"viewEndpoint": "http://47.117.164.182:9001/test-irc-us",
"accessKey": "b9Ul0e98xPzt6PwRXA1Q",
"secretKey": "DzMaU2L4OXl90uytwOmDXF2encN0Jf4Nxu2XkYqQ",
"bucketName": "test-irc-us"
},
"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,
"ContinuousReadingTimeMin": 120,
"ReadingRestTimeMin": 10,
"IsNeedChangePassWord": true,
"ChangePassWordDays": 90
},
"SystemEmailSendConfig": {
"Port": 587,
"Host": "smtp-mail.outlook.com",
"FromEmail": "donotreply@elevateimaging.ai",
"FromName": "LiLi",
"AuthorizationCode": "Q#669869497420ul",
"OrganizationName": "Elevate Imaging",
"OrganizationNameCN": "Elevate Imaging",
"CompanyName": "Elevate Imaging Inc.",
"CompanyNameCN": "上海展影医疗科技有限公司",
"CompanyShortName": "Elevate Imaging",
"CompanyShortNameCN": "展影医疗",
"SiteUrl": "https://lili.test.elevateimaging.ai/login"
}
}
@@ -0,0 +1,88 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"ConnectionStrings": {
"RemoteNew": "Server=us-mssql-service,1433;Database=US_Uat_IRC;User ID=sa;Password=xc@123456;TrustServerCertificate=true",
"Hangfire": "Server=us-mssql-service,1433;Database=US_Uat_IRC_Hangfire;User ID=sa;Password=xc@123456;TrustServerCertificate=true"
//"RemoteNew": "Server=3.226.182.187,1435;Database=US_Uat_IRC;User ID=sa;Password=xc@123456;TrustServerCertificate=true",
//"Hangfire": "Server=3.226.182.187,1435;Database=US_Uat_IRC_Hangfire;User ID=sa;Password=xc@123456;TrustServerCertificate=true"
},
"ObjectStoreService": {
"ObjectStoreUse": "AWS",
"MinIO": {
//"endPoint": "hir-minio.uat.elevateimaging.ai",
//"port": "443",
//"useSSL": true,
//"viewEndpoint": "https://hir-minio.uat.elevateimaging.ai/uat-irc-us",
"endPoint": "3.226.182.187",
"port": "9001",
"useSSL": false,
"viewEndpoint": "http://44.218.11.19:9001/uat-irc-us",
"accessKey": "lH8DkKskLuDqPaiubuSQ",
"secretKey": "pdPdicvvLeH7xAC5yFUrI7odMyBfOXxvVWMvKYV4",
"bucketName": "uat-irc-us"
},
"AWS": {
"endPoint": "s3.us-east-1.amazonaws.com",
"useSSL": true,
"accessKey": "AKIAW3MEAFJXUO6XYFYN",
"secretKey": "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",
"bucketName": "ei-med-s3-lili-uat-store",
"viewEndpoint": "https://ei-med-s3-lili-uat-store.s3.amazonaws.com/"
}
},
"BasicSystemConfig": {
"OpenUserComplexPassword": false,
"OpenSignDocumentBeforeWork": false,
"OpenTrialRelationDelete": true,
"OpenLoginLimit": false,
"LoginMaxFailCount": 5,
"LoginFailLockMinutes": 30,
"AutoLoginOutMinutes": 60,
"ContinuousReadingTimeMin": 120,
"ReadingRestTimeMin": 10,
"IsNeedChangePassWord": true,
"ChangePassWordDays": 90,
"OpenLoginMFA": true
},
"SystemEmailSendConfig": {
"Port": 587,
"Host": "smtp-mail.outlook.com",
"FromEmail": "donotreply@elevateimaging.ai",
"FromName": "LiLi",
"AuthorizationCode": "Q#669869497420ul",
"OrganizationName": "Elevate Imaging",
"OrganizationNameCN": "Elevate Imaging",
"CompanyName": "Elevate Imaging Inc.",
"CompanyNameCN": "上海展影医疗科技有限公司",
"CompanyShortName": "Elevate Imaging",
"CompanyShortNameCN": "展影医疗",
"SiteUrl": "https://lili.test.elevateimaging.ai/login"
}
}
+85
View File
@@ -0,0 +1,85 @@
{
"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",
"internalEndpoint": "https://oss-cn-shanghai-internal.aliyuncs.com",
"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": "hir-oss.uat.extimaging.com",
"port": "80",
"useSSL": false,
"viewEndpoint": "http://hir-oss.uat.extimaging.com/irc-uat",
//"port": "443",
//"useSSL": true,
//"viewEndpoint": "https://hir-oss.uat.extimaging.com/irc-uat",
"accessKey": "b9Ul0e98xPzt6PwRXA1Q",
"secretKey": "DzMaU2L4OXl90uytwOmDXF2encN0Jf4Nxu2XkYqQ",
"bucketName": "irc-uat"
}
},
"BasicSystemConfig": {
"OpenUserComplexPassword": true,
"OpenSignDocumentBeforeWork": true,
"OpenLoginLimit": true,
"LoginMaxFailCount": 5,
"LoginFailLockMinutes": 30,
"AutoLoginOutMinutes": 60,
"OpenLoginMFA": false,
"ContinuousReadingTimeMin": 120,
"ReadingRestTimeMin": 10,
"IsNeedChangePassWord": true,
"ChangePassWordDays": 90
},
"SystemEmailSendConfig": {
"Port": 465,
"Host": "smtp.qiye.aliyun.com",
"FromEmail": "uat@extimaging.com",
"FromName": "UAT_IRC",
"AuthorizationCode": "SHzyyl2021",
"SiteUrl": "http://irc.uat.extimaging.com/login",
"OrganizationName": "Extlmaging",
"OrganizationNameCN": "Extlmaging",
"CompanyName": "Extensive Imaging",
"CompanyNameCN": "上海展影医疗科技有限公司",
"CompanyShortName": "Extensive Imaging",
"CompanyShortNameCN": "展影医疗"
},
"SystemPacsConfig": {
"Port": "11113",
"IP": "47.117.164.182"
}
}
@@ -1,50 +0,0 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"ObjectStoreService": {
"ObjectStoreUse": "AliyunOSS",
"AliyunOSS": {
"regionId": "cn-shanghai",
"endpoint": "https://oss-cn-shanghai.aliyuncs.com",
"accessKeyId": "LTAI5tL9GrNqqvCWYWtfVfn9",
"accessKeySecret": "YAZuoDTenF7ljLcDPgNjvh93KemAxk",
"bucketName": "tl-med-sir-uat-store",
"roleArn": "acs:ram::1078130221702011:role/uat-oss-access",
"viewEndpoint": "https://tl-med-sir-uat-store.oss-cn-shanghai.aliyuncs.com",
"region": "oss-cn-shanghai"
}
},
"ConnectionStrings": {
"RemoteNew": "Server=101.132.253.119,1435;Database=Uat_Study;User ID=sa;Password=xc@123456;TrustServerCertificate=true",
"Hangfire": "Server=101.132.253.119,1435;Database=Uat_Study_hangfire;User ID=sa;Password=xc@123456;TrustServerCertificate=true"
},
"BasicSystemConfig": {
"OpenUserComplexPassword": false,
"OpenSignDocumentBeforeWork": false,
"OpenTrialRelationDelete": true,
"OpenLoginLimit": false,
"LoginMaxFailCount": 5,
"LoginFailLockMinutes": 30
},
"SystemEmailSendConfig": {
"Port": 465,
"Host": "smtp.qiye.aliyun.com",
"FromEmail": "uat-study@extimaging.com",
"FromName": "Uat_Study",
"AuthorizationCode": "zhanying123",
"SiteUrl": "http://study.uat.extimaging.com/login"
}
}
+10 -6
View File
@@ -1,11 +1,10 @@
{
"JwtSetting": {
"SecurityKey": "3e6dbfa227234a03977a2f421bdb7f4f",
"Issuer": "IRaCIS",
"Audience": "ZhiZhun",
"SecurityKey": "ShangHaiZhanYing_SecurityKey_SHzyyl@2021",
"Issuer": "Extimaging",
"Audience": "EICS",
"TokenExpireDays": "7"
},
//ip
"IpRateLimiting": {
"EnableEndpointRateLimiting": true,
"StackBlockedRequests": false,
@@ -20,7 +19,6 @@
"EndpointWhitelist": [
"post:/study/archivestudy/*"
],
"IpWhitelist": [],
"GeneralRules": [
{
@@ -92,7 +90,13 @@
"DicomStudyCodePrefix": "ST",
"SystemSiteCodePrefix": "S",
"DefaultPassword": "123456",
"DefaultInternalOrganizationName": "ExtImaging",
"ImageShareExpireDays": 10
},
"EncrypteResponseConfig": {
"IsEnable": true,
"ApiPathList": [
"/test/get"
]
}
}
Binary file not shown.
@@ -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>
@@ -32,7 +32,7 @@
<div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div>祝您顺利!</div>
<div style="font-size: 14px;">展影医疗</div>
<div style="font-size: 14px;">{company}</div>
</div>
</div>
</div>
@@ -4,17 +4,17 @@
<meta charset='UTF-8'>
<title>Title</title>
</head>
<body style='font-family: Times New Roman;padding: 0;margin: 0;'>
<div style='padding-left: 40px;background: #f6f6f6;font-size: 16px'>
<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: 16px'>
<div style='line-height: 40px;font-size: 18px'>
Dear {0} ,
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;font-size: 16px'>
Extensive Imaging has generated a user account for you. <br>The account information is as follows:
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
{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;font-size: 16px'>
<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 ID: {1}
</div>
@@ -22,17 +22,17 @@
Role: {2}
</div>
<div>
Before logging in for the first time, please initialize your account information through this link:
<a href='{3}' style='margin-left:30px;font-size:12px;text-decoration: none;display: inline-block;color:#00D1B2;border-radius: 5px;line-height: 40px;text-align: center;font-size: 16px'>
Initialize 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: 16px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div>Best regards,</div>
<div style="font-size: 16px;">Extensive Imaging</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;'>
@@ -29,7 +29,7 @@
<div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div>祝您顺利!</div>
<div style="font-size: 14px;">展影医疗</div>
<div style="font-size: 14px;">{company}</div>
</div>
</div>
</div>
@@ -4,17 +4,17 @@
<meta charset='UTF-8'>
<title>Title</title>
</head>
<body style='font-family: Times New Roman;padding: 0;margin: 0;'>
<div style='padding-left: 40px;background: #f6f6f6;font-size: 16px'>
<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: 16px'>
<div style='line-height: 40px;font-size: 18px'>
Dear {0} ,
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;font-size: 16px'>
Extensive Imaging has reset your password.<br>The account information is as follows:
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
{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: 12px;border-radius: 5px;margin-left: 60px;margin-bottom: 30px;font-size: 16px'>
<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 ID: {1}
</div>
@@ -27,9 +27,9 @@
</div>
<div style='line-height: 24px;font-size: 16px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div>Best regards,</div>
<div style="font-size: 16px;">Extensive Imaging</div>
<div style="font-size: 14px;">{company}</div>
</div>
</div>
</div>
@@ -19,7 +19,7 @@
<div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div>祝您顺利!</div>
<div style="font-size: 14px;">展影医疗</div>
<div style="font-size: 14px;">{company}</div>
</div>
</div>
</div>
@@ -4,22 +4,22 @@
<meta charset='UTF-8'>
<title>Title</title>
</head>
<body style='font-family: Times New Roman;padding: 0;margin: 0;font-size: 16px'>
<div style='padding-left: 40px;background: #f6f6f6;font-size: 16px'>
<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: 16px'>
Dear Sir or Madam:
<div style='line-height: 40px;font-size: 18px'>
Dear
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;font-size: 16px'>
Thank you for using our IRC imaging system.
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
Thank you for using {company abbreviation} Cloud System.
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;font-size: 16px'>
{0}.
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
{0}
</div>
<div style='line-height: 24px;font-size: 16px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div>Best regards,</div>
<div style="font-size: 16px;">Extensive Imaging</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 })] 项目的供应商,诚邀您参加该项目阅片相关工作。
{company abbreviation}作为 [{1} (试验方案号:{2 })] 项目的供应商,诚邀您参加该项目阅片相关工作。
</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,7 +43,7 @@
<div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div>祝您顺利!</div>
<div style="font-size: 14px;">展影医疗</div>
<div style="font-size: 14px;">{company}</div>
</div>
</div>
</div>
@@ -4,20 +4,20 @@
<meta charset='UTF-8'>
<title>Title</title>
</head>
<body style='font-family: Times New Roman;padding: 0;margin: 0;'>
<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: 16px'>
<div style='line-height: 40px;font-size: 18px'>
Dear {0},
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;font-size: 16px'>
As the service provider of {1} trialProtocol ID is {2}, Extensive Imaging invites you to participate in the independent assessment work of this trial.
{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;font-size: 16px'>
Digital workflow is implemented for this trial, and your account information is as follows:
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
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;font-size: 16px'>
<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>
Trial ID: {3}
</div>
@@ -28,22 +28,23 @@
Study Name: {1}
</div>
<div>
User Name: {4}
User ID: {4}
</div>
<div>
Role: {5}
</div>
<div>
Login URL:
<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;'>
click redirect
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: 16px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div>Best regards,</div>
<div style="font-size: 16px;">Extensive Imaging</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 })] 项目的供应商,诚邀您参加该项目阅片相关工作,欢迎您提供指导和建议,非常感谢!
{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>
@@ -44,7 +44,7 @@
<div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div>祝您顺利!</div>
<div style="font-size: 14px;">展影医疗</div>
<div style="font-size: 14px;">{company}</div>
</div>
</div>
</div>
@@ -4,21 +4,20 @@
<meta charset='UTF-8'>
<title>Title</title>
</head>
<body style='font-family: Times New Roman;padding: 0;margin: 0;'>
<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: 16px'>
<div style='line-height: 40px;font-size: 18px'>
Dear {0},
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;font-size: 16px'>
As the service provider of {1}trial (Protocol ID is {2}), Extensive Imaging invites you to participate in the independent assessment work of this trial.
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
{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;font-size: 16px'>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;font-size: 16px'>
Digital workflow is implemented for this trial, and your account information is as follows:
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
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;font-size: 16px'>
<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>
Trial ID: {3}
</div>
@@ -35,17 +34,17 @@
Role: {5}
</div>
<div>
Before logging in for the first time, please modify your account information through this link:
<a href='{6}' style='margin-left:30px;font-size:16px;text-decoration: none;display: inline-block;color:#00D1B2;border-radius: 5px;line-height: 40px;text-align: center;'>
Initialize 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;font-size: 16px'>
<div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div>Best regards,</div>
<div style="font-size: 16px;">Extensive Imaging</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;'>
@@ -41,7 +41,7 @@
<div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div>祝您顺利!</div>
<div style="font-size: 14px;">展影医疗</div>
<div style="font-size: 14px;">{company}</div>
</div>
</div>
</div>
@@ -4,17 +4,17 @@
<meta charset='UTF-8'>
<title>Title</title>
</head>
<body style='font-family: Times New Roman;padding: 0;margin: 0;font-size: 16px'>
<div style='padding-left: 40px;background: #f6f6f6;font-size: 16px'>
<div style='padding-top: 20px;font-size: 16px'>
<div style='line-height: 40px;font-size: 16px'>
Dear {0} ,
<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 {0} ,
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;font-size: 16px'>
The site survey questionnaire you filled in has been rejected. Details are as follows:
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
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;font-size: 16px'>
<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>
Trial ID: {1}
</div>
@@ -28,20 +28,20 @@
Site ID: {4}
</div>
<div>
Site Name: {5}
Site name: {5}
</div>
<div>
Reason for rejection: {6}
</div>
</div>
<a href='{7}' style='margin-left:60px;font-size:16px;padding: 10px;text-decoration: none;display:{8} ;height: 40px;width: 140px;background: #00D1B2;color:#fff;border-radius: 5px;line-height: 40px;text-align: center;margin-bottom: 100px;font-size: 16px'>
Login & View
<a href='{7}' style='margin-left:60px;font-size:14px;padding: 10px;text-decoration: none;display:{8} ;height: 40px;width: 140px;background: #00D1B2;color:#fff;border-radius: 5px;line-height: 40px;text-align: center;margin-bottom: 100px;'>
Login and view
</a>
<div style='line-height: 24px;font-size: 16px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div>Best regards,</div>
<div style="font-size: 16px;">Extensive Imaging</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 })] 项目的供应商,诚邀您参加该项目相关工作,欢迎您提供指导和建议,非常感谢!
{company abbreviation}作为 [{1} (试验方案号:{2 })] 项目的供应商,诚邀您参加该项目相关工作,欢迎您提供指导和建议,非常感谢!
</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:5px;font-size:14px;text-decoration: none;display: inline-block;color:#00D1B2;border-radius: 5px;line-height: 40px;text-align: center;'>
点击跳转
</a>
</div>
@@ -44,7 +44,7 @@
<div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div>祝您顺利!</div>
<div style="font-size: 14px;">展影医疗</div>
<div style="font-size: 14px;">{company}</div>
</div>
</div>
</div>
@@ -4,20 +4,20 @@
<meta charset='UTF-8'>
<title>Title</title>
</head>
<body style='font-family: Times New Roman;padding: 0;margin: 0;font-size: 16px'>
<div style='padding-left: 40px;background: #f6f6f6;font-size: 16px'>
<div style='padding-top: 20px;font-size: 16px'>
<div style='line-height: 40px;font-size: 16px'>
<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 {0},
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;font-size: 16px'>
As the service provider of {1} trial (Protocol ID is {2}), Extensive Imaging invites you to participate in related work of this trial.
{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;font-size: 16px'>
Digital workflow is implemented for this trial, and your account information is as follows:
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
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;font-size: 16px'>
<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>
Trial ID: {3}
</div>
@@ -28,23 +28,23 @@
Study Name: {1}
</div>
<div>
User Name: {4}
User ID: {4}
</div>
<div>
Role: {5}
</div>
<div>
Login URL:
<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;'>
click redirect
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: 16px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div>Best regards,</div>
<div style="font-size: 16px;">Extensive Imaging</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 })] 项目的供应商,诚邀您参加该项目相关工作
{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>
@@ -44,7 +44,7 @@
<div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div>祝您顺利!</div>
<div style="font-size: 14px;">展影医疗</div>
<div style="font-size: 14px;">{company}</div>
</div>
</div>
</div>
@@ -4,20 +4,20 @@
<meta charset='UTF-8'>
<title>Title</title>
</head>
<body style='font-family: Times New Roman;padding: 0;margin: 0;font-size: 16px'>
<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: 16px'>
<div style='line-height: 40px;font-size: 18px'>
Dear {0},
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;font-size: 16px'>
As the service provider of {1} trial (Protocol ID is {2}), Extensive Imaging invites you to participate in related work of this trial.
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
{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;'>
Digital workflow is implemented for this trial, and your account information is 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;font-size: 16px'>
<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>
Trial ID: {3}
</div>
@@ -28,23 +28,23 @@
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 through this link:
<a href='{6}' style='margin-left:30px;font-size:16px;text-decoration: none;display: inline-block;color:#00D1B2;border-radius: 5px;line-height: 40px;text-align: center;'>
Initialize 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: 16px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div>Best regards,</div>
<div style="font-size: 16px;">Extensive Imaging</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'>
Hello {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>祝您顺利!</div>
<div style="font-size: 14px;">展影医疗</div>
<div style="font-size: 14px;">{company}</div>
</div>
</div>
</div>
@@ -4,25 +4,25 @@
<meta charset='UTF-8'>
<title>Title</title>
</head>
<body style='font-family: Times New Roman;padding: 0;margin: 0;'>
<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: 16px'>
Hello {0},
<div style='line-height: 40px;font-size: 18px'>
Dear {0},
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;font-size: 16px'>
Thank you for using our imaging system.
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
{1}
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;font-size: 16px'>
{1}, the verification code is {2}. Please enter this code within 3 minutes for follow-up operations.
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
The verification code is <span style="font-weight:bold">{2}</span>.
</div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;font-size: 16px'>
If you are not the intended person, please ignore this email.
<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;font-size: 16px'>
<div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div>Best regards,</div>
<div style="font-size: 16px;">Extensive Imaging</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 + "'}");
@@ -415,7 +420,8 @@ var abp = abp || {};
//Inputs
createInput(modalUxContent, 'tenancyName', 'Tenancy Name (Leave empty for Host)');
createInput(modalUxContent, 'userName', 'Username or email address','text','cyldev');
createInput(modalUxContent, 'password', 'Password','password','123456');
createInput(modalUxContent, 'password', 'Password', 'password', '123456');
createInput(modalUxContent, 'pwdMd5', 'PwdMd5', 'text', '');
//Buttons
var authBtnWrapper = document.createElement('div');
@@ -1,73 +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;
using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Application.ViewModel;
using IRaCIS.Core.Application.Contracts;
namespace IRaCIS.Application.Services.BackGroundJob
{
public class CancelTaskQuartZJob : IJob
{
private readonly IRepository<Subject> _subjectRepository;
private readonly ILogger<CancelTaskQuartZJob> _logger;
private readonly IRepository<VisitTask> _visitTaskRepository;
public CancelTaskQuartZJob(IRepository<Subject> subjectRepository, IEasyCachingProvider provider, ILogger<CancelTaskQuartZJob> logger, IRepository<VisitTask> visitTaskRepository)
{
_subjectRepository = subjectRepository;
_logger = logger;
_visitTaskRepository = visitTaskRepository;
}
public async Task Execute(IJobExecutionContext context)
{
_logger.LogInformation($"开始执行QuartZ定时取消任务作业");
try
{
JobDataMap dataMap = context.JobDetail.JobDataMap;
bool isInOrder = (bool)dataMap.Get("IsInOrder");
if (isInOrder)
{
Guid subjectId = (Guid)dataMap.Get("SubjectId");
Guid trialReadingCriterionId = (Guid)dataMap.Get("TrialReadingCriterionId");
await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => t.SubjectId == subjectId && t.TrialReadingCriterionId==trialReadingCriterionId, u => new VisitTask() { SubjectCriterionClaimUserId = null });
}
else
{
Guid id = (Guid)dataMap.Get("VisitTaskId");
await _visitTaskRepository.UpdatePartialFromQueryAsync(t => t.Id == id && t.ReadingTaskState!=ReadingTaskState.HaveSigned, u => new VisitTask() { DoctorUserId = null }, true);
}
}
catch (Exception e)
{
_logger.LogError($"QuartZ定时取消任务异常" + e.Message);
}
_logger.LogInformation("QuartZ定时取消任务作业结束");
}
}
}
@@ -5,10 +5,11 @@ using IRaCIS.Core.Application.Helper;
using IRaCIS.Core.Application.Service;
using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Infrastructure;
using Microsoft.EntityFrameworkCore.SqlServer.Query.Internal;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using SharpCompress.Common;
using ZiggyCreatures.Caching.Fusion;
namespace IRaCIS.Application.Services.BackGroundJob
{
@@ -21,138 +22,48 @@ namespace IRaCIS.Application.Services.BackGroundJob
Task InitHangfireJobTaskAsync();
}
public class IRaCISCHangfireJob : IIRaCISHangfireJob
public class IRaCISCHangfireJob(IRepository<Trial> _trialRepository,
IEasyCachingProvider _provider,
ILogger<IRaCISCHangfireJob> _logger,
IRepository<SystemAnonymization> _systemAnonymizationRepository,
IRepository<Internationalization> _internationalizationRepository,
IRepository<TrialEmailNoticeConfig> _trialEmailNoticeConfigRepository
) : IIRaCISHangfireJob
{
public static string JsonFileFolder = Path.Combine(AppContext.BaseDirectory, StaticData.Folder.Resources);
private readonly IRepository<Trial> _trialRepository;
private readonly IEasyCachingProvider _provider;
private readonly ILogger<IRaCISCHangfireJob> _logger;
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)
{
_trialRepository = trialRepository;
_provider = provider;
_logger = logger;
_trialEmailNoticeConfigRepository = trialEmailNoticeConfigRepository;
_internationalizationRepository = internationalizationRepository;
}
public async Task InitHangfireJobTaskAsync()
{
_logger.LogInformation("项目启动 hangfire 任务初始化 执行开始~");
//初始化国际化
//项目状态 立即加载到缓存中
await MemoryCacheTrialStatusAsync();
//创建项目缓存 定时任务
HangfireJobHelper.AddOrUpdateInitCronJob<IIRaCISHangfireJob>("RecurringJob_Cache_TrialState", t => t.MemoryCacheTrialStatusAsync(), Cron.Daily());
//初始化
await InitInternationlizationDataAndWatchJsonFileAsync();
await InternationalizationHelper.InitInternationlizationDataAndWatchJsonFileAsync(_internationalizationRepository);
//创建邮件定时任务
await InitSysAndTrialCronJobAsync();
#region
////项目状态 立即加载到缓存中
//await MemoryCacheTrialStatusAsync();
////await MemoryCacheAnonymizeData();
////创建项目缓存 定时任务
//HangfireJobHelper.AddOrUpdateInitCronJob<IIRaCISHangfireJob>("RecurringJob_Cache_TrialState", t => t.MemoryCacheTrialStatusAsync(), Cron.Daily());
#endregion
_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)));
}
#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文件变更 实时刷新数据
WatchJsonFile(usJsonPath);
WatchJsonFile(cnJsonPath);
}
public void WatchJsonFile(string filePath)
{
if (!File.Exists(filePath))
{
throw new BusinessValidationFailedException(StaticData.International("IRaCISCHangfireJob_FileNotFound"));
}
FileSystemWatcher watcher = new FileSystemWatcher(Path.GetDirectoryName(filePath), Path.GetFileName(filePath));
watcher.Changed += (sender, e) => LoadJsonFile(filePath);
watcher.EnableRaisingEvents = true;
}
private 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;
}
}
}
#endregion
public async Task InitSysAndTrialCronJobAsync()
{
@@ -194,6 +105,36 @@ namespace IRaCIS.Application.Services.BackGroundJob
}
#region
/// <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));
}
#endregion
}
+14 -5
View File
@@ -8,6 +8,8 @@ using Panda.DynamicWebApi;
using Panda.DynamicWebApi.Attributes;
using System.Diagnostics.CodeAnalysis;
using IRaCIS.Core.Domain.Share;
using Microsoft.AspNetCore.Mvc;
using ZiggyCreatures.Caching.Fusion;
namespace IRaCIS.Core.Application
{
@@ -17,7 +19,8 @@ namespace IRaCIS.Core.Application
#region
[Authorize, DynamicWebApi, UnifiedApiResultFilter]
[TypeFilter(typeof(UnifiedApiResultFilter))]
[Authorize, DynamicWebApi]
public class BaseService : IBaseService, IDynamicWebApi
{
public IMapper _mapper { get; set; }
@@ -30,7 +33,7 @@ namespace IRaCIS.Core.Application
public IWebHostEnvironment _hostEnvironment { get; set; }
public IFusionCache _fusionCache { get; set; }
public static IResponseOutput Null404NotFound<TEntity>(TEntity? businessObject) where TEntity : class
@@ -58,6 +61,9 @@ namespace IRaCIS.Core.Application
[MemberNotNull(nameof(_hostEnvironment))]
public IWebHostEnvironment _hostEnvironment { get; set; }
[MemberNotNull(nameof(_fusionCache))]
public IFusionCache _fusionCache { get; set; }
}
#endregion
@@ -79,12 +85,13 @@ namespace IRaCIS.Core.Application
[MemberNotNull(nameof(_localizer))]
public IStringLocalizer _localizer { get; set; }
[MemberNotNull(nameof(_fusionCache))]
public IFusionCache _fusionCache { get; set; }
}
[Authorize, DynamicWebApi, UnifiedApiResultFilter]
[TypeFilter(typeof(UnifiedApiResultFilter))]
[Authorize, DynamicWebApi]
public class BaseServiceTest<T> : IBaseServiceTest<T>, IDynamicWebApi where T : Entity
{
public IMapper _mapper { get; set; }
@@ -95,6 +102,8 @@ namespace IRaCIS.Core.Application
public IStringLocalizer _localizer { get; set; }
public IFusionCache _fusionCache { get; set; }
public static IResponseOutput Null404NotFound<TEntity>(TEntity? businessObject) where TEntity : class
{
return new ResponseOutput<string>()
@@ -0,0 +1,71 @@
using IRaCIS.Core.Domain.Share;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.Extensions.Options;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IRaCIS.Core.Application.BusinessFilter
{
public class EncreptApiResultFilter : IAsyncResultFilter
{
private readonly IOptionsMonitor<EncreptResponseOption> _encreptResponseMonitor;
public EncreptApiResultFilter(IOptionsMonitor<EncreptResponseOption> encreptResponseMonitor)
{
_encreptResponseMonitor = encreptResponseMonitor;
}
public async Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next)
{
if(_encreptResponseMonitor.CurrentValue.IsEnable)
{
if (context.Result is ObjectResult objectResult)
{
var statusCode = objectResult.StatusCode ?? context.HttpContext.Response.StatusCode;
var objectValue = objectResult.Value;
if (objectValue is IResponseOutput)
{
var responseOutput = objectValue as IResponseOutput<object>;
var path = context.HttpContext?.Request.Path.Value?.ToLower();
if(!string.IsNullOrEmpty(path) && path.Length>5 && _encreptResponseMonitor.CurrentValue.ApiPathList.Contains(path.ToLower()))
{
if(responseOutput.IsSuccess)
{
responseOutput.Code = ApiResponseCodeEnum.ResultEncrepted;
responseOutput.Data = JsonConvert.SerializeObject(Convert.ToBase64String(Encoding.UTF8.GetBytes(responseOutput.Data.ToString())));
objectResult.Value = responseOutput;
}
}
}
}
}
await next.Invoke();
}
}
}
@@ -0,0 +1,50 @@
using Microsoft.AspNetCore.Diagnostics;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IRaCIS.Core.Application.BusinessFilter
{
/// <summary>
/// 不生效,不知道为啥
/// </summary>
public class GlobalExceptionHandler : IExceptionHandler
{
private readonly ILogger<GlobalExceptionHandler> _logger;
public GlobalExceptionHandler(ILogger<GlobalExceptionHandler> logger)
{
this._logger = logger;
}
public ValueTask<bool> TryHandleAsync(
HttpContext httpContext,
Exception exception,
CancellationToken cancellationToken)
{
httpContext.Response.ContentType = "application/json";
var ex = exception;
var errorInfo = $"Exception: {ex.Message}[{ex.StackTrace}]" + (ex.InnerException != null ? $" InnerException: {ex.InnerException.Message}[{ex.InnerException.StackTrace}]" : "");
httpContext.Response.WriteAsJsonAsync(ResponseOutput.NotOk($"{ex?.Message}"));
_logger.LogError(errorInfo);
// return true to signal that this exception is handled
return ValueTask.FromResult(false);
}
}
}
@@ -35,6 +35,8 @@ public class LimitUserRequestAuthorization : IAsyncAuthorizationFilter
public async Task OnAuthorizationAsync(AuthorizationFilterContext context)
{
var minutes = _verifyConfig.CurrentValue.AutoLoginOutMinutes;
if (_verifyConfig.CurrentValue.OpenLoginLimit)
{
if (context.ActionDescriptor.EndpointMetadata.Any(item => item is IAllowAnonymous))
@@ -58,22 +60,45 @@ public class LimitUserRequestAuthorization : IAsyncAuthorizationFilter
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(_localizer["LimitUser_AccountAuto_LoginOut"], ApiResponseCodeEnum.AutoLoginOut));
}
else
{
await _provider.SetAsync($"{_userInfo.Id.ToString()}_Online", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), TimeSpan.FromMinutes(minutes));
}
}
else
@@ -1,4 +1,5 @@
using IRaCIS.Core.Infrastructure;
using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Infrastructure;
using IRaCIS.Core.Infrastructure.Extention;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
@@ -11,13 +12,13 @@ namespace IRaCIS.Core.Application.Filter
{
private readonly ILogger<ProjectExceptionFilter> _logger;
public IStringLocalizer _localizer;
public IStringLocalizer _localizer;
public ProjectExceptionFilter(IStringLocalizer localizer, ILogger<ProjectExceptionFilter> logger)
public ProjectExceptionFilter(IStringLocalizer localizer, ILogger<ProjectExceptionFilter> logger)
{
_logger = logger;
_localizer = localizer;
}
_localizer = localizer;
}
public void OnException(ExceptionContext context)
{
//context.ExceptionHandled;//记录当前这个异常是否已经被处理过了
@@ -26,36 +27,51 @@ namespace IRaCIS.Core.Application.Filter
{
if (context.Exception.GetType().Name == "DbUpdateConcurrencyException")
{
//---并发更新,当前不允许该操作
//---并发更新,当前不允许该操作
context.Result = new JsonResult(ResponseOutput.NotOk(_localizer["ProjectException_ConcurrentUpdateNotAllowed"] + context.Exception.Message));
}
if (context.Exception.GetType() == typeof(BusinessValidationFailedException))
{
var error = context.Exception as BusinessValidationFailedException;
var error = context.Exception as BusinessValidationFailedException;
context.Result = new JsonResult(ResponseOutput.NotOk(context.Exception.Message, error!.Code));
}
else if(context.Exception.GetType() == typeof(QueryBusinessObjectNotExistException))
var info = string.Empty;
if (!string.IsNullOrWhiteSpace(error!.LocalizedKey) && StaticData.Log_Locoalize_Dic.ContainsKey(error!.LocalizedKey))
{
info = $"[{error!.LocalizedKey}]:{StaticData.Log_Locoalize_Dic[error!.LocalizedKey]}";
}
context.Result = new JsonResult(ResponseOutput.NotOk(context.Exception.Message, "", error!.Code, localizedInfo: info));
//warning 级别记录
//_logger.LogWarning($"[{error!.LocalizedKey}]:{StaticData.Log_Locoalize_Dic[error!.LocalizedKey]}");
}
else if (context.Exception.GetType() == typeof(QueryBusinessObjectNotExistException))
{
context.Result = new JsonResult(ResponseOutput.NotOk( context.Exception.Message, ApiResponseCodeEnum.DataNotExist));
context.Result = new JsonResult(ResponseOutput.NotOk(context.Exception.Message, ApiResponseCodeEnum.DataNotExist));
}
else
{
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));
_logger.LogError(context.Exception.InnerException is null ? (context.Exception.Message + context.Exception.StackTrace) : (context.Exception.InnerException?.Message + context.Exception.InnerException?.StackTrace));
}
context.ExceptionHandled = true;//标记当前异常已经被处理过了
_logger.LogError(context.Exception.InnerException is null ? (context.Exception.Message + context.Exception.StackTrace) : (context.Exception.InnerException?.Message + context.Exception.InnerException?.StackTrace));
//throw new Exception("test-result-exceptioin");
}
else
{
//继续
}
context.ExceptionHandled = true;//标记当前异常已经被处理过了
}
}
}
@@ -1,10 +1,12 @@
using EasyCaching.Core;
using IRaCIS.Core.Application.Helper;
using IRaCIS.Core.Domain.Share;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.Extensions.Localization;
using System.Text.RegularExpressions;
using ZiggyCreatures.Caching.Fusion;
using static IRaCIS.Core.Domain.Share.StaticData;
namespace IRaCIS.Core.Application.Filter
@@ -16,56 +18,41 @@ namespace IRaCIS.Core.Application.Filter
{
private readonly IEasyCachingProvider _provider;
private readonly IUserInfo _userInfo;
private readonly IFusionCache _fusionCache;
public IStringLocalizer _localizer;
private readonly List<string> _trialOptList=new List<string>();
private readonly IRepository<Trial> _trialRepository;
private readonly List<string> _trialOptList = new List<string>();
public TrialResourceFilter(IEasyCachingProvider provider, IStringLocalizer localizer , IUserInfo userInfo, string trialOpt = null, string trialOpt2 = null, string trialOpt3 = null)
public TrialResourceFilter(IFusionCache fusionCache, IRepository<Trial> trialRepository, IEasyCachingProvider provider, IStringLocalizer localizer, IUserInfo userInfo, string trialOpt = null, string trialOpt2 = null, string trialOpt3 = null)
{
_fusionCache = fusionCache;
_provider = provider;
_userInfo = userInfo;
_localizer = localizer;
//_trialOpt = trialOpt;
_trialRepository = trialRepository;
if (!string.IsNullOrWhiteSpace(trialOpt)) _trialOptList.Add(trialOpt.Trim());
if (!string.IsNullOrWhiteSpace(trialOpt)) _trialOptList.Add(trialOpt.Trim());
if (!string.IsNullOrWhiteSpace(trialOpt2)) _trialOptList.Add(trialOpt2.Trim());
if (!string.IsNullOrWhiteSpace(trialOpt3)) _trialOptList.Add(trialOpt3.Trim());
}
//public TrialResourceFilter(IEasyCachingProvider provider, IUserInfo userInfo)
//{
// _provider = provider;
// _userInfo = userInfo;
//}
//优先选择异步的方法
public async Task OnResourceExecutionAsync(ResourceExecutingContext context, ResourceExecutionDelegate next)
{
// var typeFilter = context.ActionDescriptor.EndpointMetadata.Where(t => t.GetType() == typeof(TypeFilterAttribute)).Select(t => (TypeFilterAttribute)t).ToList().FirstOrDefault();
//var _trialOptList= typeFilter.Arguments.Select(t => t.ToString()).ToList();
// var typeFilter = context.ActionDescriptor.EndpointMetadata.Where(t => t.GetType() == typeof(TypeFilterAttribute)).Select(t => (TypeFilterAttribute)t).ToList().FirstOrDefault();
//var _trialOptList= typeFilter.Arguments.Select(t => t.ToString()).ToList();
#region
// 后期列举出具体的类型,其他任何用户类型,都不允许操作
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA)
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA && _userInfo.RequestUrl.ToLower() != "TrialDocument/userConfirm".ToLower())
{
if (!_userInfo.RequestUrl.Contains("TrialDocument/userConfirm"))
{
//---对不起,您的账户没有操作权限。
context.Result = new JsonResult(ResponseOutput.NotOk(_localizer["TrialResource_NoAccessPermission"]));
//---对不起,您的账户没有操作权限。
context.Result = new JsonResult(ResponseOutput.NotOk(_localizer["TrialResource_NoAccessPermission"]));
return;
}
return;
}
#endregion
@@ -101,7 +88,7 @@ namespace IRaCIS.Core.Application.Filter
}
else
{
//---正则取请求Refer 中trialId 失败,请联系开发人员核查
//---正则取请求Refer 中trialId 失败,请联系开发人员核查
context.Result = new JsonResult(ResponseOutput.NotOk(_localizer["TrialResource_ReferTrialIdFailed"]));
}
@@ -132,20 +119,20 @@ namespace IRaCIS.Core.Application.Filter
if (matchResult.Success)
{
//有可能匹配错误 "trialId":"","documentId":"b8180000-3e2c-0016-9fe0-08da33f96236" 从缓存里面验证下
var cacheResultDic = _provider.GetAll<string>(new[] { matchResult.Value });
var trialStatusStr = cacheResultDic[matchResult.Value.ToLower()].Value;
trialIdStr = matchResult.Value;
if (!string.IsNullOrWhiteSpace(trialStatusStr))
var trialStatusStr = await _fusionCache.GetOrSetAsync(CacheKeys.Trial(trialIdStr), _ => CacheHelper.GetTrialStatusAsync(Guid.Parse(trialIdStr), _trialRepository), TimeSpan.FromDays(7));
if (string.IsNullOrWhiteSpace(trialStatusStr))
{
trialIdStr = matchResult.Value;
//数据库 检查该项目Id不对
context.Result = new JsonResult(ResponseOutput.NotOk(_localizer["TrialResource_ReferTrialIdFailed"]));
}
}
else
{
//---正则取请求Refer 中trialId 失败,请联系开发人员核查
//---正则取请求Refer 中trialId 失败,请联系开发人员核查
context.Result = new JsonResult(ResponseOutput.NotOk(_localizer["TrialResource_ReferTrialIdFailed"]));
}
@@ -157,34 +144,12 @@ namespace IRaCIS.Core.Application.Filter
}
//通过path 或者body 找到trialId 了
if ( !string.IsNullOrWhiteSpace(trialIdStr))
if (!string.IsNullOrWhiteSpace(trialIdStr))
{
//如果没缓存数据,可能定时任务没执行或者缓存丢失 在此重新缓存
if (_provider.GetCount() == 0)
{
var _trialRepository = context.HttpContext.RequestServices.GetService(typeof(IRepository<Trial>)) as IRepository<Trial>;
var list = _trialRepository.IfNullThrowException().Select(t => new { TrialId = t.Id, TrialStatusStr = t.TrialStatusStr })
.ToList();
list.ForEach(t => _provider.Set(t.TrialId.ToString(), t.TrialStatusStr, TimeSpan.FromDays(7)));
}
var cacheResultDic = _provider.GetAll<string>(new[] { trialIdStr });
var trialStatusStr = cacheResultDic[trialIdStr].Value;
//意外 导致缓存过期,调整服务器时间,测试不想重启程序
if (string.IsNullOrWhiteSpace(trialStatusStr))
{
var trialRepository = context.HttpContext.RequestServices.GetService(typeof(IRepository<Trial>)) as IRepository<Trial>;
trialStatusStr = trialRepository?.Where(t => t.Id == Guid.Parse(trialIdStr)).Select(t => t.TrialStatusStr).FirstOrDefault();
}
var trialStatusStr = await _fusionCache.GetOrSetAsync(CacheKeys.Trial(trialIdStr), _ => CacheHelper.GetTrialStatusAsync(Guid.Parse(trialIdStr), _trialRepository), TimeSpan.FromDays(7));
// 这里是统一拦截 项目有关的操作允许情况(特殊的地方,比如项目配置(有的在多种状态(初始化,ongoing)都可以操作,有的仅仅在Initializing)还有 项目添加和更新,不走这里,特殊处理,不然在这里显得很乱,判断是哪个接口)
if (trialStatusStr == StaticData.TrialState.TrialOngoing || _trialOptList.Any(t=>t== TrialOpt.BeforeOngoingCantOpt) )
if (trialStatusStr == StaticData.TrialState.TrialOngoing || _trialOptList.Any(t => t == TrialOpt.BeforeOngoingCantOpt))
{
await next.Invoke();
@@ -193,14 +158,14 @@ namespace IRaCIS.Core.Application.Filter
// 项目停止、或者完成 不允许操作
else
{
//---本次请求被配置规则拦截:项目状态处于进行中时,才允许操作,若此处逻辑有误,请联系开发人员修改
//---本次请求被配置规则拦截:项目状态处于进行中时,才允许操作,若此处逻辑有误,请联系开发人员修改
context.Result = new JsonResult(ResponseOutput.NotOk(_localizer["TrialResource_InterceptedProjectStatusRule"]));
}
}
//添加项目 签名系统文档的时候 不做拦截 但是更新项目 签名项目文档的时候需要拦截
else if (_trialOptList.Any(t => t == TrialOpt.AddOrUpdateTrial ||t ==TrialOpt.SignSystemDocNoTrialId))
else if (_trialOptList.Any(t => t == TrialOpt.AddOrUpdateTrial || t == TrialOpt.SignSystemDocNoTrialId))
{
await next.Invoke();
}

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